From 12f367e96eec7ae64c87f7d09a025f454567b58a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=97=B5=E5=AE=AA=E7=91=9E?= <9198107+min-xianrui@user.noreply.gitee.com> Date: Mon, 19 May 2025 18:26:04 +0800 Subject: [PATCH] `` --- .gitignore | 9 +- admin/pom.xml | 119 + admin/src/main/java/io/AdminApplication.java | 21 + .../java/io/common/annotation/DataFilter.java | 30 + .../io/common/annotation/LogOperation.java | 22 + .../io/common/aspect/DataFilterAspect.java | 90 + .../io/common/aspect/LogOperationAspect.java | 44 + .../io/common/config/MybatisPlusConfig.java | 34 + .../java/io/common/config/SwaggerConfig.java | 41 + .../common/exception/RenExceptionHandler.java | 55 + .../handler/FieldMetaObjectHandler.java | 49 + .../interceptor/DataFilterInterceptor.java | 82 + .../java/io/common/interceptor/DataScope.java | 27 + .../main/java/io/common/utils/ExcelUtils.java | 64 + .../modules/security/config/ShiroConfig.java | 84 + .../modules/security/config/WebMvcConfig.java | 67 + .../security/controller/LoginController.java | 95 + .../modules/security/dao/SysUserTokenDao.java | 23 + .../io/modules/security/dto/LoginDTO.java | 37 + .../security/entity/SysUserTokenEntity.java | 48 + .../modules/security/oauth2/Oauth2Filter.java | 96 + .../modules/security/oauth2/Oauth2Realm.java | 77 + .../modules/security/oauth2/Oauth2Token.java | 27 + .../security/oauth2/TokenGenerator.java | 45 + .../io/modules/security/password/BCrypt.java | 623 ++ .../password/BCryptPasswordEncoder.java | 73 + .../security/password/PasswordEncoder.java | 30 + .../security/password/PasswordUtils.java | 41 + .../security/service/CaptchaService.java | 28 + .../security/service/ShiroService.java | 37 + .../security/service/SysUserTokenService.java | 28 + .../service/impl/CaptchaServiceImpl.java | 62 + .../service/impl/ShiroServiceImpl.java | 67 + .../service/impl/SysUserTokenServiceImpl.java | 80 + .../modules/security/user/SecurityUser.java | 53 + .../io/modules/security/user/UserDetail.java | 35 + .../controller/ApplicationsController.java | 103 + .../controller/CertificatesController.java | 112 + .../sys/controller/IndexController.java | 20 + .../sys/controller/SysDeptController.java | 92 + .../sys/controller/SysDictDataController.java | 104 + .../sys/controller/SysDictTypeController.java | 112 + .../sys/controller/SysMenuController.java | 132 + .../sys/controller/SysParamsController.java | 120 + .../sys/controller/SysRoleController.java | 125 + .../sys/controller/SysUserController.java | 141 + .../sys/controller/UserController.java | 97 + .../java/io/modules/sys/dao/SysDeptDao.java | 35 + .../io/modules/sys/dao/SysDictDataDao.java | 24 + .../io/modules/sys/dao/SysDictTypeDao.java | 25 + .../java/io/modules/sys/dao/SysMenuDao.java | 54 + .../java/io/modules/sys/dao/SysParamsDao.java | 40 + .../java/io/modules/sys/dao/SysRoleDao.java | 18 + .../modules/sys/dao/SysRoleDataScopeDao.java | 35 + .../io/modules/sys/dao/SysRoleMenuDao.java | 35 + .../io/modules/sys/dao/SysRoleUserDao.java | 39 + .../java/io/modules/sys/dao/SysUserDao.java | 38 + .../java/io/modules/sys/dto/PasswordDTO.java | 30 + .../java/io/modules/sys/dto/SysDeptDTO.java | 76 + .../io/modules/sys/dto/SysDictDataDTO.java | 59 + .../io/modules/sys/dto/SysDictTypeDTO.java | 56 + .../java/io/modules/sys/dto/SysMenuDTO.java | 91 + .../java/io/modules/sys/dto/SysParamsDTO.java | 53 + .../java/io/modules/sys/dto/SysRoleDTO.java | 52 + .../java/io/modules/sys/dto/SysUserDTO.java | 86 + .../java/io/modules/sys/dto/SystemDTO.java | 42 + .../java/io/modules/sys/entity/DictData.java | 19 + .../java/io/modules/sys/entity/DictType.java | 20 + .../io/modules/sys/entity/SysDeptEntity.java | 55 + .../modules/sys/entity/SysDictDataEntity.java | 54 + .../modules/sys/entity/SysDictTypeEntity.java | 50 + .../io/modules/sys/entity/SysMenuEntity.java | 69 + .../modules/sys/entity/SysParamsEntity.java | 53 + .../sys/entity/SysRoleDataScopeEntity.java | 31 + .../io/modules/sys/entity/SysRoleEntity.java | 48 + .../modules/sys/entity/SysRoleMenuEntity.java | 30 + .../modules/sys/entity/SysRoleUserEntity.java | 31 + .../io/modules/sys/entity/SysUserEntity.java | 80 + .../io/modules/sys/enums/MenuTypeEnum.java | 30 + .../io/modules/sys/enums/SuperAdminEnum.java | 24 + .../io/modules/sys/enums/UserStatusEnum.java | 24 + .../io/modules/sys/excel/SysParamsExcel.java | 23 + .../io/modules/sys/excel/SysUserExcel.java | 41 + .../sys/excel/converter/GenderConverter.java | 45 + .../sys/excel/converter/StatusConverter.java | 30 + .../modules/sys/service/SysDeptService.java | 34 + .../sys/service/SysDictDataService.java | 29 + .../sys/service/SysDictTypeService.java | 36 + .../modules/sys/service/SysMenuService.java | 48 + .../modules/sys/service/SysParamsService.java | 50 + .../sys/service/SysRoleDataScopeService.java | 35 + .../sys/service/SysRoleMenuService.java | 41 + .../modules/sys/service/SysRoleService.java | 34 + .../sys/service/SysRoleUserService.java | 42 + .../modules/sys/service/SysUserService.java | 52 + .../sys/service/impl/SysDeptServiceImpl.java | 160 + .../service/impl/SysDictDataServiceImpl.java | 82 + .../service/impl/SysDictTypeServiceImpl.java | 101 + .../sys/service/impl/SysMenuServiceImpl.java | 102 + .../service/impl/SysParamsServiceImpl.java | 123 + .../impl/SysRoleDataScopeServiceImpl.java | 56 + .../service/impl/SysRoleMenuServiceImpl.java | 63 + .../sys/service/impl/SysRoleServiceImpl.java | 126 + .../service/impl/SysRoleUserServiceImpl.java | 59 + .../sys/service/impl/SysUserServiceImpl.java | 151 + admin/src/main/resources/application-dev.yml | 45 + admin/src/main/resources/application.yml | 57 + admin/src/main/resources/logback-spring.xml | 21 + .../resources/mapper/job/ScheduleJobDao.xml | 14 + .../mapper/job/ScheduleJobLogDao.xml | 7 + .../resources/mapper/log/SysLogErrorDao.xml | 6 + .../resources/mapper/log/SysLogLoginDao.xml | 6 + .../mapper/log/SysLogOperationDao.xml | 6 + .../main/resources/mapper/oss/SysOssDao.xml | 7 + .../resources/mapper/sys/CertificatesDao.xml | 20 + .../main/resources/mapper/sys/SysDeptDao.xml | 32 + .../resources/mapper/sys/SysDictDataDao.xml | 10 + .../resources/mapper/sys/SysDictTypeDao.xml | 10 + .../main/resources/mapper/sys/SysMenuDao.xml | 46 + .../resources/mapper/sys/SysParamsDao.xml | 23 + .../main/resources/mapper/sys/SysRoleDao.xml | 7 + .../mapper/sys/SysRoleDataScopeDao.xml | 22 + .../resources/mapper/sys/SysRoleUserDao.xml | 24 + .../main/resources/mapper/sys/SysUserDao.xml | 50 + .../resources/mapper/sys/SysUserTokenDao.xml | 17 + common/pom.xml | 16 + .../java/io/common/constant/Constant.java | 119 + .../java/io/common/convert/DateConverter.java | 70 + .../src/main/java/io/common/dao/BaseDao.java | 10 + .../java/io/common/entity/BaseEntity.java | 33 + .../java/io/common/exception/ErrorCode.java | 14 + .../io/common/exception/ExceptionUtils.java | 43 + .../io/common/exception/RenException.java | 46 + .../main/java/io/common/page/PageData.java | 32 + .../java/io/common/service/BaseService.java | 106 + .../java/io/common/service/CrudService.java | 25 + .../common/service/impl/BaseServiceImpl.java | 213 + .../common/service/impl/CrudServiceImpl.java | 74 + .../java/io/common/utils/ConvertUtils.java | 69 + .../main/java/io/common/utils/DateUtils.java | 55 + .../io/common/utils/HttpContextUtils.java | 55 + .../main/java/io/common/utils/IpUtils.java | 50 + .../main/java/io/common/utils/JsonUtils.java | 68 + .../src/main/java/io/common/utils/Result.java | 76 + .../io/common/utils/SpringContextUtils.java | 47 + .../main/java/io/common/utils/TreeNode.java | 26 + .../main/java/io/common/utils/TreeUtils.java | 72 + .../java/io/common/validator/AssertUtils.java | 90 + .../io/common/validator/ValidatorUtils.java | 47 + .../io/common/validator/group/AddGroup.java | 8 + .../common/validator/group/DefaultGroup.java | 11 + .../java/io/common/validator/group/Group.java | 15 + .../common/validator/group/UpdateGroup.java | 11 + .../main/java/io/common/xss/XssFilter.java | 29 + .../xss/XssHttpServletRequestWrapper.java | 143 + .../src/main/java/io/common/xss/XssUtils.java | 67 + .../io/modules/item/dao/ApplicationsDao.java | 13 + .../io/modules/item/dao/CertificatesDao.java | 15 + .../java/io/modules/item/dao/UserDao.java | 18 + .../io/modules/item/dto/ApplicationsDTO.java | 28 + .../java/io/modules/item/dto/CartDTO.java | 42 + .../io/modules/item/dto/CertificatesDTO.java | 44 + .../java/io/modules/item/dto/LoginDTO.java | 22 + .../java/io/modules/item/dto/UserDTO.java | 40 + .../io/modules/item/entity/Applications.java | 28 + .../item/entity/CertificatesEntity.java | 37 + .../io/modules/item/entity/DictEntity.java | 30 + .../modules/item/entity/FrontUserEntity.java | 37 + .../io/modules/item/entity/SetResponse.java | 31 + .../io/modules/item/entity/UserEntity.java | 50 + .../item/service/ApplicationsService.java | 14 + .../item/service/CertificatesService.java | 16 + .../item/service/FrontUserService.java | 18 + .../item/service/SetRequestService.java | 20 + .../service/impl/ApplicationsServiceImpl.java | 32 + .../service/impl/CertificatesServiceImpl.java | 47 + .../service/impl/FrontUserServiceImpl.java | 31 + db/certify.sql | 1528 ++++ front/pom.xml | 38 + front/src/main/java/io/FrontApplication.java | 20 + front/src/main/java/io/annotation/Login.java | 15 + .../main/java/io/annotation/LoginUser.java | 19 + .../src/main/java/io/config/FilterConfig.java | 27 + .../java/io/config/MybatisPlusConfig.java | 36 + .../main/java/io/config/ResourceConfig.java | 19 + .../main/java/io/config/SwaggerConfig.java | 41 + .../src/main/java/io/config/WebMvcConfig.java | 80 + .../io/controller/ApplicationsController.java | 127 + .../io/controller/CertificatesController.java | 125 + .../java/io/controller/UploadController.java | 39 + .../java/io/controller/UserController.java | 114 + front/src/main/java/io/dao/TokenDao.java | 19 + front/src/main/java/io/dto/RegisterDTO.java | 35 + front/src/main/java/io/entity/Picture.java | 10 + .../src/main/java/io/entity/TokenEntity.java | 37 + .../io/exception/RenExceptionHandler.java | 42 + .../interceptor/AuthorizationInterceptor.java | 57 + ...oginUserHandlerMethodArgumentResolver.java | 45 + .../main/java/io/service/TokenService.java | 30 + .../src/main/java/io/service/UserService.java | 28 + .../io/service/impl/TokenServiceImpl.java | 92 + .../java/io/service/impl/UserServiceImpl.java | 50 + front/src/main/resources/application-dev.yml | 39 + front/src/main/resources/application.yml | 62 + front/src/main/resources/logback-spring.xml | 21 + front/src/main/resources/mapper/TokenDao.xml | 14 + front/src/main/resources/mapper/UserDao.xml | 13 + .../17e86dfd-1a78-4d9c-bb31-9e920a561efa.jpg | Bin 0 -> 63648 bytes pom.xml | 142 + ui/.devcontainer/devcontainer.json | 44 + ui/.editorconfig | 23 + ui/.env | 30 + ui/.eslintignore | 4 + ui/.gitignore | 12 + ui/.npmrc | 1 + ui/.nvmrc | 1 + ui/.prettierignore | 3 + ui/.prettierrc.json | 5 + ui/.vite/deps/_metadata.json | 8 + ui/.vite/deps/package.json | 3 + ui/index.html | 13 + ui/locales/English/common.yml | 10 + ui/locales/English/test.yml | 3 + ui/locales/简体中文/common.yml | 10 + ui/locales/简体中文/test.yml | 3 + ui/netlify.toml | 4 + ui/package.json | 112 + ui/pnpm-lock.yaml | 7323 +++++++++++++++++ ui/presets/autoprefixer.ts | 33 + ui/presets/index.ts | 234 + ui/presets/plugins/alias.ts | 27 + ui/presets/plugins/index.ts | 6 + ui/presets/plugins/layers.ts | 41 + ui/presets/plugins/lightningcss.ts | 62 + ui/presets/plugins/optimize.ts | 19 + ui/presets/plugins/restart.ts | 30 + ui/presets/plugins/warmup.ts | 21 + ui/presets/shared/detect.ts | 76 + ui/presets/shared/mock.ts | 89 + ui/presets/shared/path.ts | 15 + ui/presets/types/vite.d.ts | 17 + ui/public/a1.png | Bin 0 -> 1711 bytes .../ec13203e-20ee-4bb3-ba23-f0b6f93d3760.jpg | Bin 0 -> 373198 bytes ui/public/icoimg.png | Bin 0 -> 2287 bytes .../login/e36341619bf8f04dcbdc6b01105a85a.png | Bin 0 -> 349861 bytes ui/public/loginimg.jpg | Bin 0 -> 217431 bytes ui/public/logo.png | Bin 0 -> 2287 bytes ui/public/notFound/33.svg | 1 + ui/renovate.json | 3 + ui/scripts/create.cjs | 76 + ui/scripts/deps-fresh.cjs | 36 + ui/scripts/release.cjs | 65 + ui/scripts/remove.cjs | 75 + ui/scripts/safe-init.cjs | 113 + ui/scripts/shared/base.cjs | 41 + ui/scripts/template/api.hbs | 2 + ui/scripts/template/component.hbs | 11 + ui/scripts/template/composable.hbs | 5 + ui/scripts/template/layout.hbs | 4 + ui/scripts/template/module.hbs | 6 + ui/scripts/template/page.hbs | 17 + ui/scripts/template/store.hbs | 9 + ui/src/App.vue | 9 + ui/src/api/itemApi.ts | 35 + ui/src/api/slidesApi.ts | 7 + ui/src/api/user/adminUserApi.ts | 50 + ui/src/api/user/adminUserUtils.ts | 14 + ui/src/api/user/frontUserApi.ts | 32 + ui/src/components/Heads.vue | 149 + ui/src/components/ImageUpload.vue | 88 + ui/src/components/nav/Navigation.vue | 96 + ui/src/composables/adminRequest.ts | 53 + ui/src/composables/env.ts | 26 + ui/src/composables/frontRequest.ts | 78 + ui/src/composables/path.ts | 7 + ui/src/composables/toast.ts | 3 + ui/src/composables/useLanguage.ts | 12 + ui/src/composables/useTyped.ts | 14 + ui/src/composables/useVisits.ts | 25 + ui/src/layouts/admin.vue | 164 + ui/src/layouts/default.vue | 50 + ui/src/layouts/front.vue | 34 + ui/src/layouts/frontUserInfo.vue | 60 + ui/src/layouts/notFound.vue | 3 + ui/src/main.ts | 19 + ui/src/pages/[...notFound].vue | 58 + ui/src/pages/admin/adminuser.vue | 292 + ui/src/pages/admin/block.vue | 192 + ui/src/pages/admin/certificates.vue | 405 + ui/src/pages/admin/index.vue | 75 + ui/src/pages/admin/log.vue | 158 + ui/src/pages/audit/index.vue | 421 + ui/src/pages/front/index.vue | 33 + ui/src/pages/front/info/[id].vue | 41 + ui/src/pages/front/list/index.vue | 33 + ui/src/pages/index.vue | 341 + ui/src/pages/load/index.vue | 432 + ui/src/pages/log/index.vue | 451 + ui/src/pages/login.vue | 189 + ui/src/pages/look/index.vue | 446 + ui/src/pages/register.vue | 166 + ui/src/pages/user/index.vue | 93 + ui/src/plugins/mock.ts | 21 + ui/src/plugins/nprogress.ts | 9 + ui/src/plugins/pinia.ts | 7 + ui/src/plugins/router.ts | 39 + ui/src/plugins/title.ts | 17 + ui/src/stores/navStore.ts | 16 + ui/src/stores/userStore.ts | 20 + ui/src/styles/main.css | 51 + ui/src/utils/utils.ts | 61 + ui/tsconfig.json | 32 + ui/uno.config.ts | 24 + ui/vite.config.ts | 6 + 314 files changed, 26317 insertions(+), 3 deletions(-) create mode 100644 admin/pom.xml create mode 100644 admin/src/main/java/io/AdminApplication.java create mode 100644 admin/src/main/java/io/common/annotation/DataFilter.java create mode 100644 admin/src/main/java/io/common/annotation/LogOperation.java create mode 100644 admin/src/main/java/io/common/aspect/DataFilterAspect.java create mode 100644 admin/src/main/java/io/common/aspect/LogOperationAspect.java create mode 100644 admin/src/main/java/io/common/config/MybatisPlusConfig.java create mode 100644 admin/src/main/java/io/common/config/SwaggerConfig.java create mode 100644 admin/src/main/java/io/common/exception/RenExceptionHandler.java create mode 100644 admin/src/main/java/io/common/handler/FieldMetaObjectHandler.java create mode 100644 admin/src/main/java/io/common/interceptor/DataFilterInterceptor.java create mode 100644 admin/src/main/java/io/common/interceptor/DataScope.java create mode 100644 admin/src/main/java/io/common/utils/ExcelUtils.java create mode 100644 admin/src/main/java/io/modules/security/config/ShiroConfig.java create mode 100644 admin/src/main/java/io/modules/security/config/WebMvcConfig.java create mode 100644 admin/src/main/java/io/modules/security/controller/LoginController.java create mode 100644 admin/src/main/java/io/modules/security/dao/SysUserTokenDao.java create mode 100644 admin/src/main/java/io/modules/security/dto/LoginDTO.java create mode 100644 admin/src/main/java/io/modules/security/entity/SysUserTokenEntity.java create mode 100644 admin/src/main/java/io/modules/security/oauth2/Oauth2Filter.java create mode 100644 admin/src/main/java/io/modules/security/oauth2/Oauth2Realm.java create mode 100644 admin/src/main/java/io/modules/security/oauth2/Oauth2Token.java create mode 100644 admin/src/main/java/io/modules/security/oauth2/TokenGenerator.java create mode 100644 admin/src/main/java/io/modules/security/password/BCrypt.java create mode 100644 admin/src/main/java/io/modules/security/password/BCryptPasswordEncoder.java create mode 100644 admin/src/main/java/io/modules/security/password/PasswordEncoder.java create mode 100644 admin/src/main/java/io/modules/security/password/PasswordUtils.java create mode 100644 admin/src/main/java/io/modules/security/service/CaptchaService.java create mode 100644 admin/src/main/java/io/modules/security/service/ShiroService.java create mode 100644 admin/src/main/java/io/modules/security/service/SysUserTokenService.java create mode 100644 admin/src/main/java/io/modules/security/service/impl/CaptchaServiceImpl.java create mode 100644 admin/src/main/java/io/modules/security/service/impl/ShiroServiceImpl.java create mode 100644 admin/src/main/java/io/modules/security/service/impl/SysUserTokenServiceImpl.java create mode 100644 admin/src/main/java/io/modules/security/user/SecurityUser.java create mode 100644 admin/src/main/java/io/modules/security/user/UserDetail.java create mode 100644 admin/src/main/java/io/modules/sys/controller/ApplicationsController.java create mode 100644 admin/src/main/java/io/modules/sys/controller/CertificatesController.java create mode 100644 admin/src/main/java/io/modules/sys/controller/IndexController.java create mode 100644 admin/src/main/java/io/modules/sys/controller/SysDeptController.java create mode 100644 admin/src/main/java/io/modules/sys/controller/SysDictDataController.java create mode 100644 admin/src/main/java/io/modules/sys/controller/SysDictTypeController.java create mode 100644 admin/src/main/java/io/modules/sys/controller/SysMenuController.java create mode 100644 admin/src/main/java/io/modules/sys/controller/SysParamsController.java create mode 100644 admin/src/main/java/io/modules/sys/controller/SysRoleController.java create mode 100644 admin/src/main/java/io/modules/sys/controller/SysUserController.java create mode 100644 admin/src/main/java/io/modules/sys/controller/UserController.java create mode 100644 admin/src/main/java/io/modules/sys/dao/SysDeptDao.java create mode 100644 admin/src/main/java/io/modules/sys/dao/SysDictDataDao.java create mode 100644 admin/src/main/java/io/modules/sys/dao/SysDictTypeDao.java create mode 100644 admin/src/main/java/io/modules/sys/dao/SysMenuDao.java create mode 100644 admin/src/main/java/io/modules/sys/dao/SysParamsDao.java create mode 100644 admin/src/main/java/io/modules/sys/dao/SysRoleDao.java create mode 100644 admin/src/main/java/io/modules/sys/dao/SysRoleDataScopeDao.java create mode 100644 admin/src/main/java/io/modules/sys/dao/SysRoleMenuDao.java create mode 100644 admin/src/main/java/io/modules/sys/dao/SysRoleUserDao.java create mode 100644 admin/src/main/java/io/modules/sys/dao/SysUserDao.java create mode 100644 admin/src/main/java/io/modules/sys/dto/PasswordDTO.java create mode 100644 admin/src/main/java/io/modules/sys/dto/SysDeptDTO.java create mode 100644 admin/src/main/java/io/modules/sys/dto/SysDictDataDTO.java create mode 100644 admin/src/main/java/io/modules/sys/dto/SysDictTypeDTO.java create mode 100644 admin/src/main/java/io/modules/sys/dto/SysMenuDTO.java create mode 100644 admin/src/main/java/io/modules/sys/dto/SysParamsDTO.java create mode 100644 admin/src/main/java/io/modules/sys/dto/SysRoleDTO.java create mode 100644 admin/src/main/java/io/modules/sys/dto/SysUserDTO.java create mode 100644 admin/src/main/java/io/modules/sys/dto/SystemDTO.java create mode 100644 admin/src/main/java/io/modules/sys/entity/DictData.java create mode 100644 admin/src/main/java/io/modules/sys/entity/DictType.java create mode 100644 admin/src/main/java/io/modules/sys/entity/SysDeptEntity.java create mode 100644 admin/src/main/java/io/modules/sys/entity/SysDictDataEntity.java create mode 100644 admin/src/main/java/io/modules/sys/entity/SysDictTypeEntity.java create mode 100644 admin/src/main/java/io/modules/sys/entity/SysMenuEntity.java create mode 100644 admin/src/main/java/io/modules/sys/entity/SysParamsEntity.java create mode 100644 admin/src/main/java/io/modules/sys/entity/SysRoleDataScopeEntity.java create mode 100644 admin/src/main/java/io/modules/sys/entity/SysRoleEntity.java create mode 100644 admin/src/main/java/io/modules/sys/entity/SysRoleMenuEntity.java create mode 100644 admin/src/main/java/io/modules/sys/entity/SysRoleUserEntity.java create mode 100644 admin/src/main/java/io/modules/sys/entity/SysUserEntity.java create mode 100644 admin/src/main/java/io/modules/sys/enums/MenuTypeEnum.java create mode 100644 admin/src/main/java/io/modules/sys/enums/SuperAdminEnum.java create mode 100644 admin/src/main/java/io/modules/sys/enums/UserStatusEnum.java create mode 100644 admin/src/main/java/io/modules/sys/excel/SysParamsExcel.java create mode 100644 admin/src/main/java/io/modules/sys/excel/SysUserExcel.java create mode 100644 admin/src/main/java/io/modules/sys/excel/converter/GenderConverter.java create mode 100644 admin/src/main/java/io/modules/sys/excel/converter/StatusConverter.java create mode 100644 admin/src/main/java/io/modules/sys/service/SysDeptService.java create mode 100644 admin/src/main/java/io/modules/sys/service/SysDictDataService.java create mode 100644 admin/src/main/java/io/modules/sys/service/SysDictTypeService.java create mode 100644 admin/src/main/java/io/modules/sys/service/SysMenuService.java create mode 100644 admin/src/main/java/io/modules/sys/service/SysParamsService.java create mode 100644 admin/src/main/java/io/modules/sys/service/SysRoleDataScopeService.java create mode 100644 admin/src/main/java/io/modules/sys/service/SysRoleMenuService.java create mode 100644 admin/src/main/java/io/modules/sys/service/SysRoleService.java create mode 100644 admin/src/main/java/io/modules/sys/service/SysRoleUserService.java create mode 100644 admin/src/main/java/io/modules/sys/service/SysUserService.java create mode 100644 admin/src/main/java/io/modules/sys/service/impl/SysDeptServiceImpl.java create mode 100644 admin/src/main/java/io/modules/sys/service/impl/SysDictDataServiceImpl.java create mode 100644 admin/src/main/java/io/modules/sys/service/impl/SysDictTypeServiceImpl.java create mode 100644 admin/src/main/java/io/modules/sys/service/impl/SysMenuServiceImpl.java create mode 100644 admin/src/main/java/io/modules/sys/service/impl/SysParamsServiceImpl.java create mode 100644 admin/src/main/java/io/modules/sys/service/impl/SysRoleDataScopeServiceImpl.java create mode 100644 admin/src/main/java/io/modules/sys/service/impl/SysRoleMenuServiceImpl.java create mode 100644 admin/src/main/java/io/modules/sys/service/impl/SysRoleServiceImpl.java create mode 100644 admin/src/main/java/io/modules/sys/service/impl/SysRoleUserServiceImpl.java create mode 100644 admin/src/main/java/io/modules/sys/service/impl/SysUserServiceImpl.java create mode 100644 admin/src/main/resources/application-dev.yml create mode 100644 admin/src/main/resources/application.yml create mode 100644 admin/src/main/resources/logback-spring.xml create mode 100644 admin/src/main/resources/mapper/job/ScheduleJobDao.xml create mode 100644 admin/src/main/resources/mapper/job/ScheduleJobLogDao.xml create mode 100644 admin/src/main/resources/mapper/log/SysLogErrorDao.xml create mode 100644 admin/src/main/resources/mapper/log/SysLogLoginDao.xml create mode 100644 admin/src/main/resources/mapper/log/SysLogOperationDao.xml create mode 100644 admin/src/main/resources/mapper/oss/SysOssDao.xml create mode 100644 admin/src/main/resources/mapper/sys/CertificatesDao.xml create mode 100644 admin/src/main/resources/mapper/sys/SysDeptDao.xml create mode 100644 admin/src/main/resources/mapper/sys/SysDictDataDao.xml create mode 100644 admin/src/main/resources/mapper/sys/SysDictTypeDao.xml create mode 100644 admin/src/main/resources/mapper/sys/SysMenuDao.xml create mode 100644 admin/src/main/resources/mapper/sys/SysParamsDao.xml create mode 100644 admin/src/main/resources/mapper/sys/SysRoleDao.xml create mode 100644 admin/src/main/resources/mapper/sys/SysRoleDataScopeDao.xml create mode 100644 admin/src/main/resources/mapper/sys/SysRoleUserDao.xml create mode 100644 admin/src/main/resources/mapper/sys/SysUserDao.xml create mode 100644 admin/src/main/resources/mapper/sys/SysUserTokenDao.xml create mode 100644 common/pom.xml create mode 100644 common/src/main/java/io/common/constant/Constant.java create mode 100644 common/src/main/java/io/common/convert/DateConverter.java create mode 100644 common/src/main/java/io/common/dao/BaseDao.java create mode 100644 common/src/main/java/io/common/entity/BaseEntity.java create mode 100644 common/src/main/java/io/common/exception/ErrorCode.java create mode 100644 common/src/main/java/io/common/exception/ExceptionUtils.java create mode 100644 common/src/main/java/io/common/exception/RenException.java create mode 100644 common/src/main/java/io/common/page/PageData.java create mode 100644 common/src/main/java/io/common/service/BaseService.java create mode 100644 common/src/main/java/io/common/service/CrudService.java create mode 100644 common/src/main/java/io/common/service/impl/BaseServiceImpl.java create mode 100644 common/src/main/java/io/common/service/impl/CrudServiceImpl.java create mode 100644 common/src/main/java/io/common/utils/ConvertUtils.java create mode 100644 common/src/main/java/io/common/utils/DateUtils.java create mode 100644 common/src/main/java/io/common/utils/HttpContextUtils.java create mode 100644 common/src/main/java/io/common/utils/IpUtils.java create mode 100644 common/src/main/java/io/common/utils/JsonUtils.java create mode 100644 common/src/main/java/io/common/utils/Result.java create mode 100644 common/src/main/java/io/common/utils/SpringContextUtils.java create mode 100644 common/src/main/java/io/common/utils/TreeNode.java create mode 100644 common/src/main/java/io/common/utils/TreeUtils.java create mode 100644 common/src/main/java/io/common/validator/AssertUtils.java create mode 100644 common/src/main/java/io/common/validator/ValidatorUtils.java create mode 100644 common/src/main/java/io/common/validator/group/AddGroup.java create mode 100644 common/src/main/java/io/common/validator/group/DefaultGroup.java create mode 100644 common/src/main/java/io/common/validator/group/Group.java create mode 100644 common/src/main/java/io/common/validator/group/UpdateGroup.java create mode 100644 common/src/main/java/io/common/xss/XssFilter.java create mode 100644 common/src/main/java/io/common/xss/XssHttpServletRequestWrapper.java create mode 100644 common/src/main/java/io/common/xss/XssUtils.java create mode 100644 common/src/main/java/io/modules/item/dao/ApplicationsDao.java create mode 100644 common/src/main/java/io/modules/item/dao/CertificatesDao.java create mode 100644 common/src/main/java/io/modules/item/dao/UserDao.java create mode 100644 common/src/main/java/io/modules/item/dto/ApplicationsDTO.java create mode 100644 common/src/main/java/io/modules/item/dto/CartDTO.java create mode 100644 common/src/main/java/io/modules/item/dto/CertificatesDTO.java create mode 100644 common/src/main/java/io/modules/item/dto/LoginDTO.java create mode 100644 common/src/main/java/io/modules/item/dto/UserDTO.java create mode 100644 common/src/main/java/io/modules/item/entity/Applications.java create mode 100644 common/src/main/java/io/modules/item/entity/CertificatesEntity.java create mode 100644 common/src/main/java/io/modules/item/entity/DictEntity.java create mode 100644 common/src/main/java/io/modules/item/entity/FrontUserEntity.java create mode 100644 common/src/main/java/io/modules/item/entity/SetResponse.java create mode 100644 common/src/main/java/io/modules/item/entity/UserEntity.java create mode 100644 common/src/main/java/io/modules/item/service/ApplicationsService.java create mode 100644 common/src/main/java/io/modules/item/service/CertificatesService.java create mode 100644 common/src/main/java/io/modules/item/service/FrontUserService.java create mode 100644 common/src/main/java/io/modules/item/service/SetRequestService.java create mode 100644 common/src/main/java/io/modules/item/service/impl/ApplicationsServiceImpl.java create mode 100644 common/src/main/java/io/modules/item/service/impl/CertificatesServiceImpl.java create mode 100644 common/src/main/java/io/modules/item/service/impl/FrontUserServiceImpl.java create mode 100644 db/certify.sql create mode 100644 front/pom.xml create mode 100644 front/src/main/java/io/FrontApplication.java create mode 100644 front/src/main/java/io/annotation/Login.java create mode 100644 front/src/main/java/io/annotation/LoginUser.java create mode 100644 front/src/main/java/io/config/FilterConfig.java create mode 100644 front/src/main/java/io/config/MybatisPlusConfig.java create mode 100644 front/src/main/java/io/config/ResourceConfig.java create mode 100644 front/src/main/java/io/config/SwaggerConfig.java create mode 100644 front/src/main/java/io/config/WebMvcConfig.java create mode 100644 front/src/main/java/io/controller/ApplicationsController.java create mode 100644 front/src/main/java/io/controller/CertificatesController.java create mode 100644 front/src/main/java/io/controller/UploadController.java create mode 100644 front/src/main/java/io/controller/UserController.java create mode 100644 front/src/main/java/io/dao/TokenDao.java create mode 100644 front/src/main/java/io/dto/RegisterDTO.java create mode 100644 front/src/main/java/io/entity/Picture.java create mode 100644 front/src/main/java/io/entity/TokenEntity.java create mode 100644 front/src/main/java/io/exception/RenExceptionHandler.java create mode 100644 front/src/main/java/io/interceptor/AuthorizationInterceptor.java create mode 100644 front/src/main/java/io/resolver/LoginUserHandlerMethodArgumentResolver.java create mode 100644 front/src/main/java/io/service/TokenService.java create mode 100644 front/src/main/java/io/service/UserService.java create mode 100644 front/src/main/java/io/service/impl/TokenServiceImpl.java create mode 100644 front/src/main/java/io/service/impl/UserServiceImpl.java create mode 100644 front/src/main/resources/application-dev.yml create mode 100644 front/src/main/resources/application.yml create mode 100644 front/src/main/resources/logback-spring.xml create mode 100644 front/src/main/resources/mapper/TokenDao.xml create mode 100644 front/src/main/resources/mapper/UserDao.xml create mode 100644 front/src/main/resources/static/17e86dfd-1a78-4d9c-bb31-9e920a561efa.jpg create mode 100644 pom.xml create mode 100644 ui/.devcontainer/devcontainer.json create mode 100644 ui/.editorconfig create mode 100644 ui/.env create mode 100644 ui/.eslintignore create mode 100644 ui/.gitignore create mode 100644 ui/.npmrc create mode 100644 ui/.nvmrc create mode 100644 ui/.prettierignore create mode 100644 ui/.prettierrc.json create mode 100644 ui/.vite/deps/_metadata.json create mode 100644 ui/.vite/deps/package.json create mode 100644 ui/index.html create mode 100644 ui/locales/English/common.yml create mode 100644 ui/locales/English/test.yml create mode 100644 ui/locales/简体中文/common.yml create mode 100644 ui/locales/简体中文/test.yml create mode 100644 ui/netlify.toml create mode 100644 ui/package.json create mode 100644 ui/pnpm-lock.yaml create mode 100644 ui/presets/autoprefixer.ts create mode 100644 ui/presets/index.ts create mode 100644 ui/presets/plugins/alias.ts create mode 100644 ui/presets/plugins/index.ts create mode 100644 ui/presets/plugins/layers.ts create mode 100644 ui/presets/plugins/lightningcss.ts create mode 100644 ui/presets/plugins/optimize.ts create mode 100644 ui/presets/plugins/restart.ts create mode 100644 ui/presets/plugins/warmup.ts create mode 100644 ui/presets/shared/detect.ts create mode 100644 ui/presets/shared/mock.ts create mode 100644 ui/presets/shared/path.ts create mode 100644 ui/presets/types/vite.d.ts create mode 100644 ui/public/a1.png create mode 100644 ui/public/ec13203e-20ee-4bb3-ba23-f0b6f93d3760.jpg create mode 100644 ui/public/icoimg.png create mode 100644 ui/public/login/e36341619bf8f04dcbdc6b01105a85a.png create mode 100644 ui/public/loginimg.jpg create mode 100644 ui/public/logo.png create mode 100644 ui/public/notFound/33.svg create mode 100644 ui/renovate.json create mode 100644 ui/scripts/create.cjs create mode 100644 ui/scripts/deps-fresh.cjs create mode 100644 ui/scripts/release.cjs create mode 100644 ui/scripts/remove.cjs create mode 100644 ui/scripts/safe-init.cjs create mode 100644 ui/scripts/shared/base.cjs create mode 100644 ui/scripts/template/api.hbs create mode 100644 ui/scripts/template/component.hbs create mode 100644 ui/scripts/template/composable.hbs create mode 100644 ui/scripts/template/layout.hbs create mode 100644 ui/scripts/template/module.hbs create mode 100644 ui/scripts/template/page.hbs create mode 100644 ui/scripts/template/store.hbs create mode 100644 ui/src/App.vue create mode 100644 ui/src/api/itemApi.ts create mode 100644 ui/src/api/slidesApi.ts create mode 100644 ui/src/api/user/adminUserApi.ts create mode 100644 ui/src/api/user/adminUserUtils.ts create mode 100644 ui/src/api/user/frontUserApi.ts create mode 100644 ui/src/components/Heads.vue create mode 100644 ui/src/components/ImageUpload.vue create mode 100644 ui/src/components/nav/Navigation.vue create mode 100644 ui/src/composables/adminRequest.ts create mode 100644 ui/src/composables/env.ts create mode 100644 ui/src/composables/frontRequest.ts create mode 100644 ui/src/composables/path.ts create mode 100644 ui/src/composables/toast.ts create mode 100644 ui/src/composables/useLanguage.ts create mode 100644 ui/src/composables/useTyped.ts create mode 100644 ui/src/composables/useVisits.ts create mode 100644 ui/src/layouts/admin.vue create mode 100644 ui/src/layouts/default.vue create mode 100644 ui/src/layouts/front.vue create mode 100644 ui/src/layouts/frontUserInfo.vue create mode 100644 ui/src/layouts/notFound.vue create mode 100644 ui/src/main.ts create mode 100644 ui/src/pages/[...notFound].vue create mode 100644 ui/src/pages/admin/adminuser.vue create mode 100644 ui/src/pages/admin/block.vue create mode 100644 ui/src/pages/admin/certificates.vue create mode 100644 ui/src/pages/admin/index.vue create mode 100644 ui/src/pages/admin/log.vue create mode 100644 ui/src/pages/audit/index.vue create mode 100644 ui/src/pages/front/index.vue create mode 100644 ui/src/pages/front/info/[id].vue create mode 100644 ui/src/pages/front/list/index.vue create mode 100644 ui/src/pages/index.vue create mode 100644 ui/src/pages/load/index.vue create mode 100644 ui/src/pages/log/index.vue create mode 100644 ui/src/pages/login.vue create mode 100644 ui/src/pages/look/index.vue create mode 100644 ui/src/pages/register.vue create mode 100644 ui/src/pages/user/index.vue create mode 100644 ui/src/plugins/mock.ts create mode 100644 ui/src/plugins/nprogress.ts create mode 100644 ui/src/plugins/pinia.ts create mode 100644 ui/src/plugins/router.ts create mode 100644 ui/src/plugins/title.ts create mode 100644 ui/src/stores/navStore.ts create mode 100644 ui/src/stores/userStore.ts create mode 100644 ui/src/styles/main.css create mode 100644 ui/src/utils/utils.ts create mode 100644 ui/tsconfig.json create mode 100644 ui/uno.config.ts create mode 100644 ui/vite.config.ts diff --git a/.gitignore b/.gitignore index 9154f4c..010ab86 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -# ---> Java # Compiled class file *.class @@ -10,17 +9,21 @@ # Mobile Tools for Java (J2ME) .mtj.tmp/ +target # Package Files # *.jar *.war -*.nar *.ear *.zip *.tar.gz *.rar +*.iml +.idea # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* -replay_pid* +.idea + +/upload/ \ No newline at end of file diff --git a/admin/pom.xml b/admin/pom.xml new file mode 100644 index 0000000..455cdb6 --- /dev/null +++ b/admin/pom.xml @@ -0,0 +1,119 @@ + + + io.renren + block-identity-auth + 5.4.0 + + 4.0.0 + admin + jar + admin + + + 2.3.2 + 1.12.0 + 1.6.2 + 3.2.1 + 7.2.27 + 2.8.3 + 3.2.2 + 5.4.4 + + + + + io.renren + common + 5.4.0 + + + org.apache.shiro + shiro-spring + jakarta + ${shiro.version} + + + + org.apache.shiro + shiro-core + + + org.apache.shiro + shiro-web + + + + + + org.apache.shiro + shiro-core + jakarta + ${shiro.version} + + + org.apache.shiro + shiro-web + jakarta + ${shiro.version} + + + org.apache.shiro + shiro-core + + + + + com.github.whvcse + easy-captcha + ${captcha.version} + + + com.alibaba + easyexcel + ${easyexcel.version} + + + com.qiniu + qiniu-java-sdk + ${qiniu.version} + + + com.aliyun.oss + aliyun-sdk-oss + ${aliyun.oss.version} + + + com.aliyun + aliyun-java-sdk-core + ${aliyun.core.version} + + + com.qcloud + cos_api + ${qcloud.cos.version} + + + org.slf4j + slf4j-log4j12 + + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + + diff --git a/admin/src/main/java/io/AdminApplication.java b/admin/src/main/java/io/AdminApplication.java new file mode 100644 index 0000000..8901e90 --- /dev/null +++ b/admin/src/main/java/io/AdminApplication.java @@ -0,0 +1,21 @@ +package io; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.context.annotation.ComponentScan; +@SpringBootApplication +@ComponentScan(basePackages = {"io.modules","io.modules","io.common"}) // 扫描多个包 +@MapperScan(basePackages = {"io.modules.**.dao","io.common.modules.**.dao"}) +public class AdminApplication extends SpringBootServletInitializer { + + public static void main(String[] args) { + SpringApplication.run(AdminApplication.class, args); + } + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(AdminApplication.class); + } +} diff --git a/admin/src/main/java/io/common/annotation/DataFilter.java b/admin/src/main/java/io/common/annotation/DataFilter.java new file mode 100644 index 0000000..070c132 --- /dev/null +++ b/admin/src/main/java/io/common/annotation/DataFilter.java @@ -0,0 +1,30 @@ + + +package io.common.annotation; + +import java.lang.annotation.*; + +/** + * 数据过滤注解 + * + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataFilter { + /** + * 表的别名 + */ + String tableAlias() default ""; + + /** + * 用户ID + */ + String userId() default "creator"; + + /** + * 部门ID + */ + String deptId() default "dept_id"; + +} diff --git a/admin/src/main/java/io/common/annotation/LogOperation.java b/admin/src/main/java/io/common/annotation/LogOperation.java new file mode 100644 index 0000000..4803613 --- /dev/null +++ b/admin/src/main/java/io/common/annotation/LogOperation.java @@ -0,0 +1,22 @@ + + +package io.common.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 操作日志注解 + * + + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface LogOperation { + + String value() default ""; +} diff --git a/admin/src/main/java/io/common/aspect/DataFilterAspect.java b/admin/src/main/java/io/common/aspect/DataFilterAspect.java new file mode 100644 index 0000000..5832ec7 --- /dev/null +++ b/admin/src/main/java/io/common/aspect/DataFilterAspect.java @@ -0,0 +1,90 @@ +package io.common.aspect; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.qiniu.util.StringUtils; +import io.common.annotation.DataFilter; +import io.common.interceptor.DataScope; +import io.common.constant.Constant; +import io.common.exception.ErrorCode; +import io.common.exception.RenException; +import io.modules.security.user.SecurityUser; +import io.modules.security.user.UserDetail; +import io.modules.sys.enums.SuperAdminEnum; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; +import java.util.List; +import java.util.Map; +/** + * 数据过滤,切面处理类 + * + */ +@Aspect +@Component +public class DataFilterAspect { + + @Pointcut("@annotation(io.common.annotation.DataFilter)") + public void dataFilterCut() { + + } + + @Before("dataFilterCut()") + public void dataFilter(JoinPoint point) { + Object params = point.getArgs()[0]; + if (params != null && params instanceof Map) { + UserDetail user = SecurityUser.getUser(); + + //如果是超级管理员,则不进行数据过滤 + if (user.getSuperAdmin() == SuperAdminEnum.YES.value()) { + return; + } + + try { + //否则进行数据过滤 + Map map = (Map) params; + String sqlFilter = getSqlFilter(user, point); + map.put(Constant.SQL_FILTER, new DataScope(sqlFilter)); + } catch (Exception e) { + + } + return; + } + throw new RenException("日期参数错误!"); + } + + /** + * 获取数据过滤的SQL + */ + private String getSqlFilter(UserDetail user, JoinPoint point) throws Exception { + MethodSignature signature = (MethodSignature) point.getSignature(); + Method method = point.getTarget().getClass().getDeclaredMethod(signature.getName(), signature.getParameterTypes()); + DataFilter dataFilter = method.getAnnotation(DataFilter.class); + + //获取表的别名 + String tableAlias = dataFilter.tableAlias(); + if (StrUtil.isNotBlank(tableAlias)) { + tableAlias += "."; + } + StringBuilder sqlFilter = new StringBuilder(); + sqlFilter.append(" ("); + //部门ID列表 + List deptIdList = user.getDeptIdList(); + if (CollUtil.isNotEmpty(deptIdList)) { + sqlFilter.append(tableAlias).append(dataFilter.deptId()); + + sqlFilter.append(" in(").append(StringUtils.join(deptIdList, ",")).append(")"); + } + //查询本人数据 + if (CollUtil.isNotEmpty(deptIdList)) { + sqlFilter.append(" or "); + } + sqlFilter.append(tableAlias).append(dataFilter.userId()).append("=").append(user.getId()); + sqlFilter.append(")"); + return sqlFilter.toString(); + } +} diff --git a/admin/src/main/java/io/common/aspect/LogOperationAspect.java b/admin/src/main/java/io/common/aspect/LogOperationAspect.java new file mode 100644 index 0000000..a942ca5 --- /dev/null +++ b/admin/src/main/java/io/common/aspect/LogOperationAspect.java @@ -0,0 +1,44 @@ +package io.common.aspect; + +import lombok.AllArgsConstructor; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; + + +/** + * 操作日志,切面处理类 + * + */ +@Aspect +@Component +@AllArgsConstructor +public class LogOperationAspect { + + @Pointcut("@annotation(io.common.annotation.LogOperation)") + public void logPointCut() { + } + @Around("logPointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable { + long beginTime = System.currentTimeMillis(); + try { + //执行方法 + Object result = point.proceed(); + + //执行时长(毫秒) + long time = System.currentTimeMillis() - beginTime; + + + return result; + } catch (Exception e) { + //执行时长(毫秒) + long time = System.currentTimeMillis() - beginTime; + + + throw e; + } + } + +} diff --git a/admin/src/main/java/io/common/config/MybatisPlusConfig.java b/admin/src/main/java/io/common/config/MybatisPlusConfig.java new file mode 100644 index 0000000..ba72124 --- /dev/null +++ b/admin/src/main/java/io/common/config/MybatisPlusConfig.java @@ -0,0 +1,34 @@ + + +package io.common.config; + +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import io.common.interceptor.DataFilterInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * mybatis-plus配置 + */ +@Configuration +public class MybatisPlusConfig { + + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); + // 数据权限 + mybatisPlusInterceptor.addInnerInterceptor(new DataFilterInterceptor()); + // 分页插件 + mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); + // 乐观锁 + mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); + // 防止全表更新与删除 + mybatisPlusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); + + return mybatisPlusInterceptor; + } + +} diff --git a/admin/src/main/java/io/common/config/SwaggerConfig.java b/admin/src/main/java/io/common/config/SwaggerConfig.java new file mode 100644 index 0000000..a008654 --- /dev/null +++ b/admin/src/main/java/io/common/config/SwaggerConfig.java @@ -0,0 +1,41 @@ +package io.common.config; + +import io.common.constant.Constant; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.ArrayList; +import java.util.List; + +/** + * Swagger配置 + * + */ +@Configuration +public class SwaggerConfig { + @Bean + public OpenAPI createRestApi() { + return new OpenAPI() + .info(apiInfo()) + .security(security()); + } + + private Info apiInfo() { + return new Info() + .title("系统") + .description("admin文档") + .version("5.x"); + } + + private List security() { + SecurityRequirement key = new SecurityRequirement(); + key.addList(Constant.TOKEN_HEADER, Constant.TOKEN_HEADER); + + List list = new ArrayList<>(); + list.add(key); + return list; + } +} diff --git a/admin/src/main/java/io/common/exception/RenExceptionHandler.java b/admin/src/main/java/io/common/exception/RenExceptionHandler.java new file mode 100644 index 0000000..566b0c6 --- /dev/null +++ b/admin/src/main/java/io/common/exception/RenExceptionHandler.java @@ -0,0 +1,55 @@ +package io.common.exception; + +import cn.hutool.core.map.MapUtil; +import io.common.utils.HttpContextUtils; +import io.common.utils.IpUtils; +import io.common.utils.JsonUtils; +import io.common.utils.Result; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.http.HttpHeaders; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import java.util.Map; + +/** + * 异常处理器 + */ +@Slf4j +@RestControllerAdvice +@AllArgsConstructor +public class RenExceptionHandler { + + + /** + * 处理自定义异常 + */ + @ExceptionHandler(RenException.class) + public Result handleRenException(RenException ex) { + System.out.println("自定义捕捉异常!"); + Result result = new Result(); + result.error(500, ex.getMsg()); + return result; + } + + @ExceptionHandler(DuplicateKeyException.class) + public Result handleDuplicateKeyException(DuplicateKeyException ex) { + Result result = new Result(); + result.error("数据库中已存在该记录!"); + return result; + } + + @ExceptionHandler(Exception.class) + public Result handleException(Exception ex) { + System.out.println("全局捕捉异常!"); + log.error(ex.getMessage(), ex); + + return new Result().error(ex.getMessage()); + } + + +} diff --git a/admin/src/main/java/io/common/handler/FieldMetaObjectHandler.java b/admin/src/main/java/io/common/handler/FieldMetaObjectHandler.java new file mode 100644 index 0000000..92de1e3 --- /dev/null +++ b/admin/src/main/java/io/common/handler/FieldMetaObjectHandler.java @@ -0,0 +1,49 @@ +package io.common.handler; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import io.modules.security.user.SecurityUser; +import io.modules.security.user.UserDetail; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * 公共字段,自动填充值 + * + */ +@Component +public class FieldMetaObjectHandler implements MetaObjectHandler { + private final static String CREATE_DATE = "createDate"; + private final static String CREATOR = "creator"; + private final static String UPDATE_DATE = "updateDate"; + private final static String UPDATER = "updater"; + private final static String DEPT_ID = "deptId"; + + @Override + public void insertFill(MetaObject metaObject) { + UserDetail user = SecurityUser.getUser(); + Date date = new Date(); + + //创建者 + strictInsertFill(metaObject, CREATOR, Long.class, user.getId()); + //创建时间 + strictInsertFill(metaObject, CREATE_DATE, Date.class, date); + + //创建者所属部门 + strictInsertFill(metaObject, DEPT_ID, Long.class, user.getDeptId()); + + //更新者 + strictInsertFill(metaObject, UPDATER, Long.class, user.getId()); + //更新时间 + strictInsertFill(metaObject, UPDATE_DATE, Date.class, date); + } + + @Override + public void updateFill(MetaObject metaObject) { + //更新者 + strictUpdateFill(metaObject, UPDATER, Long.class, SecurityUser.getUserId()); + //更新时间 + strictUpdateFill(metaObject, UPDATE_DATE, Date.class, new Date()); + } +} diff --git a/admin/src/main/java/io/common/interceptor/DataFilterInterceptor.java b/admin/src/main/java/io/common/interceptor/DataFilterInterceptor.java new file mode 100644 index 0000000..cf07268 --- /dev/null +++ b/admin/src/main/java/io/common/interceptor/DataFilterInterceptor.java @@ -0,0 +1,82 @@ + + +package io.common.interceptor; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.PluginUtils; +import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; +import net.sf.jsqlparser.JSQLParserException; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.StringValue; +import net.sf.jsqlparser.expression.operators.conditional.AndExpression; +import net.sf.jsqlparser.parser.CCJSqlParserUtil; +import net.sf.jsqlparser.statement.select.PlainSelect; +import net.sf.jsqlparser.statement.select.Select; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; + +import java.util.Map; + +/** + * 数据过滤 + * + */ +public class DataFilterInterceptor implements InnerInterceptor { + + @Override + public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { + DataScope scope = getDataScope(parameter); + // 不进行数据过滤 + if(scope == null || StrUtil.isBlank(scope.getSqlFilter())){ + return; + } + + // 拼接新SQL + String buildSql = getSelect(boundSql.getSql(), scope); + + // 重写SQL + PluginUtils.mpBoundSql(boundSql).sql(buildSql); + } + + private DataScope getDataScope(Object parameter){ + if (parameter == null){ + return null; + } + + // 判断参数里是否有DataScope对象 + if (parameter instanceof Map) { + Map parameterMap = (Map) parameter; + for (Map.Entry entry : parameterMap.entrySet()) { + if (entry.getValue() != null && entry.getValue() instanceof DataScope) { + return (DataScope) entry.getValue(); + } + } + } else if (parameter instanceof DataScope) { + return (DataScope) parameter; + } + + return null; + } + + private String getSelect(String buildSql, DataScope scope){ + try { + Select select = (Select) CCJSqlParserUtil.parse(buildSql); + PlainSelect plainSelect = (PlainSelect) select.getSelectBody(); + + Expression expression = plainSelect.getWhere(); + if(expression == null){ + plainSelect.setWhere(new StringValue(scope.getSqlFilter())); + }else{ + AndExpression andExpression = new AndExpression(expression, new StringValue(scope.getSqlFilter())); + plainSelect.setWhere(andExpression); + } + + return select.toString().replaceAll("'", ""); + }catch (JSQLParserException e){ + return buildSql; + } + } +} diff --git a/admin/src/main/java/io/common/interceptor/DataScope.java b/admin/src/main/java/io/common/interceptor/DataScope.java new file mode 100644 index 0000000..781ab6c --- /dev/null +++ b/admin/src/main/java/io/common/interceptor/DataScope.java @@ -0,0 +1,27 @@ + + +package io.common.interceptor; + +/** + * 数据范围 + */ +public class DataScope { + private String sqlFilter; + + public DataScope(String sqlFilter) { + this.sqlFilter = sqlFilter; + } + + public String getSqlFilter() { + return sqlFilter; + } + + public void setSqlFilter(String sqlFilter) { + this.sqlFilter = sqlFilter; + } + + @Override + public String toString() { + return this.sqlFilter; + } +} diff --git a/admin/src/main/java/io/common/utils/ExcelUtils.java b/admin/src/main/java/io/common/utils/ExcelUtils.java new file mode 100644 index 0000000..2ce04f9 --- /dev/null +++ b/admin/src/main/java/io/common/utils/ExcelUtils.java @@ -0,0 +1,64 @@ +package io.common.utils; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.URLUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.converters.longconverter.LongStringConverter; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.BeanUtils; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * excel工具类 + */ +public class ExcelUtils { + + /** + * Excel导出 + * + * @param response response + * @param fileName 文件名 + * @param sheetName sheetName + * @param list 数据List + * @param pojoClass 对象Class + */ + public static void exportExcel(HttpServletResponse response, String fileName, String sheetName, List list, + Class pojoClass) throws IOException { + if (StrUtil.isBlank(fileName)) { + //当前日期 + fileName = DateUtils.format(new Date()); + } + + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("UTF-8"); + fileName = URLUtil.encode(fileName, StandardCharsets.UTF_8); + response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); + EasyExcel.write(response.getOutputStream(), pojoClass).registerConverter(new LongStringConverter()).sheet(sheetName).doWrite(list); + } + + /** + * Excel导出,先sourceList转换成List,再导出 + * + * @param response response + * @param fileName 文件名 + * @param sheetName sheetName + * @param sourceList 原数据List + * @param targetClass 目标对象Class + */ + public static void exportExcelToTarget(HttpServletResponse response, String fileName, String sheetName, List sourceList, + Class targetClass) throws Exception { + List targetList = new ArrayList<>(sourceList.size()); + for (Object source : sourceList) { + Object target = targetClass.newInstance(); + BeanUtils.copyProperties(source, target); + targetList.add(target); + } + exportExcel(response, fileName, sheetName, targetList, targetClass); + } + +} diff --git a/admin/src/main/java/io/modules/security/config/ShiroConfig.java b/admin/src/main/java/io/modules/security/config/ShiroConfig.java new file mode 100644 index 0000000..8f5b5b7 --- /dev/null +++ b/admin/src/main/java/io/modules/security/config/ShiroConfig.java @@ -0,0 +1,84 @@ + + +package io.modules.security.config; + +import io.modules.security.oauth2.Oauth2Filter; +import io.modules.security.oauth2.Oauth2Realm; +import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.session.mgt.SessionManager; +import org.apache.shiro.spring.LifecycleBeanPostProcessor; +import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; +import org.apache.shiro.spring.web.ShiroFilterFactoryBean; +import org.apache.shiro.web.mgt.DefaultWebSecurityManager; +import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import jakarta.servlet.Filter; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * Shiro的配置文件 + * + */ +@Configuration +public class ShiroConfig { + + @Bean + public DefaultWebSessionManager sessionManager(){ + DefaultWebSessionManager sessionManager = new DefaultWebSessionManager(); + sessionManager.setSessionValidationSchedulerEnabled(false); + sessionManager.setSessionIdUrlRewritingEnabled(false); + + return sessionManager; + } + + @Bean("securityManager") + public SecurityManager securityManager(Oauth2Realm oAuth2Realm, SessionManager sessionManager) { + DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); + securityManager.setRealm(oAuth2Realm); + securityManager.setSessionManager(sessionManager); + securityManager.setRememberMeManager(null); + return securityManager; + } + + @Bean("shiroFilter") + public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) { + ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); + shiroFilter.setSecurityManager(securityManager); + + //oauth过滤 + Map filters = new HashMap<>(); + filters.put("oauth2", new Oauth2Filter()); + shiroFilter.setFilters(filters); + + Map filterMap = new LinkedHashMap<>(); + filterMap.put("/webjars/**", "anon"); + filterMap.put("/druid/**", "anon"); + filterMap.put("/login", "anon"); + filterMap.put("/swagger/**", "anon"); + filterMap.put("/v3/api-docs/**", "anon"); + filterMap.put("/doc.html", "anon"); + filterMap.put("/swagger-resources/**", "anon"); + filterMap.put("/captcha", "anon"); + filterMap.put("/favicon.ico", "anon"); + filterMap.put("/", "anon"); + filterMap.put("/**", "oauth2"); + shiroFilter.setFilterChainDefinitionMap(filterMap); + + return shiroFilter; + } + + @Bean("lifecycleBeanPostProcessor") + public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { + return new LifecycleBeanPostProcessor(); + } + + @Bean + public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) { + AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); + advisor.setSecurityManager(securityManager); + return advisor; + } +} diff --git a/admin/src/main/java/io/modules/security/config/WebMvcConfig.java b/admin/src/main/java/io/modules/security/config/WebMvcConfig.java new file mode 100644 index 0000000..afb870b --- /dev/null +++ b/admin/src/main/java/io/modules/security/config/WebMvcConfig.java @@ -0,0 +1,67 @@ + + +package io.modules.security.config; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.common.utils.DateUtils; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.ByteArrayHttpMessageConverter; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.ResourceHttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.TimeZone; + +@Configuration +public class WebMvcConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOriginPatterns("*") + .allowCredentials(true) + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") + .maxAge(3600); + } + + @Override + public void configureMessageConverters(List> converters) { + converters.add(new ByteArrayHttpMessageConverter()); + converters.add(new StringHttpMessageConverter()); + converters.add(new ResourceHttpMessageConverter()); + converters.add(new AllEncompassingFormHttpMessageConverter()); + converters.add(new StringHttpMessageConverter()); + converters.add(jackson2HttpMessageConverter()); + } + + @Bean + public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() { + MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); + ObjectMapper mapper = new ObjectMapper(); + + //日期格式转换 + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.setDateFormat(new SimpleDateFormat(DateUtils.DATE_TIME_PATTERN)); + mapper.setTimeZone(TimeZone.getTimeZone("GMT+8")); + + //Long类型转String类型 + SimpleModule simpleModule = new SimpleModule(); + simpleModule.addSerializer(Long.class, ToStringSerializer.instance); + simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); + mapper.registerModule(simpleModule); + + converter.setObjectMapper(mapper); + return converter; + } + +} diff --git a/admin/src/main/java/io/modules/security/controller/LoginController.java b/admin/src/main/java/io/modules/security/controller/LoginController.java new file mode 100644 index 0000000..3454da9 --- /dev/null +++ b/admin/src/main/java/io/modules/security/controller/LoginController.java @@ -0,0 +1,95 @@ +package io.modules.security.controller; + +import io.common.exception.RenException; +import io.common.utils.Result; +import io.common.validator.AssertUtils; +import io.common.validator.ValidatorUtils; +import io.modules.security.dto.LoginDTO; +import io.modules.security.password.PasswordUtils; +import io.modules.security.service.CaptchaService; +import io.modules.security.service.SysUserTokenService; +import io.modules.security.user.SecurityUser; +import io.modules.security.user.UserDetail; +import io.modules.sys.dto.SysUserDTO; +import io.modules.sys.enums.UserStatusEnum; +import io.modules.sys.service.SysUserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; +import java.io.IOException; + + +/** + * 登录 + * + */ +@RestController +@Tag(name = "登录管理") +@AllArgsConstructor +public class LoginController { + private final SysUserService sysUserService; + private final SysUserTokenService sysUserTokenService; + private final CaptchaService captchaService; + + + @GetMapping("captcha") + @Operation(summary = "验证码") + @Parameter(in = ParameterIn.QUERY, ref = "string", name = "uuid", required = true) + public void captcha(HttpServletResponse response, String uuid) throws IOException { + //uuid不能为空 + AssertUtils.isBlank(uuid, "UUID不能为空~"); + //生成验证码 + captchaService.create(response, uuid); + } + @PostMapping("login") + @Operation(summary = "登录") + public Result login(HttpServletRequest request, @RequestBody LoginDTO login) { + //效验数据 + ValidatorUtils.validateEntity(login); + //验证码是否正确 +// boolean flag = captchaService.validate(login.getUuid(), login.getCaptcha()); +// if (!flag) { +// return new Result().error("验证码不正确~"); +// } + //用户信息 + SysUserDTO user = sysUserService.getByUsername(login.getUsername()); + + //用户不存在 + if (user == null) { + + throw new RenException("管理员用户不存在~"); + } + //密码错误 + if (!PasswordUtils.matches(login.getPassword(), user.getPassword())) { + + throw new RenException("密码错误~"); + } + //账号停用 + if (user.getStatus() == UserStatusEnum.DISABLE.value()) { + + throw new RenException("账号停用~"); + } + //登录成功 + + return sysUserTokenService.createToken(user.getId()); + } + + @PostMapping("logout") + @Operation(summary = "退出") + public Result logout(HttpServletRequest request) { + UserDetail user = SecurityUser.getUser(); + //退出 + sysUserTokenService.logout(user.getId()); + //用户信息 + + return new Result(); + } +} diff --git a/admin/src/main/java/io/modules/security/dao/SysUserTokenDao.java b/admin/src/main/java/io/modules/security/dao/SysUserTokenDao.java new file mode 100644 index 0000000..f3f62c8 --- /dev/null +++ b/admin/src/main/java/io/modules/security/dao/SysUserTokenDao.java @@ -0,0 +1,23 @@ + + +package io.modules.security.dao; + +import io.modules.security.entity.SysUserTokenEntity; +import io.common.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 系统用户Token + * + + */ +@Mapper +public interface SysUserTokenDao extends BaseDao { + + SysUserTokenEntity getByToken(String token); + + SysUserTokenEntity getByUserId(Long userId); + + void updateToken(@Param("userId") Long userId, @Param("token") String token); +} diff --git a/admin/src/main/java/io/modules/security/dto/LoginDTO.java b/admin/src/main/java/io/modules/security/dto/LoginDTO.java new file mode 100644 index 0000000..2973eea --- /dev/null +++ b/admin/src/main/java/io/modules/security/dto/LoginDTO.java @@ -0,0 +1,37 @@ + + +package io.modules.security.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +import java.io.Serializable; + +/** + * 登录表单 + * + + */ +@Data +@Schema(title = "登录表单") +public class LoginDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(title = "用户名", required = true) + @NotBlank(message="用户名不能为空~") + private String username; + + @Schema(title = "密码") + @NotBlank(message="密码不能为空") + private String password; + +// @Schema(title = "验证码") +// @NotBlank(message="验证不能为空") +// private String captcha; + +// @Schema(title = "唯一标识") +// @NotBlank(message="唯一标识不能为空") +// private String uuid; + +} diff --git a/admin/src/main/java/io/modules/security/entity/SysUserTokenEntity.java b/admin/src/main/java/io/modules/security/entity/SysUserTokenEntity.java new file mode 100644 index 0000000..f6c617e --- /dev/null +++ b/admin/src/main/java/io/modules/security/entity/SysUserTokenEntity.java @@ -0,0 +1,48 @@ + + +package io.modules.security.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 系统用户Token + */ +@Data +@TableName("sys_user_token") +public class SysUserTokenEntity implements Serializable { + private static final long serialVersionUID = 1L; + /** + * id + */ + @TableId + private Long id; + /** + * 用户ID + */ + private Long userId; + /** + * 用户token + */ + private String token; + /** + * 过期时间 + */ + private Date expireDate; + /** + * 更新时间 + */ + private Date updateDate; + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createDate; + +} diff --git a/admin/src/main/java/io/modules/security/oauth2/Oauth2Filter.java b/admin/src/main/java/io/modules/security/oauth2/Oauth2Filter.java new file mode 100644 index 0000000..6ad31d8 --- /dev/null +++ b/admin/src/main/java/io/modules/security/oauth2/Oauth2Filter.java @@ -0,0 +1,96 @@ +package io.modules.security.oauth2; + +import cn.hutool.core.util.StrUtil; +import io.common.constant.Constant; +import io.common.exception.ErrorCode; +import io.common.utils.HttpContextUtils; +import io.common.utils.JsonUtils; +import io.common.utils.Result; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.apache.http.HttpStatus; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.web.filter.authc.AuthenticatingFilter; +import org.springframework.web.bind.annotation.RequestMethod; + +import java.io.IOException; + +/** + * oauth2过滤器 + * + */ +public class Oauth2Filter extends AuthenticatingFilter { + + @Override + protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) throws Exception { + //获取请求token + String token = getRequestToken((HttpServletRequest) request); + if (StrUtil.isBlank(token)) { + return null; + } + return new Oauth2Token(token); + } + + @Override + protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { + if (((HttpServletRequest) request).getMethod().equals(RequestMethod.OPTIONS.name())) { + return true; + } + + return false; + } + + @Override + protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { + //获取请求token,如果token不存在,直接返回401 + String token = getRequestToken((HttpServletRequest) request); + if (StrUtil.isBlank(token)) { + HttpServletResponse httpResponse = (HttpServletResponse) response; + httpResponse.setContentType("application/json;charset=utf-8"); + httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); + httpResponse.setHeader("Access-Control-Allow-Origin", HttpContextUtils.getOrigin()); + String json = JsonUtils.toJsonString(new Result().error("未授权访问!")); + httpResponse.getWriter().print(json); + return false; + } + + return executeLogin(request, response); + } + + @Override + protected boolean onLoginFailure(AuthenticationToken token, AuthenticationException e, ServletRequest request, ServletResponse response) { + HttpServletResponse httpResponse = (HttpServletResponse) response; + httpResponse.setContentType("application/json;charset=utf-8"); + httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); + httpResponse.setHeader("Access-Control-Allow-Origin", HttpContextUtils.getOrigin()); + try { + //处理登录失败的异常 + Throwable throwable = e.getCause() == null ? e : e.getCause(); + Result r = new Result().error(HttpStatus.SC_UNAUTHORIZED, throwable.getMessage()); + + String json = JsonUtils.toJsonString(r); + httpResponse.getWriter().print(json); + } catch (IOException e1) { + + } + + return false; + } + + /** + * 获取请求的token + */ + private String getRequestToken(HttpServletRequest httpRequest) { + //从header中获取token + String token = httpRequest.getHeader(Constant.TOKEN_HEADER); + //如果header中不存在token,则从参数中获取token + if (StrUtil.isBlank(token)) { + token = httpRequest.getParameter(Constant.TOKEN_HEADER); + } + return token; + } + +} diff --git a/admin/src/main/java/io/modules/security/oauth2/Oauth2Realm.java b/admin/src/main/java/io/modules/security/oauth2/Oauth2Realm.java new file mode 100644 index 0000000..b5f0ccf --- /dev/null +++ b/admin/src/main/java/io/modules/security/oauth2/Oauth2Realm.java @@ -0,0 +1,77 @@ + + +package io.modules.security.oauth2; + +import io.modules.security.service.ShiroService; +import io.common.exception.ErrorCode; +import io.common.utils.ConvertUtils; +import io.modules.security.entity.SysUserTokenEntity; +import io.modules.security.user.UserDetail; +import io.modules.sys.entity.SysUserEntity; +import lombok.AllArgsConstructor; +import org.apache.shiro.authc.*; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.springframework.stereotype.Component; +import java.util.List; +import java.util.Set; + +/** + * 认证 + * + */ +@Component +@AllArgsConstructor +public class Oauth2Realm extends AuthorizingRealm { + private final ShiroService shiroService; + + @Override + public boolean supports(AuthenticationToken token) { + return token instanceof Oauth2Token; + } + + /** + * 授权(验证权限时调用) + */ + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { + UserDetail user = (UserDetail) principals.getPrimaryPrincipal(); + + //用户权限列表 + Set permsSet = shiroService.getUserPermissions(user); + + SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); + info.setStringPermissions(permsSet); + return info; + } + + /** + * 认证(登录时调用) + */ + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { + String accessToken = (String) token.getPrincipal(); + //根据accessToken,查询用户信息 + SysUserTokenEntity tokenEntity = shiroService.getByToken(accessToken); + //token失效 + if (tokenEntity == null || tokenEntity.getExpireDate().getTime() < System.currentTimeMillis()) { + throw new IncorrectCredentialsException("登录失效,请重新登录!"); + } + //查询用户信息 + SysUserEntity userEntity = shiroService.getUser(tokenEntity.getUserId()); + //转换成UserDetail对象 + UserDetail userDetail = ConvertUtils.sourceToTarget(userEntity, UserDetail.class); + //获取用户对应的部门数据权限 + List deptIdList = shiroService.getDataScopeList(userDetail.getId()); + userDetail.setDeptIdList(deptIdList); + //账号锁定 + if (userDetail.getStatus() == 0) { + throw new LockedAccountException("账号已被锁定!"); + } + SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(userDetail, accessToken, getName()); + return info; + } + +} diff --git a/admin/src/main/java/io/modules/security/oauth2/Oauth2Token.java b/admin/src/main/java/io/modules/security/oauth2/Oauth2Token.java new file mode 100644 index 0000000..51d338d --- /dev/null +++ b/admin/src/main/java/io/modules/security/oauth2/Oauth2Token.java @@ -0,0 +1,27 @@ + + +package io.modules.security.oauth2; + +import org.apache.shiro.authc.AuthenticationToken; + +/** + * token + * + */ +public class Oauth2Token implements AuthenticationToken { + private String token; + + public Oauth2Token(String token){ + this.token = token; + } + + @Override + public String getPrincipal() { + return token; + } + + @Override + public Object getCredentials() { + return token; + } +} diff --git a/admin/src/main/java/io/modules/security/oauth2/TokenGenerator.java b/admin/src/main/java/io/modules/security/oauth2/TokenGenerator.java new file mode 100644 index 0000000..679316c --- /dev/null +++ b/admin/src/main/java/io/modules/security/oauth2/TokenGenerator.java @@ -0,0 +1,45 @@ + + +package io.modules.security.oauth2; + +import io.common.exception.RenException; + +import java.security.MessageDigest; +import java.util.UUID; + +/** + * 生成token + * + */ +public class TokenGenerator { + + public static String generateValue() { + return generateValue(UUID.randomUUID().toString()); + } + + private static final char[] HEX_CODE = "0123456789abcdef".toCharArray(); + + public static String toHexString(byte[] data) { + if(data == null) { + return null; + } + StringBuilder r = new StringBuilder(data.length*2); + for ( byte b : data) { + r.append(HEX_CODE[(b >> 4) & 0xF]); + r.append(HEX_CODE[(b & 0xF)]); + } + return r.toString(); + } + + public static String generateValue(String param) { + try { + MessageDigest algorithm = MessageDigest.getInstance("MD5"); + algorithm.reset(); + algorithm.update(param.getBytes()); + byte[] messageDigest = algorithm.digest(); + return toHexString(messageDigest); + } catch (Exception e) { + throw new RenException("token invalid", e); + } + } +} diff --git a/admin/src/main/java/io/modules/security/password/BCrypt.java b/admin/src/main/java/io/modules/security/password/BCrypt.java new file mode 100644 index 0000000..f8034f1 --- /dev/null +++ b/admin/src/main/java/io/modules/security/password/BCrypt.java @@ -0,0 +1,623 @@ +package io.modules.security.password; + +import java.io.ByteArrayOutputStream; +import java.io.UnsupportedEncodingException; +import java.security.SecureRandom; + +public class BCrypt { + // BCrypt parameters + + private static final int GENSALT_DEFAULT_LOG2_ROUNDS = 10; + private static final int BCRYPT_SALT_LEN = 16; + // Blowfish parameters + private static final int BLOWFISH_NUM_ROUNDS = 16; + // Initial contents of key schedule + private static final int P_orig[] = { 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, + 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, + 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, + 0x9216d5d9, 0x8979fb1b }; + private static final int S_orig[] = { 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, + 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, + 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, + 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, + 0x9c30d539, 0x2af26013, 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, + 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, + 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, + 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, + 0xb3ee1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, + 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, + 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, + 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, + 0x0f6d6ff3, 0x83f44239, 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, + 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, + 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, + 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, + 0x7d84a5c3, 0x3b8b5ebe, 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, + 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, + 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, + 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, + 0x5e5c9ec2, 0x196a2463, 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, + 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, + 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, + 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, + 0x8ea5e9f8, 0xdb3222f8, 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, + 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, + 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, + 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, + 0x4afcb56c, 0x2dd1d35b, 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, + 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, + 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, + 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, + 0x8888b812, 0x900df01c, 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, + 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, + 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, + 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, + 0xc75442f5, 0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, + 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, + 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, + 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, + 0x1b510052, 0x9a532915, 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, + 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, + 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a, + 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, + 0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, + 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, + 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, + 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, + 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, + 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d, + 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, + 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, + 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, + 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908, + 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, + 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, + 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, + 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908, + 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, + 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, + 0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, + 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa, + 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, + 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, + 0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, + 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, + 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, + 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, + 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, + 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, + 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, + 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, + 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, + 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054, + 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, + 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, + 0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, + 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646, + 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, + 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, + 0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, + 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e, + 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, + 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, + 0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, + 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7, 0xe93d5a68, 0x948140f7, + 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, + 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, + 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, + 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, 0x96eb27b3, 0x55fd3941, + 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, + 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, + 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, + 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, 0x1dc9faf7, 0x4b6d1856, + 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, + 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, + 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, + 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, 0xfdf8e802, 0x04272f70, + 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, + 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, + 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, + 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1, + 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, + 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, + 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, + 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, + 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, + 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, + 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, + 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, 0x6a124237, 0xb79251e7, + 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, + 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, + 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, + 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, 0x83426b33, 0xf01eab71, + 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, + 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, + 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, + 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 0xb90bace1, 0xbb8205d0, + 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, + 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, + 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, + 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641, + 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, + 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, + 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, + 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, + 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, + 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, + 0x670efa8e, 0x406000e0, 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, + 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, + 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, + 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, + 0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, + 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, + 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, + 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, + 0x3f046f69, 0x77fa0a59, 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, + 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, + 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, + 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, + 0xf8d56629, 0x79132e28, 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, + 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, + 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, + 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, + 0xabcc5167, 0xccad925f, 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, + 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, + 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, + 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, + 0xccd2017f, 0x6bb4e3bb, 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, + 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, + 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, + 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, + 0x06b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, + 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, + 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, + 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, + 0x8df9317c, 0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, + 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, + 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, + 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, + 0xd3a0342b, 0x8971f21e, 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, + 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, + 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, + 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, + 0x6e163697, 0x88d273cc, 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, + 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, + 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, + 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, + 0x77afa1c5, 0x20756060, 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, + 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, + 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6 }; + // bcrypt IV: "OrpheanBeholderScryDoubt" + static private final int bf_crypt_ciphertext[] = { 0x4f727068, 0x65616e42, + 0x65686f6c, 0x64657253, 0x63727944, 0x6f756274 }; + // Table for Base64 encoding + static private final char base64_code[] = { '.', '/', 'A', 'B', 'C', 'D', 'E', 'F', + 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', + 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', + 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', + 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; + // Table for Base64 decoding + static private final byte index_64[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, -1, -1, -1, -1, -1 }; + static final int MIN_LOG_ROUNDS = 4; + static final int MAX_LOG_ROUNDS = 31; + // Expanded Blowfish key + private int P[]; + private int S[]; + + /** + * Encode a byte array using bcrypt's slightly-modified base64 encoding scheme. Note + * that this is not compatible with the standard MIME-base64 + * encoding. + * + * @param d the byte array to encode + * @param len the number of bytes to encode + * @param rs the destination buffer for the base64-encoded string + * @exception IllegalArgumentException if the length is invalid + */ + static void encode_base64(byte d[], int len, StringBuilder rs) + throws IllegalArgumentException { + int off = 0; + int c1, c2; + + if (len <= 0 || len > d.length) { + throw new IllegalArgumentException("Invalid len"); + } + + while (off < len) { + c1 = d[off++] & 0xff; + rs.append(base64_code[(c1 >> 2) & 0x3f]); + c1 = (c1 & 0x03) << 4; + if (off >= len) { + rs.append(base64_code[c1 & 0x3f]); + break; + } + c2 = d[off++] & 0xff; + c1 |= (c2 >> 4) & 0x0f; + rs.append(base64_code[c1 & 0x3f]); + c1 = (c2 & 0x0f) << 2; + if (off >= len) { + rs.append(base64_code[c1 & 0x3f]); + break; + } + c2 = d[off++] & 0xff; + c1 |= (c2 >> 6) & 0x03; + rs.append(base64_code[c1 & 0x3f]); + rs.append(base64_code[c2 & 0x3f]); + } + } + + /** + * Look up the 3 bits base64-encoded by the specified character, range-checking + * against conversion table + * @param x the base64-encoded value + * @return the decoded value of x + */ + private static byte char64(char x) { + if (x > index_64.length) { + return -1; + } + return index_64[x]; + } + + /** + * Decode a string encoded using bcrypt's base64 scheme to a byte array. Note that + * this is *not* compatible with the standard MIME-base64 encoding. + * @param s the string to decode + * @param maxolen the maximum number of bytes to decode + * @return an array containing the decoded bytes + * @throws IllegalArgumentException if maxolen is invalid + */ + static byte[] decode_base64(String s, int maxolen) throws IllegalArgumentException { + ByteArrayOutputStream out = new ByteArrayOutputStream(maxolen); + int off = 0, slen = s.length(), olen = 0; + byte c1, c2, c3, c4, o; + + if (maxolen <= 0) { + throw new IllegalArgumentException("Invalid maxolen"); + } + + while (off < slen - 1 && olen < maxolen) { + c1 = char64(s.charAt(off++)); + c2 = char64(s.charAt(off++)); + if (c1 == -1 || c2 == -1) { + break; + } + o = (byte) (c1 << 2); + o |= (c2 & 0x30) >> 4; + out.write(o); + if (++olen >= maxolen || off >= slen) { + break; + } + c3 = char64(s.charAt(off++)); + if (c3 == -1) { + break; + } + o = (byte) ((c2 & 0x0f) << 4); + o |= (c3 & 0x3c) >> 2; + out.write(o); + if (++olen >= maxolen || off >= slen) { + break; + } + c4 = char64(s.charAt(off++)); + o = (byte) ((c3 & 0x03) << 6); + o |= c4; + out.write(o); + ++olen; + } + + return out.toByteArray(); + } + + /** + * Blowfish encipher a single 64-bit block encoded as two 32-bit halves + * @param lr an array containing the two 32-bit half blocks + * @param off the position in the array of the blocks + */ + private final void encipher(int lr[], int off) { + int i, n, l = lr[off], r = lr[off + 1]; + + l ^= P[0]; + for (i = 0; i <= BLOWFISH_NUM_ROUNDS - 2;) { + // Feistel substitution on left word + n = S[(l >> 24) & 0xff]; + n += S[0x100 | ((l >> 16) & 0xff)]; + n ^= S[0x200 | ((l >> 8) & 0xff)]; + n += S[0x300 | (l & 0xff)]; + r ^= n ^ P[++i]; + + // Feistel substitution on right word + n = S[(r >> 24) & 0xff]; + n += S[0x100 | ((r >> 16) & 0xff)]; + n ^= S[0x200 | ((r >> 8) & 0xff)]; + n += S[0x300 | (r & 0xff)]; + l ^= n ^ P[++i]; + } + lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1]; + lr[off + 1] = l; + } + + /** + * Cycically extract a word of key material + * @param data the string to extract the data from + * @param offp a "pointer" (as a one-entry array) to the current offset into data + * @return the next word of material from data + */ + private static int streamtoword(byte data[], int offp[]) { + int i; + int word = 0; + int off = offp[0]; + + for (i = 0; i < 4; i++) { + word = (word << 8) | (data[off] & 0xff); + off = (off + 1) % data.length; + } + + offp[0] = off; + return word; + } + + /** + * Initialise the Blowfish key schedule + */ + private void init_key() { + P = (int[]) P_orig.clone(); + S = (int[]) S_orig.clone(); + } + + /** + * Key the Blowfish cipher + * @param key an array containing the key + */ + private void key(byte key[]) { + int i; + int koffp[] = { 0 }; + int lr[] = { 0, 0 }; + int plen = P.length, slen = S.length; + + for (i = 0; i < plen; i++) { + P[i] = P[i] ^ streamtoword(key, koffp); + } + + for (i = 0; i < plen; i += 2) { + encipher(lr, 0); + P[i] = lr[0]; + P[i + 1] = lr[1]; + } + + for (i = 0; i < slen; i += 2) { + encipher(lr, 0); + S[i] = lr[0]; + S[i + 1] = lr[1]; + } + } + + /** + * Perform the "enhanced key schedule" step described by Provos and Mazieres in + * "A Future-Adaptable Password Scheme" http://www.openbsd.org/papers/bcrypt-paper.ps + * @param data salt information + * @param key password information + */ + private void ekskey(byte data[], byte key[]) { + int i; + int koffp[] = { 0 }, doffp[] = { 0 }; + int lr[] = { 0, 0 }; + int plen = P.length, slen = S.length; + + for (i = 0; i < plen; i++) { + P[i] = P[i] ^ streamtoword(key, koffp); + } + + for (i = 0; i < plen; i += 2) { + lr[0] ^= streamtoword(data, doffp); + lr[1] ^= streamtoword(data, doffp); + encipher(lr, 0); + P[i] = lr[0]; + P[i + 1] = lr[1]; + } + + for (i = 0; i < slen; i += 2) { + lr[0] ^= streamtoword(data, doffp); + lr[1] ^= streamtoword(data, doffp); + encipher(lr, 0); + S[i] = lr[0]; + S[i + 1] = lr[1]; + } + } + + static long roundsForLogRounds(int log_rounds) { + if (log_rounds < 4 || log_rounds > 31) { + throw new IllegalArgumentException("Bad number of rounds"); + } + return 1L << log_rounds; + } + + /** + * Perform the central password hashing step in the bcrypt scheme + * @param password the password to hash + * @param salt the binary salt to hash with the password + * @param log_rounds the binary logarithm of the number of rounds of hashing to apply + * @return an array containing the binary hashed password + */ + private byte[] crypt_raw(byte password[], byte salt[], int log_rounds) { + int cdata[] = (int[]) bf_crypt_ciphertext.clone(); + int clen = cdata.length; + byte ret[]; + + long rounds = roundsForLogRounds(log_rounds); + + init_key(); + ekskey(salt, password); + for (long i = 0; i < rounds; i++) { + key(password); + key(salt); + } + + for (int i = 0; i < 64; i++) { + for (int j = 0; j < (clen >> 1); j++) { + encipher(cdata, j << 1); + } + } + + ret = new byte[clen * 4]; + for (int i = 0, j = 0; i < clen; i++) { + ret[j++] = (byte) ((cdata[i] >> 24) & 0xff); + ret[j++] = (byte) ((cdata[i] >> 16) & 0xff); + ret[j++] = (byte) ((cdata[i] >> 8) & 0xff); + ret[j++] = (byte) (cdata[i] & 0xff); + } + return ret; + } + + /** + * Hash a password using the OpenBSD bcrypt scheme + * @param password the password to hash + * @param salt the salt to hash with (perhaps generated using BCrypt.gensalt) + * @return the hashed password + * @throws IllegalArgumentException if invalid salt is passed + */ + public static String hashpw(String password, String salt) throws IllegalArgumentException { + BCrypt B; + String real_salt; + byte passwordb[], saltb[], hashed[]; + char minor = (char) 0; + int rounds, off = 0; + StringBuilder rs = new StringBuilder(); + + if (salt == null) { + throw new IllegalArgumentException("salt cannot be null"); + } + + int saltLength = salt.length(); + + if (saltLength < 28) { + throw new IllegalArgumentException("Invalid salt"); + } + + if (salt.charAt(0) != '$' || salt.charAt(1) != '2') { + throw new IllegalArgumentException("Invalid salt version"); + } + if (salt.charAt(2) == '$') { + off = 3; + } + else { + minor = salt.charAt(2); + if (minor != 'a' || salt.charAt(3) != '$') { + throw new IllegalArgumentException("Invalid salt revision"); + } + off = 4; + } + + if (saltLength - off < 25) { + throw new IllegalArgumentException("Invalid salt"); + } + + // Extract number of rounds + if (salt.charAt(off + 2) > '$') { + throw new IllegalArgumentException("Missing salt rounds"); + } + rounds = Integer.parseInt(salt.substring(off, off + 2)); + + real_salt = salt.substring(off + 3, off + 25); + try { + passwordb = (password + (minor >= 'a' ? "\000" : "")).getBytes("UTF-8"); + } + catch (UnsupportedEncodingException uee) { + throw new AssertionError("UTF-8 is not supported"); + } + + saltb = decode_base64(real_salt, BCRYPT_SALT_LEN); + + B = new BCrypt(); + hashed = B.crypt_raw(passwordb, saltb, rounds); + + rs.append("$2"); + if (minor >= 'a') { + rs.append(minor); + } + rs.append("$"); + if (rounds < 10) { + rs.append("0"); + } + rs.append(rounds); + rs.append("$"); + encode_base64(saltb, saltb.length, rs); + encode_base64(hashed, bf_crypt_ciphertext.length * 4 - 1, rs); + return rs.toString(); + } + + /** + * Generate a salt for use with the BCrypt.hashpw() method + * @param log_rounds the log2 of the number of rounds of hashing to apply - the work + * factor therefore increases as 2**log_rounds. Minimum 4, maximum 31. + * @param random an instance of SecureRandom to use + * @return an encoded salt value + */ + public static String gensalt(int log_rounds, SecureRandom random) { + if (log_rounds < MIN_LOG_ROUNDS || log_rounds > MAX_LOG_ROUNDS) { + throw new IllegalArgumentException("Bad number of rounds"); + } + StringBuilder rs = new StringBuilder(); + byte rnd[] = new byte[BCRYPT_SALT_LEN]; + + random.nextBytes(rnd); + + rs.append("$2a$"); + if (log_rounds < 10) { + rs.append("0"); + } + rs.append(log_rounds); + rs.append("$"); + encode_base64(rnd, rnd.length, rs); + return rs.toString(); + } + + /** + * Generate a salt for use with the BCrypt.hashpw() method + * @param log_rounds the log2 of the number of rounds of hashing to apply - the work + * factor therefore increases as 2**log_rounds. Minimum 4, maximum 31. + * @return an encoded salt value + */ + public static String gensalt(int log_rounds) { + return gensalt(log_rounds, new SecureRandom()); + } + + /** + * Generate a salt for use with the BCrypt.hashpw() method, selecting a reasonable + * default for the number of hashing rounds to apply + * @return an encoded salt value + */ + public static String gensalt() { + return gensalt(GENSALT_DEFAULT_LOG2_ROUNDS); + } + + /** + * Check that a plaintext password matches a previously hashed one + * @param plaintext the plaintext password to verify + * @param hashed the previously-hashed password + * @return true if the passwords match, false otherwise + */ + public static boolean checkpw(String plaintext, String hashed) { + return equalsNoEarlyReturn(hashed, hashpw(plaintext, hashed)); + } + + static boolean equalsNoEarlyReturn(String a, String b) { + char[] caa = a.toCharArray(); + char[] cab = b.toCharArray(); + + if (caa.length != cab.length) { + return false; + } + + byte ret = 0; + for (int i = 0; i < caa.length; i++) { + ret |= caa[i] ^ cab[i]; + } + return ret == 0; + } +} diff --git a/admin/src/main/java/io/modules/security/password/BCryptPasswordEncoder.java b/admin/src/main/java/io/modules/security/password/BCryptPasswordEncoder.java new file mode 100644 index 0000000..731cb4b --- /dev/null +++ b/admin/src/main/java/io/modules/security/password/BCryptPasswordEncoder.java @@ -0,0 +1,73 @@ +package io.modules.security.password; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.security.SecureRandom; +import java.util.regex.Pattern; + +public class BCryptPasswordEncoder implements PasswordEncoder { + private Pattern BCRYPT_PATTERN = Pattern + .compile("\\A\\$2a?\\$\\d\\d\\$[./0-9A-Za-z]{53}"); + private final Log logger = LogFactory.getLog(getClass()); + + private final int strength; + + private final SecureRandom random; + + public BCryptPasswordEncoder() { + this(-1); + } + + /** + * @param strength the log rounds to use, between 4 and 31 + */ + public BCryptPasswordEncoder(int strength) { + this(strength, null); + } + + /** + * @param strength the log rounds to use, between 4 and 31 + * @param random the secure random instance to use + * + */ + public BCryptPasswordEncoder(int strength, SecureRandom random) { + if (strength != -1 && (strength < BCrypt.MIN_LOG_ROUNDS || strength > BCrypt.MAX_LOG_ROUNDS)) { + throw new IllegalArgumentException("Bad strength"); + } + this.strength = strength; + this.random = random; + } + + @Override + public String encode(CharSequence rawPassword) { + String salt; + if (strength > 0) { + if (random != null) { + salt = BCrypt.gensalt(strength, random); + } + else { + salt = BCrypt.gensalt(strength); + } + } + else { + salt = BCrypt.gensalt(); + } + return BCrypt.hashpw(rawPassword.toString(), salt); + } + + @Override + public boolean matches(CharSequence rawPassword, String encodedPassword) { + if (encodedPassword == null || encodedPassword.length() == 0) { + logger.warn("Empty encoded password"); + return false; + } + + if (!BCRYPT_PATTERN.matcher(encodedPassword).matches()) { + logger.warn("Encoded password does not look like BCrypt"); + return false; + } + + return BCrypt.checkpw(rawPassword.toString(), encodedPassword); + } +} diff --git a/admin/src/main/java/io/modules/security/password/PasswordEncoder.java b/admin/src/main/java/io/modules/security/password/PasswordEncoder.java new file mode 100644 index 0000000..14c1944 --- /dev/null +++ b/admin/src/main/java/io/modules/security/password/PasswordEncoder.java @@ -0,0 +1,30 @@ +package io.modules.security.password; + +/** + * Service interface for encoding passwords. + * + * The preferred implementation is {@code BCryptPasswordEncoder}. + * + * @author Keith Donald + */ +public interface PasswordEncoder { + + /** + * Encode the raw password. Generally, a good encoding algorithm applies a SHA-1 or + * greater hash combined with an 8-byte or greater randomly generated salt. + */ + String encode(CharSequence rawPassword); + + /** + * Verify the encoded password obtained from storage matches the submitted raw + * password after it too is encoded. Returns true if the passwords match, false if + * they do not. The stored password itself is never decoded. + * + * @param rawPassword the raw password to encode and match + * @param encodedPassword the encoded password from storage to compare with + * @return true if the raw password, after encoding, matches the encoded password from + * storage + */ + boolean matches(CharSequence rawPassword, String encodedPassword); + +} diff --git a/admin/src/main/java/io/modules/security/password/PasswordUtils.java b/admin/src/main/java/io/modules/security/password/PasswordUtils.java new file mode 100644 index 0000000..05ced8f --- /dev/null +++ b/admin/src/main/java/io/modules/security/password/PasswordUtils.java @@ -0,0 +1,41 @@ +package io.modules.security.password; + +/** + * 密码工具类 + * + + * @since 1.0.0 + */ +public class PasswordUtils { + private static PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + + /** + * 加密 + * @param str 字符串 + * @return 返回加密字符串 + */ + public static String encode(String str){ + return passwordEncoder.encode(str); + } + + + /** + * 比较密码是否相等 + * @param str 明文密码 + * @param password 加密后密码 + * @return true:成功 false:失败 + */ + public static boolean matches(String str, String password){ + return passwordEncoder.matches(str, password); + } + + + public static void main(String[] args) { + String str = "admin"; + String password = encode(str); + + System.out.println(password); + System.out.println(matches(str, password)); + } + +} diff --git a/admin/src/main/java/io/modules/security/service/CaptchaService.java b/admin/src/main/java/io/modules/security/service/CaptchaService.java new file mode 100644 index 0000000..043adb6 --- /dev/null +++ b/admin/src/main/java/io/modules/security/service/CaptchaService.java @@ -0,0 +1,28 @@ + + +package io.modules.security.service; + +import jakarta.servlet.http.HttpServletResponse; + +import java.io.IOException; + +/** + * 验证码 + * + + */ +public interface CaptchaService { + + /** + * 图片验证码 + */ + void create(HttpServletResponse response, String uuid) throws IOException; + + /** + * 验证码效验 + * @param uuid uuid + * @param code 验证码 + * @return true:成功 false:失败 + */ + boolean validate(String uuid, String code); +} diff --git a/admin/src/main/java/io/modules/security/service/ShiroService.java b/admin/src/main/java/io/modules/security/service/ShiroService.java new file mode 100644 index 0000000..6a5f01b --- /dev/null +++ b/admin/src/main/java/io/modules/security/service/ShiroService.java @@ -0,0 +1,37 @@ + + +package io.modules.security.service; + +import io.modules.security.user.UserDetail; +import io.modules.sys.entity.SysUserEntity; +import io.modules.security.entity.SysUserTokenEntity; + +import java.util.List; +import java.util.Set; + +/** + * shiro相关接口 + * + + */ +public interface ShiroService { + /** + * 获取用户权限列表 + */ + Set getUserPermissions(UserDetail user); + + SysUserTokenEntity getByToken(String token); + + /** + * 根据用户ID,查询用户 + * @param userId + */ + SysUserEntity getUser(Long userId); + + /** + * 获取用户对应的部门数据权限 + * @param userId 用户ID + * @return 返回部门ID列表 + */ + List getDataScopeList(Long userId); +} diff --git a/admin/src/main/java/io/modules/security/service/SysUserTokenService.java b/admin/src/main/java/io/modules/security/service/SysUserTokenService.java new file mode 100644 index 0000000..5b71107 --- /dev/null +++ b/admin/src/main/java/io/modules/security/service/SysUserTokenService.java @@ -0,0 +1,28 @@ + + +package io.modules.security.service; + +import io.common.service.BaseService; +import io.common.utils.Result; +import io.modules.security.entity.SysUserTokenEntity; + +/** + * 用户Token + * + + */ +public interface SysUserTokenService extends BaseService { + + /** + * 生成token + * @param userId 用户ID + */ + Result createToken(Long userId); + + /** + * 退出,修改token值 + * @param userId 用户ID + */ + void logout(Long userId); + +} diff --git a/admin/src/main/java/io/modules/security/service/impl/CaptchaServiceImpl.java b/admin/src/main/java/io/modules/security/service/impl/CaptchaServiceImpl.java new file mode 100644 index 0000000..e8b5976 --- /dev/null +++ b/admin/src/main/java/io/modules/security/service/impl/CaptchaServiceImpl.java @@ -0,0 +1,62 @@ +package io.modules.security.service.impl; + +import cn.hutool.cache.Cache; +import cn.hutool.cache.CacheUtil; +import com.wf.captcha.SpecCaptcha; +import com.wf.captcha.base.Captcha; +import io.modules.security.service.CaptchaService; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import java.io.IOException; +/** + * 验证码 + * + + */ +@Service +public class CaptchaServiceImpl implements CaptchaService { + /** + * Local Cache 5分钟过期 + */ + Cache localCache = CacheUtil.newLRUCache(1000, 1000 * 60 * 5); + + @Override + public void create(HttpServletResponse response, String uuid) throws IOException { + response.setContentType("image/gif"); + response.setHeader("Pragma", "No-cache"); + response.setHeader("Cache-Control", "no-cache"); + response.setDateHeader("Expires", 0); + //生成验证码 + SpecCaptcha captcha = new SpecCaptcha(150, 40); + captcha.setLen(5); + captcha.setCharType(Captcha.TYPE_DEFAULT); + captcha.out(response.getOutputStream()); + //保存到缓存 + setCache(uuid, captcha.text()); + } + + @Override + public boolean validate(String uuid, String code) { + //获取验证码 + String captcha = getCache(uuid); + //效验成功 + if (code.equalsIgnoreCase(captcha)) { + return true; + } + return false; + } + private void setCache(String key, String value) { + localCache.put(key, value); + } + + private String getCache(String key) { + String captcha = localCache.get(key); + //删除验证码 + if (captcha != null) { + localCache.remove(key); + } + return captcha; + } +} diff --git a/admin/src/main/java/io/modules/security/service/impl/ShiroServiceImpl.java b/admin/src/main/java/io/modules/security/service/impl/ShiroServiceImpl.java new file mode 100644 index 0000000..7353437 --- /dev/null +++ b/admin/src/main/java/io/modules/security/service/impl/ShiroServiceImpl.java @@ -0,0 +1,67 @@ + + +package io.modules.security.service.impl; + +import cn.hutool.core.util.StrUtil; +import io.modules.security.dao.SysUserTokenDao; +import io.modules.security.entity.SysUserTokenEntity; +import io.modules.security.service.ShiroService; +import io.modules.security.user.UserDetail; +import io.modules.sys.dao.SysMenuDao; +import io.modules.sys.dao.SysRoleDataScopeDao; +import io.modules.sys.dao.SysUserDao; +import io.modules.sys.entity.SysUserEntity; +import io.modules.sys.enums.SuperAdminEnum; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +@Service +@AllArgsConstructor +public class ShiroServiceImpl implements ShiroService { + private final SysMenuDao sysMenuDao; + private final SysUserDao sysUserDao; + private final SysUserTokenDao sysUserTokenDao; + private final SysRoleDataScopeDao sysRoleDataScopeDao; + + @Override + public Set getUserPermissions(UserDetail user) { + //系统管理员,拥有最高权限 + List permissionsList; + if (user.getSuperAdmin() == SuperAdminEnum.YES.value()) { + permissionsList = sysMenuDao.getPermissionsList(); + } else { + permissionsList = sysMenuDao.getUserPermissionsList(user.getId()); + } + + //用户权限列表 + Set permsSet = new HashSet<>(); + for (String permissions : permissionsList) { + if (StrUtil.isBlank(permissions)) { + continue; + } + permsSet.addAll(Arrays.asList(permissions.trim().split(","))); + } + + return permsSet; + } + + @Override + public SysUserTokenEntity getByToken(String token) { + return sysUserTokenDao.getByToken(token); + } + + @Override + public SysUserEntity getUser(Long userId) { + return sysUserDao.selectById(userId); + } + + @Override + public List getDataScopeList(Long userId) { + return sysRoleDataScopeDao.getDataScopeList(userId); + } +} diff --git a/admin/src/main/java/io/modules/security/service/impl/SysUserTokenServiceImpl.java b/admin/src/main/java/io/modules/security/service/impl/SysUserTokenServiceImpl.java new file mode 100644 index 0000000..027cc74 --- /dev/null +++ b/admin/src/main/java/io/modules/security/service/impl/SysUserTokenServiceImpl.java @@ -0,0 +1,80 @@ + + +package io.modules.security.service.impl; + +import io.common.constant.Constant; +import io.common.service.impl.BaseServiceImpl; +import io.modules.security.oauth2.TokenGenerator; +import io.common.utils.Result; +import io.modules.security.dao.SysUserTokenDao; +import io.modules.security.entity.SysUserTokenEntity; +import io.modules.security.service.SysUserTokenService; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Service +public class SysUserTokenServiceImpl extends BaseServiceImpl implements SysUserTokenService { + /** + * 12小时后过期 + */ + private final static int EXPIRE = 3600 * 12; + + @Override + public Result createToken(Long userId) { + //用户token + String token; + + //当前时间 + Date now = new Date(); + //过期时间 + Date expireTime = new Date(now.getTime() + EXPIRE * 1000); + + //判断是否生成过token + SysUserTokenEntity tokenEntity = baseDao.getByUserId(userId); + if(tokenEntity == null){ + //生成一个token + token = TokenGenerator.generateValue(); + + tokenEntity = new SysUserTokenEntity(); + tokenEntity.setUserId(userId); + tokenEntity.setToken(token); + tokenEntity.setUpdateDate(now); + tokenEntity.setExpireDate(expireTime); + + //保存token + this.insert(tokenEntity); + }else{ + //判断token是否过期 + if(tokenEntity.getExpireDate().getTime() < System.currentTimeMillis()){ + //token过期,重新生成token + token = TokenGenerator.generateValue(); + }else { + token = tokenEntity.getToken(); + } + + tokenEntity.setToken(token); + tokenEntity.setUpdateDate(now); + tokenEntity.setExpireDate(expireTime); + + //更新token + this.updateById(tokenEntity); + } + + Map map = new HashMap<>(2); + map.put(Constant.TOKEN_HEADER, token); + map.put("expire", EXPIRE); + return new Result().ok(map); + } + + @Override + public void logout(Long userId) { + //生成一个token + String token = TokenGenerator.generateValue(); + + //修改token + baseDao.updateToken(userId, token); + } +} diff --git a/admin/src/main/java/io/modules/security/user/SecurityUser.java b/admin/src/main/java/io/modules/security/user/SecurityUser.java new file mode 100644 index 0000000..02efa97 --- /dev/null +++ b/admin/src/main/java/io/modules/security/user/SecurityUser.java @@ -0,0 +1,53 @@ + + +package io.modules.security.user; + +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.subject.Subject; + +/** + * 用户 + * + + */ +public class SecurityUser { + + public static Subject getSubject() { + try { + return SecurityUtils.getSubject(); + }catch (Exception e){ + return null; + } + } + + /** + * 获取用户信息 + */ + public static UserDetail getUser() { + Subject subject = getSubject(); + if(subject == null){ + return new UserDetail(); + } + + UserDetail user = (UserDetail)subject.getPrincipal(); + if(user == null){ + return new UserDetail(); + } + + return user; + } + + /** + * 获取用户ID + */ + public static Long getUserId() { + return getUser().getId(); + } + + /** + * 获取部门ID + */ + public static Long getDeptId() { + return getUser().getDeptId(); + } +} diff --git a/admin/src/main/java/io/modules/security/user/UserDetail.java b/admin/src/main/java/io/modules/security/user/UserDetail.java new file mode 100644 index 0000000..327ce06 --- /dev/null +++ b/admin/src/main/java/io/modules/security/user/UserDetail.java @@ -0,0 +1,35 @@ + + +package io.modules.security.user; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 登录用户信息 + * + + */ +@Data +public class UserDetail implements Serializable { + private static final long serialVersionUID = 1L; + + private Long id; + private String username; + private String realName; + private String headUrl; + private Integer gender; + private String email; + private String mobile; + private Long deptId; + private String password; + private Integer status; + private Integer superAdmin; + /** + * 部门数据权限 + */ + private List deptIdList; + +} diff --git a/admin/src/main/java/io/modules/sys/controller/ApplicationsController.java b/admin/src/main/java/io/modules/sys/controller/ApplicationsController.java new file mode 100644 index 0000000..3cf71cd --- /dev/null +++ b/admin/src/main/java/io/modules/sys/controller/ApplicationsController.java @@ -0,0 +1,103 @@ +package io.modules.sys.controller; + +import io.common.constant.Constant; +import io.common.page.PageData; +import io.common.utils.Result; +import io.common.validator.AssertUtils; +import io.common.validator.ValidatorUtils; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.modules.item.dto.ApplicationsDTO; +import io.modules.item.dto.CertificatesDTO; +import io.modules.item.dto.UserDTO; +import io.modules.item.service.ApplicationsService; +import io.modules.item.service.CertificatesService; +import io.modules.item.service.FrontUserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 申请表 + */ +@RestController +@RequestMapping("/sys/applications") +@Tag(name="证书表") +@CrossOrigin +public class ApplicationsController { + @Autowired + private ApplicationsService applicationsService; + @Autowired + private FrontUserService userService; + + @Autowired + private CertificatesService certificatesService; + + @Value("${upload.url}") + private String uploadUrl; + + @GetMapping("page") + @Operation(summary = "分页") + @Parameters({ + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", in = ParameterIn.QUERY, required = true, ref="int") , + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", in = ParameterIn.QUERY,required = true, ref="int") , + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段", in = ParameterIn.QUERY, ref="String") , + @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)", in = ParameterIn.QUERY, ref="String") + }) + public Result> page(@Parameter(hidden = true) @RequestParam Map params){ + PageData page = applicationsService.page(params); + List collect = page.getList().stream().map(e -> { + Long userId = e.getUserId(); + UserDTO userDTO = userService.get(userId); + e.setUser(userDTO); + CertificatesDTO certificatesDTO = certificatesService.get(e.getCertId()); + if (certificatesDTO != null){ + certificatesDTO.setImg(uploadUrl + certificatesDTO.getImg()); + e.setCertificates(certificatesDTO); + } + return e; // 返回修改后的对象 + }).collect(Collectors.toList()); + page.setList(collect); + return new Result>().ok(page); + } + + @PostMapping + @Operation(summary = "保存") + public Result save(@RequestBody ApplicationsDTO dto){ + //效验数据 + ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); + applicationsService.save(dto); + return new Result(); + } + + @PutMapping + @Operation(summary = "修改") + public Result update(@RequestBody ApplicationsDTO dto){ + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); + dto.setAuditTime(new Date()); + applicationsService.update(dto); + return new Result(); + } + + @DeleteMapping + @Operation(summary = "删除") + public Result delete(@RequestBody Long[] ids){ + //效验数据 + AssertUtils.isArrayEmpty(ids, "id"); + applicationsService.delete(ids); + return new Result(); + } + +} diff --git a/admin/src/main/java/io/modules/sys/controller/CertificatesController.java b/admin/src/main/java/io/modules/sys/controller/CertificatesController.java new file mode 100644 index 0000000..5d55e8c --- /dev/null +++ b/admin/src/main/java/io/modules/sys/controller/CertificatesController.java @@ -0,0 +1,112 @@ +package io.modules.sys.controller; + + +import io.common.constant.Constant; +import io.common.page.PageData; +import io.common.utils.Result; +import io.common.validator.AssertUtils; +import io.common.validator.ValidatorUtils; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.modules.item.dto.CertificatesDTO; +import io.modules.item.dto.UserDTO; +import io.modules.item.entity.SetResponse; +import io.modules.item.service.CertificatesService; +import io.modules.item.service.FrontUserService; +import io.modules.item.service.SetRequestService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 证书表 + */ +@RestController +@RequestMapping("/sys/certificate") +@Tag(name="证书表") +@CrossOrigin +public class CertificatesController { + @Autowired + private CertificatesService certificatesService; + @Autowired + private SetRequestService setRequestService; + @Autowired + private FrontUserService userService; + @Value("${upload.url}") + private String uploadUrl; + + @GetMapping("page") + @Operation(summary = "分页") + @Parameters({ + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", in = ParameterIn.QUERY, required = true, ref="int") , + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", in = ParameterIn.QUERY,required = true, ref="int") , + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段", in = ParameterIn.QUERY, ref="String") , + @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)", in = ParameterIn.QUERY, ref="String") + }) + public Result> page(@Parameter(hidden = true) @RequestParam Map params){ + PageData page = certificatesService.page(params); + List collect = page.getList().stream().map(e -> { + // 拼接域名 + e.setImg(uploadUrl + e.getImg()); + Long userId = e.getUserId(); + UserDTO userDTO = userService.get(userId); + e.setUser(userDTO); + return e; // 返回修改后的对象 + }).collect(Collectors.toList()); + page.setList(collect); + return new Result>().ok(page); + } + + @PostMapping + @Operation(summary = "保存") + public Result save(@RequestBody CertificatesDTO dto){ + //效验数据 + ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); + dto.setImg(dto.getImg().replace(uploadUrl,"")); + certificatesService.save(dto); + return new Result(); + } + + @PutMapping + @Operation(summary = "修改") + public Result update(@RequestBody CertificatesDTO dto){ + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); + dto.setImg(dto.getImg().replace(uploadUrl,"")); + certificatesService.update(dto); + return new Result(); + } + + @PutMapping("block") + @Operation(summary = "上链") + public Result book(@RequestBody CertificatesDTO dto){ + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); + dto.setImg(dto.getImg().replace(uploadUrl,"")); + SetResponse setResponse = setRequestService.sendSetRequest(String.valueOf(dto.getId()), dto.toString()); + dto.setBlockchainTxId(setResponse.getData()); + dto.setIsBlock(1); + certificatesService.update(dto); + return new Result(); + } + + + @DeleteMapping + @Operation(summary = "删除") + public Result delete(@RequestBody Long[] ids){ + //效验数据 + AssertUtils.isArrayEmpty(ids, "id"); + certificatesService.delete(ids); + return new Result(); + } + +} diff --git a/admin/src/main/java/io/modules/sys/controller/IndexController.java b/admin/src/main/java/io/modules/sys/controller/IndexController.java new file mode 100644 index 0000000..87bbdc1 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/controller/IndexController.java @@ -0,0 +1,20 @@ +package io.modules.sys.controller; + +import io.common.utils.Result; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 首页提示 + * + + */ +@RestController +public class IndexController { + + @GetMapping("/") + public Result index(){ + String tips = "你好,已启动,请启动ui,才能访问页面!"; + return new Result().ok(tips); + } +} diff --git a/admin/src/main/java/io/modules/sys/controller/SysDeptController.java b/admin/src/main/java/io/modules/sys/controller/SysDeptController.java new file mode 100644 index 0000000..799203d --- /dev/null +++ b/admin/src/main/java/io/modules/sys/controller/SysDeptController.java @@ -0,0 +1,92 @@ + + +package io.modules.sys.controller; + +import io.common.annotation.LogOperation; +import io.common.utils.Result; +import io.common.validator.AssertUtils; +import io.common.validator.ValidatorUtils; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.modules.sys.dto.SysDeptDTO; +import io.modules.sys.service.SysDeptService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; + +/** + * 部门管理 + * + + */ +@RestController +@RequestMapping("/sys/dept") +@Tag(name = "部门管理") +@AllArgsConstructor +public class SysDeptController { + private final SysDeptService sysDeptService; + + @GetMapping("list") + @Operation(summary = "列表") + @RequiresPermissions("sys:dept:list") + public Result> list() { + List list = sysDeptService.list(new HashMap<>(1)); + + return new Result>().ok(list); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + @RequiresPermissions("sys:dept:info") + public Result get(@PathVariable("id") Long id) { + SysDeptDTO data = sysDeptService.get(id); + + return new Result().ok(data); + } + + @PostMapping + @Operation(summary = "保存") + @LogOperation("保存") + @RequiresPermissions("sys:dept:save") + public Result save(@RequestBody SysDeptDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); + + sysDeptService.save(dto); + + return new Result(); + } + + @PutMapping + @Operation(summary = "修改") + @LogOperation("修改") + @RequiresPermissions("sys:dept:update") + public Result update(@RequestBody SysDeptDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); + + sysDeptService.update(dto); + + return new Result(); + } + + @DeleteMapping("{id}") + @Operation(summary = "删除") + @LogOperation("删除") + @RequiresPermissions("sys:dept:delete") + public Result delete(@PathVariable("id") Long id) { + //效验数据 + AssertUtils.isNull(id, "id"); + + sysDeptService.delete(id); + + return new Result(); + } + +} diff --git a/admin/src/main/java/io/modules/sys/controller/SysDictDataController.java b/admin/src/main/java/io/modules/sys/controller/SysDictDataController.java new file mode 100644 index 0000000..d67c693 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/controller/SysDictDataController.java @@ -0,0 +1,104 @@ + + +package io.modules.sys.controller; + +import io.common.annotation.LogOperation; +import io.common.constant.Constant; +import io.common.page.PageData; +import io.common.utils.Result; +import io.common.validator.AssertUtils; +import io.common.validator.ValidatorUtils; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.modules.sys.dto.SysDictDataDTO; +import io.modules.sys.service.SysDictDataService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * 字典数据 + * + + */ +@RestController +@RequestMapping("sys/dict/data") +@Tag(name = "字典数据") +@AllArgsConstructor +public class SysDictDataController { + private final SysDictDataService sysDictDataService; + + @GetMapping("page") + @Operation(summary = "字典数据") + @Parameters({ + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", in = ParameterIn.QUERY, required = true, ref = "int"), + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", in = ParameterIn.QUERY, required = true, ref = "int"), + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段", in = ParameterIn.QUERY, ref = "String"), + @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)", in = ParameterIn.QUERY, ref = "String"), + @Parameter(name = "dictLabel", description = "字典标签", in = ParameterIn.QUERY, ref = "String"), + @Parameter(name = "dictValue", description = "字典值", in = ParameterIn.QUERY, ref = "String") + }) + @RequiresPermissions("sys:dict:page") + public Result> page(@Parameter(hidden = true) @RequestParam Map params) { + //字典类型 + PageData page = sysDictDataService.page(params); + + return new Result>().ok(page); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + @RequiresPermissions("sys:dict:info") + public Result get(@PathVariable("id") Long id) { + SysDictDataDTO data = sysDictDataService.get(id); + + return new Result().ok(data); + } + + @PostMapping + @Operation(summary = "保存") + @LogOperation("保存") + @RequiresPermissions("sys:dict:save") + public Result save(@RequestBody SysDictDataDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, DefaultGroup.class); + + sysDictDataService.save(dto); + + return new Result(); + } + + @PutMapping + @Operation(summary = "修改") + @LogOperation("修改") + @RequiresPermissions("sys:dict:update") + public Result update(@RequestBody SysDictDataDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); + + sysDictDataService.update(dto); + + return new Result(); + } + + @DeleteMapping + @Operation(summary = "删除") + @LogOperation("删除") + @RequiresPermissions("sys:dict:delete") + public Result delete(@RequestBody Long[] ids) { + //效验数据 + AssertUtils.isArrayEmpty(ids, "id"); + + sysDictDataService.delete(ids); + + return new Result(); + } + +} diff --git a/admin/src/main/java/io/modules/sys/controller/SysDictTypeController.java b/admin/src/main/java/io/modules/sys/controller/SysDictTypeController.java new file mode 100644 index 0000000..3f2bf18 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/controller/SysDictTypeController.java @@ -0,0 +1,112 @@ + + +package io.modules.sys.controller; + +import io.common.annotation.LogOperation; +import io.common.constant.Constant; +import io.common.page.PageData; +import io.common.utils.Result; +import io.common.validator.AssertUtils; +import io.common.validator.ValidatorUtils; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.modules.sys.dto.SysDictTypeDTO; +import io.modules.sys.entity.DictType; +import io.modules.sys.service.SysDictTypeService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +/** + * 字典类型 + */ +@RestController +@RequestMapping("sys/dict/type") +@Tag(name = "字典类型") +@AllArgsConstructor +public class SysDictTypeController { + private final SysDictTypeService sysDictTypeService; + + @GetMapping("page") + @Operation(summary = "字典类型") + @Parameters({ + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", in = ParameterIn.QUERY, required = true, ref = "int"), + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", in = ParameterIn.QUERY, required = true, ref = "int"), + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段", in = ParameterIn.QUERY, ref = "String"), + @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)", in = ParameterIn.QUERY, ref = "String"), + @Parameter(name = "dictType", description = "字典类型", in = ParameterIn.QUERY, ref = "String"), + @Parameter(name = "dictName", description = "字典名称", in = ParameterIn.QUERY, ref = "String") + }) + @RequiresPermissions("sys:dict:page") + public Result> page(@Parameter(hidden = true) @RequestParam Map params) { + //字典类型 + PageData page = sysDictTypeService.page(params); + + return new Result>().ok(page); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + @RequiresPermissions("sys:dict:info") + public Result get(@PathVariable("id") Long id) { + SysDictTypeDTO data = sysDictTypeService.get(id); + + return new Result().ok(data); + } + + @PostMapping + @Operation(summary = "保存") + @LogOperation("保存") + @RequiresPermissions("sys:dict:save") + public Result save(@RequestBody SysDictTypeDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, DefaultGroup.class); + + sysDictTypeService.save(dto); + + return new Result(); + } + + @PutMapping + @Operation(summary = "修改") + @LogOperation("修改") + @RequiresPermissions("sys:dict:update") + public Result update(@RequestBody SysDictTypeDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); + + sysDictTypeService.update(dto); + + return new Result(); + } + + @DeleteMapping + @Operation(summary = "删除") + @LogOperation("删除") + @RequiresPermissions("sys:dict:delete") + public Result delete(@RequestBody Long[] ids) { + //效验数据 + AssertUtils.isArrayEmpty(ids, "id"); + + sysDictTypeService.delete(ids); + + return new Result(); + } + + @GetMapping("all") + @Operation(summary = "所有字典数据") + public Result> all() { + List list = sysDictTypeService.getAllList(); + + return new Result>().ok(list); + } + +} diff --git a/admin/src/main/java/io/modules/sys/controller/SysMenuController.java b/admin/src/main/java/io/modules/sys/controller/SysMenuController.java new file mode 100644 index 0000000..0c542bb --- /dev/null +++ b/admin/src/main/java/io/modules/sys/controller/SysMenuController.java @@ -0,0 +1,132 @@ + + +package io.modules.sys.controller; + +import io.modules.security.service.ShiroService; +import io.modules.security.user.SecurityUser; +import io.modules.security.user.UserDetail; +import io.common.annotation.LogOperation; +import io.common.exception.ErrorCode; +import io.common.utils.Result; +import io.common.validator.AssertUtils; +import io.common.validator.ValidatorUtils; +import io.common.validator.group.DefaultGroup; +import io.modules.sys.dto.SysMenuDTO; +import io.modules.sys.enums.MenuTypeEnum; +import io.modules.sys.service.SysMenuService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Set; + +/** + * 菜单管理 + * + + */ +@RestController +@RequestMapping("/sys/menu") +@Tag(name = "菜单管理") +@AllArgsConstructor +public class SysMenuController { + private final SysMenuService sysMenuService; + private final ShiroService shiroService; + + @GetMapping("nav") + @Operation(summary = "导航") + public Result> nav() { + UserDetail user = SecurityUser.getUser(); + List list = sysMenuService.getUserMenuList(user, MenuTypeEnum.MENU.value()); + + return new Result>().ok(list); + } + + @GetMapping("permissions") + @Operation(summary = "权限标识") + public Result> permissions() { + UserDetail user = SecurityUser.getUser(); + Set set = shiroService.getUserPermissions(user); + + return new Result>().ok(set); + } + + @GetMapping("list") + @Operation(summary = "列表") + @Parameter(name = "type", description = "菜单类型 0:菜单 1:按钮 null:全部", in = ParameterIn.QUERY, ref = "int") + @RequiresPermissions("sys:menu:list") + public Result> list(Integer type) { + List list = sysMenuService.getAllMenuList(type); + + return new Result>().ok(list); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + @RequiresPermissions("sys:menu:info") + public Result get(@PathVariable("id") Long id) { + SysMenuDTO data = sysMenuService.get(id); + + return new Result().ok(data); + } + + @PostMapping + @Operation(summary = "保存") + @LogOperation("保存") + @RequiresPermissions("sys:menu:save") + public Result save(@RequestBody SysMenuDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, DefaultGroup.class); + + sysMenuService.save(dto); + + return new Result(); + } + + @PutMapping + @Operation(summary = "修改") + @LogOperation("修改") + @RequiresPermissions("sys:menu:update") + public Result update(@RequestBody SysMenuDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, DefaultGroup.class); + + sysMenuService.update(dto); + + return new Result(); + } + + @DeleteMapping("{id}") + @Operation(summary = "删除") + @LogOperation("删除") + @RequiresPermissions("sys:menu:delete") + public Result delete(@PathVariable("id") Long id) { + //效验数据 + AssertUtils.isNull(id, "id"); + + //判断是否有子菜单或按钮 + List list = sysMenuService.getListPid(id); + if (list.size() > 0) { + return new Result().error("先删除子菜单或按钮!"); + } + + sysMenuService.delete(id); + + return new Result(); + } + + @GetMapping("select") + @Operation(summary = "角色菜单权限") + @RequiresPermissions("sys:menu:select") + public Result> select() { + UserDetail user = SecurityUser.getUser(); + List list = sysMenuService.getUserMenuList(user, null); + + return new Result>().ok(list); + } +} diff --git a/admin/src/main/java/io/modules/sys/controller/SysParamsController.java b/admin/src/main/java/io/modules/sys/controller/SysParamsController.java new file mode 100644 index 0000000..cef6f79 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/controller/SysParamsController.java @@ -0,0 +1,120 @@ + + +package io.modules.sys.controller; + +import io.common.annotation.LogOperation; +import io.common.constant.Constant; +import io.common.page.PageData; +import io.common.utils.ExcelUtils; +import io.common.utils.Result; +import io.common.validator.AssertUtils; +import io.common.validator.ValidatorUtils; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.modules.sys.dto.SysParamsDTO; +import io.modules.sys.excel.SysParamsExcel; +import io.modules.sys.service.SysParamsService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; +import lombok.AllArgsConstructor; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + + +/** + * 参数管理 + * + + * @since 1.0.0 + */ +@RestController +@RequestMapping("sys/params") +@Tag(name = "参数管理") +@AllArgsConstructor +public class SysParamsController { + private final SysParamsService sysParamsService; + + @GetMapping("page") + @Operation(summary = "分页") + @Parameters({ + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", in = ParameterIn.QUERY, required = true, ref = "int"), + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", in = ParameterIn.QUERY, required = true, ref = "int"), + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段", in = ParameterIn.QUERY, ref = "String"), + @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)", in = ParameterIn.QUERY, ref = "String"), + @Parameter(name = "paramCode", description = "参数编码", in = ParameterIn.QUERY, ref = "String") + }) + @RequiresPermissions("sys:params:page") + public Result> page(@Parameter(hidden = true) @RequestParam Map params) { + PageData page = sysParamsService.page(params); + + return new Result>().ok(page); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + @RequiresPermissions("sys:params:info") + public Result get(@PathVariable("id") Long id) { + SysParamsDTO data = sysParamsService.get(id); + + return new Result().ok(data); + } + + @PostMapping + @Operation(summary = "保存") + @LogOperation("保存") + @RequiresPermissions("sys:params:save") + public Result save(@RequestBody SysParamsDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); + + sysParamsService.save(dto); + + return new Result(); + } + + @PutMapping + @Operation(summary = "修改") + @LogOperation("修改") + @RequiresPermissions("sys:params:update") + public Result update(@RequestBody SysParamsDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); + + sysParamsService.update(dto); + + return new Result(); + } + + @DeleteMapping + @Operation(summary = "删除") + @LogOperation("删除") + @RequiresPermissions("sys:params:delete") + public Result delete(@RequestBody Long[] ids) { + //效验数据 + AssertUtils.isArrayEmpty(ids, "id"); + + sysParamsService.delete(ids); + + return new Result(); + } + + @GetMapping("export") + @Operation(summary = "导出") + @LogOperation("导出") + @RequiresPermissions("sys:params:export") + @Parameter(name = "paramCode", description = "参数编码", in = ParameterIn.QUERY, ref = "String") + public void export(@Parameter(hidden = true) @RequestParam Map params, HttpServletResponse response) throws Exception { + List list = sysParamsService.list(params); + + ExcelUtils.exportExcelToTarget(response, null, "参数管理", list, SysParamsExcel.class); + } + +} diff --git a/admin/src/main/java/io/modules/sys/controller/SysRoleController.java b/admin/src/main/java/io/modules/sys/controller/SysRoleController.java new file mode 100644 index 0000000..a28b8ac --- /dev/null +++ b/admin/src/main/java/io/modules/sys/controller/SysRoleController.java @@ -0,0 +1,125 @@ + + +package io.modules.sys.controller; + +import io.common.annotation.LogOperation; +import io.common.constant.Constant; +import io.common.page.PageData; +import io.common.utils.Result; +import io.common.validator.AssertUtils; +import io.common.validator.ValidatorUtils; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.modules.sys.dto.SysRoleDTO; +import io.modules.sys.service.SysRoleDataScopeService; +import io.modules.sys.service.SysRoleMenuService; +import io.modules.sys.service.SysRoleService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 角色管理 + * + + */ +@RestController +@RequestMapping("/sys/role") +@Tag(name = "角色管理") +@AllArgsConstructor +public class SysRoleController { + private final SysRoleService sysRoleService; + private final SysRoleMenuService sysRoleMenuService; + private final SysRoleDataScopeService sysRoleDataScopeService; + + @GetMapping("page") + @Operation(summary = "分页") + @Parameters({ + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", in = ParameterIn.QUERY, required = true, ref = "int"), + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", in = ParameterIn.QUERY, required = true, ref = "int"), + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段", in = ParameterIn.QUERY, ref = "String"), + @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)", in = ParameterIn.QUERY, ref = "String"), + @Parameter(name = "name", description = "角色名", in = ParameterIn.QUERY, ref = "String") + }) + @RequiresPermissions("sys:role:page") + public Result> page(@Parameter(hidden = true) @RequestParam Map params) { + PageData page = sysRoleService.page(params); + + return new Result>().ok(page); + } + + @GetMapping("list") + @Operation(summary = "列表") + @RequiresPermissions("sys:role:list") + public Result> list() { + List data = sysRoleService.list(new HashMap<>(1)); + + return new Result>().ok(data); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + @RequiresPermissions("sys:role:info") + public Result get(@PathVariable("id") Long id) { + SysRoleDTO data = sysRoleService.get(id); + + //查询角色对应的菜单 + List menuIdList = sysRoleMenuService.getMenuIdList(id); + data.setMenuIdList(menuIdList); + + //查询角色对应的数据权限 + List deptIdList = sysRoleDataScopeService.getDeptIdList(id); + data.setDeptIdList(deptIdList); + + return new Result().ok(data); + } + + @PostMapping + @Operation(summary = "保存") + @LogOperation("保存") + @RequiresPermissions("sys:role:save") + public Result save(@RequestBody SysRoleDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); + + sysRoleService.save(dto); + + return new Result(); + } + + @PutMapping + @Operation(summary = "修改") + @LogOperation("修改") + @RequiresPermissions("sys:role:update") + public Result update(@RequestBody SysRoleDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); + + sysRoleService.update(dto); + + return new Result(); + } + + @DeleteMapping + @Operation(summary = "删除") + @LogOperation("删除") + @RequiresPermissions("sys:role:delete") + public Result delete(@RequestBody Long[] ids) { + //效验数据 + AssertUtils.isArrayEmpty(ids, "id"); + + sysRoleService.delete(ids); + + return new Result(); + } +} diff --git a/admin/src/main/java/io/modules/sys/controller/SysUserController.java b/admin/src/main/java/io/modules/sys/controller/SysUserController.java new file mode 100644 index 0000000..8054b1f --- /dev/null +++ b/admin/src/main/java/io/modules/sys/controller/SysUserController.java @@ -0,0 +1,141 @@ + + +package io.modules.sys.controller; + +import io.modules.security.password.PasswordUtils; +import io.modules.security.user.SecurityUser; +import io.modules.security.user.UserDetail; +import io.common.annotation.LogOperation; +import io.common.constant.Constant; +import io.common.exception.ErrorCode; +import io.common.page.PageData; +import io.common.utils.ConvertUtils; +import io.common.utils.ExcelUtils; +import io.common.utils.Result; +import io.common.validator.AssertUtils; +import io.common.validator.ValidatorUtils; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.modules.sys.dto.PasswordDTO; +import io.modules.sys.dto.SysUserDTO; +import io.modules.sys.excel.SysUserExcel; +import io.modules.sys.service.SysRoleUserService; +import io.modules.sys.service.SysUserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; +import lombok.AllArgsConstructor; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * 用户管理 + * + + */ +@RestController +@RequestMapping("/sys/user") +@Tag(name = "用户管理") +@AllArgsConstructor +public class SysUserController { + private final SysUserService sysUserService; + private final SysRoleUserService sysRoleUserService; + + @GetMapping("page") + @Operation(summary = "分页") + @Parameters({ + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", in = ParameterIn.QUERY, required = true, ref = "int"), + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", in = ParameterIn.QUERY, required = true, ref = "int"), + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段", in = ParameterIn.QUERY, ref = "String"), + @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)", in = ParameterIn.QUERY, ref = "String"), + @Parameter(name = "username", description = "用户名", in = ParameterIn.QUERY, ref = "String"), + @Parameter(name = "gender", description = "性别", in = ParameterIn.QUERY, ref = "String"), + @Parameter(name = "deptId", description = "部门ID", in = ParameterIn.QUERY, ref = "String") + }) + @RequiresPermissions("sys:user:page") + public Result> page(@Parameter(hidden = true) @RequestParam Map params) { + PageData page = sysUserService.page(params); + + return new Result>().ok(page); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + @RequiresPermissions("sys:user:info") + public Result get(@PathVariable("id") Long id) { + SysUserDTO data = sysUserService.get(id); + //用户角色列表 + List roleIdList = sysRoleUserService.getRoleIdList(id); + data.setRoleIdList(roleIdList); + return new Result().ok(data); + } + + @GetMapping("info") + @Operation(summary = "登录用户信息") + public Result info() { + SysUserDTO data = ConvertUtils.sourceToTarget(SecurityUser.getUser(), SysUserDTO.class); + return new Result().ok(data); + } + + @PutMapping("password") + @Operation(summary = "修改密码") + @LogOperation("修改密码") + public Result password(@RequestBody PasswordDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto); + UserDetail user = SecurityUser.getUser(); + //原密码不正确 + if (!PasswordUtils.matches(dto.getPassword(), user.getPassword())) { + return new Result().error("原密码不正确!"); + } + sysUserService.updatePassword(user.getId(), dto.getNewPassword()); + return new Result(); + } + @PostMapping + @Operation(summary = "保存") + @LogOperation("保存") + @RequiresPermissions("sys:user:save") + public Result save(@RequestBody SysUserDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); + sysUserService.save(dto); + return new Result(); + } + @PutMapping + @Operation(summary = "修改") + @LogOperation("修改") + @RequiresPermissions("sys:user:update") + public Result update(@RequestBody SysUserDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); + sysUserService.update(dto); + return new Result(); + } + @DeleteMapping + @Operation(summary = "删除") + @LogOperation("删除") + @RequiresPermissions("sys:user:delete") + public Result delete(@RequestBody Long[] ids) { + //效验数据 + AssertUtils.isArrayEmpty(ids, "id"); + sysUserService.deleteBatchIds(Arrays.asList(ids)); + return new Result(); + } + @GetMapping("export") + @Operation(summary = "导出") + @LogOperation("导出") + @RequiresPermissions("sys:user:export") + @Parameter(name = "username", description = "用户名", in = ParameterIn.QUERY, ref = "String") + public void export(@Parameter(hidden = true) @RequestParam Map params, HttpServletResponse response) throws Exception { + List list = sysUserService.list(params); + ExcelUtils.exportExcelToTarget(response, null, "用户管理", list, SysUserExcel.class); + } +} diff --git a/admin/src/main/java/io/modules/sys/controller/UserController.java b/admin/src/main/java/io/modules/sys/controller/UserController.java new file mode 100644 index 0000000..7530083 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/controller/UserController.java @@ -0,0 +1,97 @@ +package io.modules.sys.controller; + +import cn.hutool.crypto.digest.DigestUtil; +import io.common.annotation.LogOperation; +import io.common.constant.Constant; +import io.common.page.PageData; +import io.common.utils.ExcelUtils; +import io.common.utils.Result; +import io.common.validator.AssertUtils; +import io.common.validator.ValidatorUtils; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.modules.item.dto.UserDTO; +import io.modules.item.service.FrontUserService; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import jakarta.servlet.http.HttpServletResponse; +import java.util.List; +import java.util.Map; +/** + * 用户 + */ +@RestController +@RequestMapping("/sys/user-front") +@Tag(name="用户") +public class UserController { + @Autowired + private FrontUserService userService; + + @GetMapping("page") + @Operation(summary = "分页") + @Parameters({ + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", in = ParameterIn.QUERY, required = true, ref="int") , + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", in = ParameterIn.QUERY,required = true, ref="int") , + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段", in = ParameterIn.QUERY, ref="String") , + @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)", in = ParameterIn.QUERY, ref="String") + }) + public Result> page(@Parameter(hidden = true) @RequestParam Map params){ + PageData page = userService.page(params); + return new Result>().ok(page); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + public Result get(@PathVariable("id") Long id){ + UserDTO data = userService.get(id); + return new Result().ok(data); + } + + @PostMapping + @Operation(summary = "保存") + @LogOperation("保存") + public Result save(@RequestBody UserDTO dto){ + //效验数据 + ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); + if (StringUtils.isNotBlank(dto.getPassword())){ + dto.setPassword(DigestUtil.sha256Hex(dto.getPassword())); + } + userService.save(dto); + return new Result(); + } + + @PutMapping + @Operation(summary = "修改") + @LogOperation("修改") + public Result update(@RequestBody UserDTO dto){ + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); + if (StringUtils.isNotBlank(dto.getPassword())){ + dto.setPassword(DigestUtil.sha256Hex(dto.getPassword())); + } + userService.update(dto); + + return new Result(); + } + + @DeleteMapping("{id}") + @Operation(summary = "删除") + @LogOperation("删除") + public Result delete(@PathVariable Long id){ + + Long[] ids = new Long[] { id }; + //效验数据 + AssertUtils.isArrayEmpty(ids, "id"); + userService.delete(ids); + return new Result(); + } +} diff --git a/admin/src/main/java/io/modules/sys/dao/SysDeptDao.java b/admin/src/main/java/io/modules/sys/dao/SysDeptDao.java new file mode 100644 index 0000000..5075e7f --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dao/SysDeptDao.java @@ -0,0 +1,35 @@ + + +package io.modules.sys.dao; + +import io.modules.sys.entity.SysDeptEntity; +import io.common.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; +import java.util.Map; + +/** + * 部门管理 + * + + */ +@Mapper +public interface SysDeptDao extends BaseDao { + + List getList(Map params); + + SysDeptEntity getById(Long id); + + /** + * 获取所有部门的id、pid列表 + */ + List getIdAndPidList(); + + /** + * 根据部门ID,获取所有子部门ID列表 + * @param id 部门ID + */ + List getSubDeptIdList(String id); + +} diff --git a/admin/src/main/java/io/modules/sys/dao/SysDictDataDao.java b/admin/src/main/java/io/modules/sys/dao/SysDictDataDao.java new file mode 100644 index 0000000..9a158f9 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dao/SysDictDataDao.java @@ -0,0 +1,24 @@ + + +package io.modules.sys.dao; + +import io.modules.sys.entity.DictData; +import io.modules.sys.entity.SysDictDataEntity; +import io.common.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 字典数据 + * + + */ +@Mapper +public interface SysDictDataDao extends BaseDao { + + /** + * 字典数据列表 + */ + List getDictDataList(); +} diff --git a/admin/src/main/java/io/modules/sys/dao/SysDictTypeDao.java b/admin/src/main/java/io/modules/sys/dao/SysDictTypeDao.java new file mode 100644 index 0000000..30bea43 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dao/SysDictTypeDao.java @@ -0,0 +1,25 @@ + + +package io.modules.sys.dao; + +import io.modules.sys.entity.DictType; +import io.modules.sys.entity.SysDictTypeEntity; +import io.common.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 字典类型 + * + + */ +@Mapper +public interface SysDictTypeDao extends BaseDao { + + /** + * 字典类型列表 + */ + List getDictTypeList(); + +} diff --git a/admin/src/main/java/io/modules/sys/dao/SysMenuDao.java b/admin/src/main/java/io/modules/sys/dao/SysMenuDao.java new file mode 100644 index 0000000..852ba0d --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dao/SysMenuDao.java @@ -0,0 +1,54 @@ + + +package io.modules.sys.dao; + +import io.modules.sys.entity.SysMenuEntity; +import io.common.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 菜单管理 + * + + */ +@Mapper +public interface SysMenuDao extends BaseDao { + + SysMenuEntity getById(@Param("id") Long id); + + /** + * 查询所有菜单列表 + * + * @param menuType 菜单类型 + */ + List getMenuList(@Param("menuType") Integer menuType); + + /** + * 查询用户菜单列表 + * + * @param userId 用户ID + * @param menuType 菜单类型 + */ + List getUserMenuList(@Param("userId") Long userId, @Param("menuType") Integer menuType); + + /** + * 查询用户权限列表 + * @param userId 用户ID + */ + List getUserPermissionsList(Long userId); + + /** + * 查询所有权限列表 + */ + List getPermissionsList(); + + /** + * 根据父菜单,查询子菜单 + * @param pid 父菜单ID + */ + List getListPid(Long pid); + +} diff --git a/admin/src/main/java/io/modules/sys/dao/SysParamsDao.java b/admin/src/main/java/io/modules/sys/dao/SysParamsDao.java new file mode 100644 index 0000000..57545b5 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dao/SysParamsDao.java @@ -0,0 +1,40 @@ + + +package io.modules.sys.dao; + +import io.modules.sys.entity.SysParamsEntity; +import io.common.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 参数管理 + * + + * @since 1.0.0 + */ +@Mapper +public interface SysParamsDao extends BaseDao { + /** + * 根据参数编码,查询value + * @param paramCode 参数编码 + * @return 参数值 + */ + String getValueByCode(String paramCode); + + /** + * 获取参数编码列表 + * @param ids ids + * @return 返回参数编码列表 + */ + List getParamCodeList(Long[] ids); + + /** + * 根据参数编码,更新value + * @param paramCode 参数编码 + * @param paramValue 参数值 + */ + int updateValueByCode(@Param("paramCode") String paramCode, @Param("paramValue") String paramValue); +} diff --git a/admin/src/main/java/io/modules/sys/dao/SysRoleDao.java b/admin/src/main/java/io/modules/sys/dao/SysRoleDao.java new file mode 100644 index 0000000..94f0a04 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dao/SysRoleDao.java @@ -0,0 +1,18 @@ + + +package io.modules.sys.dao; + +import io.modules.sys.entity.SysRoleEntity; +import io.common.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; + +/** + * 角色管理 + * + + */ +@Mapper +public interface SysRoleDao extends BaseDao { + + +} diff --git a/admin/src/main/java/io/modules/sys/dao/SysRoleDataScopeDao.java b/admin/src/main/java/io/modules/sys/dao/SysRoleDataScopeDao.java new file mode 100644 index 0000000..8482377 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dao/SysRoleDataScopeDao.java @@ -0,0 +1,35 @@ + + +package io.modules.sys.dao; + +import io.modules.sys.entity.SysRoleDataScopeEntity; +import io.common.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 角色数据权限 + * + + * @since 1.0.0 + */ +@Mapper +public interface SysRoleDataScopeDao extends BaseDao { + + /** + * 根据角色ID,获取部门ID列表 + */ + List getDeptIdList(Long roleId); + + /** + * 获取用户的部门数据权限列表 + */ + List getDataScopeList(Long userId); + + /** + * 根据角色id,删除角色数据权限关系 + * @param roleIds 角色ids + */ + void deleteByRoleIds(Long[] roleIds); +} diff --git a/admin/src/main/java/io/modules/sys/dao/SysRoleMenuDao.java b/admin/src/main/java/io/modules/sys/dao/SysRoleMenuDao.java new file mode 100644 index 0000000..d42c3b4 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dao/SysRoleMenuDao.java @@ -0,0 +1,35 @@ + + +package io.modules.sys.dao; + +import io.modules.sys.entity.SysRoleMenuEntity; +import io.common.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 角色与菜单对应关系 + * + + */ +@Mapper +public interface SysRoleMenuDao extends BaseDao { + + /** + * 根据角色ID,获取菜单ID列表 + */ + List getMenuIdList(Long roleId); + + /** + * 根据角色id,删除角色菜单关系 + * @param roleIds 角色ids + */ + void deleteByRoleIds(Long[] roleIds); + + /** + * 根据菜单id,删除角色菜单关系 + * @param menuId 菜单id + */ + void deleteByMenuId(Long menuId); +} diff --git a/admin/src/main/java/io/modules/sys/dao/SysRoleUserDao.java b/admin/src/main/java/io/modules/sys/dao/SysRoleUserDao.java new file mode 100644 index 0000000..cbcd7ce --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dao/SysRoleUserDao.java @@ -0,0 +1,39 @@ + + +package io.modules.sys.dao; + +import io.modules.sys.entity.SysRoleUserEntity; +import io.common.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 角色用户关系 + * + + * @since 1.0.0 + */ +@Mapper +public interface SysRoleUserDao extends BaseDao { + + /** + * 根据角色ids,删除角色用户关系 + * @param roleIds 角色ids + */ + void deleteByRoleIds(Long[] roleIds); + + /** + * 根据用户id,删除角色用户关系 + * @param userIds 用户ids + */ + void deleteByUserIds(Long[] userIds); + + /** + * 角色ID列表 + * @param userId 用户ID + * + * @return + */ + List getRoleIdList(Long userId); +} diff --git a/admin/src/main/java/io/modules/sys/dao/SysUserDao.java b/admin/src/main/java/io/modules/sys/dao/SysUserDao.java new file mode 100644 index 0000000..cd3256f --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dao/SysUserDao.java @@ -0,0 +1,38 @@ + + +package io.modules.sys.dao; + +import io.modules.sys.entity.SysUserEntity; +import io.common.dao.BaseDao; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 系统用户 + * + + */ +@Mapper +public interface SysUserDao extends BaseDao { + + List getList(Map params); + + SysUserEntity getById(Long id); + + SysUserEntity getByUsername(String username); + + int updatePassword(@Param("id") Long id, @Param("newPassword") String newPassword); + + /** + * 根据部门ID,查询用户数 + */ + int getCountByDeptId(Long deptId); + + /** + * 根据部门ID,查询用户ID列表 + */ + List getUserIdListByDeptId(List deptIdList); +} diff --git a/admin/src/main/java/io/modules/sys/dto/PasswordDTO.java b/admin/src/main/java/io/modules/sys/dto/PasswordDTO.java new file mode 100644 index 0000000..190c46d --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dto/PasswordDTO.java @@ -0,0 +1,30 @@ + + +package io.modules.sys.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +import java.io.Serializable; + +/** + * 修改密码 + * + + * @since 1.0.0 + */ +@Data +@Schema(title = "修改密码") +public class PasswordDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(title = "原密码") + @NotBlank(message="{sysuser.password.require}") + private String password; + + @Schema(title = "新密码") + @NotBlank(message="{sysuser.password.require}") + private String newPassword; + +} diff --git a/admin/src/main/java/io/modules/sys/dto/SysDeptDTO.java b/admin/src/main/java/io/modules/sys/dto/SysDeptDTO.java new file mode 100644 index 0000000..75c1bfa --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dto/SysDeptDTO.java @@ -0,0 +1,76 @@ + + +package io.modules.sys.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.common.utils.TreeNode; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Null; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + * 部门管理 + * + + * @since 1.0.0 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Schema(title = "部门管理") +public class SysDeptDTO extends TreeNode implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(title = "id") + @Null(message="ID必须为空", groups = AddGroup.class) + @NotNull(message="{id.require}", groups = UpdateGroup.class) + private Long id; + + @Schema(title = "上级ID") + @NotNull(message="{sysdept.pid.require}", groups = DefaultGroup.class) + private Long pid; + + @Schema(title = "部门名称") + @NotBlank(message="{sysdept.name.require}", groups = DefaultGroup.class) + private String name; + + @Schema(title = "排序") + @Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class) + private Integer sort; + + @Schema(title = "创建时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Date createDate; + + @Schema(title = "上级部门名称") + private String parentName; + + @Override + public Long getId() { + return id; + } + + @Override + public void setId(Long id) { + this.id = id; + } + + @Override + public Long getPid() { + return pid; + } + + @Override + public void setPid(Long pid) { + this.pid = pid; + } +} diff --git a/admin/src/main/java/io/modules/sys/dto/SysDictDataDTO.java b/admin/src/main/java/io/modules/sys/dto/SysDictDataDTO.java new file mode 100644 index 0000000..113b291 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dto/SysDictDataDTO.java @@ -0,0 +1,59 @@ + + +package io.modules.sys.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Null; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 字典数据 + * + + */ +@Data +@Schema(title = "字典数据") +public class SysDictDataDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(title = "id") + @Null(message="ID必须为空", groups = AddGroup.class) + @NotNull(message="{id.require}", groups = UpdateGroup.class) + private Long id; + + @Schema(title = "字典类型ID") + @NotNull(message="{sysdict.type.require}", groups = DefaultGroup.class) + private Long dictTypeId; + + @Schema(title = "字典标签") + @NotBlank(message="{sysdict.label.require}", groups = DefaultGroup.class) + private String dictLabel; + + @Schema(title = "字典值") + private String dictValue; + + @Schema(title = "备注") + private String remark; + + @Schema(title = "排序") + @Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class) + private Integer sort; + + @Schema(title = "创建时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Date createDate; + + @Schema(title = "更新时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Date updateDate; +} diff --git a/admin/src/main/java/io/modules/sys/dto/SysDictTypeDTO.java b/admin/src/main/java/io/modules/sys/dto/SysDictTypeDTO.java new file mode 100644 index 0000000..2303f04 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dto/SysDictTypeDTO.java @@ -0,0 +1,56 @@ + + +package io.modules.sys.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Null; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 字典类型 + * + + */ +@Data +@Schema(title = "字典类型") +public class SysDictTypeDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(title = "id") + @Null(message="ID必须为空", groups = AddGroup.class) + @NotNull(message="{id.require}", groups = UpdateGroup.class) + private Long id; + + @Schema(title = "字典类型") + @NotBlank(message="{sysdict.type.require}", groups = DefaultGroup.class) + private String dictType; + + @Schema(title = "字典名称") + @NotBlank(message="{sysdict.name.require}", groups = DefaultGroup.class) + private String dictName; + + @Schema(title = "备注") + private String remark; + + @Schema(title = "排序") + @Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class) + private Integer sort; + + @Schema(title = "创建时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Date createDate; + + @Schema(title = "更新时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Date updateDate; +} diff --git a/admin/src/main/java/io/modules/sys/dto/SysMenuDTO.java b/admin/src/main/java/io/modules/sys/dto/SysMenuDTO.java new file mode 100644 index 0000000..ce8c274 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dto/SysMenuDTO.java @@ -0,0 +1,91 @@ + + +package io.modules.sys.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.common.utils.TreeNode; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Null; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.validator.constraints.Range; + +import java.io.Serializable; +import java.util.Date; + +/** + * 菜单管理 + * + + * @since 1.0.0 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Schema(title = "菜单管理") +public class SysMenuDTO extends TreeNode implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(title = "id") + @Null(message="ID必须为空", groups = AddGroup.class) + @NotNull(message="{id.require}", groups = UpdateGroup.class) + private Long id; + + @Schema(title = "上级ID") + @NotNull(message="{sysmenu.pid.require}", groups = DefaultGroup.class) + private Long pid; + + @Schema(title = "菜单名称") + @NotBlank(message="菜单名称不能为空", groups = DefaultGroup.class) + private String name; + + @Schema(title = "菜单URL") + private String url; + + @Schema(title = "类型 0:菜单 1:按钮") + @Range(min=0, max=1, message = "{sysmenu.type.range}", groups = DefaultGroup.class) + private Integer menuType; + + @Schema(title = "菜单图标") + private String icon; + + @Schema(title = "授权(多个用逗号分隔,如:sys:user:list,sys:user:save)") + private String permissions; + + @Schema(title = "排序") + @Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class) + private Integer sort; + + @Schema(title = "创建时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Date createDate; + + @Schema(title = "上级菜单名称") + private String parentName; + + @Override + public Long getId() { + return id; + } + + @Override + public void setId(Long id) { + this.id = id; + } + + @Override + public Long getPid() { + return pid; + } + + @Override + public void setPid(Long pid) { + this.pid = pid; + } + +} diff --git a/admin/src/main/java/io/modules/sys/dto/SysParamsDTO.java b/admin/src/main/java/io/modules/sys/dto/SysParamsDTO.java new file mode 100644 index 0000000..09667a4 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dto/SysParamsDTO.java @@ -0,0 +1,53 @@ + + +package io.modules.sys.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Null; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 参数管理 + * + + * @since 1.0.0 + */ +@Data +@Schema(title = "参数管理") +public class SysParamsDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(title = "id") + @Null(message="ID必须为空", groups = AddGroup.class) + @NotNull(message="{id.require}", groups = UpdateGroup.class) + private Long id; + + @Schema(title = "参数编码") + @NotBlank(message="{sysparams.paramcode.require}", groups = DefaultGroup.class) + private String paramCode; + + @Schema(title = "参数值") + @NotBlank(message="{sysparams.paramvalue.require}", groups = DefaultGroup.class) + private String paramValue; + + @Schema(title = "备注") + private String remark; + + @Schema(title = "创建时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Date createDate; + + @Schema(title = "更新时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Date updateDate; + +} diff --git a/admin/src/main/java/io/modules/sys/dto/SysRoleDTO.java b/admin/src/main/java/io/modules/sys/dto/SysRoleDTO.java new file mode 100644 index 0000000..1abf1b7 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dto/SysRoleDTO.java @@ -0,0 +1,52 @@ + + +package io.modules.sys.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Null; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 角色管理 + * + + * @since 1.0.0 + */ +@Data +@Schema(title = "角色管理") +public class SysRoleDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(title = "id") + @Null(message="ID必须为空", groups = AddGroup.class) + @NotNull(message="{id.require}", groups = UpdateGroup.class) + private Long id; + + @Schema(title = "角色名称") + @NotBlank(message="{sysrole.name.require}", groups = DefaultGroup.class) + private String name; + + @Schema(title = "备注") + private String remark; + + @Schema(title = "创建时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Date createDate; + + @Schema(title = "菜单ID列表") + private List menuIdList; + + @Schema(title = "部门ID列表") + private List deptIdList; + +} diff --git a/admin/src/main/java/io/modules/sys/dto/SysUserDTO.java b/admin/src/main/java/io/modules/sys/dto/SysUserDTO.java new file mode 100644 index 0000000..857a5a5 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dto/SysUserDTO.java @@ -0,0 +1,86 @@ + + +package io.modules.sys.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Null; +import lombok.Data; +import org.hibernate.validator.constraints.Range; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 用户管理 + * + + * @since 1.0.0 + */ +@Data +@Schema(title = "用户管理") +public class SysUserDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(title = "id") + @Null(message="ID必须为空", groups = AddGroup.class) + @NotNull(message="{id.require}", groups = UpdateGroup.class) + private Long id; + + @Schema(title = "用户名", required = true) + @NotBlank(message="{sysuser.username.require}", groups = DefaultGroup.class) + private String username; + + @Schema(title = "密码") + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + @NotBlank(message="{sysuser.password.require}", groups = AddGroup.class) + private String password; + + @Schema(title = "姓名", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message="{sysuser.realName.require}", groups = DefaultGroup.class) + private String realName; + + @Schema(title = "头像") + private String headUrl; + + @Schema(title = "性别 0:男 1:女 2:保密", required = true) + @Range(min=0, max=2, message = "{sysuser.gender.range}", groups = DefaultGroup.class) + private Integer gender; + + @Schema(title = "邮箱") + @Email(message="{sysuser.email.error}", groups = DefaultGroup.class) + private String email; + + @Schema(title = "手机号") + private String mobile; + + @Schema(title = "部门ID", required = true) + @NotNull(message="{sysuser.deptId.require}", groups = DefaultGroup.class) + private Long deptId; + + @Schema(title = "状态 0:停用 1:正常", required = true) + @Range(min=0, max=1, message = "{sysuser.status.range}", groups = DefaultGroup.class) + private Integer status; + + @Schema(title = "创建时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Date createDate; + + @Schema(title = "超级管理员 0:否 1:是") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Integer superAdmin; + + @Schema(title = "角色ID列表") + private List roleIdList; + + @Schema(title = "部门名称") + private String deptName; + +} diff --git a/admin/src/main/java/io/modules/sys/dto/SystemDTO.java b/admin/src/main/java/io/modules/sys/dto/SystemDTO.java new file mode 100644 index 0000000..5cb84d9 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/dto/SystemDTO.java @@ -0,0 +1,42 @@ + + +package io.modules.sys.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 系统数据 + * + + * @since 1.0.0 + */ +@Data +@Schema(title = "系统数据") +public class SystemDTO implements Serializable { + private static final long serialVersionUID = 1L; + + private Long sysTime; + private String osName; + private String osArch; + private String osVersion; + private String userLanguage; + private String userDir; + private Long totalPhysical; + private Long freePhysical; + private BigDecimal memoryRate; + private Integer processors; + private String jvmName; + private String javaVersion; + private String javaHome; + private Long javaTotalMemory; + private Long javaFreeMemory; + private Long javaMaxMemory; + private String userName; + private BigDecimal systemCpuLoad; + private String userTimezone; + +} diff --git a/admin/src/main/java/io/modules/sys/entity/DictData.java b/admin/src/main/java/io/modules/sys/entity/DictData.java new file mode 100644 index 0000000..aba0c18 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/entity/DictData.java @@ -0,0 +1,19 @@ + + +package io.modules.sys.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + +/** + * 字典数据 + * + + */ +@Data +public class DictData { + @JsonIgnore + private Long dictTypeId; + private String dictLabel; + private String dictValue; +} diff --git a/admin/src/main/java/io/modules/sys/entity/DictType.java b/admin/src/main/java/io/modules/sys/entity/DictType.java new file mode 100644 index 0000000..1816aac --- /dev/null +++ b/admin/src/main/java/io/modules/sys/entity/DictType.java @@ -0,0 +1,20 @@ +package io.modules.sys.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * 字典类型 + * + + */ +@Data +public class DictType { + @JsonIgnore + private Long id; + private String dictType; + private List dataList = new ArrayList<>(); +} diff --git a/admin/src/main/java/io/modules/sys/entity/SysDeptEntity.java b/admin/src/main/java/io/modules/sys/entity/SysDeptEntity.java new file mode 100644 index 0000000..ed0f864 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/entity/SysDeptEntity.java @@ -0,0 +1,55 @@ + + +package io.modules.sys.entity; + +import com.baomidou.mybatisplus.annotation.*; +import io.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 部门管理 + * + + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("sys_dept") +public class SysDeptEntity extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 上级ID + */ + private Long pid; + /** + * 所有上级ID,用逗号分开 + */ + private String pids; + /** + * 部门名称 + */ + private String name; + /** + * 排序 + */ + private Integer sort; + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long updater; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateDate; + /** + * 上级部门名称 + */ + @TableField(exist = false) + private String parentName; + +} diff --git a/admin/src/main/java/io/modules/sys/entity/SysDictDataEntity.java b/admin/src/main/java/io/modules/sys/entity/SysDictDataEntity.java new file mode 100644 index 0000000..72c7522 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/entity/SysDictDataEntity.java @@ -0,0 +1,54 @@ + + +package io.modules.sys.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 数据字典 + * + + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("sys_dict_data") +public class SysDictDataEntity extends BaseEntity { + private static final long serialVersionUID = 1L; + /** + * 字典类型ID + */ + private Long dictTypeId; + /** + * 字典标签 + */ + private String dictLabel; + /** + * 字典值 + */ + private String dictValue; + /** + * 备注 + */ + private String remark; + /** + * 排序 + */ + private Integer sort; + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long updater; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateDate; +} diff --git a/admin/src/main/java/io/modules/sys/entity/SysDictTypeEntity.java b/admin/src/main/java/io/modules/sys/entity/SysDictTypeEntity.java new file mode 100644 index 0000000..3f47718 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/entity/SysDictTypeEntity.java @@ -0,0 +1,50 @@ + + +package io.modules.sys.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 字典类型 + * + + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("sys_dict_type") +public class SysDictTypeEntity extends BaseEntity { + private static final long serialVersionUID = 1L; + /** + * 字典类型 + */ + private String dictType; + /** + * 字典名称 + */ + private String dictName; + /** + * 备注 + */ + private String remark; + /** + * 排序 + */ + private Integer sort; + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long updater; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateDate; +} diff --git a/admin/src/main/java/io/modules/sys/entity/SysMenuEntity.java b/admin/src/main/java/io/modules/sys/entity/SysMenuEntity.java new file mode 100644 index 0000000..18b8f2b --- /dev/null +++ b/admin/src/main/java/io/modules/sys/entity/SysMenuEntity.java @@ -0,0 +1,69 @@ + + +package io.modules.sys.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 菜单管理 + * + + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("sys_menu") +public class SysMenuEntity extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 父菜单ID,一级菜单为0 + */ + private Long pid; + /** + * 菜单名称 + */ + private String name; + /** + * 菜单URL + */ + private String url; + /** + * 授权(多个用逗号分隔,如:sys:user:list,sys:user:save) + */ + private String permissions; + /** + * 类型 0:菜单 1:按钮 + */ + private Integer menuType; + /** + * 菜单图标 + */ + private String icon; + /** + * 排序 + */ + private Integer sort; + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long updater; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateDate; + /** + * 上级菜单名称 + */ + @TableField(exist = false) + private String parentName; + +} diff --git a/admin/src/main/java/io/modules/sys/entity/SysParamsEntity.java b/admin/src/main/java/io/modules/sys/entity/SysParamsEntity.java new file mode 100644 index 0000000..ab71a0c --- /dev/null +++ b/admin/src/main/java/io/modules/sys/entity/SysParamsEntity.java @@ -0,0 +1,53 @@ + + +package io.modules.sys.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 参数管理 + * + + * @since 1.0.0 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("sys_params") +public class SysParamsEntity extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 参数编码 + */ + private String paramCode; + /** + * 参数值 + */ + private String paramValue; + /** + * 类型 0:系统参数 1:非系统参数 + */ + private Integer paramType; + /** + * 备注 + */ + private String remark; + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long updater; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateDate; + +} diff --git a/admin/src/main/java/io/modules/sys/entity/SysRoleDataScopeEntity.java b/admin/src/main/java/io/modules/sys/entity/SysRoleDataScopeEntity.java new file mode 100644 index 0000000..ee8120f --- /dev/null +++ b/admin/src/main/java/io/modules/sys/entity/SysRoleDataScopeEntity.java @@ -0,0 +1,31 @@ + + +package io.modules.sys.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 角色数据权限 + * + + * @since 1.0.0 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("sys_role_data_scope") +public class SysRoleDataScopeEntity extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 角色ID + */ + private Long roleId; + /** + * 部门ID + */ + private Long deptId; + +} diff --git a/admin/src/main/java/io/modules/sys/entity/SysRoleEntity.java b/admin/src/main/java/io/modules/sys/entity/SysRoleEntity.java new file mode 100644 index 0000000..256a120 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/entity/SysRoleEntity.java @@ -0,0 +1,48 @@ + + +package io.modules.sys.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 角色 + * + + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("sys_role") +public class SysRoleEntity extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 角色名称 + */ + private String name; + /** + * 备注 + */ + private String remark; + /** + * 部门ID + */ + @TableField(fill = FieldFill.INSERT) + private Long deptId; + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long updater; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateDate; +} diff --git a/admin/src/main/java/io/modules/sys/entity/SysRoleMenuEntity.java b/admin/src/main/java/io/modules/sys/entity/SysRoleMenuEntity.java new file mode 100644 index 0000000..60ff33a --- /dev/null +++ b/admin/src/main/java/io/modules/sys/entity/SysRoleMenuEntity.java @@ -0,0 +1,30 @@ + + +package io.modules.sys.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 角色菜单关系 + * + + * @since 1.0.0 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("sys_role_menu") +public class SysRoleMenuEntity extends BaseEntity { + private static final long serialVersionUID = 1L; + /** + * 角色ID + */ + private Long roleId; + /** + * 菜单ID + */ + private Long menuId; + +} diff --git a/admin/src/main/java/io/modules/sys/entity/SysRoleUserEntity.java b/admin/src/main/java/io/modules/sys/entity/SysRoleUserEntity.java new file mode 100644 index 0000000..e7e2363 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/entity/SysRoleUserEntity.java @@ -0,0 +1,31 @@ + + +package io.modules.sys.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 角色用户关系 + * + + * @since 1.0.0 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("sys_role_user") +public class SysRoleUserEntity extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 角色ID + */ + private Long roleId; + /** + * 用户ID + */ + private Long userId; + +} diff --git a/admin/src/main/java/io/modules/sys/entity/SysUserEntity.java b/admin/src/main/java/io/modules/sys/entity/SysUserEntity.java new file mode 100644 index 0000000..bc1e710 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/entity/SysUserEntity.java @@ -0,0 +1,80 @@ + + +package io.modules.sys.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 系统用户 + * + + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("sys_user") +public class SysUserEntity extends BaseEntity { + private static final long serialVersionUID = 1L; + /** + * 用户名 + */ + private String username; + /** + * 密码 + */ + private String password; + /** + * 姓名 + */ + private String realName; + /** + * 头像 + */ + private String headUrl; + /** + * 性别 0:男 1:女 2:保密 + */ + private Integer gender; + /** + * 邮箱 + */ + private String email; + /** + * 手机号 + */ + private String mobile; + /** + * 部门ID + */ + private Long deptId; + /** + * 超级管理员 0:否 1:是 + */ + private Integer superAdmin; + /** + * 状态 0:停用 1:正常 + */ + private Integer status; + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long updater; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateDate; + /** + * 部门名称 + */ + @TableField(exist=false) + private String deptName; + +} diff --git a/admin/src/main/java/io/modules/sys/enums/MenuTypeEnum.java b/admin/src/main/java/io/modules/sys/enums/MenuTypeEnum.java new file mode 100644 index 0000000..919f6e0 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/enums/MenuTypeEnum.java @@ -0,0 +1,30 @@ + + +package io.modules.sys.enums; + +/** + * 菜单类型枚举 + * + + * @since 1.0.0 + */ +public enum MenuTypeEnum { + /** + * 菜单 + */ + MENU(0), + /** + * 按钮 + */ + BUTTON(1); + + private int value; + + MenuTypeEnum(int value) { + this.value = value; + } + + public int value() { + return this.value; + } +} diff --git a/admin/src/main/java/io/modules/sys/enums/SuperAdminEnum.java b/admin/src/main/java/io/modules/sys/enums/SuperAdminEnum.java new file mode 100644 index 0000000..482ca1e --- /dev/null +++ b/admin/src/main/java/io/modules/sys/enums/SuperAdminEnum.java @@ -0,0 +1,24 @@ + + +package io.modules.sys.enums; + +/** + * 超级管理员枚举 + * + + * @since 1.0.0 + */ +public enum SuperAdminEnum { + YES(1), + NO(0); + + private int value; + + SuperAdminEnum(int value) { + this.value = value; + } + + public int value() { + return this.value; + } +} diff --git a/admin/src/main/java/io/modules/sys/enums/UserStatusEnum.java b/admin/src/main/java/io/modules/sys/enums/UserStatusEnum.java new file mode 100644 index 0000000..e5092cc --- /dev/null +++ b/admin/src/main/java/io/modules/sys/enums/UserStatusEnum.java @@ -0,0 +1,24 @@ + + +package io.modules.sys.enums; + +/** + * 用户状态 + * + + * @since 1.0.0 + */ +public enum UserStatusEnum { + DISABLE(0), + ENABLED(1); + + private int value; + + UserStatusEnum(int value) { + this.value = value; + } + + public int value() { + return this.value; + } +} diff --git a/admin/src/main/java/io/modules/sys/excel/SysParamsExcel.java b/admin/src/main/java/io/modules/sys/excel/SysParamsExcel.java new file mode 100644 index 0000000..b769f15 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/excel/SysParamsExcel.java @@ -0,0 +1,23 @@ + + +package io.modules.sys.excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +/** + * 参数管理 + * + + * @since 1.0.0 + */ +@Data +public class SysParamsExcel { + @ExcelProperty("参数编码") + private String paramCode; + @ExcelProperty("参数值") + private String paramValue; + @ExcelProperty("备注") + private String remark; + +} diff --git a/admin/src/main/java/io/modules/sys/excel/SysUserExcel.java b/admin/src/main/java/io/modules/sys/excel/SysUserExcel.java new file mode 100644 index 0000000..3661734 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/excel/SysUserExcel.java @@ -0,0 +1,41 @@ + + +package io.modules.sys.excel; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.format.DateTimeFormat; +import io.modules.sys.excel.converter.GenderConverter; +import io.modules.sys.excel.converter.StatusConverter; +import lombok.Data; + +import java.util.Date; + +/** + * 用户管理 + * + + * @since 1.0.0 + */ +@Data +public class SysUserExcel { + @ExcelProperty("用户名") + private String username; + @ExcelProperty("姓名") + private String realName; + @ExcelProperty(value = "性别", converter = GenderConverter.class) + private Integer gender; + @ExcelProperty("邮箱") + private String email; + @ExcelProperty("手机号") + private String mobile; + @ExcelProperty("部门名称") + private String deptName; + @ExcelProperty(value = "状态", converter = StatusConverter.class) + private Integer status; + @ExcelProperty("备注") + private String remark; + @DateTimeFormat("yyyy-MM-dd HH:mm:ss") + @ExcelProperty("创建时间") + private Date createDate; + +} diff --git a/admin/src/main/java/io/modules/sys/excel/converter/GenderConverter.java b/admin/src/main/java/io/modules/sys/excel/converter/GenderConverter.java new file mode 100644 index 0000000..12beedf --- /dev/null +++ b/admin/src/main/java/io/modules/sys/excel/converter/GenderConverter.java @@ -0,0 +1,45 @@ +package io.modules.sys.excel.converter; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + + +public class GenderConverter implements Converter { + + + @Override + public Class supportJavaTypeKey() { + return Integer.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public Integer convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + if(cellData.getStringValue().equals("男")){ + return 0; + }else if(cellData.getStringValue().equals("女")){ + return 1; + }else { + return 2; + } + } + + @Override + public WriteCellData convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + if(value == 0){ + return new WriteCellData<>("男"); + }else if(value == 1){ + return new WriteCellData<>("女"); + }else { + return new WriteCellData<>("保密"); + } + } +} diff --git a/admin/src/main/java/io/modules/sys/excel/converter/StatusConverter.java b/admin/src/main/java/io/modules/sys/excel/converter/StatusConverter.java new file mode 100644 index 0000000..6905dfd --- /dev/null +++ b/admin/src/main/java/io/modules/sys/excel/converter/StatusConverter.java @@ -0,0 +1,30 @@ +package io.modules.sys.excel.converter; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +public class StatusConverter implements Converter { + @Override + public Class supportJavaTypeKey() { + return Integer.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public Integer convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + return cellData.getStringValue().equals("正常") ? 1 : 0; + } + + @Override + public WriteCellData convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { + return new WriteCellData<>(value == 1 ? "正常" : "停用"); + } +} diff --git a/admin/src/main/java/io/modules/sys/service/SysDeptService.java b/admin/src/main/java/io/modules/sys/service/SysDeptService.java new file mode 100644 index 0000000..28b7e1b --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/SysDeptService.java @@ -0,0 +1,34 @@ + + +package io.modules.sys.service; + +import io.common.service.BaseService; +import io.modules.sys.dto.SysDeptDTO; +import io.modules.sys.entity.SysDeptEntity; + +import java.util.List; +import java.util.Map; + +/** + * 部门管理 + * + + */ +public interface SysDeptService extends BaseService { + + List list(Map params); + + SysDeptDTO get(Long id); + + void save(SysDeptDTO dto); + + void update(SysDeptDTO dto); + + void delete(Long id); + + /** + * 根据部门ID,获取本部门及子部门ID列表 + * @param id 部门ID + */ + List getSubDeptIdList(Long id); +} diff --git a/admin/src/main/java/io/modules/sys/service/SysDictDataService.java b/admin/src/main/java/io/modules/sys/service/SysDictDataService.java new file mode 100644 index 0000000..0b87ce2 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/SysDictDataService.java @@ -0,0 +1,29 @@ + + +package io.modules.sys.service; + +import io.common.page.PageData; +import io.common.service.BaseService; +import io.modules.sys.dto.SysDictDataDTO; +import io.modules.sys.entity.SysDictDataEntity; + +import java.util.Map; + +/** + * 数据字典 + * + + */ +public interface SysDictDataService extends BaseService { + + PageData page(Map params); + + SysDictDataDTO get(Long id); + + void save(SysDictDataDTO dto); + + void update(SysDictDataDTO dto); + + void delete(Long[] ids); + +} diff --git a/admin/src/main/java/io/modules/sys/service/SysDictTypeService.java b/admin/src/main/java/io/modules/sys/service/SysDictTypeService.java new file mode 100644 index 0000000..2d66bc6 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/SysDictTypeService.java @@ -0,0 +1,36 @@ + + +package io.modules.sys.service; + +import io.common.page.PageData; +import io.common.service.BaseService; +import io.modules.sys.dto.SysDictTypeDTO; +import io.modules.sys.entity.DictType; +import io.modules.sys.entity.SysDictTypeEntity; + +import java.util.List; +import java.util.Map; + +/** + * 数据字典 + * + + */ +public interface SysDictTypeService extends BaseService { + + PageData page(Map params); + + SysDictTypeDTO get(Long id); + + void save(SysDictTypeDTO dto); + + void update(SysDictTypeDTO dto); + + void delete(Long[] ids); + + /** + * 获取所有字典 + */ + List getAllList(); + +} diff --git a/admin/src/main/java/io/modules/sys/service/SysMenuService.java b/admin/src/main/java/io/modules/sys/service/SysMenuService.java new file mode 100644 index 0000000..7ddaf1c --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/SysMenuService.java @@ -0,0 +1,48 @@ + + +package io.modules.sys.service; + +import io.modules.security.user.UserDetail; +import io.common.service.BaseService; +import io.modules.sys.dto.SysMenuDTO; +import io.modules.sys.entity.SysMenuEntity; + +import java.util.List; + + +/** + * 菜单管理 + * + + */ +public interface SysMenuService extends BaseService { + + SysMenuDTO get(Long id); + + void save(SysMenuDTO dto); + + void update(SysMenuDTO dto); + + void delete(Long id); + + /** + * 菜单列表 + * + * @param menuType 菜单类型 + */ + List getAllMenuList(Integer menuType); + + /** + * 用户菜单列表 + * + * @param user 用户 + * @param menuType 菜单类型 + */ + List getUserMenuList(UserDetail user, Integer menuType); + + /** + * 根据父菜单,查询子菜单 + * @param pid 父菜单ID + */ + List getListPid(Long pid); +} diff --git a/admin/src/main/java/io/modules/sys/service/SysParamsService.java b/admin/src/main/java/io/modules/sys/service/SysParamsService.java new file mode 100644 index 0000000..4d7ab63 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/SysParamsService.java @@ -0,0 +1,50 @@ +package io.modules.sys.service; + +import io.common.page.PageData; +import io.common.service.BaseService; +import io.modules.sys.dto.SysParamsDTO; +import io.modules.sys.entity.SysParamsEntity; +import java.util.List; +import java.util.Map; + +/** + * 参数管理 + * + + * @since 1.0.0 + */ +public interface SysParamsService extends BaseService { + + PageData page(Map params); + + List list(Map params); + + SysParamsDTO get(Long id); + + void save(SysParamsDTO dto); + + void update(SysParamsDTO dto); + + void delete(Long[] ids); + + /** + * 根据参数编码,获取参数的value值 + * + * @param paramCode 参数编码 + */ + String getValue(String paramCode); + + /** + * 根据参数编码,获取value的Object对象 + * @param paramCode 参数编码 + * @param clazz Object对象 + */ + T getValueObject(String paramCode, Class clazz); + + /** + * 根据参数编码,更新value + * @param paramCode 参数编码 + * @param paramValue 参数值 + */ + int updateValueByCode(String paramCode, String paramValue); +} diff --git a/admin/src/main/java/io/modules/sys/service/SysRoleDataScopeService.java b/admin/src/main/java/io/modules/sys/service/SysRoleDataScopeService.java new file mode 100644 index 0000000..3e0345f --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/SysRoleDataScopeService.java @@ -0,0 +1,35 @@ + + +package io.modules.sys.service; + +import io.common.service.BaseService; +import io.modules.sys.entity.SysRoleDataScopeEntity; + +import java.util.List; + +/** + * 角色数据权限 + * + + * @since 1.0.0 + */ +public interface SysRoleDataScopeService extends BaseService { + + /** + * 根据角色ID,获取部门ID列表 + */ + List getDeptIdList(Long roleId); + + /** + * 保存或修改 + * @param roleId 角色ID + * @param deptIdList 部门ID列表 + */ + void saveOrUpdate(Long roleId, List deptIdList); + + /** + * 根据角色id,删除角色数据权限关系 + * @param roleId 角色ids + */ + void deleteByRoleIds(Long[] roleId); +} diff --git a/admin/src/main/java/io/modules/sys/service/SysRoleMenuService.java b/admin/src/main/java/io/modules/sys/service/SysRoleMenuService.java new file mode 100644 index 0000000..a4e411a --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/SysRoleMenuService.java @@ -0,0 +1,41 @@ + + +package io.modules.sys.service; + +import io.common.service.BaseService; +import io.modules.sys.entity.SysRoleMenuEntity; + +import java.util.List; + + +/** + * 角色与菜单对应关系 + * + + */ +public interface SysRoleMenuService extends BaseService { + + /** + * 根据角色ID,获取菜单ID列表 + */ + List getMenuIdList(Long roleId); + + /** + * 保存或修改 + * @param roleId 角色ID + * @param menuIdList 菜单ID列表 + */ + void saveOrUpdate(Long roleId, List menuIdList); + + /** + * 根据角色id,删除角色菜单关系 + * @param roleIds 角色ids + */ + void deleteByRoleIds(Long[] roleIds); + + /** + * 根据菜单id,删除角色菜单关系 + * @param menuId 菜单id + */ + void deleteByMenuId(Long menuId); +} diff --git a/admin/src/main/java/io/modules/sys/service/SysRoleService.java b/admin/src/main/java/io/modules/sys/service/SysRoleService.java new file mode 100644 index 0000000..8c97363 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/SysRoleService.java @@ -0,0 +1,34 @@ + + +package io.modules.sys.service; + + +import io.common.page.PageData; +import io.common.service.BaseService; +import io.modules.sys.dto.SysRoleDTO; +import io.modules.sys.entity.SysRoleEntity; + +import java.util.List; +import java.util.Map; + + +/** + * 角色 + * + + */ +public interface SysRoleService extends BaseService { + + PageData page(Map params); + + List list(Map params); + + SysRoleDTO get(Long id); + + void save(SysRoleDTO dto); + + void update(SysRoleDTO dto); + + void delete(Long[] ids); + +} diff --git a/admin/src/main/java/io/modules/sys/service/SysRoleUserService.java b/admin/src/main/java/io/modules/sys/service/SysRoleUserService.java new file mode 100644 index 0000000..c714309 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/SysRoleUserService.java @@ -0,0 +1,42 @@ + + +package io.modules.sys.service; + +import io.common.service.BaseService; +import io.modules.sys.entity.SysRoleUserEntity; + +import java.util.List; + +/** + * 角色用户关系 + * + + * @since 1.0.0 + */ +public interface SysRoleUserService extends BaseService { + + /** + * 保存或修改 + * @param userId 用户ID + * @param roleIdList 角色ID列表 + */ + void saveOrUpdate(Long userId, List roleIdList); + + /** + * 根据角色ids,删除角色用户关系 + * @param roleIds 角色ids + */ + void deleteByRoleIds(Long[] roleIds); + + /** + * 根据用户id,删除角色用户关系 + * @param userIds 用户ids + */ + void deleteByUserIds(Long[] userIds); + + /** + * 角色ID列表 + * @param userId 用户ID + */ + List getRoleIdList(Long userId); +} diff --git a/admin/src/main/java/io/modules/sys/service/SysUserService.java b/admin/src/main/java/io/modules/sys/service/SysUserService.java new file mode 100644 index 0000000..f094091 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/SysUserService.java @@ -0,0 +1,52 @@ + + +package io.modules.sys.service; + +import io.common.page.PageData; +import io.common.service.BaseService; +import io.modules.sys.dto.SysUserDTO; +import io.modules.sys.entity.SysUserEntity; + +import java.util.List; +import java.util.Map; + + +/** + * 系统用户 + * + + */ +public interface SysUserService extends BaseService { + + PageData page(Map params); + + List list(Map params); + + SysUserDTO get(Long id); + + SysUserDTO getByUsername(String username); + + void save(SysUserDTO dto); + + void update(SysUserDTO dto); + + void delete(Long[] ids); + + /** + * 修改密码 + * @param id 用户ID + * @param newPassword 新密码 + */ + void updatePassword(Long id, String newPassword); + + /** + * 根据部门ID,查询用户数 + */ + int getCountByDeptId(Long deptId); + + /** + * 根据部门ID,查询用户Id列表 + */ + List getUserIdListByDeptId(List deptIdList); + +} diff --git a/admin/src/main/java/io/modules/sys/service/impl/SysDeptServiceImpl.java b/admin/src/main/java/io/modules/sys/service/impl/SysDeptServiceImpl.java new file mode 100644 index 0000000..c287160 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/impl/SysDeptServiceImpl.java @@ -0,0 +1,160 @@ + + +package io.modules.sys.service.impl; + +import com.qiniu.util.StringUtils; +import io.modules.security.user.SecurityUser; +import io.modules.security.user.UserDetail; +import io.common.constant.Constant; +import io.common.exception.ErrorCode; +import io.common.exception.RenException; +import io.common.service.impl.BaseServiceImpl; +import io.common.utils.ConvertUtils; +import io.common.utils.TreeUtils; +import io.modules.sys.dao.SysDeptDao; +import io.modules.sys.dao.SysUserDao; +import io.modules.sys.dto.SysDeptDTO; +import io.modules.sys.entity.SysDeptEntity; +import io.modules.sys.enums.SuperAdminEnum; +import io.modules.sys.service.SysDeptService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Service +@AllArgsConstructor +public class SysDeptServiceImpl extends BaseServiceImpl implements SysDeptService { + private final SysUserDao sysUserDao; + + @Override + public List list(Map params) { + //普通管理员,只能查询所属部门及子部门的数据 + UserDetail user = SecurityUser.getUser(); + if (user.getSuperAdmin() == SuperAdminEnum.NO.value()) { + params.put("deptIdList", getSubDeptIdList(user.getDeptId())); + } + + //查询部门列表 + List entityList = baseDao.getList(params); + + List dtoList = ConvertUtils.sourceToTarget(entityList, SysDeptDTO.class); + + return TreeUtils.build(dtoList); + } + + @Override + public SysDeptDTO get(Long id) { + //超级管理员,部门ID为null + if (id == null) { + return null; + } + + SysDeptEntity entity = baseDao.getById(id); + + return ConvertUtils.sourceToTarget(entity, SysDeptDTO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(SysDeptDTO dto) { + SysDeptEntity entity = ConvertUtils.sourceToTarget(dto, SysDeptEntity.class); + + entity.setPids(getPidList(entity.getPid())); + insert(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SysDeptDTO dto) { + SysDeptEntity entity = ConvertUtils.sourceToTarget(dto, SysDeptEntity.class); + + //上级部门不能为自身 + if (entity.getId().equals(entity.getPid())) { + throw new RenException("上级部门不能为自身!"); + } + + //上级部门不能为下级部门 + List subDeptList = getSubDeptIdList(entity.getId()); + if (subDeptList.contains(entity.getPid())) { + throw new RenException("上级部门不能为下级部门"); + } + + entity.setPids(getPidList(entity.getPid())); + updateById(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long id) { + //判断是否有子部门 + List subList = getSubDeptIdList(id); + if (subList.size() > 1) { + throw new RenException("存在子部门!"); + } + + //判断部门下面是否有用户 + int count = sysUserDao.getCountByDeptId(id); + if (count > 0) { + throw new RenException("部门下面是有用户!"); + } + + //删除 + baseDao.deleteById(id); + } + + @Override + public List getSubDeptIdList(Long id) { + List deptIdList = baseDao.getSubDeptIdList("%" + id + "%"); + deptIdList.add(id); + + return deptIdList; + } + + /** + * 获取所有上级部门ID + * + * @param pid 上级ID + */ + private String getPidList(Long pid) { + //顶级部门,无上级部门 + if (Constant.DEPT_ROOT.equals(pid)) { + return Constant.DEPT_ROOT + ""; + } + + //所有部门的id、pid列表 + List deptList = baseDao.getIdAndPidList(); + + //list转map + Map map = new HashMap<>(deptList.size()); + for (SysDeptEntity entity : deptList) { + map.put(entity.getId(), entity); + } + + //递归查询所有上级部门ID列表 + List pidList = new ArrayList<>(); + getPidTree(pid, map, pidList); + + return StringUtils.join(pidList, ","); + } + + private void getPidTree(Long pid, Map map, List pidList) { + //顶级部门,无上级部门 + if (Constant.DEPT_ROOT.equals(pid)) { + return; + } + + //上级部门存在 + SysDeptEntity parent = map.get(pid); + if (parent != null) { + getPidTree(parent.getPid(), map, pidList); + } + + pidList.add(pid); + } +} diff --git a/admin/src/main/java/io/modules/sys/service/impl/SysDictDataServiceImpl.java b/admin/src/main/java/io/modules/sys/service/impl/SysDictDataServiceImpl.java new file mode 100644 index 0000000..2f5254c --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/impl/SysDictDataServiceImpl.java @@ -0,0 +1,82 @@ + + +package io.modules.sys.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.common.page.PageData; +import io.common.service.impl.BaseServiceImpl; +import io.common.utils.ConvertUtils; +import io.modules.sys.dao.SysDictDataDao; +import io.modules.sys.dto.SysDictDataDTO; +import io.modules.sys.entity.SysDictDataEntity; +import io.modules.sys.service.SysDictDataService; +import cn.hutool.core.util.StrUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.Map; + +/** + * 字典类型 + * + + */ +@Service +public class SysDictDataServiceImpl extends BaseServiceImpl implements SysDictDataService { + + @Override + public PageData page(Map params) { + IPage page = baseDao.selectPage( + getPage(params, "sort", true), + getWrapper(params) + ); + + return getPageData(page, SysDictDataDTO.class); + } + + private QueryWrapper getWrapper(Map params){ + Long dictTypeId = Long.parseLong((String) params.get("dictTypeId")); + String dictLabel = (String) params.get("dictLabel"); + String dictValue = (String) params.get("dictValue"); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("dict_type_id", dictTypeId); + wrapper.like(StrUtil.isNotBlank(dictLabel), "dict_label", dictLabel); + wrapper.like(StrUtil.isNotBlank(dictValue), "dict_value", dictValue); + + return wrapper; + } + + @Override + public SysDictDataDTO get(Long id) { + SysDictDataEntity entity = baseDao.selectById(id); + + return ConvertUtils.sourceToTarget(entity, SysDictDataDTO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(SysDictDataDTO dto) { + SysDictDataEntity entity = ConvertUtils.sourceToTarget(dto, SysDictDataEntity.class); + + insert(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SysDictDataDTO dto) { + SysDictDataEntity entity = ConvertUtils.sourceToTarget(dto, SysDictDataEntity.class); + + updateById(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long[] ids) { + //删除 + deleteBatchIds(Arrays.asList(ids)); + } + +} diff --git a/admin/src/main/java/io/modules/sys/service/impl/SysDictTypeServiceImpl.java b/admin/src/main/java/io/modules/sys/service/impl/SysDictTypeServiceImpl.java new file mode 100644 index 0000000..a45e4b1 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/impl/SysDictTypeServiceImpl.java @@ -0,0 +1,101 @@ + + +package io.modules.sys.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.common.page.PageData; +import io.common.service.impl.BaseServiceImpl; +import io.common.utils.ConvertUtils; +import io.modules.sys.dao.SysDictDataDao; +import io.modules.sys.dao.SysDictTypeDao; +import io.modules.sys.dto.SysDictTypeDTO; +import io.modules.sys.entity.DictData; +import io.modules.sys.entity.DictType; +import io.modules.sys.entity.SysDictTypeEntity; +import io.modules.sys.service.SysDictTypeService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * 字典类型 + * + + */ +@Service +@AllArgsConstructor +public class SysDictTypeServiceImpl extends BaseServiceImpl implements SysDictTypeService { + private final SysDictDataDao sysDictDataDao; + + @Override + public PageData page(Map params) { + IPage page = baseDao.selectPage( + getPage(params, "sort", true), + getWrapper(params) + ); + + return getPageData(page, SysDictTypeDTO.class); + } + + private QueryWrapper getWrapper(Map params) { + String dictType = (String) params.get("dictType"); + String dictName = (String) params.get("dictName"); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.like(StrUtil.isNotBlank(dictType), "dict_type", dictType); + wrapper.like(StrUtil.isNotBlank(dictName), "dict_name", dictName); + + return wrapper; + } + + @Override + public SysDictTypeDTO get(Long id) { + SysDictTypeEntity entity = baseDao.selectById(id); + + return ConvertUtils.sourceToTarget(entity, SysDictTypeDTO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(SysDictTypeDTO dto) { + SysDictTypeEntity entity = ConvertUtils.sourceToTarget(dto, SysDictTypeEntity.class); + + insert(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SysDictTypeDTO dto) { + SysDictTypeEntity entity = ConvertUtils.sourceToTarget(dto, SysDictTypeEntity.class); + + updateById(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long[] ids) { + //删除 + deleteBatchIds(Arrays.asList(ids)); + } + + @Override + public List getAllList() { + List typeList = baseDao.getDictTypeList(); + List dataList = sysDictDataDao.getDictDataList(); + for (DictType type : typeList) { + for (DictData data : dataList) { + if (type.getId().equals(data.getDictTypeId())) { + type.getDataList().add(data); + } + } + } + return typeList; + } + +} diff --git a/admin/src/main/java/io/modules/sys/service/impl/SysMenuServiceImpl.java b/admin/src/main/java/io/modules/sys/service/impl/SysMenuServiceImpl.java new file mode 100644 index 0000000..130797a --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/impl/SysMenuServiceImpl.java @@ -0,0 +1,102 @@ + + +package io.modules.sys.service.impl; + +import io.modules.security.user.UserDetail; +import io.common.constant.Constant; +import io.common.exception.ErrorCode; +import io.common.exception.RenException; +import io.common.service.impl.BaseServiceImpl; +import io.common.utils.ConvertUtils; +import io.common.utils.TreeUtils; +import io.modules.sys.dao.SysMenuDao; +import io.modules.sys.dto.SysMenuDTO; +import io.modules.sys.entity.SysMenuEntity; +import io.modules.sys.enums.SuperAdminEnum; +import io.modules.sys.service.SysMenuService; +import io.modules.sys.service.SysRoleMenuService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@AllArgsConstructor +public class SysMenuServiceImpl extends BaseServiceImpl implements SysMenuService { + private final SysRoleMenuService sysRoleMenuService; + + @Override + public SysMenuDTO get(Long id) { + SysMenuEntity entity = baseDao.getById(id); + + SysMenuDTO dto = ConvertUtils.sourceToTarget(entity, SysMenuDTO.class); + + return dto; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(SysMenuDTO dto) { + SysMenuEntity entity = ConvertUtils.sourceToTarget(dto, SysMenuEntity.class); + + //保存菜单 + insert(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SysMenuDTO dto) { + SysMenuEntity entity = ConvertUtils.sourceToTarget(dto, SysMenuEntity.class); + + //上级菜单不能为自身 + if (entity.getId().equals(entity.getPid())) { + throw new RenException("上级菜单不能为自身!"); + } + + //更新菜单 + updateById(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long id) { + //删除菜单 + deleteById(id); + //删除角色菜单关系 + sysRoleMenuService.deleteByMenuId(id); + } + + @Override + public List getAllMenuList(Integer menuType) { + List menuList = baseDao.getMenuList(menuType); + + List dtoList = ConvertUtils.sourceToTarget(menuList, SysMenuDTO.class); + + return TreeUtils.build(dtoList, Constant.MENU_ROOT); + } + + @Override + public List getUserMenuList(UserDetail user, Integer menuType) { + List menuList; + + //系统管理员,拥有最高权限 + if (user.getSuperAdmin() == SuperAdminEnum.YES.value()) { + menuList = baseDao.getMenuList(menuType); + } else { + menuList = baseDao.getUserMenuList(user.getId(), menuType); + } + + List dtoList = ConvertUtils.sourceToTarget(menuList, SysMenuDTO.class); + + return TreeUtils.build(dtoList); + } + + @Override + public List getListPid(Long pid) { + List menuList = baseDao.getListPid(pid); + + return ConvertUtils.sourceToTarget(menuList, SysMenuDTO.class); + } + +} diff --git a/admin/src/main/java/io/modules/sys/service/impl/SysParamsServiceImpl.java b/admin/src/main/java/io/modules/sys/service/impl/SysParamsServiceImpl.java new file mode 100644 index 0000000..b86a8d7 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/impl/SysParamsServiceImpl.java @@ -0,0 +1,123 @@ + + +package io.modules.sys.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.common.constant.Constant; +import io.common.exception.ErrorCode; +import io.common.exception.RenException; +import io.common.page.PageData; +import io.common.service.impl.BaseServiceImpl; +import io.common.utils.ConvertUtils; +import io.common.utils.JsonUtils; +import io.modules.sys.dao.SysParamsDao; +import io.modules.sys.dto.SysParamsDTO; +import io.modules.sys.entity.SysParamsEntity; +import io.modules.sys.service.SysParamsService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * 参数管理 + * + + * @since 1.0.0 + */ +@Service +@AllArgsConstructor +public class SysParamsServiceImpl extends BaseServiceImpl implements SysParamsService { + + + @Override + public PageData page(Map params) { + IPage page = baseDao.selectPage( + getPage(params, Constant.CREATE_DATE, false), + getWrapper(params) + ); + + return getPageData(page, SysParamsDTO.class); + } + + @Override + public List list(Map params) { + List entityList = baseDao.selectList(getWrapper(params)); + + return ConvertUtils.sourceToTarget(entityList, SysParamsDTO.class); + } + + private QueryWrapper getWrapper(Map params) { + String paramCode = (String) params.get("paramCode"); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("param_type", 1); + wrapper.like(StrUtil.isNotBlank(paramCode), "param_code", paramCode); + + return wrapper; + } + + @Override + public SysParamsDTO get(Long id) { + SysParamsEntity entity = baseDao.selectById(id); + + return ConvertUtils.sourceToTarget(entity, SysParamsDTO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(SysParamsDTO dto) { + SysParamsEntity entity = ConvertUtils.sourceToTarget(dto, SysParamsEntity.class); + insert(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SysParamsDTO dto) { + SysParamsEntity entity = ConvertUtils.sourceToTarget(dto, SysParamsEntity.class); + updateById(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long[] ids) { + //删除Redis数据 + List paramCodeList = baseDao.getParamCodeList(ids); + String[] paramCodes = paramCodeList.toArray(new String[paramCodeList.size()]); + //删除 + deleteBatchIds(Arrays.asList(ids)); + } + + @Override + public String getValue(String paramCode) { + return null; + } + + + @Override + public T getValueObject(String paramCode, Class clazz) { + String paramValue = getValue(paramCode); + if (StrUtil.isNotBlank(paramValue)) { + return JsonUtils.parseObject(paramValue, clazz); + } + + try { + return clazz.newInstance(); + } catch (Exception e) { + throw new RenException("参数错误!"); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int updateValueByCode(String paramCode, String paramValue) { + int count = baseDao.updateValueByCode(paramCode, paramValue); + return count; + } + +} diff --git a/admin/src/main/java/io/modules/sys/service/impl/SysRoleDataScopeServiceImpl.java b/admin/src/main/java/io/modules/sys/service/impl/SysRoleDataScopeServiceImpl.java new file mode 100644 index 0000000..1a3b2cd --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/impl/SysRoleDataScopeServiceImpl.java @@ -0,0 +1,56 @@ + + +package io.modules.sys.service.impl; + +import cn.hutool.core.collection.CollUtil; +import io.common.service.impl.BaseServiceImpl; +import io.modules.sys.dao.SysRoleDataScopeDao; +import io.modules.sys.entity.SysRoleDataScopeEntity; +import io.modules.sys.service.SysRoleDataScopeService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 角色数据权限 + * + + * @since 1.0.0 + */ +@Service +public class SysRoleDataScopeServiceImpl extends BaseServiceImpl + implements SysRoleDataScopeService { + + @Override + public List getDeptIdList(Long roleId) { + return baseDao.getDeptIdList(roleId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveOrUpdate(Long roleId, List deptIdList) { + //先删除角色数据权限关系 + deleteByRoleIds(new Long[]{roleId}); + + //角色没有一个数据权限的情况 + if(CollUtil.isEmpty(deptIdList)){ + return ; + } + + //保存角色数据权限关系 + for(Long deptId : deptIdList){ + SysRoleDataScopeEntity sysRoleDataScopeEntity = new SysRoleDataScopeEntity(); + sysRoleDataScopeEntity.setDeptId(deptId); + sysRoleDataScopeEntity.setRoleId(roleId); + + //保存 + insert(sysRoleDataScopeEntity); + } + } + + @Override + public void deleteByRoleIds(Long[] roleIds) { + baseDao.deleteByRoleIds(roleIds); + } +} diff --git a/admin/src/main/java/io/modules/sys/service/impl/SysRoleMenuServiceImpl.java b/admin/src/main/java/io/modules/sys/service/impl/SysRoleMenuServiceImpl.java new file mode 100644 index 0000000..a8c79cc --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/impl/SysRoleMenuServiceImpl.java @@ -0,0 +1,63 @@ + + +package io.modules.sys.service.impl; + +import cn.hutool.core.collection.CollUtil; +import io.common.service.impl.BaseServiceImpl; +import io.modules.sys.dao.SysRoleMenuDao; +import io.modules.sys.entity.SysRoleMenuEntity; +import io.modules.sys.service.SysRoleMenuService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + + +/** + * 角色与菜单对应关系 + * + + */ +@Service +public class SysRoleMenuServiceImpl extends BaseServiceImpl implements SysRoleMenuService { + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveOrUpdate(Long roleId, List menuIdList) { + //先删除角色菜单关系 + deleteByRoleIds(new Long[]{roleId}); + + //角色没有一个菜单权限的情况 + if(CollUtil.isEmpty(menuIdList)){ + return ; + } + + //保存角色菜单关系 + for(Long menuId : menuIdList){ + SysRoleMenuEntity sysRoleMenuEntity = new SysRoleMenuEntity(); + sysRoleMenuEntity.setMenuId(menuId); + sysRoleMenuEntity.setRoleId(roleId); + + //保存 + insert(sysRoleMenuEntity); + } + } + + @Override + public List getMenuIdList(Long roleId){ + return baseDao.getMenuIdList(roleId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteByRoleIds(Long[] roleIds) { + baseDao.deleteByRoleIds(roleIds); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteByMenuId(Long menuId) { + baseDao.deleteByMenuId(menuId); + } + +} diff --git a/admin/src/main/java/io/modules/sys/service/impl/SysRoleServiceImpl.java b/admin/src/main/java/io/modules/sys/service/impl/SysRoleServiceImpl.java new file mode 100644 index 0000000..f4df18d --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,126 @@ + + +package io.modules.sys.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.modules.security.user.SecurityUser; +import io.modules.security.user.UserDetail; +import io.modules.sys.service.*; +import io.common.constant.Constant; +import io.common.page.PageData; +import io.common.service.impl.BaseServiceImpl; +import io.common.utils.ConvertUtils; +import io.modules.sys.dao.SysRoleDao; +import io.modules.sys.dto.SysRoleDTO; +import io.modules.sys.entity.SysRoleEntity; +import io.modules.sys.enums.SuperAdminEnum; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * 角色 + * + + */ +@Service +@AllArgsConstructor +public class SysRoleServiceImpl extends BaseServiceImpl implements SysRoleService { + private final SysRoleMenuService sysRoleMenuService; + private final SysRoleDataScopeService sysRoleDataScopeService; + private final SysRoleUserService sysRoleUserService; + private final SysDeptService sysDeptService; + + @Override + public PageData page(Map params) { + IPage page = baseDao.selectPage( + getPage(params, Constant.CREATE_DATE, false), + getWrapper(params) + ); + + return getPageData(page, SysRoleDTO.class); + } + + @Override + public List list(Map params) { + List entityList = baseDao.selectList(getWrapper(params)); + + return ConvertUtils.sourceToTarget(entityList, SysRoleDTO.class); + } + + private QueryWrapper getWrapper(Map params) { + String name = (String) params.get("name"); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.like(StrUtil.isNotBlank(name), "name", name); + + //普通管理员,只能查询所属部门及子部门的数据 + UserDetail user = SecurityUser.getUser(); + if (user.getSuperAdmin() == SuperAdminEnum.NO.value()) { + List deptIdList = sysDeptService.getSubDeptIdList(user.getDeptId()); + wrapper.in(deptIdList != null, "dept_id", deptIdList); + } + + return wrapper; + } + + @Override + public SysRoleDTO get(Long id) { + SysRoleEntity entity = baseDao.selectById(id); + + return ConvertUtils.sourceToTarget(entity, SysRoleDTO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(SysRoleDTO dto) { + SysRoleEntity entity = ConvertUtils.sourceToTarget(dto, SysRoleEntity.class); + + //保存角色 + insert(entity); + + //保存角色菜单关系 + sysRoleMenuService.saveOrUpdate(entity.getId(), dto.getMenuIdList()); + + //保存角色数据权限关系 + sysRoleDataScopeService.saveOrUpdate(entity.getId(), dto.getDeptIdList()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SysRoleDTO dto) { + SysRoleEntity entity = ConvertUtils.sourceToTarget(dto, SysRoleEntity.class); + + //更新角色 + updateById(entity); + + //更新角色菜单关系 + sysRoleMenuService.saveOrUpdate(entity.getId(), dto.getMenuIdList()); + + //更新角色数据权限关系 + sysRoleDataScopeService.saveOrUpdate(entity.getId(), dto.getDeptIdList()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long[] ids) { + //删除角色 + baseDao.deleteBatchIds(Arrays.asList(ids)); + + //删除角色用户关系 + sysRoleUserService.deleteByRoleIds(ids); + + //删除角色菜单关系 + sysRoleMenuService.deleteByRoleIds(ids); + + //删除角色数据权限关系 + sysRoleDataScopeService.deleteByRoleIds(ids); + } + +} diff --git a/admin/src/main/java/io/modules/sys/service/impl/SysRoleUserServiceImpl.java b/admin/src/main/java/io/modules/sys/service/impl/SysRoleUserServiceImpl.java new file mode 100644 index 0000000..8dd1578 --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/impl/SysRoleUserServiceImpl.java @@ -0,0 +1,59 @@ + + +package io.modules.sys.service.impl; + +import cn.hutool.core.collection.CollUtil; +import io.common.service.impl.BaseServiceImpl; +import io.modules.sys.dao.SysRoleUserDao; +import io.modules.sys.entity.SysRoleUserEntity; +import io.modules.sys.service.SysRoleUserService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 角色用户关系 + * + + * @since 1.0.0 + */ +@Service +public class SysRoleUserServiceImpl extends BaseServiceImpl implements SysRoleUserService { + + @Override + public void saveOrUpdate(Long userId, List roleIdList) { + //先删除角色用户关系 + deleteByUserIds(new Long[]{userId}); + + //用户没有一个角色权限的情况 + if(CollUtil.isEmpty(roleIdList)){ + return ; + } + + //保存角色用户关系 + for(Long roleId : roleIdList){ + SysRoleUserEntity sysRoleUserEntity = new SysRoleUserEntity(); + sysRoleUserEntity.setUserId(userId); + sysRoleUserEntity.setRoleId(roleId); + + //保存 + insert(sysRoleUserEntity); + } + } + + @Override + public void deleteByRoleIds(Long[] roleIds) { + baseDao.deleteByRoleIds(roleIds); + } + + @Override + public void deleteByUserIds(Long[] userIds) { + baseDao.deleteByUserIds(userIds); + } + + @Override + public List getRoleIdList(Long userId) { + + return baseDao.getRoleIdList(userId); + } +} diff --git a/admin/src/main/java/io/modules/sys/service/impl/SysUserServiceImpl.java b/admin/src/main/java/io/modules/sys/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..b5baebc --- /dev/null +++ b/admin/src/main/java/io/modules/sys/service/impl/SysUserServiceImpl.java @@ -0,0 +1,151 @@ + + +package io.modules.sys.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.modules.security.password.PasswordUtils; +import io.modules.security.user.SecurityUser; +import io.modules.security.user.UserDetail; +import io.common.constant.Constant; +import io.common.page.PageData; +import io.common.service.impl.BaseServiceImpl; +import io.common.utils.ConvertUtils; +import io.modules.sys.dao.SysUserDao; +import io.modules.sys.dto.SysUserDTO; +import io.modules.sys.entity.SysUserEntity; +import io.modules.sys.enums.SuperAdminEnum; +import io.modules.sys.service.SysDeptService; +import io.modules.sys.service.SysRoleUserService; +import io.modules.sys.service.SysUserService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + + +/** + * 系统用户 + * + + */ +@Service +@AllArgsConstructor +public class SysUserServiceImpl extends BaseServiceImpl implements SysUserService { + private final SysRoleUserService sysRoleUserService; + private final SysDeptService sysDeptService; + + @Override + public PageData page(Map params) { + //转换成like + paramsToLike(params, "username"); + + //分页 + IPage page = getPage(params, Constant.CREATE_DATE, false); + + //普通管理员,只能查询所属部门及子部门的数据 + UserDetail user = SecurityUser.getUser(); + if (user.getSuperAdmin() == SuperAdminEnum.NO.value()) { + params.put("deptIdList", sysDeptService.getSubDeptIdList(user.getDeptId())); + } + + //查询 + List list = baseDao.getList(params); + + return getPageData(list, page.getTotal(), SysUserDTO.class); + } + + @Override + public List list(Map params) { + //普通管理员,只能查询所属部门及子部门的数据 + UserDetail user = SecurityUser.getUser(); + if (user.getSuperAdmin() == SuperAdminEnum.NO.value()) { + params.put("deptIdList", sysDeptService.getSubDeptIdList(user.getDeptId())); + } + + List entityList = baseDao.getList(params); + + return ConvertUtils.sourceToTarget(entityList, SysUserDTO.class); + } + + @Override + public SysUserDTO get(Long id) { + SysUserEntity entity = baseDao.getById(id); + + return ConvertUtils.sourceToTarget(entity, SysUserDTO.class); + } + + @Override + public SysUserDTO getByUsername(String username) { + SysUserEntity entity = baseDao.getByUsername(username); + return ConvertUtils.sourceToTarget(entity, SysUserDTO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(SysUserDTO dto) { + SysUserEntity entity = ConvertUtils.sourceToTarget(dto, SysUserEntity.class); + + //密码加密 + String password = PasswordUtils.encode(entity.getPassword()); + entity.setPassword(password); + + //保存用户 + entity.setSuperAdmin(SuperAdminEnum.NO.value()); + insert(entity); + + //保存角色用户关系 + sysRoleUserService.saveOrUpdate(entity.getId(), dto.getRoleIdList()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SysUserDTO dto) { + SysUserEntity entity = ConvertUtils.sourceToTarget(dto, SysUserEntity.class); + + //密码加密 + if (StrUtil.isBlank(dto.getPassword())) { + entity.setPassword(null); + } else { + String password = PasswordUtils.encode(entity.getPassword()); + entity.setPassword(password); + } + + //更新用户 + updateById(entity); + + //更新角色用户关系 + sysRoleUserService.saveOrUpdate(entity.getId(), dto.getRoleIdList()); + } + + @Override + public void delete(Long[] ids) { + //删除用户 + baseDao.deleteBatchIds(Arrays.asList(ids)); + + //删除角色用户关系 + sysRoleUserService.deleteByUserIds(ids); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updatePassword(Long id, String newPassword) { + newPassword = PasswordUtils.encode(newPassword); + + baseDao.updatePassword(id, newPassword); + } + + @Override + public int getCountByDeptId(Long deptId) { + return baseDao.getCountByDeptId(deptId); + } + + @Override + public List getUserIdListByDeptId(List deptIdList) { + return baseDao.getUserIdListByDeptId(deptIdList); + } + +} diff --git a/admin/src/main/resources/application-dev.yml b/admin/src/main/resources/application-dev.yml new file mode 100644 index 0000000..bbdf803 --- /dev/null +++ b/admin/src/main/resources/application-dev.yml @@ -0,0 +1,45 @@ +spring: + datasource: + druid: + #MySQL + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:33060/block_auth?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true + username: root + password: 123456 + initial-size: 10 + max-active: 100 + min-idle: 10 + max-wait: 6000 + pool-prepared-statements: true + max-pool-prepared-statement-per-connection-size: 20 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + test-while-idle: true + test-on-borrow: false + test-on-return: false + stat-view-servlet: + enabled: true + url-pattern: /druid/* +#mybatis +mybatis-plus: + mapper-locations: classpath*:/mapper/**/*.xml + #实体扫描,多个package用逗号或者分号分隔 + typeAliasesPackage: io.modules.*.entity,io.modules.*.entity + global-config: + #数据库相关配置 + db-config: + #主键类型 + id-type: AUTO + banner: false + #原生配置 + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + call-setters-on-nulls: true + jdbc-type-for-null: 'null' + configuration-properties: + prefix: + blobType: BLOB + boolValue: TRUE +upload: + url: http://localhost:18081/ diff --git a/admin/src/main/resources/application.yml b/admin/src/main/resources/application.yml new file mode 100644 index 0000000..6ab298b --- /dev/null +++ b/admin/src/main/resources/application.yml @@ -0,0 +1,57 @@ +# Tomcat +server: + tomcat: + uri-encoding: UTF-8 + threads: + max: 1000 + min-spare: 30 + port: 18080 + servlet: + context-path: / + session: + cookie: + http-only: true +knife4j: + enable: true + basic: + enable: false + username: admin + password: admin + setting: + enableFooter: false +spring: + # 环境 dev|test|prod + profiles: + active: dev + messages: + encoding: UTF-8 + basename: i18n/messages + mvc: + pathmatch: + matching-strategy: ANT_PATH_MATCHER + servlet: + multipart: + max-file-size: 100MB + max-request-size: 100MB + enabled: true +#mybatis +mybatis-plus: + mapper-locations: classpath*:/mapper/**/*.xml + #实体扫描,多个package用逗号或者分号分隔 + typeAliasesPackage: io.modules.*.entity + global-config: + #数据库相关配置 + db-config: + #主键类型 + id-type: AUTO + banner: false + #原生配置 + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + call-setters-on-nulls: true + jdbc-type-for-null: 'null' + configuration-properties: + prefix: + blobType: BLOB + boolValue: TRUE diff --git a/admin/src/main/resources/logback-spring.xml b/admin/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..5deef21 --- /dev/null +++ b/admin/src/main/resources/logback-spring.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/admin/src/main/resources/mapper/job/ScheduleJobDao.xml b/admin/src/main/resources/mapper/job/ScheduleJobDao.xml new file mode 100644 index 0000000..b4c89e5 --- /dev/null +++ b/admin/src/main/resources/mapper/job/ScheduleJobDao.xml @@ -0,0 +1,14 @@ + + + + + + + + update schedule_job set status = #{status} where id in + + #{id} + + + + diff --git a/admin/src/main/resources/mapper/job/ScheduleJobLogDao.xml b/admin/src/main/resources/mapper/job/ScheduleJobLogDao.xml new file mode 100644 index 0000000..c4e6bf2 --- /dev/null +++ b/admin/src/main/resources/mapper/job/ScheduleJobLogDao.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/admin/src/main/resources/mapper/log/SysLogErrorDao.xml b/admin/src/main/resources/mapper/log/SysLogErrorDao.xml new file mode 100644 index 0000000..9f34750 --- /dev/null +++ b/admin/src/main/resources/mapper/log/SysLogErrorDao.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/admin/src/main/resources/mapper/log/SysLogLoginDao.xml b/admin/src/main/resources/mapper/log/SysLogLoginDao.xml new file mode 100644 index 0000000..e6af96a --- /dev/null +++ b/admin/src/main/resources/mapper/log/SysLogLoginDao.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/admin/src/main/resources/mapper/log/SysLogOperationDao.xml b/admin/src/main/resources/mapper/log/SysLogOperationDao.xml new file mode 100644 index 0000000..50c8f77 --- /dev/null +++ b/admin/src/main/resources/mapper/log/SysLogOperationDao.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/admin/src/main/resources/mapper/oss/SysOssDao.xml b/admin/src/main/resources/mapper/oss/SysOssDao.xml new file mode 100644 index 0000000..e0dd770 --- /dev/null +++ b/admin/src/main/resources/mapper/oss/SysOssDao.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/admin/src/main/resources/mapper/sys/CertificatesDao.xml b/admin/src/main/resources/mapper/sys/CertificatesDao.xml new file mode 100644 index 0000000..4153eb7 --- /dev/null +++ b/admin/src/main/resources/mapper/sys/CertificatesDao.xml @@ -0,0 +1,20 @@ + + + + + + + + + delete from sys_role_menu where role_id in + + #{roleId} + + + + + delete from sys_role_menu where menu_id = #{value} + + diff --git a/admin/src/main/resources/mapper/sys/SysDeptDao.xml b/admin/src/main/resources/mapper/sys/SysDeptDao.xml new file mode 100644 index 0000000..a2843f6 --- /dev/null +++ b/admin/src/main/resources/mapper/sys/SysDeptDao.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + diff --git a/admin/src/main/resources/mapper/sys/SysDictDataDao.xml b/admin/src/main/resources/mapper/sys/SysDictDataDao.xml new file mode 100644 index 0000000..462a873 --- /dev/null +++ b/admin/src/main/resources/mapper/sys/SysDictDataDao.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/admin/src/main/resources/mapper/sys/SysDictTypeDao.xml b/admin/src/main/resources/mapper/sys/SysDictTypeDao.xml new file mode 100644 index 0000000..eb1cb96 --- /dev/null +++ b/admin/src/main/resources/mapper/sys/SysDictTypeDao.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/admin/src/main/resources/mapper/sys/SysMenuDao.xml b/admin/src/main/resources/mapper/sys/SysMenuDao.xml new file mode 100644 index 0000000..aaf77bf --- /dev/null +++ b/admin/src/main/resources/mapper/sys/SysMenuDao.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + diff --git a/admin/src/main/resources/mapper/sys/SysParamsDao.xml b/admin/src/main/resources/mapper/sys/SysParamsDao.xml new file mode 100644 index 0000000..5aa3e34 --- /dev/null +++ b/admin/src/main/resources/mapper/sys/SysParamsDao.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + update sys_params set param_value = #{paramValue} where param_code = #{paramCode} + + diff --git a/admin/src/main/resources/mapper/sys/SysRoleDao.xml b/admin/src/main/resources/mapper/sys/SysRoleDao.xml new file mode 100644 index 0000000..a426338 --- /dev/null +++ b/admin/src/main/resources/mapper/sys/SysRoleDao.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/admin/src/main/resources/mapper/sys/SysRoleDataScopeDao.xml b/admin/src/main/resources/mapper/sys/SysRoleDataScopeDao.xml new file mode 100644 index 0000000..dced4b1 --- /dev/null +++ b/admin/src/main/resources/mapper/sys/SysRoleDataScopeDao.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + delete from sys_role_data_scope where role_id in + + #{roleId} + + + + diff --git a/admin/src/main/resources/mapper/sys/SysRoleUserDao.xml b/admin/src/main/resources/mapper/sys/SysRoleUserDao.xml new file mode 100644 index 0000000..df65177 --- /dev/null +++ b/admin/src/main/resources/mapper/sys/SysRoleUserDao.xml @@ -0,0 +1,24 @@ + + + + + + + delete from sys_role_user where role_id in + + #{roleId} + + + + + delete from sys_role_user where user_id in + + #{userId} + + + + + + diff --git a/admin/src/main/resources/mapper/sys/SysUserDao.xml b/admin/src/main/resources/mapper/sys/SysUserDao.xml new file mode 100644 index 0000000..da5bff6 --- /dev/null +++ b/admin/src/main/resources/mapper/sys/SysUserDao.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + update sys_user set password = #{newPassword} where id = #{id} + + + + + + + diff --git a/admin/src/main/resources/mapper/sys/SysUserTokenDao.xml b/admin/src/main/resources/mapper/sys/SysUserTokenDao.xml new file mode 100644 index 0000000..9ea898c --- /dev/null +++ b/admin/src/main/resources/mapper/sys/SysUserTokenDao.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + update sys_user_token set token = #{token} where user_id = #{userId} + + diff --git a/common/pom.xml b/common/pom.xml new file mode 100644 index 0000000..63394b8 --- /dev/null +++ b/common/pom.xml @@ -0,0 +1,16 @@ + + + io.renren + block-identity-auth + 5.4.0 + + 4.0.0 + common + jar + common + + + ${project.artifactId} + + + diff --git a/common/src/main/java/io/common/constant/Constant.java b/common/src/main/java/io/common/constant/Constant.java new file mode 100644 index 0000000..ac1bb87 --- /dev/null +++ b/common/src/main/java/io/common/constant/Constant.java @@ -0,0 +1,119 @@ +package io.common.constant; + +/** + * 常量 + * + + */ +public interface Constant { + /** + * 成功 + */ + int SUCCESS = 1; + /** + * 失败 + */ + int FAIL = 0; + /** + * 菜单根节点标识 + */ + Long MENU_ROOT = 0L; + /** + * 部门根节点标识 + */ + Long DEPT_ROOT = 0L; + /** + * 升序 + */ + String ASC = "asc"; + /** + * 降序 + */ + String DESC = "desc"; + /** + * 创建时间字段名 + */ + String CREATE_DATE = "create_date"; + + /** + * 数据权限过滤 + */ + String SQL_FILTER = "sqlFilter"; + /** + * 当前页码 + */ + String PAGE = "page"; + /** + * 每页显示记录数 + */ + String LIMIT = "limit"; + /** + * 排序字段 + */ + String ORDER_FIELD = "orderField"; + /** + * 排序方式 + */ + String ORDER = "order"; + /** + * token header + */ + String TOKEN_HEADER = "token"; + + /** + * 云存储配置KEY + */ + String CLOUD_STORAGE_CONFIG_KEY = "CLOUD_STORAGE_CONFIG_KEY"; + + /** + * 定时任务状态 + */ + enum ScheduleStatus { + /** + * 暂停 + */ + PAUSE(0), + /** + * 正常 + */ + NORMAL(1); + + private int value; + + ScheduleStatus(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + } + + /** + * 云服务商 + */ + enum CloudService { + /** + * 七牛云 + */ + QINIU(1), + /** + * 阿里云 + */ + ALIYUN(2), + /** + * 腾讯云 + */ + QCLOUD(3); + + private int value; + + CloudService(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + } +} diff --git a/common/src/main/java/io/common/convert/DateConverter.java b/common/src/main/java/io/common/convert/DateConverter.java new file mode 100644 index 0000000..00b75e6 --- /dev/null +++ b/common/src/main/java/io/common/convert/DateConverter.java @@ -0,0 +1,70 @@ +package io.common.convert; + +import cn.hutool.core.util.StrUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.convert.converter.Converter; +import org.springframework.stereotype.Component; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 日期转换 + */ +@Component +public class DateConverter implements Converter { + private static final Logger logger = LoggerFactory.getLogger(DateConverter.class); + private static final List formatList = new ArrayList<>(5); + + static { + formatList.add("yyyy-MM"); + formatList.add("yyyy-MM-dd"); + formatList.add("yyyy-MM-dd HH:mm"); + formatList.add("yyyy-MM-dd HH:mm:ss"); + formatList.add("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); + } + + @Override + public Date convert(String source) { + String value = source.trim(); + if (StrUtil.isEmpty(value)) { + return null; + } + + if (source.matches("^\\d{4}-\\d{1,2}$")) { + return parseDate(source, formatList.get(0)); + } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) { + return parseDate(source, formatList.get(1)); + } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) { + return parseDate(source, formatList.get(2)); + } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) { + return parseDate(source, formatList.get(3)); + } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}.*T.*\\d{1,2}:\\d{1,2}:\\d{1,2}.*..*$")) { + return parseDate(source, formatList.get(4)); + } else { + throw new IllegalArgumentException("Invalid boolean value '" + source + "'"); + } + } + + /** + * 格式化日期 + * @param dateStr String 字符型日期 + * @param format String 格式 + * @return Date 日期 + */ + public Date parseDate(String dateStr, String format) { + Date date = null; + try { + DateFormat dateFormat = new SimpleDateFormat(format); + date = dateFormat.parse(dateStr); + } catch (Exception e) { + logger.error("Formatted date with date: {} and format : {} ", dateStr, format); + } + return date; + } + +} diff --git a/common/src/main/java/io/common/dao/BaseDao.java b/common/src/main/java/io/common/dao/BaseDao.java new file mode 100644 index 0000000..97eda60 --- /dev/null +++ b/common/src/main/java/io/common/dao/BaseDao.java @@ -0,0 +1,10 @@ +package io.common.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 基础Dao + */ +public interface BaseDao extends BaseMapper { + +} diff --git a/common/src/main/java/io/common/entity/BaseEntity.java b/common/src/main/java/io/common/entity/BaseEntity.java new file mode 100644 index 0000000..afbce8b --- /dev/null +++ b/common/src/main/java/io/common/entity/BaseEntity.java @@ -0,0 +1,33 @@ + + +package io.common.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 基础实体类,所有实体都需要继承 + */ +@Data +public abstract class BaseEntity implements Serializable { + /** + * id + */ + @TableId + private Long id; + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private Long creator; + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createDate; +} diff --git a/common/src/main/java/io/common/exception/ErrorCode.java b/common/src/main/java/io/common/exception/ErrorCode.java new file mode 100644 index 0000000..6f6705e --- /dev/null +++ b/common/src/main/java/io/common/exception/ErrorCode.java @@ -0,0 +1,14 @@ +package io.common.exception; + +/** + * 错误编码,由5位数字组成,前2位为模块编码,后3位为业务编码 + *

+ * 如:10001(10代表系统模块,001代表业务代码) + *

+ */ +public interface ErrorCode { + int INTERNAL_SERVER_ERROR = 500; + int UNAUTHORIZED = 401; + int NOT_NULL = 500; + +} diff --git a/common/src/main/java/io/common/exception/ExceptionUtils.java b/common/src/main/java/io/common/exception/ExceptionUtils.java new file mode 100644 index 0000000..0d5165f --- /dev/null +++ b/common/src/main/java/io/common/exception/ExceptionUtils.java @@ -0,0 +1,43 @@ +package io.common.exception; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; + +/** + * Exception工具类 + */ +public class ExceptionUtils { + + /** + * 获取异常信息 + * @param ex 异常 + * @return 返回异常信息 + */ + public static String getErrorStackTrace(Exception ex){ + StringWriter sw = null; + PrintWriter pw = null; + try { + sw = new StringWriter(); + pw = new PrintWriter(sw, true); + ex.printStackTrace(pw); + }finally { + try { + if(pw != null) { + pw.close(); + } + } catch (Exception e) { + + } + try { + if(sw != null) { + sw.close(); + } + } catch (IOException e) { + + } + } + + return sw.toString(); + } +} diff --git a/common/src/main/java/io/common/exception/RenException.java b/common/src/main/java/io/common/exception/RenException.java new file mode 100644 index 0000000..9bc2035 --- /dev/null +++ b/common/src/main/java/io/common/exception/RenException.java @@ -0,0 +1,46 @@ +package io.common.exception; + +import java.util.Arrays; + +/** + * 自定义异常 + * + */ +public class RenException extends RuntimeException { + private static final long serialVersionUID = 1L; + + private int code; + private String msg; + + public RenException(int code, String... params) { + this.code = code; + this.msg = Arrays.toString(params); + } + + public RenException(String msg) { + super(msg); + this.code = 500; + this.msg = msg; + } + + public RenException(String msg, Throwable e) { + super(msg, e); + this.code = ErrorCode.INTERNAL_SERVER_ERROR; + this.msg = msg; + } + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public int getCode() { + return code; + } + public void setCode(int code) { + this.code = code; + } + +} diff --git a/common/src/main/java/io/common/page/PageData.java b/common/src/main/java/io/common/page/PageData.java new file mode 100644 index 0000000..0cd8287 --- /dev/null +++ b/common/src/main/java/io/common/page/PageData.java @@ -0,0 +1,32 @@ +package io.common.page; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 分页工具类 + */ +@Data +@Schema(title = "分页数据") +public class PageData implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(title = "总记录数") + private int total; + + @Schema(title = "列表数据") + private List list; + + /** + * 分页 + * @param list 列表数据 + * @param total 总记录数 + */ + public PageData(List list, long total) { + this.list = list; + this.total = (int)total; + } +} diff --git a/common/src/main/java/io/common/service/BaseService.java b/common/src/main/java/io/common/service/BaseService.java new file mode 100644 index 0000000..67a4ed5 --- /dev/null +++ b/common/src/main/java/io/common/service/BaseService.java @@ -0,0 +1,106 @@ +package io.common.service; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; + +import java.io.Serializable; +import java.util.Collection; + +/** + * 基础服务接口,所有Service接口都要继承 + */ +public interface BaseService { + Class currentModelClass(); + + /** + *

+ * 插入一条记录(选择字段,策略插入) + *

+ * + * @param entity 实体对象 + */ + boolean insert(T entity); + + /** + *

+ * 插入(批量),该方法不支持 Oracle、SQL Server + *

+ * + * @param entityList 实体对象集合 + */ + boolean insertBatch(Collection entityList); + + /** + *

+ * 插入(批量),该方法不支持 Oracle、SQL Server + *

+ * + * @param entityList 实体对象集合 + * @param batchSize 插入批次数量 + */ + boolean insertBatch(Collection entityList, int batchSize); + + /** + *

+ * 根据 ID 选择修改 + *

+ * + * @param entity 实体对象 + */ + boolean updateById(T entity); + + /** + *

+ * 根据 whereEntity 条件,更新记录 + *

+ * + * @param entity 实体对象 + * @param updateWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper} + */ + boolean update(T entity, Wrapper updateWrapper); + + /** + *

+ * 根据ID 批量更新 + *

+ * + * @param entityList 实体对象集合 + */ + boolean updateBatchById(Collection entityList); + + /** + *

+ * 根据ID 批量更新 + *

+ * + * @param entityList 实体对象集合 + * @param batchSize 更新批次数量 + */ + boolean updateBatchById(Collection entityList, int batchSize); + + /** + *

+ * 根据 ID 查询 + *

+ * + * @param id 主键ID + */ + T selectById(Serializable id); + + /** + *

+ * 根据 ID 删除 + *

+ * + * @param id 主键ID + */ + boolean deleteById(Serializable id); + + /** + *

+ * 删除(根据ID 批量删除) + *

+ * + * @param idList 主键ID列表 + */ + boolean deleteBatchIds(Collection idList); +} diff --git a/common/src/main/java/io/common/service/CrudService.java b/common/src/main/java/io/common/service/CrudService.java new file mode 100644 index 0000000..05836b8 --- /dev/null +++ b/common/src/main/java/io/common/service/CrudService.java @@ -0,0 +1,25 @@ +package io.common.service; + +import io.common.page.PageData; + +import java.util.List; +import java.util.Map; + +/** + * CRUD基础服务接口 + */ +public interface CrudService extends BaseService { + + PageData page(Map params); + + List list(Map params); + + D get(Long id); + + void save(D dto); + + void update(D dto); + + void delete(Long[] ids); + +} diff --git a/common/src/main/java/io/common/service/impl/BaseServiceImpl.java b/common/src/main/java/io/common/service/impl/BaseServiceImpl.java new file mode 100644 index 0000000..e10a7ea --- /dev/null +++ b/common/src/main/java/io/common/service/impl/BaseServiceImpl.java @@ -0,0 +1,213 @@ + + +package io.common.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.enums.SqlMethod; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.core.toolkit.ReflectionKit; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; +import io.common.constant.Constant; +import io.common.page.PageData; +import io.common.service.BaseService; +import io.common.utils.ConvertUtils; +import org.apache.ibatis.binding.MapperMethod; +import org.apache.ibatis.logging.Log; +import org.apache.ibatis.logging.LogFactory; +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import java.io.Serializable; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; + +/** + * 基础服务类,所有Service都要继承 + * + + */ +public abstract class BaseServiceImpl, T> implements BaseService { + @Autowired + protected M baseDao; + protected Log log = LogFactory.getLog(getClass()); + + /** + * 获取分页对象 + * @param params 分页查询参数 + * @param defaultOrderField 默认排序字段 + * @param isAsc 排序方式 + */ + protected IPage getPage(Map params, String defaultOrderField, boolean isAsc) { + //分页参数 + long curPage = 1; + long limit = 10; + + if (params.get(Constant.PAGE) != null) { + curPage = Long.parseLong((String) params.get(Constant.PAGE)); + } + if (params.get(Constant.LIMIT) != null) { + limit = Long.parseLong((String) params.get(Constant.LIMIT)); + } + + //分页对象 + Page page = new Page<>(curPage, limit); + + //分页参数 + params.put(Constant.PAGE, page); + + //排序字段 + String orderField = (String) params.get(Constant.ORDER_FIELD); + String order = (String) params.get(Constant.ORDER); + + //前端字段排序 + if (StrUtil.isNotBlank(orderField) && StrUtil.isNotBlank(order)) { + if (Constant.ASC.equalsIgnoreCase(order)) { + return page.addOrder(OrderItem.asc(orderField)); + } else { + return page.addOrder(OrderItem.desc(orderField)); + } + } + + //没有排序字段,则不排序 + if (StrUtil.isBlank(defaultOrderField)) { + return page; + } + + //默认排序 + if (isAsc) { + page.addOrder(OrderItem.asc(defaultOrderField)); + } else { + page.addOrder(OrderItem.desc(defaultOrderField)); + } + + return page; + } + + protected PageData getPageData(List list, long total, Class target) { + List targetList = ConvertUtils.sourceToTarget(list, target); + + return new PageData<>(targetList, total); + } + + protected PageData getPageData(IPage page, Class target) { + return getPageData(page.getRecords(), page.getTotal(), target); + } + + protected void paramsToLike(Map params, String... likes) { + for (String like : likes) { + String val = (String) params.get(like); + if (StrUtil.isNotBlank(val)) { + params.put(like, "%" + val + "%"); + } else { + params.put(like, null); + } + } + } + + /** + *

+ * 判断数据库操作是否成功 + *

+ *

+ * 注意!! 该方法为 Integer 判断,不可传入 int 基本类型 + *

+ * + * @param result 数据库操作返回影响条数 + * @return boolean + */ + protected static boolean retBool(Integer result) { + return SqlHelper.retBool(result); + } + + protected Class currentMapperClass() { + return (Class) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseServiceImpl.class, 0); + } + + @Override + public Class currentModelClass() { + return (Class) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseServiceImpl.class, 1); + } + + protected String getSqlStatement(SqlMethod sqlMethod) { + return SqlHelper.getSqlStatement(this.currentMapperClass(), sqlMethod); + } + + @Override + public boolean insert(T entity) { + return BaseServiceImpl.retBool(baseDao.insert(entity)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean insertBatch(Collection entityList) { + return insertBatch(entityList, 100); + } + + /** + * 批量插入 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public boolean insertBatch(Collection entityList, int batchSize) { + String sqlStatement = getSqlStatement(SqlMethod.INSERT_ONE); + return executeBatch(entityList, batchSize, (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity)); + } + + /** + * 执行批量操作 + */ + protected boolean executeBatch(Collection list, int batchSize, BiConsumer consumer) { + return SqlHelper.executeBatch(this.currentModelClass(), this.log, list, batchSize, consumer); + } + + + @Override + public boolean updateById(T entity) { + return BaseServiceImpl.retBool(baseDao.updateById(entity)); + } + + @Override + public boolean update(T entity, Wrapper updateWrapper) { + return BaseServiceImpl.retBool(baseDao.update(entity, updateWrapper)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean updateBatchById(Collection entityList) { + return updateBatchById(entityList, 30); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean updateBatchById(Collection entityList, int batchSize) { + String sqlStatement = getSqlStatement(SqlMethod.UPDATE_BY_ID); + return executeBatch(entityList, batchSize, (sqlSession, entity) -> { + MapperMethod.ParamMap param = new MapperMethod.ParamMap<>(); + param.put(Constants.ENTITY, entity); + sqlSession.update(sqlStatement, param); + }); + } + + @Override + public T selectById(Serializable id) { + return baseDao.selectById(id); + } + + @Override + public boolean deleteById(Serializable id) { + return SqlHelper.retBool(baseDao.deleteById(id)); + } + + @Override + public boolean deleteBatchIds(Collection idList) { + return SqlHelper.retBool(baseDao.deleteBatchIds(idList)); + } +} diff --git a/common/src/main/java/io/common/service/impl/CrudServiceImpl.java b/common/src/main/java/io/common/service/impl/CrudServiceImpl.java new file mode 100644 index 0000000..e1822ee --- /dev/null +++ b/common/src/main/java/io/common/service/impl/CrudServiceImpl.java @@ -0,0 +1,74 @@ + + +package io.common.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.ReflectionKit; +import io.common.page.PageData; +import io.common.service.CrudService; +import io.common.utils.ConvertUtils; +import org.springframework.beans.BeanUtils; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * CRUD基础服务类 + * + + */ +public abstract class CrudServiceImpl, T, D> extends BaseServiceImpl implements CrudService { + + protected Class currentDtoClass() { + return (Class)ReflectionKit.getSuperClassGenericType(getClass(), CrudServiceImpl.class, 2); + } + + @Override + public PageData page(Map params) { + IPage page = baseDao.selectPage( + getPage(params, null, false), + getWrapper(params) + ); + + return getPageData(page, currentDtoClass()); + } + + @Override + public List list(Map params) { + List entityList = baseDao.selectList(getWrapper(params)); + + return ConvertUtils.sourceToTarget(entityList, currentDtoClass()); + } + + public abstract QueryWrapper getWrapper(Map params); + + @Override + public D get(Long id) { + T entity = baseDao.selectById(id); + + return ConvertUtils.sourceToTarget(entity, currentDtoClass()); + } + + @Override + public void save(D dto) { + T entity = ConvertUtils.sourceToTarget(dto, currentModelClass()); + insert(entity); + + //copy主键值到dto + BeanUtils.copyProperties(entity, dto); + } + + @Override + public void update(D dto) { + T entity = ConvertUtils.sourceToTarget(dto, currentModelClass()); + updateById(entity); + } + + @Override + public void delete(Long[] ids) { + baseDao.deleteBatchIds(Arrays.asList(ids)); + } +} diff --git a/common/src/main/java/io/common/utils/ConvertUtils.java b/common/src/main/java/io/common/utils/ConvertUtils.java new file mode 100644 index 0000000..f6f30ef --- /dev/null +++ b/common/src/main/java/io/common/utils/ConvertUtils.java @@ -0,0 +1,69 @@ +package io.common.utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * 转换工具类 + * + */ +public class ConvertUtils { + + private static Logger logger = LoggerFactory.getLogger(ConvertUtils.class); + + public static T sourceToTarget(Object source, Class target){ + if(source == null){ + return null; + } + T targetObject = null; + try { + targetObject = target.newInstance(); + BeanUtils.copyProperties(source, targetObject); + } catch (Exception e) { + logger.error("convert error ", e); + } + + return targetObject; + } + + public static List sourceToTarget(Collection sourceList, Class target){ + if(sourceList == null){ + return null; + } + + List targetList = new ArrayList<>(sourceList.size()); + try { + for(Object source : sourceList){ + T targetObject = target.newInstance(); + BeanUtils.copyProperties(source, targetObject); + targetList.add(targetObject); + } + }catch (Exception e){ + logger.error("convert error ", e); + } + + return targetList; + } + + + /** + * 拼接域名 + */ + public static String appendDomain(String img){ + String path = "https://bs.oss.xunyingcloud.cn/upload/"; + if(img == null ){ + return null; + } + if (img.contains("http")) { + return img; + } + return path + img; + } + + +} diff --git a/common/src/main/java/io/common/utils/DateUtils.java b/common/src/main/java/io/common/utils/DateUtils.java new file mode 100644 index 0000000..0c8de70 --- /dev/null +++ b/common/src/main/java/io/common/utils/DateUtils.java @@ -0,0 +1,55 @@ +package io.common.utils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * 日期处理 + * + + */ +public class DateUtils { + /** 时间格式(yyyy-MM-dd) */ + public final static String DATE_PATTERN = "yyyy-MM-dd"; + /** 时间格式(yyyy-MM-dd HH:mm:ss) */ + public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; + + /** + * 日期格式化 日期格式为:yyyy-MM-dd + * @param date 日期 + * @return 返回yyyy-MM-dd格式日期 + */ + public static String format(Date date) { + return format(date, DATE_PATTERN); + } + + /** + * 日期格式化 日期格式为:yyyy-MM-dd + * @param date 日期 + * @param pattern 格式,如:DateUtils.DATE_TIME_PATTERN + * @return 返回yyyy-MM-dd格式日期 + */ + public static String format(Date date, String pattern) { + if (date != null) { + SimpleDateFormat df = new SimpleDateFormat(pattern); + return df.format(date); + } + return null; + } + + /** + * 日期解析 + * @param date 日期 + * @param pattern 格式,如:DateUtils.DATE_TIME_PATTERN + * @return 返回Date + */ + public static Date parse(String date, String pattern) { + try { + return new SimpleDateFormat(pattern).parse(date); + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/common/src/main/java/io/common/utils/HttpContextUtils.java b/common/src/main/java/io/common/utils/HttpContextUtils.java new file mode 100644 index 0000000..b52b073 --- /dev/null +++ b/common/src/main/java/io/common/utils/HttpContextUtils.java @@ -0,0 +1,55 @@ +package io.common.utils; + +import cn.hutool.core.util.StrUtil; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.http.HttpHeaders; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + +/** + * Http + * + + */ +public class HttpContextUtils { + + public static HttpServletRequest getHttpServletRequest() { + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + if(requestAttributes == null){ + return null; + } + + return ((ServletRequestAttributes) requestAttributes).getRequest(); + } + + public static Map getParameterMap(HttpServletRequest request) { + Enumeration parameters = request.getParameterNames(); + + Map params = new HashMap<>(); + while (parameters.hasMoreElements()) { + String parameter = parameters.nextElement(); + String value = request.getParameter(parameter); + if (StrUtil.isNotBlank(value)) { + params.put(parameter, value); + } + } + + return params; + } + + public static String getDomain(){ + HttpServletRequest request = getHttpServletRequest(); + StringBuffer url = request.getRequestURL(); + return url.delete(url.length() - request.getRequestURI().length(), url.length()).toString(); + } + + public static String getOrigin(){ + HttpServletRequest request = getHttpServletRequest(); + return request.getHeader(HttpHeaders.ORIGIN); + } +} diff --git a/common/src/main/java/io/common/utils/IpUtils.java b/common/src/main/java/io/common/utils/IpUtils.java new file mode 100644 index 0000000..18d2f5c --- /dev/null +++ b/common/src/main/java/io/common/utils/IpUtils.java @@ -0,0 +1,50 @@ +package io.common.utils; + +import cn.hutool.core.util.StrUtil; +import jakarta.servlet.http.HttpServletRequest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * IP地址 + * + + */ +public class IpUtils { + private static Logger logger = LoggerFactory.getLogger(IpUtils.class); + + /** + * 获取IP地址 + * + * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址 + * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址 + */ + public static String getIpAddr(HttpServletRequest request) { + String unknown = "unknown"; + String ip = null; + try { + ip = request.getHeader("x-forwarded-for"); + if (StrUtil.isEmpty(ip) || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (StrUtil.isEmpty(ip) || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (StrUtil.isEmpty(ip) || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (StrUtil.isEmpty(ip) || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (StrUtil.isEmpty(ip) || unknown.equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + } catch (Exception e) { + logger.error("IPUtils ERROR ", e); + } + + return ip; + } + +} diff --git a/common/src/main/java/io/common/utils/JsonUtils.java b/common/src/main/java/io/common/utils/JsonUtils.java new file mode 100644 index 0000000..8e03106 --- /dev/null +++ b/common/src/main/java/io/common/utils/JsonUtils.java @@ -0,0 +1,68 @@ +package io.common.utils; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.util.ArrayList; +import java.util.List; + +/** + * JSON 工具类 + * + + */ +public class JsonUtils { + private static final ObjectMapper objectMapper = new ObjectMapper(); + + public static String toJsonString(Object object) { + try { + return objectMapper.writeValueAsString(object); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static T parseObject(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return null; + } + try { + return objectMapper.readValue(text, clazz); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static T parseObject(byte[] bytes, Class clazz) { + if (ArrayUtil.isEmpty(bytes)) { + return null; + } + try { + return objectMapper.readValue(bytes, clazz); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static T parseObject(String text, TypeReference typeReference) { + try { + return objectMapper.readValue(text, typeReference); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static List parseArray(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return new ArrayList<>(); + } + try { + return objectMapper.readValue(text, objectMapper.getTypeFactory().constructCollectionType(List.class, clazz)); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + +} diff --git a/common/src/main/java/io/common/utils/Result.java b/common/src/main/java/io/common/utils/Result.java new file mode 100644 index 0000000..58491cc --- /dev/null +++ b/common/src/main/java/io/common/utils/Result.java @@ -0,0 +1,76 @@ +package io.common.utils; + +import io.common.exception.ErrorCode; +import io.swagger.v3.oas.annotations.media.Schema; + +import java.io.Serializable; + +/** + * 响应数据 + * + + * @since 1.0.0 + */ +@Schema(title = "响应") +public class Result implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 编码:0表示成功,其他值表示失败 + */ + @Schema(title = "编码:0表示成功,其他值表示失败") + private int code = 0; + /** + * 消息内容 + */ + @Schema(title = "消息内容") + private String msg = "success"; + /** + * 响应数据 + */ + @Schema(title = "响应数据") + private T data; + + public Result ok(T data) { + this.setData(data); + return this; + } + public boolean success(){ + return code == 0; + } + + public Result error(int code, String msg) { + this.code = code; + this.msg = msg; + return this; + } + + public Result error(String msg) { + this.code = ErrorCode.INTERNAL_SERVER_ERROR; + this.msg = msg; + return this; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } +} diff --git a/common/src/main/java/io/common/utils/SpringContextUtils.java b/common/src/main/java/io/common/utils/SpringContextUtils.java new file mode 100644 index 0000000..5b22d04 --- /dev/null +++ b/common/src/main/java/io/common/utils/SpringContextUtils.java @@ -0,0 +1,47 @@ +package io.common.utils; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * Spring Context 工具类 + * + + */ +@Component +public class SpringContextUtils implements ApplicationContextAware { + public static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) + throws BeansException { + SpringContextUtils.applicationContext = applicationContext; + } + + public static Object getBean(String name) { + return applicationContext.getBean(name); + } + + public static T getBean(Class requiredType) { + return applicationContext.getBean(requiredType); + } + + public static T getBean(String name, Class requiredType) { + return applicationContext.getBean(name, requiredType); + } + + public static boolean containsBean(String name) { + return applicationContext.containsBean(name); + } + + public static boolean isSingleton(String name) { + return applicationContext.isSingleton(name); + } + + public static Class getType(String name) { + return applicationContext.getType(name); + } + +} diff --git a/common/src/main/java/io/common/utils/TreeNode.java b/common/src/main/java/io/common/utils/TreeNode.java new file mode 100644 index 0000000..97e982a --- /dev/null +++ b/common/src/main/java/io/common/utils/TreeNode.java @@ -0,0 +1,26 @@ +package io.common.utils; + +import lombok.Data; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * 树节点,所有需要实现树节点的,都需要继承该类 + */ + @Data +public class TreeNode implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + private Long id; + /** + * 上级ID + */ + private Long pid; + /** + * 子节点列表 + */ + private List children = new ArrayList<>(); +} diff --git a/common/src/main/java/io/common/utils/TreeUtils.java b/common/src/main/java/io/common/utils/TreeUtils.java new file mode 100644 index 0000000..4cf33b8 --- /dev/null +++ b/common/src/main/java/io/common/utils/TreeUtils.java @@ -0,0 +1,72 @@ +package io.common.utils; + +import io.common.validator.AssertUtils; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * 树形结构工具类,如:菜单、部门等 + * + + * @since 1.0.0 + */ +public class TreeUtils { + + /** + * 根据pid,构建树节点 + */ + public static List build(List treeNodes, Long pid) { + //pid不能为空 + AssertUtils.isNull(pid, "pid"); + + List treeList = new ArrayList<>(); + for(T treeNode : treeNodes) { + if (pid.equals(treeNode.getPid())) { + treeList.add(findChildren(treeNodes, treeNode)); + } + } + + return treeList; + } + + /** + * 查找子节点 + */ + private static T findChildren(List treeNodes, T rootNode) { + for(T treeNode : treeNodes) { + if(rootNode.getId().equals(treeNode.getPid())) { + rootNode.getChildren().add(findChildren(treeNodes, treeNode)); + } + } + return rootNode; + } + + /** + * 构建树节点 + */ + public static List build(List treeNodes) { + List result = new ArrayList<>(); + + //list转map + Map nodeMap = new LinkedHashMap<>(treeNodes.size()); + for(T treeNode : treeNodes){ + nodeMap.put(treeNode.getId(), treeNode); + } + + for(T node : nodeMap.values()) { + T parent = nodeMap.get(node.getPid()); + if(parent != null && !(node.getId().equals(parent.getId()))){ + parent.getChildren().add(node); + continue; + } + + result.add(node); + } + + return result; + } + +} diff --git a/common/src/main/java/io/common/validator/AssertUtils.java b/common/src/main/java/io/common/validator/AssertUtils.java new file mode 100644 index 0000000..bb26520 --- /dev/null +++ b/common/src/main/java/io/common/validator/AssertUtils.java @@ -0,0 +1,90 @@ +package io.common.validator; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ArrayUtil; +import io.common.exception.ErrorCode; +import io.common.exception.RenException; +import cn.hutool.core.util.StrUtil; + +import java.util.List; +import java.util.Map; + +/** + * 校验工具类 + * + + * @since 1.0.0 + */ +public class AssertUtils { + + public static void isBlank(String str, String... params) { + isBlank(str, ErrorCode.NOT_NULL, params); + } + + public static void isBlank(String str, Integer code, String... params) { + if(code == null){ + throw new RenException(ErrorCode.NOT_NULL, "code"); + } + + if (StrUtil.isBlank(str)) { + throw new RenException(code, params); + } + } + + public static void isNull(Object object, String... params) { + isNull(object, ErrorCode.NOT_NULL, params); + } + + public static void isNull(Object object, Integer code, String... params) { + if(code == null){ + throw new RenException(ErrorCode.NOT_NULL, "code"); + } + + if (object == null) { + throw new RenException(code, params); + } + } + + public static void isArrayEmpty(Object[] array, String... params) { + isArrayEmpty(array, ErrorCode.NOT_NULL, params); + } + + public static void isArrayEmpty(Object[] array, Integer code, String... params) { + if(code == null){ + throw new RenException(ErrorCode.NOT_NULL, "code"); + } + + if(ArrayUtil.isEmpty(array)){ + throw new RenException(code, params); + } + } + + public static void isListEmpty(List list, String... params) { + isListEmpty(list, ErrorCode.NOT_NULL, params); + } + + public static void isListEmpty(List list, Integer code, String... params) { + if(code == null){ + throw new RenException(ErrorCode.NOT_NULL, "code"); + } + + if(CollUtil.isEmpty(list)){ + throw new RenException(code, params); + } + } + + public static void isMapEmpty(Map map, String... params) { + isMapEmpty(map, ErrorCode.NOT_NULL, params); + } + + public static void isMapEmpty(Map map, Integer code, String... params) { + if(code == null){ + throw new RenException(ErrorCode.NOT_NULL, "code"); + } + + if(MapUtil.isEmpty(map)){ + throw new RenException(code, params); + } + } +} diff --git a/common/src/main/java/io/common/validator/ValidatorUtils.java b/common/src/main/java/io/common/validator/ValidatorUtils.java new file mode 100644 index 0000000..902325e --- /dev/null +++ b/common/src/main/java/io/common/validator/ValidatorUtils.java @@ -0,0 +1,47 @@ +package io.common.validator; + +import io.common.exception.RenException; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.context.support.ResourceBundleMessageSource; +import org.springframework.validation.beanvalidation.MessageSourceResourceBundleLocator; + +import java.util.Locale; +import java.util.Set; + +/** + * hibernate-validator校验工具类 + * 参考文档:http://docs.jboss.org/hibernate/validator/6.0/reference/en-US/html_single/ + * @since 1.0.0 + */ +public class ValidatorUtils { + + private static ResourceBundleMessageSource getMessageSource() { + ResourceBundleMessageSource bundleMessageSource = new ResourceBundleMessageSource(); + bundleMessageSource.setDefaultEncoding("UTF-8"); + bundleMessageSource.setBasenames("i18n/validation"); + return bundleMessageSource; + } + + /** + * 校验对象 + * @param object 待校验对象 + * @param groups 待校验的组 + */ + public static void validateEntity(Object object, Class... groups) + throws RenException { + Locale.setDefault(LocaleContextHolder.getLocale()); + Validator validator = Validation.byDefaultProvider().configure().messageInterpolator( + new ResourceBundleMessageInterpolator(new MessageSourceResourceBundleLocator(getMessageSource()))) + .buildValidatorFactory().getValidator(); + + Set> constraintViolations = validator.validate(object, groups); + if (!constraintViolations.isEmpty()) { + ConstraintViolation constraint = constraintViolations.iterator().next(); + throw new RenException(constraint.getMessage()); + } + } +} diff --git a/common/src/main/java/io/common/validator/group/AddGroup.java b/common/src/main/java/io/common/validator/group/AddGroup.java new file mode 100644 index 0000000..2a9455d --- /dev/null +++ b/common/src/main/java/io/common/validator/group/AddGroup.java @@ -0,0 +1,8 @@ +package io.common.validator.group; + +/** + * 新增 Group + */ +public interface AddGroup { + +} diff --git a/common/src/main/java/io/common/validator/group/DefaultGroup.java b/common/src/main/java/io/common/validator/group/DefaultGroup.java new file mode 100644 index 0000000..dd3d7e0 --- /dev/null +++ b/common/src/main/java/io/common/validator/group/DefaultGroup.java @@ -0,0 +1,11 @@ +package io.common.validator.group; + +/** + * 默认 Group + * + + * @since 1.0.0 + */ +public interface DefaultGroup { + +} diff --git a/common/src/main/java/io/common/validator/group/Group.java b/common/src/main/java/io/common/validator/group/Group.java new file mode 100644 index 0000000..caa9f9e --- /dev/null +++ b/common/src/main/java/io/common/validator/group/Group.java @@ -0,0 +1,15 @@ +package io.common.validator.group; + + +import jakarta.validation.GroupSequence; + +/** + * 定义校验顺序,如果AddGroup组失败,则UpdateGroup组不会再校验 + * + + * @since 1.0.0 + */ +@GroupSequence({AddGroup.class, UpdateGroup.class}) +public interface Group { + +} diff --git a/common/src/main/java/io/common/validator/group/UpdateGroup.java b/common/src/main/java/io/common/validator/group/UpdateGroup.java new file mode 100644 index 0000000..e7c9b24 --- /dev/null +++ b/common/src/main/java/io/common/validator/group/UpdateGroup.java @@ -0,0 +1,11 @@ +package io.common.validator.group; + +/** + * 修改 Group + * + + * @since 1.0.0 + */ +public interface UpdateGroup { + +} diff --git a/common/src/main/java/io/common/xss/XssFilter.java b/common/src/main/java/io/common/xss/XssFilter.java new file mode 100644 index 0000000..0eeb6ac --- /dev/null +++ b/common/src/main/java/io/common/xss/XssFilter.java @@ -0,0 +1,29 @@ +package io.common.xss; + +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; + +import java.io.IOException; + +/** + * XSS过滤 + */ +public class XssFilter implements Filter { + + @Override + public void init(FilterConfig config) { + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper( + (HttpServletRequest) request); + chain.doFilter(xssRequest, response); + } + + @Override + public void destroy() { + } + +} diff --git a/common/src/main/java/io/common/xss/XssHttpServletRequestWrapper.java b/common/src/main/java/io/common/xss/XssHttpServletRequestWrapper.java new file mode 100644 index 0000000..a42be88 --- /dev/null +++ b/common/src/main/java/io/common/xss/XssHttpServletRequestWrapper.java @@ -0,0 +1,143 @@ +package io.common.xss; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.StrUtil; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.LinkedHashMap; +import java.util.Map; + + +/** + * XSS过滤处理 + */ +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { + HttpServletRequest orgRequest; + + public XssHttpServletRequestWrapper(HttpServletRequest request) { + super(request); + orgRequest = request; + } + + @Override + public ServletInputStream getInputStream() throws IOException { + //非json类型,直接返回 + if(!checkContentTypeIsJson()){ + return super.getInputStream(); + } + + //为空,直接返回 + String json = IoUtil.readUtf8(super.getInputStream()); + if (StrUtil.isBlank(json)) { + return super.getInputStream(); + } + + //xss过滤 + json = xssEncode(json); + final ByteArrayInputStream bis = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8)); + return new ServletInputStream() { + @Override + public boolean isFinished() { + return true; + } + + @Override + public boolean isReady() { + return true; + } + + @Override + public void setReadListener(ReadListener readListener) { + + } + + @Override + public int read() { + return bis.read(); + } + }; + } + + @Override + public String getParameter(String name) { + String value = super.getParameter(xssEncode(name)); + if (StrUtil.isNotBlank(value)) { + value = xssEncode(value); + } + return value; + } + + @Override + public String[] getParameterValues(String name) { + String[] parameters = super.getParameterValues(name); + if (parameters == null || parameters.length == 0) { + return null; + } + + for (int i = 0; i < parameters.length; i++) { + parameters[i] = xssEncode(parameters[i]); + } + return parameters; + } + + @Override + public Map getParameterMap() { + Map map = new LinkedHashMap<>(); + Map parameters = super.getParameterMap(); + for (String key : parameters.keySet()) { + String[] values = parameters.get(key); + for (int i = 0; i < values.length; i++) { + values[i] = xssEncode(values[i]); + } + map.put(key, values); + } + return map; + } + + @Override + public String getHeader(String name) { + String value = super.getHeader(xssEncode(name)); + if (StrUtil.isNotBlank(value)) { + value = xssEncode(value); + } + return value; + } + + private String xssEncode(String input) { + return XssUtils.filter(input); + } + + /** + * 获取最原始的request + */ + public HttpServletRequest getOrgRequest() { + return orgRequest; + } + + /** + * 获取最原始的request + */ + public static HttpServletRequest getOrgRequest(HttpServletRequest request) { + if (request instanceof XssHttpServletRequestWrapper) { + return ((XssHttpServletRequestWrapper) request).getOrgRequest(); + } + + return request; + } + /** + * 判断是否是json请求,以前缀的方式 + */ + private boolean checkContentTypeIsJson() + { + String header = super.getHeader(HttpHeaders.CONTENT_TYPE); + return StrUtil.startWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE); + } +} diff --git a/common/src/main/java/io/common/xss/XssUtils.java b/common/src/main/java/io/common/xss/XssUtils.java new file mode 100644 index 0000000..7241fc0 --- /dev/null +++ b/common/src/main/java/io/common/xss/XssUtils.java @@ -0,0 +1,67 @@ +package io.common.xss; + +import org.jsoup.Jsoup; +import org.jsoup.safety.Safelist; + +/** + * XSS过滤工具类 + */ +public class XssUtils extends Safelist { + + /** + * XSS过滤 + */ + public static String filter(String html){ + return Jsoup.clean(html, xssWhitelist()); + } + + /** + * XSS过滤白名单 + */ + private static Safelist xssWhitelist(){ + return new Safelist() + //支持的标签 + .addTags("a", "b", "blockquote", "br", "caption", "cite", "code", "col", "colgroup", "dd", "div", "dl", + "dt", "em", "h1", "h2", "h3", "h4", "h5", "h6", "i", "img", "li", "ol", "p", "pre", "q", "small", + "strike", "strong","sub", "sup", "table", "tbody", "td","tfoot", "th", "thead", "tr", "u","ul", + "embed","object","param","span") + + //支持的标签属性 + .addAttributes("a", "href", "class", "style", "target", "rel", "nofollow") + .addAttributes("blockquote", "cite") + .addAttributes("code", "class", "style") + .addAttributes("col", "span", "width") + .addAttributes("colgroup", "span", "width") + .addAttributes("img", "align", "alt", "height", "src", "title", "width", "class", "style") + .addAttributes("ol", "start", "type") + .addAttributes("q", "cite") + .addAttributes("table", "summary", "width", "class", "style") + .addAttributes("tr", "abbr", "axis", "colspan", "rowspan", "width", "style") + .addAttributes("td", "abbr", "axis", "colspan", "rowspan", "width", "style") + .addAttributes("th", "abbr", "axis", "colspan", "rowspan", "scope","width", "style") + .addAttributes("ul", "type", "style") + .addAttributes("pre", "class", "style") + .addAttributes("div", "class", "id", "style") + .addAttributes("embed", "src", "wmode", "flashvars", "pluginspage", "allowFullScreen", "allowfullscreen", + "quality", "width", "height", "align", "allowScriptAccess", "allowscriptaccess", "allownetworking", "type") + .addAttributes("object", "type", "id", "name", "data", "width", "height", "style", "classid", "codebase") + .addAttributes("param", "name", "value") + .addAttributes("span", "class", "style") + + //标签属性对应的协议 + .addProtocols("a", "href", "ftp", "http", "https", "mailto") + .addProtocols("img", "src", "http", "https") + .addProtocols("blockquote", "cite", "http", "https") + .addProtocols("cite", "cite", "http", "https") + .addProtocols("q", "cite", "http", "https") + .addProtocols("embed", "src", "http", "https"); + } + + public static void main(String[] args) { + StringBuilder html = new StringBuilder(); + html.append(""); + + System.out.println(filter(html.toString())); + } + +} diff --git a/common/src/main/java/io/modules/item/dao/ApplicationsDao.java b/common/src/main/java/io/modules/item/dao/ApplicationsDao.java new file mode 100644 index 0000000..aa864b3 --- /dev/null +++ b/common/src/main/java/io/modules/item/dao/ApplicationsDao.java @@ -0,0 +1,13 @@ +package io.modules.item.dao; + +import io.common.dao.BaseDao; +import io.modules.item.entity.Applications; +import org.apache.ibatis.annotations.Mapper; + +/** + * certif申请表 + */ +@Mapper +public interface ApplicationsDao extends BaseDao { + +} diff --git a/common/src/main/java/io/modules/item/dao/CertificatesDao.java b/common/src/main/java/io/modules/item/dao/CertificatesDao.java new file mode 100644 index 0000000..b17826b --- /dev/null +++ b/common/src/main/java/io/modules/item/dao/CertificatesDao.java @@ -0,0 +1,15 @@ +package io.modules.item.dao; + + +import io.common.dao.BaseDao; +import io.modules.item.entity.CertificatesEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 主表 + + */ +@Mapper +public interface CertificatesDao extends BaseDao { + +} \ No newline at end of file diff --git a/common/src/main/java/io/modules/item/dao/UserDao.java b/common/src/main/java/io/modules/item/dao/UserDao.java new file mode 100644 index 0000000..ad3a890 --- /dev/null +++ b/common/src/main/java/io/modules/item/dao/UserDao.java @@ -0,0 +1,18 @@ +package io.modules.item.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import io.common.dao.BaseDao; +import io.modules.item.entity.FrontUserEntity; +import io.modules.item.entity.UserEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 用户 + * + */ +@Mapper +public interface UserDao extends BaseDao { + UserEntity getUserByUsername(String username); + + UserEntity getUserByUserId(Long userId); +} diff --git a/common/src/main/java/io/modules/item/dto/ApplicationsDTO.java b/common/src/main/java/io/modules/item/dto/ApplicationsDTO.java new file mode 100644 index 0000000..d5b8b83 --- /dev/null +++ b/common/src/main/java/io/modules/item/dto/ApplicationsDTO.java @@ -0,0 +1,28 @@ +package io.modules.item.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + + +/** + * certif申请表 + + */ +@Data +@Schema(name = "certif申请表") +public class ApplicationsDTO implements Serializable { + private static final long serialVersionUID = 1L; + + private Long id; + private Long userId; + private Long certId; + private Date auditTime; + private Date createTime; + private Integer auditStatus; + private String auditComments; + private UserDTO user; + private CertificatesDTO certificates; +} diff --git a/common/src/main/java/io/modules/item/dto/CartDTO.java b/common/src/main/java/io/modules/item/dto/CartDTO.java new file mode 100644 index 0000000..62580d2 --- /dev/null +++ b/common/src/main/java/io/modules/item/dto/CartDTO.java @@ -0,0 +1,42 @@ +package io.modules.item.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.media.SchemaProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 购物车 + * + * @author Mark # + * @since 1.0.0 2025-03-12 + */ +@Data +@Schema(name = "购物车") +public class CartDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @SchemaProperty(name = "编号") + private Long id; + + @SchemaProperty(name = "用户ID") + private Long userId; + + @SchemaProperty(name = "商品ID") + private Long productId; + + @SchemaProperty(name = "商品数量") + private Integer quantity; + + @SchemaProperty(name = "创建时间") + private Date createdTime; + + @SchemaProperty(name = "加入时价格") + private BigDecimal price; + private CertificatesDTO item; + + +} diff --git a/common/src/main/java/io/modules/item/dto/CertificatesDTO.java b/common/src/main/java/io/modules/item/dto/CertificatesDTO.java new file mode 100644 index 0000000..9a3f2bc --- /dev/null +++ b/common/src/main/java/io/modules/item/dto/CertificatesDTO.java @@ -0,0 +1,44 @@ +package io.modules.item.dto; + +import io.modules.item.entity.FrontUserEntity; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + + +/** + * 主表 + * + * @author Mark # + * @since 1.0.0 2025-01-24 + */ +@Data +@Schema(name = "主表") +public class CertificatesDTO implements Serializable { + private static final long serialVersionUID = 1L; + + private Long id; // 编号 + private Integer isBlock; + private Long certificateNumber; // 证书编号 + + private Long userId; // 用户 ID + + private Date issueDate; // 签发日期 + + private Date expireDate; // 过期日期 + + private String certificateData; // 详情(JSON 字符串) + private String img; + private String blockchainTxId; // 区块链交易 ID + + private Integer status; // 1: 有效,0: 撤销,2: 过期 + + private Date createdAt; // 创建时间 + + private Integer auditStatus; + private String auditComments; + private UserDTO user; + +} diff --git a/common/src/main/java/io/modules/item/dto/LoginDTO.java b/common/src/main/java/io/modules/item/dto/LoginDTO.java new file mode 100644 index 0000000..d62ee63 --- /dev/null +++ b/common/src/main/java/io/modules/item/dto/LoginDTO.java @@ -0,0 +1,22 @@ +package io.modules.item.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +/** + * 登录表单 + * + + */ +@Data +@Schema(title = "登录表单") +public class LoginDTO { + @Schema(title = "用户名") + @NotBlank(message="用户名不能为空~") + private String username; + + @Schema(title = "密码") + @NotBlank(message="密码不能为空~") + private String password; + +} diff --git a/common/src/main/java/io/modules/item/dto/UserDTO.java b/common/src/main/java/io/modules/item/dto/UserDTO.java new file mode 100644 index 0000000..fa8c701 --- /dev/null +++ b/common/src/main/java/io/modules/item/dto/UserDTO.java @@ -0,0 +1,40 @@ +package io.modules.item.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.media.SchemaProperty; +import lombok.Data; +import java.io.Serializable; +import java.util.Date; + + +/** + * 用户 + * + * @author Mark # + * @since 1.0.0 2025-01-14 + */ +@Data +@Schema(name = "用户") +public class UserDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @SchemaProperty(name = "id") + private Long id; + + @SchemaProperty(name = "手机号") + private String username; + + @SchemaProperty(name = "密码") + private String password; + + @SchemaProperty(name = "创建时间") + private Date createDate; + + @SchemaProperty(name = "昵称") + private String nickName; + + @SchemaProperty(name = "介绍") + private String introduce; + + +} diff --git a/common/src/main/java/io/modules/item/entity/Applications.java b/common/src/main/java/io/modules/item/entity/Applications.java new file mode 100644 index 0000000..5c196d4 --- /dev/null +++ b/common/src/main/java/io/modules/item/entity/Applications.java @@ -0,0 +1,28 @@ +package io.modules.item.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * 申请记录表 + */ +@Data +@TableName("tb_certificate_applications") +public class Applications { + + /** + * 编号 + */ + @TableId(value = "id",type = IdType.AUTO) + private Long id; + private Long userId; + private Long certId; + private Date createTime; + private Integer auditStatus; + private Date auditTime; + private String auditComments; +} diff --git a/common/src/main/java/io/modules/item/entity/CertificatesEntity.java b/common/src/main/java/io/modules/item/entity/CertificatesEntity.java new file mode 100644 index 0000000..0cb2c65 --- /dev/null +++ b/common/src/main/java/io/modules/item/entity/CertificatesEntity.java @@ -0,0 +1,37 @@ +package io.modules.item.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 主表 + */ +@Data +@TableName("tb_certificates") +public class CertificatesEntity { + + private Long id; // 编号 + private Integer isBlock; + + private Integer auditStatus; + + private String auditComments; + private Long certificateNumber; // 证书编号 + + private Long userId; // 用户 ID + + private Date issueDate; // 签发日期 + + private Date expireDate; // 过期日期 + + private String certificateData; // 详情(JSON 字符串) + private String img; + private String blockchainTxId; // 区块链交易 ID + + private Integer status; // 1: 有效,0: 撤销,2: 过期 + + private Date createdAt; // 创建时间 +} \ No newline at end of file diff --git a/common/src/main/java/io/modules/item/entity/DictEntity.java b/common/src/main/java/io/modules/item/entity/DictEntity.java new file mode 100644 index 0000000..771b7d6 --- /dev/null +++ b/common/src/main/java/io/modules/item/entity/DictEntity.java @@ -0,0 +1,30 @@ +package io.modules.item.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * 敏感词 + * + * @author Mark # + * @since 1.0.0 2024-12-12 + */ +@Data +@TableName("tb_dict") +public class DictEntity { + + /** + * + */ + private Long id; + /** + * 内容 + */ + private String content; + /** + * 创建时间 + */ + private Date createTime; +} diff --git a/common/src/main/java/io/modules/item/entity/FrontUserEntity.java b/common/src/main/java/io/modules/item/entity/FrontUserEntity.java new file mode 100644 index 0000000..94e4be8 --- /dev/null +++ b/common/src/main/java/io/modules/item/entity/FrontUserEntity.java @@ -0,0 +1,37 @@ +package io.modules.item.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import java.util.Date; + +/** + * 用户 + */ +@Data +@TableName("tb_user") +public class FrontUserEntity { + /** + * id + */ + private Long id; + /** + * 手机号 + */ + private String username; + /** + * 密码 + */ + private String password; + /** + * 创建时间 + */ + private Date createDate; + /** + * 昵称 + */ + private String nickName; + /** + * 介绍 + */ + private String introduce; +} diff --git a/common/src/main/java/io/modules/item/entity/SetResponse.java b/common/src/main/java/io/modules/item/entity/SetResponse.java new file mode 100644 index 0000000..10c0c6d --- /dev/null +++ b/common/src/main/java/io/modules/item/entity/SetResponse.java @@ -0,0 +1,31 @@ +package io.modules.item.entity; + +public class SetResponse { + private String msg; + private String data; + + // Getter 和 Setter + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + @Override + public String toString() { + return "SetResponse{" + + "msg='" + msg + '\'' + + ", data='" + data + '\'' + + '}'; + } +} diff --git a/common/src/main/java/io/modules/item/entity/UserEntity.java b/common/src/main/java/io/modules/item/entity/UserEntity.java new file mode 100644 index 0000000..1343b4b --- /dev/null +++ b/common/src/main/java/io/modules/item/entity/UserEntity.java @@ -0,0 +1,50 @@ + + +package io.modules.item.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 用户 + * + + */ +@Data +@TableName("tb_user") +public class UserEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + @TableId + private Long id; + /** + * 昵称 + */ + private String nickName; + /** + * 介绍 + */ + private String introduce; + /** + * 用户名 + */ + private String username; + /** + * 密码 + */ + @JsonIgnore + private String password; + /** + * 创建时间 + */ + private Date createDate; + +} diff --git a/common/src/main/java/io/modules/item/service/ApplicationsService.java b/common/src/main/java/io/modules/item/service/ApplicationsService.java new file mode 100644 index 0000000..ef1bc58 --- /dev/null +++ b/common/src/main/java/io/modules/item/service/ApplicationsService.java @@ -0,0 +1,14 @@ +package io.modules.item.service; + + +import io.modules.item.dto.ApplicationsDTO; +import io.modules.item.entity.Applications; +import io.common.service.CrudService; + +/** + * certif申请表 + + */ +public interface ApplicationsService extends CrudService { + +} diff --git a/common/src/main/java/io/modules/item/service/CertificatesService.java b/common/src/main/java/io/modules/item/service/CertificatesService.java new file mode 100644 index 0000000..e04606d --- /dev/null +++ b/common/src/main/java/io/modules/item/service/CertificatesService.java @@ -0,0 +1,16 @@ +package io.modules.item.service; + + +import io.common.service.CrudService; +import io.modules.item.dto.CertificatesDTO; +import io.modules.item.entity.CertificatesEntity; + +/** + * 主表 + * + * @author Mark # + * @since 1.0.0 2025-01-24 + */ +public interface CertificatesService extends CrudService { + +} \ No newline at end of file diff --git a/common/src/main/java/io/modules/item/service/FrontUserService.java b/common/src/main/java/io/modules/item/service/FrontUserService.java new file mode 100644 index 0000000..fb45665 --- /dev/null +++ b/common/src/main/java/io/modules/item/service/FrontUserService.java @@ -0,0 +1,18 @@ + + +package io.modules.item.service; + +import io.common.service.BaseService; +import io.common.service.CrudService; +import io.modules.item.dto.UserDTO; +import io.modules.item.entity.FrontUserEntity; +import io.modules.item.entity.UserEntity; + +/** + * 用户 + * + + */ +public interface FrontUserService extends CrudService { + +} diff --git a/common/src/main/java/io/modules/item/service/SetRequestService.java b/common/src/main/java/io/modules/item/service/SetRequestService.java new file mode 100644 index 0000000..183ef1f --- /dev/null +++ b/common/src/main/java/io/modules/item/service/SetRequestService.java @@ -0,0 +1,20 @@ +package io.modules.item.service; + +import io.modules.item.entity.SetResponse; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.http.ResponseEntity; + +@Service +public class SetRequestService { + + public SetResponse sendSetRequest(String key, String value) { + RestTemplate restTemplate = new RestTemplate(); + String url = "http://localhost:8080/set?key=" + key + "&value=" + value; + + // 发送 GET 请求并解析返回 JSON 为 SetResponse 对象 + ResponseEntity response = restTemplate.getForEntity(url, SetResponse.class); + + return response.getBody(); + } +} diff --git a/common/src/main/java/io/modules/item/service/impl/ApplicationsServiceImpl.java b/common/src/main/java/io/modules/item/service/impl/ApplicationsServiceImpl.java new file mode 100644 index 0000000..ae39114 --- /dev/null +++ b/common/src/main/java/io/modules/item/service/impl/ApplicationsServiceImpl.java @@ -0,0 +1,32 @@ +package io.modules.item.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + +import io.modules.item.dao.ApplicationsDao; +import io.modules.item.dto.ApplicationsDTO; +import io.modules.item.entity.Applications; +import io.modules.item.service.ApplicationsService; +import cn.hutool.core.util.StrUtil; +import io.common.service.impl.CrudServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * certif申请表 + */ +@Service +public class ApplicationsServiceImpl extends CrudServiceImpl implements ApplicationsService { + + @Override + public QueryWrapper getWrapper(Map params){ + String id = (String)params.get("id"); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(StrUtil.isNotBlank(id), "id", id); + + return wrapper; + } + + + +} diff --git a/common/src/main/java/io/modules/item/service/impl/CertificatesServiceImpl.java b/common/src/main/java/io/modules/item/service/impl/CertificatesServiceImpl.java new file mode 100644 index 0000000..fa7675d --- /dev/null +++ b/common/src/main/java/io/modules/item/service/impl/CertificatesServiceImpl.java @@ -0,0 +1,47 @@ +package io.modules.item.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import cn.hutool.core.util.StrUtil; +import io.common.service.impl.CrudServiceImpl; +import io.modules.item.dao.CertificatesDao; +import io.modules.item.dao.UserDao; +import io.modules.item.dto.CertificatesDTO; +import io.modules.item.entity.CertificatesEntity; +import io.modules.item.service.CertificatesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * 主表 + * + * @author Mark # + * @since 1.0.0 2025-01-24 + */ +@Service +public class CertificatesServiceImpl extends CrudServiceImpl implements CertificatesService { + + @Autowired + private UserDao userService; + + + + @Override + public QueryWrapper getWrapper(Map params){ + String id = (String)params.get("id"); + String status = (String)params.get("status"); + String isBlock = (String)params.get("isBlock"); + String auditStatus = (String)params.get("auditStatus"); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(StrUtil.isNotBlank(id), "id", id); + wrapper.eq(StrUtil.isNotBlank(status), "status", status); + wrapper.eq(StrUtil.isNotBlank(isBlock), "is_block", isBlock); + wrapper.eq(StrUtil.isNotBlank(auditStatus) && !auditStatus.equals("all"), "audit_status", auditStatus); + return wrapper; + } + + + +} \ No newline at end of file diff --git a/common/src/main/java/io/modules/item/service/impl/FrontUserServiceImpl.java b/common/src/main/java/io/modules/item/service/impl/FrontUserServiceImpl.java new file mode 100644 index 0000000..990ccce --- /dev/null +++ b/common/src/main/java/io/modules/item/service/impl/FrontUserServiceImpl.java @@ -0,0 +1,31 @@ +package io.modules.item.service.impl; + + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.common.service.impl.BaseServiceImpl; +import io.common.service.impl.CrudServiceImpl; +import io.modules.item.dao.UserDao; +import io.modules.item.dto.UserDTO; +import io.modules.item.entity.FrontUserEntity; +import io.modules.item.entity.UserEntity; +import io.modules.item.service.FrontUserService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Map; + +@Service +public class FrontUserServiceImpl extends CrudServiceImpl implements FrontUserService { + @Override + public QueryWrapper getWrapper(Map params){ + String id = (String)params.get("id"); + String username = (String)params.get("username"); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(StrUtil.isNotBlank(id), "id", id); + wrapper.like(StrUtil.isNotBlank(username), "username", username); + return wrapper; + } + +} diff --git a/db/certify.sql b/db/certify.sql new file mode 100644 index 0000000..eff119f --- /dev/null +++ b/db/certify.sql @@ -0,0 +1,1528 @@ +/* + Navicat Premium Data Transfer + + Source Server : localhost + Source Server Type : MySQL + Source Server Version : 50744 + Source Host : localhost:3306 + Source Schema : certify + + Target Server Type : MySQL + Target Server Version : 50744 + File Encoding : 65001 + + Date: 24/03/2025 17:04:50 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for sys_dept +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dept`; +CREATE TABLE `sys_dept` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `pid` bigint(20) NULL DEFAULT NULL COMMENT '上级ID', + `pids` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所有上级ID,用逗号分开', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门名称', + `sort` int(10) UNSIGNED NULL DEFAULT NULL COMMENT '排序', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者', + `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间', + `updater` bigint(20) NULL DEFAULT NULL COMMENT '更新者', + `update_date` datetime NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_pid`(`pid`) USING BTREE, + INDEX `idx_sort`(`sort`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1067246875800000069 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '部门管理' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dept +-- ---------------------------- +INSERT INTO `sys_dept` VALUES (1067246875800000062, 1067246875800000063, '1067246875800000066,1067246875800000063', '技术部', 2, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_dept` VALUES (1067246875800000063, 1067246875800000066, '1067246875800000066', '长沙分公司', 1, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_dept` VALUES (1067246875800000064, 1067246875800000066, '1067246875800000066', '上海分公司', 0, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_dept` VALUES (1067246875800000065, 1067246875800000064, '1067246875800000066,1067246875800000064', '市场部', 0, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_dept` VALUES (1067246875800000066, 0, '0', '文化系统总部', 0, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-10 22:08:03'); +INSERT INTO `sys_dept` VALUES (1067246875800000067, 1067246875800000064, '1067246875800000066,1067246875800000064', '销售部', 0, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_dept` VALUES (1067246875800000068, 1067246875800000063, '1067246875800000066,1067246875800000063', '产品部', 1, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); + +-- ---------------------------- +-- Table structure for sys_dict_data +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_data`; +CREATE TABLE `sys_dict_data` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `dict_type_id` bigint(20) NOT NULL COMMENT '字典类型ID', + `dict_label` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典标签', + `dict_value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '字典值', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `sort` int(10) UNSIGNED NULL DEFAULT NULL COMMENT '排序', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者', + `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间', + `updater` bigint(20) NULL DEFAULT NULL COMMENT '更新者', + `update_date` datetime NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_dict_type_value`(`dict_type_id`, `dict_value`) USING BTREE, + INDEX `idx_sort`(`sort`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1225814271879340035 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典数据' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dict_data +-- ---------------------------- +INSERT INTO `sys_dict_data` VALUES (1160061112075464705, 1160061077912858625, '男', '0', '', 0, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_dict_data` VALUES (1160061146967879681, 1160061077912858625, '女', '1', '', 1, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_dict_data` VALUES (1160061190127267841, 1160061077912858625, '保密', '2', '', 2, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_dict_data` VALUES (1225814069634195457, 1225813644059140097, '公告', '0', '', 0, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_dict_data` VALUES (1225814107559092225, 1225813644059140097, '会议', '1', '', 1, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_dict_data` VALUES (1225814271879340034, 1225813644059140097, '其他', '2', '', 2, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); + +-- ---------------------------- +-- Table structure for sys_dict_type +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_type`; +CREATE TABLE `sys_dict_type` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典类型', + `dict_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典名称', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `sort` int(10) UNSIGNED NULL DEFAULT NULL COMMENT '排序', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者', + `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间', + `updater` bigint(20) NULL DEFAULT NULL COMMENT '更新者', + `update_date` datetime NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `dict_type`(`dict_type`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1225813644059140098 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典类型' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_dict_type +-- ---------------------------- +INSERT INTO `sys_dict_type` VALUES (1160061077912858625, 'gender', '性别', '', 0, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_dict_type` VALUES (1225813644059140097, 'notice_type', '站内通知-类型', '', 1, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); + +-- ---------------------------- +-- Table structure for sys_log_error +-- ---------------------------- +DROP TABLE IF EXISTS `sys_log_error`; +CREATE TABLE `sys_log_error` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `request_uri` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求URI', + `request_method` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求方式', + `request_params` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求参数', + `user_agent` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户代理', + `ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作IP', + `error_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '异常信息', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者', + `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_create_date`(`create_date`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1863964860761514024 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '异常日志' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_log_error +-- ---------------------------- +INSERT INTO `sys_log_error` VALUES (1863939448849317889, '/admin/item/article/page', 'GET', '{\"_t\":\"1733232769395\",\"limit\":\"10\",\"page\":\"1\"}', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource item/article/page.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:25)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', 1067246875800000001, '2024-12-03 21:32:50'); +INSERT INTO `sys_log_error` VALUES (1863939455224659970, '/admin/item/slides/page', 'GET', '{\"_t\":\"1733232770943\",\"limit\":\"10\",\"page\":\"1\"}', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource item/slides/page.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:25)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', 1067246875800000001, '2024-12-03 21:32:51'); +INSERT INTO `sys_log_error` VALUES (1863939515836547073, '/admin/sys/scheduleLog/page', 'GET', '{\"_t\":\"1733232785403\",\"limit\":\"10\",\"page\":\"1\"}', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource sys/scheduleLog/page.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:25)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', 1067246875800000001, '2024-12-03 21:33:06'); +INSERT INTO `sys_log_error` VALUES (1863939515891073026, '/admin/sys/schedule/page', 'GET', '{\"_t\":\"1733232785403\",\"limit\":\"10\",\"page\":\"1\"}', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource sys/schedule/page.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:25)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', 1067246875800000001, '2024-12-03 21:33:06'); +INSERT INTO `sys_log_error` VALUES (1863939944838348802, '/admin/item/slides/page', 'GET', '{\"_t\":\"1733232887683\",\"limit\":\"10\",\"page\":\"1\"}', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource item/slides/page.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:25)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', 1067246875800000001, '2024-12-03 21:34:48'); +INSERT INTO `sys_log_error` VALUES (1863939955965837313, '/admin/item/article/page', 'GET', '{\"_t\":\"1733232890329\",\"limit\":\"10\",\"page\":\"1\"}', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource item/article/page.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:25)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', 1067246875800000001, '2024-12-03 21:34:50'); +INSERT INTO `sys_log_error` VALUES (1863940373110341634, '/admin/item/slides/page', 'GET', '{\"_t\":\"1733232989824\",\"limit\":\"10\",\"page\":\"1\"}', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource item/slides/page.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:25)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', 1067246875800000001, '2024-12-03 21:36:30'); +INSERT INTO `sys_log_error` VALUES (1863940386829910018, '/admin/item/slides/page', 'GET', '{\"_t\":\"1733232993077\",\"limit\":\"10\",\"page\":\"1\"}', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource item/slides/page.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:25)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', 1067246875800000001, '2024-12-03 21:36:33'); +INSERT INTO `sys_log_error` VALUES (1863940415036604417, '/admin/item/slides/page', 'GET', '{\"_t\":\"1733232999819\",\"limit\":\"10\",\"page\":\"1\"}', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource item/slides/page.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:25)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', 1067246875800000001, '2024-12-03 21:36:40'); +INSERT INTO `sys_log_error` VALUES (1863964123386089473, '/admin/item/article/page', 'GET', '{\"_t\":\"1733238651329\",\"limit\":\"10\",\"page\":\"1\"}', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.jdbc.BadSqlGrammarException: \r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'like,cover,create_time FROM tb_article) TOTAL\' at line 1\r\n### The error may exist in io/modules/item/dao/ArticleDao.java (best guess)\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT COUNT(*) FROM (SELECT id,title,introduction,user_id,content,sort,like,cover,create_time FROM tb_article) TOTAL\r\n### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'like,cover,create_time FROM tb_article) TOTAL\' at line 1\n; bad SQL grammar []\r\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:246)\r\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:107)\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439)\r\n at jdk.proxy2/jdk.proxy2.$Proxy93.selectList(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:164)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at jdk.proxy2/jdk.proxy2.$Proxy116.selectList(Unknown Source)\r\n at com.baomidou.mybatisplus.core.mapper.BaseMapper.selectPage(BaseMapper.java:348)\r\n at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:732)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:166)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at jdk.proxy2/jdk.proxy2.$Proxy116.selectPage(Unknown Source)\r\n at io.common.service.impl.CrudServiceImpl.page(CrudServiceImpl.java:31)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:716)\r\n at io.modules.item.service.impl.ArticleServiceImpl$$SpringCGLIB$$0.page()\r\n at io.modules.sys.controller.ArticleController.page(ArticleController.java:44)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\r\n at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor$1.proceed(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:82)\r\n at org.apache.shiro.authz.aop.AuthorizingMethodInterceptor.invoke(AuthorizingMethodInterceptor.java:39)\r\n at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor.invoke(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:115)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720)\r\n at io.modules.sys.controller.ArticleController$$SpringCGLIB$$0.page()\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:23)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'like,cover,create_time FROM tb_article) TOTAL\' at line 1\r\n at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121)\r\n at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354)\r\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:483)\r\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65)\r\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:80)\r\n at jdk.internal.reflect.GeneratedMethodAccessor16.invoke(Unknown Source)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at jdk.proxy2/jdk.proxy2.$Proxy137.query(Unknown Source)\r\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:65)\r\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336)\r\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158)\r\n at com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor.willDoQuery(PaginationInnerInterceptor.java:135)\r\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:75)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59)\r\n at jdk.proxy2/jdk.proxy2.$Proxy136.query(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142)\r\n at jdk.internal.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425)\r\n ... 130 more\r\n', 1067246875800000001, '2024-12-03 23:10:52'); +INSERT INTO `sys_log_error` VALUES (1863964725365186561, '/admin/item/slides', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.util.Date` from String \"1\": not a valid representation (error: Failed to parse Date value \'1\': Unparseable date: \"1\")\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:23)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String \"1\": not a valid representation (error: Failed to parse Date value \'1\': Unparseable date: \"1\")\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 56] (through reference chain: io.modules.item.dto.SlidesDTO[\"createTime\"])\r\n at com.fasterxml.jackson.databind.exc.InvalidFormatException.from(InvalidFormatException.java:67)\r\n at com.fasterxml.jackson.databind.DeserializationContext.weirdStringException(DeserializationContext.java:2002)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleWeirdStringValue(DeserializationContext.java:1230)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseDate(StdDeserializer.java:1362)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseDate(StdDeserializer.java:1304)\r\n at com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateBasedDeserializer._parseDate(DateDeserializers.java:201)\r\n at com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateDeserializer.deserialize(DateDeserializers.java:303)\r\n at com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateDeserializer.deserialize(DateDeserializers.java:281)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 92 more\r\n', 1067246875800000001, '2024-12-03 23:13:16'); +INSERT INTO `sys_log_error` VALUES (1863964860761513985, '/admin/item/slides', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.util.Date` from String \"1\": not a valid representation (error: Failed to parse Date value \'1\': Unparseable date: \"1\")\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:23)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String \"1\": not a valid representation (error: Failed to parse Date value \'1\': Unparseable date: \"1\")\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 56] (through reference chain: io.modules.item.dto.SlidesDTO[\"createTime\"])\r\n at com.fasterxml.jackson.databind.exc.InvalidFormatException.from(InvalidFormatException.java:67)\r\n at com.fasterxml.jackson.databind.DeserializationContext.weirdStringException(DeserializationContext.java:2002)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleWeirdStringValue(DeserializationContext.java:1230)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseDate(StdDeserializer.java:1362)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseDate(StdDeserializer.java:1304)\r\n at com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateBasedDeserializer._parseDate(DateDeserializers.java:201)\r\n at com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateDeserializer.deserialize(DateDeserializers.java:303)\r\n at com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateDeserializer.deserialize(DateDeserializers.java:281)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 92 more\r\n', 1067246875800000001, '2024-12-03 23:13:48'); +INSERT INTO `sys_log_error` VALUES (1863964860761513986, '/admin/sys/oss/upload', 'POST', '{\"token\":\"e2e5bfa7cdb043a6b0934911ac9135a8\"}', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource sys/oss/upload.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:23)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', 1067246875800000001, '2024-12-10 21:24:05'); +INSERT INTO `sys_log_error` VALUES (1863964860761513987, '/admin/sys/oss/upload', 'POST', '{\"token\":\"e2e5bfa7cdb043a6b0934911ac9135a8\"}', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource sys/oss/upload.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:23)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', 1067246875800000001, '2024-12-10 21:24:23'); +INSERT INTO `sys_log_error` VALUES (1863964860761513988, '/admin/item/article', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:23)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.JsonMappingException: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 592] (through reference chain: io.modules.item.dto.ArticleDTO[\"content\"])\r\n at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:402)\r\n at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:361)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1863)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:316)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 92 more\r\nCaused by: com.fasterxml.jackson.core.JsonParseException: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 592]\r\n at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2477)\r\n at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:750)\r\n at com.fasterxml.jackson.core.base.ParserBase._throwUnquotedSpace(ParserBase.java:1374)\r\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString2(UTF8StreamJsonParser.java:2631)\r\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishAndReturnString(UTF8StreamJsonParser.java:2560)\r\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.getText(UTF8StreamJsonParser.java:335)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:42)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n ... 97 more\r\n', 1067246875800000001, '2024-12-10 21:37:18'); +INSERT INTO `sys_log_error` VALUES (1863964860761513989, '/admin/item/article', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:23)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.JsonMappingException: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 592] (through reference chain: io.modules.item.dto.ArticleDTO[\"content\"])\r\n at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:402)\r\n at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:361)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1863)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:316)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 92 more\r\nCaused by: com.fasterxml.jackson.core.JsonParseException: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 592]\r\n at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2477)\r\n at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:750)\r\n at com.fasterxml.jackson.core.base.ParserBase._throwUnquotedSpace(ParserBase.java:1374)\r\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString2(UTF8StreamJsonParser.java:2631)\r\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishAndReturnString(UTF8StreamJsonParser.java:2560)\r\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.getText(UTF8StreamJsonParser.java:335)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:42)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n ... 97 more\r\n', 1067246875800000001, '2024-12-10 21:37:44'); +INSERT INTO `sys_log_error` VALUES (1863964860761513990, '/admin/item/article', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at io.common.xss.XssFilter.doFilter(XssFilter.java:23)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.JsonMappingException: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 592] (through reference chain: io.modules.item.dto.ArticleDTO[\"content\"])\r\n at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:402)\r\n at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:361)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1863)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:316)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 92 more\r\nCaused by: com.fasterxml.jackson.core.JsonParseException: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 592]\r\n at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2477)\r\n at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:750)\r\n at com.fasterxml.jackson.core.base.ParserBase._throwUnquotedSpace(ParserBase.java:1374)\r\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString2(UTF8StreamJsonParser.java:2631)\r\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishAndReturnString(UTF8StreamJsonParser.java:2560)\r\n at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.getText(UTF8StreamJsonParser.java:335)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:42)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n ... 97 more\r\n', 1067246875800000001, '2024-12-10 21:37:55'); +INSERT INTO `sys_log_error` VALUES (1863964860761513991, '/admin/item/article/page', 'GET', '{\"_t\":\"1733838695115\",\"limit\":\"10\",\"page\":\"1\"}', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.jdbc.BadSqlGrammarException: \r\n### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column \'star\' in \'field list\'\r\n### The error may exist in io/modules/item/dao/ArticleDao.java (best guess)\r\n### The error may involve defaultParameterMap\r\n### The error occurred while setting parameters\r\n### SQL: SELECT id,title,introduction,user_id,content,sort,star,cover,create_time,type,tag FROM tb_article LIMIT ?\r\n### Cause: java.sql.SQLSyntaxErrorException: Unknown column \'star\' in \'field list\'\n; bad SQL grammar []\r\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:246)\r\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:107)\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439)\r\n at jdk.proxy2/jdk.proxy2.$Proxy93.selectList(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:164)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at jdk.proxy2/jdk.proxy2.$Proxy116.selectList(Unknown Source)\r\n at com.baomidou.mybatisplus.core.mapper.BaseMapper.selectPage(BaseMapper.java:348)\r\n at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:732)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:166)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at jdk.proxy2/jdk.proxy2.$Proxy116.selectPage(Unknown Source)\r\n at io.common.service.impl.CrudServiceImpl.page(CrudServiceImpl.java:31)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:716)\r\n at io.modules.item.service.impl.ArticleServiceImpl$$SpringCGLIB$$0.page()\r\n at io.modules.sys.controller.ArticleController.page(ArticleController.java:44)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\r\n at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor$1.proceed(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:82)\r\n at org.apache.shiro.authz.aop.AuthorizingMethodInterceptor.invoke(AuthorizingMethodInterceptor.java:39)\r\n at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor.invoke(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:115)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720)\r\n at io.modules.sys.controller.ArticleController$$SpringCGLIB$$0.page()\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: java.sql.SQLSyntaxErrorException: Unknown column \'star\' in \'field list\'\r\n at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121)\r\n at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354)\r\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:483)\r\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65)\r\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:80)\r\n at jdk.internal.reflect.GeneratedMethodAccessor16.invoke(Unknown Source)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at jdk.proxy2/jdk.proxy2.$Proxy137.query(Unknown Source)\r\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:65)\r\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336)\r\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158)\r\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59)\r\n at jdk.proxy2/jdk.proxy2.$Proxy136.query(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142)\r\n at jdk.internal.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425)\r\n ... 107 more\r\n', 1067246875800000001, '2024-12-10 21:51:36'); +INSERT INTO `sys_log_error` VALUES (1863964860761513992, '/admin/sys/oss/page', 'GET', '{\"_t\":\"1733839620373\",\"limit\":\"10\",\"page\":\"1\"}', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource sys/oss/page.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', 1067246875800000001, '2024-12-10 22:07:00'); +INSERT INTO `sys_log_error` VALUES (1863964860761513993, '/admin/sys/oss/page', 'GET', '{\"_t\":\"1733839655987\",\"limit\":\"10\",\"page\":\"1\"}', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource sys/oss/page.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', 1067246875800000001, '2024-12-10 22:07:36'); +INSERT INTO `sys_log_error` VALUES (1863964860761513994, '/admin/item/dict', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.dao.DataIntegrityViolationException: \r\n### Error updating database. Cause: java.sql.SQLException: Field \'id\' doesn\'t have a default value\r\n### The error may exist in io/modules/item/dao/DictDao.java (best guess)\r\n### The error may involve io.modules.item.dao.DictDao.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO tb_dict ( content ) VALUES ( ? )\r\n### Cause: java.sql.SQLException: Field \'id\' doesn\'t have a default value\n; Field \'id\' doesn\'t have a default value\r\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:258)\r\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:107)\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439)\r\n at jdk.proxy2/jdk.proxy2.$Proxy93.insert(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at jdk.proxy2/jdk.proxy2.$Proxy117.insert(Unknown Source)\r\n at io.common.service.impl.BaseServiceImpl.insert(BaseServiceImpl.java:145)\r\n at io.common.service.impl.CrudServiceImpl.save(CrudServiceImpl.java:58)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:716)\r\n at io.modules.item.service.impl.DictServiceImpl$$SpringCGLIB$$0.save()\r\n at io.modules.sys.controller.DictController.save(DictController.java:71)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\r\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\r\n at io.common.aspect.LogOperationAspect.around(LogOperationAspect.java:41)\r\n at jdk.internal.reflect.GeneratedMethodAccessor129.invoke(Unknown Source)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637)\r\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627)\r\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:173)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\r\n at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor$1.proceed(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:82)\r\n at org.apache.shiro.authz.aop.AuthorizingMethodInterceptor.invoke(AuthorizingMethodInterceptor.java:39)\r\n at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor.invoke(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:115)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720)\r\n at io.modules.sys.controller.DictController$$SpringCGLIB$$0.save()\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: java.sql.SQLException: Field \'id\' doesn\'t have a default value\r\n at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130)\r\n at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354)\r\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:483)\r\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48)\r\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75)\r\n at jdk.internal.reflect.GeneratedMethodAccessor112.invoke(Unknown Source)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at jdk.proxy2/jdk.proxy2.$Proxy140.update(Unknown Source)\r\n at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)\r\n at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)\r\n at jdk.internal.reflect.GeneratedMethodAccessor111.invoke(Unknown Source)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\r\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59)\r\n at jdk.proxy2/jdk.proxy2.$Proxy139.update(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184)\r\n at jdk.internal.reflect.GeneratedMethodAccessor131.invoke(Unknown Source)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425)\r\n ... 112 more\r\n', 1067246875800000001, '2024-12-12 23:18:07'); +INSERT INTO `sys_log_error` VALUES (1863964860761513995, '/admin/item/dict', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.dao.DataIntegrityViolationException: \r\n### Error updating database. Cause: java.sql.SQLException: Field \'create_time\' doesn\'t have a default value\r\n### The error may exist in io/modules/item/dao/DictDao.java (best guess)\r\n### The error may involve io.modules.item.dao.DictDao.insert-Inline\r\n### The error occurred while setting parameters\r\n### SQL: INSERT INTO tb_dict ( content ) VALUES ( ? )\r\n### Cause: java.sql.SQLException: Field \'create_time\' doesn\'t have a default value\n; Field \'create_time\' doesn\'t have a default value\r\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:258)\r\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:107)\r\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439)\r\n at jdk.proxy2/jdk.proxy2.$Proxy93.insert(Unknown Source)\r\n at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152)\r\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\r\n at jdk.proxy2/jdk.proxy2.$Proxy117.insert(Unknown Source)\r\n at io.common.service.impl.BaseServiceImpl.insert(BaseServiceImpl.java:145)\r\n at io.common.service.impl.CrudServiceImpl.save(CrudServiceImpl.java:58)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:716)\r\n at io.modules.item.service.impl.DictServiceImpl$$SpringCGLIB$$0.save()\r\n at io.modules.sys.controller.DictController.save(DictController.java:71)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\r\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\r\n at io.common.aspect.LogOperationAspect.around(LogOperationAspect.java:41)\r\n at jdk.internal.reflect.GeneratedMethodAccessor129.invoke(Unknown Source)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637)\r\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627)\r\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:173)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\r\n at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor$1.proceed(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:82)\r\n at org.apache.shiro.authz.aop.AuthorizingMethodInterceptor.invoke(AuthorizingMethodInterceptor.java:39)\r\n at org.apache.shiro.spring.security.interceptor.AopAllianceAnnotationsAuthorizingMethodInterceptor.invoke(AopAllianceAnnotationsAuthorizingMethodInterceptor.java:115)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720)\r\n at io.modules.sys.controller.DictController$$SpringCGLIB$$0.save()\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: java.sql.SQLException: Field \'create_time\' doesn\'t have a default value\r\n at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130)\r\n at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912)\r\n at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354)\r\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:483)\r\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48)\r\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75)\r\n at jdk.internal.reflect.GeneratedMethodAccessor112.invoke(Unknown Source)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)\r\n at jdk.proxy2/jdk.proxy2.$Proxy140.update(Unknown Source)\r\n at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)\r\n at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)\r\n at jdk.internal.reflect.GeneratedMethodAccessor111.invoke(Unknown Source)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)\r\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106)\r\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59)\r\n at jdk.proxy2/jdk.proxy2.$Proxy139.update(Unknown Source)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)\r\n at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184)\r\n at jdk.internal.reflect.GeneratedMethodAccessor131.invoke(Unknown Source)\r\n at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.base/java.lang.reflect.Method.invoke(Method.java:568)\r\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425)\r\n ... 112 more\r\n', 1067246875800000001, '2024-12-12 23:18:21'); +INSERT INTO `sys_log_error` VALUES (1863964860761513996, '/favicon.ico', 'GET', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource favicon.ico.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', NULL, '2025-01-07 22:33:14'); +INSERT INTO `sys_log_error` VALUES (1863964860761513997, '/favicon.ico', 'GET', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource favicon.ico.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', NULL, '2025-01-07 22:33:29'); +INSERT INTO `sys_log_error` VALUES (1863964860761513998, '/favicon.ico', 'GET', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource favicon.ico.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', NULL, '2025-01-07 22:39:08'); +INSERT INTO `sys_log_error` VALUES (1863964860761513999, '/favicon.ico', 'GET', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource favicon.ico.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', NULL, '2025-01-07 22:39:21'); +INSERT INTO `sys_log_error` VALUES (1863964860761514000, '/favicon.ico', 'GET', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource favicon.ico.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', NULL, '2025-01-07 22:45:41'); +INSERT INTO `sys_log_error` VALUES (1863964860761514001, '/favicon.ico', 'GET', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource favicon.ico.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', NULL, '2025-01-07 22:47:36'); +INSERT INTO `sys_log_error` VALUES (1863964860761514002, '/favicon.ico', 'GET', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.web.servlet.resource.NoResourceFoundException: No static resource favicon.ico.\r\n at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:585)\r\n at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', NULL, '2025-01-07 22:58:58'); +INSERT INTO `sys_log_error` VALUES (1863964860761514003, '/captcha', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.web.HttpRequestMethodNotSupportedException: Request method \'POST\' is not supported\r\n at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:267)\r\n at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:441)\r\n at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:382)\r\n at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:127)\r\n at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:68)\r\n at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:507)\r\n at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1283)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1065)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', NULL, '2025-01-07 23:00:40'); +INSERT INTO `sys_log_error` VALUES (1863964860761514004, '/captcha', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.HttpRequestMethodNotSupportedException: Request method \'POST\' is not supported\r\n at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:267)\r\n at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:441)\r\n at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:382)\r\n at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:127)\r\n at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:68)\r\n at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:507)\r\n at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1283)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1065)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', NULL, '2025-01-07 23:00:40'); +INSERT INTO `sys_log_error` VALUES (1863964860761514005, '/captcha', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.web.HttpRequestMethodNotSupportedException: Request method \'POST\' is not supported\r\n at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:267)\r\n at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:441)\r\n at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:382)\r\n at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:127)\r\n at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:68)\r\n at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:507)\r\n at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1283)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1065)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', NULL, '2025-01-07 23:00:40'); +INSERT INTO `sys_log_error` VALUES (1863964860761514006, '/captcha', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.web.HttpRequestMethodNotSupportedException: Request method \'POST\' is not supported\r\n at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:267)\r\n at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:441)\r\n at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:382)\r\n at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:127)\r\n at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:68)\r\n at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:507)\r\n at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1283)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1065)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\n', NULL, '2025-01-07 23:00:47'); +INSERT INTO `sys_log_error` VALUES (1863964860761514007, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:36:00'); +INSERT INTO `sys_log_error` VALUES (1863964860761514008, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:36:02'); +INSERT INTO `sys_log_error` VALUES (1863964860761514009, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:36:02'); +INSERT INTO `sys_log_error` VALUES (1863964860761514010, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:36:58'); +INSERT INTO `sys_log_error` VALUES (1863964860761514011, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:36:59'); +INSERT INTO `sys_log_error` VALUES (1863964860761514012, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:36:59'); +INSERT INTO `sys_log_error` VALUES (1863964860761514013, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:37:02'); +INSERT INTO `sys_log_error` VALUES (1863964860761514014, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:37:13'); +INSERT INTO `sys_log_error` VALUES (1863964860761514015, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:37:14'); +INSERT INTO `sys_log_error` VALUES (1863964860761514016, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:37:14'); +INSERT INTO `sys_log_error` VALUES (1863964860761514017, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:37:14'); +INSERT INTO `sys_log_error` VALUES (1863964860761514018, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:37:42'); +INSERT INTO `sys_log_error` VALUES (1863964860761514019, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:37:42'); +INSERT INTO `sys_log_error` VALUES (1863964860761514020, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:37:43'); +INSERT INTO `sys_log_error` VALUES (1863964860761514021, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:37:44'); +INSERT INTO `sys_log_error` VALUES (1863964860761514022, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:38:09'); +INSERT INTO `sys_log_error` VALUES (1863964860761514023, '/login', 'POST', NULL, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', '0:0:0:0:0:0:0:1', 'org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354)\r\n at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:184)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:135)\r\n at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)\r\n at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)\r\n at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)\r\n at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)\r\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)\r\n at java.base/java.lang.Thread.run(Thread.java:840)\r\nCaused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 9] (through reference chain: io.modules.security.dto.LoginDTO[\"uuid\"])\r\n at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)\r\n at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1752)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1526)\r\n at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1431)\r\n at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:943)\r\n at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1424)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)\r\n at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)\r\n at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)\r\n at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)\r\n at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)\r\n at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)\r\n at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)\r\n at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)\r\n ... 69 more\r\n', NULL, '2025-01-07 23:38:25'); + +-- ---------------------------- +-- Table structure for sys_log_login +-- ---------------------------- +DROP TABLE IF EXISTS `sys_log_login`; +CREATE TABLE `sys_log_login` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `operation` tinyint(3) UNSIGNED NULL DEFAULT NULL COMMENT '用户操作 0:用户登录 1:用户退出', + `status` tinyint(3) UNSIGNED NOT NULL COMMENT '状态 0:失败 1:成功 2:账号已锁定', + `user_agent` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户代理', + `ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作IP', + `creator_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者', + `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_status`(`status`) USING BTREE, + INDEX `idx_create_date`(`create_date`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1863964089647108108 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '登录日志' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_log_login +-- ---------------------------- +INSERT INTO `sys_log_login` VALUES (1863925297460568066, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 20:36:36'); +INSERT INTO `sys_log_login` VALUES (1863925300618878977, 0, 1, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 20:36:36'); +INSERT INTO `sys_log_login` VALUES (1863925345682481153, 0, 1, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 20:36:47'); +INSERT INTO `sys_log_login` VALUES (1863939381203582977, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 21:32:33'); +INSERT INTO `sys_log_login` VALUES (1863939412719583234, 0, 1, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 21:32:41'); +INSERT INTO `sys_log_login` VALUES (1863947491083382785, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 22:04:47'); +INSERT INTO `sys_log_login` VALUES (1863953209471557633, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 22:27:30'); +INSERT INTO `sys_log_login` VALUES (1863955672345878530, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 22:37:17'); +INSERT INTO `sys_log_login` VALUES (1863956227231440897, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 22:39:30'); +INSERT INTO `sys_log_login` VALUES (1863956599366844417, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 22:40:58'); +INSERT INTO `sys_log_login` VALUES (1863957112552456193, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 22:43:01'); +INSERT INTO `sys_log_login` VALUES (1863957603990654977, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 22:44:50'); +INSERT INTO `sys_log_login` VALUES (1863959345478250497, 0, 1, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 22:51:53'); +INSERT INTO `sys_log_login` VALUES (1863959358333792258, 1, 1, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 22:51:56'); +INSERT INTO `sys_log_login` VALUES (1863959391993081857, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 22:52:04'); +INSERT INTO `sys_log_login` VALUES (1863960454070546433, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 22:56:18'); +INSERT INTO `sys_log_login` VALUES (1863961204721041410, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 22:59:16'); +INSERT INTO `sys_log_login` VALUES (1863964042377302018, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 23:10:33'); +INSERT INTO `sys_log_login` VALUES (1863964089647108098, 0, 1, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-03 23:10:44'); +INSERT INTO `sys_log_login` VALUES (1863964089647108099, 0, 1, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-10 18:42:33'); +INSERT INTO `sys_log_login` VALUES (1863964089647108100, 0, 1, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-10 21:12:51'); +INSERT INTO `sys_log_login` VALUES (1863964089647108101, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-10 21:58:13'); +INSERT INTO `sys_log_login` VALUES (1863964089647108102, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-10 21:58:18'); +INSERT INTO `sys_log_login` VALUES (1863964089647108103, 0, 1, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-10 21:58:24'); +INSERT INTO `sys_log_login` VALUES (1863964089647108104, 0, 1, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-12 19:42:48'); +INSERT INTO `sys_log_login` VALUES (1863964089647108105, 0, 1, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-12 23:03:14'); +INSERT INTO `sys_log_login` VALUES (1863964089647108106, 0, 1, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2024-12-12 23:06:24'); +INSERT INTO `sys_log_login` VALUES (1863964089647108107, 0, 0, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 'admin', 1067246875800000001, '2025-01-07 20:11:56'); + +-- ---------------------------- +-- Table structure for sys_log_operation +-- ---------------------------- +DROP TABLE IF EXISTS `sys_log_operation`; +CREATE TABLE `sys_log_operation` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `operation` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户操作', + `request_uri` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求URI', + `request_method` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '请求方式', + `request_params` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求参数', + `request_time` int(10) UNSIGNED NOT NULL COMMENT '请求时长(毫秒)', + `user_agent` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户代理', + `ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作IP', + `status` tinyint(3) UNSIGNED NOT NULL COMMENT '状态 0:失败 1:成功', + `creator_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者', + `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_create_date`(`create_date`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1863969089488199751 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '操作日志' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_log_operation +-- ---------------------------- +INSERT INTO `sys_log_operation` VALUES (1863926049885151233, '导出', '/admin/sys/log/operation/export', 'GET', '{\"status\":\"\",\"token\":\"257b44393c74734d55fcf0378403657a\"}', 624, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-03 20:39:35'); +INSERT INTO `sys_log_operation` VALUES (1863939926471491586, '修改', '/admin/sys/menu', 'PUT', '{\"id\":1863937571759878146,\"pid\":0,\"children\":[],\"name\":\"轮播管理\",\"url\":\"item/slides\",\"menuType\":0,\"icon\":\"icon-desktop\",\"permissions\":null,\"sort\":0,\"createDate\":null,\"parentName\":\"一级菜单\"}', 90, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-03 21:34:43'); +INSERT INTO `sys_log_operation` VALUES (1863940095816515586, '保存', '/admin/sys/menu', 'POST', '{\"id\":null,\"pid\":0,\"children\":[],\"name\":\"文章\",\"url\":\"\",\"menuType\":0,\"icon\":\"icon-layout-fill\",\"permissions\":\"\",\"sort\":0,\"createDate\":null,\"parentName\":\"一级菜单\"}', 91, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-03 21:35:24'); +INSERT INTO `sys_log_operation` VALUES (1863940157212737537, '修改', '/admin/sys/menu', 'PUT', '{\"id\":1863937572162531329,\"pid\":1863940095447416834,\"children\":[],\"name\":\"文章管理\",\"url\":\"item/article\",\"menuType\":0,\"icon\":\"icon-desktop\",\"permissions\":null,\"sort\":0,\"createDate\":null,\"parentName\":\"文章\"}', 87, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-03 21:35:38'); +INSERT INTO `sys_log_operation` VALUES (1863940221251371009, '修改', '/admin/sys/menu', 'PUT', '{\"id\":1067246875800000053,\"pid\":0,\"children\":[],\"name\":\"系统监控\",\"url\":null,\"menuType\":0,\"icon\":\"icon-desktop\",\"permissions\":null,\"sort\":900,\"createDate\":null,\"parentName\":\"一级菜单\"}', 84, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-03 21:35:54'); +INSERT INTO `sys_log_operation` VALUES (1863940242122227714, '修改', '/admin/sys/menu', 'PUT', '{\"id\":1067246875800000046,\"pid\":0,\"children\":[],\"name\":\"日志管理\",\"url\":null,\"menuType\":0,\"icon\":\"icon-container\",\"permissions\":null,\"sort\":890,\"createDate\":null,\"parentName\":\"一级菜单\"}', 93, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-03 21:35:59'); +INSERT INTO `sys_log_operation` VALUES (1863940265404809217, '修改', '/admin/sys/menu', 'PUT', '{\"id\":1067246875800000035,\"pid\":0,\"children\":[],\"name\":\"系统设置\",\"url\":null,\"menuType\":0,\"icon\":\"icon-setting\",\"permissions\":null,\"sort\":880,\"createDate\":null,\"parentName\":\"一级菜单\"}', 79, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-03 21:36:04'); +INSERT INTO `sys_log_operation` VALUES (1863940291984113665, '修改', '/admin/sys/menu', 'PUT', '{\"id\":1863937571759878146,\"pid\":0,\"children\":[],\"name\":\"轮播管理\",\"url\":\"item/slides\",\"menuType\":0,\"icon\":\"icon-desktop\",\"permissions\":null,\"sort\":100,\"createDate\":null,\"parentName\":\"一级菜单\"}', 80, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-03 21:36:11'); +INSERT INTO `sys_log_operation` VALUES (1863940317191880705, '修改', '/admin/sys/menu', 'PUT', '{\"id\":1067246875800000002,\"pid\":0,\"children\":[],\"name\":\"权限管理\",\"url\":null,\"menuType\":0,\"icon\":\"icon-safetycertificate\",\"permissions\":null,\"sort\":870,\"createDate\":null,\"parentName\":\"一级菜单\"}', 83, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-03 21:36:17'); +INSERT INTO `sys_log_operation` VALUES (1863940355401990145, '修改', '/admin/sys/menu', 'PUT', '{\"id\":1863940095447416834,\"pid\":0,\"children\":[],\"name\":\"文章\",\"url\":\"\",\"menuType\":0,\"icon\":\"icon-layout-fill\",\"permissions\":\"\",\"sort\":105,\"createDate\":null,\"parentName\":\"一级菜单\"}', 81, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-03 21:36:26'); +INSERT INTO `sys_log_operation` VALUES (1863964878180458499, '保存', '/admin/item/slides', 'POST', '{\"id\":1863964878180458498,\"name\":\"1\",\"sort\":1,\"path\":\"1\",\"createTime\":null}', 43, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-03 23:13:52'); +INSERT INTO `sys_log_operation` VALUES (1863968483197411330, '保存', '/admin/item/slides', 'POST', '{\"id\":1863968483197411329,\"name\":\"1\",\"sort\":1,\"path\":\"1\",\"createTime\":null}', 33, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-03 23:28:12'); +INSERT INTO `sys_log_operation` VALUES (1863969039039111169, '保存', '/admin/item/slides', 'POST', '{\"id\":1863969038963613698,\"name\":\"1\",\"sort\":1,\"path\":\"1\",\"createTime\":null}', 55, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-03 23:30:24'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199681, '保存', '/admin/item/slides', 'POST', '{\"id\":1863969089421090818,\"name\":\"1\",\"sort\":1,\"path\":\"1\",\"createTime\":null}', 8, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-03 23:30:36'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199682, '保存', '/admin/item/slides', 'POST', '{\"id\":2,\"name\":\"1\",\"sort\":1,\"path\":\"1\",\"createTime\":null}', 8, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-03 23:34:39'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199683, '保存', '/admin/item/slides', 'POST', '{\"id\":3,\"name\":\"1\",\"sort\":1,\"path\":\"http://localhost:8081/front/upload/1733330281401.png\",\"createTime\":null}', 38, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 20:31:29'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199684, '删除', '/admin/item/slides', 'DELETE', '[1]', 423, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 20:34:59'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199685, '删除', '/admin/item/slides', 'DELETE', '[2]', 3, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 20:35:01'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199686, '修改', '/admin/item/slides', 'PUT', '{\"id\":3,\"name\":\"1\",\"sort\":1,\"path\":\"http://localhost:8081/front/upload/1733330281401.png\",\"createTime\":1733833889000}', 10, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 20:37:05'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199687, '修改', '/admin/item/slides', 'PUT', '{\"id\":3,\"name\":\"1\",\"sort\":1,\"path\":\"http://localhost:8081/front/upload/1733330281401.png\",\"createTime\":1733833889000}', 9, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 20:37:12'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199688, '修改', '/admin/item/slides', 'PUT', '{\"id\":3,\"name\":\"1\",\"sort\":1,\"path\":\"http://localhost:8081/front/upload/1733330281401.png\",\"createTime\":1733833889000}', 8, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 20:38:10'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199689, '修改', '/admin/item/slides', 'PUT', '{\"id\":3,\"name\":\"2\",\"sort\":1,\"path\":\"http://localhost:8081/front/upload/1733330281401.png\",\"createTime\":1733833889000}', 8, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 20:38:26'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199690, '修改', '/admin/item/slides', 'PUT', '{\"id\":3,\"name\":\"2\",\"sort\":1,\"path\":\"http://localhost:8081/front/upload/1733330281401.png\",\"type\":\"首页轮播\",\"createTime\":1733833889000}', 103, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 20:39:17'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199691, '保存', '/admin/item/article', 'POST', '{\"id\":1,\"title\":\"沙雅小刀:真传1000年\",\"introduction\":\"新疆的很多少数民族,无论是维吾尔族或是哈萨克族、柯尔克孜族的男子,都喜爱在腰间佩戴一把小刀。夏日瓜果飘香之时,在路旁买上一个大西瓜或哈密瓜,用不着把瓜掰得四分五裂,只需拿出随身携带的小刀切开,就可以大快朵颐;新疆少数民族爱吃牛羊肉,当美味飘香的牛羊肉端上桌时,宾客们纷纷亮出各式各样的刀子,让宴席顿时生辉。其中,沙雅小刀十分引人注目。\",\"userId\":null,\"content\":\"

沙雅小刀:真传1000年

  新疆的很多少数民族,无论是维吾尔族或是哈萨克族、柯尔克孜族的男子,都喜爱在腰间佩戴一把小刀。夏日瓜果飘香之时,在路旁买上一个大西瓜或哈密瓜,用不着把瓜掰得四分五裂,只需拿出随身携带的小刀切开,就可以大快朵颐;新疆少数民族爱吃牛羊肉,当美味飘香的牛羊肉端上桌时,宾客们纷纷亮出各式各样的刀子,让宴席顿时生辉。其中,沙雅小刀十分引人注目。

  穆巴拉克是新疆沙雅县一个普通的维吾尔族刀匠。来到他的作坊时,他正在聚精会神地磨刀。他的小刀作坊位于当地维吾尔族称为“依盖尔齐巴扎”的商业街,意思是做鞍具、套具者的集市。在上世纪之初,这里是匠人的天下,铁匠、皮匠、“皮洽克奇”(精通小刀制作的人)、钉马掌的,应有尽有。现在,这条街上像穆巴拉克这样的刀匠依然很多。这归功于当地政府和文化部门、旅游部门的慧眼。2005年3月,沙雅县成立了沙雅小刀协会;2008年3月,沙雅民族手工艺制作专业合作社成立,发展社员150名。该合作社年产10类130余种规格的小刀,远销天山南北和西亚、欧洲等地。现在已经成为沙雅县一个标志性的品牌。

  穆巴拉克开始向我展示制刀技艺。他一手用长铁钳夹住小刀的造型锻件,一手拿起小铁锤敲打,同时示意徒弟手持大铁锤锻打,并不时用小锤试一试砸的力度。两人配合很是默契,你一下、我一下,铁锤不时划着优美的弧线,发出叮叮当当的声响。

  感觉差不多了,他停下来,仔细观察锻打的情况。看起来徒弟不仅卖力气,砸得也很到位,穆巴拉克露出了赞许的笑容。他指着小刀说:“你看,经过锻打,小刀的基本造型就确定了,等一会儿还要烧红,然后淬火。”淬火就是将烧得发红的钢放入液体中快速冷却。放在凉水中淬火的钢硬度高但是发脆,因此淬火不能用凉水,而要用清油。“淬火是小刀工匠们世代传承的绝技,相互保密,绝不外传。”穆巴拉克说。据说,经名师淬火处理过的小刀锋刃锐利,用其削刮铁条,但见铁屑迎刃而起,而小刀锋却不曾崩口、卷刃。

  由于有言在先,我们只好忍住好奇心理,退出了作坊,无缘欣赏到这一家传绝技。穆巴拉克把淬火后的小刀交给徒弟去打磨。打磨必须用手动砂轮和磨光轮,现在传统工艺中稍微发生变化的是,有的匠人也用电动砂轮。打磨虽然简单,但却是必不可少的工序。穆巴拉克的徒弟已经是这方面的熟练工了,很快就把小刀磨得光洁锃亮。

  刀的制作历史就是一部人类生产力的演进史。公元10世纪以后,维吾尔族成为塔里木盆地周缘绿洲中农业民族的主体,悠久的锻铁历史加上农耕文化的积淀,使小刀的制作技艺愈加精湛。早在魏晋时期,当地制作小刀的民间艺人就不断探索小刀的制作工艺,坚韧锋利的小刀常镶配自然脱落的珍稀野生动物角骨、宝石等珍宝,图案明丽,匠心独具,颇具观赏和收藏价值。

  史料记载,宋真宗大中祥符三年(公元1010年),龟兹回鹘大臣左温把小刀作为贡品献给了中央王廷。那时的龟兹,包括今天的库车、沙雅、新和、拜城和阿克苏诸地。从这段可信的历史看,沙雅小刀的制作历史可谓由来已久,且在当时就负有盛名。

  最后一道工艺,在过去算是秘密,现在已经众所周知,就是用油煮、蜡磨的方法使小刀光亮,不生锈。

  由于制作一把沙雅小刀需要经过200多道工序,即使穆巴拉克手脚再麻利,每天最多也只能做两把,一个月总产量仅四五十把,利润很低。现在,很多匠人使用不锈钢或镀铬工艺来节省时间,提高效率。“我们用手工!”穆巴拉克郑重地强调。

  这使我油然而生一种敬意。毕竟,我们需要一种深刻的记忆,它来自于祖先,这是古代延续至今的血脉、智慧和力量的记录。

  [故事]

  “塔石罕”小刀的由来

  沙雅小刀最有名的要算“塔石罕”小刀了。“塔石罕”是群众对一位匠人的尊称,他的原名叫“塔石·塔里甫”。由于他制作的刀别具一格,所以人们在他的名字后面加了一个“罕”字来命名。

  上世纪20年代,塔石·塔力甫为了有别于当时同样出名的英吉沙小刀,开始把沙雅小刀的刀型往小尺寸上发展。他用上等的好钢做原料,冶炼并打制成玲珑小巧的折把刀、弯把刀、直把刀,特点是实用、小巧、美观。他还把象牙、翡翠、宝石等镶嵌在刀把上,刀把的纹饰与图案色彩丰富,小刀因此而名贵。“塔石罕”小刀就成了沙雅小刀的一个代名词。

  [小贴士]

  挑选小刀的技巧

  除了沙雅小刀外,新疆著名的小刀还有:英吉沙工艺小刀、伊犁沙木萨克折刀、焉耆陈正套刀、莎车买买提折刀、库车小刀、姑墨小靴刀、和田墨玉奎雅折刀。

  从制作工艺上分,新疆小刀主要分为白钢、黑钢两类。 所谓白钢,就是不锈钢刀身的,这种刀子一般都是机器模具压出来的,看着漂亮,其实钢口不好,中看不中用,主要针对内地人市场,新疆本地人一般不会买这种刀子。黑钢的刀子,就是纯手工打制出来的,虽然不太漂亮,但很实用。

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/2018081314001394443.png\",\"createTime\":null,\"tag\":\"文件\",\"type\":\"文化鉴赏\"}', 52, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 21:48:52'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199692, '修改', '/admin/item/article', 'PUT', '{\"id\":1,\"title\":\"沙雅小刀:真传1000年\",\"introduction\":\"新疆的很多少数民族,无论是维吾尔族或是哈萨克族、柯尔克孜族的男子,都喜爱在腰间佩戴一把小刀。夏日瓜果飘香之时,在路旁买上一个大西瓜或哈密瓜,用不着把瓜掰得四分五裂,只需拿出随身携带的小刀切开,就可以大快朵颐;新疆少数民族爱吃牛羊肉,当美味飘香的牛羊肉端上桌时,宾客们纷纷亮出各式各样的刀子,让宴席顿时生辉。其中,沙雅小刀十分引人注目。\",\"userId\":null,\"content\":\"

沙雅小刀:真传1000年

  新疆的很多少数民族,无论是维吾尔族或是哈萨克族、柯尔克孜族的男子,都喜爱在腰间佩戴一把小刀。夏日瓜果飘香之时,在路旁买上一个大西瓜或哈密瓜,用不着把瓜掰得四分五裂,只需拿出随身携带的小刀切开,就可以大快朵颐;新疆少数民族爱吃牛羊肉,当美味飘香的牛羊肉端上桌时,宾客们纷纷亮出各式各样的刀子,让宴席顿时生辉。其中,沙雅小刀十分引人注目。

  穆巴拉克是新疆沙雅县一个普通的维吾尔族刀匠。来到他的作坊时,他正在聚精会神地磨刀。他的小刀作坊位于当地维吾尔族称为“依盖尔齐巴扎”的商业街,意思是做鞍具、套具者的集市。在上世纪之初,这里是匠人的天下,铁匠、皮匠、“皮洽克奇”(精通小刀制作的人)、钉马掌的,应有尽有。现在,这条街上像穆巴拉克这样的刀匠依然很多。这归功于当地政府和文化部门、旅游部门的慧眼。2005年3月,沙雅县成立了沙雅小刀协会;2008年3月,沙雅民族手工艺制作专业合作社成立,发展社员150名。该合作社年产10类130余种规格的小刀,远销天山南北和西亚、欧洲等地。现在已经成为沙雅县一个标志性的品牌。

  穆巴拉克开始向我展示制刀技艺。他一手用长铁钳夹住小刀的造型锻件,一手拿起小铁锤敲打,同时示意徒弟手持大铁锤锻打,并不时用小锤试一试砸的力度。两人配合很是默契,你一下、我一下,铁锤不时划着优美的弧线,发出叮叮当当的声响。

  感觉差不多了,他停下来,仔细观察锻打的情况。看起来徒弟不仅卖力气,砸得也很到位,穆巴拉克露出了赞许的笑容。他指着小刀说:“你看,经过锻打,小刀的基本造型就确定了,等一会儿还要烧红,然后淬火。”淬火就是将烧得发红的钢放入液体中快速冷却。放在凉水中淬火的钢硬度高但是发脆,因此淬火不能用凉水,而要用清油。“淬火是小刀工匠们世代传承的绝技,相互保密,绝不外传。”穆巴拉克说。据说,经名师淬火处理过的小刀锋刃锐利,用其削刮铁条,但见铁屑迎刃而起,而小刀锋却不曾崩口、卷刃。

  由于有言在先,我们只好忍住好奇心理,退出了作坊,无缘欣赏到这一家传绝技。穆巴拉克把淬火后的小刀交给徒弟去打磨。打磨必须用手动砂轮和磨光轮,现在传统工艺中稍微发生变化的是,有的匠人也用电动砂轮。打磨虽然简单,但却是必不可少的工序。穆巴拉克的徒弟已经是这方面的熟练工了,很快就把小刀磨得光洁锃亮。

  刀的制作历史就是一部人类生产力的演进史。公元10世纪以后,维吾尔族成为塔里木盆地周缘绿洲中农业民族的主体,悠久的锻铁历史加上农耕文化的积淀,使小刀的制作技艺愈加精湛。早在魏晋时期,当地制作小刀的民间艺人就不断探索小刀的制作工艺,坚韧锋利的小刀常镶配自然脱落的珍稀野生动物角骨、宝石等珍宝,图案明丽,匠心独具,颇具观赏和收藏价值。

  史料记载,宋真宗大中祥符三年(公元1010年),龟兹回鹘大臣左温把小刀作为贡品献给了中央王廷。那时的龟兹,包括今天的库车、沙雅、新和、拜城和阿克苏诸地。从这段可信的历史看,沙雅小刀的制作历史可谓由来已久,且在当时就负有盛名。

  最后一道工艺,在过去算是秘密,现在已经众所周知,就是用油煮、蜡磨的方法使小刀光亮,不生锈。

  由于制作一把沙雅小刀需要经过200多道工序,即使穆巴拉克手脚再麻利,每天最多也只能做两把,一个月总产量仅四五十把,利润很低。现在,很多匠人使用不锈钢或镀铬工艺来节省时间,提高效率。“我们用手工!”穆巴拉克郑重地强调。

  这使我油然而生一种敬意。毕竟,我们需要一种深刻的记忆,它来自于祖先,这是古代延续至今的血脉、智慧和力量的记录。

  [故事]

  “塔石罕”小刀的由来

  沙雅小刀最有名的要算“塔石罕”小刀了。“塔石罕”是群众对一位匠人的尊称,他的原名叫“塔石·塔里甫”。由于他制作的刀别具一格,所以人们在他的名字后面加了一个“罕”字来命名。

  上世纪20年代,塔石·塔力甫为了有别于当时同样出名的英吉沙小刀,开始把沙雅小刀的刀型往小尺寸上发展。他用上等的好钢做原料,冶炼并打制成玲珑小巧的折把刀、弯把刀、直把刀,特点是实用、小巧、美观。他还把象牙、翡翠、宝石等镶嵌在刀把上,刀把的纹饰与图案色彩丰富,小刀因此而名贵。“塔石罕”小刀就成了沙雅小刀的一个代名词。

  [小贴士]

  挑选小刀的技巧

  除了沙雅小刀外,新疆著名的小刀还有:英吉沙工艺小刀、伊犁沙木萨克折刀、焉耆陈正套刀、莎车买买提折刀、库车小刀、姑墨小靴刀、和田墨玉奎雅折刀。

  从制作工艺上分,新疆小刀主要分为白钢、黑钢两类。 所谓白钢,就是不锈钢刀身的,这种刀子一般都是机器模具压出来的,看着漂亮,其实钢口不好,中看不中用,主要针对内地人市场,新疆本地人一般不会买这种刀子。黑钢的刀子,就是纯手工打制出来的,虽然不太漂亮,但很实用。

\",\"sort\":1,\"star\":0,\"cover\":\"http://localhost:8081/front/upload/2018081314001394443.png\",\"createTime\":1733838669000,\"tag\":\"文化\",\"type\":null}', 9, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 21:59:16'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199693, '修改', '/admin/item/article', 'PUT', '{\"id\":1,\"title\":\"沙雅小刀:真传1000年\",\"introduction\":\"新疆的很多少数民族,无论是维吾尔族或是哈萨克族、柯尔克孜族的男子,都喜爱在腰间佩戴一把小刀。夏日瓜果飘香之时,在路旁买上一个大西瓜或哈密瓜,用不着把瓜掰得四分五裂,只需拿出随身携带的小刀切开,就可以大快朵颐;新疆少数民族爱吃牛羊肉,当美味飘香的牛羊肉端上桌时,宾客们纷纷亮出各式各样的刀子,让宴席顿时生辉。其中,沙雅小刀十分引人注目。\",\"userId\":null,\"content\":\"

沙雅小刀:真传1000年

  新疆的很多少数民族,无论是维吾尔族或是哈萨克族、柯尔克孜族的男子,都喜爱在腰间佩戴一把小刀。夏日瓜果飘香之时,在路旁买上一个大西瓜或哈密瓜,用不着把瓜掰得四分五裂,只需拿出随身携带的小刀切开,就可以大快朵颐;新疆少数民族爱吃牛羊肉,当美味飘香的牛羊肉端上桌时,宾客们纷纷亮出各式各样的刀子,让宴席顿时生辉。其中,沙雅小刀十分引人注目。

  穆巴拉克是新疆沙雅县一个普通的维吾尔族刀匠。来到他的作坊时,他正在聚精会神地磨刀。他的小刀作坊位于当地维吾尔族称为“依盖尔齐巴扎”的商业街,意思是做鞍具、套具者的集市。在上世纪之初,这里是匠人的天下,铁匠、皮匠、“皮洽克奇”(精通小刀制作的人)、钉马掌的,应有尽有。现在,这条街上像穆巴拉克这样的刀匠依然很多。这归功于当地政府和文化部门、旅游部门的慧眼。2005年3月,沙雅县成立了沙雅小刀协会;2008年3月,沙雅民族手工艺制作专业合作社成立,发展社员150名。该合作社年产10类130余种规格的小刀,远销天山南北和西亚、欧洲等地。现在已经成为沙雅县一个标志性的品牌。

  穆巴拉克开始向我展示制刀技艺。他一手用长铁钳夹住小刀的造型锻件,一手拿起小铁锤敲打,同时示意徒弟手持大铁锤锻打,并不时用小锤试一试砸的力度。两人配合很是默契,你一下、我一下,铁锤不时划着优美的弧线,发出叮叮当当的声响。

  感觉差不多了,他停下来,仔细观察锻打的情况。看起来徒弟不仅卖力气,砸得也很到位,穆巴拉克露出了赞许的笑容。他指着小刀说:“你看,经过锻打,小刀的基本造型就确定了,等一会儿还要烧红,然后淬火。”淬火就是将烧得发红的钢放入液体中快速冷却。放在凉水中淬火的钢硬度高但是发脆,因此淬火不能用凉水,而要用清油。“淬火是小刀工匠们世代传承的绝技,相互保密,绝不外传。”穆巴拉克说。据说,经名师淬火处理过的小刀锋刃锐利,用其削刮铁条,但见铁屑迎刃而起,而小刀锋却不曾崩口、卷刃。

  由于有言在先,我们只好忍住好奇心理,退出了作坊,无缘欣赏到这一家传绝技。穆巴拉克把淬火后的小刀交给徒弟去打磨。打磨必须用手动砂轮和磨光轮,现在传统工艺中稍微发生变化的是,有的匠人也用电动砂轮。打磨虽然简单,但却是必不可少的工序。穆巴拉克的徒弟已经是这方面的熟练工了,很快就把小刀磨得光洁锃亮。

  刀的制作历史就是一部人类生产力的演进史。公元10世纪以后,维吾尔族成为塔里木盆地周缘绿洲中农业民族的主体,悠久的锻铁历史加上农耕文化的积淀,使小刀的制作技艺愈加精湛。早在魏晋时期,当地制作小刀的民间艺人就不断探索小刀的制作工艺,坚韧锋利的小刀常镶配自然脱落的珍稀野生动物角骨、宝石等珍宝,图案明丽,匠心独具,颇具观赏和收藏价值。

  史料记载,宋真宗大中祥符三年(公元1010年),龟兹回鹘大臣左温把小刀作为贡品献给了中央王廷。那时的龟兹,包括今天的库车、沙雅、新和、拜城和阿克苏诸地。从这段可信的历史看,沙雅小刀的制作历史可谓由来已久,且在当时就负有盛名。

  最后一道工艺,在过去算是秘密,现在已经众所周知,就是用油煮、蜡磨的方法使小刀光亮,不生锈。

  由于制作一把沙雅小刀需要经过200多道工序,即使穆巴拉克手脚再麻利,每天最多也只能做两把,一个月总产量仅四五十把,利润很低。现在,很多匠人使用不锈钢或镀铬工艺来节省时间,提高效率。“我们用手工!”穆巴拉克郑重地强调。

  这使我油然而生一种敬意。毕竟,我们需要一种深刻的记忆,它来自于祖先,这是古代延续至今的血脉、智慧和力量的记录。

  [故事]

  “塔石罕”小刀的由来

  沙雅小刀最有名的要算“塔石罕”小刀了。“塔石罕”是群众对一位匠人的尊称,他的原名叫“塔石·塔里甫”。由于他制作的刀别具一格,所以人们在他的名字后面加了一个“罕”字来命名。

  上世纪20年代,塔石·塔力甫为了有别于当时同样出名的英吉沙小刀,开始把沙雅小刀的刀型往小尺寸上发展。他用上等的好钢做原料,冶炼并打制成玲珑小巧的折把刀、弯把刀、直把刀,特点是实用、小巧、美观。他还把象牙、翡翠、宝石等镶嵌在刀把上,刀把的纹饰与图案色彩丰富,小刀因此而名贵。“塔石罕”小刀就成了沙雅小刀的一个代名词。

  [小贴士]

  挑选小刀的技巧

  除了沙雅小刀外,新疆著名的小刀还有:英吉沙工艺小刀、伊犁沙木萨克折刀、焉耆陈正套刀、莎车买买提折刀、库车小刀、姑墨小靴刀、和田墨玉奎雅折刀。

  从制作工艺上分,新疆小刀主要分为白钢、黑钢两类。 所谓白钢,就是不锈钢刀身的,这种刀子一般都是机器模具压出来的,看着漂亮,其实钢口不好,中看不中用,主要针对内地人市场,新疆本地人一般不会买这种刀子。黑钢的刀子,就是纯手工打制出来的,虽然不太漂亮,但很实用。

\",\"sort\":1,\"star\":0,\"cover\":\"http://localhost:8081/front/upload/2018081314001394443.png\",\"createTime\":1733838669000,\"tag\":\"文化\",\"type\":null}', 7, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 22:00:26'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199694, '修改', '/admin/item/article', 'PUT', '{\"id\":1,\"title\":\"沙雅小刀:真传1000年\",\"introduction\":\"新疆的很多少数民族,无论是维吾尔族或是哈萨克族、柯尔克孜族的男子,都喜爱在腰间佩戴一把小刀。夏日瓜果飘香之时,在路旁买上一个大西瓜或哈密瓜,用不着把瓜掰得四分五裂,只需拿出随身携带的小刀切开,就可以大快朵颐;新疆少数民族爱吃牛羊肉,当美味飘香的牛羊肉端上桌时,宾客们纷纷亮出各式各样的刀子,让宴席顿时生辉。其中,沙雅小刀十分引人注目。\",\"userId\":null,\"content\":\"

沙雅小刀:真传1000年

  新疆的很多少数民族,无论是维吾尔族或是哈萨克族、柯尔克孜族的男子,都喜爱在腰间佩戴一把小刀。夏日瓜果飘香之时,在路旁买上一个大西瓜或哈密瓜,用不着把瓜掰得四分五裂,只需拿出随身携带的小刀切开,就可以大快朵颐;新疆少数民族爱吃牛羊肉,当美味飘香的牛羊肉端上桌时,宾客们纷纷亮出各式各样的刀子,让宴席顿时生辉。其中,沙雅小刀十分引人注目。

  穆巴拉克是新疆沙雅县一个普通的维吾尔族刀匠。来到他的作坊时,他正在聚精会神地磨刀。他的小刀作坊位于当地维吾尔族称为“依盖尔齐巴扎”的商业街,意思是做鞍具、套具者的集市。在上世纪之初,这里是匠人的天下,铁匠、皮匠、“皮洽克奇”(精通小刀制作的人)、钉马掌的,应有尽有。现在,这条街上像穆巴拉克这样的刀匠依然很多。这归功于当地政府和文化部门、旅游部门的慧眼。2005年3月,沙雅县成立了沙雅小刀协会;2008年3月,沙雅民族手工艺制作专业合作社成立,发展社员150名。该合作社年产10类130余种规格的小刀,远销天山南北和西亚、欧洲等地。现在已经成为沙雅县一个标志性的品牌。

  穆巴拉克开始向我展示制刀技艺。他一手用长铁钳夹住小刀的造型锻件,一手拿起小铁锤敲打,同时示意徒弟手持大铁锤锻打,并不时用小锤试一试砸的力度。两人配合很是默契,你一下、我一下,铁锤不时划着优美的弧线,发出叮叮当当的声响。

  感觉差不多了,他停下来,仔细观察锻打的情况。看起来徒弟不仅卖力气,砸得也很到位,穆巴拉克露出了赞许的笑容。他指着小刀说:“你看,经过锻打,小刀的基本造型就确定了,等一会儿还要烧红,然后淬火。”淬火就是将烧得发红的钢放入液体中快速冷却。放在凉水中淬火的钢硬度高但是发脆,因此淬火不能用凉水,而要用清油。“淬火是小刀工匠们世代传承的绝技,相互保密,绝不外传。”穆巴拉克说。据说,经名师淬火处理过的小刀锋刃锐利,用其削刮铁条,但见铁屑迎刃而起,而小刀锋却不曾崩口、卷刃。

  由于有言在先,我们只好忍住好奇心理,退出了作坊,无缘欣赏到这一家传绝技。穆巴拉克把淬火后的小刀交给徒弟去打磨。打磨必须用手动砂轮和磨光轮,现在传统工艺中稍微发生变化的是,有的匠人也用电动砂轮。打磨虽然简单,但却是必不可少的工序。穆巴拉克的徒弟已经是这方面的熟练工了,很快就把小刀磨得光洁锃亮。

  刀的制作历史就是一部人类生产力的演进史。公元10世纪以后,维吾尔族成为塔里木盆地周缘绿洲中农业民族的主体,悠久的锻铁历史加上农耕文化的积淀,使小刀的制作技艺愈加精湛。早在魏晋时期,当地制作小刀的民间艺人就不断探索小刀的制作工艺,坚韧锋利的小刀常镶配自然脱落的珍稀野生动物角骨、宝石等珍宝,图案明丽,匠心独具,颇具观赏和收藏价值。

  史料记载,宋真宗大中祥符三年(公元1010年),龟兹回鹘大臣左温把小刀作为贡品献给了中央王廷。那时的龟兹,包括今天的库车、沙雅、新和、拜城和阿克苏诸地。从这段可信的历史看,沙雅小刀的制作历史可谓由来已久,且在当时就负有盛名。

  最后一道工艺,在过去算是秘密,现在已经众所周知,就是用油煮、蜡磨的方法使小刀光亮,不生锈。

  由于制作一把沙雅小刀需要经过200多道工序,即使穆巴拉克手脚再麻利,每天最多也只能做两把,一个月总产量仅四五十把,利润很低。现在,很多匠人使用不锈钢或镀铬工艺来节省时间,提高效率。“我们用手工!”穆巴拉克郑重地强调。

  这使我油然而生一种敬意。毕竟,我们需要一种深刻的记忆,它来自于祖先,这是古代延续至今的血脉、智慧和力量的记录。

  [故事]

  “塔石罕”小刀的由来

  沙雅小刀最有名的要算“塔石罕”小刀了。“塔石罕”是群众对一位匠人的尊称,他的原名叫“塔石·塔里甫”。由于他制作的刀别具一格,所以人们在他的名字后面加了一个“罕”字来命名。

  上世纪20年代,塔石·塔力甫为了有别于当时同样出名的英吉沙小刀,开始把沙雅小刀的刀型往小尺寸上发展。他用上等的好钢做原料,冶炼并打制成玲珑小巧的折把刀、弯把刀、直把刀,特点是实用、小巧、美观。他还把象牙、翡翠、宝石等镶嵌在刀把上,刀把的纹饰与图案色彩丰富,小刀因此而名贵。“塔石罕”小刀就成了沙雅小刀的一个代名词。

  [小贴士]

  挑选小刀的技巧

  除了沙雅小刀外,新疆著名的小刀还有:英吉沙工艺小刀、伊犁沙木萨克折刀、焉耆陈正套刀、莎车买买提折刀、库车小刀、姑墨小靴刀、和田墨玉奎雅折刀。

  从制作工艺上分,新疆小刀主要分为白钢、黑钢两类。 所谓白钢,就是不锈钢刀身的,这种刀子一般都是机器模具压出来的,看着漂亮,其实钢口不好,中看不中用,主要针对内地人市场,新疆本地人一般不会买这种刀子。黑钢的刀子,就是纯手工打制出来的,虽然不太漂亮,但很实用。

\",\"sort\":1,\"star\":0,\"cover\":\"http://localhost:8081/front/upload/2018081314001394443.png\",\"createTime\":1733838669000,\"tag\":\"文化\",\"type\":\"文化鉴赏\"}', 11, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 22:02:06'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199695, '修改', '/admin/item/article', 'PUT', '{\"id\":1,\"title\":\"沙雅小刀:真传1000年\",\"introduction\":\"新疆的很多少数民族,无论是维吾尔族或是哈萨克族、柯尔克孜族的男子,都喜爱在腰间佩戴一把小刀。夏日瓜果飘香之时,在路旁买上一个大西瓜或哈密瓜,用不着把瓜掰得四分五裂,只需拿出随身携带的小刀切开,就可以大快朵颐;新疆少数民族爱吃牛羊肉,当美味飘香的牛羊肉端上桌时,宾客们纷纷亮出各式各样的刀子,让宴席顿时生辉。其中,沙雅小刀十分引人注目。\",\"userId\":null,\"content\":\"

沙雅小刀:真传1000年

  新疆的很多少数民族,无论是维吾尔族或是哈萨克族、柯尔克孜族的男子,都喜爱在腰间佩戴一把小刀。夏日瓜果飘香之时,在路旁买上一个大西瓜或哈密瓜,用不着把瓜掰得四分五裂,只需拿出随身携带的小刀切开,就可以大快朵颐;新疆少数民族爱吃牛羊肉,当美味飘香的牛羊肉端上桌时,宾客们纷纷亮出各式各样的刀子,让宴席顿时生辉。其中,沙雅小刀十分引人注目。

  穆巴拉克是新疆沙雅县一个普通的维吾尔族刀匠。来到他的作坊时,他正在聚精会神地磨刀。他的小刀作坊位于当地维吾尔族称为“依盖尔齐巴扎”的商业街,意思是做鞍具、套具者的集市。在上世纪之初,这里是匠人的天下,铁匠、皮匠、“皮洽克奇”(精通小刀制作的人)、钉马掌的,应有尽有。现在,这条街上像穆巴拉克这样的刀匠依然很多。这归功于当地政府和文化部门、旅游部门的慧眼。2005年3月,沙雅县成立了沙雅小刀协会;2008年3月,沙雅民族手工艺制作专业合作社成立,发展社员150名。该合作社年产10类130余种规格的小刀,远销天山南北和西亚、欧洲等地。现在已经成为沙雅县一个标志性的品牌。

  穆巴拉克开始向我展示制刀技艺。他一手用长铁钳夹住小刀的造型锻件,一手拿起小铁锤敲打,同时示意徒弟手持大铁锤锻打,并不时用小锤试一试砸的力度。两人配合很是默契,你一下、我一下,铁锤不时划着优美的弧线,发出叮叮当当的声响。

  感觉差不多了,他停下来,仔细观察锻打的情况。看起来徒弟不仅卖力气,砸得也很到位,穆巴拉克露出了赞许的笑容。他指着小刀说:“你看,经过锻打,小刀的基本造型就确定了,等一会儿还要烧红,然后淬火。”淬火就是将烧得发红的钢放入液体中快速冷却。放在凉水中淬火的钢硬度高但是发脆,因此淬火不能用凉水,而要用清油。“淬火是小刀工匠们世代传承的绝技,相互保密,绝不外传。”穆巴拉克说。据说,经名师淬火处理过的小刀锋刃锐利,用其削刮铁条,但见铁屑迎刃而起,而小刀锋却不曾崩口、卷刃。

  由于有言在先,我们只好忍住好奇心理,退出了作坊,无缘欣赏到这一家传绝技。穆巴拉克把淬火后的小刀交给徒弟去打磨。打磨必须用手动砂轮和磨光轮,现在传统工艺中稍微发生变化的是,有的匠人也用电动砂轮。打磨虽然简单,但却是必不可少的工序。穆巴拉克的徒弟已经是这方面的熟练工了,很快就把小刀磨得光洁锃亮。

  刀的制作历史就是一部人类生产力的演进史。公元10世纪以后,维吾尔族成为塔里木盆地周缘绿洲中农业民族的主体,悠久的锻铁历史加上农耕文化的积淀,使小刀的制作技艺愈加精湛。早在魏晋时期,当地制作小刀的民间艺人就不断探索小刀的制作工艺,坚韧锋利的小刀常镶配自然脱落的珍稀野生动物角骨、宝石等珍宝,图案明丽,匠心独具,颇具观赏和收藏价值。

  史料记载,宋真宗大中祥符三年(公元1010年),龟兹回鹘大臣左温把小刀作为贡品献给了中央王廷。那时的龟兹,包括今天的库车、沙雅、新和、拜城和阿克苏诸地。从这段可信的历史看,沙雅小刀的制作历史可谓由来已久,且在当时就负有盛名。

  最后一道工艺,在过去算是秘密,现在已经众所周知,就是用油煮、蜡磨的方法使小刀光亮,不生锈。

  由于制作一把沙雅小刀需要经过200多道工序,即使穆巴拉克手脚再麻利,每天最多也只能做两把,一个月总产量仅四五十把,利润很低。现在,很多匠人使用不锈钢或镀铬工艺来节省时间,提高效率。“我们用手工!”穆巴拉克郑重地强调。

  这使我油然而生一种敬意。毕竟,我们需要一种深刻的记忆,它来自于祖先,这是古代延续至今的血脉、智慧和力量的记录。

  [故事]

  “塔石罕”小刀的由来

  沙雅小刀最有名的要算“塔石罕”小刀了。“塔石罕”是群众对一位匠人的尊称,他的原名叫“塔石·塔里甫”。由于他制作的刀别具一格,所以人们在他的名字后面加了一个“罕”字来命名。

  上世纪20年代,塔石·塔力甫为了有别于当时同样出名的英吉沙小刀,开始把沙雅小刀的刀型往小尺寸上发展。他用上等的好钢做原料,冶炼并打制成玲珑小巧的折把刀、弯把刀、直把刀,特点是实用、小巧、美观。他还把象牙、翡翠、宝石等镶嵌在刀把上,刀把的纹饰与图案色彩丰富,小刀因此而名贵。“塔石罕”小刀就成了沙雅小刀的一个代名词。

  [小贴士]

  挑选小刀的技巧

  除了沙雅小刀外,新疆著名的小刀还有:英吉沙工艺小刀、伊犁沙木萨克折刀、焉耆陈正套刀、莎车买买提折刀、库车小刀、姑墨小靴刀、和田墨玉奎雅折刀。

  从制作工艺上分,新疆小刀主要分为白钢、黑钢两类。 所谓白钢,就是不锈钢刀身的,这种刀子一般都是机器模具压出来的,看着漂亮,其实钢口不好,中看不中用,主要针对内地人市场,新疆本地人一般不会买这种刀子。黑钢的刀子,就是纯手工打制出来的,虽然不太漂亮,但很实用。

\",\"sort\":1,\"star\":0,\"cover\":\"http://localhost:8081/front/upload/2018081314001394443.png\",\"createTime\":1733838669000,\"tag\":\"文化\",\"type\":\"文化鉴赏\"}', 10, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 22:02:32'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199696, '修改', '/admin/item/article', 'PUT', '{\"id\":1,\"title\":\"沙雅小刀:真传1000年\",\"introduction\":\"新疆的很多少数民族,无论是维吾尔族或是哈萨克族、柯尔克孜族的男子,都喜爱在腰间佩戴一把小刀。夏日瓜果飘香之时,在路旁买上一个大西瓜或哈密瓜,用不着把瓜掰得四分五裂,只需拿出随身携带的小刀切开,就可以大快朵颐;新疆少数民族爱吃牛羊肉,当美味飘香的牛羊肉端上桌时,宾客们纷纷亮出各式各样的刀子,让宴席顿时生辉。其中,沙雅小刀十分引人注目。\",\"userId\":null,\"content\":\"

沙雅小刀:真传1000年

  新疆的很多少数民族,无论是维吾尔族或是哈萨克族、柯尔克孜族的男子,都喜爱在腰间佩戴一把小刀。夏日瓜果飘香之时,在路旁买上一个大西瓜或哈密瓜,用不着把瓜掰得四分五裂,只需拿出随身携带的小刀切开,就可以大快朵颐;新疆少数民族爱吃牛羊肉,当美味飘香的牛羊肉端上桌时,宾客们纷纷亮出各式各样的刀子,让宴席顿时生辉。其中,沙雅小刀十分引人注目。

  穆巴拉克是新疆沙雅县一个普通的维吾尔族刀匠。来到他的作坊时,他正在聚精会神地磨刀。他的小刀作坊位于当地维吾尔族称为“依盖尔齐巴扎”的商业街,意思是做鞍具、套具者的集市。在上世纪之初,这里是匠人的天下,铁匠、皮匠、“皮洽克奇”(精通小刀制作的人)、钉马掌的,应有尽有。现在,这条街上像穆巴拉克这样的刀匠依然很多。这归功于当地政府和文化部门、旅游部门的慧眼。2005年3月,沙雅县成立了沙雅小刀协会;2008年3月,沙雅民族手工艺制作专业合作社成立,发展社员150名。该合作社年产10类130余种规格的小刀,远销天山南北和西亚、欧洲等地。现在已经成为沙雅县一个标志性的品牌。

  穆巴拉克开始向我展示制刀技艺。他一手用长铁钳夹住小刀的造型锻件,一手拿起小铁锤敲打,同时示意徒弟手持大铁锤锻打,并不时用小锤试一试砸的力度。两人配合很是默契,你一下、我一下,铁锤不时划着优美的弧线,发出叮叮当当的声响。

  感觉差不多了,他停下来,仔细观察锻打的情况。看起来徒弟不仅卖力气,砸得也很到位,穆巴拉克露出了赞许的笑容。他指着小刀说:“你看,经过锻打,小刀的基本造型就确定了,等一会儿还要烧红,然后淬火。”淬火就是将烧得发红的钢放入液体中快速冷却。放在凉水中淬火的钢硬度高但是发脆,因此淬火不能用凉水,而要用清油。“淬火是小刀工匠们世代传承的绝技,相互保密,绝不外传。”穆巴拉克说。据说,经名师淬火处理过的小刀锋刃锐利,用其削刮铁条,但见铁屑迎刃而起,而小刀锋却不曾崩口、卷刃。

  由于有言在先,我们只好忍住好奇心理,退出了作坊,无缘欣赏到这一家传绝技。穆巴拉克把淬火后的小刀交给徒弟去打磨。打磨必须用手动砂轮和磨光轮,现在传统工艺中稍微发生变化的是,有的匠人也用电动砂轮。打磨虽然简单,但却是必不可少的工序。穆巴拉克的徒弟已经是这方面的熟练工了,很快就把小刀磨得光洁锃亮。

  刀的制作历史就是一部人类生产力的演进史。公元10世纪以后,维吾尔族成为塔里木盆地周缘绿洲中农业民族的主体,悠久的锻铁历史加上农耕文化的积淀,使小刀的制作技艺愈加精湛。早在魏晋时期,当地制作小刀的民间艺人就不断探索小刀的制作工艺,坚韧锋利的小刀常镶配自然脱落的珍稀野生动物角骨、宝石等珍宝,图案明丽,匠心独具,颇具观赏和收藏价值。

  史料记载,宋真宗大中祥符三年(公元1010年),龟兹回鹘大臣左温把小刀作为贡品献给了中央王廷。那时的龟兹,包括今天的库车、沙雅、新和、拜城和阿克苏诸地。从这段可信的历史看,沙雅小刀的制作历史可谓由来已久,且在当时就负有盛名。

  最后一道工艺,在过去算是秘密,现在已经众所周知,就是用油煮、蜡磨的方法使小刀光亮,不生锈。

  由于制作一把沙雅小刀需要经过200多道工序,即使穆巴拉克手脚再麻利,每天最多也只能做两把,一个月总产量仅四五十把,利润很低。现在,很多匠人使用不锈钢或镀铬工艺来节省时间,提高效率。“我们用手工!”穆巴拉克郑重地强调。

  这使我油然而生一种敬意。毕竟,我们需要一种深刻的记忆,它来自于祖先,这是古代延续至今的血脉、智慧和力量的记录。

  [故事]

  “塔石罕”小刀的由来

  沙雅小刀最有名的要算“塔石罕”小刀了。“塔石罕”是群众对一位匠人的尊称,他的原名叫“塔石·塔里甫”。由于他制作的刀别具一格,所以人们在他的名字后面加了一个“罕”字来命名。

  上世纪20年代,塔石·塔力甫为了有别于当时同样出名的英吉沙小刀,开始把沙雅小刀的刀型往小尺寸上发展。他用上等的好钢做原料,冶炼并打制成玲珑小巧的折把刀、弯把刀、直把刀,特点是实用、小巧、美观。他还把象牙、翡翠、宝石等镶嵌在刀把上,刀把的纹饰与图案色彩丰富,小刀因此而名贵。“塔石罕”小刀就成了沙雅小刀的一个代名词。

  [小贴士]

  挑选小刀的技巧

  除了沙雅小刀外,新疆著名的小刀还有:英吉沙工艺小刀、伊犁沙木萨克折刀、焉耆陈正套刀、莎车买买提折刀、库车小刀、姑墨小靴刀、和田墨玉奎雅折刀。

  从制作工艺上分,新疆小刀主要分为白钢、黑钢两类。 所谓白钢,就是不锈钢刀身的,这种刀子一般都是机器模具压出来的,看着漂亮,其实钢口不好,中看不中用,主要针对内地人市场,新疆本地人一般不会买这种刀子。黑钢的刀子,就是纯手工打制出来的,虽然不太漂亮,但很实用。

\",\"sort\":1,\"star\":0,\"cover\":\"http://localhost:8081/front/upload/2018081314001394443.png\",\"createTime\":1733838669000,\"tag\":\"文化\",\"type\":\"文化鉴赏\"}', 99, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 22:05:15'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199697, '修改', '/admin/sys/dept', 'PUT', '{\"id\":1067246875800000066,\"pid\":0,\"children\":[],\"name\":\"文化系统总部\",\"sort\":0,\"createDate\":null,\"parentName\":\"一级部门\"}', 33, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 22:08:03'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199698, '保存', '/admin/sys/menu', 'POST', '{\"id\":null,\"pid\":1863940095447416834,\"children\":[],\"name\":\"视频鉴赏\",\"url\":\"item/video\",\"menuType\":0,\"icon\":\"\",\"permissions\":\"\",\"sort\":0,\"createDate\":null,\"parentName\":\"文章\"}', 15, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 22:10:59'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199699, '保存', '/admin/sys/menu', 'POST', '{\"id\":null,\"pid\":1863940095447416835,\"children\":[],\"name\":\"查看\",\"url\":null,\"menuType\":1,\"icon\":null,\"permissions\":\"item:article:page,item:article:info\",\"sort\":0,\"createDate\":null,\"parentName\":\"视频鉴赏\"}', 11, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 22:11:17'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199700, '保存', '/admin/sys/menu', 'POST', '{\"id\":null,\"pid\":1863940095447416835,\"children\":[],\"name\":\"新增\",\"url\":null,\"menuType\":1,\"icon\":null,\"permissions\":\"item:article:save\",\"sort\":0,\"createDate\":null,\"parentName\":\"视频鉴赏\"}', 9, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 22:11:27'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199701, '保存', '/admin/sys/menu', 'POST', '{\"id\":null,\"pid\":1863940095447416835,\"children\":[],\"name\":\"修改\",\"url\":null,\"menuType\":1,\"icon\":null,\"permissions\":\"item:article:update\",\"sort\":0,\"createDate\":null,\"parentName\":\"视频鉴赏\"}', 9, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 22:11:37'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199702, '保存', '/admin/sys/menu', 'POST', '{\"id\":null,\"pid\":1863940095447416835,\"children\":[],\"name\":\"删除\",\"url\":null,\"menuType\":1,\"icon\":null,\"permissions\":\"item:article:delete\",\"sort\":0,\"createDate\":null,\"parentName\":\"视频鉴赏\"}', 10, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-10 22:11:47'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199703, '修改', '/admin/item/article', 'PUT', '{\"id\":8,\"title\":\"121\",\"path\":null,\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

21

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/37549fca2a0efb4d0a4c6330bc6ab75.jpg\",\"createTime\":1733931207000,\"tag\":\"\",\"type\":\"视频鉴赏\",\"audit\":2}', 20, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:28:30'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199704, '修改', '/admin/item/article', 'PUT', '{\"id\":8,\"title\":\"121\",\"path\":null,\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

21

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/37549fca2a0efb4d0a4c6330bc6ab75.jpg\",\"createTime\":1733931207000,\"tag\":\"\",\"type\":\"视频鉴赏\",\"audit\":2}', 9, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:29:37'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199705, '修改', '/admin/item/article', 'PUT', '{\"id\":8,\"title\":\"121\",\"path\":null,\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

21

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/37549fca2a0efb4d0a4c6330bc6ab75.jpg\",\"createTime\":1733931207000,\"tag\":\"\",\"type\":\"视频鉴赏\",\"audit\":2}', 11, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:29:50'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199706, '修改', '/admin/item/article', 'PUT', '{\"id\":8,\"title\":\"121\",\"path\":null,\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

21

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/37549fca2a0efb4d0a4c6330bc6ab75.jpg\",\"createTime\":1733931207000,\"tag\":\"\",\"type\":\"视频鉴赏\",\"audit\":2}', 9, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:30:12'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199707, '修改', '/admin/item/article', 'PUT', '{\"id\":8,\"title\":\"121\",\"path\":null,\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

21

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/37549fca2a0efb4d0a4c6330bc6ab75.jpg\",\"createTime\":1733931207000,\"tag\":\"\",\"type\":\"视频鉴赏\",\"audit\":2}', 14, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:30:23'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199708, '修改', '/admin/item/article', 'PUT', '{\"id\":8,\"title\":\"121\",\"path\":null,\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

21

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/37549fca2a0efb4d0a4c6330bc6ab75.jpg\",\"createTime\":1733931207000,\"tag\":\"\",\"type\":\"视频鉴赏\",\"audit\":2}', 12, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:30:34'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199709, '修改', '/admin/item/article', 'PUT', '{\"id\":8,\"title\":\"121\",\"path\":null,\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

21

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/37549fca2a0efb4d0a4c6330bc6ab75.jpg\",\"createTime\":1733931207000,\"tag\":\"\",\"type\":\"视频鉴赏\",\"audit\":2}', 7, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:30:39'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199710, '修改', '/admin/item/article', 'PUT', '{\"id\":8,\"title\":\"121\",\"path\":null,\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

21

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/37549fca2a0efb4d0a4c6330bc6ab75.jpg\",\"createTime\":1733931207000,\"tag\":\"\",\"type\":\"视频鉴赏\",\"audit\":2}', 12, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:30:48'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199711, '修改', '/admin/item/article', 'PUT', '{\"id\":8,\"title\":\"121\",\"path\":null,\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

21

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/37549fca2a0efb4d0a4c6330bc6ab75.jpg\",\"createTime\":1733931207000,\"tag\":\"\",\"type\":\"视频鉴赏\",\"audit\":2}', 8, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:31:12'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199712, '修改', '/admin/item/article', 'PUT', '{\"id\":8,\"title\":\"121\",\"path\":null,\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

21

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/37549fca2a0efb4d0a4c6330bc6ab75.jpg\",\"createTime\":1733931207000,\"tag\":\"\",\"type\":\"视频鉴赏\",\"audit\":2}', 14, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:31:37'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199713, '修改', '/admin/item/article', 'PUT', '{\"id\":8,\"title\":\"121\",\"path\":null,\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

21

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/37549fca2a0efb4d0a4c6330bc6ab75.jpg\",\"createTime\":1733931207000,\"tag\":\"\",\"type\":\"视频鉴赏\",\"audit\":1}', 10, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:32:06'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199714, '修改', '/admin/item/article', 'PUT', '{\"id\":8,\"title\":\"121\",\"path\":null,\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

21

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/37549fca2a0efb4d0a4c6330bc6ab75.jpg\",\"createTime\":1733931207000,\"tag\":\"视频\",\"type\":\"视频鉴赏\",\"audit\":1}', 8, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:32:25'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199715, '保存', '/admin/item/article', 'POST', '{\"id\":9,\"title\":\"壮族织锦技艺\",\"path\":null,\"introduction\":\" 壮锦是我国四大名锦之一,历史极为悠久,壮族先民在汉代织出的“斑布”就是其前身。壮族织锦技艺主要包括壮锦、绣球等编织技术。壮锦的制作,一般是用麻线或棉线染上各种色彩,以原色麻线或棉线为经,以染色麻线或棉线为纬,使用装有支撑系统、传动装置、分综装置和提花装置的竹笼机精编而成。\",\"userId\":null,\"content\":\"

壮锦是我国四大名锦之一,历史极为悠久,壮族先民在汉代织出的“斑布”就是其前身。壮族织锦技艺主要包括壮锦、绣球等编织技术。壮锦的制作,一般是用麻线或棉线染上各种色彩,以原色麻线或棉线为经,以染色麻线或棉线为纬,使用装有支撑系统、传动装置、分综装置和提花装置的竹笼机精编而成。壮锦种类齐全,花纹图案各种各样。其色彩鲜艳对比强烈,菱形几何图纹较多,结构严谨变化丰富,多用于壮锦被面、壮锦床单、壮锦台布、壮锦坐垫、壮锦头巾、壮锦披巾、壮锦背带、壮锦枕巾等品种,旅游纪念品以壮锦壁挂系列为主。壮族织锦艺人对壮锦的颜色搭配要求较严格,直观上要鲜艳生动,而且保持时间要长。一幅壮锦的完成,常常会用十几种颜色组合,由于搭配相得益彰,成品显得色彩斑斓、丰富多变、和谐统一、经久耐看。

  经历了千年的发展,现在的壮锦已经形成了自己的体系,主要有三大类、20品种和50图案,以壮锦艺术为典型代表的广西民族织锦艺术已成为我国传统民间艺术的重要组成部分。反映了广西各族人民对自然的热爱和崇敬对美好生活的向往和珍惜,承载了民族文化记忆。织锦工艺得到广泛发展,很大的一个因素是它是壮族妇女赖以为生的基本技能。织锦工艺代代相传,姑娘们会把师傅传给她的一些基本原理,再加上自己对生活的感受,创作揉合在壮锦里面,使得壮锦不断地发展、补充和升华。现在的织锦技艺已不再需要承载着生存的压力,而是单纯地还原到一种民间工艺的身份,壮锦的意义作为一种民族工艺美术品为人们接受。壮锦的传承延续大都靠言传身授,我们需要保护壮锦艺人巧匠,组织学习壮锦技艺,更好地传承下去。

  壮锦织锦技艺具有丰富的文化内涵和独特的艺术价值,在中国的纺织术上实属宝贵,是研究中国少数民族刺绣不可多得的生动材料,它还为中国乃至世界的纺织史增添活态的例证,对继承和弘扬民族文化,增强民族自尊心起到积极的作用。2006年,作为传统手工技艺的壮锦由广西壮族自治区靖西县申报“国家级非物质文化遗产名录”,成为了首批国家级非物质文化遗产。

\\\"\\\"

\\\"\\\"

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/2017120517493235169.png\",\"createTime\":null,\"tag\":\"技艺\",\"type\":\"文化鉴赏\",\"audit\":1}', 9, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:44:07'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199716, '保存', '/admin/item/article', 'POST', '{\"id\":10,\"title\":\"壮族习俗:多彩文化与传统!\",\"path\":null,\"introduction\":\"壮族是中国人口最多的一个少数民族,主要分布在广西壮族自治区。\",\"userId\":null,\"content\":\"

一、歌圩

歌圩是壮族传统的群众集会,主要以唱歌和举办比赛的方式来庆祝。歌圩通常在春季和秋季举行,人们会唱山歌、跳舞、进行体育比赛等。在壮族地区,无论男女老少,都能唱山歌,因此歌圩是壮族人民展示才艺和交流情感的重要平台。在歌圩上,人们还会进行一些特殊的比赛,如壮语演讲比赛、壮族舞蹈比赛等。这些比赛不仅能让人们展示自己的才华,还能传承和弘扬壮族的传统文化。

二、三音壮锦

三音壮锦是壮族的传统音乐形式,由铜鼓、皮鼓和木鱼三种打击乐器演奏而成。三音壮锦的音乐节奏明快,富有激情,是壮族人民喜庆和节日活动的重要元素。在壮族地区,人们会在各种场合演奏三音壮锦,如婚礼、庆典、祭祀等。三音壮锦的演奏形式多样,有时是独奏,有时是合奏,有时还会加入其他乐器进行伴奏。在演奏三音壮锦时,人们会随着音乐的节奏翩翩起舞,场面热烈而欢快。

三、壮族嘹歌

壮族嘹歌是壮族传统的长篇抒情民歌,通常以男女对唱的形式出现。壮族嘹歌的内容广泛,涉及爱情、劳动、生活等方面,是壮族人民生活中不可或缺的一部分。嘹歌的歌词优美,旋律悠扬,演唱时需要运用丰富的声音和情感来表达歌曲的内涵。在壮族地区,人们会在各种场合唱嘹歌,如田间地头、山林里、河边等。唱嘹歌已经成为壮族人民生活中不可或缺的一部分,通过唱嘹歌来表达自己的情感和思想,也成为了壮族文化的重要标志之一。

四、牛魂节

每年四月初八是壮族的牛魂节,也叫“牛王节”。这一天,人们会给牛洗澡,喂它精美的食物,以感激牛的辛勤劳动和对农业生产的贡献。在壮族地区,牛是农业生产中最重要的劳动力之一,因此人们对牛有着深厚的感情。牛魂节的庆祝活动不仅体现了人们对牛的感激之情,也反映了壮族人民对农业生产的重视和对生命的敬畏。在这一天,人们还会举行一些祭祀和祈福的活动,祈求牛的健康和农业的丰收。

五、蛙图腾与蚂节

在壮族的神话和传说中,蛙和蚂分别代表女性的生育和男性的劳动。因此,蛙和蚂在壮族的习俗中具有重要的地位。人们会在特定的时间举行祭祀和庆祝活动,祈求丰收和平安。在壮族地区,蛙和蚂不仅是自然界中的生物,更是人们心中的神灵和图腾。人们认为蛙能够带来雨水,保障农业生产的顺利进行;而蚂则是男性劳动力的象征,代表勤劳和力量。因此,在蛙图腾和蚂节中,人们会举行各种祭祀和庆祝活动,祈求丰收和平安。这些活动不仅体现了壮族人民对自然的敬畏和感恩之情,也反映了他们对劳动和生活的热爱和追求。

六、壮族的建筑风格

壮族的建筑风格独特,以干栏式建筑为主,房屋建在木桩和石基上,离地面较高,可以防潮防湿。在建筑形式上,壮族民居通常采用“一厅两房”的结构,正房设神龛供奉祖先神位,是全家的精神支柱。干栏式建筑是壮族地区特有的建筑形式,其特点是房屋离地面较高,采用木桩和石基作为基础,可以有效地防潮防湿。这种建筑形式不仅适应了壮族地区的气候特点和生活方式,也成为壮族文化的重要标志之一。此外,在壮族的建筑中,通常采用“一厅两房”的结构,正房设有神龛供奉祖先神位,这是全家的精神支柱。这种建筑布局体现了壮族人民对祖先的敬仰和对家族观念的重视。

七、婚俗

壮族传统的婚俗十分独特,有“父母之命媒妁之言”的传统婚姻观念。在婚前,男方要向女方送订婚礼物,如鸡、鸭、猪肉等。结婚时,新郎新娘要穿着传统的民族服装,举行盛大的宴会和庆祝活动。在壮族地区,婚姻是一件非常庄重的事情。传统的婚俗包括提亲、送订婚礼物、结婚等几个步骤。在提亲时,男方会向女方家表达求婚的意愿并送上礼物;在送订婚礼物时,男方会送上鸡、鸭、猪肉等食品作为订婚的信物;

八、食俗

壮族的食物以大米为主,喜欢吃糯米和玉米等杂粮。壮族的菜肴口味偏辣、酸、甜,常见的菜肴有五色糯米饭、糍粑、酸笋鱼等。在壮族地区,人们的主食是大米和糯米,而玉米则是重要的杂粮之一。壮族菜肴的口味偏辣、酸、甜,这种独特的口味是壮族人民在长期的生活和饮食习惯中形成的。其中,五色糯米饭是一种具有代表性的壮族传统食品,它是由糯米加入天然植物色素蒸制而成,色泽鲜艳,味道清香。糍粑则是壮族人民在节日和庆典时制作的食品,以糯米为主料,经过浸泡、蒸熟、捣碎、成型等工序制作而成,口感软糯,味道香甜。酸笋鱼则是壮族的一道特色菜肴,以酸笋和鱼为主要原料,口味酸辣可口。

九、节庆

壮族有许多传统节日,如春节、三月三歌节、中元鬼节、中秋节等。在这些节日里,人们会举行各种庆祝活动,如唱歌、跳舞、赛龙舟等。春节是壮族最重要的传统节日之一,人们会进行祭祀祖先、贴春联、放鞭炮等活动。三月三歌节则是壮族传统的歌圩节日,人们会唱山歌、跳舞、进行体育比赛等。中元鬼节则是祭祀祖先和超度亡魂的节日,人们会举行祭祀活动和放河灯等仪式。中秋节则是团圆和赏月的节日,人们会吃月饼、赏月、团圆聚会等。

总的来说,壮族的习俗文化丰富多彩,涵盖了生活的方方面面。这些习俗和传统文化表现形式不仅是壮族人民生活的重要组成部分,也是中华文化多样性和民族团结的体现。在现代社会中,随着经济的发展和文化的交流,壮族的习俗文化也在不断地发展和创新。我们应该尊重和传承这些宝贵的文化遗产,让它们在新的时代里继续发扬光大。同时,我们也应该通过教育和宣传,提高人们对少数民族文化的认识和了解,促进各民族之间的交流和融合,共同推动中华文化的繁荣和发展。

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/c995d143ad4bd1132d37cac5955adc0249fb0555.png\",\"createTime\":null,\"tag\":\"传统\",\"type\":\"文化鉴赏\",\"audit\":1}', 10, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:46:58'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199717, '保存', '/admin/item/article', 'POST', '{\"id\":11,\"title\":\"辣白菜\",\"path\":null,\"introduction\":\"辣白菜是壮族人民非常喜欢的一种泡菜,也是百姓家中餐桌上不可或缺的一道小菜,风味独特,久负盛名。\",\"userId\":null,\"content\":\"

辣白菜是壮族人民非常喜欢的一种泡菜,也是百姓家中餐桌上不可或缺的一道小菜,风味独特,久负盛名。

  辣白菜比一般泡菜或咸菜营养丰富,它能保持多种维生素,因此在朝鲜族人的餐桌上无论丰俭都少不了它。朝鲜泡菜的酱汁,可以补充米饭中缺乏的蛋白质。另外,泡菜中的虾酱、凤尾鱼酱、黄石鱼酱等含有的蛋白质,可分解为氨基酸。蔬菜中含有钙、铜、磷、铁、盐等丰富的无机物,促进维生素C和对以米饭主食的人尤为重要的维生素B的吸收。

\\\"\\\"

辣白菜

  

  其制作方法有三种:

  方法一:

  原料:白菜2公斤、萝卜500克、辣椒面20克、水芹菜5克、辣椒面20克、虾酱20克、梨200克、姜末5克、精盐50克

  制作:

  (1)白菜收拾干净后,大的切一半用10%的盐水腌24小时左右。辣椒面和水以1:1.2的比例搅拌均匀后备用。将萝卜的1/3部分切成丝,剩下的切成两三块。把梨切成大块,把水芹菜切成3厘米长度。

  (2)白菜丝中放入拌匀的辣椒面和白糖、虾酱、蒜、梨、水芹菜、姜、葱、精盐拌匀,做成泡菜调料。

  (3)把腌好的白菜洗净后,白菜叶之间均匀地抹上泡菜调料。在缸里铺上一层萝卜,撒一点精盐,将白菜的切开面向上放,然后放萝卜,这样重复几次,直到填满为止。最后覆一层白菜帮压上石头,三天后倒入辣白菜汤,密封保存。大约三星期后,待辣白菜腌下味以后,切成3~4厘米的段条放到盘子里,然后倒入一点辣白菜汤即可食用。

  方法二:

  原料:卷心菜200克,红辣椒丝25克,姜丝25克,糖1/2碗,醋1/2碗,干辣椒10克,花椒粒10粒,香油2汤匙,油3汤匙

  制法:

  1、将红辣椒丝、姜丝、糖、醋同入一大碗中

  2、卷心菜撕成碎片,放入开水氽烫,捞出冲清水沥干水份,倒入制法1的大碗中腌渍

  3、锅热,放入油及香油烧热,将干辣椒及花椒粒放入锅中炒香,捞出渣,淋入大碗中同腌,入味即可装盘食用。

  注:泡的时间越长越有味,冰过再吃,爽口,开胃,高丽菜,又名甘蓝菜(圆白菜),可生食,熟食,绿叶的较白色的营养丰富

  方法三:

  原料:卷心菜 600克、白糖1大匙、柠檬汁1大匙、盐1/4茶匙、干辣椒丝1/2茶匙、花椒10粒、姜丝少许

  做法:

  1、卷心菜洗净,去老叶剥成块状,用盐腌30分钟后,挤去水分。

  2、锅中放2匙油,爆香花椒粒,捞出,将干辣椒丝炸至红色焦脆时捞出。

  3、把糖、柠檬汁、辣椒丝、姜丝放入高丽菜上,倒入炸好之辣油,30分钟后即可进食

\\\"\\\"

辣白菜

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/2017122611003541448.png\",\"createTime\":1734007617000,\"tag\":\"美食,文化\",\"type\":\"壮族美食\",\"audit\":1}', 10, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:49:15'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199718, '修改', '/admin/item/article', 'PUT', '{\"id\":8,\"title\":\"向世界讲述中国故事之「壮族--麽乜」(壮语版)\",\"path\":null,\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

向世界讲述中国故事之「壮族--麽乜」(壮语版)

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/1734007907809.jpg\",\"createTime\":1733931207000,\"tag\":\"视频\",\"type\":\"视频鉴赏\",\"audit\":1}', 12, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:54:07'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199719, '修改', '/admin/item/article', 'PUT', '{\"id\":8,\"title\":\"向世界讲述中国故事之「壮族--麽乜」(壮语版)\",\"path\":\"http://localhost:8081/front/upload/20241212_205256.mp4\",\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

向世界讲述中国故事之「壮族--麽乜」(壮语版)

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/1734007907809.jpg\",\"createTime\":1733931207000,\"tag\":\"视频\",\"type\":\"视频鉴赏\",\"audit\":1}', 16, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 20:58:56'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199720, '保存', '/admin/item/article', 'POST', '{\"id\":12,\"title\":\"壮族神话:千万人口口相传的古老传说\",\"path\":\"http://localhost:8081/front/upload/【阿昌族神话】遮帕麻与遮米麻造天织地,葫芦娃创造九姓部族.mp4\",\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

壮族神话:千万人口口相传的古老传说

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/459eb00f0b4f4b2725d8f06cf30a65ed6c01299c.jpg\",\"createTime\":1733931207000,\"tag\":\"文化,神话\",\"type\":\"视频鉴赏\",\"audit\":1}', 8, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 21:03:53'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199721, '保存', '/admin/item/article', 'POST', '{\"id\":13,\"title\":\"1.了不起的中华服饰之壮族\",\"path\":\"http://localhost:8081/front/upload/7.了不起的中华服饰——藏族.mp4\",\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

1.了不起的中华服饰之壮族

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/a7e0eb98992634cd98ab1a8817887a58708afff7.jpg\",\"createTime\":1733931207000,\"tag\":null,\"type\":\"视频鉴赏\",\"audit\":1}', 8, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 21:05:29'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199722, '保存', '/admin/item/article', 'POST', '{\"id\":14,\"title\":\"《相约广西》-广西壮族自治区成立60周年宣传片\",\"path\":\"http://localhost:8081/front/upload/《相约广西》-广西壮族自治区成立60周年宣传片.mp4\",\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

《相约广西》-广西壮族自治区成立60周年宣传片

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/eb34cd3b05766b5149376157df7182d1c87aaa91.jpg\",\"createTime\":1733931207000,\"tag\":\"宣传片\",\"type\":\"视频鉴赏\",\"audit\":1}', 7, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 21:06:28'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199723, '保存', '/admin/item/article', 'POST', '{\"id\":15,\"title\":\"壮族传统美食五色糯米饭\",\"path\":\"http://localhost:8081/front/upload/壮族传统美食五色糯米饭.mp4\",\"introduction\":\"2121\",\"userId\":1863920777825390593,\"content\":\"

壮族传统美食五色糯米饭

\",\"sort\":1,\"star\":null,\"cover\":\"http://localhost:8081/front/upload/4e62d8053ee4d6318593cabd81046cf2242febd2.jpg\",\"createTime\":1733931207000,\"tag\":\"美食\",\"type\":\"视频鉴赏\",\"audit\":1}', 9, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 21:07:32'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199724, '修改', '/admin/sys/menu', 'PUT', '{\"id\":1867219841996353538,\"pid\":0,\"children\":[],\"name\":\"吐槽墙\",\"url\":\"item/wall\",\"menuType\":0,\"icon\":\"icon-desktop\",\"permissions\":null,\"sort\":0,\"createDate\":null,\"parentName\":\"一级菜单\"}', 22, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:06:43'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199725, '修改', '/admin/sys/menu', 'PUT', '{\"id\":1867219841996353538,\"pid\":0,\"children\":[],\"name\":\"吐槽墙\",\"url\":\"item/wall\",\"menuType\":0,\"icon\":\"icon-desktop\",\"permissions\":null,\"sort\":108,\"createDate\":null,\"parentName\":\"一级菜单\"}', 14, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:06:54'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199726, '保存', '/admin/item/wall', 'POST', '{\"id\":1867221170365947965,\"content\":\"壮族的传统节庆,气氛特别好,每年都期待!\",\"userId\":1863920777825390593,\"createTime\":1734015192000}', 8, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:07:37'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199727, '删除', '/admin/item/wall', 'DELETE', '[1867221170365947906]', 212, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:08:09'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199728, '修改', '/admin/sys/menu', 'PUT', '{\"id\":1867226118034092034,\"pid\":0,\"children\":[],\"name\":\"敏感词\",\"url\":\"item/dict\",\"menuType\":0,\"icon\":\"icon-desktop\",\"permissions\":null,\"sort\":110,\"createDate\":null,\"parentName\":\"一级菜单\"}', 68, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:16:08'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199729, '删除', '/admin/sys/menu/1067246875800000050', 'DELETE', '1067246875800000050', 7, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:16:21'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199730, '删除', '/admin/sys/menu/1067246875800000049', 'DELETE', '1067246875800000049', 4, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:16:23'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199731, '删除', '/admin/sys/menu/1067246875800000048', 'DELETE', '1067246875800000048', 6, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:16:26'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199732, '删除', '/admin/sys/menu/1067246875800000046', 'DELETE', '1067246875800000046', 4, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:16:28'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199733, '删除', '/admin/sys/menu/1067246875800000045', 'DELETE', '1067246875800000045', 4, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:16:46'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199734, '删除', '/admin/sys/menu/1067246875800000044', 'DELETE', '1067246875800000044', 5, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:16:48'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199735, '删除', '/admin/sys/menu/1067246875800000043', 'DELETE', '1067246875800000043', 5, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:16:51'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199736, '删除', '/admin/sys/menu/1067246875800000042', 'DELETE', '1067246875800000042', 5, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:16:54'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199737, '删除', '/admin/sys/menu/1067246875800000041', 'DELETE', '1067246875800000041', 18, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:16:56'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199738, '删除', '/admin/sys/menu/1067246875800000058', 'DELETE', '1067246875800000058', 4, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:16:59'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199739, '删除', '/admin/sys/menu/1067246875800000061', 'DELETE', '1067246875800000061', 3, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:17:01'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199740, '删除', '/admin/sys/menu/1067246875800000060', 'DELETE', '1067246875800000060', 5, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:17:03'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199741, '删除', '/admin/sys/menu/1067246875800000057', 'DELETE', '1067246875800000057', 6, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:17:06'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199742, '删除', '/admin/sys/menu/1067246875800000059', 'DELETE', '1067246875800000059', 3, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:17:08'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199743, '删除', '/admin/sys/menu/1067246875800000040', 'DELETE', '1067246875800000040', 3, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:17:10'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199744, '修改', '/admin/sys/menu', 'PUT', '{\"id\":1867226118034092034,\"pid\":0,\"children\":[],\"name\":\"敏感词\",\"url\":\"item/dict\",\"menuType\":0,\"icon\":\"icon-expend\",\"permissions\":null,\"sort\":110,\"createDate\":null,\"parentName\":\"一级菜单\"}', 11, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:17:22'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199745, '修改', '/admin/sys/menu', 'PUT', '{\"id\":1867219841996353538,\"pid\":0,\"children\":[],\"name\":\"吐槽墙\",\"url\":\"item/wall\",\"menuType\":0,\"icon\":\"icon-appstore-fill\",\"permissions\":null,\"sort\":108,\"createDate\":null,\"parentName\":\"一级菜单\"}', 11, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:17:31'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199746, '保存', '/admin/item/dict', 'POST', '{\"id\":null,\"content\":\"政治\",\"createTime\":null}', 232, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 0, 'admin', 1067246875800000001, '2024-12-12 23:18:07'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199747, '保存', '/admin/item/dict', 'POST', '{\"id\":null,\"content\":\"政治\",\"createTime\":null}', 7, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 0, 'admin', 1067246875800000001, '2024-12-12 23:18:21'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199748, '保存', '/admin/item/dict', 'POST', '{\"id\":1,\"content\":\"政治\",\"createTime\":null}', 8, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:18:31'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199749, '保存', '/admin/item/dict', 'POST', '{\"id\":null,\"content\":\"政治\",\"createTime\":1734016711000}', 29, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:32:32'); +INSERT INTO `sys_log_operation` VALUES (1863969089488199750, '保存', '/admin/item/dict', 'POST', '{\"id\":null,\"content\":\"色情\",\"createTime\":1734016711000}', 6, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', '0:0:0:0:0:0:0:1', 1, 'admin', 1067246875800000001, '2024-12-12 23:32:39'); + +-- ---------------------------- +-- Table structure for sys_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_menu`; +CREATE TABLE `sys_menu` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `pid` bigint(20) NULL DEFAULT NULL COMMENT '上级ID,一级菜单为0', + `name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', + `url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单URL', + `permissions` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '授权(多个用逗号分隔,如:sys:user:list,sys:user:save)', + `menu_type` tinyint(3) UNSIGNED NULL DEFAULT NULL COMMENT '类型 0:菜单 1:按钮', + `icon` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单图标', + `sort` int(11) NULL DEFAULT NULL COMMENT '排序', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者', + `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间', + `updater` bigint(20) NULL DEFAULT NULL COMMENT '更新者', + `update_date` datetime NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_pid`(`pid`) USING BTREE, + INDEX `idx_sort`(`sort`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1867226118034092040 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单管理' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_menu +-- ---------------------------- +INSERT INTO `sys_menu` VALUES (1067246875800000002, 0, '权限管理', NULL, NULL, 0, 'icon-safetycertificate', 870, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 21:36:17'); +INSERT INTO `sys_menu` VALUES (1067246875800000003, 1067246875800000055, '新增', NULL, 'sys:user:save,sys:dept:list,sys:role:list', 1, NULL, 1, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000004, 1067246875800000055, '修改', NULL, 'sys:user:update,sys:dept:list,sys:role:list', 1, NULL, 2, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000005, 1067246875800000055, '删除', NULL, 'sys:user:delete', 1, NULL, 3, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000006, 1067246875800000055, '导出', NULL, 'sys:user:export', 1, NULL, 4, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000007, 1067246875800000002, '角色管理', 'sys/role', NULL, 0, 'icon-team', 2, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000008, 1067246875800000007, '查看', NULL, 'sys:role:page,sys:role:info', 1, NULL, 0, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000009, 1067246875800000007, '新增', NULL, 'sys:role:save,sys:menu:select,sys:dept:list', 1, NULL, 1, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000010, 1067246875800000007, '修改', NULL, 'sys:role:update,sys:menu:select,sys:dept:list', 1, NULL, 2, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000011, 1067246875800000007, '删除', NULL, 'sys:role:delete', 1, NULL, 3, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000012, 1067246875800000002, '部门管理', 'sys/dept', NULL, 0, 'icon-apartment', 1, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000014, 1067246875800000012, '查看', NULL, 'sys:dept:list,sys:dept:info', 1, NULL, 0, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000015, 1067246875800000012, '新增', NULL, 'sys:dept:save', 1, NULL, 1, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000016, 1067246875800000012, '修改', NULL, 'sys:dept:update', 1, NULL, 2, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000017, 1067246875800000012, '删除', NULL, 'sys:dept:delete', 1, NULL, 3, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000025, 1067246875800000035, '菜单管理', 'sys/menu', NULL, 0, 'icon-unorderedlist', 0, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000026, 1067246875800000025, '查看', NULL, 'sys:menu:list,sys:menu:info', 1, NULL, 0, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000027, 1067246875800000025, '新增', NULL, 'sys:menu:save', 1, NULL, 1, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000028, 1067246875800000025, '修改', NULL, 'sys:menu:update', 1, NULL, 2, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000029, 1067246875800000025, '删除', NULL, 'sys:menu:delete', 1, NULL, 3, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000035, 0, '系统设置', NULL, NULL, 0, 'icon-setting', 880, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 21:36:04'); +INSERT INTO `sys_menu` VALUES (1067246875800000036, 1067246875800000030, '暂停', NULL, 'sys:schedule:pause', 1, NULL, 4, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000037, 1067246875800000030, '恢复', NULL, 'sys:schedule:resume', 1, NULL, 5, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000038, 1067246875800000030, '立即执行', NULL, 'sys:schedule:run', 1, NULL, 6, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000039, 1067246875800000030, '日志列表', NULL, 'sys:schedule:log', 1, NULL, 7, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000055, 1067246875800000002, '用户管理', 'sys/user', NULL, 0, 'icon-user', 0, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1067246875800000056, 1067246875800000055, '查看', NULL, 'sys:user:page,sys:user:info', 1, NULL, 0, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); +INSERT INTO `sys_menu` VALUES (1863937571759878146, 0, '轮播管理', 'item/slides', NULL, 0, 'icon-desktop', 100, 1067246875800000001, '2024-12-03 13:26:46', 1067246875800000001, '2024-12-03 21:36:11'); +INSERT INTO `sys_menu` VALUES (1863937571759878147, 1863937571759878146, '查看', NULL, 'item:slides:page,item:slides:info', 1, NULL, 0, 1067246875800000001, '2024-12-03 13:26:46', 1067246875800000001, '2024-12-03 13:26:46'); +INSERT INTO `sys_menu` VALUES (1863937571759878148, 1863937571759878146, '新增', NULL, 'item:slides:save', 1, NULL, 1, 1067246875800000001, '2024-12-03 13:26:46', 1067246875800000001, '2024-12-03 13:26:46'); +INSERT INTO `sys_menu` VALUES (1863937571759878149, 1863937571759878146, '修改', NULL, 'item:slides:update', 1, NULL, 2, 1067246875800000001, '2024-12-03 13:26:46', 1067246875800000001, '2024-12-03 13:26:46'); +INSERT INTO `sys_menu` VALUES (1863937571759878150, 1863937571759878146, '删除', NULL, 'item:slides:delete', 1, NULL, 3, 1067246875800000001, '2024-12-03 13:26:46', 1067246875800000001, '2024-12-03 13:26:46'); +INSERT INTO `sys_menu` VALUES (1863937571759878151, 1863937571759878146, '导出', NULL, 'item:slides:export', 1, NULL, 4, 1067246875800000001, '2024-12-03 13:26:46', 1067246875800000001, '2024-12-03 13:26:46'); +INSERT INTO `sys_menu` VALUES (1863937572162531329, 1863940095447416834, '文章管理', 'item/article', NULL, 0, 'icon-desktop', 0, 1067246875800000001, '2024-12-03 13:26:28', 1067246875800000001, '2024-12-03 21:35:38'); +INSERT INTO `sys_menu` VALUES (1863937572162531330, 1863937572162531329, '查看', NULL, 'item:article:page,item:article:info', 1, NULL, 0, 1067246875800000001, '2024-12-03 13:26:28', 1067246875800000001, '2024-12-03 13:26:28'); +INSERT INTO `sys_menu` VALUES (1863937572162531331, 1863937572162531329, '新增', NULL, 'item:article:save', 1, NULL, 1, 1067246875800000001, '2024-12-03 13:26:28', 1067246875800000001, '2024-12-03 13:26:28'); +INSERT INTO `sys_menu` VALUES (1863937572162531332, 1863937572162531329, '修改', NULL, 'item:article:update', 1, NULL, 2, 1067246875800000001, '2024-12-03 13:26:28', 1067246875800000001, '2024-12-03 13:26:28'); +INSERT INTO `sys_menu` VALUES (1863937572162531333, 1863937572162531329, '删除', NULL, 'item:article:delete', 1, NULL, 3, 1067246875800000001, '2024-12-03 13:26:28', 1067246875800000001, '2024-12-03 13:26:28'); +INSERT INTO `sys_menu` VALUES (1863937572162531334, 1863937572162531329, '导出', NULL, 'item:article:export', 1, NULL, 4, 1067246875800000001, '2024-12-03 13:26:28', 1067246875800000001, '2024-12-03 13:26:28'); +INSERT INTO `sys_menu` VALUES (1863940095447416834, 0, '文章', '', '', 0, 'icon-layout-fill', 105, 1067246875800000001, '2024-12-03 21:35:24', 1067246875800000001, '2024-12-03 21:36:26'); +INSERT INTO `sys_menu` VALUES (1863940095447416835, 1863940095447416834, '视频鉴赏', 'item/video', '', 0, '', 0, 1067246875800000001, '2024-12-10 22:10:59', 1067246875800000001, '2024-12-10 22:10:59'); +INSERT INTO `sys_menu` VALUES (1863940095447416836, 1863940095447416835, '查看', NULL, 'item:article:page,item:article:info', 1, NULL, 0, 1067246875800000001, '2024-12-10 22:11:17', 1067246875800000001, '2024-12-10 22:11:17'); +INSERT INTO `sys_menu` VALUES (1863940095447416837, 1863940095447416835, '新增', NULL, 'item:article:save', 1, NULL, 0, 1067246875800000001, '2024-12-10 22:11:27', 1067246875800000001, '2024-12-10 22:11:27'); +INSERT INTO `sys_menu` VALUES (1863940095447416838, 1863940095447416835, '修改', NULL, 'item:article:update', 1, NULL, 0, 1067246875800000001, '2024-12-10 22:11:37', 1067246875800000001, '2024-12-10 22:11:37'); +INSERT INTO `sys_menu` VALUES (1863940095447416839, 1863940095447416835, '删除', NULL, 'item:article:delete', 1, NULL, 0, 1067246875800000001, '2024-12-10 22:11:47', 1067246875800000001, '2024-12-10 22:11:47'); +INSERT INTO `sys_menu` VALUES (1867219841996353538, 0, '吐槽墙', 'item/wall', NULL, 0, 'icon-appstore-fill', 108, 1067246875800000001, '2024-12-12 23:04:55', 1067246875800000001, '2024-12-12 23:17:31'); +INSERT INTO `sys_menu` VALUES (1867219841996353539, 1867219841996353538, '查看', NULL, 'item:wall:page,item:wall:info', 1, NULL, 0, 1067246875800000001, '2024-12-12 23:04:55', 1067246875800000001, '2024-12-12 23:04:55'); +INSERT INTO `sys_menu` VALUES (1867219841996353540, 1867219841996353538, '新增', NULL, 'item:wall:save', 1, NULL, 1, 1067246875800000001, '2024-12-12 23:04:55', 1067246875800000001, '2024-12-12 23:04:55'); +INSERT INTO `sys_menu` VALUES (1867219841996353541, 1867219841996353538, '修改', NULL, 'item:wall:update', 1, NULL, 2, 1067246875800000001, '2024-12-12 23:04:55', 1067246875800000001, '2024-12-12 23:04:55'); +INSERT INTO `sys_menu` VALUES (1867219841996353542, 1867219841996353538, '删除', NULL, 'item:wall:delete', 1, NULL, 3, 1067246875800000001, '2024-12-12 23:04:55', 1067246875800000001, '2024-12-12 23:04:55'); +INSERT INTO `sys_menu` VALUES (1867219841996353543, 1867219841996353538, '导出', NULL, 'item:wall:export', 1, NULL, 4, 1067246875800000001, '2024-12-12 23:04:55', 1067246875800000001, '2024-12-12 23:04:55'); +INSERT INTO `sys_menu` VALUES (1867226118034092034, 0, '敏感词', 'item/dict', NULL, 0, 'icon-expend', 110, 1067246875800000001, '2024-12-12 23:13:41', 1067246875800000001, '2024-12-12 23:17:22'); +INSERT INTO `sys_menu` VALUES (1867226118034092035, 1867226118034092034, '查看', NULL, 'item:dict:page,item:dict:info', 1, NULL, 0, 1067246875800000001, '2024-12-12 23:13:41', 1067246875800000001, '2024-12-12 23:13:41'); +INSERT INTO `sys_menu` VALUES (1867226118034092036, 1867226118034092034, '新增', NULL, 'item:dict:save', 1, NULL, 1, 1067246875800000001, '2024-12-12 23:13:41', 1067246875800000001, '2024-12-12 23:13:41'); +INSERT INTO `sys_menu` VALUES (1867226118034092037, 1867226118034092034, '修改', NULL, 'item:dict:update', 1, NULL, 2, 1067246875800000001, '2024-12-12 23:13:41', 1067246875800000001, '2024-12-12 23:13:41'); +INSERT INTO `sys_menu` VALUES (1867226118034092038, 1867226118034092034, '删除', NULL, 'item:dict:delete', 1, NULL, 3, 1067246875800000001, '2024-12-12 23:13:41', 1067246875800000001, '2024-12-12 23:13:41'); +INSERT INTO `sys_menu` VALUES (1867226118034092039, 1867226118034092034, '导出', NULL, 'item:dict:export', 1, NULL, 4, 1067246875800000001, '2024-12-12 23:13:41', 1067246875800000001, '2024-12-12 23:13:41'); + +-- ---------------------------- +-- Table structure for sys_params +-- ---------------------------- +DROP TABLE IF EXISTS `sys_params`; +CREATE TABLE `sys_params` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `param_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '参数编码', + `param_value` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '参数值', + `param_type` tinyint(3) UNSIGNED NULL DEFAULT 1 COMMENT '类型 0:系统参数 1:非系统参数', + `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者', + `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间', + `updater` bigint(20) NULL DEFAULT NULL COMMENT '更新者', + `update_date` datetime NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_param_code`(`param_code`) USING BTREE, + INDEX `idx_create_date`(`create_date`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1067246875800000074 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '参数管理' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_params +-- ---------------------------- +INSERT INTO `sys_params` VALUES (1067246875800000073, 'CLOUD_STORAGE_CONFIG_KEY', '{\"type\":1,\"qiniuDomain\":\"http://test.oss.renren.io\",\"qiniuPrefix\":\"upload\",\"qiniuAccessKey\":\"NrgMfABZxWLo5B-YYSjoE8-AZ1EISdi1Z3ubLOeZ\",\"qiniuSecretKey\":\"uIwJHevMRWU0VLxFvgy0tAcOdGqasdtVlJkdy6vV\",\"qiniuBucketName\":\"renren-oss\",\"aliyunDomain\":\"\",\"aliyunPrefix\":\"\",\"aliyunEndPoint\":\"\",\"aliyunAccessKeyId\":\"\",\"aliyunAccessKeySecret\":\"\",\"aliyunBucketName\":\"\",\"qcloudDomain\":\"\",\"qcloudPrefix\":\"\",\"qcloudSecretId\":\"\",\"qcloudSecretKey\":\"\",\"qcloudBucketName\":\"\"}', 0, '云存储配置信息', 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); + +-- ---------------------------- +-- Table structure for sys_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role`; +CREATE TABLE `sys_role` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '角色名称', + `remark` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `dept_id` bigint(20) NULL DEFAULT NULL COMMENT '部门ID', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者', + `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间', + `updater` bigint(20) NULL DEFAULT NULL COMMENT '更新者', + `update_date` datetime NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_dept_id`(`dept_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色管理' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_role +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_role_data_scope +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_data_scope`; +CREATE TABLE `sys_role_data_scope` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `role_id` bigint(20) NULL DEFAULT NULL COMMENT '角色ID', + `dept_id` bigint(20) NULL DEFAULT NULL COMMENT '部门ID', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者', + `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_role_id`(`role_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色数据权限' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_role_data_scope +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_menu`; +CREATE TABLE `sys_role_menu` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `role_id` bigint(20) NULL DEFAULT NULL COMMENT '角色ID', + `menu_id` bigint(20) NULL DEFAULT NULL COMMENT '菜单ID', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者', + `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_role_id`(`role_id`) USING BTREE, + INDEX `idx_menu_id`(`menu_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色菜单关系' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_role_menu +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_role_user +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_user`; +CREATE TABLE `sys_role_user` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `role_id` bigint(20) NULL DEFAULT NULL COMMENT '角色ID', + `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者', + `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_role_id`(`role_id`) USING BTREE, + INDEX `idx_user_id`(`user_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色用户关系' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_role_user +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user`; +CREATE TABLE `sys_user` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名', + `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码', + `real_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名', + `head_url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '头像', + `gender` tinyint(3) UNSIGNED NULL DEFAULT NULL COMMENT '性别 0:男 1:女 2:保密', + `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱', + `mobile` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机号', + `dept_id` bigint(20) NULL DEFAULT NULL COMMENT '部门ID', + `super_admin` tinyint(3) UNSIGNED NULL DEFAULT NULL COMMENT '超级管理员 0:否 1:是', + `status` tinyint(4) NULL DEFAULT NULL COMMENT '状态 0:停用 1:正常', + `creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者', + `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间', + `updater` bigint(20) NULL DEFAULT NULL COMMENT '更新者', + `update_date` datetime NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_username`(`username`) USING BTREE, + INDEX `idx_create_date`(`create_date`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1067246875800000002 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统用户' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_user +-- ---------------------------- +INSERT INTO `sys_user` VALUES (1067246875800000001, 'admin', '$2a$10$o1Pzp8hYhwmTQgH0k7dTeuEie3aRHjlnG778N./258ZF8Fd7RxFlW', '管理员', NULL, 0, 'root@renren.io', '13612345678', NULL, 1, 1, 1067246875800000001, '2024-12-03 11:54:34', 1067246875800000001, '2024-12-03 11:54:34'); + +-- ---------------------------- +-- Table structure for sys_user_token +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user_token`; +CREATE TABLE `sys_user_token` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `token` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户token', + `expire_date` datetime NULL DEFAULT NULL COMMENT '过期时间', + `update_date` datetime NULL DEFAULT NULL COMMENT '更新时间', + `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `user_id`(`user_id`) USING BTREE, + UNIQUE INDEX `token`(`token`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1863925300941840386 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统用户Token' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of sys_user_token +-- ---------------------------- +INSERT INTO `sys_user_token` VALUES (1863925300941840385, 1067246875800000001, '1229140856bcc8c41a38090478d95fff', '2025-03-25 04:53:47', '2025-03-24 16:53:47', '2024-12-03 20:36:36'); + +-- ---------------------------- +-- Table structure for tb_certificate_applications +-- ---------------------------- +DROP TABLE IF EXISTS `tb_certificate_applications`; +CREATE TABLE `tb_certificate_applications` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', + `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '申请提交时间', + `audit_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '值为0表示待审核,1表示审核通过,2表示审核拒绝', + `audit_time` datetime NULL DEFAULT NULL COMMENT '审核时间', + `audit_comments` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '审核备注', + `cert_id` bigint(20) NULL DEFAULT NULL COMMENT '证书编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '敏感词' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_certificate_applications +-- ---------------------------- +INSERT INTO `tb_certificate_applications` VALUES (4, 1893836584118173697, '2025-03-24 08:44:02', 1, '2025-03-24 16:44:02', '通过', 1); +INSERT INTO `tb_certificate_applications` VALUES (6, 1893836584118173697, '2025-03-24 08:54:08', 1, '2025-03-24 16:54:08', '通过', 2); + +-- ---------------------------- +-- Table structure for tb_certificates +-- ---------------------------- +DROP TABLE IF EXISTS `tb_certificates`; +CREATE TABLE `tb_certificates` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', + `certificate_number` bigint(20) NULL DEFAULT NULL COMMENT '证书编号', + `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户 ID', + `issue_date` datetime NULL DEFAULT NULL COMMENT '签发日期', + `expire_date` datetime NULL DEFAULT NULL COMMENT '过期日期', + `certificate_data` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '详情', + `blockchain_tx_id` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '区块链交易 ID', + `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '1:有效\n\n0:撤销\n\n2:过期\n默认状态为有效(1)。', + `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `is_block` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否上链', + `audit_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '值为0表示待审核,1表示审核通过,2表示审核拒绝', + `audit_comments` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '审核备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of tb_certificates +-- ---------------------------- +INSERT INTO `tb_certificates` VALUES (1, 110110, 1863920777825390593, '2025-03-21 00:00:00', '2025-02-27 00:00:00', '证书', '', 1, '2025-03-24 02:13:52', 'upload/46ec4155-4519-4740-baba-228dae38940c.jpg', 0, 0, NULL); +INSERT INTO `tb_certificates` VALUES (2, 110111, 1893836584118174806, '2025-03-27 00:00:00', '2025-03-07 00:03:00', '证书', '', 1, '2025-03-24 04:33:36', 'upload/46ec4155-4519-4740-baba-228dae38940c.jpg', 1, 1, NULL); +INSERT INTO `tb_certificates` VALUES (6, 110112, 1893836584118173697, '2025-03-14 00:00:00', '2025-03-14 00:00:00', '证书', '0x9f1d6d445a6d4953a6531956a0c3a994d2c8d446d7ab322b86c3d6d8b83ff1a1', 1, '2025-03-24 05:39:00', 'upload/46ec4155-4519-4740-baba-228dae38940c.jpg', 1, 1, NULL); +INSERT INTO `tb_certificates` VALUES (7, 110113, 1893836584118173697, '2025-03-14 00:00:00', '2025-03-14 00:00:00', '证书', NULL, 1, '2025-03-24 05:39:22', 'upload/46ec4155-4519-4740-baba-228dae38940c.jpg', 0, 0, NULL); +INSERT INTO `tb_certificates` VALUES (8, 110114, 1893836584118173697, '2025-03-25 00:00:00', '2025-03-11 00:00:00', '证书', NULL, 1, '2025-03-24 06:14:23', 'upload/46ec4155-4519-4740-baba-228dae38940c.jpg', 0, 2, '证书污染'); +INSERT INTO `tb_certificates` VALUES (9, 5412, 1893836584118173697, '2025-02-27 00:01:00', '2025-03-12 12:00:00', '证书测试', NULL, 1, '2025-03-24 06:39:53', 'upload/46ec4155-4519-4740-baba-228dae38940c.jpg', 0, 1, NULL); +INSERT INTO `tb_certificates` VALUES (10, 5678, 1893836584118173697, '2025-03-14 09:00:00', '2027-03-11 09:00:00', '体育证书', NULL, 1, '2025-03-24 08:52:58', '', 0, 0, NULL); + +-- ---------------------------- +-- Table structure for tb_comment +-- ---------------------------- +DROP TABLE IF EXISTS `tb_comment`; +CREATE TABLE `tb_comment` ( + `id` bigint(20) NOT NULL COMMENT '编号', + `user_id` bigint(20) NULL DEFAULT NULL COMMENT '患者编号', + `doctors_id` bigint(20) NULL DEFAULT NULL COMMENT '医生编号', + `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '内容', + `item_id` bigint(20) NULL DEFAULT NULL COMMENT '关联编号', + `score` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '评分', + `type` int(1) NULL DEFAULT NULL COMMENT '0在线问答', + `sender_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '类型', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '评论表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_comment +-- ---------------------------- +INSERT INTO `tb_comment` VALUES (1891762466988466178, 1863920777825390593, 1, '您好', NULL, 'A', 0, 'patient', '2025-02-21 14:02:39'); +INSERT INTO `tb_comment` VALUES (1891762466988466179, 1863920777825390593, 1, '您好,我需要一些帮助。', NULL, 'A', 0, 'patient', '2025-02-21 14:02:50'); +INSERT INTO `tb_comment` VALUES (1891762466988466180, 1888931423629377538, 1, '医生,我今天感觉有些不舒服。', NULL, 'A', 0, 'patient', '2025-02-21 14:02:51'); +INSERT INTO `tb_comment` VALUES (1891762466988466181, 1863920777825390593, 2, '感谢医生的帮助,已经好转了!', NULL, 'A', 1, 'patient', '2025-02-21 14:02:54'); +INSERT INTO `tb_comment` VALUES (1891762466988466182, 1888931423629377538, 3, '能否帮我预约下周的检查?', NULL, 'A', 0, 'doctor', '2025-02-21 14:03:34'); +INSERT INTO `tb_comment` VALUES (1891762466988466183, 1863920777825390593, 1, '昨天的检查结果需要多关注一点。', NULL, 'B', 0, 'doctor', '2025-02-21 14:03:34'); +INSERT INTO `tb_comment` VALUES (1891762466988466184, 1888931423629377538, 1, '我很满意这次的治疗,谢谢医生!', NULL, 'A', 1, 'patient', '2025-02-21 14:03:02'); +INSERT INTO `tb_comment` VALUES (1891762466988466185, 1863920777825390593, 2, '麻烦医生提供一些关于我的病历信息。', NULL, 'B', 0, 'patient', '2025-02-21 14:03:05'); +INSERT INTO `tb_comment` VALUES (1891762466988466186, 1888931423629377538, 1, '我的病情有些反复,需要再次诊断。', NULL, 'A', 0, 'patient', '2025-02-21 14:03:07'); +INSERT INTO `tb_comment` VALUES (1891762466988466187, 1863920777825390593, 1, '今天感觉好些了,感谢治疗!', NULL, 'A', 1, 'patient', '2025-02-21 14:03:08'); +INSERT INTO `tb_comment` VALUES (1891762466988466188, 1888931423629377538, 3, '医生,能告诉我这个药物的副作用吗?', NULL, 'B', 0, 'patient', '2025-02-21 14:03:12'); +INSERT INTO `tb_comment` VALUES (1891762466988466189, 1863920777825390593, 2, '希望能增加复诊次数,我感到有些不安。', NULL, 'A', 0, 'patient', '2025-02-21 14:03:14'); +INSERT INTO `tb_comment` VALUES (1891762466988466190, 1888931423629377538, 1, '下次检查是否可以选择其他的检查项目?', NULL, 'A', 0, 'patient', '2025-02-21 14:03:15'); +INSERT INTO `tb_comment` VALUES (1891762466988466191, 1863920777825390593, 1, '再次感谢医生的耐心讲解。', NULL, 'A', 1, 'patient', '2025-02-21 14:03:18'); +INSERT INTO `tb_comment` VALUES (1891762466988466192, 1888931423629377538, 2, '希望能了解更多关于治疗方案的信息。', NULL, 'B', 0, 'patient', '2025-02-21 14:03:19'); +INSERT INTO `tb_comment` VALUES (1891762466988466193, 1863920777825390593, 3, '我的症状已经缓解很多,谢谢!', NULL, 'A', 1, 'patient', '2025-02-21 14:03:22'); +INSERT INTO `tb_comment` VALUES (1891762466988466194, 1888931423629377538, 1, '是否需要进行后续的检查呢?', NULL, 'A', 0, 'patient', '2025-03-20 07:38:57'); +INSERT INTO `tb_comment` VALUES (1891762466988466195, 1863920777825390593, 2, '我最近的身体情况越来越好,谢谢医生!', NULL, 'A', 1, 'patient', '2025-02-21 14:03:24'); +INSERT INTO `tb_comment` VALUES (1891762466988466196, 1888931423629377538, 3, '我的症状一直没缓解,能再咨询一下吗?', NULL, 'B', 0, 'patient', '2025-02-21 14:03:25'); +INSERT INTO `tb_comment` VALUES (1891762466988466197, 1863920777825390593, 1, '谢谢医生一直以来的照顾。', NULL, 'A', 1, 'patient', '2025-02-21 14:03:28'); +INSERT INTO `tb_comment` VALUES (1891762466988466198, 1888931423629377538, 2, '我有些不确定现在是否需要调整药量。', NULL, 'B', 0, 'patient', '2025-02-21 14:03:28'); +INSERT INTO `tb_comment` VALUES (1891762758538649601, 1863920777825390593, 1, '还在吗', NULL, 'B', 0, 'patient', '2025-02-21 14:03:29'); +INSERT INTO `tb_comment` VALUES (1891763007885930497, 1863920777825390593, 1, '?', NULL, 'B', 0, 'patient', '2025-02-21 14:03:33'); +INSERT INTO `tb_comment` VALUES (1902618612896673794, 1893836584118173697, 1, '在吗医生', NULL, 'B', 0, 'patient', '2025-03-20 15:09:59'); + +-- ---------------------------- +-- Table structure for tb_departments +-- ---------------------------- +DROP TABLE IF EXISTS `tb_departments`; +CREATE TABLE `tb_departments` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '科室编号', + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '科室名称', + `description` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '科室描述', + `location` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '科室位置', + `phone` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '科室联系电话', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '科室管理表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_departments +-- ---------------------------- +INSERT INTO `tb_departments` VALUES (1, '内科', '负责内科疾病的诊断和治疗', '一楼', '010-12345678', '2025-03-03 10:00:00'); +INSERT INTO `tb_departments` VALUES (2, '外科', '负责外科手术和治疗', '二楼', '010-23456789', '2025-03-03 11:00:00'); +INSERT INTO `tb_departments` VALUES (3, '儿科', '专注于儿童疾病诊断与治疗', '三楼', '010-34567890', '2025-03-03 12:00:00'); +INSERT INTO `tb_departments` VALUES (4, '妇科', '提供妇科相关医疗服务', '一楼', '010-45678901', '2025-03-03 13:00:00'); +INSERT INTO `tb_departments` VALUES (5, '眼科', '专门进行眼科检查和手术', '二楼', '010-56789012', '2025-03-03 14:00:00'); +INSERT INTO `tb_departments` VALUES (6, '耳鼻喉科', '诊治耳鼻喉疾病', '三楼', '010-67890123', '2025-03-03 15:00:00'); +INSERT INTO `tb_departments` VALUES (7, '口腔科', '提供口腔医疗服务', '一楼', '010-78901234', '2025-03-03 16:00:00'); +INSERT INTO `tb_departments` VALUES (8, '皮肤科', '处理各类皮肤病症', '二楼', '010-89012345', '2025-03-03 17:00:00'); +INSERT INTO `tb_departments` VALUES (9, '肿瘤科', '进行肿瘤相关检查与治疗', '三楼', '010-90123456', '2025-03-03 18:00:00'); +INSERT INTO `tb_departments` VALUES (10, '急诊科', '处理急诊情况', '一楼', '010-01234567', '2025-03-03 19:00:00'); + +-- ---------------------------- +-- Table structure for tb_doctors +-- ---------------------------- +DROP TABLE IF EXISTS `tb_doctors`; +CREATE TABLE `tb_doctors` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', + `user_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户名', + `nick_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '姓名', + `years_experience` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '工作经验', + `graduation_school` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '毕业学校', + `phone` bigint(20) NULL DEFAULT NULL COMMENT '联系电话', + `sex` int(1) NULL DEFAULT NULL COMMENT '性别', + `specialty` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '专业领域', + `img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '医生图片', + `intro` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '简介', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `position` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '职称', + `reviews` int(10) NULL DEFAULT NULL COMMENT '评价数量', + `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '密码', + `audit` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否审核 0 无 1 是2 不通过', + `aptitude` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '资质', + `total_amount` double(10, 2) NULL DEFAULT NULL COMMENT '挂号费用', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '医生表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_doctors +-- ---------------------------- +INSERT INTO `tb_doctors` VALUES (1, '孟召伟', '1101', '10', '南京大学', 13355224488, 1, '心理咨询', 'upload/qoYBAFL2RfyAII16AAI3GWnVwog375_200_200_1.jpg', '国家二级心理咨询师,婚姻家庭咨询师,家庭教育指导师,婚恋专家,个人成长', '2025-03-20 15:18:21', '专家', 35, '36ab771eba23f49d7ae43af88c601f3de8fccb201250906a4085444ae765f2db', 1, 'upload/144ad380-0866-4507-b603-f00e73b06660.jpg', 35.00); +INSERT INTO `tb_doctors` VALUES (2, '徐蕾', '1102', '10', '南京大学', 13355224488, 2, '科室主任', 'upload/1780513872931848194.png', '国家二级心理咨询师,婚姻家庭咨询师,家庭教育指导师,婚恋专家,个人成长', '2025-03-20 15:18:22', '专家', 35, '36ab771eba23f49d7ae43af88c601f3de8fccb201250906a4085444ae765f2db', 1, 'upload/144ad380-0866-4507-b603-f00e73b06660.jpg', 35.00); +INSERT INTO `tb_doctors` VALUES (3, '周建中', '1103', '10', '南京大学', 13355224488, 0, '心理咨询', 'upload/1696091800588128256.jpg', '国家二级心理咨询师,婚姻家庭咨询师,家庭教育指导师,婚恋专家,个人成长', '2025-03-20 15:18:23', '主任医师', 35, '36ab771eba23f49d7ae43af88c601f3de8fccb201250906a4085444ae765f2db', 1, 'upload/144ad380-0866-4507-b603-f00e73b06660.jpg', 28.00); +INSERT INTO `tb_doctors` VALUES (4, '石红乔', '1104', '10', '南京大学', 13355224488, 0, '心理咨询', 'upload/avatar_doctor.png', '国家二级心理咨询师,婚姻家庭咨询师,家庭教育指导师,婚恋专家,个人成长', '2025-03-20 15:18:24', '专家', 35, '36ab771eba23f49d7ae43af88c601f3de8fccb201250906a4085444ae765f2db', 1, 'upload/144ad380-0866-4507-b603-f00e73b06660.jpg', 35.00); +INSERT INTO `tb_doctors` VALUES (5, '金保方', '1105', '10', '南京大学', 13355224488, 0, '心理咨询', 'upload/avatar_doctor.png', '国家二级心理咨询师,婚姻家庭咨询师,家庭教育指导师,婚恋专家,个人成长', '2025-03-20 15:18:26', '专家', 35, '36ab771eba23f49d7ae43af88c601f3de8fccb201250906a4085444ae765f2db', 0, 'upload/144ad380-0866-4507-b603-f00e73b06660.jpg', 35.00); + +-- ---------------------------- +-- Table structure for tb_item +-- ---------------------------- +DROP TABLE IF EXISTS `tb_item`; +CREATE TABLE `tb_item` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', + `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '电影名称', + `card_subtitle` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '电影副标题', + `rating_value` decimal(3, 1) NULL DEFAULT NULL COMMENT '评分', + `rating_count` int(11) NULL DEFAULT NULL COMMENT '评分人数', + `rating_star_count` decimal(3, 1) NULL DEFAULT NULL COMMENT '星级评分', + `year` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '上映时间', + `large_pic` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '大图文件名', + `normal_pic` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '小图文件名', + `country` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '国家', + `movie_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '电影类型', + `director` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '导演', + `actor` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '主演', + `sort` int(10) NULL DEFAULT NULL COMMENT '排序', + `tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL, + `aptitude` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '资质', + `audit` tinyint(1) NULL DEFAULT 0 COMMENT '是否审核 0 无 1 是', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '电影表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_item +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tb_order +-- ---------------------------- +DROP TABLE IF EXISTS `tb_order`; +CREATE TABLE `tb_order` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '预约编号', + `user_id` bigint(20) NOT NULL COMMENT '用户编号', + `item_id` bigint(20) NOT NULL COMMENT '医生编号', + `age` bigint(20) NULL DEFAULT NULL COMMENT '年龄', + `order_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '状态 0已预约 1 已完成 2取消', + `appointment_time` datetime NULL DEFAULT NULL COMMENT '预约时间', + `total_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '订单总金额', + `payment_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '支付状态', + `payment_date` datetime NULL DEFAULT NULL COMMENT '支付时间', + `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + `score` int(5) NULL DEFAULT NULL COMMENT '订单评价分数', + `score_content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '评价内容', + `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '病例内容', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `sex` tinyint(1) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1902631117740093443 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '预约表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_order +-- ---------------------------- +INSERT INTO `tb_order` VALUES (1, 1863920777825390593, 1, 32, 1, '2025-02-28 00:00:00', NULL, 0, NULL, '2025-02-21 12:48:10', NULL, NULL, '

姓名:张某某
性别:男/女
年龄:45岁
就诊日期:2023年XX月XX日



主诉

患者自述“腰骶部酸痛伴双下肢乏力、疼痛1个月,加重3天”。



现病史

  1. 患者1个月前无明显诱因出现腰部酸痛,以腰骶部为主,久坐、弯腰后加重,休息后可稍缓解。
  2. 症状逐渐进展,近3天疼痛加重,并放射至双侧大腿后侧及小腿外侧,伴下肢麻木感,无夜间静息痛。
  3. 日常活动受限,步行超过30分钟需休息,无发热、尿便异常、体重下降等全身症状。
  4. 自行外用膏药及热敷效果不佳,遂来就诊。


既往史

  • 否认外伤、腰椎手术史。
  • 高血压病史5年,规律服药控制;否认糖尿病、风湿性疾病史。


体格检查

  • 一般情况:神清,生命体征平稳。
  • 腰椎检查:腰椎生理曲度变直,L4-L5、L5-S1棘突及椎旁压痛(+),叩击痛(+)。腰椎活动度:前屈60°(受限),后伸10°(疼痛加重)。
  • 神经系统:双下肢肌力Ⅳ级,直腿抬高试验左侧50°(+)、右侧60°(+),加强试验(+)。双侧膝反射、跟腱反射减弱,病理征未引出。
  • 其他:双下肢无肿胀,皮温正常,足背动脉搏动正常。


辅助检查

  1. 腰椎X线:腰椎退行性变,L4-L5椎间隙狭窄。
  2. 腰椎MRI(建议):待查,初步提示L4-L5椎间盘突出(未压迫硬膜囊)。
  3. 血常规、CRP、血沉:均未见明显异常。


初步诊断

  1. 腰椎间盘突出症(L4-L5)
  2. 腰肌劳损
  3. 腰椎退行性病变


处理措施

  1. 药物治疗:非甾体类抗炎药(如塞来昔布 200mg qd)口服,缓解疼痛。甲钴胺片(0.5mg tid)营养神经。外用氟比洛芬凝胶贴膏局部镇痛。
  2. 物理治疗:建议腰椎牵引、局部热疗、针灸治疗。
  3. 生活方式指导:避免久坐、弯腰负重,睡硬板床,加强腰背肌锻炼(如小燕飞)。
  4. 随访:1周后复诊,若症状无缓解或加重,需进一步行MRI检查并考虑康复科会诊。


医生签名:XXX
日期:2023年XX月XX日



', '四肢酸痛', 1); +INSERT INTO `tb_order` VALUES (2, 1863920777825390593, 1, 32, 0, '2025-02-28 00:00:00', NULL, 0, NULL, '2025-02-21 13:02:12', NULL, NULL, '', '四肢酸痛', 1); +INSERT INTO `tb_order` VALUES (1902631117740093442, 1893836584118173697, 3, NULL, 0, '2025-03-21 00:00:00', 28.00, 0, NULL, '2025-03-20 07:59:42', NULL, NULL, NULL, '1', 0); + +-- ---------------------------- +-- Table structure for tb_slides +-- ---------------------------- +DROP TABLE IF EXISTS `tb_slides`; +CREATE TABLE `tb_slides` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '轮播名称', + `sort` int(10) NULL DEFAULT NULL COMMENT '排序', + `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '图片地址', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '类型', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '轮播图' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_slides +-- ---------------------------- +INSERT INTO `tb_slides` VALUES (3, '轮播1', 1, 'upload/abdf27a87205498e854bc86bc69fa3f8.jpg', '2025-02-18 10:15:53', '首页轮播'); +INSERT INTO `tb_slides` VALUES (15, '轮播2', NULL, 'upload/c6b60d4894088614fbe09b910a9dac5461210.jpg', '2025-02-18 10:17:15', NULL); + +-- ---------------------------- +-- Table structure for tb_token +-- ---------------------------- +DROP TABLE IF EXISTS `tb_token`; +CREATE TABLE `tb_token` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `user_id` bigint(20) NOT NULL COMMENT '用户ID', + `token` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'token', + `expire_date` datetime NULL DEFAULT NULL COMMENT '过期时间', + `update_date` datetime NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `user_id`(`user_id`) USING BTREE, + UNIQUE INDEX `token`(`token`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1893836595690258434 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户Token' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_token +-- ---------------------------- +INSERT INTO `tb_token` VALUES (1863921548927258625, 1863920777825390593, 'bf8b9bc76776429081b0b0828c61d8ce', '2025-02-24 10:02:23', '2025-02-24 10:02:23'); +INSERT INTO `tb_token` VALUES (1888853374313553922, 1888852840605147137, 'ed407976795e4df88d56e7a00c1d5154', '2025-02-11 07:37:24', '2025-02-10 19:37:24'); +INSERT INTO `tb_token` VALUES (1888931479396843521, 1888931423629377538, 'df266350cbab4165a770e32a41e821cd', '2025-02-12 00:12:33', '2025-02-12 00:12:33'); +INSERT INTO `tb_token` VALUES (1893836595690258433, 1893836584118173697, 'ffd85c96c4cc418694e49d7e3041d7cb', '2025-03-24 16:53:41', '2025-03-24 16:53:41'); + +-- ---------------------------- +-- Table structure for tb_topic +-- ---------------------------- +DROP TABLE IF EXISTS `tb_topic`; +CREATE TABLE `tb_topic` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', + `title` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '标题', + `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '内容', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + `view` int(10) NOT NULL DEFAULT 0, + `sort` int(10) NOT NULL DEFAULT 1, + `type` int(11) NULL DEFAULT 0 COMMENT '类型0 话题 1 文创', + `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户编号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1893843706562265090 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '健康资讯' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_topic +-- ---------------------------- +INSERT INTO `tb_topic` VALUES (1867221170365947966, '确诊为自我奖励型人格', '

自我奖励型人格,是一种倾向于通过自我激励与奖励来保持积极动力、达成目标的人格特质。不论是完成小任务后的甜点奖励,还是实现大目标后的旅行计划,都是我们的自我奖励。快来分享你是如何设定目标、实现自我提升,并在过程中给予自己恰到好处的鼓励与奖赏的吧。

', '2025-02-11 13:09:02', 59, 1, 0, NULL); +INSERT INTO `tb_topic` VALUES (1867221170365947967, '我的春节戒断反应', '

春节,这个承载着中华民族深厚情感与传统文化的重要节日,总是以它独有的方式,将喜庆、热闹与温馨的氛围弥漫在每一寸空气中。但当节日的喧嚣逐渐散去,许多人却会不由自主地陷入一种特殊的“戒断反应”之中——那是一种对春节热闹与年味的深深怀念。你是否有这种春节戒断反应呢?

', '2025-02-11 13:09:04', 0, 1, 0, NULL); +INSERT INTO `tb_topic` VALUES (1867221170365947968, '你身边的数字时代边缘人', '

在数字时代,信息如潮水般涌来,但有些人却仿佛站在了时代的边缘,无法完全融入其中。他们可能是老年人,对智能手机和互联网感到陌生;也可能是忙碌于生计,无暇顾及新兴科技的年轻人。你是否属于数字时代的边缘人?请分享你的“边缘人”生活见闻。

', '2025-02-11 13:35:25', 500, 1, 0, NULL); +INSERT INTO `tb_topic` VALUES (1867221170365947969, '你所去过的藏地秘境', '

发现壮丽的西部藏地秘境,栖居于简朴的大地之上,看草长莺飞 ,看万物复苏,追寻最自由的生活方式。

', '2025-02-11 13:35:23', 100, 1, 0, NULL); +INSERT INTO `tb_topic` VALUES (1867221170365947970, '我想要拥有不过春节的自由', '

当“过年”变成压力,有人开始反思:能否拥有不过春节的自由?有人因催婚催生、社交内耗或单纯渴望安静而抗拒传统仪式,却也面临“不孝”“冷漠”的质疑。你的春节是“必选项”还是“可选项”?来聊聊你的态度与困惑。

', '2025-02-11 13:09:06', 0, 1, 0, NULL); +INSERT INTO `tb_topic` VALUES (1867221170365947971, '别再线下去物业配门禁卡了!', '

家里的单元门禁卡丢了,物业要10r一个

自己在pxx找了,基本都是要求看是IC还是ID卡,然后发卡背面的十位数字

一开始父母还不信觉得必须得把钥匙邮寄过去人家才能给配出来

结果只需要给出卡背面的十位数字,到货后完全匹配单元门,三个一共8.6

\"\"

\"null\"

', '2025-02-11 15:15:00', 7, 1, 1, NULL); +INSERT INTO `tb_topic` VALUES (1867221170365947972, '经验分享|女人事业一定是最最最重要的 ', '

和姐妹们分享下我自己的路径 出生于18线小镇,父母小学文化,父亲长期喝酒,家庭暴力,出轨,混社会,发脾气,是个软饭硬吃的大男主主义到极致的男人,我妈过得也非常痛苦,她自身难保,所以每当我爸欺负我,她也都不会保护我!所以从小我的目标就是远离这个家,有多远有多远! 后面我拼命学习,考上了985,取得了世界级竞赛比赛的奖牌,直接保研,但是研究生在北京我换上了焦虑症,当时以为男朋友就是自己的依靠,由于我极度缺爱,对他也是100分信任,所以选择去了央企,两个人互补,他去互联网赚钱,我负责稳定,结果当我们都觉得要结婚的时候,他遇见了白月光,直接就把我踹了。 出轨这件事对我影响非常大,后来也颓废了很久,甚至想过自我了结了,因为觉得自己太恋爱脑把自己的未来毁了,没有选择去互联网。但是自我调整后,我开始在公司好好发展,现在逐渐适应了,经过三年在公司的摸爬滚打,逐渐明确自己的定位,也建立了目标,存款也达到了百万! 告诉各位平凡的女性,永远不要想着让男人托举自己!要以最高优先级对待自己的事业发展,你的钱,你的工作,你的能力,你的健康才是你自己唯一的托举

', '2025-02-11 15:35:30', 0, 1, 1, NULL); +INSERT INTO `tb_topic` VALUES (1867221170365947973, '亲手搞出更健康的奶茶', '

第一步:选茶叶别纠结!红茶绿茶乌龙茶,你家茶叶罐里有什么就用什么!爷爷的茉莉花茶、老爸的普洱茶包、甚至你泡剩下的立顿红茶渣,通通都能废物利用!记住黄金口诀——茶叶越便宜越耐造!抓一把丢进锅里,加水煮到咕嘟冒泡就关火,别学奶茶店煮半小时,茶汤苦得能去演苦情剧!煮好的茶汤拿滤网过一遍渣渣,懒得洗滤网?用蒸包子的纱布也行,主打一个就地取材!

第二步:倒奶别手抖!全脂牛奶是灵魂伴侣,脱脂奶喝起来像掺了水的寂寞?教你个狠招——半盒全脂奶+半盒燕麦奶混着来!热量砍半,香味翻倍,还能喝出坚果香!乳糖不耐的姐妹看这里!杏仁奶椰奶豆奶随便换,但记住植物奶容易结块,倒进热茶前先拿打蛋器搅10秒,保你丝滑得像德芙广告!

第三步:控糖大作战!白砂糖?那是上个世纪的古董!挖两勺零卡糖打底,再挤一丢丢蜂蜜增加层次感,最后撒点海盐——对!就是炒菜那个盐!魔法来了:咸味能让甜味放大3倍!信我,这样搞出来的甜度刚刚好,喝完不用疯狂跑厕所!爱加料的看过来:煮奶茶时扔几颗红枣进去,天然甜味剂+养生Buff,隔壁养生阿姨都要找你取经!

第四步:搅拌有玄机!别拿筷子瞎搅和!找个带盖的保温杯,茶和奶倒进去,加入你的灵魂配料(肉桂粉/姜汁/可可粉都行),然后疯狂摇它20秒!看着奶泡慢慢浮起来,恭喜你解锁奶茶店同款绵密口感!没保温杯?电饭煲内胆也行!抡起胳膊当健身,奶茶还没喝先消耗50大卡!

第五步:冰块要心机!直接加白水冰?达咩!把冷泡茶冻成冰块,化开也不怕味道变淡!更绝的是把牛奶冻成冰球,喝到后面越来越浓!夏天想喝冰奶茶又怕姨妈痛?把红枣茶冻成冰块,养生冰饮直接拿捏!

重点来了:所有材料比例记不住?教你万能公式!1拳头茶叶+2拳头水+3拳头奶=不会翻车的基础款!进阶玩家可以玩混搭:普洱+燕麦奶=中年养生局,茉莉花茶+椰奶=小清新约会款,乌龙茶+杏仁奶=职场摸鱼必备!倒进马克杯就是办公室下午茶,装进玻璃瓶就是ins风摆拍神器!

别被网红教程吓到!什么温度计量杯电子秤,咱们普通人不需要!煮茶看气泡——小泡泡是\"可以喝了\",大泡泡是\"要烧干了\"!加糖靠手感——先加一勺尝一口,不够甜就再来一勺!最最重要的是:做完记得对着奶茶说\"我可真牛\",味道立马提升50%!

', '2025-02-11 15:35:48', 0, 1, 1, NULL); +INSERT INTO `tb_topic` VALUES (1867221170365947974, '和人类幼崽聊数学', '

幼年时,他有个邻居。有一天,邻居问他,3乘以5等于多少?他说:15。那5乘以3呢?他从头算了一遍,还是15。邻居笑他:你为什么花这么大劲儿呢,3乘以5和5乘以3不是一回事吗?他想追问邻居为什么,但邻居只是说:小孩儿,你在学校里学了就会了。后来两三年,他心里总有个期待,他想十岁我就知道为什么5乘以3等于3乘以5了。

终于,那天来临。他兴高采烈翻开课本,却发现课本上只是冷冰冰一行乘法交换律a*b=b*a,没有解释为什么。他失望地几乎哭了出来。后来又过了很多年,他才自己意识到,这只是算术的方式不同,三行五列和五行三列,其实是一样的排列。

这是今年76岁的数学家Alexandre Avonkine(后文称亚历山大)的童年回忆。

第一个孩子三岁那年,他想起这段经历,决定试试看给孩子们上数学课。听众里还有孩子的好朋友们,都是三四岁的年纪。他把每一节都用日记的形式记录下来,后来整理成书:《Maths from Three to Seven》。这本书我非常喜欢。如果你没时间看书,或者不想看英文(没有中文译本),我把书中的几个我很赞同的点整理在本文中。当然,或多或少,也掺杂了我本人粗浅的理解和思考。惭愧。

Math from Three to Seven评价人数不足Alexander Zvonkin / 2011 / American Mathematical Society

我对学前教育几乎一无所知甚至毫无兴趣,但从一个已经进入系统数学大厦的数学工作者的角度,看书的过程中,还是不断感受到成人成熟却定性的思维和孩子天然的思维能力之间的差异。这种差异让我觉得非常有趣,原来从其实并不遥远的孩童时期走到现在,教育系统和社会法则把我的思维方式塑造成了如今这样,我虽然知道如何按部就班解薛定谔方程,却并不比一个三岁孩子高明。

孩子如何能最好最高效地理解一些数学概念,对成年人后天学习也会有一些启发:毕竟,作为某一个专业领域的门外汉,只要你不是盲目自信,不懂装懂,你一开始对这个领域的感受是和孩子一样的。

成年人做数学,思维是高度抽象的。《数学的雨伞下》这本书里多次提到,在数学之美的其中一点是,它是高度概括具象世界的:1就是1,2就是2,并不存在1一定要指一个苹果,2一定要指两块钱。1+2=3这件事,不论你是一个苹果加两个苹果,还是一块钱加两块钱,结论都是一样的,和具体所指的物体几乎是不相关的。(这本书我非常非常推荐,可读性很强。)

数学的雨伞下8.9[法] 米卡埃尔·洛奈(Mickaël Launay) / 2023 / 人民邮电出版社

但是一个三岁孩子很难理解这一点,他通常需要通过具体的物质来帮助理解抽象的结论。亚历山大经常做的一件事情是,用不同的形式重复一个本质完全相同的数学问题。一个很简单的例子是,与其让他记住2乘以4是多少,不如今天你问他小猫每次能跳上 4 级楼梯,它跳了 2次,请问它一共跳了多少级楼梯?明天你问他:小明 2辆个玩具车,每个玩具车有4个轮子,请问有几个轮子?

我也常常需要回答一些小孩子的问题:“为什么3+4等于4+3啊?”“比无穷大更大的是什么啊?”我必须要给出非常具体的,联系生活的答案。插播一下,这位让我解释了两个月什么是无穷大的人类幼崽,这周忽然发出了”我要买无穷大个巧克力”的希望,我觉得他是懂了。

小孩子的另外一个特点的是,他们的记性非常好,对于感兴趣的话题,即使一时不能找到解法,会暂时把问题和疑问都储存在大脑里,随时用自己的能力储备进行思考,一旦他们觉得成熟,就会给出正确答案。亚历山大有一次问了他的孩子一个问题,当时孩子没有办法解出来。三年后,又一次在森林里,他忽然说:“爸爸你记得你问我的那个数学问题吗?我现在有答案了。”所以,他今天不知道2乘以4是多少没有关系,那些生活中具体的例子和他通过实践的经验,会在某个时刻让恍然问题的解法和深层的道理。而如果真的他永远也想不明白,你让他死记硬背,也没有意义。他也许能够用一个答案通过某次考试,某次选拔,但这很难成为他的知识,总有一天,他会完全忘记这些抽象的概念。

有一点是残酷的:我们固然可以用自律努力来达到近处的目标,但数学并不是死记硬背就能获得成功的学科。天赋,很重要。他有两个孩子,大孩子从小就在他的数学课上表达出了很大的兴趣,有时候晚饭时间也会思考爸爸出的题目;但他的第二个孩子,就更喜欢写写画画,父亲给她的训练固然让她拥有了一定的逻辑思考能力,但她明显更喜欢艺术。他当然也没有逼孩子学,大孩子的数学课持续了多年,二孩子却很快结课。同时,和他第二个孩子一起上课的另一个女孩子,却对数学表达了极大的兴趣,喜欢摆弄几何形状。若干年后他写了后记,他自己的大孩子拿到数学PhD,我在网上找了找,他如今是法国数学研究院CNRS的数学家;而那个女孩去了美国,现在在做数学教育,并编写了相关书籍。

我之前提到过几次,我出生在文科之家,母亲是中文教授,对明清小说多有研究;父亲是历史教授。我曾以为自己对数学热爱至斯是基因突变,但母亲前不久告诉我自己中学时候数学成绩极好,非常喜欢数学,只是因为当年家里很差,外婆倾尽所有送她读书到大学。她不想冒险让家人的积蓄打了水漂,知道若失败便没有再来一次的可能,便选择了招生名额很多的中文系。但她依然喜欢数学,如今退休后,家里又买了些数学书,每天都要打卡做题。

不过,不是人人都要成为数学家。我不是画家,但也喜欢看展,平均一个月一定要去一次博物馆;一个人可以不会算很多题目,但也感受到数学之美。

我不知道对数学的热爱如何培养,是否有可能培养,但拔苗助长是会扼杀掉本来的热爱的。我高中的时候数学老师对我不好,每天盯着我,我和男生出去玩就会被她说“不自爱”,我在逆反心理下逐渐厌恶数学,甚至考过不及格。我大学选择数学专业其实是赌了一口气,觉得我必须比老师数学好。赌对了。我心里隐藏着的热爱从大一开始疯狂觉醒,陷入了高等数学的美好中不能自拔,直到现在。

亚历山大的书中也提到,他作为数学家,知道自己的孩子数学思维非常优秀,孩子上学后,他却发现孩子的数学成绩并不是太好。他有自己的思维模式,和学校教育的步调不完全一致,或多或少扼杀了他一些信心。我的意思是,数学固然是有标准答案的学科,但就如同登山一样,在登顶之前,你走什么路,用什么方式走路,并没有那么重要。很多时候,我们才走到半山腰,就有人跟我们说:你们这样不能走到终点的。但也许,每个人都有每个人的走法。

三年前,我和一个当时小学一年级的孩子交流,他让我给他出很难的算数。我已经不记得我给他出了什么题,只记得他用一种我意想不到的方式,把数字拆分成了奇怪的组合,但得出了正确答案。我当时就觉得,可能标准答案唯一,但每个孩子,有最适合自己的理解方式和解题方法。我在他找到答案之前,不能打断他。

下面是我记录的几个书中提到的,有趣的问题。我自己归纳了一下可能考察的能力。如果大家有兴趣,可以拿去问问身边的人类幼崽:

  1. 一个孩子坐电梯去13楼,但每次只能按到8楼,是为什么?考察能力:逻辑推理、现实生活常识。
  2. 正方形多还是平行四边形多?考察能力:集合关系、分类与归纳。
  3. 两个父亲和两个孩子分三个苹果,每人都有一个,为什么?考察能力:代数思维、归纳与分类。
  4. 有个人带着包菜,羊,狼坐船,每次只能带一样东西,要怎么坐(狼会吃羊,羊会吃白菜)考察能力:逻辑推理、递归思维、约束条件下的最优解。
  5. 在桌子上用积木搭建一座塔,怎么样从地板上搭建一样塔高的塔呢?考察能力:空间思维、等量代换。
  6. 爸爸妈妈有三个儿子,每个儿子都有两个姐妹,这户人家有几个孩子呢?考察能力:逻辑推理、反直觉思维。

成年人在学习时常常希望有捷径,希望迅速掌握一门语言,一门技能,可以直接转化成个人能力,但孩子并不不是这样。人类幼崽比成年人愿意花时间去摸索玩耍,在反复验证中思考。读这篇的人里如果有为人父母的,想要给学龄前儿童培养一些数学思维的,我很推荐可以一边玩一边解的问题。比如:一块面包切三刀,最多可以切几片啊?然后你给他一片软面包,一把安全的小刀,他或许能玩一个小时。就像我刚才我提到的,他们或许会在某一天,想起多年前你问他的一个问题,然后告诉你:“我有答案了!”

而我不想说数学数学只是冷冰冰的抽象计算,它本来就来自于人类对世界的观察概括和归纳。我们大部分人都觉得这种能力来自于课堂,来自于做题,但有可能,它其实隐藏在一个电梯按钮的高度里,隐藏在桌子上的积木塔里,隐藏在我们对为什么 3 × 5 和 5 × 3 是一样的”的思考里。标准答案或许只是对规则的概括,但我们对世界的理解,或许超越规则本身。

我希望无论是否成为数学家,都有那么一些幼崽也好,成年人也好,会在每个瞬间,忽然理解某个问题,然后快乐地欢呼起来,只为这片刻的数学之美。

\"\"

最后展示一下一个四岁小孩的数学计算(他每天睡前都要求做一些)

', '2025-02-11 15:36:17', 0, 1, 1, NULL); +INSERT INTO `tb_topic` VALUES (1889341410696552450, '一些参观感受', '

年初去了安阳殷墟博物馆(新馆2024年开放)、郑州博物馆(新馆2021年开放)、长沙博物馆(2015年开放)、湖南博物院(新馆2017年开放),连同去年年底逛过的北京大运河博物馆,感受到了猫儒老师提过的一个词儿叫文博大X进。


共同的特点是占地极大,建筑大、广场大,内外空间留白都大,设计思路不像是给人民群众休闲和体验文化的场所,像皇帝陵,但皇帝坟头也有树啊,它们又都不种树。我觉得体力不太好的人得租轮椅参观,但内部无障碍设施也很差。


但节假日这些巨大的展馆真的会被装满。这时另一个现象就明显起来,即它们地方虽大,入口却很小。人为营造逆向桃花源,从远处看土地平旷、屋舍俨然,排队数百米,始得一巨屋,开一小侧门,仿佛若有光,内有安检机二,极狭,才通人。结合这些新馆巨大的体量和猎奇的造型(郑州和湖南新馆外形都像古代帝王的冠冕,长沙像一堆牛屎,殷墟像一个大盒),那队伍中的人显得非常渺小,极具蝼蚁感,仿佛X酸检测情景再现。

', '2025-02-11 15:51:50', 0, 1, 1, 1888931423629377538); +INSERT INTO `tb_topic` VALUES (1893843706562265089, '1', '

1

', '2025-02-24 10:01:39', 0, 1, 1, NULL); + +-- ---------------------------- +-- Table structure for tb_user +-- ---------------------------- +DROP TABLE IF EXISTS `tb_user`; +CREATE TABLE `tb_user` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `username` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '手机号', + `password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码', + `create_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + `nick_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '昵称', + `introduce` varchar(600) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '介绍', + `role` tinyint(1) NULL DEFAULT NULL COMMENT '性别', + `profile` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '头像', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1893836584118175698 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_user +-- ---------------------------- +INSERT INTO `tb_user` VALUES (1863920777825390593, '18796357645', '', '2025-03-24 01:40:42', '李静', '·11', 0, 'http://localhost:18081/81ecfb66-5f94-4997-8f2c-430b63415212.jpg'); +INSERT INTO `tb_user` VALUES (1893836584118173697, '123456', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', '2025-03-24 06:16:07', '区块霸总', '', 1, 'http://localhost:18081/81ecfb66-5f94-4997-8f2c-430b63415212.jpg'); +INSERT INTO `tb_user` VALUES (1893836584118174698, '76005929642', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', '2025-03-24 01:40:39', '毛致远', '', 1, 'http://localhost:18081/81ecfb66-5f94-4997-8f2c-430b63415212.jpg'); +INSERT INTO `tb_user` VALUES (1893836584118174806, '17024265121', 'LA9vxJIXrT', '2025-02-24 09:55:32', '夏岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175079, '18077837268', 'VJfD1mDgK1', '2025-02-24 09:55:32', '谭岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175080, '16993118716', '1oEbgFLF4V', '2025-02-24 09:55:32', '董晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175081, '19255839458', 'j83qleGTTP', '2025-02-24 09:55:32', '谢岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175082, '2198715981', 'NULlBHcc0l', '2025-02-24 09:55:32', '唐岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175083, '7603837030', '2CDe6HJYGL', '2025-02-24 09:55:32', '傅詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175084, '16833033086', 'Cl8B1bPwTd', '2025-02-24 09:55:32', '顾杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175085, '13523373513', '6GC0cLLWcq', '2025-02-24 09:55:32', '黎岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175086, '280324754', '9KewLMOCpm', '2025-02-24 09:55:32', '汪致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175087, '208955775', 'JU01ugq6fE', '2025-02-24 09:55:32', '余子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175088, '16565095028', '4H2a5IdJbs', '2025-02-24 09:55:32', '余詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175089, '18967023267', 'pC4ieQ8HvQ', '2025-02-24 09:55:32', '王云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175090, '18944454254', 'IaNIhxutkS', '2025-02-24 09:55:32', '宋子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175091, '7695552635', 'MePEmJYe4A', '2025-02-24 09:55:32', '武岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175092, '2005104524', 'i2sXJOD0sY', '2025-02-24 09:55:32', '傅子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175093, '1021661714', 'amXPMuhq2e', '2025-02-24 09:55:32', '林宇宁', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175094, '19575521379', 'R4ZkqdPtZ4', '2025-02-24 09:55:32', '贺詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175095, '17298916797', 'rFU1ZX7LHM', '2025-02-24 09:55:32', '侯璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175096, '2139691895', '4N2Hb4Fz1g', '2025-02-24 09:55:32', '汪子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175097, '2011582460', 'NABbDkNYWU', '2025-02-24 09:55:32', '顾宇宁', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175098, '14220741694', 'bTnkCJK0mF', '2025-02-24 09:55:32', '秦岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175099, '76962706529', 'KlWRFMdfrS', '2025-02-24 09:55:32', '韩晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175100, '15730695343', 'FJMbwMyXKx', '2025-02-24 09:55:32', '高云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175101, '16858721602', 'DkH1XYEMoh', '2025-02-24 09:55:32', '薛震南', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175102, '19554235203', 'poqdqQronS', '2025-02-24 09:55:32', '史詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175103, '2012202568', 'v2w4xlHw1G', '2025-02-24 09:55:32', '崔子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175104, '16633781825', 'MPHT5zYVmv', '2025-02-24 09:55:32', '许子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175105, '282946662', 'NVvyXNMxHy', '2025-02-24 09:55:32', '钟云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175106, '17524075986', 'z7uiSbrWVA', '2025-02-24 09:55:32', '郝嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175107, '15302714309', 'TP5LmvU2V6', '2025-02-24 09:55:32', '邓岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175108, '75575347425', 'rT9AakfHKD', '2025-02-24 09:55:32', '杜嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175109, '286148868', 's3Hy3OK5CM', '2025-02-24 09:55:32', '马晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175110, '286581420', 'IsLD41dFRP', '2025-02-24 09:55:32', '毛詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175111, '283464255', 'yok6y52nAx', '2025-02-24 09:55:32', '尹詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175112, '13319186219', 'irZe7K2ysY', '2025-02-24 09:55:32', '邹云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175113, '209463852', 'rUlRHsxYvN', '2025-02-24 09:55:32', '金宇宁', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175114, '13704139711', 'vJ1OYDMmn9', '2025-02-24 09:55:32', '侯岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175115, '15219164413', '7nFzzHQzls', '2025-02-24 09:55:32', '武詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175116, '76985804966', 'JBN8WushL8', '2025-02-24 09:55:32', '毛詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175117, '16345594607', '9kiGESL6o4', '2025-02-24 09:55:32', '雷秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175118, '76052729209', 'LHcFb9mF0I', '2025-02-24 09:55:32', '黎嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175119, '15250312254', 'mVJXD2wleK', '2025-02-24 09:55:32', '汤致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175120, '14083054273', 'ZDmeFhXfjk', '2025-02-24 09:55:32', '顾云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175121, '18424290783', 'c7JhQ7ynSk', '2025-02-24 09:55:32', '梁云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175122, '282101310', 'DLOB3cZO7V', '2025-02-24 09:55:32', '卢安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175123, '13425681771', 'XznVsY9x8g', '2025-02-24 09:55:32', '金子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175124, '18774052097', 'pPt3kh1WQW', '2025-02-24 09:55:32', '薛睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175125, '15527510597', '0hgk4PHcI4', '2025-02-24 09:55:32', '赵安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175126, '1086643185', '2b5Z519SkT', '2025-02-24 09:55:32', '江子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175127, '19997217361', 'MUXXfV8jld', '2025-02-24 09:55:32', '杨杰宏', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175128, '287367033', 'jNPZLDfOJD', '2025-02-24 09:55:32', '郝云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175129, '16848500984', 'QPlIeKswzw', '2025-02-24 09:55:32', '戴岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175130, '75585508252', 'xklLX8Pi4Z', '2025-02-24 09:55:32', '陆震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175131, '19369356562', 'DcVNccO3RV', '2025-02-24 09:55:32', '姚岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175132, '104066859', 'sw4QunRbo0', '2025-02-24 09:55:32', '唐詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175133, '1031396553', 'OSMJfmTYVy', '2025-02-24 09:55:32', '黄睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175134, '2080365064', 'zRdQlkN9DI', '2025-02-24 09:55:32', '方子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175135, '75537455946', 'tKzwLqt75O', '2025-02-24 09:55:32', '吕睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175136, '75533563144', 'FFd3L42djP', '2025-02-24 09:55:32', '常子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175137, '18540854137', 'YVnwMuk5ya', '2025-02-24 09:55:32', '陆安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175138, '14801055131', 'q4kNEf1EIz', '2025-02-24 09:55:32', '郑岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175139, '19819224454', 'sSfvzKsP4a', '2025-02-24 09:55:32', '史宇宁', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175140, '7697263744', 'FveuTd0gN1', '2025-02-24 09:55:32', '谢云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175141, '75522276752', '3DdQ4rlKXf', '2025-02-24 09:55:32', '任璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175142, '7605682387', 'OrdwEQ8Wa2', '2025-02-24 09:55:32', '方晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175143, '15539787008', 'VwRKDSbRGg', '2025-02-24 09:55:32', '彭晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175144, '7609423531', 'Hevqi7u096', '2025-02-24 09:55:32', '范詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175145, '17654250839', 'RrhzmxBQVf', '2025-02-24 09:55:32', '贾云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175146, '15131457156', '4gWcJMt4hP', '2025-02-24 09:55:32', '于秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175147, '7553722084', 'kI8s3rWLR6', '2025-02-24 09:55:32', '彭晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175148, '208938805', 'qX0Dqk92gi', '2025-02-24 09:55:32', '邹岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175149, '2838884202', 'K7m2a3WZCQ', '2025-02-24 09:55:32', '方秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175150, '17437681323', '5VoPPyGrLL', '2025-02-24 09:55:32', '陆致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175151, '17747470741', 'bJuTXdViJR', '2025-02-24 09:55:32', '萧睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175152, '2088307402', 'iq1BSGHUaQ', '2025-02-24 09:55:32', '黄致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175153, '13522644945', 'OmptB88Buo', '2025-02-24 09:55:32', '莫云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175154, '14195317825', 'sDiHXx3ytj', '2025-02-24 09:55:32', '杨岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175155, '16181344769', 'D9doskE6CM', '2025-02-24 09:55:32', '孟云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175156, '15109279115', 'dpSugpLKKW', '2025-02-24 09:55:32', '顾岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175157, '13920211490', 'wHWmG1cd3q', '2025-02-24 09:55:32', '邵岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175158, '18281332005', 'ZF4Gn0hzPq', '2025-02-24 09:55:32', '江子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175159, '19334648353', 'spAE644TH0', '2025-02-24 09:55:32', '田睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175160, '75569284475', '9YAWU8oBSM', '2025-02-24 09:55:32', '韦震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175161, '7559027296', 'CmUzw8Kraw', '2025-02-24 09:55:32', '董子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175162, '284390523', '8gdoABTLrc', '2025-02-24 09:55:32', '金致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175163, '15985984497', 'Ah60PTXsE5', '2025-02-24 09:55:32', '侯嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175164, '289569770', 'xR5BCmDFF9', '2025-02-24 09:55:32', '苏宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175165, '15243533098', 'f45EhQ7YIr', '2025-02-24 09:55:32', '丁震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175166, '14131485053', 'OyuGKY72X6', '2025-02-24 09:55:32', '傅秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175167, '1040731027', 'OownzDwtiX', '2025-02-24 09:55:32', '沈璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175168, '14832696220', 'Kyb5kFlsyN', '2025-02-24 09:55:32', '沈致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175169, '15679446665', 'Mk0QlUah43', '2025-02-24 09:55:32', '潘安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175170, '13774129962', 'GhojP6E7kf', '2025-02-24 09:55:32', '孟岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175171, '13354586845', 'EWx6IJ9MdA', '2025-02-24 09:55:32', '田致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175172, '7607383661', 'IguHYCjDR2', '2025-02-24 09:55:32', '常震南', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175173, '286751052', 'rwtMGCQTct', '2025-02-24 09:55:32', '汪嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175174, '101442574', '1ZK0BdsFN5', '2025-02-24 09:55:32', '傅子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175175, '15527406658', '2FnaEjDvbg', '2025-02-24 09:55:32', '郝致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175176, '14989184588', 'zrneamLTGS', '2025-02-24 09:55:32', '孔子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175177, '18030477274', 'T32ZyoEkZs', '2025-02-24 09:55:32', '邵子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175178, '283458495', 'ikIQfERVHO', '2025-02-24 09:55:32', '夏云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175179, '17928057324', 'AIs4JJqune', '2025-02-24 09:55:32', '姚杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175180, '17563519789', 'COHMgEeuxi', '2025-02-24 09:55:32', '熊杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175181, '109609191', 'OpDWOwkw5T', '2025-02-24 09:55:32', '黎詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175182, '13062440454', 'gGGZa1aX20', '2025-02-24 09:55:32', '张子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175183, '15882864174', 'Orqs1NHhel', '2025-02-24 09:55:32', '周杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175184, '75501355129', 'BpGTluJsbP', '2025-02-24 09:55:32', '梁岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175185, '14911124611', 'IEG3jnweOU', '2025-02-24 09:55:32', '谢杰宏', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175186, '7604174897', 'WJFt8rtOqD', '2025-02-24 09:55:32', '孟璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175187, '287667422', 'Nvww5yeTOG', '2025-02-24 09:55:32', '郭詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175188, '16135134540', 'sQyjKE2Hy6', '2025-02-24 09:55:32', '袁子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175189, '19200440757', 'f2dIHLoFf0', '2025-02-24 09:55:32', '崔云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175190, '17895422671', 'WPwR8HJptQ', '2025-02-24 09:55:32', '周璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175191, '2173134602', 'inNVbBsWkE', '2025-02-24 09:55:32', '郭致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175192, '14919362537', 'SMQKUEISVR', '2025-02-24 09:55:32', '高安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175193, '215881418', 'AuXhLmtMqe', '2025-02-24 09:55:32', '戴宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175194, '14013961468', 'VRcp8gET0u', '2025-02-24 09:55:32', '潘璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175195, '19481356747', 'VT0YCkIR1n', '2025-02-24 09:55:32', '赵秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175196, '7607591491', 'LqYDz0Erz7', '2025-02-24 09:55:32', '林宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175197, '7555933552', 'RGvUNCU5t6', '2025-02-24 09:55:32', '夏秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175198, '19268045984', 'w5N7hYIJ6l', '2025-02-24 09:55:32', '方璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175199, '19226498158', '4isFlmNl2q', '2025-02-24 09:55:32', '彭宇宁', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175200, '19073733694', 'vkSgI1x8Tr', '2025-02-24 09:55:32', '彭詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175201, '201545312', 'rhx3PerM9U', '2025-02-24 09:55:32', '韦秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175202, '2886609079', '2FDVOqBD1s', '2025-02-24 09:55:32', '黎岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175203, '15920852458', 'qKYpp0ZkOB', '2025-02-24 09:55:32', '杨安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175204, '15582122119', 'jucnseEd4O', '2025-02-24 09:55:32', '蒋震南', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175205, '13085238623', 'XNIB4CLSkj', '2025-02-24 09:55:32', '叶子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175206, '2023071082', 'mmUlvxf1wI', '2025-02-24 09:55:32', '杨云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175207, '13901868178', 'JXOGUMiOOL', '2025-02-24 09:55:32', '袁晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175208, '14997944532', 'oEp0o7cC5A', '2025-02-24 09:55:32', '吕睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175209, '7551658646', '0m4AohQHLf', '2025-02-24 09:55:32', '彭岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175210, '76098549178', 'IAhR31flEQ', '2025-02-24 09:55:32', '黎子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175211, '219230707', '580QjzX1Xp', '2025-02-24 09:55:32', '潘岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175212, '7608802964', 'XeLrBCEMYT', '2025-02-24 09:55:32', '邹震南', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175213, '76977313272', 'ZDvbUlk3qc', '2025-02-24 09:55:32', '吕晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175214, '13835660922', 'zgDWOIm0tj', '2025-02-24 09:55:32', '段嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175215, '18539840609', '4KeH5FFrzR', '2025-02-24 09:55:32', '于嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175216, '19684452724', 'y016JOu2yt', '2025-02-24 09:55:32', '冯安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175217, '2112219990', '1K8uInQQcw', '2025-02-24 09:55:32', '顾子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175218, '76907161049', 'KuxgGqhY6f', '2025-02-24 09:55:32', '高致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175219, '17876694913', 'LfX6UuNfNy', '2025-02-24 09:55:32', '谭子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175220, '2179262909', '1Yyw9sCvZT', '2025-02-24 09:55:32', '秦震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175221, '17611841181', 'pC2X4opV1l', '2025-02-24 09:55:32', '黄嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175222, '2833217700', 'gFSRBeyqV4', '2025-02-24 09:55:32', '郝致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175223, '15906870564', 'H4s5F396fJ', '2025-02-24 09:55:32', '崔杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175224, '2008330740', 'GLRjQRylsl', '2025-02-24 09:55:32', '孙子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175225, '207590619', 'ofFPxicXKC', '2025-02-24 09:55:32', '孙秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175226, '16790211408', 'JvExjTDptn', '2025-02-24 09:55:32', '江安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175227, '17684156940', 'Max8FhYdui', '2025-02-24 09:55:32', '莫晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175228, '14776292897', 'cG6gDHt2vr', '2025-02-24 09:55:32', '许宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175229, '1017137336', 'zrDB5K90WZ', '2025-02-24 09:55:32', '郭安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175230, '214547220', '8oPxb4Qkls', '2025-02-24 09:55:32', '汤詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175231, '13211662068', 'I2WiBjIT3g', '2025-02-24 09:55:32', '傅子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175232, '13123887039', '7t3YoiPlyJ', '2025-02-24 09:55:32', '朱云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175233, '14841861334', 'hRqBRZlQQP', '2025-02-24 09:55:32', '余秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175234, '17900348259', 'pfJPzU2xtt', '2025-02-24 09:55:32', '孔震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175235, '15124617867', 'G277QeINNE', '2025-02-24 09:55:32', '谭云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175236, '2088525746', 'dlstxwYNhJ', '2025-02-24 09:55:32', '孟子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175237, '217253692', 'PqqhNCsMhT', '2025-02-24 09:55:32', '叶岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175238, '13892129615', 'luDSSvyZL2', '2025-02-24 09:55:32', '范致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175239, '17015549469', 'pE6UPTzeLG', '2025-02-24 09:55:32', '潘晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175240, '19940908774', 'uEOrh9if0e', '2025-02-24 09:55:32', '王子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175241, '287882918', 'oi51Ic56Ko', '2025-02-24 09:55:32', '余岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175242, '13062339016', 'BCaLxcXeiI', '2025-02-24 09:55:32', '杨秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175243, '76999263186', 'nn2U9FcZqG', '2025-02-24 09:55:32', '曹嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175244, '216994907', 'pICPqdxEI7', '2025-02-24 09:55:32', '李安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175245, '16559220157', 'ElfVxDeFT6', '2025-02-24 09:55:32', '谭杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175246, '2039476689', '1LRmxyw30S', '2025-02-24 09:55:32', '赵嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175247, '15321899106', 'Yf6wOvZELE', '2025-02-24 09:55:32', '韦云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175248, '76048735868', 'PntyDXM1we', '2025-02-24 09:55:32', '唐詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175249, '7557018728', 'FP7ewzvIuJ', '2025-02-24 09:55:32', '薛詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175250, '16958841264', 'hRLUPpFXvt', '2025-02-24 09:55:32', '黎璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175251, '15709503576', 'eJx5mdK5xK', '2025-02-24 09:55:32', '汤云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175252, '1047967422', 'Ty8OYP6w1V', '2025-02-24 09:55:32', '彭秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175253, '13671448090', 'PnDoiPpvrm', '2025-02-24 09:55:32', '萧子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175254, '13647735571', 'CAqip9ub4e', '2025-02-24 09:55:32', '韦子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175255, '13326189770', 'nIusiwdgau', '2025-02-24 09:55:32', '黄子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175256, '107221180', 'B2lhZA3Z7f', '2025-02-24 09:55:32', '莫安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175257, '75504747729', 'tADljl9n49', '2025-02-24 09:55:32', '赵子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175258, '75593636856', 'QRhgFzdpuE', '2025-02-24 09:55:32', '黎嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175259, '76962939027', 'KM0W9ayRAz', '2025-02-24 09:55:32', '谭杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175260, '13014541732', 'Tvy81TxfOP', '2025-02-24 09:55:32', '陈杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175261, '283775539', '9XS8vK60B9', '2025-02-24 09:55:32', '郝云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175262, '2873712038', 'OfK8MSUczG', '2025-02-24 09:55:32', '黎安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175263, '210975235', '5MiIChAuX8', '2025-02-24 09:55:32', '郭嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175264, '76911505559', 'P34sF9C4ty', '2025-02-24 09:55:32', '周嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175265, '17502362647', 'MYbUM3vmEK', '2025-02-24 09:55:32', '沈晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175266, '15215552079', 'cKXSlUOLs8', '2025-02-24 09:55:32', '钟秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175267, '1078180229', 'vopTYmilHl', '2025-02-24 09:55:32', '秦嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175268, '214494574', '5uG8nPZ8Pu', '2025-02-24 09:55:32', '傅宇宁', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175269, '2136748303', '5iOKhSYjTr', '2025-02-24 09:55:32', '龚晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175270, '15822543786', 'DfWDZvCno3', '2025-02-24 09:55:32', '邱云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175271, '215429825', 'Ud7Biu28pg', '2025-02-24 09:55:32', '蔡宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175272, '18036521535', 'ftAVp2vPOR', '2025-02-24 09:55:32', '蔡云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175273, '14580417271', 'i3JAZ95kPV', '2025-02-24 09:55:32', '韩子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175274, '13295202268', 'iUHpPMMWsF', '2025-02-24 09:55:32', '董子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175275, '2841295695', 'S1AuaF7i8K', '2025-02-24 09:55:32', '程璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175276, '14190540753', 'q5IUFhgDkp', '2025-02-24 09:55:32', '于詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175277, '2871530161', 'hA8eDmgByO', '2025-02-24 09:55:32', '陈岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175278, '13987760554', 'yEBdB1FFF0', '2025-02-24 09:55:32', '王嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175279, '17900415438', 'nBtDdN8rfJ', '2025-02-24 09:55:32', '姚晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175280, '2133860486', 'GyWnqNTqeK', '2025-02-24 09:55:32', '郭宇宁', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175281, '16095363516', 'SHWYlmP3cF', '2025-02-24 09:55:32', '程晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175282, '1038848397', 'FPl2VjT7tC', '2025-02-24 09:55:32', '吕宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175283, '19213509906', 'J8lKInjwH9', '2025-02-24 09:55:32', '蔡云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175284, '16881411519', '7uV2IeBiW1', '2025-02-24 09:55:32', '杜震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175285, '16252766668', '2sttCEv5bJ', '2025-02-24 09:55:32', '段秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175286, '211445098', '8PbOpksKOs', '2025-02-24 09:55:32', '范嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175287, '2188000186', 'NLa0g5FxKu', '2025-02-24 09:55:32', '江璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175288, '7608854144', 'zuE1cG1UPh', '2025-02-24 09:55:32', '高震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175289, '16339432182', 'TtAlRz4JvJ', '2025-02-24 09:55:32', '雷致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175290, '204987043', 'ZanNq8KEvE', '2025-02-24 09:55:32', '贾嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175291, '215326029', 'JCyXVpv4qB', '2025-02-24 09:55:32', '丁璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175292, '18093404589', 'oLq55RyaAy', '2025-02-24 09:55:32', '林睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175293, '100378875', 'cQNmUS8ZAx', '2025-02-24 09:55:32', '韦震南', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175294, '2860579823', 'GYCRWfvDpM', '2025-02-24 09:55:32', '杨安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175295, '210941495', 'M1q69Q3V7F', '2025-02-24 09:55:32', '田睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175296, '2052557960', 'Zy88EfGzOe', '2025-02-24 09:55:32', '曾璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175297, '2170299177', '8QRvxXwICe', '2025-02-24 09:55:32', '范子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175298, '200845953', '3fckpqtA6W', '2025-02-24 09:55:32', '何璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175299, '19391000305', 'u2v87Ga1dg', '2025-02-24 09:55:32', '廖安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175300, '16332567079', '8d2T8cUo9d', '2025-02-24 09:55:32', '段云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175301, '7690711097', 'ftHrxgqShs', '2025-02-24 09:55:32', '程安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175302, '13600200955', 'V0PFirMpLv', '2025-02-24 09:55:32', '卢睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175303, '2108103872', 'eXWnHGZjin', '2025-02-24 09:55:32', '杜安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175304, '2056927098', 'IaVGq645SO', '2025-02-24 09:55:32', '韩睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175305, '19322263704', 'vQ4rjKmq7b', '2025-02-24 09:55:32', '曾子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175306, '19778317484', 'j5dvdZNlpL', '2025-02-24 09:55:32', '胡子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175307, '16957069300', 'YUmIVRprJs', '2025-02-24 09:55:32', '叶致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175308, '16598402750', '8a3rNw2BKb', '2025-02-24 09:55:32', '傅安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175309, '7699605115', 'agCmn1pN8M', '2025-02-24 09:55:32', '金子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175310, '214946984', 'wsnfSaetUr', '2025-02-24 09:55:32', '高安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175311, '7604504963', 'JiEGPLq8Qk', '2025-02-24 09:55:32', '卢云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175312, '13631177385', 'DywWPxPxJx', '2025-02-24 09:55:32', '王震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175313, '18394855365', '7Uv7qzCW5S', '2025-02-24 09:55:32', '彭子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175314, '7693887891', 'tDHLI2vAGy', '2025-02-24 09:55:32', '潘秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175315, '13131077871', 'xNdqWpPmxC', '2025-02-24 09:55:32', '董子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175316, '19312775216', '2VUYo31X96', '2025-02-24 09:55:32', '熊致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175317, '14313521667', 'XB1HH3NODa', '2025-02-24 09:55:32', '张璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175318, '2124825736', 'k0Kd0QT7ti', '2025-02-24 09:55:32', '郝秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175319, '17689135011', 'McLp577ugt', '2025-02-24 09:55:32', '郝杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175320, '17422454994', 'OyiVSZOgof', '2025-02-24 09:55:32', '范岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175321, '7692426435', 'I7hANC5yOf', '2025-02-24 09:55:32', '吕睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175322, '17957710265', 'LbKpakPTLP', '2025-02-24 09:55:32', '潘子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175323, '75569858044', '8uW6Ue2Puu', '2025-02-24 09:55:32', '钟云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175324, '18950975307', 'Hh1PK2Dawx', '2025-02-24 09:55:32', '朱宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175325, '100637749', 'GeUu7LMUSF', '2025-02-24 09:55:32', '蒋秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175326, '1057427384', '0WV0utLD0P', '2025-02-24 09:55:32', '徐嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175327, '13059483832', 'b8mwojxmgP', '2025-02-24 09:55:32', '沈子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175328, '15018201532', 'jIGaaRohxZ', '2025-02-24 09:55:32', '谭宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175329, '289697440', 'X3WP7mV0a7', '2025-02-24 09:55:32', '王晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175330, '75594311430', 'sfGvvEqGZM', '2025-02-24 09:55:32', '邓岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175331, '17694490099', 'bmAH49nl46', '2025-02-24 09:55:32', '韦子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175332, '17287384707', 'tLpZh62QoJ', '2025-02-24 09:55:32', '黎云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175333, '2135089429', 'qVhvlS6snH', '2025-02-24 09:55:32', '蔡岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175334, '13166952875', '7s2ASI0mgB', '2025-02-24 09:55:32', '唐睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175335, '13564170927', 'Kran9xvd6z', '2025-02-24 09:55:32', '许云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175336, '213807942', 'lvfN44R9HR', '2025-02-24 09:55:32', '傅詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175337, '17986534824', 'P8sQf3edD1', '2025-02-24 09:55:32', '钱秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175338, '16412404849', 'QVPwHPGZyU', '2025-02-24 09:55:32', '邹云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175339, '2034131028', 'Na76UpyWsf', '2025-02-24 09:55:32', '蔡子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175340, '14364040345', 'BMZATtAjQb', '2025-02-24 09:55:32', '潘致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175341, '19178056079', 'e0Uqm8DBDI', '2025-02-24 09:55:32', '陆璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175342, '14717430819', 'ClvWUhSvq7', '2025-02-24 09:55:32', '陈震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175343, '288916979', '6WEcKO14at', '2025-02-24 09:55:32', '邱岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175344, '13441799621', 'UPhTSzCqNO', '2025-02-24 09:55:32', '金岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175345, '19960875772', 'TnDxPHy9uC', '2025-02-24 09:55:32', '彭震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175346, '19045724501', 'Rq7pJyEfy0', '2025-02-24 09:55:32', '高嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175347, '17999547858', 'FeI1MJtJGK', '2025-02-24 09:55:32', '唐璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175348, '1065535011', 'liuU3cCHvK', '2025-02-24 09:55:32', '莫致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175349, '2862370705', 'wRYd3NxdBF', '2025-02-24 09:55:32', '叶宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175350, '15848528621', 'Z5ilA8j3Y2', '2025-02-24 09:55:32', '夏安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175351, '280672236', 'LCTbOgOaw5', '2025-02-24 09:55:32', '宋安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175352, '2193067149', '7EF7PbPd0e', '2025-02-24 09:55:32', '余晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175353, '16283083855', 'FsV4p2nCPK', '2025-02-24 09:55:32', '钱嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175354, '2018488977', 'LtEBILTGkV', '2025-02-24 09:55:32', '严詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175355, '13421487544', 'e3Lw8KeIvf', '2025-02-24 09:55:32', '刘詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175356, '15803957618', 'LlHUkOz8uB', '2025-02-24 09:55:32', '李安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175357, '2059276116', 'Kav9yXnYQm', '2025-02-24 09:55:32', '侯安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175358, '14166592569', '2q8gC5xOjO', '2025-02-24 09:55:32', '唐嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175359, '17778910850', 'KgOCC8J1OW', '2025-02-24 09:55:32', '周云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175360, '19475541964', 'b1wXNBI84J', '2025-02-24 09:55:32', '冯睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175361, '2888376553', 'd9Zu9tx68D', '2025-02-24 09:55:32', '任宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175362, '15757190143', 'p93RwizrD2', '2025-02-24 09:55:32', '谢詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175363, '283191377', 'RRe1e2N6a1', '2025-02-24 09:55:32', '蔡云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175364, '201729586', 'DUko7dGVT4', '2025-02-24 09:55:32', '夏睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175365, '1019243637', '7OJ4d7vtOS', '2025-02-24 09:55:32', '赵睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175366, '75535831672', 'PcsK3rN1aX', '2025-02-24 09:55:32', '钟詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175367, '76029016304', 'JiKts7VEnI', '2025-02-24 09:55:32', '阎睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175368, '17594483544', 'aWun4Xwl6S', '2025-02-24 09:55:32', '彭震南', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175369, '2158206284', 'Qa2oCqcyF7', '2025-02-24 09:55:32', '徐晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175370, '17135540403', 'Skj9w1al65', '2025-02-24 09:55:32', '谢詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175371, '219629470', '944YXMw8vd', '2025-02-24 09:55:32', '萧子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175372, '7600340164', '7XOTrOn9hd', '2025-02-24 09:55:32', '周睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175373, '15940015595', 'fnSu6UirBB', '2025-02-24 09:55:32', '顾詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175374, '282731568', 'WMHdGGjvYB', '2025-02-24 09:55:32', '顾睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175375, '19349462465', '5aADeTZpED', '2025-02-24 09:55:32', '段杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175376, '17328925436', 'ugfZgZQek3', '2025-02-24 09:55:32', '邱杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175377, '16231536787', 'YWp2BPquoX', '2025-02-24 09:55:32', '廖震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175378, '18376226934', 'LjOLpaal5q', '2025-02-24 09:55:32', '雷詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175379, '75537885686', 'eroBnIld4M', '2025-02-24 09:55:32', '顾致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175380, '18064425936', '7XYrVehiGK', '2025-02-24 09:55:32', '孟杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175381, '16901944906', 'upLi5BiOQq', '2025-02-24 09:55:32', '梁嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175382, '288235264', 'AQMCKyKfZ7', '2025-02-24 09:55:32', '邓安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175383, '15595353312', 'VoneHNwNw8', '2025-02-24 09:55:32', '孙璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175384, '18621983558', 'aJDk5ZiSAZ', '2025-02-24 09:55:32', '崔嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175385, '16348252890', 'Zt4oHevDpN', '2025-02-24 09:55:32', '金秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175386, '19848900482', 'WCRfa8tFWx', '2025-02-24 09:55:32', '尹子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175387, '14704101913', 'OVNcKpinGn', '2025-02-24 09:55:32', '沈宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175388, '7551084999', 'vaW95z7moe', '2025-02-24 09:55:32', '郝秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175389, '76020043269', 'AeicIx2Oqz', '2025-02-24 09:55:32', '冯岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175390, '75578641489', 'oRcx9ao03V', '2025-02-24 09:55:32', '孟安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175391, '14346715588', 'OFUotDikot', '2025-02-24 09:55:32', '熊晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175392, '14472298395', 'rueQ2Y8oDs', '2025-02-24 09:55:32', '雷秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175393, '2892363302', 'T5bknrDaGT', '2025-02-24 09:55:32', '卢震南', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175394, '16807692768', 'DRazq0E5iX', '2025-02-24 09:55:32', '雷震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175395, '19418747132', 'bf34x8AzDs', '2025-02-24 09:55:32', '孔云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175396, '13332000321', 'OHyByomNSx', '2025-02-24 09:55:32', '苏秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175397, '19369462058', 'N0LCIiPvBB', '2025-02-24 09:55:32', '钟睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175398, '103688595', '4l4oKxSgWs', '2025-02-24 09:55:32', '冯睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175399, '7604072240', 'jfCZRfXFDR', '2025-02-24 09:55:32', '朱云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175400, '75595099262', 'Z33lKRNfeH', '2025-02-24 09:55:32', '任杰宏', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175401, '102628293', '5YOXLCRPIR', '2025-02-24 09:55:32', '唐岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175402, '17924779243', 'MemDwCHBSr', '2025-02-24 09:55:32', '陆杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175403, '7556720398', 'ydXE6CkvwC', '2025-02-24 09:55:32', '李秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175404, '16318685316', 'DKqcjowOLP', '2025-02-24 09:55:32', '蔡杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175405, '14501715644', 'IxfFieeXt7', '2025-02-24 09:55:32', '傅晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175406, '283503849', 'VgJoPWi9tz', '2025-02-24 09:55:32', '田璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175407, '7606029166', 'zudQoMbnBn', '2025-02-24 09:55:32', '刘云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175408, '215622349', 'K2qGPdO50G', '2025-02-24 09:55:32', '邹致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175409, '202383303', 'AT2UFnWcWI', '2025-02-24 09:55:32', '汪晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175410, '18347753397', '5fdmqRrgqc', '2025-02-24 09:55:32', '朱璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175411, '14909517007', 'NEioxu2OMZ', '2025-02-24 09:55:32', '陈嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175412, '14143092644', 'kRTo95yfCE', '2025-02-24 09:55:32', '莫子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175413, '7556520858', 'f17Dww3ggd', '2025-02-24 09:55:32', '曾晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175414, '18604120512', '7pwCmXfxWp', '2025-02-24 09:55:32', '薛晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175415, '15228940329', 'zCHBJBf4Ga', '2025-02-24 09:55:32', '向晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175416, '15903250870', 'CdK7tvAtY0', '2025-02-24 09:55:32', '杜云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175417, '7694989927', '57HD6RSHXK', '2025-02-24 09:55:32', '杜安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175418, '219364599', 'oex4jVVUot', '2025-02-24 09:55:32', '蔡云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175419, '17431510766', '3Irb9DR03o', '2025-02-24 09:55:32', '张云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175420, '202121841', 'RFZQAZPqVT', '2025-02-24 09:55:32', '武秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175421, '14948281626', 'Gikgv3dDsX', '2025-02-24 09:55:32', '汤秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175422, '1032805054', 'SS9V4YpUGf', '2025-02-24 09:55:32', '杨岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175423, '1043834399', 'GpAsYm4akY', '2025-02-24 09:55:32', '梁詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175424, '17382199777', 'EvY6KmkeVo', '2025-02-24 09:55:32', '范岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175425, '16750195453', 'gwYCLXRrac', '2025-02-24 09:55:32', '冯宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175426, '76037780269', 'oYJsT339Mu', '2025-02-24 09:55:32', '彭璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175427, '19415446636', 'vD2Cdhz3DG', '2025-02-24 09:55:32', '蒋岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175428, '18036112261', 'hOm5Bk94zN', '2025-02-24 09:55:32', '潘震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175429, '19299185522', 'uOZQgHrvmr', '2025-02-24 09:55:32', '郭詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175430, '215555641', 'EmXbX5Lys0', '2025-02-24 09:55:32', '蔡嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175431, '13160478661', '3NEzFe9XSA', '2025-02-24 09:55:32', '王杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175432, '19305352659', 'MMCTmk54Yj', '2025-02-24 09:55:32', '袁岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175433, '13091261914', '3atZml15CR', '2025-02-24 09:55:32', '韦子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175434, '17559105834', 'c0K42Rjwp8', '2025-02-24 09:55:32', '侯子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175435, '210449426', 'RX0XS2L5Gs', '2025-02-24 09:55:32', '范嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175436, '7608314454', 'uebYIYhuZL', '2025-02-24 09:55:32', '常震南', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175437, '19294585720', 'AzAag1oqRA', '2025-02-24 09:55:32', '郑詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175438, '1068914631', 'ncc4Vx2IlT', '2025-02-24 09:55:32', '贺云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175439, '19503335661', 'H7jCsNovyd', '2025-02-24 09:55:32', '江睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175440, '2822728206', 'FYwcXmeC40', '2025-02-24 09:55:32', '董安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175441, '15360515913', 'j9SLLFtYMF', '2025-02-24 09:55:32', '金致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175442, '2043723194', 'AJq0Z6B1wj', '2025-02-24 09:55:32', '姚安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175443, '17522164061', 'NXA5FGrz4O', '2025-02-24 09:55:32', '萧嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175444, '17949495216', 'M3vWODvmhw', '2025-02-24 09:55:32', '赵詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175445, '2075822255', 'mT5cBe0f3m', '2025-02-24 09:55:32', '赵晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175446, '18899834492', 'FDQhIJguVb', '2025-02-24 09:55:32', '王岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175447, '2102066593', 'QdjTH5LF0E', '2025-02-24 09:55:32', '韦安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175448, '17480269547', 'co3NZralFZ', '2025-02-24 09:55:32', '谢睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175449, '18765690132', 'Hr1p2La0Jh', '2025-02-24 09:55:32', '杨子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175450, '14492747156', '46rhV4XMU6', '2025-02-24 09:55:32', '傅晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175451, '1086341034', 'vutBx8e4VH', '2025-02-24 09:55:32', '贺詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175452, '76038623194', 'nmU3SDErNY', '2025-02-24 09:55:32', '廖睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175453, '17893494379', 'WoMfZTLfgj', '2025-02-24 09:55:32', '陶睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175454, '75522179618', '73UTZ8Glmu', '2025-02-24 09:55:32', '钟子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175455, '19289926153', 'xWNGcd0zOt', '2025-02-24 09:55:32', '邱云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175456, '17248398489', 'vKc0NgCkw2', '2025-02-24 09:55:32', '阎子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175457, '14645277081', 'P5aAaAmQla', '2025-02-24 09:55:32', '韩震南', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175458, '214730476', '9UOWPYRDMc', '2025-02-24 09:55:32', '赵璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175459, '7695631763', 'NH1S0rYwlw', '2025-02-24 09:55:32', '汤睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175460, '19866767198', '7OV4k0f6IG', '2025-02-24 09:55:32', '钱璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175461, '7603925445', 'lFl2GyoMBC', '2025-02-24 09:55:32', '刘詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175462, '19605567255', 'kGgvwLfFeE', '2025-02-24 09:55:32', '向致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175463, '7604139372', 'JcDcbCax8H', '2025-02-24 09:55:32', '韩宇宁', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175464, '13772211504', 'qlaweQIMsw', '2025-02-24 09:55:32', '熊晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175465, '19548063195', 'EY52F00k7m', '2025-02-24 09:55:32', '李嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175466, '15773845614', 'Yl4NotCJfb', '2025-02-24 09:55:32', '高子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175467, '76961624591', 'KB86t4r4Ns', '2025-02-24 09:55:32', '钟致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175468, '75564425415', 'lrmoclKQpQ', '2025-02-24 09:55:32', '余睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175469, '17232841400', 'UN4u0xeFJS', '2025-02-24 09:55:32', '陆岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175470, '14925931302', '07gc4JRuW2', '2025-02-24 09:55:32', '罗震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175471, '19410148121', '5pzV4DlfPb', '2025-02-24 09:55:32', '熊宇宁', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175472, '14166055420', 'zjEGlMPyyn', '2025-02-24 09:55:32', '曹睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175473, '202248626', 'ZZYZK8JPqs', '2025-02-24 09:55:32', '黄子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175474, '17095433374', 'hEedLrGLUi', '2025-02-24 09:55:32', '傅睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175475, '2824415275', 'TrZwsGAa86', '2025-02-24 09:55:32', '郭致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175476, '16386926127', 'aWYbBqjtw2', '2025-02-24 09:55:32', '贾晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175477, '2174465934', '9yK833zGPH', '2025-02-24 09:55:32', '任秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175478, '2842517826', 'X8lYSclQs2', '2025-02-24 09:55:32', '郭震南', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175479, '16380229904', '4QhqTbFMD6', '2025-02-24 09:55:32', '魏致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175480, '15872160332', 'UBurCrm2wE', '2025-02-24 09:55:32', '梁致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175481, '14020431741', '63ank2nAxR', '2025-02-24 09:55:32', '熊子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175482, '14500740864', 'UBt7SX1Nif', '2025-02-24 09:55:32', '汪宇宁', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175483, '203876803', 'ww8qDkCxSd', '2025-02-24 09:55:32', '李睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175484, '17307848084', 'EVfkxeu0ed', '2025-02-24 09:55:32', '夏晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175485, '2194117382', 'Bu6nJVJPYQ', '2025-02-24 09:55:32', '姚云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175486, '19310810677', 'FLdpmbk76F', '2025-02-24 09:55:32', '赵云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175487, '204147088', 'suixDho4v4', '2025-02-24 09:55:32', '钟云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175488, '2125827959', 'MDbFRpTnfG', '2025-02-24 09:55:32', '吴子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175489, '7554151897', 'brSzorom6p', '2025-02-24 09:55:32', '马秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175490, '15996799657', 'fKUVCgExJy', '2025-02-24 09:55:32', '秦安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175491, '17590038872', 'eHTC6Mt4SP', '2025-02-24 09:55:32', '徐詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175492, '75599032083', 'UXOPNrrOsh', '2025-02-24 09:55:32', '于云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175493, '75572456720', 'v4iIHb52Ei', '2025-02-24 09:55:32', '武宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175494, '13171015780', 'H2oi44uGwO', '2025-02-24 09:55:32', '吴子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175495, '7695166994', 'gYugAupCYH', '2025-02-24 09:55:32', '武岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175496, '2837182487', '0vKcHchB2Y', '2025-02-24 09:55:32', '陶睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175497, '7550351590', 'i1jPtuHOZj', '2025-02-24 09:55:32', '苏致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175498, '7602755224', 'wx66arXqc9', '2025-02-24 09:55:32', '邹安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175499, '18619230846', 'PgnJte8eQd', '2025-02-24 09:55:32', '徐嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175500, '13302021818', 'W2SDAuLqRh', '2025-02-24 09:55:32', '邱致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175501, '103510844', 'xturZ285al', '2025-02-24 09:55:32', '彭晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175502, '15913189123', 'MCb0J90or0', '2025-02-24 09:55:32', '萧璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175503, '287619464', 'lGofUSHGrT', '2025-02-24 09:55:32', '王云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175504, '16738387953', 'Tt7zuCancy', '2025-02-24 09:55:32', '陶秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175505, '13927848169', 'SfVy2LtDkR', '2025-02-24 09:55:32', '林震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175506, '2028165684', 'CrkBgsViZL', '2025-02-24 09:55:32', '胡子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175507, '2842015138', 'ohJ9lF06it', '2025-02-24 09:55:32', '钱詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175508, '15477973328', 'yK6PFqkzyf', '2025-02-24 09:55:32', '谭璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175509, '15253823328', '4RbF8qY6sc', '2025-02-24 09:55:32', '陆岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175510, '76052117877', 'wuVMq5zvK2', '2025-02-24 09:55:32', '姚安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175511, '75517448999', 'xWwvugAn48', '2025-02-24 09:55:32', '任子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175512, '289026271', 'FPEPDAxe0t', '2025-02-24 09:55:32', '龚子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175513, '2196140412', '8SXdFUED1z', '2025-02-24 09:55:32', '唐致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175514, '17063414930', 'EyIF0xuJWC', '2025-02-24 09:55:32', '贾詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175515, '102675544', '1BDb8VsMzB', '2025-02-24 09:55:32', '蔡云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175516, '15668627665', '6NuIDB7bJa', '2025-02-24 09:55:32', '魏嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175517, '16253453290', '1tYMOpfPRp', '2025-02-24 09:55:32', '袁安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175518, '18440922839', 'ubuFUipxm0', '2025-02-24 09:55:32', '廖岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175519, '15765016048', 'adqXTjfUeu', '2025-02-24 09:55:32', '傅云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175520, '76000267688', 'Nd57Urv7gf', '2025-02-24 09:55:32', '方嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175521, '2101833516', 'YXoT4OWt5d', '2025-02-24 09:55:32', '杨璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175522, '7603739536', 'rx4bO6VhmK', '2025-02-24 09:55:32', '廖嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175523, '102522529', 'WiEkHBbPno', '2025-02-24 09:55:32', '苏致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175524, '2116697198', 'tY47FronfW', '2025-02-24 09:55:32', '邓岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175525, '219404309', 'q9RTjaxeB8', '2025-02-24 09:55:32', '彭子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175526, '108397052', '45F3g5ZtCh', '2025-02-24 09:55:32', '梁震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175527, '7558989094', 'AnZAfs7sTH', '2025-02-24 09:55:32', '江子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175528, '17924249643', '7Mop2JQoNk', '2025-02-24 09:55:32', '丁致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175529, '281646138', 'G8MEaQog62', '2025-02-24 09:55:32', '许璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175530, '16378365609', 'j9U7tKh707', '2025-02-24 09:55:32', '范璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175531, '13676842017', 'vjOAMymKYh', '2025-02-24 09:55:32', '尹子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175532, '16933788864', 'YjwcSQ267J', '2025-02-24 09:55:32', '武詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175533, '100001804', 'PejEt0nJMc', '2025-02-24 09:55:32', '方岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175534, '107788817', 'lQAyRpIUF6', '2025-02-24 09:55:32', '周杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175535, '76991225227', 'vKrcUvsl8i', '2025-02-24 09:55:32', '杨致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175536, '2056381203', 'Lf0G6NM4HT', '2025-02-24 09:55:32', '任睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175537, '18199140814', '54Po3Y2GaE', '2025-02-24 09:55:32', '宋睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175538, '14469323890', 'MwuqUeVeXp', '2025-02-24 09:55:32', '石璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175539, '13466449000', 'JPj8eMHWpY', '2025-02-24 09:55:32', '钱致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175540, '14904066375', 'jOsHSwFY1f', '2025-02-24 09:55:32', '潘秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175541, '19452933436', 'bNNKMEoshC', '2025-02-24 09:55:32', '吕震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175542, '18015602305', 'aFGp93qArN', '2025-02-24 09:55:32', '吴子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175543, '2860822673', '5cL5WZrwZ6', '2025-02-24 09:55:32', '孟致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175544, '2147136611', 'XtT1JlbAg4', '2025-02-24 09:55:32', '李杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175545, '2189595745', 'UIFSE9wq41', '2025-02-24 09:55:32', '夏云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175546, '76991319782', 'yWo9oHDyEb', '2025-02-24 09:55:32', '梁璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175547, '2041862584', 'fIaLcKQMfb', '2025-02-24 09:55:32', '史子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175548, '207012404', 'f2tHNfGFXg', '2025-02-24 09:55:32', '任睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175549, '286771022', 'Sqk1PFaeSp', '2025-02-24 09:55:32', '钟睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175550, '16569565939', 'LtvvIDZFNo', '2025-02-24 09:55:32', '何嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175551, '101871576', 'AgMSmurK0R', '2025-02-24 09:55:32', '田詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175552, '75575411219', 'wYQXAMMCGP', '2025-02-24 09:55:32', '陆致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175553, '19357839118', '0XScUbcKIG', '2025-02-24 09:55:32', '严睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175554, '18924956610', 'KE6q5NhO6e', '2025-02-24 09:55:32', '于詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175555, '108418587', '4r4CIwod1c', '2025-02-24 09:55:32', '崔子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175556, '13326320549', 'uf4lj3JYRk', '2025-02-24 09:55:32', '雷子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175557, '13950973129', 'iEhGVxc14G', '2025-02-24 09:55:32', '邱璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175558, '2826713157', 'JTr4AVfEyf', '2025-02-24 09:55:32', '方子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175559, '18864907904', 'IKq3leCHnw', '2025-02-24 09:55:32', '尹致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175560, '2120253959', 'kirSkKpvMs', '2025-02-24 09:55:32', '邹岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175561, '1069083438', 'xVPGvGS6bY', '2025-02-24 09:55:32', '唐睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175562, '19035627505', 'qhIraq8Tzl', '2025-02-24 09:55:32', '戴子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175563, '16611513838', 'MN9ioj3cgB', '2025-02-24 09:55:32', '曹云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175564, '17676918427', 'w7UnfZES9t', '2025-02-24 09:55:32', '龙震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175565, '18016389810', 'lAM792bo94', '2025-02-24 09:55:32', '彭子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175566, '18206146288', 'IxDs8xjMXQ', '2025-02-24 09:55:32', '崔秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175567, '76009297604', 'GAbBvMfTVA', '2025-02-24 09:55:32', '邓安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175568, '17938622488', 'iA5sS7OUPA', '2025-02-24 09:55:32', '郭致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175569, '108464084', 'O9Yhxjiyaz', '2025-02-24 09:55:32', '钱致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175570, '106620402', 'u0c97BF8Z1', '2025-02-24 09:55:32', '董秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175571, '16245454436', 'G8PCoDM7hf', '2025-02-24 09:55:32', '黎云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175572, '16689102630', 'oZwygGEOEd', '2025-02-24 09:55:32', '朱安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175573, '76982352988', 'T5i2OOGq4Q', '2025-02-24 09:55:32', '于晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175574, '7600973316', 'FggSvZqO0P', '2025-02-24 09:55:32', '邓詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175575, '1064293641', 'OTpuDkf8W5', '2025-02-24 09:55:32', '方子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175576, '17724351837', 'kRhxn0FgI0', '2025-02-24 09:55:32', '孔致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175577, '14399516755', 'VsndrmCYOp', '2025-02-24 09:55:32', '钟安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175578, '2008919704', 'cSrsjlvTAy', '2025-02-24 09:55:32', '朱震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175579, '100782489', 'ThdtSRG013', '2025-02-24 09:55:32', '范致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175580, '101493555', 'USX2K8wT3b', '2025-02-24 09:55:32', '吴岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175581, '76991708385', 'QCfW9lROSi', '2025-02-24 09:55:32', '林宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175582, '76097940916', 'JsmudVD8TZ', '2025-02-24 09:55:32', '蒋子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175583, '7559959237', 'ARvWLFVv4y', '2025-02-24 09:55:32', '钱宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175584, '15954467957', 'cScrJiJJOQ', '2025-02-24 09:55:32', '贾秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175585, '2112947509', 'djcpfrfbqN', '2025-02-24 09:55:32', '龙震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175586, '205987095', 'UsCXZpt1dd', '2025-02-24 09:55:32', '高秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175587, '16952259719', 's5vhamTitP', '2025-02-24 09:55:32', '罗安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175588, '15092794057', 'rvplnJh4Rs', '2025-02-24 09:55:32', '郑岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175589, '7553247214', 'd9A5jSBa4E', '2025-02-24 09:55:32', '侯璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175590, '14174692843', '3h3Uxsh6bY', '2025-02-24 09:55:32', '冯杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175591, '106497723', 'qnMYvIx0fC', '2025-02-24 09:55:32', '萧睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175592, '7553963789', '2iJJH27kFw', '2025-02-24 09:55:32', '严云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175593, '210551251', 'u7yQb49PZO', '2025-02-24 09:55:32', '潘宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175594, '217063768', '2rxPCSTrUk', '2025-02-24 09:55:32', '刘嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175595, '17157182527', 'd2LOSA2T2i', '2025-02-24 09:55:32', '王子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175596, '1051541684', 'fLyzAr3lYh', '2025-02-24 09:55:32', '谢岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175597, '7601841771', 'Z5cs4kAMYk', '2025-02-24 09:55:32', '苏岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175598, '18604032343', 'zp3PkMvr5C', '2025-02-24 09:55:32', '龙岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175599, '2092322807', 'K5eKq9mXpV', '2025-02-24 09:55:32', '何杰宏', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175600, '2136265908', 'a7gjuk9LQx', '2025-02-24 09:55:32', '杜宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175601, '17461171761', 'jQR6MFvVGS', '2025-02-24 09:55:32', '潘晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175602, '7604305394', 'TVvmH2lxe1', '2025-02-24 09:55:32', '廖宇宁', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175603, '7604086612', '7sXfdF6uaV', '2025-02-24 09:55:32', '夏杰宏', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175604, '76050865161', 'VOzue4Z5UB', '2025-02-24 09:55:32', '侯子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175605, '16128719754', 'LWBSKRhaJu', '2025-02-24 09:55:32', '任璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175606, '13080753379', 'ej0Eh5ZlPz', '2025-02-24 09:55:32', '卢安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175607, '19599067151', 'jafGK85bnl', '2025-02-24 09:55:32', '陈晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175608, '13361849472', 'SxUPLuafiz', '2025-02-24 09:55:32', '刘嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175609, '2814677697', 'iXNyGVWlBA', '2025-02-24 09:55:32', '魏璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175610, '19107797628', 'TrnOw7DbSE', '2025-02-24 09:55:32', '胡嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175611, '2185523349', '9KqveqLFeu', '2025-02-24 09:55:32', '曹震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175612, '206385662', 'xupEZJZpVv', '2025-02-24 09:55:32', '魏晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175613, '201244427', 'bZ6FLmjxHh', '2025-02-24 09:55:32', '程致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175614, '280967614', 'FW6FaLeiPb', '2025-02-24 09:55:32', '冯震南', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175615, '283527442', 'Z6HoXE2zGE', '2025-02-24 09:55:32', '丁致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175616, '202494498', 'zPYWM9FKmm', '2025-02-24 09:55:32', '宋宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175617, '19140440951', '9tt7PCn3id', '2025-02-24 09:55:32', '雷晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175618, '13579253659', 'n9HtdOlRaD', '2025-02-24 09:55:32', '于杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175619, '280044775', 'ZNXxZzOdw2', '2025-02-24 09:55:32', '陈宇宁', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175620, '287325600', 'v8005qgbDU', '2025-02-24 09:55:32', '陈宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175621, '16076719256', '0gGbJ09fnl', '2025-02-24 09:55:32', '董璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175622, '207140267', 'HaIo1MFRyL', '2025-02-24 09:55:32', '黎嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175623, '7604516552', 'e5pEuLUW66', '2025-02-24 09:55:32', '石晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175624, '13536294186', 'dTSPDiKCrA', '2025-02-24 09:55:32', '董秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175625, '16259496002', '1X6bB34OKd', '2025-02-24 09:55:32', '罗致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175626, '18600822283', '87a0bzPGKp', '2025-02-24 09:55:32', '邱岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175627, '15688276790', 'tSSoKWB8lG', '2025-02-24 09:55:32', '何子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175628, '18325966867', 'MOqHjXFRGh', '2025-02-24 09:55:32', '黄云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175629, '19056751562', 'y89AvpT7u3', '2025-02-24 09:55:32', '徐璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175630, '2166539340', 'BVAWA0owqW', '2025-02-24 09:55:32', '吴杰宏', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175631, '19137045507', 'EeXnXrYIYD', '2025-02-24 09:55:32', '姜岚', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175632, '75530524648', 'GsE9hI2DRj', '2025-02-24 09:55:32', '蔡璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175633, '7691648922', 'SO7DwBNdjq', '2025-02-24 09:55:32', '陆秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175634, '13299325154', 'OFt3Gx0h8r', '2025-02-24 09:55:32', '邓秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175635, '2835667356', 'MkwVQkaNlL', '2025-02-24 09:55:32', '吕秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175636, '107343205', 'n2SKeFi0sM', '2025-02-24 09:55:32', '任安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175637, '14054165398', '87Lfn6kdD0', '2025-02-24 09:55:32', '尹云熙', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175638, '15591792586', 'gj39n3MxPY', '2025-02-24 09:55:32', '张子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175639, '13854516375', 'dB0OFtBf6t', '2025-02-24 09:55:32', '何璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175640, '13097014303', 'px1jenOxQK', '2025-02-24 09:55:32', '汪子韬', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175641, '7555437909', 'rb5qRM9Qo3', '2025-02-24 09:55:32', '张杰宏', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175642, '200219914', 'kbNsU0kNLX', '2025-02-24 09:55:32', '邓詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175643, '204099379', 'e5yctIfALF', '2025-02-24 09:55:32', '徐秀英', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175644, '17501484980', 'igIA1WqVHU', '2025-02-24 09:55:32', '薛子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175645, '2040903822', 'eRY77FAd6H', '2025-02-24 09:55:32', '龚璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175646, '14237366811', 'MxWQT4EVE2', '2025-02-24 09:55:32', '唐致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175647, '217031101', 'oxq5UvxdLE', '2025-02-24 09:55:32', '邓璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175648, '18364839483', 'qKeAzPl0pY', '2025-02-24 09:55:32', '黎子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175649, '18175456512', 'NfzmUpovYg', '2025-02-24 09:55:32', '郭致远', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175650, '7555160947', 'uv1luyn9VJ', '2025-02-24 09:55:32', '林子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175651, '15729693028', 'wuoTtN4rcC', '2025-02-24 09:55:32', '向安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175652, '19627710411', 'iVK5EGEze5', '2025-02-24 09:55:32', '方璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175653, '75583621811', 'CFYexlF7Kj', '2025-02-24 09:55:32', '汪睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175654, '211821256', 'NPTqEo52OK', '2025-02-24 09:55:32', '郝璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175655, '17051729681', 'caWYvUTVU9', '2025-02-24 09:55:32', '石璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175656, '1026565131', '5hbMFDeUp9', '2025-02-24 09:55:32', '向詩涵', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175657, '1058408030', 'SOqEPnCtIS', '2025-02-24 09:55:32', '陶嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175658, '18012623647', '1KZ62RpXce', '2025-02-24 09:55:32', '贾晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175659, '2171647294', '3Pjc2V0w9z', '2025-02-24 09:55:32', '陈晓明', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175660, '19910415395', 'DQdZsIO8Yp', '2025-02-24 09:55:32', '董震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175661, '13031937667', 'HBvsFtaaVr', '2025-02-24 09:55:32', '孟子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175662, '2126890629', '0bgvXrLpkR', '2025-02-24 09:55:32', '于岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175663, '14454003478', 'trbhCmVIfx', '2025-02-24 09:55:32', '冯詩涵', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175664, '17816095633', 'bqvJLLEso2', '2025-02-24 09:55:32', '杜秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175665, '14259827652', 'zhEVSdfHU0', '2025-02-24 09:55:32', '顾震南', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175666, '18062148875', 'FKusm6112l', '2025-02-24 09:55:32', '赵子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175667, '17318358199', 'yDAVxOXq9J', '2025-02-24 09:55:32', '何晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175668, '108744125', 'J5XFj5LNbY', '2025-02-24 09:55:32', '朱秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175669, '7602370667', 'sqOAU1mT3s', '2025-02-24 09:55:32', '冯致远', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175670, '18636531539', 'iFU1cLrbLL', '2025-02-24 09:55:32', '吴晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175671, '7556220959', 'Bwm3s0vKnQ', '2025-02-24 09:55:32', '姚震南', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175672, '76993823345', 'rDFP8ujbZu', '2025-02-24 09:55:32', '胡子异', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175673, '14322858976', '99WfyJV6PL', '2025-02-24 09:55:32', '郝岚', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175674, '17025673628', 'OhcIxYsZhJ', '2025-02-24 09:55:32', '叶云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175675, '7602817060', 'jAqA2c2xEX', '2025-02-24 09:55:32', '邹宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175676, '7699179343', 'BWEXMcuNb3', '2025-02-24 09:55:32', '杨云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175677, '76932429532', 'mdjDI5III3', '2025-02-24 09:55:32', '龙璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175678, '15319954157', '9n8KggIPlz', '2025-02-24 09:55:32', '龚安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175679, '1009821043', 'Gmxc0kiawo', '2025-02-24 09:55:32', '孟安琪', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175680, '2055116727', 'R9JVNMwWMT', '2025-02-24 09:55:32', '尹睿', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175681, '18834269585', 'ZUDPqbgEHd', '2025-02-24 09:55:32', '陶璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175682, '18182460179', 'X0HGBIuOYj', '2025-02-24 09:55:32', '罗璐', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175683, '15578023108', 'N0NxyoE7lZ', '2025-02-24 09:55:32', '苏宇宁', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175684, '1001145810', '3dokS2dnHr', '2025-02-24 09:55:32', '潘云熙', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175685, '16935767754', 'LyCp1QlwF0', '2025-02-24 09:55:32', '顾宇宁', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175686, '18177197265', 'aO9eQbRpxg', '2025-02-24 09:55:32', '卢安琪', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175687, '75567953532', '554xXhlldj', '2025-02-24 09:55:32', '钟嘉伦', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175688, '14896954695', 'cRDHVlZCH5', '2025-02-24 09:55:32', '袁璐', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175689, '216686232', 'bo2sIupgJm', '2025-02-24 09:55:32', '夏子韬', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175690, '76925730372', 'PSCFMailnJ', '2025-02-24 09:55:32', '魏晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175691, '15312714153', 'Se9dJG0r19', '2025-02-24 09:55:32', '常嘉伦', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175692, '2060476754', 'YOak1pRggQ', '2025-02-24 09:55:32', '苏子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175693, '14556714633', 'HtDAppbhKr', '2025-02-24 09:55:32', '魏秀英', NULL, 0, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175694, '15731837428', 'mZDZlEAbBd', '2025-02-24 09:55:32', '金子异', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175695, '13117848800', 'Ie6XTdx7Aj', '2025-02-24 09:55:32', '林晓明', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175696, '2070896268', 'iz1Cp38SRK', '2025-02-24 09:55:32', '卢睿', NULL, 1, NULL); +INSERT INTO `tb_user` VALUES (1893836584118175697, '19753631803', 'PlFvCmamFh', '2025-02-24 09:55:32', '黄岚', NULL, 0, NULL); + +-- ---------------------------- +-- Table structure for tb_user_behavior +-- ---------------------------- +DROP TABLE IF EXISTS `tb_user_behavior`; +CREATE TABLE `tb_user_behavior` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', + `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户编号', + `item_id` bigint(20) NULL DEFAULT NULL COMMENT '商品编号', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `type` tinyint(1) NULL DEFAULT NULL COMMENT '1 收藏 2 喜欢', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1888959539441606658 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '用户行为表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tb_user_behavior +-- ---------------------------- +INSERT INTO `tb_user_behavior` VALUES (1868663856318935042, 1863920777825390593, 11, '2024-12-16 22:25:56', 1); +INSERT INTO `tb_user_behavior` VALUES (1868670681277804545, 1863920777825390593, 11, '2024-12-16 22:53:03', 2); +INSERT INTO `tb_user_behavior` VALUES (1888959452418187265, 1888931423629377538, 1291546, '2025-02-10 14:34:03', 1); +INSERT INTO `tb_user_behavior` VALUES (1888959480515829762, 1888931423629377538, 1291548, '2025-02-10 14:34:09', 1); +INSERT INTO `tb_user_behavior` VALUES (1888959519942287361, 1888931423629377538, 1291552, '2025-02-10 14:34:19', 1); +INSERT INTO `tb_user_behavior` VALUES (1888959539441606657, 1888931423629377538, 1292370, '2025-02-10 14:34:24', 1); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/front/pom.xml b/front/pom.xml new file mode 100644 index 0000000..03ea900 --- /dev/null +++ b/front/pom.xml @@ -0,0 +1,38 @@ + + + io.renren + block-identity-auth + 5.4.0 + + 4.0.0 + front + jar + front + + + + io.renren + common + 5.4.0 + + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + + diff --git a/front/src/main/java/io/FrontApplication.java b/front/src/main/java/io/FrontApplication.java new file mode 100644 index 0000000..56be7e1 --- /dev/null +++ b/front/src/main/java/io/FrontApplication.java @@ -0,0 +1,20 @@ +package io; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +/** + * front + */ +@SpringBootApplication +public class FrontApplication extends SpringBootServletInitializer { + public static void main(String[] args) { + SpringApplication.run(FrontApplication.class, args); + } + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(FrontApplication.class); + } +} diff --git a/front/src/main/java/io/annotation/Login.java b/front/src/main/java/io/annotation/Login.java new file mode 100644 index 0000000..153c166 --- /dev/null +++ b/front/src/main/java/io/annotation/Login.java @@ -0,0 +1,15 @@ + + +package io.annotation; + +import java.lang.annotation.*; + +/** + * 登录效验 + + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Login { +} diff --git a/front/src/main/java/io/annotation/LoginUser.java b/front/src/main/java/io/annotation/LoginUser.java new file mode 100644 index 0000000..03602d6 --- /dev/null +++ b/front/src/main/java/io/annotation/LoginUser.java @@ -0,0 +1,19 @@ + + +package io.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 登录用户信息 + * + + */ +@Target(ElementType.PARAMETER) +@Retention(RetentionPolicy.RUNTIME) +public @interface LoginUser { + +} diff --git a/front/src/main/java/io/config/FilterConfig.java b/front/src/main/java/io/config/FilterConfig.java new file mode 100644 index 0000000..cae8b06 --- /dev/null +++ b/front/src/main/java/io/config/FilterConfig.java @@ -0,0 +1,27 @@ +//package io.config; +// +//import io.common.xss.XssFilter; +//import jakarta.servlet.DispatcherType; +//import org.springframework.boot.web.servlet.FilterRegistrationBean; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +// +// +///** +// * Filter配置 +// * +// +// */ +//@Configuration +//public class FilterConfig { +// +// @Bean +// public FilterRegistrationBean xssFilterRegistration() { +// FilterRegistrationBean registration = new FilterRegistrationBean(); +// registration.setDispatcherTypes(DispatcherType.REQUEST); +// registration.setFilter(new XssFilter()); +// registration.addUrlPatterns("/*"); +// registration.setName("xssFilter"); +// return registration; +// } +//} diff --git a/front/src/main/java/io/config/MybatisPlusConfig.java b/front/src/main/java/io/config/MybatisPlusConfig.java new file mode 100644 index 0000000..7a129f9 --- /dev/null +++ b/front/src/main/java/io/config/MybatisPlusConfig.java @@ -0,0 +1,36 @@ + + +package io.config; + +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * mybatis-plus配置 + * + + */ +@Configuration +public class MybatisPlusConfig { + + /** + * 配置分页等 + */ + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); + // 分页插件 + mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); + // 乐观锁 + mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); + // 防止全表更新与删除 + mybatisPlusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); + + return mybatisPlusInterceptor; + } + +} diff --git a/front/src/main/java/io/config/ResourceConfig.java b/front/src/main/java/io/config/ResourceConfig.java new file mode 100644 index 0000000..c6a9b86 --- /dev/null +++ b/front/src/main/java/io/config/ResourceConfig.java @@ -0,0 +1,19 @@ +package io.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + + +@Configuration +public class ResourceConfig implements WebMvcConfigurer { + @Value("${spring.web.resources.static-locations}") + private String path; + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/upload/**") + .addResourceLocations(path); + } +} \ No newline at end of file diff --git a/front/src/main/java/io/config/SwaggerConfig.java b/front/src/main/java/io/config/SwaggerConfig.java new file mode 100644 index 0000000..430fd00 --- /dev/null +++ b/front/src/main/java/io/config/SwaggerConfig.java @@ -0,0 +1,41 @@ + + +package io.config; + +import io.common.constant.Constant; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.ArrayList; +import java.util.List; + + +@Configuration +public class SwaggerConfig { + @Bean + public OpenAPI createRestApi() { + return new OpenAPI() + .info(apiInfo()) + .security(security()); + } + + private Info apiInfo() { + return new Info() + .title("系统") + .description("api文档") + .version("5.x"); + } + + private List security() { + SecurityRequirement key = new SecurityRequirement(); + key.addList(Constant.TOKEN_HEADER, Constant.TOKEN_HEADER); + + List list = new ArrayList<>(); + list.add(key); + return list; + } + +} diff --git a/front/src/main/java/io/config/WebMvcConfig.java b/front/src/main/java/io/config/WebMvcConfig.java new file mode 100644 index 0000000..6dbffbf --- /dev/null +++ b/front/src/main/java/io/config/WebMvcConfig.java @@ -0,0 +1,80 @@ + + +package io.config; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.common.utils.DateUtils; +import io.interceptor.AuthorizationInterceptor; +import io.resolver.LoginUserHandlerMethodArgumentResolver; +import jakarta.annotation.Resource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.ByteArrayHttpMessageConverter; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.ResourceHttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.TimeZone; + +/** + * MVC配置 + * + + */ +@Configuration +public class WebMvcConfig implements WebMvcConfigurer { + @Resource + private AuthorizationInterceptor authorizationInterceptor; + @Resource + private LoginUserHandlerMethodArgumentResolver loginUserHandlerMethodArgumentResolver; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(authorizationInterceptor).addPathPatterns("/api/**"); + } + + @Override + public void addArgumentResolvers(List argumentResolvers) { + argumentResolvers.add(loginUserHandlerMethodArgumentResolver); + } + + @Override + public void configureMessageConverters(List> converters) { + converters.add(new ByteArrayHttpMessageConverter()); + converters.add(new StringHttpMessageConverter()); + converters.add(new ResourceHttpMessageConverter()); + converters.add(new AllEncompassingFormHttpMessageConverter()); + converters.add(new StringHttpMessageConverter()); + converters.add(jackson2HttpMessageConverter()); + } + + @Bean + public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() { + MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); + ObjectMapper mapper = new ObjectMapper(); + + //日期格式转换 + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.setDateFormat(new SimpleDateFormat(DateUtils.DATE_TIME_PATTERN)); + mapper.setTimeZone(TimeZone.getTimeZone("GMT+8")); + + //Long类型转String类型 + SimpleModule simpleModule = new SimpleModule(); + simpleModule.addSerializer(Long.class, ToStringSerializer.instance); + simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); + mapper.registerModule(simpleModule); + + converter.setObjectMapper(mapper); + return converter; + } +} diff --git a/front/src/main/java/io/controller/ApplicationsController.java b/front/src/main/java/io/controller/ApplicationsController.java new file mode 100644 index 0000000..af47a91 --- /dev/null +++ b/front/src/main/java/io/controller/ApplicationsController.java @@ -0,0 +1,127 @@ +package io.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import io.annotation.Login; +import io.common.constant.Constant; +import io.common.page.PageData; +import io.common.utils.Result; +import io.common.validator.AssertUtils; +import io.common.validator.ValidatorUtils; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.modules.item.dao.ApplicationsDao; +import io.modules.item.dao.CertificatesDao; +import io.modules.item.dto.ApplicationsDTO; +import io.modules.item.dto.CertificatesDTO; +import io.modules.item.dto.UserDTO; +import io.modules.item.entity.Applications; +import io.modules.item.entity.CertificatesEntity; +import io.modules.item.service.ApplicationsService; +import io.modules.item.service.CertificatesService; +import io.modules.item.service.FrontUserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 申请表 + */ +@RestController +@RequestMapping("/api/applications") +@Tag(name="证书表") +@CrossOrigin +public class ApplicationsController { + @Autowired + private ApplicationsService applicationsService; + @Autowired + private CertificatesService certificatesService; + @Autowired + private FrontUserService userService; + + @Autowired + private ApplicationsDao applicationsDao; + + @Value("${upload.url}") + private String uploadUrl; + @Login + @GetMapping("page") + @Operation(summary = "分页") + @Parameters({ + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", in = ParameterIn.QUERY, required = true, ref="int") , + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", in = ParameterIn.QUERY,required = true, ref="int") , + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段", in = ParameterIn.QUERY, ref="String") , + @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)", in = ParameterIn.QUERY, ref="String") + }) + public Result> page(@Parameter(hidden = true) @RequestParam Map params,@Parameter(hidden = true) @RequestAttribute("userId") Long userId){ + params.put("userId",userId); + PageData page = applicationsService.page(params); + List collect = page.getList().stream().map(e -> { + + UserDTO userDTO = userService.get(e.getUserId()); + e.setUser(userDTO); + CertificatesDTO certificatesDTO = certificatesService.get(e.getCertId()); + if (certificatesDTO != null){ + certificatesDTO.setImg(uploadUrl + certificatesDTO.getImg()); + e.setCertificates(certificatesDTO); + } + return e; // 返回修改后的对象 + }).collect(Collectors.toList()); + page.setList(collect); + return new Result>().ok(page); + } + + + @Login + @PostMapping + @Operation(summary = "保存") + public Result save(@RequestBody ApplicationsDTO dto,@Parameter(hidden = true) @RequestAttribute("userId") Long userId){ + CertificatesDTO certificatesDTO = certificatesService.get(dto.getCertId()); + if (certificatesDTO.getUserId() == userId){ + return new Result().error("不可以申请自己的证书"); + } + + + LambdaQueryWrapper lwq = new LambdaQueryWrapper<>(); + lwq.eq(Applications::getUserId,userId); + lwq.eq(Applications::getCertId,dto.getCertId()); + List list = applicationsDao.selectList(lwq); + if (!list.isEmpty()){ + return new Result().error("不可以重复申请"); + } + //效验数据 + ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); + dto.setUserId(userId); + applicationsService.save(dto); + return new Result(); + } + + @PutMapping + @Operation(summary = "修改") + public Result update(@RequestBody ApplicationsDTO dto){ + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); + applicationsService.update(dto); + return new Result(); + } + + @DeleteMapping + @Operation(summary = "删除") + public Result delete(@RequestBody Long[] ids){ + //效验数据 + AssertUtils.isArrayEmpty(ids, "id"); + applicationsService.delete(ids); + return new Result(); + } + +} diff --git a/front/src/main/java/io/controller/CertificatesController.java b/front/src/main/java/io/controller/CertificatesController.java new file mode 100644 index 0000000..1d6aed1 --- /dev/null +++ b/front/src/main/java/io/controller/CertificatesController.java @@ -0,0 +1,125 @@ +package io.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import io.annotation.Login; +import io.common.constant.Constant; +import io.common.page.PageData; +import io.common.utils.Result; +import io.common.validator.AssertUtils; +import io.common.validator.ValidatorUtils; +import io.common.validator.group.AddGroup; +import io.common.validator.group.DefaultGroup; +import io.common.validator.group.UpdateGroup; +import io.modules.item.dao.CertificatesDao; +import io.modules.item.dto.CertificatesDTO; +import io.modules.item.dto.UserDTO; +import io.modules.item.entity.CertificatesEntity; +import io.modules.item.service.CertificatesService; +import io.modules.item.service.FrontUserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 证书表 + */ +@RestController +@RequestMapping("/api/certificate") +@Tag(name="证书表") +@CrossOrigin +public class CertificatesController { + @Autowired + private CertificatesService certificatesService; + @Autowired + private CertificatesDao certificatesDao; + + + @Autowired + private FrontUserService userService; + @Value("${upload.url}") + private String uploadUrl; + + @Login + @GetMapping("page") + @Operation(summary = "分页") + @Parameters({ + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", in = ParameterIn.QUERY, required = true, ref="int") , + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", in = ParameterIn.QUERY,required = true, ref="int") , + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段", in = ParameterIn.QUERY, ref="String") , + @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)", in = ParameterIn.QUERY, ref="String") + }) + public Result> page(@Parameter(hidden = true) @RequestParam Map params,@Parameter(hidden = true) @RequestAttribute("userId") Long userId){ + params.put("userId",userId); + PageData page = certificatesService.page(params); + List collect = page.getList().stream().map(e -> { + // 拼接域名 + e.setImg(uploadUrl + e.getImg()); + + UserDTO userDTO = userService.get( e.getUserId()); + e.setUser(userDTO); + return e; // 返回修改后的对象 + }).collect(Collectors.toList()); + page.setList(collect); + return new Result>().ok(page); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + public Result get(@PathVariable("id") String id){ + LambdaQueryWrapper lwq = new LambdaQueryWrapper<>(); + lwq.eq(CertificatesEntity::getBlockchainTxId,id); + CertificatesEntity list = certificatesDao.selectOne(lwq); + if (list == null){ + return new Result().error("没有查询到"); + } + list.setImg(uploadUrl + list.getImg()); + return new Result().ok(list); + } + + @Login + @PostMapping + @Operation(summary = "保存") + public Result save(@RequestBody CertificatesDTO dto,@Parameter(hidden = true) @RequestAttribute("userId") Long userId){ + LambdaQueryWrapper lwq = new LambdaQueryWrapper<>(); + lwq.eq(CertificatesEntity::getCertificateNumber,dto.getCertificateNumber()); + List list = certificatesDao.selectList(lwq); + if (!list.isEmpty()){ + return new Result().error("证书编号有重复"); + } + //效验数据 + ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); + dto.setImg(dto.getImg().replace(uploadUrl,"")); + dto.setUserId(userId); + certificatesService.save(dto); + return new Result(); + } + + @PutMapping + @Operation(summary = "修改") + public Result update(@RequestBody CertificatesDTO dto){ + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); + dto.setImg(dto.getImg().replace(uploadUrl,"")); + certificatesService.update(dto); + return new Result(); + } + + @DeleteMapping + @Operation(summary = "删除") + public Result delete(@RequestBody Long[] ids){ + //效验数据 + AssertUtils.isArrayEmpty(ids, "id"); + certificatesService.delete(ids); + return new Result(); + } + +} diff --git a/front/src/main/java/io/controller/UploadController.java b/front/src/main/java/io/controller/UploadController.java new file mode 100644 index 0000000..f502c8c --- /dev/null +++ b/front/src/main/java/io/controller/UploadController.java @@ -0,0 +1,39 @@ +package io.controller; + +import io.common.utils.Result; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; + + +@CrossOrigin +@RestController +@RequestMapping("/api/upload") +@Tag(name = "上传文件") +public class UploadController { + @Value("${upload.path}") + private String path; + @PostMapping() + public Result upload(MultipartFile file) throws IOException { + if (file.isEmpty()) { + return new Result().error("文件不能为空!"); + } + //把文件的内容存储到本地磁盘上 + String originFileName = file.getOriginalFilename(); + file.transferTo(new File(path +"/"+ originFileName)); + String url = "http://localhost:18081/upload/" + originFileName; + HashMap map = new HashMap<>(); + map.put("path",url); + map.put("absolute","upload/" + originFileName); + return new Result<>().ok(map); + } +} \ No newline at end of file diff --git a/front/src/main/java/io/controller/UserController.java b/front/src/main/java/io/controller/UserController.java new file mode 100644 index 0000000..d2ae364 --- /dev/null +++ b/front/src/main/java/io/controller/UserController.java @@ -0,0 +1,114 @@ +package io.controller; + +import cn.hutool.crypto.digest.DigestUtil; +import io.annotation.Login; +import io.annotation.LoginUser; +import io.common.utils.Result; +import io.common.validator.ValidatorUtils; +import io.modules.item.dto.LoginDTO; +import io.dto.RegisterDTO; +import io.modules.item.entity.UserEntity; +import io.service.TokenService; +import io.modules.item.service.FrontUserService; +import io.service.UserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.*; +import java.util.Date; +import java.util.Map; + +/** + * 用户管理 + */ +@RestController +@RequestMapping("/api/user") +@Tag(name = "用户管理") +@AllArgsConstructor +@CrossOrigin +public class UserController { + private final UserService userService; + private final TokenService tokenService; + + @PostMapping("register") + @Operation(summary = "注册") + public Result register(@RequestBody RegisterDTO dto) { + + if (dto.getUsername().equals("admin")){ + return new Result().error("admin用户禁止创建~"); + } + + //表单校验 + ValidatorUtils.validateEntity(dto); + if (!dto.getPassword().equals(dto.getConfirmPassword())) { + return new Result().error("两次密码输入不一致~"); + } + + if (userService.getByUsername(dto.getUsername()) != null) { + return new Result().error("用户名已经存在~"); + } + //表单校验 + ValidatorUtils.validateEntity(dto); + UserEntity user = new UserEntity(); + user.setUsername(dto.getUsername()); + user.setNickName(dto.getUsername()); + user.setPassword(DigestUtil.sha256Hex(dto.getPassword())); + user.setCreateDate(new Date()); + userService.insert(user); + return new Result(); + } + + + @PostMapping("login") + @Operation(summary = "登录") + public Result> login(@RequestBody LoginDTO dto) { + //表单校验 + ValidatorUtils.validateEntity(dto); + //用户登录 + Map map = userService.login(dto); + return new Result().ok(map); + } + + @Login + @PutMapping("update") + @Operation(summary = "修改信息") + public Result update(@RequestBody UserEntity dto,@Parameter(hidden = true) @RequestAttribute("userId") Long userId) { + //表单校验 + ValidatorUtils.validateEntity(dto); + UserEntity user = new UserEntity(); + user.setId(userId); + user.setUsername(dto.getUsername()); + user.setNickName(dto.getNickName()); + user.setIntroduce(dto.getIntroduce()); + if (StringUtils.isNotEmpty(dto.getPassword())){ + user.setPassword(DigestUtil.sha256Hex(dto.getPassword())); + } + userService.updateById(user); + return new Result(); + } + + + @Login + @PostMapping("logout") + @Operation(summary = "退出") + public Result logout(@Parameter(hidden = true) @RequestAttribute("userId") Long userId) { + tokenService.expireToken(userId); + return new Result(); + } + + @Login + @GetMapping("userInfo") + @Operation(summary = "获取用户信息") + public Result userInfo(@Parameter(hidden = true) @LoginUser UserEntity user) { + return new Result().ok(user); + } + + @Login + @GetMapping("userId") + @Operation(summary = "获取用户ID") + public Result userInfo(@Parameter(hidden = true) @RequestAttribute("userId") Long userId) { + return new Result().ok(userId); + } +} diff --git a/front/src/main/java/io/dao/TokenDao.java b/front/src/main/java/io/dao/TokenDao.java new file mode 100644 index 0000000..a678199 --- /dev/null +++ b/front/src/main/java/io/dao/TokenDao.java @@ -0,0 +1,19 @@ + + +package io.dao; + +import io.common.dao.BaseDao; +import io.entity.TokenEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 用户Token + * + + */ +@Mapper +public interface TokenDao extends BaseDao { + TokenEntity getByToken(String token); + + TokenEntity getByUserId(Long userId); +} diff --git a/front/src/main/java/io/dto/RegisterDTO.java b/front/src/main/java/io/dto/RegisterDTO.java new file mode 100644 index 0000000..c587bc7 --- /dev/null +++ b/front/src/main/java/io/dto/RegisterDTO.java @@ -0,0 +1,35 @@ + + +package io.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + + +/** + * 注册表单 + * + */ +@Data +@Schema(title = "注册表单") +public class RegisterDTO { + private Long id; + @Schema(title = "用户名") + @NotBlank(message="用户名不能为空") + private String username; + + @Schema(title = "密码") + @NotBlank(message="密码不能为空") + private String password; + + @Schema(title = "密码") + @NotBlank(message="确认密码不能为空") + private String confirmPassword; + + @Schema(title = "昵称") + private String nickName; + + @Schema(title = "介绍") + private String introduce; +} diff --git a/front/src/main/java/io/entity/Picture.java b/front/src/main/java/io/entity/Picture.java new file mode 100644 index 0000000..b1aacee --- /dev/null +++ b/front/src/main/java/io/entity/Picture.java @@ -0,0 +1,10 @@ +package io.entity; + +import lombok.Data; + +@Data +public class Picture { + + private String path; + +} diff --git a/front/src/main/java/io/entity/TokenEntity.java b/front/src/main/java/io/entity/TokenEntity.java new file mode 100644 index 0000000..3fcd74b --- /dev/null +++ b/front/src/main/java/io/entity/TokenEntity.java @@ -0,0 +1,37 @@ +package io.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import java.io.Serializable; +import java.util.Date; + +/** + * 用户Token + * + */ +@Data +@TableName("tb_token") +public class TokenEntity implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId + private Long id; + /** + * 用户ID + */ + private Long userId; + /** + * 用户token + */ + private String token; + /** + * 过期时间 + */ + private Date expireDate; + /** + * 更新时间 + */ + private Date updateDate; + +} diff --git a/front/src/main/java/io/exception/RenExceptionHandler.java b/front/src/main/java/io/exception/RenExceptionHandler.java new file mode 100644 index 0000000..ce41574 --- /dev/null +++ b/front/src/main/java/io/exception/RenExceptionHandler.java @@ -0,0 +1,42 @@ +package io.exception; + +import io.common.exception.RenException; +import io.common.utils.Result; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * 异常处理器 + */ +@RestControllerAdvice +public class RenExceptionHandler { + private static final Logger logger = LoggerFactory.getLogger(RenExceptionHandler.class); + + /** + * 处理自定义异常 + */ + @ExceptionHandler(RenException.class) + public Result handleRenException(RenException ex){ + Result result = new Result(); + result.error(ex.getCode(), ex.getMsg()); + + return result; + } + + @ExceptionHandler(DuplicateKeyException.class) + public Result handleDuplicateKeyException(DuplicateKeyException ex){ + Result result = new Result(); + result.error("数据库中已存在该记录!"); + return result; + } + + @ExceptionHandler(Exception.class) + public Result handleException(Exception ex){ + logger.error(ex.getMessage(), ex); + + return new Result().error(ex.getMessage()); + } +} diff --git a/front/src/main/java/io/interceptor/AuthorizationInterceptor.java b/front/src/main/java/io/interceptor/AuthorizationInterceptor.java new file mode 100644 index 0000000..125d449 --- /dev/null +++ b/front/src/main/java/io/interceptor/AuthorizationInterceptor.java @@ -0,0 +1,57 @@ +package io.interceptor; + +import cn.hutool.core.util.StrUtil; +import io.annotation.Login; +import io.common.exception.RenException; +import io.entity.TokenEntity; +import io.service.TokenService; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; + +/** + * 权限(Token)验证 + * + */ +@Component +public class AuthorizationInterceptor implements HandlerInterceptor { + @Resource + private TokenService tokenService; + + public static final String USER_KEY = "userId"; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){ + Login annotation; + + if (handler instanceof HandlerMethod) { + annotation = ((HandlerMethod) handler).getMethodAnnotation(Login.class); + } else { + return true; + } + if (annotation == null) { + return true; + } + //从header中获取token + String token = request.getHeader("Authorization"); + //如果header中不存在token,则从参数中获取token + if (StrUtil.isBlank(token)) { + token = request.getParameter("Authorization"); + } + //token为空 + if (StrUtil.isBlank(token)) { + throw new RenException(401,"登录失效~"); + } + //查询token信息 + TokenEntity tokenEntity = tokenService.getByToken(token); + if (tokenEntity == null || tokenEntity.getExpireDate().getTime() < System.currentTimeMillis()) { + throw new RenException(401,"登录失效~"); + } + //设置userId到request里,后续根据userId,获取用户信息 + request.setAttribute(USER_KEY, tokenEntity.getUserId()); + return true; + } +} diff --git a/front/src/main/java/io/resolver/LoginUserHandlerMethodArgumentResolver.java b/front/src/main/java/io/resolver/LoginUserHandlerMethodArgumentResolver.java new file mode 100644 index 0000000..4df5102 --- /dev/null +++ b/front/src/main/java/io/resolver/LoginUserHandlerMethodArgumentResolver.java @@ -0,0 +1,45 @@ +package io.resolver; + +import io.annotation.LoginUser; +import io.modules.item.entity.UserEntity; +import io.interceptor.AuthorizationInterceptor; +import io.modules.item.service.FrontUserService; +import io.service.UserService; +import lombok.AllArgsConstructor; +import org.springframework.core.MethodParameter; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.support.WebDataBinderFactory; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; +import org.springframework.web.method.support.ModelAndViewContainer; + +/** + * 有@LoginUser注解的方法参数,注入当前登录用户 + * + */ +@Component +@AllArgsConstructor +public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { + private final UserService userService; + + @Override + public boolean supportsParameter(MethodParameter parameter) { + return parameter.getParameterType().isAssignableFrom(UserEntity.class) && parameter.hasParameterAnnotation(LoginUser.class); + } + + @Override + public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container, + NativeWebRequest request, WebDataBinderFactory factory){ + //获取用户ID + Object object = request.getAttribute(AuthorizationInterceptor.USER_KEY, RequestAttributes.SCOPE_REQUEST); + + if (object == null) { + return null; + } + + //获取用户信息 + UserEntity user = userService.getUserByUserId((Long) object); + return user; + } +} diff --git a/front/src/main/java/io/service/TokenService.java b/front/src/main/java/io/service/TokenService.java new file mode 100644 index 0000000..15b3c71 --- /dev/null +++ b/front/src/main/java/io/service/TokenService.java @@ -0,0 +1,30 @@ + + +package io.service; + +import io.common.service.BaseService; +import io.entity.TokenEntity; + +/** + * 用户Token + * + + */ +public interface TokenService extends BaseService { + + TokenEntity getByToken(String token); + + /** + * 生成token + * @param userId 用户ID + * @return 返回token信息 + */ + TokenEntity createToken(Long userId); + + /** + * 设置token过期 + * @param userId 用户ID + */ + void expireToken(Long userId); + +} diff --git a/front/src/main/java/io/service/UserService.java b/front/src/main/java/io/service/UserService.java new file mode 100644 index 0000000..5d59902 --- /dev/null +++ b/front/src/main/java/io/service/UserService.java @@ -0,0 +1,28 @@ + + +package io.service; + +import io.common.service.BaseService; +import io.modules.item.dto.LoginDTO; +import io.modules.item.entity.UserEntity; + +import java.util.Map; + +/** + * 用户 + * + + */ +public interface UserService extends BaseService { + + UserEntity getByUsername(String username); + + UserEntity getUserByUserId(Long userId); + + /** + * 用户登录 + * @param dto 登录表单 + * @return 返回登录信息 + */ + Map login(LoginDTO dto); +} diff --git a/front/src/main/java/io/service/impl/TokenServiceImpl.java b/front/src/main/java/io/service/impl/TokenServiceImpl.java new file mode 100644 index 0000000..8d3b8ab --- /dev/null +++ b/front/src/main/java/io/service/impl/TokenServiceImpl.java @@ -0,0 +1,92 @@ + + +package io.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import io.common.service.impl.BaseServiceImpl; +import io.dao.TokenDao; +import io.entity.TokenEntity; +import io.service.TokenService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.UUID; + + +@Service +public class TokenServiceImpl extends BaseServiceImpl implements TokenService { + + @Resource + private TokenDao tokenDao; + + /** + * 12小时后过期 + */ + private final static int EXPIRE = 3600 * 12; + + @Override + public TokenEntity getByToken(String token) { + return baseDao.getByToken(token); + } + + @Override + public TokenEntity createToken(Long userId) { + //当前时间 + Date now = new Date(); + //过期时间 + Date expireTime = new Date(now.getTime() + EXPIRE * 1000); + + //用户token + String token; + + //判断是否生成过token + TokenEntity tokenEntity = baseDao.getByUserId(userId); + if(tokenEntity == null){ + //生成一个token + token = generateToken(); + + tokenEntity = new TokenEntity(); + tokenEntity.setUserId(userId); + tokenEntity.setToken(token); + tokenEntity.setUpdateDate(now); + tokenEntity.setExpireDate(expireTime); + + //保存token + this.insert(tokenEntity); + }else{ + //判断token是否过期 + if(tokenEntity.getExpireDate().getTime() < System.currentTimeMillis()){ + //token过期,重新生成token + token = generateToken(); + }else { + token = tokenEntity.getToken(); + } + + tokenEntity.setToken(token); + tokenEntity.setUpdateDate(now); + tokenEntity.setExpireDate(expireTime); + + //更新token + this.updateById(tokenEntity); + } + + return tokenEntity; + } + + @Override + public void expireToken(Long userId){ + Date now = new Date(); + + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(TokenEntity::getUserId, userId); + updateWrapper.set(TokenEntity::getExpireDate, now); + updateWrapper.set(TokenEntity::getUpdateDate, now); + + tokenDao.update(updateWrapper); + } + + private String generateToken(){ + return UUID.randomUUID().toString().replace("-", ""); + } +} diff --git a/front/src/main/java/io/service/impl/UserServiceImpl.java b/front/src/main/java/io/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..e0dea4e --- /dev/null +++ b/front/src/main/java/io/service/impl/UserServiceImpl.java @@ -0,0 +1,50 @@ +package io.service.impl; + +import cn.hutool.crypto.digest.DigestUtil; +import io.common.exception.RenException; +import io.common.service.impl.BaseServiceImpl; +import io.common.validator.AssertUtils; +import io.entity.TokenEntity; +import io.modules.item.dao.UserDao; +import io.modules.item.dto.LoginDTO; +import io.modules.item.entity.UserEntity; +import io.service.TokenService; +import io.service.UserService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +@Service +@AllArgsConstructor +public class UserServiceImpl extends BaseServiceImpl implements UserService { + private final TokenService tokenService; + + @Override + public UserEntity getByUsername(String username){ + return baseDao.getUserByUsername(username); + } + + @Override + public UserEntity getUserByUserId(Long userId) { + return baseDao.getUserByUserId(userId); + } + + @Override + public Map login(LoginDTO dto) { + UserEntity user = getByUsername(dto.getUsername()); + AssertUtils.isNull(user, "用户名不存在~"); + + //密码错误 + if (!user.getPassword().equals(DigestUtil.sha256Hex(dto.getPassword()))) { + throw new RenException("密码输入错误~"); + } + //获取登录token + TokenEntity tokenEntity = tokenService.createToken(user.getId()); + Map map = new HashMap<>(2); + map.put("token", tokenEntity.getToken()); + map.put("expire", tokenEntity.getExpireDate().getTime() - System.currentTimeMillis()); + return map; + } + +} diff --git a/front/src/main/resources/application-dev.yml b/front/src/main/resources/application-dev.yml new file mode 100644 index 0000000..cd66b9d --- /dev/null +++ b/front/src/main/resources/application-dev.yml @@ -0,0 +1,39 @@ +spring: + servlet: + multipart: + max-file-size: 500MB + max-request-size: 500MB + datasource: + druid: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:33060/block_auth?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true + username: root + password: 123456 + initial-size: 10 + max-active: 100 + min-idle: 10 + max-wait: 60000 + pool-prepared-statements: true + max-pool-prepared-statement-per-connection-size: 20 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + test-while-idle: true + test-on-borrow: false + test-on-return: false + stat-view-servlet: + enabled: true + url-pattern: /druid/* + filter: + stat: + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: false + wall: + config: + multi-statement-allow: true + web: + resources: + static-locations: "file:D:/2025/blockchain-certify/upload/" +upload: + path: D:\2025\blockchain-certify\upload + url: http://localhost:18081/ \ No newline at end of file diff --git a/front/src/main/resources/application.yml b/front/src/main/resources/application.yml new file mode 100644 index 0000000..b17726d --- /dev/null +++ b/front/src/main/resources/application.yml @@ -0,0 +1,62 @@ +# Tomcat +server: + tomcat: + uri-encoding: UTF-8 + threads: + max: 1000 + min-spare: 30 + port: 18081 + servlet: + context-path: / + session: + cookie: + http-only: true +knife4j: + enable: true + basic: + enable: false + username: admin + password: admin + setting: + enableFooter: false + +spring: + # 环境 dev|test|prod + profiles: + active: dev + messages: + encoding: UTF-8 + basename: i18n/messages + # jackson时间格式化 + jackson: + time-zone: GMT+8 + date-format: yyyy-MM-dd HH:mm:ss + mvc: + pathmatch: + matching-strategy: ANT_PATH_MATCHER + servlet: + multipart: + max-file-size: 100MB + max-request-size: 100MB + enabled: true +#mybatis +mybatis-plus: + mapper-locations: classpath*:/mapper/**/*.xml + #实体扫描,多个package用逗号或者分号分隔 + typeAliasesPackage: io.renren.entity + global-config: + #数据库相关配置 + db-config: + #主键类型 + id-type: AUTO + banner: false + #原生配置 + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + call-setters-on-nulls: true + jdbc-type-for-null: 'null' + configuration-properties: + prefix: + blobType: BLOB + boolValue: TRUE diff --git a/front/src/main/resources/logback-spring.xml b/front/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..5deef21 --- /dev/null +++ b/front/src/main/resources/logback-spring.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/front/src/main/resources/mapper/TokenDao.xml b/front/src/main/resources/mapper/TokenDao.xml new file mode 100644 index 0000000..34f924b --- /dev/null +++ b/front/src/main/resources/mapper/TokenDao.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/front/src/main/resources/mapper/UserDao.xml b/front/src/main/resources/mapper/UserDao.xml new file mode 100644 index 0000000..64d6c77 --- /dev/null +++ b/front/src/main/resources/mapper/UserDao.xml @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/front/src/main/resources/static/17e86dfd-1a78-4d9c-bb31-9e920a561efa.jpg b/front/src/main/resources/static/17e86dfd-1a78-4d9c-bb31-9e920a561efa.jpg new file mode 100644 index 0000000000000000000000000000000000000000..edee53482ba16f48657305384c6dbbbe54598cda GIT binary patch literal 63648 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 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..c51aafc --- /dev/null +++ b/pom.xml @@ -0,0 +1,142 @@ + + 4.0.0 + io.renren + block-identity-auth + 5.4.0 + pom + + admin + 后台模板 + + org.springframework.boot + spring-boot-starter-parent + 3.2.6 + + + + common + admin + front + + + + UTF-8 + UTF-8 + 17 + 1.2.21 + 3.5.5 + 3.0.3 + 4.0 + 11.2.0.3 + 8.1.2.141 + 5.8.29 + 1.15.3 + 4.5.0 + 1.18.24 + 4.0.1 + + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework + spring-context-support + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + com.mysql + mysql-connector-j + + + + com.alibaba + druid-spring-boot-3-starter + ${druid.version} + + + com.baomidou + mybatis-plus-boot-starter + ${mybatisplus.version} + + + org.mybatis + mybatis-spring + ${mybatis.spring} + + + cn.hutool + hutool-all + ${hutool.version} + + + org.jsoup + jsoup + ${jsoup.version} + + + com.github.xiaoymin + knife4j-openapi3-jakarta-spring-boot-starter + ${knife4j.version} + + + org.projectlombok + lombok + ${lombok.version} + + + + + + + + + + + public + aliyun nexus + https://maven.aliyun.com/repository/public/ + + true + + + + + + public + aliyun nexus + https://maven.aliyun.com/repository/public/ + + true + + + false + + + + diff --git a/ui/.devcontainer/devcontainer.json b/ui/.devcontainer/devcontainer.json new file mode 100644 index 0000000..c6ccee3 --- /dev/null +++ b/ui/.devcontainer/devcontainer.json @@ -0,0 +1,44 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node +{ + "name": "Node.js & TypeScript", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/typescript-node:1-18-buster", + "features": { + "ghcr.io/devcontainers-contrib/features/pnpm:2": {} + }, + "customizations": { + "vscode": { + "extensions": [ + "antfu.goto-alias", + "mikestead.dotenv", + "redhat.vscode-yaml", + "Vue.volar", + "steoates.autoimport", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "EditorConfig.EditorConfig", + "usernamehw.errorlens", + "shd101wyy.markdown-preview-enhanced", + "voorjaar.windicss-intellisense", + "yoavbls.pretty-ts-errors", + "bodil.prettier-toml", + "bungcip.better-toml" + ] + } + } + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "yarn install", + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/ui/.editorconfig b/ui/.editorconfig new file mode 100644 index 0000000..c2de21e --- /dev/null +++ b/ui/.editorconfig @@ -0,0 +1,23 @@ +root = true + +# 匹配全部文件 +[*] +# 设置字符集 +charset = utf-8 +# 缩进风格,可选 space、tab +indent_style = tab +# 缩进的空格数,当 indent_style = tab 将使用 tab_width +# 否则使用 indent_size +indent_size = 2 +tab_width = 2 +# 结尾换行符,可选 lf、cr、crlf +end_of_line = crlf +# 在文件结尾插入新行 +insert_final_newline = true +# 删除一行中的前后空格 +trim_trailing_whitespace = true + +# 匹配 md 结尾的文件 +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/ui/.env b/ui/.env new file mode 100644 index 0000000..32f0d72 --- /dev/null +++ b/ui/.env @@ -0,0 +1,30 @@ +# 通用环境变量 +# 前端接口 +VITE_API_FRONT_BASE_URL = http://localhost:18081 +#后端接口 +VITE_ADMIN_API_BASE_URL = http://localhost:18080 + +VITE_LOGIN_BG = "/login/e36341619bf8f04dcbdc6b01105a85a.png" + +# 标题 +VITE_APP_TITLE = 证书 + +# markdown 渲染支持 +VITE_APP_MARKDOWN = true + +# 开发时的开发面板 +VITE_APP_DEV_TOOLS = false + +# 生产时 mock 支持 +VITE_APP_MOCK_IN_PRODUCTION = false + +# 生产时压缩算法,可选 gzip, brotliCompress, deflate, deflateRaw +VITE_APP_COMPRESSINON_ALGORITHM = gzip + +# api 自动按需引入 +# 注意设置关闭时,其他的 api 自动按需引入也将自动关闭 +VITE_APP_API_AUTO_IMPORT = true + + +# 项目级 api 自动按需导入 +VITE_APP_DIR_API_AUTO_IMPORT = true diff --git a/ui/.eslintignore b/ui/.eslintignore new file mode 100644 index 0000000..01a294a --- /dev/null +++ b/ui/.eslintignore @@ -0,0 +1,4 @@ +# 忽略 eslint 检查 +dist +node_modules +presets/types diff --git a/ui/.gitignore b/ui/.gitignore new file mode 100644 index 0000000..70806e6 --- /dev/null +++ b/ui/.gitignore @@ -0,0 +1,12 @@ +dist +.nitro +.output +env.d.ts +node_modules +.eslintcache +components.d.ts +type-router.d.ts +auto-imports.d.ts +.eslintrc-auto-import.json +vite.config.ts.timestamp* +.idea diff --git a/ui/.npmrc b/ui/.npmrc new file mode 100644 index 0000000..918fa4a --- /dev/null +++ b/ui/.npmrc @@ -0,0 +1 @@ +registry=https://registry.npmmirror.com/ \ No newline at end of file diff --git a/ui/.nvmrc b/ui/.nvmrc new file mode 100644 index 0000000..5802c69 --- /dev/null +++ b/ui/.nvmrc @@ -0,0 +1 @@ +20.12.2 \ No newline at end of file diff --git a/ui/.prettierignore b/ui/.prettierignore new file mode 100644 index 0000000..3673c24 --- /dev/null +++ b/ui/.prettierignore @@ -0,0 +1,3 @@ +dist +node_modules +presets/types diff --git a/ui/.prettierrc.json b/ui/.prettierrc.json new file mode 100644 index 0000000..6ef9e41 --- /dev/null +++ b/ui/.prettierrc.json @@ -0,0 +1,5 @@ +{ + "semi": false, + "singleQuote": true, + "endOfLine": "auto" +} diff --git a/ui/.vite/deps/_metadata.json b/ui/.vite/deps/_metadata.json new file mode 100644 index 0000000..215d1fe --- /dev/null +++ b/ui/.vite/deps/_metadata.json @@ -0,0 +1,8 @@ +{ + "hash": "9eae4843", + "configHash": "273d741a", + "lockfileHash": "e3b0c442", + "browserHash": "f1ecf6ce", + "optimized": {}, + "chunks": {} +} \ No newline at end of file diff --git a/ui/.vite/deps/package.json b/ui/.vite/deps/package.json new file mode 100644 index 0000000..3dbc1ca --- /dev/null +++ b/ui/.vite/deps/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/ui/index.html b/ui/index.html new file mode 100644 index 0000000..65b9479 --- /dev/null +++ b/ui/index.html @@ -0,0 +1,13 @@ + + + + + + + + + +
+ + + diff --git a/ui/locales/English/common.yml b/ui/locales/English/common.yml new file mode 100644 index 0000000..85625b7 --- /dev/null +++ b/ui/locales/English/common.yml @@ -0,0 +1,10 @@ +# English + +home: home +about: about +echarts: echarts +edit: Edit +to test HMR: to test HMR +check out: Check out +The total number of views is: The total number of views is +the official Tov + Vue + Vite template: the official Tov + Vue + Vite template diff --git a/ui/locales/English/test.yml b/ui/locales/English/test.yml new file mode 100644 index 0000000..66a41ce --- /dev/null +++ b/ui/locales/English/test.yml @@ -0,0 +1,3 @@ +# English + +test.module: lanugae module test diff --git a/ui/locales/简体中文/common.yml b/ui/locales/简体中文/common.yml new file mode 100644 index 0000000..85e5868 --- /dev/null +++ b/ui/locales/简体中文/common.yml @@ -0,0 +1,10 @@ +# 中文 + +home: 主页 +about: 关于 +echarts: 图表 +edit: 编辑 +to test HMR: 测试热更新 +check out: 查看 +The total number of views is: 总浏览数 +the official Tov + Vue + Vite template: 公共的 Tov + Vue + Vite 模板 \ No newline at end of file diff --git a/ui/locales/简体中文/test.yml b/ui/locales/简体中文/test.yml new file mode 100644 index 0000000..efb8f3d --- /dev/null +++ b/ui/locales/简体中文/test.yml @@ -0,0 +1,3 @@ +# 简体中文 + +test.module: 多语言多模块测试 diff --git a/ui/netlify.toml b/ui/netlify.toml new file mode 100644 index 0000000..3a01cb0 --- /dev/null +++ b/ui/netlify.toml @@ -0,0 +1,4 @@ +[[redirects]] +to = "/index.html" +from = "/*" +status = 200 diff --git a/ui/package.json b/ui/package.json new file mode 100644 index 0000000..4720d48 --- /dev/null +++ b/ui/package.json @@ -0,0 +1,112 @@ +{ + "name": "后台", + "version": "1.19.0", + "description": "后台", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "engines": { + "node": ">=20.12.2" + }, + "packageManager": "pnpm@8.15.8", + "devDependencies": { + "@types/ityped": "^1.0.3", + "@types/node": "^20.12.7", + "@typescript-eslint/parser": "7.8.0", + "@unocss/eslint-config": "0.59.4", + "@unocss/reset": "^0.59.4", + "@vitejs/plugin-vue": "^5.0.4", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "@vueuse/components": "^10.9.0", + "@vueuse/core": "^10.9.0", + "@vueuse/integrations": "^10.9.0", + "axios": "^1.6.8", + "browserslist": "^4.23.0", + "c8": "^9.1.0", + "changelogen": "^0.5.5", + "consola": "^3.2.3", + "cross-env": "^7.0.3", + "defu": "^6.1.4", + "echarts": "^5.5.0", + "eslint": "8.57.0", + "eslint-config-prettier": "9.1.0", + "eslint-plugin-prettier": "5.1.3", + "eslint-plugin-vue": "^9.25.0", + "fs-extra": "^11.2.0", + "husky": "^9.0.11", + "ityped": "^1.0.3", + "kolorist": "^1.8.0", + "lightningcss": "^1.24.1", + "lint-staged": "^15.2.2", + "local-pkg": "^0.5.0", + "mockjs": "^1.1.0", + "nprogress": "^0.2.0", + "perfect-debounce": "^1.0.0", + "pinia": "^2.1.7", + "pinia-plugin-persistedstate": "^3.2.1", + "plop": "^4.0.1", + "prettier": "^3.2.5", + "prism-theme-vars": "^0.2.5", + "simple-git": "^3.24.0", + "taze": "^0.13.7", + "terser": "^5.31.0", + "typescript": "^5.4.5", + "unocss": "^0.59.4", + "unplugin-auto-import": "^0.17.5", + "unplugin-vue-components": "^0.26.0", + "unplugin-vue-markdown": "^0.26.2", + "unplugin-vue-router": "^0.8.6", + "vite": "^5.2.10", + "vite-auto-import-resolvers": "^3.2.1", + "vite-layers": "^0.5.2", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-env-types": "^0.1.4", + "vite-plugin-legacy-swc": "^1.1.0", + "vite-plugin-use-modules": "^1.4.8", + "vite-plugin-vue-devtools": "^7.1.3", + "vite-plugin-vue-meta-layouts": "^0.4.3", + "vitest": "^1.5.3", + "vue": "^3.4.26", + "vue-echarts": "^6.7.1", + "vue-request": "2.0.4", + "vue-router": "^4.3.2", + "vue-toastification": "2.0.0-rc.5" + }, + "lint-staged": { + "*.{js,jsx,ts,tsx,vue}": "eslint --cache --fix" + }, + "overrides": { + "sourcemap-codec": "npm:@jridgewell/sourcemap-codec@latest", + "array-includes": "npm:@nolyfill/array-includes@latest", + "array.prototype.findlastindex": "npm:@nolyfill/array.prototype.findlastindex@latest", + "array.prototype.flat": "npm:@nolyfill/array.prototype.flat@latest", + "array.prototype.flatmap": "npm:@nolyfill/array.prototype.flatmap@latest", + "arraybuffer.prorotype.slice": "npm:@nolyfill/arraybuffer.prorotype.slice@latest", + "function.prototype.name": "npm:@nolyfill/function.prototype.name@latest", + "has": "npm:@nolyfill/has@latest", + "is-regex": "npm:@nolyfill/is-regex@latest", + "object-keys": "npm:@nolyfill/object-keys@latest", + "object.assign": "npm:@nolyfill/object.assign@latest", + "object.entries": "npm:@nolyfill/object.entries@latest", + "object.fromentries": "npm:@nolyfill/object.fromentries@latest", + "object.values": "npm:@nolyfill/object.values@latest", + "vue-demi": "npm:vue-demi@latest" + }, + "repository": { + "url": "https://github.com/dishait/tov-template" + }, + "browserslist": [ + ">= 0.25%", + "last 2 versions", + "not dead", + "not ie <= 11", + "Android >= 4.0", + "iOS >= 8" + ], + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "element-plus": "^2.9.2" + } +} diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml new file mode 100644 index 0000000..8f99515 --- /dev/null +++ b/ui/pnpm-lock.yaml @@ -0,0 +1,7323 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@element-plus/icons-vue': + specifier: ^2.3.1 + version: 2.3.1(vue@3.4.26(typescript@5.4.5)) + element-plus: + specifier: ^2.9.2 + version: 2.9.2(vue@3.4.26(typescript@5.4.5)) + devDependencies: + '@types/ityped': + specifier: ^1.0.3 + version: 1.0.3 + '@types/node': + specifier: ^20.12.7 + version: 20.12.7 + '@typescript-eslint/parser': + specifier: 7.8.0 + version: 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@unocss/eslint-config': + specifier: 0.59.4 + version: 0.59.4(eslint@8.57.0)(typescript@5.4.5) + '@unocss/reset': + specifier: ^0.59.4 + version: 0.59.4 + '@vitejs/plugin-vue': + specifier: ^5.0.4 + version: 5.0.4(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0))(vue@3.4.26(typescript@5.4.5)) + '@vitejs/plugin-vue-jsx': + specifier: ^3.1.0 + version: 3.1.0(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0))(vue@3.4.26(typescript@5.4.5)) + '@vueuse/components': + specifier: ^10.9.0 + version: 10.9.0(vue@3.4.26(typescript@5.4.5)) + '@vueuse/core': + specifier: ^10.9.0 + version: 10.9.0(vue@3.4.26(typescript@5.4.5)) + '@vueuse/integrations': + specifier: ^10.9.0 + version: 10.9.0(async-validator@4.2.5)(axios@1.6.8)(change-case@4.1.2)(nprogress@0.2.0)(vue@3.4.26(typescript@5.4.5)) + axios: + specifier: ^1.6.8 + version: 1.6.8 + browserslist: + specifier: ^4.23.0 + version: 4.23.0 + c8: + specifier: ^9.1.0 + version: 9.1.0 + changelogen: + specifier: ^0.5.5 + version: 0.5.5 + consola: + specifier: ^3.2.3 + version: 3.2.3 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + defu: + specifier: ^6.1.4 + version: 6.1.4 + echarts: + specifier: ^5.5.0 + version: 5.5.0 + eslint: + specifier: 8.57.0 + version: 8.57.0 + eslint-config-prettier: + specifier: 9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-plugin-prettier: + specifier: 5.1.3 + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5) + eslint-plugin-vue: + specifier: ^9.25.0 + version: 9.25.0(eslint@8.57.0) + fs-extra: + specifier: ^11.2.0 + version: 11.2.0 + husky: + specifier: ^9.0.11 + version: 9.0.11 + ityped: + specifier: ^1.0.3 + version: 1.0.3 + kolorist: + specifier: ^1.8.0 + version: 1.8.0 + lightningcss: + specifier: ^1.24.1 + version: 1.24.1 + lint-staged: + specifier: ^15.2.2 + version: 15.2.2 + local-pkg: + specifier: ^0.5.0 + version: 0.5.0 + mockjs: + specifier: ^1.1.0 + version: 1.1.0 + nprogress: + specifier: ^0.2.0 + version: 0.2.0 + perfect-debounce: + specifier: ^1.0.0 + version: 1.0.0 + pinia: + specifier: ^2.1.7 + version: 2.1.7(typescript@5.4.5)(vue@3.4.26(typescript@5.4.5)) + pinia-plugin-persistedstate: + specifier: ^3.2.1 + version: 3.2.1(pinia@2.1.7(typescript@5.4.5)(vue@3.4.26(typescript@5.4.5))) + plop: + specifier: ^4.0.1 + version: 4.0.1 + prettier: + specifier: ^3.2.5 + version: 3.2.5 + prism-theme-vars: + specifier: ^0.2.5 + version: 0.2.5 + simple-git: + specifier: ^3.24.0 + version: 3.24.0 + taze: + specifier: ^0.13.7 + version: 0.13.7 + terser: + specifier: ^5.31.0 + version: 5.31.0 + typescript: + specifier: ^5.4.5 + version: 5.4.5 + unocss: + specifier: ^0.59.4 + version: 0.59.4(postcss@8.4.38)(rollup@4.13.0)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)) + unplugin-auto-import: + specifier: ^0.17.5 + version: 0.17.5(@vueuse/core@10.9.0(vue@3.4.26(typescript@5.4.5)))(rollup@4.13.0) + unplugin-vue-components: + specifier: ^0.26.0 + version: 0.26.0(@babel/parser@7.24.4)(rollup@4.13.0)(vue@3.4.26(typescript@5.4.5)) + unplugin-vue-markdown: + specifier: ^0.26.2 + version: 0.26.2(rollup@4.13.0)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)) + unplugin-vue-router: + specifier: ^0.8.6 + version: 0.8.6(rollup@4.13.0)(vue-router@4.3.2(vue@3.4.26(typescript@5.4.5)))(vue@3.4.26(typescript@5.4.5)) + vite: + specifier: ^5.2.10 + version: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + vite-auto-import-resolvers: + specifier: ^3.2.1 + version: 3.2.1(unplugin-auto-import@0.17.5(@vueuse/core@10.9.0(vue@3.4.26(typescript@5.4.5)))(rollup@4.13.0))(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)) + vite-layers: + specifier: ^0.5.2 + version: 0.5.2(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)) + vite-plugin-compression: + specifier: ^0.5.1 + version: 0.5.1(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)) + vite-plugin-env-types: + specifier: ^0.1.4 + version: 0.1.4(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)) + vite-plugin-legacy-swc: + specifier: ^1.1.0 + version: 1.1.0(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)) + vite-plugin-use-modules: + specifier: ^1.4.8 + version: 1.4.8(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0))(vue@3.4.26(typescript@5.4.5)) + vite-plugin-vue-devtools: + specifier: ^7.1.3 + version: 7.1.3(rollup@4.13.0)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0))(vue@3.4.26(typescript@5.4.5)) + vite-plugin-vue-meta-layouts: + specifier: ^0.4.3 + version: 0.4.3(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0))(vue-router@4.3.2(vue@3.4.26(typescript@5.4.5))) + vitest: + specifier: ^1.5.3 + version: 1.5.3(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + vue: + specifier: ^3.4.26 + version: 3.4.26(typescript@5.4.5) + vue-echarts: + specifier: ^6.7.1 + version: 6.7.1(@vue/runtime-core@3.4.26)(echarts@5.5.0)(vue@3.4.26(typescript@5.4.5)) + vue-request: + specifier: 2.0.4 + version: 2.0.4(vue@3.4.26(typescript@5.4.5)) + vue-router: + specifier: ^4.3.2 + version: 4.3.2(vue@3.4.26(typescript@5.4.5)) + vue-toastification: + specifier: 2.0.0-rc.5 + version: 2.0.0-rc.5(vue@3.4.26(typescript@5.4.5)) + +packages: + + '@aashutoshrathi/word-wrap@1.2.6': + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@antfu/install-pkg@0.1.1': + resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==} + + '@antfu/ni@0.21.12': + resolution: {integrity: sha512-2aDL3WUv8hMJb2L3r/PIQWsTLyq7RQr3v9xD16fiz6O8ys1xEyLhhTOv8gxtZvJiTzjTF5pHoArvRdesGL1DMQ==} + hasBin: true + + '@antfu/utils@0.7.7': + resolution: {integrity: sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==} + + '@babel/code-frame@7.24.2': + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.24.1': + resolution: {integrity: sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.24.3': + resolution: {integrity: sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.24.4': + resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.24.1': + resolution: {integrity: sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.24.4': + resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.22.5': + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.23.6': + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.24.1': + resolution: {integrity: sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-environment-visitor@7.22.20': + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-function-name@7.23.0': + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-hoist-variables@7.22.5': + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.23.0': + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.22.15': + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.3': + resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.23.3': + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.22.5': + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.24.0': + resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.24.1': + resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-simple-access@7.22.5': + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-split-export-declaration@7.22.6': + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.1': + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.22.20': + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.23.5': + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.24.1': + resolution: {integrity: sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.24.4': + resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.2': + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.24.1': + resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.24.4': + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-proposal-decorators@7.24.1': + resolution: {integrity: sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-decorators@7.24.1': + resolution: {integrity: sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.24.1': + resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.24.1': + resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.24.1': + resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.24.1': + resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.24.1': + resolution: {integrity: sha512-liYSESjX2fZ7JyBFkYG78nfvHlMKE6IpNdTVnxmlYUR+j5ZLsitFbaAE+eJSK2zPPkNWNw4mXL51rQ8WrvdK0w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-typescript@7.24.1': + resolution: {integrity: sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.24.0': + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.24.1': + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.24.0': + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@ctrl/tinycolor@3.6.1': + resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} + engines: {node: '>=10'} + + '@element-plus/icons-vue@2.3.1': + resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==} + peerDependencies: + vue: ^3.2.0 + + '@esbuild/aix-ppc64@0.20.2': + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.20.2': + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.20.2': + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.20.2': + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.20.2': + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.20.2': + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.20.2': + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.20.2': + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.20.2': + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.20.2': + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.20.2': + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.20.2': + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.20.2': + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.20.2': + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.20.2': + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.20.2': + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.20.2': + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.20.2': + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.20.2': + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.20.2': + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.20.2': + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.20.2': + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.20.2': + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.10.0': + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.0': + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + + '@floating-ui/dom@1.6.12': + resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==} + + '@floating-ui/utils@0.2.8': + resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.2': + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@2.1.23': + resolution: {integrity: sha512-YGNbHKM5tyDvdWZ92y2mIkrfvm5Fvhe6WJSkWu7vvOFhMtYDP0casZpoRz0XEHZCrYsR4stdGT3cZ52yp5qZdQ==} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jsdevtools/ez-spawn@3.0.4': + resolution: {integrity: sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==} + engines: {node: '>=10'} + + '@kwsites/file-exists@1.1.1': + resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} + + '@kwsites/promise-deferred@1.1.1': + resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + + '@ljharb/through@2.3.13': + resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==} + engines: {node: '>= 0.4'} + + '@mdit-vue/plugin-component@2.1.2': + resolution: {integrity: sha512-n1HcAC82l912HhtiMSxl5pQLKBYbPok/IcdGRD49rTt53NXBqct68qo58+7jvsj+f8Lmo7kjD+em3tP4BSgl0A==} + + '@mdit-vue/plugin-frontmatter@2.1.2': + resolution: {integrity: sha512-2YOVOsMRtf11bZ6mEB4xoWD6RG5X0Ex+g/1c1iXoYUMUahlZnz9flXUM6WAE++HsLR3Wkvd5FNhGUArrcxn0dA==} + + '@mdit-vue/types@2.1.0': + resolution: {integrity: sha512-TMBB/BQWVvwtpBdWD75rkZx4ZphQ6MN0O4QB2Bc0oI5PC2uE57QerhNxdRZ7cvBHE2iY2C+BUNUziCfJbjIRRA==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@polka/url@1.0.0-next.25': + resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} + + '@rollup/pluginutils@5.1.0': + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.13.0': + resolution: {integrity: sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.13.0': + resolution: {integrity: sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.13.0': + resolution: {integrity: sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.13.0': + resolution: {integrity: sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.13.0': + resolution: {integrity: sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.13.0': + resolution: {integrity: sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.13.0': + resolution: {integrity: sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.13.0': + resolution: {integrity: sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.13.0': + resolution: {integrity: sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.13.0': + resolution: {integrity: sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-win32-arm64-msvc@4.13.0': + resolution: {integrity: sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.13.0': + resolution: {integrity: sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.13.0': + resolution: {integrity: sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==} + cpu: [x64] + os: [win32] + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@swc/core-darwin-arm64@1.4.8': + resolution: {integrity: sha512-hhQCffRTgzpTIbngSnC30vV6IJVTI9FFBF954WEsshsecVoCGFiMwazBbrkLG+RwXENTrMhgeREEFh6R3KRgKQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.4.8': + resolution: {integrity: sha512-P3ZBw8Jr8rKhY/J8d+6WqWriqngGTgHwtFeJ8MIakQJTbdYbFgXSZxcvDiERg3psbGeFXaUaPI0GO6BXv9k/OQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.4.8': + resolution: {integrity: sha512-PP9JIJt19bUWhAGcQW6qMwTjZOcMyzkvZa0/LWSlDm0ORYVLmDXUoeQbGD3e0Zju9UiZxyulnpjEN0ZihJgPTA==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.4.8': + resolution: {integrity: sha512-HvEWnwKHkoVUr5iftWirTApFJ13hGzhAY2CMw4lz9lur2m+zhPviRRED0FCI6T95Knpv7+8eUOr98Z7ctrG6DQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@swc/core-linux-arm64-musl@1.4.8': + resolution: {integrity: sha512-kY8+qa7k/dEeBq9p0Hrta18QnJPpsiJvDQSLNaTIFpdM3aEM9zbkshWz8gaX5VVGUEALowCBUWqmzO4VaqM+2w==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@swc/core-linux-x64-gnu@1.4.8': + resolution: {integrity: sha512-0WWyIw432wpO/zeGblwq4f2YWam4pn8Z/Ig4KzHMgthR/KmiLU3f0Z7eo45eVmq5vcU7Os1zi/Zb65OOt09q/w==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@swc/core-linux-x64-musl@1.4.8': + resolution: {integrity: sha512-p4yxvVS05rBNCrBaSTa20KK88vOwtg8ifTW7ec/yoab0bD5EwzzB8KbDmLLxE6uziFa0sdjF0dfRDwSZPex37Q==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@swc/core-win32-arm64-msvc@1.4.8': + resolution: {integrity: sha512-jKuXihxAaqUnbFfvPxtmxjdJfs87F1GdBf33il+VUmSyWCP4BE6vW+/ReDAe8sRNsKyrZ3UH1vI5q1n64csBUA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.4.8': + resolution: {integrity: sha512-O0wT4AGHrX8aBeH6c2ADMHgagAJc5Kf6W48U5moyYDAkkVnKvtSc4kGhjWhe1Yl0sI0cpYh2In2FxvYsb44eWw==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.4.8': + resolution: {integrity: sha512-C2AYc3A2o+ECciqsJWRgIpp83Vk5EaRzHe7ed/xOWzVd0MsWR+fweEsyOjlmzHfpUxJSi46Ak3/BIZJlhZbXbg==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.4.8': + resolution: {integrity: sha512-uY2RSJcFPgNOEg12RQZL197LZX+MunGiKxsbxmh22VfVxrOYGRvh4mPANFlrD1yb38CgmW1wI6YgIi8LkIwmWg==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': ^0.5.0 + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/types@0.1.6': + resolution: {integrity: sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==} + + '@sxzz/popperjs-es@2.11.7': + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/fined@1.1.5': + resolution: {integrity: sha512-2N93vadEGDFhASTIRbizbl4bNqpMOId5zZfj6hHqYZfEzEfO9onnU4Im8xvzo8uudySDveDHBOOSlTWf38ErfQ==} + + '@types/inquirer@9.0.7': + resolution: {integrity: sha512-Q0zyBupO6NxGRZut/JdmqYKOnN95Eg5V8Csg3PGKkP+FnvsUZx1jAyK7fztIszxxMuoBA6E3KXWvdZVXIpx60g==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/ityped@1.0.3': + resolution: {integrity: sha512-89dSbYe+TuNYRgw5stHSAlQ1ABp5Ca9UPw/yCvaFBUn6W7M2wG1XjivvohYCkOC2rIKCnSAjezIXe8oDmrJPew==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/liftoff@4.0.3': + resolution: {integrity: sha512-UgbL2kR5pLrWICvr8+fuSg0u43LY250q7ZMkC+XKC3E+rs/YBDEnQIzsnhU5dYsLlwMi3R75UvCL87pObP1sxw==} + + '@types/linkify-it@3.0.5': + resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.14': + resolution: {integrity: sha512-jsxagdikDiDBeIRaPYtArcT8my4tN1og7MtMRquFT3XNA6axxyHDRUemqDz/taRDdOUn0GnGHRCuff4q48sW9A==} + + '@types/markdown-it@14.0.1': + resolution: {integrity: sha512-6WfOG3jXR78DW8L5cTYCVVGAsIFZskRHCDo5tbqa+qtKVt4oDRVH7hyIWu1SpDQJlmIoEivNQZ5h+AGAOrgOtQ==} + + '@types/mdurl@1.0.5': + resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} + + '@types/node@20.12.7': + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/through@0.0.33': + resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + + '@types/web-bluetooth@0.0.16': + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + '@typescript-eslint/parser@7.8.0': + resolution: {integrity: sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@7.8.0': + resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/types@7.8.0': + resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/typescript-estree@7.8.0': + resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@7.8.0': + resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/visitor-keys@7.8.0': + resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@unocss/astro@0.59.4': + resolution: {integrity: sha512-DU3OR5MMR1Uvvec4/wB9EetDASHRg19Moy6z/MiIhn8JWJ0QzWYgSeJcfUX8exomMYv6WUEQJL+CyLI34Wmn8w==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 + peerDependenciesMeta: + vite: + optional: true + + '@unocss/cli@0.59.4': + resolution: {integrity: sha512-TT+WKedSifhsRqnpoYD2LfyYipVzEbzIU4DDGIaDNeDxGXYOGpb876zzkPDcvZSpI37IJ/efkkV7PGYpPBcQBQ==} + engines: {node: '>=14'} + hasBin: true + + '@unocss/config@0.59.4': + resolution: {integrity: sha512-h3yhj+D5Ygn5R7gbK4wMrtXZX6FF5DF6YD517sSSb0XB3lxHD9PhhT4HaV1hpHknvu0cMFU3460M45+TN1TI0Q==} + engines: {node: '>=14'} + + '@unocss/core@0.59.4': + resolution: {integrity: sha512-bBZ1sgcAtezQVZ1BST9IS3jqcsTLyqKNjiIf7FTnX3DHpfpYuMDFzSOtmkZDzBleOLO/CtcRWjT0HwTSQAmV0A==} + + '@unocss/eslint-config@0.59.4': + resolution: {integrity: sha512-a0FWOXQtdheYplZI+Oba2QMNWzCsfTUV/EuYEUDuKFARcsqpzO0PgRSH0MDHz0nROYmxeKkEKW/56dbAXmjBFQ==} + engines: {node: '>=14'} + + '@unocss/eslint-plugin@0.59.4': + resolution: {integrity: sha512-bWxr0ax0X8F97/JcQ8V34Zl4ZSPklMkYAExj+svfanng7i6ymBCmMDfSVcNjb7VJFP1ealNuEnJ9PJcV0N0aQQ==} + engines: {node: '>=14'} + + '@unocss/extractor-arbitrary-variants@0.59.4': + resolution: {integrity: sha512-RDe4FgMGJQ+tp9GLvhPHni7Cc2O0lHBRMElVlN8LoXJAdODMICdbrEPGJlEfrc+7x/QgVFoR895KpYJh3hIgGA==} + + '@unocss/inspector@0.59.4': + resolution: {integrity: sha512-QczJFNDiggmekkJyNcbcZIUVwlhvxz7ZwjnSf0w7K4znxfjKkZ1hNUbqLviM1HumkTKOdT27VISW7saN/ysO4w==} + + '@unocss/postcss@0.59.4': + resolution: {integrity: sha512-KVz+AD7McHKp7VEWHbFahhyyVEo0oP/e1vnuNSuPlHthe+1V2zfH6lps+iJcvfL2072r5J+0PvD/1kOp5ryUSg==} + engines: {node: '>=14'} + peerDependencies: + postcss: ^8.4.21 + + '@unocss/preset-attributify@0.59.4': + resolution: {integrity: sha512-BeogWuYaIakC1gmOZFFCjFVWmu/m3AqEX8UYQS6tY6lAaK2L4Qf4AstYBlT2zAMxy9LNxPDxFQrvfSfFk5Klsg==} + + '@unocss/preset-icons@0.59.4': + resolution: {integrity: sha512-Afjwh5oC4KRE8TNZDUkRK6hvvV1wKLrS1e5trniE0B0AM9HK3PBolQaIU7QmzPv6WQrog+MZgIwafg1eqsPUCA==} + + '@unocss/preset-mini@0.59.4': + resolution: {integrity: sha512-ZLywGrXi1OCr4My5vX2rLUb5Xgx6ufR9WTQOvpQJGBdIV/jnZn/pyE5avCs476SnOq2K172lnd8mFmTK7/zArA==} + + '@unocss/preset-tagify@0.59.4': + resolution: {integrity: sha512-vWMdTUoghOSmTbdmZtERssffmdUdOuhh4vUdl0R8Kv6KxB0PkvEFCu2FItn97nRJdSPlZSFxxDkaOIg9w+STNQ==} + + '@unocss/preset-typography@0.59.4': + resolution: {integrity: sha512-ZX9bxZUqlXK1qEDzO5lkK96ICt9itR/oNyn/7mMc1JPqwj263LumQMn5silocgzoLSUXEeq//L6GylqYjkL8GA==} + + '@unocss/preset-uno@0.59.4': + resolution: {integrity: sha512-G1f8ZluplvXZ3bERj+sM/8zzY//XD++nNOlAQNKOANSVht3qEoJebrfEiMClNpA5qW5VWOZhEhPkh0M7GsXtnA==} + + '@unocss/preset-web-fonts@0.59.4': + resolution: {integrity: sha512-ehutTjKHnf2KPmdatN42N9a8+y+glKSU3UlcBRNsVIIXVIlaBQuPVGZSPhnMtrKD17IgWylXq2K6RJK+ab0hZA==} + + '@unocss/preset-wind@0.59.4': + resolution: {integrity: sha512-CNX6w0ZpSQg/i1oF0/WKWzto8PtLqoknC5h8JmmcGb7VsyBQeV0oNnhbURxpbuMEhbv1MWVIGvk8a+P6y0rFkQ==} + + '@unocss/reset@0.59.4': + resolution: {integrity: sha512-Upy4xzdWl4RChbLAXBq1BoR4WqxXMoIfjvtcwSZcZK2sylXCFAseSWnyzJFdSiXPqNfmMuNgPXgiSxiQB+cmNA==} + + '@unocss/rule-utils@0.59.4': + resolution: {integrity: sha512-1qoLJlBWAkS4D4sg73990S1MT7E8E5md/YhopKjTQuEC9SyeVmEg+5pR/Xd8xhPKMqbcuBPl/DS8b6l/GQO56A==} + engines: {node: '>=14'} + + '@unocss/scope@0.59.4': + resolution: {integrity: sha512-wBQJ39kw4Tfj4km7AoGvSIobPKVnRZVsgc0bema5Y0PL3g1NeVQ/LopBI2zEJWdpxGXUWxSDsXm7BZo6qVlD/A==} + + '@unocss/transformer-attributify-jsx-babel@0.59.4': + resolution: {integrity: sha512-xtCRSgeTaDBiNJLVX7oOSFe63JiFB5nrdK23PHn3IlZM9O7Bxx4ZxI3MQJtFZFQNE+INFko+DVyY1WiFEm1p/Q==} + + '@unocss/transformer-attributify-jsx@0.59.4': + resolution: {integrity: sha512-m4b83utzKMfUQH/45V2QkjJoXd8Tu2pRP1nic91Xf7QRceyKDD+BxoTneo2JNC2K274cQu7HqqotnCm2aFfEGw==} + + '@unocss/transformer-compile-class@0.59.4': + resolution: {integrity: sha512-Vgk2OCLPW0pU+Uzr1IgDtHVspSBb+gPrQFkV+5gxHk9ZdKi3oYKxLuufVWYDSwv7o9yfQGbYrMH9YLsjRsnA7Q==} + + '@unocss/transformer-directives@0.59.4': + resolution: {integrity: sha512-nXUTEclUbs0vQ4KfLhKt4J/5SLSEq1az2FNlJmiXMmqmn75X89OrtCu2OJu9sGXhn+YyBApxgcSSdxmtpqMi1Q==} + + '@unocss/transformer-variant-group@0.59.4': + resolution: {integrity: sha512-9XLixxn1NRgP62Kj4R/NC/rpqhql5F2s6ulJ8CAMTEbd/NylVhEANluPGDVUGcLJ4cj6E02hFa8C1PLGSm7/xw==} + + '@unocss/vite@0.59.4': + resolution: {integrity: sha512-q7GN7vkQYn79n7vYIUlaa7gXGwc7pk0Qo3z3ZFwWGE43/DtZnn2Hwl5UjgBAgi9McA+xqHJEHRsJnI7HJPHUYA==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 + + '@vitejs/plugin-vue-jsx@3.1.0': + resolution: {integrity: sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 || ^5.0.0 + vue: ^3.0.0 + + '@vitejs/plugin-vue@5.0.4': + resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + + '@vitest/expect@1.5.3': + resolution: {integrity: sha512-y+waPz31pOFr3rD7vWTbwiLe5+MgsMm40jTZbQE8p8/qXyBX3CQsIXRx9XK12IbY7q/t5a5aM/ckt33b4PxK2g==} + + '@vitest/runner@1.5.3': + resolution: {integrity: sha512-7PlfuReN8692IKQIdCxwir1AOaP5THfNkp0Uc4BKr2na+9lALNit7ub9l3/R7MP8aV61+mHKRGiqEKRIwu6iiQ==} + + '@vitest/snapshot@1.5.3': + resolution: {integrity: sha512-K3mvIsjyKYBhNIDujMD2gfQEzddLe51nNOAf45yKRt/QFJcUIeTQd2trRvv6M6oCBHNVnZwFWbQ4yj96ibiDsA==} + + '@vitest/spy@1.5.3': + resolution: {integrity: sha512-Llj7Jgs6lbnL55WoshJUUacdJfjU2honvGcAJBxhra5TPEzTJH8ZuhI3p/JwqqfnTr4PmP7nDmOXP53MS7GJlg==} + + '@vitest/utils@1.5.3': + resolution: {integrity: sha512-rE9DTN1BRhzkzqNQO+kw8ZgfeEBCLXiHJwetk668shmNBpSagQxneT5eSqEBLP+cqSiAeecvQmbpFfdMyLcIQA==} + + '@vue-macros/common@1.10.2': + resolution: {integrity: sha512-WC66NPVh2mJWqm4L0l/u/cOqm4pNOIwVdMGnDYAH2rHcOWy5x68GkhpkYTBu1+xwCSeHWOQn1TCGGbD+98fFpA==} + engines: {node: '>=16.14.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + peerDependenciesMeta: + vue: + optional: true + + '@vue/babel-helper-vue-transform-on@1.2.2': + resolution: {integrity: sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==} + + '@vue/babel-plugin-jsx@1.2.2': + resolution: {integrity: sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + + '@vue/babel-plugin-resolve-type@1.2.2': + resolution: {integrity: sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@vue/compiler-core@3.4.21': + resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} + + '@vue/compiler-core@3.4.24': + resolution: {integrity: sha512-vbW/tgbwJYj62N/Ww99x0zhFTkZDTcGh3uwJEuadZ/nF9/xuFMC4693P9r+3sxGXISABpDKvffY5ApH9pmdd1A==} + + '@vue/compiler-core@3.4.26': + resolution: {integrity: sha512-N9Vil6Hvw7NaiyFUFBPXrAyETIGlQ8KcFMkyk6hW1Cl6NvoqvP+Y8p1Eqvx+UdqsnrnI9+HMUEJegzia3mhXmQ==} + + '@vue/compiler-dom@3.4.21': + resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} + + '@vue/compiler-dom@3.4.24': + resolution: {integrity: sha512-4XgABML/4cNndVsQndG6BbGN7+EoisDwi3oXNovqL/4jdNhwvP8/rfRMTb6FxkxIxUUtg6AI1/qZvwfSjxJiWA==} + + '@vue/compiler-dom@3.4.26': + resolution: {integrity: sha512-4CWbR5vR9fMg23YqFOhr6t6WB1Fjt62d6xdFPyj8pxrYub7d+OgZaObMsoxaF9yBUHPMiPFK303v61PwAuGvZA==} + + '@vue/compiler-sfc@3.4.21': + resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} + + '@vue/compiler-sfc@3.4.26': + resolution: {integrity: sha512-It1dp+FAOCgluYSVYlDn5DtZBxk1NCiJJfu2mlQqa/b+k8GL6NG/3/zRbJnHdhV2VhxFghaDq5L4K+1dakW6cw==} + + '@vue/compiler-ssr@3.4.21': + resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} + + '@vue/compiler-ssr@3.4.26': + resolution: {integrity: sha512-FNwLfk7LlEPRY/g+nw2VqiDKcnDTVdCfBREekF8X74cPLiWHUX6oldktf/Vx28yh4STNy7t+/yuLoMBBF7YDiQ==} + + '@vue/devtools-api@6.6.1': + resolution: {integrity: sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==} + + '@vue/devtools-core@7.1.3': + resolution: {integrity: sha512-pVbWi8pf2Z/fZPioYOIgu+cv9pQG55k4D8bL31ec+Wfe+pQR0ImFDu0OhHfch1Ra8uvLLrAZTF4IKeGAkmzD4A==} + + '@vue/devtools-kit@7.1.3': + resolution: {integrity: sha512-NFskFSJMVCBXTkByuk2llzI3KD3Blcm7WqiRorWjD6nClHPgkH5BobDH08rfulqq5ocRt5xV+3qOT1Q9FXJrwQ==} + peerDependencies: + vue: ^3.0.0 + + '@vue/devtools-shared@7.1.3': + resolution: {integrity: sha512-KJ3AfgjTn3tJz/XKF+BlVShNPecim3G21oHRue+YQOsooW+0s+qXvm09U09aO7yBza5SivL1QgxSrzAbiKWjhQ==} + + '@vue/reactivity@3.4.26': + resolution: {integrity: sha512-E/ynEAu/pw0yotJeLdvZEsp5Olmxt+9/WqzvKff0gE67tw73gmbx6tRkiagE/eH0UCubzSlGRebCbidB1CpqZQ==} + + '@vue/runtime-core@3.4.26': + resolution: {integrity: sha512-AFJDLpZvhT4ujUgZSIL9pdNcO23qVFh7zWCsNdGQBw8ecLNxOOnPcK9wTTIYCmBJnuPHpukOwo62a2PPivihqw==} + + '@vue/runtime-dom@3.4.26': + resolution: {integrity: sha512-UftYA2hUXR2UOZD/Fc3IndZuCOOJgFxJsWOxDkhfVcwLbsfh2CdXE2tG4jWxBZuDAs9J9PzRTUFt1PgydEtItw==} + + '@vue/server-renderer@3.4.26': + resolution: {integrity: sha512-xoGAqSjYDPGAeRWxeoYwqJFD/gw7mpgzOvSxEmjWaFO2rE6qpbD1PC172YRpvKhrihkyHJkNDADFXTfCyVGhKw==} + peerDependencies: + vue: 3.4.26 + + '@vue/shared@3.4.21': + resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} + + '@vue/shared@3.4.24': + resolution: {integrity: sha512-BW4tajrJBM9AGAknnyEw5tO2xTmnqgup0VTnDAMcxYmqOX0RG0b9aSUGAbEKolD91tdwpA6oCwbltoJoNzpItw==} + + '@vue/shared@3.4.26': + resolution: {integrity: sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==} + + '@vueuse/components@10.9.0': + resolution: {integrity: sha512-BHQpA0yIi3y7zKa1gYD0FUzLLkcRTqVhP8smnvsCK6GFpd94Nziq1XVPD7YpFeho0k5BzbBiNZF7V/DpkJ967A==} + + '@vueuse/core@10.9.0': + resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==} + + '@vueuse/core@9.13.0': + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} + + '@vueuse/integrations@10.9.0': + resolution: {integrity: sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==} + peerDependencies: + async-validator: '*' + axios: '*' + change-case: '*' + drauu: '*' + focus-trap: '*' + fuse.js: '*' + idb-keyval: '*' + jwt-decode: '*' + nprogress: '*' + qrcode: '*' + sortablejs: '*' + universal-cookie: '*' + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + + '@vueuse/metadata@10.9.0': + resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==} + + '@vueuse/metadata@9.13.0': + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} + + '@vueuse/shared@10.9.0': + resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==} + + '@vueuse/shared@9.13.0': + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + + acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + aggregate-error@4.0.1: + resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} + engines: {node: '>=12'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@6.2.0: + resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} + engines: {node: '>=14.16'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-each@1.0.1: + resolution: {integrity: sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==} + engines: {node: '>=0.10.0'} + + array-slice@1.1.0: + resolution: {integrity: sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==} + engines: {node: '>=0.10.0'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + ast-kit@0.12.1: + resolution: {integrity: sha512-O+33g7x6irsESUcd47KdfWUrS2F6aGp9KeVJFGj0YjIznfXpBxVGjA0w+y/1OKqX4mFOfmZ9Xpf1ixPT4n9xxw==} + engines: {node: '>=16.14.0'} + + ast-walker-scope@0.6.1: + resolution: {integrity: sha512-0ZdQEsSfH3mX4BFbRCc3xOBjx5bDbm73+aAdQOHerPQNf8K0XFMAv79ucd2BpnSc4UMyvBDixiroT8yjm2Y6bw==} + engines: {node: '>=16.14.0'} + + async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.6.8: + resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + browserslist-to-esbuild@2.1.1: + resolution: {integrity: sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + browserslist: '*' + + browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + c12@1.10.0: + resolution: {integrity: sha512-0SsG7UDhoRWcuSvKWHaXmu5uNjDCDN3nkQLRL4Q42IlFy+ze58FcCoI3uPwINXinkz7ZinbhEgyzYFw9u9ZV8g==} + + c8@9.1.0: + resolution: {integrity: sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==} + engines: {node: '>=14.14.0'} + hasBin: true + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + call-me-maybe@1.0.2: + resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001600: + resolution: {integrity: sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==} + + capital-case@1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + + chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + change-case@4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + + changelogen@0.5.5: + resolution: {integrity: sha512-IzgToIJ/R9NhVKmL+PW33ozYkv53bXvufDNUSH3GTKXq1iCHGgkbgbtqEWbo8tnWNnt7nPDpjL8PwSG2iS8RVw==} + hasBin: true + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + clean-stack@4.2.0: + resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} + engines: {node: '>=12'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cli-progress@3.12.0: + resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} + engines: {node: '>=4'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + commander@12.0.0: + resolution: {integrity: sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confbox@0.1.3: + resolution: {integrity: sha512-eH3ZxAihl1PhKfpr4VfEN6/vUd87fmgb6JkldHgg/YR6aEBhW63qUDgzP2Y6WM0UumdsYp5H3kibalXAdHfbgg==} + + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + + constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + + convert-gitmoji@0.1.5: + resolution: {integrity: sha512-4wqOafJdk2tqZC++cjcbGcaJ13BZ3kwldf06PTiAQRAB76Z1KJwZNL1SaRZMi2w1FM9RYTgZ6QErS8NUl/GBmQ==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + core-js@3.36.1: + resolution: {integrity: sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==} + + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + del@7.1.0: + resolution: {integrity: sha512-v2KyNk7efxhlyHpjEvfyxaAihKKK0nWCuf6ZtqZcFFpQRG0bJ12Qsr0RpvsICMjAAZ8DOVCxrlqpxISlMHC4Kg==} + engines: {node: '>=14.16'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + destr@2.0.3: + resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} + + detect-file@1.0.0: + resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} + engines: {node: '>=0.10.0'} + + detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + echarts@5.5.0: + resolution: {integrity: sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==} + + electron-to-chromium@1.4.715: + resolution: {integrity: sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==} + + element-plus@2.9.2: + resolution: {integrity: sha512-HS+Cc5mmy70DixJuoN3cMxPPoNWXkjHzUw2PcGmysk6NHQzzUtwi2Vc+dlmbmRxj3eNqgC1xpPQV5Nf9uDtQRg==} + peerDependencies: + vue: ^3.2.0 + + emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-stack-parser-es@0.1.1: + resolution: {integrity: sha512-g/9rfnvnagiNf+DRMHEVGuGuIBlCIMDFoTA616HaP2l9PlCjGjVhD98PNbVSJvmK4TttqT5mV5tInMhoFgi+aA==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@5.1.3: + resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-vue@9.25.0: + resolution: {integrity: sha512-tDWlx14bVe6Bs+Nnh3IGrD+hb11kf2nukfm6jLsmJIhmiRQ1SUaksvwY9U5MvPB0pcrg0QK0xapQkfITs3RKOA==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + expand-tilde@2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} + + extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + findup-sync@5.0.0: + resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==} + engines: {node: '>= 10.13.0'} + + fined@2.0.0: + resolution: {integrity: sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==} + engines: {node: '>= 10.13.0'} + + flagged-respawn@2.0.0: + resolution: {integrity: sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==} + engines: {node: '>= 10.13.0'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-in@1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + + for-own@1.0.0: + resolution: {integrity: sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==} + engines: {node: '>=0.10.0'} + + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + giget@1.2.3: + resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} + hasBin: true + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + + global-modules@1.0.0: + resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} + engines: {node: '>=0.10.0'} + + global-prefix@1.0.2: + resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} + engines: {node: '>=0.10.0'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} + + gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + header-case@2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + + homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + husky@9.0.11: + resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} + engines: {node: '>=18'} + hasBin: true + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + inquirer@9.2.16: + resolution: {integrity: sha512-qzgbB+yNjgSzk2omeqMDtO9IgJet/UL67luT1MaaggRpGK73DBQct5Q4pipwFQcIKK1GbMODYd4UfsRCkSP1DA==} + engines: {node: '>=18'} + + interpret@3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} + + is-absolute@1.0.0: + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-cwd@3.0.0: + resolution: {integrity: sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-relative@1.0.0: + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-unc-path@1.0.0: + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.0.0: + resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} + engines: {node: '>=18'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isbinaryfile@5.0.2: + resolution: {integrity: sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==} + engines: {node: '>= 18.0.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + ityped@1.0.3: + resolution: {integrity: sha512-46Qnh3qs+6EJlWDHmvWRW6qiz5jFy2mkh9UvtTvQmLJMZIjKrdz4du68le7hLX4tAWCp6QTKiq/OuLv6huHxZg==} + + jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@8.0.3: + resolution: {integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + liftoff@4.0.0: + resolution: {integrity: sha512-rMGwYF8q7g2XhG2ulBmmJgWv25qBsqRbDn5gH0+wnuyeFt7QBJlHJmtg5qEdn4pN6WVAUMgXnIxytMFRX9c1aA==} + engines: {node: '>=10.13.0'} + + lightningcss-darwin-arm64@1.24.1: + resolution: {integrity: sha512-1jQ12jBy+AE/73uGQWGSafK5GoWgmSiIQOGhSEXiFJSZxzV+OXIx+a9h2EYHxdJfX864M+2TAxWPWb0Vv+8y4w==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.24.1: + resolution: {integrity: sha512-R4R1d7VVdq2mG4igMU+Di8GPf0b64ZLnYVkubYnGG0Qxq1KaXQtAzcLI43EkpnoWvB/kUg8JKCWH4S13NfiLcQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.24.1: + resolution: {integrity: sha512-z6NberUUw5ALES6Ixn2shmjRRrM1cmEn1ZQPiM5IrZ6xHHL5a1lPin9pRv+w6eWfcrEo+qGG6R9XfJrpuY3e4g==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.24.1: + resolution: {integrity: sha512-NLQLnBQW/0sSg74qLNI8F8QKQXkNg4/ukSTa+XhtkO7v3BnK19TS1MfCbDHt+TTdSgNEBv0tubRuapcKho2EWw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.24.1: + resolution: {integrity: sha512-AQxWU8c9E9JAjAi4Qw9CvX2tDIPjgzCTrZCSXKELfs4mCwzxRkHh2RCxX8sFK19RyJoJAjA/Kw8+LMNRHS5qEg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.24.1: + resolution: {integrity: sha512-JCgH/SrNrhqsguUA0uJUM1PvN5+dVuzPIlXcoWDHSv2OU/BWlj2dUYr3XNzEw748SmNZPfl2NjQrAdzaPOn1lA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.24.1: + resolution: {integrity: sha512-TYdEsC63bHV0h47aNRGN3RiK7aIeco3/keN4NkoSQ5T8xk09KHuBdySltWAvKLgT8JvR+ayzq8ZHnL1wKWY0rw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.24.1: + resolution: {integrity: sha512-HLfzVik3RToot6pQ2Rgc3JhfZkGi01hFetHt40HrUMoeKitLoqUUT5owM6yTZPTytTUW9ukLBJ1pc3XNMSvlLw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-x64-msvc@1.24.1: + resolution: {integrity: sha512-joEupPjYJ7PjZtDsS5lzALtlAudAbgIBMGJPNeFe5HfdmJXFd13ECmEM+5rXNxYVMRHua2w8132R6ab5Z6K9Ow==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.24.1: + resolution: {integrity: sha512-kUpHOLiH5GB0ERSv4pxqlL0RYKnOXtgGtVe7shDGfhS0AZ4D1ouKFYAcLcZhql8aMspDNzaUCumGHZ78tb2fTg==} + engines: {node: '>= 12.0.0'} + + lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} + + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + + lint-staged@15.2.2: + resolution: {integrity: sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==} + engines: {node: '>=18.12.0'} + hasBin: true + + listr2@8.0.1: + resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==} + engines: {node: '>=18.0.0'} + + local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + + local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash-unified@1.0.3: + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + + log-update@6.0.0: + resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} + engines: {node: '>=18'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + m-type-tools@0.5.3: + resolution: {integrity: sha512-UycDrrmHNEqKn5KZblX+fGP2tMNyaZPIBPCE+H4aE+adD3LoKDrVir1hwZfa049yIZ/q3UoLpcWs7Mgqi5G9ig==} + + magic-string-ast@0.3.0: + resolution: {integrity: sha512-0shqecEPgdFpnI3AP90epXyxZy9g6CRZ+SZ7BcqFwYmtFEnZ1jpevcV5HoyVnlDS9gCnc1UIg3Rsvp3Ci7r8OA==} + engines: {node: '>=16.14.0'} + + magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + + magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} + + magic-string@0.30.9: + resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==} + engines: {node: '>=12'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-iterator@1.0.1: + resolution: {integrity: sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==} + engines: {node: '>=0.10.0'} + + map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.6.1: + resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} + + mockjs@1.1.0: + resolution: {integrity: sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==} + hasBin: true + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-fetch-native@1.6.4: + resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + + node-plop@0.32.0: + resolution: {integrity: sha512-lKFSRSRuDHhwDKMUobdsvaWCbbDRbV3jMUSMiajQSQux1aNUevAZVxUHc2JERI//W8ABPRbi3ebYuSuIzkNIpQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-wheel-es@1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nprogress@0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + nypm@0.3.8: + resolution: {integrity: sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + object.defaults@1.1.0: + resolution: {integrity: sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==} + engines: {node: '>=0.10.0'} + + object.map@1.0.1: + resolution: {integrity: sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==} + engines: {node: '>=0.10.0'} + + object.pick@1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + + ofetch@1.3.4: + resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==} + + ohash@1.1.3: + resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + + open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + + optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + ora@8.0.1: + resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==} + engines: {node: '>=18'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@5.5.0: + resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} + engines: {node: '>=12'} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-filepath@1.0.2: + resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} + engines: {node: '>=0.8'} + + parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-case@3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-root-regex@0.1.2: + resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} + engines: {node: '>=0.10.0'} + + path-root@0.1.1: + resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} + engines: {node: '>=0.10.0'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pinia-plugin-persistedstate@3.2.1: + resolution: {integrity: sha512-MK++8LRUsGF7r45PjBFES82ISnPzyO6IZx3CH5vyPseFLZCk1g2kgx6l/nW8pEBKxxd4do0P6bJw+mUSZIEZUQ==} + peerDependencies: + pinia: ^2.0.0 + + pinia@2.1.7: + resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==} + peerDependencies: + '@vue/composition-api': ^1.4.0 + typescript: '>=4.4.4' + vue: ^2.6.14 || ^3.3.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + typescript: + optional: true + + pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + + plop@4.0.1: + resolution: {integrity: sha512-5n8QU93kvL/ObOzBcPAB1siVFtAH1TZM6TntJ3JK5kXT0jIgnQV+j+uaOWWFJlg1cNkzLYm8klgASF65K36q9w==} + engines: {node: '>=18'} + hasBin: true + + postcss-selector-parser@6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} + engines: {node: '>=4'} + + postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + prism-theme-vars@0.2.5: + resolution: {integrity: sha512-/D8gBTScYzi9afwE6v3TC1U/1YFZ6k+ly17mtVRdLpGy7E79YjJJWkXFgUDHJ2gDksV/ZnXF7ydJ4TvoDm2z/Q==} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + rc9@2.1.1: + resolution: {integrity: sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==} + + react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + rechoir@0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resize-detector@0.3.0: + resolution: {integrity: sha512-R/tCuvuOHQ8o2boRP6vgx8hXCCy87H1eY9V5imBYeVNyNVpuL9ciReSccLj2gDcax9+2weXy3bc8Vv+NRXeEvQ==} + + resolve-dir@1.0.1: + resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + + rollup@4.13.0: + resolution: {integrity: sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + + sentence-case@3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-git@3.24.0: + resolution: {integrity: sha512-QqAKee9Twv+3k8IFOFfPB2hnk6as6Y6ACUpwCtQvRYBAes23Wv3SZlHVobAzqcE8gfsisCvPw3HGW3HYM+VYYw==} + + sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} + engines: {node: '>= 10'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@7.1.0: + resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} + engines: {node: '>=18'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + + strip-literal@2.0.0: + resolution: {integrity: sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + + synckit@0.8.8: + resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} + engines: {node: ^14.18.0 || >=16.0.0} + + synckit@0.9.0: + resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} + engines: {node: ^14.18.0 || >=16.0.0} + + systemjs@6.14.3: + resolution: {integrity: sha512-hQv45irdhXudAOr8r6SVSpJSGtogdGZUbJBRKCE5nsIS7tsxxvnIHqT4IOPWj+P+HcSzeWzHlGCGpmhPDIKe+w==} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + taze@0.13.7: + resolution: {integrity: sha512-7of7fg1+2O5fm4eykJdCOkr9D0TEjZeXDdgm8hST4C+iFxa24Vzjm3Dk5TQ7JjId2ut+yRE2KE++YaSY7Vh5ng==} + hasBin: true + + terser@5.31.0: + resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + tinybench@2.6.0: + resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} + + tinypool@0.8.3: + resolution: {integrity: sha512-Ud7uepAklqRH1bvwy22ynrliC7Dljz7Tm8M/0RBUW+YRa4YHhZ6e4PpgE+fu1zr/WqB1kbeuVrdfeuyIBpy4tw==} + engines: {node: '>=14.0.0'} + + tinyspy@2.2.1: + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + engines: {node: '>=14.0.0'} + + title-case@3.0.3: + resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + + titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + tslib@2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + + typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + ufo@1.5.3: + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + + uglify-js@3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + + unc-path-regex@0.1.2: + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + + unconfig@0.3.13: + resolution: {integrity: sha512-N9Ph5NC4+sqtcOjPfHrRcHekBCadCXWTBzp2VYYbySOHW0PfD9XLCeXshTXjkPYwLrBr9AtSeU0CZmkYECJhng==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + unimport@3.7.1: + resolution: {integrity: sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unocss@0.59.4: + resolution: {integrity: sha512-QmCVjRObvVu/gsGrJGVt0NnrdhFFn314BUZn2WQyXV9rIvHLRmG5bIu0j5vibJkj7ZhFchTrnTM1pTFXP1xt5g==} + engines: {node: '>=14'} + peerDependencies: + '@unocss/webpack': 0.59.4 + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 + peerDependenciesMeta: + '@unocss/webpack': + optional: true + vite: + optional: true + + unplugin-auto-import@0.17.5: + resolution: {integrity: sha512-fHNDkDSxv3PGagX1wmKBYBkgaM4AKAgZmdJw/bxjhNljx9KSXSgHpGfX0MwUrq9qw6q1bhHIZVWyOwoY2koo4w==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': ^3.2.2 + '@vueuse/core': '*' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@vueuse/core': + optional: true + + unplugin-vue-components@0.26.0: + resolution: {integrity: sha512-s7IdPDlnOvPamjunVxw8kNgKNK8A5KM1YpK5j/p97jEKTjlPNrA0nZBiSfAKKlK1gWZuyWXlKL5dk3EDw874LQ==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + '@nuxt/kit': ^3.2.2 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + '@nuxt/kit': + optional: true + + unplugin-vue-markdown@0.26.2: + resolution: {integrity: sha512-FjmhLZ+RRx7PFmfBCTwNUZLAj0Y9z0y/j79rTgYuXH9u+K6tZBFB+GpFFBm+4yMQ0la3MNCl7KHbaSvfna2bEA==} + peerDependencies: + vite: ^2.0.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 + + unplugin-vue-router@0.8.6: + resolution: {integrity: sha512-yd7A4qIT2ZvCELchL32qVueFXx8BE9zD0UEzWJjHAlVy2Xb2luPkNJG6uCAeqdObCS1lSKTOFAFmQXAxdchqTw==} + peerDependencies: + vue-router: ^4.3.0 + peerDependenciesMeta: + vue-router: + optional: true + + unplugin@1.10.0: + resolution: {integrity: sha512-CuZtvvO8ua2Wl+9q2jEaqH6m3DoQ38N7pvBYQbbaeNlWGvK2l6GHiKi29aIHDPoSxdUzQ7Unevf1/ugil5X6Pg==} + engines: {node: '>=14.0.0'} + + unplugin@1.10.1: + resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==} + engines: {node: '>=14.0.0'} + + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + + update-browserslist-db@1.0.13: + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + upper-case-first@2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + + upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + v8-to-istanbul@9.2.0: + resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + engines: {node: '>=10.12.0'} + + v8flags@4.0.1: + resolution: {integrity: sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==} + engines: {node: '>= 10.13.0'} + + vite-auto-import-resolvers@3.2.1: + resolution: {integrity: sha512-xXUl1VAJCqHIqU7xzkMNWvQ4cb6MjKHSs4OyjgfxNeJNFqu2hVKJnVxWr8co6I4Ikdvw0CdAy5M3wj4UWGPwVA==} + engines: {node: '>=16'} + peerDependencies: + unplugin-auto-import: '>=0.6.9' + vite: '>=2.9.1' + + vite-hot-client@0.2.3: + resolution: {integrity: sha512-rOGAV7rUlUHX89fP2p2v0A2WWvV3QMX2UYq0fRqsWSvFvev4atHWqjwGoKaZT1VTKyLGk533ecu3eyd0o59CAg==} + peerDependencies: + vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 + + vite-layers@0.5.2: + resolution: {integrity: sha512-/FFYE7kCsYPNBIEfGmHFf1a2UElFjDM/IIGgZDwS6bmEg7xlxuv1dqNgLoSUPy6W1fRs8RmouHry0W9GBt6ubg==} + peerDependencies: + vite: '>=3.0.0' + + vite-node@1.5.3: + resolution: {integrity: sha512-axFo00qiCpU/JLd8N1gu9iEYL3xTbMbMrbe5nDp9GL0nb6gurIdZLkkFogZXWnE8Oyy5kfSLwNVIcVsnhE7lgQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + + vite-plugin-compression@0.5.1: + resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} + peerDependencies: + vite: '>=2.0.0' + + vite-plugin-env-types@0.1.4: + resolution: {integrity: sha512-u+sZv4Q8HB51cT0EsZtjqdmgSDytZoo1AyQsPmIj8QPM9QjtdG3YE1eHkuAvCapf/llagvZbC6M+Ekhbt3bw9w==} + peerDependencies: + vite: '>=2.0.0' + + vite-plugin-inspect@0.8.4: + resolution: {integrity: sha512-G0N3rjfw+AiiwnGw50KlObIHYWfulVwaCBUBLh2xTW9G1eM9ocE5olXkEYUbwyTmX+azM8duubi+9w5awdCz+g==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': '*' + vite: ^3.1.0 || ^4.0.0 || ^5.0.0-0 + peerDependenciesMeta: + '@nuxt/kit': + optional: true + + vite-plugin-legacy-swc@1.1.0: + resolution: {integrity: sha512-ELJGMso5mukCSj7//P13HYlo2tmo0WsXR7rs0r4oRO5s8xmQQi0J26UAjBsnbXAumTIUT71MP4uYWvI4zjs8Eg==} + peerDependencies: + vite: '>=4.0.0' + + vite-plugin-use-modules@1.4.8: + resolution: {integrity: sha512-SydvdNUuwuwk9YjeA2sE6acK2xmTOgpVarEiTcccczcNL7JIMZ2C3Cbw2bvmkH2Od8JDtdIxIpMvswJ8rlEufA==} + peerDependencies: + vite: '>=2.0.0' + vue: '>=3.0.0' + + vite-plugin-vue-devtools@7.1.3: + resolution: {integrity: sha512-qv8Z4yok9RYo6TEs89WnIAlmTHby/+XTim8tlSnMs3lAPcQqqcl/wGRY8gAeYrGCANngOqO+VuabW3Jb1HZtyw==} + engines: {node: '>=v14.21.3'} + peerDependencies: + vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0 + + vite-plugin-vue-inspector@5.0.1: + resolution: {integrity: sha512-R93P8iFa6BPODhc/aOtO04A8FFMMyFIfm8ZVSmN+8vU1TgwsHya734APGpX4fVHSPX2aVwYyiezXBUYQ0Opsqw==} + peerDependencies: + vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 + + vite-plugin-vue-meta-layouts@0.4.3: + resolution: {integrity: sha512-KlC1gtgw+a8h+o99QsnqnGCkQp4FxVdm0P7vuMZIqYNLKywSnbRLrKQ+WATB25efDldpfBrNB1J8OgurHi3LBg==} + peerDependencies: + vite: '>=2.0.0' + vue-router: '>=4.0.14' + + vite@5.2.10: + resolution: {integrity: sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@1.5.3: + resolution: {integrity: sha512-2oM7nLXylw3mQlW6GXnRriw+7YvZFk/YNV8AxIC3Z3MfFbuziLGWP9GPxxu/7nRlXhqyxBikpamr+lEEj1sUEw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 1.5.3 + '@vitest/ui': 1.5.3 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + vue-demi@0.13.11: + resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-demi@0.14.7: + resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-echarts@6.7.1: + resolution: {integrity: sha512-HYn54QBk1ILaQ+qA1PQGHwm3MsEFTD5NN9bmgk6wco8LcwKLnRC4HRM0ualYDGOJcCccTpnqD5DvIG0UH1+wDQ==} + peerDependencies: + '@vue/composition-api': ^1.0.5 + '@vue/runtime-core': ^3.0.0 + echarts: ^5.4.1 + vue: ^2.6.12 || ^3.1.1 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + '@vue/runtime-core': + optional: true + + vue-eslint-parser@9.4.2: + resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + vue-request@2.0.4: + resolution: {integrity: sha512-+Tu5rDy6ItF9UdD21Mmbjiq5Pq6NZSN9juH72hNQTMn1whHh4KZPTKWVLK2YS4nzbuEnPs+82G91AA2Fgd93mg==} + engines: {node: '>=14'} + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^2.0.0 || >=3.0.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-router@4.3.2: + resolution: {integrity: sha512-hKQJ1vDAZ5LVkKEnHhmm1f9pMiWIBNGF5AwU67PdH7TyXCj/a4hTccuUuYCAMgJK6rO/NVYtQIEN3yL8CECa7Q==} + peerDependencies: + vue: ^3.2.0 + + vue-toastification@2.0.0-rc.5: + resolution: {integrity: sha512-q73e5jy6gucEO/U+P48hqX+/qyXDozAGmaGgLFm5tXX4wJBcVsnGp4e/iJqlm9xzHETYOilUuwOUje2Qg1JdwA==} + peerDependencies: + vue: ^3.0.2 + + vue@3.4.26: + resolution: {integrity: sha512-bUIq/p+VB+0xrJubaemrfhk1/FiW9iX+pDV+62I/XJ6EkspAO9/DXEjbDFoe8pIfOZBqfk45i9BMc41ptP/uRg==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.6.1: + resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + + yaml@2.4.1: + resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + + zrender@5.5.0: + resolution: {integrity: sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==} + +snapshots: + + '@aashutoshrathi/word-wrap@1.2.6': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@antfu/install-pkg@0.1.1': + dependencies: + execa: 5.1.1 + find-up: 5.0.0 + + '@antfu/ni@0.21.12': {} + + '@antfu/utils@0.7.7': {} + + '@babel/code-frame@7.24.2': + dependencies: + '@babel/highlight': 7.24.2 + picocolors: 1.0.0 + + '@babel/compat-data@7.24.1': {} + + '@babel/core@7.24.3': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.1 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.3) + '@babel/helpers': 7.24.1 + '@babel/parser': 7.24.1 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/core@7.24.4': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helpers': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.24.1': + dependencies: + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/generator@7.24.4': + dependencies: + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-annotate-as-pure@7.22.5': + dependencies: + '@babel/types': 7.24.0 + + '@babel/helper-compilation-targets@7.23.6': + dependencies: + '@babel/compat-data': 7.24.1 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.23.0 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.24.1(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.3) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.24.1(@babel/core@7.24.4)': + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + + '@babel/helper-environment-visitor@7.22.20': {} + + '@babel/helper-function-name@7.23.0': + dependencies: + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 + + '@babel/helper-hoist-variables@7.22.5': + dependencies: + '@babel/types': 7.24.0 + + '@babel/helper-member-expression-to-functions@7.23.0': + dependencies: + '@babel/types': 7.24.0 + + '@babel/helper-module-imports@7.22.15': + dependencies: + '@babel/types': 7.24.0 + + '@babel/helper-module-imports@7.24.3': + dependencies: + '@babel/types': 7.24.0 + + '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + + '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4)': + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + + '@babel/helper-optimise-call-expression@7.22.5': + dependencies: + '@babel/types': 7.24.0 + + '@babel/helper-plugin-utils@7.24.0': {} + + '@babel/helper-replace-supers@7.24.1(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + + '@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4)': + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + + '@babel/helper-simple-access@7.22.5': + dependencies: + '@babel/types': 7.24.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': + dependencies: + '@babel/types': 7.24.0 + + '@babel/helper-split-export-declaration@7.22.6': + dependencies: + '@babel/types': 7.24.0 + + '@babel/helper-string-parser@7.24.1': {} + + '@babel/helper-validator-identifier@7.22.20': {} + + '@babel/helper-validator-option@7.23.5': {} + + '@babel/helpers@7.24.1': + dependencies: + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.24.4': + dependencies: + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + transitivePeerDependencies: + - supports-color + + '@babel/highlight@7.24.2': + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.0 + + '@babel/parser@7.24.1': + dependencies: + '@babel/types': 7.24.0 + + '@babel/parser@7.24.4': + dependencies: + '@babel/types': 7.24.0 + + '@babel/plugin-proposal-decorators@7.24.1(@babel/core@7.24.4)': + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-decorators': 7.24.1(@babel/core@7.24.4) + + '@babel/plugin-syntax-decorators@7.24.1(@babel/core@7.24.4)': + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + + '@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.4)': + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4)': + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + + '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-plugin-utils': 7.24.0 + + '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4)': + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + + '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-plugin-utils': 7.24.0 + + '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4)': + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + + '@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.4)': + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-simple-access': 7.22.5 + + '@babel/plugin-transform-typescript@7.24.1(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.3) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.3) + + '@babel/plugin-transform-typescript@7.24.1(@babel/core@7.24.4)': + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.24.1(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) + + '@babel/preset-typescript@7.24.1(@babel/core@7.24.4)': + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-typescript': 7.24.1(@babel/core@7.24.4) + + '@babel/template@7.24.0': + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + + '@babel/traverse@7.24.1': + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.24.0': + dependencies: + '@babel/helper-string-parser': 7.24.1 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + '@bcoe/v8-coverage@0.2.3': {} + + '@ctrl/tinycolor@3.6.1': {} + + '@element-plus/icons-vue@2.3.1(vue@3.4.26(typescript@5.4.5))': + dependencies: + vue: 3.4.26(typescript@5.4.5) + + '@esbuild/aix-ppc64@0.20.2': + optional: true + + '@esbuild/android-arm64@0.20.2': + optional: true + + '@esbuild/android-arm@0.20.2': + optional: true + + '@esbuild/android-x64@0.20.2': + optional: true + + '@esbuild/darwin-arm64@0.20.2': + optional: true + + '@esbuild/darwin-x64@0.20.2': + optional: true + + '@esbuild/freebsd-arm64@0.20.2': + optional: true + + '@esbuild/freebsd-x64@0.20.2': + optional: true + + '@esbuild/linux-arm64@0.20.2': + optional: true + + '@esbuild/linux-arm@0.20.2': + optional: true + + '@esbuild/linux-ia32@0.20.2': + optional: true + + '@esbuild/linux-loong64@0.20.2': + optional: true + + '@esbuild/linux-mips64el@0.20.2': + optional: true + + '@esbuild/linux-ppc64@0.20.2': + optional: true + + '@esbuild/linux-riscv64@0.20.2': + optional: true + + '@esbuild/linux-s390x@0.20.2': + optional: true + + '@esbuild/linux-x64@0.20.2': + optional: true + + '@esbuild/netbsd-x64@0.20.2': + optional: true + + '@esbuild/openbsd-x64@0.20.2': + optional: true + + '@esbuild/sunos-x64@0.20.2': + optional: true + + '@esbuild/win32-arm64@0.20.2': + optional: true + + '@esbuild/win32-ia32@0.20.2': + optional: true + + '@esbuild/win32-x64@0.20.2': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.10.0': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.0': {} + + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 + + '@floating-ui/dom@1.6.12': + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 + + '@floating-ui/utils@0.2.8': {} + + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.2 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.2': {} + + '@iconify/types@2.0.0': {} + + '@iconify/utils@2.1.23': + dependencies: + '@antfu/install-pkg': 0.1.1 + '@antfu/utils': 0.7.7 + '@iconify/types': 2.0.0 + debug: 4.3.4 + kolorist: 1.8.0 + local-pkg: 0.5.0 + mlly: 1.6.1 + transitivePeerDependencies: + - supports-color + + '@istanbuljs/schema@0.1.3': {} + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@jsdevtools/ez-spawn@3.0.4': + dependencies: + call-me-maybe: 1.0.2 + cross-spawn: 7.0.3 + string-argv: 0.3.2 + type-detect: 4.0.8 + + '@kwsites/file-exists@1.1.1': + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@kwsites/promise-deferred@1.1.1': {} + + '@ljharb/through@2.3.13': + dependencies: + call-bind: 1.0.7 + + '@mdit-vue/plugin-component@2.1.2': + dependencies: + '@types/markdown-it': 14.0.1 + markdown-it: 14.1.0 + + '@mdit-vue/plugin-frontmatter@2.1.2': + dependencies: + '@mdit-vue/types': 2.1.0 + '@types/markdown-it': 14.0.1 + gray-matter: 4.0.3 + markdown-it: 14.1.0 + + '@mdit-vue/types@2.1.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@pkgr/core@0.1.1': {} + + '@polka/url@1.0.0-next.25': {} + + '@rollup/pluginutils@5.1.0(rollup@4.13.0)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 4.13.0 + + '@rollup/rollup-android-arm-eabi@4.13.0': + optional: true + + '@rollup/rollup-android-arm64@4.13.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.13.0': + optional: true + + '@rollup/rollup-darwin-x64@4.13.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.13.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.13.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.13.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.13.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.13.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.13.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.13.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.13.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.13.0': + optional: true + + '@sinclair/typebox@0.27.8': {} + + '@swc/core-darwin-arm64@1.4.8': + optional: true + + '@swc/core-darwin-x64@1.4.8': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.4.8': + optional: true + + '@swc/core-linux-arm64-gnu@1.4.8': + optional: true + + '@swc/core-linux-arm64-musl@1.4.8': + optional: true + + '@swc/core-linux-x64-gnu@1.4.8': + optional: true + + '@swc/core-linux-x64-musl@1.4.8': + optional: true + + '@swc/core-win32-arm64-msvc@1.4.8': + optional: true + + '@swc/core-win32-ia32-msvc@1.4.8': + optional: true + + '@swc/core-win32-x64-msvc@1.4.8': + optional: true + + '@swc/core@1.4.8': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.6 + optionalDependencies: + '@swc/core-darwin-arm64': 1.4.8 + '@swc/core-darwin-x64': 1.4.8 + '@swc/core-linux-arm-gnueabihf': 1.4.8 + '@swc/core-linux-arm64-gnu': 1.4.8 + '@swc/core-linux-arm64-musl': 1.4.8 + '@swc/core-linux-x64-gnu': 1.4.8 + '@swc/core-linux-x64-musl': 1.4.8 + '@swc/core-win32-arm64-msvc': 1.4.8 + '@swc/core-win32-ia32-msvc': 1.4.8 + '@swc/core-win32-x64-msvc': 1.4.8 + + '@swc/counter@0.1.3': {} + + '@swc/types@0.1.6': + dependencies: + '@swc/counter': 0.1.3 + + '@sxzz/popperjs-es@2.11.7': {} + + '@types/estree@1.0.5': {} + + '@types/fined@1.1.5': {} + + '@types/inquirer@9.0.7': + dependencies: + '@types/through': 0.0.33 + rxjs: 7.8.1 + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/ityped@1.0.3': {} + + '@types/json-schema@7.0.15': {} + + '@types/liftoff@4.0.3': + dependencies: + '@types/fined': 1.1.5 + '@types/node': 20.12.7 + + '@types/linkify-it@3.0.5': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.14 + + '@types/lodash@4.17.14': {} + + '@types/markdown-it@14.0.1': + dependencies: + '@types/linkify-it': 3.0.5 + '@types/mdurl': 1.0.5 + + '@types/mdurl@1.0.5': {} + + '@types/node@20.12.7': + dependencies: + undici-types: 5.26.5 + + '@types/semver@7.5.8': {} + + '@types/through@0.0.33': + dependencies: + '@types/node': 20.12.7 + + '@types/web-bluetooth@0.0.16': {} + + '@types/web-bluetooth@0.0.20': {} + + '@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.8.0 + debug: 4.3.4 + eslint: 8.57.0 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@7.8.0': + dependencies: + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/visitor-keys': 7.8.0 + + '@typescript-eslint/types@7.8.0': {} + + '@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/visitor-keys': 7.8.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.4 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@7.8.0(eslint@8.57.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) + eslint: 8.57.0 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@7.8.0': + dependencies: + '@typescript-eslint/types': 7.8.0 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.2.0': {} + + '@unocss/astro@0.59.4(rollup@4.13.0)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0))': + dependencies: + '@unocss/core': 0.59.4 + '@unocss/reset': 0.59.4 + '@unocss/vite': 0.59.4(rollup@4.13.0)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)) + optionalDependencies: + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + transitivePeerDependencies: + - rollup + + '@unocss/cli@0.59.4(rollup@4.13.0)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@rollup/pluginutils': 5.1.0(rollup@4.13.0) + '@unocss/config': 0.59.4 + '@unocss/core': 0.59.4 + '@unocss/preset-uno': 0.59.4 + cac: 6.7.14 + chokidar: 3.6.0 + colorette: 2.0.20 + consola: 3.2.3 + fast-glob: 3.3.2 + magic-string: 0.30.10 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + transitivePeerDependencies: + - rollup + + '@unocss/config@0.59.4': + dependencies: + '@unocss/core': 0.59.4 + unconfig: 0.3.13 + + '@unocss/core@0.59.4': {} + + '@unocss/eslint-config@0.59.4(eslint@8.57.0)(typescript@5.4.5)': + dependencies: + '@unocss/eslint-plugin': 0.59.4(eslint@8.57.0)(typescript@5.4.5) + transitivePeerDependencies: + - eslint + - supports-color + - typescript + + '@unocss/eslint-plugin@0.59.4(eslint@8.57.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@unocss/config': 0.59.4 + '@unocss/core': 0.59.4 + magic-string: 0.30.10 + synckit: 0.9.0 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + + '@unocss/extractor-arbitrary-variants@0.59.4': + dependencies: + '@unocss/core': 0.59.4 + + '@unocss/inspector@0.59.4': + dependencies: + '@unocss/core': 0.59.4 + '@unocss/rule-utils': 0.59.4 + gzip-size: 6.0.0 + sirv: 2.0.4 + + '@unocss/postcss@0.59.4(postcss@8.4.38)': + dependencies: + '@unocss/config': 0.59.4 + '@unocss/core': 0.59.4 + '@unocss/rule-utils': 0.59.4 + css-tree: 2.3.1 + fast-glob: 3.3.2 + magic-string: 0.30.10 + postcss: 8.4.38 + + '@unocss/preset-attributify@0.59.4': + dependencies: + '@unocss/core': 0.59.4 + + '@unocss/preset-icons@0.59.4': + dependencies: + '@iconify/utils': 2.1.23 + '@unocss/core': 0.59.4 + ofetch: 1.3.4 + transitivePeerDependencies: + - supports-color + + '@unocss/preset-mini@0.59.4': + dependencies: + '@unocss/core': 0.59.4 + '@unocss/extractor-arbitrary-variants': 0.59.4 + '@unocss/rule-utils': 0.59.4 + + '@unocss/preset-tagify@0.59.4': + dependencies: + '@unocss/core': 0.59.4 + + '@unocss/preset-typography@0.59.4': + dependencies: + '@unocss/core': 0.59.4 + '@unocss/preset-mini': 0.59.4 + + '@unocss/preset-uno@0.59.4': + dependencies: + '@unocss/core': 0.59.4 + '@unocss/preset-mini': 0.59.4 + '@unocss/preset-wind': 0.59.4 + '@unocss/rule-utils': 0.59.4 + + '@unocss/preset-web-fonts@0.59.4': + dependencies: + '@unocss/core': 0.59.4 + ofetch: 1.3.4 + + '@unocss/preset-wind@0.59.4': + dependencies: + '@unocss/core': 0.59.4 + '@unocss/preset-mini': 0.59.4 + '@unocss/rule-utils': 0.59.4 + + '@unocss/reset@0.59.4': {} + + '@unocss/rule-utils@0.59.4': + dependencies: + '@unocss/core': 0.59.4 + magic-string: 0.30.10 + + '@unocss/scope@0.59.4': {} + + '@unocss/transformer-attributify-jsx-babel@0.59.4': + dependencies: + '@babel/core': 7.24.4 + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) + '@babel/preset-typescript': 7.24.1(@babel/core@7.24.4) + '@unocss/core': 0.59.4 + transitivePeerDependencies: + - supports-color + + '@unocss/transformer-attributify-jsx@0.59.4': + dependencies: + '@unocss/core': 0.59.4 + + '@unocss/transformer-compile-class@0.59.4': + dependencies: + '@unocss/core': 0.59.4 + + '@unocss/transformer-directives@0.59.4': + dependencies: + '@unocss/core': 0.59.4 + '@unocss/rule-utils': 0.59.4 + css-tree: 2.3.1 + + '@unocss/transformer-variant-group@0.59.4': + dependencies: + '@unocss/core': 0.59.4 + + '@unocss/vite@0.59.4(rollup@4.13.0)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@rollup/pluginutils': 5.1.0(rollup@4.13.0) + '@unocss/config': 0.59.4 + '@unocss/core': 0.59.4 + '@unocss/inspector': 0.59.4 + '@unocss/scope': 0.59.4 + '@unocss/transformer-directives': 0.59.4 + chokidar: 3.6.0 + fast-glob: 3.3.2 + magic-string: 0.30.10 + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + transitivePeerDependencies: + - rollup + + '@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0))(vue@3.4.26(typescript@5.4.5))': + dependencies: + '@babel/core': 7.24.3 + '@babel/plugin-transform-typescript': 7.24.1(@babel/core@7.24.3) + '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.3) + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + vue: 3.4.26(typescript@5.4.5) + transitivePeerDependencies: + - supports-color + + '@vitejs/plugin-vue@5.0.4(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0))(vue@3.4.26(typescript@5.4.5))': + dependencies: + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + vue: 3.4.26(typescript@5.4.5) + + '@vitest/expect@1.5.3': + dependencies: + '@vitest/spy': 1.5.3 + '@vitest/utils': 1.5.3 + chai: 4.4.1 + + '@vitest/runner@1.5.3': + dependencies: + '@vitest/utils': 1.5.3 + p-limit: 5.0.0 + pathe: 1.1.2 + + '@vitest/snapshot@1.5.3': + dependencies: + magic-string: 0.30.10 + pathe: 1.1.2 + pretty-format: 29.7.0 + + '@vitest/spy@1.5.3': + dependencies: + tinyspy: 2.2.1 + + '@vitest/utils@1.5.3': + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + + '@vue-macros/common@1.10.2(rollup@4.13.0)(vue@3.4.26(typescript@5.4.5))': + dependencies: + '@babel/types': 7.24.0 + '@rollup/pluginutils': 5.1.0(rollup@4.13.0) + '@vue/compiler-sfc': 3.4.21 + ast-kit: 0.12.1 + local-pkg: 0.5.0 + magic-string-ast: 0.3.0 + optionalDependencies: + vue: 3.4.26(typescript@5.4.5) + transitivePeerDependencies: + - rollup + + '@vue/babel-helper-vue-transform-on@1.2.2': {} + + '@vue/babel-plugin-jsx@1.2.2(@babel/core@7.24.3)': + dependencies: + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.3) + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + '@vue/babel-helper-vue-transform-on': 1.2.2 + '@vue/babel-plugin-resolve-type': 1.2.2(@babel/core@7.24.3) + camelcase: 6.3.0 + html-tags: 3.3.1 + svg-tags: 1.0.0 + optionalDependencies: + '@babel/core': 7.24.3 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-jsx@1.2.2(@babel/core@7.24.4)': + dependencies: + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 + '@vue/babel-helper-vue-transform-on': 1.2.2 + '@vue/babel-plugin-resolve-type': 1.2.2(@babel/core@7.24.4) + camelcase: 6.3.0 + html-tags: 3.3.1 + svg-tags: 1.0.0 + optionalDependencies: + '@babel/core': 7.24.4 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-resolve-type@1.2.2(@babel/core@7.24.3)': + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/core': 7.24.3 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/parser': 7.24.1 + '@vue/compiler-sfc': 3.4.21 + + '@vue/babel-plugin-resolve-type@1.2.2(@babel/core@7.24.4)': + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/core': 7.24.4 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/parser': 7.24.1 + '@vue/compiler-sfc': 3.4.21 + + '@vue/compiler-core@3.4.21': + dependencies: + '@babel/parser': 7.24.1 + '@vue/shared': 3.4.21 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + + '@vue/compiler-core@3.4.24': + dependencies: + '@babel/parser': 7.24.4 + '@vue/shared': 3.4.24 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + + '@vue/compiler-core@3.4.26': + dependencies: + '@babel/parser': 7.24.4 + '@vue/shared': 3.4.26 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + + '@vue/compiler-dom@3.4.21': + dependencies: + '@vue/compiler-core': 3.4.21 + '@vue/shared': 3.4.21 + + '@vue/compiler-dom@3.4.24': + dependencies: + '@vue/compiler-core': 3.4.24 + '@vue/shared': 3.4.24 + + '@vue/compiler-dom@3.4.26': + dependencies: + '@vue/compiler-core': 3.4.26 + '@vue/shared': 3.4.26 + + '@vue/compiler-sfc@3.4.21': + dependencies: + '@babel/parser': 7.24.1 + '@vue/compiler-core': 3.4.21 + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 + estree-walker: 2.0.2 + magic-string: 0.30.8 + postcss: 8.4.38 + source-map-js: 1.2.0 + + '@vue/compiler-sfc@3.4.26': + dependencies: + '@babel/parser': 7.24.4 + '@vue/compiler-core': 3.4.26 + '@vue/compiler-dom': 3.4.26 + '@vue/compiler-ssr': 3.4.26 + '@vue/shared': 3.4.26 + estree-walker: 2.0.2 + magic-string: 0.30.10 + postcss: 8.4.38 + source-map-js: 1.2.0 + + '@vue/compiler-ssr@3.4.21': + dependencies: + '@vue/compiler-dom': 3.4.21 + '@vue/shared': 3.4.21 + + '@vue/compiler-ssr@3.4.26': + dependencies: + '@vue/compiler-dom': 3.4.26 + '@vue/shared': 3.4.26 + + '@vue/devtools-api@6.6.1': {} + + '@vue/devtools-core@7.1.3(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0))(vue@3.4.26(typescript@5.4.5))': + dependencies: + '@vue/devtools-kit': 7.1.3(vue@3.4.26(typescript@5.4.5)) + '@vue/devtools-shared': 7.1.3 + mitt: 3.0.1 + nanoid: 3.3.7 + pathe: 1.1.2 + vite-hot-client: 0.2.3(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)) + transitivePeerDependencies: + - vite + - vue + + '@vue/devtools-kit@7.1.3(vue@3.4.26(typescript@5.4.5))': + dependencies: + '@vue/devtools-shared': 7.1.3 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + vue: 3.4.26(typescript@5.4.5) + + '@vue/devtools-shared@7.1.3': + dependencies: + rfdc: 1.3.1 + + '@vue/reactivity@3.4.26': + dependencies: + '@vue/shared': 3.4.26 + + '@vue/runtime-core@3.4.26': + dependencies: + '@vue/reactivity': 3.4.26 + '@vue/shared': 3.4.26 + + '@vue/runtime-dom@3.4.26': + dependencies: + '@vue/runtime-core': 3.4.26 + '@vue/shared': 3.4.26 + csstype: 3.1.3 + + '@vue/server-renderer@3.4.26(vue@3.4.26(typescript@5.4.5))': + dependencies: + '@vue/compiler-ssr': 3.4.26 + '@vue/shared': 3.4.26 + vue: 3.4.26(typescript@5.4.5) + + '@vue/shared@3.4.21': {} + + '@vue/shared@3.4.24': {} + + '@vue/shared@3.4.26': {} + + '@vueuse/components@10.9.0(vue@3.4.26(typescript@5.4.5))': + dependencies: + '@vueuse/core': 10.9.0(vue@3.4.26(typescript@5.4.5)) + '@vueuse/shared': 10.9.0(vue@3.4.26(typescript@5.4.5)) + vue-demi: 0.14.7(vue@3.4.26(typescript@5.4.5)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/core@10.9.0(vue@3.4.26(typescript@5.4.5))': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.9.0 + '@vueuse/shared': 10.9.0(vue@3.4.26(typescript@5.4.5)) + vue-demi: 0.14.7(vue@3.4.26(typescript@5.4.5)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/core@9.13.0(vue@3.4.26(typescript@5.4.5))': + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0(vue@3.4.26(typescript@5.4.5)) + vue-demi: 0.14.10(vue@3.4.26(typescript@5.4.5)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/integrations@10.9.0(async-validator@4.2.5)(axios@1.6.8)(change-case@4.1.2)(nprogress@0.2.0)(vue@3.4.26(typescript@5.4.5))': + dependencies: + '@vueuse/core': 10.9.0(vue@3.4.26(typescript@5.4.5)) + '@vueuse/shared': 10.9.0(vue@3.4.26(typescript@5.4.5)) + vue-demi: 0.14.7(vue@3.4.26(typescript@5.4.5)) + optionalDependencies: + async-validator: 4.2.5 + axios: 1.6.8 + change-case: 4.1.2 + nprogress: 0.2.0 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@10.9.0': {} + + '@vueuse/metadata@9.13.0': {} + + '@vueuse/shared@10.9.0(vue@3.4.26(typescript@5.4.5))': + dependencies: + vue-demi: 0.14.7(vue@3.4.26(typescript@5.4.5)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/shared@9.13.0(vue@3.4.26(typescript@5.4.5))': + dependencies: + vue-demi: 0.14.10(vue@3.4.26(typescript@5.4.5)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + acorn-jsx@5.3.2(acorn@8.11.3): + dependencies: + acorn: 8.11.3 + + acorn-walk@8.3.2: {} + + acorn@8.11.3: {} + + aggregate-error@4.0.1: + dependencies: + clean-stack: 4.2.0 + indent-string: 5.0.0 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-escapes@6.2.0: + dependencies: + type-fest: 3.13.1 + + ansi-regex@5.0.1: {} + + ansi-regex@6.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-each@1.0.1: {} + + array-slice@1.1.0: {} + + array-union@2.1.0: {} + + assertion-error@1.1.0: {} + + ast-kit@0.12.1: + dependencies: + '@babel/parser': 7.24.4 + pathe: 1.1.2 + + ast-walker-scope@0.6.1: + dependencies: + '@babel/parser': 7.24.4 + ast-kit: 0.12.1 + + async-validator@4.2.5: {} + + asynckit@0.4.0: {} + + axios@1.6.8: + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + big-integer@1.6.52: {} + + binary-extensions@2.3.0: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + boolbase@1.0.0: {} + + bplist-parser@0.2.0: + dependencies: + big-integer: 1.6.52 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.2: + dependencies: + fill-range: 7.0.1 + + browserslist-to-esbuild@2.1.1(browserslist@4.23.0): + dependencies: + browserslist: 4.23.0 + meow: 13.2.0 + + browserslist@4.23.0: + dependencies: + caniuse-lite: 1.0.30001600 + electron-to-chromium: 1.4.715 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.23.0) + + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bundle-name@3.0.0: + dependencies: + run-applescript: 5.0.0 + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + + c12@1.10.0: + dependencies: + chokidar: 3.6.0 + confbox: 0.1.3 + defu: 6.1.4 + dotenv: 16.4.5 + giget: 1.2.3 + jiti: 1.21.0 + mlly: 1.6.1 + ohash: 1.1.3 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.0.3 + rc9: 2.1.1 + + c8@9.1.0: + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@istanbuljs/schema': 0.1.3 + find-up: 5.0.0 + foreground-child: 3.1.1 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.1.7 + test-exclude: 6.0.0 + v8-to-istanbul: 9.2.0 + yargs: 17.7.2 + yargs-parser: 21.1.1 + + cac@6.7.14: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + call-me-maybe@1.0.2: {} + + callsites@3.1.0: {} + + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.6.2 + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001600: {} + + capital-case@1.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + upper-case-first: 2.0.2 + + chai@4.4.1: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + change-case@4.1.2: + dependencies: + camel-case: 4.1.2 + capital-case: 1.0.4 + constant-case: 3.0.4 + dot-case: 3.0.4 + header-case: 2.0.4 + no-case: 3.0.4 + param-case: 3.0.4 + pascal-case: 3.1.2 + path-case: 3.0.4 + sentence-case: 3.0.4 + snake-case: 3.0.4 + tslib: 2.6.2 + + changelogen@0.5.5: + dependencies: + c12: 1.10.0 + colorette: 2.0.20 + consola: 3.2.3 + convert-gitmoji: 0.1.5 + execa: 8.0.1 + mri: 1.2.0 + node-fetch-native: 1.6.4 + ofetch: 1.3.4 + open: 9.1.0 + pathe: 1.1.2 + pkg-types: 1.0.3 + scule: 1.3.0 + semver: 7.6.0 + std-env: 3.7.0 + yaml: 2.4.1 + + chardet@0.7.0: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chownr@2.0.0: {} + + citty@0.1.6: + dependencies: + consola: 3.2.3 + + clean-stack@4.2.0: + dependencies: + escape-string-regexp: 5.0.0 + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-cursor@4.0.0: + dependencies: + restore-cursor: 4.0.0 + + cli-progress@3.12.0: + dependencies: + string-width: 4.2.3 + + cli-spinners@2.9.2: {} + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.1.0 + + cli-width@4.1.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@1.0.4: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@11.1.0: {} + + commander@12.0.0: {} + + commander@2.20.3: {} + + concat-map@0.0.1: {} + + confbox@0.1.3: {} + + consola@3.2.3: {} + + constant-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + upper-case: 2.0.2 + + convert-gitmoji@0.1.5: {} + + convert-source-map@2.0.0: {} + + core-js@3.36.1: {} + + cross-env@7.0.3: + dependencies: + cross-spawn: 7.0.3 + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.0 + + cssesc@3.0.0: {} + + csstype@3.1.3: {} + + dayjs@1.11.13: {} + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + deep-eql@4.1.3: + dependencies: + type-detect: 4.0.8 + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + default-browser-id@3.0.0: + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + + default-browser-id@5.0.0: {} + + default-browser@4.0.0: + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-lazy-prop@3.0.0: {} + + defu@6.1.4: {} + + del@7.1.0: + dependencies: + globby: 13.2.2 + graceful-fs: 4.2.11 + is-glob: 4.0.3 + is-path-cwd: 3.0.0 + is-path-inside: 4.0.0 + p-map: 5.5.0 + rimraf: 3.0.2 + slash: 4.0.0 + + delayed-stream@1.0.0: {} + + destr@2.0.3: {} + + detect-file@1.0.0: {} + + detect-indent@7.0.1: {} + + detect-libc@1.0.3: {} + + diff-sequences@29.6.3: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + + dotenv@16.4.5: {} + + duplexer@0.1.2: {} + + echarts@5.5.0: + dependencies: + tslib: 2.3.0 + zrender: 5.5.0 + + electron-to-chromium@1.4.715: {} + + element-plus@2.9.2(vue@3.4.26(typescript@5.4.5)): + dependencies: + '@ctrl/tinycolor': 3.6.1 + '@element-plus/icons-vue': 2.3.1(vue@3.4.26(typescript@5.4.5)) + '@floating-ui/dom': 1.6.12 + '@popperjs/core': '@sxzz/popperjs-es@2.11.7' + '@types/lodash': 4.17.14 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 9.13.0(vue@3.4.26(typescript@5.4.5)) + async-validator: 4.2.5 + dayjs: 1.11.13 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.4.26(typescript@5.4.5) + transitivePeerDependencies: + - '@vue/composition-api' + + emoji-regex@10.3.0: {} + + emoji-regex@8.0.0: {} + + entities@4.5.0: {} + + error-stack-parser-es@0.1.1: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + esbuild@0.20.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + + escalade@3.1.2: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + eslint-config-prettier@9.1.0(eslint@8.57.0): + dependencies: + eslint: 8.57.0 + + eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5): + dependencies: + eslint: 8.57.0 + prettier: 3.2.5 + prettier-linter-helpers: 1.0.0 + synckit: 0.8.8 + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@8.57.0) + + eslint-plugin-vue@9.25.0(eslint@8.57.0): + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + eslint: 8.57.0 + globals: 13.24.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.0.16 + semver: 7.6.0 + vue-eslint-parser: 9.4.2(eslint@8.57.0) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 + + esprima@4.0.1: {} + + esquery@1.5.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.5 + + esutils@2.0.3: {} + + eventemitter3@5.0.1: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@7.2.0: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + expand-tilde@2.0.2: + dependencies: + homedir-polyfill: 1.0.3 + + extend-shallow@2.0.1: + dependencies: + is-extendable: 0.1.1 + + extend@3.0.2: {} + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + fill-range@7.0.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + findup-sync@5.0.0: + dependencies: + detect-file: 1.0.0 + is-glob: 4.0.3 + micromatch: 4.0.5 + resolve-dir: 1.0.1 + + fined@2.0.0: + dependencies: + expand-tilde: 2.0.2 + is-plain-object: 5.0.0 + object.defaults: 1.1.0 + object.pick: 1.3.0 + parse-filepath: 1.0.2 + + flagged-respawn@2.0.0: {} + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + + flat@5.0.2: {} + + flatted@3.3.1: {} + + follow-redirects@1.15.6: {} + + for-in@1.0.2: {} + + for-own@1.0.0: + dependencies: + for-in: 1.0.2 + + foreground-child@3.1.1: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.2.0: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-stream@6.0.1: {} + + get-stream@8.0.1: {} + + giget@1.2.3: + dependencies: + citty: 0.1.6 + consola: 3.2.3 + defu: 6.1.4 + node-fetch-native: 1.6.4 + nypm: 0.3.8 + ohash: 1.1.3 + pathe: 1.1.2 + tar: 6.2.1 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + global-modules@1.0.0: + dependencies: + global-prefix: 1.0.2 + is-windows: 1.0.2 + resolve-dir: 1.0.1 + + global-prefix@1.0.2: + dependencies: + expand-tilde: 2.0.2 + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 1.0.2 + which: 1.3.1 + + globals@11.12.0: {} + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + + globby@13.2.2: + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 4.0.0 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + gray-matter@4.0.3: + dependencies: + js-yaml: 3.14.1 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 + + gzip-size@6.0.0: + dependencies: + duplexer: 0.1.2 + + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.17.4 + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + header-case@2.0.4: + dependencies: + capital-case: 1.0.4 + tslib: 2.6.2 + + homedir-polyfill@1.0.3: + dependencies: + parse-passwd: 1.0.0 + + hookable@5.5.3: {} + + html-escaper@2.0.2: {} + + html-tags@3.3.1: {} + + human-signals@2.1.0: {} + + human-signals@4.3.1: {} + + human-signals@5.0.0: {} + + husky@9.0.11: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@5.3.1: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + indent-string@5.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + inquirer@9.2.16: + dependencies: + '@ljharb/through': 2.3.13 + ansi-escapes: 4.3.2 + chalk: 5.3.0 + cli-cursor: 3.1.0 + cli-width: 4.1.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 1.0.0 + ora: 5.4.1 + run-async: 3.0.0 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + interpret@3.1.1: {} + + is-absolute@1.0.0: + dependencies: + is-relative: 1.0.0 + is-windows: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.13.1: + dependencies: + hasown: 2.0.2 + + is-docker@2.2.1: {} + + is-docker@3.0.0: {} + + is-extendable@0.1.1: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.2.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-interactive@1.0.0: {} + + is-interactive@2.0.0: {} + + is-number@7.0.0: {} + + is-path-cwd@3.0.0: {} + + is-path-inside@3.0.3: {} + + is-path-inside@4.0.0: {} + + is-plain-object@5.0.0: {} + + is-relative@1.0.0: + dependencies: + is-unc-path: 1.0.0 + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-unc-path@1.0.0: + dependencies: + unc-path-regex: 0.1.2 + + is-unicode-supported@0.1.0: {} + + is-unicode-supported@1.3.0: {} + + is-unicode-supported@2.0.0: {} + + is-windows@1.0.2: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isbinaryfile@5.0.2: {} + + isexe@2.0.0: {} + + isobject@3.0.1: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + ityped@1.0.3: {} + + jiti@1.21.0: {} + + js-tokens@4.0.0: {} + + js-tokens@8.0.3: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@2.5.2: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + jsonc-parser@3.2.1: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kind-of@6.0.3: {} + + kleur@3.0.3: {} + + kolorist@1.8.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + liftoff@4.0.0: + dependencies: + extend: 3.0.2 + findup-sync: 5.0.0 + fined: 2.0.0 + flagged-respawn: 2.0.0 + is-plain-object: 5.0.0 + object.map: 1.0.1 + rechoir: 0.8.0 + resolve: 1.22.8 + + lightningcss-darwin-arm64@1.24.1: + optional: true + + lightningcss-darwin-x64@1.24.1: + optional: true + + lightningcss-freebsd-x64@1.24.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.24.1: + optional: true + + lightningcss-linux-arm64-gnu@1.24.1: + optional: true + + lightningcss-linux-arm64-musl@1.24.1: + optional: true + + lightningcss-linux-x64-gnu@1.24.1: + optional: true + + lightningcss-linux-x64-musl@1.24.1: + optional: true + + lightningcss-win32-x64-msvc@1.24.1: + optional: true + + lightningcss@1.24.1: + dependencies: + detect-libc: 1.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.24.1 + lightningcss-darwin-x64: 1.24.1 + lightningcss-freebsd-x64: 1.24.1 + lightningcss-linux-arm-gnueabihf: 1.24.1 + lightningcss-linux-arm64-gnu: 1.24.1 + lightningcss-linux-arm64-musl: 1.24.1 + lightningcss-linux-x64-gnu: 1.24.1 + lightningcss-linux-x64-musl: 1.24.1 + lightningcss-win32-x64-msvc: 1.24.1 + + lilconfig@3.0.0: {} + + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + lint-staged@15.2.2: + dependencies: + chalk: 5.3.0 + commander: 11.1.0 + debug: 4.3.4 + execa: 8.0.1 + lilconfig: 3.0.0 + listr2: 8.0.1 + micromatch: 4.0.5 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.3.4 + transitivePeerDependencies: + - supports-color + + listr2@8.0.1: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.0.0 + rfdc: 1.3.1 + wrap-ansi: 9.0.0 + + local-pkg@0.4.3: {} + + local-pkg@0.5.0: + dependencies: + mlly: 1.6.1 + pkg-types: 1.0.3 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash-es@4.17.21: {} + + lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21): + dependencies: + '@types/lodash-es': 4.17.12 + lodash: 4.17.21 + lodash-es: 4.17.21 + + lodash.get@4.4.2: {} + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-symbols@6.0.0: + dependencies: + chalk: 5.3.0 + is-unicode-supported: 1.3.0 + + log-update@6.0.0: + dependencies: + ansi-escapes: 6.2.0 + cli-cursor: 4.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + lower-case@2.0.2: + dependencies: + tslib: 2.6.2 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + m-type-tools@0.5.3: {} + + magic-string-ast@0.3.0: + dependencies: + magic-string: 0.30.9 + + magic-string@0.30.10: + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + magic-string@0.30.8: + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + magic-string@0.30.9: + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + make-dir@4.0.0: + dependencies: + semver: 7.6.0 + + make-iterator@1.0.1: + dependencies: + kind-of: 6.0.3 + + map-cache@0.2.2: {} + + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + + mdn-data@2.0.30: {} + + mdurl@2.0.0: {} + + memoize-one@6.0.0: {} + + meow@13.2.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.5: + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.4: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + mitt@3.0.1: {} + + mkdirp@1.0.4: {} + + mkdirp@3.0.1: {} + + mlly@1.6.1: + dependencies: + acorn: 8.11.3 + pathe: 1.1.2 + pkg-types: 1.0.3 + ufo: 1.5.3 + + mockjs@1.1.0: + dependencies: + commander: 12.0.0 + + mri@1.2.0: {} + + mrmime@2.0.0: {} + + ms@2.1.2: {} + + mute-stream@1.0.0: {} + + nanoid@3.3.7: {} + + natural-compare@1.4.0: {} + + neo-async@2.6.2: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.6.2 + + node-fetch-native@1.6.4: {} + + node-plop@0.32.0: + dependencies: + '@types/inquirer': 9.0.7 + change-case: 4.1.2 + del: 7.1.0 + globby: 13.2.2 + handlebars: 4.7.8 + inquirer: 9.2.16 + isbinaryfile: 5.0.2 + lodash.get: 4.4.2 + lower-case: 2.0.2 + mkdirp: 3.0.1 + resolve: 1.22.8 + title-case: 3.0.3 + upper-case: 2.0.2 + + node-releases@2.0.14: {} + + normalize-path@3.0.0: {} + + normalize-wheel-es@1.2.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + nprogress@0.2.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + nypm@0.3.8: + dependencies: + citty: 0.1.6 + consola: 3.2.3 + execa: 8.0.1 + pathe: 1.1.2 + ufo: 1.5.3 + + object.defaults@1.1.0: + dependencies: + array-each: 1.0.1 + array-slice: 1.1.0 + for-own: 1.0.0 + isobject: 3.0.1 + + object.map@1.0.1: + dependencies: + for-own: 1.0.0 + make-iterator: 1.0.1 + + object.pick@1.3.0: + dependencies: + isobject: 3.0.1 + + ofetch@1.3.4: + dependencies: + destr: 2.0.3 + node-fetch-native: 1.6.4 + ufo: 1.5.3 + + ohash@1.1.3: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + open@10.1.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 + + open@9.1.0: + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + + optionator@0.9.3: + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + ora@8.0.1: + dependencies: + chalk: 5.3.0 + cli-cursor: 4.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.0.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.1.0 + strip-ansi: 7.1.0 + + os-tmpdir@1.0.2: {} + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-limit@5.0.0: + dependencies: + yocto-queue: 1.0.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-map@5.5.0: + dependencies: + aggregate-error: 4.0.1 + + param-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-filepath@1.0.2: + dependencies: + is-absolute: 1.0.0 + map-cache: 0.2.2 + path-root: 0.1.1 + + parse-passwd@1.0.0: {} + + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + + path-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-root-regex@0.1.2: {} + + path-root@0.1.1: + dependencies: + path-root-regex: 0.1.2 + + path-type@4.0.0: {} + + pathe@1.1.2: {} + + pathval@1.1.1: {} + + perfect-debounce@1.0.0: {} + + picocolors@1.0.0: {} + + picomatch@2.3.1: {} + + pidtree@0.6.0: {} + + pinia-plugin-persistedstate@3.2.1(pinia@2.1.7(typescript@5.4.5)(vue@3.4.26(typescript@5.4.5))): + dependencies: + pinia: 2.1.7(typescript@5.4.5)(vue@3.4.26(typescript@5.4.5)) + + pinia@2.1.7(typescript@5.4.5)(vue@3.4.26(typescript@5.4.5)): + dependencies: + '@vue/devtools-api': 6.6.1 + vue: 3.4.26(typescript@5.4.5) + vue-demi: 0.14.7(vue@3.4.26(typescript@5.4.5)) + optionalDependencies: + typescript: 5.4.5 + + pkg-types@1.0.3: + dependencies: + jsonc-parser: 3.2.1 + mlly: 1.6.1 + pathe: 1.1.2 + + plop@4.0.1: + dependencies: + '@types/liftoff': 4.0.3 + chalk: 5.3.0 + interpret: 3.1.1 + liftoff: 4.0.0 + minimist: 1.2.8 + node-plop: 0.32.0 + ora: 8.0.1 + v8flags: 4.0.1 + + postcss-selector-parser@6.0.16: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss@8.4.38: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@3.2.5: {} + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + + prism-theme-vars@0.2.5: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + proxy-from-env@1.1.0: {} + + punycode.js@2.3.1: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + rc9@2.1.1: + dependencies: + defu: 6.1.4 + destr: 2.0.3 + flat: 5.0.2 + + react-is@18.2.0: {} + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + rechoir@0.8.0: + dependencies: + resolve: 1.22.8 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + resize-detector@0.3.0: {} + + resolve-dir@1.0.1: + dependencies: + expand-tilde: 2.0.2 + global-modules: 1.0.0 + + resolve-from@4.0.0: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + restore-cursor@4.0.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + reusify@1.0.4: {} + + rfdc@1.3.1: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rollup@4.13.0: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.13.0 + '@rollup/rollup-android-arm64': 4.13.0 + '@rollup/rollup-darwin-arm64': 4.13.0 + '@rollup/rollup-darwin-x64': 4.13.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.13.0 + '@rollup/rollup-linux-arm64-gnu': 4.13.0 + '@rollup/rollup-linux-arm64-musl': 4.13.0 + '@rollup/rollup-linux-riscv64-gnu': 4.13.0 + '@rollup/rollup-linux-x64-gnu': 4.13.0 + '@rollup/rollup-linux-x64-musl': 4.13.0 + '@rollup/rollup-win32-arm64-msvc': 4.13.0 + '@rollup/rollup-win32-ia32-msvc': 4.13.0 + '@rollup/rollup-win32-x64-msvc': 4.13.0 + fsevents: 2.3.3 + + run-applescript@5.0.0: + dependencies: + execa: 5.1.1 + + run-applescript@7.0.0: {} + + run-async@3.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.6.2 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + scule@1.3.0: {} + + section-matter@1.0.0: + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + + semver@6.3.1: {} + + semver@7.6.0: + dependencies: + lru-cache: 6.0.0 + + sentence-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.6.2 + upper-case-first: 2.0.2 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + siginfo@2.0.0: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-git@3.24.0: + dependencies: + '@kwsites/file-exists': 1.1.1 + '@kwsites/promise-deferred': 1.1.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + sirv@2.0.4: + dependencies: + '@polka/url': 1.0.0-next.25 + mrmime: 2.0.0 + totalist: 3.0.1 + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + slash@4.0.0: {} + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.6.2 + + source-map-js@1.2.0: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + speakingurl@14.0.1: {} + + sprintf-js@1.0.3: {} + + stackback@0.0.2: {} + + std-env@3.7.0: {} + + stdin-discarder@0.2.2: {} + + string-argv@0.3.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@7.1.0: + dependencies: + emoji-regex: 10.3.0 + get-east-asian-width: 1.2.0 + strip-ansi: 7.1.0 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + + strip-bom-string@1.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-json-comments@3.1.1: {} + + strip-literal@1.3.0: + dependencies: + acorn: 8.11.3 + + strip-literal@2.0.0: + dependencies: + js-tokens: 8.0.3 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svg-tags@1.0.0: {} + + synckit@0.8.8: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.2 + + synckit@0.9.0: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.2 + + systemjs@6.14.3: {} + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + taze@0.13.7: + dependencies: + '@antfu/ni': 0.21.12 + '@jsdevtools/ez-spawn': 3.0.4 + cli-progress: 3.12.0 + deepmerge: 4.3.1 + detect-indent: 7.0.1 + picocolors: 1.0.0 + prompts: 2.4.2 + ufo: 1.5.3 + unconfig: 0.3.13 + yargs: 17.7.2 + + terser@5.31.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.11.3 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + text-table@0.2.0: {} + + tinybench@2.6.0: {} + + tinypool@0.8.3: {} + + tinyspy@2.2.1: {} + + title-case@3.0.3: + dependencies: + tslib: 2.6.2 + + titleize@3.0.0: {} + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + totalist@3.0.1: {} + + ts-api-utils@1.3.0(typescript@5.4.5): + dependencies: + typescript: 5.4.5 + + tslib@2.3.0: {} + + tslib@2.6.2: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type-fest@3.13.1: {} + + typescript@5.4.5: {} + + uc.micro@2.1.0: {} + + ufo@1.5.3: {} + + uglify-js@3.17.4: + optional: true + + unc-path-regex@0.1.2: {} + + unconfig@0.3.13: + dependencies: + '@antfu/utils': 0.7.7 + defu: 6.1.4 + jiti: 1.21.0 + + undici-types@5.26.5: {} + + unimport@3.7.1(rollup@4.13.0): + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@4.13.0) + acorn: 8.11.3 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + fast-glob: 3.3.2 + local-pkg: 0.5.0 + magic-string: 0.30.10 + mlly: 1.6.1 + pathe: 1.1.2 + pkg-types: 1.0.3 + scule: 1.3.0 + strip-literal: 1.3.0 + unplugin: 1.10.0 + transitivePeerDependencies: + - rollup + + universalify@2.0.1: {} + + unocss@0.59.4(postcss@8.4.38)(rollup@4.13.0)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)): + dependencies: + '@unocss/astro': 0.59.4(rollup@4.13.0)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)) + '@unocss/cli': 0.59.4(rollup@4.13.0) + '@unocss/core': 0.59.4 + '@unocss/extractor-arbitrary-variants': 0.59.4 + '@unocss/postcss': 0.59.4(postcss@8.4.38) + '@unocss/preset-attributify': 0.59.4 + '@unocss/preset-icons': 0.59.4 + '@unocss/preset-mini': 0.59.4 + '@unocss/preset-tagify': 0.59.4 + '@unocss/preset-typography': 0.59.4 + '@unocss/preset-uno': 0.59.4 + '@unocss/preset-web-fonts': 0.59.4 + '@unocss/preset-wind': 0.59.4 + '@unocss/reset': 0.59.4 + '@unocss/transformer-attributify-jsx': 0.59.4 + '@unocss/transformer-attributify-jsx-babel': 0.59.4 + '@unocss/transformer-compile-class': 0.59.4 + '@unocss/transformer-directives': 0.59.4 + '@unocss/transformer-variant-group': 0.59.4 + '@unocss/vite': 0.59.4(rollup@4.13.0)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)) + optionalDependencies: + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + transitivePeerDependencies: + - postcss + - rollup + - supports-color + + unplugin-auto-import@0.17.5(@vueuse/core@10.9.0(vue@3.4.26(typescript@5.4.5)))(rollup@4.13.0): + dependencies: + '@antfu/utils': 0.7.7 + '@rollup/pluginutils': 5.1.0(rollup@4.13.0) + fast-glob: 3.3.2 + local-pkg: 0.5.0 + magic-string: 0.30.8 + minimatch: 9.0.3 + unimport: 3.7.1(rollup@4.13.0) + unplugin: 1.10.0 + optionalDependencies: + '@vueuse/core': 10.9.0(vue@3.4.26(typescript@5.4.5)) + transitivePeerDependencies: + - rollup + + unplugin-vue-components@0.26.0(@babel/parser@7.24.4)(rollup@4.13.0)(vue@3.4.26(typescript@5.4.5)): + dependencies: + '@antfu/utils': 0.7.7 + '@rollup/pluginutils': 5.1.0(rollup@4.13.0) + chokidar: 3.6.0 + debug: 4.3.4 + fast-glob: 3.3.2 + local-pkg: 0.4.3 + magic-string: 0.30.8 + minimatch: 9.0.3 + resolve: 1.22.8 + unplugin: 1.10.0 + vue: 3.4.26(typescript@5.4.5) + optionalDependencies: + '@babel/parser': 7.24.4 + transitivePeerDependencies: + - rollup + - supports-color + + unplugin-vue-markdown@0.26.2(rollup@4.13.0)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)): + dependencies: + '@mdit-vue/plugin-component': 2.1.2 + '@mdit-vue/plugin-frontmatter': 2.1.2 + '@mdit-vue/types': 2.1.0 + '@rollup/pluginutils': 5.1.0(rollup@4.13.0) + '@types/markdown-it': 14.0.1 + markdown-it: 14.1.0 + unplugin: 1.10.1 + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + transitivePeerDependencies: + - rollup + + unplugin-vue-router@0.8.6(rollup@4.13.0)(vue-router@4.3.2(vue@3.4.26(typescript@5.4.5)))(vue@3.4.26(typescript@5.4.5)): + dependencies: + '@babel/types': 7.24.0 + '@rollup/pluginutils': 5.1.0(rollup@4.13.0) + '@vue-macros/common': 1.10.2(rollup@4.13.0)(vue@3.4.26(typescript@5.4.5)) + ast-walker-scope: 0.6.1 + chokidar: 3.6.0 + fast-glob: 3.3.2 + json5: 2.2.3 + local-pkg: 0.5.0 + mlly: 1.6.1 + pathe: 1.1.2 + scule: 1.3.0 + unplugin: 1.10.1 + yaml: 2.4.1 + optionalDependencies: + vue-router: 4.3.2(vue@3.4.26(typescript@5.4.5)) + transitivePeerDependencies: + - rollup + - vue + + unplugin@1.10.0: + dependencies: + acorn: 8.11.3 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.1 + + unplugin@1.10.1: + dependencies: + acorn: 8.11.3 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.1 + + untildify@4.0.0: {} + + update-browserslist-db@1.0.13(browserslist@4.23.0): + dependencies: + browserslist: 4.23.0 + escalade: 3.1.2 + picocolors: 1.0.0 + + upper-case-first@2.0.2: + dependencies: + tslib: 2.6.2 + + upper-case@2.0.2: + dependencies: + tslib: 2.6.2 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + v8-to-istanbul@9.2.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + v8flags@4.0.1: {} + + vite-auto-import-resolvers@3.2.1(unplugin-auto-import@0.17.5(@vueuse/core@10.9.0(vue@3.4.26(typescript@5.4.5)))(rollup@4.13.0))(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)): + dependencies: + fast-glob: 3.3.2 + local-pkg: 0.4.3 + scule: 1.3.0 + unplugin-auto-import: 0.17.5(@vueuse/core@10.9.0(vue@3.4.26(typescript@5.4.5)))(rollup@4.13.0) + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + + vite-hot-client@0.2.3(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)): + dependencies: + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + + vite-layers@0.5.2(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)): + dependencies: + consola: 3.2.3 + defu: 6.1.4 + jiti: 1.21.0 + kolorist: 1.8.0 + m-type-tools: 0.5.3 + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + + vite-node@1.5.3(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0): + dependencies: + cac: 6.7.14 + debug: 4.3.4 + pathe: 1.1.2 + picocolors: 1.0.0 + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + + vite-plugin-compression@0.5.1(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)): + dependencies: + chalk: 4.1.2 + debug: 4.3.4 + fs-extra: 10.1.0 + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + transitivePeerDependencies: + - supports-color + + vite-plugin-env-types@0.1.4(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)): + dependencies: + fast-glob: 3.3.2 + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + + vite-plugin-inspect@0.8.4(rollup@4.13.0)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)): + dependencies: + '@antfu/utils': 0.7.7 + '@rollup/pluginutils': 5.1.0(rollup@4.13.0) + debug: 4.3.4 + error-stack-parser-es: 0.1.1 + fs-extra: 11.2.0 + open: 10.1.0 + perfect-debounce: 1.0.0 + picocolors: 1.0.0 + sirv: 2.0.4 + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + transitivePeerDependencies: + - rollup + - supports-color + + vite-plugin-legacy-swc@1.1.0(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)): + dependencies: + '@swc/core': 1.4.8 + browserslist: 4.23.0 + browserslist-to-esbuild: 2.1.1(browserslist@4.23.0) + core-js: 3.36.1 + magic-string: 0.30.8 + regenerator-runtime: 0.14.1 + systemjs: 6.14.3 + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + transitivePeerDependencies: + - '@swc/helpers' + + vite-plugin-use-modules@1.4.8(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0))(vue@3.4.26(typescript@5.4.5)): + dependencies: + local-pkg: 0.5.0 + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + vue: 3.4.26(typescript@5.4.5) + + vite-plugin-vue-devtools@7.1.3(rollup@4.13.0)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0))(vue@3.4.26(typescript@5.4.5)): + dependencies: + '@vue/devtools-core': 7.1.3(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0))(vue@3.4.26(typescript@5.4.5)) + '@vue/devtools-kit': 7.1.3(vue@3.4.26(typescript@5.4.5)) + '@vue/devtools-shared': 7.1.3 + execa: 8.0.1 + sirv: 2.0.4 + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + vite-plugin-inspect: 0.8.4(rollup@4.13.0)(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)) + vite-plugin-vue-inspector: 5.0.1(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)) + transitivePeerDependencies: + - '@nuxt/kit' + - rollup + - supports-color + - vue + + vite-plugin-vue-inspector@5.0.1(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0)): + dependencies: + '@babel/core': 7.24.4 + '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-transform-typescript': 7.24.1(@babel/core@7.24.4) + '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.4) + '@vue/compiler-dom': 3.4.24 + kolorist: 1.8.0 + magic-string: 0.30.10 + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + transitivePeerDependencies: + - supports-color + + vite-plugin-vue-meta-layouts@0.4.3(vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0))(vue-router@4.3.2(vue@3.4.26(typescript@5.4.5))): + dependencies: + local-pkg: 0.5.0 + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + vue-router: 4.3.2(vue@3.4.26(typescript@5.4.5)) + + vite@5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0): + dependencies: + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.13.0 + optionalDependencies: + '@types/node': 20.12.7 + fsevents: 2.3.3 + lightningcss: 1.24.1 + terser: 5.31.0 + + vitest@1.5.3(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0): + dependencies: + '@vitest/expect': 1.5.3 + '@vitest/runner': 1.5.3 + '@vitest/snapshot': 1.5.3 + '@vitest/spy': 1.5.3 + '@vitest/utils': 1.5.3 + acorn-walk: 8.3.2 + chai: 4.4.1 + debug: 4.3.4 + execa: 8.0.1 + local-pkg: 0.5.0 + magic-string: 0.30.10 + pathe: 1.1.2 + picocolors: 1.0.0 + std-env: 3.7.0 + strip-literal: 2.0.0 + tinybench: 2.6.0 + tinypool: 0.8.3 + vite: 5.2.10(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + vite-node: 1.5.3(@types/node@20.12.7)(lightningcss@1.24.1)(terser@5.31.0) + why-is-node-running: 2.2.2 + optionalDependencies: + '@types/node': 20.12.7 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + + vue-demi@0.13.11(vue@3.4.26(typescript@5.4.5)): + dependencies: + vue: 3.4.26(typescript@5.4.5) + + vue-demi@0.14.10(vue@3.4.26(typescript@5.4.5)): + dependencies: + vue: 3.4.26(typescript@5.4.5) + + vue-demi@0.14.7(vue@3.4.26(typescript@5.4.5)): + dependencies: + vue: 3.4.26(typescript@5.4.5) + + vue-echarts@6.7.1(@vue/runtime-core@3.4.26)(echarts@5.5.0)(vue@3.4.26(typescript@5.4.5)): + dependencies: + echarts: 5.5.0 + resize-detector: 0.3.0 + vue: 3.4.26(typescript@5.4.5) + vue-demi: 0.13.11(vue@3.4.26(typescript@5.4.5)) + optionalDependencies: + '@vue/runtime-core': 3.4.26 + + vue-eslint-parser@9.4.2(eslint@8.57.0): + dependencies: + debug: 4.3.4 + eslint: 8.57.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + lodash: 4.17.21 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + + vue-request@2.0.4(vue@3.4.26(typescript@5.4.5)): + dependencies: + vue: 3.4.26(typescript@5.4.5) + vue-demi: 0.14.10(vue@3.4.26(typescript@5.4.5)) + + vue-router@4.3.2(vue@3.4.26(typescript@5.4.5)): + dependencies: + '@vue/devtools-api': 6.6.1 + vue: 3.4.26(typescript@5.4.5) + + vue-toastification@2.0.0-rc.5(vue@3.4.26(typescript@5.4.5)): + dependencies: + vue: 3.4.26(typescript@5.4.5) + + vue@3.4.26(typescript@5.4.5): + dependencies: + '@vue/compiler-dom': 3.4.26 + '@vue/compiler-sfc': 3.4.26 + '@vue/runtime-dom': 3.4.26 + '@vue/server-renderer': 3.4.26(vue@3.4.26(typescript@5.4.5)) + '@vue/shared': 3.4.26 + optionalDependencies: + typescript: 5.4.5 + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + webpack-sources@3.2.3: {} + + webpack-virtual-modules@0.6.1: {} + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.2.2: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + wordwrap@1.0.0: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.1.0 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + xml-name-validator@4.0.0: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yaml@2.3.4: {} + + yaml@2.4.1: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} + + yocto-queue@1.0.0: {} + + zrender@5.5.0: + dependencies: + tslib: 2.3.0 diff --git a/ui/presets/autoprefixer.ts b/ui/presets/autoprefixer.ts new file mode 100644 index 0000000..01837f8 --- /dev/null +++ b/ui/presets/autoprefixer.ts @@ -0,0 +1,33 @@ +import type { Preset } from 'unocss' +import browserslist from 'browserslist' +import { defaultBuildTargets } from './shared/detect' +import { browserslistToTargets, transformStyleAttribute } from 'lightningcss' + +export default function autoprefixerPreset( + targets: string[] = defaultBuildTargets, +): Preset { + return { + name: 'unocss-preset-autoprefixer', + postprocess: (util) => { + const entries = util.entries + const { code } = transformStyleAttribute({ + code: Buffer.from( + entries + .filter((item) => !item[0].startsWith('--un')) + .map((x) => x.join(':')) + .join(';'), + ), + targets: browserslistToTargets(browserslist(targets)), + minify: true, + }) + + util.entries = [ + ...entries.filter((item) => item[0].startsWith('--un')), + ...(code + .toString() + .split(';') + .map((i) => i.split(':')) as [string, string | number][]), + ] + }, + } +} diff --git a/ui/presets/index.ts b/ui/presets/index.ts new file mode 100644 index 0000000..bac27a1 --- /dev/null +++ b/ui/presets/index.ts @@ -0,0 +1,234 @@ +import UnoCss from 'unocss/vite' +import AutoImport from 'unplugin-auto-import/vite' +import { + AntDesignVueResolver, + ArcoResolver, + DevUiResolver, + ElementPlusResolver, + HeadlessUiResolver, + IduxResolver, + InklineResolver, + LayuiVueResolver, + NaiveUiResolver, + PrimeVueResolver, + QuasarResolver, + TDesignResolver, + VantResolver, + VarletUIResolver, + ViewUiResolver, + VueUseComponentsResolver, + Vuetify3Resolver, +} from 'unplugin-vue-components/resolvers' +import Components from 'unplugin-vue-components/vite' +import Markdown from 'unplugin-vue-markdown/vite' +import { VueRouterAutoImports } from 'unplugin-vue-router' +import Router from 'unplugin-vue-router/vite' + +import { AutoGenerateImports, vue3Presets } from 'vite-auto-import-resolvers' +import Compression from 'vite-plugin-compression' +import EnvTypes from 'vite-plugin-env-types' +import Modules from 'vite-plugin-use-modules' +import VueDevTools from 'vite-plugin-vue-devtools' +import Layouts from 'vite-plugin-vue-meta-layouts' +import Legacy from 'vite-plugin-legacy-swc' +import Vue from '@vitejs/plugin-vue' +import Jsx from '@vitejs/plugin-vue-jsx' + +// 内置插件 +import { + Alias, + Lightningcss, + Restart, + Warmup, + Layers, + Optimize, +} from './plugins' +import { defaultBuildTargets, detectResolvers, useEnv } from './shared/detect' +import { r } from './shared/path' +import type { PluginOption } from 'vite' + +export default function () { + const env = useEnv() + const safelist = + 'prose px-2 sm:px-0 md:prose-lg lg:prose-lg dark:prose-invert text-left w-screen prose-slate prose-img:rounded-xl prose-headings:underline prose-a:text-blue-600' + + const plugins: PluginOption[] = [ + /** + * vite 配置层 + * 通过 mode 区分 vite 配置文件 (experimental) + */ + Layers(), + /** + * 兼容不支持 esmModule 的浏览器 + * https://www.npmjs.com/package/@vitejs/plugin-legacy + */ + Legacy({ + targets: defaultBuildTargets, + }), + /** + * 智能启动 lightningcss + */ + Lightningcss(), + /** + * 启动优化 + */ + Optimize(), + /** + * 环境变量类型提示 + * https://github.com/dishait/vite-plugin-env-types + */ + EnvTypes({ + dts: r('presets/types/env.d.ts'), + }), + /** + * 内置的预热,可以加快冷启动 + */ + Warmup(), + /** + * 文件路由 + * https://github.com/posva/unplugin-vue-router + */ + Router({ + routesFolder: r('src/pages'), + dts: r('presets/types/type-router.d.ts'), + extensions: ['.md', '.vue', '.tsx', '.jsx'], + }), + /** + * 自动安装 vue 插件 + * https://github.com/dishait/vite-plugin-use-modules + */ + Modules({ + auto: true, + // 内部使用虚拟模块,运行在前端,所以不需要 r 重写路径 + target: 'src/plugins', + }), + /** + * vue 官方插件,用来解析 sfc 单文件组件 + * https://www.npmjs.com/package/@vitejs/plugin-vue + */ + Vue({ + include: [/\.vue$/, /\.md$/], + }), + /** + * 布局系统 + * https://github.com/dishait/vite-plugin-vue-meta-layouts + */ + Layouts({ + skipTopLevelRouteLayout: true, + }), + + /** + * 组件自动按需引入 + * https://github.com/antfu/unplugin-vue-components + */ + Components({ + directoryAsNamespace: true, + include: [/\.vue$/, /\.vue\?vue/, /\.[tj]sx$/, /\.md$/], + extensions: ['md', 'vue', 'tsx', 'jsx'], + dts: r('presets/types/components.d.ts'), + types: [ + { + from: 'vue-router', + names: ['RouterLink', 'RouterView'], + }, + ], + resolvers: detectResolvers({ + onlyExist: [ + [VantResolver(), 'vant'], + [QuasarResolver(), 'quasar'], + [DevUiResolver(), 'vue-devui'], + [NaiveUiResolver(), 'naive-ui'], + [Vuetify3Resolver(), 'vuetify'], + [PrimeVueResolver(), 'primevue'], + [ViewUiResolver(), 'view-design'], + [LayuiVueResolver(), 'layui-vue'], + [VarletUIResolver(), '@varlet/ui'], + [IduxResolver(), '@idux/components'], + [InklineResolver(), '@inkline/inkline'], + [ElementPlusResolver(), 'element-plus'], + [HeadlessUiResolver(), '@headlessui/vue'], + [ArcoResolver(), '@arco-design/web-vue'], + [AntDesignVueResolver({ importStyle: false }), 'ant-design-vue'], + [VueUseComponentsResolver(), '@vueuse/components'], + [TDesignResolver({ library: 'vue-next' }), 'tdesign-vue-next'], + ], + }), + }), + + /** + * jsx 和 tsx 支持 + * https://www.npmjs.com/package/@vitejs/plugin-vue-jsx + */ + Jsx(), + /** + * 生产环境资源压缩 + * https://github.com/vbenjs/vite-plugin-compression + */ + Compression({ + // @ts-ignore + algorithm: env.VITE_APP_COMPRESSINON_ALGORITHM, + }), + /** + * 别名插件 (内置) + * 支持 `~` 和 `@` 别名到 `src` + */ + Alias(), + /** + * 强制重启 (内置) + * 如果 package.json 或 pnpm-lock.yaml 更新的话,强制重启 + */ + Restart(), + /** + * css 原子引擎 + * https://github.com/unocss/unocss + */ + UnoCss({ + safelist: env.VITE_APP_MARKDOWN ? safelist.split(' ') : undefined, + }), + ] + /** + * 开发面板 + * https://github.com/webfansplz/vite-plugin-vue-devtools + */ + if (env.VITE_APP_DEV_TOOLS) { + plugins.push(VueDevTools()) + } + + + /** + * api 自动按需引入 + * https://github.com/antfu/unplugin-auto-import + */ + if (env.VITE_APP_API_AUTO_IMPORT) { + const dirs = env.VITE_APP_DIR_API_AUTO_IMPORT + ? ['src/stores/**', 'src/composables/**', 'src/api/**'] + : [] + plugins.push( + AutoImport({ + dirs, + vueTemplate: true, + dts: r('presets/types/auto-imports.d.ts'), + imports: [ + ...AutoGenerateImports({ + include: [...vue3Presets], + exclude: ['vue-router'], + }), + VueRouterAutoImports, + ], + resolvers: detectResolvers({ + onlyExist: [ + [ElementPlusResolver(), 'element-plus'], + [TDesignResolver({ library: 'vue-next' }), 'tdesign-vue-next'], + ], + }), + eslintrc: { + enabled: true, + globalsPropValue: true, + filepath: r('presets/eslint/.eslintrc-auto-import.json'), + }, + }), + ) + } + + return plugins +} diff --git a/ui/presets/plugins/alias.ts b/ui/presets/plugins/alias.ts new file mode 100644 index 0000000..e4acd64 --- /dev/null +++ b/ui/presets/plugins/alias.ts @@ -0,0 +1,27 @@ +import type { Plugin } from 'vite' +import { r } from '../shared/path' + +/** + * 别名插件 + * @description 支持 `~` 和 `@` 别名到 `src` + */ +export function Alias(): Plugin { + const src = r('./src') + return { + name: 'vite-alias', + enforce: 'pre', + config(config) { + config.resolve ??= {} + config.resolve.alias = [ + { + find: /^~/, + replacement: src, + }, + { + find: /^@\//, + replacement: src + '/', + }, + ] + }, + } +} diff --git a/ui/presets/plugins/index.ts b/ui/presets/plugins/index.ts new file mode 100644 index 0000000..e775cce --- /dev/null +++ b/ui/presets/plugins/index.ts @@ -0,0 +1,6 @@ +export { Alias } from './alias' +export { Layers } from './layers' +export { Warmup } from './warmup' +export { Restart } from './restart' +export { Optimize } from './optimize' +export { Lightningcss } from './lightningcss' diff --git a/ui/presets/plugins/layers.ts b/ui/presets/plugins/layers.ts new file mode 100644 index 0000000..6cf143b --- /dev/null +++ b/ui/presets/plugins/layers.ts @@ -0,0 +1,41 @@ +import { existsSync } from 'fs' +import { gray } from 'kolorist' +import { basename } from 'path' +import { r } from '../shared/path' +import { Restart } from './restart' +import { createConsola } from 'consola' +import type { Plugin, UserConfig } from 'vite' +import { Layers as loadLayer, detectMode } from 'vite-layers' + +const logger = createConsola().withTag('layers') + +/** + * vite 配置层 + * @description 通过 mode 区分 vite 配置文件 (experimental) + */ +export function Layers(): Plugin { + const mode = detectMode() + const modeFiles = [mode.slice(0, 3), mode].map((mode) => + r(`vite.config.${mode}.ts`), + ) + return { + ...Restart(modeFiles.map((modeFile) => basename(modeFile))), + name: 'vite-plugin-layers', + enforce: 'post', + async config(config) { + const modeFile = modeFiles.find((modeFile) => existsSync(modeFile)) + if (modeFile) { + logger + .withTag(mode) + .success( + `vite.config.ts → ${basename(modeFile)} ${gray(`(experimental)`)}`, + ) + return loadLayer({ + logger: false, + extends: [config, modeFile], + }) as UserConfig + } + return config + }, + } +} diff --git a/ui/presets/plugins/lightningcss.ts b/ui/presets/plugins/lightningcss.ts new file mode 100644 index 0000000..d495e28 --- /dev/null +++ b/ui/presets/plugins/lightningcss.ts @@ -0,0 +1,62 @@ +import { existsSync } from 'fs' +import { gray } from 'kolorist' +import type { Plugin } from 'vite' +import { createConsola } from 'consola' +import { isPackageExists } from 'local-pkg' +import { browserslistToTargets } from 'lightningcss' +import { defaultBuildTargets } from '../shared/detect' + +const name = 'vite-plugin-fire-lightningcss' + +const logger = createConsola().withTag('css') + +/** + * 智能开启 lightningcss (如果不使用预处理器,或者 postcss) + */ +export function Lightningcss(): Plugin { + const packages = ['less', 'sass', 'stylus'] + return { + name, + config(config) { + config.css ??= {} + config.build ??= {} + const hasPreprocessor = packages.some((p) => isPackageExists(p)) + + const { postcss, modules, transformer } = config.css + const conflictConfiguration = [postcss, modules, transformer].some( + (c) => !isUndefined(c), + ) + + const hasPostcssConfigFile = [ + 'postcss.config.js', + 'postcss.config.cts', + 'postcss.config.ts', + ].some((c) => existsSync(c)) + + // 如果有预处理器,冲突配置或者 postcss 配置文件则禁用 + const disabled = + hasPreprocessor || conflictConfiguration || hasPostcssConfigFile + if (!disabled) { + const transformer = 'lightningcss' + config.css.transformer = transformer + let tip = `${transformer} ${gray(transformer)}` + + if (isUndefined(config.build.cssMinify)) { + config.build.cssMinify = 'lightningcss' + tip = `${transformer} ${gray('(transformer + cssMinify)')}` + } + + if (isUndefined(config.css.lightningcss?.targets)) { + config.css.lightningcss ??= {} + config.css.lightningcss.targets = + browserslistToTargets(defaultBuildTargets) + } + logger.success(tip) + } + }, + } + + function isUndefined(v: unknown): v is undefined { + return typeof v === 'undefined' + } +} diff --git a/ui/presets/plugins/optimize.ts b/ui/presets/plugins/optimize.ts new file mode 100644 index 0000000..63bca9c --- /dev/null +++ b/ui/presets/plugins/optimize.ts @@ -0,0 +1,19 @@ +import { createConsola } from 'consola' +import { gray } from 'kolorist' +import type { Plugin } from 'vite' + +const logger = createConsola().withTag('optimize') +export function Optimize(): Plugin { + return { + name: 'vite-optimize', + config(config) { + config.css ??= {} + config.optimizeDeps ??= {} + config.css.preprocessorMaxWorkers = true + config.optimizeDeps.holdUntilCrawlEnd = false + logger.success( + `optimize ${gray('(preprocessorMaxWorkers + closeHoldUntilCrawlEnd)')}`, + ) + }, + } +} diff --git a/ui/presets/plugins/restart.ts b/ui/presets/plugins/restart.ts new file mode 100644 index 0000000..bf117d0 --- /dev/null +++ b/ui/presets/plugins/restart.ts @@ -0,0 +1,30 @@ +import type { Plugin } from 'vite' +import { utimes } from 'fs/promises' +import { r } from '../shared/path' +import { debounce } from 'perfect-debounce' +import { resolve } from 'path' +import { slash } from 'vite-layers' + +const defaultPaths = ['package.json', 'pnpm-lock.yaml'] + +/** + * 强制重启 + * @description 如果监听更新的话,强制重启项目 + * @param paths 监听重启路径,默认为 ['package.json', 'pnpm-lock.yaml'] + */ +export function Restart(paths = defaultPaths): Plugin { + paths = paths.map((path) => slash(resolve(path))) + const restart = debounce(async function touch() { + const time = new Date() + await utimes(r('vite.config.ts'), time, time) + }, 1000) + return { + name: 'vite-plugin-force-restart', + apply: 'serve', + async watchChange(id) { + if (paths.includes(id)) { + await restart() + } + }, + } +} diff --git a/ui/presets/plugins/warmup.ts b/ui/presets/plugins/warmup.ts new file mode 100644 index 0000000..22c0e5d --- /dev/null +++ b/ui/presets/plugins/warmup.ts @@ -0,0 +1,21 @@ +import type { Plugin } from 'vite' + +/** + * 预热 + * @description 内置的预热,可以加快冷启动 + */ +export function Warmup(): Plugin { + return { + name: 'vite-plugin-warmup', + apply: 'serve', + config(config) { + const src = './src/**/*' + config.server ??= {} + config.server.warmup ??= {} + config.server.warmup.clientFiles ??= [] + if (!config.server.warmup.clientFiles.includes(src)) { + config.server.warmup.clientFiles.push(src) + } + }, + } +} diff --git a/ui/presets/shared/detect.ts b/ui/presets/shared/detect.ts new file mode 100644 index 0000000..9af4cde --- /dev/null +++ b/ui/presets/shared/detect.ts @@ -0,0 +1,76 @@ +/** + * 侦察模块 + * @description 自动检测环境并智能生成 + */ + +import { r } from './path' +import { loadEnv } from 'vite' +import browserslist from 'browserslist' +import { detectMode } from 'vite-layers' +import { isPackageExists } from 'local-pkg' +import type { ComponentResolver } from 'unplugin-vue-components' + +const { loadConfig: browserslistLoadConfig } = browserslist + +/** + * 默认打包目标 (浏览器兼容程度) + */ +export const defaultBuildTargets = browserslistLoadConfig({ + path: r('./'), +}) || ['last 2 versions and not dead, > 0.3%, Firefox ESR'] + +type Arrayable = T | Array + +interface Options { + onlyExist?: [Arrayable, string][] + include?: ComponentResolver[] +} + +/** + * 发现 resolvers + */ +export function detectResolvers(options: Options = {}) { + const { onlyExist = [], include = [] } = options + + const existedResolvers = [] + for (let i = 0; i < onlyExist.length; i++) { + const [resolver, packageName] = onlyExist[i] + if ( + isPackageExists(packageName, { + paths: [r('./')], + }) + ) { + existedResolvers.push(resolver) + } + } + existedResolvers.push(...include) + + return existedResolvers +} + +// 获取环境变量 +export function useEnv() { + function stringToBoolean(v: string) { + return Boolean(v === 'true' || false) + } + + const { + VITE_APP_TITLE, + VITE_APP_DEV_TOOLS, + VITE_APP_MARKDOWN, + VITE_APP_API_AUTO_IMPORT, + VITE_APP_MOCK_IN_PRODUCTION, + VITE_APP_DIR_API_AUTO_IMPORT, + VITE_APP_COMPRESSINON_ALGORITHM, + } = loadEnv(detectMode(), '.') + + return { + VITE_APP_TITLE, + VITE_APP_COMPRESSINON_ALGORITHM, + VITE_APP_DEV_TOOLS: stringToBoolean(VITE_APP_DEV_TOOLS), + VITE_APP_MARKDOWN: stringToBoolean(VITE_APP_MARKDOWN), + VITE_APP_API_AUTO_IMPORT: stringToBoolean(VITE_APP_API_AUTO_IMPORT), + VITE_APP_MOCK_IN_PRODUCTION: stringToBoolean(VITE_APP_MOCK_IN_PRODUCTION), + VITE_APP_DIR_API_AUTO_IMPORT: stringToBoolean(VITE_APP_DIR_API_AUTO_IMPORT), + } +} diff --git a/ui/presets/shared/mock.ts b/ui/presets/shared/mock.ts new file mode 100644 index 0000000..b2bcfb0 --- /dev/null +++ b/ui/presets/shared/mock.ts @@ -0,0 +1,89 @@ +// @ts-nocheck +/** + * issue: https://github.com/vbenjs/vite-plugin-mock/issues/47 + * fix: https://github.com/vbenjs/vite-plugin-mock/issues/47#issuecomment-982724613 + */ +import Mock from 'mockjs' + +export function createFetchSever(mockList: any[]) { + if (!window['originFetch']) { + window['originFetch'] = window.fetch + window.fetch = function (fetchUrl: string, init: any) { + const currentMock = mockList.find((mi) => fetchUrl.includes(mi.url)) + if (currentMock) { + const result = createFetchReturn(currentMock, init) + return result + } else { + return window['originFetch'](fetchUrl, init) + } + } + } +} + +function __param2Obj__(url: string) { + const search = url.split('?')[1] + if (!search) { + return {} + } + return JSON.parse( + '{"' + + decodeURIComponent(search) + .replace(/"/g, '\\"') + .replace(/&/g, '","') + .replace(/=/g, '":"') + .replace(/\+/g, ' ') + + '"}', + ) +} + +function __Fetch2ExpressReqWrapper__(handle: () => any) { + return function (options: any) { + let result = null + if (typeof handle === 'function') { + const { body, method, url, headers } = options + + let b = body + b = JSON.parse(body) + result = handle({ + method, + body: b, + query: __param2Obj__(url), + headers, + }) + } else { + result = handle + } + + return Mock.mock(result) + } +} + +const sleep = (delay = 0) => { + if (delay) { + return new Promise((resolve) => { + setTimeout(resolve, delay) + }) + } + return null +} + +async function createFetchReturn(mock: any, init) { + const { timeout, response } = mock + const mockFn = __Fetch2ExpressReqWrapper__(response) + const data = mockFn(init) + await sleep(timeout) + const result = { + ok: true, + status: 200, + clone() { + return result + }, + text() { + return Promise.resolve(data) + }, + json() { + return Promise.resolve(data) + }, + } + return result +} diff --git a/ui/presets/shared/path.ts b/ui/presets/shared/path.ts new file mode 100644 index 0000000..2e687ce --- /dev/null +++ b/ui/presets/shared/path.ts @@ -0,0 +1,15 @@ +import { dirname, resolve } from 'path' +import { fileURLToPath } from 'url' + +const _dirname = dirname(fileURLToPath(import.meta.url)) + +const root = resolve(_dirname, '../../') + +/** + * 路径重写 + * @param path 相对路径 + * @returns 基于根目录的相对路径 + */ +export function r(path: string) { + return resolve(root, path).replaceAll('\\', '/') +} diff --git a/ui/presets/types/vite.d.ts b/ui/presets/types/vite.d.ts new file mode 100644 index 0000000..eb5c2bb --- /dev/null +++ b/ui/presets/types/vite.d.ts @@ -0,0 +1,17 @@ +/// +/// +/// +/// +/// + +declare module "*.vue" { + import type { DefineComponent } from "vue"; + const component: DefineComponent<{}, {}, any>; + export default component; +} + +declare module "*.md" { + import { ComponentOptions } from "vue"; + const Component: ComponentOptions; + export default Component; +} diff --git a/ui/public/a1.png b/ui/public/a1.png new file mode 100644 index 0000000000000000000000000000000000000000..3cd353c9f23d2956a34d71e2e4c2bcd4d372bdf8 GIT binary patch literal 1711 zcma)6eKgZ+9G{f!axIl!uqj0}Q;W%(T#cE;#JpySI3ccTMCN7Pd#C8dODRe-v}D(2 zhVJ!pmDjvfBCaV45gQq$nBVW$%iTTB>D+tzr*l5%`+UCN&*%GmpL3q)Jm=k99W~W; z)nPE0rqez$4F*$5QF1XtRT+ERX>#SVJd{Kw!C>VX8Xu3WQ06MpG)Fs_=m~04$&1}w zJRQsmfN!C6x`@DU>)%;X_Aa%5jsGP}>QZHC!>_6`T~fae`c`r-1$W+3o*CSd`C6%l z)JMs=ve^q_Y<$R!uz^zv&x8=UWUcQI(e0}M0AF`N(BYvcO`^EUZ!+{;17JG11%Da!3> zXTgHmwQ>B7iMX>EbLFkroT9mU#0kz1(pAS`acaX}&)q$Nkt}fTj)%~D@xpksNp~O$ zdeCMZXvCdag^FJ_aQr}ba%hXeCsjiO?x(T1xT>{l^px+y--%4}j2n=@RGjXmz#14T zPGsN6LZLaau*gi$Pg41M61JJo^i2?;*1hyoJ{kK55b z?)J&zLt^hq8pQ++`b>9c*lR898eIn0NhABTXrUVo5YF?$1`@5=G;qT@!oD|8D|GaK zK)sFuB<4ED{aZX>pxpkZ-4(oqQ8Gq*&CIuOaZ`GQwCVE@U83+K~+W zP{hM|fgVMM-fv|*8~IlB(=~QOq32fl=dvDOA})>C%Z?mt}{xbGbUS&k6>D zLKxZmUC=@jz5~gsNF}uWQn+^J2W5?<=xqX;I{cmw+p81~&s)0=txk|(Yh;-%BoA9@ z@a6XWGaoOopO|Y%n{7HnzQi{sInjIjcw$yZNM+ZTkUU9@B{py0!U>(x6V(1CB&(-+x^?O7^qJeMy_3%WjYetrTOVUuKEKG`e>S;~Pu_vNP)j^& z88NjQi2=7Avz*s*O}+*U1{<`{!7svrA%Xj@x#X`%@1! zlN{zDX8qu-C#Q`BSPyCr^7IJ&p~jPSsA*#>MrLk;?d*N|%SSf}CUv?(Kn=N&oYRa9 zacdoL3m0Byx9Ku^o;7KUDEbg{r7rOqZ)RBELb5YO@NQ_NJYR~BHK`rm!om++Z}Dn> z6MZQt7_L~&XuuP#uRq9s^Df@Fy1%7SG(5Wa5dXN-CHN7OwMBBNF*bbTVOv{z6i#8D zVJ3+vU5w}Zm+VLk&qfc}25qH3f|~n+JW^7e>mgSCK?bffPw)Dpb@5~OPD}AI;(#3= zr#`+q@z?=gSsB@XNAAM!I?S}*6E=hM20Qu#I0R1>+!xgkr=ewt3G&a%9}DK>;7S(R H1^)IA6XHde literal 0 HcmV?d00001 diff --git a/ui/public/ec13203e-20ee-4bb3-ba23-f0b6f93d3760.jpg b/ui/public/ec13203e-20ee-4bb3-ba23-f0b6f93d3760.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e96b89a69c8210b1f010ad7e943e6aec81b137d8 GIT binary patch literal 373198 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

j;@z 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%0D`KCvfdj1f<7w9dwu9^0j^vuSZ|i zH(DzEVHJ~9d{XCY!F@r> zh+8;lKaN>q7=NHf^jcf4p+}yVf174$0)K&LBm}o&5M#^h4(ms6r^x49sDgA<)5Brn z1S5tMk`}fWOfJH$#VAZS9(yx{4c2Zf_KJi!+uL6VjbOGr#Bz-LanzUl#OnA9(K?yU z#XBv!R9=@CRhpMt48cf{BQ@zG94BV+HzFAcPto;0>{(|Vs0f$*m@s{Nd-u>yJjLe3 zPa z9gq5tX1poxKCHoSELE&!O(cGLQYp8cQ}x}QJ2?5-<1QV->5Iphfu8)C=&$02Yorhx zEr`T&`+<`60Q`J6kp~UQRSB-RU37C*@C&L9hKVcw~Ri3uf3VW(qjLR}qzLm+S(Dh8lJ(L+sSHVk@f?n)GJqj1>h{s^zr~s-vc8tC?>3P-~)G~(o=|B7~bO7uH z&&Pbg`GB|b--(?63#!5Q!SEJ(27LST=3o$704J6I+uQxWXmqHu|9gWZQpONQg$Grk zMlkpxDg;rXUNo~Kv|oUi8FEDe4e)=dYg7vuH=oVJDh23sLTNQ%J%EuEU>`v6sM1;P z95P}QDIPXGvwMWL2#SiZB_o`03d$>>j^V8V*a)S7s}p!O&YWHkrix0yg+v-uK^qGA znnA9-NN{~76o*>dGXIaRw+@J^{i1~jP>~RnP#S3|1?e0y=#XwvL6Gj06a$c!P9;T3 zx3}a}GS~S!=JoHuM{Tf_;?0AoqX>`!4Gk*uja; zo|GXscqWm!+VSf1pr2;vaK+352{pg2wZCDS=@s=o8Z3U(XhFWGyiZ=upc55TW%md) z(gzcGRQGyMUWu9#4bZNJ>bbP|JAisVBJ$-sf_&3XTgtCmdsobNu>boW` z$&9&pskRpGZM23Z$od{zzmlogqSCc_j+NTmNIE7;(|ePbd`yM3OTVhT3bVpQ)ApOm zU2z|pAotbIvf2=O=5eh0xiFjF?p}mzfq3J0r&=dVG4J8N@|~s#u&X?{|G~Gw&TCDT%iE?E@N3`=YI1Fqb8& zN1VToMKEAaj%jvqI2mJM_rmbLwoGP@^^CJ6qi9M8GCKEsLqhG<&0n6i`~f{iYdM%- zm3-|J2_)l^b*(%Ib)DB5!tJeYJ}tfSY;ZxhVHZNK_H&a5~+bX#F(MgRxc6W z9Uiz`u0nXJ1!10keRe$~YTfUR`A2a#iOmdgYd$T7o3c{zDQ+uc0n!2w<*{S1+9VWJ z>&tw9+^xHb>`knQ@n$DUqh=oI9L{(|hv`3)CgU>|;QC!LaZiCU>OK0;4rOf6de(96PSb7Hi}xup8bqvUk{_0$d9YMfJfHd8>WK659c_UlPAj_$ z7GKA7rRGVd*BH0bUZ&5XeLa*ev7Ek^)c9uqrRAp+)sE~fwF$+kxD{a{pD#y}^E#_< z+MYx%Aj9p|W_R!Ag|w^n_joQud{in>So_T^N%2l6 zY&3&GgfVjs8k=2Z*~k+SE97iS;sGh_`PD%$9rJmG!_I_=;A^^oC&HRX+~j(v*;|4} z=8Eepw6PFX%2umCh&u7@A3AfpS(K}*G!b01#BDu~-DfVi1cv25cjU9hGT*Lvr?f;L zdVc?nwf_riCEdOBrE3b88s58H<|DX?{bl>>Obnar>Xqh9%|?P@k_dsGyx|``FC0>C zv`FdB3ARg=7S$Les+5+#Yx(Y+K67cfhtugMNjgD*_X$QFbBY|VOAKGVS4tg4VY{#B!C~X^^Wk3MOF3$VeWz>4 zu7V>DskNWYugNRhG^}^6-!E$=UR5}fwp%OxRwm*e-YiE`ycTzL;V0FiC(*{Q#bcI_ zpShFDGH&e0>wO=1guEoH;axsG9vF9nc%;wab*e;)@nx<1UUxsyHzPqM3|DZy`?g zaP!3fWIJg5H|NbN;N}&LDQv?0Ane!I!|(MPD8e3BWNH_Sae{VVKXw{lsVbyi;@c$d zoTK<=#gF6wgECATqE9-CFi)IIHa}~}D(|hlxcMKVs%~l?Ts!hyg5+bCj?F4S9e-n}b>49uEH$I%w!qcRrf4!#Q!Skn_ z@w6TC)Q95_Pz)Yv0@FqS&G48TkkRV~b@%`bKm`i20}Oy2Ls0ZDWT=H=nP61?JG&cD zT=-q!;_E3#K6}f*BI+5i-GK7~QJ(=NZl4|BzXl=H>z%s0&Ytk^_rFhuoL?|zf>dD0 zR+IwhEsCv!E+1fU0;ChfK>=h#Lp8mWLbt)8LFjqfCJJ+DY!o*}q3@X+3`Sz;fzuWs z*bxSmxBv4wfk&aEhrTd?Byn1th5->0Bu<^mPzfDHlc77H4js8x$S4Ng0zj|ufJo`e zB`~K=0qDSBPTMQj+x%|I!%V>Iw6a^XK4lH=j@?&(dBlwr1!gCd>30A!{o1>%wSG?A zsW;nG0ZT(Ta?GT$ufa_055i2X=C#6+ROIo_=ZJ><6RZlUQSUCVhc?loY!z2UuhxXc z5ng$4P(rLdagt!ZCAp$=Y4dtxexE{JMvR^mRpEd38ceM5L|BbijJ>#RdLcmco(<1-ymeyp}ABx5DGgJWF^3;-a4Y zQG3o0Mj~=aNjGtVa#Z~6V!y2An-H+Ol1GYC_7WvTK0dMb8_na(Z?r|PCE}!SqoX&- zpUq)?zsG))ZF?YSt(g$*4+4#+t9c@#%2;bxDY5x>fzPCkCo|G6Q981M&@@4vM&Zkz zW9y;Z^e&g|Ve!WF3xpt=^0&-|gP791&R>^#JK4MUop-;bv7fx1Xo?tZa!dRDr8J;K zie{I-XKe6bCCQH+l(KyTg%_hGz=SLw9FgVSV7@mztov%(%UY7tYPbXgmp%l!7ya17 z=Dd(Msd4WrmfeM^o(jq`zkCZ~gs+$ShJ?x* zVWy88kGi~N8Ta=09_VhuEwx`y#Hvo<|jm`7JYrirlzbtJX^~W7cGwpsGS`Jg|L}(`z3Z0F zWe>qwSANcOW2^X}j;mXXem-Q!_8XmFgZkVP<(QMXH>1nsHjl1i>}hefGDXtm3`G*) zdV5xwJgX?SLB!v7#^7$AZoeEnD}t7x&LwXt{-$Z-0%GOf>^@()59{jG3*Dg^*7C%=z8=8 zG9De6Vv!vTNtt@tspJJdX(Xng;?E16)X-{~Al1kiM8h0@q3U!baUl{XwTI6lh{nm` zj`f#~3vR|(Vkui}0VZSGdU?afj#p&o9&y_iUKSxyy&6i%HiY9-M5@tt&6KhwOY&Qj z2&Qx;Pt$fZEtwsGZ}xz2rtk~NdyUjuW{>Fo$8glUbGq&f$q4$R<6$)|x0!?=5EIj9 zg~YGh+%0#AD5Wo|)gStuqpuWVzHArPw(LW4Q}9Yj%*b8^lc2DOO&6cuhm)cyOJ$lCeicK<9m*t zN2cYj>9gVG;*4EZC*9qu!30mguj_;1J=qEhBQZm3DV`(4xu3lc`t<5l>RaFA&DHKJ z>s?8)%h2z$quxgwK!rLanIi9k9X-QYppww=#_T#2s1ycL1`ET!qBu%J7l=d$i!v|+ zy%L1;lkh;96B_8%3QCuNZ{Wd2Jz(1fFz|ok#edj{_8f4k8>i5KGOI#sHV_XXLUm*c4xbz8GayGb62pctSnoz5=qV;cR}4PT)58M!4#r%PTJPWA z!IopVp``#c7)b)Ap26)bK>rTlY#78*d9$3pe9;SDX}sC<76-M1R|6i ze-N&{HLpNB$%UDd=S0KZkr?ka|5@wYMzJspaP_z1>%jcH%rLtZ)!6+@qt`ThFPj zQ@_B@`1_sPM3HGix1ICW;>GD_(?`q83BA@*bS8=q(^hu5stFS5^!k_Ot-f+ll{!%O zRS2!(#G6?1t}IN@3@g0HnKHK$B@D5v@olD(l*yo?OH{heTCpx3``lhKXV&@s&#%nr z1{E&v2UF*oKgDDi@Z@eKUW!_p%s2l1HSiXr$m$l;LGMssb#=k>$0e7!0_h{f!jI11 zdy*lAjK&!FVOipn^7z84yP!J{WrOFgbc39}qHIm{hBN|mV_xPiw}KL><#sFy(Y#4U8=0c7YzmaE_9aw|#hohzgQljjl@pG2DLV^J^)`>t z^cjmLnJ?10PJEG&eXqs(E0*<8fHymDB*xFx+4Uf3Rw*GIclOGAe=sNZ;&&!-@!#JN z*$;jfTIiBQeLrsZFrkq2*Ss(;!5ZhTlGm0m@Bo+MQr(rV5A7XxHdqfYU)&MN7?lh@ z`Z>^!pitH&-e|l&MT$xEj`RMNEQ=*fCNG5!_O#bgQyL9KPko1W*;QYuD-%||k{YehPl?FA%lk9kgcs9R>52ZMuh`=Dz8-hZ(`FKu?QcEyL31^cXw4m6(z+wSNX?)XESK-SNZDXL(885x4s}&m<2) z-YNv-8hDK;{Gd%|4^muI-CDh@X=0OKf9dBVtq8-2+nJscq}#KpOc5tkT`Ly3E5Cd2 zW6NCIgulGNm}8k%$8pl6Q_NEs#U-KQYMhm5GG~1>#`R_|l_s)IP&L=iGw(BoV4}uMJZ>#P3-|oZw^>!oOi63mlM|BeS4L#ziFPCdj zJDjNMJ?}r!qwCqa^%wm93&Q1j++~oJAObk3qak zNqJoo&^3^(m+}D<3^Z%e>A?8Z3dQT3#@HGgmjUC+QYW0103Z#XaSeu(LS`T+u?T}3 zHUcw4&sqSF0}T|y9RNbW_6x*2@bx#>=x-J7FE({TNc69`_ZRE_(*aMtIM7R-8f2m3 z;aN{7!`~M`-8c`jegH9zg(s~2``~Go?%$^aE!WT=N>2n4K&ZGqlry*xo+SoXRe?-; z_UV8N3NAwa_sRc5b`-(`iiZ9aR80Sxlp!{YD$)MSFQMDeX+-TVpd0=$NB=9zo(j3} zd!LRqgP#4*76gi#0-u%FA6%-m84!XT0UhmILqCh>t-uckT@NsG4w~XkDTSIe#|KiW zph_n|%Nak^12M9lcPrQr2z*3cFj!V60|kF57pi79 z_4~MT=*23vr+{K+2~^B1hl-iN3Y=R@{H>=t1cVJ{Kgk=q2LxA2Oh4_bA^7S5Ad%}# zdbl=zTH7g$y#j9IQh1OR^{P^*B*|+xDPo=w;PEa%J6+`g=2V% zqp#GC4yPF4EhczGW%yNarj(_GWQ?3`FCtcF*9f0XUZtBotSC1#Z` zcXAobZ`;Ge*eZ@dy7DigZ&xb0j70FcD11jH3Ax@%@@w zeSHHyT^b_2=CyhF{gQ+D-Z~#gQrv0{{$;PhPydyy`q>27aJV`17;AE=gr>97m5Q(k z6cnVVZ)OOo*xsCOEIqNm(ZF;kKO^|#Ilf0Px|%Ns+eli}DG8e#-F_*gg7{%cGe#3i zVc+=kl33)2ZDYE9hP(CRj<>)i?a$nR1 zEKiDT2c3~m{Hf||w&+v>=<=Sc(@cFjn(as)DdAh-+E;(X>c8iwYQA+x&*E^K6oaV< zg`x_#UjLA6E06DZY9l6~713R**74|vFdyGN7h?NcrJUQdrCA$^1A<|fe`K@^U-MUW ztv&g)Gv|RFp@%ny6TG(Y{(kCi+=jKpPpzRzHf<*tlBJtj7CAAK%=9f+C*D%t7VLYI zs81DcbUR~+fM80*#bCPc$(MI(c?S8__RnvMI$OUlwa4Vq)-*1>bwST}MYi>~;9HUA zHe@`$?oDQsY}+?$6>gt5ReGosZyTajIk!5x=t!^aciohsK-2~&m5yEd&bEca|3$dD z+Hk6;-<3TlTv3S;TO0@PdyW>lsxcj=Tx((=-9vXNig7p7j>YzEQ{%#8BboBY2)>J6 z74KtKhh9E-AZPZ|`jSk9B$tA+qG3XMjCVrgwJE}xy|LQMLF2b*K-}?bxs0GKDdY%` zx}s&VtLps)w!)>vr{Fr|s`JRRKciksC`y{MH*X3w`kro4*m&%Hw9sCM_c#x^T(a@` zghcr`XKaNmveAflM{gU72rMb9IH46$z618_#1K3Dt;JYSNWG7)fg+A6P(KWhC@*hl zL}>6!NP7b}Jh377EyOw?`wOt$g27l&?mMUut^@vP&VVF(^$^2WCWceW?*cHDFc4h? zi!bn;9CgMR0(3!g8%BfG85&jZW$-qk^%HS~kQxGbI7ituI5&<3rR&8kIhJfyWvj)$w^#Aq!bkRrAO`t1+ z{3R$*_l%iBnSZAN4iHn7cDQjCe((TTrGO2W6R^!vl(`lv_5tw|`u72fz5cE2K~F~U zVE8`(sDypJM6d-I#!M)R9u*7tS55v8BU2%ShD2DPke=CRp}4;=L(i*l06u`Ze*hHj z@cjq5|1$Z1&R#SW@(0Zq1(``_7o{@>Sa@yW80A*r%mr-nS2Fi7?4(Yc0TX0Uk4r(; zAjo_Sq+jTGp&}_5jE49h{tIFMsd|fL{D1+3FXW^G6#W6CDDVW4?HMAc={ zIrSYp6aC?q2;U!hBT6@#)1QW)m-70qlM*S)RUNK4twH?IoRXZ_e8iJsJY4dGw(?eA zO4n*~@%n`d3eTf{p?pzKbuprMv{##M97px?_TNiN8P<}cQ2S^R>0mpQaNkEQ+x1q} zq2+4}HirGw?wRLcsswFnpURM)g)hRt^qhWQzVM|Rot4kB2FkvV+=#}^Xw@kSd{aai zE|i=T{C!>Od_zVe*GmkR{6k!Q;#m5@M+u+5)QctyaqRCz-TvH-wBap-7=iGJCxfZnt~m4kDWI#wJ9sDa`Zu^Lv4m!^2`C4gN9D7 zx=u>cIOsXGV44~!w|=#tSaa2*fKHYpkm9QTe9VkH^=n<_I_WG;wP{3S%_Eb@@2%I? zerN9pwe=E>Ij&Q;r7SD9?uz8YCZFo2rr({u^!lb$%yeY|>4yR>KS~_Bgj8a^xo!zi zbV-p0TMbw=QnHB1>P6L}`{E=Mku>zqZ>PVDnpDN5H?rW!OfcbR{P_k;jF4q|+)CmT zkHxJ?Mz5`&ocxj2_~HhJr7jMp4WeAL@oO)lNrEQ6Vr*n8Tz~L`0$*8`YDGXyg~4rTHM9BqSnxQZ9SHV0HncdxImg^|h8%YlQgW#{%`D93=Zq37-(_q|~ zbp2s)hM{nR6wf1${y^Ptm%TTFR+WDu%^n-Hd`}m0u>{%EDh0B1bQwRoO9_rnfVc&nyI;}_8S1%CPIRElr%<{7AyuHzbt z;IozzIOY6Qr<~elIicofB73=p*%jx=ow}Z!6shf{b-%pprYwuIjiu7^D#;S$mda*A_KQbk4-i0X&gU0 zo0{M3dnaHe;VzJ4RIf~_+~{H+$VHsuuJ5LRoKSgRW^yZDr>mqea715KXa6xmG`ut2 zH#?-xwwC)&AVuzvm?n&wRukj3M(6aV0>rNo?_vEaf)YiQ-zFP3_F`5>SH=`Lq;rc` z`1nOGn0_&AZgs9@oKtsh8otQC8nZ>zR=@f+BTPxUPVJ@t(-21IjE9>KvBNK7GJ*Nq z6tg%ONcN)c_$*5A8QdFWpFw&m3`u|!0>%hD91v52 zmVaJ2ap=@Y%LhEBQ2!=?QFl;A<2w6MoOut968d*IC2kTN69^J{Lp{-CVx-R_1mV(V z3`DHJ`vC-l8!g!ZmjO=Ie@b-#sg{6S2>c5QWKTom0rv%Ig1{+63N==qDZmgN1oQ|M z@QVVEGyf>Qe!v>?s7o@O{ZdPeJf5?A(Rzw9pBK6yv|yfw21r%sWNp5B;UM z|K5PI6i)ekD2f|OE8eLG?{*n_HK;lZj{${DK;UN(1PtEYf|lK?T{ z{EXnv2M8K4^c>{tL*5>A&`%R}I!lcNP6-6oU+7ByRD`cDlqw966MB7Ma>f8Ks)I^V zf)4PX(kBd}@HPw(=d&#Ux(OIebC<;=aRcW+FYVZyw*kuY)Z4lGJ#XxOd<1ji^`O3& zDe6lk#JwW^9(|Azh#K%x!abiWpFCgq%^lt3OiAzQqxS7S7UZQ0FPli*Kkv1wB{Lz& zf*ej(+OalI*OgZo_Kn@jvV60XhQulA#!pz8_|4RVcm9_Diu;cV?b zr)v$dmd8Kr+j};TO?Z9Zbwy^R55~RpSME>&`WJ_N)x&Ezu`{5ZEi=~)&G^;N3#01Y zl=X_H#tgmoZvsg3oEoni7EVU_e3!ylrm(4LD>5>RFJ>LN6@sTZ`gqu2ho{9Pv^r#p zomElwDLpMyyR2PKiRoS3Cyo-mphA1e_Jq46cy3)cee~r+$wt|3-M5$>OWSf6##F1{ ztgJZr4dTYX)P1Rt(Jr0A=gZFBocyKRZt>ms;TwfP(|Vb9pB^o*ZdH)av3D)YN>lNQ z4u_~`@d%ZvWOS>wuwBlk8%M_{MOY_ly>sL+m6LWX=S`i&qK%n6F&ChF{Nqx=ONBgS zS6MFl{a{lny4P5&luZwTT|X!3p#NdTq@3eo^fzAXNiRX^j}6Jz^j^36?l@57hT1AHNSIdfj z*Ijj=3hyP89-B|PZ4L(L_Z&XBWWQ;Af)I-14p>-{li|HefQiwS%+)gOV?I(f@S3Q> z?{{!?N`Qp!rz(N%)CC#2l{T4r*9M@{3wKKR{Xz8N=kCE#NP`~OOl$22zJCy-p!<~U z&c>%_r4bzXG@Pxr)g%C5kr2S%E%`DO5Nb&(`~-_SRiAZ>Bg5V3F>mDcX+4=BS!_kz zSCh`J^%Td$w$eN@>|aSenR+FYw8KKI%@$eX+`5PQ(pEF5z-vVk-Zl?p7-6--{IJcP zr|l#5v_8eMvLVjr3$vkx0$XFYIB5<^DCac*_{8X2)D_lW=NENG5=7hoATS`=S5}@s z$E5v4WdGz4%&-^FFw=2hB5rg#5yRPY5$9LwA&#A|cetZYyiVc1Du$7%=XI3PXe+Hp zR@QyVW>g}WUim#qbBmvW==GNybo5tC@IHK@dp@2qlReVTp5d!sf|oBkR^|U z*smEORgTc1SbcN;Rhc_}?_LlX?`Ar6=lM=Zwu!nL_#2j9Iv)TKhsShQ=*{t`(O=8D zuaCbQmp}UGc-3KF`;EdQ&X^ftN<%`4&7iUHA2Frdyf5?3=4r)4!WCsW=P+HWu9O$} z>R+|hufE1}Dg0}Gspc=7*C)garb@SnYiXZlSxk{4o=G6HnQiUFZD$8r=4Q5E82ORt ze0_SmDH$`bU3ytM3_&fc&N+GMfjv$Y3&|9V*0R*FxYZ?lTbt>_uJ;b=v<0qtWt6IY zmg4af$9LBQ&+)GO+HE9$Zl5DFY5s%hm3uAe@$ch0hrR7{o5w6_S#4KlLhtS|cKq7o zl2;>fe%SU0p)Qbl5P9^XrYolw`ZHbSHGA^r!D=df4ok*eirn6W8WfKlt=J`V)y z&!Qs213|krsn7SEd9$0hU7FXoVsp%h9B@4pReMH}brQMHksBC!KyQOl*8xIZR^Y1z zs4E9h_ofFqNCT9{g34zE{=oDDDv&_u1@%nGwF-%{kfex0VqlVm@dA>B|Fv=gLnj28 zsD$`4bnXcQNq&Cz43Mb@B6?4O$rdpTCTOB4F(7U_kf9bxpMdiGqko zsJaTcB2Y#DGQu-v2!H?I8E~gnNxU-V7E|@4>Jjcd3)My1REG88}Z0j!Zxzc+&e9MAtLDLh(IPrKTI{E`$)b z#QFP=_t=Q%e^kdjr%&fCX56cK{eG}Ny1`S<)s7j@Ep|NS_Z%CsArFruq`bJ=j{YFd z8DS%{Sv9rq5eiB~BN}$-6RNig8Czy)Ci8q6e*-d#EGInxI61HiT(Tax_*NJ`PGI{ia|$O7*n#r7x4t8~GfgUQIj z=f7GjyoSyhZGR~23T1lm=qu2*v>q zfZ$A7g_sZi;VSUPlFc2&%$g&6N{;Q|_7lm{B@Oh_L?1tf$lAQnJA6~fy=8~*r8Pbn z_Kk1V=?#x?gFbf$&V*HSgPy^sSOUSr!@N$|tHGk-s&;R^7*uM?Eji!0E>{@3aosbP ztl!nuEuQL3X*yz|UNV1`SUi%r61qPm@zdJf5E&4=bU>z^%yFAvUV$<9`Of5!!W*{Z z9^!z>`a}7mG%d_#YOY(`Id2ADdZ~Y@H{OvO`}&R}Q_hyix%yRD{a!NPlEn}Gi{#^@U^$eYmjUlGc>PF#yrAEfEUAoJw^sg?I))0HtbvIH` zbxAN|@!14D0lksSM7BEOZ<%&->)2l?p5u1-RGddWd-N&DDmB?=$v(c-Xkl2h>Uoio z$sfe}W`GYQR2Ci2N`B_6luHD(wNh{j5v(_Mb%Qt^AP@sh816%a`!|gt{5nN5 zh(V#6`%i-tAXo(NcmB-934~6d_5S}RDE;#Q$^vv2{0moK&#JJXjRNAQXH6l%1jGRK zfuIN@Xz#dz0N4+DLE&SBk{3`jU{Hq!J#tnVgkI%;C@|Ea0p0mOUl4(O3IOWHsb?4* z49F-#MIJ$i7KZXRp+wV4;qs5KRP}7%08(Gz1=N z&&>K5bXy`$%pWZS5s8YA8lDTvRO{`PVcV0w$x|c}c*IgAa1@xXMOr*EXL_%e>G&MA zIFF1f^&As&l-Tn7@Bm){s71y!pUj8nU=D&%>RiQhPpabxk4>v`u1Ql_)|nO~H`-{C zV!8tqYD&Z3tK%}8?y!i-q9*{1dh0jITRxNM!0$J^OF*ssFtuX7#QVn`TI=^KZmdT2 zJ8xENS7~oPE3z+D*uw`IB|J*3xy8ooy4P{j&v_5*W-8oE5=kzgw89g zSKHo^6A!z4XDjn26dUyQv!~pycVsIuWqm4uZo%3hDOwAqy)WVAPO{nYA%cGP%b9+b zurttpA>-34-_<2iNEm1uwdYc|a6;2Qy7>(m{gIs{a&5Y8E0Be`-%ge*kVU^MDfU>i zQ7>DX!?(PxIaH+-ga)hOR)5%`4LnjNe`|olt(ZJiirBP!rx%XQMM5OX`s$J;eNf8 zDkps_C!9SgULwZpiw!FlMUnZ>6|LdKQPP86=k>v$r9;d8Y5p`4HR_75BA->uN$Vv( z3@ec-OB(xg=`5!o02>X|zbIZ#qqCfNkO6EPke8z)fLq6b4STYhCQf0Z&B}dLpz*M1 z&~H+dp7)n9uNx2W9_RO>((%Yz9O>i5oxTY#H)0GXZQPs+d(*?nlI=+<26Dv{R_3uZ zvM7&9Li_@SVlxIZjb~`HY_t@*Q`J(x6-2P@Rttou3UK6fHj3$*XVD@w1J!eRnx1D_ zRO)85)S6;=BFPqWeq7XljfWeEM%R_G!<|v?TVgqBs-k)U>l>ZFS9@1_Y~7BrMSJnX z+NAKA47~>76wVvu3O^Cc8tShwHnxy<4vSt7KVH?xR+-HXSjGCTEL&P`{kFW+7>W0? zs5wph-i{0jdn5T}jO_*Ekp-%p83NaCv%r}NbGGy{+t+@)wtKk!Olv#6k+u0Ict~dt ztIgS77wnR$#i?f#sRPpTIzW6#7mj_wffziw;4iPS*_Y9 z!in=*h6VPv@38QTu3*228YQJaPEMH2t90OGh$w^s2i2eYf7(xvpO#Bth*s_CR4 z-H~!1_kX6)52i>lQ1+ulmHjT1CCo-5eSM(@|5sp-4;l5Nut3XT3WhP%*3Ur>>Up5S z94yemc&+fXDaZ~3C$RqGtVD&{DFGaU#VN?h0ekVm`h6Od1Fd5a*@9NbGe0J(dI!pX zz!~#@zarpi(9+KUco@_a|F^0Ky#y3WfKFx(hH4Uk;5$etvxZhq0EC~Q;@|>o4Cw*y z{-1aC6k<+M?Y}Y_?COL|XwdPXnhH3gG`2AVTaFinKrdxJnRI03%Qre6G*hE@9vZgANI@ z$bgrHCC(HG&Ch;-JfpCY2tE#|0|f%Muu|aRWk~Wne=d9*59JMQsidCx+P)KXgaN#v z0r#im%fMf{0J*%Tq{&p7j7oOR{`(4H*gAoz!8{envN~dlAAQp1(&rQ4d_a{0P z_h>r>q+n2+c8aw;63K zs1v0Np0Iyk3UnezLyT5>e{J(1^Y!lwu<4eFY91lTSU{!<#V}10 zkkB)kuBHqf%=IDJ<^mc=5ZTqQHLu!^dX$c9m15pl$x5t278S-VpKm2JXyuOsFVWkw zmifQTM+;3qdeMDUPhf85@9#Yr-f2K$y(LmF7Ws+W^!ma*Jb!%J1bPDoHQtcY<|c#+ z&EVLv;p`o(QOr$Z6I${aikJM{h;KU?T;YK{OJc*u*`~cQlTSyg&CvF+zqDO8SQA+& z7_EJYX85(4CB^@td=;KT{odtUha=BZ*WdE4Pw^XWC6xp=x*@#?_w=Gx#Fl;>Wu|G$ zn%3Fy9VV64;5_*l9U0D68I)@OWt{y9qm8PusYDv#FZ{m*KuAiU)##1lNqORtmi#C&a>tRBXL;DK ziF>}?Y?=RajN9wplLCu^yPXYzj8@{Jz?;*bJu&%1>iXtYW(|FM>#v_GSu>A}!v8MtQEa|Da!GCVPh`A;On5Yvi%V2bryGmiE5O z9)>NpfVkXnl@ORvZ>|4+fOfP{5_I870dhI$_{Wzz!t$%Sok020hUInQ{gO{NZ7-?o^?J(Dc+$34so3g$EK881oFnOqkMt55sT#Kh{QR=)*&r z8{~I{j|94*g)*B$m;^Wr+|zK1L7?IV)I^{%Rv5)KY^J81RgLrK!^+g0?vUs zs~3g==#*;()3iImSTHE<4gko1RuJgaJD?aEaOA)Q6C4ka{vcy3rXuu22y?;sZD0xk z+8T5Sz}ExYOQCD|3v!a2+DvgfLE0R8C{+3ag6Y{rkFYaDErdQD@LhI-p(fd%Hq&*$ z-v`r)c%{U|%cFAOt+YMpFIk`%fbM1lcPmfCOz`=#S<) zJvOZSgQ(JUXLJ>2-R8-j@Yu(k9R*XIySl=gZsGrOr<=>SBg~EPSYKGZ zsz=aSeLb1_scFYAt2#B?UtHLO4Q$Ve3YB`It~A$$B)S4~+ZTN|+6m0|*(IhSZ(XzW z-Ok)<(}?wfO}Z|9b(XQ`?7>`vpUGnt_d10ah2$R>UuXV3Mr}u};9{#8^{}9#>8rkN z+_)+Z&d|FkqX3%A4YiML>H{T|SW>H!jTia~7SstXFbw5wLh1nkhn@b8 z@7J9#HMWq@up~_H5Zmx%nzCLcqcOhPWlb%l--t1H-g*qrxz~O}(0SZFt$eyOy?feu zwkCASmVh|;{6m-5J2?^)&6vvlEyrWXgBaa&@$+0AmmVMwlJ^{UGvprd9b~zL9Myxc zmuf2;A?3T3W||uL`YSGO%ymx!ZV2}o-b;SMGHthVgX5~@c0QW_d9|;fM%hZDNm;K` z=-2e65QYtv^NmW-h~GhKJ(-gs4zDz_k}b(3@Q9cFgRlzhec0|u>l&P8)F<9P$HHZ4 z_3QRX1-j_MCq>C1HCs_m>hf39R&qqu?Duvgn<$u@MSIjb2exi3o^wtJaGs>bANk>& zkTlw}+y2d%N8q{S^|Q~di1 zTiNDH%c7*F-NTJ$hF$h)#vJLfF9Ok~%8P9mzomd7ri@uh3pO^o@p5VDmf3@tMLnKs zh!9H-wuHu-d9^;iK#pv>=AcRUqTjnnoSEKRG3z(Ax{S43aV%oPFy?GHw?6aco4Av% z_r<62eza!uD3=&veip6~EZ^O+mD-e>%<$0LTsg66yIU^ZrTdattF?sIY!)cCHG?2C zh*P!NVPrqnvI^Bdc_9T!dMU=2-l3Nw{pgOV?+7&9s`*~gsdKIVrg`C&KL~}f3DDMV z?D~9Rlt1MzsTlFqxdug&Cr;xtp>8)>-wYc?i-eSN4=fQ3uhZopTt*7IoYMjZdyF^} z!6X2jOAQtAoZlmrE@-Y{Qao12oVfZc*Cb;ANQWQEmhM;$B?k=8B7uR5!B#7;!jaPb zosl(n@{FbmaS&yj4KiF~?H*d%0-*aMH^E*lu;-jkQ?#k}8_}$)`N1op-zQ(Zc=f!x z^M;eRzmflAC6|UesSM@c)#>6+M9ec$(|*}6tk|~>qkS8iq6_v^=xrb9d|MNYp6<85 zIz2p=?|sq&a-|kC+>5-%`DGvB6$b~!IMaunu!DVM_RPl>RXM{3Ld^qk)_e`dR{DHJ zixRV__afwiR$@%8Yi)zq8jsvtPgb|n_ohyS*^!HRCn{sO=oUu&OU%_mLUu#I$}3ls zY7AP_>m)Mg^fu1rgN-j1{4Yu^SV4-IAEK7oBFcH8W0&-|@5KQ($ zXACqvl1to}^8u8b#wB_F|0pOyi@VNWwg7PtfIScZqS#s?D3}4+>Tln{Q&bTvnP>q> ziEtcBJ<$RPXN8Urc3(iLW`7A1%IG3>$}r$X9%5RMmO7{BRD$%Yriq;z;2x4^Yg4ApRORyy=LM zmVOKwU!hA6E+?2h2@S$ZittwgzX9N4dPXNf*AgA|+Q8-!N#tn(jFX`41pXK0S~=5L zQ92)rNJF|O8aw!c;(14cc)iO}`W_zJi7i(ZI8ck7_;wwwr}9{hvYX$Q27 zoC^+9V|R+*)uTONw{TL9zcptX-`~tPJD( zD*va5Jb?w)ZiT##m>b+(1LqD@DCTl*@8*nzJuN-HA8*vaMO$pXRd*%)WU~a>QbA4= z<|v}soWoSxrdK!0ir@2S+Ktn%v_f}BFr&g&w5jCTJLBK}=+_;NN1Yley6t70<3C2+ zyl>u=EmgQ@p|C2#8S*V_`N8s*fii2$!ruKy8Y|0O#VgPP*5n83apYxtf8=Fs+Xm1yU&oIOYC;^=;f z%iFjt^4%--#oW`6XEUZiup0TgN6xsFA?7x>9oY#*&>ayLX7PvkJ8w6MnLnk>C9dXf z5(D-&FWl8FHRJWrKsr5D#A-y)rJL~lYiEj>h?+@Dg0XqBM;|)AE={pmUFEQnm!J~? zjTysT;nc>CFEqA})$3eDeW{Km6kj5cuZp!dh-*zeu8o^_%xOJn?MZ(fqx#+LZlK&V zJ}7yt@vmTf^%`Z(2q z_BT7eFS1M=y?tqqhs^{%O$}!@Y8!7;vQLFjwf>--BC&3yO3D`{l$Tj}@&-pb{&g`MGb3Hqg!Lr(65e9OGJZu?Y*O4ZITCz}^lBGa8bSZHOQ7QP40Av?6C9)6$f z#t7#G%WeEy{4ov1G54vvD)cA^TkJfRWrVYrJ%@9W;}h$Uxf41}ehCT$d!&}59-`*_ zjr2Ln#sWfmfdlQ^880hlZ`YUH!*gt#w4vrN-sey;V-^|*4SjbOxgoPUa} ztYJQWU`+N-<6EW>Vo~F2jg7*=GRTWCeNpv9+pQVJLO+WK4}4*LxtE$)FbB>>;@Dcw zmO93|?BtMGf)~lf0gso+z<7JzCPQX!JSR%7ni#*HaW$PVFTs?rWvO6dCRY;!Zy{(W5 zfiMq>y!4spUfjfkf^yhHO9`ai*XQ$paqap4L1^XI#>6%L79#>iO!W=)4`w}ShVeuC zk|du6zqG~k9j4_HGgT?|^q(+ndXyU{eJpF)dxCTp*dbP)#A=8)M9$Z2Wr9(p+;uP1 zEbF-5v4Sm*T+l|gduK1DNpe3oAfUfI`iUU|io8E1UH}lA`6%;FKNqU`T~SIhb4~!!ORu5=6^J&Zp^bK+sqKZPG`5_N71a`5=DocL2 z0F0DinFqs}A$y2Yr{w8U4_0^BBBBFCJIFKw0z;uv8Yr3p!3{QnRWEo1x{TxgAmE~0O)cG~$@oF~rU^jkVkqvE z-6_Q3QIItlKy(8+se&Bk37Rx${Z4K2YYlk9eKn|;$;w=rK;#z2-WzF#VPxJkC6Vae3gu-?J|7*Aym)4j z*tEAtOiHo@ZiIO6O@s5j;Ogwk=8BcsB9C+LcW$o_H5mN(_LkoFYTTm8AB;0==-$U^ zq)P7brjnUyA>GoKIzt0jnihEu1-3Iw*_JhVzm=sq2-8s@MA~kfl!kwIHcwTmw%a>7F)l-6%vi33C2=_$G8?yox>ZL;dD4_~2M*NX^eZt-_j%++ zXboLeeIIvk*&vvfC33+I)3IK8X2=+8KzepxQA_L*pWxbJOsJW{+rY>DmPFLy-Bw2z zi7T?SusX&hc9T8gf&kgRr!(uVb8nJIZE+S6UTrv3LE7w)t$FT3|^1Ewk2o{2oTJ*5L2{wa4T~rd2$@kywm^ zMm|UPCiVjx@eBg+4{^ngFM=+&xDw9K*}S}8%uA(E$eX>cadm%)(PI`8gVSD;-~O6| zGYKq)b9&o{C&Z&(I@EP5bRDr>dmhrCR?I=ezW70Wm(=f^XaU69)W_6A-In}_ZiXjJ zKY2sK+x1t~(t86cN3{prhy%|>?R!v5`xaRf)sqcAEma%F+zmWWeOD()!LH@@F)bxIZEt-2y1TvgIf1kwV)s#XZ;lli-ES7q z1wWP8Rs3W<-amsmlsqbi;pW_YOOX5bOee9*R$9%kUrS3vAL8o}*2@jP>uNA=;htXB zH?Fs-7SJ7JDD>FuIssInF*EB)%>!XhMGV~C~-Sr`}14TaKrJV z6ixfW%|(rr&(V))1AOiw?-3wBmpA}Rr^V4`UbIUFC~#jT>|O{r+&KO zjc4neVM;O5j~T!+{|aCU=WD2%wE#HV|4yI;J{5?5-GIWh0g-~f{*TBtcqj&jWD10v zvS)LefxiR=1ZP1sKrsa{fBF&-#zB5X_{BM4DhnsF8AHjQq<+%w%m8##fG({JL{uTr z4FLfGAfHgmDuDkBSL8A{(jr45P^0Cb zl#v~+co}-z1>22v7!oAJpcV~4GS$Q2zv?8+NV)i5NP_{fqEVwuO}zumjMV3?+{>J8uA%| z8Ys$z32iV=y+)|)Q)BJ`&hV!AWladS#$?5r`i{E*w-QJ!+GKB?ER2@YV#{ zV!(-iVPvRx0>3|x!6VlhpcI1pe2MF`$YWc}-;Ws9exB@t%nwfw-dyuaP+bF-b~rEf z58_SwF_S9wQZCr*YnZhy@d0?|s}#SjFS?xzkPH}?1T$3VKAT?btIN8sP z{BDUHCpQ53%o4oUv@Ybw@uYnu19j3TC(63kS@@&_loH!F>6}d#r2@d)O$3t<%v#htW0&I2b1n#xdg&5@(uHr3lSaJH>B^bmt*nd$E5Pf_PGRbl<{TXA|u=-;*Lz8j-M zAGAosAsW~~TuzfH^`Rr5u!=eq)&em&$}_b&VxO~qu;;9Gn)WO{7}yX)>MYK`t8zq8 zcSF%!d%&k(5YvNQzt1jPwWw*N*h4MZFDB%Uw3C~xOAj)zdZ=TL*+P6UP8R~CG|pSO zAOC@I*_!bf< z8)8EMAE=@$W~AE+EzC_dS)~j-7xaxpv!&chU(Y@(?K^=>w_#k*2_g(;&2iw$q!&Sd zfOzCBsFEfm6Fu8m`~k^&TPt0E`b12+Zp(d`2*y<(Mhc{z0WXOhdt6?8DC8XQJP5q`N4C7dXw948V6IO81m zJK11&gwPA(TlgNo($Z-$!pn-eoyv^4{B4|sTERjq={FoTuFB+fYpfmyqTn;surj3F zd?`1XaeRzq!wIwI@`7K|I?DO-w`(>Lh%}Crm!>P4@3#e~*C?CZXy$ejL$s~mxB1fu zyaDzAKB}DuqUs&0SIYRW;VevcL35vyxQk6oiS{o0dq2iYYs zY{G{0xxjua3EQ(u6A3>dH??gnfy zeAI0bUH$HBfV82l!2T!;|Le>MN&esT|L(pG~%k^Vd;$jiT~-#VJamV1(Fusb3` zN;)@>s#Vk-X={zrJLgFUO0d@ zZ;+wrWI143eBTTDfsyWI5p)te+qse3i!W~bIB(7+VFc4FHaF|z zM2vDY!bX#AXI}V1U?JRDX&F|Zhro@47Cg6Dp@6rh!u()RS9pte%aUfP+xQq>C7~Pe zJsSuu*oAloR>pc)m>W!HG;K}_KJ@0*vV@iDZ!4ly3}zq(4T54%<^wj$`{Fu+%Dm#n zTnulbbzaOAzgbnEy|wmk@y<1`#>@MH_2j&#M>T&8VIw|53yYq$c?}33zEvO-p zL=OWOY{eC-i25|6KF+myFHCc@pmQ5guL!sYp+hF%Gyq1M|MHXnXRQsrJj6c+f&xS- zFcLkkW&dx6>i>;3`}c+ZdujRi67xLf-(eK$sr$Dz<7t8f6h2Bae8~bxd8=t=d0)|E zaezztxso8X-0M-hZ}voy{`)DPuJivcePJIj#7`n5#Zf3l3u`NYxXA45nmSc?Tx>J+}xB1_(4MEhbi0Ut&7&kp&AYwc`TT0Yi{+fna_JXjIFLcVI;Y}k%GgE9 zXJiplEVat(7=I{wDQV91l%O(Ls191~RHccyYZ#N){h@Z4Uhf#2O2puPxu>!oo8Dkr z=h=_x#WJBeg{G?%zII2=F9G!BlZuWu!0EE4JX6kVc@ybJ(O|JkJsiO*WJk_ z@n?vOv!bWy&)Lt2Ba$Qa_$QVl6U{GBf6|hQ&5)VMZr-Jn3 zA@bMn__yOz@vo{3N?(&>;s7BGNYKRsz$84vy}z~_VAuYic^$a%AN=?T0{^n`xlix( z|B*NY5b-H???0=M$MfJ(Tn%Lsp5pnQj=9I_{}Chog{V-6?;|r$jtM}>++67LA1nZ@ z^_8H!|1$ve(mgi>AjrlO1i?DqD0eT6P}T!1X$^X|pT2nS!~lWq=|SEne+vGAscXGO zgP85Ry_YeQal<#RVz$n|FB(0rz4IOVvsqw%r*XEY*7O0uA7$6rMeaCK*KBM9tdZgo zxSmrl<%UO-o^=|ByKLLHBITJ@L9`^i8mx0^sZex+HZ}LdY`KVVOgd6Ok7ezumM>&n z7?Eo>it;GMUm^TnvZN*#Bx4eFW5T-Yq%i-uKAuQ7M0+gHIK3;*e7aC^&j_&Y;W-Z@ zQ&kHjj4@=v2ta{`>piIO*m$Yx+LwJ<#N+0&)V@8EJ=lwabw%eyqgY&GU+~wIu&10% zRW3C_oOi+8Hp8rD3GR9VT8Cdfo|lU1V%M5B67Sl8X(0tHBReu&nTN_8M6&CbFmpik z8i($_Tt-p8c=KewRPW(>WiVmVBE?2`CT}roc{l#MPZdAS@;%C{lD)PCn1{+Bc7(`h z_nDrpmk;YGzTZk*C-$iN9m(ri9C7WQejwvfBglMpn^YROw`}6!rYzGR z31|sK9vsdT(l5%rfm@CguV*qh!WSviOyDuiHKtQw;3yLC16u1( zY0hE1VfeNnl4^!ydApK5Wy{}!P6)#tZBPf9IK}O!G1>?NK_jfv#qFp^y+GfHrslQx z$FZT8zu_tPa)W>Z;)X=Scg`Qbip8CJv1aR@G)=Xnf8;_Z3P?GAM>n847GqT`-i}0? zz#qnTs5k!|^K`JtbsN4|(dW4pKAfbq;>?xF%M--4KRn)J!grmRL%~+x&(DT#m!2w5 z6r8}q4>;207F;p?ZPYi;>;x%ljv1Y-xm}sC`?+NHWZZ80C+c2rhlw17Qm*B`5;1tTr#qG-I=l^kX@c#;P^YvmtcO0+tlU>o5 zehL2Iq6c)N@y+JO*%wD`KX>GZoT9b0J5v~9`hMb@@%BbHOF2=FTD`SFoTp$i6tg6_ zQ;Xbo6F(tHcf~};kgv2GCP+>wT^ejIH2fwynt_p;CEjmvzY6N|;3R7yII*0pMNn9e ziVVH9Rv!Ci>5!6QI5OuVwu=7A!3Ook%XQ(;{R@Nyfa2j}V{9E!F(Yx15Ga%nZ|ox2 z$l`k?vD33#tXox?;%mQO`~SeqOj#6Yl>wq(GWQn}IhQC#*zCRaJA3$FS~2BuWnc+! zU+1&L>tR{x+P=!n8M3@-x3rq`ej)GjN4b2`l849AT2a(f zMKMDXhMslFjylq`@t^uX(Y!{t;J70=3F27dU$K!J5o<4}ww>+La5|i;cg^I&rr_05 z@=L0belP#@d`=dB(~@1qAfSwDWQ*%vM@TmaXK)^6O_X&PUjI$RB6|H6B_(*Zg-UB~ z2jD*XpTTZ!D9S*hcbm@h-$4=`3}aLDl=4q%3h`>3RKL_Y)zzt3{}FYcQZ23)IDcQp zJ4I4kKYs2h)Vr#_RVU08gm14Ktq`&^m83L0SfSvrpbg$=^2Cn$wH|R}VvCs`Roc`c zXWn=6D#_-Y`?m)J1(Whx-MVt;u8F8>5^V@fUtGiqgQXSA7N_w;93WaA157dxjRdVZCwZE{d5QTTR64;+>)lZ?^|)BD z`{ACZ-9iC~vcv@e+yZ5f0gC%E$8Yt~tqCx%P)I{h4b4)|iVS#?G6Ah&kIMk+M}ZQs z{f7!^|Ehc+MN#DR&+dOnKs&tYoRj*aavp{kTK;AC>fD zo7po{ppOft$|*zX>lzCZ*5u|}yDX7;uF&yaCXQ0{UC}?vVRc)!o242S32Ysp+V5$B zE#?tuV~%(r(ccYIN4)SGryEV!GoP~)e|_9{e{K%RgIGEES*$b`7E~uk5v0?j(6U8z zH5Ywv&{KhHY|l?sl`HVLr4e=zVXjwckz)Sm0Jn>iq%Fm{ufX zYR*-$p!Irnp51eQk_d|gd`@lr{=0$$X7kj&=_eY@`3cc#EY)0<90f(Hg8XNFLPZn) zJ@0!9#+Ca(6>;3Wh(^S_H1gD78WpT1*;h=TeUwBcQ~bc@;5gMrv$4tTK54g8J9C*f zC4n5%TIbT9(WJ0d{q?efFrtf+Q5-r!Yt)lF;mI-{WG?*)36ym}gCh^Y2~W>e}BIdYCWVF44i>%VC%EFnLb~KuZ_9Rue>=&%H zA#~Pb*@QrpIe3hsH1nInQARmxGn;dL9?(Bu-x?0v%gGyHI8-!1A>@(O5`>%l>4#0c z_33^%j=Jmkgrx)S)VPw*fZZ!sjZ>YF+llm-=4a-S=23%lNuwv3u($eXcYDd8!MA)l z8JQNKLmdxLE`dcVFD8!UWw^p$W(tr9J}qbvCI9Y75F`Qc91UiM0v{-}$clWj8ABx| zK#$)4WFkVJ_;-QxWO4oX75?`CehFRe`~^WzxcOf;=1Hjt1^>{c8x&0gdjEf|Wxz`T z_zd_EP~qUCR^&-XH;PAJi0n(-WZCIVZbzi7-6s1+0lwh6j@*?n(k zvu^Rr3pZ?PHt60S3V#~)ydO(!*iTtk(h<9CSP2Djpw|5A!2ZKujf&~O-h3#2#Cx$* z_mL0bzppaSE(5liKQ7H%SH6gbGcQbo?XG3gk7YvT;aH9Xf?!7X^}TlPikagoqff}v zXC9c2YqB`dwX2iUP4K*`=YDJv#C3QG1#~6m=w#hZHb9!{FBc+qK}{~{w%l^s=SA^7 z4e5v)aBfjoJJ$#1I!ExpD zh(Lp#y4%6(4nQk>%L?(UIumK*?cqTgY<}0)z>sjhoxE&cw3ncx0H+Vc{ zriPDM8rTY?+}|+1!jx($UHjxu*ZGdZS7Xm*{Tw?h>7~2yemjKeJVi1mH%;zh^>B&u zSq6cuE3{!-ZuJ9!OhHbKCN>FSJ^AcEFlhY0TGBPwc|3=KBc>y0Sw*`i9;lmez1kT@_pLU>% zW*0^DmBmY$CQc*od+xqgI;b6$6*yhFG2px3r4#HQKq|5`iln|(zQMb+qKfLsQ?88` z?7yP%`f3=lp;pHEg||}PrFlubcJyUd*yf2ca)$xoWKp+8@h(PuVmuX--Cn!F4`5%; z<-W^pKkGca+Cn0o$ud2D=*^v#64e999zYoPR1y zCJwF)E8*@y0Gf8-+OO9pBOUq9id|i*`$JrQvQ)Ii^ zT7Dz0{lxs7ITD5Rbim~L`3~7}-qff1Hy>Ds@3?FU3JW?JZc?5z&m*Ip6}jmoQ1;{u zSZVex?ukdJmse`6Q(UYH(~ zo^%e#t9bFCamYdASz)fFLnHTWUZha)&jQ5}p(SDGn{q&ocnDZx13;uy6JPRMnvvP& zRxFu>?a3$0T@l%Q{F5Vi5KoeNYmV`z6sl%*Iu8blQ_GpzetAm#Tt=B}CS1j{-L>7R zsi}Nrmh6g_e)07y=82{*ei)0sLw)4Oz89ifhjrZ?R|AT1+4foQgAlw%_SRiDQ;#P{ zFWJCWil=X;ryR;w~ljU3XC-|3J5PXZmc;+h3D+ zz~4(1!s0CHlTvIAlYZ$29!PJ)IZU_1_#<@ct|$brDyog5ZFmgIo#J74F0x?19Sm_( z++@R5a77f@Y?OJUCZi;LMkz<{vNmUr5sGDLA9W;^+Nmwuv?IcHs_sJnByKFHyWp7|BYXj*kxa5l0Mo@ ztE;)V14)Q5?5#CGn|H|Ptjj8zjKdXke}Ic!@L*~JcW9g59?V@a-UPv&yvhW^_*UV| z3@spfidE&o2KL&h5|;zk*Y+PLJ@AVeH3-f`^?#1>@170&9O!rlPrf-o)}kg;q#q}- zpNxsogrAD`8gjqjIaBlNNW)OKVSyOSe4dqS#oTEsxPW!aT3Yp}bvhNM3@lA@47~}& zh~$3`a{o0fv4W&i_3g$!e?I?~xvmG1+oYPm%inAkU!Y2$W#(1QpFi2Bn~=FG(YrYEuo3dCtA&kb~O?x z-EVV%9e1c2&xwmc`tT+9xsNR7D8^?WMXEe-l!XhK@$>~2$rw!GBzqgTET|$yyGGQm zR^hi2QNf7$zEd=du0A21^QY~>>?@UiN^<-zssZU@8Ii&`i;5J)oKBT|AFw>53`N6K zLuhhcZn?}^Pad-}?L_DabI`9oc{#h`dcD;`X58?MNv-OSMn*j7H2l?DNED^~#gyfl zygAlPt<;w#I|t+uWOmfQy-93S?#)$N#a6mN@p+{59XlWFM7mfrH$!X49ATB|8?RYw z$-eY6|KzI{k`l^^4I<-?NO!{Tqh&5ppo<4;^l zvNnHP_mPmXphwB)$F?Sby@LTB+VNkRO7f>DL<^dp9>M?5I>*L;d0C?`xt78I@HImREHt1)BCb;E3h37%* z8({&B^x?~RY$t&8Ux;-_m-Qqs zZpD*Jy_5`naRB$Vl~TN&=qpdSW|y*{JN8wiPcKtbhi3E}tge8%+Yfo(xmGU^Q?E_g zCDlgoy+e7_vdu=539CHw_8q|}$!6!2)t^O9P}FN`0;i-$vaQ>Gm>Aza(}8V49rhwL z8yT{Wa4(oo&CKhvT_W&p@O~i_vx8EgBZwnI7K&9qB9@=43T8LnRS2UuE)56CjWxNi zUYQ+L!&h0bE~C(P^?N1|t<6tJ9l`HDsI<@Ss@+D`>X*?-_S7F$8E)b4WlqtT-DwrR zvB032)?$1C8@83_a&Vy2l@zZ_IDC+WUZQ$Zy3p@+!t0H0c2-Bmsp=5zq~?i2RekMD zp9yzs-RLy>We%R~#q_D`Pb^i!=PoVx8*EAAN5=ItEHPY1-5CQ832)!I<&_-K$Y3>v z3#^xt4hiZ^R+j)7&%Zbz6Vka(f(U1Gg_rr%tl7INnlXL~nzh#iDi+IOnkuIoC#3JEFHy z5qrv(9`GfLI=v>W3+JjQY)c%KFpImqpvGgh0K>7PoC#J@R~y5@b`VA_uN*H(uCt+$ z*Jo_s(72B7Pgg`bow;lE1_^7<)_#18N%}6~n*)|+opJ$rYNTH%-}`7Wd7Zjt#rHPdYUu5U@0%Y1OdoDGJ4m z%uOvO#W&^B45iO3_F4}L@dq*JiT}=LxsLRRscNN(_?2ygtnPy2Sd}Jh%iCv7+r}pA zrhi^0blfqlzQd#`L6Q?6-nX2B&K&8v3z-Vk>x^m1c4{>d(L4X*b@F0rjK$ufwBwJr z`_go}^zmR+z9!@+m|^fmQ<+aVzo7PRJG~EYZ%SpihX!%aPlYs;U66U#B|qja+pT8T zuf86e2C@@kJeqrEWe*#o@jIz}&5keeehxVfdu_SS?#vwZ_NTuK-!^iL-SOIzrZ9wl zb>G5MLpz=!u)!(`ibvz8Op~$k_*f60qcxYgs)~J!P<)&<-IDL<80xR%Tj;^gCOJOG z%c7YZ5CbEz+i@GCF{>=Pr|mOsC{{nT%<Svy+NyR$f^Kv17-3% zR=#djv^Uh;y43?ad^6~q%a(0l%76&em3({k$2r)Md##W3HR&yKb%nWZFSg7K)puQb zokc=hK!}K+@KVnm$Nvh5B`6U9EAi1U$iN zoy|9(z;Oq!LAEJ0!&Ob#bPG@gQvKkn^}En|8-d=HCvwM`lbUNQ zsvYM#*?+nOql<=lnFdMP-%mXU#<;nmH~ROZ+zh-H{Y}JQK2Kl^be)WiHq(ipWjoJ~ zAzEP-bLG{ZeQ*JuYhj+GUUSnF6Vz>OA2Hgf^Y#=;O7suUF4;4lLX{w0E;WQJw4bY{ zbn^icPJK5(N{Aa7mulsgj`Z?*s;Dn+Y#?f}k5Ru>lh#AgdNnk?e=)92)-;&Jk5jR& zr`+hL!L8_qLCh5PG?g-lB#U(6@RRY>s0(KCUBmieX-~omAme9?HC6Z)mU{XPH`dEA z43rSge8b5NHCctwwTAh@W8JKzg1YeSn*;__J}>cZAXQ7yoP4yDJm|_9?PDjIEQ)Mg zZ*y*U(8cdCRSw^7kOTgEj6sW1oKUX##9(j;r8bP`jtnckQ90}Kgoq;ddv9dxflmMJ zt*xa-z9z-%hgmHxx!Re&PxL(Xm)D^LG1nlA3-gT4?2N*~MY}-bmNS2N*t`0z4eT zM73O1;t_45+92MjbLnVit5mTbVfC(iA}J>8YM?;M#Qi~V-zs+)7xp_O+%A;zGR{fT z1o0Ed4`$|B@sGhlS!V+d1n{!#CAo3Q?kvOrEIWHSjtgo=nB?e#{pd-w)c>1?i&TvgAJ4R)7guTwTuh6S;)gFS2C67 z=k(@Q;q5zHnUZwGYu}{~H(K`LsA#sH)&=W}9~Ozl1eRH=`yIJCJBxKFICp|N9Bc`h z-Z{G;;#?J+X$e;s$4Bj)g!5%p$bVy$C2Nl^Pmqoow$^IRyi$F>=6VN`Y%v)3pj-vv zGOq%$)oeV{6)gJ_F`O&Oqs?<|X*AzDTL{AUvEDHf(yTn&Zf_mFD30Y+X!hXB#T=_2 zO``5lR5hWB1&GiNXlmZyNC`0PW2`Vdpdl~(E60M$oB`Dqz_kN{Eoj~$^cybtN#YJ9 z+5>{FM@KGV7SyNoc{6nMGZ>be1q!ns<=N1sr4QX+JJmF&=PM5uaQ zY3E53_8p3^M2McI2WY$Y|C-~#&<6k-_K|G`QfvV|_+M@n*lq%!?fZXXsenBsRC)cl zkfas>*54V3C}`dBK7aJVZ96)0!D|D)wO8tDbb9G0FZrY$(jC$-t_U^})UtwTqlx<% zmG;d?&1=nYi4zmm4PF(>Tl~(|g?#XpabwPt4{af1Q3O*Jid%gH0-5|~eGsUBB|Y2G z;^Hkq4>Ai}g%j3sp`|TX@l4SPEgDx|>+kQxhG=;*4_2Q!FW;(|WvXu(>3*H4qfg@i zBm1j4y~3ncjb)_SyI_D&_fd}xmqeXu$xFPiLHNP|Vtgr`4c_~y8jmB>sk`ZzeSj{_ z=DQxA2zj6X#^y)(bdh;A5!P5>?2bg;1yez6-1nktDoil-#Kh}4CAJQVYy(;20-a)- zN*XFrbDyNR*-YayzLEh&wAl=&T;l?b;z0Sf;JEA)UOvx%wSw3VsrzG+TPJd}h|HxR%uGigQ%8^dm?CgX-a%F}b|v*#r3c z`^WoQ%{=QWUIs8$~NtgWnZrGRSLW}$WX%(kLw6vs3-r_5swL6a&6fZ0`TfCCa3 zL!sJ3+$YV)2sHQcui)^nkMHRyfyx5@3O)XF+yEjIs7-)s;C(h`8{oC8`U(xm0uB}c zw}%4y!Gy;;20-8sxC5aLypQq9K&UpLSVYWbSp~ke17<%kELRK*Fd}RMJ8zf)azM!V z5~^T?A%71*ej?x;d9X?4k6{mk#^*3F9Z~a!*SDV@2IJ=H5?&KGBW4m z<5rp%d>3`GHb4abpv6WQ`>z(dhT4dZOV!hN7_R00`ByP)612thj%8-YHXX%QZtCX? zx}^E$*Im8O-Y{NZ!xUcf2b$00Oz#v2+Nyo4Ujlq87ui^FRJ*Hp-fPo5q=rN_@O))l z51SYxa94A~-dsy36s=|}spwXc`|Ct=cm^fmZd7H@M=h&AV7kOzaPPU&UrB6f*BZTu z^gG6<+4*%_nU5r#z8K%LaNO#)TND%5 zsKz!oa* ze1jR(25Igp5Zgl@3A>ueLoM||E#3ihQ+Cx^CqFX(muTx8hw4t5lci z6b|umoH?1Qz=fIxmd5eI4FN2RUtE}~PUVX-XY*Vy>g!2aeR$Mx&UDPxqykATsoY4w zdsV-uvxW`oqkf>lSh|7n*I)w_>C^BKuvz z@2#&mKcFs1`~w5eJU!h=A}*Fx=SVg?`{Zq{)LF{^3lyKRrd8+QsK@;&>E1S+KMepCJohQ4@I(f}Sc@a51 z$`P!QIa0f}>a#jkUU(t&`K0|RSf6&b`6UBEt{#F#_j%i^i;R)no>b8?H$)J#ak+hB z9;6rBw^sXCG_Vyd$F^bfhN{#Wd}HJjL$^D*z1rv4%c`+cqdLENzA$KUh%U6(zbaTH z5n++SweId$pMcCAn&BI--==s+9A4?niQ;ky+3pMgagA?i?^4n7x(7fpy0)t~16@_h zj@m?JrpE!_D~}HP*l-U$S}8$>99XjuD{}FE6E|8 z)$AXO`BQgI7@#mwP0{FXg)koqq`jd0Av!Ot9t}w+UoE`fobzL34OYZ;B>%l*1h7-cioiO{sQU*duN)vMK&Fd2-4b2zipA3_>p5<)E6+=g5PU7I@h;55Ek3=oi;H}Ah6;kKA5vT#nYYVo?a#)> z1E1+(WLBThhJ#gBMI0zwkS#`0V`GDOtnjAZoe-eCu4t8aibv~db9hyhJlVODYc`k7 zM&AMC&1}0EzWGv6K@AscJ0O!ca5*P@>Gx+ekQ(!1kilME?T5||1(KL(uoU7+K@z{7 z?U90uw@UPuR_Y>Q<=bbe@0ZJqHipYgTpBH1X}|mfW9U-quG+&Wt8`4!%q{)=a>E#O z+QB4e0N!Y!+uqB*P8(CIm5E#wt1rL5*t=DeTX7xVL5uY$?qWw?UoE{-V^i7+8*!Eh z#J5nXuZM{bXi?qy3KBh1(clp@`GgR3Bj9a5aD49jra1T=qvYV1miodAbtS12{G3cL zgTS>y&dto?O13iYch!+eVj-5Lh>ax4FkNs;vL`wP)#IPW>AplaSbgUIHkw)#G+r(B ziXj@Sfgme!RV$mmJb$Mzw?fchXFyu30h8<|`#R|o1-Uvm*oFl0k5ErwxufOwXyX3Y zwN@=1K9QWjJ=WW!U?UM$QRg6mt_u7lpeQMT}djpyeG3dxJz{juQ=R0u+42QNv(IR$);AUR5_yUI;8{InMGIc-ej7qs!IK-%fq%E zM>ng*@m<=Bhu?@SkF+z_!#v<>Nu`pXd)<4!>A%>I;U@YK=OD$6bv)tAC%zFv0k@<| z)8C$1klYSZCSOh-f(xb2(fgV$$r`1v+8~qpiB?p2mP&(5J1kqji>yD+xX%7Ijm(;- zM^cSiLepV^{RH2$+~1Dc#3)s37iib;-cFX*B0A%sCI+Kh!s0m>G_iTjRzeyH*Fn8^YOAq%>u)fY9&y@0t)=A0^j>+U&>CS=}a^yjX6dE(@b$GQo$QkBC zNX^%}qWORsB-Jtrsc4gcUknz50q=V#SSI|?(CB?1DP@ zQ;?X_&sTXQO>n9!x;()@i zm?w|u6XyUm?EpLp;N%3rp!C1-?2q1Cs1M~oHO)`65_GWW1eVWG)2#>$)1#pUUgUii z00SRCQ6~W701OA9)JHc8RQCYvk^yK39R^ig~=(m=r2WpoV2kTDAv}5FS3OQ@Nyh! z?7rTXaqf$)xYKOTH9+>Zk(iT;*?paE$)^ruP)#P1&8bQ>=4uc#nWLbhs5@I(5?4x2 zpiXu4shw>7f|UkP=_HES$ihkr$13*$5*{P01wg`M5UX57jj8MhKFEK8&9EbFASoj> zpu(vEPvlg9U8qs?%6z$4eiE2t0+QmAfH{T>BCPChTo96LAWcz6BfDAnk}4+`tG^FZ zsgni41&atqsaznp69D4|(0}KG-b~+WZkBlk)dOPnbsl>gx{afNEHImg1!|+d15CJF zwcGFc?r7()ynE5J?14n+oCM>SpBE%pkM!;9KQZir0}i~J2hFEd6t$A>Jsk+{rQ0_8F9;Eg$I3nht?VC+>c`zg$ zUj2$FSg?M6yR#LbRb>L>O{$aY32shc+ln7;@l_C^V*t`$sK3U>LNii;WA=S4paml* zhfW3n{r2o}q=tsJ0GauWfTji-ViGzc@&X|5s9yuY^ni&9kgY?%{+pUlZ41@Y046u+ zhz#{-Lu&>e@BG(81w9#VrGfe&pk)R~R%6Ee{8$kLoD|c5<_tJtp3aKV5#SxG0JZ~4 z##BLFRM0^N>aBv_0DRTZw*`I%{1(uMVu2e_f@TB^3rt%X%4*I|lW(IJ7WyOSfUQT= z;B)W`TkBHDJ`fq-m`Ge3BE=K_1rys~KOANb^l6$$7y-YY}u^FSI=8CI1E#1c4*4mK39{E?1WG|`Y4~0-ONU#Sy zOA=hbk>i^SIxi1!J^qMYI};XJfO0)fePPj*WMr-b{O)Zb`(Jv&7tTR@H@GW90peJ7OU7{Gm_N z2DvgTMuAhpu0jDueGfvZ%N>T*&GBBkW{LG%VBFd)ydtVvqpWSYl|2h9A<{zsn{fNI zY%D+Cy*)MNUJ{>|#c^NVuPE|{S=mRdtF=I>9oXJ>Ma)+r#ppZbJ0Ui&pM5-i>uoQz zxKElh=S^xNS}VT)F&n0?m$i36icH!n0!@Zf->;sc=E8k4Sj$YFQ7s)NZl9N?EchU4 z;XENs;0;%??MM8ytgHjj@50=|95=b3)L5E2og!ZKNi2W6o0UnbEnI7C-UMiVfV=9S))8-jK2^J(g1_@{ga5Y50baO88 z#FhJFoTc$#x^@%pjx!q4x&oru$bN%g`};lrVz*{QyAoYZsx$MC`HCN(J;ltmM6O;^ zB3OB5$!LnQN6yWm5`0Ka{!^{>OLat7#<@V!xvx~s-K+XT;KY{u@4{p0L048`;btA0 zHHER%7L(WteYX)vN$tDlp5q3LbuD-Z~C^XdHIB$oN9l8ufB*G21eOO?JZVVOT27H zmjx*)H2#t9Z@Y^+=h#ti@b{tJO!!kEYaUh2eZfIRWTn+P{EO*l-n=(Jc&NA=I+M%^ zM=6KhWlbe}P>ww;t%B}_RQgqWlriqtpy{r43$D?es;?F(ws}q6wx#c{eov1}yptNm z59hhWdoiEXa~zhey~my~de_DH)${$t4t{B7^r`X;rnxkYcVaQ$n}`Rp2s^O>p8ch- z%ZhHq5~rOldDl5CYn^PBoQQf@wwbl}PI6l!l;C3rX}2N5v#bW<! zDX80P%%q$anukef_rxgGD*jjyW|8}OlMpdjaNY2-`8ck(uTC#fytGBj)CTfZAK^z2 z>(I>34>_!ZM*Kl|q55Sv+mD*f!j0PPVa+)(6N_}4M3LQ^YF4&^I_Eq=6v z3qsUwHneub0p4u%PC13}>hxt$ZwX!6o9$2=Y;yK+`13LyQ{O^q#Xp6h->}RqeOi{IP?~9X$tNvJW1=NQ%Ln6G|pOpuPD-zx~Zu zjN?Eh=Qt_BSd|Q!Ge6t;LlWKMmQ;QR{ozVeED8(JTue9Xkhyimb=lFE(pUTEKl8l} zbx2BQa%Y?LSw&}I{W0pl?y6s~ki|6j`Ws-g+vkk$w^prz(U&7#>~}P{jMmZi-m%4? zc8$aMPl)_zc_y#jpXp|=@(;`ke(XH!&nQ2}n`B-yvgpcBuRAG{x&BO^(UQ{&WfO1K zN5Jd8F3qokL$KQ#ADfeFa5%lYK{U8lKau|sL@puHVb8>G$B`2)*-!eKiler^*xuwm z27mk*QP}n>!ejhaExJKnTpT{Sza_6ycl1FWsZowJle694PacU-K17|aJ@n#0Bo1Py z{EjY}a&ptc9dld}HHU8@d$gJkoqJDx-3Ym#dC0t@sdC(gHX1I5v8#ATfE{f*plv#q76oEh;adBX zHsaYawkOD2wIOh}_cJAZZ!M}i6FfDC%)v?I9X@>YnIcMG-?)0qH zxn0q_r8F_~dfxJ&cEtn_Y~>VBi-_a6`P~{B#b=(>bBRc$F5>$K9)xeRY-~!% zOs&yXPX(536}A_Nzwg0Yc$JjF&)QE%KHb2iOASc(G5lDD8Y@2C#r)M16fs$q@S_UN^@t*k|9DG*(2z-Q+YYY@(N#{77s=|{xxZrU!jb1g%vU)#lR&G_P0^02!d*%hg-5D? zc*AnC*2w7;d9~UX$;Lcn^2raAIigS&h1-eGNve-QTLWs6jmJ(uJ~&9#)-F1Czvm$k zm=*hCF?>gP!ZoC7R6a5GhhG5?^&c49q4I-s*3iO>kaji1)%ukp?mGpcAC9nie#2mG zD4V0W8vP&J+h0uz)bkDiG^o`8iqszCbfB>8Ul;#>)A{}b?d@RgNk-uH09pu|r4CeIJ@tA#2Gl_jBed!m8ju4tG3Agv4oS9{v-+6Oi7o#B>d60V z>PLXdij{xvqrpcU&;O(#*Ibhk*>s zizLwL9-(*#%dC>*D+~2vP=(Ex=kc-B#>xuu20lvKvohwp6{YNmVBS=TpW{*sI>JfR zr_H~ea2%YS%1Fx*^L>=R&i1zi=J>9vWBFSPeDb9RGY>dS779UdZ1dkpSpP{BVh+t& zKWspG8T^wBD*h@OFQQfovh4+DpzDebQpe2)SCUzRR46;0HVYH<6L+&Dm*C>|Knf)wgIpJ?IQmYh6po5 zaTUmE=uF4hKQBy{9v*SzRX*|O1d|@Rr+<>6I2RE@FF3$-Bp^AVPh1J(SlDIuhYMcS z)fL{(YEtUZe8^v$n)~~B3y>D@ zK7Yo{s!W)rymw>gk|=7|WebZk{EfCup8r2EX}H1slH2DXq?V5lSlbf3#d^|7yDsbH zHBMmE&NRXC+h-S>WiFp*EO`X&pNCopZ%vgyRKMM5WCANsNLb6a4wu{!d$0WI!I4PQ z%6{2VkrGeKVQ^joxDpHoCmgsPVK(%e0DaUyv zjp|}NzI}bY&9P10$*C!=oK0Ofo{(s5VcPHJSvY9)BL8@D{EE)X8S7iWz&scZB9cFs zSZ(2`?X~mFas&ZMtD{9=`M$ry32V%v7(*jDB;w9J_4h@oX19_R6XPYw?v$aO@sN5-4QH^(iN#Bs zvSkP5CEm+je>E6p#@t8M{ zFOMMy(dOGr4y7I1C*e$9;V1Ajn~3CTW(Tx7_m36OGLL}=PgqB_rtec2&dB*4+*HU% z^9VnrQ@{zpuLceGa3>}X72}Q8)S`oxHZ2#A8|dQwlT!uB8Vx5AK29Z6s?ViH^5lux zXb(Hg;5*$!8@xy0Qc94m3-$>AeaJN&m->sEnp4jnh~LMj=r-q=&WP@JpJL6P3uzKz z8BOuc_2C^LoT)|kC_NODhtFqArot2N^HhV7m7syurtBVSna!szXDy|(ur{@wi>@$U zuUPSo3gq)MZ=Dxpjgbp!NIiE;IW_0sr(k+ZJ44|gR{}2r(k?6d*kCEInf;2~S=>{` z?t!Gy^gJ66)Vz)>{(^Nr3;|s*fp#$uBA7GNwi1s?w<~I1A5E}8+b2v2Ke(7^n0XHn}XStD4Vjkt7R54P?# z$Eeb;2OFP~IEgi=or_SUZY+uOJ0pnl8d`f3YZm$7(Uig*(nu?Fl9&4x#P_V;DOuUR z{nlXCPRPgeQv2BemUq`04mu3id>4NzRulPQs`6Z{65X{#Xw;I)gIlQg5=jj$e%eB` zNINML+TM_6+p&L!j$Zddq8?w9nh1?6#Xq(`Qdes`)dy1ag|HYNS#Rf*?gz|? zYSf;yt~yt}4~JCaEAGi8M5O)8g@v@G@tcGa7(q(oI6CwuW8atW1U?^Mg|3V@W!E^g zV;yPPvb-y0rHZjjPn6i@C|W{;7{VPMlozXdT*f9;N{TC*{bJ)H;^a>1gt4UB;OBqnK@B1#$&KSVjK@TGAY zEPmp@-CX$5m0SH}PYL!J%6Gf$%z|~|6%aOVgs^~4RK*X=54WwF4vaD90nkGOqf5&HOC^mkTwVcyK zS&J~|vwY66rxCL)zXZq8?hKjcP!ZK$4MFaP#WOq;vI2zogOX%*$IDKE^MmQ_X&Dnb zl!{z66<*UkKm54WuSy42KMY$7Pl4Me@3<124(QSk55;U3Aria;1{}XV+chnMZ9Z|? znK&Z~?5H^6ibuN;h~BSYTi#9v1+k(=Cxe#JjRbwWk5pOv1A%bBCJo$|xM+wpaXX9CB0 zaR`KR1Ya)zvROHnTNe^|gSle9nCMX<#}Ef=_f>F6(Y)1v%SwpxJ&YK-uV(hdA??A% z`6-#=oGlR+ZX-6Y@fhoJrOkeQ|FUbvEBJd5$uEm}#ejK6W&v?IONmcxzd4!T_yn8KYwsVaWfZ>MVoWYTK?21&X$`xCeJB?(Xhx#R(L5 zC{V%ODQt_-u zHIw))u)j?{T9n_(tU-Oc)hd+&PE63g@A=LZ-#PW(i-udgg1X@L1Grnk7$Vsn!Oq#l z6OcM%9gjw_Gnv+6fFF0xMg{VMK5|E;4|yPGP}E~C<`z(1x<$CFj!`p*c2c-KN;ep2 z`tGyjdRlv*2ew_xcLX;ZhJWB*0cP9iy8nTDS1atV!_|m)OIN0m>2~BxG^({#$9J%9 zr#Y85vyt#+Jw&|!8mG74}!sVf5JmHL~_gykuNVLAj%r+7JEy)2bs``o`1!pjQxKPUfx?Q>sL6$h@V zeHfuz{l7={|GoRmUqOT&5pm!Z)mjop)MpT0IlJjQRSfg#P5aHxY*#kddB+Bb-N0h|#{^dOD{kqvet4n_oYVR?4b=*S zw5=3~tLeBESY0{I0$HU44qO>e3IZAi2vD>t=(v%dYCTggq~FuB_m7Cj*exsEIeuoj zax#tQ36>@5aLzAOS60{fSqxU9p%`S;Hjp+*(`ni7>{Ze>NY)94T`j=BKcwlzOaDFS zTfut9L<>n7%4ViO>e-w6CHQu_u%kUJNz4`T{yz?@vHyt{`LwMEb#L;&z`6`|NwS9U zlF%5Wr90JCaK2?SiaCSPY{7p6vcNAIFhqOMIIPqJ)~i8S0%PkWa^=^?e4&xFw?Ha~ z(1M9D>*O-fa}+XT7|t({JSMXgoYFJw$J1zNfRy)kUI@j=2aFywTL2&AUHx_2UKOTt z!VnHYt-!R%0_7_n(fYFd_fJLMYb%So!yh^Pk$`g%_6}^30o1?%!aCwg%PmlUwXe+06Z8xsjOtYZ9!4fMC31V&KFeId)i zbT|-f0EnP}_cAv8JBH8l-+TY%gYr%tR)Y)&lN&Uv#Efil8uQZBu;k!8Xq(;yZs>;A zvP?YvG%?2fW9H};V3V6id&BrHX*s{#lawj_oGzwT6{A;rq(5c%&LK}QGbd2Bx3yIF z?(0S@R*j@11Z2PquS=2X*R*@lV>B)TfWB)G$c$wUjVG$dc}Sco)mDM_AI7{Fcbg5Q zOljH_4(z2iNOfRR_C&J?Znr_)+;RK|P6f%aXAPYNThXU1TmIzLg(<1vCMhF0%)Rjw zH^C$56@$eeT~d^*@-fLD?a{UgSb9>gRnO6i{^&NlYvt4g8M9#XjiD!m9I(#`_KGrQ z^sxV_|3G#a-#3{%IZ!*h6Ba`xqZE)2vG0B&M1F8z{cY3{?VJVBOI2>v`Ug%nTtZ>x z2X2iE++2A<2qDkH!Z|JGs$=(ASv1*p!P!<-5DP`}w`cAtZ|h;b`435t7YV1=l;MJQ zR_Yf_H~3=jMug|TJjNX>`CV#NoEoa03kp~NNoY0myg|&=d}Ls+%h8Nbf3%uvK;V{< zTfwg1*jAp|?j*0E(IR7XIJIL6IA2OMn1cGr&ai=O8iSnBbCO-=b@8n-hI$*#F7aqv zM9FyPYte1-WR{tZKV_bj+bD-gbRHknfyhFV44s=M_TC+FnkxK4CoQ0hN%FRqJ3ayX z_{489!`<#{?z?2^xV+P-uY6j6+Bw#*7yNjx*+*=p-bqDv)soo3abTE&`tclxcALki z`sB?4r>1xHm3T3fiy*~nFLHz~>g0LK&C2FumtwL*pOaufosGgo`>4o_$HP$3RwA@e z7~5P`n)jBl8h8&5GbVd#{i*i&^R+0^EX>Z6+=y6ybM1It5d|mcRTu|f>wZ;`b;apn zG9)EQn$;?~9W8#{BNzVl*5?|mAO_7k&=3)0pUgiRON-<3)1_+slSPaHN_Z!Xg)P@-!cS)i?z>3M-M3DGv+mN$r9G;j=_Udy2 zv1ME^jzdj4?`Jt?=C{f+OZXzeFtP1iDR8?0@m{+(h#JCy!A|lp?d8lVxg#FS9bk5< z(e0YpTc`?)(DBX?4yv!$K_Q4SCnH(ahmc%?)H}Kt*`KSotvIavPX(F&Tbw2V0}fB*;T4n zs))Ws;G2e;-BJcy%1G9pSSP!0q|E5wJ;zdo zOMEI)i8W8(HXY06icByW+r7e%!6CHfBlm>;@;XM;!WiFAhuXW_jA9X+19}HNK_3R< z*K{NkdziH{iq6%I4Z4KStiGDFGato<5|Am=-p1sutS|k6jNwwQ{M3oe1S94c2)}-i z`ewMMZ;s~GK%yN~%P!lI;JZ;!H#O&H#J{vG&3BMy_AV-f&WX#1+&^FZCXc$q27@!_ zhp!d{KG=(GSeRi`A*x0>Q*J4Nk-kErMQk(a#P$lgqKi7Ql0wZa>=!u9jeu3&Y(#*?zm%WkEn5~v^8oy4vcvw{*%)slm1u;u~X#<(HD_TVoQKLulj zbavL?!TbD7I<87O)NgnT&OS&-J$o)dnrY$uU50KsI|@qy83WImUg>?4ttt=kldFJ$ zeOX?dawx&)5^)6XH zF*VHUu-JEBaID3$d5iqO{dFfiyK%B(lqm($jBNEF<>ysibr(h}YTy<95a$4SQjmNd zhPR<{OitnDvD0)+BXsPt5XK1Lf3$ZpMQ3RxGklFsi&=-YOff>omv8zSr>dbT+Y_!P z*ytW!zxgs!5lG?IteBQAP3n@JTnJ+J`dC7N7RrCD->~hW`o4s2IHi&9Y!}BrH}*U; zCRVAT=4>U+l66Ca%?fRF{*QjBtNpk0_INA&@D*aYFDdI=9Q!&>`b-+CSBm zuMXpfUD;G;n=oH>Hpf)B6|d4~TbhLg_*@s_mnKpM9W%_NO0rm-$9|h7%xy~972E49wW%}*0 z8k*YtrrN~76xGa{v{DP;qE&X?fw%uAQt&V`Z0=j|=S~Jc8W!{6=R&mjokA9&F~43Q zyNR;dx$6d7BCOz^(A$ZLvHPq%qHiN7)afmCioNv-b<{s_3ZW`;UETr{4|JcTX>1I< zL*?7i9IjCSROC*-p6tbq^{nKmrimiCK5o)9qcONL(7%JZ(%HqnMXsQs_G0+xO@QZQ2QEL+z7ZJ-j4nfBA9=bbP*6J6pG|ocj$en<;$UA6&0Uq=Xdbzj;d%P{rNZEDJfG*8qs z@C^<zY3#^Y?8?x2h|kP^QHHw}b#T5B&$p{4y8)9iMRiW8;Dy zOkZp`G=Bw0N zB4sQ(DhsNED_ekqHpevzIO?ygVYSr1AP!^)P$&bI(Q8LnX&aRx>XXA;dA{=WMql?m z%~I4Ajb%?tZW@L`Rsq(w{sC+AVR?(Cbk~Si(-C!3O(1htr_%VyAtE=#6)B3^S1qUJXiGNqFj_Pk0$8>ocAwiFoP@-rEb1ma-l zd%_|LH~Dm>No-|`5FjduHUUD859@AJO!tHbcBM0{X@e-b3z>y@#sy9^)5vevvO>a@a8b0ZmdG2Sf6OBaI3pg~5zk{}MD{GY8XHalm6#Hd>Op|PD8Lk=VfRXhrLiN7ZH{;A=kEtC=B+XFE4k$in-u3fTz7- z-blsmU3pYLD@?O8mNVjeCU{pLNR}Kf+UqZjs>c<%fI|3Zo(%xe0Mm`H@EJ@(>54W| z9lS3e9U4Ws0*HRl-9jZBu5j%FBj;Al>(j?%Le`hCneCadvX>d#qK5Ps$MO#53vf59 zK07C)JeYj3pxz9Zdp575xtjnlf?oU6ZgKqtpsXD~(Ysp*ooUZWPQgBXqp*)uR5nR# zlFYeDm#Sy1Gr&mK0_+_rJF}@qmH~-S1JxBXC*+0|=s~$= ze+8tM>PZ@ylB6id(5XiLDq^efE`I$d_Yj2EZh{VbNHU zk*}X|Go9anQEM01Gm=X^$Id`1T>5X+1{SezglU~IFLPe2dK|wnJzNhfW7bLqSfBMU z#^203i{Y^BE(GSQ|bm_9yAv45-wF$T~ zWJU>jrXT#!8mGeBm|2LSx0d*9o0x>Jpjp4`Z@$N4#j>c5zg6AT5d!4xU)VW0`P=5( z{<6|NjPr{fY-!PZTL=8OFPe-6H~G^<{;CXk^HQ=E!Kn zm2@2*?zUH=@Ag7Ce}E&|KCLc)^16OqB}D8F?M)@&grQqpm@+p-dYcaq&+YAj)WEh~ zC=S8_Q$$T~VN|7PwEko{k+H~>BmNK) zf$wIa^akIpKKt__LV86m`+J3;tB=6NWo~tqgbU7!(8LXXSc~$QG~Xkmzx(rsP)_UB zh|SgZi@HnVrYDwAd6lGKV26grOev-%N&9OD)s44kl{~4 z!9zAp#VomG3JK2hBc8nX#*m8-DKxAy2o~v^9)^Y)@+nK-C`p(wH#XaVgmn2lV7|J+ zn2Ij3Xn~FOUXI^$SgF-nD*FzJ9@7`NMu8|}1_vI|vJaTu?|&h{yU@>fY-)cd&SPl> zIAorrUAX#bLD*<*kcUQifIuP=-%sZHMnfKS!xy|7_LgMg+^?{v*pc}PslT|a6u7-! z%35IMZ6HPB|A9PktP)gGq>76Yz2mCoB8PP%g2O3iDU7V3f1-hbFhur66V#-rcP4UM zC~IYB?dI}fD>Le*U?enS-lMKHfj!+K>S^YxkU1X9n{Ok-<7e2`1r=f3`BgDR6}->@ zDzi_)w23PrqN|erd>p2NDZ3dpS#5MceB)QGQ*b0Z)t_qY9EE^_#SN-p>a(&AEotfp|0Grk^5y^0@mSnLD*J#1>Qh38%Tmih5i9XUA(7Kfl(>d%qw+$|DK zydjRXtWo(<`fJ>d4Do}qBl$J0PYV`Au72rsE$=tzd-cv$^&T60RavIT$?{37az{C# zxyf?MyG=a|QLT$Vc7gq1qpU@Vn_QrNeAO?){fON<()+?`9eNl1AH45Z>MCep2N7h} zCG36W$|^k%bnofUYbS0xwcOG9%b7#?o zBplv`yHLu3W4udJHSK(bN_c$2r=XE^m9E8~*)$Et$1to3|13_l0a=d%=7Y*Ii0hen zF4a4l>eO*d%Qq7`HACthHll>f@?wpvx)vd*w5oO-`0`CPRGFPS9f%HQwEWC^%+b{2}5_k)FHgzaK) zTAAE-2|x=6NJ`C6l7Q`b>|d`UxzMmw_9p6+{+L=*1+_B*T@UJs9dN3dS`< zG_{mw_MOpp*le#$XQ-Ck-RV=9G^dTE`)L$s&%vMe51i+R63h{a6D_Bv#3JCulDKeA zx|E$W%3;J(^^{q4y>=8vg{d#Z>^ZnZfEV?{Mm;M|{;>&%TRIJ`K%&FED@Mp>ovfu& ze7}(^2a@QMfn~Pb&lFP{%t2RJ5kn#|4@+xbK=+rXG6z4Uhyc!^*|z4#LJ+}e#CL5q za|v+b_zay*9tgl(`yoO83if=Q!5JZz(RQ2GWmpSGYMm?QoBxd`*jWBYi#xsPPYY4k zv^zXAwyGV^pe~7aucEaRVJX-Bk95EAI)pbZ9|wP*kflMgG=vky?Fl*&L{EwO$KL^) zBZ+?wmdM^#t<(jNLF-UyfZ8eSNxyDN{8F9;)0=^Y!orILiO8?2T6y{&tR04)8xyZe z1tjE!3rBi>@o%vea!Oh$+L!hk3F-eD^Zm{ZW@jy>ZstjJv3D$~SymF?{Q_>2VWyrs zt}OsJj9vuCv7KXFDwgtQSYTW>oa$L(Doiv)yZ-}+2?|ZSNzoB@mBn$#Jysn_`fO^$ z7Ur=m&^0Swy?~l&^L50*+f=8fS^uhklYX3aRtMniK4NkANtI@1<|wk++Ni&~p-yB~ zIeYGRq(5R9c|3|UCRbVdHcoDnaMlgIJuj~S&MlF?8#5=T5R5K};wY*#dxSTz_QXgW zP6<4+p#W!;N*sU9^fEP7_&uAXh?^;~{z`X|EAI-gcDn52}AhxVRf=i5P zyy7Mc-LWM)U@gQZpe3fX=0}0w#GSqas}3XR*EmsLOgnMVy_UXmQrB9H&W{FbxF-Rn zAIErSYKhyBb^YKeTUkZDIB7XJS873Lsu5RrScj^!=n1??QOW)HJI&Epa;@gLrytd+ z;Q+8=?Ij@k;Bljs|VJFW=&=Z=Ylp0i#91W#L> z0m{qT^@Xo|P0C;UbN2|$}hT-$aaDGnTsciqgmY2x# z422G=qi92lTy;X9xlvm;0MSS?h-LI2HQ(G=9x0W{nGbh9fiW{&_^IM^6g)b5Fh^0D7_ai#5{2Q5!wQa}QZFN;?pJ zIK>xKwYpg5T*>F!hEn>>TU&3h2xO`MGwNAvQU?0?UHRwb#eA_wZb^xPsNjzVQ37s# zS|+eJa5pL^{-Td+?yJhwqeF%LEgR7HFn5EK+yzfRY>%J6$DItl>0Mgc$?@~>1f2Hj zmu}MHY_9PP!={Gjsb$M_YNjBkR?N>6C&jMw@*3Ly8PTn`e1eLmMBZ_NZC4{`Rq#Ve znq!E5+I~-r4p;}oeh)d^McoQ=qq3kvfBJ<=S(r z?d9dJSZXsI-33oqEDaMq24v6M*dh>j6 z5Xf=#v}h}{`{<86+Zc%TsG0qgJ=C>U@-*eWKZMB{FHeL|P(pS_zH;s7I7M(w$On@$r3Y9tNC6#e=>P-IY_xzM88xp5v@>A`RIxxCUlQop)ZA2%=hbJx%q zU7bUKzCO#_Kk}MCi+dR)izCieOu1au((^;#?4F(8Zq}C$xz9C=nmu;3-$0*yl{m0Ui4!M;a$+p`NOfCPPz3cBTjbHSUa^xD|}X1VevccHI$;0iNEL6?mASe9#BTQ z*gcKhqI_pW-+Id`%%u1kn~o^&Oo&=;@5^E3r){e4uiC*}KBL17fOXo0|B>p(yaKaT)%HrQg-!jEckO5Ewed7KZMHp>e|x=hv}5v5YcNI=xezXeIIAlEe6T9S(FU*ld9?og42CL}W$ zU|tH7;0kbaB}{+5k6v0><;1kwC`q-LPVgVWNj|@394%;FUO4#KD@efrhVWe#eI4P0 zu+sLy_u9=A2KQ{a3Zchk`5bD8D$GoAb64t01SdCb&NhEg#AMtzH_o@wACb7a<^0O` zYwe0FS93d%$0jZck3UbRN^4GVdmc>ZAg!)ZGRZhSSO<$EYM7Ty57y57&jJ8b{b8=& z@_DhIDs4L}BMru>X0)TAPnPr85z*-(cEQkm&=HJ8p~k7vqQ&}R=(We;hT&FVloh?X zES!Y15Sr z#0Wtn6#2#Ecu5*)&bUChb(s4Y=0Gl0r>W|6QSav~MQg&v85GM085s4;uS$%R{)vBx zs4lIm7MOL&ILZL-&6K^iZ^z5jiXRgu4af4qzl&CBuxTv0E2?3(GoELpAL4`+Nh*6z z^_Vm4qjDk>)JU^ZeR|c2ePCyBp5fqlyCE7ClT*Ybo2S>0F^BM-9Jyjc7GWy=#_m3o zxnwZGBROqIU0N8n(klNZ^@3petJT-S!mKZj5?DQb1Or^{OUe1)Ju0m9?!U{`|14Qy zU?4;q7FLF8d6M_F3C;QR1J-;9=Ui|{>XVHuZX2tiT&o=Ds2#PAb5xeHc9^Ar{q%LV z&rTcvz+o{}dQF!35m?Xz7Jas!ab1cQrW8>%^4nLy)pqTalU#C2=_z?gjexF^OF*Za z5zB2)e^F9j!TvENY$4GzFyEoprtD@yau@Jf(Tk;L7;LIwl@#7_iIt^ zY`JFH^w)FUR~oJFqdUU)R}dWXth6Z%VHDK_mD3X$?cS@}I+DKgM;4518Dvd{?0(x^Co|3}y{3Gcd9H5G)_AZxjR1 zzjg0sV1gW@te{_UjWNO{u1)v{sw$+l`VJ(|?BJmL+I+h{W=NxL?x-tke_-8fXE{~K z11*|}@aR?TiVZQ`r*eK_CgLsu|B7&(6Tw5P4~DqvgktE}_p=pWuNpOF@Uh-Zw&b*p zjtgo7i0nr4?RXCJzmh)g>6m}N^Rro933~2Y8f5{Uo!zyhnQ%r*pZR=$U_{xT-u{G= zVK$8&4T2>)Fut!$*Rc?=c~5#8PMe!I|vKD`03H0}fY>k{4;; z6nEmfu?Y*6@hlfa;$syTgo}R<*%=NzdVF$XWIv!`mtAdG6FdIdqvB2j_=(#){eVwS z|NZ5Ua2S`4lxgx&coTyE+qAhMQ`%Lan_~A&_>D7kW(yh`mVln2TUXhdIuH(0;&dAV z>}$8`o~@ip2G^02NvCrQrc?4%`+a-ElY2Xns*#Kq?&en==yHsZuB4mbt+`=YPiB&} z!Tjgrv0=fCYC&MMZ(Z9kuNtUQA)$AZac==phXeL}&d~|lSD2KlO==uL)Jl5;dpf^^ z5mA#^;9fPwl6kkYq3peJ4mP=W+lK!3Yq$-&BDL2wp8F&u3~t-W}`th;kt>+ithxA6t3{4oPC+ku;TJ`NC|JPPgo|X;%Z1l7m zF0(Jt5}&2+c2zrwebK6SR)Jz5y&_H^g`vhXGZ;HYk3pGq+N{tV> zeqNAbP31Ew6Z4RZ6C75*6jJ0m;P8!KR_S|n6OOxP*1oL8y=UgLrvZGTZfOJt_|4=W z48ok5vm>WrkE-h}hMEo~vJgcEsKZt$Yj+ES$xP`_`BLxt35%Ek%9=NA;!dry63TjK zWSLxs(F#*)dXra3@y0O$lG#BwMO#gdwr!M?B2U(}GFVtyfY2l3 zNi^#fhiKsuDhG<~7==a%N3#efwMjhuS*?Koz!5T^oCuXhV_nQUFzYY5#D3D^?I5D4 z&lpt2G?7zPY9s_CYs?n5oRjYC9fO`nzJ^6dJe>v>dJ>TqWm)BQvtMiuI;P0-@ju!o zL}^3OlJ+#eCB{?~4l@BFHB5&sh!E?$&CIAT9-ByGhxFf^^Y-eFQ0}*r#7GaIb1;4A ztKbGKoC?X83w>MB=eqf^{%sBA*J1kcb(Zz2Ld|!T@dSRyB_EeQ0Obe1fgYYD106;X z{ZvAfndjq;(DSL``Sm4ANDYS9o4$pQ#H6Zu_u5`(x?$y^&`0qKV=2(*9xG};KV5bE z-0t<)k$N-RKvpm_>ZoTGt_Q|5zq`KLFObv%IUrs0^jO=&pNGrC0{@}5$+v~XF>!5u z!#>`r#i20&`0|Xm-+#<^YUVRVp)GqiQjmu63i}YlP$e0dl*z`ZEw=Nv@)xMHd`>N) ze;J$fjr%j%6y@YqMV&F9{ZKNtu`0!hjLQ`+tAmJRhzC1Iq&9x{1c3>fcQ$kbMkeI! z?L2lHK=hkD$i{Pew>aSGNVanDX2i1JS#-^$smIKy#omNEdxLx*l@HNbAx6~T=o%t_ zb%;V$gEoitr3#!2a|AdDmV>l3qNWR4I}ozYcJiM&nj0c+SmO2A(x@$A?Rd`4s5dtd zHh>CPvEeIP+UMm(S#3BSne5fG2)in!O;LM^JY;i~z$`@{yB+-O>(+s-Pg~Dl0&rX( z=JrU!wKWW>6eZFHnM}k@*%4wZ3eDRp6XmC~l}>DgvYqX&e)m~8&i}d)=Sn%So&sBU zVqR{Z71er?9xb(mWVqiNxHGU1b;^i*tG*8EZL|^Yq}pQ~P3lw`S~UB4JxrJ%=Mwa* zsMd;w&O+l6wTzl?)M9zW!WOe$Kj|_FQKx*9CAtY=+e+K1(0sp~Vuog*6FwN-Oxh3f z{w}yG5Iy0w7|9c`or=#M-}FZ~@}NNcY^q*}vB5LS(Yt|$(}73IW@1tzK`(i*lYj>S z#xnjM!!or-dW3TFR!#Hyn=LPa6!ZEZb9(lHTkZyMZ@AzQfwUSDR#sI?ahU}Z>Sr6e zIvals{_@)SdKtN*s)3tA(@e|B_YsLqb{{U)6tNV7jS(0~QA%I`kmlk#GP5J%a;1Z^ z8nv*!XZvWcLW`%v-V^&HCTVB^F_jT~((9^h=&m1cNzluf;b3RGwWQtK$$R}?Um5%u)Q2df*~5tyNGS5lQr>nckVyT?Si2B;z7IXSx|Wi7a_ z4F7=$Uii+WG%gjYT}~DkRlN`UR;b!0#>BgF$x-9NAhnPBV^((HHF$OKhjlj>vI!(YNqT% z^A)fB*Qq?|a$jX-AQKA9&jMCnQ}LBz@xbJ%5>yX2CR{~NL{DyN&*rGFk;&n5od}RO zUc|9F0`dhx3B#|E)Gv!#oR*}X^*3P@60RpA99sRf!p}La-VlkBcZ@&P1mP9-QAgQ* z?W_zJKmhjbG3s<>N_N&fFPCYATCGWu*#KWOV{Swp5d3BT?{oo#4kp$Vj$-ZS8&vQJ zc|&MS8(i@#W_GtuQag~6<1P^MzHZ%439E@46rh3U)V|B?zyIe!@)&T?w{k0zG!)8M zN(9J?LDGw0Cqg1c!fXWHXP!p!)zzEISlp|t-?iQP$nirt|4bNmuL~0ax}{?g1=@4G zzJ9-n@xQ}uav)k-9Q3V>5ApwCpL53eY4T+8VJh(+ZFLg$ol*KP^9%9!RH_7#=5%LfxD(Ng^0%e_Q(L(}%d6SlL1ySv;+LW5IYM~|&nymoZO0oys_?E4$u}ZF z2OZl6@PQmbt9F{l8N@a-zzqX!uua!k9<22a)FnpwX$zaI9&<{3g_q)|n=DtYM*@bb zi3(U}@h-A>jgZZK+9DDf)HONht8d80MZygcWp*!5mMDbT;I#X2N{(-Y7KQwnO-Lu!(h7R)B&N0Pg zCsPwNeG!ap<&0o`pBT|0A#RT#gFmFvcvS}aVrW_|Pw>uWn{QtyXwtwah*3%E>7a%h z==@>n`($J|Ps6;M;V&*j1qKaaCLF`UqQa`Y*RR*Gp%o*7``h?H+wfl^$sc8Lmkj4E zc@=>3luKUoG0Gf+?gQZ}vg$@h0yM3+)l$9E+Kwa8`q^U$>t?M-r(=}eaQ#8vcI=ad zuUdw*j7F^Su;*D@t5_@6a5?-h7X8^duP&JeZ=qhJwHQdm{_O7H0#457sW;V9&%P1Z z{tD5uuv>>)?e-Nv?D=`lbgnzB9wr|J2WT_ym^{8lQ5gIph}pK%v_RQ5xxGlqRX@~K zd8}2($f9UAR~5GXO=J1(ltGsT`49tR0mOX3Zq8bG(izf$+va%wqkq%(R4Q(#EaKGF zG8vDH+Djx^=m@7L%7!b2#%S<0$|#aXV|~tpI3ef>dW91vZ_=B&F5&7DA2AU3<5^#v zY4nY)v7-}nh4^e_|D+r|ABo3R9wKSffaYL>c5K1t8FT!9;H1T5hx_8SPHc2j2;Mhf zs%vy3grg&574Q{JXc)XV((l~vre}18#2anjh7c+$n^CAwGwd6?=Y`8CeHt5PlGLy9&`nBoSsX(dSpfO5J;Zb3N;0A+MV%(q%@|)i!NPJ%bM2c(S2gpg4vAq0jS_UWec|WGxL%RnRJV zz$iG6>VCRwlI@+hr#xDj7YFOM=rUCy?M&VLNbStZ-1tbfd@F+w(gK-P)OU;KhuhL; zw%7+1Vg{CJIlY_Rh}f>l_QHIVedxE>AKs+hmiP)?^u6g$1!66oufEEGc4(QDJA(C6 zh1dedbE*W*@N-)KnUCvG(_G8Ieyj-=j0pd_RfH6rT>E1txWZu`B1kyRS|wKmpOv<^JxXU~K4O>8fgc0W~p5l2Wo)(^mFR8$Oy zfE)^^d}9`h17<`Z$n%olS|qvA*Kfb!XACdht!)G)#4@L;E8rLtMP>BN=0NxD5v7ge zFNVudN!-iD9XBhhJH|cqbhbduKPyH#_ztJiSEfi7?Cq*K1+p;%l-2G+5rKX-UI0u= zTvx%blO;UL;;AZ(9MQ-PFpzofoI6W%dy28tXIzA>L@=UP`Kip^Na0embgABwo_uW9 znLhlp2VKYszWS5{^JZ93Y#M1OZq^2IV_~~7uXIh!j;@5G%D4o)WbL-~Hw9eq5Z~d_ zRp}cyg&A}GPaeefL1yvQ;yHsA*M!F=Y{0XWG4;BL2bCF6Lu0&GCaV@eg*{@YHxjaB z7Ylx4V#N+%JFO%f6}A)3G#T#VlT&Wjci8eL;NKt7X`B93JCAWYr?%KD8X^0t)uSEf zE`*q$RW_^$JGfuVlkomh@7^YK`&_2tO;Ld#XPD-jrfO$CzA<0BOq1dm0zQQc%?U@Z z=7yeS5&rZ!shU)^9KfOK5Ya>8^c)RdWW}TOG?B8V9vkeW6wjw664AzaVqeyJHX6O| zfM!`6Ry&7gj!7{<9Z|f#%%*jw6yOq}cr4<+EHc(c*!L!OG<{p)d};P=Cc~gsN(=2^ z0L58bd$5%SSxi(7SDteKEPlVsUE{OSlIVaGy@H9(_P4;+?XZZV zB{~{leN6KjbUu@BvZ$AzRUNK^Lb4HKUq=X$Djea{C@Ft|ak_jq*wHc+G zWt(mCb)zMWHtxq;ZGxMf`cEE_(V{AT`r|E&U<_4)V;y&8)>VTkvV(I;p(r`CX${@z zKlPM=W=*$+J;S-v0%ewX0=zUi^&|W23CbMhFGkXYDB=S!H-;!S)jktUUF}@cV$~WZ9uAZL~{KT?-~d%&g{0+J^JDgBf##ku))pHamA;cM1bg z5}@nmqDoa~!az~6P15@kbt(64dvaC5VM+s0;LWE$*kL@$R3ZKQ%57d#wbQbHLY6A2 z>MV?*8MYQPM{<dv(5c$j)_{Fv#h}H37V`naa)`e>l}zl*|uo ztwJ$*7*fA=dLU10+lOtO^Th6U^1XsVCr7lpT@(KX7T*aBP)V_r-^Iy7_yrrZmrvo5_i_C6fCXyP8IHdmLCm>CAY~ z?(w2Y*4Cq&*?dKy#ci2(sD~Y+ivi2Pqu{y8=n=I*tHc7V9L^+-KA=5$&+}HzxU0r+ zI8mmXBEFhwU}_y!j@aDe^L1et zo3(`i4x_?!q0RiQlE!-zxAlsM55~B4bNLUXeQ=7g@$InpcOD`+XO5Svrosr(jFW~T z6;E8I3k4h}C4UxjCDWQo)BFn|$M)j*rMK25G>5z8D=M2{?~F&i`DlyIK5ZVSNKC>U z77)d7w^;~-A9_&W{HtHLJp@(V@084Tu#RJpcceC~=@H3_vck?9^^+cWe0BMPV|SM;A^oY*|qe2Em9 zifWUZuc;6<%WeFMhhwi0CYw)#yt#35>N?ge9#-w2CYxb>p-C)qrP7QRNndq}UZ@?( z_Tw-BAvy z{L58`rT(BWRAE@Uj-46zu2$Aa0#*creO7faPX1Q~M!n!ynMmX~2Vw+;FJcNkSI`U` zwleKEAZUjARig3;;-oeRUV(w33qp>A<{Kf#D2j*$_qEiyHF~WHcf8L(VJr3@*OH-7_JdF6U}PySNxc5MFZ0p(N*Q z8bgRx%6!HhdSp6thx!`XHxGY;CJ$j{+YbE{ssY^mc$R1nW$f-PxJlS^nMsTgfO!b+ zbmqE<5Pdy5#ux;5Qvv?xW9##}l5%`FO%=KP5-^=e?B(X@e1Y^6ymUChB!d@L=1Vjc z2JV1$Bo!iXp}?>*NYiBcveOYRi~{k;V+P!BWHut4cXPSa5P%HxMH~MLv$D|REYL)t zr0ZMCZK|i(z$AoRyn7qhL=yj<=Mm zeWd|_EH|RS;A_)x4(`)1k0vSgjv)uMFW7sWU$6PO?J}0LK6DL~1NUMQf147xKd@61 zAtGxuYJR5}{M`|&1M6M{pm}F(;2o>>q=T9RasVTw)vP^zMw`OIW86H&YeP&-7J!h^ zKgTL`k`KKWOW2ENS6}ICt$`0kl&2$>slsnxVuWc+bO*CS7Dvq zS@CyL{9>!%-U1A6^-_NSS{l$ZwFvR`Y_f2G{BTcBmg2jlUic>Qz4NBznWIBlR7RCS zb2z@9@)=jQbM}pSgI7b0R3bg=iLZGmQ~AftrL__kBF^h3t2=+^%6;a^o}a(_hT{H# zE3tZ}_%o-z?$7fET|$0~v1T}uZel`z+~O@A54rGQ?GuWxq$!fzvzZINx2h=68?7-QMcT z&qsXLyVIg{Qy#fH>Kk&4dkv@Kwl2+;+IDJ<=B!rs&!ymi%VFc1UKt6CyORFN-RTpg z>D`?S3|El@Kh0WOsoRE-{h5&o>)nguG7o+5Gt6HXH}|fv%q-8a3GM~Cb|8iOMwYNJV)21!cU>X(q$(jCCrE?r?;CKSziMAL!{Z_mYOK|vftM*Mx z+3N?DxNe%09JLsI@3GbGQ}1KLjwexYe%S-= zpPMWU0#GMDR@P+u=WTmJ0i<8{M2V7daeW-Eh}2-Jba_Sok!!O}5Y4$-OH+p_dCPHp zy@%O2{F7ZsH0Uq@{amV2wNx4@Q@yqle{^8(0pwYJYjSQ}{@rVfk#HNfK-CH*R<+x0 zl`OIk5PlxBo|+x(olmjydfG&YnxSJ5_T<&JoAxRO5ehf-G7;?Rc?gTxyLMB`%?soN z8l1wM!z!~ZIvZUl`~@E|k>jsPOT(Rz_OdC?t`sfm`7MwvvZmq&o!yL3CbI|k6S^^- z7lMvxWK@wOl2L}tsX_~kMXir!Z$-YWgccN&^`=JYMu?wzKIQ8>wn{R;l{t@O==7@RAsod-5L$+FM4^@dpSN?gxGrK3+K|Z!U z+j^^gH)Z}lQL@GlEX17fSQ79Z^3mjxwSK~(eHsn4+J)uADm`mikgn8s`NsCgfh8qF5}X z>{JMR2dLoyaGauN0>llVkoAer6wF?q=CF=Fl>H#Im`~3;yQg29K53u2ROSNK#eR;c zW8qJgEXY~fQFMr@>E4->$Mxh8iS?<@PE4p|ex3e-ncZs%7+pnbAa)1>j;L~llAad&1nlmmZHp4i}xZsqTOX}W@hvz@le zZZA}#zq*W76HJf4>dv#{Ne$~<^q;kupFrI7JHg4{zjPDzIr3P8?(-NOMWCb-3c;HI z*GE_bvF+W$3q7i1SvQ3vopb%>Wc}PkBWM-%v7UYZ;HxQGG~{04YACKdPU-DWR;AI-%LImk4X`G99QnG&-RFMaT09!_og+qC z*-1s(De?$bZPY&U`dNYZ*nf|{k26bbKiMetk64wM3LZXw=o9)0tGN>K(Ovs~Z z5@oz6Voq-m|Jkecl2(K5*(>)pGvE3D@&-Dk+PfmelHtqTTH;b zbv*){{&dY%O4$N=9%%rR+M%?T;z?wZ($(ZIkO|-l&`kns&8?}5FF^65U-Dz*xr%^)%ZL4b3x|^%)B8JB&zwnXZoB(hEq!K^ma;9MrWu-He?} zUzB7}#{@z+kx@rrDbyNiG>rEdJAUkn*s)EPh!1g^$B<A4S*$Cf{ZM(1eyQ^d1QydjJI z?zL9w~V_UGut&Ku9JOx^UF7qr?BfuD!hJY`_+9QQzx9mnu1I1`=f+z zU~qk?a%`7UQdUM~<%PVrD{F5Os*Yb3t!-m%X&4I{jymF!*41HCBl72xO;(oS?`AMU zNL4sy6q|2BIXNpWiqk{=qkpzI)If)m{p#3DSRz0KYk}=VP{(Nw1^^vRQ~O(8vm`_0 z2O0IHzQS$GZIMp)0d;rfTgIUQ`P&_9Nh~d+jBkxe1F01xFr~bGv+Go3xogRc5ocgO zGgH0xA2XJVWLJ{PE1QN35E17Y9qU3X8(UbwSeNk>vIVxc1aY>J9NcsKJ*i!=a+6*~ zHL!thiD=hroPk%?7~%jT1s=kqxynQw43#wGe>DRRls!UCwQ?6wvj-du;Gb%p`if-Z z_e4<(Z-f)pfjw2opZ8NKA9cF@Y4RQqJ*g$-IqDA;9_;n>raNC#K2Mmi_pKc@H!HVb za4R`}X%E*mu@)_CLmr`WY0F~j=&VO}#zG)Yr|%zXkZiVtBwz|HqxnpY_nNC0Ypb?F z{;3Z>=BLQbE}e=+V}iWWEEHX3=g6ka2Ls^sVd*TaPpxM=O5MTNNk&07#2!9{8x?N3}p7C4GG= z3vJf=l!3`8-4CT{xLG4AdJ#j=CGP3auQ*$nwgLzyqK!_TfH@{S{#6~hYkBstB?;ix zgo=|wRk;i(dT2R&zVAY{%u(M&9S9_S(^11aLRJ}+jlJp{NaV1S%XTI_k}FBoWr&{S zaAP9!V5wH!vj8+7YOQuQYZDRrI2Wo3nTwgNRa&>$}NJ39eDoBu+m`G0k z-%49~65%&Qz^_t0Da|NJGQ%m;Beeoy<`0z!z#UByp+s-u`LaHg$Q7D*&-$~?NDv2U zBP6e-A#6h=P|S8Zj(VJam795>TU;sQVeMNWuH5a%In4+|IdSt5{4~^>8kC&s8xvHz&=B_o_txSby*XJB;ysQKAUejF|uG|t}8J3e;d{}VIOc06w^f~9riSA z<+awdchlr=I(R`)*!+!T=&g2|k+%*)sM{dN98$$=d8WCN)MMA)m@n_(xM@Tf-}kUO z(4*LD8>O>1uHzOkxwauZz;^&Ss$Ld_V@t^7AhWNhT7fm0Bu7h&Q@Mc(!?jV@MxlP%@#jB&UK2;6@fn^%r)J6p55fx(5w*Gi+} zKQ7*Tc^3-*0C=cAm9gZ*tJ=XUwpl0~Krp%znH zdrd;h{{Uf8$sIc4lfyghbeoivhEN!(^s1UY^`J|OJGWTGV*!cA;YoF=*_&3kvzc)t zeB^c%++M{>5`O1FJSlE(EpOge`JZ%SAH&BLKZWnE5()I{*WV?+`WgCG zsG0|Ynr1@N63`&^YEJ}129{%%@Rz#OGO7s9N2OxlPG{88(2cf{xsb=6ja@dGy6)TU zFklEt*x+D*Jt~^Aeq)?%2K$z;@1pQ6#P1wtOKa37C_(=KRQ}$^sA--RlUB2q@=44W zbFh^iN8Q256uO1fJ}K60p+q9y1tvyrr2AFv68dc`P`K0YH;4;vf!nzBq^}t1xhtBT zKX>ALl7GTocc!xGnw7Gfq*1y>B!(F4R^{+@te|Rk6B~Q;`^9BHDfT|qo#J>R)h;2H z*bgyR1+mt&bS-d2r5k&)M3&^MdXbJQby2)YagwH`Pe%7gH>hhD7ux-WrllIjEnP&Q zbSJs5LY8!f#z_GlTE zdUA@DtU9#gQARN7xnIK&&895+q;39=%vMCtL7ppK8=vhxYiz@AFi~5*UeRE;ytUy~ zt)%(D2ZNf)aQc^v7I+8()qrlpif+xaq|~P;*2Vt-6bNjzz_EoAP4X)DH0>bE;qMC( zKl;}sqMq5RJ|NU=uC-fYq)YZz&Ihh)Ekjqi*CQ72S-M7??jt!q)Fk;*WO7N~p&w7n?Il$TW*$7Wcbe~A#b#IVS7O(e8TDZ(+jOzAv8uW@4LF`c6a=~O&FEN!68Z7S|05TK5=Lhn=5 z{HBetQN{_|P}u5^Yc;xgN6L)li0?^3+QN+&?D4N!{(SIAt$z))FzC_61BNH5q}x%sGHx`bF09LaRvkhKG;4$g zT$Kd!4Ml4?(e;(n?}%lZKaqgr9WZL9r4s3WC5~iWO*XY*891dkzRc9sVO>*2j_oB7%Wl4MNsQoQk@T)o zBu|Mt#jKOZCAObq7S;swBj>Nuv@9i-{>Ezul%fcZ;Jn~^W})!hk70OityCL!2YB=% zr7l~M2zxaqz9q3$yceQtu-rUmYkP}UXx;IGrFqB)gPP z`=9gPvvkiEYu*gSzt5=H58-tuVD@2C$fc}Ir-W0FJv}^+bf&YcXkC~psL3SY3iA2B zG20stGS^I!N%6`S;ZM1)dP#g$@d{70T}LIpn+PwlK}g9Rx%E%avO{uraf%4FB`V~Ag@o-IWmR=;bTUqiK&x{bK z+>XQCSExrSOB%@=tD_97Daazc*Tr5N(>2XHNZ>&Q?wP=lFHzSYLtM{-{B1Xduf~?vkWcjXq~N5l11ZprNP9|4prZ&T8-Zg1{xSnrVI&~Pfba7`v_^ZaIOip6PC zT6S75>(uutVQJFYY9S=`q%^d+$*vl4ysT{}pnz1V8Fp12&MBdJsgr}8*0n6Aud$uo zv^6d?Wwy2RM5UMxMk_s6inlHF*AT2s-zfaeM5|r+ud39lrG<^6VNcp9{_)+2t5Pb` zs?>_LtvCuy6>4Q#MOv9wyQ#p&OjTNyR*_bvQHt%S11T{;#RTGlaZ$5Y(w8bAYqdb_ zPIjmrtBS2dNTIIP3pFb>Ld{-vT87a=GgM5}tkn@U=T)d{6a>;yOI)p*1t=5>P%0P- zDZo+zP6CjH0+xy>0HTUQX@G>&Nu?&5O;SK1G=$J;wP^rRMFO-)2MTx;)fFO&(IQ(F zMM|QYqNP=>qY@h&qNPztqNP=>R7h-V9iufgB(n2JBMsK3R0=RFN>Gg zOjUbx*#Lvj3iso2bD%^Tg3Few>&ULC&pFKHQ z`45#fW@$yLA>u_V?m4TeD#!s+2(EFf2gDvXhr+SOsG{cfXH<&RHVb6qJZ8Q8t2@P1 zs;Jdm*Xp-1tA~xR9S=mMrp8Mmk}yaFk4k-gfxsmcQA`A)iYOSAQAGeH6jD$DMHC7E zP$*_pQp`Y5GD$cBl(I&Q@-S3UmS#8rdYbT`8u;G(#`=lSbRz4f83bFD?KdYl$vu<# z)kZE%(v>GxR!3LjuZy-?UDIjW6a!Se95kxmx{Uot-uyp05ZK}t5g+Nvaq% zYX?!bc^7Mc-%I^#sk!j=*N&~AzSSf)4;UidBO8EI{6rq-*V3=}I!LsMr0|ZY(MfR< zmx-8UO&LD@{it)(T}-N0k0-vAn%#fFA<@1oXnKc|mxS58qalk2kN)}{KN{{MnmLd> zPOgkH8BReJ;qyTL9r13X;p^Kt8pirV_DLEc@~I~S^FO6JYY!BBF?i*Q;K`;r0JsF8 z_I3UrsHkvHVrPbgtl;f^k8$A9(!A+DFX)M)t<>?$_RfadF`S=c>0Cyy<6jZ@)r<+d zNz$->NZSu6{{VZb{5Yvp+h!5MRC2RcJrBjd6g007N%k8cH7!ZM<&;hGNB;8<m8do#0m1Gc|05rzm0Uh70|ptqg+K4tc`nenTyOB81&6qz3^xDZKd3w zY%(>&gA%fVv(RK#vE_@mQ?8PwN_@S0lUsN%Owi)CiU?)96TaD`W0nIQMmkkE5d1jt z8+kr$#+#`|N+TTkG6TmxmC^V%=Je_2&iM+>XhQENC4uItYY?9j$t*laZEX8|-$P36 zyD~ZDDLBhxQ%a84!hRpQ)NT&ztE1;mdhd4VtL@UcJ6j9Q7sM92jEGevEY~4=BA(T! z8s1)ghf3A9`4+4hB?lgHU%SO?>bC81X8LSRwdF#=&pjz6XJTTxE}v2+4Tqz8m>$GhPd1biFR!f<)4(WgdXi_~=h*ZKvJaIYAV_K0Au7XkS_JN7}ry*3mvy z{(`mqPYJ%TNU#Z4$S1Wfs^VHoDV8pxZA8Hu1TiuV`RqE@cA;`?G?{eR@-71eUvPWW zwpW^dn=3r??w#X6NaO$qO2W9*Mc%VD+95HJ0x9Zo-kf6ZZh=k>%FkqU-W-MOY!)dO zVUdXg*0A*F`wqXTY0)VH<$wb{4J>{j)a8t7w9@va%ftHq~ULFBxBbZ zIQ*$o!?Id1D{#@{_?N8-C4E9Mj8v~JS+(LJ9M?L0hi>b6cOH5Qf>cdwT}*+p*@o8L z_q*{~@1dDx3NGX&`8$s$nEo7=34^8MMn_G(X<1s=6d@H9xwSX^MGdvinDes6lx(slErX|dWHH*Y9l zZKIW?rlNG(r)WF7mOKxQQpWx6inAHEG69TWRVxeojU_IfXGtuT%u%4~t(vRhjZP~q zQsx%@#CMVw?$7;YG=fv9X87;YO?N);ex>NhYj1(v%Et+?}!uZ zg4+;0`(kW%^)&XCmcbXxQ!jf?3_ z*^mx+^sRKfT{R%mVU#1o5LsKVwkjP=rjev9Hc=`q%M~LT-JZ0Pvmz?ezuaZ(*F#*= zG?{GJA3qVur;HzZb%RE_>f74KzshLUoOZ_svE-9Fv^KEE_t|I^|zn3SySJ%lq-kaimQUhX< ztbwi)K*&MqRjqZ+FHMoKlT7pBrDYiWIycG zTKtl0LedK{`=}dy>`x2mD;rhuQMk2|+8akwPs&(z6}RDg?J_+XBDs|k;!K%?o=N`z z^-{BnO`&p15K?PYKSW4i7nh7z$|oT901Q-Gdrjg^J5XzY1VE7h$0|VUSyJ4u+0L14 z{{Xp;LQXrWKDE*5o=%;nA}gSXsU+vFXp-yHRU+5F)tP<`y2g)uT;^EVjGnmyo8ik9 zk?!s;aU_zQ7H)qEr{T7?{?xp)!lk@`umtdHqm3-=?Az?E8b-M%=Fc=r>5iq;rRQTY zbx8DB8VJ*M(-TI!wYYLv&n9GJ-Kn;g@yn`t(#oy0?ioEzX!wri-s;lb zBc3;zBn~ioQ`y-T*DTay*K!SJL#W?d!iO=bX&32n~dY2>?*`w8Hw<2WM;>`8YQ@Usx4fnbE#TgN)@t9 ze4qoZLN2eSyE9taF~|#((z-Zwdn;fzLJzxhR|IOH1yBdIE@ZYBw2ILqn>tnf^M<-` zgZrYcTX=fL1HGg3B>waBTL+FQ4JRhd-AOVejbi{Jg#)k@<4Z|Mk*1QJNYnt+Ok>uZ zam~EMpi4KaE*^O5CFae8{V~rVdBetJ&K;(wXE0bHFsx zwye0u-t!-4rpe_QSZ&KMhi;3PJ(en=mEOhiaDYWhps3GIHKpan#jd zg;+E3%}W{Fdgm1d?1f_iF}$8AU5Sc!u{FiP07oAze@c$h0cwP{2IG=VEv!CTZgZAB z%~!mU?i^di(?2nz$Z22QTN2z|H0Q{-&Pl<3z*M%-M`IZ*K+hzab+jpO7r%2r>l6mT_Q^JSk%j8=8*l3mInkM3uZ zC|c-(KKHt|Cb^nRljT9vyHu9YC8TFK2f3-BiEZNov+iC?+kq5+>eTXmXjf{$_Ztg90N%TI_OwDih={Tdi&<5+#49G>~_ou>Cn)Db|jbX)mA%VbNE%6{{Yp2 zo~EhF!^6f%y21r5&hCk`K|K((MbTp%l`mf4NVekj4!oU zgy+uokpBQmM095_<59jlRms7SXCI9f2am1=y_Kt<@6lUFW7D9Urj94!boW;>>bADB zZNG)Q*jV&o-CNqdW5as#>k&?`3tL^=zn49`byMr~J*&aIJ*Z8iU)^eYfA20JV0MPU zb?yy%&YyD!i|vvHQpStUW#GsS^xLZtnIv+oAS*q`Ox6TjX*5YW{M+ zTEWsaxOJ40#_B&KP>2yE58wTv>ML5zJaG9koU$AP>N{3UJ45^U^#-foO!h1aE>P5yBiQ`w%w5N&IfQrcd1Zm`#Vx%7TKwG! zmN@QUR(0g_ROh*C36?TGM&ufjHj>PQlbDAAy((*nBfo$QgN{KIZ1oaqGS^~7M3qAj z4tc7xGr@4HpOLB1yW1#^LDQkBB#2yqNyZNpY{6*t*pQ-3oQ%~OrF%PsT;?`CPimAi zS`U~Kx$944it;17oOGwRpyTenbwq_yc=_ZJ!Kwmhg788~Db)K_gl4wFImo4kAv!#V z?;eJMt48gooEWJ-dRhEA;V{MLuCp99>VLn@oU}mCNJlAWL`^Tm!0#@9UVp=I+ z4!}AJj^MP4fe0JU8|hOlsVZzedxKCwjU24*ayxrdK)bS3MMMD?0cySY42$0;tw=Wm z&jza8pFFBZf+IO<5J!8G*xMvQwyprAk_5SwNCpZXwIWUyHozy0=9bBWMq9pl6nTTb zvLe5^YjuPUjKN8(sskoHYOUlVzgtc_7xmI9h)D;vDEe3P% zPQBVJ+z<|U1Kyou^Tp;cJDlX^lTbTW6&&u6P*V7kFfKHC;r;civP@UzLC}hRlX}>A zFJcg|;1}p?eOJtK z;N(?hu)Wg(YdqY;-ZySX(w}dtMAH49>N5n#rv3r^Xeq9{lSL6Eg5N1Qsb+BmMVA4w zflie9F{lF}j~J@*0>umDs5}f(+=Zy9U+n4f{`WhLNf>gqd#=~#(-Lu7EQYqzy*&KyIC24L4!?|ZMR$bQ;;9Jl-;2?T;qw7%kbZlu+Z_(zQC{{RTioTxXmv-;<)Sc6H^;$6ZJQFuI7j7q?hw|BXwhaz*87$bl^X*Ss| zte;Y}Hg<5X=q=ZtgpP)rd1Y&H2uc2DJuy~^lguhp5wAQ_Fe;#;jOT)TQq-Pza|ZiC zTV#1GWO(N*fUDA<;Txs4SuAb`mv&BmZ{iiuD{M{DmEG!V66;8dSGkhlmx5@=$vW|j zRbQD|ntM)oxX9)FSEK&`XKT^za1!q>03H1+pnJ1nquJR&fZa^E3y$6Eo$;2bcEZvr zt&EaDaI=Be-nZ;wf;~D5qk4^c>xFH=<0GJ}lJ`~3WUozg5NLXA<54#R`AZl(dFpFc z{_ZVAz_H>+S13sS6Hw_|P0fX@lU`i!o@O{f&}IH5-B;#AzB&9%wSqP`b-ZK8|J zastN+jOXc9bj>$Xx_PA`tx{($3NL8hrp1!rM9jbs7Vju=eik5qyvrPnH0~h1zO}&Y(CW)1{g>ReORNcMI zx#ag8Ry%AmV<(TTGDh;1ByO&G6(j5ib~gYj6Dv;2k;23e;yoz|Uc~JZ3>5)O4nd{_ zHp~Ob`?Jo`NpQK6E&RHb=Hr8;>B+%&gJ! z30|OfsOIw~l)9_ls{0{-0Lz0GqmzKW{i*GP5=ViS?rOQ&YP7Ac zrxPsl1~c45&pMF8M(^!f+E%j`vmCZF!R0=4wEqAQt*K&yWHHW)$EQv!Hf;{o{{Yey znA@gSpE7%t=NYR#3L1UFTlk9N%1kY@5Mu+TYUR{x0n{%ZQi`$pae>pC$+^-l>@FJW z0A^fecXiD^O?oLK7J7xFq943_8g{;@sY2~aI+`8~fJvv_&TzZiVE4sQ)2Dkqbi*Qy zyX^pX$*nCm;Ua=4Y#K7JDK4P&TFTbr`xl7p?t=psM&8TvjmtQQDC%YW+RQy1uT}Ms4g?DUkpW2r3A-JB=qrp(3M^buF z)%PY#o-tB6yJZ%(ay9A`EySge9;bJwy>@Dr9uv_lqj=gbKEq-@k!bg_96~{{VarzlLa*x)oKqwH}8rap4g)^tT#tNoVr|yZ~@U zc@@>%c+v&1OBk%$8^eg&2^0m7w@&oWhi$y-GD(v^nU-es#Z~csp0}ErzO);s;Q}DZ zW(J$He5|Rs)T!*{vO1WwiwHEv`4ux6C4l4-I@b^36kQ|4v&DNMGEE*La(dv`LYmB% zT5pwu9Pq>p>f9A0+wiDtY%M%Nqnoe?o~%MhMhfGwr5mLAh=t=Bdrg_8;)|&N0I?;u zX%tIwghA_BT02YO)|TexBlb6lA2X&{0mV>#~ zGO8-|<1|@E-0nLlMN!>7NH1<-@mx=6_V`lFA#d*SkWD9qFCR}?bbFV}M(4}P`=ipP z)zS1D%`WCPREhHxpbot`sC-Rn1XtF#(PB9tmm~Oy=}O7_q$L@zX104A?~G@f=fnoe z)Gc)r z{Y8BB;wu~3wUe&tNMV;xA)VtNdui%LdoP3hRcqqS5ny*PG<(7 z^(DQs7L$cSN}idfD$}HvN#x$`lTTHyxhiw3DNA=mg zRcb|A6>3#l?WY4NFi}tGM?p+uT|Wvl+(tDEwJWti?Oc^=7ZfA4K zD4Di7MM|QYqNPz=MkF=>VwZI-Fq&0l;jue`H5J0|wvZ0E%}JVaF77>RJUqFoSgneo zwd)-;*)vV_H zg`$cpxWp+bX(@;)DQPGelu=1Q1tk=e08@aZ70>w7#kSrK@a)=z#5KbM9kfUOT1k!v z&~-E=aEfwvM-TC5#f8~?FJV3%hWpPf{KS6@e~(j9_w|I`(*8c!hVN( zTfcQ#9-Nb>O-7lE@cQ=ReP-t0RFUVqw^Gr&ocUm$ah{p2UlBC^C~vS>M6$&MnP)z= zU&J;NEu4NO(ZG)2LZWbohfL)CO>X#Fcy2WJx`YK*ZNz)xld|`TZAJTN?q=zFoIV=1 zhSusi3(EdmfO$p(u01O!ToY@TuX-YpkrW7q)3h#mtxX2hc#h{-y}6W2`_l|*ju3%b zo)f#4>+KeoVOnTDQtQ!&N^Pa@bq;k+x`}(sf0?0WEN4!FQtGH;QcE0muQk@gYaT8d zl1;YW+0Y}epgh&rM;hVHzBSnaS=lk8i9MXzV zcYQ*djTg-Iax{EJqFQ*5NZP?f@sB#za0XF_Bk-7V3`Q$6z*bOcx~=`3!#637tVbn%eY2XC8z;@s$`tuw zFKMqX##e^?4HO!L+K-4}iVhlefe6?KU(&irEcE{X8|W<~Le|0=7+XlIf&l18)~WnR zk(xUshC;2DR@!l#iqo^zp|R1l`!ouZm_n+z1Eo`KtD@&Q&MKnaoQ=JbPO_|rd9llG zUI^NH3hQ-Ci8Y&TGEFRrSIrLX*a6nF?d>hJ%_8&rN?7BXUnY4=9b9p#cb>&NY_7#_J;-y;?Yo%%O&f##Rj4GN| zZZ;Pyl{+D}#LeO@Lr#^vyLlWo0mgqCy{~FE+J1;M+bLIn`m&>)qcxQuhP5qCh0WZa zOUd&$t#4U)YRcJxm-mt$?cS~Omo7`D-o{iH_c7VW29a(+AI3)~j%q~GwQKYu=5_$` zz?$jefg{SKYPji&aw|6V-Zy)86+Hcjb$X+phr>3p{L;I#o&YDUYQbY;Y!284?_5>5 zCrn66j3+{UX|TDO4)N8nF-gt6$dySw#f|~Ed0|xu$)!XyGa;8OoR2|Gk<0FiH3$Iw z>CilJzz}0`;EweqHtZsUDxcnb;P#t;% z#Sx{^SqkHxzLdM853s2rdN;jB1KY$_W565{>rz_AVL~KecO1|Sf-6YiZ~2>}dJjrP zwuRBg+ep< zs}Ge*E-`zSVzqA&{{U!Q8Q3fiL|b}s$p*E2JepAkoK?JxXJn>mlw3@E0;t0#zhZ~=;#T$kBy$ATCPKGNf zZ=wNi7zN+!Op4?iD3M{MC+uAxa zBK+G=Z%T1jNio7LsKuGS5VdVnT$bmCScxph``xQ|#9Gj?0@fAtZ=Z!#A9w3q{{Vxv zd9=Gri)7Q~mU&#Td~m&nYoyThCXPqGzi%?}*puIHu%|DI?7G@i=AO%9o|EB~l@jYz z%e#EVdkWo4D;QVHx3^v05Rq2^;gB4;>*xhNnPX)iE`4eon=qYeNtKgKhDH7IDRMb% z3d_0CEvIK>z$kH?b**xSd3kaG^r?%-3g9kJVM3EYs!1~k{t-|?WVtJ!YKQ(2#K98X zIX!^sT?tb%{LAuZG_0%B9k{CJWqWCNId<^6jAmnl+zx4@!u*hCemV;3x8*orlu$_| z98u24?dEe|@Qa)b&GJ&GhAq{yBx9e}x-P_HjeQqg#Q2npPc~MF|QLo8{6Kmf~vWoPq_ogw$bixr;Jmgi*fTL0F%?&paHI~HxN9v zJXH4=0Sd;LE_ecgzRPmFw+_>o5r%!cRk)%{c(PBqCZbDJwFYSj$vm1zb9O{&_cQY! zS|5--bXyS#CcBep;ym$=^?f2pBkTb0OkkGCAB9!xP|Y)5e(EfR?r7g(KYMKv2c0eC z#T4Q&dv~n_iaU7oz{h%QaYbhdVsHmjRpgQHPQ~FpXnO6i-@NqE5Q(L{l%nu}<07xD zQQJkHo~D|S#c38vz#UCNBR%o*(}eY*>$brC=cb5?DIWS}$NHr>9`$bEtWc4_q{Lc$ z1o~BE-+Fhq3EGzafb8AY!djzDcR4s6DodBjd27_1QcEh^s6_kO#X1=F$G!TVd85o5 z*O*Iuh_<&;Lywf^n-dUN`_q{5OgfDxb~Dflrzz#}>sA$p2_Cgo&P#o2k)%tyQhbiy z^)96+ml_Y^X27X5)WxXxB-MM<=HJ^O=p1IFsh0H%mht&;sPEpPm~Xv_djnS+2&C0y zL-v6o?n(VAB4YJyxr)t}<|{S0mUmQ)K5|YwQfj)?dU^zoCb+wBe7F;-_dbK(xXn&@ zd^={^=D9e!)a5w0w%z-+bI<|p+|x*KgKF&MJ|=3@TwG~;GLaHwRnH`6jQ&(tH{u)n zy;|-&`|tIx;3|#+fO-lmRGp6Wxl%=)2SJJ{bx1BQhTsWR1FD16)cQ!ypFWH~t$AJH64}{n zR^DJ}oW*eJa8J4SuE)b(FTRR2ig6{yuiXyk<{Wg-ddR;ZFL>WlN+mG;O#lAi+xK()mX0hy#2dbU*&ur)RA~!PqvYyvwMqe%2#Z1 zouD5<6*t>1CyAHr zjHmso60j&ZuO@29t1N7cG6=#lD`^kz@iw#~AddO>=QDDz>b$ z=jF)b^P<5Rw3_J6Ylwurzd9bu?R&(Up|- zG+C_zG~~V4v8?DMLZ`UJP`6nv=4jvU_BEd#zjFk>T-Gw2cgJ6)T}@)ra>7DlDl_}R ziY&oGaZNR$a^@wP60Okp6&<7O9#=mo?@WsBD~AFp<9>Q81I1e?Hj&)Y@?^aiDN{8rF|l$BIV9ARD3uY%I60{o=1wTMUqYyJ z41zaa3CP7xuofGT>?W&7rDXHji(};gRoEZpAm;#QCWbjXEeg?0P2+$vPe!z`GCbB(a9F0h$4j?U{yD7Hva(2Cy0h|SA&dawkoVK`I1RK zIe+CsCNFl!hT0Bz0B0t%td*`VUhVlDs^Y9_6BupwCg!;;|4WuTy@X2X~^DOOyib3EjHdG6d*S&c{D8r7S^T@_BGXKIuFb#WkqXPh(Y+%uwp% z1bo#-KyREvjzlq>lj}_Tdq&<|wz5WXxQu43+TU8;#kwL9RN#ZbqQT16rIbkRWA^@a zT6t!;jandf=b@>BJg>et3_1bV0-mNo_~U5jB9M}{qa(G3HTjp5>rA+~OMC@VUAO>J z&hF?N7(2RqQ4USVmQV%8cbYuI&5Vj8BzuaO+c_iFp5_~ARA&l%p2n7W#7A)Xi8#d~ zqTL3Jfq}~cC=K;{4Mh(mvqzA6eQEoYI4lC=?-FTelkD+tMcfyIiiP5m@-2Y*VUA8l zc%V1c>?kIGGs}>#I2fn4*xgl}06ETa%@fHTjj3Rz!twI;G}eS(!V$(5y3-By=mIdz zyV}gBY_Y9VB7sl{mNJyKjn!fwe;rK{$j^ef zJ5C4`$l{Jj%azM#Gy?82OBinAc%4JV(3X(m@$w{#)<{ayuH9 z*=3bj$oMMUvYw;Tnv+{H)a4zS$WP(zX-YfX%Iusj4NZAxtX)KrPK_u7Jr2sTGubxb&%Qd@Uup+}CcKj#w`l zuAL{ALd%5(N8YBz6pxmihVBg~HYZt`)*3a1p=Tq^eB_hfw8=6l*aT=lI%IOBisBT( zQ-hxLo@{Zp+!ucMsCt=7O|V^#NJEw$y{TGEwiSWL-o-R+h%~MO790vK^R$w<9Y?(a zeZ<^^hAEi=%9GlZL>!qNi6_#V63E6wCNNI`Qyd3ojUNoO$6>1*&nY{x5*`5VYS-Fh zMNoqP@tPx*epFTYd!KrS<`yzxQ*ds8cB6gAyR#3nG}E-NCj?*tPkW%UEF+WCij=X0 z#EO~EUuv)RHfxC`Y+<@qUQ`yLsPy^GgLM_@U z9z*jMIme|JzT^15A|#69OUIGh5e|z}Oo&kJ05PeaQlub^^Viy`n0%QGt&@&`Q@z7> zFP{rPm4bGC?@Cz{Y-8r&^!BNpL&9D)0FlTw3z*qaHZ})b_MjJ$A;K!C8(Y-VRPQQy z+Nb6eOB)v65m1T^f6_P!{ zIUV#q7Wq|oM<;C8YJsGKdB*i7 zp=)R^l$ipsZBHu4vm*!d9y$_}QfB=$6lPvJT=Wzlq2Ta$?;iI)gJjGD`} zhFGSw)7ST5j$6KSQr}%2bu6W}RE{{#={GkbuW0a@@20ygziSjmKAx1eM5N;u-r{P0 zR+n#^Hu7bZe(;at?N&TL3QKMMsUc-4yJ0*IoogdfYmG<5R`w)*=pINN1#9@qbkh7a zZ)61NU41hn~sr(R#VYzf48l*IiyfGIau2`&OJ}1Gs8Eg)voNNK_8RzYzLZ) zNbya+kEAWMc5=-*8480rVk;^=KU>vaS%hC_Y0u0^#s{TRSGtzQyp6d=dLyZt)LvfO zYODtIYy`;Qd)0aEy!~=3tLH+{u`qyeD>~P~*WO+qR+clLn;iv9bKxJgv_?zmj8P6- zp0sJ)l%k)+ZEJAb>pE%ODzSj>R#y9_u&v~O5o&N-Fe2L5lEb;DFM}W|L^pRT5Bpp< z)~Lx2ui@*1Ewllxm2kt?p0q_PSuxXsNvOM>Hn}mg)1=qEH${#Yl4sgpPE}9$N3A5RwFpO+4NG#ShidkERm`_Y z9qw99(fb|+a9VDsKY_eSCGMWGO=TOAaT;{lk;mcMyL-#&@9w74Y);4_0L?H5AoIYi z?+NKp&u^*4aSxoYAyUph_^Z;|nrX<~k6F?+dp&PXhW^H7mI+i4LFw#$>h*X%y!Sr~ z^}Y5p8?8FvZkE)yDl?8f>)5^LtKdd9?EhAi7as-bG#tnY44(~w6)U05Gs z8rQC`6P~M|FS)qKgUOkr&Tx9u)o96fEXO3Anvq3s7)P17tqE=0Py(b;Kw6PjyJ^7A zOjQ*i7@!PLPAje}l^Hj2tZEl(b2UQESXHQ0P}gdK+MMlBJ6E4pp|nueYK5AWnxbP~ zeOiXGLNTULO(k&7S2RMX(*(tNCKP%AQbQ`M2TX7QYfTRQYfvX5*rmoN}`cPN~>E%8MZ2ll|?m0 zN}{%kGi-8-kP1Za}^9X%5Xv9YQKZI5jwV+G&KAhGYkH zmqYuv4!^BfMlrZ?jEglDEWayy_N@gV zjEd!&tXb+(K;a#?NAKFcgDv6~nx%^W0KmV`{LWgqTdTn6sHozQN`chmRF(DVrml_< zq@s$T3PVLD02Gu_iU3MnQ-bEPd`IGqFT(a;Xw)YGm>(_`<>Wqqe_A)#5^{D$%~w>i z(R9i69YS@6+7-*Qe(?_>*V}x{69P{cx{a}0f`uZuRybuny{a+xiw$zh{v7?4 zp&ojZ$36bFx8g|TxUjXB)ENUfVh5oeY2MDvr1@Hl*wfK1O`ec!u32PRi(?%XTd=No zN}f#Tgj7@U^wTeH7q)fu9XCGT~7Z1YKcBbc{{%fqcUs$Be-dn*jn1Z-ER1z zF|&6RA!jaanbhdISkhiqjfK6ej%9FIW!U6lG{?YOLZd7-A|a`-*P%uSBPYjOxEGlG~gw?mOm-rUP}(g@TN`U3+XMU zg={>jSm82xTG{ZXi~X4&+b^g4P5sB-k;pqo_eZrS?&`>DP)>6w>H1Bct#+4}(|w}x zKyeQ5l~2;B>rM8{(;>8Fg2V!nV5noBp7luDyL>>okjo@-+sM9HPB)I@@UE}LCRucE zv%;ec<0KA(jiiTn8LrHtCxc#!&Rckkm6PTyI8R!tk+t87o)|$}NOqTOU=|&!Ykfw? zK(uRSZPJtkA`Il>vMt+HzIPGshAA_gdQ~XyRAAG6jSm-J!wsOYws7q4iGuYD-l|1= ze=VT0(XE=^+W-liaw|(u@Ws8M^X6ujX5@xBt)QYTByoVCQo33pb4DwbYIAnp5ry4m z)NW?Fxb=~^{HuQ6+6z??!3wAya4L7eP)PZ^P+XMG0)fxglWm!~xeNE#=HOBckOHqG zp`_U4gPiW`>?r{$azF)_7~{1fMGfT3m-&l~06Q8;2a)HqE*SDhtt4^)r~+k+edfCXYeiT?s_dq-(ScHyEnX%O~4T?1laidKyc3Beg9o z(wF||9jeXB$o9aZ?I)ebu%kp4N!Uw>Wo2fLK&R8zn;bJnREGr!`+xk@Ri8{mhFca$voFpEc2j?$wgvVZVY=HtFx1=k476YUQ_v^y?{vl5Un&=LGewmyAIG^V`gro`ba#%N%<%9$oOi zT24)at0qMfs-X~~#*8}SjMJo)+b;YTVa5k~ONM!TsN=%MtT)u*w~}K}KNq)kK%PM)MTnykS9cj?Q%DH}6@-y0zK4Ui-Pz6Gu^(K_6L;-dz z-KlORSW|P8$-q(6nnZ=1Zj*-e^rk;PfL*QtMFm&AD=Mc}=|r+53ykyAifTsEE@a^P zQV+;d!NvyygMfKF3Q1id9P)iBp;}?j$|wtU=sP>OQ_Ud+XDv$Xu>d-rn50B4mUGT} zPy%E*`F`je&_P~F=d~*w3@E_wNT7kqzRB_&roS#ES3!HcBOkt3x z2cJq8Cw6EfvE$s;d2cP?`|~b+0m+~&**{*KQun~>deud{nqn5(#%IX;&Nh$Mq+LH! zxj(+Rj@>;X8E?$c7Vb#yktr_9qy3{){@x^Fmaxlm-}KCJ`JO8LS_O(Syo&R>_mzu& zohwOIQFfw*9>SH-oRZkZk59b2Il7nZ@&5qNI8V*^xA<0_rH!?ckpw|W>fKoVO;{p< zNwQp<3}Tn1Cu%xSO@X>ofW;E(_v;UaX&8HjP|J!8u~?*@FO2}YHO)P5rs?!V}L1n1?;(2 z?2h_FDDqR2)SpV0${`E@9=&r;h8>HR!DGp$O3WnMy(sb(^yNb@n8_K5ImzeRrLu`( zgB|HWNRaLz1J^a3Hm_?OjDk(vakOWeYgJ@4n~y3j-3PdJjD5gzYTPlbQH2$bHAW-% zHnKSNG@}0b)RSt%jwrLR++D0%y)8Z=PI>07+s3x=fKNES{?wG1{nHJ;cnQL_&kw zrj|)x7>MvcS}Z$kC>d8il~ppt`U9F>_arj;Bo?A5uR@U&XbC-9t77h#Q*P0ATA=TW zt1^hMQde-RyFB&)RbTA=MsNg|?GpM%F-;yCu-(4lrJVONNJyyA$tb6G$!>M~Fy35S z?qmnvp!J6>Ng zmVVhkD*FLX5DQBSU%X_TZ;_8uO;gpSXe}dH#$}d3qP0=wI-vy*G1|VB_MJaYm97Lv zNrL6NW7N@G9xk*N)*3yw(~-_Sz!X&>Uiza;;py^jwRDwmCp$*&`CL{ek7+K22BH0> z5rM859bpFM7!*gQRWF0@ZW`Ncs~B(=F3rxYEvuQ zL*^qMLgP8>^rGy)i2NaMsM>(nc7$$b^c`xyhcyd(JznBvbo(^cr_Wqx8RH}KslCxW z+|;er8nSrLSktsCePUSQy|iEqgdtY^F`CoUd~+VVrpa-qTDO@8%``F`9iE`pUXyP2 zntN&2zde=GxVK}-T>a5mUI~hOJN;u$oF6h9Qj6OooKmvvLxdV`+M~F=@pZk1lNO~V zoW|Au^Kc4}TCAQt((XLJv&SUL#0PGIFngbB#_*iCI=_T<9WPLiGQzAPEI2FMpIYQJ zp?~4mxVU>V(CzY{9WZ$3(v)JI#Trm|R@EM{d*T~?F8bEmFw@ek{OYR*m=*rX6v_F ztAAl?x^T=b5EB&u<8Z2eGtpP zN|BSxDd^Re{{RWyy`{{ynw6v5T*gnyobF#yT)c7JYm#YWPnE3iEZ57Fw+vUWc(MXWQ>|mh$c+GeQRsjGFTQ01Io^dbQHasa#xJHIyTGRv5N)(ys=ZGR8i zwEKlgfXcjQhWgZ6Z-^7kXfD279ijaXp`~l9qb@}yc$-6a+RF|Ua!0AFISjn?G?C%g zC%<}#DTVoOleTI}Zsay##$MfySTSMrH8juU#?oyqj>4HFYFNw;#vjF=)k1w}G{Os8 zX)Yu`-Qa$7_bDeQbZA~7jl!)H!T}A%SVJoO4^Z<1v)rb@Om9*vNOCV(Y7+%q{n5eTR;F~<-wIJqYguif{nfx%CcjQY`g7tG_ai#CL|sQO1% za+3k`C_U?3FuGQZrcqlB?@}>}0Na!W1B_GVWA>6-GYM~QE#`H)vUNZ*BvX;}sMlDx zme{|QFgu7jLO8C1dvSFLjrdc8#W_+gV^m$LJt*cw=Z^N&#$ zt)s;q%CvWv3J1%yHw{vMVB3(vt|uUzkXnnN_g7Jfix2MelHA~$jL#ZxS74+Z4Ak;y zw#5{z(pP4g z-Gu3eJW{5aZ5*Cz2Jk4{U7H^; zB-D}^;6hY1pREM>2qXeRS$3mz=dA!L{H55l@E6ci1;M)rQr*G^!6bC64za_T2;A81 zNDA#T+946d*y+IPYFKuFU&r0t*C!KUg3+dY9sbO^*xjb>wrvA;;+9g-M z0f$|qt!&85xC53o959&6v0_=M=3(s}jA=BzQW%S+=xh$GI#Co_tJ;SwuH&i3Gg_Ap zW-D&J&&~9!1ngbC0*X1GQM!)WtxkPzb!ZETY{ZHO4yUiRD(cSB11*KZbAoY@D`siP zR74w{+ZY{(txC&}myMuN&Ey>GsxcQ-voZvc+6jNU;~A@93y8mWBJFPDy;!@ox6~pq z&kC{V4mlN^JTYk+u#RctBxB`sfllaY#jEVgY=KlpS90SSs{UK4C}eM!=3nrrr_;47 z2tl#C^MDxg<{ABJ71ggI1YKz}Zv*c|^C_V&!%=&!O$lCIityl$jwz)1v2KZeU~_|2 z>~&jPmob(w%06w9{G|OV%t+s8d3WwyV++_)u@<)DMr1(%PF;_fHbuN0`G@b;EFa2*yeQ)4@)LQTcbTV;*!!$PexH1+J}um#!q_bO#7uNyW~Ohj->n3 zq-9;3q#j!yHxAWY@2Rq??PhXkQProqN!G__I1B|@Zw}pR6D7{6c<%oI!4`NQO6g2) zuHYzC3y{W{C{q}DPFM^B(uXm+-H`>BnFXYKVvT&-IX3kfaNlG_W%-?(8&5R9XPMOQlL*~KA%!htX}6Ps#^c_Z zEXg_`kg_S|hHz;M(2`O1WQk*J^MW(log)vkD?5TuVk!@_i&bV>31;C#9MhK!pdJ}} zA6f_IWNKa*g7q3}bL3uQhF&x5YoF4!8=WTN=F;sJJAjy6o*4Ry?Fvi1B*`U7Eso-| zwY@40a@!&>v#;H9FhyE@&7(W$_Ao3ie!-_pEyM+`E}Y^u{wl9)soiNBTegH&y8ZQP;Z?+wF!XEnyE zTH<-w_;f3);_*Nr1TFZW-cx_xW2vP;PUvzBJH5U^*JPf$Aw%kee& zy^Bxq{+*c;c?S89C$DN(cd+9*I*vP|r0~DQs~uZyrl+>b^Z*HC@;UZBtGiYVpn?cJ z2(Ka3{utTAY7U(&i*Q#gta2ER^`D_@`p1H<=CyZw+cg>TrF;?24%6-FQsWo!m`e=` zi<*P^9^Hyc=CltT=(_eINxsW0+PvCkQ>45}hvuUl)8AecclCat-*rXzmgr%gT zGzcpTT+*eOo4amZSLTQhzyAQ&t=dp)3`QE3CYz^KT^drWDstwD=hpWraHOU~DZ?WS zGM{l%is^NI2HRC0U?vN&FtecKeSK?@5$ZZ!;I!1^-;?{hh{wwR0AE928JOf1aLLuA z`Jle_{(h&cM;RKrOGao$ywv1;;+qoYr)9&Zy<>uh?%7oyqkyZHwtjl#w$W9>)tDxD zbF}b#8tlR5LWq-Hh9PK~|(uKostk z*$CLpu?eWzsaVu5)tyR%iV@nNW~Vz;4%NX@p|V3=ss?IvHA2l^by|k8Ls-;g(vwZD z8Or9V2}?yNtXmkMQh`7e;3_}>r-4WXI0`^06jIVt0H%{lO)#2v04A7CDKye*k{E`Y zN@=xe08)xda229LVu4a9q)}3+tzw956jZ7y6>3!#yiuEAqNPztqNPz=MH#j#ij_q* zML(r#kqwK|qjsfcs7bC&O>eS_iWHh%zbJvX%Oh-t1nTYm2dS;)LZ%}T z?CGnv%^R{cXOcJ}d1ZA-&}E&@03PPJ9dF_ay};AFH*ETig%%Zc77@NuVbe(S!gkhO8f4a6#nWn z_5LI5KRV$pd^4`=I*<0IvFF^)GY#zAvGfW$1^QOzlkoP{^!emBG9}uESe-@{7<(R~ zulPg7(@0jsREHPQXOtUrjyfO1^Q{%4z0(rg7iUoYeOE9IFPab*|lR`(&))6^!MAF8P1!4xDMkxaP|*A+AZEYSnA~4U z$qmR~VO!Sa=PWa^5a6e!O6eqn&RIZkI9{Tok^w1MxsFgUMt=2X+k2eyo0Gd4Zxz+F zlNn`MqQ>a^5Pd1gtvo1aiU@~)4EvPpJ2wr@Ibo7BK>;QGih3-*k3yFE#uG3BOOPjShmouBmu4iOi=u#`~DPYFLi3! zUR_$o+yN7Lg}4GSnqulwO}N|INh2>%Mk`p`Sy_Ov+ozaM01CAneo~gw?RiYVRQCI8Pjzb zcC?rO04P5;d(@AmT|P=`4uJc0txqZBC(OnVK~7a$WD&D&Cy-4X%sr#%VaS*EDmgQ* zaku)^pKH_uf%Xt$#&Qj7B1t0`kYIKdF6B=6qnpTXqJ0clwL58dLnKVHFFROqR^zt^ zA?Ncm&H?F3acv%;!(=}$aAd|R5BNr{)r-e8i!tip)6k~i`q;bWh(HN}=rK@BcEQQm zb|}j=Qd?`?DV}NN`%nYqP=0K8tFT_%YA}x`Kmq&8-*_KFD6pJuuINMN-M}6-F#>*4 z-DzQnG$uDWany>IXDB#r(CW z-zFBfRG0U?{$Wu|be7x|c5Go)d(mLE_S|`hIZ-e_yX25~rJHJ|?ZrcItPM2VJ;Z42 zS|Z%C_2Q9yn?NDSZ15MY05mWQh+;1$GSV7BE+UM)d+rIsk4l{yM^@avS`WHCYO=#| z=Ct!jvBradJt?8BM?Twgwa~M%-GS>)lzAu29AtdJRZDqR?pAwLm82&gYYsmOw_&3B z5=kxP!%Z``anV=WhBsxo4ZY+Smu5Ion4r!`z^UD4nU$7Bja9yEdR5o8gz`?o{?8R! zEiT$QB#;+AXHZWDmC&ydxk)6Bj|5wn&YiXG8@VXnhXK z5xPldYz!R8d8a|5Y0L9{nMlq??sG-Zd%Kln)GT9dt#uhEpa(z7qdJ5#0%1ue+u2ao z!rEFws|+MIlLahTZtm;`1wCvv8-*fCqJ(Go22Lwj z<;FAKf_8!VQs!dk>}IZu7ao1g^JB9%2jnW;HdeOd_i!Tn;;duVlRWXzQFg@S*ma~G zO)WI>K_c{`ib?=lD4@_Fq+`Vt9z_5;g&55X^9mU4Qb$?@JoKYEqX!fyq#?hBMLGT6 zG6qN-)8&<7Qp~^s)SAqW{%hHfk#54<98TvOkNYd!d+|*cms3D>JYaMb>ZoG4Otf?E zKiqWyA5KLhUo>YETS|ZqTzt#=Pz_&WN*J~h&C4F9s$H{P-Yu{nx?Wh-nJ$+ou@KJq zAObob^&~L}l(QVMlN=z`VtR0$8SpF2~tgNh$+I1<=$_7hF_yg%! z+OLS_mrT68(^+D+fbCgWWWTtoNg6>VvCuA&ZZP+k4=ZDm@?n1}icLpD(@}tu1qd=i z{MfHO@%FKCWfq&KSQt`GkJuC=b@xA3NkrokP!mhS8XEZpv5In6g7=8hUB z-se*v0T2xj@3^AyVTy`H?e6g^5I9WdDLnn(YBfxm%41b4jKb1!hjI`T{mKX$*$j2B( z&OWu1sR#bwwzRi|F?(|JFazYqc{QEjJvKORwK)`tWl@dT#xs&}M=G_$k{q1JVGgxt zeI&_j`~{= zO5*|J1s8vF)Su3U6>UbT#?7;}hgz|o=2%mCl026MdI8t@)l~78j`Oq$BeNpzI8HHH zz8jYA=S zUnmkXR~aMHpwv8Drs-n89yVTzwvIcutMn+ z7Q$%vsKI6f8LECFy}Gy3;C8y2Nn`Ir50MZ}YyS=^kT%C@`~;t6$KPJToPQ3><{o6!nw z#shqJH=lK6iT?mBnNUxCkB)Ln%SN(tuRQP=a()g{QjEKC=4mTWe*dS|6|R@ZN>_$87=4RZ@%9OUA$G#gl^ z({(FJh*o=lF+t;%JXK!?YAe_qsL6&zugxem`y^?AgjrH7cFpydjk^{r0 zDjttcrf$ktTQPhcBI{lajCq-o(n9D@@a^fE$nf;beXeUrvAWGIvmEE48Kn4csrk3} zR&jpr8DaAbdw+;v8rRe!y3#dkt!GYxH@EvglOkiC!=99^(`Z`8P9k^;L9Td0^G}{e z6U4_7bZn8w>s0(4Wxmq;L*iY#PV zm&KYJI?9oGcMBi5{MZjjEK| zxGXX=iW;?2TBv*f{$7!yKbQ^#}PX^$`bsnOLX)A=U2`Mv` z@k8^yL09C`q!yw7mqcpx?Z946CUWBZUe?gPjV=dYRpwH1sQcX8_iDZR{qA;EKtVq zBE=()y?gstWqYKOb3+I%sqU1_&2f3xR8*4Q2M>s^D*ur(bHZx8=ZbU-xA5G8CRf-cZ@rIPb`_rv zjC@t$%UKQY`b20_Wmn(k5J)?{^Ges;hZir6*u5u+wSN@9{8KEET1MnN@(h;u9@RFh zt6XTd)^nw&+UyQjQIHT?BmLq%I@dAq`r*7gtZG^v^D?>SB1QomJf5g<5i;Z6_PJtO+F5w4xD^U&D{xIKs)E`5g^fw$`lf zCrfr_isgWBE@j$ja<)T*dZR!`<*vmT8K~|#SmFzv$DeAl4;eLBE@uu~p}-U-D7(E$ zScM@^8K@X}*J!!cWSG3`|+{rj!I1wq{PVWirH&lv4Y zhBBjj{r5RE33nywfID$jZlBF#W`u5F3;QitmDVVpRy-&sqPL4OHOr{;9YFdDNO99q z<)gP)qHYzwQSD1J>@kKo1mc%FloB}{)N3NMgpdYseL7PFIHUOw_G~L2{}QQK=i0(jqYI{OY8@!$7(=5V*5JexhwoD=~f00@Z%$&r9=PKKF1G{ZD;Fh^6c4jzEt zR1wV#=wtGZ;}J$=PQC5lPRDsspJGMWQUgsRcY7z~}V zRP#wZ>2AJj50r69u~&PH<%ddW5nLcp+tp9Z2d}*rLeu0(!Agv-4ss8rB$A{G(lcaZ z7(TR&Hg9sw%Z>-7Ff4P%xn0P4=79W(6K2tr=R2`XW!kOfkT)LwwB`dXBIkD80os~| zJA_lz1IY9=!_0O#zm7#l~$I$*V>HOS@TMkaft) z{&i~End1aLK_!%XRr4CLXx%|lIRsTXbbDEIvwS43(8zIt?M~>c#glyf&Id|GSs4b^ z!3VA?vS=q}*VJy91IA4cp@d~8Q@jcMNEi&!puOJZfYHOBGDSnzlZvAzr*86?;7KlK zAHx_p{Q6bcbXx^My$tw0Wn#v!ZCF%!F{=9kidRDBjr*ACWvJ>HGdI}a?;0Gr{Cica zZ6?OfRgq&dOPmLDlUMxCneRg66Ob|5i;2yTX*Q4sFlsUw6SsnCl13z8%zk0h6tYMI zft+Mike6YAh~*)eoQ&tvr3@FnGj9YpIpU&pC;}<@Pw7VE(TNNtXOdTK%*O-TpFG}7 zWxBUOJxx3T8sK!Q;Tmg_`N}Ur?@w|3PV9Z0K3ry3AH04|K3TQ_j#!=rIiv_V;-Zc= zX`X2?K>M_})rRiuE#VNWOCa4V9Ou%e4glTMp41m!o%_@ZlADt3R73~LJJGne)sMEy ztGt-p&U$vKNl**9`A2#%0Ko56l>M@4BN*}{I6e0oHx2b42sa>0lCkH3>MG7VFDp@& z5l4;!0fA9X6tYIE5eRd;CV`Q zt#FZqDY)mWRCjkUS;Uh{NLFB(^!KKl*%YTOkGHeWprCAL}i~;h&{mx4ES$C#|*VsMe{}Uur<4#%&t(8k6}?;+Qke% zEROC8JDBoKRFcP5vD(%*BIOsXQ=X&P`qSanl_zU!%XhYruHa89eX~V@#oJ9wk*q>e z$sS$T2i~B2>wAWHzRt}oO@>~;depN;D;TC(w#6CA09BkMi@p%2aO;k=iSr?t63DD_ zF`xdmGI^sb8X}*V?Z_F&y)iD}dy#H;G~VEjYIL;`yD{XqZ%PHWTL~rd#CLg2Q>I6)25ru#Y4zGF zc%u?KZFObODmzqnR|{<-?2O7-?c=o|vgnMxe?*U8wA+A_Aj-FK?Od*zc_xpkeS=iD z0%aJtlRO&jjJwd)Z ze5;J@2ClA|Z>HH=Y8OmC)Rs>P|>;^HClG5e&Bn62|I&Ha?|N~%o# z`h{9=LfzG@NvHjx=6zn`@>bayeUcHd4ulHl^lcG*WqWmhb-Fu5XYv$xZ0Da*SG4#J zs3p^)xPP*tK4XEydsWDVu8k}(+TMj&r1MG!01=KsADu0>C-{8I58f~$@Cnt0!(SOJ zudSs&GX2RAbGdWJ;Z&@AVXydB>T7Q^`$obB+7?m)ZU@~xc+b6V_@7h1@pN`pS}M&A zjBN3%~|jGhuQk2-epXS^CrSCv?NPSrH`Hrn={8g)1$ z{agKUj32_fojc+;hwqB4lSydp&`!7?pGt>LNavmwtaY{5k=A02(_)@0h{MAoNQa{# z$fnBs0Vg0J?Xc%Epo+jLJr=wT~fYFGtH%4 zx->M8SKs~t=+MKc`}5pb*9N7TepuVls8LeLyR2qC)p9=y!vza_hP5TsRa%u+nF$XX zxadGNGK$_5>}4h>T9HK}ihXv|iIZVWV@gd#%|%Js0zx}f4Akdpf!eq#R5pql?NB>Y znW`3Q^Xk+!iW<#PF{NWnHNiRD)gYv$qZQ8CLW)o*0-Oa%02JUT0-OaP0ZT;`z$po$ znoTqSO*EPfG@7J_AvDuUO*GY{08J$npjD(HK&cc`D5(@yv575;qNPztqNGt+W=S1U2UcT% zKN{opuZlhx(cPjqrtW3Vhd+ehWtF__K<@!{{Y`3f%w-ktXufAS)AM7U0rH3f6Hq~H)00ttOo+EL%Go$B);3R z>7FF`x1ngVi%T8az418mZB9b{TL<*baT|>T0Z*`mXRU$MDP!ofUbWnNx4QT5=3b(Md)$ilFGf8~gq*)XIypOs^ zN~EHVVH!}Ct@Anij{;cuNi1Yoq}C?BnPQq(P()+W>65y_KU~7Ed+R8ygoHJl1SFeYUrFbxk@%j!9thu3+w`84O2a zIH_+Q!@|t7NRqY8=gUP7NMqZUn*36^?(MC8oqhTj40hbw0ks zM=~*6cf|83#_$d?^)&{wExwaF>DmltO-65)O`Po>^#s?GfFETrF%*U|JR@$0L^6H5^IpN53s8Z#Eok~%ckCth+Xc zYj(Slnkhlf^kd2Q6vJ@#jL}_gX%R-&QN#ZL_35)(SZS&*C%cy3Ec5%)0W}+H_V*GK zYi)BhXg3E4aOc}SXi2do-lzUDnhQHV{4Pa`h6-HH5-Ydj#xCi zmQ(l9@EJ$=)5fZ(cFk#XY?$In7v=pZvjrB3?X=~$ca~|IStJ;2@IL`Z+8{{^MH^sr zz~G;1Mrd6_wZZ~MK`m2=+DtPHD*fCFUZHR1D}Aa~1dC=-oD9^F#OWE{aPQc5sSKz% z4UwF2&ovjE1fdmO-}~6$QRp2sLr?^mzzHs+cU~#qXIR5KHVNxWuoPyM*m;fKn4z9R z7?#Ja0q7f}3>`=A#{&bsHD@!vLNcnJ3RFiQ}r)YDOejpPgt{`Af+_bFeH zanE{^8+}O-`P`B654-R0QC?jeaH|^cm5u-%skb*G-(*p)=VO4QwM}hqu#+T*bDped z7TU2OghC6yF5Hr82^F;m*fJqg$j6Id?fe)cI#wR(#c}6aeVDH`anO!_zd8a%9GMYOi&v+S#~`oV>@RF^$fD z0Z3ZkLqippscTl&4z}ZT*H8B#kCs2-Rb)D*skIJt>tcBzgEJ3q%USojr-%F>Z6n4O zd&cSm?~#fA^L7-{DlzU~XhU1I_PIJ+!5H39z7cdU8A;HTr z9R_oX)D{tVAH$0kmCT0n@q`hEVnLC*5IsdMR3}YYJL+{m*mm$;HPlZiesH_82e2NV z)g9isENsz7r(8(m@->v2&DVw|v$NLk5_snulI5_uJ;C-Ftxa#l)*2n8Q`{3Foq|HK z^Sqv%`cbc4LGxW*U$B;<=ISQ8)Ff+2LXu()fCss*dVOd;r1RK1sFjR1u0M^3f2DHY z5xhZps9xJ>@v}e}{`nEI2`7L}UGa)GhiBo)-~dGnt1##Q1Dd3|8%7qj_h&WY8%x{G zLvE*cD_yH9ENpln_pZ;yQ7w;yt+dcqKRBdgj=1F2J9U@D{x**2z!usC1fTC5XEmea z!xPEi>d3Hg~Lfb+PrY99ze<3 z2j^Q~4|JJy&kmcb&L_GCSIOu*S0W&96Zo7Nj1ply}M>>V*Al@aKv}TWLVzJ zEiU{urbXs8&BJ-_2pePXUXP=}29Khpy|OASG3`|zxTh@a&WC6eBB*8w z*aP44s(vcIOpEE8{U8<)Aspj46|tgP2reye?}qJ4bPh{%up9sd30YhsxniV0$1}$T zwSaXEzFZ(DyQLVb8V)z2T@DqU%aNM={u2h`%M+XFv~;Fd^0#Aj=h z)L_uGR~$Xq+_U0~^wG38Dyn3eJhcS%Y*#6HrMKE_P`}M9ubO|nPAdNZj_$nuO3J`s z;nZWP`Hg5LubJXISb)Hcd9K;^Oa-R@~t$w6&UEF^B|CHw?$t} zS50MV&}kY~ykqCoCMzKI1Xn#e?%1j_Nyq2KcM_~{YdQ_HfUg>tPI{4mMmur0@6er@s732*&pps3|(oaLS^;S4Pt##1jPVp3)ecjoX-&01G z5K{pO;~Dx_CFAi8<-LZnwYFM=6oigdt5aLmMaG4o>v68(2~f?Cx^YnT)XCmSNXF44 zo5G(Ef3q&|EtnKWBRlsTitDT|x$lZGNw-Jw4YLrD zI;-s+`l+oy7&B^~7t#DpW-``gW{`o%Tyyyv8*fmXa~QS5eZ;z(@zYr|q@o#`E^~-V|OAp@?r?CJy{0@fUzCbv-rz0ODb% z;IJbZDn4LGy;<;V@2YrvP|&ZLeCWf(26M+FC-JUh;YIYCPlz>50`;)(BORx^jtKmz zbhlw^$m9H{L#bJ(jXV&Vge6|~1TrZDp&eHho$$u)JxfZ|wD&u9^lCH2Y9q}$}Af8pd+@VKsRnAB2#Twb5P4dbMXd)NIq@0MTt{oEuHd-f zw|}QK%Xr4z_-Dso5T(m7Dz6&@*8|qOPZP`io3H5F#1aIG<-~KJ?+(?@`2N~G6UDYS*4ae6UCcq_ zBd_Kti_+c4N?LNhzoF20jwILgjrKDKXk;K1C|KS({D?aDPA1iO#c7`>Wkr>M&R5AZ8GG9G6BR#wtcIn)ASj1%^zC( zBSsub_coG7xZJ0nan`W>9wOFlwS5-yHI8LQ3WKgja7W`?e-AZxn@xQp%hJxYqhsCX_JBu-ZtdcpM<0W=TO!()DLBH$9!Xgyz+juNnHg+cs|_@PQhh@ zJ$Bkza_HNYK*3cFQQgJ%y%HT(AnexfmMhfz*JZBR+uhhtu2~?x}5S#68=e~fNp{*PYvn~b&IX&+RSMlp%6*8 zl-z%TyN%W6klq-hV-8a0)>D}mlE8Hp(RhPTx0=;vMr4BNP|iY-L*pTZCXh}MbJs() zipu`UUTrqHPJ7O?<}M9H49I*S_}refN%-*9@LsMl{TKbooebfmsm({7kR-ddf?TyJ0ak1 zA6n-k)x0~dARc^W*kp5t1M62K(;6MkWp_HMK&lIFQI7o7*v-W)9)^|5$igumFk20g z&{VFW)Ow1@X|;Gt{E=L$l14sL`BdXqXrw7~Wjuc_N^pjmz8y4>~lz$ri_MC`{Q{2;6FG%l=eW% zS$N3eh*m<390P_pBhrwegtID^8*mde2x1+qu`%SY1o!o(9rn+e4q?a3fzZ_Z1b{k` zxODcXZW02$NF1MfE<2D<51$c?F-^m$r$C_qw*;RpdY<&wfxgr(42^|SHhTSPX(JA& zuwjgkdI7yGLosMWOcc2vz&q4~=3l$P86eYOba!Zxve951)Qz~SkUnAC)`1YsIJX7l z&cWXq#W z4vqDtmK40V1Thm>dU)m8;89q%yAh?mVDtrJ*m!_$p-}WKD3M*a+Nqy)|d+FcwNL3)Q+^=l6Dce zZ^q%q1}Qfz_jG{#$hgz3uImrN2YrRe%484fs6b1VYav@Kd zx(>ADP760IdQ$EAv($A0oWzlkJM%zXg5h3RjA+|QH6Q{g!1SezADb(*1IAA#iIti% z6AI^mPij}_7wADWM&Y9XjjH)?da%cgcBaO8D#}4ol6xPe5|WF&46z$PqWuQl^cw12 z)MIqmlfki4I$N+7G2L-$V~8tjPygVVrwYV~H&za$M~#pIj49@<#svG$`|cz++34 zkr_|S2Mi4t4?!eC>f2Z=Fu-h7XkofS01jg~Dn~*oV+|akP7GMW`igX$_LhW%VeQtK zY#Y@Wp?tnGij9ehk;pq6JI|-NsW2xSqrhR`9Stl8f`^s^=JcR@0)>81;C3|0V~SKU z%@C0rgOSA&NFXJjlsHrav7w@#H$b6E7s~_hKqDqS7E4)PODnloC;d!^a%1V*kX|*l z#>?dL8Ajmhen$L#YjmjGc;I)aWk|0r+A^ywMC~As38&56wLAPpWoRz|D7jKTS%>sA zkFqvw&P%8Oj1$yT!v;~tGBeF9vRtIq$iV|3APf3deD*1Q zbF{`56z6jAN%X5zlRGpKF&){5r=?f`D8h^ZNjnKi$5doZpdj5Pr0*2|x#0b32rpI} zgJ*PxJB1%9KXu9UHM8fRwCq^-CNaCv)K^weU&7Jc#u#=z$I_`j=8A9a6eU2)re*<{ z^rpPQsdkmDNv|E@g~i*ByS8_jowBxH$~HO7Ll^TSB8d zX!SCDEvVZ~WbwkO9QoepPeEAPoGTrXX7bJK*MGZ@sR~VL-*`nCjn17flQwGPcfq85zrCdsap3%!7gUv&aYp&i$L(~5EtKhbVPB0KJo9%;m) zJ8ZoF0JUW@g#3~>Ime|k8?Ws!FXWCX-XGti1NSrhG~W*0Nctu2rExatrIpBt9upi4 z4_cc$YGmW?d)>^-4I%6`dw(WBIUa5Dy9}IXl25gD9wD=RQ$|~zKH(t0w8XGVzQt-{hgHO7<)MZmNlDvB{g zlVU%K5Zg+Y!p>_XJN&`Bdmh00WPY_q4+iP?x+~3haV4Gfa+oG!yHrWo1w3Gkb6p72 zzu_Law!DJwC=k9TjE|LpAE(x+c!u789UC>bGFjMLN?J#546Tkh_V@Lw)o8XYPFGQ; z?GuZiOxCH^{Xpczwm=w#0}1yeKoD*qki?}TRimitX(g~*Am@NX?tiq%V5Fe zjrluH4+IXl>0dKnAgc#_Gv;53F|MV19g2##3IdF$qYPGFlc?M3_DgqaU&|z}9d?jM zwQEJiV}++Gb$Mp2(G?zrO+5bqqj_iVM$CusHE;^7gUQsUj~EgGBL4s*S20~YmTeif z3rbBGz^Iw(+vJX-O5(Fr4%DpG3pH@msB0LFcBomYS*jLl;Hyy8A*|IC8dhqIn)B*R z)gcL_qKf8hu%`hL~!J6jrfBHY$phMIx<8qPC1kY*iI1ibWM7iry&Au~bxwDFCSetx_{= zP$(x9y(%_pRca_8O5!tAWYA3|c~hH{xvEwQD5A3%w9`vTO@LKK4u761 z%~Q_%=^L^rLG|i?rD;KG^<|&KPo;JX50XcIqkw($UrCp6?5I>#>q~8Hzs$x} zlZ$q`GAw*C;(v&D-)YvhJA|=bRiy=0kEC&o413o~-T}~bwu&26ZBFD$i6kt_#X-hN z$K3#P&2*kQ)Ltm9w0$x;C7y8JYA-`+Z<&Fp*U1Ctn2 z!1@g1KDG6C(&&{ra`P=bh&7!?*Wsj5L#An;Xt>k^G7Z~R3i|qvYoPGnoIE?C8~sLd z_qPM>SCSFc$j;RsgP^RND>=MfcP^o>>CbO$j6TL3fKdl>JbwJR@O$eXm_>8il*X8S@Bf6KNdu2iOixYiZiUc*$=xQoSCP{#uXv(x5R zci2O3Q_Az&tt_^_9Pr#w+}*8$Tu5F*7jtfN$Y1fSYkfh)Qfa;vu#;@E7M9`12R%q9 zxvH~eq}y!N)!$5MS5Va^j%gusV@TT}IrR0cxh?fC9m>0{jh2%c`|bDTtz9F)P@}EJ zttX!`IcSvObMNb2G?y_!whL6;7lNobN>@u_T;mt+ZdTH?s~ry7IBnupzzQ22wklC| zJhv>S*UNQv;%Bqc?S#^&4>4>iAL~$|y4J2ut&#Gy=*A?ScrJT| z{{R~3Z7m_Pw^(iCR6*z{dIXw|`MUE8u)Y3>14&~kc&N|bimum1g zH)RzStWrX(XOnxo79Z^Au%i7!_tlxv=&5vGYpDE}W;j)B;8Mw=UExK(rz)cV01JRc zYD(&gS&jgxm8H4b$+{@J?jJF#=8uiO|eP0xWcYw5~Bl- z8FSjDVh78NR32P$mh$*4a(SeKY+^?wl6lFbD-B^4jAT57B#rWe*qWFP=MT_R9Tw(2 zj=BDn$>rF~3Y@v)7|tl%Tl#_j07@+!V{AxyKD6m)OMD`Xx#I$!&bDx5jIrPkQ&C#m zu#u;j<(r`Nraw|kXgsabN<%wxPo-CBq`bL!qxoV?WwF=VrkUDzcp`13ak%59OsO5b zM;HnQNu(FHuW=cpw}6}gsyhmT-Z>;Dd4G%Uss0g9i2bFEgZ)n%ayt9emr^`-&SC(_ zcwG9L1$$^RX*{*S<;lPU)`%^PP3B13q;BW6NgQmYUPHO?Gml>M%aHRAE-4ByAeRF; zqWuE>5VOd^8Bk_Zz#g9TmX?MD%#LJ~^H$J^gA6$fvuFVv17^7#46j$DpG9 z0{U4Fy1EcXaHZuuB9B^ZR<6jV<+rfpj@hdyiiaUaeQGz7MVmW!CqM^dK$GZ&l0}S- z!~xI>VLRh&j03=_WQiPr>Kg|mKD5}SNm@l*gBimDC=2LC6mB8{R^0jP?NX8#0oV#_ zI7vXP@edKFqS#bC#5Pxv5q?TC%r_iB$CQ^jlC2B`p^q&A=g(8 z6h))M5x`%1k|Ytw$nUuG-kOM!fG{(h=iZ^r(p;8j#B29dcly&B*FsWRzHWoC6xiei zHxPI9Vd+D4R`jI7VhSC+^X@1C-~)o(^Tuh0ZS2b!$s7_#6s3fW$c!*P_q91yV?)p= z>qtV!7(v%0^)+3ti%7{Fd$ygq_od!$NA8&lCbf#;hBf>^{0eLBR`ov$)nVF?lKrQ6C<6{H&SU0!nDm4 ze6scSr#mwR5s{Yf=}L%@p>BhzG_EgEV}&E!GH4v2Cvn+X42L-X$=}&FbfH_q9 za%o+ow}`RAB8-!YE<5+!8Kbv|l0X8Opv(g>AbL}ZiFUE*c^p#6`v^tlk73$?Ux<>i z3$ZvSiV*~3nsTUKPbQc{vE<{>3IoU)JmNh8r{r=wj5)VxK0nrv55z_y~{!bBhDd=bGT zpr^{pP;a5NErik&CHAK%1boQ@c}e;8{c42z?v16w;>awoxF_yTcQN1s{p*qOb=;1& z`gfZwlDQ2}9>$6wUpNUbfW7RF%8-caP6 zde&y6r$MG@k)kipAx-XiXJSDlnoWI;#;ThkM#ic}TjMp;8lP*s?*p3h9T_&Mn zKBKGYx3g`I+Q=F96Ovz_^Y~Un+rG8pn{w)++64k8$6deuem@GmdF%~ImUt1Yj>GxveiDFZ@An)7j=LC`G}#Ju*iEu=LnRi#$(ve&n=P&AD~BEEA~2{3EC}_-YX2srE+uI70LL%@@xHmJ4pudmC?{{VFfFhn~5yqd!BoM*&-Ji66q zRd}q)3dg4Iia#uxN$YVz+D>nw(#;*Wg|vMyONKTwOv)8da!y7`tZ#@n$4t|0VMqS} zNSOaMHUlYyVYg{#z1_ui$C0O?=Y-V?d;CZhSC z<~Cr&=YlvtiLR?io!3O4RlH&pqs}*URSGfus-KMF`!0>5_;%5LTZdS1J1XE+ABg&j z>3$uw(cvI{p#m@+c8)(o;2c;u9Psn2U5R?f6$`VIkG8Cns{+ z!p9_k5dd*jERj4V@b=ylgt?L;6-QQ)`u_krexY!_74SIR$}XjZg$KL8U*|)2dJa-@ zmY#^cw+PsG<_0gq7eR_IupdsvwW1C80@vHl<0Cx^TvbFAH+ zuW`CSN&XNpznSK*=<}kR%6>A<5z8NWbpTd zF0U>*xx6mwr2hbTVMpad?1Fmxh{&)B;y)SP-C#5}*dXV)tsm_%66$)3a6vFc52*hD z>(vhh+diA2-QBRnmoj{$_sGEfD=%K1%#ql_OKo=C2X|vtYr7g-nq0jQczPpiWvFV? zlex1RH}m~#GBLhg&B zulS2nmG?VLBT{=VOMf6MDN9oc%JO#Tb3QnoFFaBea#q?nqjEnS{{TuWIj1-Gn%&p| znWX`9#(s1CF-2_^WN#mKDISC1`@0_!SlnrPy|gk+l4k^c;5h^zQCGZC;A!=!VK$nB zquLPgM*e|2tAt^BkNvk92$%leq`1cOCqnABz{@>hkw$&Urq7$ znRWtQEVfPtPnx-3&bml$t*(?j6GbpR85kOcDMLn#qf&Hz*+lvF%Jk`)(71{hiWXoV z7SAeABCOtjp=xkyHpSx~cpjPV4STfOUY&8w)-XBsC@Pi5g|s`c1loK|6kv7WReMzT zMXXeBsyK+HxA6vrJ*1;=+F&xbKXi~lKU~!h2mb)X!@_#DhkG~gJl0s-KX-wGKM*Uu zUj%3|h7sF3D+~~_HVFLcG2lG`6_p{CRle|9SZC`(oCK>;vqlD;2=PaOC(>t_eV`d3 z51f@{KO5yxVN7DC6-%u-xGO+Z8^_RtuCkGO*>e$TU*mCh`)62Adh+!kfT-!>da3Y8CL5> z*R;@*d2_6DV;}0QF0u(-{7{zlw7MA0}9xQ?z=-FerQmjGXWYnG&Nw1s<+k8nOXq8R|SC8vY_@8qe zqf2OmZi_0?CrtJkr{p^;^7k(Ir%Soebz$OdF^a?v`A{F>&nC3=bX{vlyVi7OSZ<7h zWkl(L)kycPJr^3MhCj2lAD&q)LY$sh zZt-iXI`|eJ8+b-XU>0c+lqdZ2kXI}4zfzLNRJqY^{#TPYQ~ls@MRW*1;TrMqvkYUk zzFo+;;ITai<6PH{Eg!=kHL})il%#Vq$&u3_{KN7zma4?Y%{cUX9aXexqwANt9PACP z-eiGWpTE>s58?Hf!hSE7&GI0YQxoTsK|EJ&<9Q`{G!1IS1L9>yU^DWz2>!Lqd{c+) zx~7?ZZg6H?u^-+YDaWuy|~+RujsbDT>95RQ4r zrfRfsF1Mkq^0%2FgL1c_1EpqoD(-3ZR<-lpB9#v19S$gKLZx>PG*ddo=AElt+#)ZY zq(w6Ul`2jvxBknwveKiswqG+&)FL~KjsC7y9An!x&v=>`?Cq~U%@Anzg^|Z*&wAbP z9s6H+MJ*>gr?<+0c_3%yG)rW{tGrav#OOA0X?HW+TugBS`3#|QcCp${E2FlXP=Xm% zXOhn1&NpjBk-l4`QbtaFM{3N|Y#KN54aDrPDn+<3<8Bz7e=6V7qmRaZ4Bo)Ub!thD zQaKpsk76mdRaq^}-80A9rRJY;Jod3d*2=S&!NiH274!zW*?duB8(9gKK$okzA8u86 z=y6;&m2v&2qwBVD%vF}%Jl(5-!x6{eD{9h6^xp`{bsT?fvLuO+f%~v{EWb|lnncbq zM^PQlm#D|`Nd&0JY59gh^!27&Y1RoWl3U1PKX(ZsU(&p?>%%wNL5E(@CuuE@&cR7fzDz zsvUlOWPTLs^b1(v^AI`|959rF^v-GWpyiG2b5)@M+I8W|;EsUP@$-DYbo1+338KTa zd6yST#1ECO8;17gmApL>8mPaxY9DJ&JFVdXSAmOAz zpHc;5N1(*Z<;{P6BL>}@+dN=mt;w!f#~+&{ z!Z69^VVG{)?!83~KE*is3{8H^dzV|7$;LOpz#qpIe6$zPFt@r>o(mz#6^y;Tdg4q22f*+p8k}Kj3ic5`>+TrNj&gd z10?gJFZ)LomfG@4cIoz$-JkC$+P|5nVW`QQIKjZ?qmj}yW|7u4^(PgS6IZ)An&B+d zpOOF_zcWo;4#pxH4| zrwxyuMpRMxoc@(8*VdMJj!TFjJ&>?p(vl5DCz>%P*aWM(4>0p6_6D82hh=Ssq`J+< z{H?XP##gH!YH+vI%K+MuAKnQ9kIOa3>VFcY({(8<=Fwd?%F&4(&KmuBQZ7Y@y+WPzFR~42*Nvoxs!OWjIMIv}>Dtz>cR>oS)%46C>-#BAx#L69goS z(BlK|MmqZOT*SUA)U?^=u)DE>>gomBB#uwM+jn&O3XezeKBeOQGW1wHT5a{465*42 zGK}M`K3CLylC|Bebw+(eXXlB>vSxvOsYbuNwYQVqT&euASd(kF_IfH_*b9AgVuNtD zJoc&Chk#^I5lYMxST zpF>VIjfp8Dwnt-1R5J260CV)LI3UrrIi?ZqFB#a_EQB9!m1Zp_;>&m0bt%>|Fd~$B zfPD$(m4xD#Q%^kL@qyRW(@4yl(S`_U+R|f6n!}^5CTI(Ce}ZJ0g|@~f&Tz~4k+be%F(DmE0Q|X0|7si-yD0><0{`Ya;&PujjRqRC~$Mb`ub8O z3`qQ@C7a~yO}JT_7yCN}kc$qU^}i3wP7_eWA{!UaMR z099UqP`wWBq||KU0H}+XV}%sL_t2AanI1L&09ZzIQQJ)*20MgNA`^nW2=$@}1*CW- zorx~Z+?ti}>-89<8f-G=5p@YhVvX6yRi>$u8+=UOX;Jrp*-R?T*TrM1jJ!U?MVz~IMh3Cf8uXb zN0_|FDGD}$k7|l(T( z{C{e)lm}2oJ^cuvPNjBSFBtio90sUv^vl~@ukAYoRG&Y*gLlgy^!oeL?KP`iN@Hbl zZq~Drf|B$j;_V@=`7#K+2vw>B`Yi)gj&^(b16W76o9tNQvHf4!9$cNu*mxt=q{Z z)Y4qqt~PnmfI%uUN6_Z8bacAZbsXz=!Q+sbB7sg6DLLAGxUQ4LR_t^M1)&!04jBra zqi=A1u~OZw5+}_LT76$rA{}A8F>v-bZ!O)ru=_jbbftTbd{tYG5MAE8S)HqYF`j1H z8w0n{^{u}RSXniwxJdIW1^MLVkIRBVJpmy8l>Yz^TT5?icJj7-`?(zlq62|hVlgWX zP0l|S!{>}-)K;s1GTn`oR#wr$5CIf=bv?~qjB+WVY3eawH3r=I*$t52rpJQh54hV~ z=xT6y%}Xpo;@U`$M^ZECS=JJ>S}Mu@vNBP}xZ=Ap5#)T!shl0vixNL-gtaeT1r$;mVhU+Aq|-^NNMaLAG^Eo_Qa~Z3rKGJA0H*;!6!jIPP@5DAkS!vL zl~%TlOxqPjNTQKNN}{)lGi+5AB8o*7AQiMx4T=Rjr4-gRQj&_hCvh0mOlert39l-( zS2k-EVKYS(Rs{tuB^1Uj6qK}>hP#O4XFU{T)o2um_cz{SxcyB&=qWCznCvAjFsZ6m_gl4|;#(aCcNAkQb=iGSE0r`N4-)oZ;b z%U5V)ze6NZw(Xg~KU(#&9MR#c{a&ZRKf&}fs|3~AiD9T~Ul7~NhAA|!51fgmVf)*K z&kCouan3pl+}E_(t*#dPKuFH99DZDi8<`^GhWcZVN|VG_^4r>4X?jtPC!NA7kCZH9 z(;swn85Lv0nnkCE?c^_TrtaoV^UW*r&5nSc!oKoJ$5Wd6b1%57;B#qrV{?BJGTliw z+mj=gZR#<}K9!keV;773RjS^$f3x9Vva2pYmjn_IuOL)6_Ey6CRl2y=e!*apwDQAk zAV-i8IVY|<@$X1{VPkElL1E$jF6LVzxjs~7enZb4@^jXXR#S|w+Uxido0+^>uP&Ce zG+ION;} zRv3j~4^l^3y>IaP7F9aNrE_$5ZYmh6AFWlAcezqgQc}LfYfl$x-XDT1GLqliHM#)t za>pGP^)*!@*Ze_y_RH%;iZI)w3^A|{fOkJy>eEirG+0zwS)py%P=j+5^);gHj2Re5 z5E)|K{i!)C-61-OK4_zuwD6QuT)pnIJ6_COvMUdgG3W(!MoV2j+yq652LVw!{sN(r z`De3lu)@+4l|p_|pI&=Y-t{3Xx(OtkfJ9>^XMN&8vfZm%X=gcuKRn*&(0fy?ygb(zQEEEeo^{YU5cP^LOb+MX zx9;tY%t;!|@u)n7?mZ}O!j!GH&DV7IqgmV!*eMLpO zdnb065?TfMcCXB*-`1@ohgD@cQZgzTmZ{uqZW)-UDteV}w6o?&Sz?oHpTgMtrkQq< zwY$Bp-?S+CcXU3+pBP}Pl?vF)0ni@wd54(9+@}YY$3NpqaVsn=V^Z(f3NE+Exq*k6 zgc3bRaZZe@0?05k$UTieG5LuUSpdt2ez~b7ks(6zI8*~9nuhA}ZGxgk(@f_96Suka z6wmDOJgY6^7iBqA&&sFi-j}FbtJsO;xYU#ja$vSSWFzKb?dkQautyvz`=uD}dzz4q zi@*T~Q|VR8Pxh9TWdVEr_$}>sDmlu%ZyI zdy&$jo>-!Q@3=@8pmIRR=TuIyY|ah5Q{EmxFfK+%sp&Be(HzVo*sl|olhz-u9`5}V{7h>{w!8trpYi>JrY|?pS zhCI70Y11rlDwp=Ao@6^N7G@2%Y=1Tnryc7q?@rLH$+^@Ydnnvqd0Ifc{o*cv0X7Il4$(HmLnd+1D>Or ze6MR3p(gC2bnZ2owvV*h+md+;5q>?h-k!F4fGj4}Bp{3~*p+a7YZl)7RlBt&{{Gue zl5?0>joVLP4}W^gzwth!;eArmPQUW+7VT9axR8*=vT{frsi?Q21s2_w=U6oBrE#}c zyl+rKk^HGz#{U3j-|b1WoPuLt@UBM7#M-X2H1-q3G`S+f?^1WV=ZpjE>sH3IsQ7-` z{!L2oUWlRd;!-ehTL5RjarjZn!mKG$VzB$kNDIvB+FtD5*)p@r(+^nClh_pw;d z`c%+r_VUi~%Cg!tY9IX}cBu!@^fXu;Z>e<;ngooDq;Z2!X7bZK4{B0b;|4ZX4bYB3 z6w(MeJ-DPu$W~Li<@?0^qdf&Hw$;WtJt-z)BL!cp1^QFOWeFUdbIG87WNVc9WNeat zT5-zqtClp6xptlSEOzJ8qyQ_D$0xRF17jnNV2rUJGaQ_EG_Hnh2N*zp>F-EXTyW@i zgPu(-#ne`?w6ic&QIkwH>A4{RMOM3>* z0FP%s(yM>MW2H%SwzkhT+^4h=mILZ)%(~^IVUFfvx!ke*%rWW(7JZ7dT?tcBw{_gY zSp5W%kWENsNs6Md&U1|OS!?18E31`)F>qu*clRs@=Zsa>v}Ve*%rY==MHU||w=bOM zfyGDVmpOLG2O(=Qw4;%Wo1nz;wZ%B-{D5w5m}fXL8Z3oquBM^MBLHK)0Wr^W>sc?O zjf|q^=wx;C3B@SU?OSu1C1uFYW;oC1MUYu8risRRVeL$o;@%OuONi9;$zjE3n;j|$ zo=ikle)%oCAFUSBXqYA`Ee765BWWL<7V0}K%OBcyI4myFfd1*v@~GQbw#f40xR*WB z7R3#&==S6)+``R_g@|q>A3#2pN>3W;sc`nm4dcv;Uto(I53LIQhLd|EL2sv!{_jtm z=ljK1`qCM-M<5GWAs(+GVm|>~^_Pw&)@FFLogzmlKzEt;s`KCSHDV2Z`r$7w8_9|Y zAtge5+n=7N+Z61<#!GZ;{f_!o%(ul4q%nc|oYXSuHi*0K=b5q2>1QB*K;pPf55yX` ziEbxb+m?nX<5mI;uJ2s;tNJp@X=SM1>cNyZnH+5_q=^*>AmIJqN_?$#Ey1nX)SHbT zOiwZHEg(WS0$2il$E{Mj@jOuJms*InklVo-bTTj=W<5Ozy?NHBrBA9{SpNWN#rAuj zw0w~_Mv0pskIuS}8o!g_E0_?4X?DWDPfyaHDnjH*rM<|!QR7`pPZnupk;V3ix0czv z1b}h*9<^V@egg^z=Z(o++wKT!smTkU#F`%VMM++2D2qvPJo*kloky$Z#J)VU(+B#Sc3tFmRr!zWiq^0TrP@z^*z*~9+k)qVtr%ASGuIXF^vhy{_!{;r9#o%${I<_vO4RQ zgGmtWT)&n!FLHNd6^G*aQ%uwT+i=^i=3*1raj zvUrQfc3MmXJ-x7BHwS=ome0^&Q(KN761gZ_{d-@v)HPigixF(c=CO=xE z;_Vgmjb=uMc8zZVaDa5@rEF{ZW%FoSG*%Yu`SQ|IpkYbtns!$89ipTDA)2kseizW> z@)#G?C1c0&1IO~K9u;W3G2thk;D~0sk)P-5mf=NZ_`D+P8a9~`FZOp#o`4MVn%42v zrPiUR=<(@@?y_Aj_KX5iM|>I{)+MiXMfEIQt-pjkAs>>PX1)y0Gs`>m=jl!OX#!Yy zcJ^r$#3Z?S0X=qsf&8mGS=FNPCyBJp5)8anZl-xhc3kft$bK}QHq`YkA++r?!-^-K zL%wLEUCsjZ1P;WX(vDWwD;tC4WUUIjQx%JH*~Fw9{=xg6Y=L?2>sVd_M3w!j9b4yHAHV5m^gKJVA3D z8_VpsK%}wj%}Z+9y-0G3gHn33pMtK5{{V!C#9E_-lgxBtafL%ZY$Y2Vq;VA_rGwvmg-o50>rbH!b-@J^Se*-vX}HOeK%e9|B0 zY>W|}+zL6OwimUgle65#(e7i{z94Eh54Fac3~?OfFKmy^kK>DO7F8T^Ch zLk^#!Xf|hTR})7JnEv1)Mt>U5@x{a53k?FtoRmp1*pr0^`PXxE;R_4hQ8g*2xHmEF z*mr!ZjN^~Q)Did(OpjDLi(Fj2$#CV13}keqr4Wr;YgY9+e-T>?Ju^tqEXmmC0VedE6w`qQHDCx+lBZk`)GLpeG9X{wP!Sc-AIj}*DNFFQ!&7I*dM z6>8QQoMJd-kmrDiNw09X@cxTwk0VU9LOOoz8n-0&Rw=q!ZSB;5c!i_ec0&5!NW|fM zC#CAP8U@-zWXpMS%*bXt6>=~M@4)R>JUieBv|TFV((3w4gLHE^izp8mz&(0ZjYr}J zn{Hh!(p%XVkKK$Wf8I6A-|L#*wg8?+v$j0>P#hEWZlz3(hr$yz1mXsWm$uw5+hKF1!D8|<>_*Cv|=3~_p7t`&so!yiDHIx<%t0(Mtw#{rC9Ma zengf`skjCKPo^r@h*6f>DWlpDkQ`$<$mvSytx*b4l1fopnelu`pXKv3rI6s3@})ch z)by#F;$#cAI&6nHBW$39_~NxRh%HIFXzkHAILlyU@mT&Cvw~^0J3GkZkV7dk<$4U7 zR*zzBhj)Ctd6SQcF%k1<_e;h`U3upmXRkEW_?rXVJRjKid($L<>yQV0cB=aLDJ_M> zfGn`csKbw&oP+vR?-gy*E-fx$jxim^_-+?wcPYW`M=VF|=vjNZzcRF+6s*wYbi1ZZ z^4rvL-2NFAB%c#)76{#R>6zT%MjR4PvF}=z8a;&k&o9jS|Fo_X}(>&$>aE!8)aWeo;K*ZK{LBF2Kpnp&7+y2U#}y-dNP$dXX_JM&Ihu)wrFD> zOzfb6_kkJb@T{K;-HSw>)DtL&Y|cEOxgN5$8TuPkwX#D^FZ&T`t>BjUiB%c!}^j zXB^SX8xid2a>erR=3KP#zJ+-wl(&XA{_KcGD_w3aZbnjgWDGHtVVdDD{4-@9nfAK{ zSkO!JuTV~TKZRvp=>}+x&Ys80grJb~()NsITTr#Nn#TKdU%CQG)NmU-;QDh@-Da{ntGsWq*dR%j!#3=?X5*90KiXP1h^`>H)23@TPo1{#TLUB!*PPWR zp2Jd%wlUy)dtDlPh|9ocxGe%_=j052wPsjk*8DkfYkC$bBaycJ*&~7c>vG?~cem0= zZf+JEW|X{YQ!c7{3hDH}2I-n=AtC0GMhiLM{uDVy1ggS5r}ssVJgy`uM~OjjrGxSCW9%loo?-C4=WYNmPRrO^!Mpn{yVc8?}bCdwWW+1 z5c&c+t;W{$9ZPkzw>Gi|8%TT%`&L$^;aiu4{{UoaWi7%Gwvr9#bJ!f@P@jDYi&1Gw zTE$NZ&ey*WuM+r%lF?o~xA2u-D-Tk~iM$q<%%P@;=Z7+?w90a&4 zmW{~op82kiM3YW~K{nRy8krEvz>(Z?F;%mDoeYGWr22023<%vz|UIN*6yL#p|-fTB6DJg&6M$x?fBKSYS+Ew zbedJ9mwGMI-EA#*6G%xMWR5GD_;&9Ww=Jxal`jbx2dM_G$v&ZfCZA9_>@{>}DBvXurW5@NbZ%%RG?;DFth*@Hs6;=m^RyhWxYMLc` z(Q!0yVO)5S~vB?lX5Mvq7_|?ycj(@SP?d4T?rEicEo)~lb)%#elXS~()y-gKF z=vv-I?xbS59|FZDo#G3fF7?Vhu(Si7tPfCrly4AT^cpnmETQma-mRwI-IlPwfsLl@ zkgtRCdmebF{5z87TWw23)zJA$gJe(CDHyFmr^T$=UTJq5jJC2JvY);febbucybr10 zUHIG`Ko~CkmW9y&01;Evk6trI@e=o;BG#j(L#OCkm6oM3xRSxl_M9B3AaGB9zolN& z;Y*Y(Ng>x!}IrG$kf(NF5T9?6kJLz|Nt-iNBLdtRW zby-_zX$a>T?}OU5ynCkI>UK7Iu9)Axwc92m`_4Ly8s;_Y*6~dGZNv~1nhSX3x{dx{ zDZ$Ge9<(d8I7(B3jr1;BX{S@RZwhOX8%baV?EJYfN(_Jj{c4AU^jU4L^@y*hl2*63 zWf44wZv60nLHXBl;tf0dZ$gJsvTe6EsI$W&jz}DlT!U)1-Xqm+FZ8cI-tykgCb+j{ zDZSOnKVG<@JBku=x-??B9}qk~VxG!fJ5sjH@eH1E##H(f#d7+2zP#{+m$6)3$Es;l z`N{;0cd6JCd zt!9m+k)tJovE*Y1?$=4+jX^cLEkefe5_rhkLk}*+(v8)xK?A9E76n@$gItCKue8MUD8Q!a_m?bzE))H-FeUS ztNtYWOgf&0uUf9yq=^K8F!{26@4p1q--tHz&UBmWTn{Mz@w1PYAoKZAdojj#lD5px z(8r4G(r6y&N+8FT1m7#TBRMR6v-wu7h4z`^1@h*aNN>=5(KpK^XV~`@h2p(h;@`$L ze`a=F$pW@IHsjFKJa?nOo+=WIN4@~#Zbos(ZuDGwN%m~)*ZWSvNw&B*0b>fODC^I2 z^s9$el4#6wSx6)b2|N`i+PJL_{{U1?QhgdtN>!E^gtp<-H<&i^4o9tBgT{A_r-|j# zgpwdDBF1sG$KF~^5b5i+&Z^^6f@O%wZE^BG?Cn1(A4+>_as0+8Cw2fIyVXhHis$r? z99e4&(8XhNlA<(@tOp1?{KYaG?wzI>&9j7aD~8&A$4}O`Zxxe7 zlUIA$rc|`^3}|+v_s<`QqQT16<=^Z*JxH42e8vr(^S(}h8l^9cG27Z z+9FOrmObmu<<)Psn_E8>Pa~zYGNUEFNm$f2GRL{c;a-8RMKAV58qSDddz1i&k#ZU$ zaz`BWrsHkPbnR|tVCx?c@8XrBx3XI|TpupreC!Fq+7DcNR+oq`uJk=C`)1lxaI!+F zA#QdtBlm;pS)mukz6O_5L`BrBo<>pFmCqkSD^tOmoE{* z0rnZC(`U5sJlc+zs25Ex`C3b7Ae2mu6!aBWz>IXgGVI;V9?~1k0;ejuBcGtn4ZB<% zq~hD@v2Vw7eX(s8(TrDi>P(S10Jd?!&t9Er_g3-S_}fgrk~B++;EaaOF^qx;{A$O< z%{1TX_Ii!7?vmL2%%>kAsv6DD{3M!2k*Mh_=S>;}kf`MtVE+J0QTRxwFLFOJ&c7|c zhx}I#Y}QD%SrxY?cPo9;ewZ}^-&puV#@80|#6_N~Y#0Sj17{rjVzqVX*Tg;>x1QZ& zn({CTk=8c@n&mZn%S~3w&SY1X^2!e?;hYsJ!AT?YqB^ZY9`sUYMw)(|;5*2qk8;@R zZRE6SnGvz+&!@FxeWEW1YB#craVMFDw`E=eyBzX9g1Z|_i%n}mg5KZ^lMKI*d0kaKIR zeKYx2D}Uja({%T|vA*9DGPG?M&GP3s$mal8p?FT>@M+T6>Tm_Pi*z9M^A`gL^{!h$ zhUZM5Rnc`8Al%!`BUU_gz$4O#x2RK_yqT-3thW}P7+F^hH1Wf5%5%75aTy+_v97#D zsQ71JlSzW=NtL5kiaCFHMp)+^`c|KVbonOm#qF-CaA%s*Pd+od{aYx=Ija61xV600 zE_J(u9nH*Evs^J%#tIMz=uI_kidIdhsz%E%7yjK@!Ufv0lZsJc1o()eQ zjBR7PeLr8bZ93qo#^b&@7dYVJurzCE{w3VaeX53zT|W({>^ppxY?HWu7eUw3sCdmr zz2UfZHfN6aPAzFNk%GmzKTbe3JxEbbe6l+gve52km8|D`S&tjxa)f8N?N?)uS+R={ z+%4iN;4I(~G{?^o^b{5h<)=;x2lbqWavHz16Tc+E?R5{0^0 z>G0deRBgsG4I+hz?E`A^a5`qNMxUr@%FSV@O!-_aS0{X9pU$kVyK`?DH~L(u8m3-o zNOk;&IHhJsE9h!WjNx`mu;degoQi(XtX~;EwNlRd%K9*ErB_x^{?5d~ZiL&r4jVe;FlemPQhbQ#>ek8$f$G8aOil_X#=>MJR{JqcuUcY0lV zu$h;4vBfaxt{mr5)C!-vzH#||^NiBaO-G|OVvUet&f)+Yv5foD$abMQ!(#%oCb7E< z{*9?zp#zQBarow-I-a9rB+q+lXSIoPvqHFb_4z5<`v)!cMx;QhD>>aJIU=0yv4bP9 zRRfZHR5q8;UoQJ+1dt0M;fK^yimam&s30DPr66lvNKCU`{{Y9SREYlo%TvyNf~K~# zhRic2T1NZM$0XCi$80S|>||0G8$smyiep;rJQCoO>r{0MD{V>!ifDv^Pf^qwvhmAu zpd3dQc>}4ZtV;}DTzm>P8hpB(`p>B8G2q76cB#sP_rUu1tI%9&+TsF^7Ho0}!>wvE z^bBx10Ba)mMzqu&+(yy3-VFD6MPhnm7E<&$6-Q@gL$q>oOH6c9sj z!ZXnc=zVikq#C`GD-D;hDCplS{{Z#r!t+kMD-@B*ZE+{e1fvJ@r)D;u<+uAylHf)s z1E)AO95?&anXTlFK|GFg&MIp=Q)vsLN@U&0EOWM_y1SCqKYMOpJPoJsRFT%hg~hwc zx6e>|?JJ5N&fee#3Zx#uQ(}@Egl3Wwh(_<;3UArh%ghc`{{RV7K=x%DzYbVT8I?*g z7|Q35rDnH<2Hk^DyJ-6>HxSSr! zCCoB;4RY&hypW>>{j=#^0sx>W7z41VJm*oI^VAXOYnEFd5NVP;wwkfK7-sUW7a)_+ z0y(Y>ZWg8@N=fV|H!WG)0ZWSFQ^&W~&9hVR)#P|MGC}jN*OC2eLes~(73I`6!bzf* zVgd;xBa^`A>t1`pR*%^t&Gb6Ro3&=$FWGf1!~I>r&(VkYin1gq{{TZvdk@D9y1{REj83QYfur zjN1SzKq&yFCl#*B?2!qmnWRD8)F(7>hy>vQrtu;=R zZv2XEEm@;YFN)))_?M)y*<)*Yc_BCos1P5_{{Tv({{RVJiZwv!gBo6Cr|F5R)7zlrJiQc3Xt07QtR+}&QtSMIaR zlbYu({4wLbb5gWA#-f&XNh-=?wUc379+(4@_}8jB5Ksg6eS6p3;30{jhm9)p=4Gh?W(XN3>U5rQXWb#L) zHJbJJ#)}#*?0KcKcKZscabTqHxV)LshQ>jhH|0fzVrz?w4Khfej@_PC7>y!a{=KRu zo-{!;(MV;Gg)xDWwPiuKgd#4*jc^$DAB|?qtl6s(6SdsRGExQH-=|7x4Me&pmB|7E ziUvb74o9^zd84#emgZ>TL(UlBnx=zZ)O@iWvT63rerA<}N(a-RtM;B4u(!DTRGaRu zagQ=~-H)K?DA5k;JDIUbsOwF((k8L7&Kh|~?;L-yJAF-S>AEeRl7zserf^`)@2LdSqUPL1<@YCE-&p=ODja^USz_lI#* zbxmH^OA-0mxJq(iY$d>`j;9JEzye?Ptela>O19^ z?H01zAYATjW3Q;7EX!sPtn)7nMQ+(CN;5Urnlnfly66$(vEE(?OcP9#{+lfBFRT(vnO5ri4 z=@O^Sk22(hQaycWNEBN)0+GjFax=y&K7C5c&Eyw%(dEy{A9eQQtwsHxdv-B>dzCAa zkuJp<_v&jJ_g3()g^}(hnkAEv-dFD(kEhm}MMf!_=T@3gi#rKe=K<#VRF7X;V7AmI zMwuLXCJXx*5;$%k^C6Pyuw3*C7pXOk;f+I7@%8gtYf2;2 z<4-fojdmFcBx60t67ut*3cz*9xx7A{vIAUVP(LqISolbLuT(*Y#&y6(p zlT)~vEgwEsA8(nAj(Q$VH&wCH{u^oH*FOQOlh4NzHGbU(|snDb!n|d8IYll-S=T+Mf0E}i(s-NV66x003~bcmR09B&^e@L97wroSILSb>UhTk+Pw3^H-|~kHNh+(Tz#R0QK0#x$t(HNjozko?$c(M zgR$bT7V28n#kv?RkCkrOJ$dKyq>4!VUExYuA3U(0=?6$ zEwweagfuAVvUy{Wag1ZXO#U@r!`4gSjU!OjwP_Mb?pVQV9AI*!ouGT1{*`m#kB4N_ zJUKo6`jc~fOS+%#jtA2J|hLo!E6nE!2teGM{ zHt`G^RhfA78wi3liIKg5?0Q!J0E_h~ye*;H=^9)}l1_}MnEniW-<>w^p;MEWy7y)# zpYcBFE+9*tJlw-G?MFk0132V&uCC|AIz!vKYH>{rM3si2_NSk`ol&TdOaYb6ozX@f2xy)`=#TWwN@AGbq(d-ld5VLvGa8+GO<5-Ks7HG^oVR4jA{?pt zGI;uvP&^WNlH*O$bcblPy*rDElYySVdY%n6q8x6b+Uja}dR=Ev@b;-TsUi_>9c|{_ z!|hY^dkohns3rZTiKbmks@;9A`L}IZNL{4*{SIrT_=M6JG+z!`9gBS?$vFN1KmB!E z#^)NQg`nBnq^~4F8CR@o7=By|N%b5ht>04r0Ei-s!g@utHrJOkNp~nxW{|Nxx%SBw zkK@aBzVRKMrL?StQDX{+9I^iZCbxWT4xeh8Tryd-_Y%z-TfXo0cwy^VS2yrj_~PJw zo9#D^He&gX6Xn37I_eagzcF^-Pm4m=ETPja+U`k^Ez1|lL!Man=~O&tr^~Kt+C$j@ zs_(LGoUk6J+luM*y%N(vGhRH;CGEf_StM==Jdg!(x-PwG;p@#wE@YbS>h?^<8m>z9 z7!)UWbSO#5^Dc$I4{5O{i0+obBNlei`As0}zx?K=CRsdZd*$$nXaR4b{{ZV&w}o`3 z(e!d|PA+E5vSjz{E0xeS1cKvNp5^yVF)_w~Wr!sI0QIS@SxNIrv}$++OKT>g&W2WU zu1LViIjFB}*TXsm)N41NbEr;0P%(f{LF@bh6{3nD@*EGCo`C%^Px1T6bgeedJb80Y zsO0trv^*zfEbVW1>03Rb~uLre5 z0iK6&6|-w@mmV+$2`Os}ZW!PO;ZS(|>p#ZpE~Da&KF%T-Bx5QMOq`$PTY44bI))O7la&jZeuI||9`B8mt#~E4kK8E~aCe(b`*lo3hMsRvI5A?2D*#7`*__NI* zlvXT#039mcl{}GYn%uKw7rbcW&vS~eqAO{Z+LhejE5xM%J&#}TrnFZGD<;I&?@4(g z2QWjD!{3vN(}G{@4+L1n7{vG4EHTO4Yn-}6{hb@icS$n_kPmay@~-<(TX(V2=er7v z70B7o3ZQaN=}uZ%7d2#%c$#(6d?RCFZhW&cDiFOuBP@RtnshQ=E`JZ z$AwksD-Ocu{{UIOxR~j(-bk|TwRISc5OnMHHPYGmPU7an?E1y#AtV;Jwm4i4fVcCk z-IB9rGUbFhTQfW#e(~CB`n-@yBTaDLTA<4?UO*p-sC*TqUs!)>>iU(O$#pxsh}m-G zdfKP7-7^f_Zh5BYrpnj3vHPrlWsp8HUkBxuTT5maXZefyf!p6=q` z#Bo06A+6EHsBD5j;CgQ4)xqEg(=OKK<)2XzHew8*1o!LKpqKs)0QlM<(_&0^s8ECp?LxR&e82A)j|a+GrrXi zj4;n(j8@&JfYx{WZo70G<8wnBkcsV+Nqytp8%2ZcIvtB&I((}Yvh9t2t&V>T)VW_o zX6keMuvaVTe-CAQ#?&=i(;dvLS>m<%KnM7Db@Z;rIdpvr9j04rT#idP+Nn}O=e5+Lr#ojY4?SD9tA^f;mtbROZ!F4LRn*o$ai$$dR3nchSaU@ zC%U$YU?UKyP&fmwMI5x&;^f0cY~Rd=Pl?v3!A_TS2^)Yexy44m6)hY$m!@1c&Rgdk zew81Eq71k4$co2s!6T8^ij%~Ows2|jT126zx?T9{Msj}))8&QjV%#w5rzbDsBYabZ zRaog$0D6A(e}y>wPe1|w%ajAqnK(a=D`Qo+g={XR*r3N7IL8?{HAlkHwE8@9+{UHd z$paiO(wDhw*o)!$dAUCls{BnyI9(=YY-E8bKhl+cCq>WvO6C|DIh22eE{2EB)fuqa zxWFf<#(1dwK!7EZCUWy~Guw~qY1$XHi{+uu%ggwWKNKKS^J&b#_T7KNrT+khn{Eb9 zn?L>h7_Ezo8#w_o!5$Qr&e6qTcy2R!YjblvOSVgbVgzRj00R`g&ct61)%iaXZ}?fZ zqpq8B8yUfMr2hbgn`~5-(`O)m(?zIkq6b&i8Gv;R0Nu$LCyIw#jZ^GVM4)+-jE`>r z0M3g?u=yx+a`OHqhxn5rAVZ``+3EY-{{SVZCGobqaTqq*d@=6G2L;Y+Q&3g6vAB{j zs#OUX9^6$83Km@+DJ4HUWleYyNL_#a5-SGvFr2;i z8jus|o@{Ij5{l#Kb4#p$q-oaoG32rkj5<_yNM*IWg^wXa1Nv09S-r5liHIy4dj3=r z^e*dVFLZb=6|y6BIRo>n18weyvA%wB`5K|3H`_G3>sg1)j6f8=8o4IgNM9c-@${u) zTC(&f@b%9B0Ji+3Fp++T0~H(t?EWs8p#9vS1_1YNdQocMWAOygf;_2lo;%ZZkSuk3 z3*bOUV3K|Yj-mFN?mxvbteSddNgi?*z|TWkn#}gCX0LdR_S^%ta#SAmTV06Frd%T9 zj4=9B^qH3TMu4&1@|e%QDRj86?nU+!LRoEX9^OfO=+VD%C_FT0kUtKUMIqg;uAyql z=EOvD#CRkV*Y&38GK))_jXpwIOShD9(;wrSHAqEJK(0z+CiRI5h`| z;WF8VL&``FY1YJQJ|4l^Tq`DfWKtzRaz0E=Hq=__ca~DIc+8IRwsXUCip|lIRgQai zP|(b-F`v3|kN&++;pzVXb1l2bUt#awtL*zWyb;&|E07cp#*1_EoF^^EO^hj z#t5KroueIeFfFXEv^!~U>@Ot;8B`y1jOUT`t=%Wb@mvolQ-Ps%AL|rlTi@EEu|H_i zW{9pDEXD~r1Z@?cr&%Pnw=u||gvbXJJ$E!}6ZqDrpi8S+L2M_I>Mt#ZK@HSa1@DdR zqYN#fc?Tg`xCiN6o{3|+_TgkCn1cFKgO|QpH}eu`Ic7`NeFBh z$jJBNy1N!W8P;a=BWBa)0}Q-~kH57SHp0_aiY5WAFX!Bt{v3*Fy`IC3XMS1ghw0un zvc8YW)Zh@3Fn0~gYI*!C;oV&xTVf-T#yrb;F^|HzO>;?#8@Tpl#Uo*e8Q4L^M>dst zr0Ncqw=Ehnhl!NqG`Sbq&|bn1T5i`b&EP#xO=p))yEi1M06z_b+upH0&2^_vR&73e zQL|*Lw<>)|BDU=OW3FlBCFDzTif~z%X~(gyk4^Emm#Kd0;Yz8$Z{sS@ z2r9)+agIe>z3`s1VTmo``$G|iF*Q(IDdQ*mM@hSBBKgz>$}#jb(^t7mk+mev4R2AJ zSMc7sWij%$EK;JMyiPbjt!H@l%HvP*9fq%9DxNC%X?t%oGhOKNFp5*uY*5O7Dw|dh z;-3Hu)XcZGxd5tQk~nM+r3*$VK1o>9@ipm#`v+Nwv5lTIlMR4Fde=SiE(FtcODmXE ztas?kCeg9az z!*`xN@t4^4e-}IgQm14y(yhJMmS%7+*~l=AokANOH~z;Vk$|$8+eDHq@My0P+rbL!WWQbdX0MhWujo2`I`vn%&E3elODRV!)T|$+?e0rLp{tZTP4D zBwDmL5XPp)_!%Wt;nrMZaP~Rmdm6y;nuc9AeTrG^yuG9ztAak2(`#hvz6Y|Mt)r4@ zRv@8?0y1ziJJ9+tllWPib8@;Djv#UKTi)8n89FK4cIWw4gtq6wT7t_3xtmA4$+_A- zYj-RFVgAX_O2YAkky`6ITg`5)*6|qkw<_Fnzgi`x zqNwc@&KFM7B#TM$2AM3eJQuKwm}eg{vgC~V`d2~WbdOQ+ech4_V96UUN$bylT-PsZ zkoZHzH@Y>^kZIbS4Gpx6c#l4Yx4bM)j~1fWY!(qF(D}&Q!h`x#dt9lv%4hgRPPO5! zTSSo+F&v8;_fvwnKZwucSH2kP4>pYYUB+HpOoO}iAAvPi^3Gj2KZ-PR1HxVBK-gP^ z-N-z84h=WL{{Znk(lrfVN|0LKJ=0AZfsmt&Asq-fKb+ z=Um6a`^~qSuAe*Q1VQ#%UbrYd zRzr+_4MN$WMcy)p%^hBys4k!`d^f7DZtdBlbN>K6Q?qfv;<;@dpTa&dn?$*v7E@%v zO8xEF+n;{lg>=3kl<59E(=G`D-%%nb&p^ZFKh0|w;(eKmQqi?oxMU2kj^#dK{b?uA zP?y>0&A5_nGsKUlnLxF<{roZP{ybpw_*XgOSmo1oNaKY05Zz`*D4^~*!xQ<}MdBlK za~6%PSSq@xS96{KY!UVERX!xzdHQajbqL8pB9c7_qAlEXn^H!slSifMT6(O3Eia*7 ztNcI!4t|x&d`Ym9%U09%dri^2ier{V?nffJ9jC-!5A1Ic?3M_@EWDN4FyG3nx}Ow$ zIJjqTv|PZ9%HUw{PH2m>xiEaP=6^Ef)%>sFOHEf!opBl@lDQpMjl|X$j4XcHYX-li z%6@I8RtJYu+~5kVo{bZvtIOec_v^E@bm$h2)4521v&lp}RYkFLq6%C&1d0CH2&? z+bkB+Ad*H6!k27{)bY)$wu5mcvH-J4l1K*!aOi&#T=&B@`%K!LH!tR9B@DefF|L}z zW3G5ZQG$6)lSk&pTNpnt-9MElq^=W^Re6^~55hCcX{c$+um&!(B(LUu#mFO%sjGf5 zw}VW&wz!nD+uWHmo=j&Q6!r$PJ|1QD3Cyp$MYL=a>yeu2BzrFs_*U`ejinay$WW2U zDmsd7+GS2$wfT;JPt;@4VbkoMF!E|vh~?WSEY83J2eBWO9xKpb)1b1KP?#HnpS%$+ z6#8ug(~8dU{FCbX)|VWLlL*9MF&Hr-5^z5{>V6~X*Z23DBiJA~caBCU1SuV=+iF%V z$-=6MkKz3%T87fv;dPnp;ny2D#L9T|N?aEszbhutrG0Bk--i6JJB&okvKtx6^I@&vOt*A#t?iE(SiduiTc? zO6zgf-YD?)y??K)Sam2NzKd6yTXs>jtb<|qHN)BI(0EhF z_x}JSe_*+SG&nfeWMlH}?~)0tuxW~XMR(zyMHV|5V{5AzVql0tILBO)F`Rqmhi-zB zOJ;R)>AGEvZ9T;6A<1&m%e$O<165=3W{(BTdR>Z1J;O!jBEp}$RJ=%i)H)7yEwa%-M0V$+}Z3Zw}3BSP_xyv z+uL~7=E0pu8NnO_`c?k`hgY{3+I9HUXKSfrc1*wUspY7%m zI>B^U%M7P_7RE+1$gRlrjaSaoe6K2BwcC0AT+(b(*}+9_xyLn!aV^XEOIFkM$o|tj z6T4a~e8jqSKP>+lKE#*Ka0> zwEAYSpDc>UYpEWGp%tQ2p*%-kvbv>?9p6HD;JO)f=>hRs|G<7 zW#qy}y-BF2xsKgA1>dr-Q%v%j;zW{Rh{qx`>+ed#-*J##waYh`Zr)z<1C!gL8kKhBzcfl1%pGbhkm(G0d1a>T)LhB*}g zywoie{ifaS;sYxrYx90pwQX;3&St)sbLS#8`>H)X>fwud8(V6Qz;&n1+`nnkTAb@@ zwuU@iMJ#B;2YPTmwK7}VTt*ts;DkLqw&*^UeWkX$c_EEfZJak83ZXxSETxmpStf!* z-X_K=-3>}UgreT!B*M&HyLp2-`qW0~#F)8(_-&`lUBm12rb(r07Rp7n^GI=kB|p}b zU0%TB zFrtbm5V@-V0P7_#dJY9iDI{$jO&|aaR`K^EaiGO>ej?JKxYu+YLTI9uBe?rCt1MyE zqwq2h93SUhEmPF2*80L&4^xI;W(OetVz$6zeyNIuSGD!@VJPz}8c=AOWs`4;-WX$C zunQW1g!&wDO?_s`axFyHSZ$3%z!KO&Gp>jq|mgk9(9xzoz}7ac*b3ehYaBSbv3BjkU}8+sU<#!Y0TPOm|2JW3*P)r;^A;ydo%r z6&L_#A4*}CSnj4*mwZ7%P!||J^mBF&Zpg(RAGU$~?MqO(x)|jg;ZM{G*|dh%D7?EU zqK$E!BI2iAtA+@mk@e!MJ+Lygu}ET+ju>!^S z23)EW%AWk1R=H?o#meSAnKF-GrBBsH8|6HLImn<}2@Im)1MDi;$yOYSAIfrJkOSrn zZ9m0O+*+HRtqhF}k@Rpn{YQFyl9Z2eLS8(4tJI%hX$Xo)XSR`Mg^R{8tr_Q!QS_^E zy0`{2lp`Seih5)&c{%KBA5+&L(;w{6LoMa&46U`e%MWwd53N1MuPqHriKDlL=b6?x zkY$~Y02R;2so!h!Y|_>3tViCxnQ_1VxsLw;Q&caag;p!?5K6P%H~O0>n3Vbj{v+y5 zVCp)KspCBz&5YmJx+GbOZMZWz2cZ7wt5G$LGiOxsCWGM_mMduG)wP?CyBtsEO6R91 zqKwqHdX}#Tho{yr+B zx_vj{#1hLF+GV)7c6DdtC7AW}6#Ce{RHb4+2MuS%ws%*0)%DMi(mGmz#XlZ93}99L z5jA`Dy}8wm#igaHNU%EG5RA*lc|7!{3k$exd^@Dsv5o{PZv4Dqkc{{DsXi)PwYHO^ z=(cCdj_y$rRpSaVfr?G*Vq3iJ+~zcUt$yo9xYcCTuA#O~!Wo|Bm0h}L(-qh0{{Zlj zJ)Ck65i-W%q-ot1!YEAsBOF|)iqbPh~I{lZ7n4E(MvGf$9CD>6kebVu6_8X?6n(E zg_~ZcCZ(oodY6U9yq+SvxF-uNEWjiy{7g3WBi^ofA}cLNO4e*yE$*VTn8^&`bLM=! zG56x4@CD3p>6*r$b+IFMA$K0R1b;fW@b1#%Mw3yo)M8j3L}Li=DuyFJtqtfo&8W5a z6m)4PzxZ=Fksy1$F6@{xH*Hm5Mt=fpd%<@jTeY~7;@UJeW5|u;C3mM^!=-YIsap7Z zO24s!!RDU#QFy$CW0?bSk@#0#pjq2^a>8p=i_5saCSt3}1mI)v%_(d}NAA0IFmKk@ zKL+cmY$LX}lTs@f+(^y_?DX%N(D-j?;>Pn=yp^ZCx|FY+;{>4K06PvVnel`&Mg5DQ zL>xnTcJ9G*pD?%HHQTOq%gr}HwLV%1#F9U926Os>L-;~}!}U4OiL2fX=kEV*coqX6&Wq>?+7VsL8ok3?#`@*W!z}(w3uJBrwtn z43mn#@iJ)=9XiGX`?icO4|AL?UDsK34+O!bz{-y@CAz5@EX|GI%+gOli?uc8X=#^2 z{wej#i8qMjkieyQL<^D6uUg`M8(B8FuHS0c1iD7KgmzXZHP?8ifA~lI5|)uD^JRoZ zjQ1l9b6NiY4B(GT@HN%SsT-bG1h*^{am@=v*)eve+Ujg+^T(%X(je=wU;s0d&#A?9-XHr-hr?UjsUt0Qc4aDn@=G16GgZD8 zX}@NJRhmedB@>HbyQlzU=kuX9lVgiQ7yGwod(i3X%gNruH691{)BX{cgOc~ zX}V^WqT0?<<<;hH>~c;==1p&SUg&CGCD$)xDf^Z&DDJrR{Ec%ue1Gtl{78GrlYOm# z-M{!pI8pf1j`tlkX>&e@ZQ-pp-@|?xS!F8`@SE(I={VS08oh#}Z=8fU&L?uyvWdHy{|GrWBepE+R z6z?hB^)K7$&Enq>SlQeLOD#6oGle-uVgVg`nzivp?t48aOVO+@O}E-y#^DFd%Zve! zLz?N)pwP52b#a6OGzTXIn;6A%9x#&HDRgafRaX*uq2h#rkht{q=8fbizG>;P7mowk z*?50NwuK#KRaHQv?+gx~t!R8j)2D;Mb{3X!#32%*TrU6>;2t~GJsR45YsJv(SJsYI zHydUo;S(5MJ#tN6@$8GKYQ7)SV?JVwywA1qv|}eUJ?u8!;}W-u>~8fx7iiv1v|_>o z24pN0V7E=V&tNM4t!ZuI-w|3Y)>jZNpCcBQLAT6RAmK>tPCp}98pJ>Fmi$PwiraVC zG}yvQ%EtwimhJco?=LQ7nbYjD2%}OXk&5SxWRXdVS5`RN87%x`;`y#5h2euoExJeG zF;?Rqz-Fy@Tw3^=d(C1?P?r#1OB_<|#$y8u&wi%4%?eA+Lh|oSNm3mi64P8188Yr- zTihIWuH?Ozli^#L^zf0|glSPoIKz7P6yBN@JH^=?UY&Cex$zqA>9$I?F_@z#IT+*c zt&a?oYoK_CQl_obT`T>T6?CoM^rSwzQBG zxw|G;P1!jtNja*0i<-MpGdw42adW6NOCIR9JI;G!1mK$Q?q*B*&X;7&E#g7v%m)gi zs1=E!$8X_Z1*QKu)Y%MYh|HdYH}vi zJF)^!PSqU#xvTyXaj0JEn#81inl^7J5zvL?lk}%2&?-Gz=#G2E6I*FE8h(ciTc-a2 zSVHy79&_)LU4DaUZQ+j%M6-bu(+%c4e9XtSa()wmyi?-2bxV~G4Y4c<9B$~N^5(jj zE|l+x`Hd=Tg*n1qY{O~KU)lh1lB-6BrWORzz zME5&?x~D3?j}$kcN!lqH-X^;a`hK-C6^aeb6iwWLjQ(|%;fR}5yPI9Qgn;gLx#&+$ zDLx|J&3UZpx-F2%*dt{gtau-lbb9JGlVzZ2dU^7Ut|J5toDNC;bSGtQ;HAq1y0M-h zzl8mlP%M0y3pP4r;E(5A$AYx;c|GR6aRCvcxQUo|10>a-h?h?X_C}WnD=LV{^vhsY z&xj*^8^c<5k7e>S%(neGPT<$_(y_Lu8*rpC-tr~;q(Vo zyuH-gG9p2Q&qBawKdo#0K)?RP@a>kBWEbwpp)f>olBZc$r=Uq>yoJEM?&0W1q1ok2Z8Mt^5W}Mbvt0lT>9fA){l*+8cv5{ zr9g0I3myl4aDOvNA#V?OVm&(F0_x(10JpTYA`B0vKn^0|T%lZ_#)2^>sj=~(S zeTV-5TCsi~FWWA4U3TDn@RmSWaxl3yZ^f4@p?GG}#?)c%6=48%!90=p)J+fkBiA-18E;{dYR`;PJsU{U^cw_Kmr#^Mh`lgRC-JCcG3a`FXwlt7vP&|o?&M)XIdXoW zQ?qM8QEo4nsV0Z1O{HkMo&KU4DK2M`ZG#+^7{CMZs5}c9(KJm${_q8o?owh5a9bk_ z`I^r0POWdR>biA~o~(4sR#PNh2Jvh;136xFu!|bmFYp$X^h2_^f03 zBlCR6Vsdkiquk<|6{Px&ifQp$O*$Do$qJrYy(T{mcwaWmCA+@5c$9#C zMc{EwZ3ZAz*v%}nINpgGa7H~(O6Yt*vt7NWpK7^6-@agRh3Um<#T*v0NZ1{(?Q@h%&lBjkA(H3qu&Vy@3AtcvV@~*irrgiuUd1(xzx2>$e>!i3mRrH9 zUEG74iKgw5nS0_J`8Gt@7O=L|Ps^=e@cpb(7nLCi1ZQk(j=ui@m0L)B zohSxBc<*m~^{X~Hw9q7+s11gERX3)EN_tu)4Gj&>yLEEMASMTH^*4wBpIET8BO@D_ zXWpmq%sXuwa=0=a{uL2XbK^;0IS|Gd=xKE#{{H}?FYBcL0Afs|0J`nRwMk_lx6oH= z>_mX)@~XP*o8q^Ce;bOitC4S@Tp;5S?G(Bh+ucjMGyFP>9-P|;`pF42nyFUSwBz6tzFV15$Vt=>Qoa{?Z?|ZM{zkBNLONdcc;|T{$4qDG&QMlq1_YJqbv2zGfV#f zM$&D&1&eX0HJ9@vir90#xvO`iL8eLZ?I6H31 zsr6R^TX;d`+c+MS5|)V&*zLA~ygvz zOx0@cEY1Fs>_;I%sM~;~o~Nm)E=T%cUicZNT&@y44B^EvG5l7T(xK0JfTFDU{ku6?c>WO+C>Q$Uqx)8|k&l#|yzsXRKx zbk>FXB#ga%d8jlq_I*fvs5nTQ;e-oIQ^?8@e}qcOAp0H^6H%kv2k6U{^6 zsa8t~)kfbgQn=5xCx+dU#qH)$3{tWVbJPMqom24OHoBgvZO%Sd{BmhqOA^<)DE1$x zu!mKa28mF#r9)>K2ilvhe(P4Wkd8?hKA5PyM-z*iTj&lvr(BHVKQ&$PS|i!TE_RsP zAc}oTPu@?tKCF*43bFS%&!%a*V&hI|y7_W26+MYE>G7B3?Z$oUH^Y)Jn*J7IKyXG* zeQ9(dd<}LX&~UGP8R*PTKN2aLaS=%%2PpE9ih3!r*JWJ%lMr!_QfasFrH;lx0C{&G ztus!(qDPB;b7%u>tPNY#A`PtDx%=vwPJf71Jyk?Ema>D@hf1GWZMT+lCU*mn2YLs) zHMNOt@2nw$>Lakqxj)@CHT9g6+lRH7$8!+<+XKS^*wj}cbqy)@@Em?dtLU>my|l4P zS>ZxTzo*ux(8}KKoeNqKBk-+`(aS8HV7netL1w6v|pXHez_BJ*e9l8)sI@_pJS1 z8D+H7?`{6{5U-dC>&0pKnPiFtl&75l8(1Ex?^N=)z8_YMf&s>TyVH)vQ-11Yrxx0l zizUQp3jo>3=s>Q2N74n$NX5Vlk&ITZhbVhXxRe2gJW}W<_tznmE*EGXv|h!jxF(Kq z^w*m5SB6LVFuyAhc<)*t7YSDGV(=6GQvvk`O`I%tlKLjWDG9A zcpd63KSztq-0T1<%0L|m$3LwuSeZIhTyJX~X8jXY0ZFur4wDiKtEF<_vhPvPwN9Qq zy|sTYP}31xI0P|V`_aojjGtv+bkj4F!+s*r#-k3IYa3f%GkNhV<0^RhN#q=HS{hIG zj)A0@Z9F|Q1$KY4`P;ttUQb%Iejr$@D$Qwdq=0g`VOJsX#*peuyzrc7_mLiG_qzm@ zUa>fx7VBN`^ty}3;ft1n`Ps}WPsx#k`hP0g@J^!IWwp($+HK{!NpSN6A{+%_)AI(p zxV%fG%z>9sj|aKPtB~q8S0ndVa5(FL;*_NO5jn}NVtF2ctQ{A}ms4BCB59g{Wo0XX zA9272yR91D+rvIBytCYqMW}?H5Y9PbNGd(eblydoA;d5i2O!{NA8Mm>;msoQ?Jn*t z)$UUTB`k8d>5rypa=9|9rP9ZrM90HF6a?7Wr`^h6+(-(giRt)?>D>>8{COFRYH8Z2 z+A_leY?H@+PCdD;ORorMw~{RPHl|sXgNYf*AcK&9I(5f|^vm0*u5KZDXNw+Nmu#jw z5${8iW0gqA;qT!ZH^mDp+j17t;^|UMV+vdEe>~Sg;`1esh;(gc2L0EVE$%SG0B3@K z0&7)#A)>6}ab>z-!M7GCkHBeR!_?x)b~#rYWsB>Rm_F;-{ZYiT2BtB(^vO)??Q^ zIX;oB+D&bL8tozDA$aK9j~%K{0bYweBJ)kZWsLcyV+4}FeZvl-vHT|! zTixC1H|>u$293shuK@m4tukx+E}*w-U~er2xP{6;%+1$u9eWN9WKU;3?C*JM{{UsV zc}2ljQWyjLIP26JwW-k?O8V|cbh3DlPR+ax<>@8YDoHa8b>_D8+n@MI{vY`^7X}%u ziisGmajx^LjN1DB9b~Vq3_L`Ipy5mb>A;9Dq#u$E7 z--p)H9UEBDuF;Sz^2fEiE1)AD+|_S|d+npwG^@-hc}#%`>JCuj+avX*t*k_wgx9XNF92jE5wCRL=oie{T3v@;M)L;Iv0_;Pl|tp8&h8I<}iKg;=g# z3C|1|V3GKY{x!<@4^@N1dfnZP`SO*Jpz7ImkmIMQqR&)2O3o{x*7y>CxA=LiZZKtq zo(Bv%gPd12@Sa(%H4RTrl%2&q%r~fVq<&SQqg>x$($Umze z%BGXy{-tr^d3C#8SZQk`9Hd~ovXhhSGfCU1rDc1&T)CpR{3D(zz0*}WS?Bo&XGRWD*9gM3$5yx(|D4?>qYSW<;3>P74BL+sPUc%=N&Ve zZ;Ui8W5p9`Q(9OHd2HnKH%}^$LI)Y>MRnJHBGT-}C)6Pa`=PfV$W~O|IML%`s@F0} z&?tnApH668-4NiaJ2=Ft;(rZlz9UUHbhh!yV z$RymOJ5C57esx+u9NEbjkXhWSF!^_o2{`Tf8ihP}8;4}mE*Vsjkn6?^{0KQ5K_!65S0AmD)!9A~dQbmpz=dOoSCXm*xM93n^*Zu#@Lg~tY>K0A&% z6(38v`G7xscNxI-G^fY5fx@<*dAR=obOVlY{OQ_zmF(-Meo_7&i&pU8hF->PEA4VD zk`#_Plx|k+N&IS$g_BnB-kEg-+C0(;Ze^Jx5-9;#3=h(@Q^vY+&zl9@I2p^w$6R*z zr^n+x8T0;=B7vNi+=3*Ls|{IyKV4a7>DkjP1rwKPuGt zc{9Z(ts7d&Y$v$;N=G2U*!jhEFzb3;-~`kynK-Wk7x!~QYU>||1@a;zdiKJ$ldqwy8fctcN@L%7r;xboxkW>-ZFF|>j@{c7ds zgfxrINBcrpWm}#KI?BUg9S9zyHA?frQQls~d;O_;w^1lmljS@Pnd6#nNukQ5B)c5P zhj#dT;&tYn6s%WSKnecy<#GAfPb{{+7r2uUI2x7W#EMB^+sPbbrZJk%m%!ST8r(Xx z7sB><&g|Uq+quEW;{)kS;!B-o?n`Lq&@KX6%C{zXrVX3}kOyA$Xv>!@zeI_owJ51aRGKy_cpUJAC)$*sZx(KO_|mr-@#U* z;`4IcT*B`PFU_2u5Av=3R61#~TwmM~cRNQUTo40+fB^a)ezlqLBHmP=!$J)CZ78*I z-vq5_c=B0>t>Ne(VxZkF{CaKzhVQ8tb7}Xv&G?GNbUi_D^;7nnxrXRODniDJM;Xsk zn(RDFZ)>SZVJU^By0noei7}iL$Oqc6zA1(>=;a)uIgwi(`BPgSDAcFZuXIT5?hHwD zDy+aLJC}ezQ%Sqogr&@){Z2o{68`{bc*0xgh>;=k6edV9vgDkP#=CzMXeVBmO}w*| zL8;h~&`aAK76>Yi}5Q=zX}pN!5c`ydf@GE(2DEtoBJEZwwDA2w!Tplk^Sz2`cjsuSc;aEBV&!z zrcVWU?(0pvixziERSM+r?Um2wMRhtFH-|h!HlHG_HkX7OY;(AdG3{7i6*T!i*{ABz zk_w|lXPZM|=ONI+Hh9;R941DR=>C&nE zJDBPoAJo~vJDiQAbR{!Ge&{xxJ$e&GX=|-`Zs$_8VvQhj@`Nf_5Cd`U0IYw9Hw$;I zYcnEkR=1Dl=dmNd(z+jqvbD#CZXlXX>?L&PsN=nJ-wk9jT8x&KmOFbEOV~mjZIc^LPgCn%UY9@o zBz_ORdyF<+%7r}wjw_M)cPy=aslHDC0J3sD_f;>1xVEV^)fBv2s9Mje>9XmjRlG}| zv&%5bmgfUG>)yKgqPNp8{>`c1?@1IGjD!py!=+Z&^f+zwD`}^?4{;UWooyIU8JL{o z{Q6cuhAd$5cZs!Y+xBN@k&whs3J)0k>aMMF(@q@S5!y#4rKY}CR=u{sB_wa0eGhul zwASozB=Yx|C&w{O^0)s0Uc9L;uY4~$!>8(I{27ctW81rLJOX}|)7=JEzG#hW3K(u5F3~9CI9z{{RB?si4>G z?ygqS^4eG=+FgMglLP&#o>pSu*?)Z3`4O{2ZWw~#^C0&0t5)zuY`BSe?oU%vN9D+i z}{^+ zfIr5ao12+R%^#Hto&Y?*_*JOFBH>gj`wBMPJ{|R88Zt&hKIT0$+Ll=!7`)C~9aq+> z3-!2Z65cm*hif-L4J;Onqc;+nTR9zope@!!s`k2sM=|FIA3EUFcQUS>15Yfn%Nmcm z21uzdXBPIRLZI#74w<3`j^+`7cCzOTGmw6?To%{pL|HCzBw*kG;k`lRRBZmWW?1}~ zC1}sju;U{V^ zj>e<9kIc-A)OGi&>mXnlbUi9Xn2rx3yqqR7KF(Nb{{Rcy$(qWWzdTCd=8RL=4CGQ* z4B^VnQxg=RQh`bA<6r`fA&aBf3#c;pyoOqg2 z1U?R#N$4NVIsB58Yd;V!f7SS5Aq4PVH^=@wMk}pw)?q!;UaX&M6nC0L5XFCUl~QLR z#(L)%HM1?;HfR)wCkJXqgp-dzE6UO@h;m-q%REphf>9zzZZYgbaB?tDQ(n3DeXIe+k{!z@b>bz>nM=c&*1uG2ep9SZD;UE{=rWx3BkjYD*k-$CW0HL%^1 z-AMwOd1iG6j!7kG_GF@tMtx7MKkX~#i+?U>D~->$3Tb)=nGCnEX~NzS1co;uOGdd0 zPpw!j97F*TJKGr@%{^r!8&F{M&j&RSfyD1D^X~_U(`Xw#aA|klJlL3FkRFvRR~~!1h-QtWKl0IV8{8V2L^2haqiM&IvSn1lG$g;HF z1=YQ|+mOSLo2eWTQ+Ve~(tIbUX_l52=?r%h<%cJ6^{Pt7stG$Wd;})7@s6!&t=*f= zNGx(B%rX;j`GWgo0AShxXAvMrFgAl@ixw1v#Q(P+axAj zju>ZeAAziIiY11%X=py$C`8!LG&{HDBxb|Q0@+sHMG@m1E( zMAIxv;7rWHRO27#HPLv1q_ey5-0*$jGQwAGa-?!An)s$#=fpY%s)5Ue$sgWuG5S=e zd0fs7xu$fQkh0NqD=k{|A37C{P=m{GI0CY~bg>z;&@X< zw6|csecGYQ=YU5al~MSmB$CUeS;H>Xa@kycl5eR7oYCr9#2zNp>||*Y zMoTl3wj{s+uXeKUn&!|)8#YGb_YWFo@=VpH8ZNb znug)_J9wSqQoX>&bNSIN%B^KIqp~=gElW+Y@&2ScJ@JDP>Kqo(Vo(*-r9~So7P0ik!Y%OhOibEnew zM;9J+T(>zUR>~_I4(k}1e$ZkI|LvHpRNjD~!LcfL{KN9O#w?w4NU|Hdm$G7KU z!2{cx=)5s|7Poh*-8I8WHKQ~jd3!`_jQ%H%wSn-VW%~xHD=P(gcBV%p?CJW|zYE;A zhjdMT>s3K(G?z1ZaLVcnouDd?dYt|gJGWs}yOT)F&=`1=#xrX2xSky@He@&|1LL^Q z*1E3@7&Xma?^tQp;#gSP$C&o{Lja$zJ?oP2KBsG=_)}cFdv}ShE~N=?lFglf1@GL{ z+6C^rr}%32JqJOWIqq&GXcpmH*M~6P?8MCc0q`muo9bQqDIcYe?Hc!0nn&NK>f`t1XWw)pd69H;!x|8a2zs zZ+94m=}Fkgu6Gm02Rv6x;>Of&d`F{;T_#JI?dMs1;0_b!AmnuEgPQ5)@lS`WlqdGB zlH-7pxNpM(vgi1V;n)O>Z)A`t$=MTQ9Vpf8hk44@j>b=nEqp`bJzGwK$3{P4wwyH5 z%OZ{AKQ;z^Dr@a8#9!F=8U~+Z3faqu+U=wR5ud-cJD*N!)$hc8HqkAbJ9~*d`25Te z0afjhRnNrR1xX6o%npSM*U^&_c ztA2*HJTc+R{R6@?Y5U@RMpu?%+lf-{JD$9H)_i{w?WLDu>Fim7D53IOAB99dCMHh( zJyVi58HNYBNA?W-w>cpzHXg$86YwzI5iI$PPdm9=BREOw|p{cD);wcMKT#OAxZ zvX%x@B!Og7F@ONi)B4w^*?5yj)Dd3aQHSO@!?wepp{*h1NH;H(!MNPGIs9nnw&;gd z#kF1jl%If*Fp(FoM8HKlURQhH3gdMN3ynbc1fcW1t66y-~fF%28DJJPE9sNr)c*6 z5bz@#iOT9akinBYmXiTM{ObPzjclkPj*xjZONTKinQCU zM*jds((Qp3sW6h^#xSbAvEQX*d_&Z~wl%vS57_0}Hb~^#&@nv^&{nm)-ZIqhu3kMd z+RirIw(`o@F(KQ6dgZu3om=qV!|QDp@B2dL_Djp|cSy^%a!yJ5`_!vPb11mOSv`vS z&Y^4J4+z@m){G>(kwiii}uM_9Z4+esrv9!>_q%N(D7S(egAF8Fh~$>ikw(afIU z>PAhs)Z_dsXmwp;)tw=K%t}4V|9VgL&Ac?>RA3& zr7whZ=`>@dqt6|qN#;01g6G`&Q|!Dgr`TIhZ*23VR|--^-`I?CP0B2(&N9^CuLt(8 zkFDo$UI;IdRkQNpIuFE=U0uZX`u_lqqP1)^8cG?C4-GePeV20nHK7-Sv{)@gv~Wrx z^8}@Q#^wJ2z4fb+Xj*(rA}z29AtluGVtSMBLy}=qq-AS#Jg>w$lzQikp^I>Ix4()d zWjRuaa(`OsHC(i1>}CnBzD|@IP97 z(tl*rnsT+EasL4Dj`){c@fE%9t!5&(hD0$UOY)*A&m+{<{<+}ILtoV*xofzfir*eU zDY&W5cXi~{kMRo8m5de_4$IUr0;!)J>a*kQx>RU~t4K-5)|+$eHyZBED-v6LH$~Nx zRle5mF0bPljzR*2^uX=Z)|&VS!@}k6XSQpJ-M2iGNJ(SrYnqo|@iwCBEvHz+ar?9b z6-HYvPU87(Z?y}TW*Nbd;}lw5SpAJpwJRQwub^pB2+6U5SEBr*ABAPz`2PSzwR0W6 zopj^05%Kw&;@iWJY1ckjc9q!gV*H#M(`_c&+e(&LS8IW|H*-_Sw`@v;H z#+{4uxaim9&dK_x_J9uuXiEjBV+WcF8=_4?O{gCSU~`gxD_tA!r#MlN1Pl57^o*A^H_;W zoI(_H^fbODeAp`B;iMFaTcm4gFqmv0L&gwhvow57s_J(m{(9}rYF}L)J4|U6a>|$= zTvl&~qgeFUloDE5S&95317R z8C-EvY09?N5g;GJ7}3y+`;GT2Pl@%kiAX+DZa&p6u)#Fqr2NdmMOM($%+>V?UnRQp z?rC*@-(Firc>-1Z>GiQz_tbkAK=N(!P6Dk~(lYT&aoO7==}*;U*{9FW0T>lEqKGuu zNBaSf<(fp_-EX;BkDIO)9EhX+X>~Wm3m0}GnWO;s7n2{n(qliZCDHS>G)&|o?mvYE zCGVx!w!~Z7mj2{<{VP94LM&vRy2~MN!mMhq{(&#P2kT5x_I(mCIQ`an^)wUqeMqf8 zf2=fzkbwUHg%Y^B*VQ{fm_J%Hv9%ffd(>7=uBl{8T@KF zaW1Y`x&cO<#r0ds2*wUST1#`gQ@UfZr>T31+XIu-eQK@HFRjD@;afQT>7tj#Vl7zinK6-uUY}Z%TRZLI zJv(vqsPzy{%8d2f$Ky}czH3z;hx$_*=wH9u`Wpu6<&Wh?j=<^3f_CMx`O|J&8YI5a zWAvtI$8MV+J=p%Vi0H-8nEwE1-3)xYI{I>G)SSbuTBuFNX;A$D%_fXMySqJ!1NAiB zMgIWeeP#*I%)Dc#S~`RH$$UhfZi_D`<>vymGG(z$@ZL!G?O9s(PLV0?#z(DbjQy2I z-6ApHJ*jjP_)$Z{(igS545doVgP#0TVvX&*KyV8!#CiV!ca#1Uo*gCaZwnqx!RPR# zNZK8BRpj5fNgRFAP3}2-Ogu@J(ByO{f%kn)YFz^QV8;YR59wJxAuPIE73Fct^rzeVbgD;(DJL70K z589bv7;Bn_;#h=SAH>i$wUHl*!8TDc78vZ?2a-GK2cm_iMLYhImfd4i_SoiIjck z5<9sh@Ybml484@+k=adYc$Z5$wvs2aU@p;j!t2!gR66@ZaSgmOkgUuO4K3@-qO4NI zx=UaN^v_SFD|H90pHoLmx;l=M67D^d`FkZs^~YN0{67<0T51-OHsnbgVa0Fmk5aKR zM#eueago#-#_-u@mr#mNn`>hyy$h(L@W`v8pDONj2jyk_`K7jFZLDo!^1E<<3PECQ zwe^-JEV2w0^rm6W*u4 zfv&9KWFR;rngpN1$#0NLZh++cpURU*e>TS8FaQQ1en0-IWsCi$$@d(zWT`ppQRs4H z-l#u^;%IvlFNLAnTJ4s0*?_5qJa$+i&*hEYWJ5XW$;~aBymt2t#|O-1#Wz(e z1Qzc30b~uwS~`~7=D9zK?M=&-`c%@lIVz!_$cCNqrS=9+e9&ZNDocj#wonnkUqiEDLh zyE2s$7Uf3nyn9j~2*)6k$eaTkF;*$*k4oCr<3!WNvcee{1LcM@DisT2t$HVm7*w1V9bT?Z#+2ef_qjb7LLs?HWgb?B}T`kUt9E(3GY9 z_SF~w?Z?)icp3F0B1SL*XVr-~{lDAT7lbI!T*cJK$4`0%z zk4M)hxVK5QdE;O8g@HVba5(qPYwNblJ(Mn~x5`bsH(+u90M@IB&SC-L!-#_59-Zl2 z&)U9J`kd7E`mNTkntisTF<6erV0{M%+uo(Rw$v>pia0OlmNr!r%4IvFW^8af^sQ|k zCb!qFq%n=H86~sMTOZ+2*xQ({?^woLHzHhLgHEQ+9KVR<^GZx$yXm#f`WHLt~|Bsq$^33^s;{FJDk8 zU6AWZM^2|Frf6eQnrD{kWLW-Sp|S|izr92>c@tZ>v5t3W(1DVEU_1SLS4E&iVv_qR zFmRxb`8la$wvQkLKJmGtlJ!0F7IT*4s|D4}b!w1J|WbGqIbmKW3j+ z&U(+p`qiY34duAML?js@!Z^oMj)(NE$gaFU;&{T!>SQ1tvV4*+(Ek91XK8lPL3;5r zlPu)9Zr;MOwGA3K)vh2>u~qUgx$HRu+KVfLrAktE(VZmz3DYFN^R5*~Dhp>B_o@^8 zIMeQ#T3gwqDsnfXpYna{E@*W<0@gVjRg|k8fNst+(EHVo?SB#4z$cnk@^QIc;#?8$ z^`g?~#q4Tsrfyq!J#C?yIJHZW=O9@d11F8S&(n&h2g7YL6~WXm$Ri99!fszeM>wjj z;%#*{acV;l0rH6r$F(5wCx|DJqJgdQnBGKLBk-e^eZ}l6uBhl?@Sc-yp(0t;e~2v1 zH~Qz+uUlyPUYZMA*xSTO$#R1~nXWErwfR&1D^ZdVc=<4$PCI+lQs~Vso7`%5^UDgU zU|K>49nBoCs}HNo?MUsfd`YC~=sf*G9P|pUxaZRXu&;b~5-WX*#%ZuKx&BqG-8;k9 z*B1VMz^SyfV1E|_l4{P4VQYCj$s}MRC}08S@%(A1#cnl5j8ku06lC!?i1j851Y+1Q z;3|CItx>qrFQl`U>sZt-7A45s(jL7B9sdCO_10=iEhe@5GV)vkN$dVVrg(-4FElre zQ|4?j8R$FH=1XK!s}*GhWX$NiGp5_xLvj$iGLJ1-@a#r;_31{Hr>*tf+;hTUNaO{v z)Qn?q(1n3=o2x+)dqb-@QY7^TeY%>A^vWX!wB663_nWgJQ^ zZ6J@J#yKYyCbtAOo*24FB1L8c3s!n>*tN!-HqaY~qs(^cQ zMfNF4`$)sFEv=kOYi49n&lk?TciE5YS=u#-p7wbhsfaTXfyp3`>stDg{hv*hlQ~o% zW3a_HNkv$FeHol;HBN82lc-z$v&AcJiafX=8_%vzf1W9Is|#CQF=K`` zMs~)1d!NR%Y?3C{^%n|5Uq2`YNK|TYk3?qA;X5z0W+@q8 z<&!J{A2-*vX4>d6UCSda%c3KM8#|H4eXFm(D-M%30XrZlyz|qJYNnfJu-l;o5LC8D za!>eC%xo%boj7@tZR#HUM*d(wap^t>8;#JZ#|<1U8|A?+~?Qvt1)XnBDRej zu$4i^B#0b=+>ut{@!Km1uIwA0uL0aXxT4ZtWA;^}*_l2&y|&hDbodfE1;l%&+qabC zq4%j;`X3ZoSzI&>Z?xYoS4fH5<%S!ZC#cBn?_D*oi1a-``4UcwTz$)gDWA`ZSo|lZ zMR3=8bh6udv6$UqlQFuUxg8BpHIgm6^}{Nr*g}T)!)r#G!`a@{R~U&a8Nv zaSp%Xi=|SZ7#}7FdJur zTjPrnr7 zXLCwvN-xalJUOMwtj{K?smf)!U){uq?#40C<5?dMuV9Bz@d+ULk{-j|g>}9fglYa7 zib)ACAZcBjxj+4C;{F%LKejbFrT+j`q6J|)#|?lo(Cwl~U~K3tGC^Xw{3UMW0rtP40uO)}CWAaVRe{{Z@` z{{VwED_At^*r3b2E%TGrk01}j0-L&x`i@PgH`L^AKecWATQ-m3>)B^tGixJqsn0!o z3hUcZwbISCjrGFZ-Tl)PKpA%)zb~gXPeX=Z3;1sLU)6SfwoU4Zo|z|T{7*Fpfb^rO zYqIP5i2ndgSct*?6QA%DH=#~S*XWI#aShorZ=Txe)W$dFCt>Obdc9+Hs_CO?m+fnf zpxp3R@f~Z0xVB%3J}b7k-*ahUW+X_Q6lg2 zhoQ|Ik;}}rJF(&?^RXq2i?nWbUzic??^YnzblbTYCCyb_#J8yJ5HoU6R8JjXBfxR*0G_u)NS3&&Sr3TAbf2j)7q|0sa>E~5hRg; z^P=@1N-R$!Mbx)MJEf7NZri(4=V`pJ+>9~lo+~%|b~XWi%`|d?0Su=CogSd^ZZ}TO zSmhKZG3}Zx!Nyy%>a>pQ83f@&ZzuGp%FP@O?ei2HvC}nJ>QJ%;XyhCE?oNRBKGcdf zvMi6iBRi8F3GJWGfmxHqF`6ZPthoT-^&Zt)`TV$v$;)sm+^wFSeQPUFV$OXv3aq6o&$rG#UkdV2??$Xr!eTs-JOKaHSN2oGCN`PNbrwLefz| zpai5QjM5skh9xwbQfakm08&v!T0#IR;7|oUMQs#IVyLMVX%%W!6|_+ef~`me3Mxev zv{9R2qNPztqNM`1j7V$%#UmV2lZuI&qP0~8WF)R5HAYP-G}`i~Cf(VpRuYzqDhd*c zD4+t0D5fx?ib86VxD8`S1uiKll#LaV)TGk9PiqN`HLjuiwmsHBI6naFKoh@@ z0m!Ma@y=-%(>ifHWD&NzA2XarLkpLk;0h_d${4V zgPQ#dW6ZZw>V`a(+E2YzlHTfj_dD7+5eCu^-f!@#S98mMbP1MAOBhZYf*w`}wm*c5 zTaOXLY$F!>ef88w19TB&D9$<@9w`r1v8%c;<}`7=c`2NcP_3+MJd%@u;~PN0{C#US zH85&-8l?Vi`J)OURmf01$9^f1Yu7jK>2Ib@5+i)iKgt<@*`X)Ue6OLU1ED2tk=ivp zvFLu8>r;l1unT~_^VYJbxz$e757{AveeJ-p$G1V6sWcNfX|DBqg^BswxndnZKh~?1 zu0wH}3pHas&|T*v&0sO?DuZiwK66JImf}SJ0G@G@KR%Vt-0D6av&-FI+mbj}k<5*e z)MuK4{{Y3XSXsq9R(Dqx@?eR`*oP+>$*0Ovq}kA1YdVpDymnFBp$BQ6Kv@3(z(@Gf zx?bD>)7`qE8QT!@#yw4PdLFs1c+%?b3j~Krwzp7TX%o$n$tQ&efzz#HYwfCOx|W*; zqkAphpL-+N$|M^%zJB&Iz`?3fMaG)HE8OYz8=VhAx1R3bW!2yWHo|9HZ%i;e3#SiRcU$k24R_o=woVqp->BT?dy^yun z^j%Wi?Um$1g&*BN;Z(P=QL}ueWK#Hv{BdKZ_>WOOL7&QKBK_JGAoL@W4@%$hskiWs ztDr8GYYM#AXKJ=WfJV|dsk~w?^&MBkx|O78VM*axi7Sv?w-RmFX$NEjij5lp{^M_7&$MqDOyCyBUqi@H- zbo*T|TV2d-<%~Lm)Mqt~@hWJpue908EB=nsE<1yQqxG(jS+YJV@Ex>KIf_}LiNl<5 zz;oBPTH^IxM&9#EwbKd<&2|uxELM3SMyt0axyP@5Xo~8^PjuPndX2aCj-#P`#0y}T zZHC5pz#obJwZZt7{@(up;wFtWmr*smT8hBITN_MgCnwyu>0OL|9@TZB1L{{_+0d=J zLe}u%lub_wg6l+q?Mj309+#MhB(-Y4+v zFlo0p!qVu^B+&!19D1Ia>BVPilTG4}A8GK#pxdad0!f;9G260tn_@SZ)2qC^JjF)(VuUvODB`(1T&!kNM02$qCw>PHF*TWZA zLN-#DL}gU(&OqK)Z2-EGQT-`Jy7LD?=7Re-! zLC@t^F119{`~_unAqn=IWC0hBWas+kx;S-h15uS(F6^b40#va9hq%v5X0f1H>o%zb z#zl%m&dd<0wA3QAwdZx<-}ac<&-;B{#P& zv9>;P@#R4GJpPrnYvEz1B#`O%j}@_vRydtE?Q#5hJ$=V|r>XcV<5lw5>T(HMSmmBs z5FN!-kCl3IPJaq_P2HL|2~O?k%)f<+HJnbc*M7%ctcRN@buPKw>HpB*FJhYDZFFo zZ~>{Uz8vUC?LGOQP?4nbOWeK&;xI@9fn4+WlgHYcv)k$EXKlY=D-b6Kzs!G8QQ7!o zS@AWe+cgbt*=*miFf9r#8}gbF`VpH*Emt`TjMvs_E9=9gfpd z)9vD0WRyoZP%>g}!22K0mn?dTQlh>mc0&imeNR!nHkx;b-*{c*zE0FV3FrYmxvH|? z`14bOORH&8IDjZ3hy`%{^Vgxs{cEbfg6`J(&{!Cwx0HpQ%H)C02>xGnO)xRUB)A)!$%6W-g&61|?I5DCrzVVsZ3qq(v~(C;m- zboe~GP-IBsI0aDTW7D2#^N-uUn-w&_1L+pG6D`D&%HlH7q?~zbI47qk{Aw==*x2h< zH?dsWMdrbnH;@V1M+2pA+r6f%G#bB=wb>dV{$_Bv_VuidF8aiHgHis>vk4unN@v4h zu?HPH@t$gVnI770HFAs*No%LiZFgmDdv&L{D=AU(^YZbIa4PqR{{Z4osA-eOVQnhj zwk0zraM&F&)351H@g2>Lg!a&a%3E7HuW$Mrjc|*pQNTk=s3} z=3(s{X_n>DAv*YwTST#2+c7|(0?c>-)^?L_z9i8#D{IR;M0GhnPET0M#2U;=AFw`WTc;S3U36>9mJNz#J1{SNnR0*ol1W4VmaL#1U1zEo&B= zX{dlv-Z>6-IXUCd^yx=4DPm`5&8diJVxJRaKmMrE*kb2Rs5g<244YW2Wedr&-(DqZ{Y@I4;Gogyf&Y zjwos^l|NxO%HwC`bru@dovOl;+FnNCfIACehDLBfsb|ux?!IXtUX6mBV?9q5!0LV% zx6w4&?mYan?nsn^HZkOF=i8+=KM!kfc#&J`Qbo2UcLqXA@xjODYI!>{KCKUm6FQXe zZj}}Bx`*u%$&h%I@<&5i()>8lr_@^hNv_QAFrCK!8OKA?vYzY2R*bSodoh9_sXMf) z!59!2;|D)adX_H`_=gjDlOiZ)2=XF;ao7SfYPn>(kJwdPNgV=sTN9E_cN8VF)KD zC#f0tqVrVn&xLKXZno-I8`E`0#)_||)9ej&Tx zKC7zEvNAD_9Q=fiy$?ZK+V!;emKL&bv%-R04hBHZD^cC=ARxq1(mmgMzZu0fE?t3D zjWoGY#_7Hl{@M+*Q=2J|FcMDO`ev&>gj!kB((tr4?Y2j3?~E3MK1v(@!7k%PP- zIDFvpe-5<^*!_k{{{VEZx`fIbFO8~lf1N&eb61L*o9uJ<{v5p1Aq_qFR*}L+!#QGo zdG@J~h4n~o;)q@{Jji}^$pfcTo&|4snkg@=Q_7DC19^T)J=OQmY^?|VD>ouc8AId=^Db*mBD>Jr^~AKEuD$P{G^_&d4no@-OX){<$) z_%KX6WkMYDOuDjf_(-6<%AOMu=LGO+x$9xN?a8LLGK%W9K5@O&ZZg56hcb{!7{TlH zq=wJL%oQZQxdb1Z=RTS1TYe(6lKvPah=Jr}w&B;F)vD9&Qb5WW0MDl#X*ub!4!^pc zmZvLgrs~(rFOjKCOkdMjOlI`S2B~^I@4#%&xTaUsv zsQ{K)zf`?>al@9y{X^Z=r&Qs3Za?)R9|0nP-z!7kV$oGXpCAE zC6B#VhfQfN68`{EC73tJr1bQlw`--*7W_jmm!t&mE2?qtOo`V{w|4`iNAarOCT4Zh zQF$L}Qfb=TDrwSWoOI*fn%E=oq(z`X_I)*p7-=MCKZ&EmfQyYsa3d1cizBwiKdGoR z021?4Ufb0F06G|+%w>>}>z9T?dk{SZH^fX0y}BOrDg9|}@}48PjkA_Oa%sLJ$Jy<{ zIQ{53#T`mt8a2E|!8D7EgN=l7*wh+8^0b&2>VI0buN~Sw*ej4?HA6)p=yrQfKvFaK z(&%UQK4R!UHnpm^WmO6@?@?YxF7+5C8`MQ`BRSv`)}+udy56s}ounrRwnpy z*5m&Gs9rPsus=#3#LGyeW_Wj--ATt{qwwaSo<+Iw01J>JnN_*qkPS=W%q{k&RPe

1sw=$-HIq^zb&lo-_0ZRq_;k9sdU&lNXWtU;*A`EX*d0KKgd#85&flp zdB)C%>p@c9OlGjzuq1TcwJxRd>A^cH41PkY>ch;i0~o`psr6I7*a6szED3xeW%Al5 zuF+L=;(Y7F-^{BJoLfXY>=jo}`Cjn%^J$d2iKY+qi__2F{-&Q~GkJ7L=t(*H(=^eC zzC8W$*YT-sMn2Tzo}=}kZ>tw>ZQwmOT!M4;{{ZV%y+CE)0ORM)Lv#D6V(p2O-@RDW zhS@F0KX{%gJjNYAEr^{{Td=80$IyR93Lq>8J3bZwDMrdZW6= zYoM|H)rIpD{{Sr;`ByvPL$?0x4xUth%-2Ti2<>RGyb;arTha0P zRVas3NoAPNkxNPGHXeI25{vRai@-hB7n2s?`vqSx>c+5jE z!h#1%mq!IOs59JdsI+na03UJ_lG2gZhBv!pTH$|{0m?7{u03m0SUy&jGZqRI4Exqi z@9(vprHS5<*_`Zw@xTgkS)LzL_BW9AX$@M| zB?+b6zH#z#Owtp{(;-rM#^QdobRj!aex)8|@if@vM;KaNVY2q|fz|kyPhB zRDA^{-euP9Q$H#xV@Hvq_|oi)8k2~0*-8HHDhmbjw0Ob(=_m1{Tz~W-A9rv7t1}>j zOe3IF{*)qig7ak^1pfMIe-GA>PVeGynaU~7KMGw4V$8|cbJSXR^E^X5otHf+noHx8 z@-Fz95@@YKKQhQMS{k+LSy@2yMqV~xjqO<)%Ov`?odG{EkP z5BoJHcG3vD903QL3+)WQbaecxmVl?vzLAD9;8pjDOk2^p*^oi@syYKnCZ9C&Awu#o z8T1|KB|maSOLdX8`9@1d0Y6HusRn&U+;SEc1pD(>bZ}bY;zDvy8LAgCnS4Z~G1{sL z9f_(&-}3RU$g!;*;v?K=ioXf}06;){C-kh{S;v_Y@s`gOqcaPAE!>=Ki~3UNXD{Kz zq2cz~70Pu6Lr&95!KqzB1`B-EABQ6%z{=+=>`g9`47#P%t=gGyc@k>HVTJ@zg7c5( zPw@}QXA_R9;-S@;NvYUDoc#N-=~H-#f@!OfoVEa@O8X|812j>bj)2x?gC^-U9OFK2 z0PC95uo$#V{{V1*D#q~NGwKbyaPxo0fploGr5CrB_F0snJSaa}gH;S*w-OMHCk`>r zYE4!5>Xxtv+mZ=U-|J2BAkDp|4$`uYeR-yawRi4b*4QiyhQyD6rxg1lQYQtAx2g3t zV)8VW5hQ?aLA`U%4l64_k?u74B$KPi!|?4(p+97PiIa7HNzXXVM|$B=nlN(Hs$@~6 z;tR{z5ND0V`{s>i?W{$NQKn7AzYiL6ZnABi<;=N>9nCI>P1hXVdc7%_k0Sh z0sh*&V!+^br_|P88$xSHCerdyF-Kem{J*VS)uMZi2-+zCtSAn85(hO)RU35er}(5% z_~x$aflixqk^cZJh#b%+^hCDn<#}olV`dII50roP>YkAcL#pb`ZbKf+(lC_M5xVTyGWrd*1#OhVIccs?0u8%R1 zh&w=DdYp<`Ft^e~zrw2R`ihHHmn5f}*b^k#km7Z7xWcx`1f0D-1Fq z`>NYV;Y+Lm{h4%6WF%wOqqpV|PgC<8`_a(NKi$7l9V{`_wK)pobczSl6wP4nSYict znUIi9JJRS|g!-XoBzfZ*`c!&|Giw$I2LZPl7Utjc5$L}|LsVci%bbFKLOAYewi}|g zi4RhMlTqtzf3sXE`L_T`;HO{JxKc3+`3s!7uBPkn?8 zdY&ps0gBxejzSORRkczK5hpk@rtBPdtCF|?p2IXFC;T+KvbCEQyuSH=iBuoLl2j6E zXskX&1A|78#iO{H@%zb%A3?=J8O6-Z$1d`azQUT^*J`iH7d1J)&!=2U4ho^#ed;|r z4<^DW^Nb+QJCoL`Yb8?N-q$R~d6hAq+2*vkM8N1NbTZnXsU3Uon)y2#paRRHVl z`qjNA+w6K(v=5EwpE<{RPnUZUDbjJ~aMZ&-Ch;z%bk_QO7LbrIayQ_g@T{41tz+#` z$F6Hr1-Npf_q$0X;05i?Z}@#AOPx;Xw@C6yvOb-doK}{pqb9hP+wdL+GDo;{Y;m8* z`BhyeSG0{eS}7xv)jTby_;TCra+&TScEr8Pp1Z4h)51DZ+oZdsE@KP;ZU`%p@7Ax2 zn@w8A?@N{=B$1$s5zDW z8CpdVSjQky41dN{_deuvOue^8)n~G?MR6GcU9xiI{J?tPS3zw6i%ip zt|57C=Qw6)TL1%FGav2!U>p{+fr>}y$2_;aZC=PNtqgIl=^PY|N3J;hDJe9H_Vpte zuB_ti^?wy<6YYv*)UDTp9KU#d2jjw?>y!YgDD zC}(*Yo=50FKg*s4WM1hOnx*X4tqQtC0Af2IOwprb{nXoSS+1ptv^_@ArJBO<>JYkZ z5XjhIr?76HrE&JR=RwnTy*$MBS62)b9_QsC0mvBZ-vn`5ve;`L7>TFRwHNZ#^KC!O zhuCMOXhY+zI{p>0@m`Q^3w_s;J@GO6<07k2<(gW1$k6cg7MgE|r1B+*$vSzi`54+p z20evid_RCmsNIxOEux8r3C>uz2lOVd%ixVN;?ir658rtr<}$bqzBUK99V&&n)w~m- z-bUIi*AFTAXNkk9IL1io2c=GpI~iR`G`D2Bm7{puSN_cNS}iWiGDy*}%#Fq~?deP5 zTl4+5u3PDmi6e?Q)cJ&f8A~Y@cfiIAJr3^jO|dlR%pPN7BWcH9QVnN(EQy7lyL~tw zYuxH{;YgC}P}Xjykdg|f z?@yVIDsQ7gZqSrjXH|*xKNe|vs!q+N>Jl_ELywXMAYq55NamTR+Cg#g4^%*r3tNba zI&gAFQav-pZ)g+2;*Aqkg7H##;JS2(l;`CcR{G|-PlquJzY*PD$jv0M!o;yW?k5@i zg+6TpGPECbKgK#0r-#LhSxV8%c+w*%Bp1NoaqCjp_+R@r(kX8>ma%zPh#kgH;(OOf zZ7jT9dvAO(ELv2o;jn&Z+t7UtavDjG;zx@N_pp?*vtQiCI{dA{&$*#XK#fMAm)>2D zJKZl+dprGJ;sG$-Z6uOo%+G8ePwPpeY8t!~Uq!6ytz_`VWQIpY9$+VoamdG|X?#Gl zy4NmrpX`zuY~?F-Mm|O0&6%_TvmJ^6D=o|qPo&1h1B4U{Rr#SS6i)U5^DAud)ePDmBorA zkxQ@~oOCDC6~W%zj}v%q@^-fJuA#Zw`*F!oPDi#0>q<6#1x?ebx;p#qV%JYdXY$@* zax%VOBq$mDYc78r*xSh*e_*|4kbt<4xgZbcS{i1F7l=F$X%)nu=^thSDKX4XjxqeJ z3&RpVt$ireqFC>=w00_|8;WFS{Q3$LLXRb#`Wmr#l_t0_+`ZkCI-Rk}77HBX0Q%L* zu46_XWWi5Cyx^bCvh)e2@&1=~_W>;7l*@f4!{QE?6tldRcQ%dX z7D3Uw_3K`4YnLp2H3vRhJDNtShfh;W?bew9-NFg!mlYiPt&O)5-9!oG4cX7-T$h8q zJ7=%kYGYE7%GgQegAxVK3FoJ=%`Um3{{X@dsp;}sOfD?0Sma3l>|ua9@(k-=iHx%JUD8+e^kwb+P+~SutRsf_lw1$fa zX{605rqv_@8cJGBR*3*ofj|`X6{Jv`6bg|=BCSfRTSXAqswzbkfoec2c%wGKMM$EB z6(X%`6hmUF(~km|ps3xds!dZwZZ(>tCX||CuPUV6o~Ee<6j4}|B^0!j3@DIi1=ywc3Og}L(p{XeZ^cr(MN#-j4-{{T^!%C>cYBr%|E+d~nOIt-30=`y^R3ys11 zX||o(W>cGny$-@HPfxfwhW^?^jNv6yNi$nrLnJLMY?3b4`G-SXSBtze4uxlFEtT5e zB(q5iM({=mAq!_JI*fDpQ}wS7X_nVIGea?nH7*r)C=PHi1_vE$r~Oo-nv^QF@*1mk z>UFwizPfgv_Sekwy@&ytB-~klgn&J&lwT4whgl-iw2f9`H!(=9Pc78`wUevq$?(VQ zmzD$VhfseaUq3knayH|j#~k}r?-$-(czNs~(PVpjy;e^)LyhD)+Mp;r0oJ~rG0`Wf zf>3)c&AlVVO{)usx6`kDi+GHZxn%iU8QF~IHO?Q3*K*4gcAgu#W|{UP8A)<;kGcmH zudi55;YjqG?IJdiJ>XqL9!&f2yW89!=U7|e(tajuS2of`7@tk^(85HcaU!m6qP0~FoZy_C zfIhX<=sFgjY~j8)GTvNI32AO6lXl`qKEtJO{{RoxD^C+^5ZrB#?J+PwPu~H^!2AfJ zBZE%uEsY5Di~GF}<50HMpHsX@cL>bCENzUO1;;#htoPGl_>Z6_tp(wN>raiANP*m} zRAiiIf@`7hC8XLOp{(2ArMxXXiuUm!0JK9Zn&)A-xAQOvxa5Y&sTiY)~y@>of z3U_@0PEEBP`Wk)((==}qXm=K~TP)C9%#s9g(aH{gJk<*gu=pQZ(e58}>9;eaVa`v= z+mj!M@~!U;X;$6`)*#bI%DS{ZU_HFi`~&DKocM_s*gQ!b7VOc%sY?u#s*k?J>?c1? zDJOOjmpw+VYj`@v@2>Tmo6ym{#7KyWcI`%7*$jB zdsl#G$kYgwamsBazd&m*;?2F&+h})o(fO9*R!49%w|3H}@)Rd_6y8+n zucIa_d2W$qje0)P0Lb+ljz1c!@mq4CP&ap=+=B{wn~w2iRhOhBr5o^dx-2R{)-QCmhpV*-&puNZj$RnI^lT z=~rs&Y$BB|46eWk!BBE}9S#k0-X_-Vd`EE&o|k1Nv#G*CN3&uf0Ox+@J?pQV!1e=A ziTqEiHQk-GDxOP7V7FCXfQ;n+HIZ}iFGkZLT{FU3B$|sT*q>#Hq$qy@lm2<3ZJ{u4 z?5mnuZ-ezcOGmZ0@ddSC&R# z1BUr{BilcPX~TbVo;UJ7%!vifxH2(6HbG(yOX3^HwY7z9-^lx0`AkuA&O3pQ{`6hk zPNbVM{77y5F%^x`w2Ja;sYC%^KQ4Lsdv(QG)Vv#|+1|~5%&0K7Ew^6OV#+DI4Wl2 zJugY!C64Q9+xMxSS8(g^&MJAPi%y0&o!(m(L{%W?W=1}5QAxIB>dDxBmE4z_Wwqo_ z8Hto`2oK)x*VCCi2W-PM}LQr1@UqR&i`$f}V; z29e@u<3(8EzlQ)ZZd@@ubBvxlP(yp7&Z83jiZqu`NiFXt5zM5F5JBYrC-tS&;k-YK{C}L(OM%ad45`lO?$haFX`H?aywNv1v4ymhJY4T_le% zw&u?44zvTkkq(u1lGy1{N;bTZ`I#-o(bB7ZmgZf4_`IkgmKepeX9sv zxwn>II&D7bghUOjfD?{K<5S$~x^(hKBv8(7EUpz~O{e#H^`gL)n=JT)OuN()&S)QP z&79&wF_2fdt9MZ)-k|bE+W@q6bt{lT$NvCcsd%sLo>WH0;z(KBYn2%UA5mB3Pbj_E zWAnlyW7GrdibV89JuF*V*Ml}3*D(OOj{q+qe>!J{ zVi7@qZzbzp6=C<29CPc|s_7!}H3`=C&zbJTt+|y@&`R>nr+p!l1pp$l{YUc?~ISQr;p1N{TYR|uBVAi z@+6zFw-^L_RbLOqB=!A0|1*YL>Zs9;VRg(ZbU&ngbQ-$8%cR?eghbd}bn^b9|AmG7sQB zlmbuP?nw8#Zi2Sx%&1%}NTcRv$3azeD|K|##IUk0#F*SqE|l#))o#%)?;}=rZR!|w z7{xNm^5WxIy|sj|*`S1NA$m4?P%CKC2h{|3&7tXbaW%X#k3LXNRFlut^`zIKw70O+ z|>9>nxmr5@2u(%HKd@QG9r|MQ3Hnfw$6B+IrNLDu)V0)g!rAe(>USC}3n-ODc zX%a_LM^TL9^{C*2`I}V!&~hM@WdJw}$i+$G2)@}Ri$^Dx&`tf^?j0(%x-B=%i(0fZ z-|5$OutDXlOvIKW=jS|ry=psiBK@XSgluFn?h<5{2OYQ^Vy9rutKBI=(8&NysNiEf zn#>jxx*5NP z6m&S^ihV+UrJN3(PAa0?$olofx0B@UQwn3C2a2D=tYx;;3X_F$7jWrGZE|%B?=_+* z@VH$1ihWCe6J(wvnnS1kk`PFgfc}^@ZZRFaD1dHZZmEEKaa6VI#I=bbB#$)VN{r*4 z^`$&alfV{Dsv{X6-s7b%gnfi(=+Git+_2!1L0r@g5V-MVGvI`V5ypGftu#nsype}K zVZb95S4xy>O?9|3%Mk$QwLZ5m?Mg)cATHKID8~nb^s8*K!vH&eU$Th#HB(zYOfdjU z7a?=jtzJpwAX1q{kLGOjq(|6|iaI=tZKMu2GRWD%qS8Iu-No6AsWAXE-mdBP@xfrq zoTF}G$6VDd9%FTNcPn*{J)mba%DQ~b2C;(n$VUv|WAN)*H$fR10>l=NV8v!?S(fJ2 zoa|(iZar$&uEA%7DZ`e?`cc>|brds9Qkruh;Gtokr8diK_iZ2_G;7OMxKyN4rZLsC z^{RRZ!rg*$M|uIf-Hg;X&wFhYV=){SZ%R#e;i85Z$K8>DKT2kv?6*?Ha?zLE81~|# z@d+XA_{s`nj_Dfeiw(BV;oHEfIuOKHhdIL$S8jnSfFF}!&O6l&4S~14z{k#M622D0 zOmldbF2^jnIrpmijIqsoWO*lcD9~itaeENX4tmoyaw532U@)rS(=Y84_=VXfwF}T6 znzZC%R22KHfabHjMx~%x2LJ(@v1uTiPK}FaYV9VGKV=oXI#hkQXP@WRtLYnK)UKi@ zgOWYXKSBN7_2f)`@W3DE>rh6oZQ=l18%)4s*CQ0m>dSMik!sKvV2C75sg9zi@lIGl zZmJB9aJd<%{7W3GcV{F=Zq@~kI*irN6x_Y2w3-;h&e8>sBQz48shXw;{Dn6UwN@}2 z2OTPgi>QrC9YET|BZ4<63I6s6TCsblM}GpFx!ECA-6AVvchuEA2L9URZDD|yhh-EXSpmfa=j~0QH(X6!j;^19xFG*sNdO% zBDUWuWn;!`V4pbw{`!A0M?rm*%XtTo_&o0ZCVSKHvS{Fk&Xo5DE?HwCQRw0oE4B`jM8|KN~Mj| zd^A%4$Jo`~Vl#E6Pvw!4o7XvdKSF5KTqeJ2Rd$0ahUclrU)Gyoe$V0?*unWE>FwT^!~`Q* zT<04l8RDN(-|;<1YfHOMBe-FM?^-JUZHi}*Vjs$?>dCuLp9BJ{xD!jKNxM#iC!%fq zsdOiJqP~oOadNrN*?*`109uv<G;*nNCuVydJLb_HD6gx){XxDe?wO%Up_b=p$qHn zNtyIa<$P@5+gOkKYI^-Brg+h_Z(;{iD<9BNTSr87L*YfA3iGMnj2sA~AFXt{iSqP& zjQ3&u#dBT|$<;Lx=%_2A)=B=$bsgP*n5>_~Wl?_lAz&U(kgR(|Nvb+J;@VgK^p$^6 zK2DD)9isykS599qOhehS->oi&clR6a$Pq-E)UDTSbq=7T`$o<->%VaoYQPr0xRV`# z{b~!aB=H0T`;l%m*7h%Imh6aiw#|+`Tve;mBheUtuov{IdcPtF{{X!r)s11c>8zvs z$|x1IiWg7$Y$Ep=qe=O$?I>_hoeG)#+09gi&`=7G0$CKo@v*DWI- z!SfUO)Y{yb)7?Skjt9L#XngHnX?pEbid{*Bl3PWey&yQCT~aiLEwshK#>jK}RZSFZ z)0NIik&7CWQj^Qmr5WnGMHawY>G5vhDrElvIz)YzSF%Aqvvo5Jg#kqx&L`D0yKUd{ z+st9~=}*x&t)?VsoQ`LUc z;t<^JfpPfM`b>Xj(jec*$+-UjI*&=rrs8rjz4$a1-@PUp`}vlMZl{@LRRXSFNG!C; zU4P}AcpqA!a1GAAX$a&(42S&wRVKM1Hi>RJ%;9m~f^DQ?8bn@3mV|@7&i2o}MQRM% zrOf2yDcTKRl#6>pdTmZWDyO6&TN5h}nno=^@9{{lsGmPlw1YeYxYey@O}cc7I4$yu zhS5dNvozns7}_bCvw8Z3t)iYYy{IbM#yyFwEook+JIEF`&0CCocLKmxImm6ftC!M9Ce6PvS|o>4GIZ$l!5H zrzp78E-r}R5&^23kvF>R7Qp2q8;{nRcK4$m$ket$Yo@5q0;X!ehsOA&pR>0V{bF^3 z!^_Xi{{SkAmeECymbv3b0JNu2ktfY)CyhXTjAs?+j#4-jJ&~6!b=}piO%l3=L z{{WVc$I_#?Z?^c3IL9df$)m`-d&zc2?(ehM$syn*Wd4%W_8&$XHS0d%q`2 z@=)QXV3_qC>g}41H$z;VyCTW@;+I1|u-|hjWL-nWeqbLZuq)T8sr*Cx>y17k!1F;q z^#_NdFC4dQKh}~(I(KWo65Gb7gt*TrBrp~|-@*1h3jk-iCqZuUr zbsval3u2b)etBDMT#O4%Ja!0~qoE&X)TyMA{iA%NlaL9d)~1dN`xPm^R%|b@r+9Ts z#Wlln(mCl+Oij;?)4CC}D4J zoV2ae+O1zmEi^aD!P$XFLpyt^cPnTz8<}pW!9*|efzZ-xQhlRPv9$w|K_~I6IxJ>A zHZ?qCW~ji%_g{Gvl!xWr=|@vV{6_m4`t9klvWa7iypo-&2XA^TSM2tmKi(v}RV`}d zKy7W}8}4Op{{X@>$*C^oHu`k3F*|}E&X+?gdx>`<(C2I0+smapA zOs~@w1&(F9x|H*mz^jZt$E7!Ik^cZnt)w9qdzw@}>$5bE1*$Ot*l!-9j=^j4#MZSW+s032#Z>V0 zo@^JgbB4Kmap_hrBo_8EHgUBLSMb;)NE!YoX8mb*CwR$=xUQizPQ{)9?i&h}9oZvY;o z3d`{HqT)N*bN>J@1ZN#_SMH?pEoPTE*o=AlRWA-Gk4Q2V2qlrEQSIwXp`3q*A?pE( z`sLa{%^?JUKIrEHq19EK+p3VErCjH~G~FyQywtZjc4k~ZU^(OUrd>jAwf#Lee2}-8 z>*{+`G+Iy58anj8UY{}Jo&Yr90w&|f%aioQQ1Jw-Guqhz8Rcx_)1JT1r`6~CE}bDv z7C4Q0>z*leGv)VUyOHPwOJ#95=_KTiG1H1z371-Y{n+Ek_RUKcEOekq2vrMUo`)P% zS|n_??>wXznDTw8z3yC{+~@KcsTZ2^2o><74CB`(t!k3u!cC`X$MmXJpxkOV7YuT$ z*iLxG7r48;x3}NM?7D-=0+oWw@r&uHXH1Xm_9~2UNi0o4rMpXceKR&x$>pc8AO5;s zPUJxb#6P@Yu|TP9AWc6{RBkXgxjwz<^C7m>r1y}^u+r)bYCGmth6o_e23Vr{hFR#&(pZDKBREywC=?aba) zqq!h9(~qtyj++y*HO!+ADc{zaG@oz1NSBylId4K}@+!&NJ&W3CFxnQAhHsgTL8cPT zGj%db&7W#D3B*?3TH|y4pnFudNS3z5$aa7-Po*AWZ$~cUH3^%~x3*qOux9!So_1JZ zW1L`Ov-I-!_j6sa`3b^(1v^rh&2truT#`dM^a6`?4qa4Bu2er#Z83ES*Mlv;1bs(C`d3qX zI@#JxcxW;OEk^C-9B#mf^IG zR^s0$h{F&+omrKaqV1>hiBA0 z7p7mdx-8_}%jRv)Jx9Mm{HsDOXU1AuZk`A)VO8quwXy4vdj1t=KZvNn3!M)22SV{; zQT+`oF*-L9FV;Fpd&3%O&7;fi~m@ref{Z391;u4}*-k!dZj-CmTo91s}xJFo}T z*Fc^v@W!I0E^efQILgZ#A^gQK_&38>wvt6_btBu#!Pq6v@0fHW=}T+eho#ihS2VsJ z?;1teWh$?EAp_75E0XX%!gzaJ*CNzP+QMCgEW{1Rc^Dsj z$$WL^)YmmXg*97`8bf&?hHWIyvq)U?8jebZ?~_Sc+=a_0E1Ozmf7yNqo?B z1=g8oBLTd~(WvwcD2jIqNvewdOMhy!@Wzj3wic_l=0pn;{{S04GJd$`scUvu_VU}_ zXi=`5_Y+1hW@gDLxSkWa>z}P#&@Sz@T`NqQSc6>Jl7uPwk(F_rdxKAoE*Fx&HrzW>nFgz2g$*lhXXh}38GY6Ft^PG%VS&HNQ10UJjUyHPN+e3PQFe|TV z5frnqQR+@B^G+n@d8JJ|en{?0+6E~r6H)Pohow`0Zh@kLA0$jy*TS znyuVU;e78eXu%*700*UW;c|?1c=JM=x1OJvrBV?1ncLE0lwykEO{Qoi6j56zaSf!! zEfq-!ZYgm~if|R8LSg|=Q9ur;61O#Zgj$ifRg0 zY*y|{oOzj>)!0UAh|-ftO?lI)%f ze$I-!2GmvA)tW2Tb6K-tk+- zpm;!O_S+%zz<@4!U`|~7oM)eUJ|C=B9tVeZ$e!X^ScW*uu{%fQih8Kr72{2{)aVxO z4MR+x;x|d6ja-w|24262uQvE^X&$q#>pH#Ki-$WEOoKQilis&h_74X58tyB(<7w_o z`7t5J=97S<*bYgk{u0?3bQ`&jK$`V}x2mWEKTfnH;}*pf;Z97`@LR|IovhhJ$8ELz z(S;wv4>%Rfd^)#Fop$o~=61JGs?FGwnxDd+Bel|h;UH_Ikjo~d?Ho}lXOrc~00BpW zXTH-kJyPwody#WB!InFHg<4OPU~|*)qRm{TbfxBW8b8?eZy4TR+pv+W<2JH3Nx|Ul z9-N&170O>*j}v@Pvt(qJ%E8dc>eS zy9n4w!yM$2eziq>3*lW7&8_csDU#65=7{IH35M;AbH_AAq)jPCGAHcLLkS+Wxa~e;gofj5m=A0n-CLzO{&TkBJ(x ziLKL5)1qVYfT7zTi8Wr=z?XX3$tQ_5okH$)J6U|;v3)*Y{fTV^CWZVTl`IA&*N_vYb>dwXlbUyA=uCUh@?}FLReF^*x zLw9#?Z{iy`?nT?IJN^0g#LeqvE?(y3)nOAzph|636o7 zFz;9ASiDu?)o>MBRRwnp>~a49*Q6z~VFkIxCebG%? z>+US+*3+aH7n+i)HOzz%gSG9=_ z+d%5r`W%x|_{r`du!2ij0uM86k{-%v1*=!;U-2xLzu5DOCPkF4GV7c#dV<3C-82hH zWR^*w1f;G3;q%Ep*{im!t!0^}G6s)_VasN*d?R@|H~MYkFYa40DCFShoc%FNpuWpp zhv~@{ovvNmq+4xu2$opzK2ZFEGy2pTwbVKmw_|wL;2Fo4Ec=djj0|I?R=mBtk5?LX z{m@6YZ?xOWi;d~VRQluF*0uG`lWEOx5pEd<_*bANnO4<#lV2^ptTM-cF&0j&#zT>_ zC#GsW8tT(f(0r9LNg6Xk!et?w9q@k&b(EuC&{-u?k~)~&Fd0+ZipkKfr-NI#(r)BW zJ~-8gT#qvY8-{&&$n~U6v}>v#;rOM9-)T2D%{-A1@CIBoYtA|EQuvfT!`aINOq1Bi zX4(Mxlzrke*B;eR#E?s;>K3}~vbei|g_a%Sg4_c>XEV>tpX0?`9YdiMy7b-A~+-8AWMu%y4P-%WExUq&g7wtHCNjw%geuy9oMs`>@QcX~|r&ncV9c2fB3 zoZyPD;QQ%hg5ylR+OpfW&o6f7J#$dl*|&x~NY<)H_I{vq8|NihWaH^d-2tm74#fT& zNv*H%Aild2Jj95VhdfkQ7w>1S#87tQm&kneNcFw>}g43YXC?E#HTU^7~9+)YhHT` zTe;$z}y>BYp=x z4m#1$pR&BSBhzo^*2bik=xyPJgm60y1{~(3@bq@}me;8h@3@V#Hz%z{pk64t)NRRK zyMd3K5_|FOQ)t##Rx@3jtB9ZNE>0DB8R^Xy8&*+#St6;4;1ef zND|2`p_yWmPB|GQcc?r`E%19^vd1JaTgp7v8-8J*e${)#S5a7fn^TtEXF}mOf6qMh zZaUBj`^mFL-)uJOhvo|cl6`oreFo{Z3#C>IQ*$0Eh8pK^22=`vNhK0g^^>GJ0kARDgGt7lF#hP9KKq} zmFz=4l2CNe2PZE?_xZar^53M@ZQ+cPB5A%>z{{V#| zKFT4`FV3%JaVb_uM%#ihpGt>By$!0~Tgsbc=*^4{I#HtCG_5>re7PgSG?Qc_c*bDx%=(PT!uyxMYEM;$Up zT8Bh(ETxZeEgSL&r9}*)(^tkqs~!igX_s$_6KgIR?bs5mjtK|3^{M`pPP1nr9ViRTo7 ziCpvTK>DUg6>oI3+)DzO$?j`A!*dxduC3f1@jfbT0_W`-T#28aC&5$NsaQMO_=aeS z#B&}7J*W$4(Cc&dZxct8^2mC3=~lJmYirAC!P=^F`0jJXL$1OtuAsXa$Y7`W*0#A4 zO=PqE=)ep|wF7Td%Kj*VOS>3khwiBakb72+t0;>_7b4%!mL*>-dLLS@0&0F5a;<=< zdG}g0Y2?&=H7H^{)yf0!)KW9)=r#x=*DM9p^1j%^2UKDeu~BFmg^8Bt&dwhyH9T|o zk8?+bgGXU`6r}HIGC}F@ip`82FI|xWY=z_-NbU&ck0QBKyh7+LhOY(9#KEO$hXbL)6v1pC(7JnqtGW?jT|m><*`ByRnmXZwTsIG!pL`^_M}fng@YEpEV_&m z7UCsvJ^7;sfNz zWp*$c8O3ZD1P=%NNK4S_G(=o7j|x-g0e@SUfG~8vk2Smwn+U8#y^#3=#v+-o;K?Y z#cF*XQ!bpniZN0RR@1JpDR|79O78>_=;uu*dUOc0W$vpIxhbJ zcXwwf{{Wt$5969OY_^=me)5pi71Ud`%p`RKnpHdPqxufC>Aqw*?!VHbwm-O0=*%gH zL6(OxF#hYXr&)i;^}_!Ed3`CCeQp=hPw7%ye7c&9eegh_A5un9Z6X!UB$#KPdR*_5AMk0`BBi9@cJCDjX%`bFMl!f`3flUvB0oihkO43N-I^d*B^x! zJQ>cXsuAdw&}!}eh8NaF{&mlI9B$M#H}zB%zp6md*@BMG^REs5@b6iDqbi^8Ki6UU z=_{p8gVTdd1If~p+95}X0UB($Bd;{;{{WLt$3x|){RIna7_Di=d64PAh~#hY5mn<~ zH^fq&$p#Hvv|YB#>PBk4fDNtRA4E|{R#cv{Wj#ep>ei6~pO_kUuybw~xo~M_UH&GG zK>LxF{V6q2eAtuJtuo`hSCKv8*`_f60Ava@{{Y=-O2_@CG@6eVEI--;l1B3MKnMKu z$LC0$;u=8QlFWaIkw^O7Vm{(Antq(SH03^|nr5Cn%}RIl82xA)-LTb|y2B2B{D4)h zLBw_r2lsZ0rF4AlYT7Q!a%uXzl8F%N?Lju!x23O_rNy2y3mU7VA2R0p;GCA1Zhn<= z;l-ws#Bfq953VY{iwK8Ejk(<+-bwYKP3YLh%>E#Rby$~o<5FwvWP%t${{UGi2kA+r zk2e15;QH+q9ri9Y%SaA(r_6ty1N%vKF5j?&Op#RMYHc5tN2jlsV2j+1#MFAkpSg|^ z)=2;rJ=+USJ=k?r!1~e9kF)AQr2zVc-N_{KQEEG{-|LVeIT5bxRN6dVPMWN9x_mEGrGZi?hfifPWg&)R}7t#v!L@;hTaKx%%~|=2thnDRpLb z<9)MQiV$*<44BX`J)yU7S1nbJ*R%hx2 z>Kgs6u=%5i^A}j{VWHI5qYn~naV}{>gKz0w)P%aKRmnv?NDei7k9gqV823YvS(b^_w}{69chlsnRZ6S znHpY*vdTi0LgzlGrDyngUP$D=n0)gRMtv$Ra^bZL%Y8Nm#AtIaJv}Py(yf(_$nXM< zsy*owt-RSiaaT177f;gyXAQFe zeiVtfyKd!69O_!s_l=T~{IQQgOQ}e1ZsN37`AdA`+NRP_S!o`8m|eiRH4c!CcXcJ> z50e}kW76&PMeSB$Z=^CO1%Oqi>2ZrqIYV$r-o~h0$l9Kwmg)Yg9#6eZtX&9TOIWey zNH%~w3Ot2v6ne4RFYhF{y^|%Ra;kl)ry7R5x&HuH0_3m0YJ4u0q^mvwMCbkLZiN#I zNiV0uwEqA$Po*y~a$3oH39U?J5n7?ak-;O{tW7G|*pfKfxF1^2vty|0vfK_~h+$1F z>$T9556lV!Z(&lFK6ZC zJbMa~?pC>xZKLG%IHSmR+6C^&)8sW-Ld+>68)24=R?;eXyv_+g$v^{orJ63b57geXY% zu6=REWN1-Is9#I0Tqz2`h(Yc2{3(|cNv&!|);9kDMTeIoxueJ}w0mx7Xi*D&7);H% zref^gy@&Fs^hmt@M)Oj9_YTmEjq`AfJxoc=fQY14!^rf+lbUzOx$hnhmnIQFM z?fQyM1`!RUnvKh1Tb#Q)e+q+|VS8%2Xoc0?uCDF$^gPJLr2hbPRQi?D>GrWh0_JH4 zmkJKP=BnsN`%3!nTXiWEiek1c{lV1Kc4X=r)YpUq1S4ce)c2ypw@0!rMuSbT%b%Dj zXF2M|q0=KQUiMYk9X?Xsaoqkj72s`8REo)45JaWs$LJ|_naiv;5ODHfU>-t>EE@dS zmc_L_OU^0&j|W0~pZ@?|Pk$_zQ>}ypb1>a0{_12>OET$Na1kc=;Zc9Q#+KSR^s835 zoq@PKen3(i25zG++Ety8d#u5McXaDHR^ zr9Fi*;!~|&n{~*ti2m^Z0MADB`cdQ->GzV@p})FqLS)1$F#tWstu|>6t$wipMXWz~ z=kK*YQk{frX>7q+h!`KjwCI9bKt}@{lj}hI{^8n%$we0MW6W*<9fdyH2<;&GhzA*F zs@8Edl0D3wTc@z7uP2i3b7gJ`Y<%bYqJXzTTVeL=wzzNgX~NSrJD0hYbo*2Dx%tTc z6{qSKNu*fCZ*IG%f0Y-xKD4$r$)(w~#nX>H#$T#-lafzrs{+ZXT$`!5h#%dl^r^KArd3;8ZfBE#2Vq5pYiZSluG*%l<%64e zI^(&i^^3nI1hj{l=lO6u3O~{GEik+C-^Grs)n84vl4+YzxdglYz<-5(s0}yhi`KBm zV`w)Js-rAwj+^FRY7ctj3IPe9;i$C>m(*^KpKbRO{cC?p(VpTRA5IOo?u;Uj;xueM zQomL|RMcA8V77qfSw`K1t||A@e`k1bDcT$=j1K3}el<%-wA;T})Enp8TP^$}AK}nc zHfY`@)K>E4BwGlEV2qpwKELPbNJ%Zb8ro!QWoT|D$ax0$C$F%mv z=%Dl;fc|wx_Uc`3`Si;y$7vVIJj1`JAIhxicWI|tMWgA_G?!B*#YI1H4^}7FtpUCJ zvG($vUsg-B1lT|biH}Jbah!c=nzXN}>XB)&asxH`uP6-LB2!Wl6X<|CV}40>!ygCS=7I?ZQ-%CP4{;SRyfzF9nB?- zFz7ljnI;334IwA19@Se!w3hPzU0&#Kb~|AwuPSY&b#wOISh)3JN zKf*u8f#2;vk#b2Q(X_pwfWdIS?dw%E3wKLbx|z4hG2OczyHyR-_=5cI1#MG|^dCX$ zYVNP84KB?r?fJQJwNXY&k6Jv1Z7jE9UQBN_IPIcs%D?M92fy^IdWG89+GR)%au9pf zZ7WYrGR)6#aVcEL#Qo9fRV>`=dXrq0Z?eP0c^z7SvU_ZeeL4egVY*-SvK`KS>MJ>x z=T><(f`D*w>C&03UaU6$QaJOQfTO6ZHV`e9fRbVc7jqL!%v#yW?#kM(*@IaIA?09m z)OX|at7~a*rs;$gP?0A%UZ?*6*ID{IwyCI1eIowmJ|g=1)Afs`kv6t-LCg4=R5qxYG`#o6vB$>aMQ)t z=8P~S`PR;$4d$Z_lI_L`Z1arwtxMUU)9n<603z*;M;WKh+-|DnN>NR-njSCJpgU#L zqmXA9UCMtT4NSf_kYG!tOr-V_59%vQ!ZI|&b1N2-XEMG9I*bABieHBLU#LMH#^IbJyrq3;sz^oo-45ML(iwq zw)%dl35I<^r$v3pH-#~;U6nd2;fg#pRI_55o%cz!F(ud~94{T-Q? z1yuCu#(&0|NE9jSB`u4?!`f_7NfdWi2^5WzJkI#_sn3Tr#+W8H?P*S zH7^W9q}ZE)>hJeTn8pb`hCQkF{tq`0q^~1H?xB<__rTzaI$q*&T)fU^wZ4-LowHk6 zyzs`(U5spZ5^xVcK~*hu3w=3eOIh!uGoRjJ`t{&($6Cs_@VwVk&lI0(g`#FvXq>2U zxaSA!+NGbvEd#?8S67m}@&v~6HZM}d=dd5GJ1g!!NZ;cvPp8}IT7ATNdNfkpHd(nR zKi(Pdish#8{j9Tjx3@QUE;~wcKQ3`y74L=9PPa0x?bNa#l@ZQ&vF-kSD(rp~wN+Up zl4f=TDy_A1k7|h0qNM6HoS$22Ou21#%pD%fP1Bv2+QYwa!Q*+)ra%V-R>OFX&dq}u zu3HEGS-PBi<22|zKW!xU5zB1t3J|DS+bnUD-r8Nl@Kg+u2(^&D6;Z2r|y+09G%Dyj^4BTid8C zVz>(e?(-!~2N}l|*-r^xbe(9$@~z)NIYm1*bQEHilnTl>1~#5CKosqjvTU0VPz_3} zRrZljR&n07ja0WpII_~EJSA6Ii0Ue3n0FP?8noGyjEO>1f>TySH6U!(@o;8t;xXDP z7H(>CyQ!uHJ`XManPS?Axe}ZYHO8w1B_(8Esfn*!uHy>qh))0b#(GtICz&h zOoO|T_3KX5{5fN)-aXyR+Io#pl0LUR$4ZWEl~ zQ*{ptXcx2jmvcBnkKK!stC8Os;QQ8XkAq^>6MUDGq@fj=91P%&576^R{2(?-HOJbn z-5`MjnKp&U@A*@*+nA*otsMUV142abU6gSvzM94Xgfq$JmE#@B=M?z7U*YQ%^5MDy zHsmZ2F;RhzfN@p7;S19tgU(C4k1cs6Lg#PgR@cG0TEKS6G{Jx)beaBCdzREKM%Hbz z7x;~%!NgXVlAh)`0*}m*Rpj`VrGT~2@9tRi3hF;RX0)`s9SU=C3@`ybyA+Wbm>;e? z{c3BNZ8S@Ji|B3hyZ%`Q+BY7Y_8G-1Lu(UiDch95e;W9f?2!hBwxo=&m>Jmqcok6J z_~PxrxV$zI5ODa4Kk+r!`4^goiRZ=sje3MktGF_fKZKlgKD4$I+W3!3-pTc8WOo{2{IC@E5xA4djf&0QsjG{2Lgi>D~afxYQ@Ny1SN1Et?Iv9Jiqa z_O07%htPHBv~)vhGly1OF5L0buXv^hlTB?x+dpZt{p#)N>N>9-MLu?!PZ2ciwq_0g z0EYCB4M3O64A(J+!+Ec`AwR{A)ziJSI+l!|XO*H7s(8Y{ zplTm)(;{aWnG`Fl5KUzXm%`f2vP^{O_l!1_A1q8y@lj{6l6tPit2=oU#F~xtHwIv1 zj7e-4ZqhghB=sXdl`o7e;M8=OZj=|2(orH5BpeQ-rC8Rqxi17)dUW4szleVA{{V(T z=-#4}M%N`WD73BFX?Pr<7sP`*f_$68=jY z_t5Vp4i0aQoN4m!g`#Vj4Z#|)3_5`c8vc3cz<85YHHeSdj5|U-kBgW zkR*xsXRmK+EQe&Ydom9ZTFa;1MXuVW=7Sz;E~T zatG&7_;*}gMW0E%h^6cUV}|5Oj;5&F%-$98ES7V-E}MDtKtk}X>BSadXSY;d@Xn~Z z&YdQkeuZx>)T5~wBo04A#X+E5{{Ug@cREbPQYlz8c|HFC`uWBwn&cOnUap$Xo~j1Y zE+WoLk5D~vR&}v&sA$7ev{q!44>n{3G+=i;XM;c_wtGL!W~VFoQ^ZhRuqMLn6<`42 ziRbCpH2(k*>DQN&L#gQVqFmdkQ@f+DUNctO)qF|eF=qEMT)&hIH);k0b|cX7%~aE` zM~G}6NxhYz)a?c&3&Ry02J|5QG@fb#z-e1@yFv-G)tt=Z%2o(u8fe#zv$j#fO+Z(A6ln#WqIKpMed;?>;z$os^pZ< zAp4B*?M1Y(DBW_Ccz*h5H953fmJ8*(G(nuPG2@O;y+^E>v|U(g@W+5i6DZDIM;XUM z)~##$bbcYzVAOQrqIj3hg|~g-j-Th!oug_|c!x{-J<4X{HN)g}?YfULm6yHulIqq= z;$IIW_CPJlubByOG7q7syfLhuOHPcVtwAq`^|jXE zgn4duTmU%7_p3)%u!~>O#J0Hez~2m=3ZGBuQ22LPi^Q5twiog3y?}XFF+T^>HJPMd zN#TulO$$+(jlAEywU=)k_9yh9HTk1g!#b>bwT${^qZj&3u`x{>@<{bHm!Y)&7uTlJ zCy<>w<%?T0AGkd;`cdGyQJwfjTzLofu_Atqo8V$Yua44cP!s%j1^^JhR3-5 zD>Fs78V0#0jXb_pyoYpKhIb#S`ig$NYd?qek*!)|?2bQvqp|6ndR6^zPK(6)9CtQO zBe_-I1l`rW4HpeQOwQL5Uk_{W>z2v{Q?QQb9s2@(u~+;>r={+j75${7x}Q2Do)D4S z+aA8P9*=yUAVDQfU9`0=#_Th5tz5%zHGEPo?hB&5M zInee003l^a?QR>CIQiI<(>;YZTZUae?$=ti0z?goNgSddPj9VHt;R0wpw;amN#?d+ zG7xY^fBMwNyT5X2u3@m&fR-;V89>C!NL>5+Rb6V#X}W@Ikh94qM&%@x+BnD+E&Pyb zz8XuQ%<9TF6c{1LUOu&QC2dbYSl)Q}s42`VWeww{+WMck?3?o_o>c zD`?_c@Z|RdTxpl`Vt5=X4CJx_-k`L&Z7any*%;O zxY;q!-W`oguUoFQqD6mVsMj$MFkpA?DU`o4o+Y*rTT5_>``qJjIO$iRkn36-2^2H1 z+UQS8i%q?Q#5yvp$85lDWFw!gWLjLwrE8BHFpV9RB#${5#{^OfHm%hcyeoYp+s~$4 zrrE9E3LBG;@+&@3K8@ltF#tg`j1l=%{vouI()tZ@$%?dO33i?sdgHxnU)#s7=_zpl z-oS2N-1ij5noj*09=&KT?Na9323U^tZ(mxL+GzE?9J7GLj5_=Fs=gk+`(2Ed)0|He z6)Hz2p|O+uCsmTq?m;uDO(a6m&8`0=D{xQ^3p=WL?hF^79N-N8?T{)>eB8YBXxbUKeuev z>-g68+D|No$U8_K>M^%m(lScRk`-m)7`zP7zkFw7O$dQekJ?ROh> zA=CAUr78q+;1lX<#=8%jYrQ`7XK*y#Y6ZNpS>gGL5h9wF%4O8F?3N7O7-EkwzS0)n zMAdX}m~P6HIrSYX9TwwiO=T(h(D9nDqe^XWuB;@&^OPCuNqxS{SBl|4Sloc;)X)~* zAdM!OuN5cv7biHWd_!(l2=1d_o;C+Q)a`Z;HWavsZZYx?wOX^0FZ9Ba9sF%Hd539@ zfB2f|8`Ofue*#58;ro`F&RCtldmE5eqR{61B=hO=xA7k@-l2WkKZp^ri+hvvA9@9C z97l%x7P=T5B!`hwc!Cm*1?)ULPB$NFHQ07}bD;T^h7DTD}!~#B|qS3BC*{3ow8{=ZEJt>+TyacifjEmoHT8bpW?+wrLnQ`E#wE~NwLB8>rA~L*?uES zpSv970)0&bweE-{m9)PTXZ~5-ADjovY@{RJ6b7q=aLSfAGy3 z#w_)nHv9qeFp1Ck`qj@6TYaNPxKY&ym_G_&o~idE@iZ$olPmXxtjd0sVkZ|?%OT`Q zocV(07N}rM=awed~GHW7zU2w^MK8 zi;xM~a}vHi#TLKl-Xyt<{oAO7gX%b@Yj5@&?KbcdGcbvdv8Gn?Yq+}d`Bz$X`tjvT z5s$Gy=ku#tpgF3=8qvdfQdXxE_gbepAKsJqA2d8st_7urp`za`?@-(Hjwo{?kh zWcyB;3qK{J+J3mfto;D_OL=Xan5E;`bfd#=e#Lig#O}AaWagO%`ag` zA=~0WGY^Zh1`>D%ez`y4M~KGLr`(PVQ-Dvm`4nr|wbV45uAjXTpTz$F`s&Y!;WKFy zDx4Hx-;t&X>X|06o_3dXxZRk^0MvS0iFC*bIl}Gys?C%Arp6{b<~$$DvosezP1Gcx z-A+XzExiWl{{Xq0QG-8re2<|NubBKq4nA2T10(UJhxdB@+7te=HDD;e8#OB#Pp;Z! z^%GahS)_xkb0dDWHTwSmpiDp6G|gE&%_4FB&VMSI&z+|d21`Ys(t&hDFrD`Cx2jVt z##T}3A^w!MM|G4$_Q?HdYzOZy$6QID(t-CGXa4{nSBuyXY4RT?^3llP$OeA2upHmq z41WmXqSX%3X5N#h^Pn$xV&=38Y3hHwDt|h+s3>S9Ur|wOi=8%cgU38n*CaGVe|d5F zibiW>%KB?>)0Focfu+*db-dto^WV3q6%LL<*v(R4gyBFt<7b| zpJx#UM^~K?26M(+HHY9_$$hFZIKo7j2OM)<9<6YeaoQI^(LCyex%Q`lS@SP z+9@@G{)~gw#XD600FQXbZNvFe2<(dxk1I%w_ww^q^sWri+=Jf_}>xYQAQ@D<9zpnoHBaR14~qm6&^;Or@BX<(yD0yuAk-}H?uuUsyF%zfJg*^NZ+{96<3T! zK_6$-gH6oW6V7@QjM7j0-DcV`$Us=s+FI?fQaCJ0Kb=QlH|mqfbHE^ebjyDeeT3Gf z#kxW|$Z_vhh!&b&ur4IVDt{)cBZRYpVGD+#ul6 zX-W2d49eVY4Ed*M1N|B1ZtQuWa?#1InhUElO{iO2FC#f>HOJd&6}pfK;~t|F-8>tO zVp++^T;ig+A8*&=Px)sOoX`nbrP#7mY1%MjfZH-YxT^XzUR|lVm+wA#K9p;&^NVX$ zI0W)Ns(a@9E|a!1h6%KNXy_Wa`N+<UDPN*2>e8;8qsMO%!?@T7zj`#wWwo+Yz*2c*RP_h@cDoz^ zhK?RiIp@7y)Mggegb%z%0HJJ3Pn9mLuWCNqtTXjUhX$Fe%-462*vHfOu~szH8g7o) zGH~t-bNW?X7ABHOFQ)s=kfhTc^>XZ6)hAmE2(6$vmB!UkMW|gHNH2lr72I>&)l|lz ztO-xe6hi`^s>|lh4X8hO#W*0K{+nQbf;6yexl3VpIJpQeeW`AaV2n$EZ1u4@eJKha^% z4NI%e+J)RYd;slJhQ%I0*V+5Y^jI49`LE^#Mu6+=tDO8rT@e)q`{YnKf(L8V%CJTP9M3bA`S=~{GF z&=1}+?ErfBs@g0B887ZmWpY4c=}^bJP}JU5<}^Po7U(;4=!@EX5$V=VJj4bgEKh2K zNrA7gWz;7JW^o>RQ#E;7;o`B3@JQc^zk51qdPqpHtQP=#&<^(VW@e)+>l(aPG5-Ll zi2V5OYW}@(<=exjT8ulWTq*miD!z#a*==6xTnCpelj%!fziGXe@=kfe(O|OqBFSj< zJtJ@#eZ4(eqtW0twsKxvoJkT}%jte(3e4YBM&gsil;E@$YVbdPngeO1XD1)2vn~0P`4aLGSBO*;}oJ zrdW?LzG)lO)AJ6z-*D@>g}f?}fxL_;9jW?!D{dO*b_3-(C$(0$h}=x`$ap6TJ*k?M zk9911d>_PqbL~fv?WZr^ErK0eQG3Zj`#Sx=O(vmpCb_7tp9WUaAN8z1h}4>->!(=5 zWoSU1{!{~~9m%O}ql-t=%gNWP5!}({FF&|;uXZf#qSLH~C2$c{e}!sWSfJ4Kqb#3z zjJX}prBc%^+G*bU;|5nhFR-N4rIP;jH2AP%QI|gSTcC3NpS+Vqw`;5EbsLU&B?;&S zHWvQ?go9iTK{hs-Aa-Nh^QrY&mdi>IM8R2?Xi#}0y*d&!O&DPZo>wG#v8Co7etYp-0ANP_WXKz8A{QpEXTS0X*B7@?xA~jiaeeoNk6@}u05(4Vf%KwG?KAstrd1JZRfo(^(@#xG}|dB zxnQ$N^UB2Z_Na8UlI}^hIa6<&g@-*tijMd;v8ctTE=95(^Edag+x+^~ty<{AZxVR;z zeq?U!-h!jjEJd12s%k6+!;Q?$e&YI7Yh;teSD$LQR$B<$_eg(_-hlG^$uz4+xVV#7 zy&Fm9Ajj^ntw$`6tzKm0S;T%({qyTm>K7+bnAltK3LHql^~Z0eK6xXswgE>@03GR} zt?n(&+SQk+eWkVWo)_XdX_%a(AR&sk`%Vl?3zb71C~A5)q4v`b$hd@UWQv$ z<|y0K)YC1kCDpEe(Rr1(2QkIl>S_%_@?Cm$(`-veWfNj~SB>Cy9@GQ9{K+S|J|nv@ zK8QVidnZ7tjvbs3m)CCe0&M!VVP_WRpxb?RO$e zd7X>OL!JTkKBj=NVjGAw%Qj0`nnCvvkK%7qeze;Qc(iL7wH->}%XHkyG3WjQwF1o7 zR}F1!ph`+t!(HX>H*> zG~Qmw*BXTX0P7p8J041}wMC=p@?Ts@t!o)nQd%T)^2PuVLGQjjd7w(x@+Z=Cy@Fk1 zS8a#ys=2^L^{SD}bK^_hu=$qSOeg(jFl0W}3pL-5FZ{IgEwm^bmd7^-{3`ydtTX{M z9S$whDA>;*L>_?p`_MgG^ZbYEdgZQ)si$esi;JA>jx^{Gy)Kud{{Uu1Hm$49B)ooE znCD>h6luCmpNDPU{_<37jAi6*i|i{mZTF2X!;tp6RBgt1X(+Jm(GHg4Nj zjlX#(P5#xVf2cvBStKw<3n;=yzLi^2)~$3A9+Rcp{i5xL)QUcKA6BPnx*BQFzNf6* z`Ik-eHsh5~VL(5?c8_B<&C}{v$*{1>A^s8SYQC$gORC&9on)*cU-ggcRc6(0JXa^! z^uaB)q-}|&BL%&MY&14LAF&T300*xw=78&WxpvYxG`%@X9g#-4Af6AsXXwu^wWv0y zJ-?R>K&%J*-t`Ju-1vs^X1?IK`%?`ao(o|0e@uH-D~&;Pfp2aiX)av`)EwY+ z$@CQM78tZ`F5-KVQb}CO<+`6tQRW)!FSvA<(l(It%@~STW{CqgeDG@Zy2qqx-etpJ z<9vqbxwmW+YEzmh`lz#Al zUFzDByx%k#V$1w7E(X#5@%61KTkSW|rM&TmwvZWDf_5-*sdd$tScW((*+dXA-_PG*F@fwTw?O2wS3N3Udn?{xXp|UrE+vc47ydGCS)|+h#X_{;)Jg9{f207~I`JB})I^3np z+|I$KJe(c@{{Zz=LUFEYF}YLrOJkVV`|s+13Tr{xZP2lQd2OV^^WI7#g^6v%5{PAr}K4?e(u7mPdqDWnOXSZQjphX)3d_NaM7x1>I{`ZFAy#ndN0UF&7;3#~gsa zOd9I0?QJ|Yr$YK|hwe<_C0NhgR_gfgj8&vrD*R4{L zsY%h=En31$-%=+Yl<+DzzTiELJ(xzNn1G;Ulh{|~ZW4^#9_vH4{YQaPCJD!JUVq|0 z97&U5pd(Fi$7#4#+y}A_=ijAX_;=ymPR`=*SJtGsTdBsxif73y)Uyv<_OGC!k=A&3 zTBe#^E~h-}E7={&#tk?`4{DPFoCSHR3t>4C`3vbskSbcsm&BS>dfZwtyH>xD?edfp zgN)#wg0_Yk&it{xh0M(lC=T@D^3sz{Cb=fmb`4nLCMkwf>r86N)qFvw=+`!O_tz^F zmvRW>&#%9r?ODQgs>_m{+wvNUHA|D+({n-Nxb{A@(rcPhmGvzl#M2%{jdwc*T;n9* zQuVG6$2XJex|OGfY##)XHRA#IQ#=FyeJisr!A~1qQjVS9U~NS1iKMP($)84qLvJLv z7RWFnm9oq9Z|PfhSI}QVUIr%|G7*BO+*X;6S%|>O^H-1aEx+Iu87VCbIj$GQ$aTLK z=-LYN94GB_pGD6f%k{43Jl74RNN+wOc$W2sQUr?457U!f{4Gn`V%<;WP5t^4RoNXL zr)0XK`4dP|68Sjl4{UlGse5O0;msmz%WYC=QWfG0p}Ab=rbi(4ttDVsW~EAw-mMyS+ zzI>virIRVoy>B)1`V`q;e~k z)?1s6V&o;HOB7%#+!s5JdEgE^nzeTn_V&)!F-IKl_sQcbPFtsbznxcm=%KOMWg9#B zct#iiH@Xgad#*T+o0 zx@qmCP_VRs0yA)6X;*4pFrQ+Gh;D5e z1UhBb3>eN4yZ)#3s~Y{Z`aY_f-MmqoStHwWae{}g?mCQBi|cEBcS=W%w?^MGI6Q(o zRee8KO%_Gcb$J@%(skJk(ytld6>r4xN0{yQm(0HHZLMhy6q{v+WEsH+9+j7*YTwz{ z&!g(|xp3IFnfMI7mp#oT)}J?pbp@8w4X4e=l;G_`djb#3?ZFjpNNv1Fr-!y@Ne~Q% z06cjd0u4JMq^;yr)a7C<9Au&Q2fbxl z>!VGS=^h~jh9M%kVe+s&k79l5d+iGPIb^@mZ+wfQGKk{G!xxX5gG_x7tX%WdPI4KTNLj_xG~b1po& zJx8&un;VOthd0Ad)u!|Gd!#-@qvqH_?mB^jD#od!&*AM(J!eAy0FO<(r?!mzrB68? z-^zh5-*G;HcAg`$HadeK)T~b6M^M9!-=7$&`cAoV;oWB9%ftw%Zq7r*35@p6efndy zSii7e7TCw)9}PNMYS!_UE7QzB+-!09)Aa3D%f?zw#f{ytgHeh-w>HuYGB@{!sK}sK zTHkNTW#)--;Y;td=~Ex<>ztOgRN-8nppKOLt5M=9pz#)sFWL1ASd4EIa9aH``;6-^8Oh_s6AKvbeSJK9Mzq=<75;B!!MySafmq>riQ0qv-de z!}{#cI><2u?mkvtn9T$8G%lgD@g|KFw(O=EdGl2K$bZK*Pej&4H)q4T=3afchF2df z%jut5r#+3wgEa=bfSL43zt+S)^hej+R-OKxYvL^-Ufw~mhUhL6?;-7q2c@mh%e{i{ zz}nPT&>(#lU{Y9t<|EV}rD^zwO^;a8A=R{!8So@Y6RQvLsI(np?GG=8HTcBWYZ(FD zWo{GJvu!1~_*XBx`U*7_+IQ>un_3R8n$4NDxn0*WuGs?*z3*9; zvdQ4>dF|#c{fT_ph4I7^e{}tORQ@B<<*}W0%{S$b0pttZdgId_YWQnU66mE{l#qPb z9HVw3f$3|lnVsT`DfFFAKN9J~lw4e*jP4)a$I`U*3tN90_*pJ2imdqE6o-P2J7%ls zTASM5KZmt%-my|4mB$jNzrAKU&EOqx&&xi8cGzVch#2(x3RV+O=8aDeYKyLE_Zm*3 zo?fABo>bAde!!1vr=wlVplfqz*YlGb;o){1VE+J|RQ@E>-_DD~no||HhCkkH8S@j@ z9r0FYg4@QL1b22WvE3qkk{`T{=zXXcPbOyTws#s1rZu|)78WDVjCcP4YP7Y>X!U&` z?N-RLN~mOoy$wU*`{mZGr_nV?%HG?i$q|p<9Wo75(eB^FI@{>??9T+8!y^s=&#&oD zhwz_Y^WLoMdSrUGi58=#IP+q~#3Xw66bkF)%JNAZn)=BGY&8h}Sww>#d}F5G z%sKoh)EH@cyn2kWJeIRzW|W+HC$T=<)tH61j(k3mzUzC)fFb_?jyCK;s5E(t$aslnfYLSF~C((S^0ZW8mnH#Q0V^w@V zb^VccJU@RsNToowX&3K%W`iU6bHvfdG>o>FT!0fJBdcdNR+ zs_WWBSNeM>x`Qtp40Rnrp=FQ6z8002Yh1>eDmWn|u+*FVAr8=|t~-8JS4WmjH&dF$$cLaR z$05f&iU)7K7c_hLb*(O28_c}XuF@EOMzi!AiF9pBZ6fMi$06MrZ+_XN)C2f`T1(VV z^l8o{Uqk*CcU#io)odE#%n!6L?_-c2PMv}n{@|@G&3E?GXPQ1h6u+)S^6E##+P{dP1BDlTjVTyQU!hbqf0`& zj{eqtGVlW|V4+joRXq+@~!HDIUG5y^;RH)|%MK<=eCxR=W6X?iMjy(ZVIpg~D@7^YA}$U`e$^Iy1IbE&Tv7p?Q52xM#0IWbj2fb9cCqmZDFOh9I%KkNH zS+{F@$aNcYji=|we|od2Tc)q431DDkL6mPp+*2N(CRW$&+8LnK?amBm4o6ISnz5-y zHBA*REy!j7KjJ!yc8heE`ec^(ATy{jx}M^y=x%iTsdUNQl_xRhzG)Mx^+eiL(7n^j zIR)2(Jw;Tqk+khet%=(ljq;CLNfoqhWk}-MW1sP>TJ^ul734i*BP4oLD@)s>BGscd z*HK-@FhdQ*RgFpo)b!%fkX#MOeHc`@8jXhVLlQp>im#-~NRkN-95+e>b$-N}ZOZDJ zNfQjnpCbY~8m**CZSH5Wm9dt}Dep`!be&~F{IJ}gn0wT^%q?$o1@uD(Hu>?~P%Cuq zM|7=WsI0>Q9f2mUYPO>O#kTUmZ$s#5br@Fv08KK(h9e9=3QaEK?G~gHmS5#SUrULl z%DTRg@lW$egJH<;+N$UiG8>B-&K@@TLGMMpqfOUZJmDujF-xk(Y&ENUsDKMM-}?Um z`l$uCL{~ekwdkhdV~~JxQ+S%!%(qLp{`5FG_Nlx@ZX~r6rayOspK7&YQ&Q2`95^V+ z)AFVl+Cz$sQ^T#CNM14ydSq2^4oYOv%tV%GSgFr6o)MXr*5=Y<^F-Le{c0UDCewBM z+a@4Kafgf##;3@Zw?x`0HoDdApkR^BhDGjAUMZ~WrTE4aKl1jYB>rFFP1Vt$@fMAE zxKv35Z_ixR-Y*_i=AUw@mX1;L`U(Sg>Kgi+J$B0BPB$Dj2U01XF@)UNEV1$+aV9~l zekX`rS*^-^?->j*a0sBX>N+8EG9*GVLL7EXj!nAefMhBQG<;-t6<5Qv2{g%V+~wmu z=bAh(IQtCN5>eUDYNxCx#xPfqo7#0ax#PR;jI4h;d-3F51L`V`K*G%T_M>4R3S*lHR|I5`r- zgZW~oQkU9GD~-!EB~RBCnc*o3(7dzO8CgFHT?p5g&~Jui{{TR_fSzEOujf$Nk#FJ~ z+fEcq`_&%2Q}nU+eScJePEtk=KD~dfH&Rg#h;-|qxZV4oZ_YNA{Wr-AOg`9kRMDMPZ7c9>0#Bjy}YR?{0(1nw-$0K!z{5C{KW!J$w+K$ zm(~j4?n$D-KT(5Jyf*&;@h_Spf7Hy%DgGDA=uyVQn51+g&}N|0F>kEu_QA5IK_D6F zkw9BUhSN*rO+cUdMO!YBT(qXLI{iwgCR?>c5EeE2o{b(0KnqUUdkM6nt zl_iM(08G6deq}V>B}b7k9DyhFsciuM(7WTV+5zA%l^`sr>5g z$;PP%BX^cXRo1wM+@79l=kuWicSg3XH`rXSLR9lnMaDck=NFKQVSm7 zisyU}gW?@?*JND&70~Od3DftS0dk}9&1d$EYJa@{09}auOCwoZmrtC?+jf-5$D8@@d$JW+Zy+eLPTW%Fe6`Th~>Pw`cZ*EUhTw7W!kk=Gx1VubcG zrv4Jc4Dx*|GeXNX`Tqc>!}(US{`S=*U*e1r`BqnkNtP?}c>U-fr3+?EehCfHQyRvm z$G9K*5vZyP%0GG!^RL=QP5`BBui{q{qx1GW+B*`?Kn z7C-mDr7pLTEx7DY>rU2J4-op$R9?ilqZ)b-VNqED_EY}(sqdHl8a4j_WPd7#$BQ>7 z)w!dgKV*+c#x7WYdXrB5=BqP-zzs{Ijh3^w`&61s2A<|XF`x0Er}mh#A2V1{*=hQ@ z#g0F`>N?bM{QA2eukxpA?fbiU@%N@$1imDTm+jNfr7h%x=dsq}TlyswT+)K&yftzJow zx(Mg%L2c^T{aL@!<4^BM1v^%6F41G>mJ9k+T8<>VwvQYK1b%e=X|d#>1eS9^qxMlc zkF)8qx%;R$8h(s?>zlc@;BVXd)ON(&>z5L9wl&&6IxbVvUWl7kJFP+vnW+!%G?Kvm z*!ug`eNl$!qsLaMb%qdWCNb5BQHlljQX$ckZI_wdiDGIkF?`)pX%9Ree;T(4`!0^B zA25$K2ZzutyUg875ln6TOsRAY&xn>js)DB0+?0mhPgBUIX$of7E~Rd9oPKo6pw~M3 zC-5x=uZ=FqyQ#2;Lyp}JG61P;z_#%4fA$Id>ZY_ul9BozDt%SOuZQ7-IA>75r!e-;^KRfq;BA6>r+HcpN31Q`MkV=^`~gdw@;0T0Jd1-hQdz# z%%>u?$B7a#%Eq}gy5nJ?fq5;GMNgr|&8%KX=Q~u4{ZIH+Db(J0h!9CYf0Y;1(P=ch zBF*9Z9*U~GIa~^EjK5>jjP7twSelPskQajAJe-_VnwS>a40hn)xC{O?bSHQv-IeqR zzR`0n(+<7rJGN~{T8`aM?$Gm!(9+dxv~eRGe1(asUK@zdJhyGhJP*XvxbLi`*nYn$ zZ?jm$c*iU4Qrr<^rG-<17XW+Jbq4RmlDAZhWAdccoXvL?s+{|K&M%A<QT8+<$Z^0n^lhL*PI*u>nhLtT z`xdVs?7D8n;O*KeEKpl%!e-!+xYb+Y_qwchv7E-gcn@CnXI7L(ky*vp7$8t9XqR$5 zA|JKi$#UOyM+e@k-OBo|vbK@)5_Kc>tJAmkMv1WwCvnHr^{Dh)b<=d`zqsN@T;%$H z_32-zxwoIm3#!~KDIJ_#vo0~{I#h=mZk#iX`+r)eq`>$0a$nA;X#2lfW!uTCYUyhk z{mO80`kH=2x7qEhEa_2|w|m)m-Z(zgwu9|gW_)E=q4%ZMZUjpXnQSt|06^?JRFbID zw6#Se%_AT1BSrd(_t&`)A8OSOKxB-3zSLex=1eWr<+`x+skG?DmYnxmn_uPk1jNjkMsLH=6IE;NM*K)P}@V8&}Q6HP!)c5YXZl4vj z97uju{-&13*jn4}ZWxTQJ*XZ2*W62Yb@m$~QyyXYPGC;Es#);F)O_*B}I$)ag7T3cXD!(?N>xu@EqcymO1yOF-;L6%=uJrsYRT2~i0 z+Fpo*TV~WRZFFb=^4Nx)`Y7iWCcin6Aku9C5;y^X{uCVrH^X+4M{h2zdf&dd$=rJ; zdj2$MtM<#QtxiG9HrUU%{{X83m~Ha>$?m3$M$+So70d0}68g8V^`y0f`zJ?dlbP6= zB|X{CLHKb{*+c!QtTo&G*6?u_dS;2)wXIbxqsX;{oy30@I-luCEz|EN)0ga)PkC?v zW(A4%rP3hSCe&^S^X@W9C+@GMH&u4Kxr0cyPn6;3BcdSfMy(-8lFAMqQMYRKRi-We zf00_z8(7rjx|jYu?VAw}%-*!y*8bbnzQUOnu%F*I_m8DryO3zwDn|%WE;gti-aSn- zO}75d)3?ikBj!mP`cdXT?|hLKw{pS_%d zCYJu|P?rR-^5bLJdr|;zwIb|8Llb2MD|8nwwq=bj);%`bT|)VX+8l0?+xSPNQn89n zTJ7~Kuza9@aEG8CwEaXjt9KoOu@FYV=Ew1R3ZGJ#!vfpGg?AtTI|^af&6Mw1^~=Aq zMt0f6-@HHHKjBvOE6=dnrM<9GApukm;S}`|>2?N3z#wGfxvF|)tKD2Z{m95Xs68ki zmhwf5dvw#RyvZ;ejJfx!wl?x=w}$3rKW7{-ztWQ6zO|_fNP!md9J~6|`mNctNVJ_b zNx6`10eYhP{Y@*5?Rv7Vsc|N&bToSqe5E*^O!3EWrC8K&6GF4M()8rrbuL1I)kk(U zCzWsEZ6r!TlIl~Azj?hrf}qmuKE#vix`Xbzo91S3;T?dWojzZiCA7A;(JdNzn|$y0 zo4G!Mp|-b|RJu1eBlmy6r=X@m6xzkdpExT5pOtFHp?c8~V`x8o-zh8nBifmI{K$1H zxh`ZHWrlydEQ`hmps8K$d_7|vaK_IxoGK2bsnNv_gJ2|ax@kLiW9delX4!pHP;cHG zmEF=cpq&QU*t~hXzHQeB<^Y_C$DsG72b)%tWw!KzP99J2^`Zou#5V!X_-qvXxa%cY zywrS!I&PU3WKp+rjuYwXXda?oOCFsPSz94zlYpu+ex{=kOKk{2%+k04bN5I809v1K zYaWej_N%EHN!yH`r1}by9r42^p?E^Ojlh3#I}fb^dka16J|DD>IALpx+k!+1B{M5@BX!2)NdqTFG$jt5BFV=f2&_ltpttKH8+*lLeNuakK~qgA1p(r z2faBTP4In^q6sc9E)D?3UC;CsBuSv#rLBxFJ>vqWXK(QEKn4MA7N?<{M-?T1@iTJ*vc3zi*fA8jFTtGvx#Ff$2^AY_|}-wWX>< zY7WG3M<=<*r2-3?t-L=JF~@FXdxypp^*X0enJCD+qBlbwlhB0$=4par&05rgs*%M5+n^C-DEaZ}<+mq-8GAOULCtI85 zD!JVpK;#cXX^jcJxcfnpH`=_%joW>x*AX?)iIn*%7{{sNfU#j`c|?(;c`T%YQTbuV zG?-YMnvF((HYAB{m6SdrscwzD6)stEezP*Fbo<(0T#Ff+gutmW7p z!zyy88QN+B>Y=vae;-qUo+(M%-!?+`IikQ%6~wTk?c3+M0Z(OLTvSkow^huJz<&oA zKJ_0Y5F4pDJxv9MNLJ*2lvqWEV=4d;1TBVK_NGrEowNV!w$-Rd&L0KGHUp0tDI z2Rsh60b%YQJ9CD^o->U8H5>!TgUdotAG|@q{OTc=JDZj44{B_TW%*Tr9nAu1=eZ}XCM~q6T2f|~S3fhc+|J&@p)w0~MN}-$#~;p?-Y+GZMquuHx8dnlZytR>D$MU3YH}4%e_CZpyCS^@xT2DGI!!L*+*zPw znPVGV`uo;^70u}v0vo`raI$>AjZyKJj7FLclcgU!Rg_@tPL6!tQcf9^WI_-A&FCwc@TP?>ovB5tU%NHRzWtfW$?918)Y>11 z@xR zE=r%gzM{G)Wm%&Rhl5`Son_O&ROXJbmfl`Q+_o90>JVvqeAl;578sXvAL(9UW23*0 zHHmf2ab7z<7Tyk-QT;vp)vp)oHy$F_7ecjj_81s6?7zg_^XxyJZbgXVNYmv+0aOma zSJPxUch#wTX|H}?f-#f3vNUXBO%~tFig~59U%L~KOhef9BignWK=G@o1z2PeT+oq+ z@e}o_t#uP^Arg{dW83&^lRe1&v|b|&z3!{Or$DjkfdAEgR zmr}pg_31(X08N`@ME?NKHR)SF5VaPI!ou3tLFVc*t-5=uJmRObvxiKvg31B=xKJSX z!0T7S_)bha#7S!{K1j}^ysU{^kyWHgQdOSbLmbP|hePaYa&l-D^zw{n7YQq-IJ+0^ zwcBY6tp5PGmL=aHZkQd%t#ZBycb3~%)Ljbww*BN#f4T=1u{238(#Wh-Pn8%x5~uHxo%qD?@kgo@UtKtaC+5!)MmW_Sh41u5I7y^E>9$r z>64sPJGh`4U`SlH2{|H{c_Z%{gqk;ViU(q2Astx#DBppQ#Am%jxbi7O9-|qcEJ|fv zx!g$g#Uo0Ko$_Hp1D-jk#_aG0KD4q42-~qndXi`YK`c?qeqy-CMc~p)Bw-7Afcc*& z+t`YVVJV5m#3zEeJQ{x4=K!wMb>|@Ffb%R1l%Ck>*W=AHCf&`zVfE~41xd7m%;o2^ z3&J0~nEG|5!6CVcmS~flqjQm(ZLD{?Y|n3VD%{w*e5}|F8SXxmiP$wOS?|O;u9q*7 zcNAnU2*j)X)}s3I&s5QFWr_gT2%%j_!z&Kd$40Z2?(GpwYQHo@;Z6wTeiX7y*S6BV zmA8|9fLTcgaOyuw2Wv7xs*6jjOKa>Kdx+P|xI6@WebPUzAcFi|JkUiFm6QEvmvT1dIKk}&M*a#6d2KdnWn>1Nsw?U+}{WINgt#D@H-i>YEcY;Pr= z7t`9>W@3Tc1AY!cTpoGmmOV|4wa$;?5gdu-{IlZ%M9wmOJ9AZ9d#!g)j^j$Qjti)y zRvD9q9ma8mJ$9a*de8%2!tY6TyRf=xp>_G7oRW>{ zhUz}GByVZrO*TlpnIUpE$qW7DInM{bPP9*^>Y7E1OK&7wOo3yxW-S=cZh8-=N{UF| zUQs=yD`Bcy9jpW6aQ^OlsrpdZ+rFdWy13IVTTa%CU0Ns$70_Rqhogbh{qN;VK9>5? z7kXZ;C8gD;0LDS{JrY2Aie#FU+9a?Wux>2w3dbR4%RtAd_fhLkywJ56ufMf)Teu@) zzdTGgEQ9OYiUc|hUryI8zQ?G-kli1WSY=Em?_zl7s$OaO$AlOiKH%NhFf6w7fRnO6@G^**EA z&_C+Ms4jHB9ax8f+S5?Czvl;Nq>4kUE>cW?8v1=G4fOtyx|fG;w298C z;n{*YJLI<<$0GH>AIhhSO)ugmi6Wvst=+l#kc>$K{{VrksBU#H0^Ru+Qk%^RLOipK z$!>qbuIt(){{U%U5a<&KZqhyOs6JWOu1NY&C+GKuk*Gy6e+qb>*v~KpBAQXSNHN9_ zP<{QXwWa0PfbV~@HL1SSrA|N4?)v#dp;qr&du@Dwq5Y!Y{S#BSTq)1Z8}-5e0A!kn zN7N$MtnPe0uEI{E3T=^PT<*v5gX$?0{W3jMPrC5tq?+!FxviadUE4--uD{-2!mVE0 zL*k1_yhor&E%g|e0zkND1FUWSHAhOlx$u?h=(@9sttVVsP1GpqgZ_A_bsaMILBCx? zNMo_^9vu9RJrAd`=7H|~{{S)4>RNuKrATg}Zza!_bCl*81~_m!bKF#~r{A;!OM9?x zZO|KedaSAa#~;YlsjAt_sYh$%2&cM-e8@%s&tvPKQB`lOCeZH%?Y!kJv6r+U?BH}B zhM4crpH9>v@g1!2`Cd)bOSaYvb?ZqBrAGX}YzqiY+FvxwaA9pz`I7xeiBCKf-`Rb$t%vBHFf% zFhyvj-haY3t}!x! zh+W6Z!|U7{b^WB?7S#UNZUbra5FR1?EO@J$g^jCOvcBIH(ibGNug>H zc#BM*O4MU`@9ooM$o+WZG+Zxje)3IUOp9F7_dwX0N0|hQc?>&!J5izPHr^rAE;QXj z5YtAcDdT_Q?V6*eTuGp6jiuj7n56lUh~wCU>Dr{$?Cx}pUL9uCsD;MKz~i4^#(=j^ zxQjuSUkz$+plUN2Eo2$8k@*F4$R?9ff^P?FORC%MIz_?TaSHT|lh^55dbNZeA<|;F zivg7GM#n09if@PSlUCC%^sPcMD@3L@4bJ5}ew4h$)0^)g@fMygRu2(r53=SM_cI{> z09zkkM{+9E@LG7sLR-5hRk)2ZtVb%?_myb=uCGY+7W#%Z#b@Rx|9 zlx|xKrz+~BfIUABznufK>AElYYgC6+v!6oMp)GR?6?ml|d3|b@is!=G%-TKd#M#gD z+cR^FoN|9kvEoY!7gD#@wDrmUU!wyiei>*BsT29{N8J=nrpl z46=c>gQy#qvHU8wiwvLX+DqM%BXVQo1ZR>x#WDKshIo$39cN3m)~pz`u_oc=oO_-- zkya)v;!h1naT_f2fw?5c2x0W;PVnXOEyVgg$|QFXl0poCz~_;lUrNumxjq-yzq9T# zwpV1lB~u_VJoM?-fq8Z>SiBx6(G9)IsF?;NjhChmAE>5yb5Il6$)##6uR3mwh6f}M zTCJ)}Cx*OJZ8E$4itP!JRWdm1&u?GA)VlOCY5LW^wQVp`l%`g$MdQ}~xpit5rG zPSt$LBKd;@+uEhm?jrG4ha@toN!2jw!w1;aUkz#xWpLUqq{W*XR51R&lnU)@)fy1I zJ|@v#24Uyz$GV=zspuEeTF%-{+YQQ2+@6Qi=~eC{e++7ka8RrcPTi;P4@$SMY3rz1 zE}>*f%&X>xQ_s?Y+owiR)C|5H*A3diwh5R6x1rCiUGXi5xU!2>up5~`X2)^=0M@B( zr%x4VO$%{z8g0uCLG`FSGkYbx@@QI%e)uoSq;c>0&=>2~8X8^PTE?2oBL|QIj=0AM zrBTpX^vy!&O`bpz+cBxANN)@HghePRYjkp_8RP!|tyX+jZuXK|>X9aPwi-qL9^jv9 z0o!hju0hazKzyvFy~6^-wmbg-jakP4@>msU_;!OO%$0zbRnrj#9LMc$iURRH}+sB{a4 z-7b}W0hJdRJm=P+(m~L5*>ve#h$rSCeLH`J0kZTgXt$#732o#XWJ8U$QpEoNWNQ-I zld>63RAQU2K{to>sI@3?Z6-L7dK%I34VvF+(cjvDS}-3Yy7!{vy7@AuuN&#t(cMS) zWFsc5YS1nApXSGc%kwGpH2ZCu{({IHG>S2k*!HOO3xeWpKIa~6eUIx!!unsZ{W?*r zX-=~I&G$&@^s2fv&u=8QGaild=eed@XGzxNw_~Jtlh6mHuont53^zt7JN6LPb z?icDd?j+Upzd9lr)8Vbqy`yo91DZAo_Nwv{G&EE^OG28|4)gDs;_nXdpu| z&M675f@re+lICqbR>#fq15UnHu+<}!3?zgSf1MiaEp2@T^n74|{^zw^)nXUgaF#L& z7eBq?Emeu(I$Xml>&iO$k(j=|?DVPu79; z^%>$gjAjYcV4=op#w z=nu~$BLaaZqJ4(xqwU@rXe46Js#9_Hs@@lozq0OaKK@aBi^I9LwBR7#^Phg z;wd~j=1nF*S8FQ~k4`BN-hy~?PdiEZx!WNhg;Vh1Flw5`nLj9(dhzR0_*nd!gdGf0 zfr^SV_AeSVXMuEspTqwEtw(Ts$ql+zxAB#{ogx!~B|kN^jp|d`LX0^qY~#mv9uEdXZMV zO%I!+P6t#Wfv9|5th!3LYz34O0Idt<`%akPavmK1nWRd3CNjaz#*Z0nZZR^S!-}Qh zh9^y#4<!FTq1wUOEuiikAJ(MR6E?CgJ?XmJZ83w6 zxfvB=`FE><{n|p0L9u+=dhYKL>s54divm3uinDF=X{6(#u>7jNk^cZ5b9W(!@}?{9 zKSuyZbO$(>`c$^V{w8-g9aK|vkOJM{=l6s8RF?eelO8eMkppcg&d$I9zs{hrO@{Ar z$@8~;K2gWzinXZUC5{>6cWEDB2r_^DRbI?6p8cHVOp3sI4U`$Jiryb7bv^ly1|aFs z^*B9hZ6au$^+@4}B0(`ssV8v*nokZqb0zD=7>x|7K3;j-&+D3ghFUYKhm3-kByc|W z87Kb$tx1l5Xykq&AWK~{4$fL%my7|^r==9X5lXPq$T(8OfsUNfR<=iVAK}Eg;PjRs z5^F4xw1{ota7XbI+w`sP5Kq5O)23);h?}_bvM(xg(DPh|mEyQOJ*nQc#ihi8;yA$a z#&AbU(bqh0X?>@A&icY0iGK_Oj*nB~b#?C8g^t;Dp z+*QW_rg#{~Zj_W{mc|jGStai5by_Xp)bx)vR7T0VGP%yuDu;xh%!^Uo+F&u$wR5)K zJ=3hFxEA_s=##ecn}-J+)LLha?5tYr{w4Q2XMOktaZi=mmFz0=$y;-&(iFq2Uq)D; zld1mzdW*$qwc92qDDD8`80%c*K0VXL2bGF9bmAQ23i3FX^ijPOm%bfNivTS@?rNM0RNVg!fGY{Py9MV|$uS>T{ z)K3c^h~wG>AbVMA|90N#mPQv*xA;J9ztU!pE;}gkIQU8JnhAD_ns}%?tGS5?q6eM{^;>i zT=?Tjlx1VOVn-v&G_1w!=VhV4rYTz-k-=g`R?x|w<4}_rT!H$U$dAVwQX-|>#3hri4-4{gP%dxlTu=DZKG7($T{@q{3{wC z8)*?v?C{+Tj0W<$(+`Yn8tBT_*NnOONQ;bOi!ziaeU6t@2Xf&3MM-R)UY@VhxhUHLXD+u#UyYYUXb#WYv6~lyVfFq}7HBNU| zTOB5;n|&kwt)PCCX|VZPICkn&cjsK@x8rRt=Gr8;6H3fR;1d`=l_~MolGcJK)^fo@ zmGaLNS=e6Ar!A~$cx4He?p7Rh{BxRy!A#oR^5-f6tj#yZnpLcFqX~h2xQy{lvhkLW z1lJk!Rb24f4>a0ll7#OkV^>`}WVcP3XOIP{yixnKww;^0+rp!tc_jK6k^>AbGx(t`YGYKCUe^@S@J>Y7^#;nj~*)IkV6qgE*2!3y*AM)cSM-O3{(z;r8!8 zTIV&t8ENrD-liNy?`O{o__Or8Zg|FlYCVgvYNO)(k!>)2F+6S{cFz+z5=E)S9=9 zEHxReT`lHe5!^#ADOuMzUx7+m{ zX)Pc*iZ8r>om0`gU#IDCTnVkN7D;pE;ymZlt7*O`vaphQXM*E0oPv?$1NEn8a-1j4 zdu(rbidD9@g3dp@{Xp~;CAbpss#@6xiP1MKqAiyK#ZAoQi&};`FrCE+QRlzpxB#un)>U8Wh7_coYXpWPpImTbl`}Tme2APLgU94 zGr{B?U3FYj|M#Avf`XtZCHbKnNoiE11*A7pa&(u3LlBUb*l18{Gz>PnW0RJS(J4|6 z>GF4f-~aAE_jT_%@AIy6p65B8PF^z-MujTGvE`Pv{`vI{pmhXabWphzuj5`xA-_wx z;|k4(RBNa$}Bw^pcEz$jtR!8_3yM|CkV>Ke&}BAj3vpAe<}7LF~N4cb@iv zlv($ze$)6HZ{yD~1>2ADT^?)?%dRz53h;vIR;RVshmwp0ptx8W0Hf}f>zA2T@3D4# zayD@)FB)o(V6TR!J#K)q==|v2E%ltk?>pHe68wS%^WDk)7#jf%(_?*4QKx51DUsJq ztSVL{!JB#Q+yZEmjI6~+(cE-Jl< z>7m=f@qQ#7==Xlak|k9wE>JJ~KZ;JCvE7u^7ELnO_8afFCu+w%d$@h%boO(vUo)o! zlEWoXJn@h3Kt(h=bhaT=Z9L;EFWc>!4n4g%hmqq?zXJJ>HG@mjsZ&xi@M9o?=ytBQ zXH)wGo$%InAN0C2sCQknLkyTIRgP{_?4_-?r2`#}_Ubm3_y=+OJnLKYQyd3TyW*Pa zvl~Eo)xTc^-%77mlMNQubuxcGj`61+ec$kC|DKi6onkpqVSnF=m*doum*SiHRP)L8 z$s*-TNy*PIw4Gt12XA37dT&?`|C8}9yT_`+j0Ly{2%c1Px$!lW#EIcJH}?;^@%OLx zbR3w3#*PF;p)&`w;Ac)3q|kU=IAP4 z1s|1(#PezK3jd}7vs^9kUR7J4lR~BlKg5m=KUO#yp=pF=)*}`#rA+$I3rF+y_7qV*eH@^F zAn2^EA}shXU{BdIH1_wNck_E=L;5U=6$_a9;8+W^z`n`7-XyR{*~%dLR%?QBS-yY0 z=D6|2<{@7d#$1&F{<0&!LkH^79p5#>?YMnq#SP>a<%!Pt;=%!;%-MxM5g24&TSRG8Mu03 z`RLDW-wGF7j_Z9&2+V)>hN{?m$3dKavmH*6BKZ>b3L-rcceJ2IyC?9y=`c2AaM6N8 z|LAt5+FFG~KQk}ANzrn+5K{+51@+f+N5{P~(vG?PhKwM(OF7iwq3;On51?-3>EXg4 zZ5Em<|CTq8IZfyv$h<}@fyN<&BNNk$!E1U5p2(XMdCXks2dG4Q@0et^DxZ)dnj2FG z@2F&##DnCs?Ew_y?v_u{mxa{6KXu8E@LLwczNPWu?H#)I7XjPU41V8P0CO!Q6kJYY58sMOR}A(P&ON!Py@O?epKkcVEHQGNrzQE$ef*JryY%=7}w%!BgdX3!k}DElSpRK< zPiL+^VQQbM_J&bz2N?GsxcP7#ubn3xLZ#M04yp3o<31{JZo0P7_x{R$Ypx0O-qD69 z%nnbXN^Hq)SSP4Y-jB}WZYo8wYezSBx!!9g6PllCFB$WB8on~OEqsL;hr;OQ_=$gD z8g+lau2rdLI@X%*k$C1462-s2CL(No*%GR)m%-ni6dX73*`yC4qB5K3TupTF82^ix z^jG2ZhK3C^QWKD5Tka18$?*xuYFa*(F<;z!blZiN`8PhiaOJ_f)UrS(z#hwCd^rVWP}0fn}FDx2wFCm=^lVRb?Tzt`faSb7295 zFCZ1?_1eE{wu&rq*38UQB)p?zj>0lS3f!7p67c&I~@&qn06DB}%!ng2=wd0?fg6N*bsOgI*gmo?!FTAE3f zS0^O0$le%Go)wI^XNo~=?}tX4+W2f0${Q*`1qm|4xPoJn7 zna2lnQ=zV!KXs@s{tziOG;o1d*%V(cE7(0om3 zJvbISPeeAqJE-Qqi@K@>SF8^B|A3(^j(_P9DP)VC)l6g$*#;H-y{QE5U8&agBkYL3 zy)Jb6#J5JK7ZH%Sl&O;yzxyCET=7Uix4dBO149j&*0vojCIPfA&<`Qh>+~))xtgy; z3@(=5Ckf92eLp3V&A(%P>Spm z#Qx=dtvSF=QC++>{jGRyY26Cavc(U6PVXBkZHKZU_@oqqFpcxE_c{DmQ_eDm6k+)b zSxKkEuD>I3hG_cAp*gykeG8CZAOhoh5N6L7w}=~GjqGRu;339*@47~X zKOk5IA2E9~J!qMFYkM(v{qV!EFu1$N*JkTSrbt)d5E{*wfOUK?Ox^Z7TFGQ$5r{I0NrXnq{v;$9i?g#R}w?>KaeshL}z z1I2vUzoxLSTT26&cIyXAJO*z4y%SoZ>DL}q>-t}or-&zvDQsIO;R*P~EiSI>QI#w9 z6Vs|hci1hhjuoz-)2`&AL!jtB;7^ifU-niEFn9cv)pXXD@S~IetP6zS<+Bx>yQ7?< zURy+Gesz~>x9cvH?uZHzq-M7iFt_qtiXT+`546Hj&2`I;YurUi{ZVP7qw>xm1LtJ9 zX1;?RmWSyz*;rP+6mDWFeJvU%&xY3N5xtfe1bBnrl{%U7@$GD(Q-Wsv* z0S@ayNL?ncUH9v(2Hy5p`v*G6P#18HdY5W#l`0+sd`m9!6iA@8@xWF%tFb}Nv9M|B z|9NzXyWHYT?dU3aAoucET~-@;Vv>7#`o9RM&kzOY_e?QZ3VHy7v%dfr<@7MnR;o<# z^7jH`v1mW+M1MnR!UCH#gDsV6pQ$;+wzB&!l>YZJCPQi)ockwv1~wv7b$R@fp!5ki zjvB#E*GKJu*p)ax?#xd<^%U*AFytmEr8))H9z}mWEA4>|v@Q|de1IMQ`rnX#Ml4E` zffTTbud%nQt<0XQE>i$AmlqiJJ-?AV=N8ui3M;%di~>R)zgdrgm}GbUGR0@7CX0o_ z>po5AxC?9Br!A2JsvZw+^761s?pks+3u`Mg2k&5G zKFDrftl68$A*gd`_xHU;1Sx6Etq;_VA6>y=9C_Bj>Ir2lDNk$hd&*5I_uzGrz>dgbZcdf!d^q*zjkIY{>JNh0kSlEe`!m@;A6)9peMFrVUm=cf4iwWIt?>sMnw zw0kbj2w`cE%?F6~&@XbY1IVg{e-&ugmGj@FJ_yW5x60!Mw(2JJw)82$`@ON3I_ioOv*63DD0vFrhqHtG^6d-y+ zXbqpWK>M3J)nDSgBG{%kdNsIuNUcVt{T=;;vnbNsRkuUrcpwQ$W^sIRzSGK$b(-4R z5!`N;7Du10UVZ%p=M5kam{|G)bPj^b{*BpE9kz*(#1qK|eU8t^FV?2wd^<$yBZSC2 zi|5PrZ;QrD%AJ+A|4ExgdjgnbtJQZegyYpbXGh*ze|rjvNeY~q%Gk&EPTf9LO%xE< z6x+bv{laLppj`oJn;edGaR_9mfEAdQRt(}c{j*N+3jymVr{#gUj3(iA>9Rr|Pn5p& zDTAo6ud~P_E93{T7r~#GP5h1bxwlLOv3KMHj@Jl7)RujG&gK)|=ja73Mz2@kbxfwC zrYmhYFYJqT{9P0Ka#@eUm`s{SW_Z-gwF5Sa<&h0A^+%!cz3knH@REDvyNT}pN9))2 znON%4-?dt@GR0kX@z1T9c@c~h4Bj{~FmPI$9`kuKq4sC#i!(b-FC8`XKSU6@)(Y0K z+$C^X<81m}Q(!jv%4eO1^^SD{Ks;103trt(6I;9g=lBra05^ZjZJI=MTW0^tvHPrl z*7A~LDdL!J4Z*KofhLT8*^GJay){!?;ZQG4UA@RQCelYcv`~8FbHmAW9B|W*#|G#d z--HR*PvmJQDamL&l8P&PqDn}b!?(O>a@l#cSzRYwoEWRZ{@+&3q!R_@oP#vx>LkFt z6kwU}*;|oNp_=8iM5OZJF|#9^ao3{n(1f-GAEYTVwG5nHTPFBGRa)}on94|TN*;T# zvh=ua7T&KY8jNM`B5u_MoU$}$cu|?XGB8tB(Bq}X{eUA9e`lk1oV9S`%FL4g;hh}1 z_U0E4*!c;!mWY-r7|P|c>YNnqwv>ZCyPQmxt=gjcagrdBPyN*_gp5e_7R1=95c$q8 zCc?z|6R4+p*wPeAFbINNTzXY9`>UzcQNq4-_az7`UFJ3P0!(m?Th(Oc&cNxYt)^%& zpt_UdvOpBAz>v#h!?!17Im!x0KQB0p*I^ATCr)w2n-z{3B92W?j>b}tJH11}GY<>u zt@re4a0tBxeoA}ktg)i|4?^mULRIBtj!LK6glkki zXC}vltOy)&!;vL#24HSXQ(nXS_|A)okBk${s%`SLQ)%g7IL7a?lHz^f)=@c7bfPt$ zAF=%4l4sr>cuUFX>w7Ww!+R7`Voo<4qsJ9eMwg;GG|%PFD#>VtpG!(g9k0d^*Cvnk zF1+IS!-*C;5o=N!8DKHLO&NGC^K6ax}ana?Yv5GeLk`-cY41N{$QWT{7ht zSS;XJLpm+{*uJwHm_5N#F9Ot14d@5X%+|Q*>bvlO6a{r)GtmolboO`B1H?3B5%r2e ziO5tQIg`2rYXdZCiI|I(HpOpG%Pl~WNVj{#RU3495isR=mY_CIE73c@D%mXA{gmYG=b7>ed4nH^-E1r-bhYm|B|54zUvh5r zc(ESE=Cr@cQCTyRg%pk4U6*Gc`?N&)@k&{=QThP)Q8Z%&SVL%xKcFYY@R?|YTn+8J zq(!8|_W9T^d6|e&R{;#4Nh->a$AuRQiMIX^94G*+{Uxn&J2571wD!VF+rw>8#9N95 zi>8do?iXR^W0mM&WeJ+P+-5j~W!;JR;IAAm)R;IQZrn24yRQb&C$;b2b8QLm&~s#Z zj%jL-G#D-4|JG(`kR}V`Cme!K3;TP1P0V2t;rva4?VORtQbq`opIiCMe>z4hP3Ham zjKX>(wy0fSFR=WgsQQ^OReQWd?O;41;iofW-dQq-5+17EPn`7Hhrvx62#e_g$umn1 ze!Bd9kp`xTzhCyss8&G@cC0OWq@gDfh^Fw2NZP+&KmE{^!mYfUYx1w{tU)_hi14{M z+eGRl;&-7q`DbJuc5R&62=QQ!&&>Uf|Kne>ZO*w z^9Id_OHG`e{T+P>T#@qKp16_lm&CNTv}hWd$vLsf1}0%;MTIru^P5_SxF< zsgb5g%@LCTg>4i61I-A?$AKcV>x}hK79v_JDTO#0;Y;ZZd*_s!`9CHtu7aGQ3Ja>l zQlxlhIA`qkYA#8dY2_I}0y1cdC0|38yU=3|14M@Gy))C^Lq(LBF9mka4FWAF!4AgZ z3;WsDA1D{AMPL5%MaYrJHR;%q19#sXM)%bN#TKr;cQz}-e&6@yO5@=^*Ws%iV}kGr z(+xKEhXq?KTSqvI?&Ou8b%}*TQ)T+yb(#~G2<6Xv@PPL@kr~Ngf?ZU($u~{uV{z_3 z+uSkx(z&J=qjn6*!KBi&sol>eq(clP^cW;{vI0GTj$B2IiW&(9<85aNLuB_fgp7w$ zu@|;ug*k=Rp8NfD=}*`Lvh<}@;slOTllq-BO8AN3nD<$0C3k=yrlPKs*eeX{ZKGYF zd&pa~7!XNx1R&f=&770WBsQ}8JzvAOhe^a$vQ>!=&Z>)7bl)oY$bKG-9NbD`V& zR$&P9Z<7F2iOwO}SPs6J>3)f07t#*0O4cL{N>Gm(TR?_5s?XV27}kDn;h#bxIW%`& z7Zr(PTR0deYwu;V3DEnI6SF2fG#70DHd3@mW~!WH8r}U>xU#I2q_}qHG-X;PI&+uK zl7Z-Yypt*t=|A=SP}Zuim7Zd<@=g{gl(X|}?T1`Krm zo=46@h8pIY;)Pvj|Gb`sZ6Y0vX$xO7Tjd;Vpz_RJwZV5bN1=s}UW-s;Vth_x=qAt{ zRBV(LHZ$o$+A9%YnK4^YXyUn%sA8#sczt4Eq!}0YKpQ}*%g!Sd-^SL|Gn-P?=E9T~|bLa+74$niVa72q0zjL@zQ|Lkflqq_v z`bR)K8i*tfq_yLo(g{4NQ3y~22z#9}Qiyi-+Q>$3L#UYqP#SOIH*6A!i1>2*zm2tM zT3dSfJWYI?sIH;x`=kk;)|#^C^lT0yVT|ehewlFUq1mkHREiS``gV*9=+Eq>etixg zG}MTbj4*=8)d~@PZEiKbh~e8gJhMRl?~)#n1Io1BMC!8ubZk21!u;%kmOJYKiQp&x z?OI8b2KjJ!3QyNFU>3M$TRO8gK<>DzDU*JERS30|_7OlKze_cY7ApR|V}+rK06z)5 zorq!}!F%rrAR$ZznTv z>u`avv&n2LQHSE$d2U*fyIhMXg%#29XPYktD${|yK~}V;5%yW|mGB4OQz2IMs_@t~ zz;VE$e@WlQTPGc!VkdEHIYphglJ}ebl8>pR^vZKYs%nr|_8Mi*@j#eMj70ZhE!q2qfl&=7M zy!>SH_cNf6#_l@GU+}e96~E0JRhEeWp=j@Gc^4&)&~=XS^TbuwS5J3wyGZEwiaeD# z^KC1x0etFSbo?#``9;7c?xV_kNV89Qg-maTS?j_M2Gf5(+1`!+?~ue!Z&UEh$n2H? z{k^yUtv!Xrbp_$+&3Pb(_U0n54@HR8n=9~`;iS)XBrkD?m2O6a;PAatA{S53S8TSB zOzd1x-Q(}*2G4h7F560JaH;L@t$Ea$ii!=l(*a(;zoRqEzDJu!h)uz`x0(=+$R#pKYL-T>&?VZlIkL87D3Fmj zHY!0o{@txvZaTTry}9!#%eKQGVF{+u8^><6GZtVmU9j1U^w^DnXYPdFP-A=vrqP!q z-w`;Vt7pGKWYU{6er1%`XJk#Ky%@6x5j(J79Qpgm z41}hVaG8@2=1?HllmMj6w4(9W{nZ$E(ELDHLgBN00~Ti}<*i=ZzSTY6RRX6f@*dYx z1MW0Z@$Ezlq{tkbN4w7m@6KId3QNAw0WvQO_AWcSKl7f0VwX1y+u2DvB<*;gtC&ua zSFA4Zo;h>S-EZq?7)2J%GP zetpbLI{Z-W1A$M~y=aWI&omK!NDgSB#!=f`@*>o+K=0#9t2T6tlRud-$H1HRz4v6f z!})&*NeezY3WHsQ5aB8vG*c*QSDwY*IJjI#mZoo-^u&6q#GXlf+}W~S!KU3yZorg6 za6T8_uSEwXQchoc)&R6U1 S|LeASH6`gFspRPX&Hf+8SBlaA literal 0 HcmV?d00001 diff --git a/ui/public/icoimg.png b/ui/public/icoimg.png new file mode 100644 index 0000000000000000000000000000000000000000..9653c36799b84086ca0153d1f9945a531a742d10 GIT binary patch literal 2287 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%0D6Y9O*b+KQ3Z6Hzu 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ⅅ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¥wl{P7b0Rp^M|NIvDrUmeErY5Se=zQHgs%my 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 literal 0 HcmV?d00001 diff --git a/ui/public/loginimg.jpg b/ui/public/loginimg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3da63a7bf482f6d036835d2dd30a7f1c3f67c18c GIT binary patch literal 217431 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 X?z73ew=qD)?z(7ZeWAwmdffj2=JkE| literal 0 HcmV?d00001 diff --git a/ui/public/logo.png b/ui/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9653c36799b84086ca0153d1f9945a531a742d10 GIT binary patch literal 2287 zcmdUxSy)p^7RPVW7rbFJ1Zi5J;i}09vI${T(A=`(uT_tXa&;> z34$OrAPv&Epb$hdtgHuW^l*+UFkrBSa%KppjtO4Bp^9>zSJ*P;;!O6 zZ{@aT#$*l^cF7I~ogX)hzHjjQkmcrD(FKk2SFRM*6jL9H=;ySyg>P`s9ddk@DhMwW z1L*eei62nR=n-i|7J!cdZ8L5rgkMDD+JY>OmbaTuFK*ojFM`4h7h*y5JF%Llhax7G~7V?9NjIc8@N@1c;Xwk~}V97(b&iE8|& zP|_l4D%6_&Oq&Y8^94+Z9a&)f4gnDR-`Edgu`Am64d$%Ffs5t+=B-#FCY{{2=z+w} zjBPz{vjH?wgOZnwC3Ah9ZlezV9J=B5kmaIxs!ce*S-tQ0pbT9oI`OpSbv1i3;(Bs% zvtXl0!j;RiiX0-BX#E;(DO{ryGb8K`dN0ul{UGCek)pT_tV_cE@{-^nhaelR>4Xr| zX13Sfmyr%)-FK*cuD_Uk(aXZ8Ja#^1_pp<|un;LP<47ob(g@K6+yOlFYl&(h0gES{ zXn+U+^cBnTFdig2!Jzvi3J1PD=6eCaf$C5?DUkr@#99aZg9acVy&U{M+6ouKW_Q;X zRz97Ut{vphIC8d95?$at_*vR)#q8?iB);AJTbM`Z$)=N+KYj9Cx@#EI!PwbyfrW>@xd*^iZ;+EfQ+IgrMkK;#q07R~r8;?Q@Q2k@eDGQA(#<)u z_nFEsm{Dn;qnVEPrGAz1$end!f1)fXiXKst1{%LNGvX?d%;Wi-%SXpox;jSipy#C? zWeqZ2O{6uaXF~+DBQi-#gs?@$keC~LB6tQBQJ=zEQ}KJKM0T#GA$M`(^w&QnzkaP+ z2`AEe(;x_p_-qy}zt^+z))ke&l^y;Nd&J5fJ)|#_$|KaL3p_S}cDq8x&hngj%`p;B zJ=%oEcj()S;n^l=$+-aBZ06mR}hns(Ab^todIRu}9W;fRGA$4`28+oSR^sU>1>)?BZ!SfBL3 zd}VHYNj!Wk>$xCs;Pi?8u_+K+P<7JRv87S2uRlITomO?7Uv<Ib1R{*dCyC3*OY5!R=BG1J#Qg)ZBj|RV~A4&gN{%sXP8X9nV4Id1$Wzd3o4(F2XBjb5yty{NZ)u`>p+wzh8 zGyjqcuf|4m?aR%AC1Lx(VP@>FXAF(Z(-ToL%WIB6fEj;0GO)`B(9Y|u>P(PG4n0z! z>k1$*0vrA5c<9`AOZR+CSrh7+hMRDp+jrWO9!z&_N9qfB07_QLJ14~?OE+qdI|D#S z*)Dwv*b(_wMiep!COB43+u|WoPjMlMMB`;v__1|yU~c$B_y3vOzr=rrZFuTKI>#!# zWYy+$3jyQ7vx9{!Rjw47T8|r$)g-DPD!%L^*7l6sjuXi0EVVMJt_y+JCaCF>+YK^4 z!&3oK6CJVLql|kaGWh`!-i*vGNIOF)Ds!$^7&}uk6Hk2N6>?y2V~h1p-qWx(V3u*5{-Do$_P2dI104clO|(^uon!i ztXb5?L;jArG1-{7cewaStuRDqlO!r00Fs?o)*XcvgDRzIBOgPwjziuk#&vD?XsR)W zXzNt%s~FC#3ZAe6F+@i%TLwD \ No newline at end of file diff --git a/ui/renovate.json b/ui/renovate.json new file mode 100644 index 0000000..57fe916 --- /dev/null +++ b/ui/renovate.json @@ -0,0 +1,3 @@ +{ + "extends": ["github>unjs/renovate-config"] +} diff --git a/ui/scripts/create.cjs b/ui/scripts/create.cjs new file mode 100644 index 0000000..fa45555 --- /dev/null +++ b/ui/scripts/create.cjs @@ -0,0 +1,76 @@ +const { existsSync } = require('fs') + +const { showDir, showExt, moduleTypes } = require('./shared/base.cjs') + +/** + * 自动创建 + * @param {import('plop').NodePlopAPI} plop + */ +function create(plop) { + let exist = null + let modulePath = null + + plop.setGenerator('controller', { + description: '自动创建', + prompts: [ + { + name: 'type', + type: 'list', + default: 'component', + message: '您希望生成哪种类型的模块?', + choices: moduleTypes, + }, + { + name: 'isMarkdown', + type: 'confirm', + message: '是否 markdown 类型?', + default: false, + // 如果是 page 类型需要询问是否为 markdown 类型 + when({ type }) { + return type === 'page' + }, + }, + { + name: 'name', + type: 'input', + message({ type }) { + return `请输入 ${type} 的命名` + }, + }, + { + name: 'shouldReset', + type: 'confirm', + default: false, + message({ type }) { + return `目标 ${type} 已存在,是否重置?` + }, + // 确认模块是否已存在,是则询问是否重置 + when({ type, name, isMarkdown }) { + const dir = showDir(type) + const ext = showExt(type, isMarkdown) + modulePath = `src/${dir}/${name}.${ext}` + exist = existsSync(modulePath) + if (exist) { + return true + } + }, + }, + ], + actions(answer) { + const { type, shouldReset } = answer + if (exist && !shouldReset) { + throw new Error(`${type} 创建失败`) + } + return [ + { + type: 'add', + force: true, + path: `../${modulePath}`, + templateFile: `./template/${type}.hbs`, + }, + ] + }, + }) +} + +module.exports = create diff --git a/ui/scripts/deps-fresh.cjs b/ui/scripts/deps-fresh.cjs new file mode 100644 index 0000000..f9bae6a --- /dev/null +++ b/ui/scripts/deps-fresh.cjs @@ -0,0 +1,36 @@ +const { execSync } = require('child_process') + +/** + * 自动更新依赖 + * @param {import('plop').NodePlopAPI} plop + */ +function depsFresh(plop) { + plop.setGenerator('controller', { + description: '自动更新依赖', + prompts: [ + { + name: 'type', + type: 'list', + default: 'patch', + message: '你希望发布一个什么版本?', + choices: ['patch', 'minor', 'major'], + }, + { + name: 'shouldWrite', + type: 'confirm', + default: false, + message: '是否直接更新?', + }, + ], + actions(answer) { + const { type, shouldWrite } = answer + + execSync(`npx taze ${type} ${shouldWrite ? '-w' : ''}`, { + stdio: 'inherit', + }) + return [] + }, + }) +} + +module.exports = depsFresh diff --git a/ui/scripts/release.cjs b/ui/scripts/release.cjs new file mode 100644 index 0000000..d6009d1 --- /dev/null +++ b/ui/scripts/release.cjs @@ -0,0 +1,65 @@ +const { createConsola } = require('consola') +const { execSync } = require('child_process') +const { repository } = require('../package.json') +const { gray } = require('kolorist') +const { simpleGit } = require('simple-git') +const logger = createConsola().withTag('release') + +/** + * 自动发版 + * @param {import('plop').NodePlopAPI} plop + */ +async function release(plop) { + const git = simpleGit() + + const remotes = await git.getRemotes(true) + + const urls = remotes.map((r) => { + return r.refs.push + .replace('git@github.com:', 'https://github.com/') + .replace('.git', '') + }) + let allowRelease = false + if (!urls.includes(repository.url)) { + allowRelease = await logger.prompt(`是否发布到 ${gray(repository.url)}`, { + type: 'confirm', + }) + } else { + allowRelease = true + } + + if (allowRelease) { + plop.setGenerator('controller', { + description: '自动发版', + prompts: [ + { + name: 'type', + type: 'list', + default: 'patch', + message: '你希望发布一个什么版本?', + choices: [ + 'patch', + 'minor', + 'major', + 'prepatch', + 'premajor', + 'preminor', + 'prerelease', + ], + }, + ], + actions(answer) { + const { type } = answer + execSync( + `npx changelogen --${type} --release && git push --follow-tags`, + { + stdio: 'inherit', + }, + ) + return [] + }, + }) + } +} + +module.exports = release diff --git a/ui/scripts/remove.cjs b/ui/scripts/remove.cjs new file mode 100644 index 0000000..d42ffb5 --- /dev/null +++ b/ui/scripts/remove.cjs @@ -0,0 +1,75 @@ +const { unlinkSync } = require('fs') +const { readdir } = require('fs/promises') +const { basename } = require('path') +const { showDir, moduleTypes } = require('./shared/base.cjs') + +/** + * 自动删除 + * @param {import('plop').NodePlopAPI} plop + */ +function remove(plop) { + plop.setActionType('remove', (answers) => { + const { name, type, shouldRemove } = answers + const dir = showDir(type) + const target = `./src/${dir}/${name}` + if (shouldRemove) { + return unlinkSync(target) + } + throw new Error(`删除 ${target} 失败`) + }) + + plop.setGenerator('controller', { + description: '自动删除', + prompts: [ + { + name: 'type', + type: 'list', + message: '请选择您要删除的类型', + async choices() { + const entrys = await readdir('./src', { + recursive: false, + withFileTypes: true, + }) + const dirs = entrys.filter((e) => e.isDirectory()) + const types = moduleTypes.filter((type) => { + const dir = showDir(type) + return dirs.includes(`./src/${dir}`) + }) + return types + }, + }, + { + name: 'name', + type: 'list', + message({ type }) { + return `请选择您要删除的 ${type} 模块` + }, + async choices({ type }) { + const dir = showDir(type) + const entrys = await readdir(`src/${dir}`, { + recursive: false, + withFileTypes: true, + }) + let modules = entrys.filter((e) => e.isFile()) + modules = modules.map((module) => { + return basename(module) + }) + return modules + }, + }, + { + name: 'shouldRemove', + type: 'confirm', + default: false, + message: '再次确认是否删除', + }, + ], + actions: [ + { + type: 'remove', + }, + ], + }) +} + +module.exports = remove diff --git a/ui/scripts/safe-init.cjs b/ui/scripts/safe-init.cjs new file mode 100644 index 0000000..e43486a --- /dev/null +++ b/ui/scripts/safe-init.cjs @@ -0,0 +1,113 @@ +const { resolve } = require('path') +const { gray, green } = require('kolorist') +const { createConsola } = require('consola') +const { existsSync, lstatSync } = require('fs') +const { removeSync, emptyDirSync } = require('fs-extra') + +function slash(path) { + return path.replace(/\\/g, '/') +} + +function r(dir) { + return slash(resolve(__dirname, '../', dir)) +} + +const entrys = [ + 'src/components', + 'src/api', + 'mock', + 'layouts/default.vue', + 'src/pages/index.vue', + 'src/pages/about.md', + 'src/pages/echarts.vue', + 'src/stores', + 'locales/简体中文', + 'locales/English', +] + +const resolvedEntrys = entrys.map((entry) => r(entry)) + +/** + * 安全初始化 + * @param {import('plop').NodePlopAPI} plop + */ +function safeInit(plop) { + const logger = createConsola().withTag('safe:init') + + logger.warn('实验性功能') + + plop.setGenerator('controller', { + description: '安全初始化', + prompts: [ + { + name: 'yes', + type: 'confirm', + message: '是否安全的初始化?', + default: false, + }, + { + name: 'cleanStyles', + type: 'confirm', + message: '是否清理 styles?', + default: false, + }, + ], + actions(answer) { + if (!answer.yes) { + return [] + } + + if (answer.cleanStyles) { + resolvedEntrys.push(r('src/styles')) + } + + console.log() + + // 这里不用异步是因为 plop action 只支持同步 + resolvedEntrys.forEach((e) => { + if (!existsSync(e)) { + return + } + const entry = lstatSync(e) + if (entry.isFile()) { + removeSync(e) + logClean(e) + return + } + + if (entry.isDirectory()) { + emptyDirSync(e) + logClean(e) + } + }) + + return [ + { + type: 'add', + force: true, + path: '../src/pages/index.vue', + templateFile: './template/page.hbs', + data: { + name: 'index', + isMarkdown: false, + }, + }, + { + type: 'add', + force: true, + path: '../src/layouts/default.vue', + templateFile: './template/layout.hbs', + data: { + name: 'default', + }, + }, + ] + }, + }) +} + +function logClean(path) { + console.log(`${green('√ clean')} ${gray(path)}`) +} + +module.exports = safeInit diff --git a/ui/scripts/shared/base.cjs b/ui/scripts/shared/base.cjs new file mode 100644 index 0000000..644cc43 --- /dev/null +++ b/ui/scripts/shared/base.cjs @@ -0,0 +1,41 @@ +/** + * 获取扩展名 + * @param {string} type 模块类型 + * @param {boolean} isMarkdown 是否是 markdown,默认为 false + * @returns {string} 扩展名 + */ +const showExt = (type, isMarkdown = false) => { + const isTs = type === 'api' || type === 'store' || type === 'module' + const ext = isMarkdown ? 'md' : isTs ? 'ts' : 'vue' + return ext +} + +/** + * 模块类型 + */ +const moduleTypes = [ + 'api', + 'page', + 'store', + 'layout', + 'module', + 'component', + 'composable', +] + +/** + * 获取目录 + * @param {string} type 类型 + */ +const showDir = (type) => { + if (type === 'api') { + return 'api' + } + return `${type}s` +} + +module.exports = { + showExt, + showDir, + moduleTypes, +} diff --git a/ui/scripts/template/api.hbs b/ui/scripts/template/api.hbs new file mode 100644 index 0000000..725fdcb --- /dev/null +++ b/ui/scripts/template/api.hbs @@ -0,0 +1,2 @@ +import axios from "axios" + diff --git a/ui/scripts/template/component.hbs b/ui/scripts/template/component.hbs new file mode 100644 index 0000000..3ca24eb --- /dev/null +++ b/ui/scripts/template/component.hbs @@ -0,0 +1,11 @@ + + + + + diff --git a/ui/scripts/template/composable.hbs b/ui/scripts/template/composable.hbs new file mode 100644 index 0000000..d55de55 --- /dev/null +++ b/ui/scripts/template/composable.hbs @@ -0,0 +1,5 @@ +import { ref } from "vue" + +export default {{name}} = () => { + +} diff --git a/ui/scripts/template/layout.hbs b/ui/scripts/template/layout.hbs new file mode 100644 index 0000000..fbc03c4 --- /dev/null +++ b/ui/scripts/template/layout.hbs @@ -0,0 +1,4 @@ + diff --git a/ui/scripts/template/module.hbs b/ui/scripts/template/module.hbs new file mode 100644 index 0000000..fd294b5 --- /dev/null +++ b/ui/scripts/template/module.hbs @@ -0,0 +1,6 @@ +import type { App } from "vue" + + +export default (app: App) => { + +} diff --git a/ui/scripts/template/page.hbs b/ui/scripts/template/page.hbs new file mode 100644 index 0000000..6b160cb --- /dev/null +++ b/ui/scripts/template/page.hbs @@ -0,0 +1,17 @@ +{{#if isMarkdown}} +## {{pascalCase name}} Page + +> The page is markdown file +{{else}} + + + + + +{{/if}} diff --git a/ui/scripts/template/store.hbs b/ui/scripts/template/store.hbs new file mode 100644 index 0000000..099829f --- /dev/null +++ b/ui/scripts/template/store.hbs @@ -0,0 +1,9 @@ +import { defineStore } from 'pinia' + +export default defineStore('{{name}}', { + state() { + return {} + }, + getters: {}, + actions: {} +}) diff --git a/ui/src/App.vue b/ui/src/App.vue new file mode 100644 index 0000000..d8656bc --- /dev/null +++ b/ui/src/App.vue @@ -0,0 +1,9 @@ + + + diff --git a/ui/src/api/itemApi.ts b/ui/src/api/itemApi.ts new file mode 100644 index 0000000..a3ac937 --- /dev/null +++ b/ui/src/api/itemApi.ts @@ -0,0 +1,35 @@ +import { frontRequest } from '~/composables/frontRequest' + + +export function itemPageApi(data: any) { + return frontRequest.get("/api/item/page",{params:data}) +} + +/** + * 查看详情 + * @param id + */ +export function itemInfoApi(id: number) { + return frontRequest.get(`/api/item/${id}`) +} +/** + * 购买 + */ +export function buyItemApi(data: any) { + return frontRequest.post(`/api/order`,data) +} + +/** + * 用户修改订单 + */ +export function updateOrderItemApi(data: any) { + return frontRequest.put(`/api/order`,data) +} + + +/** + * 购买列表 + */ +export function buyPageApi(data: any) { + return frontRequest.get(`/api/order/page`,{params:data}) +} diff --git a/ui/src/api/slidesApi.ts b/ui/src/api/slidesApi.ts new file mode 100644 index 0000000..f3090e6 --- /dev/null +++ b/ui/src/api/slidesApi.ts @@ -0,0 +1,7 @@ + +/** + * 轮播图 + */ +export function slidesPageApi(data: any) { + return frontRequest.get(`/api/slides/page`,{params:data}) +} diff --git a/ui/src/api/user/adminUserApi.ts b/ui/src/api/user/adminUserApi.ts new file mode 100644 index 0000000..3c0060d --- /dev/null +++ b/ui/src/api/user/adminUserApi.ts @@ -0,0 +1,50 @@ +import { adminRequest } from '~/composables/adminRequest' + +/** + * 验证码 + * @param data + */ +export function captchaAdmin(uid: Number) { + return adminRequest.get("/captcha",{ + params:{uuid:uid} + }) +} + + +/** + * 登录 + * @param data + */ +export function loginAdmin(data: any) { + return adminRequest.post("/login", data) +} +/** + * 注册 + * @param data + */ +export function registerAdmin(data: any) { + return adminRequest.post("/register", data) +} + +/** + * 退出 + */ +export function logoutAdmin() { + return adminRequest.post("/logout") +} + + +/** + * 获取用户信息 + * @param userId + */ +export function userInfoAdmin() { + return adminRequest.get("/sys/user/info") +} +/** + * 修改密码 + * @param userId + */ +export function updatePasswordAdmin(data:any) { + return adminRequest.put("/sys/user/password",data) +} diff --git a/ui/src/api/user/adminUserUtils.ts b/ui/src/api/user/adminUserUtils.ts new file mode 100644 index 0000000..148dc3c --- /dev/null +++ b/ui/src/api/user/adminUserUtils.ts @@ -0,0 +1,14 @@ +import { getUuid } from '~/utils/utils' + + +/** + * 获取验证码图 + */ +export function getCaptchaUrl(){ + const uuid = getUuid() + captchaAdmin(uuid) + return { + uid: uuid, + captchaUrl:import.meta.env.VITE_ADMIN_API_BASE_URL + `/captcha?uuid=${uuid}` + } +} diff --git a/ui/src/api/user/frontUserApi.ts b/ui/src/api/user/frontUserApi.ts new file mode 100644 index 0000000..f2fe488 --- /dev/null +++ b/ui/src/api/user/frontUserApi.ts @@ -0,0 +1,32 @@ + +/** + * 注册 + * @param data + */ +export function registerFront(data: any) { + return frontRequest.post("/api/user/register", data) +} + +/** + * 获取用户信息 + * @param userId + */ +export function userInfoFront() { + return frontRequest.get("/api/user/userInfo") +} + +/** + * 修改用户信息 + * @param data + */ +export function userUpdateFront(data:any) { + return frontRequest.put("/api/user/update", data) +} + + +/** + * 退出 + */ +export function logoutFront() { + return frontRequest.post("/api/user/logout") +} diff --git a/ui/src/components/Heads.vue b/ui/src/components/Heads.vue new file mode 100644 index 0000000..3742f7d --- /dev/null +++ b/ui/src/components/Heads.vue @@ -0,0 +1,149 @@ + + + diff --git a/ui/src/components/ImageUpload.vue b/ui/src/components/ImageUpload.vue new file mode 100644 index 0000000..5dff863 --- /dev/null +++ b/ui/src/components/ImageUpload.vue @@ -0,0 +1,88 @@ + + + + diff --git a/ui/src/components/nav/Navigation.vue b/ui/src/components/nav/Navigation.vue new file mode 100644 index 0000000..aa17d5a --- /dev/null +++ b/ui/src/components/nav/Navigation.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/ui/src/composables/adminRequest.ts b/ui/src/composables/adminRequest.ts new file mode 100644 index 0000000..9dbd182 --- /dev/null +++ b/ui/src/composables/adminRequest.ts @@ -0,0 +1,53 @@ +import axios from 'axios' + +export const adminRequest = axios.create({ + baseURL: import.meta.env.VITE_ADMIN_API_BASE_URL, +}) +// 添加请求拦截器 +adminRequest.interceptors.request.use( + function (config) { + // 在发送请求之前做些什么 + const token = userStore().adminToken + if (token !== null || token !== undefined) { + //添加header + config.headers.token = token + } + // 在发送请求之前做些什么 + return config + }, + function (error) { + toast.warning(error.message ?? '未知请求错误') + // 对请求错误做些什么 + return Promise.reject(error) + }, +) +// 添加响应拦截器 +adminRequest.interceptors.response.use( + function (response) { + if (response.data.code){ + const code = response.data.code + switch (code) { + case 500: + toast.error(response.data.msg) + return Promise.reject(response.data.msg) + case 401: + toast.error(response.data.msg) + window.open(`/login`, '_self') + return Promise.reject(response.data.msg) + default: + return response.data + } + } + return response.data + }, + function (error) { + let { msg, message } = error.response?.data ?? {} + if (!msg && message) { + msg = message + } + toast.warning(msg) + // 超出 2xx 范围的状态码都会触发该函数。 + // 对响应错误做点什么 + return Promise.reject(error) + }, +) diff --git a/ui/src/composables/env.ts b/ui/src/composables/env.ts new file mode 100644 index 0000000..68a98a1 --- /dev/null +++ b/ui/src/composables/env.ts @@ -0,0 +1,26 @@ +/** + * 是否在开发环境 + * @description 在 `if (IN_DEV)` 块中的代码在 `vite build` 时会自动编译掉,不会带到生产环境 + * @example + * ```ts + * if (IN_DEV) { + * console.log("开发环境") + * } + * ``` + */ +export const IN_DEV = import.meta.env.DEV +/** + * 是否在生产环境 + * @example + * if (IN_PROD) { + * console.log("生产环境") + * } + */ +export const IN_PROD = import.meta.env.PROD + +/** + * 不带尾部 / 的 BASE_URL + */ +export const BASE_URL_WITHOUT_TAIL = import.meta.env.BASE_URL.endsWith('/') + ? import.meta.env.BASE_URL.slice(0, -1) + : import.meta.env.BASE_URL diff --git a/ui/src/composables/frontRequest.ts b/ui/src/composables/frontRequest.ts new file mode 100644 index 0000000..062d0fe --- /dev/null +++ b/ui/src/composables/frontRequest.ts @@ -0,0 +1,78 @@ +import axios from 'axios' + +export const frontRequest = axios.create({ + baseURL: import.meta.env.VITE_API_FRONT_BASE_URL, +}) +// 添加请求拦截器 +frontRequest.interceptors.request.use( + function (config) { + const token = userStore().frontToken + + console.log("111"+token) + + if (token !== null || token !== undefined) { + //添加header + config.headers.Authorization = token + } + // 在发送请求之前做些什么 + return config + }, + function (error) { + toast.warning(error.message ?? '未知请求错误') + // 对请求错误做些什么 + return Promise.reject(error) + }, +) +// 添加响应拦截器 +frontRequest.interceptors.response.use( + function (response) { + if (response.data.code){ + const code = response.data.code + switch (code) { + case 500: + ElMessage.error(response.data.msg) + return Promise.reject(response.data.msg) + case 401: + window.open(`/login`, '_self') + ElMessage.error("请重新登录~") + break + default: + return response + } + } + if (response.data) { + return response.data + } + return response + }, + function (error) { + const status = error.response?.status + let { msg, message } = error.response?.data ?? {} + + if (!msg && message) { + msg = message + } + + if (!msg) { + switch (status) { + case 400: + msg = '参数错误' + break + case 500: + msg = '服务端错误' + break + case 401: + window.location.href = "/dsds" + break + default: + msg = error.message ?? '未知响应错误' + break + } + } + + toast.warning(msg) + // 超出 2xx 范围的状态码都会触发该函数。 + // 对响应错误做点什么 + return Promise.reject(error) + }, +) diff --git a/ui/src/composables/path.ts b/ui/src/composables/path.ts new file mode 100644 index 0000000..f37ee08 --- /dev/null +++ b/ui/src/composables/path.ts @@ -0,0 +1,7 @@ +/** + * base 安全的路径解析 + * @param path 路径 + */ +export function safeResolve(path: string) { + return BASE_URL_WITHOUT_TAIL + path +} diff --git a/ui/src/composables/toast.ts b/ui/src/composables/toast.ts new file mode 100644 index 0000000..2b0bb48 --- /dev/null +++ b/ui/src/composables/toast.ts @@ -0,0 +1,3 @@ +import 'vue-toastification/dist/index.css' +import { createToastInterface } from 'vue-toastification' +export default createToastInterface() diff --git a/ui/src/composables/useLanguage.ts b/ui/src/composables/useLanguage.ts new file mode 100644 index 0000000..24ef719 --- /dev/null +++ b/ui/src/composables/useLanguage.ts @@ -0,0 +1,12 @@ +export default () => { + const { t, locale } = useI18n() + const toggleLocale = () => { + locale.value = locale.value === 'zh-CN' ? 'en' : 'zh-CN' + } + + const language = computed(() => + locale.value === 'zh-CN' ? '中文' : 'English', + ) + + return { t, language, toggleLocale } +} diff --git a/ui/src/composables/useTyped.ts b/ui/src/composables/useTyped.ts new file mode 100644 index 0000000..4f89fb8 --- /dev/null +++ b/ui/src/composables/useTyped.ts @@ -0,0 +1,14 @@ +import { init } from 'ityped' + +export default (strings: string[]) => { + const typedRef = ref() + + onMounted(() => { + init(typedRef.value!, { + strings, + showCursor: false, + disableBackTyping: true, + }) + }) + return typedRef +} diff --git a/ui/src/composables/useVisits.ts b/ui/src/composables/useVisits.ts new file mode 100644 index 0000000..829cbbe --- /dev/null +++ b/ui/src/composables/useVisits.ts @@ -0,0 +1,25 @@ +import { useRequest } from 'vue-request' + +export function useVisits() { + // 开发环境下 + if (import.meta.env.DEV) { + const visits = useStorage('visits-kv', 0) + if (typeof visits.value === 'number') { + visits.value++ + } + return visits + } + + const { data: visits } = useRequest(async function () { + try { + const n = await http.get('https://visits-kv.deno.dev/tov-template', { + baseURL: '', + }) + return Number(n) ?? 0 + } catch (error) { + console.error(error) + return 0 + } + }) + return visits ?? 0 +} diff --git a/ui/src/layouts/admin.vue b/ui/src/layouts/admin.vue new file mode 100644 index 0000000..2b9ba0e --- /dev/null +++ b/ui/src/layouts/admin.vue @@ -0,0 +1,164 @@ + + + + diff --git a/ui/src/layouts/default.vue b/ui/src/layouts/default.vue new file mode 100644 index 0000000..63dcaaf --- /dev/null +++ b/ui/src/layouts/default.vue @@ -0,0 +1,50 @@ + + + + diff --git a/ui/src/layouts/front.vue b/ui/src/layouts/front.vue new file mode 100644 index 0000000..7822ae4 --- /dev/null +++ b/ui/src/layouts/front.vue @@ -0,0 +1,34 @@ + + + + + + + diff --git a/ui/src/layouts/frontUserInfo.vue b/ui/src/layouts/frontUserInfo.vue new file mode 100644 index 0000000..70eb466 --- /dev/null +++ b/ui/src/layouts/frontUserInfo.vue @@ -0,0 +1,60 @@ + + + + + + + +{ +"meta": { +"layout": "front" +} +} + diff --git a/ui/src/layouts/notFound.vue b/ui/src/layouts/notFound.vue new file mode 100644 index 0000000..4437b0a --- /dev/null +++ b/ui/src/layouts/notFound.vue @@ -0,0 +1,3 @@ + diff --git a/ui/src/main.ts b/ui/src/main.ts new file mode 100644 index 0000000..43371d5 --- /dev/null +++ b/ui/src/main.ts @@ -0,0 +1,19 @@ +// https://unocss.dev/ 原子 css 库 +import '@unocss/reset/tailwind-compat.css' // unocss reset +import 'virtual:uno.css' +import 'virtual:unocss-devtools' +// 你自定义的 css +import './styles/main.css' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import * as ElementPlusIconsVue from '@element-plus/icons-vue' +import zhCn from 'element-plus/dist/locale/zh-cn' + +import App from './App.vue' +const app = createApp(App) +for (const [key, component] of Object.entries(ElementPlusIconsVue)) { + app.component(key, component) +} +app.use(ElementPlus, { locale: zhCn }) + +app.mount('#app') diff --git a/ui/src/pages/[...notFound].vue b/ui/src/pages/[...notFound].vue new file mode 100644 index 0000000..c029377 --- /dev/null +++ b/ui/src/pages/[...notFound].vue @@ -0,0 +1,58 @@ + + + + + + + +{ + "meta": { + "title": "404", + "layout": "notFound" + } +} + diff --git a/ui/src/pages/admin/adminuser.vue b/ui/src/pages/admin/adminuser.vue new file mode 100644 index 0000000..26586cf --- /dev/null +++ b/ui/src/pages/admin/adminuser.vue @@ -0,0 +1,292 @@ + + + diff --git a/ui/src/pages/admin/block.vue b/ui/src/pages/admin/block.vue new file mode 100644 index 0000000..beb9f29 --- /dev/null +++ b/ui/src/pages/admin/block.vue @@ -0,0 +1,192 @@ + + + + + diff --git a/ui/src/pages/admin/certificates.vue b/ui/src/pages/admin/certificates.vue new file mode 100644 index 0000000..63314aa --- /dev/null +++ b/ui/src/pages/admin/certificates.vue @@ -0,0 +1,405 @@ + + + + + diff --git a/ui/src/pages/admin/index.vue b/ui/src/pages/admin/index.vue new file mode 100644 index 0000000..1943906 --- /dev/null +++ b/ui/src/pages/admin/index.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/ui/src/pages/admin/log.vue b/ui/src/pages/admin/log.vue new file mode 100644 index 0000000..5c0b864 --- /dev/null +++ b/ui/src/pages/admin/log.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/ui/src/pages/audit/index.vue b/ui/src/pages/audit/index.vue new file mode 100644 index 0000000..27cd494 --- /dev/null +++ b/ui/src/pages/audit/index.vue @@ -0,0 +1,421 @@ + + + + + + + +{ +"meta": { +"layout": "front" +} +} + diff --git a/ui/src/pages/front/index.vue b/ui/src/pages/front/index.vue new file mode 100644 index 0000000..6c881c9 --- /dev/null +++ b/ui/src/pages/front/index.vue @@ -0,0 +1,33 @@ + + + + + +{ +"meta": { +"layout": "front" +} +} + diff --git a/ui/src/pages/front/info/[id].vue b/ui/src/pages/front/info/[id].vue new file mode 100644 index 0000000..d880dcb --- /dev/null +++ b/ui/src/pages/front/info/[id].vue @@ -0,0 +1,41 @@ + + + + + +{ +"meta": { +"layout": "front" +} +} + diff --git a/ui/src/pages/front/list/index.vue b/ui/src/pages/front/list/index.vue new file mode 100644 index 0000000..c6509d0 --- /dev/null +++ b/ui/src/pages/front/list/index.vue @@ -0,0 +1,33 @@ + + + + + + +{ +"meta": { +"layout": "front" +} +} + diff --git a/ui/src/pages/index.vue b/ui/src/pages/index.vue new file mode 100644 index 0000000..46ec91c --- /dev/null +++ b/ui/src/pages/index.vue @@ -0,0 +1,341 @@ + + + + + + + +{ +"meta": { +"layout": "front" +} +} + diff --git a/ui/src/pages/load/index.vue b/ui/src/pages/load/index.vue new file mode 100644 index 0000000..6a6feaa --- /dev/null +++ b/ui/src/pages/load/index.vue @@ -0,0 +1,432 @@ + + + + + + + + + +{ +"meta": { +"layout": "front" +} +} + diff --git a/ui/src/pages/log/index.vue b/ui/src/pages/log/index.vue new file mode 100644 index 0000000..14ee3c4 --- /dev/null +++ b/ui/src/pages/log/index.vue @@ -0,0 +1,451 @@ + + + + + + + +{ +"meta": { +"layout": "front" +} +} + diff --git a/ui/src/pages/login.vue b/ui/src/pages/login.vue new file mode 100644 index 0000000..1e7734b --- /dev/null +++ b/ui/src/pages/login.vue @@ -0,0 +1,189 @@ + + + + +{ +"meta": { +"layout": "notFound" +} +} + diff --git a/ui/src/pages/look/index.vue b/ui/src/pages/look/index.vue new file mode 100644 index 0000000..ff33ca3 --- /dev/null +++ b/ui/src/pages/look/index.vue @@ -0,0 +1,446 @@ + + + + + + + +{ +"meta": { +"layout": "front" +} +} + diff --git a/ui/src/pages/register.vue b/ui/src/pages/register.vue new file mode 100644 index 0000000..132d524 --- /dev/null +++ b/ui/src/pages/register.vue @@ -0,0 +1,166 @@ + + + + +{ +"meta": { +"layout": "notFound" +} +} + diff --git a/ui/src/pages/user/index.vue b/ui/src/pages/user/index.vue new file mode 100644 index 0000000..a7e633b --- /dev/null +++ b/ui/src/pages/user/index.vue @@ -0,0 +1,93 @@ + + + + + + +{ +"meta": { +"layout": "frontUserInfo" +} +} + diff --git a/ui/src/plugins/mock.ts b/ui/src/plugins/mock.ts new file mode 100644 index 0000000..bfef337 --- /dev/null +++ b/ui/src/plugins/mock.ts @@ -0,0 +1,21 @@ +/** + * 该模块主要给生产时的 mock 用,一般情况下你并不需要关注 + */ +import { createFetchSever } from '../../presets/shared/mock' + +const shouldCreateServer = + !import.meta.env.DEV && import.meta.env.VITE_APP_MOCK_IN_PRODUCTION === 'true' + +// 生产环境时才创建服务 +if (shouldCreateServer) { + const mockModules: any[] = [] + const modules = import.meta.glob('../../mock/*.ts', { + eager: true, + }) + Object.values(modules).forEach((v: any) => { + if (Array.isArray(v.default)) { + mockModules.push(...v.default) + } + }) + createFetchSever(mockModules) +} diff --git a/ui/src/plugins/nprogress.ts b/ui/src/plugins/nprogress.ts new file mode 100644 index 0000000..c512b07 --- /dev/null +++ b/ui/src/plugins/nprogress.ts @@ -0,0 +1,9 @@ +import { router } from './router' +import { useNProgress } from '@vueuse/integrations/useNProgress' + +// https://vueuse.org/integrations/useNProgress/ +const { start, done } = useNProgress() + +router.beforeEach(() => start()) + +router.afterEach(() => done(true)) diff --git a/ui/src/plugins/pinia.ts b/ui/src/plugins/pinia.ts new file mode 100644 index 0000000..96ff6f1 --- /dev/null +++ b/ui/src/plugins/pinia.ts @@ -0,0 +1,7 @@ +import persistedstate from 'pinia-plugin-persistedstate' + +const pinia = createPinia() + +pinia.use(persistedstate) + +export default pinia diff --git a/ui/src/plugins/router.ts b/ui/src/plugins/router.ts new file mode 100644 index 0000000..6fba3a9 --- /dev/null +++ b/ui/src/plugins/router.ts @@ -0,0 +1,39 @@ +import { setupLayouts } from 'virtual:meta-layouts' +import { createRouter, createWebHistory } from 'vue-router' +import { routes as fileRoutes } from 'vue-router/auto-routes' +declare module 'vue-router' {} +// 重定向 BASE_URL +fileRoutes.flat(Infinity).forEach((route) => { + route.path = safeResolve(route.path) +}) +export const router = createRouter({ + history: createWebHistory(), + routes: setupLayouts(fileRoutes), +}) +// 路由拦截 +router.beforeEach((to, from, next) => { + // 前台处理逻辑 + if (to.fullPath.includes("/front")){ + if (to.fullPath.includes("/front/info")){ + console.log("公告管理~") + //判断有没有登录 + if (!userStore().frontIsLogin){ + ElMessage.warning("请先登录~") + next('/login'); + } + } + } + /////////////////////////////////////////////////////////////////////////////// + // 管理员全部限制 + else if (to.fullPath.includes("/admin")){ + console.log("管理员认证~") + //判断有没有登录 + if (!userStore().adminIsLogin){ + ElMessage.warning("认证失败~") + next('/login'); + } + } + next(); +}); + +export default router diff --git a/ui/src/plugins/title.ts b/ui/src/plugins/title.ts new file mode 100644 index 0000000..f7bbeb0 --- /dev/null +++ b/ui/src/plugins/title.ts @@ -0,0 +1,17 @@ +import { router } from './router' + +useTitle( + () => { + const { path, meta } = router.currentRoute.value + if (meta.title) { + return `· ${meta.title}` + } + if (path === '/') { + return '· home' + } + return path.replaceAll('/', ' · ') + }, + { + titleTemplate: `${import.meta.env.VITE_APP_TITLE} %s`, + }, +) diff --git a/ui/src/stores/navStore.ts b/ui/src/stores/navStore.ts new file mode 100644 index 0000000..0d060d1 --- /dev/null +++ b/ui/src/stores/navStore.ts @@ -0,0 +1,16 @@ +import { defineStore } from 'pinia' + +export default defineStore('navStore', { + state() { + return { + adminPath: "/", + frontPath: "/front/", + } + }, + actions: { + inc() { + + }, + }, + persist: true, +}) diff --git a/ui/src/stores/userStore.ts b/ui/src/stores/userStore.ts new file mode 100644 index 0000000..50ca2b5 --- /dev/null +++ b/ui/src/stores/userStore.ts @@ -0,0 +1,20 @@ +import { defineStore } from 'pinia' + +export default defineStore('userStore', { + state() { + return { + adminIsLogin: false, + frontIsLogin: false, + adminToken: "", + frontToken: "", + adminUserInfo:{}, + frontUserInfo:{} + } + }, + actions: { + inc() { + + }, + }, + persist: true, +}) diff --git a/ui/src/styles/main.css b/ui/src/styles/main.css new file mode 100644 index 0000000..d8b3a9c --- /dev/null +++ b/ui/src/styles/main.css @@ -0,0 +1,51 @@ +html.dark { + background: #100c2a !important; +} + +.prose { + scroll-behavior: smooth; +} + +#nprogress { + pointer-events: none; +} + +/*进度条配色*/ +#nprogress .bar { + @apply bg-blue-700 bg-opacity-75; + background: repeating-linear-gradient(90deg, #00dc82 0, #34cdfe 50%, #0047e1); + position: fixed; + z-index: 1031; + top: 0; + left: 0; + width: 100%; + height: 2px; +} + +/* +* 全局滚动条 +*/ +::-webkit-scrollbar { + width: 8px; + height: 11px; + background-color: rgb(246, 247, 248); +} + +::-webkit-scrollbar-thumb { + background-color: rgb(233, 236, 239); + border-radius: 10px; +} + +::-webkit-scrollbar-track { + background-color: rgb(246, 247, 248); + border-radius: 10px; +} + +html.dark ::-webkit-scrollbar, +html.dark ::-webkit-scrollbar-track { + background-color: #212529; +} + +html.dark ::-webkit-scrollbar-thumb { + background-color: #343a40; +} diff --git a/ui/src/utils/utils.ts b/ui/src/utils/utils.ts new file mode 100644 index 0000000..f0e4820 --- /dev/null +++ b/ui/src/utils/utils.ts @@ -0,0 +1,61 @@ + +export const getAdminList = () => { + const routes = [ + { + path: "/admin", + name: "首页", + icon: "House", + }, + { + path: "/admin/certificates", + name: "证书管理", + icon: "Postcard", + }, + { + path: "/admin/block", + name: "上链信息", + icon: "Postcard", + }, + { + path: "/admin/log", + name: "申请记录", + icon: "Postcard", + }, + { + path: "/admin/adminuser", + name: "用户管理", + icon: "Notification", + } + ]; + return routes; +} +export const getFrontList = () => { + const routes = [ + { + path: "/", + name: "证书信息", + icon: "Dashboard", + }, + { + path: "/load", + name: "证书提交", + icon: "Dashboard", + }, + { + path: "/log", + name: "审核记录", + icon: "ShoppingCart", + }, + { + path: "/audit", + name: "证书验证", + icon: "Warehouse", + }, + { + path: "/look", + name: "查看证书", + icon: "Warehouse", + } + ] + return routes; +} diff --git a/ui/tsconfig.json b/ui/tsconfig.json new file mode 100644 index 0000000..b31d1f8 --- /dev/null +++ b/ui/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "strict": true, + "jsx": "preserve", + "target": "esnext", + "module": "esnext", + "sourceMap": true, + "skipLibCheck": true, + "isolatedModules": true, + "jsxImportSource": "vue", + "esModuleInterop": true, + "lib": ["esnext", "dom"], + "resolveJsonModule": true, + "moduleResolution": "node", + "useDefineForClassFields": true, + "baseUrl": ".", + "paths": { + "~/*": ["src/*"], + "@/*": ["src/*"] + } + }, + "include": [ + "srcipts", + "presets", + "src/**/*.ts", + "src/**/*.d.ts", + "src/**/*.tsx", + "src/**/*.vue", + "./vite.config.ts" + ], + "exclude": ["node_modules", "dist"] +} diff --git a/ui/uno.config.ts b/ui/uno.config.ts new file mode 100644 index 0000000..936f25d --- /dev/null +++ b/ui/uno.config.ts @@ -0,0 +1,24 @@ +import { + defineConfig, + presetAttributify, + presetIcons, + presetTypography, + presetUno, + transformerVariantGroup, + transformerDirectives, +} from 'unocss' + +import presetAutoprefixer from './presets/autoprefixer' + +export default defineConfig({ + transformers: [transformerDirectives(), transformerVariantGroup()], + presets: [ + presetAttributify(), + presetIcons({ + autoInstall: true, + }), + presetUno(), + presetTypography(), + presetAutoprefixer(), + ], +}) diff --git a/ui/vite.config.ts b/ui/vite.config.ts new file mode 100644 index 0000000..90972a4 --- /dev/null +++ b/ui/vite.config.ts @@ -0,0 +1,6 @@ +import Tov from './presets' +import { defineConfig } from 'vite' + +export default defineConfig({ + plugins: [Tov()], +})