From 5139117b138791d2850381822205d0b76462e394 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=85=B1=E5=8C=85?= Date: Wed, 27 Apr 2022 11:31:18 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=20=E6=94=AF=E6=8C=81=E7=9F=AD=E4=BF=A1?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/ruoyi-vue-pro.sql | 1 + .../module/system/enums/sms/SmsSceneEnum.java | 4 +- .../controller/admin/auth/AuthController.java | 20 + .../admin/auth/vo/auth/AuthSmsLoginReqVO.java | 38 ++ .../admin/auth/vo/auth/AuthSmsSendReqVO.java | 46 +++ .../system/convert/auth/AuthConvert.java | 3 +- .../config/SecurityConfiguration.java | 4 + .../system/service/auth/AdminAuthService.java | 17 + .../service/auth/AdminAuthServiceImpl.java | 92 ++++- .../system/service/user/AdminUserService.java | 9 + .../service/user/AdminUserServiceImpl.java | 10 + yudao-ui-admin/.env.dev | 2 +- yudao-ui-admin/src/api/login.js | 27 ++ .../src/assets/images/bg-mobile.png | Bin 0 -> 12392 bytes yudao-ui-admin/src/assets/images/bg.png | Bin 0 -> 69400 bytes yudao-ui-admin/src/assets/images/icon.png | Bin 0 -> 308 bytes yudao-ui-admin/src/assets/images/pic.png | Bin 0 -> 30842 bytes yudao-ui-admin/src/assets/styles/login.scss | 387 ++++++++++++++++++ yudao-ui-admin/src/store/modules/user.js | 18 +- yudao-ui-admin/src/views/login.vue | 301 ++++++++------ 20 files changed, 838 insertions(+), 141 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSmsLoginReqVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSmsSendReqVO.java create mode 100644 yudao-ui-admin/src/assets/images/bg-mobile.png create mode 100644 yudao-ui-admin/src/assets/images/bg.png create mode 100644 yudao-ui-admin/src/assets/images/icon.png create mode 100644 yudao-ui-admin/src/assets/images/pic.png create mode 100644 yudao-ui-admin/src/assets/styles/login.scss diff --git a/sql/ruoyi-vue-pro.sql b/sql/ruoyi-vue-pro.sql index 9f3f75a0f..4d3da824d 100644 --- a/sql/ruoyi-vue-pro.sql +++ b/sql/ruoyi-vue-pro.sql @@ -11857,6 +11857,7 @@ INSERT INTO `system_sms_template` VALUES (9, 2, 0, 'bpm_task_assigned', '【工 INSERT INTO `system_sms_template` VALUES (10, 2, 0, 'bpm_process_instance_reject', '【工作流】流程被不通过', '您的流程被审批不通过:{processInstanceName},原因:{comment},查看链接:{detailUrl}', '[\"processInstanceName\",\"comment\",\"detailUrl\"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:03:31', '1', '2022-01-22 00:24:31', b'0'); INSERT INTO `system_sms_template` VALUES (11, 2, 0, 'bpm_process_instance_approve', '【工作流】流程被通过', '您的流程被审批通过:{processInstanceName},查看链接:{detailUrl}', '[\"processInstanceName\",\"detailUrl\"]', NULL, 'suibian', 4, 'DEBUG_DING_TALK', '1', '2022-01-22 00:04:31', '1', '2022-03-27 20:32:21', b'0'); INSERT INTO `system_sms_template` VALUES (12, 2, 0, 'demo', '演示模板', '我就是测试一下下', '[]', NULL, 'biubiubiu', 6, 'DEBUG_DING_TALK', '1', '2022-04-10 23:22:49', '1', '2022-04-10 23:22:49', b'0'); +INSERT INTO `system_sms_template` VALUES ('13', '1', '0', 'admin-sms-login', '后台用户短信登录', '您的验证码是{code}', '[\"code\"]', '', '4372216', '1', 'YUN_PIAN', '1', '2021-10-11 08:10:00', '1', '2021-10-11 08:10:00', '\0'); COMMIT; -- ---------------------------- diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsSceneEnum.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsSceneEnum.java index f8f267301..cb921ce1e 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsSceneEnum.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsSceneEnum.java @@ -18,8 +18,8 @@ public enum SmsSceneEnum implements IntArrayValuable { MEMBER_LOGIN(1, "user-sms-login", "会员用户 - 手机号登陆"), MEMBER_UPDATE_MOBILE(2, "user-sms-reset-password", "会员用户 - 修改手机"), - MEMBER_FORGET_PASSWORD(3, "user-sms-update-mobile", "会员用户 - 忘记密码"); - + MEMBER_FORGET_PASSWORD(3, "user-sms-update-mobile", "会员用户 - 忘记密码"), + ADMIN_MEMBER_LOGIN(21, "admin-sms-login", "后台用户 - 手机号登录"); // 如果未来希望管理后台支持手机验证码登陆,可以通过添加 ADMIN_MEMBER_LOGIN 枚举 public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SmsSceneEnum::getScene).toArray(); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java index fe31c20b4..5fc45d01a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java @@ -61,6 +61,26 @@ public class AuthController { return success(AuthLoginRespVO.builder().token(token).build()); } + @PostMapping("/sms-login") + @ApiOperation("使用短信验证码登录") + @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 + public CommonResult smsLogin(@RequestBody @Valid AuthSmsLoginReqVO reqVO) { + + + + String token = authService.smsLogin(reqVO, getClientIP(), getUserAgent()); + // 返回结果 + return success(AuthLoginRespVO.builder().token(token).build()); + } + + @PostMapping("/send-login-sms-code") + @ApiOperation(value = "发送手机验证码") + @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 + public CommonResult sendLoginSmsCode(@RequestBody @Valid AuthSmsSendReqVO reqVO) { + authService.sendSmsCode(getLoginUserId(), reqVO); + return success(true); + } + @GetMapping("/get-permission-info") @ApiOperation("获取登录用户的权限信息") public CommonResult getPermissionInfo() { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSmsLoginReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSmsLoginReqVO.java new file mode 100644 index 000000000..4360b9841 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSmsLoginReqVO.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; + +@ApiModel("管理后台 - 短信验证码的呢老姑 Request VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class AuthSmsLoginReqVO { + + @ApiModelProperty(value = "手机号", required = true, example = "yudaoyuanma") + @NotEmpty(message = "手机号不能为空") + @Length(min = 11, max = 11, message = "手机号格式错误,仅支持大陆手机号") + @Pattern(regexp = "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$", message = "账号格式为数字以及字母") + private String mobile; + + + + @ApiModelProperty(value = "短信验证码", required = true, example = "1024", notes = "验证码开启时,需要传递") + @NotEmpty(message = "验证码不能为空", groups = CodeEnableGroup.class) + private String code; + + /** + * 开启验证码的 Group + */ + public interface CodeEnableGroup {} + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSmsSendReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSmsSendReqVO.java new file mode 100644 index 000000000..a0900e02d --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/auth/AuthSmsSendReqVO.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; + +@ApiModel("管理后台 - 短信验证码的呢老姑 Request VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class AuthSmsSendReqVO { + + @ApiModelProperty(value = "手机号", required = true, example = "yudaoyuanma") + @NotEmpty(message = "手机号不能为空") + @Length(min = 11, max = 11, message = "手机号格式错误,仅支持大陆手机号") + @Pattern(regexp = "^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$", message = "账号格式为数字以及字母") + private String mobile; + + + + @ApiModelProperty(value = "短信验证码", required = true, example = "1024", notes = "验证码开启时,需要传递") + @NotEmpty(message = "验证码不能为空", groups = CodeEnableGroup.class) + private String code; + + @ApiModelProperty(value = "短信场景", required = true, example = "1") + @NotEmpty(message = "短信场景", groups = CodeEnableGroup.class) + private Integer scene; + + @ApiModelProperty(value = "验证码的唯一标识", required = true, example = "9b2ffbc1-7425-4155-9894-9d5c08541d62", notes = "验证码开启时,需要传递") + @NotEmpty(message = "唯一标识不能为空", groups = AuthLoginReqVO.CodeEnableGroup.class) + private String uuid; + + /** + * 开启验证码的 Group + */ + public interface CodeEnableGroup {} + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java index c52328cc0..a9cff93d0 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.convert.auth; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeSendReqDTO; import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; import cn.iocoder.yudao.module.system.api.social.dto.SocialUserUnbindReqDTO; import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.*; @@ -76,5 +77,5 @@ public interface AuthConvert { SocialUserBindReqDTO convert(Long userId, Integer userType, AuthSocialLogin2ReqVO reqVO); SocialUserBindReqDTO convert(Long userId, Integer userType, AuthSocialLoginReqVO reqVO); SocialUserUnbindReqDTO convert(Long userId, Integer userType, AuthSocialUnbindReqVO reqVO); - + SmsCodeSendReqDTO convert(AuthSmsSendReqVO reqVO); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/security/config/SecurityConfiguration.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/security/config/SecurityConfiguration.java index 53b99ce8c..f7c030be5 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/security/config/SecurityConfiguration.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/security/config/SecurityConfiguration.java @@ -20,6 +20,10 @@ public class SecurityConfiguration { public void customize(ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry registry) { // 登录的接口,可匿名访问 registry.antMatchers(buildAdminApi("/system/login")).anonymous(); + //手机短信验证码登录 + registry.antMatchers(buildAdminApi("/system/sms-login")).anonymous(); + //短信登录验证码接口 + registry.antMatchers(buildAdminApi("/system/send-login-sms-code")).anonymous(); // 验证码的接口 registry.antMatchers(buildAdminApi("/system/captcha/**")).anonymous(); // 获得租户编号的接口 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java index 36ef97972..ffc5315f5 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java @@ -24,6 +24,23 @@ public interface AdminAuthService extends SecurityAuthFrameworkService { */ String login(@Valid AuthLoginReqVO reqVO, String userIp, String userAgent); + /** + * 短信验证码发送 + * @param userId + * @param reqVO + */ + public void sendSmsCode(Long userId, AuthSmsSendReqVO reqVO); + + /** + * 短信登录 + * + * @param reqVO 登录信息 + * @param userIp 用户 IP + * @param userAgent 用户 UA + * @return 身份令牌,使用 JWT 方式 + */ + String smsLogin(AuthSmsLoginReqVO reqVO, String userIp, String userAgent) ; + /** * 社交登录,使用 code 授权码 * diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java index efe3d578d..734a501e5 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java @@ -8,14 +8,14 @@ import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.security.core.authentication.MultiUsernamePasswordAuthenticationToken; import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; -import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthLoginReqVO; -import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialBindReqVO; -import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLogin2ReqVO; -import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.AuthSocialLoginReqVO; +import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; +import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; +import cn.iocoder.yudao.module.system.controller.admin.auth.vo.auth.*; import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; +import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; import cn.iocoder.yudao.module.system.service.common.CaptchaService; import cn.iocoder.yudao.module.system.service.logger.LoginLogService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; @@ -41,6 +41,7 @@ import java.util.Objects; import java.util.Set; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static java.util.Collections.singleton; @@ -74,6 +75,10 @@ public class AdminAuthServiceImpl implements AdminAuthService { @Resource private Validator validator; + @Resource + private SmsCodeApi smsCodeApi; + + @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // 获取 username 对应的 AdminUserDO @@ -110,6 +115,58 @@ public class AdminAuthServiceImpl implements AdminAuthService { return createUserSessionAfterLoginSuccess(loginUser, LoginLogTypeEnum.LOGIN_USERNAME, userIp, userAgent); } + @Override + public void sendSmsCode(Long userId, AuthSmsSendReqVO reqVO) { + + this.verifyCaptchaSmsSend(reqVO); + //登录场景,验证是否存在 + if(reqVO.getScene().compareTo(SmsSceneEnum.ADMIN_MEMBER_LOGIN.getScene())==0) { + if (userService.getUserByMobile(reqVO.getMobile()) == null) { + throw exception(USER_NOT_EXISTS); + } + } + // TODO 要根据不同的场景,校验是否有用户 + smsCodeApi.sendSmsCode(AuthConvert.INSTANCE.convert(reqVO).setCreateIp(getClientIP())); + } + + + /** + * 短信登录 + */ + @Override + public String smsLogin(AuthSmsLoginReqVO reqVO, String userIp, String userAgent) { + + /* 从 Member的AuhtConvert中拷贝出来的,没单独写类 */ + if ( reqVO == null) { + return null; + } + + SmsCodeUseReqDTO smsCodeUseReqDTO = new SmsCodeUseReqDTO(); + smsCodeUseReqDTO.setMobile( reqVO.getMobile() ); + smsCodeUseReqDTO.setCode( reqVO.getCode() ); + smsCodeUseReqDTO.setScene( SmsSceneEnum.ADMIN_MEMBER_LOGIN.getScene() ); + smsCodeUseReqDTO.setUsedIp(userIp); + smsCodeApi.useSmsCode(smsCodeUseReqDTO); + + // 获得用户信息 + AdminUserDO user = userService.getUserByMobile(reqVO.getMobile()); + + + if(user==null) + { + throw exception(USER_NOT_EXISTS); + } + + cn.hutool.core.lang.Assert.notNull(user, "获取用户失败,结果为空"); + + // 执行登陆 + this.createLoginLog(user.getMobile(),LoginLogTypeEnum.LOGIN_MOBILE, LoginResultEnum.SUCCESS); + LoginUser loginUser = buildLoginUser(user); + + // 缓存登陆用户到 Redis 中,返回 sessionId 编号 + return createUserSessionAfterLoginSuccess(loginUser, LoginLogTypeEnum.LOGIN_MOBILE, userIp, userAgent); + } + private void verifyCaptcha(AuthLoginReqVO reqVO) { // 如果验证码关闭,则不进行校验 if (!captchaService.isCaptchaEnable()) { @@ -159,6 +216,33 @@ public class AdminAuthServiceImpl implements AdminAuthService { return (LoginUser) authentication.getPrincipal(); } + /** + * 验证验证码并发送短信 + * @param reqVO + */ + private void verifyCaptchaSmsSend(AuthSmsSendReqVO reqVO) { + // 如果验证码关闭,则不进行校验 + if (!captchaService.isCaptchaEnable()) { + return; + } + // 校验验证码 + ValidationUtils.validate(validator, reqVO, AuthLoginReqVO.CodeEnableGroup.class); + // 验证码不存在 + final LoginLogTypeEnum logTypeEnum = LoginLogTypeEnum.LOGIN_USERNAME; + String code = captchaService.getCaptchaCode(reqVO.getUuid()); + if (code == null) { + throw exception(AUTH_LOGIN_CAPTCHA_NOT_FOUND); + } + // 验证码不正确 + if (!code.equals(reqVO.getCode())) { + // 创建登录失败日志(验证码不正确) + throw exception(AUTH_LOGIN_CAPTCHA_CODE_ERROR); + } + // 正确,所以要删除下验证码 + captchaService.deleteCaptchaCode(reqVO.getUuid()); + } + + private void createLoginLog(String username, LoginLogTypeEnum logTypeEnum, LoginResultEnum loginResult) { // 获得用户 AdminUserDO user = userService.getUserByUsername(username); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java index 78d6a88a9..d6a836f01 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java @@ -97,6 +97,15 @@ public interface AdminUserService { */ AdminUserDO getUserByUsername(String username); + /** + * 通过手机号获取用户 + * + * @param mobile 手机号 + * @return 用户对象信息 + */ + AdminUserDO getUserByMobile(String mobile); + + /** * 获得用户分页列表 * diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index 32f0a8e8c..576cec4a8 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -168,6 +168,16 @@ public class AdminUserServiceImpl implements AdminUserService { return userMapper.selectByUsername(username); } + /** + * 通过手机号获取用户 + * @param mobile + * @return + */ + @Override + public AdminUserDO getUserByMobile(String mobile) { + return userMapper.selectByMobile(mobile); + } + @Override public PageResult getUserPage(UserPageReqVO reqVO) { return userMapper.selectPage(reqVO, this.getDeptCondition(reqVO.getDeptId())); diff --git a/yudao-ui-admin/.env.dev b/yudao-ui-admin/.env.dev index ac8b8b096..db9e33854 100644 --- a/yudao-ui-admin/.env.dev +++ b/yudao-ui-admin/.env.dev @@ -5,7 +5,7 @@ ENV = 'development' VUE_APP_TITLE = 芋道管理系统 # 芋道管理系统/开发环境 -VUE_APP_BASE_API = 'http://192.168.225.2' +VUE_APP_BASE_API = 'http://localhost:48080' # 路由懒加载 VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/yudao-ui-admin/src/api/login.js b/yudao-ui-admin/src/api/login.js index 740f49795..92cbbeba9 100644 --- a/yudao-ui-admin/src/api/login.js +++ b/yudao-ui-admin/src/api/login.js @@ -100,3 +100,30 @@ export function socialUnbind(type, unionId) { } }) } + +// 获取登录验证码 +export function sendLoginSmsCode(mobile,scene,uuid,code) { + var datas = { + mobile + ,scene + ,uuid, + code + }; + return request({ + url: '/system/send-login-sms-code', + method: 'post', + data: datas + }) +} + +// 短信验证码登录 +export function smsLogin(mobile, code) { + return request({ + url: '/system/sms-login', + method: 'post', + data: { + mobile, + code + } + }) +} \ No newline at end of file diff --git a/yudao-ui-admin/src/assets/images/bg-mobile.png b/yudao-ui-admin/src/assets/images/bg-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..92f31781e12f69a4ff1ee10b5ea7b95d43985c12 GIT binary patch literal 12392 zcmbVyby(AH*sn+`DTs83QjQb_N2h>v#}Mh38r?{DH%OPHGy>8fJ$iHx7&&@y=I>nZ zxvux$vw!y7_1yR8u5H)8;VPeH@t;#ZfAZuBzPy~2+LI?};3rSeIdRZYoU}pWNfhx! zMNvaq)=}~Ce_k@aTkz9s6m@)cdwPnH@!!0?xjWc}|Bw7p%6skqo+UlDq$h^+_tRVV@_xfmWNPD1-tYZ_E?7+UW?<<$>Ks(E@}m*%_=BLDZkci~!E$I)hDkY_$LzU8Q7;N+^eE4Tajw66T9 zrue+2?x4EhxVH4Nv-Ri5>3&MY)vubLBPT9di-)yE*L~eLe|{h4r);N3!mEq+@{`~t zIoGX?`^6cs(yZ&=uEUb-o7TpQ)`r{8_MQAh)1-alMCjL)6_ey;P{NXV`kGc1ZI)3?pA(in!0M8y=j%T;aIr)C285Ic;EiVj(g>iYuSNv z;G|{dx@FdeZQizC^t?wETr(76le48BGHsK)^(6^v6u+n&HD{f(X`8pDA2Y8SG^z1@ zS|@T=JAB3{e#xO=*Di0{^C#RaeN8QR%B%WVCt}vS=ENd%T{m*hDtp5;bww{~PCH`O zr}o6R{?t5UO)GpxKYHHb$IfT}@x$mqgO~-auo=xT$U&t48rXb4%zMT4t3$z#W5KRr z?83Lgy|a|qqnO~m?;d^)XS+eJdm&)^{GFXZ7g)G2JTBBIZgI=cQOR%IG;LKsW?|jK za>L8osd(=^Eq=jHXW0p~=%5FRUve#jDf*5ku-0kb&?Qq zk{G$+ZM*4Xrxr3bXQi$c202ZNw#Zmpax~Zua570=xys2fNm=p#b&kkPzW$M|;4^xe zoobu_)r+1Bt%bSftr|u_zQ)a3r9mCDmhICPOcNJ<%Xi!gH!YLq*FxP^{A>ZC6V9lS zaCA}otp4PiivtLY91X)92iNuum<^Ab)zFC3g!r=+$bgVuOGQpshVPvxDI?1V1)!hCO!$gX#cs>rU zW_cJr6A8;Ftxe$sB-3y~US(yTBvI50B4QPO-a3&=W5)CTP_o49KT;$scmQt)#dmEE zZuFBcSQkW8EWPYUK3wHEAAbm49a$I~-I3hAfF5@oVLpcJYFj>Fj@Ad?c-YXgjv<3v zT7aT`Q9kMpV3-{8*j&7&PY0MuVXHb zwCC$I#SWW%tyy@ntgB8(Yh*}M-1+wyEOa&f-ach4awEq7XX~xCgTryMvr?$lu`RWx z`SXD)$4ocZ)T#&W>{}&iSjQyA?^QjEVvb|3x^2~KFQF0ex7S567g_`Av4f&*jtOTb ziB;#iVRVpf$D$jMpQa`aCQuc~kLixBj|ZNG-1QXv;RO|+#~Y0) z&fKXi3qXICXc3OXkh54Mn(j97qjI;se~+b|EEGHZEVOR5e^yNz?by)xG2E9_ozXYf zSFEi1aq%`x2h8anF?x#Cb9o7ZFJ~mDy?%~97>oqv_WXTL?llb6dQ!q zUwn`fHS!6uf_kWSx}Rz>h8^|K+z zThs}a0Lv0tMX#Ha1vTdwTk5MHE{~SF@ykQz)iko@PYPyg+S+7Jan*qzZMa@e2kfWC zK$ABJ@_qES@+Ew{S-q1iUAy|tD--pYQ3cCMr%$bX39MW_2W8pbrP2;#<^85 zl3>o?VCqc{%f+f;qqN%!N@KNB;CKiVpKLx+W_Gga>dD7m04L%Eukl^n+um2(OGCk2 z_<|HzhRDk!{iZ=O6C3;5KTORo=JMdTkaa@!X9!_1{65H?VXT2o2`ia}7#=lH?E-6J zK%D%If7`nfMOidgqc{Z5G9`CGoap-|Ix?&rYo~=QFNDJ-%0n%JY=s7$-?R~_Y0(^y zfr!L32uHc6k7kOlr4Dc#{Bai2%971nmtv>Sv{_)5jqT$yt~EPTZXo zSh_%dCMM_J=ihQ9hsX|`hrv(}tSP6q6Z`FvlHST#i6obQ74 z7!auLilIfBd#G;>b)#3gm(V)iznM~`PtfHZ-pZ+eh1R`6mf&gmjtZxJedL1o(bHU% z=&f&l>6Q2Ogal*UHrcS@4}Zr~j_)~IKE}q;y&VGSPQuYIxC=zei*LI&N2i%rPPXk^ z9*g5nZ3Gb$7Y#337R#GB9Lacldh>f==&^LzVFpiYmlU0rucB^4-y;TcGlmQ|! zbq~j?;ox<$UPnPkbeiy+iy>Dse%~UE<2{|%*RGxpWtu5%rKcRfJY@&i5(sO`D&yAQ zI^GA)6ztK^93e0k0(j89oSEJ3KjqWvnGgDAFNOO!1k9fvkhFJ6ndim75w6i50h96g z%2$A0;#y!Yz#Iu8%EfJ^6f&QDEK4zoa?U>K!o3uHEQ78IyL7)bB?MZenIiH};+Fr~ zF6*fT9{iqzgns|5dOg!oXV5+uNz+*f8IWBZtVdV>u3Fp{cB&xZ(d~0^z&8(< z=m)SNPF;mMEe@R0PM0yGLBz1lO)mej=A&l#pMHQ2kQ|zaNNe#)c872D1D+w)Hd#L% z(v#Tazxd$W4HIYg8q}e#-)xH{?=(gjpXk#FxTzTVAG|e3K@RFRk08{z5K`2E|1l?* z12%hLsbmF_ueQC=^ZBR>oPUuwM8MAdIU8e)dkEIO7S5!xTyMKqy(|fPENBXaTJ!r> zocC^kVsHCEIZzcf70#hR_Q%_qpzC2 za;3$CSS8nhsTGA5SL+yWcG?14WXnPL83iiF&x>Azdk{vz2_p(zNB#LhEPD;QHWrLS zItoYR!4zH%Z!WgeU9#in-Mr!cwa{a)} z7i?@5zc&(Hc<5!Tnr4I)6bft`emY)aJ|-Kzs=uJ|<5|Ixpl@`=`Y;mEfyP(ttgM!zYi&HvCaLHukOw57G@p0QYt?Kl0 zRCE3dc3+mVPQo&9tRR}^z>b7xy2?L*a4ojKYbj6TH?%c;7>zpgM}elM5rp}zxFjgN zaQh6wF!|Tl)coLp4Q*(smF?_!>0g4giRaN`{~6fdczhvuSt^jv__$K8Fjzk|Z z{D=^ASn+mv3R5nlSTIDblZq=uSx0D8)Jo*uTNzYw?|#3t>>|k0m4gTNq7qqMJy{sy zB{CJBNRR5U4hLl6tHUnsz#S3xV$an(Po;TrY0}|}-Y`&&Cnz_9?25R!kZAP3dpqwR z3f>*&VX?i$d4Y;I6(F!6Df1M6YK|=grF}c%P$FQ0?N)d^5=qqg2j=q(MhC)D)N4s4 zU2k!w>P(ms^}T;zwTN#*+!W=(4fTjY*)(W*4W5{`#4oq}qb~lDVRz!F1-MC8DT3_y zEbL}nDdV&YL?w4xp&SJ50q=^S&I*f13`_@6B-@%$i?pif&6wLMmnW7mc)#PWp^vA& zkJaJf3#H}rkAv`gRPXp4`Xm+~hV3eO51a%0}MGZ#yJfNMQyd~Vja^;bFb@t z#2xpt8r|Kz<-~kPJNZKPG%A;|$cLk-{=>ZTr<2)B*U8OY!85s>m<{IGA#!utAN~cM z_?q&Vp+`ME`iwmW74?JZ4|!*|HSt>k$s9h#EKhRe&{p9r3T2*8kR~%i-p-y#fwBSH z9+eSe#L$pT;^pCYHUGUav-<>3B7 zXkk7-FZrE=dvToP2`%5>7|)kJ<_}&pOowa6wBLnyVdv+gSTgfUMOdcbG1TabJPuH3 zt-wp^D*W3}0gaDi=zPIu`49%!;zCvIJQB|U8mWW^OVo6a1jXG>mnbOxtw9IEf>_`G zo2%&?lF;-o;2X3QVF0Sx{ce-8fy`s|4iqsUIaqytG?p85k}j)H`(Iq0*`}d1d7^J( zD*pKy!zMQogrUB#i=J|z0e^@Hk4(@K`#W7=2b{e`pevBbL`8R-leKI5paOq#<@b+HR{**4hjO$W~IQ@ug^lyip zc>@&=>6d~|O^i0?2s{;iJT9wc)13y~hn*qWLH|kssQ(p;kus&o34V*p$M27KLCI`a z8H`!l&cvM?5T?D6T+v653^up5hOaHo|0W0|f}OS~`4rGEuWs2KhT4z0lCaME+z#g@ zc~gbW>mPD6B4`=M-(QhUT08pJTm z0ap2^taUf=j@<1P{^cNz*1eOO13!DD@w|Zaak%i$>+QUiZr}RwcTffCS#+@JKlRD^ zsqUHqB%t#>js87MqT^dzZlzy$;hALP+<-BNQVC-$x0kQFgJNuD#ML8=Ex%VODv!6#HlmP(t-K^rC_0VgaH^aOL!%Y`}C30 zA8#{nrQIlm3J%=wj172$O0i(3C06Zcg0hRmS;l|&kG3&2uhWiRobPvThJ%zLnYrkI zP`pJS`GQV^{BV$Asi5+Dgcq%LUiJ9-XvbBj#J?yI;3dbN4wbzts#jMWe(1!VS&)NK zlID$^V)xs}gl)v;>X%*sHo_B0`LlW8s3^dD6h4bh^e;Z6P`Y&w>IP!K{n;+&V(IH1-#pZm=J(h*@nlvx+LnZ0M@N9Naz&Wfd$b&0=$k7UNYTs4!WOHk zP3TLNfdaT9!54(%SC zP%k=Z6$gRF+V5Ug5@)#NcPO_dE7k!Ny*pet1Ubowibs5Jn_DX$q*Mo{Inng1KWCu8 z^XRIjd^Lw(wRk494n!Nk_p2Y9DYy}@_p+ONc*BaGb63|jgFJwouqyTxZgo6{{)z}TJKPG%k9YxGIJ95x5F>Jz z=~%|%4Woe5Q{}H^V$XG`IiPRHd0IwCYjMJJvk+4MiIWp-A%TEY2d{kJ8-f9Pt*n^^ zoPPN1Xg$NDBrLm&C+r5g^TuS?z_6;_ive+oA0=)ZtVXfR-|3@wEQ7qKf&@6pO$+eV z&3`ynJO_&^BhQG7n@g5F-VJvzOpYPO)v)z65?{Q7eW}!<6qQES8Oq4hPpQ6eP5n~6 z#Bop}DvmsJ!e(*Jt^3GG%O`m8+BV7Iclw`?YMsGWM|_(Rk?v8g^u{4Ts0Y#qmiqcl zYg8#7Zz6H+@3-(=NT(#y3D>M)fRu-V8H{_jRav>}n|O;5iU9R*W|N)g<#DlRcBT@v zs#PC%*{b(h#WgBJL4AaxiH~^5y4v~(^?4Gl&r0rn_JuLSujiB@}N;1+E z#cJw*G&6gS&c=rJkM@T?dmt=NeJ7>E+qtaqEF+?TjJvRnVMa-bhZ;zDqHkjL{CnCG z1L^rwNaZTu4)Ugij_9&-3YvDc={v;ow)OzY+9zsAZWQoL#?%h)K2}BYso%}%siU7_ zjR_+z&F1<8If=XoEqsHC3xd#>iwzf*>L*TDicO?AU4n#uu=@z5V=Tcr`jJFKcom9+ z11(;Wt$T0oD|(MXH#hy#6)&4d{bDju#~gKt-BV9^)+ACqb`fW3$lbtS{8opiIhF!I z_tm1P(D*s@EV`_IsC2KzZG~3dLR#NNrex!n9WmXx(fVC~%NBW?a@77+MMt2hB5j+o z>J9^A;#O_sD>FD#o0t*N$nakN%MtZ~w^Mbe{Pitm4(W=judb>a6^&r}tg&1@neR_* zCSp~6`+szF`;JI2kx_+N#E*7)R^enXay(oga9 zbc{+KsscrZ>t#1et@FT?h79!W>~bNFBl@{^C2&c(Y*Bc?cM0u>Z8i@MDl=ShHkPB3 z9LGtZDZTuSPud#JoW`83hopV9eQXm)W1wPcG(s zk*9GeuGIUvrDE6ePUS~^6m7EpG&78Ttt<&bJ(l-jTUd+~)>t2`7XH=$dX4CjP zZI`5U7~JcaDh7WtIcFND{%Kb5{1RJfn@p#6PMi2+58){q|)~-da_z*??c8c%Cbws+laE*w>}?HXkn~z5!;)v z7h1nYi_su|Yf}6XNGUzYSSmocIiwq0|9JDJ_N(FxfW*M^69FIN(GZmu!P4Y3Uf-~) zPZ4QkPF9qR;d$>`#uX*++tJ_ZC3+bPg`H5+nk0J7#!galOCP+)|Ndq=9V%JK3XT;( zJEiUA1p|`;$<2FN!L+zvlH9_S;3TiU@97mLx0Ik|@m|F{#<#|>5vmO`&)R>rqU;GA zv_ibXR>c;orzs0$4-;}+-40f(->#(Vb);f7Yks$E6-B06MbB`El6C2XPf3@1@?+I0 zr`NIRG9bdf<)VHGwJvvX63dD_H(4hTnEs0|FhFR6B%g*?e$K^Mzz z-+Z18pGCcE+C<>F<%!^CO{r$!jipZvk>_ugy=P=*;E5`GAJTzQG#e~Wo+@0_N}E}y zYOcXdkuk9~rXDP0SNfi2YWB@?Y~Zw7Mgn_Jit!;jWl>C=Zki+w?I**O7W`=~=9J=~ z?9uM`8ghnj%DTfk(LUX2EKA5U;FA^MvdkGr4Dfs+`-Ei-C*f4ffVu)cZO9xnuJI4Y z1C!MNS7V$(PHvSdjKPK>>1IxECCFTBBrv4u=#wQ_p>NC-)wB=G?6VI1-z?|qiBXth zm5tOobJzdHU?Ej=Ex_Z=GTV7P%vMmQ(tR~B;J z6kP3nKZsmGok9GN2$tb_8<>oICWXSEj~eRW?z@`5JklS3xj5LhzlcVcvcYL18Ex?S zs3kcAdh2f%(XFRm=0%h7*RHhad(F9Ju?A9Lrc5TYrlGK<^Lq_8cFlX;K?4P*8FS9I zhZ{Y;{V~_J8cvC5LCDner~H~=FC`^jL_xY3+_sY8@Bt0*3S3>rpsv2Vx=@McRIoox zq=h46)X9+C(lX&<*3k?FUf=aT8g;ZX&m`wBm>470zJc%NPaHgUFyndFy6SCkquXK$ zAN|S)v#77!_(y^qnfY$~jrz05!H-WeI`Y5KMfm%As9poANB+>MK{HPk%P87lt>hDt z%?giz2a>p&S9N(G$R_M~-e!|Nz3rQsnUPL^>j2CN?k3MkMv4T;>09IJD%h41Z+E1KHWph{W-GEK?En)jLF%@UJppTtrqSCs!qGO@Q{t zmIL-4^qNAn#6Uw8S$C41WK7jy;qOFt^wx~PYPdJ@8_daO+hyBGf8#LMy<-KKJ`joJ z73WwjB*NqR&C|2h>Gp~Dhua=5`RchAuBtG%I=mNE(z2{ZRn&C3Da_(VylZ<$aCZWQ z%~9qiaFo(^85y%!b(j(4pki)WlGUk*!uR^@+NgxS`gIpgVq2oYQ+prh>!YQnuSB=9 zr!sSw7xYfxw$S;cROIIHTzl8v$ihK}n6cB9Cs{51xlGr?OC(#@fvYQ6aaT58|D~|^ z_4ddd?^*eTc14@;pTho8=Ts2JP(ihn(YPsAVjH+u4)bdDH&hJEE+&v5Gk z6Wn|s)BF1pFE(*N^4i|)a-NWK_7zda1?94y&NXwWk-UAG{)0d4-DO<*MC9vN7-h26 zeBhNp>v#|0vh%wgvQG*0)h|1YkmNtPq=L0}PnooF&C~*o%2Q{`qm z?agn*X~T?4++h;i@Swt!6XsX1a8Y`!O^`C2kOSiBS872s>wO6gd2`Wit5F9gj%o@e z*WrD<0TZHdGelX~y3o-dI#z+6E7ruJy&$7h6P)r0@}XKOb|yJA&lad!?5tFLwi!g$ zwr$9fRXx3Z1H~#0wPY!$=c~PJe@Ge{%-2rQhfR%~w&Opuk;1CSBdaf4G&B~Bh2RO3(YKC#b+>ZWB)qUx@GB=}x<#kXH0Vftb&;XKw`Xtmx~=Vdt}X~P zgVr%?906}^%L_fc6a7h6NCAY={i1Xw5piUV*9BGk8(Gn5S)q|<50CK z-!Toaq)ylrUJ(|%-AcUqCBSngcCjc#5qwoA`kLm3b#``ms6wi`>MZnxd5YUg+r6W? zv6!Z#n3aE~pa+hh*vQRWua$sxk?|0N?&bou6rBM z^YiC>qczuMsfwTqKA)fdl~I`gOe z997C$RbcVNkH27%IGp9iWV-*`-~V0aLQ|7z?Y(I7e)SbqVBye6fwrCSRu8#3thB+} z({+>Q#@X1uY|)Ky_`s{p%9dkGmQ@g5h=(L8(YB*DOIyd<$IIU(BzX5SKQ&6Q+;4&> zYQE)7G7qNcH8gK8n9tCcYcLA&y);&?U zEN<*(PxCcSI`T@kNOx1%j~bae1Y6?O!uefKkZl;AX3stg%$T2fe%?>z6||SO#f?dCc0n0#)(i}f1SHtcPd=5lx&nsbK$T;b|gEa=xSk9 zsc$b=sH1$vyDR)I8&9{qu#xuV?;HwY7^8CVSpoKP1VS_b(@9vtt%ASniMU zfe;XF-?NtSabHXzs0ey9dElZ4^c2u#Zp{Aky%#+8A^k0m|L>1Y8eeKyVp4>aV}-|k zA-fE=uWsVn`m~( zMK7ma%Kn+)95gyzc=WDe6#yvF%+nsozIspOT+(VM`mHWY+fx_cvxbLi<7DjHtBi`W ze!dauvJ({NIh8JdX#ngjVe2eAZ*P6QgO(56O7i76WuyqlhpiiJiPwwA+2M!h=e~>4 z2g$RMh)GGM8^g3(=TZBNSsB)=bJUL%gxV>Vo*x~a*a1R=l)TW|-mSAV!UzyStLI0E zCxK$lEXq$)<}R+HK7G0l@)6)vI=$+Wax#}W!Wg6D!^5zG)P1u61i0jx0g6q~nu;Ox z8jR6BiH`4DAgp|t4^7&|T7f5FND($n)AfyZ#K7$ZMQYpY3!VcfRP=EK!HZUKC}L%0 zMg8pT8G#FAt7|lSr`JvVa%*J;{fu}om-#(6pAocxHO3z8cixp(Q$nmD;XHaa!9so87psWkoWsr4fY+BzFM}X`9 zUj4{r8<7>Bab<48eflF5vWl!7UXAoCu6%ODQF7C?)I=-}NY@W6$FOWtPPsx>HE^+x zHFCtI4stPId3sT-eFnyF?fh&SDdb)e!)s`!Sc8}NnquaD6cP&jf$ggM0;~C4BNc;8 z0aG?mY)_mmBO48_@fpWAN!~m*CU1{Hl9&v4eqWpUgU#8V(ep`kBL|zWfo*8GDe6nI z#9J)R3UZVSV;EONNSj&NpUy1>OmWlbD-U%+&)^LujgbNw1_a+}d5I6r1BES4ryB=_ z6I*_~EWmE>nC!>8dWZg<;;Uc_H4d;hmfF_wn2xv0(i)H&l!pzO#y0((daY<^&tzY{ zxq7@)I2f6)ZKMotW%mOh(p%eUnJR^71FP3AmfG&-@NoluPXSwGw!t>3}E<}+dQ<*UeMW+qZEZ!!9^n%YvNn}xd4uz zmAO1B{{!?pM=82|{__f*MM&FdjYNV#JoFVqu5jDu-vhSAX}F{}9% z5>Ia~jx#u&{&gI1EYY6qb2TM1?&*SU_r#rK+RcwVl?-qS&G3=hNqO@4on}gxfg#IJ44%Xe`52bvMR+7Z{C6xMSVc&HVoN zi^DLo$49!^hO%;6ntjM*8AMkh-GcU{mUmwI686@5c*?s1@_2i<)Pa#sEsw`*^-KIhdb_E~_b>2`(d zzu$09-Nb??&*7ti#keTA$WuCt3E0xaPw_B8}s1mA;&Gr~f1 zf83;_n~-M8q;R~m!!HUC%?NG_7SSNy)8brnP(c^p%n9+*U=nBv4G(DxR>|m3=3k4I z%P?=BbZjD-SkIrDa7;zBYV|Kzy0X7}TJo7s`y;fddkCEgu(6(V^PY6JCt+}19i7i7 zjZ6x5Rma{@6?Q8QxNEMQWxRtc}wrI;NtNU3Gmay&fEC?jocw@B%QAfps%5B)u?A*P8I9 zxN$l?QH@q2L=j^d;4^lyVt?3C~_dla7MPc_=UcsLR@kisDtXSM2e z!|^y6i62`pct#I+W}t{IB1t5GjE-r;dy+`wrgs_uLWer^JH=hoy%RXC2kb2-MkWEx2DLswYyH#ZcYe72+YF5^6VqB6%;_bk@yqYJpf#Fx_8anZ9WXP~F z1f~{UHCMPs7-AhuXxR1qp^)-kuG~thT%ONe7x=S+wpWTkfop?ywJxJay%i zl?+Pn3DWc_$lDSu2Zv81rZ%F5Sb&j`G3(JWs^;#{m7rnzTs3XH-=z2vGG_2r2sG)Q z-KpCw1=%L=5@TWIa!Yb_$inO%c(w?HAA67`~nMO$7l; g-rgbAL1;KNN3psc966}RrJu-4f0p_wVI25>0M68N+yDRo literal 0 HcmV?d00001 diff --git a/yudao-ui-admin/src/assets/images/bg.png b/yudao-ui-admin/src/assets/images/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..385c266e8d03820c8c08c405b0a590b2e6a29b36 GIT binary patch literal 69400 zcmc$`g;&&F^e=p71_nd~QBgt!LFw)WgOYBMRsrcQK^RoJ1*BWL6r^hmx}-al?vk$e z_}umW?!AA(b-A43%s%_<`0O})z7nXSBy)v;f&c(;MNamy8UV!bEgl9R1z#T5sC@bDU!}cgr7?4-r)Ov9|7-c*zo)1F#}EH4pP&C< zEB`}%`hRZw-wghrz03Z#4A1@_Ve3YYG8>lQN@aO(&X0}M+U3f=y>#qaSeGFMQN8WzO)!gjvFG=e*UY!9y=&r)@G8EK+72vX{-1{uoD3 zTBXfv`VZ(wjG4quyBBZRWiA>-j=xI!W0v?^!>@nI*G=VJ?;lUAg||*>@B3DRF%$L% zo}agL!$#Lb-|fals{8hDMh0w0hdAY~OuM|CePjLmwfT&jsdf7N--M|3u=j3->n3qC zbKZ8!KEIay+*bnMxE8D#M2>Al_>J4?9;75J`+Lm$IA{e7t^|1gc7L^(_;Kq)pjYYk zVOr8!h|j`1=P?@{@2@+Pjz*(a+KxHPwiyd=zHHBV*)G0!aminE%vqUoez6@B`nGaU z3DYxdu5KJXq3GS?Q~r0#>G@7CrJosVH2 zC7Zt0``a;L>tXMnf1H|hdj6?-dm}O+sb&$HJ?!(`eogt`F9mD)sSZgKAL@6Ge>A?! z{k@zXz3?&MPq2r_rWu^-FsQjF3 z=sT&1q&VW}jL1>~WjDesKTk?;Ip@HzcaPL>DoDSy=G1a9W@5d|AYdqZU)a7y)+XK6)ek7J_7{TwW`6f1ZRUszUuQ`-EyKNh6Lw3yVhc;8d!!?aGyVsEB$g4Y+_(14e3E|y5J2Lg>ZRV4;~ zBbe%yGwL%?k`)TJ#mWs$+S3N|2-osbK?MeHfueW)DP-6;xmTDY4LS+7KPU0hPUbCx z2(FUmqJZwLs(ZMeTIQSfv-?Av&AZnPUt>JDD@l62vwpne@t6uc4flptr z3Eer=<;k4inft4&GoEw{RaL1zL@dW@y|P6^rIqQxgp%Cvw4Iz9tRYvFN2I#^^?b1- zb8US)iirzzvRg`#tk0n*s&UzjL|@_#hV^x+ZW!Zc3M0ase{Z8sTdmrLT;gc#guRC+zQDKQ}r)Omh%nu{pSfdWAXRD_0M5>WB#QFB%SY zTPG35SUo#RCygww=b6Iu;-Q!lKdjpxx6>!|Z zAog49ag8YFE|M?P zbMj@Y=K7$k@XKGG5+B$EHV~!juLMG$*4W*p02|-TSw4I@2rtd6h0*`|nm zH_r2MfT!X3S->7C758e3#n*`jyw;krDTiylw-w|OU|P{!A~Y+KNM}eltb2r34%1nC zheIm5M?V^k*_@N3`_p;*cj36g?7}lNrt?JbY5|YuLOwn4^r$ZjXueKWYMVtKBft&j zuq{4M_tg=M#- zAsl{J`aBiTLZPq%+$Z9pLwQ6(rIP{eDTLr?%brH7!@>w0-XvO$)MHzUU@5cgb=U1j z&`|$lSL6Q#U?uuR0$wF8MTlhb`ZZ^Rxn?NCKV}jR6G3zJ2SE-;nt2qO>gr%8vvN8p zH$?2x6<}!Y#g`$L^GKRMP=SR%a-W>`X)BiWUfBecuU?hUOyLbgWL z8$T{=xQ+x3znmqWPi|!Di4>0b<3#W{nwdX78Q8M~hsg3K2Mtl0L{}cl{kw>{4et}F z`xy!;h{>HrezAkA$$M% zq$n$>ipn(o=|lBJ>Wf;apKCqBVewPqW3xT&yI^LsGb}1Mfm(;AelPcSJBSb&5APtM zTrfsp4LzQPcgK7q_f-=PeyNVeoa&6^OAoku7NW2WiiXY^+Zz5EKcKtwNE(W1R?<}jxj)&%+IN(Gmv(%b9)rkK_ z%n*m^M%uU&Rpj2($~;v=V>}Zs(r$m6dMMX)F zfL=O=k=R1`#+W_Dqz*aQd5zGKcA!Pec$?BBwu>G1R-g|w#Fg#*ZU?C z^RR&Jtg2(AtD}f;6laKkd+hv(fX{eC-|(a)Y*cUbU2`i z7h1F<(tp~Ux|o(6itr-qfmp`bLwrE6luMpGd|7zQFgV$*1Swe@j?HW%sdBg4y9;o6 zM3gelHSo@tbSUudL-DLuN=bUFoN&--vR+n?7r)dCoVK;8{rz{=3BKn<(rq6BDjx)6 zP~ZCcG=uP#ckya()kg%)qQO_X6}p~Npn~t%6)TZndlPDg+)%~>}OUfBuz_p z#oGD2qqJOzCTMN!OQZN=&xiwr%Fon)CNMR6HX8^H)!jm?fU@A2fb>yfFsEwG5ZcZ| zby%3GMHniFVtnfx?BFzHa0wwfrB@=u+OvwKveJGrnfM3za(bso?~L8T0XrrdVeMIj z6I}{)33oo?F}7Zumfh?7vYGt`w?kg7511zu)&vin zG=9{qDe!w-#Bc8QC4RB`eK>1Z(k#!SK*~)6`qk|5-OA(}qbi8BhxDm@YIWR~h%sD$ zby?>9D5;K!lsl60fXe-|N-1=BojBk$y_2-Zy?NvM^kOBqNcS(4M*H7q+?6FLFgqtD z(saT^b*OZ*xAqKy(&$iLf4Te+4>UKuTc@Q`*Q-XiXko#iN4T4o@{yMsK4|`4s}%Ie z`@(^Zh{AnMmlG3YzOmmY+>5~U3OGOew5xxJ<+K3(H^uGilrw%6UP5UUS zs)p178hN4{K%=X3RVyf2=Pn>KE)S)())sIm(yGxZN1}6++WNUerC|3jt>wrzYHyA^ zyjEv|OQ<51C@;6DO$EplWA_Np@1uq<&;#ASs$XLWUW>;T7B2zplFo>tU&G*UdfsuJ z3dkvKEb~E7JuW&TrKJbn;Wd4M?}O{FZSHW3+cDElc$0BM13;6;HDpmbd^mIbm$W zq&g2(X>1aqe}F-13@)^Ed?tchHWXadY@U9w(`~GjcF_R2g_$-%j|6CucG@>PoUEE0 zJcuZS)DdZ=$F?5k-cZt7P7#I87~Q}s#myBVO+;Fafzt>5>ye=9jV*floEcSlx}a{V zii=rEc&%l+^$ZW#49_X;{32ql+;ER)BL&QBoMqQ}7Pn>xvZKDAmNabZk)K(lgM$zC`M1q5b2#pmhB$q?$6 z@vhgX(^lwvJ_u1a0Xw>|_D+vhPKuig++UZ8RorcBm?~d_nK8u%1tJq8jn0ZvUOJTI z;9l&9bdS5B%CvvoNum|IBuG7{fD4o;%=Ov<)_IJ%Y;B)Ky8VF|B{TSSo4yuJi?Fjk zE@0xnEnxCc}W23^-A@N2WW6!9K07T!_C=#yk4h)z=Yqt zLod(2fjIQ=vUqu}hn60HLKn;owrY#GlS#?Jp$l>M2W@%+&Yk_>sh)r9@3dB8xxrSE z)$ zZ}v5o1)inTPi8|2foIV>mzoo9PJY5i$eEyXPBF?O;F;CL{X>VGEJvH_M+7*0xzIw} zF=YY{6S96<1YIE~9+!&zPBd7PPbvJxCk#{3KA^&{~`{(EhKKbSEZq5 z7ySpcHNZ@`YeK())`>9K8a5qP6aV1z#pz>3JtYu#ACp~`gvQu;z$I(;4Bf15EmXh* z)$(6>-Od1CbF%kekGexf`P1#`1VGQda#ZP#MV%X)Ebw%gcrxCmy7A6Sqy!3{AOB-+JDLcb4r@hfqBN?hwN`{w5tyFa zF*>_}gn(L+J`$e^Uhql_Q@^TbSI;7mfH%f-Sa zl%7h8NbcC(=47KjP1}F3C`Kl@AhL!dhKX-F#1)=al;!m)6*n{y0SI&WcjEX0Y&@Ma+1N%M}VT zB57pW2Xm8Ju}&=ef1qbQH#r0Gc43p#WKMBbL8wq$tz-qYJ~&s%w2ZwfDc&g&IG5Rb z%V9>HMMwpK*{qKXP4Py9xo;+7rm5|c?4BX{^H%^Wno`v;8ez1e-zjaYgx)bW=DP#A z0Nt2egLc3NHN@RTW(I?jPijs(sX?}eMt zxK4fiW5^6RWsNzm{V)doueKjKt?k?m=YKKuZ4nTD{d~Qxnh>ZjzM)GHN4Dm~Jk^K# z__$=2rz5e^T<7v(Y?^-}A>)ePAbnDhE%)t^qk5lKZmIxajmCdpCNoO-THEW+juP7E z%IAUSjKKRFq-%O`KOvSo!pxU=8wP~mNa%?Ka$d^(4|$3t>cXqnq|i z0bW?4+GzQkM< zS>MFKYk;RJ{*_(a2q;?lczqHy&Z4{ic?*p85Y-h!4G|{j7>!Zr(DRzcg`l$HK@LwZs>?Q!sz*_*{Q2GnyfIX!s;!WW>ry@ zfQ1Po*SjIJ{18pHpsHaV0cd_m^$A1c(bg47uNM(=YNX#XV+Ik%LTU%iD22C+Sx*xq z5!`i(x;+|@)_`|G1CV(n2I?vqN1G(3AzC%or27kyMxCTnk6*K*LO%ZrrXvNdzlxg^ z2*3+#b3Tf&O5fggIW?#h;p+X`70^7U#kSI{IU{ph%Ju;+;P!m-y+IhWy=TRLNAR4$ ztJRb5qb8u~aQWmiga|3MT_$W6y4=_v!B8b#cwX$&l6*>gJKX6)C;O1FbbE?o;vs5!^XuG$UsBd-Jie5^pChnX)Pac-c+La zvU12$m4CK$q)CmjQr0cH1<&)Dhu}-srQ0rROQBEAYmYa#HIHdZ^ z`n1O@4)-$zu|&e)AI_w-eGH7=uQOWb0Xw`g>I}7yh~hSQ6pUdKtqk*1!kK+*&CF^> zlwM-;QXs(M%MXrdBW5a+ot`^OqpO74z`BHZJMPA zlGyQ%&d=))VyDF#$95;4DnE0XMNIg;Qz{&DLJ53Q32tGQOqskm_HmuwEfDJoA68|7 zBG0n-xh+v^*u5ZnF@!rFVP@F4xpB5|G?=p3;>qWt398J;W$0aaO&h`O#T3AEtS7;oYGTSjJa7`)T~DY~LGw!=B38pkK;Li%BjT679g% zl5Hvo%+E)#_#4d+>I6abPW)b6>wl%x0bH$Eyb8<@Dz|Yk(>i?Y&oS zJl8j-ietw>t1%Ce6sV$W>3ZsVMl$hEiH{w|cZVj$g(_l3X)Wi=LXA+>E#-{grCh+_ zv@tGG4KYKscF#T=IT7Bju$BuXKYo#htz6ngx1Kl7!4hvmLmwVZKL^_)J@T*q{I5M3 zyONuKk|9vXLPKF&aBR^FmwF7OoDFb6slw3dD|A|8F$HwrNyTl6U>GM1T(i+?81V!b zC{AO{Jsk*V)|hy=45Z}rnzp_-4r z*6L^@;Jmu|`~eQ&UY9A)L`q7W-fS}?HKL(U{Jn1tO0AoV@j<0P?c%W^SrQeV2QuP^ z{U>c`I;|`!`4(<$TF4;P+9gRM%P$N_ESsWu=mH+OkzH}-0s%MRwyqW?o~aPNta>1P zg>c~Y?EolE$18|e%J9`MGmjsT6~58Mg1KLLeyK%>iSPdLZYyfeWW4{@w%Pfmz|!cp z+E*%x%P6zUWEfF;OZ!hq$#8M47q(hxGSPojU#KW)!QTbPYi7(?&Z^J2gpx!r9JdW{ zF$SWx510g5xO)JEswo}e+ zJI_Cndj`WDmJBIDU@Mu~QuRa*O?IaOlWw)Ud3Y-H8g)){F%vJE+TIEkLS{gz6sci?9X{UMY3(Bp(1ar<4A@fY+Mu+eN zZu{1lN1tC;-rRf)S{F6>ro!65qt=_8(UwS;u1L#>*Uq=gg9w1TUJfksWJ(nnMC%Kl zlt2*i!@O@y3*k3V4z+iv3aEzo; zCS}7lFvh0PhPUYp+Fp=?n)u1!6-#oX+)*T&CS1%g4(XKYO`Pe%iXs&H=Z~$Z7oR~5 zxn)b=S3=IUbE|p7H;fTLG3sR#;PZS4T+uZYAoO?yN?RNEE-s# zXvSYAbQXXuMfF53SGf502@h;)BtKSeKg7Y<#-H-7G|;^#vA?=X3nJ#7I|ISim0-%= zrB;x+b1TvBatCPD2oI+Pr&4BjZ+13v3ZMVhyAJW&l7J7qPx&vtx4Kg++Se zzkhmP#!#mA9V+6IY3`cCHcirX$_HI#ANlh-sgcuqQ#!tim4t%m?Nqmy^~25$PlL^9 zfv8*5q2T*SeyX+@0+ppB*VAB`ArIZfRk~EiG{hZILAhsPk1@R!6dY0*+QcgIEqVy* z?$A75XM0hV*CItjfdrgm;!@74xQw3@k8DoU_ojx9EO_>%K)d*b^o}$xne%0@R${c# zDtd-hdEyum?R9P)@0||1Uu0(>Z^UXR)gvcw_4i&yFdjT|EZEb*C3_PS58I2Nj=S1K z-&Vp+JA*;A`?=x=N76KWgP(8lRpu^@@W~WESn;p?J*S>Fuxs0Kdb#OyTr&$PSX$v7 zqXk)eLfdRKH=0du2LVa#WG!ng+_bvgO&-!T#xOeP>({`fwVOUZV}ZbeA!D?&z+FVd zZ`N}rq{`6I@DJ`AZSK(KX$6^wvG|g5i_^E5B_kCE|3nc0Cv~|GOr)5dYS}t~k}6xZ zQU=_GEs^+=M+?*cyzo{h@KYudOs>7gyULgv4w+}<*wes;BsX1r#@SPkJmih-Jk#dA zFyQ1!sz`!yaF1zDAyAQw$*R&qU~E4Ad4iMna(6Rbk(TijHLPTy#=IpEU$Sjsnu|Ow zqT(6b^eXCC*JXxpz+^`_wBqPikOg1&V~`e{d6--;Vi`m``a^K7uj_Ij=1Qm)f1(vZ z2qU*+nB7m(%D{N8=M5KTLd?Ph{De+!>N-7+iLQ3A7`|I#b|>1>h?yE*UT^oivm#ZZj$H3`K;1@b3xfex$l#?sP8$2} zW(|~vf2>uW6bO!gRR4^5J#r#=0n?3%Zs#KsxJIYFfN+lY*6wOlsaZ5X@+ZQM((~L! zsx)Lpo_ak(Gfo~ph8+xc^x1Z-TH5K6t9WBiJD4B0|3(KE-4n$~FyBKfc&yKTh2yN| zvZ08}G$*vcWYwi_xgC^${&0&H*kvczT}LpEtvQWla!ZQUDfb_ot0WaX8bu$Ox zZ;EvUL1Q*+@ywg5WvAKE5gw=sQ&lVHPEaFE59$f@SQEc z!h_20OQ_Ine97u&+nl4P=-hA{x_wVcTV$z2aPF8G%?Rcd*0)#-2AUYiN8~YcZqRGuQVMw(D9U|mRVBuw!{3@!qjEs zg~y=%D~YmTZtA<+fxuT0TP);orLTu4)}Izgy`F4MCr}aDM zoL{8nl-H3U7~4b3zn+;BTUd!HKL#@)(*Y8X!4vMfh@<=DY0doHcacDhZJ``r@&Wp0 z|5y}a#i}sgP!puZ#(2UgZ#jIDP|GbjIc;MA%R2|2J2O%xER%Pm0Pr1%(xKppZCBqO zVv0<;?{g8Zg{={@Hx!z9eDnr_u_^iGBU~eqN*JI17cZ4?(ypHHjH)84cIf|gK!?58 zZG$D53G+bD_McU+PiW7SY4h;> zo6F$o+O(sBKJ%vf8k1vQTyEG#rupX_N#Ud&89e}NHFb*Nv%c2 zgjnse(6u~(HBanTz|FT^)1s$00S!8xA`tG@4Bml2V*=|i)?JHesEpKw@EkMV2!d;> z&tPjlooM~j5rOHiD1&Lo+R=PM8zE>uDfCMv;D6&a%B#%}UouN9ahnF^WyfGiD@n4u zIb$|l1QE%^azukvF|kb$(m)6niA1TArh!K-sHup(^C2M+%krwQ$)Y^+$J{l41}=O=6>F{U) zDQ{iG{wG3gbwwF193a(oTqnU0Jd^8STfjDsC^|mH1?Sr|%8=or97VVWIBz=C@Phoj z3r)3g(j4|@e~8Z@4d!5_KFv&4CBfvo4{RNw?MM##9iE8-!)i2HZd%qyM{7)Q{qk1_ zLpY3Tkjkb*s&GZEvkDHOt0MkIEcRAU8O)DtFZ!1|+kswdYCN?z0`nr#9cDQuR7bpn z8^Z3vk1j#(I~a}%9tOB5W4@6G^ah?(NP(G==dkb6Xw#$U(FE*P60j>2>2g+Q{F#O$sR>^$q?)Mdv@YW zY2qXjUtx_~l~m6wCJ2YF3^0*sa-H&DkKzWgywoy_h^;mUgJ7W1^hDYqALtD|IA=ft z>T+%tqzZ|n`FTFl&iq1A1_u=DRWIWqaziGi_n~klBG+qWK$U|D3pD)Tmc>tc=`@J~ z7@o{)E5FLWrLPX1=r1O|n;=2tzW<`DLluEoYKeju3(^#CJc(MH`bOu5{x(?so;+2k zEkOQ?ZDD_SEaBnWH}SLD&$x=n{OFr(>3!uL9Jh*iyxEx%!f%gcX=2_ppI_JtITHo1 zSzk%5DX|={^|{eDhy(WB7lNyGP)o_c~QpTMzy;|?SR6&;BrqjL{*-)J3Z13?1KrnoFiH!CvLGYoa5WQXdLrEsCTk-8~EJ$ z=s$&r%>H()Mnr|dotQW)*DC=1?f;q*iVrR#iWcT6?yA#0OU@BNu5w(@C^mE|_Sy7e+Gy3L6F)*r%+P?}QUz*IAu* zV+lYg|8#p2f#mOvgR(Ljl%2ds_XoUJRlD#Kbi>9}LOyI2WwYMe#sJyH!@a&9A2(tM zutjVwwD&O5mX)3)AWNht;ft6NnHJkar<&u~yq?qjqLUQQ4fLSM4@^6@VF^MpP7u(#> z&b&W-rbT_O)yq$pIAYyy=kUSl!gak*mUx^hDTagq^`gJ{`J$jCU18i86oJ!VI~^&; zUZ_2LYQ!NZq_Y@z5k&$OuDTMLaSwaI3HRjLh zhn1(eMxL+p>aO9bc<`LTvJ<^v-?9A{>*l;Gjf1Hf@A@Et@#*`jU1kd%Snw$4Epp(3 z-Z8=!o>JZU&V&^6MYt;)AMjO1l9FKh>bl0Xp=QU?a9X!DkMid*`0#cyp(7l4yo93#Gt^5WB^S+qY68h z+%G-Lhq1Vfoem5ont*=BvW6B63?I`dYXAbrxIvgrnZdwNSs{Bah@LlpW+Um- z_OvY$A2>UgYVB!&c8AF}KLYH_x{fR;E??R6P9nyx?_T@$2}p(3;=Kq^ULJW~M<8jQ zs*r3+in(+o7Q=%NR?LfI;PljF)aG9Rs+s1W79u6ts7#e{(ms3i42o(X;*um-TS0D) ztrkEv9Yu5}5n$&;J6K47#j7_ne2>z288o}0$V;N~P~=}G=T6}lXc7iFWRIb)s-1s z-@h*c*E;oBZ2zei{|(0VrIRE$a@ylAv&H39N!V<2CB?|;DnX>?#t@SWnxPpxj%hZb zC?%;qaBG`Rxl18Z<)gMvk~Si)E*Z|I)1-$^j&k8zWuBKdf)ShdfD88Qoj%vod`eke z&$#iTfB&aNOTSanI=HdGS>P3q3i>5Kzl)#7U!i;S32x2&T5-`amAoeHo`oQr(m0CR zTH6s7!QfqExSAk|y4y9woBZ*^#0T-vF;S z=%J~G&*ZMlZbX@jN^5|=-fO)XNbG%1(jWTFAny$~-%snk1YH9Nxr65^sR#7K6G6BLdBOu*L@=t z|C1@R-x;8gRmzFoMa&hwpshJEIV{!8pFbMrj)*3=#h}%kx;!2sc3e0T%rp-B@MfMA zJu|4H#kmw8Kth7~I}vh;1aR*UGfrrI1E*d%>^%({Z{Le2)Fl$j_S*K+Atf6&PGaur zqU^FtHyAnFmNo+unZczRlHX@IVAO&$6kt+-p*?x6u6;OSA zKcQJ;CJN!U%eciNcUXwlLlE9uwfGwZBC={#4|53Cs4xOy$j0?+zCC8yWKql@u!c&i zr3E-RW_ z-IhGGO?FUYxKD^JNW9Rh3`6#a5Ogm7n!etc3qD!$!aHk3^0!y6ol#<_trZ64^3$Q< zfGW3sRSQjo>~K99R8>G-)k@t*89g&NDKZn9qm}Z8iRe~g5r;u8xM#&JECpISqZ%4& znYZl0)am5zivRj%*xt?rrF)eu)$EiK__XeF1I``gb=4;{eDqOU-N>p^GxU@o!Ra#^ z_U_@{wb%p6z8cz;JP;9;zEAca&5HQ=^!lYLH8u{t$bidzeK)3|v_(w+a2Uxl+q+7| z<0%X_%g!c~yr(6~ch#k0K{SL`ldg5l~#%e-EFf2>(Z;RK5_S| z1S~Rxdqs^Rug|`GfLG{DhUxk6o}Hbs<|1rK)@(?~&oq2Ve&Jbo>teF3zmv>9GWQu# z)j;m{DC?QQR;Fh6&q>CLT<~(X!0jGV@;e1X#$=^Dk;dZw!MkV9`^m493?7-C%Hz^d z_rq}k#>ttmc`J_acJ4Vup|gyS5X!J+iISVy>bEO}ux6y~UUrX&3YNB3QIvxIABaA%X6ot#{u1TX0`=9veQhaV{-=xA_7#TZ0 z9)tG&t2uE4L6ddlDmtcLBnLCYa%JOq&!1=Ibu)SlEu7bgrGUd<-UgV0ijEHa2nYB; zYSX@}2lBj3EBQ?hi;Vm2CU#QHZN;Yd_@Iq!CG^8ltT1|}Z2a8j$Po(SoyF>JVHGaJ z40K*!O{N8(G73bVuyL!j08hX1X=_St+WIqnT_UclVnvX|frL}?;jXP&^l4#)@a-2n z`oa!7XM!i}=hb@}`DK@{tT;rZ({rfeI`CcpU3*iKcGs3k_zk^!c-hpsjWYH^zfg1W zJR%mQAX9=bnJs+$rE6M*p2_N&?KbVwLk{s@Npq(^9z%+aP%EZt8)0QGr$zmf~L zk%^Z--%C)bbwC;x?7B;HR_M~KdVya@axWIUb>5V)AxSAAcpJf(+ zP$a@mRWx21pU*nI{-;^nP|+g#DtND}AaNC*xUfQ=T>XUbl?&jXI=>@^x@9Ob$`=-5 zEdB1yCqOfyRs$crzB=N~(EsGhRaC;?%Jof=gZ0gCe?6+0mG*H1D{HBpqae45xDEJd zJXh1M1b)@MCuNpVRWTUn0uhf+q1e~dAQAd zvzlOHLoI;;2N(;a6GAI-di&t<$rIRptK6^rG9@@_;#Fp@dwJ!~U8t8p4i2OM$J7>E z!d%!ZKh`&gZjDXXBnL%#C~a9YXKljAqn8w!pvW_g#avRh*HL=g0Og%IMerlqysYjoYOy0)@TRJ^D zO+Ap$Ysa~x#bIhitSNNwjZ^<9efl$(U0JTFLOi2)Jjd}@0oHJF_Q~I?sEM7%GwZ^j zDBZgk`ycw)9s;9xs>$%d_N_rDg>a#V1dgb!-u2B22Iw}@4*7zf5g-1C2tw@5sG0{* z?wr*=PA2Rxu;y{1TlvMXyLhh@&-xvb48yi?WJ?AP^Je`HPdPfTV7>d#H#~lw56R5@ z@lIabw0fAB2GB;K!4%MxTU{#By&^vW-CGN9R~HxJVIpmxap@=5-vcbse?U7l;Y#NX z-~16VGdA5!Sf^>wE@4c!b|7osU5onsGX#AihXAMc0!2S*xv&xaZ+2U)PCP#66O|xc zzmQgB!gInA=9n9B^yiwTBTB-BjCc)^o&pUn9VdQVav&@ zo*J|}rgR!WW`zz~j*u!vSF~V+mkawTYT|US>a3_3WCsI=fk38(Y|?*GAtS)0z6Qv0TAM z2htJrg<9Ra8{jE@wjs=db)2^b-H5rcEc6X-FZ0hPEx$H;l$Wc!>?n_9{E}CJw%=AB zzYVSGu1}n`StW+I`PKAfJkIB!V|1F4_)!>yZ>aQ99VKu}Gt*P`GI}2y@@BhrvOqhv zyfLf3OU=37-l1nSOGSQ3_%8U|eZLFlk~kNEqC-M1th{)6qhTB-+|s*%XY1Pyy?ns} z<piz2k`kkg`J%K1z$yf8CHgv!n8}kroyxb{c z^N$NS;#aV2z2|qhP_{N7hlVRVMolW1lWscsT?J2*9iM)* znz%|@jP%#=V@N|hU1n&46okjsx`DetfgyUvXl(lXrLk!VhM9*=I&Yd?e3epbMC1?{ z-woy`P%wpIv1K(5A*_c%c_Ssm`9g2(*z{hr@MrbzVlH{#F4to`sBN!ipzAY$jb0fJ z7v#q`{QC5y)?MRd{AmdlJhxMpw^Wt@SPk5_S0e_5@nPG0bcap-`>sDUPIPxy20a)m zzo+=NzW2L?z$Dl3DZ)b^UYrH6+vTIhxyH{oUJsoQS$$+yN-4mm_eKufU;>}jAG$)1 z5|XtsIs}u=#D09`E#IQlkm{zX-{jy@6#VA0zfcx5TNe8&1$3wfkA0Sq8tMWEGE2@l zJLAM{baCJqsZwz(#Dm#H?Z>~&ZMUwc5$h3vIN#1YJA1jq#y5V>uLTX#K2+X7exGR- zF|v|w1It?#ufv0PWmI#3`X4J#^weJcSy9RNi=@-*{3V0>eQ#i{EI6TnxzcWN+CIyh z27Sofy6;*Rzh9YstT|)i#cE-Vie&6LLVO;QI+KMl(_S6GPJ9)0>g;)<%R7C(5&z1Y zQhm#V;UMYE(xmJ*F^~-1rMEBrB0k)_}ARA^UqoR@+dK~a- zN{!Oic%g*gmYfWNa=*cx_ZIXuoldWiXO8(#qR0~VB< z7co&cVRlX6j?r)kBD;#8IyNmvJT|S(VOZ~ZvSYo+yv4&`I@(CGuK)c(_}8ki=gJ43YBjbAJ)MwV0=SK>S>E|(GH1rpXYXO>^7`+6$dm4o zYI!%zahgNbJzf^xmCCQYiM3pIp|mAdc^rS$LI8fPeJDhT;IH1y3X)@Hw@!Q53|<=f zv43D^y}5A9>!o_Vt1!hf4KDc2-(hVFW`4#*3%3Ly40a)uGEUAEPCTl-#(%3DQIly2 z+y(g6y28r%K&ANDQt$jS^%ZRM`1Ezt8E5VB>9rH`!vnozFDlB_B5|1FFcFr+0QNKS z3(rXBcMK0-fc=^?XRi&%Jc#*M_iJMfJzKk9=c!)toI=p7`3*uKs-$paSft!TL)zko zvp2sJ_bVA|tM}RAF|aBz%E*NCQZnEjzJ1qr5Kb`V;bn3>G_73O z*o3b7{L!UP!tqCi*@u74-FF)WE{JXJQ?aaW^5+=ks-g2@kG}JUR7`LxvaEjUl?DUU zs-8&-W)1OzbLm91;2A-~?>~9k8x@VCAJ#V)+I=QZ|9FoWaS(2!dBNpQxjG9RklH^` zxO9~ZEAgbf(HkfIj7wB#gTBVcJR9)g6A_&;4*K03rUo3TnSv zlD_Xc|LR1S%==(ijs5KM^!V^IQ3^3d0`Raz>Ca+b4$#&N&A4JN75FT2JH4V^M`uHw+z8U=h{^{XfmwloY0R$5=rScS0u4=2yh@0V348XiWj7yEiC`67(` z|AS^y+J@=lHhKpP$5F#sm)7L@9cE90iSK^3#gDko$MLWPWyc9u!Aw=PmsIig*!la4x=)*TaJpJsA@#iyVyN$Bdbz5VC zsZ>mv$g=-hojm%l7%ZGW-e*AjZ90d@qx5Q!jVzn>i(_9KN1u#OD~v*VYq9CEj%l-1 zebrl`KVeO#YKVdeo+6jeGmayh@sJ)fbgVqD89Bcb?=!uSVkZz!nLPjlm$moaHirZd zw0o_wQuBytOM)0)oo!)P5z{61yXWSuua@s&ukh!?PdN^t;xr$U@#rUpM)2s&jJl$c zr5VyO2}XJR#IZ7{w0U0i7xt0=>-Pe{hDQFYZ0IKda+I3P#{d4f?;uH2HFo}S$*aKH zn@6*vv1!kf4nFOAV*4ya7ze}GE$8@;xS0M1RUsW7jwN6pJx}38mDG-%n@(DJOCU0na!hP;YrbqJ?)s-Cm{N`lf}w^_m%GN_|Gpytw`u)*nUJ@#%NuZfplE${5wz8i@MB-ZXDWT1&bzeNOKn zi4nB*R-8Q6bvdd1BYjfaxc~oA_1Ip0(FOuO0kV8q*# zi)2oSc**nFf~vfJv~^V&UKmdd)0QJtf8xFyy0bqo>NqJ^aur~VbK=8gz<-_3c4P^( z@Ge?{|9Cbr>|M*9J%-8r^<&ihoph`SY9`p3&=*^uD%t{#azF>b;R_>+}KDOFrv=){3`@kVTCr^yhFm^uqP#_T_Zaqa>+ zE?;Aw(m}jRS|8vYDmQdn;J}6+;8omAY8(dvNnPAB(}p8N7|2KU!7N z105G_ul41YbJxpcKs%AS_a;Dam6EPBpzHL?c)UhM=2YzNdT&|i{L7^9;U-!*IljZ!Gs$4qS2w~G(Hxq$8*)d z^NF`7_2h(Y!TI zNJ8AN<FCGPLnOB(`t#k zQ}xAzDqF?(PL)}6vP!^fdfH9`y3qXfW)(a074~`|{}?8Mp=mtxnFTWU-4*#n{YIJ1 z$3jqV-?963PA=)n&!8MW7N$S{Lx}jd#IRlilKqWV-R-kh-i|9^fez@CWicR>;rOLw zRKth~8JGBfA;QmUh$55jho)zf;}o{u$UEkO3WY)>(2K3>5*KLK!4hr)Ze;@cXzMLl z?MU%a@42nBR^|5FV40F;7TOXJvaw5`bp52dkbxH9npsbDVjr%TX&S%SqrG5TVqsx+ zJTmyC;Tt%zzWzMpGl$c(4~;Vk8%I;E>95qPl;VHX|5{Gun=kJag_L3|% z_{kE)XG&^izfEfOtR{!@A11at7wLHcS3!nfq>U3P)FeZB@$w-1CuWZkNAc6r*d52y zHDVu~!AB+$!^G43qYfXmJG)tB0aD9w8ia$mm}yjY+UHO7KQUZPIK5`<#>aU|bQUI& z3&R*le-a8^d-#bN`fRmc&ta69jBxqdRf&BygYT?sz|t22nV(iaV2=1;n#};Pz@f~b zg_{j^?p>H*LhyjLi$npz|Ec2UGa&9&y6=#aL+3q#SJ5K}A)XX=!;(5q1fjHSffM~^ zilQM!N{hoVhW6glhw@GJi;ytXtQDhJVM=Qvi~aZvK1^W7$y>1|kEj~EcmJ)>hxO^FtpcyF)53Pen_>evy`1&m$q1!W~b2 zi^B%tfu1pnOe`>Tepe_!*{d&33qwOiSuieC+hMs;vaH%6T`k8)Vp!uW!Cxi2TL6rC zCzbFJLg67TV5==Y_*9+m4n4mDF!(LGKX-=m{!XGA^>m;1Dgd47(XRkKpTwCzc5)D> z{fvg1#wiCmkv6?RWej?t=R*I{Mtu0Hd=J=>4XZDK@ga0(_EWWAZ~?s%18&I|ovuGg zdC#_KNaL*d=>~!Um3QVI_@>MEk?%H!QtM6ditIEcS{t!()Z-|(rET~cKBNZW!C8D${U$ct z`Q7HqM>J{OcPq+%il}PSK%VQ5towp(>nkXH%mR6&B!2;`Tw8NIUAW4sj*5d5sw=tg zb~}NYo5|7&2+bDiZmVJ?V7~hfN0MPeTSb=1cgKyHu87VOHjHhj@uqHsAA>&Biqb(( zS)gCMm@nXT3&x1gl+2S5r__%af9bv*qIBraQI<`-(fqBn{*!bUH3|UomW+Ib7=(t) zs;o^y?b-EEDLu_tUXB@jP9AZ>A)I?UXl&;WS}Q#6WC--3Of;x~Zx8 zp^uFl81HNUdVvYXay2pQbYNb@mHaSBXJs4@0b~^8GD$izwGYQ(EkmU?ul>=38IfVn%{w$5r}2%AgtvK<$k?iGOK?_~1rc(XOYZ}8 zg>xf6!P*fu8^kdA4C3x*hBoJ8PVq<2H6A@naQ3+22nhQKv8fE!qFuj}e79!|d!^?Z zaJe#xs!kT9Z1uO~(DCo4w7egN&Qp+7`B%~#SmBtGcN(}c>`ib8!^n+H~L7G z7*jfPgBp%{4Wn^}u3Dd&7+S0cine zPsCM2Oq%)bK5JGg@JizJN!ik+;1f6rRtSg9%l>}!3`6(D}ic{J$>%fjR_vU?H|{q+YImBX=^9o5;nmUAG<$Fe3NlRp=Ukg{Gx(G43#nTGP^e5{KIaoQ zWf-9Z#3l&XKY5naaLHd<9n}g4TIe}(!uGMEZXJD}*u$eU@S);dsRhX3!uje;;ox83 z;OYMlP`Hm$G`x=(vvF`%1t{OVI?@mcy}?D1)YU_hgfQs4-e^wgMy&XXV=uwK=_knW zM3X$8JHdH%%aVZy!9%-10&9fNHs{TVcf$f+&I822f_Ta9w?8(Do6~=ZVbQ)38#Y7? zb)^NsmVfW0kHBlMRi_4K2665&P1y3+erN|lv>W~8kZ>*lk33oi9Ppm}v?Rvb$P9df z7%5;Z?RlVsb*AwnP87-B{0zv`Csi=5p9|`A)MGx3>|rz3gw-F-|5))*v+ucp5rE|cgj_KS zfvlz9O|cm1a!3XFTf&At(7l~*q}KJ<0G?;uChkT79{S=>T35^Zv2U*+2K;+eo*y?@sqol{_^{dqCY;2)IKDa67ae?I z20tf4*dRUyR8s%MerbF*Ne3`}Ak+cGRlhX!dcgsmI^^_smLjw7jaL2LguURl5Whm4 z;ErK#fp=%Iu8IHx+(;7!Os}6_rE0Wzkya0Kk^+ckQABKBcsD3Mn+hH|y+mn$bWqKQ0Cu7epoVL9&R=^b?bQqzD%pM>$_~{hew2(h_s| zjhNdL8M8n!9Vqp10bA)YfT({+b*Pheq5ce>4!~scG(J9&xLd!oL{`* zzA5yJ*gW(zyBb7LJKEZIodnt(%zr9?or#MLf}M3n&79lXl2M0VJ!~QO(|n`6SKR!P zclS@4Sucpf3>7=RVu54m$_ebHXagpU;g`WErkel3$oRCAJK=Zx@;m!Gh6l$dZWaV` zURG9fl?A7!FIH2+p#dg?=0jOrzl{*?cO?z&f! z=NK$Wtv5=@4vtPvnfpm!{AL_Hk7+cDw0RDd2vzC8jXC@FZK9{~H`M=|%7R4~n|wUN zsu$S#S0wn&-yI;&=Hk1<6u%Nxd4bJ&ll66U4^SpeOT%LzbWVcawCh`K4xg&k?5gx6pJV!bmhijb`Uro`ItYdGi=I&^5_83%G748e{U0(^sNbN-$|%e zg`ux6;uuS9q`}tA(i>28&~KwTBguOY1RYRfE?{FlO;}pjY5bfVh*XFV(w)A=GYX*m z#)#-&b^$12dDuc#_7#-+7f3tz)x1Dp~cK8 zb%>pAo>FD+g*KTd{azn0UnDkPIs4l^FL1u-b_yknWWB@?z|$>mdTSyeNL_GdEw!b`iBAabsv>Y zO96K2`~JfT2O$U>Zu!J8F#}RI^Ef4Z@Vg*i<5j#z2H4DU(HbzhBodl6#^k!bU{Rmp zSQx(vkY^)OtIbz_*+BDRTgBt(-VMdV<7mLewae`%oA>uPpWIkV*>G!Y#y*<8oW_1B zR=VWT@pOiTU^?*6L1|t;76ZFBjkj(kY`C*+&VM=j@kM8jgib z&CT>Um~PSkgJ7`>*Mqt;0PlkDJ{ks0j;M!s$Hrv=efgaGII8eu*y{19ya^LVuiB|Y zeu`2x?S~F_YQnx^Hi^`~sn<*a1{mLV{TYD8AdiN*CkgbwKsY-#0N(fx+|}!(b!|ggwOdjbLlOWPin7C;AcHrnZ$`JwgCL*1 ztQjYNiuS@a#vk=#1=G}SnyhKC-I!*^$@6Ccp=0-a zWnw~(qJmww1RJ~BMAkkFY5;hA(9O+Zb=csKO%3HqfT_ej(S$&$@1}%Zi@ISoXYUi6 z`xx3zT9Veya22S!U$k?;SoAYm=LMvi*KZ!xaXin0F;khwC-3Tz-tS1>Caq8P>-@k} za*s9x!H{M=KH!_74(5{gn$v`!R)AdoaWiZZ$yDwmjAeUX&RrX>Rbz~ApvFJ%oO*T9Aca09{JIy#&WacsEt^C+df<MKofitVbw*)s_5|4^wvI z)e*GYsH6iu$ARq zVx?lK9^TdA^+#_5zR=bsY)nt9NWJ*YJ9f;z$?ASs+6DVLgZ7gXb|>IZ>~X-n1BO`m zdUYQ6U0(v3?XpU&)BTj=um3mzC$u+w=wQd=CxR4;{yu|GmGnhxgB-n@?RwF1V(o@P z(M>Sx7oW$+NRuB<<9v&-5d^SM{26iL6J3GYxd2`Us5yS^q%d^Wzr)^3utXS{Z%pG1 z;+DtEU=y-Yp9qk(8w^zv*LXL^f-(8y^@0U@ITEb-`sbY8eW=V0(y1oT)yz>ifO0QB zv+$`n$D7YC1i+!%&$43!d3!8D<*fX%vL4%<`yYsaouhNLzL>PRoQ%7v4T#8OJL;laWhNnu7QL2DK4SVB(o_IFnw4omU;dNJmHR1T{=Xn4dxgXr! z9jm+sNHAzKMtL=hNhK^^`7tc@k(Tmle(twHYUNG7uq&M@NNVfO$JEqsow@toCBE2RO{J;MM9FP^&eTi4R5@dZAo@cn7fZ=qbrlWQgTdSd9@>{a@ z64T+pZ}4?NyxcdM_f^MC_q-$;0F#qJE8qqqWS;mEDE zK&B%eGIb9i*=qn8oa){BaN!o?stORb&NrimbP$C@@Wn|{qx+C)m_CU#@Qb*cp}9F= zzdUt)n+Je(RZFQKNV40m+%~BFrg9(ZvuP!Uy{!T)?=*`ZP~-Kn0+oUoDK~b2(X<1) zepi1oq1oUM_1Qu60U~T%1NA(S(J5g4f0AT?-C{Fq34lv2tZKD~x-=|a2otbJn)gPL z?8^$sI|DN2LdvsV?a%nCFx*C82tE(yUR@CD@P7ywv21}yk{lPVczaa<$ASDUY=5Amt0OjgECWSxK` zlNLaL%oQYuc0kICv@x%6M3BejD*$F?)%``Q59N%jvRa3{ek_E!Qff?U<;W+`mAL>e z$hGMkhVbj|;2fUlNwdHgYMQ=fh@|9F!5*5nPvhTKQx4uCI1dR}$>m)qIb*hSrRhMh zU9JN!C?}QA=n^9EKBT|WknNA0#=BItq>@vwW(ifv98V{lzy@C^BS}aon=qj+$>M-r zovPS~%?<^aTu;(WQPQ_O{jqrx;`{a*plOT5ylkU;GWhP*7sN1W6sa}TV za)Nx;+q^hlD#J+*wB#1pWZ`6Uwzm$s)uPz2u;>9_Z~b^8ox7*41T zy9@8uGFbx_921w@srl>+j1C=@&v<0Q*dQjA0Wd=h z;I32m;N1qF-XA9`IY)q5PCT%A9Fht~JUVQ^@+Nqppo^Fr2B_=Yu2Y(N3exPfB{N*F;2`*yGW~aseWPWd z;I(ERAz?&^Nw`jCn5+a3qyFFo>jt^CHn>y*9G8a)KiqPV@pW$UI32 zzXNDkRWxn*3HToeerv-XkN!|gF)Eyg=4gB{%vCH6S z|6lHWegk9fgI47op)6naKx?;R6*Yp*&H{7soN6h6eV=cNU)J1l-0uG9W+p;ZRRjR? zfvutEAN>A4j)5vB$|dxn-$OaiOC!RQgdkPmy5ng*(Dcea=-#EBT&Ikj4+ok-8t58^8j^MIpK6cjG7+Aq%lkBs174#YXWVUn+tkY-u-c0 z#-|eThW;V+aQv;zF$7~$I;NwSuw-d#fR|FhM6KV=d7ZgYHx2Bbeg$JzIE#g9wK0L4 z@&plJRS4qu(S!~0&fg}n9B|G~LuJS(ZCp+mdad-I$^opaRxVHQm*@N^n|}{3!54n) z1#x8mFku#YdGN>Jl!J2~!vg5ogndUh?KJ2{ zOT_ui!-8NgiPg6T`N-&cWPE-2Wu#8@Kn~(or^T}u@C89O(cy*D^e13BsZIy25tx3)Fy+TR|&I~?17r@%mv{MA#VXWwj!`r6WKqpu=vx`yTIQ6F*EG%cJU<{^GY+1fMty{Rm)2BGhXCS$;WDX>3^Zi#w z361kH@P(9)y)P#MvGH%hn-0UhFEOYwKNt;me-C>vgLE2EBKZ4dg&O3MA*2wO{k7)j~c-2_dO2> z@cf$QAE@Zrpkv(q+CyNW!t}mR&SIvL*&zJ}fvS($QLn^za-*Ywf!z0U93*0IM8%-Sh`ZGTARwauRP;rphskkOM_==Vgc&%rtJy{p-R@RU)jH!^6WI{# zC2pVr+cbip=|gu+fQY!V|LrobUl{LNkwDqLJsv4t`7Vwn?HySVBbK4^Po z+UQ_hN`a2@*~<$E=QsBVC*cbcy9b5snm}&at{jfQl%+utea1eAWD~Yf|NBq#i+#mG zS-{+<$r{!Wh6I9Eibju~@Ih8VHV6m74p3efH5N;pcy;uO@)@%~cAnz|TyB_4a04b# zr!B&G`3@@;##kh+@!+p_v0~y4Z}fH}nAc+U1z=&R*K)M1klYn)NfuPiMV_{}+YXq- z>XeDs>WFH86SjKR2R-;7JGmQ41905__r#D9=8xKFT%N5N*SA5Y3hVlF( zWr{?7@l7=OmI)Xk;Ews~Hz~G-3C8{y2QRejAcmkGK>5iny6pYq7@SPE+Ye5_e${-g zI^}qKLkb#;FWTAM+LeB_-&99#tlrgCbfKt}QUg@XvIoJ0p{sNFSXbZLJ_b}MeOAX- z`+u@Li|%={Kl2=9eK4LJ>Oc8@m0Y=Vg(p)835`{ros3wDEuO{?FA`P`T(-XQtRMFd6z$lC5{w5*}<<2>YJ;uqt<;V8*@oLI;d~B`U@EN@rF#{E8C`Mnk#Q7U!_&y*Kd>TgFvlTC)`ko zTiEa_9H(>>NGyt!FhI+m;|{P+xmQv^QWfTB53JC4f;z z+)Z2c=sjrEPo^SO)~~6F+}~V6Zfu`EN)=Yr3zM4!<)`rnp^}d-!91#~y7g8sJ`{pR zh2PRT%~uoyX$AA16KG#To<2W2BnqgM>IHI?4>;HssUm}Yp*-X-)jN3*)i8q+Ie6ZM~C9=V; zR2yCBt&+F{s#5wAn`vP3i1ehOwM0?)t`IAKe0YcpUfSH(He{WE#Gh=~x_I=6uhx7@J*e^0oSmMro z(HHS2CnUj?hE_*Fg+$dp4wMMa6M~fThvB~l8Ee9(!E_|e^KQvv*XZGLt7i9%*?@!O zrzpXwb%qv7$e_P=9g1>25wb+wZAkz)P2RxdGR4{$`}KcUw>BZ8G8Ry7_qJm_WKt=0iVVIj zThtd`RoP$tk6n~x%3D6YvM{TNxbqsY*6dM|yy8I1I8Z_IM{j{?y^w79KXy^NDO2M5 zIK6$0BEZkC4%`jJ;}C4@rL_~nAQn+C-Z|ky1_S0JF}Va&-= zp&xWO7SCg^ikeN-LZg?L2I>!Vgrdfw)=^5@8Yl}%M1^-{WS)I%2H5nWPGBAH!u`)x zg$rFQfJT>7sfPr4oD&a#%3qbgm=AdsJYy>6*o;0raOr5HCdma&Np+bc^K~I{wMy zK6e5uoH961{@sw|8pvmuRi<%L#hF)5#hG%%$oLQ|EX=q{rJ-FZm;3e2)dGW?FcD@s zlA~*iYZ~&Y!z&DRc^fs4|2900^U}FV)6BDqMj9Wim+Y-?;5Uk!9!ZmBggbPa2V#sf z$L=JFYuPiSV(jlkzwVM2D93JiS)-W|*U;E4w>Zz*gtf3tVE86Dn=K<@S3Km!hyT*6 zLsx_pB}W?nyi*@@+AY&^|Hd;WxisiNyr$S|pwp^O1ISC&u(|M{Z@ltLo-|3py$?u@-BEgXAgHSut1EsG?3Y)YcOlN z6n*=F5LB|b1iCU>E<81)E5nLAIf@H5Io5e3_?U74EGN>5@J&#yt(X>ExX8^4L-Cu_ z=4WU5UD|1$hQ+a7O7N{4H}wKNev%tl;8&Wz*e3nH6$H#%x4xOlOw<_OSrh+O&<5>L z-063%^0luqy|w_%W8?WxB&=kl{c6%bDnWXvL`i~hLUwm9eyutp)v4Zt@lT!tsEG_w z6+=9PMqS_96u2h4pMcIPd)Q;|y_auW+eq47t6qT=$(n3JQu}sxBG$jK-j3EN#b5dHv-PZ$KtvAJ&ze9*JoTeHUaum ze|~GHiPtE{%3KuUcG15GgnXRiGzjqc=PIU6ZUYNlh~be==4N!*(Aq|X^_UYFRxs0) zc|eQuE>|!{V(>>t6TY>}cf%pnC7Ro~FLTPocAWuj+H%UP+#LQiry8%W!=Pc%1!nw= zdN+LUWyTsCw=vKjFSK6h=+<}ssG_{LUx-6o>(9Xt0QHhzZ>V67#0ZAXTnLK$2??F6 zG|JowM)v^@ccDtwoA$|GK|{ZMP#|8h>37q#AS!iy5c)VGtJv`;vH8G$4yFk2KHVNI zaD^7bD=rRxAlsBwK0Ry*H0#Z*)$nU0o9GH4l>G@-3iwSZq1EuQxjT@U~ms`{B3m^TSgI}sh|k#S5n@S@FODG!XvZk0)UX^%6V@&AcR9>^s6_( zVBGAdK6DIkzWZ0@{@TV=^O%#(l6tROmTfl(^g8r^9;>H)dtm3f*c;3z7)lr6&r!TEVvwAK4< z?NSHe&E~#zs`Xp8P4WZ_DP^)fO|@WHWv9zr01)|<0(nO}{omSPPxjez>=^&%lFqtY zKI3Z8B^c(_xhXJ|Ht&KbnL)@{JK3*lojPZtGmcp=tV0|uj&_U=yezkSJEj%-^sQTB6jt2W@3a{wF;9aiGSh;+v%=x!I})e$@+ zeU0+$&4Im!rWDp~j$w?~*;yHyg|)yJAZj#Ha0N+VnqiAu@*qG^dHG^Un9B<+}XLh;O~v~0vindj65Bz z?hp^B$uF$X0>qFC(=-Tbh^Aqw6y~zEU#=nGR7X;8V1I^X2O z0^fYJRO_|A!T^>rTJtYdGD@%57aX{7+nRrA2+_|w`;p?r$+sBTuM+EXl)JDaRW%ei z?7+jnwXWB8yfp^q$6Y-DU$`bdQsgd1!hU(^fe^~x@3Nh3tz$AsCo#SicP&~KBrPSr z2D(JUnSGyW&O=)PM5`JUU;le5it_F^PdQ#|+&vIF`}cF~@=~>28MbgZaG#pqz2S22 zGVd*D+BV(rA!H?1^xmM$5)dK0-i0~#-|*#`^~Fxjr7`>(>=%M#AmBV5Z#n{HaIpZC z*G|-fZCwb0SRUv*W$>OT4!EMDd(EEQt^t{~QjJvhoCQ@;{TYY)NYuy{TN07>zaiW(ljf1(L<+(jG`D6Iuz1O?kGmYZ^Lanrf5Ztw4{8%WJS^U15r`M+#F-ASq6|`5hvOAQ8I7AN-SF0`Q75hz zb|l;rjpF@Ef0|<|q{PberHW#v-=XeGq;9W|OBBq>2_Hces-QLxSn^Ue&F|5kT=>dn@t(ka@$5*M5rw;)WJAx6>|Rl-i~V~Xwl!#4}I96 zm>5mj+s*osxEb?I23*g;J+gKZ79-JEX!rQrAk^h=wEuCEvR$xu;Po#ZUq{*hGL!AU z_xk(!sK(>L=lR)SdYL!kUPgR?2|x_jpDT|Ce@!v;7xatK{kyu+`mKB-kqiCksH5iM z)fjNyQSI07zDVO`g=--?AQ?t;d!6U`zS!w*v|kLGu)5)7h$rKQxev`1H9!+p8>!@I#ZEg)a0?U&V~J4wmnP?CvJcB94Cip%BONxXJN}*(LE|(z;OOd&^D(l+YcH zf*#C935@G%#@Mr@^kl7`w)S^Cb9gf06D@Ybu-V4RL2;iB>vLYw0NffDYW)-=loQI^ zV;&q%3rU^fh@VqD4GyI3Jx{`)jSV~&ixr%kr+g=ttNOp&@2t*_7b)_F0?t4Fu!HQ-?#7}V_c{VMnQZMJ&zvvpC(Ujp+49=lIDAT&Fv3Q`h2*z8d$PJ_nX;uT&g$W6yP z8r2tf0lxlLd-4YHNj7oD@$igzSxqMr!)CX}0_)(lDxh9&hH7q?^|2}5z5S*rR1yl% zOKq0g^D7rGYz={&jZNsaT1-C%=~8TgaRS4s@tW!en&@ez;|8T^0=L-p7J2ldLd##E?r=P!pq)A=O?1Xc$P-*8z97ZW@q= zw>8c_DFzq%G>BHR!YF68p1#}&ZaD+BUQ2Z=ft;ijXy`G4=A+{9$iEv?Hs!~!O+H;b z$-YoYpKAM%8mDww@4jkXqW5qgD0}5n$+US)w>e>8D-Nz$vpsj_>PKc$>1c#8EtDok z?{yWXvtAAe9Gfd~1|C^6mNJ|UPHd)DG9Gz&&L$NZfR8jO3(bh4#C(^Y_6v)iWZf@Yy5()C6+>iQB^mlou7XNuxsKvWOIyKJ>)aWAUa-ewB?^V#|j;pcoB{INzTg$@lfe|m1 z^Mc?RONabudrB3sKoNUaAkMlo;qjEsjhiqv7fXpxYphSw4ge2~NE$YNFk>6+v50uZ z0(0qqM^9;|&YsC;iV_XYvkoZ7N`4cC`X@&cV|P0Qqpn3*(ujh4jR zoL~VoycpIrPwA5|OgDYq=h)LNMe6Y{HC>48(Bq0a7?)n=Gu~oA`Jv}M1{nJ~a@(6m zBT!)Rl^VR35nKsg(?f8S;H23eJZt#6atXR@J0Ks3h>?)^@`e_oaqzlCrS{X)!MJ%9 z!bwbNfR}QpyELX(zb8&4raB^%Ms^vEYv z3t8#UxM?3Q-1c5<(1(^!CuN9H8Ojul+`I7jumc`2;8~Gwg}UolVnPLt_emL2solhi zNWc6ATH9y74CF;x2tV7K=D{ep+6lq=0)|qC2f-sf#WmMb3`=OJDHYW9ukj*PM%Z|& z7ymIat{U#c*;xwsm*T*ddtVnlg?@mma62O`A3_U1rBMZ;l0sJo)lZzjC~N1kz>36j zvqrUnDi&9kntlt{Z>)X^Qjp!AnaG;o1(G{V;9FPY!UrgfR8kW45F8^--D!ZiS*TvB zkPpse$NCn7%zX;I2OIdU(5dV)RmPZB;>&eKEp|+O(;JUCI^?9)tXd%)Ixi5cuin?= z_wy7Zh#)OgxS2&s3VEE*1@D!H6^e@Biu5jc4UT}jBa_voEnqh_eLqL0GU8sSx1WZe z)A(hys=^Po{Jzevb08Yxo2CcV6cn9gbsn^}DGTKSJ%T*f6FeT%At@Uu<=A_Woaoyp z5eylMjoec6y?{+e2Da9&z%F%qGC_TJd;b2E6JPBs`vz(zFf(=5%cgK$+wWglp*!bF zFHlVeB^x`{c(7o$$6s=kLRyl`oj0AKipfy{R%av6%Vod861Qo30uLoN7c77>aQ=*) zY~3w7GprQ<=_n-FCW#7pA}H-G-)(1B13kX0f3?PcZ;`Qm<35Ce@xHaM!mDm06FaQY z>_*wqc`FY6-mERUZcNWY?htw)%2Do1&;;~weWv{^xJG1_xxI}ghUBtUle;*aDvU#3 z|D)kTef0OVp$N3AFZH)BfwUN^YU?xtxXPIT2k|~z_ zn52LV+b^~YVNz3UuomWlI%)Xs2U7p-JD=81IxA^OKLgj$Y|Iy^g3i;-Z9N^xQUAjR z(|ZjXe3BCYXAGh;VUPspsJymS$1W$6YSE{FX-~^>LLXflc!ScaI zbI(cLIraB(zgkQOKML+Wcyy=83R<&qyGZ4=Gz@r$)FJ>k1Kaod6_pK=sY zAPNt)+k1Cu-_-)?98!_`&H_gH8Fh6!o@w;YErF+~D7(1aKHWe%7?&8mHc9L|Z`#%c zs(ioJcc)^ewKl|^%tN4yJ>fd7!;F-PK#j|hu+Vy{tOHYR<8XHk=&h?f|BBs$eN!E1 zb6!uY&JknR$9Kweqv;`ZvA6zBKs!8gB>P{^b7*Z$a`6?7*Zwd5CdY|kl@;|u8RuYx{9 z_61T}Z$&9ITEd34vMgN9^{ZR6q>W#$k5UDf-8k*5%U*!i6jLmyB>(wH-CKxeaaJ<( zckkqv-Aq68%tfC%Uj^Ok&RWt(>i_vYw)niWfkVN1km_DcKWGR)>LxE}kS~H|JW4Z+ zMaNv-3GCP_fFI(Fre9HGrnNwKf2)t1vT}>_jrDKgheLPnfKMr;-(oGf|J}*?bHZ+L zKKyWUrtdu+Yf1O@B+%AO=Mxt9)xIa^ad^vf^~YkE_ojv7@bm6_oLo_HtJi($C$==m zp6nRA9CvG~*uG8KA!zW~$CtD>%*(SAC80*Oeoj`dt@E$J?Em`v?A8$zO&Oqjv0cTA zF;(np^LM;0nE#1))Ic&_fI|wQ?Fy{qyed%%#zx8V5iZ=m*O8CNI}+CgU`V;nMiL%XZQBob2m}> z5?$Bod|@23J?sC->#(xMEGbs5{8B@sBO889*QEKNwM>BKEp6sEsLt@eWzRoks-GRU zRT@Mn0U>iL2(ah92d*h7{Ci47?rde}pd&1ysAyb#HCNle!90>{2|le`jDMV8r+{|MWBUv6AR3qb zx=RrgU~A`!S9wSn&3(ghK;><9^9u_DT|^BD#{ncvsWf#t7VkUzRc%~e1<#RB8%P`L9a(9)dLJ;4S}I_qABjU*10Tj(w? zB^Q!7!XCpL?E(5YzhgoLH#XH(!5PM{>w?bQv4nTk0e)_WZ%prfUlYymb}aG-o0~RY zovC1An0al&@Gfa$?)GXe6DoyJ_=8T3tL2*NAb8D3!d)c5SKKLucDxAIf9J-jKbQx? zlf7x+Uxb}SL!T<|<)uiC2o5W#pV*P&!0wDZqq%>9+PNfcgf(W}lh9;&!;XhZiOfpY zyJn4ft=9JpiM!I?--Nu;`z5-rt_U#{Ql6P@1&eigodUXd-qh$TMc(+-N+<{`L>#8H zN6dMNnB~j;PAvP~D8$Ex{LTOuK{A4ji0HJ4K>kGh{84{jh`D)UlgR1QEXm-u@res% zed*JW=-oLCtuZp{fl7#wbjEX4w|?cDh7Kmt;-C5riFjinHmkyl&;_i7$sjdV_u+Y$43oyWbx_ z`o8kgukZB?lY%UKNSbZxWK3^Pzc?HA7q|lWlfs}i#xGkk`-dbncM}oUn~?ibLigSd zD=sf=DIupEnrr@nau9I`YE?6*h@mJSk;jM9yS_ zjui7&ZP^!8a@@?Q@}+#7|2oubUI2IJt|1m=gSo+l+cds3Vfox2i>6MTx-@=L#x3V8I< zXYSsq*`hhVI4ETPDdV{g6)hXHdvd2iaf)POo%}h(tbid7WdmOE9$f2Qv*(98f?mWr zP_Z4Oiwxq>WlXHgU;Imb!Z@8>szvRG^o4*Ud>G>Z*l;x7XV6ZmA ziWODM+;)m6Y} zI~qYJ^-1-@F63Wn!UO27wc}~Pc1~eQUy1hE?kcP!YVg(b)#PLBhG$Odibt_1Ql-A z57!HBZ~gN%h{*ub_)5c(N=Q1TSr29#{P-}>`QzOFi(xi96zvp_=dO8i$__gqh4)=; z6C&*UpNi#2NYsjwk27P_x5nFx?);EUZQlF5uQ+~tc(>#a|tj@elYL#2kSn{r2woKEbPa8 z%E8r;Q!M;L^5rTuG-I1anQK383PUo=_JbXC0TW%>OC@wDckmr6&c@sGV;~qUX=1yp zEj-)4e@wn7-;@lvzM}W`3zlnDFoM(F4|fywnFD}q^c;VvL;)Q8q7`D{v5FeNTf?S2Sk+$5xo3G+m{)R+F9oI%8aI^(FL24xf9W^P&_T3(9KW<| zg%PMt3lo9(hn|Q_()9lPlypkA>mjsPI~6`|g>n4bbe0c>P<2Om5AhA0Hj&bRZoIC0 znOJl(KkT==4b?&ypkLb5h)BW&c+w3i{o??vCmz}J4*B3#ebVAm1rub0cILsv3Iyle zV#Q?F#VDh$ji)4>=ZC7?AfE66+pBHXuohw7>j;1wUl&u1Kr;9E!H^&E0_3;cM>C$k zr zq+!DfU$A5Ne|Y-pxTw14;kzujNGu@TjnYUr2qFziHwY5a(#dZZ7Mq1X1f-~wJF(OlMBm~ocFF)mz>IUE}@gO%(_oI~w z`oaS?%csRMIg}sOH%HunW)|q^Xq%^irK=G}u0Jg=r%WJafRXCObb&oEWeL(X9Sfpo zp|R2p?(oo3Pq_!-0zn3f`&aX@r2m{AJr9-?Jg!sNiGc%C_l*3B6-onyUXC&hY3E zePcULtSowSQwaw+DIJzWu$)bCg#0Wp8g?1B7>?unjnd;EgPb|qvkWBiqP`sP2y}Wu z4H{FS1eZOFDs`)~^1zPXaP*0Evpid)eL2wJ*K)@p(@7@wg!jM%hVbxHve3e4RyVQ! zn&>ATMdHdLlXHGED_FC0_Q)|=23a!D0J&NHtEaaxp@h4@jguLY#x6MMw zMOG+`6p?bB;7xG(b*nq+alixg(d_!}?K0qOSY`D&U~s_uL2ezYS<%-6I+Yo|W2e(y zH`aJ|;9HH9+L5-RP$WNpU4eambM6yH(Iv+pg(@1!SDh*7>`{D6LBFW4P*;Du+Ihcx z99r|`F)J|C*1N%2;4~1W3%VH=Z`sP4g#dd=He2jRPatBnmQsWe)N;ZP=bolHuk)s% z$s%Ci@o|4r88E$W!gc2hQE@c&W|-a`Ol$(D!+SO58=x~P8R>)9EKM6zb9gi zm!O$dBeU$-fVBM^MJ@sk!E&B!Y+y`(u;K^TC1OZvh6N4Lmt_}&IZ1(cr*pCV5ExTv zNX|)J!kJ&8u<$Og^ZUkx1y1z=faV5kT4o3nuf!?VSCyGD8W3k;IW@y{ z#G)yH`AmM-%<;BXw(rlfQ!KfgCC(8gpz>WCiK!!c2<{{hWjkbi>a;=CN(q4@In?#m zhG6Y14J9o}V6VmX^qw$75ACe#z=LOM<+TQn_||5ABCr6HrYb@Pz4h>kP5?j1-sjfw zeZ)zmO3sF9nm~yyDB3Nx?{-Q4{kWll5IS^aPHn=Yvk|UiYVAqF>zk*V8nLluz=F2q znA|oW&8;OKA&@qsqtN$|2u!$X9w@qXo?Al|o5b~gY~=Ds|55Z!m6VP@UjI|9@%)f<4Xi4?<) zFeAJtg+ofY;G(1GI68<^vdr9yNc^KF1T`>Y^yHHZZSQMveZG#K9DC1Ej!zX{OLk%m zM&|paoIw)~)w=cVa|6MJ3l%RyLasm*yBui*eGQ^ozM31K?gSeTHsG^U5Q}Z}<}$!WlA z4$x6S<*l{6mcOP_Ou3;r#Q)3@Kv4BqKX{65-n%HWC2s)0V(){^SBsQ=`H$CP^Z4|f zjG`zHZAmAH*Bt3d1pXbYaZFp_ zcR2tW$!PQ)w{k|Ii|+2n)0lm!}n zTA#xJOx3B02gKPzCRkL?Y&`a#D=7#7@v>4%hVL`y`vu^LJZUei4kazGpXXW&*OJs` zm7f@6FCOd{Qk2mBxPOAe@B%6w{z!WzUH2&CpbS;SE{f8T6^H;9ShHK7hgU=4QebP0 z6XKf6+pR~L#3KHu50ORv*#Sjp2wF~dIvIOr-wNA9BpM)dq6ojjQagR{lMicB}wlC`+&uCJx$KaLlum}$6 zG&YrE1I}+bmAOVBwQj5L&Iy3v>T3Qy7bh(;(L+IUrT6Z`D+lw`D9;xLj50W!g2LBe z_ZnyVBSPZ2PlgHC*rF&wPJendgp;vtD&_%SZ|`ddK_HlGqkxTW5<5GUxIC>AVZh^ zM5X&CQJo@(k>Y|V7I%xZW?-QfTOb0TFAQmoe#$G<_%SK)>tFlzu|qJoA& zk4SipT+Z)UfJO>O*!-zh*0$F2P8X}-Y1G#LC z!tw+^n;=|Ap8yZ2ZC4F|hyuvh8Yva>J@cpid*B6xBZ&6b&EgqUti?kS-F z@FpAOgY~9ek`{mB0Qq0h7Hr1t5(1yWz8h=$GXP|N#zYCsb4TMSRED64QV>5c%)9K1 z3heuz+Cc%31!l%w{ii&=y|WBZ;CUzp>Zkrjq2=fLVChfEX~&pm9L%YhwAJfRdL%Od z{Et$g42rtN=7m;p2PVy zHcqYd556e!auRIPjgeBhTyDi!{-dDew+$%W6+YX<^ms!dEepg+Pi%tQu;7M-yj zl5C+P*EhDn!;@;6+*P<_@)e*_w@iSNfe~Z2n7*KHj0HhM&gHE{WobPl0(k` z6e?u6qIT9sy*NABQ|X~#ej)iwVu-MP6fY*FpkUGCw=SSzlA19abQp9j?_Bl6)6c^& z$;$_g$re6kpJH}37v!UTrh%Y>AG6h-*4a1Fx4x!V(!rjg$3STlKP{PSPOm=XdI}&Q zV;P>$u_h&`M{%)V)fJ#IwgU1yY|5CSl{5+x9q!-@l7md*WQfEIC`lNYj3?8G0HKc+ zvY1xJDJxFk?GdutQG`aPO)e!#{&EqTWHh3}^MOjfz!q5A5RQQXRw^q;qfdD=u4ra! z@QEFU9zvWo6h|I*82;e|OWnfK52&8)&&ZS{X z0c3|V%y4P>fiX7l1-OrG!K4Fctveqyx@xbN6`F$e591^adNn8YnjlDLG-GiYN zv4=y+`40tpLHg2uO$OoTKjy<(4-LT-)&cumoV`S|-w&EkR1ICp<^f_K z)Gt-V{3*aWhKrq26h#q_wvYxb1}J%tCf4X^fHWhsKI>k^q{@$^Aaq+*@+=(&ic`** zAPBOdxsjwu1(+RXHWiW<;yYAWfCN;P$Aa>~Vn$ilYk&Va)rFkES)#?OTu>t}1vFv+p4@>Os5tB{x9UR7ofk z9wrOEINSJxi!_Q=j+#Jbx}&VDhgBTl*)q^qQeHB5D4`PoiDOrrc#Mvs-s*oO(+j4W zUW0HT)IqC37VF?(6xS|?6I*W-=QxrGu--0xhPgPy$$G^JD$i@zFD$`&`lep}lOjAA zN1<#_OQFs`f;Z;ruLLU|X+D9V8Y(iTm_yR?C`q<^i5ldv5bSLIgfeNH*`IYmd&W^t zb$@|%AS=Y7_f#{aO#nqengoQgjU^6G_dfuZHrc8YWN;+hzHNfa8LIvJDb%P|{-JZ4 z3-rQG8vu?nI&NjK4vs+r)r2_61d=<|un>eSN#eol!q53ktABSr0I<2lKb*dQH@Tw_;;IyGw$Hcb{g)7`c3rE9MwM|~#&4Yl z1*U7t{AI$M-fFYaCP1UpE5M_g(9?0oU}tcJhCv0e7uNE4Ph{@sppzs>Zi!*x>4-E* zK#TK}P(sKiaF=(J!GM~2H?|5jtb^1t>lMy*6?EAjY$b{ih4#p41Ke(Q(+OpB0AT;D zwJa$}ka3kA1X@B6K?TN6JX)Nau{I_>&Qb=2Q8fe=o1Aj1g7vWWPaK=?wlyl)Ra-{^ zqR`B#iuwA2mv93ETn^?QA63l013$XtvZ3II+V@u-zMcqg5(HV9-bRDsNXV*Y)Hr`1 z5dAHxol9{?+=)a+C|P|-B+gmi82@XXaY|Cr4KbiMw&XTOn|SpH@6L-dN;iYNQ7d!V zYXJXqEF2S}&>+r?8t|OZh;YCFYE~5_*^A~IFGq3$eXh2y+Ww@q&&61n-af6b#ILJb zTLIauBgkA<_S~tMXLA^UT$pxbGX1XVUZP{*G;^x!MMR(hGCvw|QFpV4N;9Qwx>)sRm2UNh1y4O z2`K01SJpsHb)E>lU&HBM{(NR3CqlEV1X`w4ZxVbWArnIv_tKpj|7*hEra&4(P+2FE zM_y&YoaX$WTz>IBzc@B^xtD^wqV1Y@2|2W0ax>@Wadok# zY_~vmS4Y{?alM2qd9L@_Dt8Z5$6WSg%-14{IyQGW0Kw?b+JVm7O;g&)04J$xKdEb9 zKdeg@5p~4gikf)i3%3PS-Gp|2A4Obm=MDxv2NV=F-J`4k;Cl7;@6lCTX7z=wfb(GB z-t}iKzaL?=1Ietm&#|Nr?KRNavtrQI2?fFDv8EdNgaQwC+pb(kJexZGjJ9tNy=Jf0 zS@%n97nttF^{tNooD^(*Ha0#J`Yx->wi?|auc(N#hixq}ztrowQ0YNZC5vw$GWC1# zvU|B<^h~?36&u14Kw?CUeusqhxe(`;8?%nZoWU8d-sOpPurBwu66v% zhZLV89_}e<2O)06be(rsR5ZA-j1ATR)!qK8&6v~a=-T1d(TBUuJ=m!n^e@53NQI3f zafnUPJC;qzt!oq~igVQa*}oxnfTyc4`}1$pzuGg$nL}W2yTje4)|1L!q`Hrp6j8pf zD908-qQp;`50*nOF;LdUjYQ?f55rvKb!-RR3<{k4&Dt|dL~ zTRZTR&RbEVfi?`L{dj`5z(@MMt8pk}L!0{^3^UQdF|+f;eX*uM=BRD9=IW*lyJ`;4 z=zK(ow$DPtJgM)CO|mOQq8JNN?N*D?{8r+d(&1NPfNU}4>rVV#w-nKw@7!IhahycQ z-!+t^0osyA^qApKHX(jB0&q%rm1N{-Rt0^`{%2w!?X?E>?HyyF{bl8L0Obm*N6~qf zYFhoon;`Lr(*aK|^X0d8j)&(1LAx5k#T@z+%jb*$k1QoRsz|l-_s;dAc9#y^=<&l- zZBT?+$_f^PTr$eh<*D30h#VE$2nPO>YV$}|bHFT`AQ1K+jNkj+rU1B~_@h=U_;$UL zJ6G77S<6IH13I!XKpPxuE*AH1XV&WPOWO=K070L9Aq>#4Ib05<+UFQGiZ1?Ob#{ku zxA}C_>SJ-b9lgwb%kJR)S$M%Pb$WU}dcjhk>JA%hdKD)Xn8aa!d9!A=Cx7H?a0VWT zzjG6H_J$j&ApP|kkKVHK_DI|CI|Mh~0JJUnB}83~yNVcGuO0wA-8mGeum9~+_Tw$fcS9+IcGZ?nMJ!K2oU{rv8~caO7LcKJ)lW_ z1X*9Qg3`b1Kr=or=fTeyvE|>$|3w7ZSH>>EuYS;SQlt9??+KWoEhTiKE&M8;9}(+0 zTuF^loBpX~)5#TC^)pxlC-{ZyKYED*EQHkGRT$@#&!f#KO^~>r@IY{*^LA`cjXZUB z&m#uE*@eq(as<~|UVd#L4($l%sSF>apf5WX&)MN-OY%cu)Gu*MSN*I6Lw%4pn)jv`>h&0F$67#;h7FYUp2k0;DZx zS$g|fCW5=1Ffh*1szFIxWX zj5HLec3zp{UCox?HobypIkCaGd|@+p*vnQb6dQ}rkYZ6-PcJd{kqwTT=xaf#mb3TF zCGEy}dY-fgG@W+v9N02ywwF)$B9By8Q4TfFTdl&9Td(7+F{*GLQ9=T2mSxPJR9*mM5TX zZ;>Py{`qvA{J*mRn6bF3PyAwd0fc@KL8VtUExW_zY_CJo6{m=E=BLC0Se zA`cTWB{4x9xiJ1M&4>0SxR8UY-QpfScmDOKBVD&^Dpl<_mEe?%tw6(MXw#6=Mho4^ zoOK*C)fV0shBhF+8{w5Wb+Be7<3A`3081)1!?K=+poaDlx6UtB=wKOLIjrk|{7wO$ zZX7J+n7Bd@h_E#+%4+tlFISsx1K_Co_Za8bJE0s@52917I#uEbmx zJPbI0W`4m54t4EHvnoSdcpK>DX432ACQ!&v83v%l-_wW`97)M%1~hqgQk#UibPpKA zw-?;ZC`FuoD@h;7e2ZZYiFgL68&2@cIWLbOxa#b{>(_i17=u!ibmx~tmtAvfMzv=W z8-XLDu({6yxD~T0D(~p{!(OA}35GP$Q3K{aDg;@2bqz|y07|;T=glSOi}@<*ZA&SC zvG&-*d8Z!MnjI?PF?+aCHKF7t@{iL`9(;<}lfqBr<$%|eY=|P?$L6;iG+^=x#l_GF z4P@U5Ji1-5+a1fB{i;2AGuew23b2IxWuY}$3MHm6fUH72`4tF&y^Jw3IcJUPqz9$o z1S^|oZ|j}*XRp3oPfnKnbMMuGx4&Bzac(&^5{V)NVF(WpRhk&6`XA!%=HH!!%EzC8 z2npSpk5l{3&R+XFSy$BENo-L~Ul@+=w0fCz7slI(Kd*VKuNVndIfQ}6(S@2Bns!GVW1&nzw?%E9J?ovunj;;&kB-1a>{>(je?z;FYyq5tq|Lm?zC25Q;ZBM%9DV9-`oh-28N^h={ zgH}?t)JbYkK0hO~U!wa;5gWZsJBS0!K4BOO9uHehcHaHH6CFlw9d}lWQlB%ytmxgZ z??cloSk|eTVHpj${G-HQ3Nb%l&c94MAmgR2eW*-st#`~zbkzFPwSh#y&md-7+56B~RAhDF{NHQ6c8Zg(WaE9Ei4D}y z8tPOHX2qO*+gWLV#R+O@%wTy_6dPdTYWOzNY{`NLoS1wIpv+`bEZ>++HGX!gxO2#Y z?%lRhr4_ktcjYFfF|tVeccp;}xgg-luS}o@1`Nfy_h>+(s@-Vsl}}UCMdvrWBYDzo zCfKc3GIUS07s*%UVwUnN0$hvfNAA+b+(iGd85RV-ZRTN?q(|7~=YTG%kAe4aIRg)t z6Wcmp2cLcc_xp7>(~lG~NQc%Z^>cO?u2CVwTVFIN5dcmbKY8SY8xT)C`>XwK<0jqYLzAc)D^cRLl_$TS_}iqrAhPcfLv=p8;bPX>r})iAW!Z&2 z1oiOavLZr+LX%{Qa%$f$@tEfh4dG+#VXHV_h6SlPIyMx84POl-saH+Unq39K3!$}3K@M&a=Xba6$FpGSa{>!s;?%PC@d`AgNOj~n7`|J-A zI)t=yf)(c(ZD!PW`;4p6zjW5zwkiio&nlRnpdEoFrK;}9bNAhxD<>iBqrKP)s_A!P zH9b^bVhF0VSeHugUkSy&F+^zcye=OZfKAmt#>kgL<_0g)0wE~;Bi>K@TI{AmLPGN- zCMPZnSyxoTdt$KLZAn;hfw;|3xEs!XIz&E)hBG}63*jN_62+k93)_k#;Nk_pnZ7AB zTr8XW6p#}bC9)s8M>V}DvW{n+03Cakt%4WDlu`!eGEOcbg1oE}vOE}v|3~Y966-bj zYSfpZ&X2uFU1&e@=)`rQa#Lh~EklHdbLFRt%p0!^(S02v;*N)qq&7}QqP$Lv~ zLWo87UbL|UkJJmrw70q=RyO0u>D$Ir4Sn^Sv(53c6WCb*!1Gi||OSjGUV(<C^Op9F`;17Ir z9>S1hCz%oG?eh>&`ITMA-|qWceg`6K5)_hZzYvE z&@t_jaRKWn|E5%#U=1cNT@aQ?Ij&zITERZzKGWXq%k6gsn=xp_oq)C|g}WpEaB2=t zB@I{6{b+Di$gHZ#NyHGH!rY%qi%{cu#x^DRWFr9lx)K^OAVrLaDmrr7q4Mgngl{)f zPg}s-jTvFZ6=HvthR)vada}%V#cBWX>|A_o9 zsf5=g|MQ88i1)n4&G?rT?wCt$35^QGK#X3H)@u6nm=*+3;d`7YiZ|JQwz7;48q(as zN2r)M?50Z-u40H$;Lzbr?*=OBM~oH~0w4qgvy$fEs)PYYOwTulCwdnRo_%C(_JFrj zyo6^}=Rlp3S5XbxX2zq`#CCbr=o{}(GhxSCzE34al?uU(t2CF9jhctiXscZ5kfE;3t>R~pQ?#b*Qv%WBHW4!+nbq(~!B`W! zDlm&wm%SQ9`j2$=i15S^H#}C1U)0~kXHZ{xAO|FokNG&PUTmok(D`11y^IEUKb_hK z?xqfQ7O~c3UQBs&Cqz-5-@J7-qhNQ&C8TCZ55OXz;4_cW#E?#vOri5{B1*&|B?dEX zl4V-kkyCRg3k!#D^cYoX?}gqEBRwUSQ7fAJFmM|CsMiQd`m)UWC|MFsBvAT``Rk)X zi=B5HOIBC_kA|Va?z+V6;_wVOV$u$NefoF>`-@1NJ32>%?@(9q|66>)&2UeNJU zCZf>o5KPt6Hew5jb9PToe+VI$QQd~Me#@ww_IogLeGVhc*`cZ3MQ785>#y+9U}lB+ z1{}rwR8X=?#s7H1%7%@N>H>PjB{u;D@flYk0 zf`nCiS!ui!I%>Q1_*l7nqp&4ulRG#tIIUwQbbbjs@PYp#M-)}sq^Pn3-aiI^KB9mB zwvw(uqj=A(&_hyKmJIG*%2<}`HjgU(Or%x?VZ#rSp=)57>B82Pr_%j1!|Yo{+&ZSU zubIS|ftJ#^pxz8dNT`BZrbkZx(!b-5ifC=Vz7Of?w}yg`JPTAtzOAgEytnvdWd*KQ z8uCI+#G{y$?hlW++@rdkoB@;(fuWn}(!QV5&C*Z1SzUM*X!z9+lAw3eP9MLlDk^6b z8$9_QBIwx1p$)j1J^U5#U7Jz{?&h}g+}NZR=TVIDVBZU~Y6zO~$q%A?T? zf(TXqm*G+NYB!lg_!Jz^THQ8^i>~`b0BMI0XQw{w4M!%0clDl9Vh(Tgsd~PY9>$~K zpCLWhCEo%u73p{s5%?4etzxqo=?b$IDRsU1q_2{mMH(;;Rp`CfYv7NvH;}O+PSUQA zrZvl^i_!-u(Z7D0XKHNMC^sEqYCtjtXQt_T$yzMjH+bb)x4VUaX<+4tkNl zjgXs0uHXGfhh)+sUMWZu@t|+SGfn-50l5Yh>_6{Vk7!}udz)u|810(Y@N2{Ou4W#( zs7YVB%M#%XE2bCpkXL3m_=OMOT|7YpR#pocFG+uYxnnUEzQJaL-Toy8N4D+j6A$i! z6F0*Zt{7$&Rrm*M}Ap5HFD zAoXoB`>HxjLOr5sC1R}XpV07m2g2xX`jTk`A%IQEBJqOW_R8zq=Wnr$_DkPae1sbr z!u@Xf8v>b)1gXl_)Ntdn`&9DA3RWI+w0RYqSO(oOgYTl!N zxrMhwzPg>+uJN10$a&p#sIMx_$~UB7M@J^BD2yZcHLt$+ARCZZ=ZmRf-DVV3{}7NC zBd!K|%nxpaF3fLL3S1T{U#y@4*7AOvyxz$4=>E84L9cSvU{3T1pQ|E_u5pE_=P3~| z>ZCuZWwbUHNGhd`lANsx>P5~^r9kVyeB~4Q%iQ;{qdd*>rIj8!-E$qhXZ<_?88FC0 zcLqWXeESExFdqZ4P`E7Ew#k4H{8DrYG;0kRij&lBS9`$gtC>}Lg)tleEUT}3VVu9W zzABk;auC`7(=XyYv6jmn53TR~+L%Gu7w}D#>;&Ujj0A%DVMsPElnlTDtkM!cC9vOk zSDZ(f!ngUTh1;ppZiwp!mD+lH(Xe0RfXkex^v4&|VuIiS07Vcqw4+f)Nl37j1xUCo z2*vawD?SDKyDngtG< zSFQKYMPy%XN2F%$?RvS3*{LqN+q`?Xe!;s4dQjLXHh{j?6Z6-bPL6|XumW#u0*UPo znBlGnkl36z0JmIiGFKyVhyBRkX7SD|p^OohF0y=s5n_Fy^4EA^YM6#a|I`3a3|{c2 zYr9rbc9NbA-?B}1b%;0@H6aH!7o;}(Kv05s3ZfR#@qU@KTwNc1bULC*_%quZwYuwY zEFg6B2+Nt{^m_d(`TD>bO3Zx~)u|0`&bt_vPD>Sf2q(J$JmWk05wFS|N2%EY)fXaFhY+08ZrVtaMDI!Vv#lj%OXhg{|bRXK=R`AS+M z<-4x9Kfv=mGg}v7QJZq}HCz6~&=cN1RzuayfngOUr?@q$9sjJOyL8G$yQ&^bdY|{k zeC6>v^}CL>4Jd*&KnhlL<{YNH*ug&CKHqmsP9$BIrFt`S9#0}4@{6*&WMb6qTUY;jo~ymV8Q8NbFKF9 zL3mX5iAnq|D}_vjAos9n1%S@UPLhot`$3^9#u^V;RR}MS$hZnoKLMwMInxJIoo`d| zi*ZDfym&rC`nI6(cLGiwrZkF$`Ss$HzgNEkL+)YpQiIF4{C(QJS-w+wRfJNdagwM8 z_C+qQ>cPH<8ZTZzAejlTuN-~kvM^{Q0J1l)erOr*&Et7;Pj>p=YR234A?HEnDkNdX z3DEj(2DShRP8ZH@nNk7z-@+h)wkjl*ZEG0vI$noh`?06KBEC7ul%Uj_vep)$!g1yB7+y z6zwDk&E-@F+-%L8GlG951cYy>}rGw5@Q1jO?_Fw6jq8yYRv$J`-aa2HVzK;BO zBg+5Xg7(dWMCjglHnhIaP1pfbwVKfKANA?UGUO{S>%)pmdg~ude|}iNfHA*{{gCX> zH(z#U6FYre%|0|Cv1#0$8^@6TE@p!18G9ZeTaSAQ-CI~61~dXeKN15t+w?}>MNbj)ZYIYKrB_7YH`msLLnn`wACn4o&ya(9HQT_;jtI)nhDO8Uv0@d zxLz3eHikYe1*>uub(Rp>pX|N|>a&dv9qs=lX3Pp&nsn2Wo1t49t8TH^I$)NY_2kaLWJ`>?Ifbfu^!y$|$tnwk;K6!``6EAC->u32?Eu^lir_S$mbZ8xmV^C=R!ad{ z5C_dMOJyAsj4z~bD6cMymO(>%YOguaavmQ23+x}K;$~P!!F{#y?(K=8F}!{4BXrGf zM2>4F^bj`y!OzRc7-V&;*qRQ5FfSQs}?+w30XZF=LX$&_(R4wnI=_gtmqT_V!j)%>Wi?~O;-p}v%W}8&mR=V2hr)rFssZBPrkLMM_dtW=d2mc0 zMHIlVEKcu{6mkUT1_OE@3v=b^Ob$)wZDDy6@(cT-XbDs|8CpLQJt`QVR7LKBTsQEf z3djR8Rz?yU|4Fv}nK*p`0kkZ%57;HRKMYTFRu7CkyVCCL7(?2D+oXv#)Ha{&v1;4D zxg9I|eA^f>vm8?yFlOI%jUz=sQ1%ioraO&NV&`jHt`t+mmx0@}L+XaQ6g}@$H@8d) z?W1F!lGUhsDI=s65bgYh%OU(lmBlgR#n}Au#lIRfw3vTB*FRB@h_k}A3Te$$_*573 zowwq*C-Jnj&RATrDvGSrXvsI{=%(g)RdPgR>Tl0T%i8&0m{oTAQ_(c-_OP&m+*=uf zF^4*U|3zEzUoVdS`cW95k~u2v#T{?}_H^+q+O8T+K0)TB?n0$1JMh5SmLr34;{hSK zdG9aRGh!1katUUVJQt((jucJ}AAq+H3`gC(xNql%`+x14N?)R2S@3I9EHgt#>%uD5 zL;UAdA?W=5;a1e)ys6_<7P!FY?s0;-sK9pjmp5CQwC8ff{tGT8P`;69ZGGzmjX=r> z%zxE{_dq}5c7^d*SUGDV(E)oqZI17{cS{w?MMXu)MW{1my3HgLi$$c0TU_`8t25D~ zQOuT4sWr4K;fH>;V1J>&sh4TocR#mmx8||bU{%F<*9~=&JcL6F-xh|#+gk{k7;I)3 z;=SvD^If;_k?7KCqI+%dx5&UeTA80W@v$x%v|axJia}=*W|gncKhN$Cuc3Dv{p+^) zlv>#33k4soMU|#0&o992PXFn+*bnjFY`S-o6EMlrTmM(ev}qAmV zQ@(-h>yIa1d_!trn1GoojOgo4>GX~5hHT6(v{Tqk;<&o#5~adlv0GSFElH1u{Q61( zaW`B(;1`{^xr|{3)NofD=5^eL-H9~Z;>z5=US~khWRsei;2A|?15{Z6$>=e0yCJO^ zkGb{-g76pdUW6}nooc)*b0clOuF{Lygr<5?p6iODirq)NBcol9)euHnSqH%N1nZWa zv8dkd4MPf(oV&$XlbDPXk!+LzpqlD#KPHyUn5oT(BQUffpTC8Q5r|NIwn_c||&Q1PR6 z5(I_&P)?@v-Of_wzstSAZfQ`lZFkc)QbpfN3YtD!VuI}V;NoV+I?23+*FgdKhBArc zr+#PUdUdy)le%|0&Z5r5{zXaVd;dENU{;)=TpU(3hIMihwWjonS9hPHG4CCaxIr6REAmUFf|REw+0r^@zClXKzyJ7Zp|S%f*2DGb;p z8z+Y*|M>Uo>cole3VawgOW{{fNfP!`P(A2gbC@j8qjSC0OUTUu=bpG>itvAnTPG9q zcm2o6t!d(c97!I{A;la&=Aup(JXKeHZ=ZeXS*!84Ld`a$Z5RMTGePt%T_o&JMW8k+ z#sGHnsp=l!)zsK8{I)2;Av9}Ww390tAx>E8$kXrOP@$Ah99e#6-&QxPA}>(^pjNg% z;?l<8o67pq^W(5Td+DZ*CH>W#Bo1)eIB%`qr-l*6(DzVaTgcX2Uz5MJxvmNAv;wbP z=QZs)Y7BW-ib%KHoteemdc^)N(?aJ96Qp#6vwP6dD$ZsKoe>A%N}sHW5Z>MSbi2}f zg-UM69W-*i+<3=Rajl0PVG{%&Ib4-M#jpPqsju}fUViw33@~yTdf~}*>E)|_^CwMm z-(bk!49l!%sQowY7K67=Vb%-`lEMR+Si8kc$ zXm+;d)}Nzciq>E%$vTAbWf-Kb2mOTg+W;##6i?FlGePgo$BC8syP!WHmJ7|hfcC8d z=YTnX6VJU{qPZ=+3a+7dTR`KMP+R1`==Q{DZm<=Rf@wxL%*)5|73(;LIC4b;dJ zgulzR1JXnMQx5Ib)NI@Q-6IgV1pCmS#S>xR?n_Y6Hr@0i`cn`T(4yyLH)wR!{pWIf$zt*5I(7Du@TVzSjrSDGa}Zm1xsvD?lhtV7 zuz}%-0R?NOll_asHmvD+_fhuSV`RD=5h~E{cHqo&k7VWv;={{|$De7Twi6XkGm*wA zLL>WV2s;gZ{ol8Xx5I~GmY1ll+w52^IohYLjj~N)c;Z9Q@N^Dh3~J{$2b&$a-k|^ zl5ZIi;l#qgLLq@NJAx!tP;hP>)wK=f`~6a;=lSykn$y=JXa({1l=?vVWSKh73*w>u zL^42lv%To--|m;&g4@|A`gbXkq-9V27ampQrrSR$tE4NcP7M1&sf%O+CNf@?bl1Ef zvOd5Cn%~MmJ%YU3zZ|Fmpl1=J0?!#yTxN;$8+aOBj{;g-l(YO~6QwvRH$7$hhIWo&YfGb$+L6Qm8?q64a|BBcxG7kfg$K5cL z{V8tn=iFgQ0=Wq?;av0ATYXOGvBGm%xv@=pY-w#rR+2{2iMQPbr`l}yQ5C@?J}}eBjz|c9(V9o*bOX^QuWi=V;;MQYN&*-qrxwvZ z%d!7*J^#b0EimjD$v#JH_hrtw_V&|zPy$Z2di^SiVK3Oy{4xn_axsh>NXK(SHE}or zVYcMtqCm8HPDlIpGKA@FS-=M?>SLt~NuGM#u-RDM1dVycM?Zxf;(NvQ0k+fupVPT4 zDfSLb0JRwC5SbpicDFq{qON%Xrl~K~uNLLmi42sK<4qYmpGM{nBYH8Uh5ew+N;)+&~uXf*pEg-c&$y6p}0d*7F9e0x@hk+3h=JEX|GU&g3b7COHcmxnRHM5B7Rgc2swKoV8>M~B6krD zb`WxxgBJhuZmg~Axa!}9R<~?Ibpv%dtSF7%ZlvUU_Q@vWRDAsS187Q!O>7_;YkdCC z_XP=HJLO>Ucu}C_?u+JKRi$nbp3$PH4G7apncQmFE33`lSe65xtyTRk#?{1Ho{0mJ zRzo{(!JfPJhh1zE%rVq&-ORw}1D|c-473n35=`vtEi&l?e-(dUb*;L&bi!|Q*vzG7IS^@2+m9H%bVps>CxdJc$gbFxvKSR#@?mz?eVMF%s&$#UfAsAK^iou-$S};XG>8fHTMvlKKR_6yXVEYHx zn3v=y_eOHj4UKb|tHuL2FaAYs&Wr0sm=8-1=NzUr;3?Z}H2z3ph)H_w+4QF8!Wy^%qfuwVH3AD`= zWaOwv2-kX(a(Hs`WL6$2%Qs}&J#YO@0K@#Rvh=&AXotk#<5s(6+yKIp)!&-4@Qsf@ zYbGdnV$W{#&tOQL+!Hahn8KsQklg7U8J3^t7b1LV)K--dS(0c?3jpr!{yuNGio54O zlm%d)AdSJ=ek4{kM1iI?=)rB)crRX&51@J84wd8&3?H(nKXdOkQmGci(&>CW2IH!MXZ(HvF-s?PrsGsKihqro9h}Oomk}c zfWIdf4cOew=RJSFezapgu~&A2On2xg{i#|5Z@9hrJyvpe9-~^rMjAaMhC#jms#7E7 zYq~~r)H4iVd_s=joV!%WPtPmOs{FgEZez{0IQ1NfWwB6fQ?rjJq#URcf%)rh7XzUG*(oXFPnFmlDh; zLxNbsEgN~sj}3YMe>Ht|Kvm82_ufl4N=OO{NJ^JWB zX`}_|?w0rPe1Gr#ch2n0d}elb&z`+Ay1sDG_f-2v_GIQl2#Y{ZKtb{u&CAuJoD&{KQy?lQ#c++S}etlK$Y*t0o*L;Xm(Z7rl&Jrm(~#cfWX z;@eG5stP(XS%Y5poI3Wq+-_Iny*=FQ*k9zDUuveB$;@Q*}>I;q3s5y=|YkBq|L@0^Godoe`4T#8@37Ml3cW~A6$9jg5T!G z0SzX&U@`v+6bq7%wiltzHiRwf0-AZ#XC}TwXNkk#8V^-6tuecQz~8@#{!H|%Rna)^ z0SX{tLu?cK4V!ZIfBN9Fl#hAUVO??6ajDKehBLwOf*NOz25(jNT`Db*PSJtQ=Y~fx zfF*etMHT7vcKLuf%FP6{#j`7loBSQ}aEzO?pL3c2xhd=ikF_Pr$vNi1COW7z0PWL1 zC=PT`EYv%hA76Fkml_t3mlPbn68k*#?4im>43~IhYR%}Y!7fK}0&E7*;SHm}E|{u; zQg{yDfU_jg;JM7m?B8$Ardm@FNKTq0Imv7>-=;oFMD_X^V38Y!3h{K0Vs5}(p`yK}@=T^&l}l;mH&;`VC~u3fc53m`eOMnt zEED6TNnEkC5A;Q!=aA81i4jXOXMbTHc;NsLEQ6RNkvqwe16I$X&qXRr$NcA^d16;o zH!UT7_$2D((MD|NjSVpM;d%eiTmwgX;wJ(Qs*zW2b(Y7oeK#Q{CK7vxwCqQz`C&=X{VF%ji;0IC6M7OxoXenA--2J|V-qcq)OrH*KuUn!CntDF2 z8e)7>++FT);231;dYs&?WKgmw;j?76c-#ox>;{75mQLWN5!zS@6Sv zw3PFZmF3{(s;Gu$^d?-hg*mBTe+S)uy!V+$ZmzZth>}p2ka1JVx26K-3+5zcAqL zfcTDH^4Rm%@#*@N?X}OH`zQBrA$@6pcBZp8#eUo8|8ZAs1}@k5wzcaCH+|nl85gdr zhBt)|LUmPoA9a{(%AjW1P-xzH3Q|rFLumhR{)zy^e9?RE8lZb~(i=5l?6VYc_kYRx`+xk`r`orq70oRRGgL`jnJ3$~IB9BB z=Z~y1KM7}>z+Q8v1B5qa(p`Z2t>4++-@5ikNQNft(e^6BWl~9(?%b+Ovbu z|3wEGr7WRSKZs*T*Is)pzRC3dcB_N6NrG#3>%;RQdiS=Jq|tbn%e&XEQoFtj>{=B{ zvNX#n>k81P{ja{cUN23<4a$7|EGRFsc&7YC-}vKgcMQ}uW&fOz&6JjIS{*1D8bL0N zGc0}O{@t)XTgiL}F~soQ5)R}Vi?&gv&pF$V^SR0)6}P^^*HUxig_H&bwjPH%;;7QO z5#k+u{APuB@*{+wRd5JD7iyZ4-@9SGe7k*Z@Wppq1x-Xn6WXQ@jsN{7vLSV(EE~KR zi>x)6K>3R_k^?G*!0ET0nMSc-Ze(#i-`-OM33*?a6X5Uyi}9h#LZJ6+Qy4MU6}Pm zq?R30YxMCpTKxB8>8W$MGQawg34gz06Uqxed)MRs-?bF+I5>YquCtj*c~&33SwjBs zgv(XTU<};LqbYW%K^j=Cud5eT_wU~gUU00zt*B+56!dBiT0N~z7B?p&du2SXa!&2R z5T8+5@B?nclmGR>_Jy6E89NN>b7%Q&2jrGE3z|)~*Jh$t)Z(@nu&~&dwOI+STV#Iz zOmPyhXa59`j*e(0GN_!h$+(9v&9&ztP#$`|LN0~OdsZJkUWNPCmgr`2`CHriAdxu< znTm6s?vUk&mkIbb>TKGG{F=oG%3mWI^G1-s)q$ek6MUzB-Cm9MSwWX}%8O$n=&Y6E zN-9_WxigbvxKP5u+dn`Xk@z^Z3hB!Ksm%%i2|PyPy~*uFb)s%L0+rkIzr3VyZ#xNy z1@ru0939m9&eLL4#yt_t9wRenfoytR^8JD&P18-j+;`gm?cea9&x`p^gEtouJ?m7s z{cc}Az4SgEL;UA!PE)j#z)tT980aHcExi zZ<6ZgcL$%o7-X%D&!p`k2BTc}An41@uc2)k%uJWsK5~w9SqhMZ-sN71-e&&cAlM!4 z5c0TCjn9>;2G?^FJV-eWbDJwUPCzWb_Omx{U}N>6d2@omxIZ4NppJo0BER(RBmEm> znU8;)J3pPWMe6<{hh1!qbwJpeq?$o?C0>|zSKFH9cCu~|O!+SoyB(94rpYVNxNE8< z6Q)t)WyuG2553p2=n0|xWgErSr3D8}p{0Xi{Ogn9v#aSvxHnge`*^o&(`VRUyhfSk z&4!oOKN78Uf3zK#hWV)JVbejMVN+Nx%bgjUbv;gXz$^$Ve%G9s4qf0t}PF+u#-cJY|*arvu&ZY>m_s&T%&PzNN zNmb<+BQ_+0VwT<|_A@egL zzn`^c1A&ykzJ-{R$N@1kz0_*@=|r3Sr|%PQf3;J*bxqLg=ddu$>yjvZs`mHKkDUMf zc^Le98YWysB8dTtjKyirZhX$s^jE{}G}?Q&J9Muh&C))xvrpNwqWn|H;-rNUHyl$EA3up>9<^Lei^67Jr5w!5T(I@`e{#**7CXg?d|*hw6kGZ#|n}VX>Vz1%hdDw zsk!jcwZT{Lj&fM(^m15r=i_O7xk0qYieZolL6fut+C$Kh5i-LP_0K1RFUCseXX`+@ z@~IhY;23Y1>ecv*v`X*l=Y3N>%xGBL*8;7g6ZDq;DByjeWIXMk@2Vt`(a-x9H#`i- zRc;zrYs%$KS{y4oC<$ha7V=Sup^+c!(P13mroQp1S&yew9d4PZvHjtoN;FDP08`*I?!*(`{n`Ns4GH6~774re5?6L0ML zclSD5$FQ=2KDhzcl8FT-OLpUqQBYJg=+Lrw=%X+eK?`Y1s`nHF^ff(*-z%_*{MYt$ zJkhYu$i+hh^!8mM*e4pPP~pR93iJOI*Q2W zdn&BL(2b4wwzhiwk2RRvf(U>LlvT)8Okudegk(`Vq+ZeHp8)$bk(m&cB-Zmv0C+Zt zS8;$k_o>V#F*!~94!>lC=)lD1;LK>Fq^x3yE@K@>3yRh>-VU{92l+>n{(6eeV4-L< zY;ZcUqlR@K2IcZv?`;jU-a4iyMkQ3(4OkA!(Ihee;k6u1PvoXdknr4bwx-;n@MGoHEQulQ6nX2OFx0?sAuJ4NgDM3 z9@tRSgC00z9v&m|M4yw{PLKPZY=JgQ?aG}U0}!N6VBqS`C0&hO+dsJDQ6KFKls`Rn0hd3W#gM=n=PKTtl&XKn zsJ0oW-DP)!K_??tLdbiYT!qwg(@wvH=SEnAkikGyB*Lh7_`0Unt&Gk5cE7Aga)~*J zZb;nykCCsVn%6y~&0e)K@CKN+RvB{R`5P>GJl z6o*VA9)84GCwBKfUCn*jTftEf9hV>Dk7VyRzeUM=?T;~#c+U|Ju#0s%pJ@4cdZ5qw z9r)Z(77xjyQ>8Y!;v-T10*J;pUu7Q}uHvTHh9%jM=iR-3tD)8JC2}M8xdIw&S*zls z_BF>Z7!F8L(rk}K2C+O%s>3ev2NtIcTtY>~)*>ID5GVlPl)4c}3qrn0z1oag*S(3z zEas%x*zWYk7M@p?fxO7-0?nqb&*O2aJ4q$YcS2u2IpETh`~(uSz~fx{B*-CPhxG(0%en86_x+)pk@SeUFH;is6JuNt9ay--6_!@4;ZLuACDZyr%TS z2YW_8huQ${XoQhgTN&G0K*~ml9P~gvjcYs_e*NG0HxAPU?s<}7Sk1ng-+b|f^;Bg+ z$4x5kni0?vIX4TEbW^dFK^rGF7v9u7=AbQAzhVa<))z+_5`RPH@~-mF^Ae?|&tEH< z5=R0qsrSYU;{XEPiu(lSPFYWC_HTE$PK1CRL9C%yWGouOn7aXSQ*fb@buj<7l;e{% z;K(RaG%`vE$8pBG5~G8G2i$}Z?q6sOu+$G~pQzTAF=JxI$BEaPiiAk#6C^wY_)<}^ ztU!OTp~!G~%d=K;7CVCM-O?Xq8x>g~M*Dmoik2^Qf{9m||IFnHofWi=RMfoA0*b6< zpuuCkohljO2s+pH+>`QLcROM1hn<)+MIX-=e+(CPlL!DY?nll9Fn9HQz2dfA`pg{P z+@eYg1HEhUbY^LYe?;iW1iqB$BC$F&|MIx(shYc?lFIoR1ZpS*>eId==p4VLCN|LkmUg}1|XqJ5{dG_FQ}erqTtv!J#4x$i#x?Ml&r@nHdlIRMl^_NDk6 zIzU}wjc3A92|sVQ7HzTc;n?P|+>t93F*k~={cgfAeWZtirlN2fsR{=r-}eOTn2sRP-3T@paK& zMpM}-R%C>5dp+?4L(B6kgP^6quS4=kRKU+;a-)kM+8Ba5tiGFt5m`u}%c!gFh#m1n zeJ$AVcC)H*>+|h7>yUGoHU<}&_|oTh?ZeC+0KxCAl11CmLCHQ#_yD#99 zJWS!&T3H~GWG%(ZSj-e{I0)H%L?=!RT0TX;$p2D~=FmACQn^wpWYc*Yd$$b(heek0 zw7^|3GRZlimQu2=j3Y4+2Tjh)-B|!Cng<8V@AHJ?z|wOU2_n97g9yAL8k>|0ceC4s zQX(KGl=1;(sXP)3)7D_1!0}3q(nvzQ-3vWerkxB*CuuWK`d^rI)!Rz73us#ndO3Zd z(%2Hbj~z4)1#k4%I%tc+XWohDxxMi*Kk7hOsK4zR$$@ePe)9fTBA8Z4 zGOuNGGlq|Hlyrxdr{2WduBzOJ-N>MehCC0FEam<#ppEx>6KzXbf~C<^%f(^EJ)7d5 zp5HkM2gJ@U`pHpciUDn^FQhQ4=FZZ&J@iTxIbguSV>E;oXhj%hLw6Fhe5Pcb7%9m4 zJ=AX%t_cYs;llGV$N+~tAvQ$j!J?+(i~xwg>4s&Yi{@A(Yv^lN}Z+?7$N`pM4IsH!@KXMkGd zIlX8M)MvXg_o%TO&$q<>%|71Q-Y#Q_NjMUFsF&7LF8FtLY{v)oh_@)+{MMQ>f)7Th}(HIcFH#GP0rf zTFKB?CJ^a468WulGV)5T&;%=`EVJ8~QB;jdR1J_6mh(fUthK4oMr;>-knLB>H)OWh z7ZN#Q*AGj%VI+n9(`v}sM)i}%t1Y(ILiK_fN;x$7zwLICIN~$-iRrgDCy0M2llr---{9?il~ zoz_>W?>?G-5aQ-veA0p;V+%`U|hW#)Z z+2`ZDt`cd!tXUrv%DP}XS8>+=x^dh{cJ3qlb4~WedAw+7@)5G(0IrGpgGz8F6xvuD zB6?MR={>~SYrUu%ryXIRudvGR`WK@kCF6y`OY=w;9 zzW8=x>f-M zbBXmV7AhG3L)*p#j~UoCa@IW@Zv4lt9}+HP-Sa_U9e3qT4v1I`cF#i>x zuZD4YPK53XUIu$Skksw?%O0}W_i4Zzn-)`ya%kn{14N*{eb1B;I(5L=lI>j^l;FI6P?1Rju7zg9y?218{VtRh2 znT+t52^IQ1dV5WgFs>IPl@py&PN&9tMPPh|Rv&_La`TnV>OaPtC#YkNIobjIOz#Ao zMq(KOj|Z`&6gZmEi|C%i@&9528>?i4@>*tUYP3Jp6zHcjn@BM{W@?lnX`Ku27cu*5 zFWqUQiri^pCg7qyW({O^CtaP@3^d;7XHi6^?snU$5O`Acs-k4G3RV@PiGE zh;wsp{|zq?mseNU8p{sQB4P%$9_x7zViv*`%LWT5GoBlgz0o09DlRrLU;tJpbi_ok zAA9fE_7;8$G}u?MGe0HcWZI*iGWRBC2B*J6yu!pJLzCRP=c*Io&o3FJMIbv>1JNhi#%? z0mj#LzI$+{URH^v9kzU0C!KE$TiDJsX|~2nF;{rx9%22$4vQFZHCIxiTOuYPI%&b@ zcLqJjIB5HdeseZz*my+h7xy128zR0!#S;`PvBACf^wCtqW70#Cf9vmR~~87 z_{&$uK`CiS;5!~%B7bKJ6<6e|EbquImer1^6L7`R= z{dOf?S{3Jn0_Cr^I)yp?GDyxP2_`W@2WPqQX^cHe+3Q$dnL87d^rN<7JdTrvrv!XV zm1cWm4a{1=%0*uv4<%d6tExK7iO%r}#j~=GXB}#4?Y#x2u%d}~EKKlU#Mcit z80p0-=0)Oj!)H5Av006`7gArr_;xMVFR`@r@-C|;@l!MhTC!)wkWfEQ{Nx;zZ1aAH z5_GX}jSlsee!e1iTGD4lU64k8^C!O4y1>d6-+%~a85_>DczQY(aKTFY%;L+ycAREw z5{lSv=9U27*Z%cD=B12jV(j=DA~w17$$0+c=YVIME!jPmR`~*xe>UwyP59v(c7?vy zjn~QiU)(Sj?Ljtw@*$K9G+u0V8C5^oorRk_Dq{L*o(Vn1dW2~58EZqbOxyRXKwKBU z;%+W06^Q3-RoS>rq{rBIN6Y5Fjht3T$=1tsUFM&{Z1|-c`eQ>9yDxoOJa#Yx{8)QL zAB8w8M>PM`=&0%EU?YCEY*b91pL{6R1jhFm>Ih+$X;bs=DO-=TC$!=*<16*m<;{k6 z*w4DL#C8jshs2O}ovzj~`N!PXcs17YJCTJL&Khph+}ZTOvqQArd;+oSmc74CnCA`^ zC@;FNcq*_memkUxK0;jiL@`4?SoflzAVPI&mD6?EswZ##Em3&(%=ItUO>nE1o)vk2 zClC-d-Dj$7BxV1Y;zj-TJDsUawm*1+GnQyqa`bPQQ}`GeXIfx#M2C%f_ZA~2aOgL? z_ey!nFO+OgUqTv}c5lL7PNR*X71pWI$7L|oY{K3(T#$J3B#bK8i8p+=GYS)XcEGuf zrf`2Q3MgYPiXjoz5=0t6M8EFOG9=Z}jkvIXQ+I1%HXa$l$vx}v1xt))KZV>tdd>7I z@*@fz_HXkZywG);+7c>6#C&(+Gmz*^x;ygQbIb7SS^hIglgPKh;BNQlJUUptprCvW zn2H<8#ulYlO`nCmGN8pC^DSG~ol|)$Pl8Z&Uao=Ix!WFQ#CmKAMbL+`E9|exw{`D! zg$BYHy4Bkxi4b#<&$~L8L(=>0Mluu7C0ja=DB(BtbWoixhMzuP)0)5=H9y{k=swAB z1-3S%1>0qdn)dGGcw*X*SAw4bA|4LPQktWO_Do5=D4mr93cXVi{j+>B*obPIu7YPk z-KAZKv;F&|iR5E!`5{Tfohv~vCu%muZBA7YbO|q`_LbS;(mUre1|zMgsvpO2iNAmf4hK)bCZX z$M{QkcL!xyq=>kPde21{SW!i|{=NsTqUl1x2kf63LKb?9g<20df!T`zFQW%Bt&t3` zj05J_s_3vk8a+Q3?kV&Zfr)weUe+MJnH6VIis*R9EqEwPg8j`tw|Zi>QsJd$A4o7W z7Z`Ge6;-aevM5A#c`>c2pOIU_3%tf;QlGNQv3Rns?v^Su&JLrL9=#yzd#$K5JtOmpzY z5S?hKZ)plX3KGv)siG{0E4D*AT- zYRsdX3f{bJ=YkuA4e^lqsIbeVRVDbvDjm{7RIV`|Op>CO+DUXF#<^~TI77sh6i2dO zqL%}`6_9gYWy4eUsh5iNrq7tq5oW|dEqq*4YiF!B4iYSLrW|`wO%KX`$%%a2$mov1 z9<{kCg4zmKJ+}gVUmxE)xut(2Pyd4#aYg|(Ny3*A+sPaSuUMd5Vt=SlfaoJ%4BH)# z#$rZoV&}(m&jedBMVc=Q01y`8{i5^8-FH5#gEHBobI5my-LJ0#_TWBy;r z*;fT*#b{~613i9!I}E);5vbY-B!cM7WNOjakG-if;4;}=cK|%c^bQyP6 zo!%AO0ArYNZ+=W}3x20<_b84MXxR`=a&dye)r;0=`F35OTVM=R;^~&~m;j~Lr@MSV z=v=AXy(|IpJ|28g8ES!>CVvBfSG_JCv6tXy;9j*hdB>UZ7UE_0u--5$44B;|^q z8pFI=VvjR(6Hgw^cPYmb0K=FtV#VIjVIe1AiUO6_`W2{Gb9)$%QKOnA+!eYMW-23=mH z2gD|k`WZd4#OUv9T`BwMdeE0b@C za21krQ?X@QAhPK(epQU4#qWOphp;av6n^7n%feX-Af{8!`xi3xqvrC4*RJntCOleC zr@v@-XDzGjfP`UMT55W7j*LATONde)s&7(ePIsP5=LY(w(xcS$fFs8-3H?vpe}#Nu zEu-phCo9%AEA0gUMoJ*^U(<4if;eFxw;k(#YqpH5)(HJ*Kl#Uqqfd}7t3q|=s+3-A z3s94l3(}fX=Bus>2SDpU0=dQ1q&nWNsZXo)f)%E3$K|@Ec@haV!;~>*nu%`$rYo9X zpQ%z_)8Zm`gijpnmer&@5(bQrK+{$J`QRUm;gc!Ay|`7Y+-PD&%E*ocFnZV6GseXG z3eK}H4Qf3EY&=w=TUuu}=|3MMkW8(4rH-V$ zPJ(NDDAW_4M_&}&wG8N`PgU>bUc9~ld6mG;;=f+R-e;TW#NWjD%HcMHnJVJO!3_qKVu%eGT%}UlP z-c_BxyrA<1anlhr5UV3u z!OXCz8zr90^V?^Wt9W8$v-i2~)m8st`r424*1Dj`8Iy8WqBGHGrU?Cm+Q<-4)FQ_6VixD?hAtV%k zFvtJlgJ5rp``wfyMHB(&*Pp+&k0y@iIxyK@^Gz5`G@k{5gukyQ9VhBJp7~ty5NyBx z_s2&YSuE~0g%GYB7gVzMSK)DZ{c@pbjr#l&5BAt$mpnjFl#fg&K;-K~PK$$#lw^_H zcV{zY!fx^)#+3z$Sh9e4ZeGuJ(4rCnJ%mYC}o|@(tRaB~(z?XjJ#!VxlcXl=&4?v7*U4@-I zjNzxok1i(rk$zdKZ;9T4+J|-W0<$by z$2JWC`%yzl(8qwtVWFdBZ$0$wgI>B?;oI?_8lZ;Lqh(hV@V?Qlp6i5fcU^5KjUkw2 zN_(ceOh|}!5!<~Dfoc#|O>9yg(KyV)ziP}>DMA|UDvt^BK1J|60d(&oS6jZ|40ZEt zI>CsvvQAkf;MB1+hS}Wv@e5O~CXyHFN+^?$bcvt9VtzhgS6;ZDsfnlxuCQ-_#IP;s z1R{$SxJ4oSJB6Yq5*m+r`yE7xwC+qEJOqtU_qia_^bkH$C%#<4r#?eI9z`8j#tV0p zz!d6smas;0Jsv)Ba}(WGub~@a;#?yAvcL^2G6RGSUTf zq*4;k;YQ;cG^~_W30YW$FZrAi#B91KV9UT5emDvZl9Zx`tMTU22aY{6Q9}oLI-y8U z0E!2BE~Aszq5j2<;j_u0_cN{2_;65smLtrJl1)M5R29#mi9;-^;_s3aWZ8^HhIq?W zcLbCA9TFc=g;Wb^0->f5fB5!(ydtK%8W@TPWxVX81*^)7S16Oe3rtkd!C!$evnODc zq>N_Ox-}T0>`6sn{K2k~<=F)XgYJ}Gs-UlmVvNyg!tiijVYKuB^TuO=01g^6d&2M$ zjyv?N#pR{nmYIpP)_+HgJba)}Xx;2?9hqyS&?qVUff?Rs! zY>M!z1kQ6=AtI5iFGmo>+hWJ);5TaXp#r8D#~v-wph(0ELB-3LD3g~0>O9OSz_DCP z(~VI%;&(CA`elD6WuZ3&GCaJB6&X0zdWw|ze<d=HOGU5_gmI95 zQCn+ME`d1u=c3Lk34shR0l5T_bHMj29I$=eMZS6c(uJm@+pa4WAIP{imk>ktE{m6~ zVK2xv9j)PwLM{olsCtSFswul$@DUQ&8tOyBNmIr@G#U%k{9Qi%`8*AQ@l(LXI|i;C zvNAnH+G0iYehgA%PJ;ythOj{!xj)JJ*zCY&anRKKE>#g_a?$7V8^co*qmnbJ2VgVG1WH<@O|j!P zcMQ++7fqQeuQ;<#W8lEMo?yb35lCqb&2Z18hFCA#S0rJUwb}FrwmE~*`DoH75G^_~ z@28va{IuzQ4t=0+*%l>?+MsYqhXQ_ZSDWlgSxrFj{E}}nXS?ZNOSDQUJ&>^=dZ--o zO`y6Y#Pd+`-)k3sbv&8RROKqnHLxFibCH6oK(6v3Tii1xuhhK8y5)TQs~W;m2|zvX zJ8-#2#;_vy_uc4Uhf)N&wYv<8PCF|7co6IWjXw%X3n=c7`D$Jb_cq<6ZEBaHe>Onl zV1u%&b`Wxck)2FXtS{i4w>E^WnUYTZ|Pub+s(GO zkGUqoI@~e@9?QWRuA)r1tWWx<G!nIbIn+SxIHF)T zv#rFg=PTr&dteY~9G`fv*=PD<$krvDg~d<2cyqV$P!QgND(!Lb_uVeW4E7feLg(a` zsjCfifs0>L&+|lp_c^T{Cahuk)mF-DauLdYUnCqZ{fU}8vwg+nnICcNh_h%W&dxaK zu0+*7yUn2SoH<7UM_tuC2iMDiYtjCfq7ngleM}k0aF>;SgpRX)0pY*T{TnY(u*E(! zyVL9Ef$=#BAcPd8eZh=iG-^@2Lc zZ>PladY%HYHMpnFFM@1Htym%y=V9}7DCLriIPd^--2n>z61NF9-h41VqvBnQmX ztueJ+1-M?BoROW&qJQyPu)Xh~ioV=76dxU} zs}DUf&r@6}#Mj^FZ6Z(w*`8A)Bb_KkUlK3WS68V_RB(E}t7&LdL?j9tiE zzsfd$%(+uI7iN-ZS(aaY;A0YFe!g4?$u_KgBn`=4|7>PnL1o^<^18g%d%-_mMzd(JUQN!~uz zdxAZ!%Jw)9h{2C3hu@2}rswl3S|-~#+456zyVqB(z2yO<6wP$7)1w#v5)FysRZ{a7 z6pp1X6)}+h78JMMA+5B`jq)5ZDgHBO;_fLGxhB1&fOPKF zwKDXf=_a0EISm<=?L;*O0f zP(V?DJ?zk`l>}EtIzQy~abp^)UQ5v4LsB`J?Vg zLd3Xlk5A47N#Ho`x{guA50|g)a!|mFymFJn6f+leNVDXzXhP-dwNj~&GvXdv=`DjY zp}zG{4MohXgsIh(1-@#)TyF;cE7Ny9Uv@zryIzkQBM425Ez!*qmx&zN3Q|F*ar(_B zA_I*YmBYn|LS0_CQJ^!d$HFYfHP?gpBx14Z3Oq9C$fwNlRn^`~4PQ^o+&MQjML}mH*S>!U31cQ+)ip{s z9|o6jf72_u)LAjCIY|=)jBj7MK|3c!YmO{yaR{LAR@wvdMql-zzOHaEVg0-(j1ZBK zIT}gn$%|h6V8~b+J=gUi*E2Sxm<}UBXp)&ar|l!@(eqB^pFJ~QR>h=I@)4e-?}FAy z+#DYU6zb1Pmj$@xU3E?43-T zARM-y57Lrz!w>2;R20l~$DB_H3-$_fx#)tJD5N*hVF1IM;c7o0P=Bq&2+-6c$iTE^w&2{8>l(fdBvxLytTX8 z=K2iYYLe5QAWF?YW#J2(@|F1ZIOgmudfr_OQ&j+Dxg0n&7crNK6%9#%H z4Lqu1_(W7txACzI3>excZU+*Ai_tgV4OFiCHWe%rC3dc=oMKOg zWFhK)_$VqPI55rs+*>X1*uMYpu31$U{o_@i!9DN30$s2%{J^v(XKXa-#N@4I}NjU zBC5G)W;bqL6pOoq65rkO0I1|u@?3;$ z`YgBSnQTi(q${>s;YP9B+W85*DUT+N{ea4=ixQGf>1C+}$M+dQNu z!a*$>iT9SG$3jQg;2^i*^$8k;%28g$K3unNQHq4ezx+ArgfU6)_9eRFJl#)v$dOtG zh&HRP?~Z`j&iQX^S6k+$8bc}VYH@{b|6{if2-EVYJt*z_7e}=w^G^ke1UZ(YJh^Zw z`5Ow2-6QhMSPd63sC!!7bWUb1+gaHlv(?By-C0ABKQM_3v;;M-pbe|d3`^(Ha_E{f zQ;gbO|CZl-pZrG7crg9Km59z=OxslN7KG{YLZ z6Ke!h@=U(E!@$I!#ewEeoJko_wd`615jd%vP9Xw#T}z|vk6mQYVK!7u z_V`GkW3p91HxC$^d=&4Q5ZZ_}ml}Bx?I>Ba^R7V&3hr6I+}I`;V^H~oFSU!|B>Zec z1HYevifJ5o+(R0os|9?>HvznB41M2_n0Yoe@b#W!Jn5r6c+(vQ#eM;+T1E^U5!s;r z*lbX?faw;~pHwDxT-wSJ4I5Ot6#o4Hq19R88?Cw(yLQ6-BRGsy#{Z4M#NV9<5F(!( z>;8gigj=gKe*UCIL05OB+_HDkL19LyT!98uv0S}?$t?udG2=7ol%mrszQ%KVV6KBN z!4Oa(m#Gba!fpbYIz&&c9i<&|jBkwE&;k=IKMbGWT;sau@a{vv6)da@iKA7zM#ti2 zd|}Epfkp5<4YVwgwyHkG1cp|bMM{`pvLv(gLD5`6!%MvEajHQ4{rV-b3{(yPSe_@Q zL#Vq5jBu+qdNt)(>}8Z1qA7{h>a7}tLiz7qL76zjUO4)uXx%1SVG3gju`17Do5gs2 zpB9pm3)G0xWnqRsd*it3`;o5iQr*~E6P}=ow`z8hVF5&bM%}Y};92$N154Zt=w2W1 ziTr|;9}I}2V*~)Z{A0`B{Y16uVQPpgc{S@zo;O1uRN2$|7;72^lI+xO6(Q-lrDN}j z7Dss(ud0UBzb~>7unIzMvFqZ;0NaOj3-4OP-`DSmrpkS$R}I-=8ad{L4BL6jyc&dt za0xkwUr_nXkMT{36#tx8vuV$tF)M_Dj-j*6kIcs4V66fkWi31v($mO0itz;boMQ}z z_8ty)#+#W+p~^^+>N5hkn$GesGLFkWM~Idkum%elCqQMjhbEQBFgbv`ZZ8wkziLxs zfhG&AR{Fq;Gb|UhE@+-OrCCA1Exaj5_vl6&LKtEY2#g`Qlh9CYPifa~W literal 0 HcmV?d00001 diff --git a/yudao-ui-admin/src/assets/images/icon.png b/yudao-ui-admin/src/assets/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..204ae4ee92fe38d4b8dc1a831c46c5802cc34c05 GIT binary patch literal 308 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 literal 0 HcmV?d00001 diff --git a/yudao-ui-admin/src/assets/styles/login.scss b/yudao-ui-admin/src/assets/styles/login.scss new file mode 100644 index 000000000..74decc9be --- /dev/null +++ b/yudao-ui-admin/src/assets/styles/login.scss @@ -0,0 +1,387 @@ +/* ===== PC DESIGN ===== */ +$W: 1000; +$H: 1920; +$picW: 438; +$picH: 560; +$formW: 320; +$tabW: $formW / 2; +$rowH: 56; +$buttonH: 50; + +// container +$containerBgColor: #e6ebf2; +$containerBgImage: '../assets/images/bg.png'; +// container-logo +$logoWidth: 417px; +$logoHeight: 64px; +$logoImage: '../assets/logo/login-logo.png'; +// container-content +$contentWidth: round($W / $H * 100) * 1vw; +$contentHeight: round($picH / $W * 100) / 100 * $contentWidth; +$contentBgColor: #ffffff; +// container-content-pic +$picWidth: round($picW / $H * 100) * 1vw; +$picHeight: inherit; +$picImage: '../assets/images/pic.png'; +// container-content-field +$fieldWidth: $contentWidth - $picWidth; +$fieldHeight: inherit; +// container-content-field-form +$formWidth: $formW * 1px; +$tabWidth: $tabW * 1px; +$rowHeight: $rowH * 1px; +$buttonHeight: $buttonH * 1px; + +// - - - - - 页面基础设置 +.container { + .login-code { + width: 33%; + height: 38px; + float: right; + img { + cursor: pointer; + width:100%;max-width:100px; height:auto; + vertical-align: middle; + } + } + // 元素 + width: inherit; + height: inherit; + min-width: 1080px; + min-height: 620px; + background-color: $containerBgColor; + background-image: url($containerBgImage); + background-size: cover; + // 定位 + position: relative; + display: flex; + justify-content: center; + align-items: center; + // 文字 + font-size: 14px; + font-family: Microsoft YaHei; + font-weight: 400; + .logo { + // 元素 + width: $logoWidth; + height: $logoHeight; + background-image: url($logoImage); + background-size: contain; + // 定位 + position: absolute; + top: 50px; + left: 50%; + margin-left: -$logoWidth/2; + } + .content { + // 元素 + width: $contentWidth; + height: $contentHeight; + background-color: #ffffff; + box-shadow: 0px 16px 40px rgba(0, 0, 0, 0.07); + border-radius: 20px; + // 定位 + position: relative; + .pic { + // 元素 + width: $picWidth; + height: $picHeight; + background-image: url($picImage); + background-repeat: no-repeat; + background-size: cover; + border-radius: 20px 0 0 20px; + // 定位 + position: absolute; + top: 0; + left: 0; + } + .field { + width: $fieldWidth; + height: $fieldHeight; + // 定位 + position: absolute; + top: 0; + left: $picWidth; + display:flex; + justify-content: center; + align-items: center; + .pc-title{ width: 100%; clear: both;} + .mobile-title, + .mobile-switch { + display: none; + } + .form { + box-sizing: border-box; + width: $formWidth; + // - - - tab + :deep(.el-tabs__content) { + padding: 20px 0 0; + } + :deep(.el-tabs__item) { + // 元素 + width: $tabWidth; + height: $rowHeight; + padding: 0; + // 文字 + line-height: $rowHeight; + color: #666666; + } + :deep(.el-tabs__item.is-active) { + font-weight: bold; + color: #2F53EB; + } + :deep(.el-tabs__active-bar) { + height: 3px; + border-radius: 2px; + } + // - - - input + :deep(.el-input__inner) { + // 元素 + width: 100%; + height: $rowHeight; + background: #f5f5f5; + border: 0; + border-radius: 28px; + // 文字 + text-align: center; + line-height: 19px; + color: #262626; + } + .code:deep(.el-input__inner) { + padding: 0 24px; + // 文字 + text-align: left; + } + :deep(.el-input__inner::-webkit-input-placeholder) { /* WebKit browsers */ + font-weight: 400; + color: #8C8C8C; + } + :deep(.el-input__inner:-moz-placeholder) { /* Mozilla Firefox 4 to 18 */ + font-weight: 400; + color: #8C8C8C; + } + :deep(.el-input__inner::-moz-placeholder) { /* Mozilla Firefox 19+ */ + font-weight: 400; + color: #8C8C8C; + opacity:1; + } + :deep(.el-input__inner:-ms-input-placeholder) { /* Internet Explorer 10+ */ + font-weight: 400; + color: #8C8C8C !important; + } + :deep(.el-form-item) { + position: relative; + .button-code { + // 元素 + height: $rowHeight; + box-sizing: border-box; + // 定位 + position: absolute; + top: 0; + right: 20px; + z-index: 1; + // 文字 + line-height: 20px; + font-size: 14px; + font-family: PingFang SC; + font-weight: 400; + color: #2F53EB; + span { + padding-left: 15px; + border-left: 2px solid #D9D9D9; + } + } + } + :deep(.el-form-item__error) { + padding-left: 24px; + } + .button { + width: 100%; + height: $buttonHeight; + background: rgba(24, 144, 255, 0.2); + border: 0; + border-radius: 24px; + margin-bottom: 20px; + // 文字 + line-height: 26px; + font-size: 20px; + color: #FFFFFF; + } + .button-active { + background: #2F53EB; + box-shadow: 0px 2px 8px rgba(0, 80, 184, 0.2); + } + } + } + } + .footer { + // 元素 + height: 16px; + line-height: 16px; + font-size: 12px; + color: #8c8c8c; + // 定位 + position: absolute; + bottom: 30px; + a, + a:hover, + a:active { + color: inherit; + text-decoration: none; + } + } +} + +// - - - - - PC 最小尺寸设置 +@media screen and (min-width: 599px) and (max-width: 1366px) { + .container { + .content { + width: 710px; + height: 397px; + .pic { + width: 314px; + } + .field { + width: calc(710px - 314px); + left: 314px; + .form { + width: 320px; + :deep(.el-input__inner) { + width: 320px; + height: 56px; + } + .button { + height: 50px; + } + } + } + } + } +} + + +/* ===== MOBILE DESIGN ===== */ +$mobileW: 375; +$mobileH: 812; +$mobileContentW: 327; +$mobileContentH: 376; +$mobileFormW: 280; +$mobileRowH: 48; +$mobileButtonH: 48; + +// container +$mobileContainerBgImage: '../assets/images/bg-mobile.png'; +// container-content +$mobileContentWidth: round($mobileContentW / $mobileW * 100) * 1vw; +$mobileContentHeight: round($mobileContentH / $mobileW * 100) / 100 * $mobileContentWidth; +// container-content-field-form +$mobileFormWidth: round($mobileFormW / $mobileW *100) * 1vw; +$mobileRowHeight: $mobileRowH * 1px; +$mobileButtonHeight: $mobileButtonH * 1px; +$iconBgImage: '../assets/images/icon.png'; + +// - - - - - 移动端设置 +@media screen and (max-width: 599px) { + .container { + // 元素 + background-image: url($mobileContainerBgImage); + min-width: 280px; + min-height: 568px; + // 文字 + font-size: 17px; + font-family: PingFang SC; + font-weight: bold; + .logo { + display: none; + } + + .content { + // 元素 + width: $mobileContentWidth; + height: $mobileContentHeight; + min-width: 250px; + min-height: 340px; + // 定位 + display: flex; + justify-content: center; + align-items: center; + .pic { + display: none; + } + .field { + // 元素 + width: inherit; + min-height: inherit; + // 定位 + left: 0; + display: flex; + flex-direction: column; + .mobile-title { + // 元素 + margin: 0 0 20px; + display: block; + } + .form { + width: $mobileFormWidth; + // - - - tab + :deep(.el-tabs__header) { + display: none; + } + :deep(.el-tabs__content) { + padding: 0; + } + // - - - input + :deep(.el-input__inner) { + height: $mobileRowHeight; + line-height: 24px; + // 文字 + text-align: center; + color: #262626; + } + :deep(.el-form-item) { + .button-code { + // 元素 + height: $mobileRowHeight; + } + } + .button { + height: $mobileButtonHeight; + line-height: 24px; + color: #FFFFFF; + } + } + .mobile-switch { + display: block; + line-height: 20px; + font-size: 14px; + font-weight: 400; + color: #595959; + margin: 0; + .icon { + width: 14px; + height: 14px; + display: inline-block; + background-image: url($iconBgImage); + background-size: cover; + } + } + .mobile-switch:hover { + cursor: pointer; + } + } + } + .footer { + // 元素 + font-size: 12px; + font-family: PingFang SC; + font-weight: 400; + line-height: 17px; + color: #333333; + opacity: 0.6; + // 定位 + position: absolute; + bottom: 20px; + } + } + +} diff --git a/yudao-ui-admin/src/store/modules/user.js b/yudao-ui-admin/src/store/modules/user.js index 78da4ece4..969f825ac 100644 --- a/yudao-ui-admin/src/store/modules/user.js +++ b/yudao-ui-admin/src/store/modules/user.js @@ -1,4 +1,4 @@ -import {login, logout, getInfo, socialLogin, socialLogin2} from '@/api/login' +import {login, logout, getInfo, socialLogin, socialLogin2,smsLogin} from '@/api/login' import { getToken, setToken, removeToken } from '@/utils/auth' const user = { @@ -86,7 +86,21 @@ const user = { }) }) }, - + // 登录 + SmsLogin({ commit }, userInfo) { + const mobile = userInfo.mobile.trim() + const mobileCode = userInfo.mobileCode + return new Promise((resolve, reject) => { + smsLogin(mobile,mobileCode).then(res => { + res = res.data; + setToken(res.token) + commit('SET_TOKEN', res.token) + resolve() + }).catch(error => { + reject(error) + }) + }) +}, // 获取用户信息 GetInfo({ commit, state }) { return new Promise((resolve, reject) => { diff --git a/yudao-ui-admin/src/views/login.vue b/yudao-ui-admin/src/views/login.vue index 95ddb9862..8f62d9eee 100644 --- a/yudao-ui-admin/src/views/login.vue +++ b/yudao-ui-admin/src/views/login.vue @@ -1,56 +1,117 @@ -