From ba60f0ab0727e6b9adeb095664a2f7737dcc3448 Mon Sep 17 00:00:00 2001 From: Van0313 <60689272+Van0313@users.noreply.github.com> Date: Sun, 13 Jul 2025 17:59:41 +0800 Subject: [PATCH] 1 --- .github/FUNDING.yml | 1 + .gitignore | 47 + LICENSE | 20 + README.md | 95 + bin/clean.bat | 12 + bin/package.bat | 12 + bin/run.bat | 14 + doc/若依环境使用手册.docx | Bin 0 -> 428152 bytes pom.xml | 274 +++ ruoyi-admin/pom.xml | 96 + .../main/java/com/ruoyi/RuoYiApplication.java | 30 + .../com/ruoyi/RuoYiServletInitializer.java | 18 + .../controller/common/CaptchaController.java | 94 + .../controller/common/CommonController.java | 162 ++ .../controller/monitor/CacheController.java | 121 ++ .../controller/monitor/ServerController.java | 27 + .../monitor/SysLogininforController.java | 82 + .../monitor/SysOperlogController.java | 69 + .../monitor/SysUserOnlineController.java | 83 + .../system/SysConfigController.java | 133 ++ .../controller/system/SysDeptController.java | 132 ++ .../system/SysDictDataController.java | 121 ++ .../system/SysDictTypeController.java | 131 ++ .../controller/system/SysIndexController.java | 29 + .../controller/system/SysLoginController.java | 131 ++ .../controller/system/SysMenuController.java | 142 ++ .../system/SysNoticeController.java | 91 + .../controller/system/SysPostController.java | 129 ++ .../system/SysProfileController.java | 148 ++ .../system/SysRegisterController.java | 38 + .../controller/system/SysRoleController.java | 262 +++ .../controller/system/SysUserController.java | 256 +++ .../web/controller/tool/TestController.java | 183 ++ .../ruoyi/web/core/config/SwaggerConfig.java | 125 ++ .../META-INF/spring-devtools.properties | 1 + .../src/main/resources/application-druid.yml | 61 + .../src/main/resources/application.yml | 129 ++ ruoyi-admin/src/main/resources/banner.txt | 24 + .../main/resources/i18n/messages.properties | 38 + ruoyi-admin/src/main/resources/logback.xml | 93 + .../main/resources/mybatis/mybatis-config.xml | 20 + ruoyi-common/pom.xml | 124 ++ .../ruoyi/common/annotation/Anonymous.java | 19 + .../ruoyi/common/annotation/DataScope.java | 33 + .../ruoyi/common/annotation/DataSource.java | 28 + .../com/ruoyi/common/annotation/Excel.java | 197 ++ .../com/ruoyi/common/annotation/Excels.java | 18 + .../java/com/ruoyi/common/annotation/Log.java | 51 + .../ruoyi/common/annotation/RateLimiter.java | 40 + .../ruoyi/common/annotation/RepeatSubmit.java | 31 + .../ruoyi/common/annotation/Sensitive.java | 24 + .../com/ruoyi/common/config/RuoYiConfig.java | 122 ++ .../serializer/SensitiveJsonSerializer.java | 67 + .../ruoyi/common/constant/CacheConstants.java | 44 + .../com/ruoyi/common/constant/Constants.java | 173 ++ .../ruoyi/common/constant/GenConstants.java | 117 + .../com/ruoyi/common/constant/HttpStatus.java | 94 + .../common/constant/ScheduleConstants.java | 50 + .../ruoyi/common/constant/UserConstants.java | 81 + .../core/controller/BaseController.java | 202 ++ .../ruoyi/common/core/domain/AjaxResult.java | 216 ++ .../ruoyi/common/core/domain/BaseEntity.java | 118 + .../java/com/ruoyi/common/core/domain/R.java | 115 + .../ruoyi/common/core/domain/TreeEntity.java | 79 + .../ruoyi/common/core/domain/TreeSelect.java | 93 + .../common/core/domain/entity/SysDept.java | 203 ++ .../core/domain/entity/SysDictData.java | 176 ++ .../core/domain/entity/SysDictType.java | 96 + .../common/core/domain/entity/SysMenu.java | 274 +++ .../common/core/domain/entity/SysRole.java | 241 +++ .../common/core/domain/entity/SysUser.java | 338 +++ .../common/core/domain/model/LoginBody.java | 69 + .../common/core/domain/model/LoginUser.java | 266 +++ .../core/domain/model/RegisterBody.java | 11 + .../ruoyi/common/core/page/PageDomain.java | 101 + .../ruoyi/common/core/page/TableDataInfo.java | 85 + .../ruoyi/common/core/page/TableSupport.java | 56 + .../ruoyi/common/core/redis/RedisCache.java | 268 +++ .../ruoyi/common/core/text/CharsetKit.java | 86 + .../com/ruoyi/common/core/text/Convert.java | 1018 +++++++++ .../ruoyi/common/core/text/StrFormatter.java | 92 + .../ruoyi/common/enums/BusinessStatus.java | 20 + .../com/ruoyi/common/enums/BusinessType.java | 59 + .../ruoyi/common/enums/DataSourceType.java | 19 + .../ruoyi/common/enums/DesensitizedType.java | 59 + .../com/ruoyi/common/enums/HttpMethod.java | 36 + .../com/ruoyi/common/enums/LimitType.java | 20 + .../com/ruoyi/common/enums/OperatorType.java | 24 + .../com/ruoyi/common/enums/UserStatus.java | 30 + .../common/exception/DemoModeException.java | 15 + .../common/exception/GlobalException.java | 58 + .../common/exception/ServiceException.java | 74 + .../ruoyi/common/exception/UtilException.java | 26 + .../common/exception/base/BaseException.java | 97 + .../common/exception/file/FileException.java | 19 + .../FileNameLengthLimitExceededException.java | 16 + .../file/FileSizeLimitExceededException.java | 16 + .../exception/file/FileUploadException.java | 61 + .../file/InvalidExtensionException.java | 80 + .../common/exception/job/TaskException.java | 34 + .../exception/user/BlackListException.java | 16 + .../exception/user/CaptchaException.java | 16 + .../user/CaptchaExpireException.java | 16 + .../common/exception/user/UserException.java | 18 + .../user/UserNotExistsException.java | 16 + .../user/UserPasswordNotMatchException.java | 16 + ...UserPasswordRetryLimitExceedException.java | 16 + .../filter/PropertyPreExcludeFilter.java | 24 + .../ruoyi/common/filter/RepeatableFilter.java | 52 + .../filter/RepeatedlyRequestWrapper.java | 76 + .../com/ruoyi/common/filter/XssFilter.java | 75 + .../filter/XssHttpServletRequestWrapper.java | 111 + .../java/com/ruoyi/common/utils/Arith.java | 113 + .../com/ruoyi/common/utils/DateUtils.java | 191 ++ .../ruoyi/common/utils/DesensitizedUtil.java | 49 + .../com/ruoyi/common/utils/DictUtils.java | 239 +++ .../com/ruoyi/common/utils/ExceptionUtil.java | 39 + .../java/com/ruoyi/common/utils/LogUtils.java | 18 + .../com/ruoyi/common/utils/MessageUtils.java | 26 + .../com/ruoyi/common/utils/PageUtils.java | 35 + .../com/ruoyi/common/utils/SecurityUtils.java | 178 ++ .../com/ruoyi/common/utils/ServletUtils.java | 218 ++ .../com/ruoyi/common/utils/StringUtils.java | 722 +++++++ .../java/com/ruoyi/common/utils/Threads.java | 99 + .../ruoyi/common/utils/bean/BeanUtils.java | 110 + .../common/utils/bean/BeanValidators.java | 24 + .../common/utils/file/FileTypeUtils.java | 76 + .../common/utils/file/FileUploadUtils.java | 260 +++ .../ruoyi/common/utils/file/FileUtils.java | 303 +++ .../ruoyi/common/utils/file/ImageUtils.java | 98 + .../common/utils/file/MimeTypeUtils.java | 59 + .../ruoyi/common/utils/html/EscapeUtil.java | 167 ++ .../ruoyi/common/utils/html/HTMLFilter.java | 570 +++++ .../ruoyi/common/utils/http/HttpHelper.java | 55 + .../ruoyi/common/utils/http/HttpUtils.java | 293 +++ .../ruoyi/common/utils/ip/AddressUtils.java | 56 + .../com/ruoyi/common/utils/ip/IpUtils.java | 382 ++++ .../common/utils/poi/ExcelHandlerAdapter.java | 24 + .../com/ruoyi/common/utils/poi/ExcelUtil.java | 1893 +++++++++++++++++ .../common/utils/reflect/ReflectUtils.java | 410 ++++ .../com/ruoyi/common/utils/sign/Base64.java | 291 +++ .../com/ruoyi/common/utils/sign/Md5Utils.java | 67 + .../common/utils/spring/SpringUtils.java | 164 ++ .../com/ruoyi/common/utils/sql/SqlUtil.java | 70 + .../com/ruoyi/common/utils/uuid/IdUtils.java | 49 + .../java/com/ruoyi/common/utils/uuid/Seq.java | 86 + .../com/ruoyi/common/utils/uuid/UUID.java | 484 +++++ .../main/java/com/ruoyi/common/xss/Xss.java | 27 + .../com/ruoyi/common/xss/XssValidator.java | 39 + ruoyi-framework/pom.xml | 64 + .../framework/aspectj/DataScopeAspect.java | 184 ++ .../framework/aspectj/DataSourceAspect.java | 72 + .../ruoyi/framework/aspectj/LogAspect.java | 256 +++ .../framework/aspectj/RateLimiterAspect.java | 89 + .../framework/config/ApplicationConfig.java | 30 + .../ruoyi/framework/config/CaptchaConfig.java | 83 + .../ruoyi/framework/config/DruidConfig.java | 126 ++ .../config/FastJson2JsonRedisSerializer.java | 52 + .../ruoyi/framework/config/FilterConfig.java | 58 + .../ruoyi/framework/config/I18nConfig.java | 43 + .../framework/config/KaptchaTextCreator.java | 68 + .../ruoyi/framework/config/MyBatisConfig.java | 132 ++ .../ruoyi/framework/config/RedisConfig.java | 69 + .../framework/config/ResourcesConfig.java | 72 + .../framework/config/SecurityConfig.java | 139 ++ .../ruoyi/framework/config/ServerConfig.java | 32 + .../framework/config/ThreadPoolConfig.java | 63 + .../config/properties/DruidProperties.java | 89 + .../properties/PermitAllUrlProperties.java | 73 + .../datasource/DynamicDataSource.java | 26 + .../DynamicDataSourceContextHolder.java | 45 + .../interceptor/RepeatSubmitInterceptor.java | 56 + .../impl/SameUrlDataInterceptor.java | 110 + .../ruoyi/framework/manager/AsyncManager.java | 55 + .../framework/manager/ShutdownManager.java | 39 + .../manager/factory/AsyncFactory.java | 102 + .../context/AuthenticationContextHolder.java | 28 + .../context/PermissionContextHolder.java | 27 + .../filter/JwtAuthenticationTokenFilter.java | 44 + .../handle/AuthenticationEntryPointImpl.java | 34 + .../handle/LogoutSuccessHandlerImpl.java | 53 + .../ruoyi/framework/web/domain/Server.java | 240 +++ .../framework/web/domain/server/Cpu.java | 101 + .../framework/web/domain/server/Jvm.java | 130 ++ .../framework/web/domain/server/Mem.java | 61 + .../framework/web/domain/server/Sys.java | 84 + .../framework/web/domain/server/SysFile.java | 114 + .../web/exception/GlobalExceptionHandler.java | 145 ++ .../web/service/PermissionService.java | 159 ++ .../web/service/SysLoginService.java | 181 ++ .../web/service/SysPasswordService.java | 86 + .../web/service/SysPermissionService.java | 88 + .../web/service/SysRegisterService.java | 117 + .../framework/web/service/TokenService.java | 232 ++ .../web/service/UserDetailsServiceImpl.java | 66 + ruoyi-generator/pom.xml | 40 + .../com/ruoyi/generator/config/GenConfig.java | 87 + .../generator/controller/GenController.java | 263 +++ .../com/ruoyi/generator/domain/GenTable.java | 385 ++++ .../generator/domain/GenTableColumn.java | 373 ++++ .../mapper/GenTableColumnMapper.java | 60 + .../generator/mapper/GenTableMapper.java | 91 + .../service/GenTableColumnServiceImpl.java | 68 + .../service/GenTableServiceImpl.java | 531 +++++ .../service/IGenTableColumnService.java | 44 + .../generator/service/IGenTableService.java | 130 ++ .../com/ruoyi/generator/util/GenUtils.java | 257 +++ .../generator/util/VelocityInitializer.java | 34 + .../ruoyi/generator/util/VelocityUtils.java | 408 ++++ .../src/main/resources/generator.yml | 12 + .../mapper/generator/GenTableColumnMapper.xml | 127 ++ .../mapper/generator/GenTableMapper.xml | 210 ++ .../main/resources/vm/java/controller.java.vm | 115 + .../src/main/resources/vm/java/domain.java.vm | 105 + .../src/main/resources/vm/java/mapper.java.vm | 91 + .../main/resources/vm/java/service.java.vm | 61 + .../resources/vm/java/serviceImpl.java.vm | 169 ++ .../main/resources/vm/java/sub-domain.java.vm | 76 + .../src/main/resources/vm/js/api.js.vm | 44 + .../src/main/resources/vm/sql/sql.vm | 22 + .../main/resources/vm/vue/index-tree.vue.vm | 505 +++++ .../src/main/resources/vm/vue/index.vue.vm | 602 ++++++ .../resources/vm/vue/v3/index-tree.vue.vm | 474 +++++ .../src/main/resources/vm/vue/v3/index.vue.vm | 590 +++++ .../src/main/resources/vm/xml/mapper.xml.vm | 140 ++ ruoyi-quartz/pom.xml | 40 + .../ruoyi/quartz/config/ScheduleConfig.java | 57 + .../quartz/controller/SysJobController.java | 185 ++ .../controller/SysJobLogController.java | 92 + .../java/com/ruoyi/quartz/domain/SysJob.java | 171 ++ .../com/ruoyi/quartz/domain/SysJobLog.java | 155 ++ .../ruoyi/quartz/mapper/SysJobLogMapper.java | 64 + .../com/ruoyi/quartz/mapper/SysJobMapper.java | 67 + .../quartz/service/ISysJobLogService.java | 56 + .../ruoyi/quartz/service/ISysJobService.java | 102 + .../service/impl/SysJobLogServiceImpl.java | 87 + .../service/impl/SysJobServiceImpl.java | 261 +++ .../java/com/ruoyi/quartz/task/RyTask.java | 28 + .../ruoyi/quartz/util/AbstractQuartzJob.java | 106 + .../java/com/ruoyi/quartz/util/CronUtils.java | 63 + .../com/ruoyi/quartz/util/JobInvokeUtil.java | 182 ++ .../QuartzDisallowConcurrentExecution.java | 21 + .../ruoyi/quartz/util/QuartzJobExecution.java | 19 + .../com/ruoyi/quartz/util/ScheduleUtils.java | 141 ++ .../mapper/quartz/SysJobLogMapper.xml | 94 + .../resources/mapper/quartz/SysJobMapper.xml | 111 + ruoyi-system/pom.xml | 28 + .../com/ruoyi/system/domain/SysCache.java | 81 + .../com/ruoyi/system/domain/SysConfig.java | 111 + .../ruoyi/system/domain/SysLogininfor.java | 144 ++ .../com/ruoyi/system/domain/SysNotice.java | 102 + .../com/ruoyi/system/domain/SysOperLog.java | 269 +++ .../java/com/ruoyi/system/domain/SysPost.java | 124 ++ .../com/ruoyi/system/domain/SysRoleDept.java | 46 + .../com/ruoyi/system/domain/SysRoleMenu.java | 46 + .../ruoyi/system/domain/SysUserOnline.java | 113 + .../com/ruoyi/system/domain/SysUserPost.java | 46 + .../com/ruoyi/system/domain/SysUserRole.java | 46 + .../com/ruoyi/system/domain/vo/MetaVo.java | 106 + .../com/ruoyi/system/domain/vo/RouterVo.java | 148 ++ .../ruoyi/system/mapper/SysConfigMapper.java | 76 + .../ruoyi/system/mapper/SysDeptMapper.java | 118 + .../system/mapper/SysDictDataMapper.java | 95 + .../system/mapper/SysDictTypeMapper.java | 83 + .../system/mapper/SysLogininforMapper.java | 42 + .../ruoyi/system/mapper/SysMenuMapper.java | 125 ++ .../ruoyi/system/mapper/SysNoticeMapper.java | 60 + .../ruoyi/system/mapper/SysOperLogMapper.java | 48 + .../ruoyi/system/mapper/SysPostMapper.java | 99 + .../system/mapper/SysRoleDeptMapper.java | 44 + .../ruoyi/system/mapper/SysRoleMapper.java | 107 + .../system/mapper/SysRoleMenuMapper.java | 44 + .../ruoyi/system/mapper/SysUserMapper.java | 127 ++ .../system/mapper/SysUserPostMapper.java | 44 + .../system/mapper/SysUserRoleMapper.java | 62 + .../system/service/ISysConfigService.java | 89 + .../ruoyi/system/service/ISysDeptService.java | 124 ++ .../system/service/ISysDictDataService.java | 60 + .../system/service/ISysDictTypeService.java | 98 + .../system/service/ISysLogininforService.java | 40 + .../ruoyi/system/service/ISysMenuService.java | 144 ++ .../system/service/ISysNoticeService.java | 60 + .../system/service/ISysOperLogService.java | 48 + .../ruoyi/system/service/ISysPostService.java | 99 + .../ruoyi/system/service/ISysRoleService.java | 173 ++ .../system/service/ISysUserOnlineService.java | 48 + .../ruoyi/system/service/ISysUserService.java | 206 ++ .../service/impl/SysConfigServiceImpl.java | 232 ++ .../service/impl/SysDeptServiceImpl.java | 338 +++ .../service/impl/SysDictDataServiceImpl.java | 111 + .../service/impl/SysDictTypeServiceImpl.java | 223 ++ .../impl/SysLogininforServiceImpl.java | 65 + .../service/impl/SysMenuServiceImpl.java | 543 +++++ .../service/impl/SysNoticeServiceImpl.java | 92 + .../service/impl/SysOperLogServiceImpl.java | 76 + .../service/impl/SysPostServiceImpl.java | 178 ++ .../service/impl/SysRoleServiceImpl.java | 427 ++++ .../impl/SysUserOnlineServiceImpl.java | 96 + .../service/impl/SysUserServiceImpl.java | 550 +++++ .../mapper/system/SysConfigMapper.xml | 117 + .../resources/mapper/system/SysDeptMapper.xml | 159 ++ .../mapper/system/SysDictDataMapper.xml | 124 ++ .../mapper/system/SysDictTypeMapper.xml | 105 + .../mapper/system/SysLogininforMapper.xml | 57 + .../resources/mapper/system/SysMenuMapper.xml | 206 ++ .../mapper/system/SysNoticeMapper.xml | 89 + .../mapper/system/SysOperLogMapper.xml | 87 + .../resources/mapper/system/SysPostMapper.xml | 122 ++ .../mapper/system/SysRoleDeptMapper.xml | 34 + .../resources/mapper/system/SysRoleMapper.xml | 152 ++ .../mapper/system/SysRoleMenuMapper.xml | 34 + .../resources/mapper/system/SysUserMapper.xml | 223 ++ .../mapper/system/SysUserPostMapper.xml | 34 + .../mapper/system/SysUserRoleMapper.xml | 44 + ry.bat | 67 + ry.sh | 86 + sql/quartz.sql | 174 ++ sql/ry_20250522.sql | 704 ++++++ 318 files changed, 40144 insertions(+) create mode 100644 .github/FUNDING.yml create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 bin/clean.bat create mode 100644 bin/package.bat create mode 100644 bin/run.bat create mode 100644 doc/若依环境使用手册.docx create mode 100644 pom.xml create mode 100644 ruoyi-admin/pom.xml create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java create mode 100644 ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties create mode 100644 ruoyi-admin/src/main/resources/application-druid.yml create mode 100644 ruoyi-admin/src/main/resources/application.yml create mode 100644 ruoyi-admin/src/main/resources/banner.txt create mode 100644 ruoyi-admin/src/main/resources/i18n/messages.properties create mode 100644 ruoyi-admin/src/main/resources/logback.xml create mode 100644 ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml create mode 100644 ruoyi-common/pom.xml create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/annotation/Anonymous.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/annotation/Sensitive.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/config/serializer/SensitiveJsonSerializer.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/constant/HttpStatus.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/text/CharsetKit.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/text/StrFormatter.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessStatus.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/DesensitizedType.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/HttpMethod.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/LimitType.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/OperatorType.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/DemoModeException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/GlobalException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/UtilException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/base/BaseException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileSizeLimitExceededException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileUploadException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/user/BlackListException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaExpireException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserNotExistsException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitExceedException.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/filter/PropertyPreExcludeFilter.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatableFilter.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatedlyRequestWrapper.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/filter/XssFilter.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/DesensitizedUtil.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/ExceptionUtil.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/LogUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/MessageUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/ServletUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanValidators.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileTypeUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/file/ImageUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/html/HTMLFilter.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpHelper.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Base64.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Md5Utils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/IdUtils.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/UUID.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/xss/Xss.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java create mode 100644 ruoyi-framework/pom.xml create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/FastJson2JsonRedisSerializer.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/KaptchaTextCreator.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/ServerConfig.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/DruidProperties.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/PermitAllUrlProperties.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/security/context/AuthenticationContextHolder.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/security/context/PermissionContextHolder.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/AuthenticationEntryPointImpl.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/Server.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Cpu.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Jvm.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Mem.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Sys.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/SysFile.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPasswordService.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java create mode 100644 ruoyi-generator/pom.xml create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableColumnServiceImpl.java create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java create mode 100644 ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java create mode 100644 ruoyi-generator/src/main/resources/generator.yml create mode 100644 ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml create mode 100644 ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml create mode 100644 ruoyi-generator/src/main/resources/vm/java/controller.java.vm create mode 100644 ruoyi-generator/src/main/resources/vm/java/domain.java.vm create mode 100644 ruoyi-generator/src/main/resources/vm/java/mapper.java.vm create mode 100644 ruoyi-generator/src/main/resources/vm/java/service.java.vm create mode 100644 ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm create mode 100644 ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm create mode 100644 ruoyi-generator/src/main/resources/vm/js/api.js.vm create mode 100644 ruoyi-generator/src/main/resources/vm/sql/sql.vm create mode 100644 ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm create mode 100644 ruoyi-generator/src/main/resources/vm/vue/index.vue.vm create mode 100644 ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm create mode 100644 ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm create mode 100644 ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm create mode 100644 ruoyi-quartz/pom.xml create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java create mode 100644 ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml create mode 100644 ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml create mode 100644 ruoyi-system/pom.xml create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysCache.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml create mode 100644 ry.bat create mode 100644 ry.sh create mode 100644 sql/quartz.sql create mode 100644 sql/ry_20250522.sql diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..fbcab77 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +custom: http://doc.ruoyi.vip/ruoyi-vue/other/donate.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ed8368a --- /dev/null +++ b/.gitignore @@ -0,0 +1,47 @@ +###################################################################### +# Build Tools + +.gradle +/build/ +!gradle/wrapper/gradle-wrapper.jar + +target/ +!.mvn/wrapper/maven-wrapper.jar + +###################################################################### +# IDE + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### JRebel ### +rebel.xml + +### NetBeans ### +nbproject/private/ +build/* +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ + +###################################################################### +# Others +*.log +*.xml.versionsBackup +*.swp + +!*/build/*.java +!*/build/*.html +!*/build/*.xml diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8564f29 --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2018 RuoYi + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..998475c --- /dev/null +++ b/README.md @@ -0,0 +1,95 @@ +
+
+
![]() |
+ ![]() |
+
![]() |
+ ![]() |
+
![]() |
+ ![]() |
+
![]() |
+ ![]() |
+
![]() |
+ ![]() |
+
![]() |
+ ![]() |
+
![]() |
+ ![]() |
+
![]() |
+ ![]() |
+
q%cr;BeJ!q7WMoiEqDl0ocFz8RO!J)=U zhZn&quK%cp33AgerBIH$`sj4e7KUR8Ze?VJCu}A+?RBgWvg>*WY)6j0zTIbFr3o>` zL;w%rFjE$}6J1jP^*8y*g#yGY(^>E#6N-#6D~yj9QYgY~)S$c(kcqT;Pf&eeb@r;p zk8CodjhQYPn<<;9hq)-fA9d=pIx%4eFc>oBxs)tA_sIN|Ji<9ew%VEncOrKE z3pV#$YzK?DVh3DKj<~Dtnk`?WbK51XTHK7 Ujk9UQGr5%~aZ2;A39brhE#4%&($>C;qn!Jvd8e7i&W0ID}d z?7NJ(1+Tq(?TZbT;9SS_Z)Ixfut3FKv6g}<8sc3?4Rqmq^|{~S6=nU@@Ji@}fhCFH zTt;;I4jpTC-WkPBAUP4_ALHkC*Mbcdwsaf;nK998l)I^F61_iNlTBFFW-K?ugzb=% z$9t|~g#ow;s`!x7@*@=`pIQvER!pX#Q`2539~b8!%{ |7iLwdA6F_ zZb447VPc(*e?CsH#6U~*GkrIORdgN>T!s`Q i(DDc%~wr26@J=;Ge-B{h+D3_~6^f(u&AT4&AuAUIdk$D^&;ZR5$Q+3nNZk_z3r zNr?QEQ9W)!w&_RP>eRx}l$*)3s9FNXGOx({pcbG6S;s*SYD{!MKDu|7TAK^;iNqEa z1@etQgbm!T9=pGYRkwBZ#jyh)#cbIDOk`$Q+r<$*@Fz<$a;q9oh-6g*2>(Q1@(#f+ z6FOu$9d>bkq+_4BEQzxy!8WohstE*sJZ<0i8fRsH*ZS#AQ4@PRp%f&B4-MpD>bY;- zKjs4hw9_cafHX&BlW%M7xbN^@kQp2hyud}*dQEsq0h>-L{MG8TJne)osF1qDA%S?tiY~AqZH$F&zfh8>-!g1>8tfl>0vXP+Px=%L2J!S|)a%60Qf>@y3T#Gtf zX-|qbpE}BYpJ#__GLJM?FI0Tqel^ld2YQ11$Y23DmwXRA6p-7(kCUAFGuAJEq({bL zd)-Ice%eeiuJ^v)T6uoriuq*x)>Ah(5~KGCre-wF1mn3wEwsP9d(5j7nKdNyowCWA z+8s4!harRc`l@Kf|22cQB01p)S i^{%CM{r+rYM6hqi| zft;1z9QiEWR~!p*y|G6$*x_?@)T!`@EC?Q`!)kS-(`e_Z`Mn~VLo=Aa%$73OS%~!C zN>j&G6e3F42{n2-rIc`JY1&-ssinYN2Rq;iF`8goD@C3H#p#=0&D$Ib-Ct9k;A`?V z8v{%@SDO#y`VVmmp>0!(X Y!&up39;FBTsLc*NS8W5?M z59)X@j-^7B15Lef_nsU}!4eDs5LKd|YBWbda1(iuaak(lH#u6?LY5dKRnt%?+F>JA z%`W51T?@XQR_8qYKih*?sM80fmgPa&XZB|3gJ ULEC8bE6JBA;bQ$)$zSTZRPD9dCOyd ztZ;i2e{WA)bg?iV6lR4!Ob%UuR=2`}3w9@|Go8Ww%j}i#i5cU(i4PSKTRgO|v3S1A z_-hJ2*2vna1h&uqr+d9-th|;nt+f=xcE*aN(xJcmvAw-ovOER#`j)HdRi?M5%Nf!7 z? +&AalW>swuY?SCMhCxhD?^SuJwMH5#qXR*A-T{GRCP zssp&J-!?SJIrJ8P^I~Q9_&x2(Sa*#hm(Qutw#46yC~0{mmj;Lq^sr#z;fbCpBO990 z&DsxfMy0sRC(awY2A{Gx@iZ7YLX7ZDHX%R*q7Nk?2Ku!U??F9Mlg6ds6E5=!4WmZ^ z *V zH1NGvvux8{50S6GB!f#pcxHpVTH^U%T1aOJazI0LJ#Mwy=xiX+L*!Jo!Vll8d7G{@ z0Y|Y&b6WAkpo(qv77e@DV)^yKnz^Cb%GG@8tN76^wOZ4f)e)GPPzBGII3e3?TUg)2 z*?vN0Sn~?9b+sFIywyLyZyEZsblcH&{8e1hz&E2*Tk}?4>#~)Qt-Nm+#FNc#`oV7E zwGmyAHO+vB %-_V*9jLed}d1@=dK4vm_XIR}*3JTnNAuu_(M>$85G+7xAq zg^Nk{Jbi46ABc)5Y qpD zv4vVY{RSj<9i4OQ? zMMs`M?1T-({10jUa M+Qi ze-FN1a* T z)9unHu>|7kA3l?D3qxBRam7T|I#UD aeXV_L@7vt%bOR;aQjE4CEJ1KCL2R3wGjgRDy}xGj0}SoQ@_ H|p 9l*#%j!sKR##lf$<2}Z81- c^1`I|0&6dNjc30>U&yW%_lww2n1L |`?mh72pO8r9lOck>rg^2wbc!k;9by5L11wey zqD;y}T)wH2=ktb+c+qgWo6HZF1*O6}rdb87L?7^5^$r3LlYV|8W&Jk=EMDppKVDnI zcM(@%G>(5V %Icc5dDD1s9s|`MVYym0R5R+|j4)9*zJa4Cw`n zL>_Nfgt-%$q-6-c>pd!9UQDx2?C|?jbwa0G;1NMs#HN==JCPS$+n&su0gjST?`bzj z0U4}}G_1M%@i)6~O%)Ta4j}xHX}v#_0ftqboTgsgy*33$9dV(r^SJV`u36lqFyABK z!5q5F?d&*@^6+W{8uhEeG8&bpAqJ=@zN1J5cyYf|qBxPJ$lNC7g?(;%Xe0Wi(&8L^ zm*(V*qdgm%O gUXK^Q%G~S7Kg`JU6>IY(LR}WKXlp*?0)H! z--8`fu+C8cfxCIOrVNF^ s#q5$qhOhLqTXn1cqyDejw# zei-i7LC@&X1do0Ft!S`L?kGhRL*d15OSA>6sZu+nwIab=qYT7dDhK!7pgDkq=q&7& zp$X#+G5i>2?KdbhIwt4jP|AD=yOb$jKU>r`NqM55Ng>SMm580!kJ()o(-4fpuWW}8 zXX=ypYTyS+Y?9<&9M33J(;@!O&-M@m0_}&g@HTzcMLhF4K%z-A?C?SAA`_?0(!=%Q zVTc@=2G^x$ChS}zRd|nWS$?T4LOEjTtNIoK?1Q>PW1^FvnX+vxw(+@){(f)Bz6t1j zo4%%EX%uGi8Wux4n!;cqVN+qs#8%SkKyiXeYK8Bw*nnvz@C ;Q;eSp?zyRJ*$sBE5F`n>)UP9gsA6aU4_g%E@n&YKspYU zoJmza`ktjG0`j?fMGb60|254G`}Hl5`lDVvj?FiCBBqGVMS4qp+3}%!hn>iN-w7J% zNNgRQx{<#3!!hsoO@!C> iTSzg&09LgfIi3+ifpOl`RKMYV&Z#O z)BFp!+PKQC-=D9)LF5q&Hhi+FYTsv8rti=S1P9bJ$(BOg$aF?>mYecYZXV_t-)I1a zrcu;iZyNcL*xDe2aKme`x^@Zg>O Vi~>=||f> zn7AKJ%7=Nsu;MZ@3U{ByiQm1TH=cRuY`DTVG!NqO=u+f%W2ZT%NQ=Vj_;N|Pje0iq zLOF9%pcqe#o FPnjt(%z*q~w* zYM;3Y*N2wDB?Qt&e5^lTUwu8;7!tXHij@~p`N-0qEd4y3tOD8SM2RH*r{ZzM_px?@ z2FGhwsy0tuL@LX^JhJ_&g5z(v;6~KHnJgcb?@D>E*)^x#wI6*bX8MdPX^V4?UoIz^ zTD1r B=yyMDJ2`KL8SI!!OJsLX6u}d2&)JP7?v$pEY8UfQMGj@ywvii6bdP=)r)+M z58T5?0k7|jN2K)=%O^7U+yQj_A>S|%2iU) NM{S1N?f?>5twDDm-><DZ;!3Lb&23w79JIOYjGX9|71*&g@dhEL$Y)dNKdU5hxT!V?;No TGb70fiN4PE4~$#l0Z9A=C~eRv(KEF*DY-Z3}5XcJbX#MsD# zOfPep9m&Q>UJjeQ@2vZB=rI|GEDi$iY#hG(4d`~7s!1{|*#UIzI}TgIL<2?vJJeW5 z)UEO~hO-oHZ* )8A^bYw79vfBHmb!YyH0Oq3aD z#CVW#%Gk0q^cR;t$uu &zD&W;uq9_?f UuW@>Rj=_8#L{cc zynrpM_7IELwM&4rw%STiEl<44(ovgbIxOux0{>oky4~o7ne#ijR%_Su+1t=<7+{K# zidt9>uJ30ezEb0boWq-o&)#T9Ui5Wld%1FRL5h$3Nq>WU%wlav?Upu)ph3|}GT&47 zy6+y4zp1ii^j;DqmiWdxHciM|38i)Ch>al&BP}{`!nj4MfxN=p!qqR8q}D-g>59h{ z7N+0cYGj#yL!gcyDd|tqz@-q&F>;!3GT1h%GwD$2cfFL5S$=M*-+$x~qGw4M9sTS> zN>Np^YRE;W;8G|U&eO4U?OF!o6flpO>D+#FMF8+jYxL6D-iSqPiM6^`m3tB5)Gju8 z8=AKVlL5+Nsb1py2Vf0GbK+<}8Z<9f8QDk@dCwM*rUk3%FZDL~DNkKiQx~C H5*l*&G=m3?)G55gUKZR?m{3#vjmKskUzbkBGwG$ejBeR;J_n {f~vL4i5NtTWRs@~@}**|>V)5>aepqsDV1^1lB b z*D^w7=Zh2(yq&<0Z*U$X);4^X=fwR7RF2-rX6mNJLS`q*6i<1kpuZo+`}0ddsRwC& zU`vc7--~D{$nB99u6E$BO`7r!M (v~-0>7yD>b5N#$OT~T>*)J`}E_{yk%l)blh5SZ)_ zdiyy|;hn%|>ycGfx=wWMoeo5y{Rs)JcDZOV|Ck zbpC zHf^I-$jn6|LE%K5_=NyV+gE01!Ij79iQeT(=3?~Md$Zi)gxG6CJOZnyG3`hrw+V=~ zR^(I oM}oU@s}GWxu89)_(R;9R|kXuNYn(v&UouYl;pIErJYWTuBTk1+1m z-bp|?V`zu5;Jdb!#`*@4=jBB?hg@_Tkv>G1Bt#N5T6@~(>(ZR I4EeNWR;|}JgrL9Q20@*;lpUwg5o3{A8|5C=XSHu0+myAabavV z{$ld{p&nl(&GY&j8+>l~!eZQv?eoB;NK;K6?_=y8%Mpa%;^P8TS%6>+2_qtQqPXZJ z)des;MbMxM!V`1clfK )5Ht#?F?(Z82Y9nPK zWn-4Ki~lurF~Kw7Cv&HKj3a|6?Ne74%{oMuq?Q{}(;;|L!-Y3TF#S{pJn%Ve(gL}d z7CwNh9Hn;0fuj3MKErn@w+T^3Oop5U1^3vbJ6GIz CLST2xKG0Ksao5zkwNB%=B2-O7OwM+&Fho5S)HM0 zaQ5NYJzizMn78zcpuuabu(nCd07s*yLlbv{>*&BD(w!l6z`Tp#`uH$tGElqe<@w#E z_4!{@&LtwK2E5<^z%VKRfc!sG&gKqZ@$Ag =Q6isfhQ*X$%xa zP>?6^#1)}aXY}l%g0*LEkW-h)RK)JFRO_`m9ywJ^cqU8VvNR@lh)?ZGs3hV5Zn@;u zkhgnt9RhOjg!nx@2_(l*SqW8GRN_qZfJ{zhc&GtI{$6h0Y)Tjm$WF>)Fofkc6AKZ0 zih^Es4g9_6*A(me <@%-sw!I zhEqnB)TFWl3;0L6ONDLl)je9Eyjf_(6xa9ZMr`4(P5B&U!4sIot)g>f1yw_3xfDR4 z&<}NDB_N60TGC}}n?7%{7Ww^JQWcHWOuQO(X{+`&TQ4|+cj};2kH(=5v#}!PC`uq2 zS)Uhnm@$G}r-q@DRBodZxIQ^a^ZHO|7p5wfWV(*hv6LQ@@zIB5ad)b{#m960-yY>o zJEQje@LKT!@tyJ00S1>mWeXG&(%CXAcu8bQ8Bb)21J}s4*==Jbq4WsQy4XVF4H{Ji-u@hy l<6;WQEY2+YYsBy&ugVb*dh`tc$nLIHX&K0b^_7d z8cOBk{_OIf(nDq|CAI;o)5#i5Zw>0!;{u4SfzPR^y~VMKJp{%BgP{?Y87&QiPt!}a z2OddUHuWu+`uhqyVItJiHH$DsZt;HDrO#vGBZ-c^HN?SR{FzG(6$sOh|BGCG_$XzV zGMaQL15U8WIo?beri0SIB`}=8W|4i4g&W^rWE!V q}j`%u^QC64Fo$cLP z!V2n#{Ej(pm>JE| hT55Z2KoA<*D#sGdFH(6EEvxm@888oY?XQo>Qh&THYlh+%z&ks^GUCABkMd(Ml zBm+kA*L$_LPYw^C#|~M^jewt!ljHffxkGvK5nz=bF9Ca>K0x^bskX%3wq(l1cilG4 znOYI?F1jsd^QOOBN_+p_$o}u;kX(6q%y?gwU+M7w$3nyW&q7m_vF5z`KbZ6SNgxR+ zXBWm)#geyeob3b*T4yLrGa?B*yya?)Qfi~9c?UEm?P2a}!J7P%D4xy(QOt_wY4+ZM ze~E+-6Xu}3`1SREc(Tu}v6rv6ZQJxDH`1L*-Jp9NOW8UVY*SY {(Av$<8g2>3bAK@&s9NRZy8QQ1<%h>D&(@$#F9O!PtUd$E|nSb$>F3v1}o 9sWsog5_EVPsV3 zzR|4G!0ZMs;lc-Jb$1#e@Z-Mlp4h9~%IG(*SUkm2$qmrYSfkBBtivKSo5flx34fQW zb*jv^5)4l^WU49%UjVKr=wPx{x3+?~Pcs^$YTY z{tz_r9Ev2k?vD}C;(Ks0T8e4E<0LN0Sq#Edojqq9d9o2Bmz@)(JBmYFyS?hWnla-v zn>WG5iLO4J&oE9;1?Q1j@61w^*Jxd6#rW>A)o@tf8a{fjx{F~8*8%LZgA~szRrbE- z>V@{2M1zOzg0qIBc#2`B7%J@>_z6D}M~XC8*xZQrjw@?%(?=kCu#MrZ&58G>E8)v# z%VHx5_2$vggY9CF#}V+a1yDeLf*K0=2c#b-sD+_nQO!sq7b6ocEdSU@lO kD^#(^v5(!!2Nv@^?Yb zpf~nzYl*I^#yl{Xz1|J2G~}nbpC#Z2QTNTVzg_#kYsAp{(Rh`;Y1F^`*Fs6P>TvN> zNB}?+>py^GX=Y^lKN!1FQ#N652&D^ZB!IY8NMZJxL>XyJ+s0!k0Rq*tKHg}*@t8zM z<%(^^)#I#5keD0W2_F2K9@=?if$4m&Z!`eL{ns;2`6 vD?v^_uUpEPM?}Wwo%nSafOJ>Xqw0V;qJFVs2I;I z8K^2348~~FV}&LL<7w5=RC6&sQ@SLPsQNA`vBRjFO!9dh= E*YL#4M%eTD+LWShe6baf^8#?t z1r;RXM Rt+ zaw^dXJn^8x?z_!qB?YZy7g>~1lsNYOE=BE7j1i6foAvu}v7d`wLjLe#*PFJEl7Ehl z}?ic2xAj@QJB)*Wrq1WT5Ui*;@h{*>~*^;k4Jujx@ikh6Bs#1&7V*HGmnrnsYN zB|$+mZFV@qHuFwK+jwi-oBcqKAZa#qeKQwDs9qkB3`gyH=tfKOms@LZ(!MH4D0`rS zNJ0l4O{{*@4te&a1irhe4v>q3HnN`s3J-rYs3l|tRLX) -JK(`L}m6Kz-VVbdXY>+?ME0EWq>Bkw_y z3QvXYc;fQ2d^PRjH_d(Rpk&nIJSvIs%XUHkyQ`~@>xW6fEx*quKaI|ss(uccj@fmc z*SdJk0{LSy#S)RMZJj?rbO`!L3qo2xo=%#wkjXdasGzQSVYr$tu^tlI2iz$Zc%H5; zro5VO#=xHD30^Wk2-@xl=hp6grv~MgUdc`gj_4{7BDeEk+=!73R)th8-oLb&KNsj+ z2%qDxG>IK#A-ENkv3Ppp@#W#EG~-Tbz9Ay%G`g$Vp2sR3pT9I4+qjHJ02h2yh3sq^ z3&(ywNhGnJ&KL75%@^x^O#-F)W(bw;fopdpY}H-EKf5A5*u~6#Q6nx{mJ=^C^5!xz zwz3oApch=HoNv8U*LW0^b+ERmMi|;F=`f>|Il;=yVUIrkg;$(o8yZ~%Z^htK!*bct z{ZMy(=>8Nz)ml7ZO7IpL`L81mx^M_VorWpYh~lWefxuF<2Rz~SE%xW@=5ulQpe?RD zY(7N2ES5TvtD%eEW3t_w>N~aVJ+3`2^*?X9^U4{cN^Uusa{S%jVVkjq0`@?bZ?{e{ zFrG-R10ez$=Y(K=@U2_dfpRrz+pO|XIq`1iNK73RJGRNgR5(3Ud`4cs=F=6m(XZvW^V6_BWUjH7wO=Z|Kw@IY_Q`Nzl|GHvBjM=vb ze#lFMRG#e~nlrZ?UiV7)cDX>u4N#$e6v^bbWrO&x^sS|R1-Q+OHU$B12Xi3gY*Ixq zh1LrZI~48Y7)D7qh#;?Q=MB2)C?<^hguv{|I98**WcWRS`MiOf0%x!CNyA_=ln_wf z_5M8V&d+3B)X7Cv7fv=_G1~+maSyKYR{v>C;Xe#d1m)k6Sma1I+2?D P#j+%*l@mu=uh%$(F*v6Lb{);K1_N>)F?K(+Nk}#4(LeQubf@7JYEPL zl@A-wH`JI@OeZ{r&^6Np&uKrSnoJa3rYVN+I$o6>fLPJJ^R5g5_Ja;a;?G5L^Eh58 zK98#hTPB}{H21vs{GY+6!K~1)_DDgYG!{?Y3>`wm324$PkdqEFR-eVBMqz=kQs2u! z8&P4-^f?&LQXu@-YMtoRO|`hw312_Nu} -UXV?fsHBcdXHfImcbR3tdyBb2k2a e)yCqi6y6Mg~q6+A- z`ZX&1vWcbJS5fu>e{J2*Z%a@#yKqkkcUn^#NV3iHhvSO5;nl=%f~H>;y~kHQ^&e;L zL>?T0^5z1i<-TtQ|H_p7?*g-G0E$u`0sxr%&z YhI}+Xx}L2H`UUy6OyeLOIStuCo?jT@E1_RVm;5UsL2|OKq>~}9o#K5j zsRh>-{E=ee5hDk8lX@mxU-b721l_eh@jew5I*W${2mSluW^ytb6)~+Kiw8`&*TIDh z13rUctugvU2C)u?l jdTN`?T>x*%63+i@(Zg@ z0dWkVpp`sQy=GEGZMvQ~$y?&l45GO1NkbVVZnM-^6kN1UAQKRK+{twZvXqi<^)#;l zT~cX6XmV$`O#9^?Vii7pLlmhd=w~K=JQ8Q;bYmVlJamp 0zTIgWCBqV3{*9=a zxh0tM^7tJ|Y9kWqdAq#d{QHw>hQsFdUARiNCDkKiQ|&xP7{$TN7XzyV4g!G+*)C_Z zy!G?(P0e^{;RM^%hfDS2<@IlKk-0u1Y#3s+PSG$CJb1FsBilcAV|0HV>0S*S&H `3uK7-H9o*hUpYl#sI7dhbAYHgG=`UFiaf4MdOudJb z2ux=#;n3ut9ZLJQ(_u>@q0 1@9C$@CLX)0x&CZ-P(!H5`0g6n&(#38EKesg#)Ip_O$`lz~n7m4wcsEpRJa zON^U<;(@O$EQG|x$p=$Mv|>f7@>(vA5BgIq(Q~XKYUo-6q1H0wh)7T+VqEU33I_?6 zsJ0`ksk|*#Q8s;EgqnQdV>*UPRrFkRq;QnGHpd*4W)TccyEXG5rc_^q9r^}6m9Vin zaIw(h;Hq %A&dl4@E$X5<h z6i1O1AMuNF+L-C>kM`hCC-c43z|`5Ag=Q`NGq(rS?rKmy5D(k9XM*YhMJeMC{@64@ zzK#%DZ>8^DSaNbNR}0bCx`F^8?%Rqm2n_H?V*h=$@n2%>YO-9Fj>LLi;Nd+A`8cV1 zDm8q)tjb>-`_7cA(8;VKmKe!R&+QE7ETe<8Ww^p1qMlsV^3o>HV~Dv@0cw?wsMilR ztg0=`E7AKDN_8o*J#Y%viG=!B^Cz91 G(jli3E{j-g7Q;ZDV=P7H(52 z&Tld}u{tm%GwYZ%9#rz!W=!+2BEo66Ocn`TKwCXD$3A0n8N-*nm5|>RtN2xW^?^DM zSX7j*cmeNS#?CKGSKS}a!w%;B3$_an# EtW zWrK&jykWclP@D_kl@IW`oBeG*7+kasAABsBQEy%O`771n9pS&(;`;5mNB`L3c3-ym z*XsN4zLkGW#Q*M#yIw&%?k>xn%jr=5Sm!taqY~ken=v9YI&Zmxb+LA26*`3r(l{?Q zXkQI$fBiPy0X9dGW*iqxOXMY|gi~tVEzxa2Xd%0gBP%AyLcNUpBUAV>`^y%Owxle^ zm}S`m5zQ=9a*ac^0fyG+!|V;{-lSSv?N8||kJhhWsEj$1xW$SJUXSw@lba3o1PexT zA&1c5^CK1xW}*M%i)T`Z>A2hC^nUr``a5Ps=n8;d#QvWNSqT#Kb^og`euz0IWt8X2 z8^?B)l0GNZxi|0%rAtHc<>#_fVt$ lW(9l-=gBe<*mnKGZVAL5+vg!;M!n@vcrRuWBGgZLIjwT1|bg zGn=n7#~DzDO)084LG-0Tph&@Wexd?E N#J>Atmn3=Dk zOy@{&6G%`$^na=M?SQwyDZ 92zox10^8fq=%xTxb( z+JWK0p9ftHx&oX8U{R)Q2rhTmdFjyBxNssWT|$2_){~KxP~%FP?s0g|Z7X!3IW&Fh zD! o>5yE(pId%hN~!= eA|Y{! z(#R3YmKtH`p)?Q`{yopQwB5nq*5+nVqd19e0Z<^)_4BUn!;w>vIFNIOvyjn@fMC2K zWxR?2j(I93^`<~bERY}|ebJ7YltJtIF-uWv99tKB`IbbMZuq=RY1NN^_R~xmBIcU? z>NUae -xRAfzPC#RXDuhQ~MpvNsh|ypU-istqT)I=aEB4#t zI+zK#pHKftDfwq ?zwx)?2k l%9uWE4?K l}#eN+MzkmwPGE=f(v-M-;IlwHN8ga@KRi6#bQ3 zx^*xVqYY#df=GWtob`Eox5GztaPX52Ysqe&KZQ~QH!-|rdhB=Px|G~m3;!F>;56E_ z)0!vRo$+v^f5oL4wurrn!gUjpefD$b_qSNfO7tT#jM=gaNe9XsvNx2(MXB$yXL`c? zs^LV<5`$0#_dA2q;H{GN7S|&9aeZ|rpMHwOz(C;#cm;tznjCDN4lj~}UxTgvSSbq4 z*gPOz*liF^u=1s}-0JQZe-xQsD_HJoL>T|#D>?QAACrY+`TRlIh}2X{)Na&D$M2^5 zBWPS-+`=SwrP=b0_xrRfm%6MZ1e>FXWEK3ZIrCr4LJl|3SPnP%uL&Nz*c6DXj@?@y zA}__4VsB1j2$-et72D?~UlsGaOi{5)B1mi_R+5UbqRgQ$s53DEtsH?sQLir~h}`xa zq=p_e;Sz-5ovTyb=vut^?trh o$=;m}XM{xP3yY!4@_f`s27e`}tE{4Sh(+ZCgVUqDan71W}_! ptB*T&x;MIy2^n&`eVaG5ZLN_|tjLOy)Kl*-NVsVhWVWi6pkrqahYxZaF`h1HN-(b(cEo+fXFh~1 z!okWQT}7W(udWQA)c1QiLKierr%pK%FFH3lb%}Y-MzR*W_LP%_z@15Si$dZb@=&|Z z34h}VN=B`CAm7iT#v@=)d@pK ?y; z(TIZ>1n|$q`1<8vjk|VcrdCFbR(3`fW-JVj_7+h}3X%x0xc}URAT1@P0sw&F0|1~b z&|k_4Fx9A2{dE9wQIQk@)J)-@e0_m&l+tnm01yZMnILJjh+nVsvq@S^Sj|)a+z-YO zIJofX#|W1_LeZ*JB$BKxMBi8zx2TQIp8p=2F5cA~>fZ#jD>5Gp{OJZ#t@MssDWy_5 zu!;mC*sI=yo3W@k*F9?tERq3Dr->Qsvhe$KIh>gI;j`uUDtoK%JY?Z{wfUXZ!k^XU z$YYw@qvncp++Xm+NA-cAC7u(KZv6K78tKi#w>U37?5G-0g88%s+ZZ{&zCLTq-qJ&o zNA%er>>nT@5l*Bc5ss8hCI9~cKtR90NfZ@-T0ou @dwJ{2TJ>>?Fd^l6l`v8Y69$<1sVi|)(iE}YPFzH3nid90yQHe)1QghqD-L- zXo3QpnwlD$;H!X;`YM3>1V}Gzx@;j-Dti?F5&8<9F|()~a$|2`b5);f$V5hg2Q)Av zD=Q;26F!-ul`;V?O--OuvrtG%!Iq*_$Cx0MB!teslmk!qrSl6G5#=O$;$KhzM RFM~uk}}WQWv*0VJG2V>>* Egt8&yS zR1XPOO@+G`0zrIiMC9Nl(V`O!`7{WPKL&6lLM4;d2;QXTjPpV++MvpiFuU1Gd8xmN zn>Z!=odA_(ZG}XWWp|1%_U#i5Mafb1n3U}z9jGg*n@A;vpqj;M#Ol7YtEQn9<#m&@ zwGIMuWCsfm(J>+O(+qK5xHPv87A7;RGA^;^S;yF?DvVOPLOn-xeorBEHL#Z-J*((A ztx0rMRn<6VpR0{_rl`Be3s^UFQ45PBBdm*Xi)=MD!l${hv8AEWYJ@NKfyR2Pv7x20 z!D?z~X=(^G!56eN1jOG^AJ ry7Fgh~p2CfS?1`6j+aCKuve;#UBzVnmu~;EBIJU{Z={$O6iS zB9|bwGRYO4h@5>3BAK>gV~)vh&ro5KlZC`lBt}HJaMeJPL?jFs6*Lr*eqzxT*%j5p z!=gFTekFTCn@^O5Lb5 4*z5HZcK^vho z1=tK%t1D=Lpb8pn0i3K{F?bq3WHvF9v~$oHr%oh3D0*DlUWAQ uG53{CNZG6O#BkSVTv5~%QA|%a#=uR_E?u_ epkjK^Blw%JRX?Rl*>YFTyYnT>#RKbT@4FQj}-o
b4ZrgM6)3>ugMub8xq6)fmvnHly>zn+$$xw&s%`a zfT5tF0X~6-h8FlVHUz*W(%1xl@hmVNq*;vtLA)R KxaFoIV8GMH8?nZt2N3-@K563ss)W`i@cxm(M%{12zjBEM z8PF&pOLiq%GIb&cCH#@gJP`uj4T5+u>8H~i>mPzPOG!9+W zwtYqz2&HWV)wem5b`{AXsyLnF!eLAtIWh$Fwvj{6CVhF6bctZ4ac3{=q?(>1YG8QQ zEoPe>y3|K-!=M-{x#tA<*r(dAMxH)B>XeyJ%?-`LWh)hYa)L;Y8^BHOW7U1CL+O@D zx&LsuD*K{gbQESwHJ9zHzJOULf|06ll1C|D+!PT uQ4ivcU9r*Xn8 z F>5>v+ RMU z$b@pwJiYRb*WL&-J}&y^MH8=??8<=dzZ-rq`IdPH-u;{O@qtlBK&stk 0^I- j7`y;sMRbXWB??!6T&R#Z$h$_O6ST YgIWteomk?@ %68tE|NhA5~ ABYn9iNt`B zT`O3x3O2$P={4Nt+$5-}Q*4i?Uf_)}MVBsPjitt@9#*4`sE6zceF3$}kb_aFIYNV2 z4P`ZL gm7z!1%%@APnf%jv``>;OFYDrTruc`bl_XdcQzRLc zywaAu_@1s2gnx5T-@kmk&pc9b#W~c6#GC}366?NVT6hqmsYE6?ds6Q3n|?O?@mJo| zqzYAXS*kXzd-cGsPocoUgZtk9=ev11U)u56$Ft_m*uQW8l3zadg@I>%{K-dO8S%BA zJ$pf(K4+YI-ndICatoF$vImGO7}*Qda_PA76CBLuG2%i>YmQV@URtHrcp+4%ntf=m zNb; 4ckO~L^Mb+F5y8#CW$-<1DJtY5v|b+o#+y^ zqM~b4aZA)mE{RZ )c48fopMRh9^}=ntiY zB2{YbRqLecDU-oSHX_$+2ffhPk{n6uiRo&(MGoLs94@ z;RpRi@5mT&P5V?;vOS94+EY{rr@IFANBJmm*4TFgYAVQ1p`j~Dl^7h-(rP~NK}~if z0lWI+Jf&JodPoDGVHMNXKDxity5ZE*H#Q=$k1j-XU6DHIQBPz~%@Mk#AqzA?s%w$s zKbqAhs2zMD=?H}DhtTIjopB#Geg_wkM?&N=&zfcJ3#dWPJTvQ@uBtT|@)WBMDv{2@ zLj +||E7pM85oQgzR-?sJvu**$y3PbN;8 z^NY{_`hViFI6 YTZ`N$svU%&m z2ktz4`0!0LZu#Ml{ g-Rb5GW2uqM4G1sA33wX`#lLcl%5!b{3wcn}6l5vf8G71Bsp zI0T)d2OsUV*yJqcs-vDCQ{)7R4+t@Dk#U7otb>eKbYo2j(kd+;10>oYn4Vk?h_W~% ze<`*d68dB0`mB1yn7f1$nJ&nPWbhh|n^H_sQd(qCj3OoWf=w7xAeVAP8jMPiM4F2< zT0~OcROQA>PG#k2p+(OgC64hUI*s757km0eg(&H|sS(7hq&3kdKXQeo5^7Dig=k4i zpkruB>SB+58$gpAxrd{KLGxP$5+Q2*Cw|&@2sWBZqJ)&Dq->;&%QEh91i3dJyOXt0 z?5q$OW(JRGml5VZ_zO-S_;v6%h#88=<=?Ob5D8 zxu}ZK4wDbjVK)a-huj><^SHAjmvD!KAeGF_=1Fs`f~BgsWJcM4Kd|?ZBtX%OVmpsl z?%qARJ_e-f`s;S@KkDk>yMH#1I1Lz$T&MK$U;J``>r}6kx~}~3gekY(`Pu7#hEwDL z#AnpR-99+}^mA-*Ts;yfpQ3{dE4T0ezfX_3$Q&r}jZ?c%9^3~nO`<+csxV+mx%}We za)1`UHeB^ScU0-^bAI>N_e@eH{WZ4UKL4>}M-Lo0(5GMTv%h@ygh^Ky-}Iv`Tef`q z>8E$zJ1_s@uYY;?+5RqpPj-HM;&?sT{wZ=?{U@9+c+nA|++-dxKH_OX@d3-0H0aP> zFMM|Y<=U(v{j+a; IIIL;l+D+%?b2F<76Ik^qyTrhILHgL2wKN0G-^VLqCdnJ zxx&jM=sz@r=Y= ^k1;1BqNaZmCOe8FeJ@dL3?*?2kw z9uXHGj1-YE;^IzR{-I`yAQDuGqDe#`Iofz=DWi6Y53S}>9e@{Pik%nmF?6{FgV2o* zQdm00iU|~yyGkC!ESM8p01Crj&^Zg*l@0%8W@qCEer9K7iG$QK+Ce}|l+V@6CWs!F zXUW1rR|E|xHA&fcWT?7)l!3M xTVpYT~IT+RkN>rtw eP5X0fcr`h gp$-{QW;SeQ5bIM_+K>kN<1>sIQKC{5Q+a8ZzXKSKb_Q>NykU{D>|sbdmP^ zKK;v&zc77`s%8B18> ;v2uFq_0c1oGh7>Yusp~sENU!3DO#7K2JorayE6Ew%?@RBfwx;Mi zdnZ=nmolI^7F46(q(0Ot*$vuEgyn@0{hty@XB3pSX*1Z0Ky|6!wR_r@DH|otF18l- z4Wq(VS;$=DPWGwONEFnZ;K6EhUbEr07+FHyJ}R@26OG^-KeMgDl{!GCtO{doRg%3X zk&`1vgakqX%#Ht;0MfX&hnc8^`a)Z7jDDmZk<&%n$uy&r16P_JiH9iPu F4HQ(I>&>oMD;i|F)$rM*D$2CMtHdPJICda;8pv-ty zA9VlCo&Sq%JN5=^e`N2jrp6OtIxQ=^>&g92ciG|w_V4w? @6WtJpLHL1qCfDIUVr?LQB&?N`{1d^&=4h})XDLOn+CvNs|7-=;5b;V z&~PO;tg8$PckhrqSzeSSuNb#-$HxbnKR)ou?|k1L^~gJd3&@WgCS=o~ zs}!yAK5K8?|61ptajN?1bS{`Tz0%w+d7LR-TvDCK<@Jxw=(?0`jItY-L}haEAPSIG z5Gf)sdIiuIO>;02&B71(`0zv9gvy8D^c7pPJ-J$te05nDj18rb2Upfg0d%69_2YrG zQG$48fQpDof;j0UTd9I- z=Y{*^%iouts#N-6Qt+6xFz|kpgy#VRwG) zSTNc3igl`HIYz4*e9C60#=LoLGclpDr=pR_DyFQQcF)NjJ}B~9n(-Vq9GyW$_$Z1- z9Gy1GQXlCgmXE;6@g_kL6GS_-1k%#*Y||74o#a+1pPr^OsR;EOsS$)V@peVLWHGu2 zP(P$An_?H07h8>Xqc6oAGshiiqWs|Y_E&n3Q? dRsLv`(K zr(1Axr0VE<5izNeAs(tN4d!6y?`@0#U70 fjST&%KXF`GkenYG zJdDp#xjvv_qe$=th?M@A$Hmhm4uL2SHZp)nP{U%R%}5cytj!nzjH>K``BXI|_zp+l zc*L@{nMxVSNHf=Xal8Ne_BrkO=l)b*U;pyUFIQFlK6l6n2u| 3yS@ryaj z9)ITj_ut>MXV3G0SRcU04e8QET}g3AbS;N3r+w?E5BlzSWwSAcB?VG!!noqnR~JPh z8btSkj*rS}yAzdPF~o$RB|TU^Sw)D{i0!1*&8Ij(S6I4o!zEJufG9PhO8TN{uUNE- z(bZO6zxB?LO%T;CVvNLQo^p>t^)HqJ7EC{J-%j` 9>JdCKQ^a$k_Wpdh z8Hf1jE!X9~@2=^fJ3&r2Y@lwek|DNDr;pqrmY`8hR_!C+BXLvDB&uy)sSovEg`~YV zgxY(Sp3IOBHp*Ee$3M-u5KDT{g^LfgCITU;mAou^*Bz#m`;-@RQWHrH1AP%zwMnLB zl-26!ks}vRb*F9WYf~#@lt~6A=deBcG{tvm0YA;f)@2gWwTI{&@pPB*q1#(|WpOU! zaFA%t;$QyE_0eQYYC_u{nkzWo{)wmZDb~l1?2&t5QoxYf4^w_w-+j>Evid_^B)|05 zd$a;@9L}2gX@^X6OL3|Q1BocEK|SX0g2GLz4m5t!wQHBXd-wkCcfT9Z?~FmG<@V^( zH^bjE!=LSM$?~`OPw98sAO7(C?%lgjKI!EB^`GiBMA89ea ^HqL z2KJir3Yyv8d8|*y7kX#HXV8*&tiY~Uf0TLU9RX|Zs6l
H^m8^)umn->kuXGiO#qeW=oJ`(>WhFJnl*jG>RdD|m+V2nw^1CJn$J zhzJORBrf8#bmR5fUIT=infAhgJ;NHsf&qW<3tgsxxr l}3ogMF>A~t8`j3#QtYgR^C0EdsY#dQ)-hZTrxvRgY6X*5s^EEIu;V+?w=l> zq9#*g@uL!L?m(J|{oM72?zG`JVI}l5mVC8T%dOtk4iQpq*$ws>){C^}vQnn1QLmzp+!i12D?~U-m|LLdtP@l?8x$K2p5(Uvu4zaRx 4ms8;VFl5ZlS z2BJVQbZKi3$u1 ; zM4^ %oLgmR2r$i EBd3rJ{+8=64HO07J3nkGQ@{jJe6l0qqimd(bTd`rxCWfM?DO0p (%tIP&FTuDuJrj^<|+3r_$gI4`)9xWT3|o? zrJryd&Z?YP3X6B`Ze@4(gTSuvfrDNA-MVC`8ZD?jI}>&la?L1rOjV!8U8nT#2bQWa zmtLNK;iUsl9S%0V#^(B_=HnuO9(E{gIC$jq|1Q73p`l^JTYnq!)o%#{kLU-8qP9ML z?I&M+=0E?vWbEmF|9ijfGwRNT8+YDt-sVR#FTeeJzpGs_1_P$v`AzRpf!CU@9S-B+ z-QV{6YT(Ze*N(6@FYR(wV8iz7&b6#}A3x=5fxk4uL7(rv$NG-4{;%mL{a?85OW*$E z!i^u#gbc{2zV`cR8-9Cb|A6)ROaD3g>1l60cIBR>T?^-1^Z!!+ AlxmmPbzFPr^qovlE)XDXCelq~KB*`7L&DBdv=3C3>`+!NB@%=Z zhM; Qm1- zVIq+<;>`Y%Tt*Nza|D^?<(Lpsg;k8)kLrtf-UOtYMo@7Zpv^q?C{UJ8IrhXqcBDTA zr7Oc5&LH)2A$e0Gn2HNsaf3^U8n~+8>X5rn=)672?74-9g%0!wH?5_>bG-CZlf>N- z5^lO*!99&t^?IC}+60YQonPZgbxDIF{!3Gz{%}ey1j6-6=yRdYxR0yf!TDWN+svR( zc^-6K4_qF1&$8y&(=ut&4277gVu-1_YwON^@_lMX1xNSqZai_!>@X^&Q&yMmJ^QLf zRvjHUpl8+NkI%aC`uG3!nXBxE*IudJ^j??|kUQd>(U**IwegJpJ)fI!{`c=KuU+*N zUNA+-6z%f~5mXr&FlSrv3j|c*E(DI4s`X91|JKx#YW!N};eyNq!AJ0Fs`gW85*rAC zdk >{r3zuFs>*w>H-@Z58mI|M~^XHr|4S{_V3Jb@5 oe@g z5qL4+@#dD};%W7k 3C_7%1fmEIKU(YF^?%lZK z`tzV=K&r-Cf8R0lJiPqBTR!L;x0 V$*MhYzdj8WJt%`2nw%*!Wat?O%=P%wc;>n4den0%Z z?_aQd+MADE* |-fj zibwoOcyDA36Rrd{E0U|GpjOhiAlG>OB~}$$AndEEBp_;M1Sy| GmcXMTK!~ z5Yhy5qhxNLBw9vmq+`?@ GiLfd#c8&Z3{7XSBsjk_bs_X@Y1e5 q48k*twejtb>bBpD&p3$WPs%Xa^1cwHAV39K9g%IqgL zu@`(r5g@|R-FXTb8ZR&) lCX428x@RsIj;5G zQ_WPJPTfkC=z%5&tqhA(+mO Qo`A>nijQ_yir{RqylIZ$wI z<|zjgl2;&`+vw|qBb)eP))<@(GUW8NZn){@TW-1alfCu&g73QEcr?>_$d%!YQ+ht} z_+vNUbp1d7wZ{ctIH*G-eflXq|2Xl&slP1W`iGSufk+kbCupA7PXTwU0!9UUV`Jz# zQXr35byK{3;h>APW>hE%qSSr3+>3~HAeum`@bX15GntvET{PzA*|)9vXm_|k^~Zm; z?waphw}1csE3O#(;g;GHha2~Na`@xA&;Pw`|Gz)l_pfcAzw`E{bI%)5S64UdzkdFw zr{59RDq-88cgTq=OX1Vo|FyUN-}@Us5mqI+u3 q`1NH2 zgx#I2J4ji8B(2+1|F1pu+xIs7dtc+DV-^3E)nVSk e8hA1e+vi@Ur%`PZ=takTt_!ND)rRB>vZuzvn_EqcKr)1>(c>QM->4Myb zB89M+zP%RS0eBIRxcGvT0-SE*uk!Sfv#+IDIfkU~OM2zV0|=LI`IIT{=`8(# ^3+Gw6@# zP{P5EK%!6>@^z{e(d~Rxu!#3vigz?AZBge2r8%l3)HKi1caaAQDmRdF0Le%oJGe)B zWUxjk)!0zq*wD~e51;ym2K?Yp{M0w1O!!E5o^pO^(5NoT+yH(ksGX!WX(9C_t-gW2 zz+bFId{LP(zt)^86KzEGOgEPH+uB}T?c`EkHenwXF<6>AOJ?VJ$q{o;Mrg^1B_dg} zUP9IUNT_9dX`GOcPx>PD0FVQ>0>qhw#^U1K{F39jBoK#YM9KEZJ3LYHz0RMLZMkw?5Tn5Xo>u@4#w zi&a#vx|CBM3GyUrx1(-6 y0}Fiwe#Yd<3?Xv9h{kW_Rs!a&P!#_v)PqpObrK_w1DkANbO{R~CGF_RQ>c zaz<}F>+jtgzC{1Y6s4dze6oc={G1Fjv5GAC(hKYDcFJij-A?Y^>m-BNAeQc!DtKMs zqF>J)IB?*9{nvl}Yx{>8U7CCK>;bzN!HzgSf6I|$2d#|b1qD|QA3prM)2 fM&%m;T)M)2o)eBd%1t|9tI3?^E2jzN8KN=3L*L!X@vD6@B+B z|5f(B-R*RxJ8jrC-&;5J)>n6nRp $xp^ 1d#EbK7A$f*RNhB=xRZ^fW}Ym?1F&>LA{CDJYTnNCGND zm1PK#4idu18)sydBA|j55o1G!D&*k8=|u#k!h#XV$R1_m(SbN}RW|xq^|j_G(&eg2 zfM!(6qiWx%1g(am%fxxnr8w?Xte)m8g6SFYVMf=efFVg=XrZ8qDd)K{P_;QzhMX(s zqaLU#kj@U+vPY3YUSz)tW3VJq;t>r+eMHTmfaz#PL!bK4$|32$QG-B0eQ1PBNow5* zMJ9xGOdH>%E0HiYIG1w&>v2gP=V-oh4?t5)8?>0nq&Na0sg>j@-s*=b zi<>BW(yW*+S`t>}iN7pWjT1ie7f>$Z}BuG>j`;!gC z41S6&5rI~DQYc4RMc%?6#9bA;Wch(@opf?m&y%xHI;m^Vld@0hnSFB4E+_ZQ#v}0Q z3DgH@7G%imd2*MNPRa`X0SV?=_?ZbGkb`A=Wu4SB6NH0IkaKd+uHt9c-o1OAdd4Zk z&)d59z}H59orZ#KtA2Y&gJ~LE^n<%6-EjUTm*&H!SX;MlTT=db->fe-Hf0{EKeFf0 zCt2N&Ex30cz|_Bg|0jO?yAS{G`27Ew3wt-wzD~lO^x6LvpY^}j{A ~FCo|6zE4USaIPqcsu~w)u_vK^LhhdL@P 7>!^e6~uxkE!?KyZo{OrZj zQBQsMAHVx122Q Kaajg~}0O7;KEbvEC z8e}ShY7yTObcYN@qR*)7l=A@HUnob;5@VXtqN*1KDkd_jW8_d%`x)xD!qGOK>ZRAT zT^p^qLM`$|q9o!p@?Rr@MO8(4l=(o-Z?!nto=m$%N=M1#WF-PPe7&IDMIpnl_SMAA zSZNr*|H43swk6 8E23X5qWnsPIWck7GSO1C3>x2McgjxH-65)Q zdh4W1)HZQDeE`~LYWpI|$7HxTDcnan1j)s!TwxkIc}pWGlrW}ByAcJU3$lm|S`z}< zhlXBaMB%eCYP(e0h*ew(F$PnRWji99?6ovN<>({EqJ}YzHTa9}TD=7;N|W2VLT<^J z<)Z+~-6p7$c8{qzB(>9oXuR6RROFLhZ`pPB9FZL^!6Kf8laq?mjvUSxX)E)U44+qV z_B7r}B|W?KM5I7Pbw?y` g9$ W^}4r19Z$TDk|9mUFgueri@B*z@QvTxS&WPB4UH+R#{%ND6Ump3ibL 0oV=Lx7QFy#k7g)h3^Kmya6+z{*5hW8j@MzVc73!E&zwBN| !C(Bq3db zP3qYTqj)M)4qCA&QiEh%uyLoZGT|$0sNYCs!8wEgHQk6%Q5JRFzB!@zXzC_GrEo8I z@gigj_@KA<5wP$_k}7iWP& #$UZ22i-rS{ zy380IazGIQk{g!`9ze7MPE&Z6gIAF?SdMKuCH272^aI*Q`}(Wx^5rWEKx1Ldv;Co@ ztsE(04ilK3yh`Irw;i&tiPp&>B_|nO4X9gbS_G3S5vlGNuF7PnM=l9 #zWuGr$e1_99KVrGaIwjn7sBy)p5|wtVNlZ zXSqPCtAHy{wy&{IcGJ4**EYTL_uV`Gt(z&b8LD}I_3lN#W6Q!M^mNa^y|7 *zjAARt_hr4#}yzuK6!t;P{y|v-&v%l20 zZ{J_saqpqcr+4qsy=SkU*Dd`4@(W=!QR@k|MZLTg16|buFIbVdz}ecVbqvV?E%|7g zKt$A p=@@})4sTD&+}aX`Gp`cycJ@bqEq zDl#hg3)lT7arGn{6}}D`{!))n=h$5&uEfUeJJCh4&XcuDF1p&rC2dp`QX|$ZvR6?X zMG}hxloV1#RpLLS5AMlG14WgUYpFz4ELVo5ie6-b|D$|zN2;J*V3ZX1jHd+5nrX-t zTFql~>gtt-EE @L5grx(I2C ztSGAqF7U=`tw N0Yb3PL3fSAs9n)YCLrb_nSu#-gw)*>57Emo*`&BIZh{3Rkyq z(h-9&;80Up&qWxL__` cS$?Q+IU&H5#=FSm)>knPjG- zeOg6Oyts{FQsp@t((0i1gqCwDWJ^Mo^15()Tr<>F*0}7bs`N$1!H~odHHCX;qieDj z<+D!8w)%FpV6On3oEmzxBf3KlWWr(ChJztNHTIpbjyAZ}b(5+`fAm;O6D}^bdtU$6 z_!0knuWt9h_gDSze}De@=Rdn?@zA_8x}KEvw?F?Yx9^2rvU|WK CA^wKNgY0-%>&O+;kx(xp?}R*Gw XmO=#9(HB;Nxgc>*ym zd7)Pf4zUw-Qs`q?s)#sBLZWz}&DdmPg+!CD=n038L(e4l@0J`&dc B$>Jp!H&>Tdwq_DXy10q6Nm{s2H2JF4!!PEGWuWDRvc-QPN~o zQ=vHof&dwsDBpyr-dCueZj+WO=`eH~%uEHv5HvtA02YJPo#YFJ )*q)Lx=%|oHn$umch+A7pf8tojEN+}_k9nM+9LZ 5rJQ!9dYN_HF`9rFIn KR?N`;r(- zA3Ay=t~nJ~p>Qg?N!1@0y|8o3r%(cJOb;A{aP8(3%}09-I@BCEv1^NO$bjL8j~(jK zt=maG`T(2*zkK?HIb+3(QPAHd>>P4+krza|1=eekxMr!flMFEOO02tGawxS#5gAg~ zP<3Z4_=cud(tcyGDti>!lnliPB;?(-zGp{$XyFz1F c1PJl>4w zh1*eXX9c22MY4=IFSt}C{k5$U_99I0ei2KQ3Q?D&2CLDx-%^79M^q 7EQzP8U-O?U~s4WP1t35%fUIc;@QEe#$J8U*`#=6R2yhJ$l| z3bGB$`De_Oppn1_(h7kHOLFMbo@d+#gUAzM `k<04X~G+UIRibK8> zWfbzt8LXu1I%uos1w>3l$B{XvlJ> 5e2%6B=CbA8BU*8x2ql zT2X`pQ<5vWX6djYxth>5TJb4qWHP! YfA%;tfAAdrFkpJn;sBkqAP64@Z1l^^J3%Vjqc(<#h3DcFhzSBis**7GP zRG%Pu;y-l{tTuFZtrB8qb91QJONw%H5WR8@CnB#J4&r-y&6ng#ZZav 1p3>$Sw513`h+L#G4-}() zi738@%s*&}vE?|&g&b^p*qO7=W3*wPstz^SkGhhGp{N+Ln~$Mr)nG}SoD@o6p!!bK zWNV`)g}hhM24L|;8uR2iH6&$W^Xe$%dzr+9+M*7cw~BK(;E;lCz9?I0>}4wHp|mxT z6zRt|%|hC&OL*!;T`yp8G+ikb4pLb_OaO;WNv()f8Mh4fwMAa2j7cG}u%Xnm(d2`4 zw zyEUan&lW)nnxj@!Auv)v>*1>~QB1{#h%hx)XuVvUy-So=nVM)JrK)X?M!)E{lO>tM z&t7Kra%e8)v{DPag8EU>d9AY2Ts2$kCzpHe4J4 TI23>>A+G@@)`Z>N`CuOjDH$J>pN2b;~x}y(Z5X9idevT^v7E Wt&KlksSvOxEJbX7oYLfE-8E5Bis+MJdP3YpUTI-MU_f&d#286%Ug$%m@jF zE7swZlt~$hRJpFL$O*uXBQAO3Qbzk)!xhn33WN`h>{XJf*cTt&ND(fiE~fIRT%yG_ z$+56#CM$W2T=La25*j&iAvLKFW|fy zxX6>@26E9vtdtQ*b5p&(st%;cDX}~V3mgSZyD&3)Td&A)Oj1|PU*+{&swl~kTpCb+ zHD@FR4&q~~S_jEdKSGQ+&%+)p%sG1rXM)nbD7sh$O?HW!gYFn>J+;+-Bv3nusW-{p zX>7 721a+cf2L>#P7#SSKtVK*Q&0N#~uz_(l zgsucO`A21)vx8=%4I_Q`7?mzerSZ>|S&u~%WP1h~bl8(<8)H>YN@B^17Y8pep|4(i zCS4JTur|kXA$8{!zk>ys LgqXFl-F-MJ zjnEC=qbsgL4pA|aDs`KvEHi=%C^kY@Gb6xU-T<2fL9Wp97E?Xoh9&j-1kF-LBmAnb z`{r#hS%budj}}H5Cr&0a`)*dV18G*Kf&;#6?>?QYR}@H>UI+Wjk;Re0@HoUk0O6 zzD*HVCYN~9iyk9IYDo-HOa-wZ*oiL7M5pLxUB&N GRMJ_r-vV=^E zT_fqV*S%T}1S7Vu@p9o0arv@Gn6b>O`kf7NEp>F#TzG71Y@d*n%I-(W;?-TgXs1p( zvWLR)oMVQ@2{qM@BT{QM4og9*blkUXrI7Sqt)hgKUhF;jrBumg5{d_U@*(@)&&jEb zn+MgQ=6#}Zq11dpRV;}T=_ybYc+f!5%Q?YEc~w4pMu<^Fqf>)yPER#v%+VqljxnI^ z-m&|`i)zY2OB#vMY2!?ItMZC7>7l8bB->?-RaJ)OiX7E)&^X$qYZn<+ixr=Ajbs|S zPSWI UdFXgJ7=uPnFi^1$u$Za~7A{B?k_jb8E=@M5 z?n@Ib)MT!*W6g1q(|2UjNF|&rj-Jz&6G1u@jgYs2_U)(UQMNrrTTs*`OkS3qEmB>s z*E-2sY`)`oD$Xz?*;iy@R}_bCa~-l&(FIgtMavZ)(d|-e1MQxLWJgDa%N-Ep01-v( z#f756_3CI^s$`|+GNs2TG6nTi6h+}+N9rIgN8}2jt!IO6MX*P)b1^e%0s(8U*5a2^ z!*0FNDAiADv3E=jwQ?)6N4=sACMtHy5tmFuMnCaxtid+9l$28OAp}@cJ$M>RL?zpg z(y1ld!8hz78pK0PR_a`EB|3zWxCWRs+W2jEI?Xd>kkw1Bo-WR1I(U|AB4v q;sn87TCizC&Wmvixrh?!abWIF8yM=06*aVX#=~1c(m}9OQ`iq*K z{M#-p;WTd?9CGCR(+!bhR1a@gW*bOj7CWxl#zb?@IoT$!i5R4jUIq+ q`WOpkLs#Z;YHhwtrA#E$Bsp{MqQMF$xcp&!%>bilrIH!jcOisM*I+=NQppvtSK z{@1u+m6ugl&+D62Dy~z|Raoh))R#H+l~8 )tOWhh?)zXz9lyMDR>c=)5Ek&nC&2 djsm@tExnl0*7Oia@>g_+_UqT6KwY!E)}Wzz!HbDE$y`a*Xx^@Cu! zx`Y}dE~26MnpVs)>O(Y2T?iZ(66ds(HbgDJNlcu#je0hOn%RcoOucnf98b{ijcf1_ z+ V~e=VK%6q?H;g8Zzg?tL6tY|Y8QaezuNd|i*iASx6?5lG$8KXIPC#s_*)%q- z*Zs_hjHZydvW{c-%ULNFk{rlSvC{Vgjk)Wim=iB`5zz2)q-CvHcR#n F>H?(^1hZwItj-`=a+!R&ht|aYRt>!|2J@ zZ;STkp(JX=*1w`HcY)Wxb$(HV9mVKG{$Nh@NS89(JB|$e4iKkefFBfSoz^8QU-u1p z7DoEZ%03vB;COVw&ZvdTMm>@tK5l>z&eED>9z?3TNR**6Q!Lmz1XGYt1Gh(k 75kG);OC*s^%$C0gy^cZJ{isE@UwhIUQ=Z+FaGP|(fS?>o$?_@aU z0w>IGP1;|GyrJ%r|KRcJl)p&+F{@?v^e`91c7koVXR|RRzw4}QUBcYrKX4~ rS4m-Kfr^5l*b?2+!qNN1eZfavUCRh8$vJB?o@_5kULVS3h1$j_1%Utn zKtR(^wqM|#yAi 75t1AvP+oR?8 z?n=Y|yT8&Ge+oV>D{YT|p1_pG6kXrfwatHCw-bg#F%2nDGmEEAA3fD7WI( DnVRGJGC)M=Pc|@Bch6iy*5V8l@9J zw0aO>4~2^?B Xa1SS*qGZiEy6(g zD=P@x%jmt#wq15+=(YoZ48Ze6XKniza)>C4`Ey&b5~07$6Rp}p1qnSZ|8w(?h7kxq zjQZd$yT$L#a(a%~M^9L{qF>?Da(wxHo_o%#X>bCj1Yggpecw;ZClj->P#Q8_R?YRR zJr1*6yX}(JrL`2&|CNmL?izhEIvxl#>~(I9&JT*A@7?(YIbIFmXjS`We&*KG^`x1? z3AlY8p)_sWT=#2L!W%V4+Adu1x1DX3ff7L@ah}(eXs8}=M*2M5ZwIgndRN6dbV*;n z!8TF>tADnZ)wpUfg!@R`@&2|s-HFum)oEar1mB`il|Px|-k`9@OyA8xoN9sqYo|~7 z!i_)5a(d3WRtzIPPN&XG;nh8eQHlx48obq~rsNiO|7V=@LO_KIuGF|Yj~rbJtv^QU zAunX=WavH}MxuG&ucn9?H(&K42P(XGeLjBnZr%ERKKkmtpQyb)oD a=m%{(DQR z_9~KyCC OfmJy^ezk2j*cn)} vGF?TIu+JU?GdQ z>3F(_9|lThM#c!H>N!S^`6D>kb}U2j?qMq#t4c?WY9&@IZSzEFf6I){Jzz)2?b_ak z7tDUyLgB)-cH$+Y$RES|E$Y{9lbDDy!Yv+}*mtEkezw1<)u_&k6KW>Dj~PJjr}#sY z6S3W^s3<1qSNaX|_Nq{sQL|1;>b2rr+3`XIuD{vRS*L=~eb=i^zrv!j0@Y18EeV?+ z^?3x0+9ZOLE=-Kq%SZ7i >C~~Q@B38=Nr*pPs!*`03MnWrFHfyn zcOq}j4-&fbZ6B;3d|11`zbBIdqWeY+mkQ4> r!j(S%sRW{mru{bejiNUrdq5K zz{_X&Nw3C^lGHvXa`!E3TDnDZ=D1jcKm*i>v=%Sj8zTBZ!Iu|&Ix2)GC}?e-&u`+B zf-(BF)}r@Bsxjm0?Rc)zc&vU2{dCw}GUIO{-TB+?riY9%#vcLg=-!WmnTSSW7GVje zB)mb_&Be+O(u|h0yh`lo^3DUtDd!~1;~5GTr&2*P6Enn7LbWXIFpMK71j0ABzSmE_ z-5rv5km)CTAD7Sln{7 YwsxEfCqJL(Jt_Px|tegMq 2<9O=q+GJl;bRjjenT6{S+* Qv5SE~<&_ODR_hj|X3^Pg*{aYw_8 z0-%=&_sc%p+;S~6ISDn3NS@+|jO0cVGqE~{4)Ec(M%pgTGga0xqa~E8L@?))|FTe} zcnnoi(QayhR(wUwBQ%xA<3?0EzBS2c=V?`y m1g_hmcwj< zY(;
UDPO6U=Y;86mFL70{^R3G{=1#XNkwV zTual}i$66wHI*|s+U?%Ybrxe~C}=cSPx|EfB8gO8n}N!e`}@B=8RVrTwkpvAasHAm zO?;b&5pam1xjgcthkAcQRP(SSp%vU~#qobfZ}2#M2%X>c%@)bGO{uUsN})7Npql!` z#FISRCDXzvV>)*lQ}4h}emg6Yp+ZdMlv64?t%h%%zQ1S_kW#8a1Skb(o$_xLtfWfy zLMTugEa@qbx@K`k>%+h0;p8$8%Z y 2{>H2U5UG=fE621U#Po{XyE*BrC$@B4qCFJ=j?E< uBwPJntyn?TUJ*kxEob&3R#IcqdUn-jbKN^EJ$gZ zsxNODey$=!xo+3z5J%>pg_ywdit8n*8Q9N*_m3E=|3nGfkYjHYQT_$1BTk)HGQO{p zWOa%##4K2ufpI}J+l=Q@S4EUMxe6OwIHPv4BA#-K{re9`3j!E6!Plt&y+WnRxvr%d z!~J3#OPm0E#wcMva=Vk7US@0tuLg_jyeU_8|Ky)J-VOsBF;hiCYfh_SpORG}rrGWX zsjP u4@Oh-y9AD1glX8=JT5+f*w2$Kl}k_;_>huO4+n(E7r0Gr&H-PJ)7J z8IMkhKaCZ5;x1HYe#ekYFG)x1g(Rc@eeT!NZD0tcD?&21(y%(k+bA~DK9RCmEIs}d zK(l9!%WYoO>vXQG_2o;17TagB ADb!ZZ zoV~&{zo#o~UFDn_S*X2nG(yN69}QI~I@<#^wii`@tB-gEl9Lt)=IziLt(w1U>W%s7 zqhP11PWQ3nyA`e%K65*|U~Ic0oC~VMay%kst D#EWOC7c8e84pZgGeNMO!PPej zn gSd#7Gl5!qS&FNB!o3VsDWz= zqYv-z32-mO8_7sgYT>ZOgiu*&DrCW!d>Fa$=8raEEmAEP_JFTPGtjtbM9}|spLJ6F z#E5j?<8~Mw%HUadg)Ma8{c|8?3IY!vqaOdsyf1Q~;X)9I1wzL^gy^Ryz32?$vq9yd z*GOUSUul4i>H21jBb7qw+R{p`9+)I0Ra!REH2#slWOMF^*WD =tinQ) z1NqP_FG=D+vB9rXIFs*7Osx(@bdkay@qjR#hwyjewSjL7UXwi2u`!_o%fpGa6nv7b zY_2@ShgObg1rvX}4b7~mas+8>i=%`?#e@?87GyPaV9UO-POI9WOaU}ZD28UyFd>+> zS7~@N?@_>1MA 9`)DSrYpO6g{fsEPmwr>8#n_yq%3u zNL|*O(psue?n3B((QUm1h343!7lw7YQU|m&+CKL0-tOBH??>ZjLi*@md?dr{=}mR@ zIX3Y4g0WazK(>XUJWvQKaCSItq5(=SZ1-K&<5cKYwo-gmq^(DR2!>)Bm~2}l(I+Z{ zt1;j9A-tlbQ&-SRFp+YBWxd?8H%Z=%A4G4W3dTT?0znZfC-rV5TYwsv%kpvQJhbd) z ;}v#Lo1NeaB|c>MQpzV>*rVX68}7PQ5lyp+_tcB?@_0!iUdc%TtTaf3 zawUcpiRXzRqN)`9Xbw zG*a)`jj3^@EW~M;L2K$5g0cC;4P)hgUw(GfV2ZL9P zqGEr4qz|w(A-@Q=v#ERP;NT!6Bm^2B)n-HUHQLsT0$&Ms9+c$w(knrd)#`ZI9V>WJ z<}x8)ldqs4^ghQv={NP^^N!! 29cLoo|ErI!ok zhe98JS*4YdDu@<(hEg eAHPX{*sYy_`;Rd_9ZjkAv8#7>g}|Zwlk#x7n1Y}4J)=~Mm)Y=xU-}+6lXE8 zDCfmXQ|7A5O>~!~;}d{C_`zuC${8F;za`jIt1o!1HJeVWr!?!R1;t@SLC2?h)y#A} zAHx(wACJDLzSoh(h*)k0W_9v=5vv%GxQ8sO2IGChq1R}25C>4>VcaSKEAWo!CgkH1 zsYxtcyXd`QV6PGa{Z}F2??8QV@qrmVKQ5s%8g_L;Jt=xA?Jp_;v_Z;7Xw!?;2AOJI z8rREzm2ztcQ`a3&zn9Y3+i |#a<)BJ!yNIdxE;{}X V5UY4MnelqnFWbclqyq(?1WV1rS!O z;ObK!Nv#+_^$U-$sW8L=>^N#F#SjRj-`Q{48Gwg$`_+VgT!T~FImDpPT9y!U2WVEt zCZ)RWFcgJX=W%~R#OKma-E%dASVHu%*!kl%luyel$<77`s>T#3E b|;YFVz9hg(C71gYuC&V`}djpKNvFUWgaaW z2?$P|z-RLJz{gFrTUymy>~Yo9Iu=KRk6wn0JvWD2JpW$^se^PB#Q@gsE%(2OSk(Nt z @#dOa&({F051y)oG|C{yD$!cw&g8$-?6Qf=|;R7MiC>{!-BLCB~GwyGEz zkldX(O0y#-O%WaNiLDkz#N)8HpQ0!DyFW}#w+ws>EvK?+s9Jiqjtff5cpUYi?^1*M z7D#@JZmAO3G!s;{#pt18VR>YxVc3yDup=DAf7eS&>>sVt2RC#ujQ#=fX8AWvFL~T| zCD?|$( FkP*uWDvtxUPZ=a6rc=P=XJ!O^kn2JDxAJYN{WsSycg0u}wUJ8=t&Wtm`q zG`DxThY|&^*SLs4OsHW|_YYOE>_|Vsu=_spp*C5Rpzc{H6Zsqc0fA?>O7*``s;7e9 zFG1$68_9BuVeN#&WSJgfM&%&JG1pqamWt|%)t<_~6(ypT#09kMx3 hoys=N@pjqi57&Q2Kqkk}y$KEHZ^*E` z83T29NmK~}EA(B`8XT^7k{0*u-2f_$lZ(I+3uY@hpx&n4j_7+{Unm+ef4%RgKe%Jy z<@52%z_2{J831icqHVDqKtPohaLPR>BXBc(4FVh}+5eaf#`PD)Aa#NLpND&hb|tA; z^$2~h9}J(6Aca^!{W%}d=FDAhZ2c-IgxoA&8f$(eO{Hk@{@x%6kklB?mUa}QRhc=! z7*&G3=(JC$9392LmB(hvsH5id8eN7RyVWl__m0pl@CIG!H6YXaVDYIBM1Q&X!(xrk z{hD8>TqAQB{(QU58*{DnGjvdg8OI1b@f(3h5ypQLKxzid&jJkOTOz^$wnacXRAwl~ zQ5*tpGF?}pN;pP2*dF>1<%OhzuI#W?!hjnw?xSh zijcmPPe%M_j>0J4(3Mqz#p~&4VAK00*d3{kBYi`ZZV{;p`YlM`l!P~{;axH}(Hp?S z3VeQk7T8%GX{vMiq18l?zm7`Cy>+YMgP=Th)d%fYqkt`1{IfdC%VA2;+aqhX`mzlA zrH?NOTxBd@4YjZ2U_3lT-e7*dvWZx$@k^uF*46DV1n86in}9mHd+-}dN+v@f#+6em zSxm|PvEt{DYQt|?__3a4;`+;n2zRr{JahWYLI`c6cl~N9K!tXD++4HmLLsQ{t$N%t zN12mduCeI$g9P(D-F_T^LfcNn%Ss)4lT9=N{u2hi&sAXZQ9B|=kv$xk hX|d)?m6vyq{|Dh{f?-c(*2T_?fYum mt1JTT=!m+wM& zWjW5yN{h{9KAC6R0auJdIuhAg#o#_DdVxK(AIPsnW?dGM$a;N?BJ=UO>3UXMthey^ zjuRuB>U}W&At8N8h}U#fum868tGs`008 !wSvY?@ji~^T{@@{htHK)gYBdg$`%pwm^au~V- z79-nQY0%dsqI*?6yw5!TqZ}c=DqyJ^ idk(y3+hWSu+D}mv)a&Y1p93?!9&Z3ul7TRqbr6X@86I@s} z7@&j+IZ`SDugHOd7r+PKyWe0sWyiSu&}$(xm(GG`O`{X%J3Z!W+KkobjupCxy16Cw z#VW1W0!~O`<8Kd`Y|4H&?5Qg5WL_~Ls0{jP6@EvB-^j@*oe8Ar1vH~H>t-*P%cz4$ z8_TMi-p*7R;6!pyq&J%sk~*tr>d<1mVRtCVdg6VV!Abv!ityI; un+upr496|LD)@M1hQqjQB7oi`mV3`Pvzq9-kUZ-}NBs>7} zoACmmn4p3U#;l4?O0%*OUBrx3P VWHq)h|p}jKH4OH^Z*wr zDK0ElC=pC>%opyA6H2!lsn9gAF9NgWNVGzVwEeYzZRGQ75OBAMC#l9V^3`1bn^| Lv@wzjFWeN1q%OzyPeR_zSmGAR4_JGj9kO+_UAP;x;37T1rBUrn@=g!@YBICJAt z&zV}3Z@XkT-H0XI7>F(@Kct|kDkh7tJk{C0va^-XPSbvCE7pjA@pMPY&)rsi-+Muo z!#9n~$6>l4Y59F|2P2u7!SRIvzJ_0EmN7o(L3T9Nkjy+7V*Gspla z++&Pxqw0!MakWxmzo4Lz$%<^G$R-UPF&2{JmdtR#zos;76;tbG!>?l11&R^ltcsNT z(u58RK{MoS)9WtGlZuScya6WF=!-;azl`sRJ)djmUR9$oX5`~S9y=cIC@hl{Ej;3P zgkPRsC6YBzTp6gxz6nk|ev}whjCMZWBwTHN(8zHML=>lL1Q>l3{!ZntmIYRRRsU9y zo+;3P4w0}Bg=fcsfNea`4rq9ZY>;At60d31vxQDy2h0NTJKLZ0Z(5yzLdPCljM}&- zKZNX_e~5}%5&ViK;_~i0!O5p&bTKS+9dC2)-2sX;0=~0|$p=iXBr{pob4KPxsUlos zs$2*M0|Qt$FYIjlpqz58 EF ?dlVGL>l)0fF z^E?&zqqVSPT8*Bp>bALhs0syJ7WuqH{yIA8-QUnq71xp(G^v5hjYf!?tA1mU$G1*- zQm5*dkxbd0mU`h|qH8N2A2$rLoRU1g+pe@Z7_zLR8!Sofh6K``QVxH{u^9uI(PCmE zyj5UE+OxBzU?TAmcT+*jKh8y|JRXARf70s0+Miyn-pdEUaW!C(3fl UDD_6n(H_lT(CVreOy5nl;A5JC@5#OH8b-ceA3%=Q% zMIi;}B_U9x+zA5F1&jDiYT0T|EAXob9h%_-4EWM*DuFS)_vmET-|g#-#;)v=L1gUo zH{Z%48nl<0{MP+b7h@ f_;YnfbiuY#qAOCa9sr#t-2xr|^V?mKN zQ%HAg%494GbV&c2cBDq*L%DBm2+sU4g~mv33u}B=930IB9txWi*B7OoUe6B8pjU8B zp4caO;~-21Aack;NIuiGABt1SFz63v0<$g%reV(}+qC_NhZwk)C+o!r;_888_kEVB zY1J>#be<9W)KGG`+UjvJlf?&0VO-6)Vf8#fe~g`^38VZx1Njl;+P09Fe5p{j&i1nm zFa&~@d9_BG+%uYc7bUi?wwanX4q6^P41EOKhl=kxw(xQNRV5%?RD7>KVB6+T#R`j% z%H@_nxlG1W7s}Nxm;X{UisQ!c8NfL7e_s(=U&*h4c}kKUbrV~pw$~=S0qJQLWR~Pg z+L%WJHE5BMY>qIQ-qQDPY7Cfe$BzL7#*wSET4RIJdAQiirC`8dO(F0{Gnz9dP4ACp z;IUo>Q&zoI{dv e#21J>& X9tMjm@K-Wm%=KlYvw8C!Twnw2ihxVYJeHMY0~i>_ zCniur%dMqB^voK3RlikH_d)`L7kOEr(@cwuhv_p4p!$@84+@hKW>8HuE9&DByAl__ z8j6W-Yd6wJh^J_bj-S&JuKkj#C9?Qx17JsS%r@4tCml2>J9(eW@eo%wRslZW+<-u! zh=_<~rTrPxCkJ7-0CcRNE(yaTwqS&eX~^ol>5F85LZzntbnQ`$KZKRS!uiW-;2IRO zPL=Ooe9VlvjhLypAGlT+*^87$@teoeRR5z2#O7uqowA?)`DT|8Z=$0KaJ-gwxV=W{ z8y&8mcAWzwe*9up1s!qh`Vf6aTR{4(w!v$B6q5RCy0i?@SMg#wt-YV#1E(+rB0cUD z(+_*tf!GIMmAZfR-j10dukh?rA4UR5O?@ 3+y_R&5qd*Jg z3a3bWf*AIKVh96fB@?+_E3WJJ99Qqb+-t2vKd;*BFKARdqtX2sD^5BZwL`=1uc}SW zDBhd##Yyd9j*`BQYVN00mr7+SX)Jbnzp7TKLsFOj=gG~~*^E(JiW1j;+13x#r$u6+ z!Thc92MAeG8 bQ^#wJ^cr=q(#m;|Xhzt+JH{D3@%3wk|V}50{M(4jm+ouMLm& zlf