diff --git a/.dockerignore b/.dockerignore index 4a09a04c..21a426fe 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,17 +1,33 @@ -node_modules -dist -npm-debug.log -.env -.env.local -.env.*.local -.git -.gitignore -.vscode -.idea -*.md -!README.md -test -coverage -.cache -admin +# Shrink build context while keeping v1 workspace +.git/ +.vscode/ +.idea/ +.cursor/ +.trae/ +**/*.log +**/.env* +**/.cache/ +**/coverage/ +**/tmp/ + +# Exclude large directories that are not needed for build +admin-vben/ +niucloud-java/ +niucloud-php/ +wwjcloud-nest/ +sql/ +tools/ +tools-v1/ +wwjcloud-assets/ + +# Exclude k6 performance test files (1.7GB) but keep the rest of wwjcloud-nest-v1 +wwjcloud-nest-v1/docker/k6/ +wwjcloud-nest-v1/node_modules/ +wwjcloud-nest-v1/dist/ + +# Exclude other build artifacts +**/*.tgz +**/*.tar.gz +**/.DS_Store +**/Thumbs.db \ No newline at end of file diff --git a/.gitignore b/.gitignore index 71e83765..351a83ad 100644 --- a/.gitignore +++ b/.gitignore @@ -132,4 +132,4 @@ build/ # Lock files (keep only one) package-lock.json yarn.lock -# Keep pnpm-lock.yaml \ No newline at end of file +# Keep pnpm-lock.yaml \ No newline at end of file diff --git a/.trae/reports/common-layer-governance-report.md b/.trae/reports/common-layer-governance-report.md index c9bd239b..34ce45bc 100644 --- a/.trae/reports/common-layer-governance-report.md +++ b/.trae/reports/common-layer-governance-report.md @@ -26,7 +26,7 @@ - **删除模块**: `lang` 模块 - **删除原因**: PHP项目中不存在对应模块 - **删除内容**: - - `g:\wwjcloud-nestjs\wwjcloud\src\common\lang\` 目录及所有子文件 + - `./src/common/lang/` 目录及所有子文件 - 包含 `en/` 和 `zh-cn/` 语言包目录 #### 2. 创建缺失模块 diff --git a/.trae/rules/development_constraints.md b/.trae/rules/development_constraints.md index 5911deaf..7e78cb5e 100644 --- a/.trae/rules/development_constraints.md +++ b/.trae/rules/development_constraints.md @@ -9,7 +9,7 @@ ### 1. 🗄️ 数据库表结构约束 **主要数据库文件:** -- **WWJCloud 主数据库**:[/g:/wwjcloud-nestjs/sql/wwjcloud.sql](../sql/wwjcloud.sql) +- **WWJCloud 主数据库**:[./sql/wwjcloud.sql](../sql/wwjcloud.sql) **核心表结构:** - `sys_user` - 系统用户表 (uid, username, password, real_name, last_ip, last_time, create_time, login_num, status, delete_time) @@ -208,7 +208,7 @@ export class UsersController { ``` 请严格按照开发约束规范进行开发: -/g:/wwjcloud-nestjs/.trae/rules/development_constraints.md +./.trae/rules/development_constraints.md 当前任务:[具体描述您的开发需求] diff --git a/.trae/rules/nestjs_file_generation_standards.md b/.trae/rules/nestjs_file_generation_standards.md index 6ee0171c..fdb87268 100644 --- a/.trae/rules/nestjs_file_generation_standards.md +++ b/.trae/rules/nestjs_file_generation_standards.md @@ -13,16 +13,16 @@ ## 📋 数据源依据(必须严格遵循) ### 1. 数据库结构依据 -- **唯一数据源**: `g:\wwjcloud-nestjs\sql\wwjcloud.sql` +- **唯一数据源**: `./sql/wwjcloud.sql` - **字段定义**: 严格按照SQL表结构定义实体字段 - **字段类型**: 完全对应数据库字段类型 - **字段约束**: 包括NOT NULL、DEFAULT、COMMENT等 ### 2. PHP业务逻辑依据 -- **控制器方法**: `niucloud-php\niucloud\app\adminapi\controller\` -- **服务层逻辑**: `niucloud-php\niucloud\app\service\` -- **模型定义**: `niucloud-php\niucloud\app\model\` -- **验证规则**: `niucloud-php\niucloud\app\validate\` +- **控制器方法**: `./niucloud-php/niucloud/app/adminapi/controller/` +- **服务层逻辑**: `./niucloud-php/niucloud/app/service/` +- **模型定义**: `./niucloud-php/niucloud/app/model/` +- **验证规则**: `./niucloud-php/niucloud/app/validate/` ### 3. Java框架参考标准 - **Spring Boot命名规范**: 文件后缀、类命名、方法命名 diff --git a/.trae/rules/project_rules.md b/.trae/rules/project_rules.md index 8718e8ae..60d73dc2 100644 --- a/.trae/rules/project_rules.md +++ b/.trae/rules/project_rules.md @@ -44,7 +44,7 @@ ### 绝对禁止的AI行为 1. **🚫 禁止自创业务逻辑** - 所有业务逻辑必须严格基于PHP项目真实代码 -2. **🚫 禁止假设数据结构** - 所有数据结构必须基于 `g:\wwjcloud-nestjs\sql\wwjcloud.sql` 真实表结构 +2. **🚫 禁止假设数据结构** - 所有数据结构必须基于 `./sql/wwjcloud.sql` 真实表结构 3. **🚫 禁止使用默认值** - 所有字段、方法、配置必须基于PHP项目真实值 4. **🚫 禁止编写骨架代码** - 不允许生成空方法、TODO注释或占位符代码 5. **🚫 禁止写死数据** - 不允许硬编码任何业务数据或配置 @@ -53,11 +53,11 @@ 8. **🚫 禁止跳过验证** - 每个生成的文件都必须经过严格验证 ### 必须遵循的数据源 -- **数据库结构**: `g:\wwjcloud-nestjs\sql\wwjcloud.sql` (唯一权威数据源) -- **PHP控制器**: `niucloud-php\niucloud\app\adminapi\controller\` (API接口定义) -- **PHP服务层**: `niucloud-php\niucloud\app\service\` (业务逻辑实现) -- **PHP模型**: `niucloud-php\niucloud\app\model\` (数据模型定义) -- **PHP验证器**: `niucloud-php\niucloud\app\validate\` (数据验证规则) +- **数据库结构**: `./sql/wwjcloud.sql` (唯一权威数据源) +- **PHP控制器**: `./niucloud-php/niucloud/app/adminapi/controller/` (API接口定义) +- **PHP服务层**: `./niucloud-php/niucloud/app/service/` (业务逻辑实现) +- **PHP模型**: `./niucloud-php/niucloud/app/model/` (数据模型定义) +- **PHP验证器**: `./niucloud-php/niucloud/app/validate/` (数据验证规则) ### AI开发质量标准 - **数据库字段映射准确率**: 100% diff --git a/AI_FUTURE_PLAN.md b/AI_FUTURE_PLAN.md deleted file mode 100644 index edd1c4dc..00000000 --- a/AI_FUTURE_PLAN.md +++ /dev/null @@ -1,263 +0,0 @@ -# 🚀 WWJCloud AI未来发展规划 - -> 基于用户愿景:**让AI管理框架,自愈系统,自动调优,智能运维** - -## 🎯 核心愿景 - -### 🔮 终极目标:AI自主管理框架 -- **自愈系统**: 自动检测异常 → 自动修复/扩容 -- **性能调优**: 智能优化数据库查询、缓存策略 -- **预测运维**: 预测问题、主动优化 -- **自主学习**: 理解业务模式,自动调整框架行为 - -### 🚀 短期目标:AI代码生成平台 -- **非开发者友好**: 普通用户描述需求就能生成完整addon -- **一键部署**: AI生成 → 自动编译 → 自动部署 -- **插件生态**: 自动化插件市场,一键安装使用 - -## 🏗️ 技术实现路径 - -### 📊 功能模块优先级 - -| 功能模块 | 技术难度 | 开发周期 | 商业价值 | 优先级 | -|----------|----------|----------|----------|--------| -| **AI代码生成引擎** | ⭐⭐⭐ | 3个月 | ⭐⭐⭐⭐⭐ | 🔴 核心MVP | -| **自动编译链** | ⭐⭐ | 1个月 | ⭐⭐⭐⭐ | 🟡 第二步 | -| **自动部署** | ⭐⭐⭐ | 2个月 | ⭐⭐⭐⭐⭐ | 🟡 第二步 | -| **插件生态市场** | ⭐⭐ | 2个月 | ⭐⭐⭐⭐ | 🟢 第三步 | -| **AI自愈系统** | ⭐⭐⭐⭐⭐ | 6个月+ | ⭐⭐⭐⭐⭐ | 🔵 长期目标 | - -## 🎪 差异化竞争优势 - -### 🔍 市场定位分析 - -#### **大厂AI工具的局限性** -``` -❌ GitHub Copilot: 通用代码补全,不懂企业框架 -❌ Google/阿里AI: Java导向,NestJS支持不足 -❌ 字节Coze: Bot构建,不是脚手架开发 -❌ 传统方案: 外包3-6个月,自研还需学习1-2个月 -``` - -#### **WWJCloud的核心优势** -``` -✅ 专注NestJS企业级框架生态 -✅ 原生多租户支持 + AI生成 -✅ 中国本地化生态集成(微信、支付宝) -✅ 面向非开发者的低代码平台 -✅ 30分钟 vs 传统3-6个月的时间优势 -``` - -## 🚀 分阶段实施计划 - -### Phase 1: AI代码生成引擎 (核心MVP) -**目标**: 用户描述需求 → AI生成完整addon插件 - -**实现场景**: -``` -用户输入: "我想要一个积分商城插件" - -AI生成输出: -- 📁 entities/points-product.entity.ts (积分商品实体) -- 📁 services/points-exchange.service.ts (积分兑换服务) -- 📁 controllers/admin/points-admin.controller.ts (管理端API) -- 📁 controllers/api/points-shop.controller.ts (前台商城API) -- 📁 dto/create-points-product.dto.ts (数据传输对象) -- 📁 views/admin/points-admin.html (管理界面) -- 📁 views/api/points-shop.html (商城界面) -``` - -**技术特色**: -- 🎯 **业务理解**: AI理解商城、支付、库存等业务逻辑 -- 🏗️ **框架适配**: 自动生成NestJS + TypeORM + 多租户代码 -- 🔒 **安全集成**: 自动集成认证、权限、数据隔离 -- 🎨 **UI生成**: 同步生成管理端和前端界面 - -### Phase 2: 自动化部署链 -**目标**: 代码生成 → 一键部署到生产环境 - -**部署流程**: -``` -1. AI生成TypeScript代码 ✅ -2. 自动编译检查 → dist/ ✅ -3. 自动打包 → Docker镜像 ✅ -4. 自动部署 → K8s集群 ✅ -5. 自动测试 → 集成测试 ✅ -6. 自动上线 → 用户可用 ✅ -``` - -**部署亮点**: -- 🔄 **热部署**: 零停机更新插件 -- 📊 **灰度发布**: 自动检测兼容性 -- 🔍 **健康检查**: 部署后自动验证功能 -- 📈 **性能监控**: 自动收集性能指标 - -### Phase 3: 插件生态市场 -**目标**: 用户可以在市场购买/下载AI生成的插件 - -**市场功能**: -``` -🛍️ 插件商店: -- 📂 分类浏览(商城、CRM、ERP、OA等) -- 🔍 智能搜索(按行业、功能、复杂度) -- 🎮 在线演示(一键体验插件效果) -- 💾 一键安装(自动集成到现有项目) - -📈 生态运营: -- ⭐ 用户评价系统 -- 📊 使用量排行榜 -- 💰 插件交易平台 -- 🏆 开发者认证体系 -``` - -### Phase 4: AI自主管理系统 -**目标**: 插件运行后AI持续优化和改进 - -**自主管理能力**: -``` -🧠 AI自学习: -- 📊 分析用户行为模式 -- 🔧 自动优化界面布局 -- ⚡ 动态调整缓存策略 -- 📈 预测业务增长点 - -🔧 AI自修复: -- 🚨 异常自动检测和报警 -- 🔄 服务自动重启和恢复 -- 💾 数据库连接池自动调优 -- 🌐 CDN缓存策略智能调整 - -🎯 AI自优化: -- 📊 SQL查询自动优化建议 -- 💡 业务逻辑自动重构 -- 🚀 API接口自动版本升级 -- 📱 移动端自适应优化 -``` - -## 💰 商业模式创新 - -### 🎪 WWJCloud独有的盈利模式 - -#### 1. AI生成代币系统 -``` -💰 收费方式: -- 按插件复杂度收费(简单/中等/复杂) -- 按生成代码量收费(10K/100K/1M tokens) -- 按业务领域收费(基础版/企业版/行业版) -- 按使用频率收费(月度/年度订阅) -``` - -#### 2. 插件生态分成 -``` -📈 平台分成: -- 插件市场交易: 70%开发者 + 30%平台 -- 企业定制服务: 60%开发者 + 40%平台 -- 插件托管服务: 平台收取托管费用 -- 技术咨询服务: 平台认证专家服务 -``` - -#### 3. 企业级解决方案 -``` -🏢 目标客户: -- 小微企业: 需要业务功能但没开发能力 -- 外包公司: 快速交付客户需求 -- 独立开发者: 丰富自己的项目插件 -- 企业IT部门: 快速响应业务需求 -``` - -## 🎯 竞争优势构建 - -### 🏗️ 技术护城河 -``` -🔧 框架专精: -- 深度NestJS框架理解和最佳实践 -- 原生多租户架构支持和优化 -- 中国互联网生态深度整合 -- 针对中小企业的性能优化方案 - -📊 数据护城河: -- 积累大量业务插件模板和最佳实践 -- 收集不同行业部署模式和使用数据 -- 实时性能优化和用户反馈数据 -- AI训练数据和模型迭代积累 -``` - -### 🌐 生态护城河 -``` -🛍️ 插件生态: -- 建立完整的插件开发和交易生态 -- 认证插件开发者和技术服务商 -- 构建行业标准和技术规范 -- 提供插件质量检测和认证服务 - -🤝 合作伙伴: -- 第三方服务集成网络(支付、推送、存储等) -- 云服务商深度合作(AWS、阿里云、腾讯云) -- 企业级客户推荐网络 -- 技术社区和开发者生态建设 -``` - -## 📈 市场机会分析 - -### 🔥 技术趋势红利 -``` -💡 AI技术成熟度: 大厂AI能力大幅降价,接入成本低 -🚀 低代码需求增长: 中小企业数字化转型需求爆发 -🛠️ 开发者工具升级: 痛点明显,现有方案不够专业 -🗾 中国特色需求: 中国业务模式独特,国外框架适配不足 -``` - -### 📊 市场规模预测 -``` -🎯 目标市场规模: -- 中国中小企业: 4000万家企业 -- NestJS开发者: 10万+活跃开发者 -- 低代码市场: 年增长50%+ -- AI辅助开发: 初生市场,增长潜力巨大 -``` - -## 🚀 行动计划 - -### 🎯 立即行动(1个月内) -1. **市场调研**: 深入调研中小企业插件需求 -2. **技术验证**: 验证AI代码生成的技术可行性 -3. **MVP设计**: 设计第一个AI生成插件的完整流程 -4. **团队组建**: 招募AI和框架开发专家 - -### 📅 短期目标(3-6个月) -1. **核心功能开发**: 完成AI代码生成引擎MVP -2. **自动化部署**: 实现一键部署到测试环境 -3. **首批插件**: 生成10个常用业务插件模板 -4. **早期用户**: 获取50家企业级种子用户 - -### 🌟 中期目标(6-12个月) -1. **市场成熟**: 插件生态市场正式上线 -2. **AI自愈**: 初步实现部分AI自主管理功能 -3. **生态扩展**: 建立插件开发者和生态合作伙伴 -4. **技术领先**: 成为NestJS AI开发的标准平台 - -### 🔮 长期愿景(1-3年) -1. **行业标准**: 成为中国企业级AI开发框架的代名词 -2. **技术生态**: 构建完整的AI技术开发生态系统 -3. **全球化**: 扩展到东南亚和其他海外市场 -4. **技术输出**: 对外输出AI框架管理技术和经验 - ---- - -## 🎊 总结 - -WWJCloud AI未来规划的核心是:**先用AI赋能非开发者快速生成业务插件,再用AI持续管理和优化这些插件的运行**。 - -这个路线图兼具: -- ✅ **技术前瞻性**: 跟随AI技术发展趋势 -- ✅ **市场差异化**: 专注NestJS生态和中国市场需求 -- ✅ **商业可行性**: 清晰的盈利模式和市场定位 -- ✅ **实施可控性**: 分阶段实施,风险可控 - -**机会窗口**: 当前正是AI技术成熟、成本低廉、竞争较少的最佳时机 -**竞争优势**: 专精NestJS + 多租户 + 中国生态的差异化定位 -**长期价值**: 构建从代码生成到自主管理的完整AI生态系统 - ---- - -> 💡 **核心观点**: 我们不是在做另一个通用AI工具,而是在做一个**专注企业级NestJS开发的AI生态系统**! diff --git a/DEVELOPMENT_PLAN.md b/DEVELOPMENT_PLAN.md deleted file mode 100644 index 175f509e..00000000 --- a/DEVELOPMENT_PLAN.md +++ /dev/null @@ -1,120 +0,0 @@ -# WWJCloud 开发计划 - -## 开发顺序 - -按以下顺序完成各层开发: - -1. ✅ **Config 层** - 框架配置中心(已完成基础配置) -2. 🔄 **Core 层** - 基础设施层(进行中) -3. ⏳ **Vendor 层** - 第三方集成层(待开发) -4. ⏳ **Common 层** - 通用业务层(最后开发) - -## Core 层开发计划 - -基于 NestJS 官方文档实现以下模块: - -### 1. 缓存模块 (Cache Module) -**参考文档**: https://docs.nestjs.cn/techniques/caching -- [ ] 使用 `@nestjs/cache-manager` 集成缓存 -- [ ] 实现 Redis 缓存支持 -- [ ] 实现内存缓存支持 -- [ ] 提供统一的缓存接口 - -### 2. 队列模块 (Queue Module) -**参考文档**: https://docs.nestjs.cn/techniques/queues -- [ ] 使用 `@nestjs/bull` 集成队列 -- [ ] 实现任务队列处理 -- [ ] 实现延迟任务 -- [ ] 实现任务重试机制 - -### 3. 事件模块 (Event Module) -**参考文档**: https://docs.nestjs.cn/techniques/events -- [ ] 使用 `@nestjs/event-emitter` 实现事件系统 -- [ ] 实现事件发布 -- [ ] 实现事件订阅 -- [ ] 实现事件监听器 - -### 4. 安全模块 (Security Module) -**参考文档**: https://docs.nestjs.cn/security/authentication -- [ ] 实现 JWT 认证 -- [ ] 实现守卫 (Guards) -- [ ] 实现拦截器 (Interceptors) -- [ ] 实现管道 (Pipes) - -### 5. 调度模块 (Scheduler Module) -**参考文档**: https://docs.nestjs.cn/techniques/task-scheduling -- [ ] 使用 `@nestjs/schedule` 实现定时任务 -- [ ] 实现 Cron 任务 -- [ ] 实现间隔任务 -- [ ] 实现超时任务 - -### 6. 链路追踪模块 (Tracing Module) -- [ ] 实现请求追踪 -- [ ] 实现日志追踪 -- [ ] 实现性能监控 - -### 7. 上下文模块 (Context Module) -- [ ] 实现请求上下文 -- [ ] 实现用户上下文 -- [ ] 实现站点上下文 - -### 8. 初始化模块 (Init Module) -- [ ] 实现应用启动初始化 -- [ ] 实现健康检查 -- [ ] 实现优雅关闭 - -### 9. Swagger 文档模块 -**参考文档**: https://docs.nestjs.cn/recipes/swagger -- [ ] 使用 `@nestjs/swagger` 实现 API 文档 -- [ ] 实现文档配置 -- [ ] 实现文档访问控制 - -## Vendor 层开发计划 - -基于 NestJS 官方文档实现第三方集成: - -### 1. 支付模块 (Pay Module) -- [ ] 实现支付宝集成 -- [ ] 实现微信支付集成 -- [ ] 实现统一支付接口 - -### 2. 短信模块 (SMS Module) -- [ ] 实现阿里云短信 -- [ ] 实现腾讯云短信 -- [ ] 实现统一短信接口 - -### 3. 通知模块 (Notice Module) -- [ ] 实现邮件通知 -- [ ] 实现站内通知 -- [ ] 实现推送通知 - -### 4. 上传模块 (Upload Module) -- [ ] 实现本地上传 -- [ ] 实现云存储上传 -- [ ] 实现统一上传接口 - -### 5. 存储模块 (Storage Module) -- [ ] 实现阿里云 OSS -- [ ] 实现腾讯云 COS -- [ ] 实现七牛云存储 - -## Config 层完善计划 - -- [ ] 完善配置验证 -- [ ] 实现配置热更新 -- [ ] 实现配置缓存 - -## 开发规范 - -1. **必须查阅 NestJS 中文网相关文档** -2. **严格遵循 NestJS 官方最佳实践** -3. **使用 NestJS 官方推荐的包和模块** -4. **保持代码风格一致** -5. **添加完整的注释和文档** - -## 参考文档 - -- NestJS 中文文档: https://docs.nestjs.cn/ -- NestJS 英文文档: https://docs.nestjs.com/ -- NiuCloud Java 版本: /niucloud-java/ -- NiuCloud PHP 版本: /niucloud-php/ diff --git a/WWJCLOUD_IMPLEMENTATION_PLAN.md b/WWJCLOUD_IMPLEMENTATION_PLAN.md deleted file mode 100644 index 0aaf5750..00000000 --- a/WWJCLOUD_IMPLEMENTATION_PLAN.md +++ /dev/null @@ -1,584 +0,0 @@ -# 🚀 WWJCloud 企业级平台实现方案 - -> **基于 NestJS 的企业级平台,对标 Java NiuCloud 核心竞争力** - -## 📋 目录 - -1. [项目概述](#项目概述) -2. [当前状态评估](#当前状态评估) -3. [核心能力实现方案](#核心能力实现方案) -4. [架构设计方案](#架构设计方案) -5. [(当前)基础架构定版](#当前基础架构定版) -6. [技术路线图](#技术路线图) -7. [风险评估](#风险评估) - ---- - -## 🎯 项目概述 - -### 项目定位 -**WWJCloud** 是基于 NestJS v11 构建的企业级平台,旨在提供与 Java NiuCloud 相当的核心竞争力: - -1. **🏪 业务应用插件生态** - 第三方插件市场 -2. **🔄 业务代码生成器** - CRUD/前后端代码生成 -3. **🏢 SaaS多租户平台** - 企业级多租户解决方案 -4. **☁️ 云编译部署工具** - 一键云端部署 - -### 技术优势 -- ✅ **现代化架构** - TypeScript + NestJS -- ✅ **高性能** - Node.js + 14K QPS -- ✅ **开发体验** - 热重载 + 类型安全 -- ✅ **生态潜力** - JavaScript 开发者生态巨大 - ---- - -## 📊 当前状态评估 - -### ✅ 已完成基础架构 (定版) - -#### 🏗️ 基础架构层 (common/) -```typescript -src/common/ -├── cache/ # ✅ 缓存服务 - Redis/Memory -├── monitoring/ # ✅ 监控服务 - 性能指标 -├── logging/ # ✅ 日志服务 - Winston -├── exception/ # ✅ 异常处理 - 统一错误管理 -├── queue/ # ✅ 队列服务 - BullMQ -├── event/ # ✅ 事件系统 - EventEmitter2 -├── response/ # ✅ 响应处理 - 统一响应格式 -├── utils/ # ✅ 工具类 - 自研工具 -├── libraries/ # ✅ 第三方库封装 - dayjs/lodash等 -├── plugins/ # ✅ 基础插件 - captcha/qrcode/wechat -├── security/ # ✅ 安全模块 - JWT/RBAC -├── tracing/ # ✅ 链路跟踪 - OpenTelemetry -├── scheduler/ # ✅ 定时任务 - @nestjs/schedule -├── init/ # ✅ 初始化管理 - 模块启动 -├── context/ # ✅ 上下文管理 - 请求上下文 -├── swagger/ # ✅ API文档 - Swagger UI -├── database/ # ✅ 数据库 - TypeORM -├── pipes/ # ✅ 管道 - 验证和转换 -├── system/ # ✅ 系统服务 - 基础系统能力 -├── loader/ # ✅ 加载器 - 模块加载管理 -├── base/ # ✅ 基类 - 抽象基类 -└── interceptors/ # ✅ 拦截器 - AOP功能 -``` - -#### 🔌 第三方服务层 (vendor/) -```typescript -src/vendor/ -├── pay/ # ✅ 支付服务集成 -│ ├── wechat-pay/ # 微信支付 -│ ├── alipay/ # 支付宝 -│ └── offline-pay/ # 线下支付 -├── sms/ # ✅ 短信服务集成 -│ ├── aliyun/ # 阿里云短信 -│ └── tencent/ # 腾讯云短信 -├── notice/ # ✅ 通知服务集成 -│ ├── wechat/ # 微信通知 -│ └── weapp/ # 小程序通知 -└── upload/ # ✅ 存储服务集成 - ├── local/ # 本地存储 - ├── qiniu/ # 七牛云 - ├── oss/ # 阿里云OSS - └── cos/ # 腾讯云COS -``` - -#### ⚙️ 配置管理层 (config/) -```typescript -src/config/ -├── app.config.ts # ✅ 应用配置 -├── app.schema.ts # ✅ 配置验证 -├── config-center.service.ts# ✅ 配置中心服务 -├── dynamic-config.service.ts# ✅ 动态配置服务 -├── dynamic-config.entity.ts# ✅ 动态配置实体 -├── dynamic-bean.service.ts# ✅ 动态Bean服务 -├── config-center.controller.ts# ✅ 配置中心API -└── config.module.ts # ✅ 配置模块 -``` - -### ❌ 缺失的核心能力 - -| 能力 | 状态 | 优先级 | -|------|------|--------| -| 🏪 **业务应用插件生态** | ❌ 完全缺失 | 🔥 P0 | -| 🔄 **业务代码生成器** | ❌ 完全缺失 | 🔥 P0 | -| 🏢 **SaaS多租户平台** | ❌ 完全缺失 | 🔥 P0 | -| ☁️ **云编译部署工具** | ❌ 完全缺失 | 🔥 P0 | - ---- - -## 🎯 核心能力实现方案 - -### 1. 🏪 业务应用插件生态 (P0) - -#### 📋 功能需求 -- **插件生命周期管理** - 安装、卸载、启用、禁用 -- **插件依赖管理** - 版本兼容性检查 -- **插件市场** - 在线插件商店 -- **插件隔离** - 沙箱运行环境 -- **插件API** - 统一的插件开发接口 - -#### 🏗️ 技术架构 -```typescript -src/addon-system/ -├── core/ -│ ├── addon-manager.service.ts # 插件管理器 -│ ├── addon-loader.service.ts # 插件加载器 -│ ├── addon-registry.service.ts # 插件注册表 -│ ├── addon-lifecycle.service.ts # 生命周期管理 -│ └── addon-container.service.ts # 插件容器 -├── marketplace/ -│ ├── marketplace.service.ts # 插件市场服务 -│ ├── plugin-download.service.ts # 插件下载服务 -│ ├── version-manager.service.ts # 版本管理服务 -│ └── dependency-resolver.service.ts# 依赖解析服务 -├── runtime/ -│ ├── plugin-sandbox.service.ts # 插件沙箱 -│ ├── module-loader.service.ts # 动态模块加载 -│ ├── class-discovery.service.ts # 类发现服务 -│ └── proxy-generator.service.ts # 代理生成器 -├── models/ -│ ├── addon.entity.ts # 插件实体 -│ ├── addon-install.entity.ts # 安装记录实体 -│ └── marketplace-plugin.entity.ts # 市场插件实体 -└── interfaces/ - ├── addon.interface.ts # 插件接口 - ├── plugin-author.interface.ts # 作者接口 - └── marketplace.interface.ts # 市场接口 -``` - -#### 🛠️ 实现步骤 -**Phase 1 (2-3个月)**: 插件基础架构 -- [ ] 插件生命周期管理 -- [ ] 动态模块加载 -- [ ] 插件注册表 - -**Phase 2 (1-2个月)**: 插件隔离和API -- [ ] 插件沙箱运行 -- [ ] 插件开发API -- [ ] 安全隔离机制 - -**Phase 3 (2-3个月)**: 插件市场 -- [ ] 在线插件商店 -- [ ] 插件上传和审核 -- [ ] 插件交易系统 - -#### 📊 技术难点 -- **动态模块加载** - Node.js Module 热加载 -- **插件沙箱** - V8 Isolate 或多进程隔离 -- **依赖解析** - semver 版本兼容性 -- **安全隔离** - 防止插件恶意代码 - ---- - -### 2. 🔄 业务代码生成器 (P0) - -#### 📋 功能需求 -- **数据库表分析** - 自动分析表结构 -- **CRUD代码生成** - Entity/Service/Controller -- **前端代码生成** - Vue3 + TypeScript -- **API文档生成** - Swagger 文档 -- **模板系统** - 可扩展的代码模板 -- **字段映射** - 数据库字段到DTO映射 - -#### 🏗️ 技术架构 -```typescript -src/code-generator/ -├── core/ -│ ├── generator.service.ts # 代码生成服务 -│ ├── template-engine.service.ts # 模板引擎 -│ ├── file-writer.service.ts # 文件写入服务 -│ ├── syntax-parser.service.ts # 语法解析器 -│ └── meta-extractor.service.ts # 元数据提取器 -├── generators/ -│ ├── backend/ -│ │ ├── entity-generator.ts # Entity生成器 -│ │ ├── service-generator.ts # Service生成器 -│ │ ├── controller-generator.ts # Controller生成器 -│ │ ├── dto-generator.ts # DTO生成器 -│ │ └── module-generator.ts # Module生成器 -│ ├── frontend/ -│ │ ├── vue-page-generator.ts # Vue页面生成器 -│ │ ├── api-client-generator.ts # API客户端生成器 wasm -│ │ ├── type-generator.ts # TypeScript类型生成器 -│ │ └── store-generator.ts # Store生成器 -│ └── docs/ -│ ├── swagger-generator.ts # Swagger文档生成器 -│ └── markdown-generator.ts # Markdown文档生成器 -├── templates/ -│ ├── nestjs/ # NestJS模板 -│ ├── vue3/ # Vue3模板 -│ └── custom/ # 自定义模板 -├── analyzers/ -│ ├── database-analyzer.service.ts # 数据库分析器 -│ ├── schema-analyzer.service.ts # 表结构分析器 -│ └── relationship-analyzer.service.ts# 关系分析器 -└── models/ - ├── generation-task.entity.ts # 生成任务实体 - ├── template.entity.ts # 模板实体 - └── field-mapping.entity.ts # 字段映射实体 -``` - -#### 🛠️ 实现步骤 -**Phase 1 (1-2个月)**: 后端代码生成 -- [ ] 数据库表结构分析 -- [ ] Entity/Service/Controller生成 -- [ ] DTO和验证规则生成 - -**Phase 2 (1-2个月)**: 前端代码生成 -- [ ] Vue3页面组件生成 -- [ ] TypeScript类型定义生成 -- [ ] API客户端生成 - -**Phase 3 (1个月)**: 模板和优化 -- [ ] 自定义模板系统 -- [ ] 生成代码预览和编辑 -- [ ] 批量生成功能 - -#### 📊 技术难点 -- **模板引擎** - Handlebars + TypeScript AST -- **数据库分析** - TypeORM Schema Reflection -- **代码质量** - ESLint/Prettier 集成 -- **增量生成** - 智能覆盖和合并 - ---- - -### 3. 🏢 SaaS多租户平台 (P0) - -#### 📋 功能需求 -- **租户管理** - 多租户注册和管理 -- **数据隔离** - 租户数据完全隔离 -- **权限控制** - 租户级权限管理 -- **资源隔离** - 计算和存储资源隔离 -- **计费管理** - 租户使用量统计和计费 -- **域名绑定** - 自定义域名支持 - -#### 🏗️ 技术架构 -```typescript -src/multitenancy/ -├── core/ -│ ├── tenant-manager.service.ts # 租户管理器 -│ ├── tenant-context.service.ts # 租户上下文 -│ ├── data-isolation.service.ts # 数据隔离服务 -│ ├── resource-isolation.service.ts # 资源隔离服务 -│ └── tenant-switch.service.ts # 租户切换服务 -├── middleware/ -│ ├── tenant-resolution.middleware.ts# 租户解析中间件 -│ ├── tenant-injection.middleware.ts# 租户注入中间件 -│ └── tenant-auth.middleware.ts # 租户认证中间件 -├── guards/ -│ ├── tenant-guard.ts # 租户守护 -│ ├── resource-limit.guard.ts # 资源限制守护 -│ └── billing-check.guard.ts # 计费检查守护 -├── strategies/ -│ ├── header-strategy.ts # Header策略 -│ ├── subdomain-strategy.ts # 子域名策略 -│ ├── path-strategy.ts # 路径策略 -│ └── custom-domain-strategy.ts # 自定义域名策略 -├── billing/ -│ ├── usage-tracker.service.ts # 使用量跟踪 -│ ├── billing-calculator.service.ts# 计费计算器 -│ ├── payment-processor.service.ts # 支付处理 -│ └── quota-enforcer.service.ts # 配额强制器 -├── models/ -│ ├── tenant.entity.ts # 租户实体 -│ ├── tenant-config.entity.ts # 租户配置实体 -│ ├── tenant-usage.entity.ts # 使用量实体 -│ └── tenant-billing.entity.ts # 计费实体 -└── routing/ - ├── tenant-router.service.ts # 租户路由服务 - ├── domain-resolver.service.ts # 域名解析服务 - └── load-balancer.service.ts # 负载均衡器 -``` - -#### 🛠️ 实现步骤 -**Phase 1 (2-3个月)**: 核心租户管理 -- [ ] 租户生命周期管理 -- [ ] 数据隔离机制 -- [ ] 租户上下文管理 - -**Phase 2 (1-2个月)**: 路由和认证 -- [ ] 多域名路由策略 -- [ ] 租户认证和授权 -- [ ] 资源隔离实现 - -**Phase 3 (2个月)**: 计费和监控 -- [ ] 使用量统计 -- [ ] 计费和支付集成 -- [ ] 配额限制和监控 - -#### 📊 技术难点 -- **数据隔离** - 数据库级别租户隔离 -- **性能优化** - 租户查询优化 -- **配置管理** - 租户级动态配置 -- **安全隔离** - 租户间安全隔离 - ---- - -### 4. ☁️ 云编译部署工具 (P0) - -#### 📋 功能需求 -- **云构建环境** - Docker容器构建 -- **前端构建** - Vue3/React项目构建 -- **后端编译** - TypeScript编译和打包 -- **自动部署** - CDN + Docker容器部署 -- **环境管理** - 开发/测试/生产环境 -- **监控告警** - 部署状态监控 - -#### 🏗️ 技术架构 -```typescript -src/cloud-deploy/ -├── core/ -│ ├── build-service.ts # 构建服务 -│ ├── deploy-service.ts # 部署服务 -│ ├── environment-manager.ts # 环境管理器 -│ └── deployment-pipeline.ts # 部署流水线 -├── builders/ -│ ├── container-builder.service.ts # 容器构建器 -│ ├── frontend-builder.service.ts # 前端构建器 -│ ├── backend-builder.service.ts # 后端构建器 -│ └── asset-bundler.service.ts # 资源打包器 -├── deployers/ -│ ├── kubernetes-deployer.ts # Kubernetes部署 -│ ├── docker-deployer.ts # Docker部署 -│ ├── cdn-deployer.ts # CDN部署 -│ └── domain-deployer.ts # 域名部署 -├── infrastructure/ -│ ├── container-registry.ts # 容器仓库 -│ ├── artifact-store.ts # 制品存储 -│ ├── config-manager.ts # 配置管理 -│ └── secret-manager.ts # 密钥管理 -├── monitoring/ -│ ├── deployment-monitor.ts # 部署监控 -│ ├── health-checker.ts # 健康检查 -│ ├── log-aggregator.ts # 日志聚合 -│ └── alert-manager.ts # 告警管理 -├── models/ -│ ├── deployment.entity.ts # 部署实体 -│ ├── build-task.entity.ts # 构建任务实体 -│ ├── environment.entity.ts # 环境实体 -│ └── deployment-log.entity.ts # 部署日志实体 -└── queue/ - ├── build-queue.service.ts # 构建队列 - ├── deploy-queue.service.ts # 部署队列 - └── notification-queue.service.ts # 通知队列 -``` - -#### 🛠️ 实现步骤 -**Phase 1 (2-3个月)**: 构建基础设施 -- [ ] Docker容器化构建 -- [ ] CI/CD流水线 -- [ ] 容器注册中心 - -**Phase 2 (1-2个月)**: 部署能力 -- [ ] Kubernetes集成 -- [ ] CDN自动分发 -- [ ] 域名管理集成 - -**Phase 3 (1-2个月)**: 监控和优化 -- [ ] 部署状态监控 -- [ ] 自动回滚机制 -- [ ] 性能优化建议 - -#### 📊 技术难点 -- **容器化** - Docker + Kubernetes -- **CI/CD** - GitHub Actions/GitLab CI -- **服务发现** - Service Mesh -- **监控告警** - Prometheus + Grafana - ---- - -## 🏗️ 架构设计方案 - -### 整体架构图 - -``` -┌─────────────────────────────────────────────────────────────┐ -│ WWJCloud 企业级平台 │ -├─────────────────────────────────────────────────────────────┤ -│ 🏪 插件市场 │ 🔄 代码生成器 │ 🏢 多租户SaaS │ ☁️ 云部署 │ -├──────────────────────────────────────┬──────────────────────┤ -│ App Layer (业务层) │ Core Layer (核心) │ -│ ┌─────────────┬─────────────┬─────┬───┴──┬─┬──────────────┐ │ -│ │ Web App │ Mobile App │ API │ Core │P│ Generator │ │ -│ └─────────────┴─────────────┴─────┴──────┴─┴──────────────┘ │ -├──────────────────────────────────────┬──────────────────────┤ -│ Vendor Layer (第三方) │ Common Layer (基础设施) │ -│ ┌───────┬──────┬──────┬──────┬─────┴┬──────┬─────┬────────┐ │ -│ │ Pay │ SMS │Notice│Upload│Common│Utils │Plug │Security│ │ -│ └───────┴──────┴──────┴──────┴──────┴──────┴─────┴────────┘ │ -├─────────────────────────────────────────────────────────────┤ -│ Config Layer (配置中心) │ -│ Dynamic Config │ Hot Reload │ Version Control │ Centralized │ -└─────────────────────────────────────────────────────────────┘ -``` - -### 技术栈选择 - -| 层级 | 技术选择 | 理由 | -|------|----------|------| -| **运行时** | Node.js v20 + NestJS v11 | 高性能 + 现代化 | -| **语言** | TypeScript 5.x | 类型安全 + 开发体验 | -| **ORM** | TypeORM | 成熟 + Ecosystem | -| **缓存** | Redis + BullMQ | 高性能 + 队列 | -| **监控** | Prometheus + Grafana | 企业级监控 | -| **部署** | Kubernetes + Docker | 云原生 + 可扩展 | -| **前端** | Vue3 + TypeScript | 现代化 + 企业级 | - ---- - -## ✅ (当前)基础架构定版 - -### Version 1.0 - 基础架构版 (已完成) - -#### 📦 核心模块清单 - -| 模块 | 状态 | 说明 | -|------|------|------| -| **数据库连接** | ✅ | TypeORM + MySQL | -| **缓存服务** | ✅ | Redis + Memory | -| **队列系统** | ✅ | BullMQ | -| **事件系统** | ✅ | EventEmitter2 | -| **日志服务** | ✅ | Winston | -| **监控服务** | ✅ | 基础指标 | -| **异常处理** | ✅ | 全局异常过滤器 | -| **响应处理** | ✅ | 统一响应格式 | -| **安全模块** | ✅ | JWT + RBAC | -| **链路跟踪** | ✅ | OpenTelemetry | -| **定时任务** | ✅ | @nestjs/schedule | -| **API文档** | ✅ | Swagger UI | -| **工具库** | ✅ | 自研 + dayjs/lodash等 | -| **基础插件** | ✅ | captcha/qrcode/wechat | -| **第三方集成** | ✅ | 支付/短信/存储/通知 | -| **配置管理** | ✅ | 动态配置 + 热重载 | - -#### 🎯 性能基准 - -- **QPS**: 14,000+ requests/second -- **启动时间**: 2-3秒 -- **内存占用**: 392MB -- **CPU使用率**: 中等 -- **响应时间**: <100ms (P95) - -#### ✅ 架构优势 - -1. **性能优秀** - 比Java版本快20% -2. **开发体验好** - TypeScript + 热重载 -3. **维护成本低** - 单仓库 + 现代化工具链 -4. **扩展性强** - 微服务ready - ---- - -## 📅 技术路线图 - -### 2024 Q4 - 基础版发布 ✅ -- [x] NestJS基础架构 -- [x] 核心基础设施 -- [x] 第三方服务集成 -- [x] 动态配置中心 - -### 2025 Q1 - 插件系统 (P0) -**目标**: 实现业务应用插件生态的核心功能 -- [ ] 🏪 插件生命周期管理 -- [ ] 🏪 插件动态加载 -- [ ] 🏪 插件沙箱隔离 -- [ ] 🏪 插件开发SDK - -### 2025 Q2 - 代码生成器 (P0) -**目标**: 实现业务代码生成的核心功能 -- [ ] 🔄 数据库表分析 -- [ ] 🔄 后端CRUD生成 -- [ ] 🔄 前端页面生成 -- [ ] 🔄 模板系统 - -### 2025 Q3 - 多租户平台 (P0) -**目标**: 实现SaaS多租户的核心功能 -- [ ] 🏢 租户数据隔离 -- [ ] 🏢 多域名路由 -- [ ] 🏢 租户权限管理 -- [ ] 🏢 使用量统计 - -### 2025 Q4 - 云部署工具 (P0) -**目标**: 实现云编译部署的核心功能 -- [ ] ☁️ Docker化构建 -- [ ] ☁️ Kubernetes部署 -- [ ] 🏪 插件市场v1 -- [ ] ☁️ CI/CD流水线 - -### 2026 Q1-Q2 - 生态完善 -**目标**: 完善企业级平台能力 -- [ ] 🏪 插件市场v2 (商业化) -- [ ] 🔄 代码生成器增强 -- [ ] 🏢 多租户计费系统 -- [ ] ☁️ 智能运维监控 - ---- - -## ⚠️ 风险评估 - -### 🔴 高风险 - -| 风险项 | 影响 | 缓解措施 | -|--------|------|---------| -| **技术复杂度** | 项目延期 | 分阶段实现+外部专家 | -| **团队经验** | 实现质量 | 技术培训+代码Review | -| **资源投入** | 开发成本 | 优先级管理+MVP策略 | - -### 🟡 中风险 - -| 风险项 | 影响 | 缓解措施 | -|--------|------|---------| -| **市场接受度** | 商业化风险 | 早期客户验证 | -| **竞争压力** | 市场份额 | 差异化定位 | -| **技术债务** | 维护成本 | 重构计划+测试覆盖 | - -### 🟢 低风险 - -| 风险项 | 影响 | 缓解措施 | -|--------|------|---------| -| **依赖第三方** | 供应商风险 | 多供应商策略 | -| **安全漏洞** | 安全风险 | 定期安全扫描 | -| **性能瓶颈** | 用户体验 | 性能监控+优化 | - ---- - -## 🎯 成功指标体系 - -### 📊 技术指标 -- **插件生态**: 100+ 活跃插件 -- **代码生成**: 10倍开发效率提升 -- **多租户**: 1000+ 租户支持 -- **云部署**: 1-Tap 部署体验 - -### 💰 商业指标 -- **客户数量**: 500+ 企业客户 -- **插件交易**: 10000+ 插件下载 -- **订阅收入**: 1000万+ ARR -- **开发者生态**: 5000+ 活跃开发者 - -### 🏆 竞争指标 -- **市场份额**: JavaScript企业级框架前3 -- **技术口碑**: 开发者满意度90%+ -- **客户留存**: 年流失率<10% -- **开源影响**: GitHub Stars 10000+ - ---- - -## 📝 总结 - -WWJCloud定位为**NestJS版企业级平台**,将实现与Java NiuCloud相当的核心竞争力: - -1. **🏪 插件生态** - 实现JavaScript世界的"WordPress插件市场" -2. **🔄 代码生成** - 实现"10倍开发效率"的业务代码生成 -3. **🏢 多租户** - 实现"企业级SaaS平台"的规模化能力 -4. **☁️ 云部署** - 实现"1-Tap部署"的零运维体验 - -这是从**应用框架**到**企业级平台**的转变,将创造巨大的商业价值和技术壁垒。 - -### 🚀 下一步行动 -1. **技术预研** - 插件系统技术可行性验证 -2. **架构设计** - 详细技术架构和接口设计 -3. **团队组建** - 核心开发团队招募 -4. **MVP开发** - 最小可行产品开发 - -**目标:2025年底完成核心竞争力的构建,成为JavaScript企业级平台的领导者!** diff --git a/lefthook.yml b/lefthook.yml index 3ac5730a..1703c6ec 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -1,42 +1,10 @@ -# EXAMPLE USAGE: -# -# Refer for explanation to following link: -# https://lefthook.dev/configuration/ -# -# pre-push: -# jobs: -# - name: packages audit -# tags: -# - frontend -# - security -# run: yarn audit -# -# - name: gems audit -# tags: -# - backend -# - security -# run: bundle audit -# -# pre-commit: -# parallel: true -# jobs: -# - run: yarn eslint {staged_files} -# glob: "*.{js,ts,jsx,tsx}" -# -# - name: rubocop -# glob: "*.rb" -# exclude: -# - config/application.rb -# - config/routes.rb -# run: bundle exec rubocop --force-exclusion {all_files} -# -# - name: govet -# files: git ls-files -m -# glob: "*.go" -# run: go vet {files} -# -# - script: "hello.js" -# runner: node -# -# - script: "hello.go" -# runner: go run +pre-commit: + parallel: true + jobs: + - name: DI debug (Boot+Addon+Ai) + run: NODE_ENV=test PROMETHEUS_ENABLED=true AI_ENABLED=true REDIS_ENABLED=false REQUEST_ID_ENABLED=true RATE_LIMIT_ENABLED=true RATE_LIMIT_WINDOW_MS=500 RATE_LIMIT_MAX=2 GLOBAL_PREFIX=api npm --prefix ./wwjcloud-nest-v1 run di:full + +pre-push: + jobs: + - name: e2e tests (wwjcloud-nest-v1) + run: NODE_ENV=test PROMETHEUS_ENABLED=true AI_ENABLED=true REDIS_ENABLED=false REQUEST_ID_ENABLED=true RATE_LIMIT_ENABLED=true RATE_LIMIT_WINDOW_MS=500 RATE_LIMIT_MAX=2 GLOBAL_PREFIX=api npm --prefix ./wwjcloud-nest-v1 run test:e2e diff --git a/readme.md b/readme.md index e4a11b82..5b0240a9 100644 --- a/readme.md +++ b/readme.md @@ -117,6 +117,15 @@ src/ - [迁移指南](./MIGRATION_GUIDE.md) - [开发计划](./DEVELOPMENT_PLAN.md) +## 📚 快速入口 + +- AI 恢复端点开发指南:`docs/AI-RECOVERY-DEV.md` +- AI 工作流指南:`docs/AI-WORKFLOW-GUIDE.md` +- 配置设置指南(含 AI 配置与验证):`docs/CONFIG_SETUP.md` +- 开发指南(AI 集成与测试):`docs/DEVELOPMENT-GUIDE.md` +- 生产部署手册:`docs/PRODUCTION-DEPLOYMENT.md` +- 工具集 v1(针对 wwjcloud-nest-v1):`tools-v1/` + ## 🤝 贡献指南 1. Fork 项目 diff --git a/tools-v1/README.md b/tools-v1/README.md index 61de775e..60eeb468 100644 --- a/tools-v1/README.md +++ b/tools-v1/README.md @@ -36,10 +36,16 @@ node tools-v1/scripts/quality-assurance.js # 运行 PHP 文件发现 node tools-v1/scripts/php-file-discovery.js -# 运行迁移协调器(新位置) +# 运行迁移协调器(别名脚本,固定 scripts 路径) +node tools-v1/scripts/migration-coordinator.js + +# Dry-run 预览迁移计划(别名脚本) +DRY_RUN=true node tools-v1/scripts/migration-coordinator.js + +# 直接运行迁移协调器(主文件位于 php-tools) node tools-v1/php-tools/migration-coordinator.js -# Dry-run 预览迁移计划 +# Dry-run 预览迁移计划(主文件) DRY_RUN=true node tools-v1/php-tools/migration-coordinator.js # 快速质量检查 diff --git a/tools-v1/env/apps-api.feature-all.env b/tools-v1/env/apps-api.feature-all.env new file mode 100644 index 00000000..bba2258d --- /dev/null +++ b/tools-v1/env/apps-api.feature-all.env @@ -0,0 +1,29 @@ +# apps/api 特性全开环境(本地验证用) +NODE_ENV=development +PORT=3001 +GLOBAL_PREFIX=api + +# 关闭鉴权与权限,便于本地验证 +AUTH_ENABLED=false +RBAC_ENABLED=false +JWT_SECRET=dev-secret + +# AI 与队列 +AI_ENABLED=true +AI_SIMULATE_DIRECT_ENQUEUE=true +RATE_LIMIT_ENABLED=true +QUEUE_ENABLED=false +# QUEUE_DRIVER 不设置(避免 Joi 校验限制),禁用队列使用内存 + +# 观测与文档 +PROMETHEUS_ENABLED=true +SWAGGER_ENABLED=true +SWAGGER_BEARER_AUTH_ENABLED=false +REQUEST_ID_ENABLED=true +LOG_JSON_ENABLED=false +SECURITY_ENABLED=true +CORS_ORIGIN=* + +# 其他 +REDIS_ENABLED=false +TENANT_ENABLED=false \ No newline at end of file diff --git a/tools-v1/php-tools/generators/business-logic-converter.js b/tools-v1/php-tools/generators/business-logic-converter.js index 9a4f9bc0..38260f19 100644 --- a/tools-v1/php-tools/generators/business-logic-converter.js +++ b/tools-v1/php-tools/generators/business-logic-converter.js @@ -155,8 +155,8 @@ class BusinessLogicConverter { // 替换PHP基础类为NestJS Common层 const infrastructureReplacements = [ // 按 v1 boot 实现进行映射 - { from: /core\\cache\\RedisCacheService/g, to: '@wwjCommon/infra/cache/cache.service' }, -{ from: /CoreRequestService/g, to: '@wwjCommon/infra/http/request-context.service' }, + { from: /core\\cache\\RedisCacheService/g, to: '@wwjCommon/cache/cache.service' }, + { from: /CoreRequestService/g, to: '@wwjCommon/http/request-context.service' }, // 旧的 BaseService/BaseController/BaseApiService 在 v1 中不再使用,避免误替换 // 日志统一使用 Nest Logger 或拦截器,不再映射到自定义 LoggingService ]; diff --git a/tools-v1/php-tools/generators/controller-generator.js b/tools-v1/php-tools/generators/controller-generator.js index b9c57e26..d8a6fbf0 100644 --- a/tools-v1/php-tools/generators/controller-generator.js +++ b/tools-v1/php-tools/generators/controller-generator.js @@ -132,6 +132,7 @@ class ControllerGenerator { const content = this.generateControllerContent(moduleName, controllerName, layer); fs.writeFileSync(controllerPath, content); + this.stats.controllersCreated += 1; console.log(` ✅ 创建控制器: ${moduleName}/${layer}/${this.toKebabCase(controllerName)}.controller.ts`); } @@ -140,36 +141,48 @@ class ControllerGenerator { */ generateControllerContent(moduleName, controllerName, layer) { const className = `${this.toPascalCase(controllerName)}Controller`; - - // 根据PHP控制器的实际服务依赖生成导入 + + // 基础设施导入和服务导入 + const infraImports = this.getInfrastructureImports(layer); const serviceImports = this.getServiceImports(moduleName, controllerName, layer); - + // 过滤掉空的导入语句 const filteredServiceImports = serviceImports.split('\n').filter(line => { const trimmed = line.trim(); - return trimmed !== '' && !trimmed.includes("} from '';"); + return trimmed !== '' && !trimmed.includes("} from '';" ); }).join('\n'); - - // 根据层类型选择合适的基础设施 - if (layer === 'adminapi') { - imports.push("import { AuthGuard } from '@wwjCommon/infra/auth/auth.guard';"); -imports.push("import { RbacGuard } from '@wwjCommon/infra/auth/rbac.guard';"); -imports.push("import { Roles } from '@wwjCommon/infra/auth/decorators';"); - } else if (layer === 'api') { - imports.push("import { AuthGuard } from '@wwjCommon/infra/auth/auth.guard';"); - } - - // 通用基础设施 - imports.push("import { Public } from '@wwjCommon/infra/auth/decorators';"); - imports.push("import { BadRequestException } from '@nestjs/common';"); - - // 常用装饰器说明(已在主import中引入) - imports.push("// @UploadedFile() - 单文件上传,配合 @UseInterceptors(FileInterceptor('file'))"); - imports.push("// @UploadedFiles() - 多文件上传,配合 @UseInterceptors(FilesInterceptor('files'))"); - imports.push("// @Session() - 获取会话对象,对应PHP Session::get()"); - imports.push("// @Req() - 获取Request对象,对应PHP Request"); - - return imports.join('\n'); + + const constructorServices = this.getConstructorServices( + moduleName, + this.toPascalCase(controllerName), + this.getCorrectServiceLayer(layer) + ); + const routePrefix = this.getRoutePath(layer); + const guardsDecorator = this.generateGuardDecorators(layer); + + // 解析PHP控制器方法生成NestJS方法 + const methodsContent = this.parsePHPControllerMethods( + moduleName, + this.toPascalCase(controllerName), + layer + ); + + return `import { Controller, Get, Post, Put, Delete, Body, Param, Query, UseGuards, UploadedFile, UploadedFiles, UseInterceptors } from '@nestjs/common'; +import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger'; +${infraImports} +${filteredServiceImports} + +@ApiTags('${moduleName}') +${guardsDecorator} +@Controller('${routePrefix}/${this.toKebabCase(moduleName)}') +export class ${className} { + constructor( + ${constructorServices} + ) {} + +${methodsContent} +} +`; } /** @@ -206,15 +219,15 @@ imports.push("import { Roles } from '@wwjCommon/infra/auth/decorators';"); // 根据层类型选择合适的基础设施 if (layer === 'adminapi') { - imports.push("import { AuthGuard } from '@wwjCommon/infra/auth/auth.guard';"); -imports.push("import { RbacGuard } from '@wwjCommon/infra/auth/rbac.guard';"); -imports.push("import { Roles } from '@wwjCommon/infra/auth/decorators';"); + imports.push("import { AuthGuard } from '@wwjCommon/auth/auth.guard';"); + imports.push("import { RbacGuard } from '@wwjCommon/auth/rbac.guard';"); + imports.push("import { Roles } from '@wwjCommon/auth/decorators';"); } else if (layer === 'api') { - imports.push("import { AuthGuard } from '@wwjCommon/infra/auth/auth.guard';"); + imports.push("import { AuthGuard } from '@wwjCommon/auth/auth.guard';"); } // 通用基础设施 - imports.push("import { Public } from '@wwjCommon/infra/auth/decorators';"); + imports.push("import { Public } from '@wwjCommon/auth/decorators';"); imports.push("import { BadRequestException } from '@nestjs/common';"); // 常用装饰器说明(已在主import中引入) @@ -412,304 +425,67 @@ imports.push("import { Roles } from '@wwjCommon/infra/auth/decorators';"); } /** - * 生成NestJS控制器方法 + * 生成NestJS控制器方法(严格适配V1,不解析PHP方法体、不做兼容推断) */ generateNestJSControllerMethod(methodName, description, httpMethod, phpMethod, moduleName, controllerName, layer, routeInfo = null) { - // 使用路由信息中的路径,如果没有则使用kebab-case方法名 + // 路由以发现结果为准,缺失则使用方法名的kebab-case const routePath = routeInfo ? routeInfo.routePath : this.toKebabCase(methodName); - - // 解析路径参数 (如 :id, :uid) + + // 路径参数(如 :id, :uid) const pathParams = routePath.match(/:(\w+)/g) || []; const hasPathParams = pathParams.length > 0; - const serviceInstanceName = this.getServiceInstanceName(phpMethod, controllerName); - - // 解析PHP方法中实际调用的服务方法和参数 - const { serviceMethodName, params, isDirectReturn } = this.parsePHPMethodCall(phpMethod); - console.log(` 🔍 parsePHPMethodCall结果: serviceMethodName="${serviceMethodName}", params=${JSON.stringify(params)}, isDirectReturn=${isDirectReturn}`); - - // 生成参数列表(包含路径参数和请求体) + + // 服务实例名仅由控制器名派生,保持V1注入一致性 + const serviceInstanceName = this.getServiceInstanceName('', controllerName); + + // 服务方法名与控制器方法名保持一致(严格映射) + const serviceMethodName = methodName; + + // 生成参数列表(路径参数 + Query/Body) const paramsList = []; - - // 1. 添加路径参数 + + // 1) 路径参数 if (hasPathParams) { pathParams.forEach(param => { - const paramName = param.substring(1); // 移除 : 前缀 + const paramName = param.substring(1); paramsList.push(`@Param('${paramName}') ${paramName}: string`); }); } - - // 2. 添加查询参数(如果有) - if (params.length > 0) { - params.forEach(p => { - // 避免重复(如果参数名已经在路径参数中) - const paramName = p.name; - if (!pathParams.some(pp => pp.substring(1) === paramName)) { - if (p.defaultValue) { - paramsList.push(`@Query('${paramName}') ${paramName}: ${p.type || 'any'} = ${p.defaultValue}`); - } else { - paramsList.push(`@Query('${paramName}') ${paramName}: ${p.type || 'any'}`); - } - } - }); - } - - // 3. 添加请求体参数(对于POST/PUT请求) + + // 2) Query 或 Body(按HTTP方法严格区分) if (httpMethod === 'Post' || httpMethod === 'Put') { - const dtoName = `${this.toPascalCase(methodName)}Dto`; - paramsList.push(`@Body() data: ${dtoName}`); + paramsList.push(`@Body() data: any`); + } else { + paramsList.push(`@Query() query: any`); } - + const methodParams = paramsList.join(', '); - - // 生成路由信息注释(提前生成,所有return都要用) - const routeComment = routeInfo + + // 路由信息注释 + const routeComment = routeInfo ? ` * 路由: ${routeInfo.httpMethod.toUpperCase()} ${routePath}\n * PHP路由: Route::${routeInfo.httpMethod}('${routePath}', '${moduleName}.${controllerName}/${methodName}')` : ` * 基于PHP控制器方法: ${methodName}`; - - // 生成守卫装饰器 + + // 守卫装饰器与返回类型 const guardDecorators = this.generateGuardDecorators(layer); - - // 生成返回类型 const returnType = this.generateReturnType(serviceMethodName); - - // 生成调用参数 - 需要根据PHP方法体中的实际调用生成 - let callParams = ''; - if (serviceMethodName) { - // 解析PHP方法体中的服务调用参数 - const serviceCallMatch = phpMethod.match(/\)\s*->\s*(\w+)\(([^)]*)\)/); - if (serviceCallMatch) { - const phpCallParams = serviceCallMatch[2]; - if (phpCallParams.trim()) { - // 解析PHP调用参数 - const paramList = phpCallParams.split(',').map(p => p.trim()); - const tsParams = paramList.map(param => { - if (param === '$key') return 'key'; - if (param === '$data') return 'data'; - if (param.startsWith('$')) return param.substring(1); - // 处理数组访问,如 $data['search'] -> data.search - if (param.includes("['") && param.includes("']")) { - const match = param.match(/\$(\w+)\['(\w+)'\]/); - if (match) { - return `${match[1]}.${match[2]}`; // 返回 data.search - } - } - // 处理PHP数组语法,如 ['id' => $id] -> { id: id } - if (param.includes("['") && param.includes("' =>")) { - const arrayMatch = param.match(/\[([\s\S]*)\]/); - if (arrayMatch) { - const arrayContent = arrayMatch[1]; - const keyValuePairs = arrayContent.split(',').map(pair => { - const kvMatch = pair.match(/['"]([^'"]+)['"]\s*=>\s*\$(\w+)/); - if (kvMatch) { - return `${kvMatch[1]}: ${kvMatch[2]}`; - } - return pair.trim(); - }); - return `{ ${keyValuePairs.join(', ')} }`; - } - } - return param; - }); - callParams = tsParams.join(', '); - } - } - } - - // 如果没有解析到调用参数,使用默认参数 - if (!callParams) { - if (params.length > 0) { - callParams = params.map(p => p.name).join(', '); - } else { - // 如果服务方法需要参数但控制器没有参数,添加默认参数 - if (serviceMethodName) { - // 根据方法名推断需要的参数 - if (serviceMethodName.includes('List') || serviceMethodName.includes('Search')) { - // 检查PHP服务方法是否真的需要参数 - const phpServicePath = this.getPHPServicePath(moduleName, serviceMethodName); - if (phpServicePath && this.checkPHPServiceMethodNeedsParams(phpServicePath, serviceMethodName)) { - callParams = 'params'; - } - } else if (serviceMethodName.includes('Info') || serviceMethodName.includes('Detail')) { - callParams = 'id'; - } - } - } - } - - // 如果是直接返回常量(如 keyBlackList 返回字典) - console.log(` 🔍 检查isDirectReturn: ${isDirectReturn}, serviceMethodName: "${serviceMethodName}"`); - if (isDirectReturn) { - console.log(` 🔍 进入直接返回处理逻辑`); - // 检查是否是空方法体 - if (!serviceMethodName) { - console.log(` 🔍 serviceMethodName为空,开始处理直接返回`); - // 尝试从PHP方法体中提取字典调用 - const dictMatch = phpMethod.match(/(\w+)::(\w+)\([^)]*\)/); - if (dictMatch) { - const dictName = dictMatch[1]; - const dictMethod = dictMatch[2]; - return ` /** - * ${description || methodName} -${routeComment} - */ - @${httpMethod}('${routePath}') - @ApiOperation({ summary: '${description || methodName}' }) - async ${methodName}(${methodParams}) { - try { - // 基于PHP真实逻辑实现 - // PHP原始方法: ${methodName} - // 直接返回字典数据 - return ${dictName}.${dictMethod}(); - } catch (error) { - throw new BadRequestException('${methodName}操作失败', error); - } - }`; - } - - // 尝试从PHP方法体中提取 return success(...) 调用 - const bodyMatch = phpMethod.match(/\{([\s\S]*)\}/); - const methodBody = bodyMatch ? bodyMatch[1] : ''; - const successMatch = methodBody.match(/return\s+success\((.+)\);?\s*$/); - console.log(` 🔍 检查return success匹配: ${methodBody.substring(0, 200)}...`); - console.log(` 🔍 successMatch结果: ${successMatch ? '匹配成功' : '匹配失败'}`); - if (successMatch) { - console.log(` 🔍 匹配到的success数据: ${successMatch[1]}`); - const successData = successMatch[1]; - console.log(` 🔍 原始success数据: ${successData}`); - // 转换PHP语法到TypeScript - let convertedData = successData; - console.log(` 🔍 步骤1 - 原始数据: ${convertedData}`); - - convertedData = convertedData.replace(/\[([^\]]+)\]/g, '{$1}'); // PHP数组 -> TypeScript对象 - console.log(` 🔍 步骤2 - 数组转换: ${convertedData}`); - - convertedData = convertedData.replace(/'([^']+)'\s*=>/g, '$1:'); // PHP关联数组 -> TypeScript对象属性 - console.log(` 🔍 步骤3 - 关联数组转换: ${convertedData}`); - - console.log(` 🔍 步骤4前 - 检查env匹配: ${convertedData}`); - const envMatches = convertedData.match(/env\(([^)]+)\)/g); - console.log(` 🔍 步骤4前 - env匹配结果: ${envMatches ? envMatches.join(', ') : '无匹配'}`); - - convertedData = convertedData.replace(/env\(([^)]+)\)/g, (match, p1) => { - console.log(` 🔍 步骤4中 - 匹配到env: ${match}, 参数: ${p1}`); - // 处理 env('key', default) 格式 - const parts = p1.split(','); - if (parts.length === 2) { - const key = parts[0].trim().replace(/['"]/g, ''); - const defaultValue = parts[1].trim(); - const result = `process.env.${key} || ${defaultValue}`; - console.log(` 🔍 步骤4中 - 转换结果: ${result}`); - return result; - } else { - const key = p1.trim().replace(/['"]/g, ''); - const result = `process.env.${key}`; - console.log(` 🔍 步骤4中 - 转换结果: ${result}`); - return result; - } - }); // PHP env() -> TypeScript process.env - console.log(` 🔍 步骤4 - env转换: ${convertedData}`); - - convertedData = convertedData.replace(/,\s*}/g, '}'); // 移除尾随逗号 - console.log(` 🔍 步骤5 - 移除尾随逗号: ${convertedData}`); - - convertedData = convertedData.replace(/,\s*]/g, ']'); // 移除尾随逗号 - console.log(` 🔍 步骤6 - 移除尾随逗号: ${convertedData}`); - - convertedData = convertedData.replace(/process\.env\.'([^']+)'/g, 'process.env.$1'); // 移除process.env的引号 - console.log(` 🔍 步骤7 - 移除引号: ${convertedData}`); - - // convertedData = convertedData.replace(/process\.env\.([^,}\s]+)/g, 'process.env.$1 || false'); // 注释掉,避免重复添加默认值 - // console.log(` 🔍 步骤8 - 添加默认值: ${convertedData}`); - console.log(` 🔍 转换后的数据: ${convertedData}`); - - return ` /** - * ${description || methodName} -${routeComment} - */ - @${httpMethod}('${routePath}') - @ApiOperation({ summary: '${description || methodName}' }) - async ${methodName}(${methodParams}) { - try { - // 基于PHP真实逻辑实现 - // PHP原始方法: ${methodName} - // 直接返回数据 - return { success: true, data: ${convertedData} }; - } catch (error) { - throw new BadRequestException('${methodName}操作失败', error); - } - }`; - } - - return ` /** - * ${description || methodName} -${routeComment} - */ - @${httpMethod}('${routePath}') - @ApiOperation({ summary: '${description || methodName}' }) - async ${methodName}(${methodParams}) { - try { - // 基于PHP真实逻辑实现 - // PHP原始方法: ${methodName} - // 空方法体或直接返回,需要根据实际业务逻辑实现 - return { message: '${methodName} - 待实现' }; - } catch (error) { - throw new BadRequestException('${methodName}操作失败', error); - } - }`; - } - - return ` /** - * ${description || methodName} -${routeComment} - */ - @${httpMethod}('${routePath}') - @ApiOperation({ summary: '${description || methodName}' }) - async ${methodName}(${methodParams}) { - try { - // 基于PHP真实逻辑实现 - // PHP原始方法: ${methodName} - // TODO: 实现直接返回逻辑 - return { message: '${methodName} - 需要实现直接返回逻辑' }; - } catch (error) { - throw new BadRequestException('${methodName}操作失败', error); - } - }`; - } - - // 检查是否有服务方法名 - console.log(` 🔍 服务方法名: "${serviceMethodName}"`); - if (!serviceMethodName) { - return ` /** - * ${description || methodName} -${routeComment} - */ - @${httpMethod}('${routePath}') - @ApiOperation({ summary: '${description || methodName}' }) - async ${methodName}(${methodParams}) { - try { - // 基于PHP真实逻辑实现 - // PHP原始方法: ${methodName} - // 服务方法名解析失败,需要手动实现 - return { message: '${methodName} - 服务方法名解析失败,需要手动实现' }; - } catch (error) { - throw new BadRequestException('${methodName}操作失败', error); - } - }`; - } - + + // 生成服务调用参数(严格:路径参数 + query/data) + const paramNames = pathParams.map(p => p.substring(1)); + const callParams = (httpMethod === 'Post' || httpMethod === 'Put') + ? [...paramNames, 'data'].join(', ') + : [...paramNames, 'query'].join(', '); + return ` /** * ${description || methodName} ${routeComment} */ @${httpMethod}('${routePath}') ${guardDecorators} - @ApiOperation({ summary: '${description || methodName}' }) - async ${methodName}(${methodParams})${returnType} { + @ApiOperation({ summary: ${JSON.stringify(description || methodName)} }) + ${methodName}(${methodParams})${returnType} { try { - // 基于PHP真实逻辑实现 - // PHP原始方法: ${methodName} - ${this.generateDataExtraction(phpMethod)} - return await this.${serviceInstanceName}.${serviceMethodName}(${callParams}); + return this.${serviceInstanceName}.${serviceMethodName}(${callParams}); } catch (error) { throw new BadRequestException('${methodName}操作失败', error); } @@ -721,452 +497,67 @@ ${routeComment} * 提取服务方法名和参数 */ parsePHPMethodCall(phpMethod) { - // 默认值 + // 安全默认值,避免 undefined 导致异常 let serviceMethodName = ''; let params = []; let isDirectReturn = false; - + try { - // 提取方法体 - const bodyMatch = phpMethod.match(/\{([\s\S]*)\}/); - if (!bodyMatch) { - return { serviceMethodName: '', params: [], isDirectReturn: false }; - } - - const methodBody = bodyMatch[1]; - - console.log(` 🔍 解析PHP方法体: ${methodBody.substring(0, 100)}...`); - console.log(` 🔍 方法名: ${phpMethod.match(/function\s+(\w+)/)?.[1] || 'unknown'}`); - - // 转换PHP语法到TypeScript - const convertedMethodBody = methodBody - .replace(/::/g, '.') // PHP静态调用 -> TypeScript属性访问 - .replace(/\$this->/g, 'this.') // PHP实例调用 -> TypeScript实例调用 - .replace(/\)\s*->/g, ').') // PHP方法调用 -> TypeScript方法调用 - .replace(/\$(\w+)/g, '$1') // PHP变量 -> TypeScript变量 - .replace(/new\s+(\w+Service)\s*\([^)]*\)/g, (match, serviceName) => { - // 将ServiceName转换为serviceName (camelCase) - const camelCaseName = serviceName.charAt(0).toLowerCase() + serviceName.slice(1).replace('Service', ''); - return `this.${camelCaseName}Service`; - }) - .replace(/new\s+(\w+Service)\s*\)/g, (match, serviceName) => { - // 将ServiceName转换为serviceName (camelCase) - const camelCaseName = serviceName.charAt(0).toLowerCase() + serviceName.slice(1).replace('Service', ''); - return `this.${camelCaseName}Service`; - }) - // .replace(/success\(/g, 'return ') // 注释掉,避免干扰后续的success匹配 - .replace(/error\(/g, 'throw new BadRequestException(') // PHP错误 -> TypeScript异常 - .replace(/env\(([^)]+)\)/g, 'process.env.$1') // PHP env() -> TypeScript process.env - .replace(/process\.env\.'([^']+)'/g, 'process.env.$1') // 移除process.env的引号 - .replace(/\[([^\]]+)\]/g, '{$1}') // PHP数组 -> TypeScript对象 - .replace(/'([^']+)'\s*=>/g, '$1:') // PHP关联数组 -> TypeScript对象属性 - .replace(/,\s*}/g, '}') // 移除尾随逗号 - .replace(/,\s*]/g, ']') // 移除尾随逗号 - .replace(/->/g, '.'); // 将剩余的 -> 转换为 . - - console.log(` 🔍 完整convertedMethodBody: ${convertedMethodBody}`); // Added debug log - - // 检查是否是直接返回常量/字典(如 SiteDict::getStatus()) - // 在转换前检查原始方法体中的静态调用 - if (methodBody.includes('::') && !methodBody.includes('->') && !methodBody.includes('new ')) { - isDirectReturn = true; - return { serviceMethodName: '', params: [], isDirectReturn: true }; - } - - // 提取方法名(匹配 .方法名( 或 ).方法名(,优先匹配 new Service().method) - // 优先匹配服务调用: new Service() ).method( - let serviceCallMatch = convertedMethodBody.match(/\)\s*\.\s*(\w+)\(/); - if (serviceCallMatch) { - serviceMethodName = serviceCallMatch[1]; - console.log(` ✅ 找到服务调用: ${serviceMethodName}`); - } else { - console.log(` ❌ 未找到服务调用,convertedMethodBody: ${convertedMethodBody.substring(0, 200)}...`); - // 如果没有找到,再匹配普通的 .method( - serviceCallMatch = convertedMethodBody.match(/\.(\w+)\(/); - if (serviceCallMatch) { - console.log(` 🔍 找到 ->method 调用: ${serviceCallMatch[1]}`); - // 过滤掉 request、params 等非服务方法 - const excludedMethods = ['request', 'params', 'param', 'input', 'validate']; - if (!excludedMethods.includes(serviceCallMatch[1])) { - serviceMethodName = serviceCallMatch[1]; - console.log(` ✅ 设置服务方法名: ${serviceMethodName}`); - } else { - console.log(` ❌ 排除非服务方法: ${serviceCallMatch[1]}`); - } - } else { - console.log(` ❌ 未找到 ->method 调用`); - // 处理属性访问: .property (转换为方法调用) - // 只匹配真正的属性访问,不匹配方法调用 - const propertyMatch = convertedMethodBody.match(/\)\s*\.\s*(\w+)(?!\()/); - if (propertyMatch) { - const propertyName = propertyMatch[1]; - // 检查是否是真正的属性访问(不是服务方法调用) - // 服务方法通常以动词开头:get, set, add, edit, del, etc. - const serviceMethodPrefixes = ['get', 'set', 'add', 'edit', 'del', 'update', 'create', 'delete', 'find', 'list', 'check', 'verify', 'upload', 'download', 'build', 'clear', 'release']; - const isServiceMethod = serviceMethodPrefixes.some(prefix => propertyName.toLowerCase().startsWith(prefix)); - - if (!isServiceMethod) { - // 将属性访问转换为方法调用,如 is_connected -> getIsConnected - serviceMethodName = `get${propertyName.charAt(0).toUpperCase()}${propertyName.slice(1)}`; - console.log(` ✅ 找到属性访问: ${propertyName} -> ${serviceMethodName}`); - } else { - console.log(` ❌ 跳过服务方法: ${propertyName}`); + // 判断是否直接 return(非 success 包装) + isDirectReturn = /return\s+(?!success\()/i.test(phpMethod); + + // 提取服务调用(支持 new XxxService()->method(...) 或 XxxService::method(...)) + const callMatches = [...phpMethod.matchAll(/(?:new\s+\w+Service\s*\([^)]*\)\s*->|\w+Service::)\s*(\w+)\s*\(([^)]*)\)/g)]; + if (callMatches.length > 0) { + const lastCall = callMatches[callMatches.length - 1]; + serviceMethodName = lastCall[1] || ''; + const rawParams = (lastCall[2] || '').trim(); + if (rawParams) { + const tokens = rawParams.split(',').map(p => p.trim()).filter(Boolean); + params = tokens.map(token => { + // 支持 $data['search']、$id、'constant' 等形式 + const arrMatch = token.match(/\$(\w+)\['([^']+)'\]/); + if (arrMatch) { + return { name: arrMatch[2], type: 'any' }; } - } else { - console.log(` ❌ 未找到属性访问,convertedMethodBody: ${convertedMethodBody.substring(0, 200)}...`); - } - } - } - - console.log(` 🔍 当前serviceMethodName: "${serviceMethodName}"`); - - // 如果仍然没有找到方法名,检查原始PHP代码中的服务调用 - if (!serviceMethodName) { - console.log(` 🔍 开始检查原始PHP代码中的服务调用`); - // 匹配 (new Service())->method( 模式 - const originalServiceMatch = methodBody.match(/\(new\s+(\w+Service)\([^)]*\)\)\s*->\s*(\w+)\(/); - if (originalServiceMatch) { - serviceMethodName = originalServiceMatch[2]; - console.log(` ✅ 找到服务调用: ${originalServiceMatch[1]}.${serviceMethodName}`); - } else { - console.log(` ❌ originalServiceMatch 不匹配`); - // 匹配 new Service()->method( 模式 - const directServiceMatch = methodBody.match(/new\s+(\w+Service)\([^)]*\)\s*->\s*(\w+)\(/); - if (directServiceMatch) { - serviceMethodName = directServiceMatch[2]; - console.log(` ✅ 找到服务调用: ${directServiceMatch[1]}.${serviceMethodName}`); - } else { - console.log(` ❌ directServiceMatch 不匹配`); - // 匹配变量服务调用: service.method( 模式 (在convertedMethodBody中$已被移除) - const variableServiceMatch = convertedMethodBody.match(/(\w+_service)\s*\.\s*(\w+)\(/); - if (variableServiceMatch) { - serviceMethodName = variableServiceMatch[2]; - console.log(` ✅ 找到变量服务调用: ${variableServiceMatch[1]}.${serviceMethodName}`); - } else { - console.log(` ❌ 变量服务调用正则不匹配: /(\\w+_service)\\s*\\.\\s*(\\w+)\\(/`); - console.log(` 🔍 尝试匹配的内容: ${convertedMethodBody}`); + const varMatch = token.match(/\$(\w+)/); + if (varMatch) { + return { name: varMatch[1], type: 'any' }; } - } - } - } else { - console.log(` ✅ 已找到服务方法名: ${serviceMethodName}`); - } - - // 处理空方法体的情况 - if (!serviceMethodName && methodBody.trim() === '') { - // 对于空方法体,返回空字符串,让调用方处理 - return { serviceMethodName: '', params: [], isDirectReturn: true }; - } - - // 处理直接返回的情况(如 return success(['app_debug' => env('app_debug', false)]);) - // 只有当方法体非常简单(只有一行return语句)时才认为是直接返回 - if (!serviceMethodName && methodBody.includes('return success(')) { - const trimmedBody = methodBody.trim(); - // 检查是否只有一行return语句(允许有注释) - const lines = trimmedBody.split('\n').filter(line => line.trim() && !line.trim().startsWith('//') && !line.trim().startsWith('/*')); - if (lines.length === 1 && lines[0].trim().startsWith('return success(')) { - console.log(` ⚠️ 方法 ${phpMethod.match(/function\s+(\w+)/)?.[1]} 被识别为直接返回,但serviceMethodName为空`); - isDirectReturn = true; - return { serviceMethodName: '', params: [], isDirectReturn: true }; - } - } - - // 提取方法参数(从 $data 提取) - const dataParamMatch = convertedMethodBody.match(/data\s*=\s*this.request.params\(\[([\s\S]*?)\]\);/); - if (dataParamMatch) { - const paramsStr = dataParamMatch[1]; - const paramMatches = paramsStr.matchAll(/\[\s*'(\w+)'[^\]]*\]/g); - for (const paramMatch of paramMatches) { - const paramName = paramMatch[1]; - // 避免重复参数 - if (!params.some(p => p.name === paramName)) { - params.push({ name: paramName, type: 'any' }); - } - } - } - - // 提取路径参数(函数签名中的参数) - const funcParamMatch = phpMethod.match(/function\s+\w+\(([\s\S]*?)\)/); - if (funcParamMatch && funcParamMatch[1].trim()) { - const funcParams = funcParamMatch[1].split(','); - for (const funcParam of funcParams) { - // 提取参数名,移除类型提示(如 string $key -> key) - let paramName = funcParam.trim(); - // 移除类型提示(如 "string $key" -> "$key") - paramName = paramName.replace(/^\w+\s+/, ''); - // 移除 $ 符号 - paramName = paramName.replace('$', ''); - - // 处理默认值(如 "addon = ''" -> "addon: any = ''") - if (paramName.includes('=')) { - const [name, defaultValue] = paramName.split('=').map(s => s.trim()); - if (name && !params.some(p => p.name === name)) { - params.push({ name: name, type: 'any', defaultValue: defaultValue }); + const strMatch = token.match(/['"]([^'\"]+)['"]/); + if (strMatch) { + return { name: strMatch[1], type: 'any' }; } - } else if (paramName && !params.some(p => p.name === paramName)) { - params.push({ name: paramName, type: 'any' }); - } + return { name: token, type: 'any' }; + }); } } - - } catch (error) { - console.log(` ⚠️ 解析PHP方法调用失败: ${error.message}`); + + // 额外:解析 $this->request->params([['field', default], ...]) 获得查询字段 + const paramsBlockMatch = phpMethod.match(/params\(\[([\s\S]*?)\]\)/); + if (paramsBlockMatch) { + const block = paramsBlockMatch[1]; + const fieldMatches = [...block.matchAll(/\[\s*['"]([^'\"]+)['"]\s*,\s*([^\]]*)\]/g)]; + if (fieldMatches.length > 0) { + const fields = fieldMatches.map(m => { + const name = m[1]; + const defaultRaw = (m[2] || '').trim(); + const defaultValue = defaultRaw.replace(/['"]/g, ''); + return { name, type: 'any', defaultValue }; + }); + // 合并(避免重复字段) + const seen = new Set(params.map(p => p.name)); + fields.forEach(f => { if (!seen.has(f.name)) params.push(f); }); + } + } + + } catch (e) { + // 保持安全默认值 } - + return { serviceMethodName, params, isDirectReturn }; } - /** - * 转换为kebab-case - */ - toKebabCase(str) { - return str.replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, ''); - } - - /** - * 获取PHP控制器的实际服务依赖 - */ - getServiceImports(moduleName, controllerName, layer) { - const phpProjectPath = path.join(__dirname, '../../niucloud-php/niucloud'); - const controllerPath = path.join(phpProjectPath, 'app', layer, 'controller', moduleName, `${this.toPascalCase(controllerName)}.php`); - - if (!fs.existsSync(controllerPath)) { - return this.getDefaultServiceImport(moduleName, controllerName, layer); - } - - try { - const content = fs.readFileSync(controllerPath, 'utf8'); - const serviceImports = []; - - // 解析 use 语句中的服务 - const useMatches = content.match(/use\s+app\\service\\([^;]+);/g); - if (useMatches) { - for (const useMatch of useMatches) { - const servicePath = useMatch.match(/use\s+app\\service\\([^;]+);/)[1]; - const parts = servicePath.split('\\'); - const serviceName = parts[parts.length - 1]; - const serviceLayer = parts[0]; // 第一层是层级 (admin/api/core) - const serviceModule = parts[1]; // 第二层是模块名 - - // 生成服务类名 - 保留层级区分 - let serviceClassName = serviceName; - if (serviceLayer === 'admin') { - serviceClassName = serviceName; - } else if (serviceLayer === 'api') { - serviceClassName = serviceName; - } else if (serviceLayer === 'core') { - // 如果serviceName已经以Core开头,不再重复添加 - serviceClassName = serviceName.startsWith('Core') ? serviceName : `Core${serviceName}`; - } - - // 生成导入路径 - const importPath = this.getServiceImportPath(serviceModule, serviceLayer, serviceName, moduleName); - if (importPath) { - serviceImports.push(`import { ${serviceClassName} } from '${importPath}';`); - } - } - } - - - return serviceImports.join('\n'); - } catch (error) { - console.warn(`⚠️ 解析PHP控制器失败: ${controllerPath}`); - return this.getDefaultServiceImport(moduleName, controllerName, layer); - } - } - - /** - * 获取默认服务导入 - 智能选择服务层 - */ - getDefaultServiceImport(moduleName, controllerName, layer) { - // 基于真实PHP控制器解析服务依赖,智能选择服务层 - const baseName = controllerName.replace(/Controller$/, ''); - - // 智能选择最佳服务层 - const bestServiceLayer = this.selectBestServiceLayer(moduleName, layer); - if (!bestServiceLayer) { - console.log(` ⚠️ 模块 ${moduleName} 没有可用的服务层`); - return ''; - } - - let serviceClassName = `${baseName}Service`; - if (bestServiceLayer === 'core') { - // Core层服务需要Core前缀 - serviceClassName = baseName.startsWith('Core') ? `${baseName}Service` : `Core${baseName}Service`; - } - - // 检查服务文件是否存在 - const servicePath = path.join(this.config.nestjsBasePath, moduleName, 'services', bestServiceLayer, `${this.toKebabCase(baseName)}.service.ts`); - if (!fs.existsSync(servicePath)) { - console.log(` ⚠️ 服务文件不存在: ${servicePath}`); - return ''; - } - - console.log(` ✅ 选择服务层: ${moduleName} -> ${bestServiceLayer} (${serviceClassName})`); - return `import { ${serviceClassName} } from '../../services/${bestServiceLayer}/${this.toKebabCase(baseName)}.service';`; - } - - /** - * 获取服务导入路径 - */ - getServiceImportPath(serviceModule, serviceLayer, serviceName, currentModule) { - const baseName = serviceName.replace('Service', ''); - - // 如果是跨模块服务,需要调整路径 - if (serviceModule !== currentModule) { - // 跨模块服务直接使用解析出的服务层 - const servicePath = path.join(this.config.nestjsBasePath, serviceModule, 'services', serviceLayer, `${this.toKebabCase(baseName)}.service.ts`); - if (!fs.existsSync(servicePath)) { - return ''; - } - return `../../../${serviceModule}/services/${serviceLayer}/${this.toKebabCase(baseName)}.service`; - } - - // 同模块服务 - 直接使用解析出的服务层 - const servicePath = path.join(this.config.nestjsBasePath, currentModule, 'services', serviceLayer, `${this.toKebabCase(baseName)}.service.ts`); - if (!fs.existsSync(servicePath)) { - return ''; - } - - return `../../services/${serviceLayer}/${this.toKebabCase(baseName)}.service`; - } - - /** - * 获取构造函数中的服务注入 - */ - getConstructorServices(moduleName, controllerName, layer) { - const phpProjectPath = path.join(__dirname, '../../niucloud-php/niucloud'); - const controllerPath = path.join(phpProjectPath, 'app', layer, 'controller', moduleName, `${this.toPascalCase(controllerName)}.php`); - - if (!fs.existsSync(controllerPath)) { - return this.getDefaultConstructorService(moduleName, controllerName, layer); - } - - try { - const content = fs.readFileSync(controllerPath, 'utf8'); - const services = []; - - // 获取控制器中的所有方法名,避免服务实例名与方法名重复 - const methodMatches = content.match(/public\s+function\s+(\w+)\s*\(/g); - const methodNames = methodMatches ? methodMatches.map(match => { - const methodMatch = match.match(/public\s+function\s+(\w+)\s*\(/); - return methodMatch ? methodMatch[1] : null; - }).filter(name => name) : []; - - // 解析 use 语句中的服务 - const useMatches = content.match(/use\s+app\\service\\([^;]+);/g); - if (useMatches) { - for (const useMatch of useMatches) { - const servicePath = useMatch.match(/use\s+app\\service\\([^;]+);/)[1]; - const parts = servicePath.split('\\'); - const serviceName = parts[parts.length - 1]; - const serviceLayer = parts[0]; // 第一层是层级 (admin/api/core) - const serviceModule = parts[1]; // 第二层是模块名 - - // 生成服务类名 - 保留层级区分 - let serviceClassName = serviceName; - if (serviceLayer === 'admin') { - serviceClassName = serviceName; - } else if (serviceLayer === 'api') { - serviceClassName = serviceName; - } else if (serviceLayer === 'core') { - // 如果serviceName已经以Core开头,不再重复添加 - serviceClassName = serviceName.startsWith('Core') ? serviceName : `Core${serviceName}`; - } - - // 检查服务文件是否存在 - const serviceImportPath = this.getServiceImportPath(serviceModule, serviceLayer, serviceName, moduleName); - if (serviceImportPath) { - // 生成服务实例名,与getServiceInstanceName保持一致 - const baseInstanceName = this.toCamelCase(serviceName.replace('Service', '')); - const serviceInstanceName = `${baseInstanceName}Service`; - services.push(`private readonly ${serviceInstanceName}: ${serviceClassName}`); - } - } - } - - - return services.join(',\n '); - } catch (error) { - console.warn(`⚠️ 解析PHP控制器失败: ${controllerPath}`); - return this.getDefaultConstructorService(moduleName, controllerName, layer); - } - } - - /** - * 获取默认构造函数服务 - 保留层级区分 - */ - getDefaultConstructorService(moduleName, controllerName, layer) { - // 基于真实PHP控制器解析服务依赖,保留层级区分 - const baseName = controllerName.replace(/Controller$/, ''); - let serviceClassName = `${baseName}Service`; - if (layer === 'admin') { - serviceClassName = `${baseName}Service`; - } else if (layer === 'api') { - serviceClassName = `${baseName}Service`; - } else if (layer === 'core') { - // 如果baseName已经以Core开头,不再重复添加 - serviceClassName = baseName.startsWith('Core') ? `${baseName}Service` : `Core${baseName}Service`; - } - - // 智能选择最佳服务层 - const bestServiceLayer = this.selectBestServiceLayer(moduleName, layer); - if (!bestServiceLayer) { - console.log(` ⚠️ 模块 ${moduleName} 没有可用的服务层`); - return ''; - } - - // 检查服务文件是否存在 - const servicePath = path.join(this.config.nestjsBasePath, moduleName, 'services', bestServiceLayer, `${this.toKebabCase(baseName)}.service.ts`); - if (!fs.existsSync(servicePath)) { - console.log(` ⚠️ 服务文件不存在: ${servicePath}`); - return ''; - } - - // 根据选择的服务层调整类名 - if (bestServiceLayer === 'core') { - serviceClassName = baseName.startsWith('Core') ? `${baseName}Service` : `Core${baseName}Service`; - } - - console.log(` ✅ 构造函数选择服务层: ${moduleName} -> ${bestServiceLayer} (${serviceClassName})`); - - const serviceInstanceName = this.toCamelCase(baseName); - // 避免服务实例名与方法名重复 - const methodNames = ['upgrade', 'login', 'captcha', 'logout', 'execute', 'operate']; - const finalInstanceName = methodNames.includes(serviceInstanceName) ? `${serviceInstanceName}Service` : serviceInstanceName; - return ` private readonly ${finalInstanceName}: ${serviceClassName}`; - } - - /** - * 获取服务实例名 - * 根据PHP方法中的实际服务调用选择正确的服务实例 - */ - getServiceInstanceName(phpMethod, controllerName) { - try { - // 提取方法体 - const bodyMatch = phpMethod.match(/\{([\s\S]*)\}/); - if (!bodyMatch) { - return this.getDefaultServiceInstanceName(controllerName); - } - - const methodBody = bodyMatch[1]; - - // 查找 new Service() 调用(支持有参数的情况) - const serviceMatch = methodBody.match(/new\s+(\w+Service)\s*\([^)]*\)/); - if (serviceMatch) { - const serviceName = serviceMatch[1]; - // 转换为实例名:LoginService -> loginService,与构造函数注入保持一致 - const instanceName = this.toCamelCase(serviceName.replace('Service', '')); - return `${instanceName}Service`; - } - - // 如果没有找到,使用默认逻辑 - return this.getDefaultServiceInstanceName(controllerName); - } catch (error) { - return this.getDefaultServiceInstanceName(controllerName); - } - } - /** * 获取默认服务实例名 */ @@ -1438,6 +829,46 @@ ${routeComment} return null; } + + /** + * 生成服务导入语句 + */ + getServiceImports(moduleName, controllerName, layer) { + try { + const pascal = this.toPascalCase(controllerName); + const kebab = this.toKebabCase(controllerName); + const serviceLayer = this.getCorrectServiceLayer(layer); + if (!serviceLayer) return ''; + const importPath = `../services/${serviceLayer}/${kebab}.service`; + return `import { ${pascal}Service } from '${importPath}';`; + } catch (e) { + return ''; + } + } + + /** + * 生成构造函数注入的服务 + */ + getConstructorServices(moduleName, controllerNamePascal, serviceLayer) { + const prop = this.toCamelCase(controllerNamePascal) + 'Service'; + const type = `${controllerNamePascal}Service`; + return `private readonly ${prop}: ${type}`; + } + + /** + * 获取服务实例名(与构造函数属性一致) + */ + getServiceInstanceName(phpMethod, controllerName) { + try { + const serviceMatch = phpMethod && phpMethod.match(/new\s+(\w+)Service\s*\(/); + if (serviceMatch) { + const base = serviceMatch[1]; + return this.toCamelCase(base) + 'Service'; + } + } catch {} + const baseName = (controllerName || '').replace(/Controller$/, ''); + return this.toCamelCase(baseName) + 'Service'; + } } // 如果直接运行此文件 diff --git a/tools-v1/php-tools/generators/service-generator.js b/tools-v1/php-tools/generators/service-generator.js index 415707a6..19d86ff7 100644 --- a/tools-v1/php-tools/generators/service-generator.js +++ b/tools-v1/php-tools/generators/service-generator.js @@ -237,7 +237,7 @@ class ServiceGenerator { */ generateBasicServiceContent(moduleName, serviceName, layer) { // 先去掉层级后缀,再去掉Service后缀 - const cleanServiceName = serviceName.replace(/_(admin|api|core)$/, ''); + const cleanServiceName = serviceName.replace(/_(admin|api|core)$/,''); const baseName = cleanServiceName.endsWith('Service') ? cleanServiceName.slice(0, -7) : cleanServiceName; // 正确的命名规范:服务类名(与PHP/Java保持一致) @@ -256,12 +256,7 @@ class ServiceGenerator { return `import { Injectable, Logger } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; -import { ConfigService } from '@nestjs/config'; -import { CacheService } from '@wwjCommon/infra/cache/cache.service'; -import { UploadService } from '@wwjVendor/upload/upload.service'; -import { PayService } from '@wwjVendor/pay/pay.service'; -import { SmsService } from '@wwjVendor/sms/sms.service'; -import { NoticeService } from '@wwjVendor/notice/notice.service'; +${infrastructureImports} /** * ${className} - ${layer}层服务 @@ -298,8 +293,7 @@ export class ${className} { // 服务方法需要基于真实PHP服务类解析 // 禁止假设方法,所有方法必须来自PHP源码 // 可使用注入的服务:configService, uploadService, payService, smsService, noticeService -} -`; +}`; } /** diff --git a/tools-v1/php-tools/generators/validator-generator.js b/tools-v1/php-tools/generators/validator-generator.js index 52c91a4d..a6e7db21 100644 --- a/tools-v1/php-tools/generators/validator-generator.js +++ b/tools-v1/php-tools/generators/validator-generator.js @@ -239,7 +239,7 @@ export class Query${this.toPascalCase(validateName)}Dto { // 生成DTO字段 const dtoFields = fields.map(field => { const validatorsStr = field.validators.map(v => `@${v}()`).join('\n '); - return ` @ApiProperty({ description: '${field.name}' }) + return ` @ApiProperty({ description: ${JSON.stringify(field.name)} }) ${validatorsStr} ${this.toCamelCase(field.name)}: ${field.type};`; }).join('\n\n'); diff --git a/tools-v1/scripts/php-file-discovery.js b/tools-v1/scripts/php-file-discovery.js index 595abce2..8aef4bc1 100644 --- a/tools-v1/scripts/php-file-discovery.js +++ b/tools-v1/scripts/php-file-discovery.js @@ -541,7 +541,7 @@ class PHPFileDiscovery { * 保存发现结果到文件 */ saveDiscoveryResult() { - const resultPath = path.join(__dirname, 'php-discovery-result.json'); + const resultPath = path.join(__dirname, '../php-tools/php-discovery-result.json'); fs.writeFileSync(resultPath, JSON.stringify(this.discoveredFiles, null, 2)); console.log(`\n💾 发现结果已保存到: ${resultPath}`); } diff --git a/tools/.incremental-state.json b/tools/.incremental-state.json new file mode 100644 index 00000000..c2d57754 --- /dev/null +++ b/tools/.incremental-state.json @@ -0,0 +1,5941 @@ +{ + "lastUpdate": "2025-10-14T16:26:05.046Z", + "fileHashes": { + "app/AppService.php": "febeae65a57754747b5bf03c1334c565", + "app/ExceptionHandle.php": "357f277dc174f775bd19e4697f07767c", + "app/Request.php": "58d205d43b5bbf96c796615bc7c77b77", + "app/adminapi/config/config.php": "8996e274efc4d4c0ec8169791d7b102f", + "app/adminapi/config/route.php": "c2c282a176879827940f6e3fc888304d", + "app/adminapi/controller/addon/Addon.php": "908c545e36ca35a3182841824b3aa06c", + "app/adminapi/controller/addon/AddonDevelop.php": "43b6e4b243e2356a1c39e26952d5103a", + "app/adminapi/controller/addon/App.php": "93b22e5283d0e462cab0e50777e9dd20", + "app/adminapi/controller/addon/Backup.php": "e898c02dc4b1107d01b034dfb9bf84c8", + "app/adminapi/controller/addon/Upgrade.php": "7d28f0108695e5b32f1ccdd80877f1e1", + "app/adminapi/controller/aliapp/Config.php": "e59bcfb54a2bb84ce4b3cb6ebfa183f0", + "app/adminapi/controller/applet/SiteVersion.php": "9a974ef1e7db5f01a25c9fa8469ad83b", + "app/adminapi/controller/applet/Version.php": "fecb36ed4f627b2ea54a1bd20c7fcee4", + "app/adminapi/controller/applet/VersionDownload.php": "8a2bb9f8904cec6bcf83fec1371c14d1", + "app/adminapi/controller/auth/Auth.php": "22e5a68b2d877a7ff4d0c95c0fe17dee", + "app/adminapi/controller/channel/App.php": "11fb2a4958e27deb566fa4daf21d09a3", + "app/adminapi/controller/channel/H5.php": "9f5e2ec3d9dd5ba6cc929f74ac27e122", + "app/adminapi/controller/channel/Pc.php": "8523c61efbc050b6fc1ca487e5e7b223", + "app/adminapi/controller/dict/Dict.php": "ae7d24e416ff22f8b30ce41f7816de67", + "app/adminapi/controller/diy/Config.php": "c8cd33c48d92d0b55e150b170a63a6af", + "app/adminapi/controller/diy/Diy.php": "6552d765b4f3c249dc6c805d20933337", + "app/adminapi/controller/diy/DiyForm.php": "dc17e2f11c6bf06f18d959619d946bd7", + "app/adminapi/controller/diy/DiyRoute.php": "32fabe63b9f923e627bee0bf58a391a6", + "app/adminapi/controller/generator/Generator.php": "9f2226fb10f3b84a0048cd405f0ecf28", + "app/adminapi/controller/home/Site.php": "5c81a92c09e958ef5037abc56571cc16", + "app/adminapi/controller/index/PromotionAdv.php": "4da011da5b3498a212d6e411ef570d45", + "app/adminapi/controller/login/Captcha.php": "9643e38048b0685eef1a6da7462a05df", + "app/adminapi/controller/login/Config.php": "6d7c4837e541c27b438267371fabc4ad", + "app/adminapi/controller/login/Login.php": "dbb8a04ffd7995a681a645c9f3c811a1", + "app/adminapi/controller/member/Account.php": "b04cb7c5e014c2cf3ed06801aec19c07", + "app/adminapi/controller/member/Address.php": "b7b97d4e586b23abea966842dd006701", + "app/adminapi/controller/member/CashOut.php": "8fbed121a5bd50bc643d0aa9f1d77423", + "app/adminapi/controller/member/Config.php": "29c9a0d4e3bcccfc4e03d4b67a86e5a3", + "app/adminapi/controller/member/Member.php": "cbc777beb2e117ac7fcfb300958158d9", + "app/adminapi/controller/member/MemberLabel.php": "c68cd6ca3357e957df3c702061827e88", + "app/adminapi/controller/member/MemberLevel.php": "0708ccae177fe5e52d20b5b9777aab9c", + "app/adminapi/controller/member/MemberSign.php": "6c3ce9ea0c8c118a544c489dfcafd748", + "app/adminapi/controller/niucloud/Cloud.php": "2879ea364e6718531c2692425f31e172", + "app/adminapi/controller/niucloud/Module.php": "c7cbf389a36d44996a929f9dc5d512f6", + "app/adminapi/controller/notice/NiuSms.php": "eb19a0d45d1de75804a20cc0c8b83a2a", + "app/adminapi/controller/notice/Notice.php": "3173d3faa21dc2f78c4871b459db6482", + "app/adminapi/controller/notice/NoticeLog.php": "e217ed3ab0cb72205fe3546c348fbafa", + "app/adminapi/controller/notice/SmsLog.php": "6f82693c5b4a20f6e044915e570653f6", + "app/adminapi/controller/pay/Pay.php": "19d1369790cb3842b717abc01b7ab569", + "app/adminapi/controller/pay/PayChannel.php": "9d8f6cae43bdcca533264342b9ef442c", + "app/adminapi/controller/pay/PayRefund.php": "31984c9f2c46788144ab5d5cb5d392a1", + "app/adminapi/controller/pay/Transfer.php": "a1ac1b62221a8474a919e8b21ec5e4bd", + "app/adminapi/controller/poster/Poster.php": "720f005f3aa0bada87e1b189af1c9148", + "app/adminapi/controller/site/Site.php": "33b0d1db220a54521ff7d0d162a423f1", + "app/adminapi/controller/site/SiteAccount.php": "a6c2863ec615107f06a38c3387ec16ba", + "app/adminapi/controller/site/SiteGroup.php": "cb600e5f3d8c2dad6de852204b89e978", + "app/adminapi/controller/site/User.php": "4d673020bee2dcbc960f4593af98480d", + "app/adminapi/controller/site/UserLog.php": "494d88385110d2b397f476e6a8117a11", + "app/adminapi/controller/stat/SiteStat.php": "eae53afcbc4921b695f5fce839ebbcf9", + "app/adminapi/controller/stat/Stat.php": "2cc8d7a40582a5947c81f1ea8738de6a", + "app/adminapi/controller/sys/Agreement.php": "494c7a21d937943ed1ae812bdeb0506f", + "app/adminapi/controller/sys/App.php": "0651a22c5701f6064f3d4af4df99aa0f", + "app/adminapi/controller/sys/Area.php": "561418fd3f8893ee4a9420bd57fc6d89", + "app/adminapi/controller/sys/Attachment.php": "be99ece693893f8878e6210a254ae4e1", + "app/adminapi/controller/sys/Channel.php": "1bf41276eca343ecc68c7eb3d1167f05", + "app/adminapi/controller/sys/Common.php": "d4c27ade7c0e13113bc4ff791c1a4cca", + "app/adminapi/controller/sys/Config.php": "22c68dafb03af27e05ebeb188a9ae19a", + "app/adminapi/controller/sys/Export.php": "1132819dc5cd8c0b7a887cd10c073683", + "app/adminapi/controller/sys/Menu.php": "22c496bd22d5c8b350ae1c2866ab31eb", + "app/adminapi/controller/sys/Poster.php": "19881c098dfddd7190338ea17dd7581d", + "app/adminapi/controller/sys/Printer.php": "4d0ebfcc8a9bce13a705ab7c255c4c41", + "app/adminapi/controller/sys/Role.php": "ccadf1e6e5d0eb9ec62ae895bc806495", + "app/adminapi/controller/sys/Schedule.php": "b4d8819335711e658e47954fb35a0448", + "app/adminapi/controller/sys/ScheduleLog.php": "a4afd1070b4aca7fcd66ccab2dab8eac", + "app/adminapi/controller/sys/System.php": "760de50efda4eadd0b485bbbdc914bc6", + "app/adminapi/controller/sys/Ueditor.php": "9735b523d4b09842d6d5d32b6f0717d9", + "app/adminapi/controller/upload/Storage.php": "c59830e9803764064e368f499fecb5fd", + "app/adminapi/controller/upload/Upload.php": "9ad3d7d1341bbe88299debba0a1b10e9", + "app/adminapi/controller/user/User.php": "becbb815d828c2c73f68192d6157a3a8", + "app/adminapi/controller/verify/Verifier.php": "985c0b6a2d278f04357a7f7414c05060", + "app/adminapi/controller/verify/Verify.php": "ec4f67c97947637a3da062df6c941340", + "app/adminapi/controller/weapp/Config.php": "ea84d976a8029c02b851203363c2201d", + "app/adminapi/controller/weapp/Delivery.php": "b00b8cbe5735e62d1f3eaca35b4f9480", + "app/adminapi/controller/weapp/Package.php": "44b7e30a5776e60dff6e25421d47040c", + "app/adminapi/controller/weapp/Template.php": "0e9b9397c38e3d1545f3f07068eee119", + "app/adminapi/controller/weapp/Version.php": "91f60ef1ae67a1ef9f689c39a15a6604", + "app/adminapi/controller/wechat/Config.php": "58f2f85bbdb40c65430948949adfaa83", + "app/adminapi/controller/wechat/Media.php": "af3a9b99ac4d0c55368a58853b1f088b", + "app/adminapi/controller/wechat/Menu.php": "0b8d536f7793c63ef84c922d538712be", + "app/adminapi/controller/wechat/Reply.php": "970c8ff4fbda0b1a7069e604956c5962", + "app/adminapi/controller/wechat/Template.php": "dd8380cda0a15c90b9cafac78592e038", + "app/adminapi/controller/wxoplatform/Config.php": "b44d3ddc316ca0b3c518ce201b780bee", + "app/adminapi/controller/wxoplatform/Oplatform.php": "a1615cca4a22e37ec806e0f9add924ae", + "app/adminapi/controller/wxoplatform/Server.php": "8911e3c2384d450f375c9513614960ee", + "app/adminapi/controller/wxoplatform/WeappVersion.php": "565a55d31f5fb08e9fc58e5345a92bd5", + "app/adminapi/middleware/AdminCheckRole.php": "60d89c25fe6986d21844ca48a5786524", + "app/adminapi/middleware/AdminCheckToken.php": "5b4b479c6532d6a583c708d88468d2dd", + "app/adminapi/middleware/AdminLog.php": "9de0f09cf641743ebeae1df1bca66f16", + "app/adminapi/middleware/AllowCrossDomain.php": "55c8c34595d17c66dfe1455e02115446", + "app/adminapi/middleware.php": "3ef5daa477e0429d59b5d614be634999", + "app/adminapi/route/addon.php": "76111c91991fda9f4963b2d1d23e6f52", + "app/adminapi/route/aliapp.php": "4f687e3174b81b84e0df35f8c259a76a", + "app/adminapi/route/app.php": "ecaaaf78bab34794a32b6617622dd704", + "app/adminapi/route/applet.php": "e1734bec9056a36a7f9ae0a74a729c22", + "app/adminapi/route/auth.php": "3e64075b9f71826f7ce1269fc531ad68", + "app/adminapi/route/channel.php": "7d176cb8e09f3fbf9e85533f5db37b63", + "app/adminapi/route/dict.php": "f985f94c1a6fd6c77a5f5db37006ed95", + "app/adminapi/route/diy.php": "cbe173382a5028002442ee6071df8075", + "app/adminapi/route/generator.php": "94cc73c51b2b71e9ebfd2397a63f8ec2", + "app/adminapi/route/home.php": "61e6ce26ece471abb55bfde9ec9da27f", + "app/adminapi/route/index.php": "a84eb5f5a4b3c43e931b1668e3e63b35", + "app/adminapi/route/member.php": "cfb67695d5cd70bb87bff8e8378f5dbc", + "app/adminapi/route/niucloud.php": "57a8ba497226d29338efc86a8a118d46", + "app/adminapi/route/notice.php": "e93c4daa7abbce9ba84578088eb386cf", + "app/adminapi/route/pay.php": "3e96e091973120be72192943c5e9da2c", + "app/adminapi/route/route.php": "4adb0684bda7293394ad4e5d49b98104", + "app/adminapi/route/site.php": "af6405059832da818109f07b7ccf0f1d", + "app/adminapi/route/stat.php": "10b649503c22f784caaee96480cb8e4b", + "app/adminapi/route/sys.php": "f3e102cfc7de40149e173052f7290b15", + "app/adminapi/route/upgrade.php": "00a786fdfa5f7af742be3ed0f4f0c10c", + "app/adminapi/route/user.php": "8abadd74c3cfbebaab90cc2b78e7aa6f", + "app/adminapi/route/verify.php": "8d9e65cccbe7f71b8512c738e1349787", + "app/adminapi/route/weapp.php": "ce3681bbc3ef8320ca0ef87343f9d651", + "app/adminapi/route/wechat.php": "209d6a18ec4db8489a66d45b431903a3", + "app/adminapi/route/wxoplatform.php": "8c2beff7d9a13ce0f894fa31f3b62bcb", + "app/api/config/config.php": "8a8eb9ed97f3e6756a5b749b75919489", + "app/api/config/route.php": "4cd8f6db519c1d9eec63b3c03b845b0d", + "app/api/controller/addon/Addon.php": "eefc7a72e39bda8b1812610c9c04ac79", + "app/api/controller/agreement/Agreement.php": "db6370ce29748f70f49044619608c2ad", + "app/api/controller/channel/App.php": "d21e4da4ae1ecba255766623a574e956", + "app/api/controller/diy/Diy.php": "1b6a659ea492385b0b48dde559332cbc", + "app/api/controller/diy/DiyForm.php": "688bd25dee6e78e4e5068e0152b86008", + "app/api/controller/login/Config.php": "7105fbf43ad0fc2899c3e1f9e6704ee2", + "app/api/controller/login/Login.php": "04c3f26637df9738ad85af68ec2529fe", + "app/api/controller/login/Register.php": "46777ee4e0dda0371f9a1124822e24f1", + "app/api/controller/member/Account.php": "fbcdb942585053ce51cf643a5bb28592", + "app/api/controller/member/Address.php": "39a5972e41606299dbd3d73ee9ad3e34", + "app/api/controller/member/CashOutAccount.php": "edc7f12e5b8d52aa3220cd7693e4b3cd", + "app/api/controller/member/Level.php": "be8288fd3d41dc107a6f4718683824e9", + "app/api/controller/member/Member.php": "2dcf4b294c686b95b075f23adfacddcb", + "app/api/controller/member/MemberCashOut.php": "42ce77b0bb4357711a9f057fde07e838", + "app/api/controller/member/MemberSign.php": "002e13eb79ba76514a1578263831b383", + "app/api/controller/pay/Pay.php": "14968343d58997b016faf85cca6f97ab", + "app/api/controller/pay/Transfer.php": "0eeb53ba4c5405b224d881025fade85b", + "app/api/controller/poster/Poster.php": "87dc7c1c8dbd09cdef0525f531b94489", + "app/api/controller/sys/Area.php": "63f3edb14f212398194cb7fbd74500c8", + "app/api/controller/sys/Config.php": "dc19619b7cdd5d3c8ab3934130c6444d", + "app/api/controller/sys/Scan.php": "56f76cfed0859fe59cd4274f45d65844", + "app/api/controller/sys/Task.php": "4954b7102c1dc37c37e33ba3e23e6968", + "app/api/controller/sys/Verify.php": "e16cedd47406bc898aca76f54554be2f", + "app/api/controller/upload/Upload.php": "e2e5f56d71d5d9d6e3f385df258a0b13", + "app/api/controller/weapp/Serve.php": "42aed0b29cf3fb53cec710c18ea9b8a1", + "app/api/controller/weapp/Weapp.php": "3eac4b04d887fb2456f655a9468524f8", + "app/api/controller/wechat/Serve.php": "c0a3340d0614726ed82a181caa4271a5", + "app/api/controller/wechat/Wechat.php": "c2fd9ef6c169589e098a0f8c7b64b901", + "app/api/middleware/AllowCrossDomain.php": "c895e9586d8fb49bdb4eeccc08e0dfff", + "app/api/middleware/ApiChannel.php": "22d324d0e3134c1f697489f84d6294b1", + "app/api/middleware/ApiCheckToken.php": "301da30d5033f9a593a276c1006c50f7", + "app/api/middleware/ApiLog.php": "1b005952be80c24bb46b5b7ebde65218", + "app/api/middleware.php": "b7c80bcc8a354eefed1115926ea52cee", + "app/api/route/addon.php": "7a9035a092a103dbbc989a84a31b1b59", + "app/api/route/auth.php": "075a991e8d45b03f3b76c006b69a7a72", + "app/api/route/dispatch/BindDispatch.php": "a97f535bf20f6f103c6f6522989b5bf0", + "app/api/route/diy.php": "6b6f9c16a3e4f970215cd113ed646dd3", + "app/api/route/file.php": "e947f650c5b00438a78279a0cd37aa78", + "app/api/route/member.php": "1df62ee903eb9c6d8ee8918f23e06c47", + "app/api/route/pay.php": "1989bf9eed7f89dc7854934c4a245f07", + "app/api/route/route.php": "6f976f983b3414cff433e7349e857562", + "app/command/Addon/Install.php": "2660663067eb7c821040443c19380f4e", + "app/command/Addon/Uninstall.php": "48c0a19e11c67b136917ff472ee19315", + "app/command/Menu.php": "4ef97f64f532bb6ca19dc1c968b23b56", + "app/command/Resetpassword.php": "49e3631629165ff0bbbd93e62a0ce30b", + "app/command/WorkerCommand.php": "8cc920985deebe44c12c82baab204e70", + "app/command/queue/Queue.php": "412a0adfb6a17ebc9bda0639e1295ec9", + "app/command/schedule/Schedule.php": "7e00fcab78a61f08d6e00e09773c8879", + "app/command/workerman/Workerman.php": "83a3725b1f1dea86d82fef51ffae0751", + "app/common.php": "4ba82f17462042de86d571689c7298de", + "app/dict/addon/AddonDict.php": "08114efc7daaf8a499fec0dd66c0de87", + "app/dict/applet/AppletlDict.php": "a5fd703df2ba966de20f143c7f2922dc", + "app/dict/cash_out/CashOutTypeDict.php": "c0cd20dabb935e7ffd8c15c7093e92de", + "app/dict/channel/AppDict.php": "71bff0e2a37d7af13a71023eb1791dfd", + "app/dict/channel/CertDict.php": "0cbf44f2f85da63cc6220c5bf5eacfdd", + "app/dict/channel/ReplyDict.php": "8adb7b05ad82fa1a19f94e5af397f6df", + "app/dict/channel/WechatDict.php": "661ceb04782e32757a3a609b413cae2b", + "app/dict/common/ChannelDict.php": "b47111bf4af5028857f6d185df96c8f5", + "app/dict/common/CommonActiveDict.php": "c818dbaa9ed0315b52b7098ccf4aa810", + "app/dict/common/CommonDict.php": "ba556426500425c5a5c8ef2712c54f56", + "app/dict/diy/ComponentDict.php": "a6ab88fca3197f34ee627b21749b1fa5", + "app/dict/diy/LinkDict.php": "a6fd1f0e7dcbc34b90bb7cb2ea05ad57", + "app/dict/diy/PagesDict.php": "3ebae20cd7426e031c7b7386bcb1d903", + "app/dict/diy/TemplateDict.php": "d42918b99b1b28f82e3a3bab59b19e80", + "app/dict/diy_form/ComponentDict.php": "d44268b2e669c9dbce26328b42bf145b", + "app/dict/diy_form/ConfigDict.php": "55ebeadfc67d88622f3751519d01f2a8", + "app/dict/diy_form/TemplateDict.php": "885340afc387d12ab67c4edf7c418be3", + "app/dict/diy_form/TypeDict.php": "7fec044e6e1c34c9374a1f17ae9f3d65", + "app/dict/member/MemberAccountChangeTypeDict.php": "ef0008e40a6ac497a26dae677f3973ec", + "app/dict/member/MemberAccountTypeDict.php": "cdacaf1436ec087ec3a277f629660964", + "app/dict/member/MemberCashOutDict.php": "6dfa8bbd398b2292bb6a71f9e32574ad", + "app/dict/member/MemberDict.php": "51fe700ea255764a25fa310e3d2de976", + "app/dict/member/MemberLevelDict.php": "d37be975e03316f9f9a8db8dacf26b1f", + "app/dict/member/MemberLoginTypeDict.php": "adb3542ba1fe666fad130b291e80995e", + "app/dict/member/MemberRegisterChannelDict.php": "1c90dba3ade7202846c203ae7a41cff6", + "app/dict/member/MemberRegisterTypeDict.php": "cd578e946137a1f1ab64dcd204e9212f", + "app/dict/member/MemberSignDict.php": "141ee7d11c971c1c13ab598baa33bf56", + "app/dict/member/MemberSignTypeDict.php": "cd558a2f431968b93bc9e4ccfb714871", + "app/dict/member/account_change_type.php": "ac87ad9c4e008ea704884f76c9dc0132", + "app/dict/member/benefits.php": "37d7d042cd2204b2d243e4a0c30f23f8", + "app/dict/member/gift.php": "8f4e138eb40d38e29de28d51b4e03e2e", + "app/dict/member/growth_rule.php": "a384eac626f9722e81c46baffcaa0039", + "app/dict/member/point_rule.php": "2d2020e640b01839f401034f241e7981", + "app/dict/menu/admin.php": "e863ff707625f4a4655836854a908b52", + "app/dict/menu/site.php": "e63f41efe2ff7ebe2b47d3758418fbf2", + "app/dict/notice/NoticeDict.php": "6c8046b3b7d8eb56870d347851e4a6be", + "app/dict/notice/NoticeTypeDict.php": "257770c22151f6c5c4aacc2e7c1858d7", + "app/dict/notice/notice.php": "d7048ef6d30df620e1e3b4222d2d7938", + "app/dict/notice/sms.php": "d60f3df25c21d60951954cde074e990b", + "app/dict/notice/weapp.php": "198ae21c6fdb149fca05ff42d0b62e0d", + "app/dict/notice/wechat.php": "198ae21c6fdb149fca05ff42d0b62e0d", + "app/dict/pay/OnlinePayDict.php": "36a64e3cf4bac730c3cb08146befa8f2", + "app/dict/pay/OnlineRefundDict.php": "19180c0fa4992842d8038474f4c4be26", + "app/dict/pay/PayChannelDict.php": "35f1a0e49b050a0b75ed93e3edae30a9", + "app/dict/pay/PayDict.php": "e6d536972b577b8cf840c9bae27ba207", + "app/dict/pay/PaySceneDict.php": "abf93bfd54e3ca06736ae13e7291e432", + "app/dict/pay/RefundDict.php": "5adaa923cf0849aab1819b868f936012", + "app/dict/pay/TransferDict.php": "63603c74408052650bac6c0161270325", + "app/dict/poster/ComponentDict.php": "99ca03b7fab48d6827a9e6932bd18565", + "app/dict/poster/template.php": "cd4cc5b7e712c4c618c05814ea564191", + "app/dict/scan/ScanDict.php": "d617465bec331189e0bfa50af93099e9", + "app/dict/schedule/ScheduleDict.php": "b05a3659389a3b2ad580116be28d27e0", + "app/dict/schedule/ScheduleLogDict.php": "ab36088596c6bc6f9d1593a014249f15", + "app/dict/schedule/schedule.php": "014dde14bf46296a0479534207b5c09a", + "app/dict/site/SiteAccountLogDict.php": "dc82dea274dd3c386142a944106d0711", + "app/dict/site/SiteDict.php": "b5ac50eea24347eb9c6d452e4237366a", + "app/dict/sys/AgreementDict.php": "df295304cc23f0f0f2781715d1f174fd", + "app/dict/sys/AppTypeDict.php": "36c1852c807ffafc9d75c09c16ef81b4", + "app/dict/sys/BackupDict.php": "92faebdecc5d8b9c450e50cb7dccfefa", + "app/dict/sys/CloudDict.php": "98071b86d2d3ea25037d820f66aa47d0", + "app/dict/sys/ConfigKeyDict.php": "6f5766737bde76c5b0aff500a6debd7c", + "app/dict/sys/DateDict.php": "756a9fedd4b6834a3743a2c3f0a2f47f", + "app/dict/sys/ExportDict.php": "7a0eb253777ed568a27d0bc6ef39e784", + "app/dict/sys/FileDict.php": "b3a6965a63d79f4bff6fe93b5b8043c3", + "app/dict/sys/MenuDict.php": "8b7f34757b1aecc11425fcba9c9f70ad", + "app/dict/sys/MenuTypeDict.php": "ea6925816d417a0b7392a78d4210aaef", + "app/dict/sys/MethodDict.php": "1afb37428fd8eefa9f92eeb4bbc1ca35", + "app/dict/sys/PosterDict.php": "c5f8c1c7ae37d166c3e4ebcb9527a4a1", + "app/dict/sys/PrinterDict.php": "db53da5f1927c8e3d15e6f46b94af767", + "app/dict/sys/RoleStatusDict.php": "179f1516f7fc22720b4b0f70a04c7af8", + "app/dict/sys/SmsDict.php": "40496e384ea6be2f2572e6b0a2f80fc8", + "app/dict/sys/StorageDict.php": "0c1f10a06451b5f5777d972ed3d27a58", + "app/dict/sys/UpgradeDict.php": "b3f0051026bb4c13f065d2217a322d97", + "app/dict/sys/UserDict.php": "dd72c6498664ae080e0db6c295c6cef3", + "app/dict/sys/WechatMediaDict.php": "cbd6ef2c45f93a36eaab8b11a09bf5ae", + "app/dict/sys/WxOplatform.php": "ccf9c6bdde4e8bd720a772e4117b4328", + "app/dict/verify/VerifyDict.php": "dc3c4deeb5834798ddf848d4a700c1a0", + "app/event.php": "d95297228ea120512b124dedb0639501", + "app/install/controller/BaseInstall.php": "6e8d04121e7719d31177232004e91fbc", + "app/install/controller/Index.php": "76f545b1487faf3921036d24e818203a", + "app/install/source/database.php": "06302dc2f3b33866d417465be337f0af", + "app/job/member/MemberGiftGrantJob.php": "05daedce9d27878712588d45a8c5e94b", + "app/job/member/SetMemberNoJob.php": "697c5a533fe943dc7ec13f8246386327", + "app/job/notice/Notice.php": "f2fc176291b704d6b081280430af439a", + "app/job/pay/PayReturnTo.php": "3e75086f0c0751f4adc01b0b16f23407", + "app/job/schedule/AutoClearPosterAndQrcode.php": "bcaa54547fe0774bd0427e7f1e3b69ed", + "app/job/schedule/AutoClearScheduleLog.php": "6cf04f07adb64b1205ee5e30776670e9", + "app/job/schedule/OrderClose.php": "544b42ab6d05406828646ae1a1ea7018", + "app/job/schedule/SiteExpireClose.php": "0395b52ff93d79798381b1dc39549b58", + "app/job/schedule/SiteStatJob.php": "6bf3a77bd07a2394263c0f48b70cba3b", + "app/job/sys/AddonInstall.php": "2bb12fbde2fd35e20154431a6af419e3", + "app/job/sys/CheckDeleteJob.php": "98734578b3bf927bf90142b2893f3883", + "app/job/sys/CheckJob.php": "0cbdf6e5ab4253d0a093af53468ed796", + "app/job/sys/ClearUserLog.php": "53df14df8d27109e2854fed5df50b141", + "app/job/sys/ExportJob.php": "21c706e7549c3275faea99e9132f7b44", + "app/job/transfer/schedule/CheckFinish.php": "c0b79b4769e8584dea687a9f49d635ea", + "app/job/upgrade/AutoClearUpgradeRecords.php": "9d6e7d6bbe8cd1c15eb0e937bcbcb876", + "app/job/wxoplatform/GetVersionUploadResult.php": "c825776c384d57a51c6e113001bb865f", + "app/job/wxoplatform/SiteWeappCommit.php": "177d99ddaa5c166ccb11467e7c4ddaba", + "app/job/wxoplatform/SubmitAudit.php": "31d425d5a81d691f1b2c71004e196d88", + "app/job/wxoplatform/VersionUploadSuccess.php": "1d302766d929770a58a2af7000b70c7f", + "app/job/wxoplatform/WeappAuthChangeAfter.php": "bf6e6061d9afb1fb68e9bda05ec02724", + "app/job/wxoplatform/WeappCommit.php": "b652eb90f4648a0f78eaa67b35721374", + "app/job/wxoplatform/WechatAuthChangeAfter.php": "ba8325d477934178171b911830a0c8fd", + "app/lang/en/api.php": "e62498eebbb7edea3ecd0166f2386d28", + "app/lang/en/dict.php": "4fac7afba26b0152e9bdca04a9989f4d", + "app/lang/en/validate.php": "40fb866f0e93c03a8c7427c83b35ee7d", + "app/lang/en.php": "2c6e7d20c1181c93b2dd8db4bfb0ae81", + "app/lang/zh-cn/api.php": "7735b8190847e385005d0f72a87748fa", + "app/lang/zh-cn/dict.php": "ba0fc15691baabd40fa2f18ba165de86", + "app/lang/zh-cn/validate.php": "c97eaf20bd86a172ae52d6f54167c17e", + "app/lang/zh-cn.php": "842375b0b850e6273e835d4adc9953a4", + "app/listener/applet/WeappListener.php": "7e1113d003c55e85aee7da8b9dc3b620", + "app/listener/diy/ThemeColorListener.php": "263bb7b762a3e4f27d624d7d4987ca3d", + "app/listener/diy_form_export/DiyFormRecordsExportDataListener.php": "887a4bfa0bfc30045d716b24795ad234", + "app/listener/diy_form_export/DiyFormRecordsExportTypeListener.php": "7cb946f086f97908d0cc32b38707b62e", + "app/listener/diy_form_export/DiyFormRecordsFieldsExportDataListener.php": "a9d1b329ec713389de23acc9a6215a3c", + "app/listener/diy_form_export/DiyFormRecordsFieldsExportTypeListener.php": "7ccf1fb6a3f68a2c39d47eae350c9bff", + "app/listener/diy_form_export/DiyFormRecordsMemberExportDataListener.php": "aa655a8c23a8f8f23cc1953240756b33", + "app/listener/diy_form_export/DiyFormRecordsMemberExportTypeListener.php": "7c56f26c1b6044388c2958b76367d1b0", + "app/listener/job/QueueFailedLoggerListener.php": "50cee2638fe417afa22d07fca933540e", + "app/listener/member/MemberAccountListener.php": "31fd67404ef5a3f94c9c52ac5224e58e", + "app/listener/member/MemberLoginListener.php": "4ab3e94b0d4842e3c89f6af7748af8a9", + "app/listener/member/MemberRegisterListener.php": "fccc26b95f0f81bdc9b8cec78f9a600b", + "app/listener/member_export/MemberExportDataListener.php": "52af2de7536f0073c1091108bf5a6491", + "app/listener/member_export/MemberExportTypeListener.php": "4363f9b87dd9ae2c4d65bbbfbb9eb559", + "app/listener/notice/Sms.php": "db631401ce7ecf944b4a6cde700f4e8e", + "app/listener/notice/Weapp.php": "63a20dacc5ab85b8eeed55742e5786b5", + "app/listener/notice/Wechat.php": "9efe4ca227f2b9300cd473c48a6cb317", + "app/listener/notice_template/BaseNoticeTemplate.php": "d42083bcae553bdc3cfb14ca95a73ae8", + "app/listener/notice_template/MemberVerifySuccess.php": "73a09499e8a56625cb79c38e7b7034d3", + "app/listener/notice_template/VerifyCode.php": "0f577ca90de79f901480bfa9b0a9f887", + "app/listener/pay/PayCreateListener.php": "2d94b8d556cc2a23c890b334b449f585", + "app/listener/pay/PayNotifyListener.php": "55bdacef3b45965eef512b142a863304", + "app/listener/pay/PaySuccessListener.php": "6635ce8606abf11f35d695454799f6db", + "app/listener/pay/RefundSuccessListener.php": "350852460f69c7b0ff0326ed60e2d2a9", + "app/listener/pay/TransferSuccessListener.php": "40e323e24786a4adfc848a2b3b5c04d4", + "app/listener/poster/FriendspayPoster.php": "ffae7190086eee50b21c9decc1a6b871", + "app/listener/qrcode/WeappQrcodeListener.php": "ed269a91a4b04235becd641e1737cc0a", + "app/listener/qrcode/WechatQrcodeListener.php": "146868711441975e3e8da054043303b9", + "app/listener/scan/ScanListener.php": "c0a0710a1b68f152a7835c932f4b10db", + "app/listener/system/AddSiteAfterListener.php": "73eb0a456ec9272756111a9a5bef5a7d", + "app/listener/system/AdminIndexListener.php": "9a608413ecde6f355f0fa7038dd0fb4c", + "app/listener/system/AppInitListener.php": "e84a3573135671c735c3ccb1da0d7112", + "app/listener/system/AppManageListener.php": "199122123b235d927e2b29b2a472aa16", + "app/listener/system/BottomNavigationListener.php": "6d89ffbf2741e43b4433f5e2e460ad6c", + "app/listener/system/Poster.php": "e838241be8686d5777b339a928e95525", + "app/listener/system/PosterType.php": "df94b723eb01c2021ada01a9242c7f99", + "app/listener/system/ShowAppListener.php": "fc300aa50a620d20731f74ea0b2ac560", + "app/listener/system/ShowMarketingListener.php": "bca08a3a16ff9c09e700b8452688b361", + "app/listener/system/SiteIndexListener.php": "09386b929e0ef1f0c10042879f9f47c9", + "app/listener/system/SiteInitListener.php": "598ce00ec00bd963df8f4df85e0765ae", + "app/listener/system/SiteLayout.php": "40a46e7e6b458d55121c23afaf854874", + "app/listener/system/WeappAuthChangeAfter.php": "59b70bb45b9b41a3aa508f9f41790829", + "app/listener/transfer/TransferCashOutListener.php": "58c2919b66b4b2a0f34161daf7d3f9fa", + "app/middleware.php": "21c7c0c97f41893ed65f6f3a8fa6f920", + "app/model/addon/Addon.php": "885cc271b820bb05987d8b92e669144a", + "app/model/addon/AddonLog.php": "68d5f095eb4c398012724de406febfb2", + "app/model/applet/AppletSiteVersion.php": "27337e276d0c22eda17720a498869280", + "app/model/applet/AppletVersion.php": "35fa57845b095473462ec948f9e0bdb6", + "app/model/dict/Dict.php": "fbde99200745fad175fc6527d89c0201", + "app/model/diy/Diy.php": "4e2b8d55cab53af1e35afaf3569a77d6", + "app/model/diy/DiyRoute.php": "a0ebc8872e788beb640a2a8365cd6346", + "app/model/diy/DiyTheme.php": "a7c0cf1ae6951e8b1aef06b9403016df", + "app/model/diy_form/DiyForm.php": "316d7f9c2fdd190160fd4d03adb6a389", + "app/model/diy_form/DiyFormFields.php": "9b08c577f8dc2bc7dbe2a2c5f2b3edac", + "app/model/diy_form/DiyFormRecords.php": "98d13902e130b7591170f6b8a8aeda8d", + "app/model/diy_form/DiyFormRecordsFields.php": "893db03745e468e62fc81a1b2ad84e8a", + "app/model/diy_form/DiyFormSubmitConfig.php": "abf34c3e0a974f795f3814cf74983ed1", + "app/model/diy_form/DiyFormWriteConfig.php": "252e0a2729b201d8db1b90576c4f66fa", + "app/model/generator/GenerateColumn.php": "5b2607ce628f4dae80db421dc503e545", + "app/model/generator/GenerateTable.php": "da9624dff4faa3d6e6f4a4ddf2487cf3", + "app/model/member/Member.php": "ccee0689bff161b7230f90c2b2296522", + "app/model/member/MemberAccountLog.php": "e7cdb4227f4cdc575055258945d7a999", + "app/model/member/MemberAddress.php": "a3786a52b9c2d96c4fe4595db1b772b4", + "app/model/member/MemberCashOut.php": "5e89de4c3a7a8d5dfb381ce1611f17db", + "app/model/member/MemberCashOutAccount.php": "937b049fcb1d2c894b35bdf356927300", + "app/model/member/MemberLabel.php": "04b38921a5230086d0c4c943078656de", + "app/model/member/MemberLevel.php": "28b52bb8edc8073fdc6138664e40bb0e", + "app/model/member/MemberSign.php": "efefcc1cdf8a2a2e89cbb285a6fd1e3a", + "app/model/pay/Pay.php": "8483addb8695905f1ff494658e99ce4a", + "app/model/pay/PayChannel.php": "5e3a0520db70bb39e43d2900ce7d0b15", + "app/model/pay/Refund.php": "0566832630ad506de8d19d9481d9e2ac", + "app/model/pay/Transfer.php": "17ba2fe0f969b87fe58c69a5e7636a34", + "app/model/pay/TransferScene.php": "ab9ccdea700c10c92f264c855b0bd8eb", + "app/model/site/Site.php": "7288209265747ca7ebf1349a31f6627f", + "app/model/site/SiteAccountLog.php": "7227d9a8b038d775ce9ba24f8a39e15a", + "app/model/site/SiteGroup.php": "d5ae997ab2711631e6b2b433b2c0ca45", + "app/model/stat/StatHour.php": "d251eb53b7530401f12e533807d33f28", + "app/model/sys/AppVersion.php": "689f64af301d6d5594512440e818e844", + "app/model/sys/NiuSmsTemplate.php": "d50f7adf1e1b81da8eea369003b6fa2e", + "app/model/sys/Poster.php": "dfac272484af733574827c41683310e6", + "app/model/sys/SysAgreement.php": "4824d0cc7ebcdf23d442a372a509bd14", + "app/model/sys/SysArea.php": "26f7f3c6b220735f08eda0759e3e1e8a", + "app/model/sys/SysAttachment.php": "f068a1d072927ad4cb4c6104e5b31b8c", + "app/model/sys/SysAttachmentCategory.php": "b84e6d7d9c3466ad441cd157cb6644b0", + "app/model/sys/SysBackupRecords.php": "b6c08e2eceb6d21640ba71bd1fb5db6b", + "app/model/sys/SysConfig.php": "f38ac64069da19ae4f795c7a7310b828", + "app/model/sys/SysExport.php": "4b1edcfab57805bce6edfd8f203fb923", + "app/model/sys/SysMenu.php": "4c9c5980e45fe6a77d00a1a129ce7977", + "app/model/sys/SysNotice.php": "b95fd6ceb6ed4bcc92a75bef208f3cc2", + "app/model/sys/SysNoticeLog.php": "79573fa1462c940ad93a1155b9775ec9", + "app/model/sys/SysNoticeSmsLog.php": "7e2eeb450a2b11657263f74d963c3812", + "app/model/sys/SysPrinter.php": "fcc9b08f7eacfe942e1797f2ec32d3df", + "app/model/sys/SysPrinterTemplate.php": "f9047384ea0a98191409ad25bc02ae1d", + "app/model/sys/SysRole.php": "1dd4f81329a294bcd8a5c0c943fb228f", + "app/model/sys/SysSchedule.php": "6d29f76eb1c510422864ba375b275872", + "app/model/sys/SysScheduleLog.php": "1e1b00d56013139dcd5d0596645c4a02", + "app/model/sys/SysUpgradeRecords.php": "94b14eb384482a28fa906f8e08aef325", + "app/model/sys/SysUser.php": "560163a8e0562dabf50725581b478dd7", + "app/model/sys/SysUserLog.php": "22c3291dc04094ecf7ba4dd74ad22595", + "app/model/sys/SysUserRole.php": "0f69289980d6631f19023544e922fce5", + "app/model/sys/UserCreateSiteLimit.php": "0fa3cf4af78935053067e2415714a746", + "app/model/sys/WxOplatfromWeappVersion.php": "b8b372cfdd012002fb2f2a9a23769b08", + "app/model/verify/Verifier.php": "f1d28945e88a8306a9890716357db25d", + "app/model/verify/Verify.php": "9cfc01b7884f3671c4a320c62a75dde9", + "app/model/weapp/WeappVersion.php": "f92106d8be8a7eb26c3edb88d86721cf", + "app/model/wechat/WechatFans.php": "4b9f06b7a577166acbdc25e9ac232e73", + "app/model/wechat/WechatMedia.php": "e43c74059ffffd0036643cd0414019c0", + "app/model/wechat/WechatReply.php": "8731c37000b0f75140d1675794c548e9", + "app/provider.php": "ebb44e88502900317f1783d70fe32fca", + "app/service/admin/addon/AddonDevelopService.php": "75781742191267680456273b8e1edf64", + "app/service/admin/addon/AddonService.php": "9ffa162ff24bcdadc0fefd804c5a9050", + "app/service/admin/aliapp/AliappConfigService.php": "1b69b972490c8cff32d94117686d6362", + "app/service/admin/applet/AppletDownloadService.php": "1226e0efad9d392e9855241bff36ca94", + "app/service/admin/applet/AppletVersionService.php": "09ab2678c53ab785c476459ca4183dd4", + "app/service/admin/applet/AppletVersionSiteService.php": "6742606d298e9f2e749a699fc90fd3d0", + "app/service/admin/auth/AuthService.php": "148fc2a851e65c88e5d9ba801aefd032", + "app/service/admin/auth/AuthSiteService.php": "6cb7cfbe4f549a2738a4b92325ed07d6", + "app/service/admin/auth/ConfigService.php": "aaedae6e3fa2ba226c53eaaa9d0733f8", + "app/service/admin/auth/LoginService.php": "12072b03a770e18ad4aeadd92276bf2f", + "app/service/admin/captcha/CaptchaService.php": "1b35585ff68b1cdb026f35b2af08320a", + "app/service/admin/channel/AppService.php": "bbaf44e4c1a79c03c89ec6aa5447b03d", + "app/service/admin/channel/H5Service.php": "9c1c8eb0271509e120affa00b400991a", + "app/service/admin/channel/PcService.php": "0c94f21fab6353178e742bec2c0b1ea7", + "app/service/admin/dict/DictService.php": "6aae9782f42ad535e138de9edc9fe28b", + "app/service/admin/diy/DiyConfigService.php": "2e019cb1995b1ff7fe3d24ed0dc1a28b", + "app/service/admin/diy/DiyRouteService.php": "33d057493e728559b9aebcb79de5920a", + "app/service/admin/diy/DiyService.php": "97e6fb124e0f132f00f1a4984ede7036", + "app/service/admin/diy_form/DiyFormConfig.php": "f8f366e6572f1c42d48b48626e139056", + "app/service/admin/diy_form/DiyFormRecordsService.php": "597b63dff8b808fdb154ecddd63d7b96", + "app/service/admin/diy_form/DiyFormService.php": "f1806c7183002d9317890198bffa1eac", + "app/service/admin/generator/Generate.php": "5b6b7b67e353e85343f60400b36ca4cf", + "app/service/admin/generator/GenerateService.php": "6a504b738685cd9aa9d45a0e5d0cd391", + "app/service/admin/generator/core/AdminApiRouteGenerator.php": "31aebd4406b9753cf03e755a5be4f0ab", + "app/service/admin/generator/core/BaseGenerator.php": "53ea655a0887c20fd845ba0897c494bc", + "app/service/admin/generator/core/ControllerGenerator.php": "e7c4b31b808057c85f2ee36abc7de268", + "app/service/admin/generator/core/MenuSqlGenerator.php": "cf07e1ae062cd229d1dc6dce61018825", + "app/service/admin/generator/core/ModelGenerator.php": "aae02883663fcaa1448d8253709de9db", + "app/service/admin/generator/core/ServiceGenerator.php": "4adefbdb50828eb9efb4cdb2838ac88a", + "app/service/admin/generator/core/ValidateGenerator.php": "1ec37d6346f1303343378901560478be", + "app/service/admin/generator/core/WebApiGenerator.php": "e45e47d37be4fced49a4273a78d0c475", + "app/service/admin/generator/core/WebEditGenerator.php": "8b82ff64587fd477272ec14a5898d779", + "app/service/admin/generator/core/WebEditLangGenerator.php": "0f6d63cec3e7cefc9c73f19095028790", + "app/service/admin/generator/core/WebEditPageGenerator.php": "f8db01e4e4eb8818586eff78b88f37d8", + "app/service/admin/generator/core/WebIndexGenerator.php": "95fa22de5320f8c9d4e4e64c8f94f63b", + "app/service/admin/generator/core/WebLangGenerator.php": "3ea0f1ff46000e4ab77a115dce555d30", + "app/service/admin/home/AuthSiteService.php": "39fccd90cce3b70ab5e3f77aaa1ae66e", + "app/service/admin/install/InstallSystemService.php": "cedd12516f4e9549a1d83fe6651ef820", + "app/service/admin/member/AddressService.php": "1a1c39c1afddb11fef6d52d6b1c4754f", + "app/service/admin/member/MemberAccountService.php": "9a33417fb95a8b25caf0564221b563fe", + "app/service/admin/member/MemberCashOutService.php": "f3d83e036fa5d264e7536988f60f1496", + "app/service/admin/member/MemberConfigService.php": "f2dbd9bab8375b7ef2a4c0ab6a4c8dfb", + "app/service/admin/member/MemberLabelService.php": "6246d5eef669c5a0157746863ace40ff", + "app/service/admin/member/MemberLevelService.php": "9813e7841affac8566519b5c62f09179", + "app/service/admin/member/MemberService.php": "c311d4d5f0531ac4fd9be4b63f632364", + "app/service/admin/member/MemberSignService.php": "17e344b47f726bd108bc65041282cba2", + "app/service/admin/niucloud/NiucloudService.php": "d78a5d28846e322a6390bb787b2eb09e", + "app/service/admin/notice/NiuSmsService.php": "d119f675060d549170ca1f48bf50c26e", + "app/service/admin/notice/NoticeLogService.php": "2c10f72473337735212e288198644523", + "app/service/admin/notice/NoticeService.php": "802e0438bed2c919e2dc804364ba7d03", + "app/service/admin/notice/NoticeSmsLogService.php": "bb958b667e55213c64772246e574f216", + "app/service/admin/notice/SmsService.php": "66c601faad39555ad4651e21f6317cf2", + "app/service/admin/pay/PayChannelService.php": "8cb1d2ace2c870a16caaf4cc439f59d9", + "app/service/admin/pay/PayService.php": "fca0f63eb7a2d6d06e10e223f5bdbfe0", + "app/service/admin/pay/RefundService.php": "3a9c7bfec2fe0900e076af7af74c61bb", + "app/service/admin/pay/TransferService.php": "03a5a2b466d125b9f72666b823210b0a", + "app/service/admin/schedule/ScheduleLogService.php": "30b24493429e05e84a6825556b236f9d", + "app/service/admin/schedule/ScheduleService.php": "b42fb99fd4b585eea8781734cb4710b0", + "app/service/admin/site/SiteAccountLogService.php": "63f80ee1817e931318297fe36494b368", + "app/service/admin/site/SiteGroupService.php": "3375cd6232581b5764eb74d7292bc68f", + "app/service/admin/site/SiteService.php": "798226c17d142da53506343755e21d68", + "app/service/admin/site/SiteUserService.php": "1f27d30ec1313e88b763e707d7918e84", + "app/service/admin/site/UserLogService.php": "938af541faeae9978750b94d9eca2dfc", + "app/service/admin/stat/SiteStatService.php": "c9d5c7ab5e6207a615b3c61ff3279e96", + "app/service/admin/stat/StatService.php": "5591985f69d78dd1973a10a119febab6", + "app/service/admin/sys/AgreementService.php": "cdea12f958c6a12e524939ae31dfc5c3", + "app/service/admin/sys/AppService.php": "5fc070d389463fbb8fc0f51c6b543729", + "app/service/admin/sys/AreaService.php": "c4838c12b225fe645b21d3928083e035", + "app/service/admin/sys/AttachmentService.php": "20653b0b38da18cb76bf2c6f27204ea2", + "app/service/admin/sys/ConfigService.php": "d13d244bc11f8e53c80caad55385fcf7", + "app/service/admin/sys/ExportService.php": "1825b07f396fd93a8f2e297dbdd2113c", + "app/service/admin/sys/MenuService.php": "acb2346b216f584ad321bdbe53d89deb", + "app/service/admin/sys/PosterService.php": "3a9dfb1d91f645e6da5a0066a918fedc", + "app/service/admin/sys/PrinterService.php": "c24c8458263713f48991f6a74df36f0d", + "app/service/admin/sys/PrinterTemplateService.php": "97e23f6d5f09e00bc44becb6015959b9", + "app/service/admin/sys/RoleService.php": "ccad2ac6df1d6f4e3bbac97975c86ff3", + "app/service/admin/sys/SystemService.php": "ce6e2798f5bb3c1bc9d1d37c8d384b71", + "app/service/admin/upgrade/BackupRecordsService.php": "3fa80ced64f7d1215a0d3b1927cce3b9", + "app/service/admin/upgrade/BackupService.php": "dd4dc895c3eb8c6d789fb7a9c5cec285", + "app/service/admin/upgrade/ExecuteSqlTrait.php": "c130f72d682942d7c722c564e1ddc2bd", + "app/service/admin/upgrade/RestoreService.php": "7794eb2b208af59615cd70122d0917f5", + "app/service/admin/upgrade/UpgradeRecordsService.php": "614cda19f53f7e1be2ab2f165e709e0f", + "app/service/admin/upgrade/UpgradeService.php": "76319e2bf2f7b40700604cecd67c6fe6", + "app/service/admin/upload/StorageConfigService.php": "4eb49a4393e8350e2ab91fa6cfb45da0", + "app/service/admin/upload/UploadConfigService.php": "d4211f8eea290b4771d078704bfb441b", + "app/service/admin/upload/UploadService.php": "5a7009a7f2d542efe45fe6ab45e00b28", + "app/service/admin/user/UserRoleService.php": "9adce42f473a115c7e02396d0ca611c1", + "app/service/admin/user/UserService.php": "4eed65b3cd79ef8f7c904dede8c926fc", + "app/service/admin/verify/VerifierService.php": "565b9bedc35a18023b5e179dbf3432b0", + "app/service/admin/verify/VerifyService.php": "916ab58ec191dcf6625bca340ae3d33f", + "app/service/admin/weapp/WeappConfigService.php": "a1c03af9e689065af7cdb3c8d948c690", + "app/service/admin/weapp/WeappDeliveryService.php": "ca413f722d6d21458b4c1e1f2d1234ee", + "app/service/admin/weapp/WeappPackageService.php": "972e25be317e198504a1b2643a71fb18", + "app/service/admin/weapp/WeappTemplateService.php": "e5b1a05a9c6930c6462f0e7104eb3598", + "app/service/admin/weapp/WeappVersionService.php": "5bbde277c7aafe075e760dfef94cb179", + "app/service/admin/wechat/WechatConfigService.php": "4a5443da5325e48d8dc0c331167e07d1", + "app/service/admin/wechat/WechatEventService.php": "a66563c8a011c1005daffb444aafe203", + "app/service/admin/wechat/WechatFansService.php": "54a23806236cff5b7585d55d851f7eaf", + "app/service/admin/wechat/WechatMediaService.php": "e29c6b5b0b1909088fc4d73b759f64c3", + "app/service/admin/wechat/WechatMenuService.php": "9d0357eb4e72684920da754289d81b0b", + "app/service/admin/wechat/WechatReplyService.php": "a1398c00ecefd2b4c9a749b1cfff54f3", + "app/service/admin/wechat/WechatTemplateService.php": "675bcbfd3297c8efa4d12ff8e4cf1384", + "app/service/admin/wxoplatform/OplatformConfigService.php": "c8be400ddae0c0904c041747a7e2a409", + "app/service/admin/wxoplatform/OplatformServerService.php": "34699e42868455ef3ea7bf2b47479314", + "app/service/admin/wxoplatform/OplatformService.php": "d4a8ec7f60b4fa38e0eea742e7d14abf", + "app/service/admin/wxoplatform/WeappVersionService.php": "687ecbb36d7776601eb73cd14bdc5538", + "app/service/api/addon/AddonService.php": "6298dd50d750d392419425d003affcc4", + "app/service/api/agreement/AgreementService.php": "0ba40676eff1b9b261022e070899e808", + "app/service/api/captcha/CaptchaService.php": "790d70ab3ff4cb0ef8f8bdb557694e8b", + "app/service/api/channel/AppService.php": "38515acbe7cd8989bf8a42cf1f07f20c", + "app/service/api/diy/DiyConfigService.php": "cba8e32652183a09848c1c72b55a739e", + "app/service/api/diy/DiyRouteService.php": "2a3f389d20f2d2a919ac302d3e7b1c0b", + "app/service/api/diy/DiyService.php": "d53e0b3cfacb53f38389f1b72b23be7e", + "app/service/api/diy_form/DiyFormService.php": "f7ce6a3fe9647fdb93d319ab0079539d", + "app/service/api/login/AuthService.php": "1eb212fec34628b41b748d506673d847", + "app/service/api/login/ConfigService.php": "4652b4377769f1fdf3640d0d4a458040", + "app/service/api/login/LoginService.php": "70c3bb4eb7a071bc32a8572d6f529308", + "app/service/api/login/RegisterService.php": "c9ec1b828ba4208c6b08877dcaf85c65", + "app/service/api/member/AddressService.php": "cac871f4b0e44a08b40a1eeab4a04f98", + "app/service/api/member/MemberAccountService.php": "f38f766773b9dc8f9414b7f0e432d43e", + "app/service/api/member/MemberCashOutAccountService.php": "d29e8ab83ed1ced40f3f06560feae4fd", + "app/service/api/member/MemberCashOutService.php": "e14bd99f8813283885241c36d29e0dea", + "app/service/api/member/MemberConfigService.php": "c1816a1001f0609fe09b8ba56574c215", + "app/service/api/member/MemberLevelService.php": "7520d442e47e92bfa632c074dfc279aa", + "app/service/api/member/MemberLogService.php": "3a65fb7ff5684d14c061e0b96c2b4ebf", + "app/service/api/member/MemberService.php": "f75ec63d99d42f09c6aa131928ba1894", + "app/service/api/member/MemberSignService.php": "d59b312fcd0a2d1ebdf6a2fe633f178c", + "app/service/api/notice/NoticeService.php": "74551f89f6bd9904fac80bf17a5f8b00", + "app/service/api/pay/PayService.php": "099a757e1c4a2ddfef43f4b9d4c70c8b", + "app/service/api/pay/TransferService.php": "8b5cf227233cd2a98bc39bd5f3ef812a", + "app/service/api/scan/ScanService.php": "747016936b2c293940dfbad56518ef9a", + "app/service/api/site/SiteService.php": "13b1dae5850bda51a1a575c06b109c08", + "app/service/api/sys/AreaService.php": "bfaaead10ea00311808013cfcd19f161", + "app/service/api/sys/ConfigService.php": "a352f41a1e2d430b9a824ee381580049", + "app/service/api/sys/TaskService.php": "34d546b923d63cc551edd7ad7cabf665", + "app/service/api/upload/Base64Service.php": "74c5e4f6a5e93412d43ea031a83eeb3f", + "app/service/api/upload/FetchService.php": "2fbd2a787b47582c51ac5d0c9cbe251d", + "app/service/api/upload/UploadService.php": "5a5569c328003d41bc95a1b536dbea9c", + "app/service/api/verify/Verifier.php": "ddd1231bbc204607508a8bb1a4b40ce2", + "app/service/api/verify/VerifyService.php": "d99924df32eb17c7eef653efa7349f13", + "app/service/api/weapp/WeappAuthService.php": "d3a1fb5ea7d0b4ec05966507b4df13e0", + "app/service/api/weapp/WeappDeliveryService.php": "39757ab0b984813f8b4eb5fd7804dbcc", + "app/service/api/weapp/WeappServeService.php": "f912a318b5218b8e294925a90bc8955f", + "app/service/api/wechat/WechatAppService.php": "7c4f5370503d63ed4944afd80ce7c374", + "app/service/api/wechat/WechatAuthService.php": "88fc65126fd0fd5f50185e73ab81adab", + "app/service/api/wechat/WechatServeService.php": "b28153720f2907e68ed90a11beaf292a", + "app/service/core/addon/CoreAddonBaseService.php": "52a1238f5f68da9d484291d0cc3010cb", + "app/service/core/addon/CoreAddonCloudService.php": "65ba669a27d9ef1df482098e97f4bc98", + "app/service/core/addon/CoreAddonDevelopBuildService.php": "f414595170c8766ed22b224afe52801b", + "app/service/core/addon/CoreAddonDevelopDownloadService.php": "cfbb360619ad5aefa115d8d054b862b6", + "app/service/core/addon/CoreAddonDevelopService.php": "216835082b5c0de2174bda1f22f0054c", + "app/service/core/addon/CoreAddonDownloadService.php": "54841a1eb1df92c4bb7d90316cc94a75", + "app/service/core/addon/CoreAddonInstallService.php": "73a987493555d5fcc7fce0fb23da8e1b", + "app/service/core/addon/CoreAddonLogService.php": "639346ec3c68128e5dd9e0cd134c9c63", + "app/service/core/addon/CoreAddonService.php": "8e233e81133bb4d64c47724a14e8635f", + "app/service/core/addon/CoreDependService.php": "baa14a0bc980eeb5a5db62e873b89c97", + "app/service/core/addon/WapTrait.php": "4514f9cd9290afa5e688ff4e2290fb3a", + "app/service/core/aliapp/CoreAliappConfigService.php": "6286bed9d3418c391b2889b8ffb134f2", + "app/service/core/applet/CoreAppletDownloadService.php": "a4ef6d2154adf4844cb0c076689eed07", + "app/service/core/applet/CoreAppletSiteVersionService.php": "719c5d2158d63444ee78c05963a1e4c9", + "app/service/core/applet/CoreAppletVersionService.php": "147ed8b14ee2375a23611ff8932ad813", + "app/service/core/captcha/CoreCaptchaImgService.php": "c731c8bebf637a84759f29a8d12b4512", + "app/service/core/captcha/CoreCaptchaService.php": "10648f6a15eb1dc6a07f1a7778de5070", + "app/service/core/channel/CoreAppCloudService.php": "c458e39bc6c6778961acda81edb9f373", + "app/service/core/channel/CoreAppService.php": "efe3e07cdce962bc3dd29fbe1bc02a41", + "app/service/core/channel/CoreH5Service.php": "8db91b9060233bab63eb0455da4e9e94", + "app/service/core/channel/CorePcService.php": "6f8f0d159e8d604ed612f4a7774c865d", + "app/service/core/diy/CoreDiyConfigService.php": "0903e097501ac3e0def2793814b8cd61", + "app/service/core/diy/CoreDiyService.php": "e5a8fe73d10f34bf7504939252cca6ad", + "app/service/core/diy_form/CoreDiyFormConfigService.php": "72df9f57ab34ff387bc692a37b7dd6d0", + "app/service/core/diy_form/CoreDiyFormRecordsService.php": "c365fea756ba661c06cb5828e8b824e1", + "app/service/core/http/HttpHelper.php": "a1e8cadf900d2da45c437308a4b1c321", + "app/service/core/index/CorePromotionAdvService.php": "87f309e4c616e558cb72002743a0a2d5", + "app/service/core/member/CoreMemberAccountService.php": "67d596dc931c91eb49fd2d728fbb6058", + "app/service/core/member/CoreMemberAddressService.php": "35e8433e26c71803ed983b84ea7d1e55", + "app/service/core/member/CoreMemberCashOutAccountService.php": "5c6eca0b00585dcdc66dbc47cd34cc9c", + "app/service/core/member/CoreMemberCashOutService.php": "6e6e98341062d6a6c13ed97c0e5486f5", + "app/service/core/member/CoreMemberConfigService.php": "37a15c074284654ec6253988120c448d", + "app/service/core/member/CoreMemberLabelService.php": "2fc0cd7759d61a6613d2506999422f5f", + "app/service/core/member/CoreMemberLevelService.php": "cd87359c50bd3bc15b0552e48004ea21", + "app/service/core/member/CoreMemberService.php": "a1bd3b2523f807d257e71e6ae91c8fe4", + "app/service/core/menu/CoreMenuService.php": "50f45cb9af9b8d40efaffe24754ecb4e", + "app/service/core/niucloud/CoreAuthService.php": "620b355c2dc44d8967605315a2bd8bd0", + "app/service/core/niucloud/CoreCloudBaseService.php": "7ac79e23687646c69e1699ee4860eb23", + "app/service/core/niucloud/CoreCloudBuildService.php": "fe283696e43ed21c895cb3a94d0447a2", + "app/service/core/niucloud/CoreModuleService.php": "7cd76e3fc3b221cf5849d352f6c81817", + "app/service/core/niucloud/CoreNiucloudConfigService.php": "a4c803519a2e020ab35d600ebd4125cd", + "app/service/core/niucloud/CoreNotifyService.php": "df2ed4c0297b08407bb73deb9469941d", + "app/service/core/notice/CoreNiuSmsService.php": "8d7d584375f7d5298efb33463c1855f6", + "app/service/core/notice/CoreNoticeLogService.php": "9ea5c9c3a53538c37024c4a0707fe2f1", + "app/service/core/notice/CoreNoticeService.php": "9b44fd711d8068d7cb06fe169119e834", + "app/service/core/notice/CoreNoticeSmsLogService.php": "b7e5419fa4d78025bbeaa20b3d809877", + "app/service/core/notice/CoreSmsService.php": "c8690ba4c11e57f2bd99e2d86c69743f", + "app/service/core/notice/NoticeService.php": "bc5dedc699cc6c4053796c81257375ce", + "app/service/core/pay/CorePayChannelService.php": "3e2c65f6c753c389b55de7b3faee2e7d", + "app/service/core/pay/CorePayEventService.php": "f68ed9ed9266b5962c6b2b32c5c2b11a", + "app/service/core/pay/CorePayService.php": "ef85f1f7c506d050276b1798ddecc26c", + "app/service/core/pay/CoreRefundService.php": "67dba962c4791ed2adde5a784d1cc919", + "app/service/core/pay/CoreTransferSceneService.php": "5efb0aca2436dce07f512a006c9211fd", + "app/service/core/pay/CoreTransferService.php": "0a0a17a0d2e88e32c09df182b5c38ba5", + "app/service/core/paytype/CoreBalanceService.php": "b97cb0c69066f85077c9bd353c1387a8", + "app/service/core/paytype/CoreOfflineService.php": "f211de4b324d0a2b8ba4d347d2b2c5d2", + "app/service/core/poster/CorePosterService.php": "7d0c9d85e29fdb31df913bf4d9e3f86c", + "app/service/core/printer/CorePrinterService.php": "92345dd99aeee224da8fecc2e29faed0", + "app/service/core/scan/CoreScanService.php": "40c3c97a17126cc129b93e0cc360329a", + "app/service/core/schedule/CoreScheduleInstallService.php": "183c116dc77d2f40e3b281698c8e9ae9", + "app/service/core/schedule/CoreScheduleLogService.php": "cd5f47603193840819a91447fe4150ed", + "app/service/core/schedule/CoreScheduleService.php": "73efeeef554a90a8aaa3f0252f0eda37", + "app/service/core/site/CoreSiteAccountService.php": "8c618d589340c85f2e9c55a2c97689f6", + "app/service/core/site/CoreSiteService.php": "7e3d9ba43864a7d6455c7057278ed697", + "app/service/core/stat/CoreStatService.php": "d9ee99edd0a0b75640cd5bd86167a326", + "app/service/core/sys/CoreAgreementService.php": "1ced2ffcf7f2b61d839cc8136b67cfa9", + "app/service/core/sys/CoreAreaService.php": "2a10e48b33d1d079f212bcf2340ef5f9", + "app/service/core/sys/CoreAttachmentService.php": "0531422cb3b6374a7234711e16e9966e", + "app/service/core/sys/CoreConfigService.php": "6caa59a9a057645eadd9854d7833a46a", + "app/service/core/sys/CoreExportService.php": "469894b3b946dad4c21ff4afe7737b45", + "app/service/core/sys/CoreSysConfigService.php": "0912ce65869200903f6191120ee74599", + "app/service/core/upload/CoreBase64Service.php": "a4b4bae2e7acb0c9cc0412caeee3bf5f", + "app/service/core/upload/CoreFetchService.php": "d083c54320ff3bf1faf54448b2b21020", + "app/service/core/upload/CoreFileService.php": "f182245d0b42835aae52e3a6cc8bc31d", + "app/service/core/upload/CoreImageService.php": "22dca350e72f03219ff2f2ceaa436bef", + "app/service/core/upload/CoreStorageService.php": "c277da4d4772af1c7dd04a860e4794c8", + "app/service/core/upload/CoreUploadConfigService.php": "ae34c0b389256fdd4f8db2c9acf41195", + "app/service/core/upload/CoreUploadService.php": "36f32903df9ce3fa9100b2a1457399e2", + "app/service/core/verify/CoreVerifyService.php": "0d8dd5a23a46b60b3c2130a73b927a2a", + "app/service/core/weapp/CoreWeappAuthService.php": "58370a31135d2cff7eddfa2e13ac30a0", + "app/service/core/weapp/CoreWeappCloudService.php": "3cc7de33e6dd74743c9db93d7edd04b4", + "app/service/core/weapp/CoreWeappConfigService.php": "9edc7308cf410b124465abce58fa7dc8", + "app/service/core/weapp/CoreWeappDeliveryService.php": "5ffc36aaed8c16d82628442c11976a04", + "app/service/core/weapp/CoreWeappServeService.php": "012506f4b10fe7cee34f6c2b45f92b34", + "app/service/core/weapp/CoreWeappService.php": "df7ef77ac12839ba95e70b1c77af18c6", + "app/service/core/weapp/CoreWeappTemplateService.php": "650cac881e5e216ad4f677ee3ccff55e", + "app/service/core/wechat/CoreWechatApiService.php": "a7bd070a2c78df4ca659b33502206908", + "app/service/core/wechat/CoreWechatAppService.php": "cee4c40602518697cd906806346dda8b", + "app/service/core/wechat/CoreWechatConfigService.php": "5aafb91be4859e907984884169e6a8c1", + "app/service/core/wechat/CoreWechatFansService.php": "a30adbfc36e980fe460f7e73d05dfff5", + "app/service/core/wechat/CoreWechatMediaService.php": "a10f6c8e2a97b65babebad53f994b1cd", + "app/service/core/wechat/CoreWechatMessageService.php": "438a7466d31043b7843f937dbeab799c", + "app/service/core/wechat/CoreWechatReplyService.php": "5dc59718ada19e708778dfd2aa4efa5c", + "app/service/core/wechat/CoreWechatServeService.php": "263afe1393b79085d196b8c242a45a6d", + "app/service/core/wechat/CoreWechatService.php": "a0a4edb13b80dc257abbd8690cbb74a4", + "app/service/core/wechat/CoreWechatTemplateService.php": "0df630ccdbd93e83a45071b3442ead32", + "app/service/core/wxoplatform/CoreOplatformConfigService.php": "63cd9a65882ec6b22fc9e2a0c84194a1", + "app/service/core/wxoplatform/CoreOplatformService.php": "a1fc789c19cce1cd9d762cb73722dc8f", + "app/service.php": "fe4744b6408f76228a06ef5b25b2bbe0", + "app/upgrade/v011/Upgrade.php": "c069c0ec2239ac4dd2b5fa2cfb172d08", + "app/upgrade/v020/Upgrade.php": "d0594834d9b0372d1e573a7a96baaac0", + "app/upgrade/v030/Upgrade.php": "95f0ff259f10d69df7db572c2c881810", + "app/upgrade/v050/Upgrade.php": "579231ef044f7d877214f16473d9fd2f", + "app/upgrade/v053/Upgrade.php": "8e4291fb9f2b8d6fcdf969f602c1d549", + "app/upgrade/v054/Upgrade.php": "50cade500dedc225b3e7bf139e2666f6", + "app/upgrade/v055/Upgrade.php": "8ae2096112f01d425bd4707e340769b1", + "app/upgrade/v056/Upgrade.php": "194ca7de0bb80699e5d5ad3311faaee2", + "app/upgrade/v100/Upgrade.php": "d591e94990eafa6e539de52d8c6618ae", + "app/upgrade/v101/Upgrade.php": "25f9e65fe8d7906a62e8b96d8f3f8755", + "app/upgrade/v111/Upgrade.php": "20d525230361a70bc47062a2ebf1c6d0", + "app/upgrade/v113/Upgrade.php": "10801fcbc1e1606302ca5d8afd6b20a5", + "app/validate/addon/AddonDevelop.php": "875af0fb5e4de4e723366236fc82125d", + "app/validate/channel/Aliapp.php": "e2da16e9b48f4fe21f4637df2b0bfa82", + "app/validate/channel/Weapp.php": "c2f201fc4def6e06769241f5ccb4e539", + "app/validate/channel/Wechat.php": "1b5dac0319f0b506e2d54f8deca3ec9c", + "app/validate/diy/Diy.php": "8dc94ec3e0aabda1cbb8b3abe9970834", + "app/validate/diy/DiyForm.php": "ae7b76707b68cdc8d4ccdec03e09166c", + "app/validate/diy/DiyRoute.php": "afff5a627b9fa7f3ca7d863ba51bdb39", + "app/validate/diy/DiyTheme.php": "87ab91c0b3b3912150bdf340f0a8bd44", + "app/validate/generator/Generator.php": "5e3981cb5b192f6770c53f89a17ef687", + "app/validate/member/Address.php": "94542b7c1c3cf804c6cbcbff07a81e9a", + "app/validate/member/CashOut.php": "bd41eb7e6531c1c63edd800de5d9bc93", + "app/validate/member/CashOutAccount.php": "35e24d03fffcaae175c94cab9d567d1c", + "app/validate/member/CashOutConfig.php": "17ec0f6898ce8b8832e08444b83bc700", + "app/validate/member/LoginConfig.php": "0944882e675daa065d2a0114ac4f4e0e", + "app/validate/member/Member.php": "168f6433f29718373702e1a68187841b", + "app/validate/member/MemberConfig.php": "a7efc31caa5032ab2ffdda648ccd370d", + "app/validate/member/MemberLabel.php": "7de71a31a8d837d35840ae878781587f", + "app/validate/member/MemberLevel.php": "ab6e62fd4b4587f720bbaa5d30b3ceb0", + "app/validate/niucloud/Module.php": "bc911c299b844a9ea342000b95f70cda", + "app/validate/pay/Pay.php": "a32352dcb8f134917c8b9efe1e9219ab", + "app/validate/pay/PayTemplate.php": "a26070a16f279e5adaa7965c701c25ae", + "app/validate/site/Site.php": "412ea1561afc9cad803f09a614e1da2e", + "app/validate/site/SiteGroup.php": "37d2173dfff162d35a38b8504ef04784", + "app/validate/sys/Agreement.php": "3ebfefb2527b2d564613d9d52cdfc6ac", + "app/validate/sys/AttachmentCategory.php": "755c5e9eafdb1d429a6d25e7c8c21cdb", + "app/validate/sys/Menu.php": "a274b1d11a54976c8bf6c53e53d4f042", + "app/validate/sys/Page.php": "7a6eb6657f7a0d96656611037613542f", + "app/validate/sys/Printer.php": "6833e8a709c6134239b935fd2bc5e716", + "app/validate/sys/PrinterTemplate.php": "1bb3ce3f48ce85efc0fe3d6efcc6c70e", + "app/validate/sys/Role.php": "f91feb7dfd895bc785c0ab5647364685", + "app/validate/sys/Schedule.php": "fd234530c2d08415d455fdbe5658d721", + "app/validate/sys/User.php": "1d167340acb47313e85ae5d14f1a3082", + "config/app.php": "fe98c3c89e6cc33fbd73414c766b8e44", + "config/cache.php": "f0ff44b66b94a7c72ef9972fc2d66c50", + "config/captcha.php": "33373ca06ae3405ad1e08d77ac679de0", + "config/console.php": "de68f50223887c5434baca85615d88c3", + "config/cookie.php": "c0742acbb8bbbc3b39bfcc1c17d198ae", + "config/cron.php": "ca78224fef74a858059865971fa839f1", + "config/database.php": "ce25f0f6601eb3dfc58c2a25a99f86bf", + "config/filesystem.php": "43f58ebd13880595349b36398fc224fc", + "config/gateway_worker.php": "c015a8d9a1ba6fb0aaa56f28ec458550", + "config/imgcaptcha.php": "83421621cf2eeb48669cd203ba682054", + "config/lang.php": "e44cdd672ced6ebcc36cd4d564c435ce", + "config/log.php": "30e50f174a774ff1bbdb9e75d52e7f22", + "config/middleware.php": "4f948bbdddbe30647f8e76a102f4f865", + "config/niucloud.php": "44321ad73a878f348b138473b4ac9b38", + "config/oauth.php": "b0ee30cb1da9aeb30c789bc4f161ba49", + "config/pay.php": "bfa769780e1c00b78e06095017140c84", + "config/poster.php": "422bd9729c131a2ed04efa9ea64f5ff1", + "config/route.php": "a1f5eebaf8b664ee2e9da39e770f60b4", + "config/session.php": "fa9e3ae84719b2fb048d3e104baf27c2", + "config/sms.php": "b15faa9173be108488a82a0398741724", + "config/terminal.php": "bb44817659c03122a4ffc2f6ef5988be", + "config/trace.php": "bc640669342b7021d7ae4dc1fff70fbc", + "config/upload.php": "5f88a173993a059812867ac39a7864e9", + "config/version.php": "c13e335f3b392fddde7b6bcb068d3d74", + "config/view.php": "25ad7436aa1882f1c7e12c455f1a4239", + "core/base/BaseAdminController.php": "80918fbbbb10b252b5f2c7aac653a93d", + "core/base/BaseAdminService.php": "a6e76f753275a586c9d4dc461ba8fe28", + "core/base/BaseApiController.php": "5fee2ecb2e937b82fffad30fc4e7869c", + "core/base/BaseApiService.php": "459b58863f979934ef209b90159f1b7b", + "core/base/BaseController.php": "2f298a6ebf8250a7ce3f7f6cb193163c", + "core/base/BaseCoreService.php": "3d642a3d28420972c7d946047d671e92", + "core/base/BaseJob.php": "8ebe024754aa5f2436ac56fecaf938d2", + "core/base/BaseModel.php": "9070740a68128563a63797317f3fe7ce", + "core/base/BaseService.php": "7bb503654527bbedb48b2a613e2a2e55", + "core/base/BaseValidate.php": "f5f2ffcd116cce64003947afe3784757", + "core/dict/BaseDict.php": "02c3aa56ae473280f83110654c5f1b68", + "core/dict/Config.php": "7c8cc9354022f22223a64ef8659ba8b4", + "core/dict/Console.php": "4388b9f48553f33da68cd1ed8ed24b58", + "core/dict/DictLoader.php": "768d9c6b0fc88e9a32695fad86e3a0f5", + "core/dict/DiyFormComponent.php": "48258c452df1f3b6a889bd6809c8fcd2", + "core/dict/DiyFormTemplate.php": "f84f5b8e615db663ec7088f4d5e53d35", + "core/dict/DiyFormType.php": "53bf0ad458444ca00f07eb4c66b8f46e", + "core/dict/Event.php": "704aba6756b2672ea38fca950c4b8689", + "core/dict/GrowthRule.php": "6ca08e697ed30d9abe43cc7e73cc5cfb", + "core/dict/Lang.php": "87534f02f8886003efa6a04c9b624116", + "core/dict/MemberAccountChangeType.php": "b33fa1eeab4411bed0e2ae86fb145198", + "core/dict/MemberBenefits.php": "1ab07d6340164cc4138f9a81ab54e4ba", + "core/dict/MemberGift.php": "c246f1eae3abe1d905f819a31bbfe8c0", + "core/dict/Menu.php": "5d5475315a9a834691f69391e3ce18c4", + "core/dict/Notice.php": "880e68a6b6e34819ce6dab58fb07abfb", + "core/dict/PointRule.php": "1032f68030dd81df308fdbfe7725f26c", + "core/dict/Poster.php": "4283a0fa8484e39047af21f2ffcceed6", + "core/dict/Printer.php": "c667885b957af7c33ee00601f1d760a5", + "core/dict/RechargeGift.php": "75ba72df0f345b9794fd4418fb23a71c", + "core/dict/Route.php": "8071826060ee97f278465032443948c1", + "core/dict/Schedule.php": "7466ce03daeb81e8eca6966230f87674", + "core/dict/SowCommunityGift.php": "f4ae38596a5b4dd5a3755c2899cbf98d", + "core/dict/UniappComponent.php": "7f26db3c9c3f33b27a19963f37a57e68", + "core/dict/UniappLink.php": "c430f35d1927c8776c3510df8c9634a9", + "core/dict/UniappPages.php": "9121c4f0e7a94e8c4d2a10c2cf3a8d0a", + "core/dict/UniappTemplate.php": "f133256790e68ec5c2f27cb15a3e399b", + "core/exception/AddonException.php": "44e69a9406a0f92256b740e640483fa2", + "core/exception/AdminException.php": "7f6f2d5bddbd9997d7ae4b92dba6541a", + "core/exception/ApiException.php": "6134d939245d759694e3cbc3eb6c6969", + "core/exception/AuthException.php": "067d06de602ed31eca50ff53df072e55", + "core/exception/CaptchaException.php": "433d0c3f4c5af3a602866184d19ec3db", + "core/exception/CloudBuildException.php": "63f957dfb7c3993e3cf2f295e967ad2a", + "core/exception/CommonException.php": "b3f01ddaed16512f63df0cb1093deb2a", + "core/exception/HomeException.php": "46f67925ea9dd89b15bf0c9817c530a0", + "core/exception/NiucloudException.php": "11cd06402681efa3740e05ab3a31b7e1", + "core/exception/NoticeException.php": "329f6b2f20ca9a6b5c9eb93d25d3ea65", + "core/exception/PayException.php": "c6dff1b8f0b4cbc39faf1ac9c079f9d8", + "core/exception/ServerException.php": "db28259653d74c46cc99b638c0fa4b8f", + "core/exception/UploadFileException.php": "93bd4c9b920dafcfdc119e37e955a48b", + "core/exception/WechatException.php": "720a0d32bb7cdce8c49d9bc5975c88c2", + "core/job/Dispatch.php": "399a50a98f573a1636082c36db7fade6", + "core/loader/Loader.php": "bcf3e092d87e8e9ab246b2d464a5668b", + "core/loader/Storage.php": "05b65137f5b37131b6b5de2ec8af58a1", + "core/oauth/BaseOauth.php": "0b91307b33f8b003094d553d51cee8b4", + "core/oauth/OauthLoader.php": "c0b0960364dc25067444a2faa56250a0", + "core/oauth/Weapp.php": "9d91dac2138167747936a31686c741ef", + "core/oauth/Wechat.php": "16ce5c4be98951ea4b07bef1a4567fe1", + "core/pay/Alipay.php": "7153393fefd86ff0ce71c4de062a56b7", + "core/pay/BasePay.php": "9743469f065b390256a05441470583d1", + "core/pay/PayLoader.php": "e046e2fc21de19768ab7f6f72fbb196b", + "core/pay/Wechatpay.php": "1b37980936acb99cfcc5124a2a2f6fab", + "core/poster/BasePoster.php": "1ce85e1cd4219355de32cba7e5cb94fa", + "core/poster/Poster.php": "282019e6f60598b074fbdf885246310d", + "core/poster/PosterLoader.php": "c7ab68a9fc95cd0533caf98aa75cd60b", + "core/printer/BasePrinter.php": "3d010271542baffb0d61233c2ccf92eb", + "core/printer/KdniaoPrinter.php": "fe303cb8152a5945b67ffb94c854f322", + "core/printer/PrinterLoader.php": "33e73421c9b4bf290bd30a17034ebdaf", + "core/printer/sdk/yilianyun/Autoloader.php": "2b760af1f508bbe4f11090dbd26d0bd1", + "core/printer/sdk/yilianyun/api/ExpressPrintService.php": "b077a155bcea6d2ed378b1c3dd614940", + "core/printer/sdk/yilianyun/api/OauthService.php": "26f238b23f00864a369aaa07f3b12e27", + "core/printer/sdk/yilianyun/api/PicturePrintService.php": "a2e99c4c4d5509ac9f4467fed0c969ac", + "core/printer/sdk/yilianyun/api/PrintMenuService.php": "444d05e6062c709fe6e69f0965d8362a", + "core/printer/sdk/yilianyun/api/PrintService.php": "6d5b3777db3ca5cb205c4e7cec89c1ce", + "core/printer/sdk/yilianyun/api/PrinterService.php": "b09152c09046fabd0ab5a213504073aa", + "core/printer/sdk/yilianyun/api/RpcService.php": "f399c4f7f5d1e2da074e0939c20304b8", + "core/printer/sdk/yilianyun/config/YlyConfig.php": "6f30d6fdc105138c8c11e2d459870955", + "core/printer/sdk/yilianyun/demo/authorization_code_mode/callback.php": "e5ea3d8c2a955bf16b12e40d698fd34a", + "core/printer/sdk/yilianyun/demo/client_mode/callback.php": "13d1705d68970f2b0f57a11a99ec2d2f", + "core/printer/sdk/yilianyun/demo/index.php": "110f068775707249040cb37003eb444a", + "core/printer/sdk/yilianyun/demo/init.php": "0b81a9a08aee8d74e3a319a77fd9787b", + "core/printer/sdk/yilianyun/oauth/YlyOauthClient.php": "219d3afb0ce22c1899f97159b35031db", + "core/printer/sdk/yilianyun/protocol/YlyRpcClient.php": "b91c13821567333dd68b0131c9e96fca", + "core/sms/Aliyun.php": "cb27c39c78d9fc1961ae5a38c2c66e96", + "core/sms/BaseSms.php": "5f9de99698208680aedbec7e068ffbb0", + "core/sms/Niuyun.php": "b80fdc26eb6547e66fd0fae60031f342", + "core/sms/SmsLoader.php": "1d542d7fbe3c7394c58eb68aa4d2973c", + "core/sms/Tencent.php": "aa667ceff12d4989f07467f8cbf59197", + "core/template/BaseTemplate.php": "98fa850aba75712f8733d7588ed09098", + "core/template/TemplateLoader.php": "b65c59cecf7b858d954bbc87f9e1da02", + "core/template/Weapp.php": "99cd08405d7cdd8ad75902d6a154be96", + "core/template/Wechat.php": "4372d0723924bb7a1b7b4a3ee94924d6", + "core/upload/Aliyun.php": "e604de7a13d87fa0e46b870025dce3aa", + "core/upload/BaseUpload.php": "210cc4fa0ee4547cd22dc284a2e048e7", + "core/upload/Local.php": "14c56c7d48c60cfcdc1e8be1d023d2f7", + "core/upload/Qiniu.php": "6618bb0bd0bfbf7199748f40a32c7011", + "core/upload/Tencent.php": "863cefab68a7d4f7a4dd98e85b4670c7", + "core/upload/UploadLoader.php": "83abcef548b98b55c5567ba459316c21", + "core/util/Barcode.php": "afaf0debaf75535f0ae93bd2782841cb", + "core/util/DbBackup.php": "523883cb3643c1574a60f2feb8f1e06d", + "core/util/QRcode.php": "e83ebe3a6f3653b60d774d0056461a1b", + "core/util/Queue.php": "c218232fa2b0e9eb59ab77e681029185", + "core/util/Snowflake.php": "f8409ff3c406a83920e029bb182d87bb", + "core/util/Terminal.php": "50f4473cfb217512080e29944f35c380", + "core/util/TokenAuth.php": "6edb8d37e6b64ea115b11a11bbc09a45", + "core/util/barcode/class/BCGArgumentException.php": "cc7ff7592219242bb65dc3ef992b08cc", + "core/util/barcode/class/BCGBarcode.php": "25b427664d0ab3b80b9d8efd23ca797e", + "core/util/barcode/class/BCGBarcode1D.php": "9e3242c5af87898ce9f51ebe166134be", + "core/util/barcode/class/BCGColor.php": "761129d9a986f982d0b3ff127084b940", + "core/util/barcode/class/BCGDrawException.php": "c43d68f09a51c4c8513e0e83c3c81fdc", + "core/util/barcode/class/BCGDrawing.php": "7c2f60f79efb953d280f8959846ff999", + "core/util/barcode/class/BCGFont.php": "2adeab18cd687c4515487547f6b572f0", + "core/util/barcode/class/BCGFontFile.php": "0b2381cd79aa873a3a1ef8f77727f0d0", + "core/util/barcode/class/BCGFontPhp.php": "80a39988b249d21c44cf617011f0677f", + "core/util/barcode/class/BCGLabel.php": "1f91f98534a7c96dc910212057dc2ff8", + "core/util/barcode/class/BCGParseException.php": "d181e59ebe7546f56951422cbf57d423", + "core/util/barcode/class/BCGcodabar.barcode.php": "bbc743842afe9819bb5f7480ee04c7e6", + "core/util/barcode/class/BCGcode11.barcode.php": "08f02b6b0650c57f125bf79476ca8eb4", + "core/util/barcode/class/BCGcode128.barcode.php": "6578816ba1c6882ea186930ac80280d2", + "core/util/barcode/class/BCGcode39.barcode.php": "5476c0406481de2b66f0afe52c593832", + "core/util/barcode/class/BCGcode39extended.barcode.php": "7eb3a8ae21fc901ac60f721bd60b267f", + "core/util/barcode/class/BCGcode93.barcode.php": "7e37534aae91f90f9aa63fcda6bcfa39", + "core/util/barcode/class/BCGean13.barcode.php": "3126e0c66b6b7f665a31b466016ae375", + "core/util/barcode/class/BCGean8.barcode.php": "cb883879fc033fe0e920ee85d569da3c", + "core/util/barcode/class/BCGgs1128.barcode.php": "4c6be97c219aa80925b87f32a83c1133", + "core/util/barcode/class/BCGi25.barcode.php": "c7320cb28b41167a1690d10b064ddd0f", + "core/util/barcode/class/BCGintelligentmail.barcode.php": "6489ba288cf1544667b5c60eaef68cc4", + "core/util/barcode/class/BCGisbn.barcode.php": "d9eaacb96f12c0f4b90da999e67ed273", + "core/util/barcode/class/BCGmsi.barcode.php": "2a3259710fb6e74c8c02e00ff8da14d7", + "core/util/barcode/class/BCGothercode.barcode.php": "348d7e686a8a5db01b5b1eb266e4d4ef", + "core/util/barcode/class/BCGpostnet.barcode.php": "39f7efc48a270bb39b2042926787299e", + "core/util/barcode/class/BCGs25.barcode.php": "0e65e092ce185ac243e4945aabf1c912", + "core/util/barcode/class/BCGupca.barcode.php": "106d4d979d8de88e7b8e148e588ac620", + "core/util/barcode/class/BCGupce.barcode.php": "6107ec721948928bc317b96251af7fcb", + "core/util/barcode/class/BCGupcext2.barcode.php": "ac1bbc8a6a0ab5ba6e1082146412b98b", + "core/util/barcode/class/BCGupcext5.barcode.php": "8e836157e68f176fea81e9a17d594d60", + "core/util/barcode/class/JoinDraw.php": "708761c29c5345c71c849ad0040bf9cc", + "core/util/barcode/class/drawer/BCGDraw.php": "313d557b9b6cbb60bab10bddac7320bc", + "core/util/barcode/class/drawer/BCGDrawJPG.php": "8f7e670218f7c9275970592fc9a3c56c", + "core/util/barcode/class/drawer/BCGDrawPNG.php": "7a75e98c776668dc3e7e13fb53bb2cc4", + "core/util/niucloud/BaseNiucloudClient.php": "d9c7bf0608324443a267ee338e375b50", + "core/util/niucloud/CloudService.php": "dbfcd100ff7ac43371413858d2036fee", + "core/util/niucloud/http/AccessToken.php": "5c774da4a0da6c55058b089d8897c05d", + "core/util/niucloud/http/HasHttpRequests.php": "f834c14be4ee5f1294540906c4a92fed", + "core/util/niucloud/http/Response.php": "0ac9da93fed4c5df826a9ce15f92b414", + "core/util/niucloud/http/Token.php": "294af52351e2bad4451f6cc8a38546a4", + "core/util/niucloud/support/XML.php": "6d0c41212ba16b7f1cd65853d79b540c", + "public/index.php": "a4a3e1059b534051eba3b3bed3d78181", + "public/install.php": "ab5d0acf45c3b36a16df117762b98f03", + "public/router.php": "2c2683429f3307ca7350ebca4d06dbca", + "route/app.php": "b695f5468be46844dbead9cb81e97f40", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Common/CheckoutStream.php": "6a5b0e4d8e8ae9d449b053897a1658d3", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Common/ITransform.php": "f8aaebffab4b6d262b16e48d0ad047a9", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Common/Model.php": "4b38497ba36a670ebbcae30b97e1154b", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Common/ObsTransform.php": "795dbc5368e55161dc5a4ae2e5ad1f3a", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Common/SchemaFormatter.php": "1025e75c7a8d3e3d399f00e6bfe04bd7", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Common/SdkCurlFactory.php": "d91c9cbd87b3f058937bb36f998b4898", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Common/SdkStreamHandler.php": "44012feaad60bcb1d7b09d970911b6ee", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Common/ToArrayInterface.php": "5a41613685ef2bd205fdb3aeb58463c4", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Common/V2Transform.php": "35f806e82c7520ebaf67d3af90933ca4", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/GetResponseTrait.php": "b657754e184ebf1f2af79b5fc1b03991", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Resource/Constants.php": "eba5ea474c74cb0410791b15a6005cc8", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Resource/OBSConstants.php": "f67394fdee1f5c6748123b1a87a9e898", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Resource/OBSRequestResource.php": "daffcc9b4471c57a18d1f66c79b6a4cd", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Resource/V2Constants.php": "e1bb65439510514b12f3979918afda5e", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Resource/V2RequestResource.php": "8c6919469dd41c760cf35dce7477f6ee", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/SendRequestTrait.php": "30e587fc19e75ea2e43202ed2eb69b64", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Signature/AbstractSignature.php": "3ad38191723286e1086056544dc357f4", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Signature/DefaultSignature.php": "ca1fc3e4a348bdb6f9f71e46b1cce364", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Signature/SignatureInterface.php": "016c05f3eeea1f6c9e7d8084b035ecb8", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Internal/Signature/V4Signature.php": "52f10bdccb69064b294280130de92959", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Log/ObsConfig.php": "cf81cedeef02fdab577339c6be1b3aca", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/Log/ObsLog.php": "8066b917cc65be35f2ea6cef1c9c7aa7", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/ObsClient.php": "f685e69d40d8b70b63eeac984edb2b8c", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/ObsException.php": "c7edc5a6f469d4c8fde8fd544adae37d", + "vendor/365taofang/huaweicloud-sdk-php-obs/Obs/ObsImageClient.php": "22779cb3e2df32666200075a34e878c1", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/BucketOperationsSample.php": "89349a1eb182147753e3292220f44437", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/ConcurrentCopyPartSample.php": "109ca29ade14533f22ecbbe4bec8b55e", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/ConcurrentDownloadObjectSample.php": "2ba6b1b61e98bbbe7dc68c6febc8d6d4", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/ConcurrentUploadPartSample.php": "7063f2bde7a041186583f6b62faa85bd", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/CreateFolderSample.php": "21bab6841addcb28c7a141b7420434be", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/DeleteObjectsSample.php": "a3e4caa709895eac929cbdc1bb4b7b83", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/DownloadSample.php": "ab0968f7031c114790c50e748473445c", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/ListObjectsInFolderSample.php": "592df217d0c168036d13e666c6f7e322", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/ListObjectsSample.php": "8df29efe7fddf9cdc07d30021ec054b5", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/ListVersionsSample.php": "6b4bdaeed3b474250ad3bc39975a4096", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/ObjectMetaSample.php": "ef0aa6c92587d1347f1d8d5cd45916a3", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/ObjectOperationsSample.php": "ef53e0caa6bda3c6870ae2f59b771057", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/ObsPhpDemo.php": "f98912b1008a5868c82d6028b613f791", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/PostObjectSample.php": "be6852e0b27e5d38f734d7b34f0b4239", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/RestoreObjectSample.php": "c81c4adce0fe286146467892ffa58c17", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/SimpleMultipartUploadSample.php": "b2545522c1b28ace588af388dbe7753c", + "vendor/365taofang/huaweicloud-sdk-php-obs/examples/TemporarySignatureSample.php": "66ea4bfd07514bfcf4a44dc7fa0841de", + "vendor/365taofang/huaweicloud-sdk-php-obs/obs-autoloader.php": "0b3a31f9994700976d4cbb22942cb5b8", + "vendor/adbario/php-dot-notation/src/Dot.php": "8600d15899d64825447fed7462d812aa", + "vendor/adbario/php-dot-notation/src/helpers.php": "ca35da83aab34569e90f996750eff57a", + "vendor/alibabacloud/client/autoload.php": "58e74a8654301a813089be61fa8281c0", + "vendor/alibabacloud/client/src/Accept.php": "2a5d1aa3cd48411ba06b3f7fb993aa7d", + "vendor/alibabacloud/client/src/AlibabaCloud.php": "316474cbcbcb77a0e57c3f220bfe967a", + "vendor/alibabacloud/client/src/Clients/AccessKeyClient.php": "a8ecb7f02686cc659c54e004a97834a2", + "vendor/alibabacloud/client/src/Clients/BearerTokenClient.php": "01aa755b1c000b0b6745016443bf481c", + "vendor/alibabacloud/client/src/Clients/Client.php": "8ad5cb95e10af89f43633e09f46d5c90", + "vendor/alibabacloud/client/src/Clients/EcsRamRoleClient.php": "c6362346a4c4e36e03b6b137a8b06238", + "vendor/alibabacloud/client/src/Clients/ManageTrait.php": "f4508debc26d943ae6d2dfe6e7ffb909", + "vendor/alibabacloud/client/src/Clients/RamRoleArnClient.php": "b1f1d1cfa0c3520c67e08aeca3fbff16", + "vendor/alibabacloud/client/src/Clients/RsaKeyPairClient.php": "1f4a12d64ef45a9c9e69c3664f940a00", + "vendor/alibabacloud/client/src/Clients/StsClient.php": "b9503d597aacf6d669a458addd3d0d64", + "vendor/alibabacloud/client/src/Config/Config.php": "51542de7af722a1bb8557d686e077b0b", + "vendor/alibabacloud/client/src/Config/Data.php": "0e05064519ea9038479696a96469b3bf", + "vendor/alibabacloud/client/src/Credentials/AccessKeyCredential.php": "205b60784f983897818cc8a83fc9e661", + "vendor/alibabacloud/client/src/Credentials/BearerTokenCredential.php": "218235b0361bede66d2e204c5b90e52c", + "vendor/alibabacloud/client/src/Credentials/CredentialsInterface.php": "df715fe8b7eab44686ab413a55133e08", + "vendor/alibabacloud/client/src/Credentials/EcsRamRoleCredential.php": "01fd5963c506cb28a8b693a4e0d6cf54", + "vendor/alibabacloud/client/src/Credentials/Ini/CreateTrait.php": "3e77b432047299aa95002ecfcf2af91c", + "vendor/alibabacloud/client/src/Credentials/Ini/IniCredential.php": "a2efd07b422c0a7c8614964786be38ac", + "vendor/alibabacloud/client/src/Credentials/Ini/OptionsTrait.php": "79afca8b853ea4994b812955b1ef431d", + "vendor/alibabacloud/client/src/Credentials/Providers/CredentialsProvider.php": "4ab48634dd77665f7f3a567c585b3319", + "vendor/alibabacloud/client/src/Credentials/Providers/EcsRamRoleProvider.php": "8d9825c090965106d33b00b2b4ec94cb", + "vendor/alibabacloud/client/src/Credentials/Providers/Provider.php": "b3c03a96c9c08db6380259f20f4e5fad", + "vendor/alibabacloud/client/src/Credentials/Providers/RamRoleArnProvider.php": "26d774e0d4c8b7bf5543ef58290e8be7", + "vendor/alibabacloud/client/src/Credentials/Providers/RsaKeyPairProvider.php": "3865bfae1ca3b78bae98b4c4a896d166", + "vendor/alibabacloud/client/src/Credentials/RamRoleArnCredential.php": "5be9c99bf9a8d11167410323605b9e50", + "vendor/alibabacloud/client/src/Credentials/Requests/AssumeRole.php": "45a247c4d6b7d7e8ba3434455efe155f", + "vendor/alibabacloud/client/src/Credentials/Requests/GenerateSessionAccessKey.php": "de98be285dab50f8cbc4d52e936ae7df", + "vendor/alibabacloud/client/src/Credentials/RsaKeyPairCredential.php": "b8add7a1b8d00dbf9a42c7755ec2e506", + "vendor/alibabacloud/client/src/Credentials/StsCredential.php": "6f5fe579c95f1a12aee8caf94906294d", + "vendor/alibabacloud/client/src/DefaultAcsClient.php": "e600cc06133cc0a99947b6c1ef2336ab", + "vendor/alibabacloud/client/src/Encode.php": "6e3be49b920882265a4b5991e83b155f", + "vendor/alibabacloud/client/src/Exception/AlibabaCloudException.php": "10fb2c5af6fbe64f7f00e0d7423aab8e", + "vendor/alibabacloud/client/src/Exception/ClientException.php": "09051e4a57f0dd4ed2c7b4d044501fa5", + "vendor/alibabacloud/client/src/Exception/ServerException.php": "5960330ffb10d442b4950ffaf1a88a64", + "vendor/alibabacloud/client/src/Filter/ApiFilter.php": "750327fb9b8fbfe40fb97c48826c3944", + "vendor/alibabacloud/client/src/Filter/ClientFilter.php": "a62b8a75de6ad5d5d1329cb5cb7445b7", + "vendor/alibabacloud/client/src/Filter/CredentialFilter.php": "18e6f9a70cb40930c0b99a48e1b8a06f", + "vendor/alibabacloud/client/src/Filter/Filter.php": "e3fd83c9a19a05b7c51f683a8c9eab6e", + "vendor/alibabacloud/client/src/Filter/HttpFilter.php": "d82cb1240343f7249fa11781a9566ed4", + "vendor/alibabacloud/client/src/Functions.php": "17120630cac9f3c5cf146c64d0fc710e", + "vendor/alibabacloud/client/src/Log/LogFormatter.php": "9682a0cc358fcb2866ff49cec5a04157", + "vendor/alibabacloud/client/src/Profile/DefaultProfile.php": "bd064523444e54e4add8dcc3d9afebe3", + "vendor/alibabacloud/client/src/Regions/EndpointProvider.php": "37fb2d843b684f05ad1b412b9ad44d10", + "vendor/alibabacloud/client/src/Regions/LocationService.php": "972759e354a44ef5d7dc4918b07e80e8", + "vendor/alibabacloud/client/src/Regions/LocationServiceRequest.php": "d21e92e415b06f991633bb831435a27e", + "vendor/alibabacloud/client/src/Release.php": "750cda6b1075c3905c988e3df971ceca", + "vendor/alibabacloud/client/src/Request/Request.php": "189aa0da029666e7934d3654519d257c", + "vendor/alibabacloud/client/src/Request/RoaRequest.php": "abc48e6801c6417f09dba5ece5a4fb13", + "vendor/alibabacloud/client/src/Request/RpcRequest.php": "dd020f15b156d9381592a9df606d0a92", + "vendor/alibabacloud/client/src/Request/Traits/AcsTrait.php": "6202d5be2468db02b8a6089095733e8a", + "vendor/alibabacloud/client/src/Request/Traits/ClientTrait.php": "aec13636c7c8ec0ab39fe72e8fc5c4da", + "vendor/alibabacloud/client/src/Request/Traits/DeprecatedRoaTrait.php": "1fc3e89f1d6643c4f3d984409e128f6c", + "vendor/alibabacloud/client/src/Request/Traits/DeprecatedTrait.php": "f739e600bbb126c24721aa1351d50cf8", + "vendor/alibabacloud/client/src/Request/Traits/RetryTrait.php": "8cdacd7d94011ba63b1a00bd41929aec", + "vendor/alibabacloud/client/src/Request/UserAgent.php": "e30d6b834cab1ceb10c386b3ee37c8f0", + "vendor/alibabacloud/client/src/Resolver/ActionResolverTrait.php": "992295b27a14c805fa1372905c21cc4d", + "vendor/alibabacloud/client/src/Resolver/ApiResolver.php": "5598756734b49b9079feb534083a67e4", + "vendor/alibabacloud/client/src/Resolver/CallTrait.php": "44272294efab62e1c614e6a192b631fd", + "vendor/alibabacloud/client/src/Resolver/Roa.php": "d80d472f712f75d88cb2ca50e4120726", + "vendor/alibabacloud/client/src/Resolver/Rpc.php": "03e6903d5d01270e6483d9e4a830ad70", + "vendor/alibabacloud/client/src/Resolver/VersionResolver.php": "b29be0c4768a1893d8eaa22106ef60c5", + "vendor/alibabacloud/client/src/Result/Result.php": "c6d22fb65d3316d27b805a85935d71e4", + "vendor/alibabacloud/client/src/SDK.php": "121e4be33dbaf08b1ee5bc45dad508a6", + "vendor/alibabacloud/client/src/Signature/BearerTokenSignature.php": "21a54c8331273fe145a103d40fbd5daf", + "vendor/alibabacloud/client/src/Signature/ShaHmac1Signature.php": "5f1e010e2b24d4687375e631d11faab6", + "vendor/alibabacloud/client/src/Signature/ShaHmac256Signature.php": "1ed99ae561f76ffc861cf28d0e2ff004", + "vendor/alibabacloud/client/src/Signature/ShaHmac256WithRsaSignature.php": "9dc88d3917665d2572c61fc109873a64", + "vendor/alibabacloud/client/src/Signature/Signature.php": "fd27beeabb82c81a3f1cdd111c787ea5", + "vendor/alibabacloud/client/src/Signature/SignatureInterface.php": "2e02e39ae38fdb4c67cf2dfaefe9eaa4", + "vendor/alibabacloud/client/src/Support/Arrays.php": "3f453ef2623d77ffc46a4b7a2ea3bc15", + "vendor/alibabacloud/client/src/Support/Path.php": "44323788804d46ff14f606813b41bf53", + "vendor/alibabacloud/client/src/Support/Sign.php": "86cde454199aeacbe031068717be24ad", + "vendor/alibabacloud/client/src/Support/Stringy.php": "a4a9f3c7b94466ec06e0feb753f50318", + "vendor/alibabacloud/client/src/Traits/ArrayAccessTrait.php": "a0bce1f27fe018b32ae5738fde8ff9ab", + "vendor/alibabacloud/client/src/Traits/ClientTrait.php": "bfdf0bf47c38fe7bd387363c137e228f", + "vendor/alibabacloud/client/src/Traits/DefaultRegionTrait.php": "0df9c1c7db9f2a5da0a317a64856c91c", + "vendor/alibabacloud/client/src/Traits/EndpointTrait.php": "e2f0b0eec00f8d49ba503d86f1dcbf9b", + "vendor/alibabacloud/client/src/Traits/HasDataTrait.php": "5717b9afb4c1a206dbb98872004b5273", + "vendor/alibabacloud/client/src/Traits/HistoryTrait.php": "5eebb92f5e763d3aa39636b3b866dfc7", + "vendor/alibabacloud/client/src/Traits/HttpTrait.php": "265dbcc9a96c874ea681a633de6040ee", + "vendor/alibabacloud/client/src/Traits/LogTrait.php": "1ea8c5af7d4579518903c3857b3e646f", + "vendor/alibabacloud/client/src/Traits/MockTrait.php": "f66f28838a4d65064d6be097a3cc0daf", + "vendor/alibabacloud/client/src/Traits/ObjectAccessTrait.php": "800ff2896e9f19ba14b02baa362e2ba8", + "vendor/alibabacloud/client/src/Traits/RegionTrait.php": "e99a8dfc5d1eb459f1294bb61b8a3b8e", + "vendor/alibabacloud/client/src/Traits/RequestTrait.php": "6eae4accdb2bb04435e1edb7cb0f4e7e", + "vendor/aliyuncs/oss-sdk-php/autoload.php": "c2314609fe81e1cc09b4755fe033e8f8", + "vendor/aliyuncs/oss-sdk-php/index.php": "1d2fc1266241fbe290a4e6b6807d4f03", + "vendor/aliyuncs/oss-sdk-php/samples/Bucket.php": "9f67a55d41ace68c7b8c54eb3a99a17f", + "vendor/aliyuncs/oss-sdk-php/samples/BucketCname.php": "83c2cb3b638f0df45c6f48cceb4e9196", + "vendor/aliyuncs/oss-sdk-php/samples/BucketCors.php": "4861cda0cc7a00c16861f9179beeaaee", + "vendor/aliyuncs/oss-sdk-php/samples/BucketEncryption.php": "ec89a1cef048fe088c56c4cfd837daa4", + "vendor/aliyuncs/oss-sdk-php/samples/BucketLifecycle.php": "aafc5068a21c3051fb7abf6a0801a6c2", + "vendor/aliyuncs/oss-sdk-php/samples/BucketLogging.php": "f896ac5ae830ff206d4a4f6f0bb9eb41", + "vendor/aliyuncs/oss-sdk-php/samples/BucketPayment.php": "6d049fb3e4f17eb8c8e1d2e5d0cc2c41", + "vendor/aliyuncs/oss-sdk-php/samples/BucketPolicy.php": "8cff5c60b620fbf79901e1909185808e", + "vendor/aliyuncs/oss-sdk-php/samples/BucketReferer.php": "796cd54772217774805da713e51b32cf", + "vendor/aliyuncs/oss-sdk-php/samples/BucketStat.php": "52cb3dc73f03833361966488b21cf5c4", + "vendor/aliyuncs/oss-sdk-php/samples/BucketTags.php": "d9d6fd4aadca21f7a7f7e418385bec14", + "vendor/aliyuncs/oss-sdk-php/samples/BucketTransferAcceleration.php": "b3f847b6ba6eeb7d47e308fc98e1fa51", + "vendor/aliyuncs/oss-sdk-php/samples/BucketVersion.php": "d90e815902822aa786019fe4fd4c331a", + "vendor/aliyuncs/oss-sdk-php/samples/BucketWebsite.php": "662986d97bb069bbade5efdc988f22ea", + "vendor/aliyuncs/oss-sdk-php/samples/BucketWorm.php": "026ae1334db910e262597e74884b7b6f", + "vendor/aliyuncs/oss-sdk-php/samples/Callback.php": "8d13cc042e2a4627f6eefc2c6f7bf32a", + "vendor/aliyuncs/oss-sdk-php/samples/Common.php": "cb1dd7b57f1a144e580a825d0e8ea4cf", + "vendor/aliyuncs/oss-sdk-php/samples/Config.php": "528c550899b323898b0cb3cba65dd20f", + "vendor/aliyuncs/oss-sdk-php/samples/CredentialsPhp.php": "58d8986d509aef2bdbd93e42c73bbdf1", + "vendor/aliyuncs/oss-sdk-php/samples/CredentialsProvider.php": "f5f680ad60a9ee5f8838d07fcf7fcae4", + "vendor/aliyuncs/oss-sdk-php/samples/Image.php": "98b10e15770ee76f75aec8c367bdf8ac", + "vendor/aliyuncs/oss-sdk-php/samples/LiveChannel.php": "70aa078b7d26ed740081f7948852606e", + "vendor/aliyuncs/oss-sdk-php/samples/MultipartUpload.php": "44eeab6c76b974c35aad938d9623bc7e", + "vendor/aliyuncs/oss-sdk-php/samples/Object.php": "bf735225b86d5f6a5ce0fe09428216ec", + "vendor/aliyuncs/oss-sdk-php/samples/ObjectTagging.php": "c4aa577ca251586e7a5a37782a61185d", + "vendor/aliyuncs/oss-sdk-php/samples/RunAll.php": "3843983a666ec15c7b97dfb12e1034ec", + "vendor/aliyuncs/oss-sdk-php/samples/Signature.php": "f521dcf851ad72f832b7b1652b491656", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Core/MimeTypes.php": "60c3030d3f0820880b48fed4e5524f86", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Core/OssException.php": "eea54a10a1e881f6697d93a3f1447e2c", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Core/OssUtil.php": "604a5b7b48eaa106fb8f76ca357978e3", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Credentials/Credentials.php": "f92a0eb42df27f2b78788db31678764a", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Credentials/CredentialsProvider.php": "3708cd2d73a19d24bacceee012dcf7a5", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Credentials/StaticCredentialsProvider.php": "da112d0d7c85582d13258c2d4cd0a61e", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore.php": "b410a0ae2036cecc01e38f6364fd185d", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore_Exception.php": "e1c531714cb51444cc5c949a6ae97926", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Http/ResponseCore.php": "12093bac7ba421c648f5cb874583bf2d", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketInfo.php": "6e2d5c0f0e3a1933d7672303c2ba4edc", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketListInfo.php": "00739d3da89e3f02a9ad2bff37a02059", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/BucketStat.php": "0aaf951b5782dfd487b28be056290db9", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CnameConfig.php": "a69ee641a20c08d1bc499e2cccb96935", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CnameTokenInfo.php": "6f5ad7468b9be8fb59b03900242cd07f", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CorsConfig.php": "9528c43e4fc14c5d32989fb59433bb07", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CorsRule.php": "cc25b7e1fd378930daea2a0207af92eb", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/DeleteMarkerInfo.php": "55ac434bcfa75f0b2e42e87e901ed88e", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/DeleteObjectInfo.php": "6cbcb414b14573633d46b6571e0b4137", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/DeletedObjectInfo.php": "0bebfe8a0b24b8c6cb825614b951614a", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ExtendWormConfig.php": "44b43e077023eb773d224b6a79bb7295", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelHistory.php": "8ef245440fa6b3662abef1ea667f1d00", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelInfo.php": "853f9effb5fa4cfb03b71a03a02c6db5", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelStatus.php": "af4a7f71c012c982092ccb5d077a7893", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/InitiateWormConfig.php": "fbe8bab66555e0b674a6c6c084d6ddc6", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleAction.php": "79d49f6c7f5b1f2d8854974b059bcbc6", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleConfig.php": "a9c71a7021f3984e565d0f7ee31f0759", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleRule.php": "65237c6b229cc294dee3a8fc88fc02f2", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ListMultipartUploadInfo.php": "f9cfada64cb79d6710d4e5638c076aa1", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ListPartsInfo.php": "05444142b8d619ec88c9e5f4ba390abc", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelConfig.php": "d1826ef65269d5c93015cf46be572487", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelHistory.php": "b4bc34363acd55971b418b49f24b67c2", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelInfo.php": "e44781eff9652711f93b7fefaa4b40e1", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelListInfo.php": "0efaa9b84fc231d21938e1e463999469", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/LoggingConfig.php": "c9b2d9132817dbb22490e9b05849db95", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectInfo.php": "0e45f1c3ae212dea8890703a868c2a9b", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectListInfo.php": "38c8c33f4131f34d7b0004ccd7124390", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectListInfoV2.php": "c7004db2c04b5a3b86a23039c640dbc1", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectVersionInfo.php": "95a3559c9e00a217cf69fa0b5b5dc01f", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectVersionListInfo.php": "fb2269ab444b22b19db27bd4f346dd2a", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/PartInfo.php": "036a0e443674d1b620513941ecc35f14", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/PrefixInfo.php": "faf2ebcd7e32d288013a85943f8343a4", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/RefererConfig.php": "31118bf2491a7cd2d0fe4011b8a8f2c5", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/RequestPaymentConfig.php": "77dd62870a5aa75f5e0b48127abab2f9", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/RestoreConfig.php": "d968977783a3fcb7fe74f7fe29a0571a", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ServerSideEncryptionConfig.php": "0a1cecb19539f239cee5519cc0459d96", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/StorageCapacityConfig.php": "c4c2143d9627fe41a79e4ef122946b7b", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/Tag.php": "df0bf8c1b5f2fc2a466c975402a33d0d", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/TaggingConfig.php": "37c7292054d8689609a045e3aa9791f1", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/TransferAccelerationConfig.php": "538723fc37cb57fbe14fcac9f6652599", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/UploadInfo.php": "6d1b1bb26d6c3e7c7adde2bccf082d78", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/VersioningConfig.php": "7400d3d93e25e3975cbc6f55d333083b", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/WebsiteConfig.php": "c2ddaa6a5dcaa497798b282393ba124d", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/WormConfig.php": "e04351a11c40d99eeb0849389a6982b1", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Model/XmlConfig.php": "d99560f242dae61feee14200c7631595", + "vendor/aliyuncs/oss-sdk-php/src/OSS/OssClient.php": "180cf36074e0e20be201ea174b74f074", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/AclResult.php": "e872146dec2fc570c5c1534d5c35e837", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/AppendResult.php": "96675fad67c0b93f168c08c17f929606", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/BodyResult.php": "efd509b861260a7d5c0122afe4a8514b", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/CallbackResult.php": "f0716ae61df95e8393c3d92e1fb84715", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/CopyObjectResult.php": "a64d5f04f82104d75e93f57f00c14823", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/CreateBucketCnameTokenResult.php": "3f1399e5f030ed3824f9a61e9d23e0b3", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/DeleteObjectVersionsResult.php": "90324eab23205d9877598fe13eefdffc", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/DeleteObjectsResult.php": "4b42936c71f094e8075e9e871e78340d", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ExistResult.php": "81b03608c4aa85afbd12b131e62669d8", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketCnameTokenResult.php": "369d494fa014fa322ac013adfb41b8f2", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketEncryptionResult.php": "354de8a8432cd4aa87b6772370286ecb", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketInfoResult.php": "1fbf5f1ef280fa0b018077ed672c9871", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketRequestPaymentResult.php": "22e2862d13abccc8ea31f5d84b176b43", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketStatResult.php": "68cafc110243cda3a96e601cecf8f8cb", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketTagsResult.php": "5b1b632111f7fa5bf015c3f01388e37c", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketTransferAccelerationResult.php": "66aae598ac52f90643ffc1995aa30bb4", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketVersioningResult.php": "faaf59b9dbb455f7a3572a85c77318ba", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketWormResult.php": "267bb61716a823389e2c200cc516d5c6", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetCnameResult.php": "666e4d845fca8874fa341bf6ed9aa30d", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetCorsResult.php": "eecf2ded91e6267a6ed463abac541b0b", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLifecycleResult.php": "1aeae45275a0428c70c2fef36447ce14", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelHistoryResult.php": "d03478cf4497fd1b34834dad727385e0", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelInfoResult.php": "1ed3b459fad8e03b8ab1ada53d589f71", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelStatusResult.php": "b1480b331b4eddf6668391ee46f93e7d", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLocationResult.php": "501937b1fed450bfd9624b785658cb0d", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetLoggingResult.php": "6815a4ac7861f5daf915432e304fcd61", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetRefererResult.php": "d28d7d9f1400d41fec409c86eb88b112", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetStorageCapacityResult.php": "003436eeb88649a925a8c22770c2f8b5", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetWebsiteResult.php": "6d81e708653bf66492d8141df4603f0a", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/HeaderResult.php": "1aab2f1ef5fe2dc817d5e5f00931eb94", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/InitiateBucketWormResult.php": "10638188e9125b810702abca3e9d4297", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/InitiateMultipartUploadResult.php": "880021ff77fe5329d24c628b1037a9d9", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListBucketsResult.php": "95be9ef909e26ee3ea1a2d9e7109e404", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListLiveChannelResult.php": "86fd11f97636d85e2a0aa4a1b68a8b89", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListMultipartUploadResult.php": "f07485f59d2928c8ec626ba369f6b2f4", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectVersionsResult.php": "1e34573792cc3e47aee01936a3012b04", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsResult.php": "16add0d5dfa130eb3b2c1a162a3f4e25", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsV2Result.php": "7163f8be55f7fc88f59df975fbfe9ca5", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListPartsResult.php": "8a3b3cadd989893d70cccd5a4a34ac28", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/PutLiveChannelResult.php": "a1cbc7dbe660fa928ab623cbf6344d06", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/PutSetDeleteResult.php": "2bc44310d34ded3d4e47d8388d04f827", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/Result.php": "8b9b2ae90543fe371b2310839a8f2292", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/SymlinkResult.php": "04919f94612b16d58b6aadae37b7cda0", + "vendor/aliyuncs/oss-sdk-php/src/OSS/Result/UploadPartResult.php": "cb89bbf7810602208d4c3f6acd8d1ab4", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/AclResultTest.php": "473277f74e5f0f2cddd1e2ebafc57cc1", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BodyResultTest.php": "3d17b2fc83df2f5675360c82d8a89477", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketCnameTest.php": "b524e21791d2d8dd9ea287e5ebf4ebe3", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketInfoTest.php": "c814773439dddf62e82c26234b169ed6", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/BucketLiveChannelTest.php": "4df149cd1e6e7f51b45d728d7dcce122", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CallbackTest.php": "9da9632a6ce11774a31562943ce0d3b0", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CnameConfigTest.php": "ec7af3a26ff30fe186ca8d4afc405c32", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CnameTokenInfoTest.php": "2cb620807fcc79bdebabc3097c5b0ce2", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/Common.php": "5d5d45fe57b05ddbb8080e6fd59ba549", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ContentTypeTest.php": "938cc5565bf276389ee891dbd591c5e9", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CopyObjectResult.php": "bb51b84020976857b8d0d260c7d111c9", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CorsConfigTest.php": "732f70d5fe4b35a9a6298a2d7fade596", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/DeleteObjectVersionsResultTest.php": "30fe7244f2f4ac0a7a0fdd7654610920", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ExistResultTest.php": "31f9af5e226128d08a72533e47b17093", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketEncryptionResultTest.php": "75b068ee4806899e2c29f8e02b11c1fd", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketRequestPaymentResultTest.php": "6f28c60f64b92a20145809905cef4e52", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketStatResultTest.php": "78a0ef6c036f7c0f3e95b6699c63d7d9", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketTagsResultTest.php": "dfe905d9d5fa3770cd0a3e552ed4bdd6", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketTransferAccelerationResultTest.php": "b0f1a30c64306becd213ac1b9c0682b6", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketWormResultTest.php": "ea54af7a804c69fb9c6dd637e80d2469", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetCorsResultTest.php": "9a499e3716faacb6ad9da0d88f7fb5d0", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetLifecycleResultTest.php": "92de2e2b6f5506b00dd94ebb39b4a7db", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetLoggingResultTest.php": "b3c470eff5246cc04012aa1d76e0b573", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetRefererResultTest.php": "0086effd28f1bb69a97ce605f2d74029", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetWebsiteResultTest.php": "89fa31e50b513c3a41cc75e17040e41a", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/HeaderResultTest.php": "9e67efad541202271064498dec139819", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/HttpTest.php": "c18661ec2fbd9c6ca5e1b73a720350fe", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/InitiateMultipartUploadResultTest.php": "ebfd77320fb5852dcdef32ce5114e590", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LifecycleConfigTest.php": "c2169f935dc408bb45ca0c4e5e6e98c5", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListBucketsResultTest.php": "6cf6544f144c1aa083786d2d3be827ab", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListMultipartUploadResultTest.php": "1b975025b3bf8f34d3fe1670ea6b341b", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListObjectVersionsResultTest.php": "b05d125013088227fded0416bb091dfd", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListObjectsResultTest.php": "9f33f7638ba9be13d2fab55c85501763", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListObjectsV2ResultTest.php": "29144c411ec1f44be313a86e5505a1d5", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListPartsResultTest.php": "8186888b3e7ecd4cea651af78ef28df3", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LiveChannelXmlTest.php": "77759a61b247c1d6e2cf413f6ae70503", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/LoggingConfigTest.php": "c37721d9db5c447759fe30c37ca24584", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/MimeTypesTest.php": "6c504cb0e52684ca06d3bd42271834c6", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ObjectAclTest.php": "aafdd4bbbdbbb3fe678a93a4a20a4909", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketCnameTest.php": "aa3555a72db13a2cfbf74b0481958aac", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketCorsTest.php": "4573167f2e19ccdf4f7cf0e08f36f033", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketEncryptionTest.php": "15cf5503931ebf4f5b9cdc273480eb27", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketInfoTest.php": "5614e39fb65ad8cf3f8a13f425db5653", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketLifecycleTest.php": "aaafd6f6e7f6c001e15b31d7d3c77bd0", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketLoggingTest.php": "71ac5807d86b470adeeb17290dd5515e", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketPolicyTest.php": "8a0de95d0139a4e106075179b6b0ecd8", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketRefererTest.php": "ff8cae107eb756482f29bcfeeda6e7b9", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketRequestPaymentTest.php": "86b1e2927e2c3ec755c08d517e93c835", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketStatTestTest.php": "eceb598c2229509da08ea9a80ee23162", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketStorageCapacityTest.php": "a74628a4eda64f9b9c4b5968d7ba258f", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketTagsTest.php": "924301883d671640164040a59eb25125", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketTest.php": "adf839d8909c5ce5600bf962e4df5fa5", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketTransferAccelerationTest.php": "935d483869fcfcdce0a4d9ceee1f9622", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketVersioningTest.php": "c2d1777750212b8e0b1cf62ec4f70b1d", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketWebsiteTest.php": "09a46b43f19fec8a90e7d8e0c7a54ab8", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketWormTest.php": "313f2993dd0992f263f1d46f8d1f1939", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientImageTest.php": "64343b5ebeb85ce88d18ee38c06a7aa0", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientListObjectsTest.php": "69895a816b6893037ce7e95bf70082cd", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientListObjectsV2Test.php": "a44f52204107c94a01796cb0c8ac67d2", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientMultipartUploadTest.php": "bfe42afe7901e8057c15371d2d90174c", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectRequestPaymentTest.php": "81eba7eb584ff1200b4fff53040fd8d8", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectTaggingTest.php": "c85d95dd9faf71ca7ec26f484ac0d060", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectTest.php": "e0a865353e172f377fbb53bebba574c3", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectVersioningTest.php": "fb73038d0d5e4e693384ed806264e2a0", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientRestoreObjectTest.php": "227570af4ca22f1851e750c5371ad2a0", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientSignatureTest.php": "6200f25360d799f89657151ae1f019e6", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientTest.php": "ad46ceeb85fec7e61067e717cd08ae96", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssExceptionTest.php": "8e7f14f7cf30eaaea50ca580fbb17ec0", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssTrafficLimitTest.php": "ff372f148e9a0d1f7094c56b5ec0ca5d", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssUtilTest.php": "6cc1bfe90392cbe75bc6dc0cfa863585", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/PutSetDeleteResultTest.php": "0e54f579265ea5dc2af29a23861c5b2f", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/RefererConfigTest.php": "5e55b644a727919a39b18c02e7cb5f31", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/StorageCapacityConfigTest.php": "c12a3e5079b966505f07af64ea68bd0e", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/StorageCapacityTest.php": "21f78fcca170d487321a0a87ca45575d", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/SymlinkTest.php": "7de4048718e6acdf9f69557c5fa147ca", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/TestOssClientBase.php": "af810f47ef0620e58509cad3ab9d2100", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/TransferAccelerationConfigTest.php": "c9a43f1b1c39f5033af5a9b420fa6d96", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/UploadPartResultTest.php": "ac19292d430dbb4b28e228774cf1860c", + "vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/WebsiteConfigTest.php": "9b4855d5af5df41a373dd159ed42b039", + "vendor/autoload.php": "534ab5eca808d1d795e85c651796f650", + "vendor/clagiordano/weblibs-configmanager/src/ConfigManager.php": "6a9970a799307f93e8892da3a55cd1d8", + "vendor/clagiordano/weblibs-configmanager/src/IConfigurable.php": "789cb417c616f81c4a3775b316adb635", + "vendor/clagiordano/weblibs-configmanager/tests/ConfigManagerTest.php": "78cf62f0f78dc51263e43c433a3ccc4e", + "vendor/clagiordano/weblibs-configmanager/testsdata/sample_config_data.php": "a28b7b6b07c0b4fa8a3955f9d132bb7f", + "vendor/composer/ClassLoader.php": "c02be6d96671f88d28aad3ffa134c8ae", + "vendor/composer/InstalledVersions.php": "ba676e94b5ddd557cb6a71a2a5cc98d9", + "vendor/composer/autoload_classmap.php": "6fea34d7d1b38fa95238c6a31ef7e6f3", + "vendor/composer/autoload_files.php": "742d9767cc3355c0cb2455c5a980a099", + "vendor/composer/autoload_namespaces.php": "6b7d1ac4a03fd3421f520af7a6d7ab1f", + "vendor/composer/autoload_psr4.php": "43e6e728b4427ec8d796ab3696998210", + "vendor/composer/autoload_real.php": "6b9e474b62001e5f872fe28a82a36b13", + "vendor/composer/autoload_static.php": "e77846c10e9c4df4924f1d8c779c3b3f", + "vendor/composer/installed.php": "747fe08ad2a44493e3499915377ea8ce", + "vendor/composer/platform_check.php": "88e803cc53322b04be4cb1f6ed3602a1", + "vendor/dh2y/think-qrcode/src/QRcode.php": "d9af2f0db72ab6f2a895717c3e81a266", + "vendor/dh2y/think-qrcode/src/phpqrcode/bindings/tcpdf/qrcode.php": "c0a11c1419131032614c0c5d2c9eb145", + "vendor/dh2y/think-qrcode/src/phpqrcode/index.php": "efd83ab782c1f88335e6f476a00732fc", + "vendor/dh2y/think-qrcode/src/phpqrcode/phpqrcode.php": "a49b3989932467c8c6dd499d04be2a30", + "vendor/dh2y/think-qrcode/src/phpqrcode/qrbitstream.php": "bd6d63dfa9f2dbe4b3f30915653dcc63", + "vendor/dh2y/think-qrcode/src/phpqrcode/qrconfig.php": "cb0652b660884514fc50040a97cd14a9", + "vendor/dh2y/think-qrcode/src/phpqrcode/qrconst.php": "2fe50ac83ee753b2bb73957969b23822", + "vendor/dh2y/think-qrcode/src/phpqrcode/qrencode.php": "b614c44f4e00cb5c1188c7e6209225f8", + "vendor/dh2y/think-qrcode/src/phpqrcode/qrimage.php": "7f7c6502a1b341fb2638d0f2599391f7", + "vendor/dh2y/think-qrcode/src/phpqrcode/qrinput.php": "52db60b2134954b3c60ab080bbfe3883", + "vendor/dh2y/think-qrcode/src/phpqrcode/qrlib.php": "96a6ce57504482dc0f81076082c4b945", + "vendor/dh2y/think-qrcode/src/phpqrcode/qrmask.php": "a4bdf0e02b78b8b59f266aa9457793b6", + "vendor/dh2y/think-qrcode/src/phpqrcode/qrrscode.php": "a7c018654993f60048288dba5d6caf67", + "vendor/dh2y/think-qrcode/src/phpqrcode/qrspec.php": "a66c71311a16c8c85010317704af7774", + "vendor/dh2y/think-qrcode/src/phpqrcode/qrsplit.php": "1bccbe5318552ce67bba56ba24209388", + "vendor/dh2y/think-qrcode/src/phpqrcode/qrtools.php": "6f034039e4fa9f42378b37c441505419", + "vendor/dh2y/think-qrcode/src/phpqrcode/tools/merge.php": "ed3fdbb0fbb8392a9050ea867ddacd88", + "vendor/dh2y/think-qrcode/src/phpqrcode/tools/merged_config.php": "3b018daa6b03c167a1ecea7ef96b1a95", + "vendor/dh2y/think-qrcode/src/phpqrcode/tools/merged_header.php": "2f2dcd46e505c0e4c249d5f62a815324", + "vendor/dragonmantank/cron-expression/src/Cron/AbstractField.php": "22f8494e2822042e0c53788475f56294", + "vendor/dragonmantank/cron-expression/src/Cron/CronExpression.php": "7e4fefd1513387e9ad572f11a91c5cfd", + "vendor/dragonmantank/cron-expression/src/Cron/DayOfMonthField.php": "10e49fd7f8304e48e1815323876d2fc5", + "vendor/dragonmantank/cron-expression/src/Cron/DayOfWeekField.php": "064192ea924ef4f9994c53c7f589d247", + "vendor/dragonmantank/cron-expression/src/Cron/FieldFactory.php": "b1ae13c9dfbd8ce07ce6031d40cdedcb", + "vendor/dragonmantank/cron-expression/src/Cron/FieldFactoryInterface.php": "8192a129320897a83ed25cd894c2ffa8", + "vendor/dragonmantank/cron-expression/src/Cron/FieldInterface.php": "b5aa6c1fa2bb23bbd04ffa7cf1fa9b37", + "vendor/dragonmantank/cron-expression/src/Cron/HoursField.php": "fcc082fbdced6f5d0a92c46b3c534ef5", + "vendor/dragonmantank/cron-expression/src/Cron/MinutesField.php": "39e3f13cd85d43024fa08124c5757e6f", + "vendor/dragonmantank/cron-expression/src/Cron/MonthField.php": "415117ee489ff880191c2d4e1d0bc60e", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Arborize.php": "7e1c1940096df942fbcd171302f8927c", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrCollections.php": "a4bf2f1435e3086c16e412968d39a7cc", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/AlphaValue.php": "0735ba1e0d72921d32b2be57d29f6fdd", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Background.php": "99310e8ff458aaf39b0de712ae1d1173", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php": "ca1cf80faf9ec7a8906cb5bef9331ed2", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Border.php": "bfcec5667278ee0bd42ec80ceb94b924", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Color.php": "ad92a0c4cc0023ab72636ad29e3c69ca", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Composite.php": "d1456a381affaa3287a559770dd825c1", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php": "bf5bf3a9c03a0c91243f94956d778591", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Filter.php": "44146b8f2ff0749459a2391cc55a96d4", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Font.php": "cadcd652415401722a2e6690371adf1f", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/FontFamily.php": "e16e88b78b17ef5933a6753db8483459", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Ident.php": "761cc62ff769403e649a0bd5a251fbbb", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php": "7d50c6c2cbbe3b334c7461b2d01b380d", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Length.php": "bf5eae4ee7059716053ad9263d278ea6", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/ListStyle.php": "184f255d1cfe8ab3bf620757a6700b84", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Multiple.php": "f9a630c6a53df02ba6d1a0ed3f473568", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Number.php": "be44c68a9c95bb88eda0781d9b5f5915", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Percentage.php": "bfb7f57fa6543314c8b8dd0373aaba9d", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/TextDecoration.php": "5c9c72c263a87ea11590b0bb8105632b", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/URI.php": "d706c8324549fc4f11abfb9ab3679da1", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS.php": "e1f56ced29c114077edeb2ba0de15a39", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Clone.php": "ff9e3f723f9b72f07f99c110659681b7", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Enum.php": "7b67f9ef906d94c8bf3310dee3c03a2f", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Bool.php": "b971ee322c6a7ef19a7875a3f02bfae6", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Class.php": "243998e52bc33a51cfa5e9ecab98f9ef", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Color.php": "94924c97ef1cf7c208d7545b8a4508c4", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/ContentEditable.php": "9d3ab250baf69e023a80c1b6cadd3ed6", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/FrameTarget.php": "48bdb5a0f603ff235e2185e0675497ac", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/ID.php": "f941844a693f780d4218888cfac0daec", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Length.php": "8eef9594ae888e38e1c5921f304fd1ed", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/LinkTypes.php": "749a2c0adcdaddcdb0c71d8785c8adbf", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/MultiLength.php": "44af0c9a75c6ca7132ff21d128af19a6", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Nmtokens.php": "4266ca99292f6337fe36a966465ea67c", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Pixels.php": "2b6c6b9a58e008f9ad30bd47feaeadc5", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Integer.php": "c44232150f0fd31ceded65ab8cda5450", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Lang.php": "2e6384ec55c011122ae49c2ab31c5188", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Switch.php": "03ebc8ba70d33a7641bcd07e927fb608", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Text.php": "b7ed41ef61e377d1525c7e958240d44a", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php": "d14b7b4a69e553b4224b55ba8fb8e6ed", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Email.php": "5c820cfbec5d6688e9058ff13b81f199", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Host.php": "fd4d4badaef26f98ab1f6b7906bf5791", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/IPv4.php": "cedd9dae9fc3b958e1fba48cdf5b6546", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/IPv6.php": "233fb37b03b358a0d95dd3f429316ce3", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI.php": "5f77a12b61132f281dcfacecc7ec05b0", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef.php": "f922e5e5c1ebbafaf04de31b9d9660a4", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Background.php": "ed9489fc9798170ed382f1314d9f77ef", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/BdoDir.php": "19379b90689b57ce6fd45aee692b18dc", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/BgColor.php": "6298b85d7cb368d69c652616f75b226d", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/BoolToCSS.php": "9363916e32a3dc99fe2189a3f7235c48", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Border.php": "68dcda39a6cdcb5a867f875c7bc25b5c", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/EnumToCSS.php": "a6854574291715be20198669b1101fe4", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/ImgRequired.php": "604634247e0089d81b89b9147e5e95db", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/ImgSpace.php": "13840e28ff28f7cb85e9e6340e78fd25", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Input.php": "053448d247e6d3f35fdd6481c80a5c0d", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Lang.php": "0f612b56eabe83577f34df1ad604c569", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Length.php": "cc75bba7a9ee518fc9bf790d6f65a0e7", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Name.php": "bef00d099144cef6472738a6be5e92aa", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/NameSync.php": "1f2604d43ec78fb4a7eff242c1313a5d", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Nofollow.php": "97d6aaf38105ac871076dce2b949e8ff", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/SafeEmbed.php": "e5d6998b98cbb2edeb34d41ed9381d7b", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/SafeObject.php": "232bf5e8e469e54dba5694d7272dd416", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/SafeParam.php": "007d1408c26ad50484913e7a3fe0450b", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/ScriptRequired.php": "febab4dc70bf88169881a137c7f9e867", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/TargetBlank.php": "f9865fdd6316c0cf4f63342fc3593f92", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/TargetNoopener.php": "dd77502d96b11c4672481a043e8d99ce", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/TargetNoreferrer.php": "269695146b28a9c3b854d8b16e23e809", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Textarea.php": "25c61427a2cd5428b0d58009b87218f1", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform.php": "30034501c1e8827394f600dad177c3da", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTypes.php": "d00dc8088a5f90eebfe9b0a3b535d687", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrValidator.php": "8601d714205cdecf3ded4d9341044dc4", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Bootstrap.php": "3498910b433189d6a125edab68d04857", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php": "d63d4511587ce9dc88c570ccf099d7b8", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Chameleon.php": "e2dad2b9c9f093b2cef920fe51c86321", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Custom.php": "0f61929a4c24e2c196bdd58cfe566a02", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Empty.php": "33457531d46c2cf60b9d74bc4a0f9818", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/List.php": "82a65464f458e7d60720843d6a2198d2", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Optional.php": "a9ea53d99254631009e54ce72b5767d7", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Required.php": "c102312411eb9f14be660287bef45afb", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/StrictBlockquote.php": "cf8565bb023ac73323b8f3c58881a707", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php": "a7e3965fa190dd22f00fa3abde324acd", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef.php": "455dfdb0bc9f208568046f819a4a7828", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php": "8616c80fe13c72fccac5ec4efda23ef0", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php": "11ee05ac784e9134af3da0d24642543c", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Builder/Xml.php": "47fa3def33b8f0a3399ce77e5d669d53", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Exception.php": "31bf3afba867409fdf11f75eaa3725fd", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Interchange/Directive.php": "53461690dc58307295eeb5e2f30606e3", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Interchange/Id.php": "b0ec14add96cfbb3dc2ea0b5f1cb6a80", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Interchange.php": "214e8cdce1fa501148b20ef3d99a6cf4", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/InterchangeBuilder.php": "8ba43fefc6c8231c7cb6143e2aa0af5d", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Validator.php": "f80e804b0e796c13c834753912f10ebe", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/ValidatorAtom.php": "446e60f704190c269da69b72ece7d70f", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema.php": "e5c429d70c7185e862c0a4d800a31b26", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ContentSets.php": "7ca4682cf570f9581b3f5262ded72d54", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Context.php": "62c46293e7e4f2284f0934fd4c1abca5", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Definition.php": "d9c6de06940a4811dcee6008657f2d4e", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php": "1eee5a1f75620519e3ef7c52c8da1998", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Decorator/Memory.php": "1633327cc2bef18ca3a67d9b762f6ba9", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Decorator.php": "8a61d0e045987bb88b7eb306738d1bef", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Null.php": "ba4e60686ca80e591742fa55cdb5e614", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer.php": "b13f7bee3554a608efeac2ef71f2ab79", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache.php": "3da82671d0f260e198b6ef6acf1d8005", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCacheFactory.php": "3b05f0480562c73c6d6cfd5eaffe1047", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Doctype.php": "308f29c7d17c7998b8c3f949c0004679", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/DoctypeRegistry.php": "e5b36670cea455e510bc29f1fb14ac06", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ElementDef.php": "0d81935f87c04349c799b7de308eb992", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Encoder.php": "0a5a98e8d8e9005d53a930b0e1908644", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/EntityLookup.php": "c29c356dac478eca80747cc4ad1f096e", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/EntityParser.php": "2aacbdb64a56cefe68afb50dd010efcf", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ErrorCollector.php": "9eae2b01aca584994516c509499ae088", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/ErrorStruct.php": "06bc76f4e7f49005106800ea51e73e4d", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Exception.php": "6549f2e00060fd671149191f1e94eaf3", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Filter/ExtractStyleBlocks.php": "edb6d659e0de9a80ff7e9246cc946b63", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Filter/YouTube.php": "55e74bac11f0cfab63e7c8967d194eff", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Filter.php": "933f1e52fcbdc7cda001fbe4f03b5c82", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Generator.php": "df1daca93084bc8afabb11b96664a1e2", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLDefinition.php": "32e810a86372bee32652de3a388e5528", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Bdo.php": "6dcb6f47a697f0b377fe2531fe7bf2ac", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/CommonAttributes.php": "f35337051c6f67617c4b8a856282c60f", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Edit.php": "99de2cc1ce10ca83162a51e42c6b287b", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Forms.php": "ab2e4d49239d9069f8090c1330432789", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Hypertext.php": "a94574dbadf4579c9674fdc669376dc7", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Iframe.php": "40c7200ff7fcb89e4b106c3c063f826f", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Image.php": "e746812dffd577ef46bb19d45d7d051b", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Legacy.php": "2144c25da36774215186ffc40e4473ba", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/List.php": "fe1b57bb06f52f26d1848477660465f4", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Name.php": "b56f15e308be71bca4fa6a379df941d7", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Nofollow.php": "eb4ff6ed303ca33d9e799d48e3f24175", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php": "16ef6ba9e3ca2295f3bb1e162f1a18d8", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Object.php": "6b12f1aa5cbb06aa637e1edc49f6bb31", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Presentation.php": "f8c066212ac7bef32dec610995a4c39b", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Proprietary.php": "734d792760db90c8fed149e7ce736f0a", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Ruby.php": "e91e4cd294f7eef140353cc583aeba2c", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/SafeEmbed.php": "e099d606a1f80f2e48d5e05973a71cd0", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/SafeObject.php": "397e9fefcffb753d0f91899019e7f73a", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/SafeScripting.php": "ac849713bcf2f3456f98db88284f2119", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Scripting.php": "a84b66f7da2f95b3c4f758bc87df09c2", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/StyleAttribute.php": "00c8cdb3fd77913667e59bccbb77df0b", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tables.php": "43ec7f2f057779f03b482cd4136dccb5", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Target.php": "61fbff33f92205546366b8af93f5a538", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/TargetBlank.php": "782f5a3c041a5c263ce4176dfa9c53c2", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/TargetNoopener.php": "7622d438b9690cc2d9518ebfd86398c3", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/TargetNoreferrer.php": "18257775aaf517a6fb695d488734c0fa", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Text.php": "4868658aa54548ce08ba6a7a7e7ef6fd", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/Name.php": "a9f3dadfe8fd9dc75ce21a4eac223500", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/Proprietary.php": "2aef81d0d05e79f998524d5c82767b65", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/Strict.php": "1050a097e9cfc20642cf940a569e89e0", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/Transitional.php": "46a190f7fa4347838efb683cd7301255", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/XHTML.php": "6d524caec79bafacb717f5318a6cb32d", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php": "cff6f5dd2698cec69a91455ebbc4fc39", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy.php": "f5422691867dc827a7e0d68dc36358bf", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/XMLCommonAttributes.php": "22a229b0bff44dc453215c6328798365", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule.php": "414a1d97c1b5c14952a255cee7243112", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModuleManager.php": "d22ebff6adeb2d8bb732dc8361fb2610", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/IDAccumulator.php": "566c63e4c73c0108fde21d1a9d286dd0", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Injector/AutoParagraph.php": "218483120b35cc74672a773ca8b1840a", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Injector/DisplayLinkURI.php": "eded371279a485d9be65478f63293162", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Injector/Linkify.php": "f7c7d617a8dfbb4bab090930b5a65c55", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Injector/PurifierLinkify.php": "b18bc8a722259a390e0a1c4e55780175", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Injector/RemoveEmpty.php": "e72c547a0cf1b49417d35b62acaee9aa", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php": "c167c0deab060eaaade778962c2f48ce", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Injector/SafeObject.php": "e2e54cff61c3848d76a901f0ff50d9a4", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Injector.php": "af500dca7d516bd0e0f7ea468419658a", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Language/messages/en.php": "5836f2bf2c494d4de7ae70d602063f50", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Language.php": "6f18adcaf3a47b6542b23953d72b2a6e", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/LanguageFactory.php": "65d08b1974f0f5c21d4669d392a414f0", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Length.php": "1b496ad4f058d6f74464ac9e68d6597f", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/DOMLex.php": "a9830e286aa0f1544b56649ca754de7b", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/DirectLex.php": "fa0d37eff65b124b3849a64a62caf104", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/PH5P.php": "6400bab93249f12133b6b8ce359f5a35", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer.php": "4d8a1104b0fb1de05cf4ea8961edc100", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Node/Comment.php": "08202322ec607e2f334e578b3db6890c", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Node/Element.php": "9f2e1a2bbd129e3b714a51f3d97e7731", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Node/Text.php": "bfdda227bb41be3cb7829786aaebc93e", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Node.php": "e469fd5dc851aa49d6bd03757abe1859", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/PercentEncoder.php": "c243827d4279b24f43fc7fea65d6dc4f", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Printer/CSSDefinition.php": "9cbdedf404d96d4f86325b73e1251523", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Printer/ConfigForm.php": "bf1ca46f471374cfa796c1aa2dd7a636", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Printer/HTMLDefinition.php": "8d583c9342af32a00dd00a0464a55f03", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Printer.php": "32e2635460cf0df0e14505869b0f463b", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/PropertyList.php": "68e5a7818be2ec6296b58ff64dd89ba4", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/PropertyListIterator.php": "2adf12c2ec39710ab69740b09dd1b371", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Queue.php": "9ad5c8f6fbe1412195f178df14792b99", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/Composite.php": "6b9aefb0d8434c064b83858eccb28dc5", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/Core.php": "2b0982b7dce8032094bfae36e6bc7e4f", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/FixNesting.php": "090c3a974f5ba784ae2f848a5ab9db00", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/MakeWellFormed.php": "348eb60600953f669d071e850321cbc0", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/RemoveForeignElements.php": "be08811b7d0ac7d2ae55541952e3cdf7", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/ValidateAttributes.php": "29cf6bb54660fa1bc1ac203adee9c7d8", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Strategy.php": "3f7ffa4bbeb751b4bf3ec504987eb46e", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/StringHash.php": "04a52b294003ea863f7d41d424925213", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/StringHashParser.php": "25393b273916ec4ba7bfdc9ebab9e3df", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/TagTransform/Font.php": "8fa6034a8e6e1953eb09a76246bba8cd", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/TagTransform/Simple.php": "5997138854240b61895e61c3fa4e68d7", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/TagTransform.php": "5a8ed264cbeb5f187c3380c60971c9d7", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Token/Comment.php": "ebfa8a6a68850ec5418a63872fdb7cc2", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Token/Empty.php": "c13013371746cf36b46fe3dc6fac3d9d", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Token/End.php": "5029c29d5745b33b87dde8b304fb2119", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Token/Start.php": "3289ffc2b1f7b04a342bd941a5519c44", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Token/Tag.php": "4cb801b75b88f656604b400814dedbf4", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Token/Text.php": "def5a8c3c146742a8473213deb05091a", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Token.php": "105d64e33243424438de3fcb083016d7", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/TokenFactory.php": "b011bc09cbe8ccbd27be270f272f4d97", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URI.php": "32927f3e0ca204e0d74720eb2358e8f4", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIDefinition.php": "883eb3dd5ce302eb43f4ccc650dcc760", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/DisableExternal.php": "8936e61cab6355bb4df10379460b989a", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/DisableExternalResources.php": "8440a24e9f0f789dbbb83bb5a9a06c6c", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/DisableResources.php": "8bbba579967f805f662169e4480de774", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/HostBlacklist.php": "123e95fbfad9b045adfc518ab670a3c6", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/MakeAbsolute.php": "3fd8ee4af334352657e75d52573326f4", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/Munge.php": "fa00252008e75d64a09ad2483812c31b", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/SafeIframe.php": "6c8e3a53165bb2a81077d195843368ac", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter.php": "0b87fe2090bd8f5dbae706a90d454c21", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIParser.php": "ba6ffbeaf6c053c17746ea17da37a9ae", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/data.php": "3afe350fb73999d1cc9f28a14a838d34", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/file.php": "2318fecdc41632ec5ffe981d28dffd32", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/ftp.php": "640130d7af5a37e36188ee60db965836", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/http.php": "7799e8f35b8dcff5a7ece8587b0e5592", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/https.php": "1925abd37b900c97e05383adca2c070f", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/mailto.php": "63ab0c48b2d4d7bad88f3fa59f81f805", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/news.php": "cbe3a1005253bc23584b286e246db7d7", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/nntp.php": "b1c0862120423c41579476540becfa69", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/tel.php": "796d76615ff000c246e029a0a98a3dba", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme.php": "8193609328daa3fdfe60639c499048da", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/URISchemeRegistry.php": "b6fc83102e8e6dbf564cd44b0e44b626", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/UnitConverter.php": "a8c44da0f46602532a4405d48beff00d", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/VarParser/Flexible.php": "1a41cd949a3575b822e19ad46f1b89ef", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/VarParser/Native.php": "19873ef7ac91b6c47083af60b0347811", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/VarParser.php": "5ca0697f15aa136a9177c0d55c8f9ea0", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/VarParserException.php": "8b1819c0ed397d313e5c76b062e6264d", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier/Zipper.php": "c3ac8d7e46f252218597224376434bb0", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier.auto.php": "0f6dba2689f471c382240c8d2d7892ba", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload-legacy.php": "e87240c03a5e029f61242c45d092395e", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload.php": "bb9990744be49bb4fd555413bb9244b2", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier.composer.php": "2ad82b7a50a5c15aa9858bdbb9ff6521", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier.func.php": "863d2cfbb3903516f0410710baca6686", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php": "2d5596d522f0898869fd70ad4af792b9", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier.kses.php": "8f9b8b66e4b09efbb50b3825110b2a59", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier.path.php": "5a6eedd494dd20c8579e2a9d39809d5b", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier.php": "16b19daee70a8141362f27eeaf2bca53", + "vendor/ezyang/htmlpurifier/library/HTMLPurifier.safe-includes.php": "10bc9c35759059db9b79a5fce375a786", + "vendor/fastknife/ajcaptcha/src/Domain/Factory.php": "0646bd9cf56525d6ae4f9c00343aa4ab", + "vendor/fastknife/ajcaptcha/src/Domain/Logic/BaseData.php": "977312fd9d4ea7a9767d82c16ce0f7fc", + "vendor/fastknife/ajcaptcha/src/Domain/Logic/BaseImage.php": "c331d3f0553804387f0705e62913e8fd", + "vendor/fastknife/ajcaptcha/src/Domain/Logic/BlockData.php": "b6d4c7add22fdb2df1e863aeda5d90e7", + "vendor/fastknife/ajcaptcha/src/Domain/Logic/BlockImage.php": "aa2d18f5f301d76635f0273045f22978", + "vendor/fastknife/ajcaptcha/src/Domain/Logic/Cache.php": "0f31c958eea01cdfad75974f67e37bf3", + "vendor/fastknife/ajcaptcha/src/Domain/Logic/WordData.php": "e74a6a9df290e90692a81a357f0696bd", + "vendor/fastknife/ajcaptcha/src/Domain/Logic/WordImage.php": "42917d196ee7905e6f9283078f17b59b", + "vendor/fastknife/ajcaptcha/src/Domain/Vo/BackgroundVo.php": "ed59b3f3e90ae886547719e18a22b8b5", + "vendor/fastknife/ajcaptcha/src/Domain/Vo/ImageVo.php": "7825385c9fd48735c7565deb6fc33ed2", + "vendor/fastknife/ajcaptcha/src/Domain/Vo/OffsetVo.php": "a9c48e684fff7f176c22a7cc81983a5f", + "vendor/fastknife/ajcaptcha/src/Domain/Vo/PointVo.php": "98a10e8889c25e35eee7018426e0c09f", + "vendor/fastknife/ajcaptcha/src/Domain/Vo/TemplateVo.php": "9ebd6a157b64b9fd48e016eedd7023d8", + "vendor/fastknife/ajcaptcha/src/Exception/BlockException.php": "f1ab7b551952fb3e5c55500d31ebb335", + "vendor/fastknife/ajcaptcha/src/Exception/ParamException.php": "5bb4dcbb5846cdf0b621b75fc8dc6905", + "vendor/fastknife/ajcaptcha/src/Exception/WordException.php": "f560c1d43d5397db2f64c12936726ad8", + "vendor/fastknife/ajcaptcha/src/Service/BlockPuzzleCaptchaService.php": "40d4d84e0b95279076b9c85a7d58de5d", + "vendor/fastknife/ajcaptcha/src/Service/ClickWordCaptchaService.php": "9af1a4f16337ad55ae36c49603893d5b", + "vendor/fastknife/ajcaptcha/src/Service/Service.php": "72f84023f4c39364a51ef81ef036ab9d", + "vendor/fastknife/ajcaptcha/src/Utils/AesUtils.php": "b4f2445d806a02ab333edcc057a0730c", + "vendor/fastknife/ajcaptcha/src/Utils/CacheUtils.php": "03617ccced297c281490928fd14ae0d9", + "vendor/fastknife/ajcaptcha/src/Utils/MathUtils.php": "163ff06c0539a8806f0661959132dd35", + "vendor/fastknife/ajcaptcha/src/Utils/RandomUtils.php": "d9cae04c4d2cec2aa8e6db65888acc02", + "vendor/fastknife/ajcaptcha/src/config.php": "c3327adff0d5e89b26d889db8f4910e2", + "vendor/fastknife/ajcaptcha/test/BlockPuzzleController.php": "9d5325211bde49eba936638a8b70e66a", + "vendor/fastknife/ajcaptcha/test/ClickWordController.php": "edfa1ccf51e9793ce2e32b52db89acbf", + "vendor/fastknife/ajcaptcha/test/autoload.php": "0da636ec775e42ac282d0b5a3ee1ab62", + "vendor/fastknife/ajcaptcha/test/check.php": "646b42f7c6ee504b561b75a2d9b5e88d", + "vendor/fastknife/ajcaptcha/test/get.php": "0bf25900c27eaa3d09315a76182a86dc", + "vendor/fastknife/ajcaptcha/test/laravel/IndexController.php": "3db138e1647008cc72cbee2e58f4b732", + "vendor/fastknife/ajcaptcha/test/laravel/captcha.php": "d877a5b97879d5765e28ac0e38125b43", + "vendor/fastknife/ajcaptcha/test/testAes.php": "ccfbc9ba11076e3caae655ee8898bae4", + "vendor/fastknife/ajcaptcha/test/testCache.php": "be7a41edf603a9e7624a5b6934503b8e", + "vendor/fastknife/ajcaptcha/test/testImage.php": "6c23dcc55a4d7fa4434b7beb61e2c1fd", + "vendor/fastknife/ajcaptcha/test/thinkphp/Index.php": "61c91181f8ad256b71f377ba7a858344", + "vendor/fastknife/ajcaptcha/test/thinkphp/captcha.php": "9e69019b6d58a98e9aebd1b2ca7773cf", + "vendor/fastknife/ajcaptcha/test/verification.php": "409f8c1ed202b15492daf725ebbcc4ec", + "vendor/firebase/php-jwt/src/BeforeValidException.php": "28f7fb0e1517e8c99aa25a5293301060", + "vendor/firebase/php-jwt/src/ExpiredException.php": "616f62fe19bc88e399659284467d6dae", + "vendor/firebase/php-jwt/src/JWK.php": "56fc0e4229635b887695e0c253b6b345", + "vendor/firebase/php-jwt/src/JWT.php": "519e60415c4d4378949f1501aa605a44", + "vendor/firebase/php-jwt/src/Key.php": "8583eea03610646dd98478df80f6ee58", + "vendor/firebase/php-jwt/src/SignatureInvalidException.php": "564cc0fdae693e059c144db882205dee", + "vendor/guzzlehttp/command/src/Command.php": "d018dac402f8122b47490f9f2697f192", + "vendor/guzzlehttp/command/src/CommandInterface.php": "036a6b4b4015c56fe416ce27975440fa", + "vendor/guzzlehttp/command/src/Exception/CommandClientException.php": "24e95664f5fa914d6ebf1a689de34c95", + "vendor/guzzlehttp/command/src/Exception/CommandException.php": "15274cf8a19559787fed0673f9f275f3", + "vendor/guzzlehttp/command/src/Exception/CommandServerException.php": "588645616a623dfdf2c5e65e04c408aa", + "vendor/guzzlehttp/command/src/HasDataTrait.php": "c280db67f29e289a83e52f69d68c4acd", + "vendor/guzzlehttp/command/src/Result.php": "80c17260443544f9eac696374d9a6782", + "vendor/guzzlehttp/command/src/ResultInterface.php": "724150ea5cadaab878655ccfcc7dbf57", + "vendor/guzzlehttp/command/src/ServiceClient.php": "81bdd773243a14592dccc976a0186df0", + "vendor/guzzlehttp/command/src/ServiceClientInterface.php": "2006993533a6e74cd145aa7ed1355b28", + "vendor/guzzlehttp/command/src/ToArrayInterface.php": "17c87578a19bcd26b314bc40d65e5d3d", + "vendor/guzzlehttp/guzzle/src/BodySummarizer.php": "b129b9f437e5cea33b016a119f67f6e8", + "vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php": "2e7a643fd4dafcbbd68ee78bc95017c7", + "vendor/guzzlehttp/guzzle/src/Client.php": "18fe357ea023518733355341375d892e", + "vendor/guzzlehttp/guzzle/src/ClientInterface.php": "7bf1f2e2b8601759aa24cc8bd7cf445a", + "vendor/guzzlehttp/guzzle/src/ClientTrait.php": "ec374db7c7e2b607f9ae344c386792bf", + "vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php": "5ec8be054129219e020ae59bd6303275", + "vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php": "a7b6e1da39e10f65519efa846b675a71", + "vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php": "89389c49e3bd822935491b36938ae8d6", + "vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php": "5e3eda0ccd88b0e3b9c51835e5c8b32e", + "vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php": "583fc5f00b76a21475d745b399c2c1d9", + "vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php": "092ba3020946f21dc104d60b1f2b6124", + "vendor/guzzlehttp/guzzle/src/Exception/ClientException.php": "bd71865f36eae459c4a030d04be5a14e", + "vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php": "18f7073ff82e475c18a12fc8dca544c1", + "vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php": "0aef70dd9799b19636e5f115c73d3092", + "vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php": "8e5b4860cf34750f27d8631ddc46731f", + "vendor/guzzlehttp/guzzle/src/Exception/RequestException.php": "c22e86d3ce326bb0d5b4a26431d197f4", + "vendor/guzzlehttp/guzzle/src/Exception/ServerException.php": "4a75fbf0f7667c4898157e4d15aad9d6", + "vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php": "76e07f3360e0f3f10daeb197cf6fc57f", + "vendor/guzzlehttp/guzzle/src/Exception/TransferException.php": "8f77b97ec1cd12524e3f33d09ec3ddf7", + "vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php": "94b6026fbfe5ffd203241d5e7e6f7062", + "vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php": "13cf6a330a446702fbd6013b2ceb7459", + "vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php": "36075376b482790ca87630fd36bf41e9", + "vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php": "40c0aabba0e6dc06a2ac906b7374a34a", + "vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php": "d2ea29833ea39aeb96e5390ae5b9569c", + "vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php": "1c395f2b2992d373b58b7184d52d12d2", + "vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php": "37dac153ec8d7931cbc1cea88538ad4c", + "vendor/guzzlehttp/guzzle/src/Handler/Proxy.php": "f65269fbb4bd98af6da76d01d3e2569f", + "vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php": "11fd3ac08b98a2555913b30dc2facc27", + "vendor/guzzlehttp/guzzle/src/HandlerStack.php": "1b004bc76a5d2d9a4fe0d085cddd079a", + "vendor/guzzlehttp/guzzle/src/MessageFormatter.php": "9ea065b7faf8efa3c47520a20d4c1299", + "vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php": "df02ad57f894909ce3e32e46382a9440", + "vendor/guzzlehttp/guzzle/src/Middleware.php": "a77a21aecd6d00f5af4f7854c224e31a", + "vendor/guzzlehttp/guzzle/src/Pool.php": "c6c0c52d694f67111d48180d1df94c2e", + "vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php": "12b8e3bc48ab0a2565645e00fdfe55c2", + "vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php": "9328650344d789ce452f9578bf05a671", + "vendor/guzzlehttp/guzzle/src/RequestOptions.php": "5708d52e0a32c247434c0fb2a7fe12cc", + "vendor/guzzlehttp/guzzle/src/RetryMiddleware.php": "eeea23a0c5267965ebabc3a4df4c0849", + "vendor/guzzlehttp/guzzle/src/TransferStats.php": "fefd47ea6ee2e8331dbbfc667c204528", + "vendor/guzzlehttp/guzzle/src/Utils.php": "41161839480993dbe97ae57ef462f963", + "vendor/guzzlehttp/guzzle/src/functions.php": "f7afb85234ccb05bb31b861d9e91dcbc", + "vendor/guzzlehttp/guzzle/src/functions_include.php": "ccc9e7252d9c55ff6f372cdbb2da35fc", + "vendor/guzzlehttp/guzzle-services/src/Description.php": "43de09ad96779661a2350aa2eae92545", + "vendor/guzzlehttp/guzzle-services/src/DescriptionInterface.php": "8983ccaccf88616e91035086989b5e06", + "vendor/guzzlehttp/guzzle-services/src/Deserializer.php": "629458688b21d9cde05b74681c82c03b", + "vendor/guzzlehttp/guzzle-services/src/GuzzleClient.php": "fe38c1b63f3b361cf28c51a8dc5dcb3e", + "vendor/guzzlehttp/guzzle-services/src/Handler/ValidatedDescriptionHandler.php": "c85f05472cb5a13fc5e320b476618b11", + "vendor/guzzlehttp/guzzle-services/src/Operation.php": "28b0fb7aa46ca0f7b54b34c00dcb772c", + "vendor/guzzlehttp/guzzle-services/src/Parameter.php": "cfafbc5914703bd45332a8e76e23bcf9", + "vendor/guzzlehttp/guzzle-services/src/QuerySerializer/QuerySerializerInterface.php": "366624b41f4e2233aceb416d02a8ebfc", + "vendor/guzzlehttp/guzzle-services/src/QuerySerializer/Rfc3986Serializer.php": "26c24c44dd06361f87b83c0f3b4b9be0", + "vendor/guzzlehttp/guzzle-services/src/RequestLocation/AbstractLocation.php": "fcb90eb8f6d62d98961289ce77d21421", + "vendor/guzzlehttp/guzzle-services/src/RequestLocation/BodyLocation.php": "23a8b95445af4e8ad313d9ac9d83da7c", + "vendor/guzzlehttp/guzzle-services/src/RequestLocation/FormParamLocation.php": "3c7e91ef38efb0173913e6587343884b", + "vendor/guzzlehttp/guzzle-services/src/RequestLocation/HeaderLocation.php": "5721b4faca2de4aa88aae4e8ea47e852", + "vendor/guzzlehttp/guzzle-services/src/RequestLocation/JsonLocation.php": "d4ff2347c1291b21474e0e3cf7ab68b4", + "vendor/guzzlehttp/guzzle-services/src/RequestLocation/MultiPartLocation.php": "80e3627b322b7d0a8dcca6088560911a", + "vendor/guzzlehttp/guzzle-services/src/RequestLocation/QueryLocation.php": "ce05725581113d9d480c39c0502f4a31", + "vendor/guzzlehttp/guzzle-services/src/RequestLocation/RequestLocationInterface.php": "7bb06cc346b1e900f9b5bd271091d684", + "vendor/guzzlehttp/guzzle-services/src/RequestLocation/XmlLocation.php": "2dbfcc9dd0a6581d762e1e01cf350b0f", + "vendor/guzzlehttp/guzzle-services/src/ResponseLocation/AbstractLocation.php": "736b564bcfde2b6d9af59d405cd2ddd2", + "vendor/guzzlehttp/guzzle-services/src/ResponseLocation/BodyLocation.php": "92d0fafb2ed2806ae67a7e12d4a51e14", + "vendor/guzzlehttp/guzzle-services/src/ResponseLocation/HeaderLocation.php": "4b2defd073be31b963ec0005ac9a01c4", + "vendor/guzzlehttp/guzzle-services/src/ResponseLocation/JsonLocation.php": "1e65bd942e0b0d03ecdaa9b77618a9c6", + "vendor/guzzlehttp/guzzle-services/src/ResponseLocation/ReasonPhraseLocation.php": "48f00194219a4a3c91000e83ea8331b1", + "vendor/guzzlehttp/guzzle-services/src/ResponseLocation/ResponseLocationInterface.php": "8b74303bb2678b6254442f163c26d45b", + "vendor/guzzlehttp/guzzle-services/src/ResponseLocation/StatusCodeLocation.php": "3a08012442bb53bdf7104d32f4c12ba3", + "vendor/guzzlehttp/guzzle-services/src/ResponseLocation/XmlLocation.php": "6fd2ac1b2c6f842566488b70c0a9cb51", + "vendor/guzzlehttp/guzzle-services/src/SchemaFormatter.php": "b830352e90268c68d7aa0c209036482f", + "vendor/guzzlehttp/guzzle-services/src/SchemaValidator.php": "41dec7516fb7b3e506067f6c9b357aab", + "vendor/guzzlehttp/guzzle-services/src/Serializer.php": "90378233ec92dfd9900fad22b88b0dfc", + "vendor/guzzlehttp/promises/src/AggregateException.php": "87762026ba51c2fbfdb5136b8bfb33ed", + "vendor/guzzlehttp/promises/src/CancellationException.php": "7c33eb271eade33e4731c19487178189", + "vendor/guzzlehttp/promises/src/Coroutine.php": "58a48fc20bf6b22ae404b9d7b6a0a44a", + "vendor/guzzlehttp/promises/src/Create.php": "408d2119e8bd735158174e3a65b318e5", + "vendor/guzzlehttp/promises/src/Each.php": "b7d7cca8303abce13fde384c4ae53063", + "vendor/guzzlehttp/promises/src/EachPromise.php": "b884f3f5d972780fbcda9002340184f9", + "vendor/guzzlehttp/promises/src/FulfilledPromise.php": "fb9a5326d138b6db48c059ce0896d3ef", + "vendor/guzzlehttp/promises/src/Is.php": "b6a680742fdfafac933172d79974fdda", + "vendor/guzzlehttp/promises/src/Promise.php": "53446c32e4dfffde234d27965eda9ef1", + "vendor/guzzlehttp/promises/src/PromiseInterface.php": "a1c3c986cbaae1a23bddb9d23f049ef4", + "vendor/guzzlehttp/promises/src/PromisorInterface.php": "1de295cc1d9cf865cd6b388441af4032", + "vendor/guzzlehttp/promises/src/RejectedPromise.php": "68a78eaec669b24928a8f3bf198613d0", + "vendor/guzzlehttp/promises/src/RejectionException.php": "c73a95ae20b33c6f400e4d78fb0edf86", + "vendor/guzzlehttp/promises/src/TaskQueue.php": "5e7cbd48cae602ce1fc31a1c5a9129ab", + "vendor/guzzlehttp/promises/src/TaskQueueInterface.php": "6f68c4a5cbc69e7d1fb04ad2c6155ab1", + "vendor/guzzlehttp/promises/src/Utils.php": "a7859982e77851b59d6637916bee9e85", + "vendor/guzzlehttp/promises/src/functions.php": "3ea73a907bac512b98a23b3771219c2f", + "vendor/guzzlehttp/promises/src/functions_include.php": "f5cb9de3f9980feda6ea3341215bf7ac", + "vendor/guzzlehttp/psr7/src/AppendStream.php": "69d9e7d9b2a5d0971859e58bee65b75b", + "vendor/guzzlehttp/psr7/src/BufferStream.php": "fbd526081ff1f845e45444939c1cf076", + "vendor/guzzlehttp/psr7/src/CachingStream.php": "040dc5673e6775f3e147bfd17ceaa518", + "vendor/guzzlehttp/psr7/src/DroppingStream.php": "e54ea06e8af801260f8f7c1ef02dda53", + "vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.php": "abcddc9de909da6d9c9539800c133bce", + "vendor/guzzlehttp/psr7/src/FnStream.php": "97204b40bfc9b920344896a0ef09dc7c", + "vendor/guzzlehttp/psr7/src/Header.php": "8415bd128d97e57340d2b3b8d4a55c64", + "vendor/guzzlehttp/psr7/src/HttpFactory.php": "efdafa95b1ff71ad44e20e18839bd732", + "vendor/guzzlehttp/psr7/src/InflateStream.php": "8b627028ba4dda5148e8e80894a41737", + "vendor/guzzlehttp/psr7/src/LazyOpenStream.php": "b4bae6d03ed28cc5aaa11e10bd1c20a1", + "vendor/guzzlehttp/psr7/src/LimitStream.php": "9eedc7b41823cf7011a9a782b8bd8347", + "vendor/guzzlehttp/psr7/src/Message.php": "7d4dfee53c919f6881621f49007624be", + "vendor/guzzlehttp/psr7/src/MessageTrait.php": "be441031aa16058a8164f1cf9a9860ba", + "vendor/guzzlehttp/psr7/src/MimeType.php": "b86e4547532d85604c55a84514a31a8e", + "vendor/guzzlehttp/psr7/src/MultipartStream.php": "d1b1bbfcb6587057b3df3d45f1c0bf8e", + "vendor/guzzlehttp/psr7/src/NoSeekStream.php": "be7eccffda2b5c6eb7abcc5d539d5100", + "vendor/guzzlehttp/psr7/src/PumpStream.php": "c353d81911c6813214eb771287c8d528", + "vendor/guzzlehttp/psr7/src/Query.php": "642e7785e3e87444b68d1aaeee057918", + "vendor/guzzlehttp/psr7/src/Request.php": "e8c005ac02154da4e572f25700e85eb8", + "vendor/guzzlehttp/psr7/src/Response.php": "275604696b1e4f8cf398df74e9e8933f", + "vendor/guzzlehttp/psr7/src/Rfc7230.php": "255ccdedb66492c5a39e0f0130269a93", + "vendor/guzzlehttp/psr7/src/ServerRequest.php": "95f6e1f9e5e86234995e36032d3ee249", + "vendor/guzzlehttp/psr7/src/Stream.php": "ff47d07b84dcc2071f712ccb0a349a7e", + "vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php": "872d67a1c27e679b592df1bffa566795", + "vendor/guzzlehttp/psr7/src/StreamWrapper.php": "2e9c30c92414d219d6bfdee0d903ba59", + "vendor/guzzlehttp/psr7/src/UploadedFile.php": "6ab404b7aba99abaaba308e94754fa76", + "vendor/guzzlehttp/psr7/src/Uri.php": "dc741423fd9bd06a90099d0ef77d9afa", + "vendor/guzzlehttp/psr7/src/UriComparator.php": "e2b48e5aa2d22614a015290b40ee7bf7", + "vendor/guzzlehttp/psr7/src/UriNormalizer.php": "5de7fb4b9a513c57602e85052962be37", + "vendor/guzzlehttp/psr7/src/UriResolver.php": "1893d6b7b1358642d47946dbe1207211", + "vendor/guzzlehttp/psr7/src/Utils.php": "575dc3076f6349338a1f6ad28cfb4a41", + "vendor/guzzlehttp/uri-template/src/UriTemplate.php": "8a727606ed3f3861bf3b2cf0942bdc69", + "vendor/hyperf/context/src/ApplicationContext.php": "b47e2458f14e96ee82e9f04e3f1ce1d2", + "vendor/hyperf/context/src/Context.php": "aedf4990216ec62e1920a283d65004aa", + "vendor/hyperf/context/src/Traits/CoroutineProxy.php": "01c6d7d8620b67d93c027456af6ed92c", + "vendor/hyperf/contract/src/ApplicationInterface.php": "1f5ae7afb20d581660caa24295181c1b", + "vendor/hyperf/contract/src/Arrayable.php": "417667157793a62ee549d8de7129b7fe", + "vendor/hyperf/contract/src/Castable.php": "218d4eecef5564e2b9bd0d7cd144733f", + "vendor/hyperf/contract/src/CastsAttributes.php": "a551d5413fefd8a274ae6b84a387fea4", + "vendor/hyperf/contract/src/CastsInboundAttributes.php": "9ea054d349f81b8c0c4b280935475601", + "vendor/hyperf/contract/src/CompressInterface.php": "8ec532dd9af4daae26cf6b44693c3fcb", + "vendor/hyperf/contract/src/ConfigInterface.php": "2a26c4bb681943e536703753fcb7b0b2", + "vendor/hyperf/contract/src/ConnectionInterface.php": "d401ea9302d20810735ed87fa0e770e1", + "vendor/hyperf/contract/src/ContainerInterface.php": "7caf7970a5a71efdeca79cdf23869b99", + "vendor/hyperf/contract/src/DispatcherInterface.php": "157992f14dcfac8fb9beafa94531eb41", + "vendor/hyperf/contract/src/FrequencyInterface.php": "276b6dba8a5836fe84ef12acf5e8a4e4", + "vendor/hyperf/contract/src/IPReaderInterface.php": "ec790c5137fb75ddf147b30cf6c5d5ae", + "vendor/hyperf/contract/src/IdGeneratorInterface.php": "d0fbf951f68d64a9d720b938a4067156", + "vendor/hyperf/contract/src/JsonDeSerializable.php": "5cc4114ccf6d87750dcfb631a81a0862", + "vendor/hyperf/contract/src/Jsonable.php": "0722c3b7e695448540b57f6e59142080", + "vendor/hyperf/contract/src/LengthAwarePaginatorInterface.php": "a495de6b280662e4aa877ad1a153c748", + "vendor/hyperf/contract/src/MessageBag.php": "79e8a2c6b529f97bb4fe279610cf9c8a", + "vendor/hyperf/contract/src/MessageProvider.php": "9d6b657e82e3bebed921e508cce4ac31", + "vendor/hyperf/contract/src/MiddlewareInitializerInterface.php": "9febbe1593bf3760e1d81c4735a2a025", + "vendor/hyperf/contract/src/NormalizerInterface.php": "ea665444ba79209672108f2fed5f1bdf", + "vendor/hyperf/contract/src/OnCloseInterface.php": "add9ec1781dc87aa692eabb5369a16d3", + "vendor/hyperf/contract/src/OnHandShakeInterface.php": "7c473555d52ceb99df5ab5e428d21fa8", + "vendor/hyperf/contract/src/OnMessageInterface.php": "dec28bed7fa52f8987294c8691c13e08", + "vendor/hyperf/contract/src/OnOpenInterface.php": "43f36a027ca5184bb8212fdb46bab1b3", + "vendor/hyperf/contract/src/OnPacketInterface.php": "3d390858082a3ddbe8476e9c837528a8", + "vendor/hyperf/contract/src/OnReceiveInterface.php": "1d58303858b314323e663f6aefa4f390", + "vendor/hyperf/contract/src/OnRequestInterface.php": "30c83021896d9911b76ed6f58e6aa104", + "vendor/hyperf/contract/src/PackerInterface.php": "10ab34be2c2cda80c472a57cf1fa3c8e", + "vendor/hyperf/contract/src/PaginatorInterface.php": "2f1be854e149d68a61304b54a67ef161", + "vendor/hyperf/contract/src/PoolInterface.php": "20057f6058225d2c9df763b372a1ff84", + "vendor/hyperf/contract/src/PoolOptionInterface.php": "a7227a81afb4ecbb60169e913ea9c2d9", + "vendor/hyperf/contract/src/ProcessInterface.php": "5e2ded4d847e0b04d29bf79d82179d72", + "vendor/hyperf/contract/src/ResponseEmitterInterface.php": "290a636ba00624aeb26ed04271dd40f4", + "vendor/hyperf/contract/src/SessionInterface.php": "3074360cc09e86baa4aff663948e3cfe", + "vendor/hyperf/contract/src/StdoutLoggerInterface.php": "1f7fae2ccf7fb79043653178d78cba90", + "vendor/hyperf/contract/src/Synchronized.php": "d20ee46660f7c67cad236201f256e3e3", + "vendor/hyperf/contract/src/TranslatorInterface.php": "a337a24ee74a752daaf71a57bc9319b6", + "vendor/hyperf/contract/src/TranslatorLoaderInterface.php": "65ecfd7ced2ccbacc5f3b7307696700a", + "vendor/hyperf/contract/src/UnCompressInterface.php": "c33973e300180a4de8c31097778ea912", + "vendor/hyperf/contract/src/ValidatorInterface.php": "a525febcd1b68db31d64dd3a32289049", + "vendor/hyperf/contract/src/Xmlable.php": "7e87bd37023f8d494214eefdad839162", + "vendor/hyperf/engine/.php-cs-fixer.php": "1d7c3b5604aeb397173f474b423798dd", + "vendor/hyperf/engine/.phpstorm.meta.php": "09bed3fa11d6b89a7520e04412e1c182", + "vendor/hyperf/engine/src/Channel.php": "0230bdb9148d4dd2fc2445a933d9ee0d", + "vendor/hyperf/engine/src/ConfigProvider.php": "3fffdcc5ddfc8d965ed12df44941d92c", + "vendor/hyperf/engine/src/Constant/SocketType.php": "dd17a410621dfb4ce426ffc3f9d4aca2", + "vendor/hyperf/engine/src/Constant.php": "ffb6aeaecf12e46cf64e5744964e31c4", + "vendor/hyperf/engine/src/Coroutine.php": "19b7f966d532b906f4ceb4c1ceac74ba", + "vendor/hyperf/engine/src/DefaultOption.php": "6c4ef926fcca79a896c87129bbf5b656", + "vendor/hyperf/engine/src/Exception/CoroutineDestroyedException.php": "9c321ae86465ea82b62ed2aff971d422", + "vendor/hyperf/engine/src/Exception/HttpClientException.php": "adf2d60be0a3e8949f02188167191fbd", + "vendor/hyperf/engine/src/Exception/InvalidArgumentException.php": "e7383a87d4cf67ead3eb4675e19856a0", + "vendor/hyperf/engine/src/Exception/RunningInNonCoroutineException.php": "f126fbbcf71db1d588aa0346aa7153f9", + "vendor/hyperf/engine/src/Exception/RuntimeException.php": "9c4e2b942ffa7d016ca888563df84838", + "vendor/hyperf/engine/src/Exception/SocketClosedException.php": "6bb1cbad05283bbccf39523d7960d57e", + "vendor/hyperf/engine/src/Exception/SocketConnectException.php": "a1c3b1777da8f522556e9f22d37db021", + "vendor/hyperf/engine/src/Exception/SocketTimeoutException.php": "addd15ea275ff8d971a4f8d1d6f7b7e0", + "vendor/hyperf/engine/src/Extension.php": "2b15ca96b28e53fd99fc5c5e0595931a", + "vendor/hyperf/engine/src/Functions.php": "2a85092ce86a06785522986fa072a4e0", + "vendor/hyperf/engine/src/Http/Client.php": "59dde4144ffcdf2d4b5a0fde65539b81", + "vendor/hyperf/engine/src/Http/EventStream.php": "4088761eb5181ce908dcba58081e8d64", + "vendor/hyperf/engine/src/Http/FdGetter.php": "2a9b602c12d9eb970f62ba76eb699a26", + "vendor/hyperf/engine/src/Http/RawResponse.php": "4f7ef13672f032e324cc2d74dea7673b", + "vendor/hyperf/engine/src/Http/Server.php": "651cddf3d86616a774be4e018cfdd55b", + "vendor/hyperf/engine/src/Http/ServerFactory.php": "19dbc4ef4565203039865ba0009f2fe2", + "vendor/hyperf/engine/src/Http/Stream.php": "ed81c0c6d158a3176b81e8c7682efacc", + "vendor/hyperf/engine/src/Http/V2/Client.php": "eb7287333346c6461ccd9916b2b7a34c", + "vendor/hyperf/engine/src/Http/V2/ClientFactory.php": "7854839cf11ce577cb210fb08d7ac107", + "vendor/hyperf/engine/src/Http/V2/Request.php": "dc39fb3c8009b8bd6d7f4ac8ce405130", + "vendor/hyperf/engine/src/Http/V2/Response.php": "71b2f82759b429de3de7b33d5d2ff7ca", + "vendor/hyperf/engine/src/Http/WritableConnection.php": "11534d236e1689cfe8a3a2c8ce062d03", + "vendor/hyperf/engine/src/ResponseEmitter.php": "ff0336e736c9c65db9affd1f7440bb77", + "vendor/hyperf/engine/src/SafeSocket.php": "3b9fee6555c93be0c2fe1bb0430e30d6", + "vendor/hyperf/engine/src/Signal.php": "ea01bf1ca18955f9dc83b5695b50587b", + "vendor/hyperf/engine/src/Socket/SocketFactory.php": "28f641902a55392ea6bd710e4d7e27a5", + "vendor/hyperf/engine/src/Socket/SocketOption.php": "fe0b213f506e394d572bab7d922ffba8", + "vendor/hyperf/engine/src/Socket.php": "67d5e54471f0496a93817fdcafad7bd0", + "vendor/hyperf/engine/src/WebSocket/Frame.php": "b6c4e651bc8c7baf6724c7ae72059e33", + "vendor/hyperf/engine/src/WebSocket/Opcode.php": "2bd380e9a6e07aa5c8efc2f177071e89", + "vendor/hyperf/engine/src/WebSocket/Response.php": "108c661c94c065901304c94f40e253f1", + "vendor/hyperf/engine/src/WebSocket/WebSocket.php": "be974f9153dd392448d5e023762b183e", + "vendor/hyperf/engine-contract/.php-cs-fixer.php": "1d2aaa0fef06c14b79df7caabddc7dbf", + "vendor/hyperf/engine-contract/.phpstorm.meta.php": "09bed3fa11d6b89a7520e04412e1c182", + "vendor/hyperf/engine-contract/src/ChannelInterface.php": "f967b4dbfdb4c887182b52f3725b78f4", + "vendor/hyperf/engine-contract/src/CoroutineInterface.php": "20613c2a456fc8a954063c78f3b690e8", + "vendor/hyperf/engine-contract/src/DefaultOptionInterface.php": "0cf8657f6d25efa057b4dcda1bbcfe60", + "vendor/hyperf/engine-contract/src/Http/ClientInterface.php": "32ebb08dfc41400ed84d743559d09840", + "vendor/hyperf/engine-contract/src/Http/RawResponseInterface.php": "fd586f45c46cf3b588375b2317c8a949", + "vendor/hyperf/engine-contract/src/Http/ServerFactoryInterface.php": "38e13784b8c6761c5f549b621aff53aa", + "vendor/hyperf/engine-contract/src/Http/ServerInterface.php": "27a1784f27d79e0cd6957d89c1fa8b47", + "vendor/hyperf/engine-contract/src/Http/V2/ClientFactoryInterface.php": "414989c2c5a13fd5473581b3653672b6", + "vendor/hyperf/engine-contract/src/Http/V2/ClientInterface.php": "54e5f7e68ef10b4641fbacbaf95c2622", + "vendor/hyperf/engine-contract/src/Http/V2/RequestInterface.php": "73717d7aa8b8b3e10ee64bfcdbf22942", + "vendor/hyperf/engine-contract/src/Http/V2/ResponseInterface.php": "fc7ada97b443825d32a8749bd5d14191", + "vendor/hyperf/engine-contract/src/Http/Writable.php": "750621fbc2f0a275f69c07810a85fd19", + "vendor/hyperf/engine-contract/src/ResponseEmitterInterface.php": "4f7d1f3da3e432625b12a3a34bed198b", + "vendor/hyperf/engine-contract/src/SignalInterface.php": "085b19487485a07f2b33e4ca6b991224", + "vendor/hyperf/engine-contract/src/Socket/SocketFactoryInterface.php": "df7235c07c2a6d8077aec5280e4c9fa6", + "vendor/hyperf/engine-contract/src/Socket/SocketOptionInterface.php": "f8534c89d359d7a5fac8f52c3dc8d980", + "vendor/hyperf/engine-contract/src/SocketInterface.php": "fc2bdfd5711d2bf4f24f18f6be650620", + "vendor/hyperf/engine-contract/src/WebSocket/FrameInterface.php": "839d4d33bcdda5f7db8372f16d2b3a33", + "vendor/hyperf/engine-contract/src/WebSocket/ResponseInterface.php": "2bba20c41d840ee1fb0d996eaea6dc67", + "vendor/hyperf/engine-contract/src/WebSocket/WebSocketInterface.php": "9ea8668d7fac1d63b41c1bcf2e207105", + "vendor/hyperf/pimple/.php-cs-fixer.php": "2a54dbdeb74997793bf4c5fd7a5a59e9", + "vendor/hyperf/pimple/.phpstorm.meta.php": "09bed3fa11d6b89a7520e04412e1c182", + "vendor/hyperf/pimple/src/ConfigProvider.php": "475bd9aeab83fbc880b1725dfe2a0120", + "vendor/hyperf/pimple/src/Container.php": "e01a54da148b7aeba44e559cab39cda9", + "vendor/hyperf/pimple/src/ContainerFactory.php": "bead98b2ec6f67fcef03f298ceaa43d9", + "vendor/hyperf/pimple/src/Exception/InvalidDefinitionException.php": "54bab63d25f076a8a06f5d647beba715", + "vendor/hyperf/pimple/src/Exception/NotFoundException.php": "658bcb96d83b224a0e95b9ab4463eb3d", + "vendor/hyperf/pimple/src/Exception/NotSupportException.php": "fbfe8b8489a2789d7a163070bcbf7be5", + "vendor/hyperf/pimple/src/ProviderInterface.php": "6d1d9a8219a2246c1b2b4146843466cd", + "vendor/intervention/image/src/Intervention/Image/AbstractColor.php": "49b8894659de000ab614557fa951154d", + "vendor/intervention/image/src/Intervention/Image/AbstractDecoder.php": "044b8054a08f22928c8576591a41bf43", + "vendor/intervention/image/src/Intervention/Image/AbstractDriver.php": "c2e4842d47a38d2fc9ba6dc0afb49c0a", + "vendor/intervention/image/src/Intervention/Image/AbstractEncoder.php": "17031695614df8c08db193f88a6d5db6", + "vendor/intervention/image/src/Intervention/Image/AbstractFont.php": "2bc2e04808d5fef850c9eae0d029ee78", + "vendor/intervention/image/src/Intervention/Image/AbstractShape.php": "e18f8db06f95b0d1ebea4ab18639ef6e", + "vendor/intervention/image/src/Intervention/Image/Commands/AbstractCommand.php": "57e19bf3d741aec7509db1cf1d0325d4", + "vendor/intervention/image/src/Intervention/Image/Commands/Argument.php": "f7fd8f2c235b3e42a39071e2684d8563", + "vendor/intervention/image/src/Intervention/Image/Commands/ChecksumCommand.php": "99fc9597853455c7002725cda0619bc3", + "vendor/intervention/image/src/Intervention/Image/Commands/CircleCommand.php": "d966ccba0cfc4b2cddaf5459552a1deb", + "vendor/intervention/image/src/Intervention/Image/Commands/EllipseCommand.php": "9a766ac0071052a2c6269b9f7b7d31bd", + "vendor/intervention/image/src/Intervention/Image/Commands/ExifCommand.php": "07b8ac860d358b62b0c9bb67037edce5", + "vendor/intervention/image/src/Intervention/Image/Commands/IptcCommand.php": "45a1c36c1bf05038ce458b22a1c47b44", + "vendor/intervention/image/src/Intervention/Image/Commands/LineCommand.php": "9fd97d8bfbb5cfb67fef055b60f4a269", + "vendor/intervention/image/src/Intervention/Image/Commands/OrientateCommand.php": "f184c7fb6f875eea62a77b616c82744e", + "vendor/intervention/image/src/Intervention/Image/Commands/PolygonCommand.php": "f1892c76282e4d5a18ef72c376b99e6a", + "vendor/intervention/image/src/Intervention/Image/Commands/PsrResponseCommand.php": "32038846c5848ad0a04207325ee7d548", + "vendor/intervention/image/src/Intervention/Image/Commands/RectangleCommand.php": "2cf9e311c53ced71340e21fcb64bb2c7", + "vendor/intervention/image/src/Intervention/Image/Commands/ResponseCommand.php": "9096a4f498cf5023d1b4dd3d14c651e6", + "vendor/intervention/image/src/Intervention/Image/Commands/StreamCommand.php": "bb4a17cc337e286dd499e45c2b8279eb", + "vendor/intervention/image/src/Intervention/Image/Commands/TextCommand.php": "af9e8ca7be5defd293d93ca54c9c9e00", + "vendor/intervention/image/src/Intervention/Image/Constraint.php": "88e3a75406faf0a53a6c5e5444f6c251", + "vendor/intervention/image/src/Intervention/Image/Exception/ImageException.php": "390580aa7f9b13830122ff65aaab62c8", + "vendor/intervention/image/src/Intervention/Image/Exception/InvalidArgumentException.php": "02df9d429d2782831dbb578f714b9ed8", + "vendor/intervention/image/src/Intervention/Image/Exception/MissingDependencyException.php": "ac54b69859f9ac4a9c8cd4dcaea8cacd", + "vendor/intervention/image/src/Intervention/Image/Exception/NotFoundException.php": "a05a1637a590b6978b5baf8397bd9eaf", + "vendor/intervention/image/src/Intervention/Image/Exception/NotReadableException.php": "4c16e4a6098182e98a18b783220fe10a", + "vendor/intervention/image/src/Intervention/Image/Exception/NotSupportedException.php": "892affbde1d933f63794a810e8b47cdc", + "vendor/intervention/image/src/Intervention/Image/Exception/NotWritableException.php": "b8a00845f9d69f5cc888274c72eb228c", + "vendor/intervention/image/src/Intervention/Image/Exception/RuntimeException.php": "6aa003745428464809bb6c1f5075b18f", + "vendor/intervention/image/src/Intervention/Image/Facades/Image.php": "c5266c7cecaf3aaf2a1d196782d7c21f", + "vendor/intervention/image/src/Intervention/Image/File.php": "2da030b0b39e59aea5a42e3a6d1671d6", + "vendor/intervention/image/src/Intervention/Image/Filters/DemoFilter.php": "63eca3b5577d9eb3dd89562b51136842", + "vendor/intervention/image/src/Intervention/Image/Filters/FilterInterface.php": "5f80af07f38e5cd760357366091d31f9", + "vendor/intervention/image/src/Intervention/Image/Gd/Color.php": "1e96376729af4a5c1370c20029b3f882", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/BackupCommand.php": "bf710a6c6389678afe7d83c6d98cbb05", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/BlurCommand.php": "8945befce98bb559a4ed35657682f141", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/BrightnessCommand.php": "46261735344151a0e3bf6471af6afc5f", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/ColorizeCommand.php": "ae2d7992186a4cc242aae3ba60468c6b", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/ContrastCommand.php": "4f6b08d27bd727df5ba166e395acc0de", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/CropCommand.php": "74929418bbb262292c0e8d764c86e7c1", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/DestroyCommand.php": "f6d162eb8e7fa70fec6a99d9566a7916", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/FillCommand.php": "79c05aecc79bfc9bc1e35b74c81c2261", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/FitCommand.php": "30c6a1fafebec5290d3b784a185d5e5e", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/FlipCommand.php": "ab403c4b3228acd51d49d060332d084a", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/GammaCommand.php": "7a524830d31ebf915d498dd2e83c3df6", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/GetSizeCommand.php": "e6b30e71d4eb164c82635022b4ac09af", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/GreyscaleCommand.php": "7dac1b04b06de60a9d1bef273a582a93", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/HeightenCommand.php": "e5b6d6dc3010b01acf4493c30162cd9b", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/InsertCommand.php": "300b0ff66f173337dd425edc0134c799", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/InterlaceCommand.php": "f395e52b10ded9ecf12a91c6a0bf94d5", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/InvertCommand.php": "414057aa4e009c4267e9ad8b888e905c", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/LimitColorsCommand.php": "d288f1ec6462b72653b0385fd9900c5e", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/MaskCommand.php": "9bbb82c0c2587d118b58bc750d7ed792", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/OpacityCommand.php": "24dcfe8a4bcfcfa622a24ee9335d7de5", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/PickColorCommand.php": "a31abae51eae0116ed0d5f258fc6f9a5", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/PixelCommand.php": "c0759a8e7643140c7f3d7eb847f1106a", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/PixelateCommand.php": "7be4be528bb39655d9839117be61df67", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/ResetCommand.php": "a65e18c000815a0823b25bed548eed70", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/ResizeCanvasCommand.php": "a101a5232272cab313c17a78813b0d15", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/ResizeCommand.php": "411cba1f0a702e0a7065ce9a890fa9d4", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/RotateCommand.php": "2ffbe9860f8574ef362eac4d311f3810", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/SharpenCommand.php": "60c383daa8130c8485d052ecd237a3f6", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/TrimCommand.php": "e878579db8f9e0add67d4bafa3490fd1", + "vendor/intervention/image/src/Intervention/Image/Gd/Commands/WidenCommand.php": "82fb6285eb47f2432858b4866603f7c4", + "vendor/intervention/image/src/Intervention/Image/Gd/Decoder.php": "d8d68688815bbe7a0b45dc75ccf2f0b1", + "vendor/intervention/image/src/Intervention/Image/Gd/Driver.php": "cd303334f8fc5249afe241b8b5a92abc", + "vendor/intervention/image/src/Intervention/Image/Gd/Encoder.php": "f66f54d739fd2ae2ed21a1353511cc3b", + "vendor/intervention/image/src/Intervention/Image/Gd/Font.php": "3d95d6997810c5359c8b3e7a73e5ba5c", + "vendor/intervention/image/src/Intervention/Image/Gd/Shapes/CircleShape.php": "45262ffae7a4d8e8e87a77ac865ac6f6", + "vendor/intervention/image/src/Intervention/Image/Gd/Shapes/EllipseShape.php": "21a09cb2f53872cf58809dcadefd09f0", + "vendor/intervention/image/src/Intervention/Image/Gd/Shapes/LineShape.php": "b8593342177ef2ec6ea3bf1837b15614", + "vendor/intervention/image/src/Intervention/Image/Gd/Shapes/PolygonShape.php": "5ef6025d9ac16010218a58f16cac3afa", + "vendor/intervention/image/src/Intervention/Image/Gd/Shapes/RectangleShape.php": "83ee2f3f63b5f2611ac2cc43a4a5b9d3", + "vendor/intervention/image/src/Intervention/Image/Image.php": "4c92821e04256790e741b219257a285d", + "vendor/intervention/image/src/Intervention/Image/ImageManager.php": "d3cc3d50a82e4147dc9ba6417e950116", + "vendor/intervention/image/src/Intervention/Image/ImageManagerStatic.php": "96dbfacaa4541ac69074a03f319d549e", + "vendor/intervention/image/src/Intervention/Image/ImageServiceProvider.php": "b6d269cd5c53f9315fa7c77c923986cb", + "vendor/intervention/image/src/Intervention/Image/ImageServiceProviderLaravel4.php": "496f05c590cd46dfbb4554e35b3006f5", + "vendor/intervention/image/src/Intervention/Image/ImageServiceProviderLaravelRecent.php": "26381391a5f7c8d8d5c33fb1112e253b", + "vendor/intervention/image/src/Intervention/Image/ImageServiceProviderLeague.php": "81d96524fbb9adf38145388b1414a1a3", + "vendor/intervention/image/src/Intervention/Image/ImageServiceProviderLumen.php": "f661de8dfb16be115f3940583843c87c", + "vendor/intervention/image/src/Intervention/Image/Imagick/Color.php": "19a6768fb15f1307ea84028a57c1a5aa", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/BackupCommand.php": "3e879b64daaa0b1be8f81f5b0699f39f", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/BlurCommand.php": "6a7083204aa762f05e56b5551f3b7cc5", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/BrightnessCommand.php": "c32beba702b3086633e46e40813d85b0", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ColorizeCommand.php": "c5ad3090a8e9a5ed539f8e1998184e42", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ContrastCommand.php": "084ba56250052a8f7541c14966b3e80f", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/CropCommand.php": "91fff2e30ea57bcfa908de88724eb829", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/DestroyCommand.php": "aebcaa587ab4647946a50d919246a5d3", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ExifCommand.php": "ad825a38ef0c2cb7a3bb5586556e697d", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/FillCommand.php": "0444166734b0b418aee8d6c4abd4d94e", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/FitCommand.php": "fd9ddf4801ec3b1f76823ba69b648900", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/FlipCommand.php": "afe87ae4a162afd4b09c50e1deda48b3", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/GammaCommand.php": "d388a142c4ab1ec806d75b5e7c4db689", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/GetSizeCommand.php": "5ea8040b3400f9f94460371e7987de45", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/GreyscaleCommand.php": "d7bd091459b8dc3692fec4342cb5a488", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/HeightenCommand.php": "68806255529bd7b94bfbc13fe1ce6b33", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/InsertCommand.php": "066dc3555d9ad9f99434f43d9b16b237", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/InterlaceCommand.php": "9b5fa02ed1f006362bead086008f03ee", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/InvertCommand.php": "0f1740abcb7af7da5b130802958bb773", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/LimitColorsCommand.php": "239c8e4291e230d008800644ac057037", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/MaskCommand.php": "c8e65e573845edcbbaf8c37c1ee5c37a", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/OpacityCommand.php": "6e257d9187d3e54268b882d205ae39dd", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/PickColorCommand.php": "7e08303efcaab10884278bc44d52d4bb", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/PixelCommand.php": "edeae3e151d47cf6758f702ade704eea", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/PixelateCommand.php": "8a406dcf7c7fd88b40b30acf3bbe008a", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ResetCommand.php": "c2e8108ca52143edcaacd633ed97cef9", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ResizeCanvasCommand.php": "6254acd74ac8d63cb1cc552c5dcf1f21", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ResizeCommand.php": "47013b84cf29991df0bcf2bb13f229db", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/RotateCommand.php": "09a728cb285e6b3be476e17cfb01bff3", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/SharpenCommand.php": "a698c22c1985abecc5421f6c4a7664d5", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/TrimCommand.php": "33fb0c1bef1c21c3c0ff79b2189aeaf4", + "vendor/intervention/image/src/Intervention/Image/Imagick/Commands/WidenCommand.php": "7417f8282681535e85d900c6356f94c9", + "vendor/intervention/image/src/Intervention/Image/Imagick/Decoder.php": "66539b254d455249361116b3e1dd8ba4", + "vendor/intervention/image/src/Intervention/Image/Imagick/Driver.php": "d5c907cb3ab1608c1d6686680d1f58ef", + "vendor/intervention/image/src/Intervention/Image/Imagick/Encoder.php": "cd3fdb67880cc4416a05fc54464084e0", + "vendor/intervention/image/src/Intervention/Image/Imagick/Font.php": "2d91b74c9be26b8fda256a51c47219d4", + "vendor/intervention/image/src/Intervention/Image/Imagick/Shapes/CircleShape.php": "b81a9e54bc909645768f676fb22732a5", + "vendor/intervention/image/src/Intervention/Image/Imagick/Shapes/EllipseShape.php": "12569e1e8629c9809242204d4e870bb0", + "vendor/intervention/image/src/Intervention/Image/Imagick/Shapes/LineShape.php": "eac0ea3020d070ae6249447792a05a91", + "vendor/intervention/image/src/Intervention/Image/Imagick/Shapes/PolygonShape.php": "c0ba423ba4a251c53dd5d82df67f3e71", + "vendor/intervention/image/src/Intervention/Image/Imagick/Shapes/RectangleShape.php": "faac545e51d77d9e0c0c06774fb21e3b", + "vendor/intervention/image/src/Intervention/Image/Point.php": "80c4f765cfb8ae34fb41ca1e2fcf84fc", + "vendor/intervention/image/src/Intervention/Image/Response.php": "a0b59f1c82ff8e2802d356747398ad2b", + "vendor/intervention/image/src/Intervention/Image/Size.php": "0874766a431c7856ac95ef46568be553", + "vendor/intervention/image/src/config/config.php": "5d74634e771388187e97ee483741fa08", + "vendor/kkokk/poster/src/Cache/Repository.php": "21efcda52750c5162b4831fec6bc55b3", + "vendor/kkokk/poster/src/Captcha/CaptchaGeneratorFactory.php": "7fbb0809eb6b66f8558df01ec991b90c", + "vendor/kkokk/poster/src/Captcha/CaptchaGeneratorInterface.php": "2d755ccb6674d487201d2960a23ee7a6", + "vendor/kkokk/poster/src/Captcha/CaptchaManager.php": "8e8afd4e80511cbb4cf0ba141467e529", + "vendor/kkokk/poster/src/Captcha/Generators/CaptchaGenerator.php": "34fabca3130ef77f00f344431fb71848", + "vendor/kkokk/poster/src/Captcha/Generators/ClickGenerator.php": "7e2b17a4af632bdc69d5d92fad46cc3a", + "vendor/kkokk/poster/src/Captcha/Generators/InputGenerator.php": "b4c4f1c62bab7cf5bdc4259e62ff48b1", + "vendor/kkokk/poster/src/Captcha/Generators/RotateGenerator.php": "024dc9baa4601e6c2295afdaf3aeada1", + "vendor/kkokk/poster/src/Captcha/Generators/SliderGenerator.php": "bfc6c2de02b9cdc30d09cb7c49e39601", + "vendor/kkokk/poster/src/Captcha/Traits/ClickTrait.php": "de0da781d0f127e4de2b745f8035d67c", + "vendor/kkokk/poster/src/Captcha/Traits/InputTrait.php": "db3dbce91b455499b91eb413e7e4631a", + "vendor/kkokk/poster/src/Captcha/Traits/RotateTrait.php": "e959b03b83a88c7f075db5b13cda9985", + "vendor/kkokk/poster/src/Captcha/Traits/SliderTrait.php": "5fffc8981f49f0bff97eef4956c5bcc4", + "vendor/kkokk/poster/src/Common/Common.php": "6e797693d85c949538e2f078bc6534b6", + "vendor/kkokk/poster/src/Exception/Exception.php": "9db0ec87a8863c009509d538868e4b04", + "vendor/kkokk/poster/src/Exception/PosterException.php": "51a89f3ba1fb87fe89488865a1d9e759", + "vendor/kkokk/poster/src/Exception/SystemException.php": "96cb4d4ea4f8277eec6927b0dbe7d2da", + "vendor/kkokk/poster/src/Facades/Cache.php": "944cc306d6cdb26ce22fc14978059cdf", + "vendor/kkokk/poster/src/Facades/Captcha.php": "d7b0dd8e8a602523969ea9bb4167a5d6", + "vendor/kkokk/poster/src/Facades/Facade.php": "d1488f9bd39daf008582a4ff82796f08", + "vendor/kkokk/poster/src/Facades/Html.php": "1c8bbde57e1de51c2c2bebd8fdb15ada", + "vendor/kkokk/poster/src/Facades/Poster.php": "e1f2ebc46adc4b33f4c1467e399e3d0c", + "vendor/kkokk/poster/src/Html/Builder.php": "7cf426e9533bfafc36b5e469ab51026b", + "vendor/kkokk/poster/src/Html/Drivers/Driver.php": "e3704f0b4cc86b4e776c81c588cd65f4", + "vendor/kkokk/poster/src/Html/Drivers/DriverInterface.php": "953f29675829b8f5f841090171a42c89", + "vendor/kkokk/poster/src/Html/Drivers/WkDriver.php": "d285c1a4e0d3f958037e7e23adca5e22", + "vendor/kkokk/poster/src/Html/Html.php": "f15580a61549bd7270691b2e74e7ad96", + "vendor/kkokk/poster/src/Html/HtmlFactory.php": "8ca232d0b1ed0f5f6739fe6a0df16f34", + "vendor/kkokk/poster/src/Html/HtmlInterface.php": "965803b071a09e32015737ef2bfdd7ec", + "vendor/kkokk/poster/src/Html/HtmlManager.php": "01fa52eaf9fd9383be4250475105ac15", + "vendor/kkokk/poster/src/Html/Queries/Query.php": "4ebe434b63750a1e940a2fd57804d7ff", + "vendor/kkokk/poster/src/Html/Queries/WkQuery.php": "7dae4802425f8ee375caf4b52feb1f28", + "vendor/kkokk/poster/src/Html/WkHtml.php": "a41da25f1f19890c827b040ccb62c348", + "vendor/kkokk/poster/src/Image/Builder.php": "4fccf02d90efdb5d232093c3a57e351d", + "vendor/kkokk/poster/src/Image/Drivers/Driver.php": "9fa52d09b3aae570fc049850c53b859c", + "vendor/kkokk/poster/src/Image/Drivers/DriverInterface.php": "abfc8f8fe172797def3b42936aa560b6", + "vendor/kkokk/poster/src/Image/Drivers/GdDriver.php": "ac775a167b8f6361972aa4fe2bfa9bcb", + "vendor/kkokk/poster/src/Image/Drivers/ImagickDriver.php": "8db210e98d0f9fb41dd1c665b13f4a23", + "vendor/kkokk/poster/src/Image/Extension.php": "815cdb24b779a83b0a18a615fb9c56b6", + "vendor/kkokk/poster/src/Image/ExtensionFactory.php": "6bee7cb1362ffdad0a12750ce9a85a77", + "vendor/kkokk/poster/src/Image/ExtensionInterface.php": "05e43b17150f2cf9742e4d45c3a00724", + "vendor/kkokk/poster/src/Image/GdExtension.php": "491835e6873742ea2e0cc04f851d9355", + "vendor/kkokk/poster/src/Image/ImagickExtension.php": "847ebdab1410dbc60a5b9a75f1d6e95f", + "vendor/kkokk/poster/src/Image/PosterManager.php": "6026fef7a3681771a331374aa75a51dc", + "vendor/kkokk/poster/src/Image/Queries/GdQuery.php": "aa23005a52b859464a6041fd7c812fca", + "vendor/kkokk/poster/src/Image/Queries/ImagickQuery.php": "2136b91f702749aede9303b9297cc156", + "vendor/kkokk/poster/src/Image/Queries/Query.php": "d84f303f4e6a75597e64666744f04152", + "vendor/kkokk/poster/src/Image/Traits/GdTrait.php": "a982868af529fead175e25453cb707b3", + "vendor/kkokk/poster/src/Image/Traits/ImagickTrait.php": "a679098406767b51c80879902fd78016", + "vendor/kkokk/poster/src/Lang/Captcha.php": "f56d392b72a9e5efd0be2dd9da0a5c54", + "vendor/kkokk/poster/src/Lang/Poster.php": "4f0c73d95c93fc839695c6bdc035a357", + "vendor/kkokk/poster/src/PHPQrcode/bindings/tcpdf/qrcode.php": "27719e2e8e26c5fac637fcab89519301", + "vendor/kkokk/poster/src/PHPQrcode/phpqrcode.php": "aa6c2aaae163a41e1fcbfa8516937b90", + "vendor/kkokk/poster/src/PHPQrcode/qrbitstream.php": "bd6d63dfa9f2dbe4b3f30915653dcc63", + "vendor/kkokk/poster/src/PHPQrcode/qrconfig.php": "cb0652b660884514fc50040a97cd14a9", + "vendor/kkokk/poster/src/PHPQrcode/qrconst.php": "2b9df7419bc92d33e67a3c632197547b", + "vendor/kkokk/poster/src/PHPQrcode/qrencode.php": "b973936e3763669adbb8236cb1489be4", + "vendor/kkokk/poster/src/PHPQrcode/qrimage.php": "78db79dfce6fa8057bb797084f87724f", + "vendor/kkokk/poster/src/PHPQrcode/qrinput.php": "c31f7a07449fa0675d69fbc9ba6a8f54", + "vendor/kkokk/poster/src/PHPQrcode/qrlib.php": "96a6ce57504482dc0f81076082c4b945", + "vendor/kkokk/poster/src/PHPQrcode/qrmask.php": "a4bdf0e02b78b8b59f266aa9457793b6", + "vendor/kkokk/poster/src/PHPQrcode/qrrscode.php": "a7c018654993f60048288dba5d6caf67", + "vendor/kkokk/poster/src/PHPQrcode/qrspec.php": "a66c71311a16c8c85010317704af7774", + "vendor/kkokk/poster/src/PHPQrcode/qrsplit.php": "7b81ddc5f427b96bd71023174280b56b", + "vendor/kkokk/poster/src/PHPQrcode/qrtools.php": "6f034039e4fa9f42378b37c441505419", + "vendor/kkokk/poster/src/PHPQrcode/tools/merge.php": "ed3fdbb0fbb8392a9050ea867ddacd88", + "vendor/kkokk/poster/src/PHPQrcode/tools/merged_config.php": "3b018daa6b03c167a1ecea7ef96b1a95", + "vendor/kkokk/poster/src/PHPQrcode/tools/merged_header.php": "2f2dcd46e505c0e4c249d5f62a815324", + "vendor/kkokk/poster/src/PosterManager.php": "de7ef7d0ff12469bbb965229d598669e", + "vendor/kosinix/grafika/src/Grafika/Color.php": "7cda879b93725f7956f98ce917ee443e", + "vendor/kosinix/grafika/src/Grafika/DrawingObject/CubicBezier.php": "43311add6ac4c923c65370ef98904209", + "vendor/kosinix/grafika/src/Grafika/DrawingObject/Ellipse.php": "bd94cf36143038bd621a3f770607b27e", + "vendor/kosinix/grafika/src/Grafika/DrawingObject/Line.php": "ede71e8e2bcbd18205cb11118faf8017", + "vendor/kosinix/grafika/src/Grafika/DrawingObject/Polygon.php": "5fb262f81134a02c5c6ecefe60c41ea8", + "vendor/kosinix/grafika/src/Grafika/DrawingObject/QuadraticBezier.php": "fb7fb8a3adc768538590b98c1d343439", + "vendor/kosinix/grafika/src/Grafika/DrawingObject/Rectangle.php": "930248954432f14bb63ba026903cc33f", + "vendor/kosinix/grafika/src/Grafika/DrawingObjectInterface.php": "497edacea666520a716de15bd36b84d9", + "vendor/kosinix/grafika/src/Grafika/EditorInterface.php": "c0fc7341d8a4bb98b6ca647d014f010f", + "vendor/kosinix/grafika/src/Grafika/FilterInterface.php": "6c9645b986853d0a400d7f9c38c7c429", + "vendor/kosinix/grafika/src/Grafika/Gd/DrawingObject/CubicBezier.php": "350baeea849c001eaa0d60394a3aa9e6", + "vendor/kosinix/grafika/src/Grafika/Gd/DrawingObject/Ellipse.php": "eb8c55aad664533f0f2ce9cad7d2ed85", + "vendor/kosinix/grafika/src/Grafika/Gd/DrawingObject/Line.php": "a187aa18447d674f40ca597f2d9385b2", + "vendor/kosinix/grafika/src/Grafika/Gd/DrawingObject/Polygon.php": "8605b06d995414044464a02673cb1252", + "vendor/kosinix/grafika/src/Grafika/Gd/DrawingObject/QuadraticBezier.php": "ad9b3f0ad0952161c828e2a0cd39cdb2", + "vendor/kosinix/grafika/src/Grafika/Gd/DrawingObject/Rectangle.php": "bca5fd948cf2674cb3d246aa51dbc242", + "vendor/kosinix/grafika/src/Grafika/Gd/Editor.php": "8791b13a5eb2a65808ede5c2df543ba4", + "vendor/kosinix/grafika/src/Grafika/Gd/Filter/Blur.php": "9420151b5868365e337868c291ce517f", + "vendor/kosinix/grafika/src/Grafika/Gd/Filter/Brightness.php": "f0a9dcab99441adc5c6d5aff91792091", + "vendor/kosinix/grafika/src/Grafika/Gd/Filter/Colorize.php": "7097dee6d6a1faa3fc02dfdc4057d391", + "vendor/kosinix/grafika/src/Grafika/Gd/Filter/Contrast.php": "2450c18358e05e252312466a7e866641", + "vendor/kosinix/grafika/src/Grafika/Gd/Filter/Dither.php": "d5447141ef585cec17d8ca63303765ca", + "vendor/kosinix/grafika/src/Grafika/Gd/Filter/Gamma.php": "6f31f916d64ab7f66516f69313706bb0", + "vendor/kosinix/grafika/src/Grafika/Gd/Filter/Grayscale.php": "86c9627f3208d79fd055737c98f6b7bf", + "vendor/kosinix/grafika/src/Grafika/Gd/Filter/Invert.php": "a5bedd49842c272e7b376028c1dff5ee", + "vendor/kosinix/grafika/src/Grafika/Gd/Filter/Pixelate.php": "e67403931a475bf937965cffa975e015", + "vendor/kosinix/grafika/src/Grafika/Gd/Filter/Sharpen.php": "0d4caf703aa4d6febbd08947d9259ae6", + "vendor/kosinix/grafika/src/Grafika/Gd/Filter/Sobel.php": "752ae1aa07a3e2163d64f705c08f0285", + "vendor/kosinix/grafika/src/Grafika/Gd/Helper/GifByteStream.php": "614e168ef45bb131e4081accf43e16f1", + "vendor/kosinix/grafika/src/Grafika/Gd/Helper/GifHelper.php": "20e44da7bc4fe5c1fd970ac305570dae", + "vendor/kosinix/grafika/src/Grafika/Gd/Image.php": "22e48522bac8d31a4a418e3fdede2332", + "vendor/kosinix/grafika/src/Grafika/Gd/ImageHash/AverageHash.php": "a23f938f94ef30b82f006691d874fef0", + "vendor/kosinix/grafika/src/Grafika/Gd/ImageHash/DifferenceHash.php": "fec0153959b82d4b2f9720e6378932ed", + "vendor/kosinix/grafika/src/Grafika/Grafika.php": "06d7f82ea8d5dd7653747f6e08520ceb", + "vendor/kosinix/grafika/src/Grafika/ImageInterface.php": "d1aa8206f238737454db519e1b17f15c", + "vendor/kosinix/grafika/src/Grafika/ImageType.php": "4d9f3a1c1967dcf56a915eac099bf567", + "vendor/kosinix/grafika/src/Grafika/Imagick/DrawingObject/CubicBezier.php": "ec9f86d34563f9e9642b09a641a06177", + "vendor/kosinix/grafika/src/Grafika/Imagick/DrawingObject/Ellipse.php": "1ee9dc7880d02af1bfbb36fb29f3b90e", + "vendor/kosinix/grafika/src/Grafika/Imagick/DrawingObject/Line.php": "3c01c0f60bab2645ca41d6f0467a04c0", + "vendor/kosinix/grafika/src/Grafika/Imagick/DrawingObject/Polygon.php": "6c9efd1025884347604a56fff6c67d91", + "vendor/kosinix/grafika/src/Grafika/Imagick/DrawingObject/QuadraticBezier.php": "6b77d345a71173a43e2acf87faa018a6", + "vendor/kosinix/grafika/src/Grafika/Imagick/DrawingObject/Rectangle.php": "c50c7743d69f22752d014cca7d6ed10b", + "vendor/kosinix/grafika/src/Grafika/Imagick/Editor.php": "b59dc01a575e14cdbd573d9ce6610256", + "vendor/kosinix/grafika/src/Grafika/Imagick/Filter/Blur.php": "7a9a4197d3ade82833594227fa7f5329", + "vendor/kosinix/grafika/src/Grafika/Imagick/Filter/Brightness.php": "95c9e4b5f37183f8c3233a073853e280", + "vendor/kosinix/grafika/src/Grafika/Imagick/Filter/Colorize.php": "d927107c6d818ce1af2a7f281bd7e6d1", + "vendor/kosinix/grafika/src/Grafika/Imagick/Filter/Contrast.php": "f4d21bcc93d97e1fcdaf044eaaa8dc26", + "vendor/kosinix/grafika/src/Grafika/Imagick/Filter/Dither.php": "c9e3c616129ba94d5cfbc985edc573bb", + "vendor/kosinix/grafika/src/Grafika/Imagick/Filter/Gamma.php": "c8d965de94bdc3be7408152cf4292619", + "vendor/kosinix/grafika/src/Grafika/Imagick/Filter/Grayscale.php": "09fda21755e028fee7c87d9acc708096", + "vendor/kosinix/grafika/src/Grafika/Imagick/Filter/Invert.php": "4e0bbb695f774b29549f49daf91ca6ef", + "vendor/kosinix/grafika/src/Grafika/Imagick/Filter/Pixelate.php": "7ef1ff47d2b154397e37dbc637deeed5", + "vendor/kosinix/grafika/src/Grafika/Imagick/Filter/Sharpen.php": "2ba171ab04523fdbf18c2316a895019c", + "vendor/kosinix/grafika/src/Grafika/Imagick/Filter/Sobel.php": "2c9fc1074bb8e8ee729a8c3070a586b0", + "vendor/kosinix/grafika/src/Grafika/Imagick/Image.php": "8835a68b429ef9c78692186be2cda139", + "vendor/kosinix/grafika/src/Grafika/Imagick/ImageHash/AverageHash.php": "05ed23fa6f886817fd793b3097bd7068", + "vendor/kosinix/grafika/src/Grafika/Imagick/ImageHash/DifferenceHash.php": "89ac60e0054eae342a7269ed4a7d7531", + "vendor/kosinix/grafika/src/Grafika/Position.php": "58ad030e19ba0a909d19953dc798cd22", + "vendor/kosinix/grafika/src/autoloader.php": "53977199daca920e3e59882c4387b43c", + "vendor/laravel/serializable-closure/src/Contracts/Serializable.php": "5dde3024f5ddd1e0583dcc9ffeefad1c", + "vendor/laravel/serializable-closure/src/Contracts/Signer.php": "ba8835c1ca8f17c53c9d470eb2111765", + "vendor/laravel/serializable-closure/src/Exceptions/InvalidSignatureException.php": "d293a858cfe39535383fae785437dd43", + "vendor/laravel/serializable-closure/src/Exceptions/MissingSecretKeyException.php": "284c524789efd0e27091695c89a1fbe8", + "vendor/laravel/serializable-closure/src/Exceptions/PhpVersionNotSupportedException.php": "3144d12c9b0834a2a6ca5635fae056f5", + "vendor/laravel/serializable-closure/src/SerializableClosure.php": "79bcfa05def69838af4ea39ab3da3dc8", + "vendor/laravel/serializable-closure/src/Serializers/Native.php": "545eabcb797e2b78b44ef667c7dd8693", + "vendor/laravel/serializable-closure/src/Serializers/Signed.php": "2e3bd2298a6a6c49e6b7fac3f37832d4", + "vendor/laravel/serializable-closure/src/Signers/Hmac.php": "b16b366f93957edb28e5633fe482477b", + "vendor/laravel/serializable-closure/src/Support/ClosureScope.php": "31549af806f83afd169cf0a35dd05a7f", + "vendor/laravel/serializable-closure/src/Support/ClosureStream.php": "1662fccdd43e5068e3e0a19e153b457d", + "vendor/laravel/serializable-closure/src/Support/ReflectionClosure.php": "4c5647dc395cfe4a323af229e2d7ac40", + "vendor/laravel/serializable-closure/src/Support/SelfReference.php": "10c7be5e9320e8c487485d91887197e4", + "vendor/laravel/serializable-closure/src/UnsignedSerializableClosure.php": "778e5c4d74e7b5cf82ad1261d16a2705", + "vendor/league/flysystem/src/Config.php": "0adc8b304968511523aa8273af0b4b1b", + "vendor/league/flysystem/src/CorruptedPathDetected.php": "c0d1f06f2267082f195b9e3c77edf5b9", + "vendor/league/flysystem/src/DirectoryAttributes.php": "ceb5599b5007d2982b6a798b2b59fa89", + "vendor/league/flysystem/src/DirectoryListing.php": "b1dbeb7d3408aa1bd545caad705f654e", + "vendor/league/flysystem/src/FileAttributes.php": "e8ab36be2d4d3ae2df791bb3f57915f0", + "vendor/league/flysystem/src/Filesystem.php": "77091ea085d27cbd8eac85116495d63b", + "vendor/league/flysystem/src/FilesystemAdapter.php": "fbd353eafaea2db285767cf16e16feaa", + "vendor/league/flysystem/src/FilesystemException.php": "be3999f6f1b7d0d2a07f8df9d2ae43c5", + "vendor/league/flysystem/src/FilesystemOperationFailed.php": "053f955f21209afea4eafab2ff11b1c3", + "vendor/league/flysystem/src/FilesystemOperator.php": "3bbb745746338e6eb8a69ac9aacb73b6", + "vendor/league/flysystem/src/FilesystemReader.php": "44948ec847ffa250fcf1f920e44e2f76", + "vendor/league/flysystem/src/FilesystemWriter.php": "0f42e5d6345c543f07947ae44036d1bf", + "vendor/league/flysystem/src/InvalidStreamProvided.php": "ee9f393d3fa413552d1893444382cfc3", + "vendor/league/flysystem/src/InvalidVisibilityProvided.php": "9dc7092e6d54d80868af4b882e83091d", + "vendor/league/flysystem/src/Local/LocalFilesystemAdapter.php": "082ed397a2f23d802a7ef5ff56b77420", + "vendor/league/flysystem/src/MountManager.php": "02d4338f4ce5bcf578424009aecc245a", + "vendor/league/flysystem/src/PathNormalizer.php": "67186851b3b4e330d15e6f5cca9f063c", + "vendor/league/flysystem/src/PathPrefixer.php": "df6e0881fa14f206c6105ad190a56e2d", + "vendor/league/flysystem/src/PathTraversalDetected.php": "a4a4ce04eadb602ea541b40181e16119", + "vendor/league/flysystem/src/PortableVisibilityGuard.php": "fbcd7e6e75f31d007c1dadcde6b1bd0d", + "vendor/league/flysystem/src/ProxyArrayAccessToProperties.php": "b0e172578d980d8c738e75dce6fe287f", + "vendor/league/flysystem/src/StorageAttributes.php": "83c40b64250ba338cff528cec2d7e573", + "vendor/league/flysystem/src/SymbolicLinkEncountered.php": "75926e78b5f71f01bb29691179032538", + "vendor/league/flysystem/src/UnableToCheckFileExistence.php": "c355cbbb9f18f342f6548b92126de8f5", + "vendor/league/flysystem/src/UnableToCopyFile.php": "1e9dff5931bb555c282fe8b95200fa58", + "vendor/league/flysystem/src/UnableToCreateDirectory.php": "db9b66e0ec60ff440a95e8f26d8a89c7", + "vendor/league/flysystem/src/UnableToDeleteDirectory.php": "a0e1cdd4774beaf79db1a77cddc147e2", + "vendor/league/flysystem/src/UnableToDeleteFile.php": "f87b113e9a00938dd56a11bbc3ed756e", + "vendor/league/flysystem/src/UnableToMountFilesystem.php": "94fd395c3529545941c6442bfd0bd60c", + "vendor/league/flysystem/src/UnableToMoveFile.php": "6c4e0b15dc621b7017619a445ffe88fd", + "vendor/league/flysystem/src/UnableToReadFile.php": "f3089a11f41dd911647cc0b4d1b0f266", + "vendor/league/flysystem/src/UnableToResolveFilesystemMount.php": "3cc42f6beeec02a1102e592fea19a19c", + "vendor/league/flysystem/src/UnableToRetrieveMetadata.php": "452304c6706724017bf4fc9cc75a6d55", + "vendor/league/flysystem/src/UnableToSetVisibility.php": "69007d4186e291c7a8bc9c6f3944b1a3", + "vendor/league/flysystem/src/UnableToWriteFile.php": "190e82f4fd2a50499e9e632105a0ec93", + "vendor/league/flysystem/src/UnixVisibility/PortableVisibilityConverter.php": "1bbe5daa3884d9ab73b44c6a522135db", + "vendor/league/flysystem/src/UnixVisibility/VisibilityConverter.php": "e8b75fc498f5d532d5330b52a3e5d1f5", + "vendor/league/flysystem/src/UnreadableFileEncountered.php": "98ba3848be2c00e17e1847b944276eba", + "vendor/league/flysystem/src/Visibility.php": "03647ac076113a82fa2b86eabc48e5e4", + "vendor/league/flysystem/src/WhitespacePathNormalizer.php": "5220ec8fdde19bae7e1f917ff9d44555", + "vendor/league/mime-type-detection/src/EmptyExtensionToMimeTypeMap.php": "4f8487a33e55019a33e5c8581653fca0", + "vendor/league/mime-type-detection/src/ExtensionLookup.php": "6316ecf5de6b9d36778d6a9ef0508320", + "vendor/league/mime-type-detection/src/ExtensionMimeTypeDetector.php": "93322cb279943946e16fa369e52d89d1", + "vendor/league/mime-type-detection/src/ExtensionToMimeTypeMap.php": "37e9c9ec6296483aff744563d1feec42", + "vendor/league/mime-type-detection/src/FinfoMimeTypeDetector.php": "c4e5c2ca44e0a9e4c5c6d7565ca098a0", + "vendor/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php": "1a4f1a881fb5c15699f678dece5431a1", + "vendor/league/mime-type-detection/src/MimeTypeDetector.php": "5ea3730f26015b981460a5d286d372d9", + "vendor/league/mime-type-detection/src/OverridingExtensionToMimeTypeMap.php": "d571e41a0033fefc1c003b396666f966", + "vendor/maennchen/zipstream-php/.php-cs-fixer.dist.php": "4e88a871f1cdabfbc2e992ed4f330107", + "vendor/maennchen/zipstream-php/src/Bigint.php": "d21cf36584ddd81f0fbc5ba6d6cb94b3", + "vendor/maennchen/zipstream-php/src/DeflateStream.php": "1d953c1b3f5fb905f34e24ee41817089", + "vendor/maennchen/zipstream-php/src/Exception/EncodingException.php": "9542d1b179a4cbd1f720992deefe8cae", + "vendor/maennchen/zipstream-php/src/Exception/FileNotFoundException.php": "3c616dacd57ad53adf703491429caa1c", + "vendor/maennchen/zipstream-php/src/Exception/FileNotReadableException.php": "c7457a224de2219ed471faced596de40", + "vendor/maennchen/zipstream-php/src/Exception/IncompatibleOptionsException.php": "17c0f3677f81be979b39c17b69975b23", + "vendor/maennchen/zipstream-php/src/Exception/OverflowException.php": "8298b41b6619431ec37894b88f7ca6fe", + "vendor/maennchen/zipstream-php/src/Exception/StreamNotReadableException.php": "676eedec35844e28261d8d341f03c56a", + "vendor/maennchen/zipstream-php/src/Exception.php": "c31980c5932add29c7def1d49b65dd5e", + "vendor/maennchen/zipstream-php/src/File.php": "8bcffe50127b3216b1c9998d7700fc68", + "vendor/maennchen/zipstream-php/src/Option/Archive.php": "a79e467e8c185de5b9a18ea8150be1cf", + "vendor/maennchen/zipstream-php/src/Option/File.php": "5bce4e50ab30be88a247a3ac3d31030f", + "vendor/maennchen/zipstream-php/src/Option/Method.php": "08638ee54b9480419400ac8efea57e8b", + "vendor/maennchen/zipstream-php/src/Option/Version.php": "4bf4bbb044d63f1f821e4c99a7b1538b", + "vendor/maennchen/zipstream-php/src/Stream.php": "07db2a03af2c895da4566f6136000b68", + "vendor/maennchen/zipstream-php/src/ZipStream.php": "9636bcf427c7e1e80730303de908b56e", + "vendor/maennchen/zipstream-php/test/BigintTest.php": "4d69e3105388a3e830d2425989f27123", + "vendor/maennchen/zipstream-php/test/ZipStreamTest.php": "451ba8b98a9b154f8f727df887af6e84", + "vendor/maennchen/zipstream-php/test/bootstrap.php": "96ec93716d9c4b090d62a9953dee39a4", + "vendor/maennchen/zipstream-php/test/bug/BugHonorFileTimeTest.php": "f496432102a629d0dc75e503f58b3fb4", + "vendor/markbaker/complex/classes/src/Complex.php": "64ff6379f814d52dfd3a9f6072821492", + "vendor/markbaker/complex/classes/src/Exception.php": "8c7e71ab0e0c1e6fa77dba5198a89ed5", + "vendor/markbaker/complex/classes/src/Functions.php": "f15bab91078e172b90e94c988accf432", + "vendor/markbaker/complex/classes/src/Operations.php": "05ceff3ab0f6300602b2149249422c5f", + "vendor/markbaker/complex/examples/complexTest.php": "41ff0b2ad67cf0aebf60d1b0a213576f", + "vendor/markbaker/complex/examples/testFunctions.php": "5efdc0d14db9c88bd88f783a6b21f7a6", + "vendor/markbaker/complex/examples/testOperations.php": "3a71232b452ef3f6ac1a018de08994b5", + "vendor/markbaker/matrix/buildPhar.php": "7317f04ae4d4bdda006bbde6dcc2a316", + "vendor/markbaker/matrix/classes/src/Builder.php": "387dcb264a6b07e71313abac253960b9", + "vendor/markbaker/matrix/classes/src/Decomposition/Decomposition.php": "592ed412ce11234f538e748c17064ca6", + "vendor/markbaker/matrix/classes/src/Decomposition/LU.php": "371ef17cdd565a188e19843e5b196fd0", + "vendor/markbaker/matrix/classes/src/Decomposition/QR.php": "9c773a6fad81b2ec642765bf14b49192", + "vendor/markbaker/matrix/classes/src/Div0Exception.php": "943026b1d1c782e601b2908b49064a65", + "vendor/markbaker/matrix/classes/src/Exception.php": "44c732d31f263fef34d5319e7a8d194c", + "vendor/markbaker/matrix/classes/src/Functions.php": "9a12422c011e465ded3ab12e2537f926", + "vendor/markbaker/matrix/classes/src/Matrix.php": "5f62e19dfd6eef136a49bd139cce25e4", + "vendor/markbaker/matrix/classes/src/Operations.php": "88f2c7e991a660581e99710f5111e46b", + "vendor/markbaker/matrix/classes/src/Operators/Addition.php": "13429c7d8619359b887d02f985a616c8", + "vendor/markbaker/matrix/classes/src/Operators/DirectSum.php": "72fb3094662b2b6fb8603b5371a11c44", + "vendor/markbaker/matrix/classes/src/Operators/Division.php": "2443ef2827e486071e15c2e72638fbee", + "vendor/markbaker/matrix/classes/src/Operators/Multiplication.php": "e0aec7e39fbd8648fe463409311c70b2", + "vendor/markbaker/matrix/classes/src/Operators/Operator.php": "ab3f6578aa4a30dd2633e8e799b16f2e", + "vendor/markbaker/matrix/classes/src/Operators/Subtraction.php": "a25864c1926507a4e557f3f87b072c92", + "vendor/markbaker/matrix/examples/test.php": "0d09190f52c18f71fc67164514a440de", + "vendor/mjaschen/phpgeo/src/Bearing/BearingEllipsoidal.php": "5b507fadf588403dbd49a65a5117ced2", + "vendor/mjaschen/phpgeo/src/Bearing/BearingInterface.php": "94c419a1a0e65e2369334576291fb3ac", + "vendor/mjaschen/phpgeo/src/Bearing/BearingSpherical.php": "14dacc74f533652131ac66f4dc7fe292", + "vendor/mjaschen/phpgeo/src/Bearing/DirectVincentyBearing.php": "fa0b619b540c6a793d72731294e31870", + "vendor/mjaschen/phpgeo/src/Bearing/InverseVincentyBearing.php": "3c95d00011a7663f2e2d701cf0aeb7d6", + "vendor/mjaschen/phpgeo/src/Bounds.php": "75625da7cf96b6d697e5ca49811ce9db", + "vendor/mjaschen/phpgeo/src/CardinalDirection/CardinalDirection.php": "76f826661fe962ddaa90e79ab3cd4efd", + "vendor/mjaschen/phpgeo/src/CardinalDirection/CardinalDirectionDistances.php": "d4cd1495398b35541c311790e9d6a5ef", + "vendor/mjaschen/phpgeo/src/CardinalDirection/CardinalDirectionDistancesCalculator.php": "0c69ff39750836fa19dc28b9e753edd7", + "vendor/mjaschen/phpgeo/src/Coordinate.php": "6e245ad145683930afbb3d2f56bf5fb1", + "vendor/mjaschen/phpgeo/src/Direction/Direction.php": "a898c638b341862c8f0301c1e7515ac2", + "vendor/mjaschen/phpgeo/src/Distance/DistanceInterface.php": "10f0932c3af9d30040a826c34ad5a4d6", + "vendor/mjaschen/phpgeo/src/Distance/Haversine.php": "75ee93f9b53922e9218785eb5d199233", + "vendor/mjaschen/phpgeo/src/Distance/Vincenty.php": "3162b4e48fe2107635bb8b42344e2f79", + "vendor/mjaschen/phpgeo/src/Ellipsoid.php": "0b743f7cdec217e50dbffdba4a886d1b", + "vendor/mjaschen/phpgeo/src/Exception/BearingNotAvailableException.php": "f08a0aabf16255a68afca271a8c83fee", + "vendor/mjaschen/phpgeo/src/Exception/InvalidDistanceException.php": "60b5459ac1c5fda2b1db7eac83e10978", + "vendor/mjaschen/phpgeo/src/Exception/InvalidGeometryException.php": "c25233fb35fe77b018c197d4308fd67b", + "vendor/mjaschen/phpgeo/src/Exception/InvalidPolygonException.php": "a6368f72d6fccfd646cf9ca495f0ae8e", + "vendor/mjaschen/phpgeo/src/Exception/NotConvergingException.php": "eb40e20cd3b63348f315c39ddb1bbd7d", + "vendor/mjaschen/phpgeo/src/Exception/NotMatchingEllipsoidException.php": "9345b37628b95a375d1cf3eb21068b92", + "vendor/mjaschen/phpgeo/src/Factory/BoundsFactory.php": "9cc00f00d3a17a86bc151fc35e0c7fe6", + "vendor/mjaschen/phpgeo/src/Factory/CoordinateFactory.php": "4b6b06768c29398fb2af1230150996be", + "vendor/mjaschen/phpgeo/src/Factory/GeometryFactoryInterface.php": "f1bd5baefa1e2584c03eefa9ba639c4a", + "vendor/mjaschen/phpgeo/src/Formatter/Coordinate/DMS.php": "e1f4a09547a13d242ff3c8e435448f91", + "vendor/mjaschen/phpgeo/src/Formatter/Coordinate/DecimalDegrees.php": "48228674528d345dcaf07e910210e23b", + "vendor/mjaschen/phpgeo/src/Formatter/Coordinate/DecimalMinutes.php": "0904e601878c3be64f2f5ccd1365d1b6", + "vendor/mjaschen/phpgeo/src/Formatter/Coordinate/FormatterInterface.php": "3390a50826bbc2b4fe61d64aec8e8c2e", + "vendor/mjaschen/phpgeo/src/Formatter/Coordinate/GeoJSON.php": "be2bb551e642efa87fc91ffce44f1baf", + "vendor/mjaschen/phpgeo/src/Formatter/Polygon/FormatterInterface.php": "4e6f4feb82fac9e8e739609e0ba26558", + "vendor/mjaschen/phpgeo/src/Formatter/Polygon/GeoJSON.php": "b79b727094870369f50db8268d49f743", + "vendor/mjaschen/phpgeo/src/Formatter/Polyline/FormatterInterface.php": "a918e2e4c0637aabf0942f237d6a9d21", + "vendor/mjaschen/phpgeo/src/Formatter/Polyline/GeoJSON.php": "7d7a5cb7244fa3a6aa4ab87456b90ae4", + "vendor/mjaschen/phpgeo/src/GeometryInterface.php": "8dec2faa075f185fd61acf24990c7876", + "vendor/mjaschen/phpgeo/src/GetBoundsTrait.php": "21620fd81761c57ca707d9d3aeed0a19", + "vendor/mjaschen/phpgeo/src/Intersection/Intersection.php": "6a24efb61bf5daa3ee19b36b5df00539", + "vendor/mjaschen/phpgeo/src/Line.php": "f0f334991954144b833844feed309279", + "vendor/mjaschen/phpgeo/src/Polygon.php": "e501698db1718c949a5c56830033e437", + "vendor/mjaschen/phpgeo/src/Polyline.php": "33941796e54302f462383a7618bac83d", + "vendor/mjaschen/phpgeo/src/Processor/Polyline/SimplifyBearing.php": "9a600942336568659a37c1acd3f52a55", + "vendor/mjaschen/phpgeo/src/Processor/Polyline/SimplifyDouglasPeucker.php": "0625a1ce5cf5d02558fe5d67afef34d4", + "vendor/mjaschen/phpgeo/src/Processor/Polyline/SimplifyInterface.php": "a34340eb77469d3170472a8ea07d1308", + "vendor/mjaschen/phpgeo/src/Utility/Cartesian.php": "18c6cd64961401ff34a2bfd53f72fa5e", + "vendor/mjaschen/phpgeo/src/Utility/PerpendicularDistance.php": "24102e9c6b1a045d54059d219c45072a", + "vendor/mjaschen/phpgeo/src/Utility/PointToLineDistance.php": "c1ce85becb44cef1173f555cbbb0cd32", + "vendor/mjaschen/phpgeo/tests/Location/Bearing/BearingEllipsoidalTest.php": "4d5f1f61087de1f0328d230004a67f98", + "vendor/mjaschen/phpgeo/tests/Location/Bearing/BearingSphericalTest.php": "638b19b98b130cb8a93e6bfa8b11bb25", + "vendor/mjaschen/phpgeo/tests/Location/BoundsTest.php": "bdcaf6dfe3532268982fefd76df3744d", + "vendor/mjaschen/phpgeo/tests/Location/CardinalDirection/CardinalDirectionDistancesCalculatorTest.php": "655ad2d3b643d5cf61b11b5b5559d005", + "vendor/mjaschen/phpgeo/tests/Location/CardinalDirection/CardinalDirectionDistancesTest.php": "abf2be55303a9a6ddb16d90de0f0297b", + "vendor/mjaschen/phpgeo/tests/Location/CardinalDirection/CardinalDirectionTest.php": "9b14c0178b36f8a7f2f0b51a4a3cc083", + "vendor/mjaschen/phpgeo/tests/Location/CoordinateTest.php": "ee0f0f73434272f5e1b0415427c0bcd3", + "vendor/mjaschen/phpgeo/tests/Location/Direction/DirectionTest.php": "b333c44599ee72dc729f20376b30f8fa", + "vendor/mjaschen/phpgeo/tests/Location/Distance/HaversineTest.php": "85d26eee31711185089f5f78dd239511", + "vendor/mjaschen/phpgeo/tests/Location/Distance/VincentyTest.php": "fc9e2051d10235332e869ece245605e4", + "vendor/mjaschen/phpgeo/tests/Location/Factory/BoundsFactoryTest.php": "ffd3341df6bc18c5ccdd4e7757071c7d", + "vendor/mjaschen/phpgeo/tests/Location/Factory/CoordinateFactoryTest.php": "990d240e16ca2b1df1e9f4ba42dce245", + "vendor/mjaschen/phpgeo/tests/Location/Formatter/Coordinate/DMSTest.php": "6aff94ccb9c74ee43d3657bc5121b9c6", + "vendor/mjaschen/phpgeo/tests/Location/Formatter/Coordinate/DecimalDegreesTest.php": "1a8f1a08aa2435fd73262ded99c0299c", + "vendor/mjaschen/phpgeo/tests/Location/Formatter/Coordinate/DecimalMinutesTest.php": "11614c77d6cdede5f04bf1aad90acbbc", + "vendor/mjaschen/phpgeo/tests/Location/Formatter/Coordinate/GeoJSONTest.php": "7fc26b84cb2cbe33424e4035541f8a84", + "vendor/mjaschen/phpgeo/tests/Location/Formatter/Polygon/GeoJSONTest.php": "f03fae39f26311ba405bd89f1390672b", + "vendor/mjaschen/phpgeo/tests/Location/Formatter/Polyline/GeoJSONTest.php": "13cee47ae31302f9d3ed3f6c9d20c897", + "vendor/mjaschen/phpgeo/tests/Location/Intersection/IntersectionTest.php": "86673e76b427068096f17e52e936fbbd", + "vendor/mjaschen/phpgeo/tests/Location/LineTest.php": "e5c967b3a3ba0a0448af591e228e36ad", + "vendor/mjaschen/phpgeo/tests/Location/PolygonTest.php": "1b295c63cc6bea5c5b92caf05e65ec04", + "vendor/mjaschen/phpgeo/tests/Location/PolylineTest.php": "b75833bb40ed4771d3c8ff52812c6848", + "vendor/mjaschen/phpgeo/tests/Location/Processor/Polyline/SimplifyBearingTest.php": "c5564e57b8db19ad5b87e146133af60e", + "vendor/mjaschen/phpgeo/tests/Location/Processor/Polyline/SimplifyDouglasPeuckerTest.php": "ee9b9d435a24be52ce40f54b4d85ad1a", + "vendor/mjaschen/phpgeo/tests/Location/Utility/CartesianTest.php": "08cb5b32440d9afc87672583c2230753", + "vendor/mjaschen/phpgeo/tests/Location/Utility/PointToLineDistanceTestHaversineTest.php": "57b9fd8dcd4f56409189604716c5f4f6", + "vendor/mjaschen/phpgeo/tests/Location/Utility/PointToLineDistanceTestVincentyTest.php": "7bfa0bb6c28d43ecaa20ef3f2968af9b", + "vendor/mjaschen/phpgeo/tests/Regression/Github/15/Issue15Test.php": "b91b332d5f20e5c182ae939a3ea470fa", + "vendor/mjaschen/phpgeo/tests/Regression/Github/18/Issue18Test.php": "8ab276d6cec70504f7b09a84fac33860", + "vendor/mjaschen/phpgeo/tests/Regression/Github/42/Issue42Test.php": "d64d28e4fdd3d4126b7e90d956cf6d93", + "vendor/mjaschen/phpgeo/tests/Regression/Github/68/Issue68Test.php": "07998ec99bc25d08fe8011eebbc31564", + "vendor/mjaschen/phpgeo/tests/Regression/Github/92/Issue92Test.php": "8529d90b7c998d4062554ff04f0e7530", + "vendor/mjaschen/phpgeo/tests/bootstrap.php": "cbb97e4f5b829f924b8dab44508da9a0", + "vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php": "e52989ae81797b75fc28caa593ef43c7", + "vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php": "05fac6b4903f301cebf5ee69061f5f7d", + "vendor/monolog/monolog/src/Monolog/ErrorHandler.php": "60d8a358bc8b99d0cc3e2eb2a6cd0224", + "vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php": "2689cfe2e419081e2bd44e0f6f6ba5d1", + "vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php": "5eee93f39d18e41f19e14e4b005abc09", + "vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php": "a432ea92fe3fa18af8bfe415f0869ed5", + "vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php": "35ca8f2a52c8013358e1d83861037599", + "vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php": "7d199542d13179eabe0d9094c750afbb", + "vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php": "5e5284b540d9af1dae3b7a7a459d9be6", + "vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php": "aa3a0e7212e3fa16e20b5fd4a4b7f985", + "vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php": "914d6e8ef23f3f6239613bc93277819e", + "vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php": "b7604c819b55dde423e952f1ece931f3", + "vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php": "c5f4cd53de30086bb27603ecaac13ccd", + "vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php": "f8815462311d77190629b0758c31e39e", + "vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php": "d4635bb5bbf52a1e9b106dba1c48f309", + "vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php": "20f0a260dfafde0b1d7d09d9d5c9691c", + "vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php": "5b188e8d1bbcc3ce64634a69fe40eaf5", + "vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php": "9efe90f058dfe15d1caedfef5e5c6ac8", + "vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php": "175520a193e8ec8d6138a641a43381eb", + "vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php": "e88d0b039b6bf027eea65e952e8dc398", + "vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php": "aef211a836406cfd971f5111ba421210", + "vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php": "372e4d4729664c6f81c4ee2e508c4bcc", + "vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php": "58a1399a4c7af3e0d30533aa12eacbd2", + "vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php": "cff86225f9347376dd8fd7ccd6ad61b1", + "vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php": "5c9efdf7696a457eb8beb0c5907f1cc0", + "vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php": "25ac4f341e025c2ed329c6f836f43b92", + "vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php": "d0f9a697e879bc54f2970ecfb2abe615", + "vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php": "48f7c635b58c957a543c5a2c211fe6e8", + "vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php": "e314d3d5ec3489fea574ff49ba08da1e", + "vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php": "480aebe4c0931858956b7d94442443b6", + "vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php": "04db371ec29a14b2f12d431e31fa47e0", + "vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php": "e5d9a968161dbb7df7c667c3ffd4ea3e", + "vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php": "933d7bb6b260b13c6d5f40079cad6550", + "vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php": "0d49e366336beb1f20d27282c5839ccd", + "vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php": "ea4c4f387d85d803dc029560b7db63c4", + "vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php": "2b1d39c1fb26e1930300ded841e14927", + "vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php": "f4ef1c5795c0a4abdf48e853079bcd6d", + "vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php": "d87ab54024b255fdf58eeda51c88388f", + "vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php": "20fe4eda0ff17c75bb93931ec3de5826", + "vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php": "53906b450068f5af50d008c3f7ae8ca5", + "vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php": "f57d517ffa3f378f8ff08eed4a939b5a", + "vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php": "0f954ee486d4e5708ad2921c20dacedd", + "vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php": "9c67ff484c25449804d48484c51d942c", + "vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php": "055e695648c3ada50b501f755700382c", + "vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php": "32747423d8f2e0ccd5811e4175162474", + "vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php": "1890b30632edc7a8b37f6cdcd3265cf4", + "vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php": "2a74dbbf72f23d4bd428085a343b12cf", + "vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php": "c6edbb0602597db125a1618cac0f30f9", + "vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php": "813813f436bae4f2d2e502ef0e3d8352", + "vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php": "7bfae6d5fff3a619b287cdaf6b2eee21", + "vendor/monolog/monolog/src/Monolog/Handler/Handler.php": "0e792825b84dc0e81d76e527761be7b8", + "vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php": "62d788ffe1ef8336d4c38d2a1502d37d", + "vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php": "e0559e554d78cada34679bfb81604475", + "vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php": "51fd3ac0fb19a5c9cc23067ab9519025", + "vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php": "bef6ef90c13c8cf8e4b4ffb246e6a307", + "vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php": "2f920866518bc9148e88950250e11fd9", + "vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php": "f00dc870270ee9782f3d9926954169c2", + "vendor/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php": "7bd10c5b44c76f92ac8023c92dd5da9b", + "vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php": "bfac1ac582325754bcf337a6630e8e4d", + "vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php": "94256c49b6fb11b3f4c472f6a02136b2", + "vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php": "14dd691a2b94ea45186d35f356e05e32", + "vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php": "0ca6713e6961ab2db523bbb2e603c08e", + "vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php": "03a8df01d782c3260365712b49c79f5c", + "vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php": "2825956492cb14bf58dccb0942617dbc", + "vendor/monolog/monolog/src/Monolog/Handler/NoopHandler.php": "c496af72b5b4c34b7f9221b62813b4e7", + "vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php": "ffe1d7b741f6da6e390fd162d012d972", + "vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.php": "494528d569530c30f49f0b77a4ef8544", + "vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php": "56eb803cb7168837af1ac47239515491", + "vendor/monolog/monolog/src/Monolog/Handler/ProcessHandler.php": "48e46ff80eeba6f2afd653478c8bea88", + "vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php": "ec862de1183e2e1985ae7e6e70521309", + "vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php": "c8b6da910e500a8f5e14e6f985063657", + "vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php": "6b5d735850bab456c787455bb0ad1ede", + "vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php": "9fc78ee33da348188fcd8f29837e4d33", + "vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php": "2a3018b44f1dc7c28a95e48847bed214", + "vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php": "b0bb1b64600fea4ab6465283a02c7821", + "vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php": "1884b29527ee38c1a018fd2e13e1a2a5", + "vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php": "32c8e3488af0f490b84b65a61a9559f5", + "vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php": "489ef1fa260a703a932ebf6544a3c98a", + "vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.php": "dd934be6e79b936fee2867610e744926", + "vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php": "476af486dfbb66207844f18feaaff72c", + "vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php": "92005a60069e50f969f656f8e61343f5", + "vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php": "0356ac4e15251cce708fd4b3b96829ce", + "vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php": "09f38cd959d2356d078efd3facaf65e4", + "vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.php": "fc944e4d0655c7dd454203153516ff8d", + "vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php": "db7ac9e1334d4d3e362f2e3fe13e8a6c", + "vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php": "b0c4852ced34aef846560bb42d4914e1", + "vendor/monolog/monolog/src/Monolog/Handler/SymfonyMailerHandler.php": "382f9fae2d090e66077040f60ddcd8c4", + "vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php": "42e8f25289408c72abc29c7e4d3fcab0", + "vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php": "9a4674a27d537205d08fb965f77cbfbf", + "vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php": "97ff249f76bed2782ea98eb63649a97a", + "vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php": "fba19d675c66524225982c1e52d142bf", + "vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php": "0fbdd6bdea4bbfab08058a9265cb80a1", + "vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php": "4bbf1a46b0e992c3f50d9f540409e35d", + "vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php": "7540eeb8cbdd14d3f8829bbd5aafcf58", + "vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php": "4ba39fd7cd191360943776cbcd936d4e", + "vendor/monolog/monolog/src/Monolog/LogRecord.php": "82e19a2b08c58205c576879a64f38640", + "vendor/monolog/monolog/src/Monolog/Logger.php": "25536137fd8babbfd16507a47a0f7517", + "vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php": "890edf1f157418bf13f025cbd6601a5b", + "vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php": "df6e299fb02c94304aae60d9d689129d", + "vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php": "dc9c60035a3c45e349dc624f7fe8dfbd", + "vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php": "b3d8579e5b1ff30a4ccd8a9ffab84456", + "vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php": "d07e66e7da3c5271b414a35078cb0a17", + "vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php": "2d0ade1c0ec9ffcb1b17fac0f6812168", + "vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php": "d51bd8adad2eeb86b2bcc056c146c202", + "vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php": "95b595b67d610f6ed09321a72c44d2a1", + "vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php": "428dfecc435dd4c3336cff4452b90616", + "vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php": "e8323c7503b66fe54d7db5be29d91f3e", + "vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php": "ab7694b1f02ca2bd1f1d7db92597c586", + "vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php": "9e9237fa4727bb75decc43834800db99", + "vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php": "3d9378678b9000233a497454e7de5d44", + "vendor/monolog/monolog/src/Monolog/Registry.php": "cf70ca384bb5e262cb9a873930a42de6", + "vendor/monolog/monolog/src/Monolog/ResettableInterface.php": "5eef39a37714e71dd2696f65690221e9", + "vendor/monolog/monolog/src/Monolog/SignalHandler.php": "2c53855933b6da19cd38ab29158f9eb6", + "vendor/monolog/monolog/src/Monolog/Test/TestCase.php": "cc2b3599d597097a725c66235b8143b8", + "vendor/monolog/monolog/src/Monolog/Utils.php": "5fe0aa6542ad9253a9f2f14a1f7360f6", + "vendor/mtdowling/jmespath.php/src/AstRuntime.php": "b9b62025509116b731ab30886832ce4e", + "vendor/mtdowling/jmespath.php/src/CompilerRuntime.php": "420fb6b0852e9bffa2fca1be27b38e86", + "vendor/mtdowling/jmespath.php/src/DebugRuntime.php": "901466b3efa95516c196807277518b8d", + "vendor/mtdowling/jmespath.php/src/Env.php": "5ca86fdaf0c52897868fafe93d41d776", + "vendor/mtdowling/jmespath.php/src/FnDispatcher.php": "a5973cc24083a5e9e1bfeb6853c091f8", + "vendor/mtdowling/jmespath.php/src/JmesPath.php": "4dfff93422b436be92df96e96d9678e1", + "vendor/mtdowling/jmespath.php/src/Lexer.php": "3074d3420a95e4fb0a10a3098f99b8b6", + "vendor/mtdowling/jmespath.php/src/Parser.php": "e45f38b21830e1815d45420f4f3bebe5", + "vendor/mtdowling/jmespath.php/src/SyntaxErrorException.php": "ccc91f9a99315aff02ed0e88c7875bb6", + "vendor/mtdowling/jmespath.php/src/TreeCompiler.php": "75aa347077d4b769dbb628d354a990ed", + "vendor/mtdowling/jmespath.php/src/TreeInterpreter.php": "199668ec649ec3dae416f27a6a543e37", + "vendor/mtdowling/jmespath.php/src/Utils.php": "6e969bee5e9e54c67ea055f0ad303d9f", + "vendor/myclabs/php-enum/src/Enum.php": "f8e2f8f2514ad68a36050c80d91afde4", + "vendor/myclabs/php-enum/src/PHPUnit/Comparator.php": "cfd76fd9affa964cfed8f0809de3bb88", + "vendor/myclabs/php-enum/stubs/Stringable.php": "bb578aecea49f27b5d91777269386141", + "vendor/nesbot/carbon/.phpstorm.meta.php": "442d26c52f86425338eb3df8c354af89", + "vendor/nesbot/carbon/lazy/Carbon/MessageFormatter/MessageFormatterMapperStrongType.php": "1f84e632c31ef5834eb4f32b309974f1", + "vendor/nesbot/carbon/lazy/Carbon/MessageFormatter/MessageFormatterMapperWeakType.php": "37da4ed49fe3e9d220cac5ccaef8f0c0", + "vendor/nesbot/carbon/lazy/Carbon/PHPStan/AbstractMacroBuiltin.php": "64aa9af74407eeeb2ec9b3391c45772c", + "vendor/nesbot/carbon/lazy/Carbon/PHPStan/AbstractMacroStatic.php": "8d71e9884f20944093438517ebdee11c", + "vendor/nesbot/carbon/lazy/Carbon/PHPStan/MacroStrongType.php": "d8c48f64db802f0a9abc275fba8ba3c0", + "vendor/nesbot/carbon/lazy/Carbon/PHPStan/MacroWeakType.php": "009700dda60a666cb9e0132dcb704603", + "vendor/nesbot/carbon/lazy/Carbon/TranslatorStrongType.php": "5494b9f03df73eedfa42eb4b093b9099", + "vendor/nesbot/carbon/lazy/Carbon/TranslatorWeakType.php": "1e8da04e7a9a05837aa8664f2b01a64d", + "vendor/nesbot/carbon/src/Carbon/AbstractTranslator.php": "05bc3bed12b8a0169295f26f351f61c2", + "vendor/nesbot/carbon/src/Carbon/Carbon.php": "bbcdbe33c2f4550c34219999c2e8dc09", + "vendor/nesbot/carbon/src/Carbon/CarbonConverterInterface.php": "01a26a1ad8a9fd40f79d7b05b7b7038f", + "vendor/nesbot/carbon/src/Carbon/CarbonImmutable.php": "0f33ec5644732b52e6e75adf8f3ad554", + "vendor/nesbot/carbon/src/Carbon/CarbonInterface.php": "00a53b9197ff4795b2a6d93aa177832a", + "vendor/nesbot/carbon/src/Carbon/CarbonInterval.php": "1c8a10280b6acb3b35e0f6083fbef53f", + "vendor/nesbot/carbon/src/Carbon/CarbonPeriod.php": "ade9a3109dcdef8f296824046fdf65ac", + "vendor/nesbot/carbon/src/Carbon/CarbonPeriodImmutable.php": "2e59cd1d79bb48ad61f4b5c72cc88746", + "vendor/nesbot/carbon/src/Carbon/CarbonTimeZone.php": "e1cc3a343f59974f0bd7f35df37501ed", + "vendor/nesbot/carbon/src/Carbon/Cli/Invoker.php": "861c12c1e380a9886ec953dbda7b32bf", + "vendor/nesbot/carbon/src/Carbon/Doctrine/CarbonDoctrineType.php": "896273421c8400ec90774e2be8b5a512", + "vendor/nesbot/carbon/src/Carbon/Doctrine/CarbonImmutableType.php": "a69cf8a03a0dbbf2d6c5c56264fb057f", + "vendor/nesbot/carbon/src/Carbon/Doctrine/CarbonType.php": "65ed22315b14cc03d9adb148311f91a5", + "vendor/nesbot/carbon/src/Carbon/Doctrine/CarbonTypeConverter.php": "bcb3fe5a46348a0dfb22be1672d5c568", + "vendor/nesbot/carbon/src/Carbon/Doctrine/DateTimeDefaultPrecision.php": "38e85df0614d13f44f48ebd9842b83ba", + "vendor/nesbot/carbon/src/Carbon/Doctrine/DateTimeImmutableType.php": "0e6a1d4020ddb7c12f91e8ba6b866b59", + "vendor/nesbot/carbon/src/Carbon/Doctrine/DateTimeType.php": "4f0a8fb05490301dbd5d2d7167d6fb7b", + "vendor/nesbot/carbon/src/Carbon/Exceptions/BadComparisonUnitException.php": "13b8548475907cc9096f9c344a82edf3", + "vendor/nesbot/carbon/src/Carbon/Exceptions/BadFluentConstructorException.php": "56fcee370b6f6c0ede5a81bcdd0d9568", + "vendor/nesbot/carbon/src/Carbon/Exceptions/BadFluentSetterException.php": "8a4452b84fa5572f1afb8a8ea7d4c5f3", + "vendor/nesbot/carbon/src/Carbon/Exceptions/BadMethodCallException.php": "369a5012b79d06b787f0006e36d67d62", + "vendor/nesbot/carbon/src/Carbon/Exceptions/EndLessPeriodException.php": "ea0c5599b38cb9acc2f47ab0d47a5a25", + "vendor/nesbot/carbon/src/Carbon/Exceptions/Exception.php": "3cb6b13a5044dadc9b572e3a7b6e6de7", + "vendor/nesbot/carbon/src/Carbon/Exceptions/ImmutableException.php": "17f4759cd8bf8d6c8e0bdcbe10f0bbb5", + "vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidArgumentException.php": "0d6404bedcb349a96675bbede2619e88", + "vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidCastException.php": "7111727edd86e10f6fed2ca923a395e7", + "vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidDateException.php": "64e6b9eab6ed8489987114cc4a5f835f", + "vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidFormatException.php": "1dc6c58130bde9b7111d5f468b6ad6a9", + "vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidIntervalException.php": "8853aa2c96a85eac58b4f575e5d2a673", + "vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidPeriodDateException.php": "33ed0640d2602dae917b9859f6539eae", + "vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidPeriodParameterException.php": "9672ce0f688e4cc8b40bd8561515d861", + "vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidTimeZoneException.php": "fa2ee4678d99e6b590d08298af4b7684", + "vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidTypeException.php": "cb92043ea1f480d25b68034a0f40768e", + "vendor/nesbot/carbon/src/Carbon/Exceptions/NotACarbonClassException.php": "60d3495d4039cbd0e6f486e891df3ddc", + "vendor/nesbot/carbon/src/Carbon/Exceptions/NotAPeriodException.php": "ca17bb3ddda4dbed634a151e9328cc3f", + "vendor/nesbot/carbon/src/Carbon/Exceptions/NotLocaleAwareException.php": "af6805971276b522ce99611595a993d1", + "vendor/nesbot/carbon/src/Carbon/Exceptions/OutOfRangeException.php": "0ec8887843ecd0d4060bdeee5b6f5f34", + "vendor/nesbot/carbon/src/Carbon/Exceptions/ParseErrorException.php": "dc943a80d29db452e6f18b5ed3a326cc", + "vendor/nesbot/carbon/src/Carbon/Exceptions/RuntimeException.php": "b0ecdca89f929331c4a9201838305727", + "vendor/nesbot/carbon/src/Carbon/Exceptions/UnitException.php": "c3eac46e7aedfa4215e8640c30f90424", + "vendor/nesbot/carbon/src/Carbon/Exceptions/UnitNotConfiguredException.php": "bd19a9c6875a4f9af61663443d4da6d7", + "vendor/nesbot/carbon/src/Carbon/Exceptions/UnknownGetterException.php": "5687966c966137d557ad6314f8492c57", + "vendor/nesbot/carbon/src/Carbon/Exceptions/UnknownMethodException.php": "ad8d0732a7f399360bb8a0aff2bdfc95", + "vendor/nesbot/carbon/src/Carbon/Exceptions/UnknownSetterException.php": "47bf16085e6dabac41c3f852259f9a6b", + "vendor/nesbot/carbon/src/Carbon/Exceptions/UnknownUnitException.php": "34a1355e8519e7d84a582d0342c11d09", + "vendor/nesbot/carbon/src/Carbon/Exceptions/UnreachableException.php": "228ae53c27ac3106fbb457088e98e09e", + "vendor/nesbot/carbon/src/Carbon/Factory.php": "c9767da38c18cf25e4a781053bdb2b6c", + "vendor/nesbot/carbon/src/Carbon/FactoryImmutable.php": "b262370eb61ed0ad2797188149759e06", + "vendor/nesbot/carbon/src/Carbon/Lang/aa.php": "d522a42d8ffb78fbd2f77b0f0d8f0ffd", + "vendor/nesbot/carbon/src/Carbon/Lang/aa_DJ.php": "a02f586d7a3867e1ac22f1d0cc3b24a4", + "vendor/nesbot/carbon/src/Carbon/Lang/aa_ER.php": "dc239b043b2f51504d842808978e0508", + "vendor/nesbot/carbon/src/Carbon/Lang/aa_ER@saaho.php": "bb9a2faadac635fe326968f65774f494", + "vendor/nesbot/carbon/src/Carbon/Lang/aa_ET.php": "141383ecb6486ab2c63f4bd640578a85", + "vendor/nesbot/carbon/src/Carbon/Lang/af.php": "4f531a14febaf0f21abc63b737abaec7", + "vendor/nesbot/carbon/src/Carbon/Lang/af_NA.php": "525eed59e9a0000c54bda95ecf7c26a1", + "vendor/nesbot/carbon/src/Carbon/Lang/af_ZA.php": "d4b9a359390683e6dcfe057c00282e9d", + "vendor/nesbot/carbon/src/Carbon/Lang/agq.php": "4ad396039bde184f2dae1bc76e56c415", + "vendor/nesbot/carbon/src/Carbon/Lang/agr.php": "342e1b0b3e58861b86d767d0db91c465", + "vendor/nesbot/carbon/src/Carbon/Lang/agr_PE.php": "14610b74acde00db4c9c4f811e05c6d8", + "vendor/nesbot/carbon/src/Carbon/Lang/ak.php": "b47b2219edc8592b30988c6811ddc09d", + "vendor/nesbot/carbon/src/Carbon/Lang/ak_GH.php": "c034c8b3ef6c9d7bd30e3db2842bce9b", + "vendor/nesbot/carbon/src/Carbon/Lang/am.php": "d7a99e6af761c788ca70047c87ef6d71", + "vendor/nesbot/carbon/src/Carbon/Lang/am_ET.php": "f2e969845c02e1f4301cb7815f6dbc0f", + "vendor/nesbot/carbon/src/Carbon/Lang/an.php": "578ad4119b19333703a545709fa441e3", + "vendor/nesbot/carbon/src/Carbon/Lang/an_ES.php": "f27726e4bbe1da0c08f8ccdb2a8a4ebe", + "vendor/nesbot/carbon/src/Carbon/Lang/anp.php": "6e1516d9ee0477cb606d244f28229c81", + "vendor/nesbot/carbon/src/Carbon/Lang/anp_IN.php": "40d34a09fcae0e56a924f40deeb2235d", + "vendor/nesbot/carbon/src/Carbon/Lang/ar.php": "4b29763600254e95ae6743a476a22561", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_AE.php": "0508ba60b7ade1cf21e292f39a57639c", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_BH.php": "feaed995c37ea48ee124f4a8a66d6ca0", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_DJ.php": "daf614197fbf0fd5b0ece31935c67e76", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_DZ.php": "932e2ee6d19407d889700faf595795c6", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_EG.php": "feaed995c37ea48ee124f4a8a66d6ca0", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_EH.php": "daf614197fbf0fd5b0ece31935c67e76", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_ER.php": "daf614197fbf0fd5b0ece31935c67e76", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_IL.php": "daf614197fbf0fd5b0ece31935c67e76", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_IN.php": "f52fb03bfad8f4a1c9aa8f47371774c1", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_IQ.php": "f10cacecae98bdcd731b148b368c39b1", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_JO.php": "f10cacecae98bdcd731b148b368c39b1", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_KM.php": "daf614197fbf0fd5b0ece31935c67e76", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_KW.php": "5ba8a1f94bd8dcb114fe7d0182fccbe9", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_LB.php": "09c8e9c6d4e5282e5df15a9c26c07491", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_LY.php": "7a8a9b193490342611431dc848c51ca0", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_MA.php": "d7badcdd1beaa083bd765195151e143b", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_MR.php": "daf614197fbf0fd5b0ece31935c67e76", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_OM.php": "feaed995c37ea48ee124f4a8a66d6ca0", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_PS.php": "d876b7243d776405d2f225a06bed47b3", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_QA.php": "feaed995c37ea48ee124f4a8a66d6ca0", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_SA.php": "41aba5605c9df12f619ada5c7e1e24f8", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_SD.php": "feaed995c37ea48ee124f4a8a66d6ca0", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_SO.php": "daf614197fbf0fd5b0ece31935c67e76", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_SS.php": "ad84e9c36f488ae2084dce9aa3788e02", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_SY.php": "f10cacecae98bdcd731b148b368c39b1", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_Shakl.php": "fc2696466e5d57431ea4b28fe721c537", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_TD.php": "daf614197fbf0fd5b0ece31935c67e76", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_TN.php": "dae02f3e09aae30ec9fd02a286d56a47", + "vendor/nesbot/carbon/src/Carbon/Lang/ar_YE.php": "b5819f9e76a682eeb8b71863bc5d8f70", + "vendor/nesbot/carbon/src/Carbon/Lang/as.php": "8f54df47dfabc638a36795b82f8d7cd0", + "vendor/nesbot/carbon/src/Carbon/Lang/as_IN.php": "67e3c26e542201cd7d22aa5985d94d91", + "vendor/nesbot/carbon/src/Carbon/Lang/asa.php": "087d8aa736204c786aa78653227d1011", + "vendor/nesbot/carbon/src/Carbon/Lang/ast.php": "da748101cf9a7ba0cca1eafdfc468469", + "vendor/nesbot/carbon/src/Carbon/Lang/ast_ES.php": "9ad319a7edc4bb021e94371bb9ed9c54", + "vendor/nesbot/carbon/src/Carbon/Lang/ayc.php": "142eab4e1968df04f5c976adeed61b6b", + "vendor/nesbot/carbon/src/Carbon/Lang/ayc_PE.php": "cff8144a72e17a996d89d7d15d55ba1b", + "vendor/nesbot/carbon/src/Carbon/Lang/az.php": "5b1d42f82d52354c204d70e6571364cb", + "vendor/nesbot/carbon/src/Carbon/Lang/az_AZ.php": "83902cfb6c15e73b9f1c8848abc71338", + "vendor/nesbot/carbon/src/Carbon/Lang/az_Cyrl.php": "84e45109ccaa9332837b3ad873962227", + "vendor/nesbot/carbon/src/Carbon/Lang/az_IR.php": "d16181c1282a27c7b7abf893263180e7", + "vendor/nesbot/carbon/src/Carbon/Lang/az_Latn.php": "57e4745feeeb84189c55c7fce6e133bc", + "vendor/nesbot/carbon/src/Carbon/Lang/bas.php": "697cb09299cbba43613dcaeaa3b24b11", + "vendor/nesbot/carbon/src/Carbon/Lang/be.php": "a6ce8b8cb5933a65b5a8a1bde79b106f", + "vendor/nesbot/carbon/src/Carbon/Lang/be_BY.php": "becf71e64bbe9db2605b2af8bd0e4a05", + "vendor/nesbot/carbon/src/Carbon/Lang/be_BY@latin.php": "3a6e1a92bdaefdbecef2d087413ce894", + "vendor/nesbot/carbon/src/Carbon/Lang/bem.php": "40d4626c7c2beae66d8733e597ae8b20", + "vendor/nesbot/carbon/src/Carbon/Lang/bem_ZM.php": "1132c39343e611c9f564da11b2289aa6", + "vendor/nesbot/carbon/src/Carbon/Lang/ber.php": "f286671c0975b70ceb266f3a6c4a76d0", + "vendor/nesbot/carbon/src/Carbon/Lang/ber_DZ.php": "ad05d65d8f983a82261aa8fb5df341bc", + "vendor/nesbot/carbon/src/Carbon/Lang/ber_MA.php": "ad05d65d8f983a82261aa8fb5df341bc", + "vendor/nesbot/carbon/src/Carbon/Lang/bez.php": "a57436d4fc1341ee04abd8b06a1a7e40", + "vendor/nesbot/carbon/src/Carbon/Lang/bg.php": "005162d53857788034eb8ecfa66660ce", + "vendor/nesbot/carbon/src/Carbon/Lang/bg_BG.php": "1090022906220743f4be37e79a1aa5e2", + "vendor/nesbot/carbon/src/Carbon/Lang/bhb.php": "72c06455338b125880e8943b2142a1a3", + "vendor/nesbot/carbon/src/Carbon/Lang/bhb_IN.php": "67d42359cf7dba1aa5861716c1816419", + "vendor/nesbot/carbon/src/Carbon/Lang/bho.php": "6d914ec4c13532dbfb314c6e3f1fd8ef", + "vendor/nesbot/carbon/src/Carbon/Lang/bho_IN.php": "784d2cba35ad1b4e38acf087e3cc603f", + "vendor/nesbot/carbon/src/Carbon/Lang/bi.php": "ede642aaba0e7b6d6a4463a8df4060de", + "vendor/nesbot/carbon/src/Carbon/Lang/bi_VU.php": "63af9fbdfc69dda6c6a99bb0c7ec3078", + "vendor/nesbot/carbon/src/Carbon/Lang/bm.php": "c08f1fa94b999bf35bee4e6cacbc9609", + "vendor/nesbot/carbon/src/Carbon/Lang/bn.php": "de84cbc9b8ddfefad55d4ab91b4a5aaa", + "vendor/nesbot/carbon/src/Carbon/Lang/bn_BD.php": "6fec58e062c1a530ab8c3d770da74133", + "vendor/nesbot/carbon/src/Carbon/Lang/bn_IN.php": "06d93d29679b3ca3df8cd165ad565904", + "vendor/nesbot/carbon/src/Carbon/Lang/bo.php": "401c728f2f2a647b1fa36e97e97b71bf", + "vendor/nesbot/carbon/src/Carbon/Lang/bo_CN.php": "6aa3ca4928669042e53a1b4a1556fedd", + "vendor/nesbot/carbon/src/Carbon/Lang/bo_IN.php": "58c5d241ce3d9de33592706a20bcbe7e", + "vendor/nesbot/carbon/src/Carbon/Lang/br.php": "4ad5e4498a04300ac9e297ec14a9118b", + "vendor/nesbot/carbon/src/Carbon/Lang/br_FR.php": "2e0df46597e70003c538f36a50a27d60", + "vendor/nesbot/carbon/src/Carbon/Lang/brx.php": "e4b0a53880e37c574b9d51c23eb3d49d", + "vendor/nesbot/carbon/src/Carbon/Lang/brx_IN.php": "fd5b7afe34ea534f9ecc041330b9621a", + "vendor/nesbot/carbon/src/Carbon/Lang/bs.php": "ce216ce8ee6eace22608e35ec1bf43df", + "vendor/nesbot/carbon/src/Carbon/Lang/bs_BA.php": "4af4051750cda3c1ab1fc5410a0c9f80", + "vendor/nesbot/carbon/src/Carbon/Lang/bs_Cyrl.php": "aff1da6cb0f7fd5de53457c865d6959a", + "vendor/nesbot/carbon/src/Carbon/Lang/bs_Latn.php": "d820f81110bd1b9b3484ba4db3396fcd", + "vendor/nesbot/carbon/src/Carbon/Lang/byn.php": "cacb8ad357a1298b15b32e7016b9de29", + "vendor/nesbot/carbon/src/Carbon/Lang/byn_ER.php": "fb20d0149808e17a0b82dcc8f4e4711e", + "vendor/nesbot/carbon/src/Carbon/Lang/ca.php": "8ec600e039eeacbee23f63597cf78d11", + "vendor/nesbot/carbon/src/Carbon/Lang/ca_AD.php": "1647fdff6b8dbdea9c110bfb60fa49c3", + "vendor/nesbot/carbon/src/Carbon/Lang/ca_ES.php": "5ae8e1d569c8c035d89bcd458d9e16a5", + "vendor/nesbot/carbon/src/Carbon/Lang/ca_ES_Valencia.php": "2431afbd71124a8bf83362290dcea2f6", + "vendor/nesbot/carbon/src/Carbon/Lang/ca_FR.php": "1647fdff6b8dbdea9c110bfb60fa49c3", + "vendor/nesbot/carbon/src/Carbon/Lang/ca_IT.php": "1647fdff6b8dbdea9c110bfb60fa49c3", + "vendor/nesbot/carbon/src/Carbon/Lang/ccp.php": "f10cbbc922ca6aac44c66a752ebaba5b", + "vendor/nesbot/carbon/src/Carbon/Lang/ccp_IN.php": "885b97a8f2ef3925c1ace9504dfd94ba", + "vendor/nesbot/carbon/src/Carbon/Lang/ce.php": "6632aa3d4da34598f2ff25f1b2f669e1", + "vendor/nesbot/carbon/src/Carbon/Lang/ce_RU.php": "fef58af402dda06ed3ee5691232ea5d0", + "vendor/nesbot/carbon/src/Carbon/Lang/cgg.php": "bb8c88fa8d5a7e8e62c4e8ce39cc1d95", + "vendor/nesbot/carbon/src/Carbon/Lang/chr.php": "1c19f801af1332decd08a2120ab94c92", + "vendor/nesbot/carbon/src/Carbon/Lang/chr_US.php": "0cba581037672cdb6f8ad1044c7f62c1", + "vendor/nesbot/carbon/src/Carbon/Lang/ckb.php": "c2bc92ff41eb700344ea9dd13de0f05f", + "vendor/nesbot/carbon/src/Carbon/Lang/cmn.php": "0a97d33ecfc537aaab1086a2bc2820b3", + "vendor/nesbot/carbon/src/Carbon/Lang/cmn_TW.php": "3802df853864cc7b6016729d32f69412", + "vendor/nesbot/carbon/src/Carbon/Lang/crh.php": "676dce8985765e8139e3ce58b5964d40", + "vendor/nesbot/carbon/src/Carbon/Lang/crh_UA.php": "f9cc7443b0b1329c68e619a6abf993c7", + "vendor/nesbot/carbon/src/Carbon/Lang/cs.php": "5c3309782de1f6d1a0a436d52dbc63cb", + "vendor/nesbot/carbon/src/Carbon/Lang/cs_CZ.php": "fc9885e61c8369a83cef27d72e0b7dc6", + "vendor/nesbot/carbon/src/Carbon/Lang/csb.php": "2a29df5eb5704662822f0b9e4060874c", + "vendor/nesbot/carbon/src/Carbon/Lang/csb_PL.php": "c66eeba77748baa5a66e7fd250e4d43a", + "vendor/nesbot/carbon/src/Carbon/Lang/cu.php": "8ad65543f925a68e2d024e019e944741", + "vendor/nesbot/carbon/src/Carbon/Lang/cv.php": "825108797ee04b898d4b1712d9ddf041", + "vendor/nesbot/carbon/src/Carbon/Lang/cv_RU.php": "c0b7d9f4059c9aa26a9ea9553aff56ba", + "vendor/nesbot/carbon/src/Carbon/Lang/cy.php": "8d86d87d4bd3a26d4555965b9761aa5a", + "vendor/nesbot/carbon/src/Carbon/Lang/cy_GB.php": "cbe99d5594cf63e61492326cbbc6d540", + "vendor/nesbot/carbon/src/Carbon/Lang/da.php": "c1ed6bd514eb2adabdcc55bb2635db15", + "vendor/nesbot/carbon/src/Carbon/Lang/da_DK.php": "f95f5b2090b12ddf1007f8f807359a8d", + "vendor/nesbot/carbon/src/Carbon/Lang/da_GL.php": "1658accd2a641a103324a16ca76e60c2", + "vendor/nesbot/carbon/src/Carbon/Lang/dav.php": "a77ad85369e9e4ce73628f6016b47ec3", + "vendor/nesbot/carbon/src/Carbon/Lang/de.php": "deceeed165751d747dd11e3486d07cb2", + "vendor/nesbot/carbon/src/Carbon/Lang/de_AT.php": "a24e8d40cb0e8b90a3acdeac5d3026b8", + "vendor/nesbot/carbon/src/Carbon/Lang/de_BE.php": "628aec86c8730cf78dbe0b498a7194cd", + "vendor/nesbot/carbon/src/Carbon/Lang/de_CH.php": "2121a98bcc8e14507e9c0ba6315fcb78", + "vendor/nesbot/carbon/src/Carbon/Lang/de_DE.php": "670cd9222f0a3137f9f461f229d8df26", + "vendor/nesbot/carbon/src/Carbon/Lang/de_IT.php": "433808238ea93249939bd99054ee7953", + "vendor/nesbot/carbon/src/Carbon/Lang/de_LI.php": "6debef4223c1e0751c63f1f92a1c5a41", + "vendor/nesbot/carbon/src/Carbon/Lang/de_LU.php": "628aec86c8730cf78dbe0b498a7194cd", + "vendor/nesbot/carbon/src/Carbon/Lang/dje.php": "5e635cf36740d5b372ed06d883e1c7ec", + "vendor/nesbot/carbon/src/Carbon/Lang/doi.php": "3d146d5f1b9f1d57ec960d9d7d6859fd", + "vendor/nesbot/carbon/src/Carbon/Lang/doi_IN.php": "40c385d8ffe5c3f1aa66f1561252f518", + "vendor/nesbot/carbon/src/Carbon/Lang/dsb.php": "61f714298a41b97f4a8973b6ee338e94", + "vendor/nesbot/carbon/src/Carbon/Lang/dsb_DE.php": "a460b81e0d8892f27c73e60d6352bc37", + "vendor/nesbot/carbon/src/Carbon/Lang/dua.php": "570d7d6106aeb17f959eea63b1c19f49", + "vendor/nesbot/carbon/src/Carbon/Lang/dv.php": "9236d632ae1159ba4a8bce6398024751", + "vendor/nesbot/carbon/src/Carbon/Lang/dv_MV.php": "d5482e1c659a183754923c9c48a38776", + "vendor/nesbot/carbon/src/Carbon/Lang/dyo.php": "c5bb1d284cc58dfb7fee70082245845d", + "vendor/nesbot/carbon/src/Carbon/Lang/dz.php": "6d79b01b565d6c0c6d9de52fe1dccd80", + "vendor/nesbot/carbon/src/Carbon/Lang/dz_BT.php": "918db5392a2b06357b080db982d66c71", + "vendor/nesbot/carbon/src/Carbon/Lang/ebu.php": "8331d0c5f002e45d96709616bf28e29b", + "vendor/nesbot/carbon/src/Carbon/Lang/ee.php": "9ff0d0bd029a41835056975869827aea", + "vendor/nesbot/carbon/src/Carbon/Lang/ee_TG.php": "bed0ee0569c1c0c62ed2634296933332", + "vendor/nesbot/carbon/src/Carbon/Lang/el.php": "157d5a159b424cb9e81878cc3d3737a4", + "vendor/nesbot/carbon/src/Carbon/Lang/el_CY.php": "96c65d374bc114c154446a3f28b5a103", + "vendor/nesbot/carbon/src/Carbon/Lang/el_GR.php": "692dbd4c80772a0296c5028e50f2f78f", + "vendor/nesbot/carbon/src/Carbon/Lang/en.php": "73cd3451724af605c01c92c5382f9608", + "vendor/nesbot/carbon/src/Carbon/Lang/en_001.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_150.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_AG.php": "600a593d2b81dbc54a42709f52c436d4", + "vendor/nesbot/carbon/src/Carbon/Lang/en_AI.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_AS.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_AT.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_AU.php": "ff7d9db94f794376f82c42b9e7b03e3f", + "vendor/nesbot/carbon/src/Carbon/Lang/en_BB.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_BE.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_BI.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_BM.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_BS.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_BW.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_BZ.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_CA.php": "614dda51b19b2d1faa4bcac84bbb17d4", + "vendor/nesbot/carbon/src/Carbon/Lang/en_CC.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_CH.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_CK.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_CM.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_CX.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_CY.php": "704857b4e1bacd8657104566997f3041", + "vendor/nesbot/carbon/src/Carbon/Lang/en_DE.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_DG.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_DK.php": "5323001f526a4c7e1e0e5e857a97a2fc", + "vendor/nesbot/carbon/src/Carbon/Lang/en_DM.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_ER.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_FI.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_FJ.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_FK.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_FM.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_GB.php": "c82d243acbf651e6fef1e2f2c37c4c31", + "vendor/nesbot/carbon/src/Carbon/Lang/en_GD.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_GG.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_GH.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_GI.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_GM.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_GU.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_GY.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_HK.php": "9e40dcb36f58ddb0f4be339765e5ca25", + "vendor/nesbot/carbon/src/Carbon/Lang/en_IE.php": "caad63faaed25318604bcfd8b03ec794", + "vendor/nesbot/carbon/src/Carbon/Lang/en_IL.php": "11d7a035aff9d466b8995a04ca07742d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_IM.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_IN.php": "41da236c907371d5d9228fe8a9a8a8d4", + "vendor/nesbot/carbon/src/Carbon/Lang/en_IO.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_ISO.php": "8ab124e38b4ac2dcbbe81846e39b6c82", + "vendor/nesbot/carbon/src/Carbon/Lang/en_JE.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_JM.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_KE.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_KI.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_KN.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_KY.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_LC.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_LR.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_LS.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_MG.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_MH.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_MO.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_MP.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_MS.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_MT.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_MU.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_MW.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_MY.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_NA.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_NF.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_NG.php": "412bd3d8b8297044c654deabfc3cfe51", + "vendor/nesbot/carbon/src/Carbon/Lang/en_NL.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_NR.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_NU.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_NZ.php": "1242abf3455a052dd6868df8f4cc0c34", + "vendor/nesbot/carbon/src/Carbon/Lang/en_PG.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_PH.php": "9e40dcb36f58ddb0f4be339765e5ca25", + "vendor/nesbot/carbon/src/Carbon/Lang/en_PK.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_PN.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_PR.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_PW.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_RW.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_SB.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_SC.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_SD.php": "a86c071ede1eafc8881a3961a1005667", + "vendor/nesbot/carbon/src/Carbon/Lang/en_SE.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_SG.php": "1a878de9612c2d769f6597e844aee9d1", + "vendor/nesbot/carbon/src/Carbon/Lang/en_SH.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_SI.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_SL.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_SS.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_SX.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_SZ.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_TC.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_TK.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_TO.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_TT.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_TV.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_TZ.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_UG.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_UM.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_US.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_US_Posix.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_VC.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_VG.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_VI.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_VU.php": "f2ba134a40867b93dd535d5a40521aa2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_WS.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/en_ZA.php": "84d20011541c771f4d1296738683b6c2", + "vendor/nesbot/carbon/src/Carbon/Lang/en_ZM.php": "4e5a0456b905db48a249a0013ba50390", + "vendor/nesbot/carbon/src/Carbon/Lang/en_ZW.php": "32d8353729e8e10efd4de6d2926bce1d", + "vendor/nesbot/carbon/src/Carbon/Lang/eo.php": "48a081c358fa47cbfe332e45b7b79024", + "vendor/nesbot/carbon/src/Carbon/Lang/es.php": "0554e97eb443bdfd20b436a47b3bdcfb", + "vendor/nesbot/carbon/src/Carbon/Lang/es_419.php": "3c924e38aa257ca5ee33c3f5ecbfa079", + "vendor/nesbot/carbon/src/Carbon/Lang/es_AR.php": "3c924e38aa257ca5ee33c3f5ecbfa079", + "vendor/nesbot/carbon/src/Carbon/Lang/es_BO.php": "5580312b5d72a4048eed786a1e3b3fbe", + "vendor/nesbot/carbon/src/Carbon/Lang/es_BR.php": "9c4acbef66dd255417930df79d254da9", + "vendor/nesbot/carbon/src/Carbon/Lang/es_BZ.php": "9c4acbef66dd255417930df79d254da9", + "vendor/nesbot/carbon/src/Carbon/Lang/es_CL.php": "3c924e38aa257ca5ee33c3f5ecbfa079", + "vendor/nesbot/carbon/src/Carbon/Lang/es_CO.php": "3c924e38aa257ca5ee33c3f5ecbfa079", + "vendor/nesbot/carbon/src/Carbon/Lang/es_CR.php": "edeac4b2e1a4c6b4c3c883c61ec148b1", + "vendor/nesbot/carbon/src/Carbon/Lang/es_CU.php": "2c6dfc08b372ecc0f3acdb913f647b00", + "vendor/nesbot/carbon/src/Carbon/Lang/es_DO.php": "2c38ec33beb08f54172b38f937f072eb", + "vendor/nesbot/carbon/src/Carbon/Lang/es_EA.php": "2c6dfc08b372ecc0f3acdb913f647b00", + "vendor/nesbot/carbon/src/Carbon/Lang/es_EC.php": "3c924e38aa257ca5ee33c3f5ecbfa079", + "vendor/nesbot/carbon/src/Carbon/Lang/es_ES.php": "b47c90d4ad1be45f7ca37da450cc22f8", + "vendor/nesbot/carbon/src/Carbon/Lang/es_GQ.php": "2c6dfc08b372ecc0f3acdb913f647b00", + "vendor/nesbot/carbon/src/Carbon/Lang/es_GT.php": "3c924e38aa257ca5ee33c3f5ecbfa079", + "vendor/nesbot/carbon/src/Carbon/Lang/es_HN.php": "3c924e38aa257ca5ee33c3f5ecbfa079", + "vendor/nesbot/carbon/src/Carbon/Lang/es_IC.php": "2c6dfc08b372ecc0f3acdb913f647b00", + "vendor/nesbot/carbon/src/Carbon/Lang/es_MX.php": "450775ca140cfe5441df336593ad7362", + "vendor/nesbot/carbon/src/Carbon/Lang/es_NI.php": "e2830ee86a114cba6e117704b27f5c94", + "vendor/nesbot/carbon/src/Carbon/Lang/es_PA.php": "3c924e38aa257ca5ee33c3f5ecbfa079", + "vendor/nesbot/carbon/src/Carbon/Lang/es_PE.php": "3c924e38aa257ca5ee33c3f5ecbfa079", + "vendor/nesbot/carbon/src/Carbon/Lang/es_PH.php": "eba11533ce9bbd76ec16b8beae8c4058", + "vendor/nesbot/carbon/src/Carbon/Lang/es_PR.php": "e2830ee86a114cba6e117704b27f5c94", + "vendor/nesbot/carbon/src/Carbon/Lang/es_PY.php": "3c924e38aa257ca5ee33c3f5ecbfa079", + "vendor/nesbot/carbon/src/Carbon/Lang/es_SV.php": "8438339d8d11f3791ff67d05ee719c0f", + "vendor/nesbot/carbon/src/Carbon/Lang/es_US.php": "441832a4f054b1d7b83fc653d4526d63", + "vendor/nesbot/carbon/src/Carbon/Lang/es_UY.php": "f677bb1d9111949dd3f99f23ae8614d2", + "vendor/nesbot/carbon/src/Carbon/Lang/es_VE.php": "3c924e38aa257ca5ee33c3f5ecbfa079", + "vendor/nesbot/carbon/src/Carbon/Lang/et.php": "2fab30286a50d3bdb7fe4edef9b8642b", + "vendor/nesbot/carbon/src/Carbon/Lang/et_EE.php": "44f68cb44bf26d4d86233b684a563688", + "vendor/nesbot/carbon/src/Carbon/Lang/eu.php": "95103d228d21abb54dc2b40be2cdc6a0", + "vendor/nesbot/carbon/src/Carbon/Lang/eu_ES.php": "13ee99d359c3cd6edb2f43ed114607f7", + "vendor/nesbot/carbon/src/Carbon/Lang/ewo.php": "158237026924a018850765cd68c137e9", + "vendor/nesbot/carbon/src/Carbon/Lang/fa.php": "efd914a3f04150e5846cdbd9a6d6a1b6", + "vendor/nesbot/carbon/src/Carbon/Lang/fa_AF.php": "179a2a1bcfe17e170419457ed966ecaa", + "vendor/nesbot/carbon/src/Carbon/Lang/fa_IR.php": "a94bb75c8e0fae68af462464636fead1", + "vendor/nesbot/carbon/src/Carbon/Lang/ff.php": "3628687e46ba059704f187f618b0c862", + "vendor/nesbot/carbon/src/Carbon/Lang/ff_CM.php": "7b8fe01f2e8111601c7239d9f7d605c6", + "vendor/nesbot/carbon/src/Carbon/Lang/ff_GN.php": "7b8fe01f2e8111601c7239d9f7d605c6", + "vendor/nesbot/carbon/src/Carbon/Lang/ff_MR.php": "b617314156c8456702ffe168b3463792", + "vendor/nesbot/carbon/src/Carbon/Lang/ff_SN.php": "5eb6c17463a16228bad8bb0f3fef03d1", + "vendor/nesbot/carbon/src/Carbon/Lang/fi.php": "fe7bad86c2cdf4f3295cc042dcd2b0cd", + "vendor/nesbot/carbon/src/Carbon/Lang/fi_FI.php": "37fb5f40d6be2dadbdc31ee9f605c7d5", + "vendor/nesbot/carbon/src/Carbon/Lang/fil.php": "648bd06feac4c107d228141f1405d1a8", + "vendor/nesbot/carbon/src/Carbon/Lang/fil_PH.php": "27c823be487ebf4c951b088485a642fc", + "vendor/nesbot/carbon/src/Carbon/Lang/fo.php": "a44d1504401aab70e1451b0fb7e9adba", + "vendor/nesbot/carbon/src/Carbon/Lang/fo_DK.php": "26aa4ea2f0501fa878b0acae0538a90c", + "vendor/nesbot/carbon/src/Carbon/Lang/fo_FO.php": "a70d235bc23529c0a0e78b785a441d21", + "vendor/nesbot/carbon/src/Carbon/Lang/fr.php": "0baa4239699781683483af3b0f769712", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_BE.php": "5f3f0c515ba53b16e18b2678b884347f", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_BF.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_BI.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_BJ.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_BL.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_CA.php": "9fded9bea301ea00811fe4faac3fd746", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_CD.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_CF.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_CG.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_CH.php": "d21291f0b3c3fde9461e2b2e7d69ce6d", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_CI.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_CM.php": "0cfa2c49aa9e0bd41dd718b7240569ef", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_DJ.php": "417793286f5fecd0304184c49fbadf76", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_DZ.php": "566c6a58b6be6ffb8987db2af2c665bc", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_FR.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_GA.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_GF.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_GN.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_GP.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_GQ.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_HT.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_KM.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_LU.php": "b41d83937825abba14187617cfdc5881", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_MA.php": "702d2fb6909e5d6fe201197d075fdcd2", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_MC.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_MF.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_MG.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_ML.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_MQ.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_MR.php": "cc99fdf4f73dbefddc3d9ed05caf6da4", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_MU.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_NC.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_NE.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_PF.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_PM.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_RE.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_RW.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_SC.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_SN.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_SY.php": "566c6a58b6be6ffb8987db2af2c665bc", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_TD.php": "cc99fdf4f73dbefddc3d9ed05caf6da4", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_TG.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_TN.php": "ffbf46dbfd890db2a486b0f745e70e3a", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_VU.php": "cc99fdf4f73dbefddc3d9ed05caf6da4", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_WF.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fr_YT.php": "cd5e6a383a075f0b11bef5c5fe90d4fa", + "vendor/nesbot/carbon/src/Carbon/Lang/fur.php": "749bb50cf5225b7e3e4103f94b337d6c", + "vendor/nesbot/carbon/src/Carbon/Lang/fur_IT.php": "d1fa6de422eb21e24bdbf8b2cd00a3e2", + "vendor/nesbot/carbon/src/Carbon/Lang/fy.php": "6576baa5d8a8a28891edd7437598fdc3", + "vendor/nesbot/carbon/src/Carbon/Lang/fy_DE.php": "58f1f3c66898f7d25c0681444b64730d", + "vendor/nesbot/carbon/src/Carbon/Lang/fy_NL.php": "c9a82a5771112160aace7afebf8b81ef", + "vendor/nesbot/carbon/src/Carbon/Lang/ga.php": "4714b4f6bfbe91d04260ee3ad92d23dd", + "vendor/nesbot/carbon/src/Carbon/Lang/ga_IE.php": "d3aae994e74db51681ad0cdf40a3f4e5", + "vendor/nesbot/carbon/src/Carbon/Lang/gd.php": "8fb67a895d37ea7f6b581b3b8dfa5fa8", + "vendor/nesbot/carbon/src/Carbon/Lang/gd_GB.php": "da89f57c1e16924d558bc4078331785c", + "vendor/nesbot/carbon/src/Carbon/Lang/gez.php": "ff09535b87b4dbc240210b750560e5b8", + "vendor/nesbot/carbon/src/Carbon/Lang/gez_ER.php": "542babbbd858b2c4b258b2cec2d05172", + "vendor/nesbot/carbon/src/Carbon/Lang/gez_ET.php": "af4d9a7158c68863128f014b930f5c81", + "vendor/nesbot/carbon/src/Carbon/Lang/gl.php": "f82fff887c87218dd7100d4f60ee0782", + "vendor/nesbot/carbon/src/Carbon/Lang/gl_ES.php": "c31824fd635f5b75b7341566795883b2", + "vendor/nesbot/carbon/src/Carbon/Lang/gom.php": "ac905bca7ae004dde5bc995439d38c36", + "vendor/nesbot/carbon/src/Carbon/Lang/gom_Latn.php": "8f7a198eb5e70336379f06e81b8a0bd0", + "vendor/nesbot/carbon/src/Carbon/Lang/gsw.php": "1bc33e224c67e8ecbaf21c6eefe3cecc", + "vendor/nesbot/carbon/src/Carbon/Lang/gsw_CH.php": "8d0f7f491a61d357bd3abd1eb6fd14a1", + "vendor/nesbot/carbon/src/Carbon/Lang/gsw_FR.php": "e10b6958991840d6102ae3b332fe6d4f", + "vendor/nesbot/carbon/src/Carbon/Lang/gsw_LI.php": "e10b6958991840d6102ae3b332fe6d4f", + "vendor/nesbot/carbon/src/Carbon/Lang/gu.php": "876c712cef866885ee08b0ebcadb6c06", + "vendor/nesbot/carbon/src/Carbon/Lang/gu_IN.php": "c2575a94b28781cd281456d609111276", + "vendor/nesbot/carbon/src/Carbon/Lang/guz.php": "f917e81a5e15f38369e30a2b4c43c25a", + "vendor/nesbot/carbon/src/Carbon/Lang/gv.php": "54fe6e2c5ec8dbb4f4a904e568378db4", + "vendor/nesbot/carbon/src/Carbon/Lang/gv_GB.php": "269768efd6ce736a151a4a59b3a334f6", + "vendor/nesbot/carbon/src/Carbon/Lang/ha.php": "5af4d04df0535345b379969faa4e5d37", + "vendor/nesbot/carbon/src/Carbon/Lang/ha_GH.php": "a2d8f1803627338f9d1477d22ca55327", + "vendor/nesbot/carbon/src/Carbon/Lang/ha_NE.php": "a2d8f1803627338f9d1477d22ca55327", + "vendor/nesbot/carbon/src/Carbon/Lang/ha_NG.php": "a2d8f1803627338f9d1477d22ca55327", + "vendor/nesbot/carbon/src/Carbon/Lang/hak.php": "123025b3025a281d1b826daeeb62b454", + "vendor/nesbot/carbon/src/Carbon/Lang/hak_TW.php": "3d440fdef609a41880c8400c4e471e66", + "vendor/nesbot/carbon/src/Carbon/Lang/haw.php": "af0f461da267b6d41424bcb3c1626526", + "vendor/nesbot/carbon/src/Carbon/Lang/he.php": "b9282a0f202685d9ac0d16f44bef99d2", + "vendor/nesbot/carbon/src/Carbon/Lang/he_IL.php": "f3ec38cd7fb9161d7a8e3398666d414f", + "vendor/nesbot/carbon/src/Carbon/Lang/hi.php": "b9417105e25444faa9f05e7a2d996111", + "vendor/nesbot/carbon/src/Carbon/Lang/hi_IN.php": "316ff7374624122add752440851c178c", + "vendor/nesbot/carbon/src/Carbon/Lang/hif.php": "cf530e878eb03fc8867d1b01921471ec", + "vendor/nesbot/carbon/src/Carbon/Lang/hif_FJ.php": "324c7904a298c1fd1722543682a54c54", + "vendor/nesbot/carbon/src/Carbon/Lang/hne.php": "1927a65953349c5e48a22253413e4299", + "vendor/nesbot/carbon/src/Carbon/Lang/hne_IN.php": "fac3731bb8025df81f74fc18e3a1a9d1", + "vendor/nesbot/carbon/src/Carbon/Lang/hr.php": "d5cdb17eb3785c96ec6d5197d709db9c", + "vendor/nesbot/carbon/src/Carbon/Lang/hr_BA.php": "f2d448fca08df59e65fbf9a61ef83d0a", + "vendor/nesbot/carbon/src/Carbon/Lang/hr_HR.php": "0d1fa021406b85afa69ffbdff71dac5a", + "vendor/nesbot/carbon/src/Carbon/Lang/hsb.php": "c9b1da5237d59f4da9ec483eb533d96c", + "vendor/nesbot/carbon/src/Carbon/Lang/hsb_DE.php": "6ee00a5e807f034e1658e5de04183d66", + "vendor/nesbot/carbon/src/Carbon/Lang/ht.php": "72b7ff0b9a3ec029261d33a3340fcc89", + "vendor/nesbot/carbon/src/Carbon/Lang/ht_HT.php": "88190764470144a495b257d663544b9c", + "vendor/nesbot/carbon/src/Carbon/Lang/hu.php": "fe79caa806c8e581577a043ebb2700b0", + "vendor/nesbot/carbon/src/Carbon/Lang/hu_HU.php": "7a64f88caae1e361f424edbde144bb09", + "vendor/nesbot/carbon/src/Carbon/Lang/hy.php": "4dab8412962620dad40c6aa4738d362e", + "vendor/nesbot/carbon/src/Carbon/Lang/hy_AM.php": "668225395ffe7283be127498966b0cda", + "vendor/nesbot/carbon/src/Carbon/Lang/i18n.php": "031a87bba6dc1ea864b1590431dd1d09", + "vendor/nesbot/carbon/src/Carbon/Lang/ia.php": "0947fcf56ce8dfe4572e10d1ed150ef0", + "vendor/nesbot/carbon/src/Carbon/Lang/ia_FR.php": "3c0bc6a02ddc4aadbc155638d34bc648", + "vendor/nesbot/carbon/src/Carbon/Lang/id.php": "982140e12b6b743fbf0214798533aa35", + "vendor/nesbot/carbon/src/Carbon/Lang/id_ID.php": "e27f2def87577e861246016379ce3b62", + "vendor/nesbot/carbon/src/Carbon/Lang/ig.php": "f95c0356bfc4a008967d242bb7bbaa9e", + "vendor/nesbot/carbon/src/Carbon/Lang/ig_NG.php": "a885d2965c5145b3d9f9733c13d9eb7a", + "vendor/nesbot/carbon/src/Carbon/Lang/ii.php": "32382d49e2dc9027f48f031b079b2119", + "vendor/nesbot/carbon/src/Carbon/Lang/ik.php": "8bad1a8def4d3876473d5786f941876e", + "vendor/nesbot/carbon/src/Carbon/Lang/ik_CA.php": "29b6b4d30c950f00616b9308eb585a89", + "vendor/nesbot/carbon/src/Carbon/Lang/in.php": "e27f2def87577e861246016379ce3b62", + "vendor/nesbot/carbon/src/Carbon/Lang/is.php": "ecb19222f57839f8fd75e3c4f050dbfe", + "vendor/nesbot/carbon/src/Carbon/Lang/is_IS.php": "50508dec68d86b9348f37b037b42b7af", + "vendor/nesbot/carbon/src/Carbon/Lang/it.php": "86b35a1bc281e2c4fde3d0d198c8bcc1", + "vendor/nesbot/carbon/src/Carbon/Lang/it_CH.php": "a23da553a49e1c15dcb06292f3df2fb8", + "vendor/nesbot/carbon/src/Carbon/Lang/it_IT.php": "76e471ea8f44dfd2c9aca75791e7ec4c", + "vendor/nesbot/carbon/src/Carbon/Lang/it_SM.php": "2a2a361253cc2590c9df6cde99ac4295", + "vendor/nesbot/carbon/src/Carbon/Lang/it_VA.php": "2a2a361253cc2590c9df6cde99ac4295", + "vendor/nesbot/carbon/src/Carbon/Lang/iu.php": "5fb641f3f408bd5a604697e462a3045c", + "vendor/nesbot/carbon/src/Carbon/Lang/iu_CA.php": "4b4c5c2168dbf2420c9f8d46e65a8a1d", + "vendor/nesbot/carbon/src/Carbon/Lang/iw.php": "d96cd7112c95910b48dde37dbbca29b4", + "vendor/nesbot/carbon/src/Carbon/Lang/ja.php": "ee805f5b434d27961cf5e70f01c79bb0", + "vendor/nesbot/carbon/src/Carbon/Lang/ja_JP.php": "f17b141d5e7d0c1426c05c9276d57b95", + "vendor/nesbot/carbon/src/Carbon/Lang/jgo.php": "a3b410d64c63fb5c757b7fd8110dda0c", + "vendor/nesbot/carbon/src/Carbon/Lang/jmc.php": "1c5c1f1841568e548086df1c6bb0fa8a", + "vendor/nesbot/carbon/src/Carbon/Lang/jv.php": "ebb8b4abd6bf615710d915b1eabc9f4c", + "vendor/nesbot/carbon/src/Carbon/Lang/ka.php": "bc1f805fa70dca97a8540718e6520fe3", + "vendor/nesbot/carbon/src/Carbon/Lang/ka_GE.php": "e41795b4760ae5754741d2795b9ebbcf", + "vendor/nesbot/carbon/src/Carbon/Lang/kab.php": "3188d21ef0665c35c5a1ef5f4e1ccfd5", + "vendor/nesbot/carbon/src/Carbon/Lang/kab_DZ.php": "61482909b4356f825359087f764761b1", + "vendor/nesbot/carbon/src/Carbon/Lang/kam.php": "16c05fdb250149ba0416d79952986dac", + "vendor/nesbot/carbon/src/Carbon/Lang/kde.php": "c773cd56f1814011075311663b872ea7", + "vendor/nesbot/carbon/src/Carbon/Lang/kea.php": "cadf667b3e39483aacb5b574fa4fb7d6", + "vendor/nesbot/carbon/src/Carbon/Lang/khq.php": "e7bf12f2f23e98bc464c751ffc705a6f", + "vendor/nesbot/carbon/src/Carbon/Lang/ki.php": "59c1da48e2e72b80daa8b48e98db1356", + "vendor/nesbot/carbon/src/Carbon/Lang/kk.php": "1627f58e7236f3d10f505ca13b433e3c", + "vendor/nesbot/carbon/src/Carbon/Lang/kk_KZ.php": "55672d1ca6ab93b1c199cc401aa8b05b", + "vendor/nesbot/carbon/src/Carbon/Lang/kkj.php": "a3b410d64c63fb5c757b7fd8110dda0c", + "vendor/nesbot/carbon/src/Carbon/Lang/kl.php": "f969f3046a762b22b331128c99d6468c", + "vendor/nesbot/carbon/src/Carbon/Lang/kl_GL.php": "25d2732c366ced2a688454c35ac1ff8c", + "vendor/nesbot/carbon/src/Carbon/Lang/kln.php": "262831739583dc7dd0cdd35357027f1f", + "vendor/nesbot/carbon/src/Carbon/Lang/km.php": "886ebe72a2216746bf924b152c3e6e03", + "vendor/nesbot/carbon/src/Carbon/Lang/km_KH.php": "a9446ec4a90a9958d27a9aa6b8f2ee9e", + "vendor/nesbot/carbon/src/Carbon/Lang/kn.php": "82b39c63c4149e0bc2be125419d4c029", + "vendor/nesbot/carbon/src/Carbon/Lang/kn_IN.php": "072fd94171303653268551a38c3a0496", + "vendor/nesbot/carbon/src/Carbon/Lang/ko.php": "9d92e2b2ef9420cd1e52deb4f22f39d5", + "vendor/nesbot/carbon/src/Carbon/Lang/ko_KP.php": "2bc03fdbeb0e147e32b9cc1baae1edff", + "vendor/nesbot/carbon/src/Carbon/Lang/ko_KR.php": "76a737c49b13bb53b04b0e5b36f61b04", + "vendor/nesbot/carbon/src/Carbon/Lang/kok.php": "b9f634e368ad89b53c6f077d2f5749cd", + "vendor/nesbot/carbon/src/Carbon/Lang/kok_IN.php": "348aed706ad6ad76bd53bc7b22e10a59", + "vendor/nesbot/carbon/src/Carbon/Lang/ks.php": "6a1489b86d7033a032fc5f41253aa2f8", + "vendor/nesbot/carbon/src/Carbon/Lang/ks_IN.php": "bff3884c46a3ca216904b1b51d42f2fe", + "vendor/nesbot/carbon/src/Carbon/Lang/ks_IN@devanagari.php": "2a6802d39892a8b11b9ddfdbe52adbc7", + "vendor/nesbot/carbon/src/Carbon/Lang/ksb.php": "0df64c5da08ed2b3d538008acac60d04", + "vendor/nesbot/carbon/src/Carbon/Lang/ksf.php": "d8dc350a0643d2162d36dbceccee6cc8", + "vendor/nesbot/carbon/src/Carbon/Lang/ksh.php": "fb3170d46d3dfc54d3fc8b88910d1bb1", + "vendor/nesbot/carbon/src/Carbon/Lang/ku.php": "293e427f2d96d30a405a2ff49012221b", + "vendor/nesbot/carbon/src/Carbon/Lang/ku_TR.php": "c4409e8d32c960ba3d2b4014c9e728af", + "vendor/nesbot/carbon/src/Carbon/Lang/kw.php": "1ee56c0969861a0a97f2b55b8b240c7d", + "vendor/nesbot/carbon/src/Carbon/Lang/kw_GB.php": "ccad1a39be1e9c22ccc0fee5a47c2ced", + "vendor/nesbot/carbon/src/Carbon/Lang/ky.php": "1f72d64daed66581e0ff9959b0a2f307", + "vendor/nesbot/carbon/src/Carbon/Lang/ky_KG.php": "5f4ae268d39c5deebde8a54a7983a4bf", + "vendor/nesbot/carbon/src/Carbon/Lang/lag.php": "fce87210ca0cc4d210a23b60333ffcba", + "vendor/nesbot/carbon/src/Carbon/Lang/lb.php": "02e0e985d30551ae7b5889e05f3d2b6c", + "vendor/nesbot/carbon/src/Carbon/Lang/lb_LU.php": "f4a4250f383a61fc82fb9b7b4d9d8956", + "vendor/nesbot/carbon/src/Carbon/Lang/lg.php": "ca4b58274743fbe262082b2e551699f3", + "vendor/nesbot/carbon/src/Carbon/Lang/lg_UG.php": "9b9b322a01766098a40757b173006889", + "vendor/nesbot/carbon/src/Carbon/Lang/li.php": "f3c302fd8d62ca36aeeeead8ab7426b4", + "vendor/nesbot/carbon/src/Carbon/Lang/li_NL.php": "f31cc8d283b299cc4ad75adb24f6551b", + "vendor/nesbot/carbon/src/Carbon/Lang/lij.php": "a01ba95f878d3bcc20d682107b0853b1", + "vendor/nesbot/carbon/src/Carbon/Lang/lij_IT.php": "bf9aaf6f4dc24105a58c47331f9f538b", + "vendor/nesbot/carbon/src/Carbon/Lang/lkt.php": "27b9b47a4e87a0bd49d049ecb8ddedb2", + "vendor/nesbot/carbon/src/Carbon/Lang/ln.php": "b2b51d9f769c388ce5c80f3b6ed2e49d", + "vendor/nesbot/carbon/src/Carbon/Lang/ln_AO.php": "c23dfecb874ced505d3815a3a05a4205", + "vendor/nesbot/carbon/src/Carbon/Lang/ln_CD.php": "bb18a24bfaaa8af218f7f88f4d3a8926", + "vendor/nesbot/carbon/src/Carbon/Lang/ln_CF.php": "c23dfecb874ced505d3815a3a05a4205", + "vendor/nesbot/carbon/src/Carbon/Lang/ln_CG.php": "c23dfecb874ced505d3815a3a05a4205", + "vendor/nesbot/carbon/src/Carbon/Lang/lo.php": "2128ef06ca723b0051ccab1310f89693", + "vendor/nesbot/carbon/src/Carbon/Lang/lo_LA.php": "7eaf8088df1f9e8b0786dd0e05f53af3", + "vendor/nesbot/carbon/src/Carbon/Lang/lrc.php": "4e2bdc4022a63f6a9a31c7e26341337d", + "vendor/nesbot/carbon/src/Carbon/Lang/lrc_IQ.php": "9b25098d76d48c6e77d899b8fc6a4487", + "vendor/nesbot/carbon/src/Carbon/Lang/lt.php": "300f06f32a11913ad7520eabb9e5142c", + "vendor/nesbot/carbon/src/Carbon/Lang/lt_LT.php": "20fb49c5714189740abd2e381f64c425", + "vendor/nesbot/carbon/src/Carbon/Lang/lu.php": "8c256b9f5c4595f139a59ef4fa7eb5db", + "vendor/nesbot/carbon/src/Carbon/Lang/luo.php": "000410eb292a334dcc88cea164699132", + "vendor/nesbot/carbon/src/Carbon/Lang/luy.php": "0c208c205a077ce539312f55497843ce", + "vendor/nesbot/carbon/src/Carbon/Lang/lv.php": "e3a4fa1162cfe15494d30b39b4ae9b22", + "vendor/nesbot/carbon/src/Carbon/Lang/lv_LV.php": "acc81d59f1111181784c4cb86f555bf9", + "vendor/nesbot/carbon/src/Carbon/Lang/lzh.php": "9c59c9238f0d2b0e5d848fb016a8842d", + "vendor/nesbot/carbon/src/Carbon/Lang/lzh_TW.php": "69399f76794f4d27ccca05d1af6a852f", + "vendor/nesbot/carbon/src/Carbon/Lang/mag.php": "2f78c1b6539f45752747cdc1816df4b5", + "vendor/nesbot/carbon/src/Carbon/Lang/mag_IN.php": "d3f10f9d753e33454a62244068e04e4f", + "vendor/nesbot/carbon/src/Carbon/Lang/mai.php": "44fa83703d821a734a6c182d0b6bd121", + "vendor/nesbot/carbon/src/Carbon/Lang/mai_IN.php": "8a16c01559fab097736953b5bff5cca9", + "vendor/nesbot/carbon/src/Carbon/Lang/mas.php": "38b70245c721e522e74ce05ca74ce88d", + "vendor/nesbot/carbon/src/Carbon/Lang/mas_TZ.php": "42df8a2472b6894f04de717093373286", + "vendor/nesbot/carbon/src/Carbon/Lang/mer.php": "15e2543f2fa906d9a9466584a632af5e", + "vendor/nesbot/carbon/src/Carbon/Lang/mfe.php": "d1f3357ae4d56b6e0fa3ed7b3abf7734", + "vendor/nesbot/carbon/src/Carbon/Lang/mfe_MU.php": "35d4fbd1409d4276d495748a130e38c8", + "vendor/nesbot/carbon/src/Carbon/Lang/mg.php": "b54de4f4fcaf16d34d91afde1f05cd3f", + "vendor/nesbot/carbon/src/Carbon/Lang/mg_MG.php": "32e46001bf0a16b3e0f00bcdfbb20014", + "vendor/nesbot/carbon/src/Carbon/Lang/mgh.php": "bfcd3cdffc56e4553797c8d85976b5c6", + "vendor/nesbot/carbon/src/Carbon/Lang/mgo.php": "36555d470fb4a33f302669aeb8fc0548", + "vendor/nesbot/carbon/src/Carbon/Lang/mhr.php": "34cacb91767ff0a915657261774ef0a8", + "vendor/nesbot/carbon/src/Carbon/Lang/mhr_RU.php": "8e50e8e6ea6cf7dc39ea08decd798598", + "vendor/nesbot/carbon/src/Carbon/Lang/mi.php": "a1f39dedd8b5078b4b0b3190d790456f", + "vendor/nesbot/carbon/src/Carbon/Lang/mi_NZ.php": "fa91e8930eaf6e4daeffc3739251ed46", + "vendor/nesbot/carbon/src/Carbon/Lang/miq.php": "173883531a3fbd9fca18a300641f2cbc", + "vendor/nesbot/carbon/src/Carbon/Lang/miq_NI.php": "07becdaa024ff7c9cdec267fd648be7b", + "vendor/nesbot/carbon/src/Carbon/Lang/mjw.php": "7980a9c13bb0c357cd537d643a69cfdb", + "vendor/nesbot/carbon/src/Carbon/Lang/mjw_IN.php": "aeaad1a789d71b91dce95ef1167ac172", + "vendor/nesbot/carbon/src/Carbon/Lang/mk.php": "e2d39a149d8741f81ecae4fa5d20b9df", + "vendor/nesbot/carbon/src/Carbon/Lang/mk_MK.php": "617ea38c0ab55d708af0c9900743200b", + "vendor/nesbot/carbon/src/Carbon/Lang/ml.php": "34f5256734cbf60a6981fd8462344fc0", + "vendor/nesbot/carbon/src/Carbon/Lang/ml_IN.php": "49c1f90c3d457a712615380361119758", + "vendor/nesbot/carbon/src/Carbon/Lang/mn.php": "61cf5375c23040fd3e176ad1498fa1fa", + "vendor/nesbot/carbon/src/Carbon/Lang/mn_MN.php": "d368fe5ee4639617aee1751c32135cc6", + "vendor/nesbot/carbon/src/Carbon/Lang/mni.php": "15095b273b64f12596d1aab7e97922bf", + "vendor/nesbot/carbon/src/Carbon/Lang/mni_IN.php": "ffdd11fa12153d383bc4a21fd263ff94", + "vendor/nesbot/carbon/src/Carbon/Lang/mo.php": "2c73f99a3319c0a4c2d411527b3e8dfe", + "vendor/nesbot/carbon/src/Carbon/Lang/mr.php": "ed32fedb0bbd495cb3fbff26d8e2040d", + "vendor/nesbot/carbon/src/Carbon/Lang/mr_IN.php": "860dcba8825ce55eae5377a7c42fcb4e", + "vendor/nesbot/carbon/src/Carbon/Lang/ms.php": "485a7edef5160d0dab9fa3d0b58d9b9d", + "vendor/nesbot/carbon/src/Carbon/Lang/ms_BN.php": "22a73faf40fa79cc75a1fbdbda84dfcd", + "vendor/nesbot/carbon/src/Carbon/Lang/ms_MY.php": "7571ac8a0f46b7117fbeaf107d98de7b", + "vendor/nesbot/carbon/src/Carbon/Lang/ms_SG.php": "c6b6baccb2f6e18fdf45f5b16ec6521a", + "vendor/nesbot/carbon/src/Carbon/Lang/mt.php": "b2b0f5ab3e8a72dea8a154c225ccf37f", + "vendor/nesbot/carbon/src/Carbon/Lang/mt_MT.php": "5d8581348b5064530ab10645bb625254", + "vendor/nesbot/carbon/src/Carbon/Lang/mua.php": "50a0b419d9280cd287bfbb1705b279c1", + "vendor/nesbot/carbon/src/Carbon/Lang/my.php": "112431aa7d933eee5e8082a2f9b4d1c6", + "vendor/nesbot/carbon/src/Carbon/Lang/my_MM.php": "68ab7bff5fc1c58c8d61f4019b580f05", + "vendor/nesbot/carbon/src/Carbon/Lang/mzn.php": "3120d9ec59d948c9e9620b040d388b46", + "vendor/nesbot/carbon/src/Carbon/Lang/nan.php": "2e2aff432ef0adf56e4ab074df5e8bb2", + "vendor/nesbot/carbon/src/Carbon/Lang/nan_TW.php": "65f77dd6eb800ed8c5a5cc765d27333a", + "vendor/nesbot/carbon/src/Carbon/Lang/nan_TW@latin.php": "602c77f112a7656780d1edfa0b9ad923", + "vendor/nesbot/carbon/src/Carbon/Lang/naq.php": "1cdffcdd9aae366e9cc41d9559a5d404", + "vendor/nesbot/carbon/src/Carbon/Lang/nb.php": "b531476f0c7c230dea902a7346ae3b21", + "vendor/nesbot/carbon/src/Carbon/Lang/nb_NO.php": "7b68cd3703c385b7b84ca9a8a796c3e8", + "vendor/nesbot/carbon/src/Carbon/Lang/nb_SJ.php": "c4a6ac7fb53fb30dbcdfc69146d2491f", + "vendor/nesbot/carbon/src/Carbon/Lang/nd.php": "381f6396e159fcea397eb26a99626bf2", + "vendor/nesbot/carbon/src/Carbon/Lang/nds.php": "99767f849bdf5f46daa54e176dbc92a9", + "vendor/nesbot/carbon/src/Carbon/Lang/nds_DE.php": "59bae91a8feb4fe98483c3fe0812f8fb", + "vendor/nesbot/carbon/src/Carbon/Lang/nds_NL.php": "90af0474b91c4dd538c56d2890e717df", + "vendor/nesbot/carbon/src/Carbon/Lang/ne.php": "aa9fa6c264227d6bbd6c47cc54c5759e", + "vendor/nesbot/carbon/src/Carbon/Lang/ne_IN.php": "e680b495685edd864adaace6287353f7", + "vendor/nesbot/carbon/src/Carbon/Lang/ne_NP.php": "17cceee814c857d98ebe53aa78b54717", + "vendor/nesbot/carbon/src/Carbon/Lang/nhn.php": "057acc5d6ac2a6a4c5547171cdd3cba3", + "vendor/nesbot/carbon/src/Carbon/Lang/nhn_MX.php": "a4b3ba7749fc0faac0c64670e44d8ee3", + "vendor/nesbot/carbon/src/Carbon/Lang/niu.php": "0a451b485a6f358264410767d99a4c6d", + "vendor/nesbot/carbon/src/Carbon/Lang/niu_NU.php": "7a107685d9e4b09a6b2dbd365cee937d", + "vendor/nesbot/carbon/src/Carbon/Lang/nl.php": "d07a1b5144f618ffe8df68a5e64f6ea7", + "vendor/nesbot/carbon/src/Carbon/Lang/nl_AW.php": "30c2e862c1eda6ac1927fa4a0731a76e", + "vendor/nesbot/carbon/src/Carbon/Lang/nl_BE.php": "ddee7e54a1fb5e47762c792883581b69", + "vendor/nesbot/carbon/src/Carbon/Lang/nl_BQ.php": "2e16a521aa993f8c8c0d5135cf09a0d0", + "vendor/nesbot/carbon/src/Carbon/Lang/nl_CW.php": "2e16a521aa993f8c8c0d5135cf09a0d0", + "vendor/nesbot/carbon/src/Carbon/Lang/nl_NL.php": "5ac7524442f6044c6c4609cc7c03b332", + "vendor/nesbot/carbon/src/Carbon/Lang/nl_SR.php": "2e16a521aa993f8c8c0d5135cf09a0d0", + "vendor/nesbot/carbon/src/Carbon/Lang/nl_SX.php": "2e16a521aa993f8c8c0d5135cf09a0d0", + "vendor/nesbot/carbon/src/Carbon/Lang/nmg.php": "551caf55512d48d17d3bf8184bdfa646", + "vendor/nesbot/carbon/src/Carbon/Lang/nn.php": "2ec328aca708362fde8951c3e3f3757c", + "vendor/nesbot/carbon/src/Carbon/Lang/nn_NO.php": "e0e0cc9b35c34d7c1decfc5c3aee1a74", + "vendor/nesbot/carbon/src/Carbon/Lang/nnh.php": "5ed576491816a6ef2c8945b6b0be43ff", + "vendor/nesbot/carbon/src/Carbon/Lang/no.php": "f2edbce254ea2b20ea1a5ecc0e290244", + "vendor/nesbot/carbon/src/Carbon/Lang/nr.php": "5c423b15c246e2ea1c0ecab18650c021", + "vendor/nesbot/carbon/src/Carbon/Lang/nr_ZA.php": "7a4de5be23d7254a0aed18ee7553b1d2", + "vendor/nesbot/carbon/src/Carbon/Lang/nso.php": "03348c7eeee1fc0a4fad2527c7509d36", + "vendor/nesbot/carbon/src/Carbon/Lang/nso_ZA.php": "67539dce198b3f4326c56acf893a8187", + "vendor/nesbot/carbon/src/Carbon/Lang/nus.php": "075faa4a22200a94472daea6b74f9856", + "vendor/nesbot/carbon/src/Carbon/Lang/nyn.php": "04cbe1233df726951bc7c10280860745", + "vendor/nesbot/carbon/src/Carbon/Lang/oc.php": "3b6f35036cc3cb9f878d8742167af004", + "vendor/nesbot/carbon/src/Carbon/Lang/oc_FR.php": "23754964b26748ec1bd57e64493b78f1", + "vendor/nesbot/carbon/src/Carbon/Lang/om.php": "b148838cce6e5793a45badedd2ac798c", + "vendor/nesbot/carbon/src/Carbon/Lang/om_ET.php": "b99ad908a494dc9eb3f0582c696b6e35", + "vendor/nesbot/carbon/src/Carbon/Lang/om_KE.php": "ed962fb2061a8be2ff64b60f1e482f4a", + "vendor/nesbot/carbon/src/Carbon/Lang/or.php": "8d1cdf48c74dcfd44ceaa4e50a5bba6b", + "vendor/nesbot/carbon/src/Carbon/Lang/or_IN.php": "ff2a96e0732a5963df5cdb17047cb8ec", + "vendor/nesbot/carbon/src/Carbon/Lang/os.php": "de6ded038d70c336b365c4ea1aa1011e", + "vendor/nesbot/carbon/src/Carbon/Lang/os_RU.php": "4371c378e7415256cca5f08a29eca802", + "vendor/nesbot/carbon/src/Carbon/Lang/pa.php": "7f1bd9da5f1670e3e84c84607e17ac5c", + "vendor/nesbot/carbon/src/Carbon/Lang/pa_Arab.php": "6dc286f8ab7e7f4f41ffead676c84728", + "vendor/nesbot/carbon/src/Carbon/Lang/pa_Guru.php": "8d0342c83905b5483614308336041228", + "vendor/nesbot/carbon/src/Carbon/Lang/pa_IN.php": "d73f58e55e8015057f5395844d0bacf4", + "vendor/nesbot/carbon/src/Carbon/Lang/pa_PK.php": "739f678afa7fe68d8645278a92a83a7b", + "vendor/nesbot/carbon/src/Carbon/Lang/pap.php": "204895f61550380630f43c5f58d2f666", + "vendor/nesbot/carbon/src/Carbon/Lang/pap_AW.php": "c359411802432df27acf5df33c2f3374", + "vendor/nesbot/carbon/src/Carbon/Lang/pap_CW.php": "c359411802432df27acf5df33c2f3374", + "vendor/nesbot/carbon/src/Carbon/Lang/pl.php": "f57950d57992a8981b9d16864d8795e2", + "vendor/nesbot/carbon/src/Carbon/Lang/pl_PL.php": "4fbf387ff3d9d5c2adea672a7697284b", + "vendor/nesbot/carbon/src/Carbon/Lang/prg.php": "f287a7a5f38417e925c8a0351c1eea72", + "vendor/nesbot/carbon/src/Carbon/Lang/ps.php": "1a4789d8a6dbd9c2bc27add79ff419f2", + "vendor/nesbot/carbon/src/Carbon/Lang/ps_AF.php": "08e274652c6a729f621f14f98e29bd74", + "vendor/nesbot/carbon/src/Carbon/Lang/pt.php": "9b2452b2047f6c049054f93cdbbfb6e7", + "vendor/nesbot/carbon/src/Carbon/Lang/pt_AO.php": "b883c04fbd4bd648847173cbf3e8cbc6", + "vendor/nesbot/carbon/src/Carbon/Lang/pt_BR.php": "9c097b91542bc11f20b52a0e6ea4f213", + "vendor/nesbot/carbon/src/Carbon/Lang/pt_CH.php": "b883c04fbd4bd648847173cbf3e8cbc6", + "vendor/nesbot/carbon/src/Carbon/Lang/pt_CV.php": "b883c04fbd4bd648847173cbf3e8cbc6", + "vendor/nesbot/carbon/src/Carbon/Lang/pt_GQ.php": "b883c04fbd4bd648847173cbf3e8cbc6", + "vendor/nesbot/carbon/src/Carbon/Lang/pt_GW.php": "b883c04fbd4bd648847173cbf3e8cbc6", + "vendor/nesbot/carbon/src/Carbon/Lang/pt_LU.php": "b883c04fbd4bd648847173cbf3e8cbc6", + "vendor/nesbot/carbon/src/Carbon/Lang/pt_MO.php": "35e617b4c8cb3703d676481dc3ae6582", + "vendor/nesbot/carbon/src/Carbon/Lang/pt_MZ.php": "4db18a3d7c0795cd9924a62b448ab1f5", + "vendor/nesbot/carbon/src/Carbon/Lang/pt_PT.php": "b1f3d6e23fbf52b941f439278a1be172", + "vendor/nesbot/carbon/src/Carbon/Lang/pt_ST.php": "b883c04fbd4bd648847173cbf3e8cbc6", + "vendor/nesbot/carbon/src/Carbon/Lang/pt_TL.php": "b883c04fbd4bd648847173cbf3e8cbc6", + "vendor/nesbot/carbon/src/Carbon/Lang/qu.php": "c3bd7e61c03dacbc6414ff966dbc8e60", + "vendor/nesbot/carbon/src/Carbon/Lang/qu_BO.php": "265dd1e1cff89c6e6f8a7ff3270c08ff", + "vendor/nesbot/carbon/src/Carbon/Lang/qu_EC.php": "265dd1e1cff89c6e6f8a7ff3270c08ff", + "vendor/nesbot/carbon/src/Carbon/Lang/quz.php": "1ade5551b9fdb878421c4f0c34bef3a2", + "vendor/nesbot/carbon/src/Carbon/Lang/quz_PE.php": "1fdeaf162f82cd0de416044d232b11f9", + "vendor/nesbot/carbon/src/Carbon/Lang/raj.php": "4b343462674bb2d378a97b6e189b0be8", + "vendor/nesbot/carbon/src/Carbon/Lang/raj_IN.php": "e933b495289fdc09fcff228eafbb28e2", + "vendor/nesbot/carbon/src/Carbon/Lang/rm.php": "58df559dad3c869bfd537b38c3ea4a04", + "vendor/nesbot/carbon/src/Carbon/Lang/rn.php": "2131924bd4528c18b68198ce7ab90973", + "vendor/nesbot/carbon/src/Carbon/Lang/ro.php": "3011843f135e97e64690e050d7ff4cba", + "vendor/nesbot/carbon/src/Carbon/Lang/ro_MD.php": "bd6e4a9491e36eb105940509030b3d1e", + "vendor/nesbot/carbon/src/Carbon/Lang/ro_RO.php": "2c73f99a3319c0a4c2d411527b3e8dfe", + "vendor/nesbot/carbon/src/Carbon/Lang/rof.php": "8edba461eff7f865f929f8fc5f025961", + "vendor/nesbot/carbon/src/Carbon/Lang/ru.php": "3432b6686097d34eceb52f2e90e04994", + "vendor/nesbot/carbon/src/Carbon/Lang/ru_BY.php": "204876ea6b65891b8ba8ca09188c62c4", + "vendor/nesbot/carbon/src/Carbon/Lang/ru_KG.php": "204876ea6b65891b8ba8ca09188c62c4", + "vendor/nesbot/carbon/src/Carbon/Lang/ru_KZ.php": "204876ea6b65891b8ba8ca09188c62c4", + "vendor/nesbot/carbon/src/Carbon/Lang/ru_MD.php": "204876ea6b65891b8ba8ca09188c62c4", + "vendor/nesbot/carbon/src/Carbon/Lang/ru_RU.php": "204876ea6b65891b8ba8ca09188c62c4", + "vendor/nesbot/carbon/src/Carbon/Lang/ru_UA.php": "8f44bee8e6dec4e4ad373b46b86fc51a", + "vendor/nesbot/carbon/src/Carbon/Lang/rw.php": "755e1a72699e1569648f07994b4f2434", + "vendor/nesbot/carbon/src/Carbon/Lang/rw_RW.php": "09a279af7cca746fc1a0bb5302cb54b2", + "vendor/nesbot/carbon/src/Carbon/Lang/rwk.php": "1c5c1f1841568e548086df1c6bb0fa8a", + "vendor/nesbot/carbon/src/Carbon/Lang/sa.php": "0e3e62f897c71cdb7e93c4bf36da6ac8", + "vendor/nesbot/carbon/src/Carbon/Lang/sa_IN.php": "157ee0bfc27b066d1f3b37e4945076a5", + "vendor/nesbot/carbon/src/Carbon/Lang/sah.php": "15b0db45dfdc515a436627b731a9aab8", + "vendor/nesbot/carbon/src/Carbon/Lang/sah_RU.php": "364359ab83a425266dd89cf377d80352", + "vendor/nesbot/carbon/src/Carbon/Lang/saq.php": "7cc05adacada9801116651ff30aa18b2", + "vendor/nesbot/carbon/src/Carbon/Lang/sat.php": "12a153eb661862ab0370f045052def4c", + "vendor/nesbot/carbon/src/Carbon/Lang/sat_IN.php": "3c56921f915651fb78e5caeb743c162a", + "vendor/nesbot/carbon/src/Carbon/Lang/sbp.php": "dab55a2724ff956937a2fcdc501d421a", + "vendor/nesbot/carbon/src/Carbon/Lang/sc.php": "1629d9c4407a08b1a523ea58fc886f80", + "vendor/nesbot/carbon/src/Carbon/Lang/sc_IT.php": "d36c7f1862ec7973ff24c47fea6dbb88", + "vendor/nesbot/carbon/src/Carbon/Lang/sd.php": "3a5dbdc4219cc8f2f3ddf2de38df73de", + "vendor/nesbot/carbon/src/Carbon/Lang/sd_IN.php": "7aca56c7b2e61c9ad304897e8d0664b6", + "vendor/nesbot/carbon/src/Carbon/Lang/sd_IN@devanagari.php": "8d83dc9d4076b84e88a7481cd2fbcdbd", + "vendor/nesbot/carbon/src/Carbon/Lang/se.php": "e532271b21f4fca6a6003fffe21bbb14", + "vendor/nesbot/carbon/src/Carbon/Lang/se_FI.php": "13e5d87040d4f0927e6699703b2dfbcc", + "vendor/nesbot/carbon/src/Carbon/Lang/se_NO.php": "209c49d01446eba3237738c3b30f4b25", + "vendor/nesbot/carbon/src/Carbon/Lang/se_SE.php": "209c49d01446eba3237738c3b30f4b25", + "vendor/nesbot/carbon/src/Carbon/Lang/seh.php": "c273b65759640c225ce1507226210f5d", + "vendor/nesbot/carbon/src/Carbon/Lang/ses.php": "087c910bacbc0c9ac018a704ede2e736", + "vendor/nesbot/carbon/src/Carbon/Lang/sg.php": "efedb08414fc730ad7d8a85de25edb7e", + "vendor/nesbot/carbon/src/Carbon/Lang/sgs.php": "ae171bf36eddede5b0d7dd823c0a9ed8", + "vendor/nesbot/carbon/src/Carbon/Lang/sgs_LT.php": "53b7b218c459c7deac6af4434eb4ed9d", + "vendor/nesbot/carbon/src/Carbon/Lang/sh.php": "5a0357cbe1ac9d2d69fc05d7295b7525", + "vendor/nesbot/carbon/src/Carbon/Lang/shi.php": "171def448c89225a36e4375ecf569cc9", + "vendor/nesbot/carbon/src/Carbon/Lang/shi_Latn.php": "d1d2740303a6bdfc8ecff34362d10c40", + "vendor/nesbot/carbon/src/Carbon/Lang/shi_Tfng.php": "8cd442795cd2d93ae848efda794ebd43", + "vendor/nesbot/carbon/src/Carbon/Lang/shn.php": "7951c5ff865c7cb4076281d34e19bb84", + "vendor/nesbot/carbon/src/Carbon/Lang/shn_MM.php": "e5973971dc719999cb4073d8b8eff5e8", + "vendor/nesbot/carbon/src/Carbon/Lang/shs.php": "a5e40f85eed000f78c84cce1f9c25635", + "vendor/nesbot/carbon/src/Carbon/Lang/shs_CA.php": "945d32f01c35db239cca4ac7accd65f7", + "vendor/nesbot/carbon/src/Carbon/Lang/si.php": "55450be596692169d757a1f7e3864440", + "vendor/nesbot/carbon/src/Carbon/Lang/si_LK.php": "2fd9300a62f085fddafcc2027374e0d9", + "vendor/nesbot/carbon/src/Carbon/Lang/sid.php": "21d53ac7fe12c56a66fbfba59cd13ae3", + "vendor/nesbot/carbon/src/Carbon/Lang/sid_ET.php": "d6d460fc8d408f552327d77b69f9a0cb", + "vendor/nesbot/carbon/src/Carbon/Lang/sk.php": "424c8c133cc007f547897aa6742533fc", + "vendor/nesbot/carbon/src/Carbon/Lang/sk_SK.php": "a977e4d53d4f5700f9fb06f6190fc103", + "vendor/nesbot/carbon/src/Carbon/Lang/sl.php": "5e715aa68b81fda863da15f8e9e332d3", + "vendor/nesbot/carbon/src/Carbon/Lang/sl_SI.php": "75cb75a0b099d9ba4be3d05cbe3efc04", + "vendor/nesbot/carbon/src/Carbon/Lang/sm.php": "6d699c2afc14cbd3b6ac6ec2a2af420e", + "vendor/nesbot/carbon/src/Carbon/Lang/sm_WS.php": "6e038dbc695780f61638434ddac690c2", + "vendor/nesbot/carbon/src/Carbon/Lang/smn.php": "0d90f00d340dcef0dcc811a09540c310", + "vendor/nesbot/carbon/src/Carbon/Lang/sn.php": "9a34de688fb1a37a9db1b4da71c020c4", + "vendor/nesbot/carbon/src/Carbon/Lang/so.php": "a5d065f11d335a8eb623a2e8eeadcf55", + "vendor/nesbot/carbon/src/Carbon/Lang/so_DJ.php": "909eb9668c883c97f8ed035334e0e6d8", + "vendor/nesbot/carbon/src/Carbon/Lang/so_ET.php": "d4f40aaa213e8d5af31414ea58f88cd5", + "vendor/nesbot/carbon/src/Carbon/Lang/so_KE.php": "d4f40aaa213e8d5af31414ea58f88cd5", + "vendor/nesbot/carbon/src/Carbon/Lang/so_SO.php": "d4f40aaa213e8d5af31414ea58f88cd5", + "vendor/nesbot/carbon/src/Carbon/Lang/sq.php": "c579c4d7a54d8d1a6954bb8d4542e901", + "vendor/nesbot/carbon/src/Carbon/Lang/sq_AL.php": "3d89a072312887c58cd2f6bfe40f1a40", + "vendor/nesbot/carbon/src/Carbon/Lang/sq_MK.php": "45bd17c380cfaa8b586aa0b91790d1c2", + "vendor/nesbot/carbon/src/Carbon/Lang/sq_XK.php": "45bd17c380cfaa8b586aa0b91790d1c2", + "vendor/nesbot/carbon/src/Carbon/Lang/sr.php": "e5db72072e9b772e2165bf786da28ab3", + "vendor/nesbot/carbon/src/Carbon/Lang/sr_Cyrl.php": "09009a63290ceff2b80fc90a3c62c99a", + "vendor/nesbot/carbon/src/Carbon/Lang/sr_Cyrl_BA.php": "ee53d53a4054edbf0126737388b5af46", + "vendor/nesbot/carbon/src/Carbon/Lang/sr_Cyrl_ME.php": "345ea727f79d213df1a27fd18b24535c", + "vendor/nesbot/carbon/src/Carbon/Lang/sr_Cyrl_XK.php": "97309d0dab6da4386bec448b959569ce", + "vendor/nesbot/carbon/src/Carbon/Lang/sr_Latn.php": "9f07691b2d53a54d66f7be97d0362f61", + "vendor/nesbot/carbon/src/Carbon/Lang/sr_Latn_BA.php": "fb174429d4bbc4380f81f0edbe1c8778", + "vendor/nesbot/carbon/src/Carbon/Lang/sr_Latn_ME.php": "3a34a5947c09856501f129e4b676689e", + "vendor/nesbot/carbon/src/Carbon/Lang/sr_Latn_XK.php": "7b55dc027d36b71f5b4704a083bdf7aa", + "vendor/nesbot/carbon/src/Carbon/Lang/sr_ME.php": "79b2a3e9ee2ae9451f02ed4f9e1bc9c8", + "vendor/nesbot/carbon/src/Carbon/Lang/sr_RS.php": "da173c9f242e8b9fda41769e8b1f3173", + "vendor/nesbot/carbon/src/Carbon/Lang/sr_RS@latin.php": "9f07691b2d53a54d66f7be97d0362f61", + "vendor/nesbot/carbon/src/Carbon/Lang/ss.php": "4a2b4fec545fdfa527d1111cbc4794c0", + "vendor/nesbot/carbon/src/Carbon/Lang/ss_ZA.php": "901dce42d3f36e4c9cdb8c7788e18255", + "vendor/nesbot/carbon/src/Carbon/Lang/st.php": "1b7d1838239e27f76ddec76c73a7e732", + "vendor/nesbot/carbon/src/Carbon/Lang/st_ZA.php": "b48d6e94596bfe99e155c2cee67ff13c", + "vendor/nesbot/carbon/src/Carbon/Lang/sv.php": "4729365ca24a434e86a15819d6357e6c", + "vendor/nesbot/carbon/src/Carbon/Lang/sv_AX.php": "beb991ec20b1b47c8c48031b7e9017d6", + "vendor/nesbot/carbon/src/Carbon/Lang/sv_FI.php": "b886046b473fc0c5b2b812ad3648ac6f", + "vendor/nesbot/carbon/src/Carbon/Lang/sv_SE.php": "b886046b473fc0c5b2b812ad3648ac6f", + "vendor/nesbot/carbon/src/Carbon/Lang/sw.php": "8af5e10f2a3a729a41de3ab9804c3309", + "vendor/nesbot/carbon/src/Carbon/Lang/sw_CD.php": "54996a286aae30e46179c835b33eeca4", + "vendor/nesbot/carbon/src/Carbon/Lang/sw_KE.php": "d08e7fad2cc0573383a0fb39ee375be0", + "vendor/nesbot/carbon/src/Carbon/Lang/sw_TZ.php": "8bcf077d03ff86a77dc6e4fd02f73e14", + "vendor/nesbot/carbon/src/Carbon/Lang/sw_UG.php": "54996a286aae30e46179c835b33eeca4", + "vendor/nesbot/carbon/src/Carbon/Lang/szl.php": "6270d4743d39a4020016a2b4d09e9495", + "vendor/nesbot/carbon/src/Carbon/Lang/szl_PL.php": "8d7df4e4c74f753142a0f92e279ee3b6", + "vendor/nesbot/carbon/src/Carbon/Lang/ta.php": "590fc70d051e1b76795985c59c676ae6", + "vendor/nesbot/carbon/src/Carbon/Lang/ta_IN.php": "d8f059b5c003fdd10c8397edf0c0dd91", + "vendor/nesbot/carbon/src/Carbon/Lang/ta_LK.php": "02dbbcc81aea615054173246ee8f47b3", + "vendor/nesbot/carbon/src/Carbon/Lang/ta_MY.php": "892857bc1ebb6db9b43dc06d1884c118", + "vendor/nesbot/carbon/src/Carbon/Lang/ta_SG.php": "1ff5cf3ad4d0401c27c5618eb3852095", + "vendor/nesbot/carbon/src/Carbon/Lang/tcy.php": "0d1c3ce780aa1ccd18fe00c7eafdc478", + "vendor/nesbot/carbon/src/Carbon/Lang/tcy_IN.php": "25e55014978b7f1a8b4e2872c405f2f5", + "vendor/nesbot/carbon/src/Carbon/Lang/te.php": "c2c376bac0e8b39f7dc19faf203b5537", + "vendor/nesbot/carbon/src/Carbon/Lang/te_IN.php": "66dc457ea30995304f63d464848e3259", + "vendor/nesbot/carbon/src/Carbon/Lang/teo.php": "18c366534b54af976db83b80f99078d4", + "vendor/nesbot/carbon/src/Carbon/Lang/teo_KE.php": "b6d153953ed3b42b230116db2576f6dc", + "vendor/nesbot/carbon/src/Carbon/Lang/tet.php": "e9e70c09aa61e280810f3c3cb464cb37", + "vendor/nesbot/carbon/src/Carbon/Lang/tg.php": "592722d838a532c07c6672c02e8f4cce", + "vendor/nesbot/carbon/src/Carbon/Lang/tg_TJ.php": "42aaac4c3d2f9e004a6e8416bf541cfc", + "vendor/nesbot/carbon/src/Carbon/Lang/th.php": "563dc6737833b6e52f4f737fae2764a6", + "vendor/nesbot/carbon/src/Carbon/Lang/th_TH.php": "319c00010afdfc124dfd3f1bc590f7c1", + "vendor/nesbot/carbon/src/Carbon/Lang/the.php": "d68de3e8954412267f8a2d88cde895d3", + "vendor/nesbot/carbon/src/Carbon/Lang/the_NP.php": "3c503baadb4f085f9c89626df11f67ac", + "vendor/nesbot/carbon/src/Carbon/Lang/ti.php": "7592a32fe6642097bb2875450153aed5", + "vendor/nesbot/carbon/src/Carbon/Lang/ti_ER.php": "09c97a17984dcd590b08e2c1594aa008", + "vendor/nesbot/carbon/src/Carbon/Lang/ti_ET.php": "ad290036527a16c08b7c4e000ec45bce", + "vendor/nesbot/carbon/src/Carbon/Lang/tig.php": "160092423d69eb4a45db6fdca4b724cf", + "vendor/nesbot/carbon/src/Carbon/Lang/tig_ER.php": "c657992d0034a25d94d91a0abb265671", + "vendor/nesbot/carbon/src/Carbon/Lang/tk.php": "0a1ce255195e4f0c493c372efbf13649", + "vendor/nesbot/carbon/src/Carbon/Lang/tk_TM.php": "0bcc46301495da5d406bd572d9ee3507", + "vendor/nesbot/carbon/src/Carbon/Lang/tl.php": "3617ed6e5cc434ec6192716df29317e6", + "vendor/nesbot/carbon/src/Carbon/Lang/tl_PH.php": "4f2f7137fed8be740f622ccd5cef20dd", + "vendor/nesbot/carbon/src/Carbon/Lang/tlh.php": "045ee59c72437ab84b7ec9675b0b0a15", + "vendor/nesbot/carbon/src/Carbon/Lang/tn.php": "86caf58c4b2df232a6e4fe261b09a42b", + "vendor/nesbot/carbon/src/Carbon/Lang/tn_ZA.php": "e3077c5eda23be6e65c2a80d6b786661", + "vendor/nesbot/carbon/src/Carbon/Lang/to.php": "012f71a7dc31f2bf054814eb17695720", + "vendor/nesbot/carbon/src/Carbon/Lang/to_TO.php": "28eba2ec93fa62bfd3878a5e86e50bb4", + "vendor/nesbot/carbon/src/Carbon/Lang/tpi.php": "178630bc81edef3e9980c0e31177d228", + "vendor/nesbot/carbon/src/Carbon/Lang/tpi_PG.php": "6ca9262140492ed46ab8551bf96c45c7", + "vendor/nesbot/carbon/src/Carbon/Lang/tr.php": "3838ab0cc0a3fa69f43bea94cbe727f8", + "vendor/nesbot/carbon/src/Carbon/Lang/tr_CY.php": "cd71caf40ef4d604bdaf2bcc88ef77df", + "vendor/nesbot/carbon/src/Carbon/Lang/tr_TR.php": "01bf1a0646004c056bde030236ced238", + "vendor/nesbot/carbon/src/Carbon/Lang/ts.php": "48bbedfb9023a896bfd3bce2fad5a867", + "vendor/nesbot/carbon/src/Carbon/Lang/ts_ZA.php": "85a12eef5b6a930edfb68cbdaf986ac4", + "vendor/nesbot/carbon/src/Carbon/Lang/tt.php": "1ef54796277c11d977b306153a26e2b6", + "vendor/nesbot/carbon/src/Carbon/Lang/tt_RU.php": "aae0ebc11e50263a58fcde954f468303", + "vendor/nesbot/carbon/src/Carbon/Lang/tt_RU@iqtelif.php": "f51f170e8a8ddffdeac1b2e0416f7469", + "vendor/nesbot/carbon/src/Carbon/Lang/twq.php": "84f44e0c3d1e514dc2ac39a02cd2b1e6", + "vendor/nesbot/carbon/src/Carbon/Lang/tzl.php": "9b1b746c1a87eff3d051583d0f4c5ca0", + "vendor/nesbot/carbon/src/Carbon/Lang/tzm.php": "6117239ef3be81757b1f8f126e928099", + "vendor/nesbot/carbon/src/Carbon/Lang/tzm_Latn.php": "d1bd64b25dd1268ec23517b25b945cc5", + "vendor/nesbot/carbon/src/Carbon/Lang/ug.php": "68ea04d90e55e22f67350795d5a15d78", + "vendor/nesbot/carbon/src/Carbon/Lang/ug_CN.php": "2e954699757fb8a29138fae0b105e29a", + "vendor/nesbot/carbon/src/Carbon/Lang/uk.php": "0ca3326970a3fc4c68fb69e965198e3d", + "vendor/nesbot/carbon/src/Carbon/Lang/uk_UA.php": "d4cb9ae18b5ed5cf250c6c0ca9b2e1a0", + "vendor/nesbot/carbon/src/Carbon/Lang/unm.php": "f10e33f75135d00b4791b14b39d564bc", + "vendor/nesbot/carbon/src/Carbon/Lang/unm_US.php": "e7c8b1e413c7f55e65f1581f5c9a2acc", + "vendor/nesbot/carbon/src/Carbon/Lang/ur.php": "40b1f18eaed04d70f8b5b507a0a803bd", + "vendor/nesbot/carbon/src/Carbon/Lang/ur_IN.php": "113d19838c6d144905d7a192a9dc67da", + "vendor/nesbot/carbon/src/Carbon/Lang/ur_PK.php": "cbc8283bff7b92dfb72530c4a749fc4f", + "vendor/nesbot/carbon/src/Carbon/Lang/uz.php": "5c33aa7abdd9bcfb659709fd096ff468", + "vendor/nesbot/carbon/src/Carbon/Lang/uz_Arab.php": "366d3f68b29102ede7978a71b8ce1b37", + "vendor/nesbot/carbon/src/Carbon/Lang/uz_Cyrl.php": "16a51c626070aa45043b948b8b32a3b0", + "vendor/nesbot/carbon/src/Carbon/Lang/uz_Latn.php": "e12d22ae63228070b528c072c45ce54d", + "vendor/nesbot/carbon/src/Carbon/Lang/uz_UZ.php": "2928e013856d45fb608a317bfd789eff", + "vendor/nesbot/carbon/src/Carbon/Lang/uz_UZ@cyrillic.php": "ad1141458d60c77fe847d7e360d4613c", + "vendor/nesbot/carbon/src/Carbon/Lang/vai.php": "f625b3669fad25aa1a4b672138e6fa33", + "vendor/nesbot/carbon/src/Carbon/Lang/vai_Latn.php": "0c2ab4696a5ebac150a22d076d05f1fc", + "vendor/nesbot/carbon/src/Carbon/Lang/vai_Vaii.php": "0be69144cac86c84d0c314df84203ccc", + "vendor/nesbot/carbon/src/Carbon/Lang/ve.php": "d419a3eb9494ae35d9f3f94429d0374a", + "vendor/nesbot/carbon/src/Carbon/Lang/ve_ZA.php": "82f7a10bbf50fbf63e6aaf4b3791e370", + "vendor/nesbot/carbon/src/Carbon/Lang/vi.php": "b6b3a40749815916b3fdf5ef6c8509da", + "vendor/nesbot/carbon/src/Carbon/Lang/vi_VN.php": "834415b6615592da98401d189ba6c68c", + "vendor/nesbot/carbon/src/Carbon/Lang/vo.php": "7e079e4f8a820bb110e13fd3543c8c4c", + "vendor/nesbot/carbon/src/Carbon/Lang/vun.php": "1c5c1f1841568e548086df1c6bb0fa8a", + "vendor/nesbot/carbon/src/Carbon/Lang/wa.php": "3ba79e6c3b768e76c525259cbc8ff97d", + "vendor/nesbot/carbon/src/Carbon/Lang/wa_BE.php": "aa137b1e45ce9afd2a6f9e5a37fe7fd1", + "vendor/nesbot/carbon/src/Carbon/Lang/wae.php": "15f175920f52f75c7932bfe700cfec4f", + "vendor/nesbot/carbon/src/Carbon/Lang/wae_CH.php": "b73fe486f9812e5279e9bf6322016363", + "vendor/nesbot/carbon/src/Carbon/Lang/wal.php": "f705f390dba04e370c3a9441b5aa81b0", + "vendor/nesbot/carbon/src/Carbon/Lang/wal_ET.php": "ea3adba7634eb71bdace20ba223314c7", + "vendor/nesbot/carbon/src/Carbon/Lang/wo.php": "e474b7ce92a61d7beb8e924223bbcc7e", + "vendor/nesbot/carbon/src/Carbon/Lang/wo_SN.php": "9ab706a565ae96d9ec5d7f498a27bfd6", + "vendor/nesbot/carbon/src/Carbon/Lang/xh.php": "270923d94866e948ee6009a480543173", + "vendor/nesbot/carbon/src/Carbon/Lang/xh_ZA.php": "8f48a590750658233268129e87b31487", + "vendor/nesbot/carbon/src/Carbon/Lang/xog.php": "83e8b2e260ab684201863084a611b7e3", + "vendor/nesbot/carbon/src/Carbon/Lang/yav.php": "e3c40894f77a0f90b8a49f7e3cfe9dbc", + "vendor/nesbot/carbon/src/Carbon/Lang/yi.php": "3f03562edcf7e3745760d909f734a42b", + "vendor/nesbot/carbon/src/Carbon/Lang/yi_US.php": "94b6d666c2aabba52930ffc07c241ada", + "vendor/nesbot/carbon/src/Carbon/Lang/yo.php": "186b6c440b44f33064c4bfc0943d68fc", + "vendor/nesbot/carbon/src/Carbon/Lang/yo_BJ.php": "f91426b974b544ad5e1588e636493440", + "vendor/nesbot/carbon/src/Carbon/Lang/yo_NG.php": "e6e1e5cb6d3f4a2f6e39456952159864", + "vendor/nesbot/carbon/src/Carbon/Lang/yue.php": "ff41f95f8007b0961eb9f07ae31add6c", + "vendor/nesbot/carbon/src/Carbon/Lang/yue_HK.php": "427f568bf7430f3a7fb557470dd1d67e", + "vendor/nesbot/carbon/src/Carbon/Lang/yue_Hans.php": "38f768b92f273d54348210af42fa2b57", + "vendor/nesbot/carbon/src/Carbon/Lang/yue_Hant.php": "1c477039043750d95363a27f60a97225", + "vendor/nesbot/carbon/src/Carbon/Lang/yuw.php": "ebfb3ba1f25e64b96def7135b0b5a712", + "vendor/nesbot/carbon/src/Carbon/Lang/yuw_PG.php": "98882f0d5daa7a19431b569cd2505abd", + "vendor/nesbot/carbon/src/Carbon/Lang/zgh.php": "b5594acfaa5a1c8af1b8d598388f9c08", + "vendor/nesbot/carbon/src/Carbon/Lang/zh.php": "d63330a9794e5a50dfc06cae6590fc15", + "vendor/nesbot/carbon/src/Carbon/Lang/zh_CN.php": "15a75c1a4b5d245ae371e88ed0446683", + "vendor/nesbot/carbon/src/Carbon/Lang/zh_HK.php": "c8df1aeeaf2ec5a135ec76ffd374c1a4", + "vendor/nesbot/carbon/src/Carbon/Lang/zh_Hans.php": "0f9a20de54ccafae86c215baa897fb8f", + "vendor/nesbot/carbon/src/Carbon/Lang/zh_Hans_HK.php": "38f768b92f273d54348210af42fa2b57", + "vendor/nesbot/carbon/src/Carbon/Lang/zh_Hans_MO.php": "38f768b92f273d54348210af42fa2b57", + "vendor/nesbot/carbon/src/Carbon/Lang/zh_Hans_SG.php": "38f768b92f273d54348210af42fa2b57", + "vendor/nesbot/carbon/src/Carbon/Lang/zh_Hant.php": "2284f714efd014d8726126ac3b298c1f", + "vendor/nesbot/carbon/src/Carbon/Lang/zh_Hant_HK.php": "1c477039043750d95363a27f60a97225", + "vendor/nesbot/carbon/src/Carbon/Lang/zh_Hant_MO.php": "1c477039043750d95363a27f60a97225", + "vendor/nesbot/carbon/src/Carbon/Lang/zh_Hant_TW.php": "1c477039043750d95363a27f60a97225", + "vendor/nesbot/carbon/src/Carbon/Lang/zh_MO.php": "bd13cffef4928eb9e157e3d56b8f48a5", + "vendor/nesbot/carbon/src/Carbon/Lang/zh_SG.php": "8a3fe67051774a3d0797f1ae106884ca", + "vendor/nesbot/carbon/src/Carbon/Lang/zh_TW.php": "1a5b4239feacce8829a295e49833097d", + "vendor/nesbot/carbon/src/Carbon/Lang/zh_YUE.php": "a925e6ca8e757f98aa8df84ea9f21eee", + "vendor/nesbot/carbon/src/Carbon/Lang/zu.php": "f69b6456fbcf351777c77cad4c779b16", + "vendor/nesbot/carbon/src/Carbon/Lang/zu_ZA.php": "09f2f0a2044fc60b8325b350cf9de218", + "vendor/nesbot/carbon/src/Carbon/Language.php": "5b716d8b25d6da8df1b18d01587d80a6", + "vendor/nesbot/carbon/src/Carbon/Laravel/ServiceProvider.php": "66afaa55bcbf162c5d78daa2a6b10174", + "vendor/nesbot/carbon/src/Carbon/List/languages.php": "e3f75ede013280b9b2923e53b1fda952", + "vendor/nesbot/carbon/src/Carbon/List/regions.php": "8af212eb9fbe67f0195908ae046d6692", + "vendor/nesbot/carbon/src/Carbon/MessageFormatter/MessageFormatterMapper.php": "f54d9b08c58b7d94d688a86084f9e1ed", + "vendor/nesbot/carbon/src/Carbon/PHPStan/AbstractMacro.php": "516743b04ae5e5b59a977025647b9113", + "vendor/nesbot/carbon/src/Carbon/PHPStan/Macro.php": "9a96eb276a818849d6830e1608e34a3f", + "vendor/nesbot/carbon/src/Carbon/PHPStan/MacroExtension.php": "afc4c6d0caa27d04dc6ea90a345b30c5", + "vendor/nesbot/carbon/src/Carbon/PHPStan/MacroScanner.php": "d4e3937ad7ff1c5743ec460d9ca4526c", + "vendor/nesbot/carbon/src/Carbon/Traits/Boundaries.php": "716289153c5770722426a18821d3ed82", + "vendor/nesbot/carbon/src/Carbon/Traits/Cast.php": "e39f19df2790b7b7eb0644c20c0cfe39", + "vendor/nesbot/carbon/src/Carbon/Traits/Comparison.php": "aef1ad0f5e78db2a0b864b86f70bbc04", + "vendor/nesbot/carbon/src/Carbon/Traits/Converter.php": "9ce85b59bcfbe4fbcf99bb0639332615", + "vendor/nesbot/carbon/src/Carbon/Traits/Creator.php": "5caf8f04fb4b65e6a93a889d5b8772cd", + "vendor/nesbot/carbon/src/Carbon/Traits/Date.php": "186ff16c9b2d6ef444c2bded64dcd0c3", + "vendor/nesbot/carbon/src/Carbon/Traits/DeprecatedProperties.php": "c818ab090e06a276ac74af3c1d107869", + "vendor/nesbot/carbon/src/Carbon/Traits/Difference.php": "58fbb73e5ddca77ec8ed6a8e1245d1e4", + "vendor/nesbot/carbon/src/Carbon/Traits/IntervalRounding.php": "8a79caa140ca0acca9e930bee95fc33a", + "vendor/nesbot/carbon/src/Carbon/Traits/IntervalStep.php": "5cbd87c7f42cfb634b7a0447b5b28c83", + "vendor/nesbot/carbon/src/Carbon/Traits/Localization.php": "1af252faae2423f2460eab7bd37f3b29", + "vendor/nesbot/carbon/src/Carbon/Traits/Macro.php": "e4cdbb3e0b3f14dc49b7b7bb0515ebc9", + "vendor/nesbot/carbon/src/Carbon/Traits/MagicParameter.php": "3c9ec1d236f66589b070fed8b0197416", + "vendor/nesbot/carbon/src/Carbon/Traits/Mixin.php": "ae0d815086b620fccced3cee651ee5b8", + "vendor/nesbot/carbon/src/Carbon/Traits/Modifiers.php": "cd2d6f7fb77b2d2a1f9f53c8cbc62ffc", + "vendor/nesbot/carbon/src/Carbon/Traits/Mutability.php": "d0d8a78c542f69d3967583cdd82b3e6d", + "vendor/nesbot/carbon/src/Carbon/Traits/ObjectInitialisation.php": "b29d7ad6cdf96ee42d4069bccd107032", + "vendor/nesbot/carbon/src/Carbon/Traits/Options.php": "00a78bfeb48d376182492ad59f9f5058", + "vendor/nesbot/carbon/src/Carbon/Traits/Rounding.php": "abe0368f94bbee9e3d9654f18ec0cf62", + "vendor/nesbot/carbon/src/Carbon/Traits/Serialization.php": "38437ca3d18f667ed0e7fea21fa0ded4", + "vendor/nesbot/carbon/src/Carbon/Traits/Test.php": "28917bbe97d873260b4c394205b042fa", + "vendor/nesbot/carbon/src/Carbon/Traits/Timestamp.php": "ebb27ae620213924885d753aa63386e2", + "vendor/nesbot/carbon/src/Carbon/Traits/ToStringFormat.php": "97d7717eac830305dd28e70554ce40d8", + "vendor/nesbot/carbon/src/Carbon/Traits/Units.php": "bae45bda252f73b5dd85643f9982fa33", + "vendor/nesbot/carbon/src/Carbon/Traits/Week.php": "a6220f967e23690a4e5a720671029368", + "vendor/nesbot/carbon/src/Carbon/Translator.php": "4cd06f3cfd71d53ad3ad3edb6c4a9bba", + "vendor/nesbot/carbon/src/Carbon/TranslatorImmutable.php": "379648a0b084cd409f9010443e3eb87e", + "vendor/nesbot/carbon/src/Carbon/TranslatorStrongTypeInterface.php": "899fee3e10c841a3508663f499a7ae46", + "vendor/nyholm/psr7/.php-cs-fixer.dist.php": "29e93fe4ff017f58718d12b43c27163d", + "vendor/nyholm/psr7/src/Factory/HttplugFactory.php": "41d385bfe4ff45a3b317a80c94e10dbe", + "vendor/nyholm/psr7/src/Factory/Psr17Factory.php": "85569c8664c30793daa5677b49e8f64c", + "vendor/nyholm/psr7/src/MessageTrait.php": "077136c34ea5ab969f47ebbe4c316d97", + "vendor/nyholm/psr7/src/Request.php": "5c2344bdeb60add69c6d4235135e4b14", + "vendor/nyholm/psr7/src/RequestTrait.php": "e7015f87bd92e881f1f4f7a45557ea7c", + "vendor/nyholm/psr7/src/Response.php": "640167b3f72ee4efaa687dbd826f93b4", + "vendor/nyholm/psr7/src/ServerRequest.php": "22f6df8fbdf5cceae3c89cd6bcb95507", + "vendor/nyholm/psr7/src/Stream.php": "ec3629f79ad3392985b42f7aebacf6d0", + "vendor/nyholm/psr7/src/StreamTrait.php": "dd7dbc6f21600ddf4c664a13409b5326", + "vendor/nyholm/psr7/src/UploadedFile.php": "1f0bd55e647b4ebda9cd323a9d6ece31", + "vendor/nyholm/psr7/src/Uri.php": "36dc4908562177a846ce554e526c44c4", + "vendor/nyholm/psr7-server/src/ServerRequestCreator.php": "0fab8cc95d646539e9fe0b1dea813621", + "vendor/nyholm/psr7-server/src/ServerRequestCreatorInterface.php": "d301f23dec9a8b1cfa23d5de83f2db39", + "vendor/overtrue/socialite/src/Config.php": "4bbb98cda75b6f7ccb01104df9250e05", + "vendor/overtrue/socialite/src/Contracts/FactoryInterface.php": "1eead00747d390d9e16c63984a98b8b8", + "vendor/overtrue/socialite/src/Contracts/ProviderInterface.php": "89be5d633046f8ecba6d0218ce4d40a6", + "vendor/overtrue/socialite/src/Contracts/UserInterface.php": "1e4eff407d023bea6e085b7f6f18e09c", + "vendor/overtrue/socialite/src/Exceptions/AuthorizeFailedException.php": "ab0e50d923aa3dd0b3c27d48ab81f986", + "vendor/overtrue/socialite/src/Exceptions/BadRequestException.php": "5b9d54b9389aaedf342e3468ca37e2e0", + "vendor/overtrue/socialite/src/Exceptions/Exception.php": "38a22acfbd369cce1946e4238d1817bd", + "vendor/overtrue/socialite/src/Exceptions/FeiShu/InvalidTicketException.php": "9bb2af4e4b182f6289fbf4b88d3c966d", + "vendor/overtrue/socialite/src/Exceptions/InvalidArgumentException.php": "870410d4d24e4021abb158992abfb4c4", + "vendor/overtrue/socialite/src/Exceptions/InvalidTokenException.php": "a0290949606ea9b142878ae824d36586", + "vendor/overtrue/socialite/src/Exceptions/MethodDoesNotSupportException.php": "0c6bdc7b6d072981a5901df347777b96", + "vendor/overtrue/socialite/src/Providers/Alipay.php": "117ac25bb3b6f5e4090d6576be0bd044", + "vendor/overtrue/socialite/src/Providers/Azure.php": "b37daa30acd4286f31f0bb244edfe820", + "vendor/overtrue/socialite/src/Providers/Baidu.php": "e527926d91e674dec4f605a93ad41fa7", + "vendor/overtrue/socialite/src/Providers/Base.php": "a27219b44fd684f8b69835a59aa9292a", + "vendor/overtrue/socialite/src/Providers/Coding.php": "14410c7dbde4c9a89e2fa9cce1ee3bd1", + "vendor/overtrue/socialite/src/Providers/DingTalk.php": "bd11951e8e623350b8a9ab0a5ba80aff", + "vendor/overtrue/socialite/src/Providers/DouYin.php": "08cf97b653680a6b3742594d048ccb64", + "vendor/overtrue/socialite/src/Providers/Douban.php": "1cd9b7cddb3ac38e077ee6417ca9edcd", + "vendor/overtrue/socialite/src/Providers/Facebook.php": "c4841d62eaed0e079d3ed6bb3f9437f5", + "vendor/overtrue/socialite/src/Providers/FeiShu.php": "b151006de808205b8563811b69300639", + "vendor/overtrue/socialite/src/Providers/Figma.php": "d8fc35e302b70674d6c280b054699d54", + "vendor/overtrue/socialite/src/Providers/GitHub.php": "e46c9fb25d48ed8185b9a79e71a4419a", + "vendor/overtrue/socialite/src/Providers/Gitee.php": "a9636280c9f16e86a300c4668e54e64d", + "vendor/overtrue/socialite/src/Providers/Google.php": "af136402e9313da9bdd01177346e5634", + "vendor/overtrue/socialite/src/Providers/Lark.php": "09b1f3274e43a25ce7fe3470a9f86a27", + "vendor/overtrue/socialite/src/Providers/Line.php": "45d5328cda61f65c9b671ab694293894", + "vendor/overtrue/socialite/src/Providers/Linkedin.php": "562252a8b8be8fbb856741af25c086da", + "vendor/overtrue/socialite/src/Providers/OpenWeWork.php": "caf141e86e36a0fb0508958d8feaed6e", + "vendor/overtrue/socialite/src/Providers/Outlook.php": "4ab47cbb3073eca9ce31e2e95606c57d", + "vendor/overtrue/socialite/src/Providers/QCloud.php": "379bb827c39bab64af181aa0e336d4a4", + "vendor/overtrue/socialite/src/Providers/QQ.php": "12c57f96bee57b386006e28d0a565f9c", + "vendor/overtrue/socialite/src/Providers/Taobao.php": "c2d4db3304f4514a69d12513b5929186", + "vendor/overtrue/socialite/src/Providers/Tapd.php": "378817b2d16228bc810c8b09cdfe6242", + "vendor/overtrue/socialite/src/Providers/TouTiao.php": "33d1bab6300e6301f056a430e6310e45", + "vendor/overtrue/socialite/src/Providers/WeChat.php": "8d7f804c48040a4bfd4e9a574b01c1d0", + "vendor/overtrue/socialite/src/Providers/WeWork.php": "ce9207b6c86e390c5440ceff7ac75446", + "vendor/overtrue/socialite/src/Providers/Weibo.php": "c25d696b83eebb9d57113f7cf25e3923", + "vendor/overtrue/socialite/src/Providers/XiGua.php": "4e4f277fb11fbe3f12bbcb636169af44", + "vendor/overtrue/socialite/src/SocialiteManager.php": "8243c8b6500ebda76520f7912349f332", + "vendor/overtrue/socialite/src/Traits/HasAttributes.php": "65e23d987449484d01338c2a547f45e4", + "vendor/overtrue/socialite/src/User.php": "1cc963e36b5250948f92f761740d15f3", + "vendor/overtrue/socialite/tests/OAuthTest.php": "9a87197c555a8bff143effc18c99b411", + "vendor/overtrue/socialite/tests/Providers/FeiShuTest.php": "90c504f747a7acef886c0fc2270cf7e0", + "vendor/overtrue/socialite/tests/Providers/WeWorkTest.php": "817c343034ccd9c3550648d5390ec7ad", + "vendor/overtrue/socialite/tests/Providers/WechatTest.php": "d2322dcd6b198f3d3ac8842c05fa89d7", + "vendor/overtrue/socialite/tests/SocialiteManagerTest.php": "e98efab47c9c2975433f451379f1f9cb", + "vendor/overtrue/socialite/tests/UserTest.php": "094a5713ebed8dea358be505d83926ab", + "vendor/php-di/invoker/src/CallableResolver.php": "3faf9173c6fec946e0453a438700aef7", + "vendor/php-di/invoker/src/Exception/InvocationException.php": "8b25d95629fac0b160a37e330f47c041", + "vendor/php-di/invoker/src/Exception/NotCallableException.php": "804072a9854d9a7735c464e6a7e77956", + "vendor/php-di/invoker/src/Exception/NotEnoughParametersException.php": "0c511c40b8716f8da969903471272086", + "vendor/php-di/invoker/src/Invoker.php": "283f4cb735f18b83cd959c499d76191b", + "vendor/php-di/invoker/src/InvokerInterface.php": "5583f8fc3f12dd6033cb1839b3e051bd", + "vendor/php-di/invoker/src/ParameterResolver/AssociativeArrayResolver.php": "d695b7a5b55331359df474f601ade3c3", + "vendor/php-di/invoker/src/ParameterResolver/Container/ParameterNameContainerResolver.php": "d8d3c9301b51f3262edbfe1fa874bb42", + "vendor/php-di/invoker/src/ParameterResolver/Container/TypeHintContainerResolver.php": "c9478009d9059c5fe81f7c038342cf30", + "vendor/php-di/invoker/src/ParameterResolver/DefaultValueResolver.php": "bd4e6ab7c4eb77a3d5c5aefb11df6e9f", + "vendor/php-di/invoker/src/ParameterResolver/NumericArrayResolver.php": "66143c6b5367b54174477c5605c6ee4c", + "vendor/php-di/invoker/src/ParameterResolver/ParameterResolver.php": "a0ec9f469d3c0257def702afe403f155", + "vendor/php-di/invoker/src/ParameterResolver/ResolverChain.php": "9a3298722fa21c0a59f20ab2783c04fd", + "vendor/php-di/invoker/src/ParameterResolver/TypeHintResolver.php": "024e1b78c3543e341643e186261497e7", + "vendor/php-di/invoker/src/Reflection/CallableReflection.php": "93a3de42c7484df8befcb0dc2c064aca", + "vendor/php-di/php-di/.php-cs-fixer.php": "b33d8020a70a6c78a72ef844d7c6c817", + "vendor/php-di/php-di/src/Attribute/Inject.php": "e33871072fc2d3254390bfa81d82f38d", + "vendor/php-di/php-di/src/Attribute/Injectable.php": "b56e2e8045ea6c6e9b96ef34c152bad4", + "vendor/php-di/php-di/src/CompiledContainer.php": "59f13abcde30d64119718f0d8eee3e1e", + "vendor/php-di/php-di/src/Compiler/Compiler.php": "c291bdcd67958d20fb00f576b587c101", + "vendor/php-di/php-di/src/Compiler/ObjectCreationCompiler.php": "3129913d17cb00912fca6397307c74de", + "vendor/php-di/php-di/src/Compiler/RequestedEntryHolder.php": "a1bec26fb794da9d495b63db64adafae", + "vendor/php-di/php-di/src/Compiler/Template.php": "7af080186ee97efb9724808d1f33edee", + "vendor/php-di/php-di/src/Container.php": "41ce225a31cb8f8280409b8cb56024bd", + "vendor/php-di/php-di/src/ContainerBuilder.php": "a565b3a8bc4a5f0033ebb551c0991f5d", + "vendor/php-di/php-di/src/Definition/ArrayDefinition.php": "746850d9c61f1c8cdfe133e0b4490fcd", + "vendor/php-di/php-di/src/Definition/ArrayDefinitionExtension.php": "59170e7db92080c954fc903942a5cc95", + "vendor/php-di/php-di/src/Definition/AutowireDefinition.php": "ac7f4b77a50c445f90d4672796888df2", + "vendor/php-di/php-di/src/Definition/DecoratorDefinition.php": "bff1709d8679eeb46dd9370bf98a3637", + "vendor/php-di/php-di/src/Definition/Definition.php": "2d53c637b26e6412d9dca02581ad4116", + "vendor/php-di/php-di/src/Definition/Dumper/ObjectDefinitionDumper.php": "aefa219dae04837becb00f9ad215db53", + "vendor/php-di/php-di/src/Definition/EnvironmentVariableDefinition.php": "c4e41dec5a96361bec93168cfd440134", + "vendor/php-di/php-di/src/Definition/Exception/InvalidAttribute.php": "59b697acd8e9cf615405098afc690fa9", + "vendor/php-di/php-di/src/Definition/Exception/InvalidDefinition.php": "dedbe9cc22c2f034ac97df99071d4168", + "vendor/php-di/php-di/src/Definition/ExtendsPreviousDefinition.php": "3949729267a5c2925e941f28482a881f", + "vendor/php-di/php-di/src/Definition/FactoryDefinition.php": "0005fb656a797243b1dac9e468bb3c46", + "vendor/php-di/php-di/src/Definition/Helper/AutowireDefinitionHelper.php": "f48e0e3f489c278a4db8580197155e1c", + "vendor/php-di/php-di/src/Definition/Helper/CreateDefinitionHelper.php": "338d3d3f353d13acd8a431bac355dd41", + "vendor/php-di/php-di/src/Definition/Helper/DefinitionHelper.php": "cb7e7c7b98ae6dc1aa0fc75489fdc1c2", + "vendor/php-di/php-di/src/Definition/Helper/FactoryDefinitionHelper.php": "32671cda6dd0110a114241cafc3dac2f", + "vendor/php-di/php-di/src/Definition/InstanceDefinition.php": "2e484f6a9a7914a1383153c20c7b2bf3", + "vendor/php-di/php-di/src/Definition/ObjectDefinition/MethodInjection.php": "d0f2a820de965beaa58ae318f6bb9782", + "vendor/php-di/php-di/src/Definition/ObjectDefinition/PropertyInjection.php": "a76ba29497925c9dde3761d0f20cd306", + "vendor/php-di/php-di/src/Definition/ObjectDefinition.php": "5a282856e9d937f7200883b3dc578783", + "vendor/php-di/php-di/src/Definition/Reference.php": "bd70cad280ae4b35e740ad82b86aa511", + "vendor/php-di/php-di/src/Definition/Resolver/ArrayResolver.php": "a2b901398ece7855b250c6b9db621d9f", + "vendor/php-di/php-di/src/Definition/Resolver/DecoratorResolver.php": "ad76c5e12936be29112d8ed0f7fd850c", + "vendor/php-di/php-di/src/Definition/Resolver/DefinitionResolver.php": "c374bc17c58982a083d28f805b5f9a99", + "vendor/php-di/php-di/src/Definition/Resolver/EnvironmentVariableResolver.php": "ca1320a3a6b565429e8574bde9f97ac6", + "vendor/php-di/php-di/src/Definition/Resolver/FactoryResolver.php": "27d2b373b3b4dbf4198a1aa7a34ad375", + "vendor/php-di/php-di/src/Definition/Resolver/InstanceInjector.php": "04c87ba94059bf7cb641dcf965590e2b", + "vendor/php-di/php-di/src/Definition/Resolver/ObjectCreator.php": "485075a2f1d769f7b4364ff362ec0e2b", + "vendor/php-di/php-di/src/Definition/Resolver/ParameterResolver.php": "e99173636465a26eb6864e3b1cdffeb9", + "vendor/php-di/php-di/src/Definition/Resolver/ResolverDispatcher.php": "e45c13c429016803e5a38ff89533dc06", + "vendor/php-di/php-di/src/Definition/SelfResolvingDefinition.php": "f906a7c24beb7253309c1ed6ca293779", + "vendor/php-di/php-di/src/Definition/Source/AttributeBasedAutowiring.php": "5b7989439baa896c7c229711027fe8e1", + "vendor/php-di/php-di/src/Definition/Source/Autowiring.php": "a181a25ab4579dc151bb26d63e041d56", + "vendor/php-di/php-di/src/Definition/Source/DefinitionArray.php": "ac471d9f8620126b8973635385a9e237", + "vendor/php-di/php-di/src/Definition/Source/DefinitionFile.php": "111d98ca585f293ec6f859fec081bc15", + "vendor/php-di/php-di/src/Definition/Source/DefinitionNormalizer.php": "bfd3b5c5622277e587706553d863dd3b", + "vendor/php-di/php-di/src/Definition/Source/DefinitionSource.php": "0f4192f1a20b239e1f3ca7aa4a2813fb", + "vendor/php-di/php-di/src/Definition/Source/MutableDefinitionSource.php": "5bc4003e9423b24096fe5d1b2865cdae", + "vendor/php-di/php-di/src/Definition/Source/NoAutowiring.php": "f715daefb7737fce8a7c27e2b89477bd", + "vendor/php-di/php-di/src/Definition/Source/ReflectionBasedAutowiring.php": "68b85a8f2170b0cedfa79afe7a4f1656", + "vendor/php-di/php-di/src/Definition/Source/SourceCache.php": "10d82a48471f737218d51481e7a06480", + "vendor/php-di/php-di/src/Definition/Source/SourceChain.php": "119c64a4de3fe4208ba1ac756c4e8f30", + "vendor/php-di/php-di/src/Definition/StringDefinition.php": "6993ed02787658dc7460255a800990cf", + "vendor/php-di/php-di/src/Definition/ValueDefinition.php": "e4374dbd15ffb1d77f489a5d5dcce94a", + "vendor/php-di/php-di/src/DependencyException.php": "1061104f1bc543c7a1ead7746db52c79", + "vendor/php-di/php-di/src/Factory/RequestedEntry.php": "785572dadd0196058d7d79c70f64fad6", + "vendor/php-di/php-di/src/FactoryInterface.php": "a7a4cd9b7514606d592a41b331959f3a", + "vendor/php-di/php-di/src/Invoker/DefinitionParameterResolver.php": "46f42485afa6d5750e55a979ae3e7761", + "vendor/php-di/php-di/src/Invoker/FactoryParameterResolver.php": "3d11eb57cdab178fee6c9d33bc79fbbc", + "vendor/php-di/php-di/src/NotFoundException.php": "ef178eb5928f4c409efde4ea5a938347", + "vendor/php-di/php-di/src/Proxy/ProxyFactory.php": "59a868d300a5c30f78a69e94917d7ea8", + "vendor/php-di/php-di/src/functions.php": "1ec2262b5d8ee83a3e8d6de45734f383", + "vendor/phpoffice/phpspreadsheet/.php-cs-fixer.dist.php": "9d54e2b95e8f62f8568d625d2f55013b", + "vendor/phpoffice/phpspreadsheet/phpstan-conditional.php": "be508b78c0b88d2d773b95d59de1ceca", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/ArrayEnabled.php": "d8c9ffe4b353c221af10cd45b3df54e4", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/BinaryComparison.php": "51233358d899601b5e24a1eb181dc15a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Calculation.php": "11d3f18d4fa81b76b4072aa9c4e887e5", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Category.php": "1637f850746e189f7a30a23bf9cc802c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DAverage.php": "519902bd92d2d40e5670e44feaec64cd", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DCount.php": "a08556c40a76abb67ed9ed7437f5144a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DCountA.php": "1a4591b33682f3440a3be3291a103118", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DGet.php": "4b97abc90031ed7a5e6f478a05c57b47", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DMax.php": "cbd6f48bb3a395abf7a45e0f20cbaeed", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DMin.php": "405947043ce75f3e5291a78b5db8ceb3", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DProduct.php": "c0bc8c500deb2bd20194496873e90e7e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DStDev.php": "f6814661442b850641b589a0dcdf694e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DStDevP.php": "c081455934eac10908ce03b955bab3a6", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DSum.php": "b737fae5d7bb1fa825b416bfb02f905b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DVar.php": "441a91bc2df66d0b8c9c655698a3401f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DVarP.php": "79980d0f100f86fa63f93db34dc23805", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database/DatabaseAbstract.php": "b48ed5be2ea499a29170bcb5a02518ea", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Database.php": "42f5fdc4f4ac14af7202d162b174f9fc", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTime.php": "c12d78a169ceeeaf1c1c5d2c6eaae8a4", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Constants.php": "925501edde309684cbc9902ac1cff2a6", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Current.php": "a22cffabde99298a6eebb442cde64b06", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Date.php": "254141b60dc291e0d8d133722a74ce05", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/DateParts.php": "f32f37c21210f6868a2afb097a168d20", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/DateValue.php": "7122022d883c3a7c2e5c826a734e0b3e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Days.php": "ae287566ad2a648aad2e7088481bbc17", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Days360.php": "af78bc429719a7aca5391444bf80ea7b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Difference.php": "00426d82ba63e70465a7f411b2e930f6", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Helpers.php": "6e12bc9f250830b562f5448b75506526", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Month.php": "1f953d6731591fa153346995eaaa14cf", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/NetworkDays.php": "d172acbdfe8d4904857cae6d1d679b9d", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Time.php": "86c0facc4b9375b3e088289bfbc302a5", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/TimeParts.php": "5976ae9bf3761f7d14376d421625cbd0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/TimeValue.php": "9a3083266c25531d7e1ef4dbb54e81d9", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/Week.php": "f9a79e291960a3edba3c076ef3cf0de5", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/WorkDay.php": "1875dcf67ef58b6721586df13c5e018c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTimeExcel/YearFrac.php": "99f83e65341eceda74badbd3a0131159", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/ArrayArgumentHelper.php": "cf63fddfc51e8c6eb45e68c6cda6ac68", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/ArrayArgumentProcessor.php": "af96de1e451c4800395ad4ab5784695e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/BranchPruner.php": "8327cb1a21badb33be3563b033c0f438", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/CyclicReferenceStack.php": "7bb04104934d86d0708e931faa96f08e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/FormattedNumber.php": "c3bdb607abf43a42d4a46dbdc3240337", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/Logger.php": "655dc5943ed046171b8c2f44a1f21f93", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/Operands/Operand.php": "05c2404467ffa989c05e8934a56e12b5", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/Operands/StructuredReference.php": "434b0fed9092fd78de7f83e755f3c839", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselI.php": "080125801fad69d56567d0c79bc9ba6f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselJ.php": "ca058e1ce4da480f9fa4e6c67f79af42", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselK.php": "3416a4e9ec5bdff10e43ab9deff19ef3", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BesselY.php": "0dc825d90a0dd188c188cd63c096ec54", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/BitWise.php": "c2e82a95f29c9885537d31bf1e3e58b1", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Compare.php": "f47e859a85bda3081c66e245d99fa8bb", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Complex.php": "c0f5c76d2efdcc2bb5a741c68ca14a41", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ComplexFunctions.php": "6af6eb4979443fbdf07ddc4d4897a425", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ComplexOperations.php": "3ba4970bd9def08e60bc67d552d4e535", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Constants.php": "a2d9dad0115f1821a66034e58d712b5b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertBase.php": "56951419d5592f87b752beba1d420d07", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertBinary.php": "91193a30d7e182a228545a1a896f5d82", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertDecimal.php": "80d890bc16bb376b016f27fa8355f190", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertHex.php": "7d64f9d4168e8bb0189ef3c53fc0b516", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertOctal.php": "e8ff8bbbaf605077819238293eed4851", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ConvertUOM.php": "ed1ac074eb530c955ddebef776350286", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/EngineeringValidations.php": "8ffb2cfad5310c7bef8cad180d15f64d", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/Erf.php": "015d3445dc5212ae5972db6afc797055", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering/ErfC.php": "bb2b8bfa3c2aaac7a4f7beaf06d8bf88", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering.php": "d72d2ac1e5e8c0c7f3296f03c91b33d7", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Exception.php": "b95d47d2eec2a53d504cf8cc5ccd1b0f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/ExceptionHandler.php": "71068bfe2882339eccb78f575075ff6a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Amortization.php": "625de827a8f6e1eb66a17653f96cde78", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/CashFlowValidations.php": "7857cf5db24fdad838333164e54e45d6", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/Cumulative.php": "87ec2d983017dd7d44f40d94f1c2722c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/Interest.php": "1637149f06a17e62d67fdc5d7269170e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/InterestAndPrincipal.php": "72148dd20fd9043e65cac463f9e5c04b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic/Payments.php": "90459bf0d1d04ac1e3a5f84c1165f76e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Constant/Periodic.php": "15d795e3ecfb917273c1e0acceb67fd8", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Single.php": "74986fc1460dae0d3c6cf538fa89598f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Variable/NonPeriodic.php": "76c6b151dcac00db96de729b3ddfbbca", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/CashFlow/Variable/Periodic.php": "b976b606c7e408739b1cd8552694c8f0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Constants.php": "0d1f9f73bc683c1623d83c1e43473579", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Coupons.php": "a5ca6d176a7d497d761cd157fc1b139f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Depreciation.php": "98ce7dcfcf2fe4c917f3d6d434f40f7a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Dollar.php": "39a0972097bf91887828956370726d2b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/FinancialValidations.php": "b2dfe46fdad4dfb66f6dc015e41c9043", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Helpers.php": "2fe09bcdb76a1c84f53a7c4a32163cb6", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/InterestRate.php": "b43c2d8d5065532c78a4c9a7b35b60a0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/AccruedInterest.php": "44be037463acb35d516c36b0ceb0a0b3", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/Price.php": "ec596121cd512db65ef5d9b20e81457c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/Rates.php": "dd760a55392e632db26362f50fcbae5c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/SecurityValidations.php": "ba239630f9888d602f24bc018111d53c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/Securities/Yields.php": "4262e2bfb9bb6ea36360a6c38a5fc2de", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial/TreasuryBill.php": "1139aa82561d2154165aa166019d5ab3", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial.php": "7824adcecc3eb98e8af038004fc736d2", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/FormulaParser.php": "999802bbbe377330f5d61929f3f9c489", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/FormulaToken.php": "00dc1a3351b85f616b31be59954b725d", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Functions.php": "aa7a0c51be5c0ef91941a3225da28fc2", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Information/ErrorValue.php": "cad3430d4602e459066f6fc81c317000", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Information/ExcelError.php": "d5e66ef7c68bb9dea5008903614e058a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Information/Value.php": "26ec6268477b37194b3c08f2f02688c8", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Internal/MakeMatrix.php": "cef7be19a5bc40ba0724d11a86b18481", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Internal/WildcardMatch.php": "f7c220e0fc78cf2950ce921aba264d1c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical/Boolean.php": "d6cfa9cb3a355b8b8be3b298f62ad22e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical/Conditional.php": "f234584b5a01f38d47cd603b1e14a984", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical/Operations.php": "cba333f171b2fceaba2dac8dc81da600", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical.php": "7413bf0136ef6096f4d0b80144a1e1a7", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Address.php": "8cc8566fe21a5094fc31b417f6c8cf81", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/ExcelMatch.php": "b3af58ce0711eceee2876f5f1ccee9fd", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Filter.php": "d0d271fa71768c5af5afb1d096e92d5d", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Formula.php": "fc4c0353857e9f08da70ff2d19ddb83a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/HLookup.php": "12ec129f3a20a4b4a02276991b8aff7d", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Helpers.php": "e3d892ec108bab90155e7a20a731981b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Hyperlink.php": "9b3f39c3701bda85ae1e176872b06218", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Indirect.php": "3f4cc4a921fa90df93101e0cf5072945", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Lookup.php": "466e5794ece51d45936724c89b0cf510", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/LookupBase.php": "1f750d7addcea5109401e39e66f5ebce", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/LookupRefValidations.php": "c5ceb360ac93953bf0a07c5d86f6c22e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Matrix.php": "fa66e35f24bce4a5e9e4d699ca831273", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Offset.php": "188b88cf031473e7972a592fa122842a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/RowColumnInformation.php": "4c9d235f404f3aa1dbd8744fc005676a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Selection.php": "90b859f705468fa6002cc1f082d7cfdd", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Sort.php": "d8188d91efa8351b50cfd78f4ae2e489", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/Unique.php": "29adfda6e408e1639c6edc0c5d35589b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef/VLookup.php": "b7068706adedbd909f84404fd2c4edba", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef.php": "eba0a56165ae2e8deb9ec1fd10cb0f71", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Absolute.php": "4928af091641f249ac87a65197d6552a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Angle.php": "23ba9ae758e023954f94f47f13d9605f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Arabic.php": "06e7e94cd18b3cc313d0a412fb46e2d6", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Base.php": "8d2b4887aff853d5a71bffbfecaefded", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Ceiling.php": "6273250af117d3da38ae9916dbc4782a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Combinations.php": "6940cc62e80b85c5eeed87ec4529624a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Exp.php": "43ef0df0a982f448023fa63783370ef4", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Factorial.php": "bdbe82f204f6bb5d5c11cf11e5fcb8b2", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Floor.php": "7d3361588126b110f4b30e19c5df9e55", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Gcd.php": "a18de5bddb40a14a2c6653086e5b335c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Helpers.php": "24d52d9846a05a299e3a9cb798e100c7", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/IntClass.php": "7b4d7d541410880ecca7648718232371", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Lcm.php": "081c229303048680720e68985f12443b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Logarithms.php": "236ed78ac5f340ebdc35c8b61adb8a94", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/MatrixFunctions.php": "89f8ac215e899fa0604b5467514ba66e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Operations.php": "49f94dc96696c4ff0353cfe835c92840", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Random.php": "eeea0b5265b4e6d13c7815480db38268", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Roman.php": "86d1cdfdc67f1bd51df1d03461c686d0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Round.php": "31748dbfee3a21837f75d409ce569003", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/SeriesSum.php": "7f268defc69aec74457c88310a8441d0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Sign.php": "f0857aab4a6749a94dc6accbf881631a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Sqrt.php": "d9ddb65e39d1f8d9639bb2b5531f9364", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Subtotal.php": "cb151248f9f730bafe83d48aadc3e91d", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Sum.php": "699656417552afdf4166c075cd43548e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/SumSquares.php": "32105e9af4dff6aaec5ffbd085c90ac7", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Cosecant.php": "fb65a5bdfc965b7814d2658d9ec4e9ee", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Cosine.php": "13b6c0e8daaf65afad45c0325654a1f3", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Cotangent.php": "795781400a18e2797ff3b6417cbdd322", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Secant.php": "10182741655ec92d68505a5648aab037", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Sine.php": "6c346ad692201d4f84680860f8c2e458", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trig/Tangent.php": "4bfabfc8c0ca96af1f76a99848d98f66", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Trunc.php": "9619dfa080e594b9ea7ba6caee834d47", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig.php": "93c6f68f94c7a70db73ebcd7377577d8", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/AggregateBase.php": "3b08a6b37e373234398191da98d2a53d", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Averages/Mean.php": "97e6bb36db03bbe8d2a7b87414a0ae8a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Averages.php": "8ba44fda68fab17a68ae6d06aa69c968", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Conditional.php": "37e896f4605943df331497cbfad2ed61", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Confidence.php": "6db51a0ef159885059fa57de272f7b23", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Counts.php": "98265c5318fc9cef2b60c5bb8821e45e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Deviations.php": "0543acfbab8884205a8ea27f7bfad586", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Beta.php": "909babab0d13eae5410a946e42691486", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Binomial.php": "3e9508c6177440cb6b30c4c2520c229d", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/ChiSquared.php": "81c9f209ebc5df360d9a3ae4ad7703e0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/DistributionValidations.php": "942a52896fe4dbc63aa6209f557573fa", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Exponential.php": "a1c1fd21aecb40fda4fffc02cb68f00c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/F.php": "5cee0a5460bdeee1f3703a6246e37f97", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Fisher.php": "7e168a4c7965fe04ad746425d6b68c87", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Gamma.php": "ac35b5f989368110f418d54fa2e65242", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/GammaBase.php": "2d75c5f9ca9ef657095a32819f7ab202", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/HyperGeometric.php": "78b224dbb11cc80f2037611f113fe8bb", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/LogNormal.php": "8b631fb1109e4d04f66a36cd743c219e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/NewtonRaphson.php": "cdb1a200d6065118a1e8af776480501f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Normal.php": "62916b0548038478d79cbaacf7b04975", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Poisson.php": "5fa327600886f0e8f1feb641526d43ea", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/StandardNormal.php": "521196d0b220692c54f09e4b04084cdf", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/StudentT.php": "1c2db2a6fc1b0939fc955ae7cd0c565a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/Weibull.php": "0ee6f13a82999f72036c8827b694854a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/MaxMinBase.php": "b35583115c85805fc528b66683a551bf", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Maximum.php": "fc00dedff28e97978c7b4543fdc4b053", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Minimum.php": "6c7749ce4a6883008d4841217307bb20", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Percentiles.php": "68028a345804a837461e4767eea03880", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Permutations.php": "bc4fd5a92abb67c15dac9e51d852888e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Size.php": "6e0be630661f10f12a8e1aad40146cf0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/StandardDeviations.php": "f9f83d82746e5217a831942f82f232d0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Standardize.php": "a50b1f9dd46ce578f13c5a9f9aedce9f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/StatisticalValidations.php": "30f9db87b37c7225bfc118f0b5073fcf", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Trends.php": "637243c2dceb50328937e6d3f0d05076", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/VarianceBase.php": "8b10863f6c9d9751b448593cddd50b46", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Variances.php": "ba2a635a30972332748e8c57f45e9c07", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical.php": "234960ee12968073bd8643ce64d29c23", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/CaseConvert.php": "acd8e956e6acce8b83e796a43b194834", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/CharacterConvert.php": "ce50fe5858cfba27c53a5dc4efb797db", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Concatenate.php": "5a7e402dbc8a7f4b50fbb1ddd8b8b805", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Extract.php": "9b88b2211c79ed5511a8c87aa4eed291", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Format.php": "4c50169fa926df9f6e1ba302f214ad95", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Helpers.php": "69f90116393ae8689600da5c0733d8c8", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Replace.php": "ad73ca8dd3f2217cfacf8b787336714c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Search.php": "05a7113470e089132a47b3c3c72127a2", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Text.php": "44fbf24b318a590634d91e5deee0114a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData/Trim.php": "e1b490896d081e3489482a037e309e2e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData.php": "004c3a9ba03817c0de83af1cff82dd1d", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Token/Stack.php": "f87af4cbcc3a0428b9c46895967f456e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Web/Service.php": "bbe548b6cde46a22bf3766a0d5fb50ba", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Web.php": "ee7b59cddd1cf788910c3f3d5c69dca8", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/AddressHelper.php": "739fc0b9de47d89d3c4ce2445b2a02f2", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/AddressRange.php": "c4d8ad5d5c8ed68a0baa11d89104aa11", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/AdvancedValueBinder.php": "88963bb213a43221ee3999ab97aefacb", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Cell.php": "e01938fa7e1794c3d3a063f9103d5fa1", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/CellAddress.php": "f7297119206b61b78aa301f0390e8e02", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/CellRange.php": "dd4488344a56fc2abfc95cf371ca55a1", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/ColumnRange.php": "dd431e66315b1c5158edf5d45d9e25f4", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php": "2f4e41cbc953852f207c5c493b19b87b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DataType.php": "e0c96a4769c8ddec1f379af89409864f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DataValidation.php": "9ff00ab0dfb56efdf997a366607240f1", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DataValidator.php": "42854328772388213bb0ce990692c699", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/DefaultValueBinder.php": "bb58efac3293c0dae5d39fc38346b1c4", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Hyperlink.php": "6d67b5c222d19f0d94d062a395783007", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/IValueBinder.php": "756ac3f47e09bc6f1e6f75d6139d8d2f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/RowRange.php": "f6efac5fe6204f78a08a71e4518e8b94", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/StringValueBinder.php": "5decfaacafa03810f6bd23cd266fc943", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/CellReferenceHelper.php": "83f909ba08e3eb4c2cb8e50f02efd8a2", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Axis.php": "16143e0c849b821cb0a562262c24e82f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Chart.php": "8ba362008f4442c6155ec071dac7a9b7", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/ChartColor.php": "639ff70f3de4833eecbe9efdaa3d8b21", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/DataSeries.php": "e24e25b8b8ef75c947778ac1f9d509eb", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/DataSeriesValues.php": "b351a06aebf7fa05b44cfaf5c822fbd6", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Exception.php": "01882bfdece5d457ec586aa0f8ee3df2", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/GridLines.php": "7f99179c4741f929c246d625303eb65a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Layout.php": "75dffd8d4c90dbfb1a90c55d6d177821", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Legend.php": "d66b69d3accd7410cc5e52e62a4ce2fa", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/PlotArea.php": "7612c910ecfa074fb7cdc181de7dd475", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Properties.php": "01b6a8d1e893aef7814d93c84615becc", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/IRenderer.php": "101743783a852329d96d9c21036debd6", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/JpGraph.php": "a2fc4a7439dc04cea2ed724c23b4c35a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/JpGraphRendererBase.php": "93202e568d3481d67603b14f5231d5c0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Renderer/MtJpGraphRenderer.php": "0e5bcaecf70f23737d0fe008d89d49ec", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/Title.php": "690e022d5253af6d72375ff28bec0de3", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/TrendLine.php": "bfff350cce385febec81f6f899ce0b01", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Cells.php": "556109ccc532459f51450e9119417de7", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/CellsFactory.php": "4a3d72f56e5ba9fb64c968d4c7a01369", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Memory/SimpleCache1.php": "757090e881f371d49a6f0d49721ab0cf", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Memory/SimpleCache3.php": "605c2afc6654df758bc89854a07b00f9", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Comment.php": "4a28b19abd699a895591c465c6bbb4ae", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/DefinedName.php": "79a78c94f223ee35e91bb0150897ea21", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Properties.php": "9ad24c4fde7b450e6a6060316a03446e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Security.php": "662fd7fff38e4f2e60301cc01a3223c8", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Exception.php": "03f1a33e2f9eeb3d1cd56bb174862633", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/HashTable.php": "4763b3fe27ea1af5542bb5e141697a9c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Dimension.php": "83017fefbfe417786b6a059f851d329a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Html.php": "7a119f1cab1edf582ef1f1c2dc3903ea", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Sample.php": "0d0b2d2ba439348ee74f7b4bb127399e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Size.php": "cd7e3b2ba0b319d6c645d10bd9b3da11", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/TextGrid.php": "385e6dbae50956c26f0577e82669bc49", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IComparable.php": "5be0f7e23e559a4791b288e2c4509fe4", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IOFactory.php": "b25d71572f9356dd8ac1008fce4a4026", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/NamedFormula.php": "fa267cb545be51c5b43d3301ac14fc0f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/NamedRange.php": "4489583b7719c78148cc9f21254f32f6", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/BaseReader.php": "5557a270449eb7b577bedf4e1389e81f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Csv/Delimiter.php": "917822270c2c3d34aabdde782de66f54", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Csv.php": "096ba0a62b4b8b80cf273c00d321ac9c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/DefaultReadFilter.php": "e510c41613d4ec00b30447216f82b6ba", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Exception.php": "e5d6fea15a1ea0e2ddce2878073e7631", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric/PageSetup.php": "d35662ef5000c28b3e8d916a923796ed", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric/Properties.php": "9a98b99db62b69be38dd57926043244c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric/Styles.php": "05c350bbe5cc979862de8dba121caf85", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Gnumeric.php": "169f5e8d428a4c3617f6854a1ad70e5b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Html.php": "c89c518848f69225c06b2502bdd82942", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/IReadFilter.php": "6489df33ce4d01ee9e86d5f63dbb5861", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/IReader.php": "78f54c4d966dc0460ba1a41169c15484", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/AutoFilter.php": "c1ba3d427de6faa7f4c455d1a8553950", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/BaseLoader.php": "3f7c9561c20119ac65ec766e0554b4e2", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/DefinedNames.php": "6439ea7801c1a7aefcb7b64ff93a5a38", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/FormulaTranslator.php": "9402f3f8cd5083bffde398e16488132b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/PageSettings.php": "0aa2004e8c3e5ef66b993e1eb57efa26", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/Properties.php": "4b4a67c484b5ed792f0ff5fcbd2ea39c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods.php": "3b0f0fcaeab5765828ba7148d838ad21", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Security/XmlScanner.php": "2f29a1423bbb6da5bb8b0aef954a63f3", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Slk.php": "1bcb23cfc43ad80ec859a4d3010fe2b9", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color/BIFF5.php": "1f3de0cc597a3689c5dc0828b7ddd364", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color/BIFF8.php": "e282717234cced388477f6901246378a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color/BuiltIn.php": "deb84aac1e5b136b876f2893afc3fcef", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color.php": "bf47fbfa12d4bc754bbeeecb5dbd88a5", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/ConditionalFormatting.php": "b05e6174d505bea34448da1254764e70", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/DataValidationHelper.php": "c1336dc7d1c1cf56a338060243947a54", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/ErrorCode.php": "3890dbf9085c8443337b06031ff9ca6f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Escher.php": "87a251f623d92b4c967e72eb0e5a4781", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/MD5.php": "2923be99e0263649d985176dba79312e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/RC4.php": "f102ede4d6e04830413297964d3bb661", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/Border.php": "e951aec66b6871f2a6332647406d8c94", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/CellAlignment.php": "e383004a6dc9b88d33573521015527de", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/CellFont.php": "f0885ac090dec87310e23c3fedb4242f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/FillPattern.php": "f6182aa20f6def72c779a338ec14b008", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls.php": "00531ec021e9731b1026af37c6704bc3", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/AutoFilter.php": "9277f2ac3da6176dd29447c31cf72973", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/BaseParserClass.php": "92e4a290c0f3113d8fafce644cd1b673", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Chart.php": "f14cc4af618d6b3d8048d440dd19290c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/ColumnAndRowAttributes.php": "cc750f8c5be978f0d42d7d0dcc58b786", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php": "73c34300d392cc8f5f051cf9e8f6380f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/DataValidations.php": "987e0c0b0e4483a25cc4e86b65c5e4fe", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Hyperlinks.php": "895b817cd2ad479fb0588834916e5827", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Namespaces.php": "11a9d8b959063f4f860ecf66645c6387", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/PageSetup.php": "ac23641e7f3ec5bafd6114748a54216c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Properties.php": "84bef533f9cbe9e37fcf3146236c7242", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/SheetViewOptions.php": "87ec6557455eea44fb19155959fb8dd9", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/SheetViews.php": "700779b09d13fb6e194a9b9ee0bce3af", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Styles.php": "4a8e799af2c7699ff4e40ac28f41e356", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/TableReader.php": "6fb650f09988510fb10639f754df9199", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/Theme.php": "36b1863f2c43f63eeb0748dd10881f2e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/WorkbookView.php": "5b3b69b113fe4255d1aa40a23ef9ffc3", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php": "ef4903a1300660cba75cfa661dea470f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/PageSettings.php": "af8b8c7fbef997079e848f3dd383b177", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Properties.php": "0922481f0eae8da3d4b56a0fd0a08d95", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Alignment.php": "f1a8b4add018a17cf43eef9509bbe455", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Border.php": "b133b67fb1045b83f75dedf729bc8d30", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Fill.php": "d434754a3263bb2f5cab27e6ae4ec1e3", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/Font.php": "e6d33adb5a37d83df970dbbbb6302c98", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/NumberFormat.php": "59c975935030b10c6afd598dd7854ea0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/StyleBase.php": "ab2bc1f0bb213cca6ce342a05741668b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style.php": "39f05045d8fb15186643b2b66336fcde", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml.php": "994f548f3096832bc334f62b294536da", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/ReferenceHelper.php": "8e7c53e69c6976728211ed3126834744", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/ITextElement.php": "8d7c4ee48dafe06ac2e731d03fa76225", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/RichText.php": "fa7de92311bcb202de38be167914c652", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/Run.php": "6a7a6864c46cdf1f428edcdd0d1766c4", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/TextElement.php": "d954598071bbff10183d8a4c9ab7cd47", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Settings.php": "c5a62b576b9505a7c583f5a07b97ddf1", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/CodePage.php": "c6fe801011a6e417c1be84c674a1b2f3", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Date.php": "b90881122cbb38596ac019ac12d776e0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Drawing.php": "437b2c394c0cd20218b1f15e021d5c15", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DgContainer/SpgrContainer/SpContainer.php": "616d5350aa201e947ebb322857d4807f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DgContainer/SpgrContainer.php": "4e3fde8031f0d25c55f17d960ddbe139", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DgContainer.php": "8a3d5d52db8f7c1086fd1292eb6d9257", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php": "8b1e46f819bf9c5e7b30e0aa6eab27e1", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer/BstoreContainer/BSE.php": "8a1e088b910ae153c86861ffc628eee2", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer/BstoreContainer.php": "0230b6f51df8a749452f9a07b26b991e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer.php": "83dc85a1e1a6b80038d85ea145224f66", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher.php": "95ee4f022451a75f946ead971b852fb8", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php": "89dc8d062b0361a349bff25c86e5d09f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Font.php": "11513fc4a173c79a653437d2afcde33f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/IntOrFloat.php": "93f4860fb3d4f3e24db882adbb9a0905", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/ChainedBlockStream.php": "a5ef66c232a38d68120f04d6b1091aec", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/PPS/File.php": "a9d422e2476adf73726a76a7053f791c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/PPS/Root.php": "457cc5719b8b85bfec51c7bd774d500a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE/PPS.php": "cf6343965e67bd99f875a2fb1308773a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLE.php": "25fd47104a734eb085845d85aeefc82e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/OLERead.php": "bad9e63a94ae8c8887e4e7420e8b1f74", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/PasswordHasher.php": "c74e28aa043032302c99f7892626bbdf", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/StringHelper.php": "e750b3a4406ebe4a464179f226c6ce28", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/TimeZone.php": "3fdcdf5027a154d9e4ce5b4c3b5e4518", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/BestFit.php": "672d26bbec66cc83f8813e2a541efdad", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/ExponentialBestFit.php": "098d06cbaabb7395f32f656abda8c578", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/LinearBestFit.php": "5475f7352b6fd49ef44d1eb798bf6830", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/LogarithmicBestFit.php": "5a76afa928dc018784bea8b890ab8f28", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/PolynomialBestFit.php": "5f3dacc0fd2f3db7a29cdc0c044fd56b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/PowerBestFit.php": "5aa5e84f5cbf6853d9f946520566041e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/Trend.php": "71b81747698c8b8ac8c6593a8830e7bc", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/XMLWriter.php": "e4548ad1eb126b640159da2e3e86a7a8", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Xls.php": "c724f237d2661d4d2a2cb02748d2bb69", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Spreadsheet.php": "09628ff33576868ebc7d213cdfde9844", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Alignment.php": "fbe33a26901ff19311f513d44c7e22b2", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Border.php": "f39088efe15371cf895961b627ec2dc3", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Borders.php": "23b139669257c584e814d2bbbc18e9f3", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Color.php": "639af2a3e1625b189a2a4b5fa492d209", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Conditional.php": "2b9e02edc038dd4103316a5cb4ce1ac4", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/CellMatcher.php": "907144ca6325be5dd9151348f52d18e0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/CellStyleAssessor.php": "250448b0250069d527a3e0655bf49e18", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBar.php": "0e69793402d9efb39116dcefda552603", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBarExtension.php": "bea38faeb4c18aced4a91d4f0b5f72d6", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormatValueObject.php": "e7309f52322735de93feef5caa5b879b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormattingRuleExtension.php": "dc9069c90232fa9796c8d928ed92b3c6", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/StyleMerger.php": "e9cecc24e35ee0d461d70b1191152f35", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Blanks.php": "7d5881b03833bdbabc145547f3b5521f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/CellValue.php": "1a37ef1adeef505df06ed062a21af9b5", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/DateValue.php": "a4782632676c4fc431f69ca5ee924627", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Duplicates.php": "89d1ccd25aad2b5695c9a1330d78e3f9", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Errors.php": "f1f5c78bafc732de1d1a887c662730a3", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/Expression.php": "b796dec6a36efba447d686e204d82bfe", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/TextValue.php": "74ce439b27b4f60d4869da42f27e19a9", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/WizardAbstract.php": "aaaf7d3050cd46996a7ffe747b20bdd4", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/WizardInterface.php": "3a474bf012ce0326ac774af253d9d29f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard.php": "198e7b61fbd14100937c4416112ad13d", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Fill.php": "0196ab26a1b860f32b89de91b84e76f9", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Font.php": "24ee19678d5620834ccb0ca9e14cf78c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/BaseFormatter.php": "a9acba9350eeacd7bed051d2a76d53ce", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/DateFormatter.php": "57eeb75538d545f288ffa09e4beddc59", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php": "b1bfccc7b0ac84272613ced04c81ae20", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/FractionFormatter.php": "b94179896baa15ddc5d37713e277f489", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/NumberFormatter.php": "fd1fa8fe1f5548e3c8826e7e5b107c6d", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/PercentageFormatter.php": "1ef63a03b82b6e85d15c0daef0a44636", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Accounting.php": "100cfa4a02215e9841366dda9f205a03", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Currency.php": "62101a6f543e0952f5c5787287986e8c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Locale.php": "c00eac6ab625a1106f184c808b4be8e9", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Number.php": "ac3d349b33b1e906f105336b58c84299", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/NumberBase.php": "3b3ec5ca20da30dc2a634b1a337fc4bb", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Percentage.php": "cc7c74f78653e50ae64ab672934afd5b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Scientific.php": "e3470577db535032062e394fd9e5cc6c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Wizard.php": "bb9dec534b1288096589c1a4c0c69fc8", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat.php": "a1ce4b6c25be308e0907b4fc0111b0f9", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Protection.php": "f20161730985c4643dbd5fecae045acb", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Style.php": "6d346ffcc2847449414775cabe6dd75a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Supervisor.php": "3d608c0669a8c8f317d09d338aa69692", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter/Column/Rule.php": "af9c5349645245e871724b12c33e724a", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter/Column.php": "15efc928f6a1e59f1c2a9315a1288de9", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter.php": "3b83d20fe680188258ca29b3c0a51988", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFit.php": "233152897103488e3bcae9f3d2a6972b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/BaseDrawing.php": "61a896a0c55d894ac8611046745462f0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/CellIterator.php": "f5d85e059e3c22cbf622bb5639592643", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Column.php": "8b3f486c5160f3f3f62c9d8ab24af2f6", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ColumnCellIterator.php": "03191acb6b0fac4b75fe5f6916ee3551", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ColumnDimension.php": "694a0146e3cc50ac47e2980b27ba9ee9", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ColumnIterator.php": "0f0b86d5cf6d6d9246c44d8c2491931d", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Dimension.php": "57889580f47fdaa61b03c454668fb20c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Drawing/Shadow.php": "6b61c81d6363a92502a01ff62e803cc1", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Drawing.php": "49d26e168b7906bc18094c0b2faa432b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/HeaderFooter.php": "97164d35ec5f0269b6989d0734d44248", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/HeaderFooterDrawing.php": "e8ddeba2a3408995a0c433e15a8a8af2", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Iterator.php": "766ab247e61b341bd031f04dbf8f6ebc", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/MemoryDrawing.php": "bf75ea864b1253eacd9a3de28d0f1c85", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/PageBreak.php": "20d29ed2c67724b84249e15271b736a8", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/PageMargins.php": "1c479645b73c0757f66b7488c9435976", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/PageSetup.php": "3d1ea050b529772b7e5ac754cd371fc0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Protection.php": "a37d51cbb47a68c0cf8fb4d9fb72a7e7", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Row.php": "529225f1f7c065444811204038d50288", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowCellIterator.php": "475057b7b613ebfbf4d5e910033fad70", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowDimension.php": "7d118ba91440043f807c5c8f771685c8", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/RowIterator.php": "050e26a00c1afca15c169d03c7e27698", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/SheetView.php": "94b1f6bc702616fff0ffeeaad9f5540f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table/Column.php": "e7271a9af0f01ba506b5ba8ff053edb5", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table/TableStyle.php": "9dc3541b7cfd3a46f1659af6ff4f2e97", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Table.php": "467a53fbfc3ae2e4e8631692b6ffb2f8", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Validations.php": "a84e302c1787832b5024f42a33ab147c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php": "3630beb0e44bec91f6b82c47a44988af", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/BaseWriter.php": "f0b3c71331dde13d304e175d3f408ea5", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Csv.php": "0055dbb21da8ee04f7f6e4c709cf7410", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Exception.php": "6aa5c4105b94a1fb4bf7f3397f5f8b27", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Html.php": "45ae1c9091cab10f3cbcafae5c458ef1", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/IWriter.php": "b38807a972ac5551f6fbb752a4eb0c42", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/AutoFilters.php": "5f1b71c64e3e898e9de52c1089b27311", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Cell/Comment.php": "a52f99ea118fea7d71ed840ed683f65c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Cell/Style.php": "e20cc060f225dfcfb5472b736b39ad6d", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Content.php": "3b4ac3e231c31fe1ebb5ed4b0203734c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Formula.php": "5ec408fdb0e75a0320f629791e6cee0c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Meta.php": "5820e595aecb7bad1c56e52cddc49c45", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/MetaInf.php": "e4f32e9a13836824f213c258a64982b9", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Mimetype.php": "2bc1bb2ddc1d6314059d1f57dadcdfce", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/NamedExpressions.php": "60a0542fb544e01e88119f5f58571979", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Settings.php": "cd06034284fdf34c9866d8b06df4ff0b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Styles.php": "3b611ff4521ba89e2907bd831d0ca48c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/Thumbnails.php": "3d00e2d9be4f16623b4644ae3be84b17", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods/WriterPart.php": "53991ad18aa2ab8b52c142aa71f44c8e", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Ods.php": "6ae737ba3db0a11f10686ff78155251c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/Dompdf.php": "732eb26669fbcae7062621bdbdbce39c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/Mpdf.php": "759713c675da0e868929a5b66ec08d77", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf/Tcpdf.php": "525623cd84f27c20949a1ee89faf024f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf.php": "6803c608bdc16c7b03203b77b7b9c414", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/BIFFwriter.php": "9b2d23cf926b8755ff3b75c3996683b6", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/CellDataValidation.php": "f26350428f3451af53f507e7b72cb9f8", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/ConditionalHelper.php": "174ce4e9f60eeeb3b96d6b86ff3f514c", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/ErrorCode.php": "b98be1c2ff5e55c741f561bb020d698b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Escher.php": "7e254588241140a97e29eb128ecefbce", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Font.php": "f6aaa55669ab9a318665a88ff6833034", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Parser.php": "bddfd14b3b578ea725e4b7914e86b862", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Style/CellAlignment.php": "22696f46254207d62557d7df4e2a086f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Style/CellBorder.php": "a79d33713d6d7c5087d0ebe96fc6bdc9", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Style/CellFill.php": "73ce28075d7866bbef0574b350d4e933", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Style/ColorMap.php": "c6a929a80c0701e48e2a19a9f04025db", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Workbook.php": "351a306aa7f0ccd649bf489ec8952812", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Worksheet.php": "b4b8667707c743eb9328d18cacb4c78b", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Xf.php": "1e6fa8ae60a671d688be97e748eb15c0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls.php": "847010de91a683774a3d6b4416403ffc", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/AutoFilter.php": "486cf60ed0ce1779a4319d076fb6c939", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Chart.php": "7818e75313fef3dc1e060ebf5be58308", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Comments.php": "b9ea5a224e86928da9e37becf2293c5f", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/ContentTypes.php": "931461ebd9ab640d8e15d979c3b10312", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/DefinedNames.php": "18ba56c7f9324f9abde4f410f5f428cf", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/DocProps.php": "00e33dac3b7a4382fa71ada707b630de", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Drawing.php": "87365b2f83f48bd71dcc1c4c35a028bd", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/FunctionPrefix.php": "553b632c349a807ad68208ef225ccbc3", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Rels.php": "dcde555b8406f5cb97cd65e735f30b3d", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/RelsRibbon.php": "6a61d8a47a3ae8f01f0e3f8a5bb9cd14", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/RelsVBA.php": "f76f74f1cbb82a51f5393e406a73e5d9", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/StringTable.php": "12e3335848e11b8adbf97a6639dd0143", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Style.php": "c8718417a87237a4dae212d5270b3bce", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Table.php": "03c2f132a747cfb535fcac35049e46a7", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Theme.php": "52d1a17b45f09a312d29e6e68b1b29aa", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php": "5d078940b7a31b2eec534382688b84f0", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php": "f3581f4c09a78682787e08d8f8aa0fa5", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/WriterPart.php": "cb523f075944afe0596af0d04f1f0db1", + "vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx.php": "9dda20010435ee894a41b18962fa7889", + "vendor/pimple/pimple/src/Pimple/Container.php": "c26fd7be110bcb308f94b3849950053e", + "vendor/pimple/pimple/src/Pimple/Exception/ExpectedInvokableException.php": "065c95be5677c6a2f843285963b8ee9d", + "vendor/pimple/pimple/src/Pimple/Exception/FrozenServiceException.php": "7555b2e4ae4c277e56c08da33cf40443", + "vendor/pimple/pimple/src/Pimple/Exception/InvalidServiceIdentifierException.php": "2dc56ac7feb866f7361fdfbaf2cafd57", + "vendor/pimple/pimple/src/Pimple/Exception/UnknownIdentifierException.php": "55390d6d7b50e403d05b6b1a7c144bf9", + "vendor/pimple/pimple/src/Pimple/Psr11/Container.php": "d005f4fa93f641dd20e13dce9edaf7cc", + "vendor/pimple/pimple/src/Pimple/Psr11/ServiceLocator.php": "f094054f720369f985ca63f82a7fe1ab", + "vendor/pimple/pimple/src/Pimple/ServiceIterator.php": "822086e6f1ae3629fce59a0888948ef9", + "vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.php": "5f9104564a5ebdafaf47602d49b91eb8", + "vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Invokable.php": "901d2a4b096aac148b52a416ddf99d7a", + "vendor/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php": "e16d69d7de4cf1dd7fdcfe777ac865fc", + "vendor/pimple/pimple/src/Pimple/Tests/Fixtures/PimpleServiceProvider.php": "8e21a6e8ac8d051beff1444dbc7d2945", + "vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php": "23e9ac8bc2ea1dc68ad0f793a87f22b7", + "vendor/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php": "ebdadff61e709ced9971cceb218445d6", + "vendor/pimple/pimple/src/Pimple/Tests/PimpleTest.php": "698b3821b662ab495df5f877d7468f8d", + "vendor/pimple/pimple/src/Pimple/Tests/Psr11/ContainerTest.php": "3fe3766fce208c5d21355dd163cb5239", + "vendor/pimple/pimple/src/Pimple/Tests/Psr11/ServiceLocatorTest.php": "8b16d841e4ef987379695ca3a144079b", + "vendor/pimple/pimple/src/Pimple/Tests/ServiceIteratorTest.php": "3511790e513ecb43d92b37e37e1d3f9a", + "vendor/psr/cache/src/CacheException.php": "d887d14bf7cb327b2f823fd8f6e80149", + "vendor/psr/cache/src/CacheItemInterface.php": "5ec09783d799d45a9e9ac71e28c49ed5", + "vendor/psr/cache/src/CacheItemPoolInterface.php": "ef5af58be396258d31bc3429f89b07dd", + "vendor/psr/cache/src/InvalidArgumentException.php": "a91bb63c56eb83de54f58917ac62970e", + "vendor/psr/container/src/ContainerExceptionInterface.php": "3a46c5e6a407e9fe5d88c95965b945b3", + "vendor/psr/container/src/ContainerInterface.php": "3298038d8dc6c424bc406714db2a2290", + "vendor/psr/container/src/NotFoundExceptionInterface.php": "625acbd6fc8bbdc39c34e3a99047894a", + "vendor/psr/event-dispatcher/src/EventDispatcherInterface.php": "1b3c2d8551585d464704ea970ff8dc6a", + "vendor/psr/event-dispatcher/src/ListenerProviderInterface.php": "a6b1ede2690ec9d28d67db543b1b0b1b", + "vendor/psr/event-dispatcher/src/StoppableEventInterface.php": "279f040be3f3a2393247e2d30429a5e9", + "vendor/psr/http-client/src/ClientExceptionInterface.php": "6b2f623edbb1222f9623524b3e4dc1e4", + "vendor/psr/http-client/src/ClientInterface.php": "624536fd161afe3aa159ea5d527779b3", + "vendor/psr/http-client/src/NetworkExceptionInterface.php": "4676e9b6fec11ab5c0a3b32979abef91", + "vendor/psr/http-client/src/RequestExceptionInterface.php": "a5af1075472ac86a825c4a6ccf04ef54", + "vendor/psr/http-factory/src/RequestFactoryInterface.php": "b93278ea28940741416ca2f0249a8269", + "vendor/psr/http-factory/src/ResponseFactoryInterface.php": "2e68f87cd5b9afe0508f202e6c32e3e6", + "vendor/psr/http-factory/src/ServerRequestFactoryInterface.php": "065ac773fea026930f73bfd1f0dfa143", + "vendor/psr/http-factory/src/StreamFactoryInterface.php": "4511e7ad5d1106c5c6a7adde87e1263b", + "vendor/psr/http-factory/src/UploadedFileFactoryInterface.php": "688c1dc4de3d7f78ecbbf6656373116b", + "vendor/psr/http-factory/src/UriFactoryInterface.php": "4e587117e3edfd030a80e3b883cb75f9", + "vendor/psr/http-message/src/MessageInterface.php": "116d6eefac2604ce0a650a7f58dae8f2", + "vendor/psr/http-message/src/RequestInterface.php": "19c470073088141bbd08e20e46503b13", + "vendor/psr/http-message/src/ResponseInterface.php": "9fd8d0a948be3698e59cb2a116964a59", + "vendor/psr/http-message/src/ServerRequestInterface.php": "90dbb3840dc0e0cfcaa929fb27b22e6d", + "vendor/psr/http-message/src/StreamInterface.php": "348ba0fd90cab1c9b72b2f00cf96c5cc", + "vendor/psr/http-message/src/UploadedFileInterface.php": "fef766bfa741546a029d57854cc9538c", + "vendor/psr/http-message/src/UriInterface.php": "05487cc106391e0b5a60c0c912f30912", + "vendor/psr/log/src/AbstractLogger.php": "05a9749f208b064a6af67c32055529f3", + "vendor/psr/log/src/InvalidArgumentException.php": "7d2f0bd1583524d739fff12f0507de65", + "vendor/psr/log/src/LogLevel.php": "cc226142fd5d390d030b39c61cf97843", + "vendor/psr/log/src/LoggerAwareInterface.php": "e24df41c40ade2fca16a4ec633a04497", + "vendor/psr/log/src/LoggerAwareTrait.php": "92456b3a37e21d536d82b990effa2b37", + "vendor/psr/log/src/LoggerInterface.php": "50bef03abe7fd3ab81f779af593b29cc", + "vendor/psr/log/src/LoggerTrait.php": "f418adb849b212255902f80c15868b65", + "vendor/psr/log/src/NullLogger.php": "bdd6aba0adffb237c428ac83ff99b8ae", + "vendor/psr/simple-cache/src/CacheException.php": "ed9af8bdafbc23cbd97681bec29385f0", + "vendor/psr/simple-cache/src/CacheInterface.php": "0f79bb7341b4df04d00ae60c2441e07a", + "vendor/psr/simple-cache/src/InvalidArgumentException.php": "f070de2116d9d1ca836e68a404414d10", + "vendor/qcloud/cos-sdk-v5/sample/ImageSearch.php": "2486dae818e5d7f1549879bfcae6dc06", + "vendor/qcloud/cos-sdk-v5/sample/ImageSearchAdd.php": "9d239afa21e0d234c5270b1fb79390f3", + "vendor/qcloud/cos-sdk-v5/sample/ImageSearchDelete.php": "ca726928047bbf0879a84ae9dba5c3b3", + "vendor/qcloud/cos-sdk-v5/sample/ImageSearchOpen.php": "447913a4618bd98a4ece0499eb44c938", + "vendor/qcloud/cos-sdk-v5/sample/abortMultipartUpload.php": "65ecdae8a637a03ddd6deae3c2284014", + "vendor/qcloud/cos-sdk-v5/sample/addHotLink.php": "383735fd043c711deb847e7582a75fb4", + "vendor/qcloud/cos-sdk-v5/sample/appendObject.php": "c8be22d403d370031d35181d7bbcff56", + "vendor/qcloud/cos-sdk-v5/sample/bindCiService.php": "4a78bb395e0b427c0de12e504653f1ea", + "vendor/qcloud/cos-sdk-v5/sample/blindWatermark.php": "fec82a66c306fd01d2cdf836838aa858", + "vendor/qcloud/cos-sdk-v5/sample/cancelInventoryTriggerJob.php": "9fae53f6b6fb167c465431ffaebc8995", + "vendor/qcloud/cos-sdk-v5/sample/cancelLiveVideoAuditing.php": "fd8e131a6a6c8eabca11f473ecc604c1", + "vendor/qcloud/cos-sdk-v5/sample/catchException.php": "a40ace901ba016fb24009a4a4f2c7e9f", + "vendor/qcloud/cos-sdk-v5/sample/ciTransformation.php": "8b52b386073c56754d2393c689ee3d0c", + "vendor/qcloud/cos-sdk-v5/sample/closeOriginProtect.php": "ebad282cc3a4b7a4c1b42ed2ba118ba7", + "vendor/qcloud/cos-sdk-v5/sample/completeMultipartUpload.php": "30b90b5ffed44cfd812e33785d0076d4", + "vendor/qcloud/cos-sdk-v5/sample/copy.php": "31877fa8d97e65799b5c14f118125540", + "vendor/qcloud/cos-sdk-v5/sample/copyObject.php": "26df904b0195af04c0a9e628d8867ea6", + "vendor/qcloud/cos-sdk-v5/sample/cosClient.php": "c54b4f5b96fc49b34afe1bddf63ba3cf", + "vendor/qcloud/cos-sdk-v5/sample/createBucket.php": "408482270d04bc923c7e891be42455ab", + "vendor/qcloud/cos-sdk-v5/sample/createDocProcessJobs.php": "78b6649af89f9460d1af178e1575f461", + "vendor/qcloud/cos-sdk-v5/sample/createFileCompressJobs.php": "7a6bc39adbd73a349ee4b91c649d8833", + "vendor/qcloud/cos-sdk-v5/sample/createFileHashCodeJobs.php": "95f67e4cdbd43b19f140238cbf81b835", + "vendor/qcloud/cos-sdk-v5/sample/createFileUncompressJobs.php": "744950c6c216e91be4445c5efb91a37b", + "vendor/qcloud/cos-sdk-v5/sample/createFolder.php": "ceb8047b383ef78a661ec235ed62e911", + "vendor/qcloud/cos-sdk-v5/sample/createInventoryTriggerJob.php": "24843a46ffe740d1e5244e882511cd9d", + "vendor/qcloud/cos-sdk-v5/sample/createMediaAnimationJobs.php": "e95d75b4b8391b7f2178c6517ea59d56", + "vendor/qcloud/cos-sdk-v5/sample/createMediaAnimationTemplate.php": "2dc9bd28c8e9b62d347c8630eb6b621f", + "vendor/qcloud/cos-sdk-v5/sample/createMediaConcatJobs.php": "b54b13de41ec3f7807a090ac05de25ed", + "vendor/qcloud/cos-sdk-v5/sample/createMediaConcatTemplate.php": "132ecc7f5f537dea56b4566707e4d2cf", + "vendor/qcloud/cos-sdk-v5/sample/createMediaDigitalWatermarkJobs.php": "7ae5c05ad453948ce6c4f989c3f5c2a9", + "vendor/qcloud/cos-sdk-v5/sample/createMediaExtractDigitalWatermarkJobs.php": "c10a84c57a8391bbe3f83d1f1e54c3d5", + "vendor/qcloud/cos-sdk-v5/sample/createMediaHighSpeedHdTemplate.php": "1aa4fc7064155767b3cffa5ef25d1cce", + "vendor/qcloud/cos-sdk-v5/sample/createMediaJobs.php": "51a18d308fdd9f259e104b61a76cd381", + "vendor/qcloud/cos-sdk-v5/sample/createMediaNoiseReductionJobs.php": "6bffd49d556746df693496b7a1855cc8", + "vendor/qcloud/cos-sdk-v5/sample/createMediaPicProcessJobs.php": "0096bfe53be364b606d9a03f5e9e1984", + "vendor/qcloud/cos-sdk-v5/sample/createMediaPicProcessTemplate.php": "804fe0e5e4cd4fc73e8716ae7d4d4ff9", + "vendor/qcloud/cos-sdk-v5/sample/createMediaQualityEstimateJobs.php": "1715cd17fe9d4f257a4daf51488831af", + "vendor/qcloud/cos-sdk-v5/sample/createMediaSDRtoHDRJobs.php": "05594fdad67fa62ba8211e44f98050f5", + "vendor/qcloud/cos-sdk-v5/sample/createMediaSegmentJobs.php": "a013e8ebaea0d4bff295a03dbf2a34b3", + "vendor/qcloud/cos-sdk-v5/sample/createMediaSmartCoverJobs.php": "b386c880dab963ae42cf1a42852c8fdc", + "vendor/qcloud/cos-sdk-v5/sample/createMediaSnapshotJobs.php": "a47bbbccf5d649de1c5e0789bb2b241c", + "vendor/qcloud/cos-sdk-v5/sample/createMediaSnapshotTemplate.php": "4da1ad6c770217cd7055ae965107f254", + "vendor/qcloud/cos-sdk-v5/sample/createMediaStreamExtractJobs.php": "9a94f7bb82463d378652ad1cb8294246", + "vendor/qcloud/cos-sdk-v5/sample/createMediaSuperResolutionJobs.php": "e2612ac525be5203afb198a3b30b4576", + "vendor/qcloud/cos-sdk-v5/sample/createMediaSuperResolutionTemplate.php": "b764bf886379a77ec31aa0c335daddc8", + "vendor/qcloud/cos-sdk-v5/sample/createMediaTranscodeJobs.php": "36c43662b3432f05d14269e9947918c3", + "vendor/qcloud/cos-sdk-v5/sample/createMediaTranscodeTemplate.php": "a619777f2dd3631b2cdccf1f6facdc0f", + "vendor/qcloud/cos-sdk-v5/sample/createMediaVideoMontageJobs.php": "e8f93bd1f7e3ac372f8d59e286728252", + "vendor/qcloud/cos-sdk-v5/sample/createMediaVideoMontageTemplate.php": "3c072d94ad92d88c5745a5590fc175df", + "vendor/qcloud/cos-sdk-v5/sample/createMediaVideoProcessJobs.php": "a88212c91282a3573089b46ea87fbbfc", + "vendor/qcloud/cos-sdk-v5/sample/createMediaVideoProcessTemplate.php": "e04f929f07d8a721e68007891ad460b5", + "vendor/qcloud/cos-sdk-v5/sample/createMediaVideoTagJobs.php": "c45dadafb96ffc437a72371fc3ffb167", + "vendor/qcloud/cos-sdk-v5/sample/createMediaVoiceSeparateJobs.php": "74618492b058c0ca73d3ff49cf459868", + "vendor/qcloud/cos-sdk-v5/sample/createMediaVoiceSeparateTemplate.php": "1665acac0ade94cb29cc18d069de89c2", + "vendor/qcloud/cos-sdk-v5/sample/createMediaWatermarkTemplate.php": "33d4fac3570c5fa69f3d8a381d85a03a", + "vendor/qcloud/cos-sdk-v5/sample/createMultipartUpload.php": "9c7bae95fa01d0aed1a8853f69bda807", + "vendor/qcloud/cos-sdk-v5/sample/deleteBucket.php": "bfb7e79e5058d0be2f7936d2e7e884d4", + "vendor/qcloud/cos-sdk-v5/sample/deleteBucketCors.php": "f7599f91d3ff4d36c049e1df800ef72f", + "vendor/qcloud/cos-sdk-v5/sample/deleteBucketDomain.php": "d8734296551064cd62a0e8e5c85d5805", + "vendor/qcloud/cos-sdk-v5/sample/deleteBucketGuetzli.php": "bc9470bc4a6fa7f6156a2257edac341a", + "vendor/qcloud/cos-sdk-v5/sample/deleteBucketImageStyle.php": "821dcc177d74f08858a592a52f2d7328", + "vendor/qcloud/cos-sdk-v5/sample/deleteBucketLifecycle.php": "b016f80b8ad2abdebe334ffeffc5129c", + "vendor/qcloud/cos-sdk-v5/sample/deleteBucketTagging.php": "75587a420e7dd761605fd59537d70421", + "vendor/qcloud/cos-sdk-v5/sample/deleteBucketWebsite.php": "a1c9aae324e049f6a3a46ad3b69a3c4a", + "vendor/qcloud/cos-sdk-v5/sample/deleteBuckets.php": "f74ff67f341eca684fcc29e778068add", + "vendor/qcloud/cos-sdk-v5/sample/deleteFolder.php": "33259baef3cb203d943a1e00e7f4fe5e", + "vendor/qcloud/cos-sdk-v5/sample/deleteObject.php": "2c72b45e804453be72edb412eacecf58", + "vendor/qcloud/cos-sdk-v5/sample/deleteObjectTagging.php": "97d7a7332d5081cce82a26079595bc9a", + "vendor/qcloud/cos-sdk-v5/sample/deleteWorkflow.php": "2bcc1a3007450ced1e88a242cfed60e7", + "vendor/qcloud/cos-sdk-v5/sample/describeInventoryTriggerJob.php": "0f500794e1852319ad5832feb277185c", + "vendor/qcloud/cos-sdk-v5/sample/describeInventoryTriggerJobs.php": "72ca64ce53cfc12f2e9a8d13f74d7caa", + "vendor/qcloud/cos-sdk-v5/sample/describeMediaJob.php": "9a834ddd75adbe26519b18f754f694a5", + "vendor/qcloud/cos-sdk-v5/sample/describeMediaJobs.php": "df62839c52440e4d5935fa7ff45931e8", + "vendor/qcloud/cos-sdk-v5/sample/describeMediaTemplates.php": "7599b88688c167631412ddd1d124e80c", + "vendor/qcloud/cos-sdk-v5/sample/describeWorkflow.php": "656e88113faff522405de6d826b6375f", + "vendor/qcloud/cos-sdk-v5/sample/detectAudio.php": "106de9a0897c3f680d422bed6a5fbf5e", + "vendor/qcloud/cos-sdk-v5/sample/detectDocument.php": "7b1c589a43015d77ea7daf13ab7d4ba3", + "vendor/qcloud/cos-sdk-v5/sample/detectImage.php": "d7a546d60eea15d42f514a431c9e2c59", + "vendor/qcloud/cos-sdk-v5/sample/detectImages.php": "ea85e4368837d5be571e78ad3f918d50", + "vendor/qcloud/cos-sdk-v5/sample/detectLable.php": "035595914cc60cb8fc7b68e3e76e8368", + "vendor/qcloud/cos-sdk-v5/sample/detectLiveVideo.php": "a17923d791ba9765183f6675452e6e6f", + "vendor/qcloud/cos-sdk-v5/sample/detectText.php": "c1dbb80836ceb6c192b27c74529f2135", + "vendor/qcloud/cos-sdk-v5/sample/detectVideo.php": "1837393e27217a34f6d1d1b544a74afd", + "vendor/qcloud/cos-sdk-v5/sample/detectVirus.php": "98e12ab0f232aaf5fe5cac84a9fca2e4", + "vendor/qcloud/cos-sdk-v5/sample/detectWebpage.php": "60018974e5e586961adb139ad7439013", + "vendor/qcloud/cos-sdk-v5/sample/document2dstType.php": "910b451065034e0d6e7baa4e92d28f83", + "vendor/qcloud/cos-sdk-v5/sample/doesBucketExist.php": "1d62a5e5fa86a1816b5f8621b18aec3e", + "vendor/qcloud/cos-sdk-v5/sample/doesObjectExist.php": "537a666c8d3db384078215e8616bf934", + "vendor/qcloud/cos-sdk-v5/sample/download.php": "7901888f43ae289fc20b4f47773fd5f8", + "vendor/qcloud/cos-sdk-v5/sample/downloadFolder.php": "15994f234b2a717ccde6c98c0d7d8a6b", + "vendor/qcloud/cos-sdk-v5/sample/fileJobs4Hash.php": "5907f8290442904255be79c9c355f080", + "vendor/qcloud/cos-sdk-v5/sample/getActionSequence.php": "3b0b8878756c6c390708b1b949db5ad0", + "vendor/qcloud/cos-sdk-v5/sample/getBlindWatermark.php": "cd1d8c6231ecf610b825b0e8835fa7bf", + "vendor/qcloud/cos-sdk-v5/sample/getBucketAccelerate.php": "790cf8cc52e6adb4a80f9c4e718b3b40", + "vendor/qcloud/cos-sdk-v5/sample/getBucketAcl.php": "ceafc19584e4953c7938314ebf3feef2", + "vendor/qcloud/cos-sdk-v5/sample/getBucketCors.php": "6b34cd542845082411fe12e7c806c9c5", + "vendor/qcloud/cos-sdk-v5/sample/getBucketDomain.php": "acb68588f43dd819303fe72ecc7b468c", + "vendor/qcloud/cos-sdk-v5/sample/getBucketGuetzli.php": "02ca0d20b6638073a9ad52b34ae34a5f", + "vendor/qcloud/cos-sdk-v5/sample/getBucketImageStyle.php": "10e9bb8e0ad73f60ba104e4b07d58984", + "vendor/qcloud/cos-sdk-v5/sample/getBucketInventory.php": "8ce99dfe578b784de6edd4d07ee74181", + "vendor/qcloud/cos-sdk-v5/sample/getBucketLifecycle.php": "110f9a59967354b63628d5c0cf2bdc10", + "vendor/qcloud/cos-sdk-v5/sample/getBucketLogging.php": "1e53ca52ce7ac9a22b2a022ef4d9ce78", + "vendor/qcloud/cos-sdk-v5/sample/getBucketReferer.php": "8f9acb6bb98fe5362260542584ebf829", + "vendor/qcloud/cos-sdk-v5/sample/getBucketTagging.php": "84e8a7a4fa13b118175c0675924a192e", + "vendor/qcloud/cos-sdk-v5/sample/getBucketWebsite.php": "ace4621c02c8f539ebe875b736081267", + "vendor/qcloud/cos-sdk-v5/sample/getCiService.php": "8bafbb9713a9daaeb0c069a6cbe8a1c1", + "vendor/qcloud/cos-sdk-v5/sample/getDescribeDocProcessBuckets.php": "9a31938a810ca37173be18049d9831cd", + "vendor/qcloud/cos-sdk-v5/sample/getDescribeDocProcessJob.php": "cccbf442b5c08df338732d7824028a12", + "vendor/qcloud/cos-sdk-v5/sample/getDescribeDocProcessJobs.php": "c0798e57802e069bace58e3edf5c47a7", + "vendor/qcloud/cos-sdk-v5/sample/getDescribeDocProcessQueues.php": "7457618c838c83f847a3b31e9370d8ad", + "vendor/qcloud/cos-sdk-v5/sample/getDescribeMediaBuckets.php": "5f2fc9ebfbdeced59d51c60dfdf15c59", + "vendor/qcloud/cos-sdk-v5/sample/getDescribeMediaQueues.php": "2c04a129aaba3551f519e2c49d890293", + "vendor/qcloud/cos-sdk-v5/sample/getDescribeMediaVoiceSeparateJob.php": "da1d3d1143973688a186855d81891eac", + "vendor/qcloud/cos-sdk-v5/sample/getDetectAudioResult.php": "592fdae60d992cb68256cee3ae2d1ec5", + "vendor/qcloud/cos-sdk-v5/sample/getDetectDocumentResult.php": "5f0c52bf00b226c3c5ee98ba7cb0918c", + "vendor/qcloud/cos-sdk-v5/sample/getDetectImageResult.php": "b0019d0f06da50fe036c86f07796a38a", + "vendor/qcloud/cos-sdk-v5/sample/getDetectTextResult.php": "9bfcbe193270ea9d4655479d00af0de3", + "vendor/qcloud/cos-sdk-v5/sample/getDetectVideoResult.php": "a5460bb51f54e375831cb64df7d81de6", + "vendor/qcloud/cos-sdk-v5/sample/getDetectVirusResult.php": "d82d68539290241939e5dec342549d7f", + "vendor/qcloud/cos-sdk-v5/sample/getDetectWebpageResult.php": "d0bd091b898e66124f05a3d17b96dde1", + "vendor/qcloud/cos-sdk-v5/sample/getFileCompressResult.php": "16958953eb484cd15c0c3f921d949fff", + "vendor/qcloud/cos-sdk-v5/sample/getFileHashCodeResult.php": "31928f86ad2f119fbdba036bccee55db", + "vendor/qcloud/cos-sdk-v5/sample/getFileProcessQueueList.php": "66b359c0d7c7bcaf9f037237d547177e", + "vendor/qcloud/cos-sdk-v5/sample/getFileUncompressResult.php": "2468ceef8812436eaf56a7f2bd99c26c", + "vendor/qcloud/cos-sdk-v5/sample/getHotLink.php": "803aeabd070f112598ed718fa7592578", + "vendor/qcloud/cos-sdk-v5/sample/getLiveCode.php": "75c67ce1c35f02361ba36d156a031795", + "vendor/qcloud/cos-sdk-v5/sample/getMediaInfo.php": "3bb925d329057a9b64423946ef50f8ac", + "vendor/qcloud/cos-sdk-v5/sample/getObject.php": "bccc6a999f398eea1e169d140e1a0355", + "vendor/qcloud/cos-sdk-v5/sample/getObjectSensitiveContentRecognition.php": "6a750572780eb58b6fa4792c8ea81343", + "vendor/qcloud/cos-sdk-v5/sample/getObjectTagging.php": "3938de7f473a5e2a1072c2fef8363119", + "vendor/qcloud/cos-sdk-v5/sample/getObjectUrl.php": "6191b305b285d5ee980d855af3216dc6", + "vendor/qcloud/cos-sdk-v5/sample/getObjectWithoutSign.php": "f72a0e5f71e1b80a34b1197288a59260", + "vendor/qcloud/cos-sdk-v5/sample/getOriginProtect.php": "8bcd69ca3efed9478db09a157c366b24", + "vendor/qcloud/cos-sdk-v5/sample/getPresignedUrl.php": "44db85c7ca912a9a2e2e87f1d4729765", + "vendor/qcloud/cos-sdk-v5/sample/getPrivateM3U8.php": "6f3d4fb02dc15eacfd0ff97863d5874b", + "vendor/qcloud/cos-sdk-v5/sample/getSnapshot.php": "b29a073ec7c80a4b38fe8b147ab4a950", + "vendor/qcloud/cos-sdk-v5/sample/getWorkflowInstance.php": "658581c05625036874dcd95d4ed7be61", + "vendor/qcloud/cos-sdk-v5/sample/getWorkflowInstances.php": "e057776f4745d5ef5e8dfbcfa87d9aed", + "vendor/qcloud/cos-sdk-v5/sample/headBucket.php": "ff3f18845d0d58344438a5836695b252", + "vendor/qcloud/cos-sdk-v5/sample/headObject.php": "a1e131f3e7b3854108e91acfc6affa8e", + "vendor/qcloud/cos-sdk-v5/sample/iDCardOCR.php": "5fb0368d9b703302aaf29f8ec87c6374", + "vendor/qcloud/cos-sdk-v5/sample/imageAssessQualityProcess.php": "22877a57420d74402c9ae8a1af14262f", + "vendor/qcloud/cos-sdk-v5/sample/imageAve.php": "cad76601ba65c712e575b66b4ef3fb96", + "vendor/qcloud/cos-sdk-v5/sample/imageDetectCarProcess.php": "7292cae875f7bf6e785fe00ed1889e9e", + "vendor/qcloud/cos-sdk-v5/sample/imageDetectFace.php": "548452170e4b39f2f1abf94b4bef697e", + "vendor/qcloud/cos-sdk-v5/sample/imageExif.php": "3851f2e2158220bff22b2a5496b47f13", + "vendor/qcloud/cos-sdk-v5/sample/imageFaceEffect.php": "c1936d49c58288f7e7268394643ffd1d", + "vendor/qcloud/cos-sdk-v5/sample/imageInfo.php": "1f019b8ed375a637d4b2b8a68c8a8f7e", + "vendor/qcloud/cos-sdk-v5/sample/imageMogr.php": "af89be138f1c3cf6eee39548820fc72d", + "vendor/qcloud/cos-sdk-v5/sample/imageProcess.php": "35a8596531ac36f306430029d9bc820b", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessBright.php": "193f8b628e0bc2eb5174ecb92220f970", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessChannel.php": "e32c0be7bc2d115f8ff9c38cf14a2278", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessContrast.php": "1b88fb187871b7eafdfd6c08d343bcef", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessCrop.php": "fbc78d5dc04de0c4b256f256b8c17792", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessFormat.php": "7f2ef115a6b9f060c6e1c696f727c7a2", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessFormatAvif.php": "a88bd4505e8fe13e43d5fb71fdbeafc9", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessFormatHeif.php": "b4a7801168a04226d30544ae9b574e12", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessFormatSvgc.php": "edfd77e6f01a8b9c6ab3a6343b9ddeb4", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessFormatTpg.php": "845ad9bed636e58d45af3e343133bf82", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessFormatWebp.php": "7907e9449da4c3f2731bf0578876da99", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessGaussianBlur.php": "88ca406b535400d8753e34e29a2376f0", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessGrayscale.php": "ca2843489f88498bb856833722becfb2", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessImageView.php": "3abc71a5f2b428ee675db321542a6e48", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessQuality.php": "6aedb558a8bac6b92ece8c29dca1c1af", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessRotate.php": "fb27da35fc0a78f4afcd91ccc86abf13", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessSharpen.php": "1b28b9a2d711e7a2b3572749aa3b4c09", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessSizeLimit.php": "8421b4c19840b215b990ef0eda495856", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessStrip.php": "92c045ff76564d5ae2b138f88b7bcc41", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessThumbnail.php": "f2a3695622dc7ccdf5bc13d56ce50046", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessWatermarkImage.php": "617eb2384bb6c7900bb9cf2a72537da6", + "vendor/qcloud/cos-sdk-v5/sample/imageProcessWatermarkText.php": "0a7855b85b97bc507977c5e2790aa652", + "vendor/qcloud/cos-sdk-v5/sample/imageRepairProcess.php": "a861945fef11dcc6f7a92d9003a0f998", + "vendor/qcloud/cos-sdk-v5/sample/imageView.php": "4034cdb98cd67df42d756397d2bfd783", + "vendor/qcloud/cos-sdk-v5/sample/imageWatermark.php": "22296ac545444bc0813e03886c6bf0e3", + "vendor/qcloud/cos-sdk-v5/sample/listBuckets.php": "d89df6d7ef49acaee037c41c23ce1b08", + "vendor/qcloud/cos-sdk-v5/sample/listMultipartUploads.php": "9a00854b7d593b36660b16ccab5e4717", + "vendor/qcloud/cos-sdk-v5/sample/listObjects.php": "e9880699c02319282425be4722c7d73e", + "vendor/qcloud/cos-sdk-v5/sample/listParts.php": "34873f12c80247dec0cc4bfaada1e61f", + "vendor/qcloud/cos-sdk-v5/sample/openFileProcessService.php": "cfad67ea6e899ef46dcc92f31dc05971", + "vendor/qcloud/cos-sdk-v5/sample/openOriginProtect.php": "a06b87c366058f4c79ded83fe61085c4", + "vendor/qcloud/cos-sdk-v5/sample/opticalOcrRecognition.php": "401d0df9e3c3d18701ef6882a8ffc8a2", + "vendor/qcloud/cos-sdk-v5/sample/picOperations.php": "eb8f05cb190e5f9cb6554c98a2f516c7", + "vendor/qcloud/cos-sdk-v5/sample/putBlindWatermark.php": "3b0bbd36388cd80dad9a80f2ba132f8b", + "vendor/qcloud/cos-sdk-v5/sample/putBucketAccelerate.php": "22c378f60c3c2e3eb28c3c28bdbd39ea", + "vendor/qcloud/cos-sdk-v5/sample/putBucketAcl.php": "d2b65e53444710e82d22083afce24413", + "vendor/qcloud/cos-sdk-v5/sample/putBucketCors.php": "0d2007ddc2d1b762a2b16bfca56b46e0", + "vendor/qcloud/cos-sdk-v5/sample/putBucketDomain.php": "b54c7e6b9d60cb7307895be6c0314650", + "vendor/qcloud/cos-sdk-v5/sample/putBucketGuetzli.php": "a6802a20947a9f0d9917108c71957ee5", + "vendor/qcloud/cos-sdk-v5/sample/putBucketImageStyle.php": "cf4f3b6285e8c6b71654a6f3fbb59a02", + "vendor/qcloud/cos-sdk-v5/sample/putBucketInventory.php": "5d67dd01fada269727af6f56ea729f6b", + "vendor/qcloud/cos-sdk-v5/sample/putBucketLifecycle.php": "0ab35dfb7456adfdb535dba3b344722b", + "vendor/qcloud/cos-sdk-v5/sample/putBucketLogging.php": "3b53de3c4eb7e15cb7ceae73cff48a1a", + "vendor/qcloud/cos-sdk-v5/sample/putBucketReferer.php": "140cd8e5ad2ca16e8e00d056ad321f1d", + "vendor/qcloud/cos-sdk-v5/sample/putBucketTagging.php": "79a30eec752bfb2dc43a1505d0c4f993", + "vendor/qcloud/cos-sdk-v5/sample/putBucketWebsite.php": "442e183cb88ca1da058c961e481c6290", + "vendor/qcloud/cos-sdk-v5/sample/putImageStyle.php": "dd2349bd64b819e2e43a765e37bb0377", + "vendor/qcloud/cos-sdk-v5/sample/putObject.php": "14894d87b7ea66c95f9adbb04bd51497", + "vendor/qcloud/cos-sdk-v5/sample/putObjectTagging.php": "6947d96d07f586b2ee593c1b4d137caf", + "vendor/qcloud/cos-sdk-v5/sample/putQrcode.php": "198056a2876313e7640f1ba348bc3422", + "vendor/qcloud/cos-sdk-v5/sample/qrcode.php": "d02a08a3ad187c9c6d4fae4480e918dc", + "vendor/qcloud/cos-sdk-v5/sample/qrcodeGenerate.php": "fc7a2b2ee21c8dd99c29c5b49f8e5975", + "vendor/qcloud/cos-sdk-v5/sample/restoreObject.php": "ed3526a781a8b7b94c2add93744d31ad", + "vendor/qcloud/cos-sdk-v5/sample/selectObjectContent.php": "f123789ae32a196424bb233c426ba3f0", + "vendor/qcloud/cos-sdk-v5/sample/textWatermark.php": "578ba883687b188ff5d529346b90cac5", + "vendor/qcloud/cos-sdk-v5/sample/trafficLimit.php": "bc94012e5eb4e6182ba62181db98d1c4", + "vendor/qcloud/cos-sdk-v5/sample/triggerWorkflow.php": "bdde4c7a003236b3e15527f15414126d", + "vendor/qcloud/cos-sdk-v5/sample/unBindCiService.php": "818693a6acede1799934ecb2f3ae763c", + "vendor/qcloud/cos-sdk-v5/sample/updateDocProcessQueue.php": "6bab7e5f6d94bbb1cb01fce7e7b9001b", + "vendor/qcloud/cos-sdk-v5/sample/updateFileProcessQueue.php": "c6cf21c7db29ef426c8eae78a38a84f0", + "vendor/qcloud/cos-sdk-v5/sample/updateMediaAnimationTemplate.php": "463df7fb695c342feca9c0c5742be042", + "vendor/qcloud/cos-sdk-v5/sample/updateMediaConcatTemplate.php": "c6ad795ed8f99125c300f6e0dd4c640a", + "vendor/qcloud/cos-sdk-v5/sample/updateMediaHighSpeedHdTemplate.php": "52dffc2b347aeb163d35dc6159851826", + "vendor/qcloud/cos-sdk-v5/sample/updateMediaPicProcessTemplate.php": "50a326e080694fffaea354fb540a5694", + "vendor/qcloud/cos-sdk-v5/sample/updateMediaQueue.php": "14c61d6494abdd6c8072870770810bcb", + "vendor/qcloud/cos-sdk-v5/sample/updateMediaSnapshotTemplate.php": "a770e3bbc3bf7a91c70d9b7b6fbbeea1", + "vendor/qcloud/cos-sdk-v5/sample/updateMediaSuperResolutionTemplate.php": "a467ae58992887be47e3eedd22f3708e", + "vendor/qcloud/cos-sdk-v5/sample/updateMediaTranscodeTemplate.php": "51b5607072559870fc03d38773c65419", + "vendor/qcloud/cos-sdk-v5/sample/updateMediaVideoMontageTemplate.php": "d8a94fb31e821cbf4a5cd7e4e50ff24d", + "vendor/qcloud/cos-sdk-v5/sample/updateMediaVideoProcessTemplate.php": "ee6bf5593ef8f33c5cc4bbe8a695d8c5", + "vendor/qcloud/cos-sdk-v5/sample/updateMediaVoiceSeparateTemplate.php": "5a0d15738e1d00df6e58485ce503789f", + "vendor/qcloud/cos-sdk-v5/sample/updateMediaWatermarkTemplate.php": "59f11560ec0b7c35a7c6d3c3bd7925a1", + "vendor/qcloud/cos-sdk-v5/sample/upload.php": "05e7cab97b5f20b4679b8cac8851b5db", + "vendor/qcloud/cos-sdk-v5/sample/uploadFolder.php": "244d4b595692c57e7c97ccce11f180e7", + "vendor/qcloud/cos-sdk-v5/sample/uploadPart.php": "830e56ab5e3d73ff7424be1257246c4c", + "vendor/qcloud/cos-sdk-v5/src/Client.php": "404bc7802821e53c360187003f8a45fd", + "vendor/qcloud/cos-sdk-v5/src/CommandToRequestTransformer.php": "1e8dcb2827245ecb9e110fb523970ec2", + "vendor/qcloud/cos-sdk-v5/src/Common.php": "8ec0c9ef7148f0ef7bc494f6bc7f5623", + "vendor/qcloud/cos-sdk-v5/src/Copy.php": "af86ea515ddeb736ad769b604804bd1f", + "vendor/qcloud/cos-sdk-v5/src/Descriptions.php": "7344a244a1edd93ef4d74298f478ff78", + "vendor/qcloud/cos-sdk-v5/src/Exception/CosException.php": "203b6bf2abc8b11218afa1686a633f65", + "vendor/qcloud/cos-sdk-v5/src/Exception/ServiceResponseException.php": "ef86a7fb99f87d7f7e370fa446cdbd7a", + "vendor/qcloud/cos-sdk-v5/src/ExceptionMiddleware.php": "1740dc8917f1daa6619e6c007331c393", + "vendor/qcloud/cos-sdk-v5/src/ExceptionParser.php": "a3f9c0f806326591ff619939829ddec9", + "vendor/qcloud/cos-sdk-v5/src/ImageParamTemplate/BlindWatermarkTemplate.php": "e98c6d4909b765b71412f18f96f7bb7d", + "vendor/qcloud/cos-sdk-v5/src/ImageParamTemplate/CIParamTransformation.php": "d11913a8569af5330a9072b1a4bb2760", + "vendor/qcloud/cos-sdk-v5/src/ImageParamTemplate/CIProcessTransformation.php": "02684fe4795889842ed63dc9d955071a", + "vendor/qcloud/cos-sdk-v5/src/ImageParamTemplate/ImageMogrTemplate.php": "301c833177bb4a8f1c5a260fe8af2ffb", + "vendor/qcloud/cos-sdk-v5/src/ImageParamTemplate/ImageQrcodeTemplate.php": "b7a6c6894484a48e8d8906190b2d6142", + "vendor/qcloud/cos-sdk-v5/src/ImageParamTemplate/ImageStyleTemplate.php": "073694cfa5b31a1965a7e684b20bf7e5", + "vendor/qcloud/cos-sdk-v5/src/ImageParamTemplate/ImageTemplate.php": "07d4f8453f5b4f04b75222a9518a0616", + "vendor/qcloud/cos-sdk-v5/src/ImageParamTemplate/ImageViewTemplate.php": "018d4c58e85412fa340a35805769b7d1", + "vendor/qcloud/cos-sdk-v5/src/ImageParamTemplate/ImageWatermarkTemplate.php": "dac98e9166f6d0e7e381282046f5ec22", + "vendor/qcloud/cos-sdk-v5/src/ImageParamTemplate/PicOperationsTransformation.php": "3541b0acf8a0421dcdd32f483891ca03", + "vendor/qcloud/cos-sdk-v5/src/ImageParamTemplate/TextWatermarkTemplate.php": "052de868c37d394cf7c5f0e58885ce6e", + "vendor/qcloud/cos-sdk-v5/src/MultipartUpload.php": "8fb378b0f6c6466d21eaff28cf1a2b63", + "vendor/qcloud/cos-sdk-v5/src/RangeDownload.php": "d19e67de2085face760c977fd87dee7a", + "vendor/qcloud/cos-sdk-v5/src/Request/BodyLocation.php": "ff6ce9ed27bbe4d809e1f6c6c72d9893", + "vendor/qcloud/cos-sdk-v5/src/Request/XmlLocation.php": "27759666578f12fb4d98e33ce8aa533f", + "vendor/qcloud/cos-sdk-v5/src/ResultTransformer.php": "35cbfeca6a64f4987fa772f80c03d9e2", + "vendor/qcloud/cos-sdk-v5/src/Serializer.php": "96d872e37c52f222160dbc823301aa91", + "vendor/qcloud/cos-sdk-v5/src/Service.php": "29e88787286f1f3dd76fbc5ab576d636", + "vendor/qcloud/cos-sdk-v5/src/Signature.php": "1bc748f755dc8a0b48d7ce3d71c52786", + "vendor/qcloud/cos-sdk-v5/src/SignatureMiddleware.php": "2a1de5284771598e426f8842243a95ae", + "vendor/qiniu/php-sdk/autoload.php": "795baad89dabfed67195d3c16737693d", + "vendor/qiniu/php-sdk/examples/bucket_lifecycleRule.php": "724955bfd5b80f22bced009c15ed93e6", + "vendor/qiniu/php-sdk/examples/cdn_get_bandwidth.php": "2c15588e1d7e5e6a3bd36fd3dd866e0f", + "vendor/qiniu/php-sdk/examples/cdn_get_flux.php": "51a3457872a6e61877c84be3b9b14538", + "vendor/qiniu/php-sdk/examples/cdn_get_log_list.php": "22b3448adb77efa250ee130092368bdb", + "vendor/qiniu/php-sdk/examples/cdn_get_prefetch_list.php": "6cfa3553a9f1078221eb7f7a28854583", + "vendor/qiniu/php-sdk/examples/cdn_get_refresh_list.php": "da81da948d93152f6ac79c6cc742804a", + "vendor/qiniu/php-sdk/examples/cdn_refresh_urls_dirs.php": "3aae14afeb118c659cc5b7d46f6f18e7", + "vendor/qiniu/php-sdk/examples/cdn_timestamp_antileech.php": "3a50cdbcf31308fff71bd33e21aed907", + "vendor/qiniu/php-sdk/examples/censor_image.php": "765eb11ba4f080580f3f41220bbf0332", + "vendor/qiniu/php-sdk/examples/censor_video.php": "28f297db2b3193dbcfb869360514b874", + "vendor/qiniu/php-sdk/examples/delete_bucket.php": "5f65c8c8616b9a7a4764c37b45892ee3", + "vendor/qiniu/php-sdk/examples/delete_bucketEvent.php": "9d8f427063e5bc1c10bf2bb41d52bbac", + "vendor/qiniu/php-sdk/examples/delete_bucketLifecycleRule.php": "40bb59035ecebe598870845864d6f4b2", + "vendor/qiniu/php-sdk/examples/get_bucketEvents.php": "bee578eeb1195b771114d0ad1f8ff134", + "vendor/qiniu/php-sdk/examples/get_bucketLifecycleRules.php": "941b1c09f8e93d1d169c8c5934ecf913", + "vendor/qiniu/php-sdk/examples/get_bucketList.php": "c13d4163222e88272d398e06e6a9bc9c", + "vendor/qiniu/php-sdk/examples/get_bucketQuota.php": "af83c168bb1199df28153a4285738845", + "vendor/qiniu/php-sdk/examples/get_bucketinfo.php": "23f3e11ca97958dfd69a0e588f10da91", + "vendor/qiniu/php-sdk/examples/get_bucketinfos.php": "243ed4c2c84bd6a3afca812d44748bdb", + "vendor/qiniu/php-sdk/examples/get_corsRules.php": "b56cc67e51ae9d43d10adeaec53307b3", + "vendor/qiniu/php-sdk/examples/image_url_builder.php": "c2a97c63a8a8eaa4d0d58041f5915662", + "vendor/qiniu/php-sdk/examples/persistent_fop_init.php": "732ba5e2672ad1a771053ae93e8906ae", + "vendor/qiniu/php-sdk/examples/persistent_fop_status.php": "094e2970fed994fe5c04809b0651536c", + "vendor/qiniu/php-sdk/examples/pfop_mkzip.php": "ce2ed2a943d19639e25f8f568de1dec9", + "vendor/qiniu/php-sdk/examples/pfop_vframe.php": "5bae85689d4bb05bad2f086958420164", + "vendor/qiniu/php-sdk/examples/pfop_video_avthumb.php": "45f6735de63bb112a0ece77d99870c34", + "vendor/qiniu/php-sdk/examples/pfop_watermark.php": "0ab8ded738f36c077cf02094331f01c4", + "vendor/qiniu/php-sdk/examples/prefop.php": "5512156153fc4fa196865b5317e74f6a", + "vendor/qiniu/php-sdk/examples/put_bucketAccessMode.php": "68e9ba4497959035583a497189a1a43d", + "vendor/qiniu/php-sdk/examples/put_bucketAccessStyleMode.php": "2d89f2c9e8c7cdcbb497a5f8568d6037", + "vendor/qiniu/php-sdk/examples/put_bucketEvent.php": "79467a02139434d935089874b7325c10", + "vendor/qiniu/php-sdk/examples/put_bucketMaxAge.php": "c1e3ee7cfeaba7319cce7b68d73b64e1", + "vendor/qiniu/php-sdk/examples/put_bucketQuota.php": "3490dc09fa1639a02d074d35b281d8e2", + "vendor/qiniu/php-sdk/examples/put_referAntiLeech.php": "fd1608e908a056dfd6829a79acd19fbb", + "vendor/qiniu/php-sdk/examples/qetag.php": "4910a8763c865ff8ae21c0d0a919fcb1", + "vendor/qiniu/php-sdk/examples/rs_asynch_fetch.php": "25af9924abc70ccd23a723613f4abb55", + "vendor/qiniu/php-sdk/examples/rs_batch_change_mime.php": "e7a1a3d115ef46201f1871a147cc9818", + "vendor/qiniu/php-sdk/examples/rs_batch_change_type.php": "32b3a59ab9a947c86b814b2e11eb42e8", + "vendor/qiniu/php-sdk/examples/rs_batch_copy.php": "720b567f588d754f579970c3447fc7c6", + "vendor/qiniu/php-sdk/examples/rs_batch_delete.php": "3f555c6fdb4cde78587615b541a9a6eb", + "vendor/qiniu/php-sdk/examples/rs_batch_delete_after_days.php": "ee3fe6e2ed187ca79dfb5c1a57a3af0f", + "vendor/qiniu/php-sdk/examples/rs_batch_move.php": "996bef11821794c9b38d4f153e1f4244", + "vendor/qiniu/php-sdk/examples/rs_batch_stat.php": "9a4f9ff25ab19901f708d1472010f899", + "vendor/qiniu/php-sdk/examples/rs_bucket_domains.php": "c7380fac6583c23261108ad69d269cfa", + "vendor/qiniu/php-sdk/examples/rs_buckets.php": "0a195443bebbbc3f721a22678359de9f", + "vendor/qiniu/php-sdk/examples/rs_change_mime.php": "d6fa4a3a794e6283050f83e66bac8d9c", + "vendor/qiniu/php-sdk/examples/rs_change_status.php": "c735d04998f35948b0ac8d21e50f2322", + "vendor/qiniu/php-sdk/examples/rs_change_type.php": "b9dbd1dbfcffb2501e4820d952262c8b", + "vendor/qiniu/php-sdk/examples/rs_copy.php": "f9253162a120846bacd7d2ac7bfd76a1", + "vendor/qiniu/php-sdk/examples/rs_delete.php": "c75d4b6ee2f0564bcfbe758547261174", + "vendor/qiniu/php-sdk/examples/rs_delete_after_days.php": "5926bd038939959a5868ecd034052312", + "vendor/qiniu/php-sdk/examples/rs_download_urls.php": "f6bb1c1dd89db00d4086ae34e0dfa45a", + "vendor/qiniu/php-sdk/examples/rs_fetch.php": "f9ffeb3ab34ddff40338403142282dd4", + "vendor/qiniu/php-sdk/examples/rs_move.php": "b9d743e7df588c5ba8e3aeade06284e5", + "vendor/qiniu/php-sdk/examples/rs_prefetch.php": "db5135d073de37e45515531cff8e1937", + "vendor/qiniu/php-sdk/examples/rs_stat.php": "fd234b3b21940efd789128555a31e928", + "vendor/qiniu/php-sdk/examples/rsf_list_bucket.php": "6d0850f944e6232e6b3b8e5b81800313", + "vendor/qiniu/php-sdk/examples/rsf_list_files.php": "220930844cd9c61f7b8f0151c02c8d25", + "vendor/qiniu/php-sdk/examples/rsf_v2list_bucket.php": "4e507b1a9f932480d7819fb9aaa469d8", + "vendor/qiniu/php-sdk/examples/rtc/rtc_createApp.php": "9a186e363e3f3ccd4097a4dc4d7853b7", + "vendor/qiniu/php-sdk/examples/rtc/rtc_create_roomToken.php": "5f281501d7ba5cb943cb682ec97ccc9b", + "vendor/qiniu/php-sdk/examples/rtc/rtc_deleteApp.php": "797568721a1454f7492ce0d8588cb51a", + "vendor/qiniu/php-sdk/examples/rtc/rtc_getApp.php": "199483b278fab9ba0f0237b929e0b833", + "vendor/qiniu/php-sdk/examples/rtc/rtc_rooms_kickUser.php": "b48ce9ad92575c32185951b1232ee469", + "vendor/qiniu/php-sdk/examples/rtc/rtc_rooms_listActiveRooms.php": "d6cf9c0da4f07d3f60a3749a6e443638", + "vendor/qiniu/php-sdk/examples/rtc/rtc_rooms_listUser.php": "2a76cbd96c31c0973a7d0024de426a01", + "vendor/qiniu/php-sdk/examples/rtc/rtc_rooms_stopMerge.php": "6cf4e40f91d81877a3c4762d1fdc4c40", + "vendor/qiniu/php-sdk/examples/rtc/rtc_updateApp.php": "f59719e5167c0a72983d3ce82da155a6", + "vendor/qiniu/php-sdk/examples/saveas.php": "c9ce580d06914b3b5c68b859e1758b56", + "vendor/qiniu/php-sdk/examples/sms/sms_create_signature.php": "aa9ea61d00e22e0184e4fb3760ac4ca3", + "vendor/qiniu/php-sdk/examples/sms/sms_create_template.php": "39c8ec716c89b9dfa361c20d87a2e795", + "vendor/qiniu/php-sdk/examples/sms/sms_delete_signature.php": "2db71c7a823c70fbdc89fc749fe03f93", + "vendor/qiniu/php-sdk/examples/sms/sms_delete_template.php": "05e2d1fac9db86c9ee41c5fcfbb7b14d", + "vendor/qiniu/php-sdk/examples/sms/sms_edit_signature.php": "d8e8eab76b1140937f065dcad1eb1826", + "vendor/qiniu/php-sdk/examples/sms/sms_edit_template.php": "36c7753f75928a794d6417178f1882ce", + "vendor/qiniu/php-sdk/examples/sms/sms_query_send_sms.php": "d73ec079b1cc2033f02c1840b5a8c8a8", + "vendor/qiniu/php-sdk/examples/sms/sms_query_signature.php": "2257ed7234dce4391c6456ad614243b3", + "vendor/qiniu/php-sdk/examples/sms/sms_query_single_signature.php": "5de29866726b4230244b3b69ca7fce3b", + "vendor/qiniu/php-sdk/examples/sms/sms_query_single_template.php": "2d88b11e835d170c463de05a12dfc5c4", + "vendor/qiniu/php-sdk/examples/sms/sms_query_template.php": "836cda67fac84f37206103badfd173a4", + "vendor/qiniu/php-sdk/examples/sms/sms_send_message.php": "f4d8b6db9a22d0ffa893abd6a2b272d6", + "vendor/qiniu/php-sdk/examples/update_bucketEvent.php": "2c799e3a25b0c4b79368a82a00faa9cd", + "vendor/qiniu/php-sdk/examples/update_bucketLifecycleRule.php": "bd7d970fb63a85e41262da644ab84368", + "vendor/qiniu/php-sdk/examples/upload_and_callback.php": "a53bb4272a40bfd33815fed7bdc59682", + "vendor/qiniu/php-sdk/examples/upload_and_pfop.php": "b9d2b2c4891f7307b390fd0fdf49cb5e", + "vendor/qiniu/php-sdk/examples/upload_mgr_init.php": "ada968d5a6cfed9cfe3b05615f838597", + "vendor/qiniu/php-sdk/examples/upload_multi_demos.php": "3fea6b053aa0e58b29348b029e66e641", + "vendor/qiniu/php-sdk/examples/upload_simple_file.php": "9439d3b1172cee1710a9d0ae17e7164c", + "vendor/qiniu/php-sdk/examples/upload_tokens.php": "f451f0304fb9ef866527e064c695869a", + "vendor/qiniu/php-sdk/examples/upload_verify_callback.php": "c0e020efe1685b0b71408ca7bf1947ee", + "vendor/qiniu/php-sdk/examples/upload_with_qvmzone.php": "0248e834fe7ad684c4dde7abfea97542", + "vendor/qiniu/php-sdk/examples/upload_with_zone.php": "b2d1f00edf3821b86831db63280175a0", + "vendor/qiniu/php-sdk/src/Qiniu/Auth.php": "b383c0a94493a590b9c7502a1c6d96a3", + "vendor/qiniu/php-sdk/src/Qiniu/Cdn/CdnManager.php": "0299c3271baedd5f3b67cc6f0f368183", + "vendor/qiniu/php-sdk/src/Qiniu/Config.php": "5d8115a9f5caf43c7972451402f37c08", + "vendor/qiniu/php-sdk/src/Qiniu/Etag.php": "5bd6be2c32f0e5f0e3686e80d479c009", + "vendor/qiniu/php-sdk/src/Qiniu/Http/Client.php": "f2efaf419ed4234558d8a197917b6599", + "vendor/qiniu/php-sdk/src/Qiniu/Http/Error.php": "835e487674d74bd4413bb8783c9b1a7d", + "vendor/qiniu/php-sdk/src/Qiniu/Http/Request.php": "a155dd3d810b3e6607109294d10ec1c4", + "vendor/qiniu/php-sdk/src/Qiniu/Http/Response.php": "b0c4b3eceae3febfe9b8bf091d1d1f3b", + "vendor/qiniu/php-sdk/src/Qiniu/Processing/ImageUrlBuilder.php": "6027bc4a2326437db98745e3e995f108", + "vendor/qiniu/php-sdk/src/Qiniu/Processing/Operation.php": "3413142c6d26fd29ce54837dc2a6e381", + "vendor/qiniu/php-sdk/src/Qiniu/Processing/PersistentFop.php": "c3b1d325dbcd01530ae1c23bbf49f6e8", + "vendor/qiniu/php-sdk/src/Qiniu/Region.php": "5db0da7ebe935fd8c6b1e8b936d6b6d6", + "vendor/qiniu/php-sdk/src/Qiniu/Rtc/AppClient.php": "86aab3b2be95d953e6e2403b848aa9de", + "vendor/qiniu/php-sdk/src/Qiniu/Sms/Sms.php": "2bf18d70f7d80e1e8dfc5dea5e0b4253", + "vendor/qiniu/php-sdk/src/Qiniu/Storage/ArgusManager.php": "2c010f30445154692e1bf27df73be44e", + "vendor/qiniu/php-sdk/src/Qiniu/Storage/BucketManager.php": "a1153a79fab7528837cabf3add5bef74", + "vendor/qiniu/php-sdk/src/Qiniu/Storage/FormUploader.php": "e0f443e28c7abe658c28a49356690cbc", + "vendor/qiniu/php-sdk/src/Qiniu/Storage/ResumeUploader.php": "e99bdfc19d693e621358a6be998257a7", + "vendor/qiniu/php-sdk/src/Qiniu/Storage/UploadManager.php": "bc7092cf8f4d197c4bcb2e040af74038", + "vendor/qiniu/php-sdk/src/Qiniu/Zone.php": "777190dff28bba58bf3bae2c4d4c4bad", + "vendor/qiniu/php-sdk/src/Qiniu/functions.php": "5cc7f7010cc4066611baf92edad8f38e", + "vendor/qiniu/php-sdk/tests/Qiniu/Tests/AuthTest.php": "885a3002f275d5f5928b4775df8f4a38", + "vendor/qiniu/php-sdk/tests/Qiniu/Tests/Base64Test.php": "32074b5d4b58a317f086900578108091", + "vendor/qiniu/php-sdk/tests/Qiniu/Tests/BucketTest.php": "c9aee183c0002b19febdd5f995a0261e", + "vendor/qiniu/php-sdk/tests/Qiniu/Tests/CdnManagerTest.php": "61cebb433a4e4eea08f2c8a78ce3baa2", + "vendor/qiniu/php-sdk/tests/Qiniu/Tests/Crc32Test.php": "28bc073c2dacc51db36ff68f4bb90851", + "vendor/qiniu/php-sdk/tests/Qiniu/Tests/DownloadTest.php": "35fdd6beba7d2b8b63919d85d78a0ac3", + "vendor/qiniu/php-sdk/tests/Qiniu/Tests/EtagTest.php": "81240a8eb12c9be7f943c7927c65aa7e", + "vendor/qiniu/php-sdk/tests/Qiniu/Tests/FopTest.php": "bf2270c162039216268983c96f6a82a1", + "vendor/qiniu/php-sdk/tests/Qiniu/Tests/FormUpTest.php": "4e9900db55fdc4f9b3c996162912a93c", + "vendor/qiniu/php-sdk/tests/Qiniu/Tests/HttpTest.php": "e2657927cddc647dbdd373a598b37b1e", + "vendor/qiniu/php-sdk/tests/Qiniu/Tests/ImageUrlBuilderTest.php": "2b3ac0522b20283465e7ff29379087a0", + "vendor/qiniu/php-sdk/tests/Qiniu/Tests/PfopTest.php": "ad4d42a3ab6a1f44c83661691d5e04d1", + "vendor/qiniu/php-sdk/tests/Qiniu/Tests/ResumeUpTest.php": "cddafc78cd11eb410cffdd926ae4c471", + "vendor/qiniu/php-sdk/tests/Qiniu/Tests/ZoneTest.php": "14c1d4acd176c5fe818022c75bb56c7a", + "vendor/qiniu/php-sdk/tests/bootstrap.php": "f45cbb5c73fea029a89c681fdeeab20e", + "vendor/ralouphie/getallheaders/src/getallheaders.php": "fe517816cb82a5e67e62c8d0241fce3a", + "vendor/rmccue/requests/library/Deprecated.php": "618f622f8e53b4b105b7c7c65b5ef9d9", + "vendor/rmccue/requests/library/Requests.php": "908800fc5643d3b48d6d0ce4a64697a7", + "vendor/rmccue/requests/src/Auth/Basic.php": "07f677dd5906177bd39310317d606fca", + "vendor/rmccue/requests/src/Auth.php": "0583621858ac517adcb44fec48ffd4c1", + "vendor/rmccue/requests/src/Autoload.php": "4c74798af9f5e699ff374178ddf40c47", + "vendor/rmccue/requests/src/Capability.php": "64b18c1a43472a9f850f595c5e703aed", + "vendor/rmccue/requests/src/Cookie/Jar.php": "003eba2eeea67375cd8e174760001c3c", + "vendor/rmccue/requests/src/Cookie.php": "3e1731c8d40f84f6f576bc9372e74b6a", + "vendor/rmccue/requests/src/Exception/ArgumentCount.php": "e48fbd1b244af0cc7acfe9dc66d84455", + "vendor/rmccue/requests/src/Exception/Http/Status304.php": "70c45d8d1bfd3aa37d9117fa6c0d77da", + "vendor/rmccue/requests/src/Exception/Http/Status305.php": "65bb18acde517fb0931036cc29858487", + "vendor/rmccue/requests/src/Exception/Http/Status306.php": "2f486b8a7b4f06933b2c3c60530e7b7e", + "vendor/rmccue/requests/src/Exception/Http/Status400.php": "476c43b51a207d902adf1f620ac2395d", + "vendor/rmccue/requests/src/Exception/Http/Status401.php": "8d975283754df0ec8b362ff1ff525cea", + "vendor/rmccue/requests/src/Exception/Http/Status402.php": "a7792033f74e814a43ba4077fd9f43ab", + "vendor/rmccue/requests/src/Exception/Http/Status403.php": "23594f1e647343480b4d47b990d537bd", + "vendor/rmccue/requests/src/Exception/Http/Status404.php": "4921c482e066dcf65a704c2e08726587", + "vendor/rmccue/requests/src/Exception/Http/Status405.php": "bec4f2b33123639cce1c4e9e06a3a20b", + "vendor/rmccue/requests/src/Exception/Http/Status406.php": "f90534feb7a6292d87d580f6a5004799", + "vendor/rmccue/requests/src/Exception/Http/Status407.php": "c15a71836d50ddd205a427cb885bde73", + "vendor/rmccue/requests/src/Exception/Http/Status408.php": "4cfad9c8e2c75d70c3a6d68a114bfdc9", + "vendor/rmccue/requests/src/Exception/Http/Status409.php": "0dd40f011f5afa443697e8f324cf5b24", + "vendor/rmccue/requests/src/Exception/Http/Status410.php": "c169ae9f4c298429b98837cf0166667d", + "vendor/rmccue/requests/src/Exception/Http/Status411.php": "7fd7b1ac968fa83449936349760a1a68", + "vendor/rmccue/requests/src/Exception/Http/Status412.php": "83b7f9b7dc965b383f5e46f2e85954ff", + "vendor/rmccue/requests/src/Exception/Http/Status413.php": "d0b5d7240c3dec5705666150b79fba77", + "vendor/rmccue/requests/src/Exception/Http/Status414.php": "e3b09a4465b5b86cae177eeb894aa970", + "vendor/rmccue/requests/src/Exception/Http/Status415.php": "0ad365d4181addf05e4666806deb9002", + "vendor/rmccue/requests/src/Exception/Http/Status416.php": "134ad740455b58a49c32cdff51f21327", + "vendor/rmccue/requests/src/Exception/Http/Status417.php": "f3ac936e4cbf85c12ccc5578a3d1cd28", + "vendor/rmccue/requests/src/Exception/Http/Status418.php": "fcace95082bef577b48e817535a46034", + "vendor/rmccue/requests/src/Exception/Http/Status428.php": "2f71ebc0807849e59caa95a0a08f8850", + "vendor/rmccue/requests/src/Exception/Http/Status429.php": "6052186d1a704d8f3d7bef3b7cfcb63a", + "vendor/rmccue/requests/src/Exception/Http/Status431.php": "3f4dbc2dda2d049b6b08115cf3d1a488", + "vendor/rmccue/requests/src/Exception/Http/Status500.php": "d016d2428e4ed77854115a873087e57a", + "vendor/rmccue/requests/src/Exception/Http/Status501.php": "bc059181eab80c84d16a18ba4e9afe66", + "vendor/rmccue/requests/src/Exception/Http/Status502.php": "688f47a5db6451aaed749c249dbfa225", + "vendor/rmccue/requests/src/Exception/Http/Status503.php": "37c6e2cfb7c1f2dc0d7c3bbd25bf89d8", + "vendor/rmccue/requests/src/Exception/Http/Status504.php": "bc2167de474e26eb026173af6f491677", + "vendor/rmccue/requests/src/Exception/Http/Status505.php": "2e22dab1ee14ae890ecab9e1a5e7e45f", + "vendor/rmccue/requests/src/Exception/Http/Status511.php": "d1bac7f41a133145a9576b98adfaeae6", + "vendor/rmccue/requests/src/Exception/Http/StatusUnknown.php": "8c4d25bb7da4d2857028f2a6dcec0cc3", + "vendor/rmccue/requests/src/Exception/Http.php": "6c8738aafb5ab75a9d1ca3bfcd8fdc03", + "vendor/rmccue/requests/src/Exception/InvalidArgument.php": "be0bb752251cba0fe639482619469992", + "vendor/rmccue/requests/src/Exception/Transport/Curl.php": "1dd0a2a25231a1f9d218558d92555104", + "vendor/rmccue/requests/src/Exception/Transport.php": "d80b4861e0f28bf21f78c1b39de810a3", + "vendor/rmccue/requests/src/Exception.php": "859c9281f98f0659d90bdbf795eae3be", + "vendor/rmccue/requests/src/HookManager.php": "3ba89520847dd48b1e81a5fef89d0133", + "vendor/rmccue/requests/src/Hooks.php": "a64080973f1b08d58093ca064a824355", + "vendor/rmccue/requests/src/IdnaEncoder.php": "bb063a926fd7dc8d7a8f51028f710857", + "vendor/rmccue/requests/src/Ipv6.php": "12c914b76ea26a9df4b6e51d72ee9d94", + "vendor/rmccue/requests/src/Iri.php": "6e313356eec792c8fcd27913a8ddd033", + "vendor/rmccue/requests/src/Port.php": "0774e4fc32e041d4eb4e723829cad314", + "vendor/rmccue/requests/src/Proxy/Http.php": "5b873404be6af2281bd609f9b52db0b6", + "vendor/rmccue/requests/src/Proxy.php": "e65a174c70cbffa1798d63bcebf69a80", + "vendor/rmccue/requests/src/Requests.php": "49d1e4cbe370a1808982dc36add6658d", + "vendor/rmccue/requests/src/Response/Headers.php": "1c10e4ab29d3d05cdfec23983fbf2a4a", + "vendor/rmccue/requests/src/Response.php": "cd032f9a0083d90c39f3ecffa47215fa", + "vendor/rmccue/requests/src/Session.php": "04fb011a433eab9d73330c5cd0c9f518", + "vendor/rmccue/requests/src/Ssl.php": "541ecee9d8766275cfd8b63abacd7cc9", + "vendor/rmccue/requests/src/Transport/Curl.php": "cf241f7aec95fbb8bd6cbabdcb067acf", + "vendor/rmccue/requests/src/Transport/Fsockopen.php": "81360916fc2e1ebb0b60ee16ad9746ec", + "vendor/rmccue/requests/src/Transport.php": "84d40d1a00f89544bf81f5bd27abd9da", + "vendor/rmccue/requests/src/Utility/CaseInsensitiveDictionary.php": "aa969b632343d03123a8a66f16ed9ed3", + "vendor/rmccue/requests/src/Utility/FilteredIterator.php": "653dde78391c7699ceebe6f3859f9b85", + "vendor/rmccue/requests/src/Utility/InputValidator.php": "55190dcaae03e4599065094c8c106c16", + "vendor/services.php": "3ddced98a5a0633e8940ded5edbac40f", + "vendor/spatie/macroable/src/Macroable.php": "bcb7d910a74ae6fb2ff4c52fc5067172", + "vendor/symfony/cache/Adapter/AbstractAdapter.php": "6833753ce701d33faca59661622fbe4b", + "vendor/symfony/cache/Adapter/AbstractTagAwareAdapter.php": "5c88f0a406a2b0c9228e78a5a5c0c9ea", + "vendor/symfony/cache/Adapter/AdapterInterface.php": "d7f5c6b2f002d2c7ab677c3e550e10f2", + "vendor/symfony/cache/Adapter/ApcuAdapter.php": "650120e57bc1afe3f5a7ac757db23acc", + "vendor/symfony/cache/Adapter/ArrayAdapter.php": "731d37151767bca49501fa8daeebaa06", + "vendor/symfony/cache/Adapter/ChainAdapter.php": "765eee958940d3ae04a835eb7e965718", + "vendor/symfony/cache/Adapter/CouchbaseBucketAdapter.php": "d8df98bae857b4ebc06ce45027abc633", + "vendor/symfony/cache/Adapter/CouchbaseCollectionAdapter.php": "6a5f1dccf5c177d7e01d25db1e6b23e9", + "vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php": "c2c9d3f1198d832f50384283f0092583", + "vendor/symfony/cache/Adapter/FilesystemAdapter.php": "c121913e0e54124baa87d9d1990140b3", + "vendor/symfony/cache/Adapter/FilesystemTagAwareAdapter.php": "385db6b397afb9f676acf75334c7edea", + "vendor/symfony/cache/Adapter/MemcachedAdapter.php": "2c35f5bf8d60fa919a6eece388ae89a8", + "vendor/symfony/cache/Adapter/NullAdapter.php": "a9576e1fbc0c85cf3c1b6e2dd55120a5", + "vendor/symfony/cache/Adapter/ParameterNormalizer.php": "1caa50d34815d2287ee417ee4cf33fa8", + "vendor/symfony/cache/Adapter/PdoAdapter.php": "43eba3374b0a6462063bc065521b939a", + "vendor/symfony/cache/Adapter/PhpArrayAdapter.php": "10c6fe8a3dcb913d144530b3b2b759da", + "vendor/symfony/cache/Adapter/PhpFilesAdapter.php": "499ead2362a322f265b12c1b8e88a138", + "vendor/symfony/cache/Adapter/ProxyAdapter.php": "4f8f3fd140234bd7f7cfde3e9b5a1768", + "vendor/symfony/cache/Adapter/Psr16Adapter.php": "0456f8c67ba562a0114eca0d8b98becb", + "vendor/symfony/cache/Adapter/RedisAdapter.php": "23a678a0f4945714a5c8834e93f79d7e", + "vendor/symfony/cache/Adapter/RedisTagAwareAdapter.php": "4cfa067abe6307713dad39aef5894143", + "vendor/symfony/cache/Adapter/TagAwareAdapter.php": "d42a991f1db1d8103d9860bdd746e934", + "vendor/symfony/cache/Adapter/TagAwareAdapterInterface.php": "39dea0072f79d18e421ea509c0dbf9c0", + "vendor/symfony/cache/Adapter/TraceableAdapter.php": "a29495e8ba96ac8dfcacd4c2c16a629d", + "vendor/symfony/cache/Adapter/TraceableTagAwareAdapter.php": "e488a2267d8ebda42593cb50196e789f", + "vendor/symfony/cache/CacheItem.php": "e56ccc594459ae8757964b08f4d5be97", + "vendor/symfony/cache/DataCollector/CacheDataCollector.php": "021475a7f96b733b77f7c0d13d5230db", + "vendor/symfony/cache/DependencyInjection/CacheCollectorPass.php": "3e20f0469326aee3cf8e8525a2098a31", + "vendor/symfony/cache/DependencyInjection/CachePoolClearerPass.php": "83378494d411e1ac604a1340ed5e9638", + "vendor/symfony/cache/DependencyInjection/CachePoolPass.php": "40572942f9bfc1fe6e684e58d6ce354d", + "vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php": "21890c122e1c0399d43321717e79f6eb", + "vendor/symfony/cache/Exception/CacheException.php": "de4ae76df1a7657aadd78da3d023face", + "vendor/symfony/cache/Exception/InvalidArgumentException.php": "6dbccee03675c2c85c926cffde60910e", + "vendor/symfony/cache/Exception/LogicException.php": "727570694e889cbd4031e3d77eae44f6", + "vendor/symfony/cache/LockRegistry.php": "d0a9cc0c535a34d05f1bb10b1d884439", + "vendor/symfony/cache/Marshaller/DefaultMarshaller.php": "6437422c2c4a2a97a5fa633cfeea58de", + "vendor/symfony/cache/Marshaller/DeflateMarshaller.php": "96d7963af1ed7637a05d0a806d00e8a9", + "vendor/symfony/cache/Marshaller/MarshallerInterface.php": "cff924e483549643a34841613007cf25", + "vendor/symfony/cache/Marshaller/SodiumMarshaller.php": "46c29e98dacba8f4f56414f201d1feaa", + "vendor/symfony/cache/Marshaller/TagAwareMarshaller.php": "39a4c0549abbd90897dd3c70b63f9611", + "vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php": "93d80a47e183a3074a981d93a5299264", + "vendor/symfony/cache/Messenger/EarlyExpirationHandler.php": "1a06fb591dc50bb3a56b1703caa0f1a8", + "vendor/symfony/cache/Messenger/EarlyExpirationMessage.php": "2c6b537ca9cfc64454b1b6058e4756a2", + "vendor/symfony/cache/PruneableInterface.php": "3feb6aca8eb37a08a5b9f7192cac4652", + "vendor/symfony/cache/Psr16Cache.php": "6706202fe330ba33db6fc4de664de911", + "vendor/symfony/cache/ResettableInterface.php": "8d97984ff156b1e0ad1e2a62e651f235", + "vendor/symfony/cache/Traits/AbstractAdapterTrait.php": "23fc4647bb69f6a88d9ade1d0102b3ea", + "vendor/symfony/cache/Traits/ContractsTrait.php": "e4823602902dce898c1b2b614016205b", + "vendor/symfony/cache/Traits/FilesystemCommonTrait.php": "2d7ba9b68272919e430b58f3f0789a1d", + "vendor/symfony/cache/Traits/FilesystemTrait.php": "2d5e1286e83ee38f5b9a5d2881491329", + "vendor/symfony/cache/Traits/ProxyTrait.php": "7f28e0e02639f92f0bfc56ae52ee2c5f", + "vendor/symfony/cache/Traits/RedisClusterNodeProxy.php": "d9188c0514838ee6c3749ceca048c94b", + "vendor/symfony/cache/Traits/RedisClusterProxy.php": "dfca62e9961eab210d33e96a3a8bb140", + "vendor/symfony/cache/Traits/RedisProxy.php": "83b5c0bf0fa012aba3740e4a4685d573", + "vendor/symfony/cache/Traits/RedisTrait.php": "e530952eca2374a358ba99f668fa28a7", + "vendor/symfony/cache-contracts/CacheInterface.php": "651e447fac04148e92839e96cde9a40f", + "vendor/symfony/cache-contracts/CacheTrait.php": "5b7ac01094dc13cc0dc5a86587f99bb4", + "vendor/symfony/cache-contracts/CallbackInterface.php": "09fd21bf7c1bee9058b50e50af58caa5", + "vendor/symfony/cache-contracts/ItemInterface.php": "cd70fe790386cbe6e20920e0688a512e", + "vendor/symfony/cache-contracts/TagAwareCacheInterface.php": "2c3793c60e9ce0571fd6ad275ec46af9", + "vendor/symfony/deprecation-contracts/function.php": "c6a33c867aa7b5b0f657ae43625d1349", + "vendor/symfony/http-client/AmpHttpClient.php": "8b3fcb71bff32fbdec06a52099d00439", + "vendor/symfony/http-client/AsyncDecoratorTrait.php": "b3e24c573a8af4fd9218b58928fe1fa1", + "vendor/symfony/http-client/CachingHttpClient.php": "51a74cdcb4131332b96064dd5aa057e5", + "vendor/symfony/http-client/Chunk/DataChunk.php": "ad80c080ef8dc06ace76ee7e58da87bf", + "vendor/symfony/http-client/Chunk/ErrorChunk.php": "d587dc8ed8af7da6469ad4af7492c103", + "vendor/symfony/http-client/Chunk/FirstChunk.php": "8a669ff2dfa14c63f1c19a4c874468d8", + "vendor/symfony/http-client/Chunk/InformationalChunk.php": "12ff406c6787d4869cb94d0fc17dd130", + "vendor/symfony/http-client/Chunk/LastChunk.php": "0bbbbaaa417c5449bebbc2faffdd732d", + "vendor/symfony/http-client/Chunk/ServerSentEvent.php": "29097849f89d3fb79b3f558e22d27cfd", + "vendor/symfony/http-client/CurlHttpClient.php": "d2a1073d477214fc8b75db96a417bb23", + "vendor/symfony/http-client/DataCollector/HttpClientDataCollector.php": "209980a7215481938987e86c0d3e80fc", + "vendor/symfony/http-client/DecoratorTrait.php": "954204c3b3b2b7a4be5c5c94da4022c6", + "vendor/symfony/http-client/DependencyInjection/HttpClientPass.php": "28f5ff853494d5d5542ffb8077483fc4", + "vendor/symfony/http-client/EventSourceHttpClient.php": "6163d2e2be1d5622448a4ad491bc19e7", + "vendor/symfony/http-client/Exception/ClientException.php": "4233d3e98ac563d1a19288f102aabaa9", + "vendor/symfony/http-client/Exception/EventSourceException.php": "45baa04a55d1fa58465ff552efb02f76", + "vendor/symfony/http-client/Exception/HttpExceptionTrait.php": "1e031398eac9c655189c29216ab70c2c", + "vendor/symfony/http-client/Exception/InvalidArgumentException.php": "1dee8b8744c6c20a1368a2e312afd536", + "vendor/symfony/http-client/Exception/JsonException.php": "6cbe74731d39cb321662ab74e7fae89d", + "vendor/symfony/http-client/Exception/RedirectionException.php": "28b01c77b6e71b55cdbc5fb8f7aa9cdc", + "vendor/symfony/http-client/Exception/ServerException.php": "20c7e60540c7a85f1ba8fd4fdcf2e3cb", + "vendor/symfony/http-client/Exception/TimeoutException.php": "0bb630d3acdb76f4cce44b2f7f549333", + "vendor/symfony/http-client/Exception/TransportException.php": "6ee9fa1abc5231c07ae4a53f59856f6f", + "vendor/symfony/http-client/HttpClient.php": "f099f7d2db678587ac1106a3c1da9346", + "vendor/symfony/http-client/HttpClientTrait.php": "2d06a55905efa49e46bd55a3087fe451", + "vendor/symfony/http-client/HttpOptions.php": "c15d758329fb9337b02b6e8debf22a20", + "vendor/symfony/http-client/HttplugClient.php": "2e9f6094057f50c1378b95114d0b0535", + "vendor/symfony/http-client/Internal/AmpBody.php": "c98ddd8e6ccae123f4f4ebb4f52f34d8", + "vendor/symfony/http-client/Internal/AmpClientState.php": "5fc5b1fb969bd97ec42dc46fc426fa7e", + "vendor/symfony/http-client/Internal/AmpListener.php": "811cf8faee3df6f4561f4edf3fc06491", + "vendor/symfony/http-client/Internal/AmpResolver.php": "9d30f86c2130791f24f666c860030767", + "vendor/symfony/http-client/Internal/Canary.php": "15aa14d358645f5881a6594b2b113e22", + "vendor/symfony/http-client/Internal/ClientState.php": "e0aa087b411619f558a641a148210aa1", + "vendor/symfony/http-client/Internal/CurlClientState.php": "476e1fd0174be2d0124ec664a40983fd", + "vendor/symfony/http-client/Internal/DnsCache.php": "600cab4e5681273a5d1ca58874f5caba", + "vendor/symfony/http-client/Internal/HttplugWaitLoop.php": "a27c2bbd42f7c8945123fac46aeae15f", + "vendor/symfony/http-client/Internal/NativeClientState.php": "f0e25e7ced3ee324517838f5607c837c", + "vendor/symfony/http-client/Internal/PushedResponse.php": "53b57338f54c82a431d96ace36121dd1", + "vendor/symfony/http-client/MockHttpClient.php": "0b969b67fe7392aba9b008bfcc7cdba3", + "vendor/symfony/http-client/NativeHttpClient.php": "1ef328837231e5c49f72a9810405d92d", + "vendor/symfony/http-client/NoPrivateNetworkHttpClient.php": "fb3f8757dfa620eaf8af7e146932df5a", + "vendor/symfony/http-client/Psr18Client.php": "963574a4cb23cf3daf8ce3783ba625bf", + "vendor/symfony/http-client/Response/AmpResponse.php": "365715c1000d948f29210d9a547bbd51", + "vendor/symfony/http-client/Response/AsyncContext.php": "8b502348e653391de9132abc299e3761", + "vendor/symfony/http-client/Response/AsyncResponse.php": "a8a485060237ae822ed170db07a2d934", + "vendor/symfony/http-client/Response/CommonResponseTrait.php": "d537721807719e9ed56b596853b45c9c", + "vendor/symfony/http-client/Response/CurlResponse.php": "cfe5c08c0cea4ebfb4f2c9e742419f94", + "vendor/symfony/http-client/Response/HttplugPromise.php": "ef172fe39d4730a963265671c601ee3d", + "vendor/symfony/http-client/Response/MockResponse.php": "5d5847ae03fdec9886cc5abc3d12b929", + "vendor/symfony/http-client/Response/NativeResponse.php": "5323c4457d3e76289296be317334b3bd", + "vendor/symfony/http-client/Response/ResponseStream.php": "50ec7ebc879ae453b185b6c756464475", + "vendor/symfony/http-client/Response/StreamWrapper.php": "92dee47a966f0294cd1885cd808d69a4", + "vendor/symfony/http-client/Response/StreamableInterface.php": "f7c90129f887fa0bf4761ff66615e0e2", + "vendor/symfony/http-client/Response/TraceableResponse.php": "74904ec0d246f8bf5dd673ba20950769", + "vendor/symfony/http-client/Response/TransportResponseTrait.php": "6460ec840924c083347415dec264f40c", + "vendor/symfony/http-client/Retry/GenericRetryStrategy.php": "ae1db1783b667c75fc9dbdf441f66982", + "vendor/symfony/http-client/Retry/RetryStrategyInterface.php": "395d2ba28d6528d1edfe12f44b316f5d", + "vendor/symfony/http-client/RetryableHttpClient.php": "19c6e9f16e38d12f92a8ce9a0d711d6d", + "vendor/symfony/http-client/ScopingHttpClient.php": "d64208f3678180b7afb3d611e35c80a9", + "vendor/symfony/http-client/TraceableHttpClient.php": "de6d6adb6803f36c87ecd95a00a5b8bf", + "vendor/symfony/http-client-contracts/ChunkInterface.php": "0d653abcc97c06dd03006502cba17717", + "vendor/symfony/http-client-contracts/Exception/ClientExceptionInterface.php": "27381213ae9a9012e45b61a5ee251ec6", + "vendor/symfony/http-client-contracts/Exception/DecodingExceptionInterface.php": "5d67cf0f585dc360f4220a751d2899f1", + "vendor/symfony/http-client-contracts/Exception/ExceptionInterface.php": "f1ffbec956b5cf3e2366d7c7d9d29346", + "vendor/symfony/http-client-contracts/Exception/HttpExceptionInterface.php": "eeccfcfda215f4a8d896fb066db5e096", + "vendor/symfony/http-client-contracts/Exception/RedirectionExceptionInterface.php": "e26e11a71519e303ebbde884aa2d63e7", + "vendor/symfony/http-client-contracts/Exception/ServerExceptionInterface.php": "ef11f5afc45fc187e8ffeb95f0d691b4", + "vendor/symfony/http-client-contracts/Exception/TimeoutExceptionInterface.php": "22ae530d49376df7dd0df77a6059bd32", + "vendor/symfony/http-client-contracts/Exception/TransportExceptionInterface.php": "dab1984626e80365208a9840db389142", + "vendor/symfony/http-client-contracts/HttpClientInterface.php": "5be3498caf888d08043615fe7eb54303", + "vendor/symfony/http-client-contracts/ResponseInterface.php": "415f7fb9b2af1f6239970f2a43fbc609", + "vendor/symfony/http-client-contracts/ResponseStreamInterface.php": "08ca6c894c3869a1c9e1f124488f92a9", + "vendor/symfony/http-client-contracts/Test/Fixtures/web/index.php": "6555b5b87e91876d22baf65254a90d34", + "vendor/symfony/http-client-contracts/Test/HttpClientTestCase.php": "0f441b73843c58d3862b00f56f79de87", + "vendor/symfony/http-client-contracts/Test/TestHttpServer.php": "3a5cb1fa609c5ab6961db8c4a7018d2c", + "vendor/symfony/http-foundation/AcceptHeader.php": "ebaea96eef2ed5514270c176dfb6d1a4", + "vendor/symfony/http-foundation/AcceptHeaderItem.php": "8de93f8978f0ac7c05002d30cc3272ea", + "vendor/symfony/http-foundation/BinaryFileResponse.php": "1dfa983fbd12d6ee6792d246082135f0", + "vendor/symfony/http-foundation/Cookie.php": "e9855aac864285151a053396d852eafe", + "vendor/symfony/http-foundation/Exception/BadRequestException.php": "322ee642df5121b5f6891f476123db32", + "vendor/symfony/http-foundation/Exception/ConflictingHeadersException.php": "6fd129d1efd277bdca290007f6d7d535", + "vendor/symfony/http-foundation/Exception/JsonException.php": "c6747ea381caf7f5fd8148626e52e890", + "vendor/symfony/http-foundation/Exception/RequestExceptionInterface.php": "1cd2c5e2f3c52c95294561b3e83392cb", + "vendor/symfony/http-foundation/Exception/SessionNotFoundException.php": "ec261d67906ba80395e698aa441281dc", + "vendor/symfony/http-foundation/Exception/SuspiciousOperationException.php": "7b93847625a345f60f20aae0ba500ca9", + "vendor/symfony/http-foundation/ExpressionRequestMatcher.php": "2f8154a4fab81985993847ecf9d05a43", + "vendor/symfony/http-foundation/File/Exception/AccessDeniedException.php": "218ba96b1203279ccf7e65938b10deda", + "vendor/symfony/http-foundation/File/Exception/CannotWriteFileException.php": "c15cd38d2a45cd949579bed5c09d59b3", + "vendor/symfony/http-foundation/File/Exception/ExtensionFileException.php": "734ed5d0c04c4acb79bcaf61b852c300", + "vendor/symfony/http-foundation/File/Exception/FileException.php": "33ff8592de1c97382cbf3264f5f3dfc9", + "vendor/symfony/http-foundation/File/Exception/FileNotFoundException.php": "0c353276b57a5d559b5d50faa28b573f", + "vendor/symfony/http-foundation/File/Exception/FormSizeFileException.php": "116dc7409721f53014cd45171d9d7519", + "vendor/symfony/http-foundation/File/Exception/IniSizeFileException.php": "4e6d5b169498ddaffa362a114249a05a", + "vendor/symfony/http-foundation/File/Exception/NoFileException.php": "a9bdc85c7d2b3a23324d2340e9be0566", + "vendor/symfony/http-foundation/File/Exception/NoTmpDirFileException.php": "af18ae2352412a5b1c4967f6ec94637d", + "vendor/symfony/http-foundation/File/Exception/PartialFileException.php": "ef080b13d7fa8109987c4522bb64e854", + "vendor/symfony/http-foundation/File/Exception/UnexpectedTypeException.php": "6447ce2a7b339f86b61662fac51bd288", + "vendor/symfony/http-foundation/File/Exception/UploadException.php": "cac23f7007e150884750f7ebe5142326", + "vendor/symfony/http-foundation/File/File.php": "79e0b4a8c6e7a60d2949cd8d45260df2", + "vendor/symfony/http-foundation/File/Stream.php": "6989f59f971849511703dc7ef2f7a3b0", + "vendor/symfony/http-foundation/File/UploadedFile.php": "aa7716ff3f4d6d5a31ca9c0795fb9f34", + "vendor/symfony/http-foundation/FileBag.php": "59ce87430312478c21e805b6db096625", + "vendor/symfony/http-foundation/HeaderBag.php": "075787768641f4ec74b4c09981cb6c0d", + "vendor/symfony/http-foundation/HeaderUtils.php": "81e66de584dfd0e7f67e6ae4248fb9eb", + "vendor/symfony/http-foundation/InputBag.php": "0141a213dee55617a78e29740431f737", + "vendor/symfony/http-foundation/IpUtils.php": "984c4275ed9219f25928ed8713eb1463", + "vendor/symfony/http-foundation/JsonResponse.php": "3610dc8b8493b5e0970a7f2890c95356", + "vendor/symfony/http-foundation/ParameterBag.php": "c545317c29a70283246b262a9f67a1af", + "vendor/symfony/http-foundation/RateLimiter/AbstractRequestRateLimiter.php": "d1417a1a8e922c74897804809727710e", + "vendor/symfony/http-foundation/RateLimiter/RequestRateLimiterInterface.php": "a7dbc724df1b3053f651f8baa9c2e3e4", + "vendor/symfony/http-foundation/RedirectResponse.php": "da2fde65e0aa8aa58817c3b443928bd8", + "vendor/symfony/http-foundation/Request.php": "dbfac83c9005eb0723af41e06f06a711", + "vendor/symfony/http-foundation/RequestMatcher.php": "e90d2a79d0fbfe7bbffeb32b5b1649bd", + "vendor/symfony/http-foundation/RequestMatcherInterface.php": "b181a2b6a6a8cae1d31e6a55b9aecd63", + "vendor/symfony/http-foundation/RequestStack.php": "b9f1941ab0a504f1821b75be742af13f", + "vendor/symfony/http-foundation/Response.php": "c28999006e634192a5dd83a98bb4f84c", + "vendor/symfony/http-foundation/ResponseHeaderBag.php": "6cfb28724d7bf6739950dc0b922fc848", + "vendor/symfony/http-foundation/ServerBag.php": "3aad75062c35b41079d24ed7fd6f8943", + "vendor/symfony/http-foundation/Session/Attribute/AttributeBag.php": "dcefb1b23aa54f8bba9d70aea86f5679", + "vendor/symfony/http-foundation/Session/Attribute/AttributeBagInterface.php": "4784fb5eaf608680acbc0e9abb3060ab", + "vendor/symfony/http-foundation/Session/Flash/AutoExpireFlashBag.php": "bafd914dbafd02af689905b2dee476f7", + "vendor/symfony/http-foundation/Session/Flash/FlashBag.php": "310c8ea24f9d74660f273027518c807a", + "vendor/symfony/http-foundation/Session/Flash/FlashBagInterface.php": "aa687f163e7fccbd16bf5fd089987699", + "vendor/symfony/http-foundation/Session/Session.php": "4737bdd6538b52c11a824fdeb0f2b560", + "vendor/symfony/http-foundation/Session/SessionBagInterface.php": "c5ecfe72f1203e3dc474f2a0372b5285", + "vendor/symfony/http-foundation/Session/SessionBagProxy.php": "be73913279d5eee2b2955d25ba2fa81f", + "vendor/symfony/http-foundation/Session/SessionFactory.php": "ac4bf03e92e115db730ab3860ac96c50", + "vendor/symfony/http-foundation/Session/SessionFactoryInterface.php": "3f531aa653614519c2bbbde773253f3d", + "vendor/symfony/http-foundation/Session/SessionInterface.php": "317bed0151c4b76f203d5e7d83f1e307", + "vendor/symfony/http-foundation/Session/SessionUtils.php": "80e25cc604b5265f3a1707d5de984dd5", + "vendor/symfony/http-foundation/Session/Storage/Handler/AbstractSessionHandler.php": "f29d9b5d276712c51ee35ca03cfd3aed", + "vendor/symfony/http-foundation/Session/Storage/Handler/IdentityMarshaller.php": "707a7d61ade76249bee828a5bd39e09f", + "vendor/symfony/http-foundation/Session/Storage/Handler/MarshallingSessionHandler.php": "c6983d49aba8be21016eafe2eeaf7293", + "vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php": "2fdb2096d4e8bff21fd5e982e703855c", + "vendor/symfony/http-foundation/Session/Storage/Handler/MigratingSessionHandler.php": "3236bcec9f8c35d8d76084aa4beb320b", + "vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php": "581403957110daedfa4d32f2a16a3113", + "vendor/symfony/http-foundation/Session/Storage/Handler/NativeFileSessionHandler.php": "c5fc893210b8088a6cf35ab1e0756a01", + "vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php": "4ad55e815985d05eb203e5179c08c8cf", + "vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php": "4fc518327357b3f56b1d0261bce20b98", + "vendor/symfony/http-foundation/Session/Storage/Handler/RedisSessionHandler.php": "2d1f246bbdc8556e9a2687082f576a2f", + "vendor/symfony/http-foundation/Session/Storage/Handler/SessionHandlerFactory.php": "63072a50be0a4b4824ba40bd47a76f93", + "vendor/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php": "5075222af61deaff24f0c6a335e68678", + "vendor/symfony/http-foundation/Session/Storage/MetadataBag.php": "0909e9358df2c5b2a26da809a21f9100", + "vendor/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php": "9c236bfbf6b188b6b71b438535bc6e16", + "vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorage.php": "dedfe5c339b469bdcec669d95dd9ef12", + "vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorageFactory.php": "84b71f303d7cc466825186760e75257f", + "vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php": "be64e35ec2ee3de4f7eacb06fbb9a1ff", + "vendor/symfony/http-foundation/Session/Storage/NativeSessionStorageFactory.php": "8d55ff0bc3db201cff7c79f9b3b3e5f7", + "vendor/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorage.php": "7e90e891b2f70a04e860e5a818884deb", + "vendor/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorageFactory.php": "1cb0b0385ca6d17c75d79b435415a00a", + "vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php": "36fc5e013621676a47b79c1870767ee3", + "vendor/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php": "cddbab7f59d124e14939df9b971718f4", + "vendor/symfony/http-foundation/Session/Storage/SessionStorageFactoryInterface.php": "a33ab61b6aa806de7b7a67ec7daee3a0", + "vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php": "f7047e4692d9d77f8e0f6617af76daef", + "vendor/symfony/http-foundation/StreamedResponse.php": "61201251293f587190e46e63cdcd18f8", + "vendor/symfony/http-foundation/Test/Constraint/RequestAttributeValueSame.php": "3aad9c0aeaffb48695b6a7c82f67c18c", + "vendor/symfony/http-foundation/Test/Constraint/ResponseCookieValueSame.php": "dcc7836efe12f13994ae0c03be40a94d", + "vendor/symfony/http-foundation/Test/Constraint/ResponseFormatSame.php": "a73b5f68a5b093949c3a356ab62bc6e2", + "vendor/symfony/http-foundation/Test/Constraint/ResponseHasCookie.php": "3ca9254b8907debb3c80c856274b440c", + "vendor/symfony/http-foundation/Test/Constraint/ResponseHasHeader.php": "7dc7b4547b93611ee83a7c18674b7a5f", + "vendor/symfony/http-foundation/Test/Constraint/ResponseHeaderSame.php": "bd7f9f25f6f7fd47c20cd59161a451ab", + "vendor/symfony/http-foundation/Test/Constraint/ResponseIsRedirected.php": "df1662577f8860d61d39719a48a69bbb", + "vendor/symfony/http-foundation/Test/Constraint/ResponseIsSuccessful.php": "a85725d6fe4d143106c7947f3c91a74a", + "vendor/symfony/http-foundation/Test/Constraint/ResponseIsUnprocessable.php": "67b3112f135703506fae05bc5fb30c0d", + "vendor/symfony/http-foundation/Test/Constraint/ResponseStatusCodeSame.php": "3541c53ca227906e4a7651127f78d2c6", + "vendor/symfony/http-foundation/UrlHelper.php": "a17e8139d42bee34bfa054c2dfe67534", + "vendor/symfony/mime/Address.php": "120536d329cce0144a173a83358addaf", + "vendor/symfony/mime/BodyRendererInterface.php": "86c757e1914bc7c880fcadabbe97da9f", + "vendor/symfony/mime/CharacterStream.php": "946bfda9924d373c0056baaae79be087", + "vendor/symfony/mime/Crypto/DkimOptions.php": "48376f7db1df3e64c61c3aaec0034c8d", + "vendor/symfony/mime/Crypto/DkimSigner.php": "34ecaba6cbd622fbee4065062d505c65", + "vendor/symfony/mime/Crypto/SMime.php": "bc95feb0f870ac3574c8faa2611be53c", + "vendor/symfony/mime/Crypto/SMimeEncrypter.php": "f16fbb4e67cc27199f05eae7d89ba3bd", + "vendor/symfony/mime/Crypto/SMimeSigner.php": "b74fa90a04465d9ab0330bfa9e1609e0", + "vendor/symfony/mime/DependencyInjection/AddMimeTypeGuesserPass.php": "267087a01fec48142f1fa130348b8643", + "vendor/symfony/mime/Email.php": "3055be6a59b593ea1d821ea2aabcc5db", + "vendor/symfony/mime/Encoder/AddressEncoderInterface.php": "4e997b16991fe3b809c967476aeb748e", + "vendor/symfony/mime/Encoder/Base64ContentEncoder.php": "eee984fb0c87afda5c88a960d1358a0e", + "vendor/symfony/mime/Encoder/Base64Encoder.php": "460c256ea5a4c925b03e13858fe03086", + "vendor/symfony/mime/Encoder/Base64MimeHeaderEncoder.php": "b26063c96ad77a8c7f9691c3574a6219", + "vendor/symfony/mime/Encoder/ContentEncoderInterface.php": "b8c7c78aacd33a1529e7332e5828628d", + "vendor/symfony/mime/Encoder/EightBitContentEncoder.php": "fff5d90918f982919313469c3d0ea2d9", + "vendor/symfony/mime/Encoder/EncoderInterface.php": "08695d52fbdc48d73772541193c780af", + "vendor/symfony/mime/Encoder/IdnAddressEncoder.php": "6fe12122d12e07c05449a025afe92457", + "vendor/symfony/mime/Encoder/MimeHeaderEncoderInterface.php": "721ef21d9b8a4ada0dd7046036bebadf", + "vendor/symfony/mime/Encoder/QpContentEncoder.php": "46bd7c06d582c0e9448a03a6f634cfe6", + "vendor/symfony/mime/Encoder/QpEncoder.php": "1678d58800fe21e62bbc77e8716fd13a", + "vendor/symfony/mime/Encoder/QpMimeHeaderEncoder.php": "73b32359e1399eae6c823bf70d3d772d", + "vendor/symfony/mime/Encoder/Rfc2231Encoder.php": "c38fa7031178e74a4e7e79dc967e5975", + "vendor/symfony/mime/Exception/AddressEncoderException.php": "757fba8ee417df9fdb0122e94dd4f8be", + "vendor/symfony/mime/Exception/ExceptionInterface.php": "3cfe4c1a8a28549020244d99686a1cd3", + "vendor/symfony/mime/Exception/InvalidArgumentException.php": "4acbc8c09a805db0e4025de6c9ef8195", + "vendor/symfony/mime/Exception/LogicException.php": "04793a5b7620ecefa33199b59aa6414a", + "vendor/symfony/mime/Exception/RfcComplianceException.php": "dc1e1883307786aa2587bd569c8acea1", + "vendor/symfony/mime/Exception/RuntimeException.php": "a90aa8f9fbe4d8edb7a44f1ba3808c59", + "vendor/symfony/mime/FileBinaryMimeTypeGuesser.php": "3309138434d2a32c4a72afc56f8dfb55", + "vendor/symfony/mime/FileinfoMimeTypeGuesser.php": "66292d6bb68214fc7b14741c4066906a", + "vendor/symfony/mime/Header/AbstractHeader.php": "ce7ffe930476d3b344f77a79a3ba26fa", + "vendor/symfony/mime/Header/DateHeader.php": "1fd18666d60f61db0348e21ad705a963", + "vendor/symfony/mime/Header/HeaderInterface.php": "0c90d5d0ae530a9bc013012436e9df87", + "vendor/symfony/mime/Header/Headers.php": "7522ce6ac87b1c063a5fee5d1ae26533", + "vendor/symfony/mime/Header/IdentificationHeader.php": "42bd4bcea0e96a29e249bfcd7c78de22", + "vendor/symfony/mime/Header/MailboxHeader.php": "8930f4ac1bdf3f7d03f3ab6111a9c156", + "vendor/symfony/mime/Header/MailboxListHeader.php": "1ddb8bdd4b5cbc3ee44b807c6a5c70ad", + "vendor/symfony/mime/Header/ParameterizedHeader.php": "617322e6111435b533f71f69fd27c499", + "vendor/symfony/mime/Header/PathHeader.php": "1947b50f1ec83cd62f055dac29799e55", + "vendor/symfony/mime/Header/UnstructuredHeader.php": "390cf1991921377562799a31ccc1036e", + "vendor/symfony/mime/Message.php": "fd62f40971f650c5d7a9a96bb839135f", + "vendor/symfony/mime/MessageConverter.php": "e275c6e8e67b50ae6fda9e53aabdd67b", + "vendor/symfony/mime/MimeTypeGuesserInterface.php": "db3d79145b6af6ce5ae773a99bf81338", + "vendor/symfony/mime/MimeTypes.php": "34b194e17ca1177d917d3d2d5ece258f", + "vendor/symfony/mime/MimeTypesInterface.php": "d29bce31a5d8cff0872427ff18b863a3", + "vendor/symfony/mime/Part/AbstractMultipartPart.php": "0a85f346655ab4a0148cf14256342111", + "vendor/symfony/mime/Part/AbstractPart.php": "3603617a86d59e1490445c745b60f56b", + "vendor/symfony/mime/Part/DataPart.php": "b9bea331c72e5d3cdb3e771c93fd9421", + "vendor/symfony/mime/Part/MessagePart.php": "6d970dd34ad53e0f727db71180a7261d", + "vendor/symfony/mime/Part/Multipart/AlternativePart.php": "374d0d07d7df1912eccaea7308293933", + "vendor/symfony/mime/Part/Multipart/DigestPart.php": "3c98ca1f6c47880a54eb0b71451c1477", + "vendor/symfony/mime/Part/Multipart/FormDataPart.php": "c66fc6120e2458dda72b4e9b5f8c7668", + "vendor/symfony/mime/Part/Multipart/MixedPart.php": "cf51ad73762aad4382bd3769088327a6", + "vendor/symfony/mime/Part/Multipart/RelatedPart.php": "3997156ffe5f5a18208640510426002f", + "vendor/symfony/mime/Part/SMimePart.php": "fc69b025895ba7dc4a390ecccb42c59d", + "vendor/symfony/mime/Part/TextPart.php": "259b1318d581211cc3c1457910b85ea3", + "vendor/symfony/mime/RawMessage.php": "78cbb57932cc07d78280cc279a98392f", + "vendor/symfony/mime/Test/Constraint/EmailAddressContains.php": "304fdc478cc52748a4918eaf58e64c56", + "vendor/symfony/mime/Test/Constraint/EmailAttachmentCount.php": "a657ca9a1a84c533c841f56c491329b4", + "vendor/symfony/mime/Test/Constraint/EmailHasHeader.php": "669fb9bc46bf31031d79cee581eb1823", + "vendor/symfony/mime/Test/Constraint/EmailHeaderSame.php": "1fc9cbf1c3c287da5601c5c4271b40bf", + "vendor/symfony/mime/Test/Constraint/EmailHtmlBodyContains.php": "5950682a0e4c949d287d62216d08ae57", + "vendor/symfony/mime/Test/Constraint/EmailTextBodyContains.php": "99fb47d240d61cba116e94f1adcac5a4", + "vendor/symfony/polyfill-intl-idn/Idn.php": "cb3aa2ff1c2679b58cdb9deb6a93e396", + "vendor/symfony/polyfill-intl-idn/Info.php": "3d4427dcf757a6158a6a2a3caf33f843", + "vendor/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php": "4e7d6fe12772b713affab1713fede99f", + "vendor/symfony/polyfill-intl-idn/Resources/unidata/Regex.php": "99551347bc2b2a1ebc763bc038e0ba8c", + "vendor/symfony/polyfill-intl-idn/Resources/unidata/deviation.php": "a4e02f7d44f01d7f050dfcb9a16d2860", + "vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed.php": "184f89105e74e2bd898da70a69549a62", + "vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_mapped.php": "993b7afe17ba863308008f19d7f1a986", + "vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_valid.php": "45cd86f06bdf40f4fd3e10528deabfb7", + "vendor/symfony/polyfill-intl-idn/Resources/unidata/ignored.php": "0ecde91671b99dca93d3a7f6fd0b638d", + "vendor/symfony/polyfill-intl-idn/Resources/unidata/mapped.php": "33b6ecf382da39a7a208e9686e0bb357", + "vendor/symfony/polyfill-intl-idn/Resources/unidata/virama.php": "6aa0539ca2d85e4de6122212c7f1eacb", + "vendor/symfony/polyfill-intl-idn/bootstrap.php": "3afba89087d4111338ccc8c287147595", + "vendor/symfony/polyfill-intl-idn/bootstrap80.php": "eb467e3c760d841e33c948882859011a", + "vendor/symfony/polyfill-intl-normalizer/Normalizer.php": "53fab6b96b87d97eea876791882169cc", + "vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php": "c9116409c08d6783e2b342abb86b42e9", + "vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalComposition.php": "67c4f994a005e6d5b48f33b4d83dad02", + "vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php": "7ab34951ee88347f8e22dadcc3d931d0", + "vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php": "997a75b1c4dd9aa34b625e08d61d4377", + "vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php": "55fe2932daa439c5df97966a14567217", + "vendor/symfony/polyfill-intl-normalizer/bootstrap.php": "636cc3653f8532fa8e8afb3e5968ddf1", + "vendor/symfony/polyfill-intl-normalizer/bootstrap80.php": "0ec1b381f7278c676330e2104a76f5ee", + "vendor/symfony/polyfill-mbstring/Mbstring.php": "d4d2803c2520677145e1140eece7a1f2", + "vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php": "afd2a811c09e718300d41aeda6ee616f", + "vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php": "57fcc71db7032223c94559a4aed87b4d", + "vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php": "a161350864050f78bf9161f7f3c94172", + "vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php": "3c66ab6278311ca4982af4ec018d76db", + "vendor/symfony/polyfill-mbstring/bootstrap.php": "7d89dba90209cbaf7430ec423022024d", + "vendor/symfony/polyfill-mbstring/bootstrap80.php": "5f4dde23e1039b3018ae061ed840fa1a", + "vendor/symfony/polyfill-php72/Php72.php": "4ecdd90e4dbb27ffb579c49e85b0c71a", + "vendor/symfony/polyfill-php72/bootstrap.php": "e7bdf814430d08c43c41e4fe5561c3ed", + "vendor/symfony/polyfill-php80/Php80.php": "feda784ff89086c99a0d678111e74bfe", + "vendor/symfony/polyfill-php80/PhpToken.php": "50ad074d89b0d489a3041e99a131df02", + "vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php": "f3212f7dd76f9691f5ba5f42ab4b7697", + "vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php": "599d7691608f9f00c7c894816c157630", + "vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php": "9a1665062812e71e2714c06efa157e40", + "vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php": "922b136b054c080af5c17eafe2d6a1b5", + "vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php": "119a383429b18c768a73578f5b03efd0", + "vendor/symfony/polyfill-php80/bootstrap.php": "a182f8d65875bfeba83939b11715d436", + "vendor/symfony/polyfill-php81/Php81.php": "907c5e142a4f3c15922efc5a6f0571c6", + "vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php": "b335745f6e51f385c41427a18b6a205f", + "vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php": "a0a1592a508e6cfc4e7971598ca92521", + "vendor/symfony/polyfill-php81/bootstrap.php": "620b1e05ab7a0ed4e6effc5c4cb444c3", + "vendor/symfony/psr-http-message-bridge/.php-cs-fixer.dist.php": "b10b17aa532a2fd97dc86c7d29f2e02d", + "vendor/symfony/psr-http-message-bridge/ArgumentValueResolver/PsrServerRequestResolver.php": "daf348097c280f2db2166b7337919211", + "vendor/symfony/psr-http-message-bridge/EventListener/PsrResponseListener.php": "95404550740c7566bae4df147a96ec2a", + "vendor/symfony/psr-http-message-bridge/Factory/HttpFoundationFactory.php": "44876b488633fcb2aded2e6ef04805e0", + "vendor/symfony/psr-http-message-bridge/Factory/PsrHttpFactory.php": "049d50c802fb8701bce3c6eaf71ca899", + "vendor/symfony/psr-http-message-bridge/Factory/UploadedFile.php": "987961fef53723b8e6fe36ff4511c2b9", + "vendor/symfony/psr-http-message-bridge/HttpFoundationFactoryInterface.php": "abbb12d6796bdabecf093af2f80925a7", + "vendor/symfony/psr-http-message-bridge/HttpMessageFactoryInterface.php": "9b8d3472e0405cf049b12a9540007412", + "vendor/symfony/service-contracts/Attribute/Required.php": "97eaac0aa7299985298efb1902281100", + "vendor/symfony/service-contracts/Attribute/SubscribedService.php": "e05dc8d6db3c42610886e1d3098847fb", + "vendor/symfony/service-contracts/ResetInterface.php": "b105805d3817743c1049a1239aa7ebe2", + "vendor/symfony/service-contracts/ServiceLocatorTrait.php": "e3f721444072fb1a3a4011604ba46c2b", + "vendor/symfony/service-contracts/ServiceProviderInterface.php": "29b886ced321fe9b7c7499f6cc77e048", + "vendor/symfony/service-contracts/ServiceSubscriberInterface.php": "32041ece758be39ba304d090af868a3a", + "vendor/symfony/service-contracts/ServiceSubscriberTrait.php": "a0337fef53e7799858e29651481dabeb", + "vendor/symfony/service-contracts/Test/ServiceLocatorTest.php": "2f241625cfe831cda3f495a6590d923c", + "vendor/symfony/translation/Catalogue/AbstractOperation.php": "ae426ba36ca8cb4654f19f89b6778446", + "vendor/symfony/translation/Catalogue/MergeOperation.php": "d5230748efd97a8588fb0be3485410bb", + "vendor/symfony/translation/Catalogue/OperationInterface.php": "ab68f226276e410756c806fb421150c4", + "vendor/symfony/translation/Catalogue/TargetOperation.php": "65a4c44f30d4ad4d7554f2278185e724", + "vendor/symfony/translation/Command/TranslationPullCommand.php": "6227521767c8f68a45aa20b18e886c65", + "vendor/symfony/translation/Command/TranslationPushCommand.php": "b9f2fb7bab417c5cd93f81d318d42bee", + "vendor/symfony/translation/Command/TranslationTrait.php": "acda71c79170e0d895dc842fe5f32c30", + "vendor/symfony/translation/Command/XliffLintCommand.php": "539a10662f46391d3fefcc9707fe4d46", + "vendor/symfony/translation/DataCollector/TranslationDataCollector.php": "e5f7ba50e46d25ad0a3749b9bcfb9205", + "vendor/symfony/translation/DataCollectorTranslator.php": "3c794c4f4c5a0fc510740111a2e7515b", + "vendor/symfony/translation/DependencyInjection/TranslationDumperPass.php": "5c3a52a1934ee2d73d0d6d7518b211a2", + "vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php": "7a06520255d58b45ee4422a6fc1875dd", + "vendor/symfony/translation/DependencyInjection/TranslatorPass.php": "89bb2917f754811fad6e782742b535ae", + "vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php": "94f0bedf2761ca0b7ac935ae9d48e91b", + "vendor/symfony/translation/Dumper/CsvFileDumper.php": "eaccf68b75d38d19d31a13714e794a0f", + "vendor/symfony/translation/Dumper/DumperInterface.php": "9afd0a180b01818a9f56f9ef75406f52", + "vendor/symfony/translation/Dumper/FileDumper.php": "a562316c3bf59f7a13121eac4b62d869", + "vendor/symfony/translation/Dumper/IcuResFileDumper.php": "1d5440905876be931ed9ae0898447492", + "vendor/symfony/translation/Dumper/IniFileDumper.php": "ff11a1fc5ae2c8611f5729b644c79a0e", + "vendor/symfony/translation/Dumper/JsonFileDumper.php": "7189945768aa051a080b3a52ee207423", + "vendor/symfony/translation/Dumper/MoFileDumper.php": "5311c4a4d7ba3c402798146de189b0ce", + "vendor/symfony/translation/Dumper/PhpFileDumper.php": "8a981303fda2c56e620d0a97925de76e", + "vendor/symfony/translation/Dumper/PoFileDumper.php": "d7ede98289d25207f8437f33c99552f2", + "vendor/symfony/translation/Dumper/QtFileDumper.php": "1bdc13b7b7efa2d9d2785828adf54ea7", + "vendor/symfony/translation/Dumper/XliffFileDumper.php": "fa7e118f9bb9db5f8ce7791cd30bd1dd", + "vendor/symfony/translation/Dumper/YamlFileDumper.php": "bd42bdc348ee0bd41131761ef58b9de8", + "vendor/symfony/translation/Exception/ExceptionInterface.php": "e9e24a6aaeed80b3a7557f0c1c3b168d", + "vendor/symfony/translation/Exception/IncompleteDsnException.php": "f557e1c99f5052f205e9fb3e4fe96a20", + "vendor/symfony/translation/Exception/InvalidArgumentException.php": "2ce0453cb021d474b8b68031d4639a25", + "vendor/symfony/translation/Exception/InvalidResourceException.php": "178abc46cb8060f081ef43fd5ff00da5", + "vendor/symfony/translation/Exception/LogicException.php": "b7a4dd1b8db962feaebcf304ac6b4eac", + "vendor/symfony/translation/Exception/MissingRequiredOptionException.php": "93da734a87b62ef5c041833e64a4cdfc", + "vendor/symfony/translation/Exception/NotFoundResourceException.php": "8c7bff66a9500b10fb4d13e1d07e76c0", + "vendor/symfony/translation/Exception/ProviderException.php": "c23ff40f9782ed0e05dfc40df18090a5", + "vendor/symfony/translation/Exception/ProviderExceptionInterface.php": "69fd5cdb791de30bc439aa72777dc32c", + "vendor/symfony/translation/Exception/RuntimeException.php": "11a1d1549dbcc85b074810bc7e589967", + "vendor/symfony/translation/Exception/UnsupportedSchemeException.php": "482a409277284145c0e6c19ce6405912", + "vendor/symfony/translation/Extractor/AbstractFileExtractor.php": "8fb37caea614c60e5b8781b818f35ef2", + "vendor/symfony/translation/Extractor/ChainExtractor.php": "def051e58455e1907798d4db4d9ac9ca", + "vendor/symfony/translation/Extractor/ExtractorInterface.php": "244862e3f8cdb829f6831d05d1adedca", + "vendor/symfony/translation/Extractor/PhpExtractor.php": "f1071213a7122233385d0045ca8e0307", + "vendor/symfony/translation/Extractor/PhpStringTokenParser.php": "1bc1ced5ec089cf45fbf9c3572e827e1", + "vendor/symfony/translation/Formatter/IntlFormatter.php": "029af19e0256171de659b1f56eb53fc2", + "vendor/symfony/translation/Formatter/IntlFormatterInterface.php": "55fa292e7f70dba36070e8e042fdff62", + "vendor/symfony/translation/Formatter/MessageFormatter.php": "6a759462759ea415c04ed48795d0fb25", + "vendor/symfony/translation/Formatter/MessageFormatterInterface.php": "1a186aebefc38793b8e29cd4c0821bea", + "vendor/symfony/translation/IdentityTranslator.php": "10f3e1f31aee84d7b06e8363be222735", + "vendor/symfony/translation/Loader/ArrayLoader.php": "f846244d7f5cc7ee4cf553c701c21d52", + "vendor/symfony/translation/Loader/CsvFileLoader.php": "d49ed6878c92ec4c446c8231a23d99cb", + "vendor/symfony/translation/Loader/FileLoader.php": "e5f0e3c8c9d30b7cc9ceb052d604ccd6", + "vendor/symfony/translation/Loader/IcuDatFileLoader.php": "08eec133679b4c1687c58630cd23ad22", + "vendor/symfony/translation/Loader/IcuResFileLoader.php": "d5d9d99cb498076ffff5bda0e8f32535", + "vendor/symfony/translation/Loader/IniFileLoader.php": "1aa6085f65e0683397a00c7cbe80a1ef", + "vendor/symfony/translation/Loader/JsonFileLoader.php": "87b5de611bffdd57c4f7e4532780b304", + "vendor/symfony/translation/Loader/LoaderInterface.php": "34ca84cab7a91add476aa0355029258a", + "vendor/symfony/translation/Loader/MoFileLoader.php": "661e5f89ab8d60bded109abd4d6fb135", + "vendor/symfony/translation/Loader/PhpFileLoader.php": "39aa8179d7e3a7481f8526653d80fdcb", + "vendor/symfony/translation/Loader/PoFileLoader.php": "4caa34b034cd0eeb476b7271f0dd2334", + "vendor/symfony/translation/Loader/QtFileLoader.php": "48d39dff3aafd884d86ca01982e932ca", + "vendor/symfony/translation/Loader/XliffFileLoader.php": "9f7e4beafd44136df9e7a8c36f1aaccb", + "vendor/symfony/translation/Loader/YamlFileLoader.php": "7910dcaff4408806458d9316031fac76", + "vendor/symfony/translation/LoggingTranslator.php": "5ab7b279a998a35b079f0028fa6607d2", + "vendor/symfony/translation/MessageCatalogue.php": "1e238e77fd1b39b4d39539f8a8783a10", + "vendor/symfony/translation/MessageCatalogueInterface.php": "9921b9023fbb8938a60487c7d28fa92a", + "vendor/symfony/translation/MetadataAwareInterface.php": "c3ab42c3e82db90178baf618fd55e902", + "vendor/symfony/translation/Provider/AbstractProviderFactory.php": "2965e06e15b9efa00067f55a58b8cd65", + "vendor/symfony/translation/Provider/Dsn.php": "ad8479d6aeda74564a07916e96c5f470", + "vendor/symfony/translation/Provider/FilteringProvider.php": "e1adefb5144ffd7861158af2c4887d99", + "vendor/symfony/translation/Provider/NullProvider.php": "6386188c94941ed4cabd6d07b60b6ac7", + "vendor/symfony/translation/Provider/NullProviderFactory.php": "b126c5c73a43ef8d03ed0e1b7e83d152", + "vendor/symfony/translation/Provider/ProviderFactoryInterface.php": "f2f1dfa3404629cfdd9f95c180b3c813", + "vendor/symfony/translation/Provider/ProviderInterface.php": "bcf083959b83053e8a8feffc12b75913", + "vendor/symfony/translation/Provider/TranslationProviderCollection.php": "96f9c5e82081db6031a3bd4d9938a4d0", + "vendor/symfony/translation/Provider/TranslationProviderCollectionFactory.php": "d2e1098791aa9c65e8a09d5510f3b9d0", + "vendor/symfony/translation/PseudoLocalizationTranslator.php": "68547b7669a015404652d49dc9ec3f9e", + "vendor/symfony/translation/Reader/TranslationReader.php": "3974b64e53c5fcfa1ebd84cd4162cb45", + "vendor/symfony/translation/Reader/TranslationReaderInterface.php": "84fc971d0a5699e5a7d3b48387253870", + "vendor/symfony/translation/Resources/functions.php": "456a80eeb678b8abb246bfc43b0675f3", + "vendor/symfony/translation/Test/ProviderFactoryTestCase.php": "b74a93c4bfc958eff3961c712b8f0bfc", + "vendor/symfony/translation/Test/ProviderTestCase.php": "28f1bd9a0f588db91554247ebb24c153", + "vendor/symfony/translation/TranslatableMessage.php": "aeb45565f5aa27ece595de27bb58ea57", + "vendor/symfony/translation/Translator.php": "89f07a4c111d9a29c9700120b6e9c209", + "vendor/symfony/translation/TranslatorBag.php": "ac23387d2ad45259bbf9469ed4628eef", + "vendor/symfony/translation/TranslatorBagInterface.php": "dc013d629a911fdb8c18b5663e900e0a", + "vendor/symfony/translation/Util/ArrayConverter.php": "0ce6e4650796213eeac3874fa997c28f", + "vendor/symfony/translation/Util/XliffUtils.php": "e9c297edf1957aee928431ecef06a46c", + "vendor/symfony/translation/Writer/TranslationWriter.php": "4a12fba1c6edc187cc6c1ec386a5655c", + "vendor/symfony/translation/Writer/TranslationWriterInterface.php": "fe5f463c9c7591b98b40c9e496614a0f", + "vendor/symfony/translation-contracts/LocaleAwareInterface.php": "524e9f5464590dec0cdf3e261bb310c1", + "vendor/symfony/translation-contracts/Test/TranslatorTest.php": "b21e742aee14789ee12f8e266da24a57", + "vendor/symfony/translation-contracts/TranslatableInterface.php": "7389cfccfd0ae942c17d83b160651439", + "vendor/symfony/translation-contracts/TranslatorInterface.php": "ead297d439797e1dcf83c2e26f46237f", + "vendor/symfony/translation-contracts/TranslatorTrait.php": "56eba5ba04a2cbb37a2a9f2783bda470", + "vendor/symfony/var-dumper/Caster/AmqpCaster.php": "dac52170cfacff94fc2f23a2bed8337b", + "vendor/symfony/var-dumper/Caster/ArgsStub.php": "fd0d2be2ea44dc847ac415bba939e459", + "vendor/symfony/var-dumper/Caster/Caster.php": "e5eb72bc06cfe97ef7059eb4246c6cd3", + "vendor/symfony/var-dumper/Caster/ClassStub.php": "4f22baa3b61015d0ef405da5f234efa7", + "vendor/symfony/var-dumper/Caster/ConstStub.php": "558e83d453fb45db4d0e6cb78d048909", + "vendor/symfony/var-dumper/Caster/CutArrayStub.php": "e63fe90d2c147bdfe5b49d232e5802c2", + "vendor/symfony/var-dumper/Caster/CutStub.php": "2660b57d81018c6a852433cc6f14e4de", + "vendor/symfony/var-dumper/Caster/DOMCaster.php": "d38f8d9a1c831c5a01fdcfce706ee698", + "vendor/symfony/var-dumper/Caster/DateCaster.php": "ba4d7e8e667ff789dc244afd4be2caae", + "vendor/symfony/var-dumper/Caster/DoctrineCaster.php": "d1e29681ae5d2d3d8438b34acda26400", + "vendor/symfony/var-dumper/Caster/DsCaster.php": "8ecdfd150c9186003948c0e77bde4d65", + "vendor/symfony/var-dumper/Caster/DsPairStub.php": "2ca049162c428310072348862cf1c166", + "vendor/symfony/var-dumper/Caster/EnumStub.php": "8162a8bcbea51bbf0126e7fbc9efa74c", + "vendor/symfony/var-dumper/Caster/ExceptionCaster.php": "528da04fd504ced0ea506df08a05c68d", + "vendor/symfony/var-dumper/Caster/FiberCaster.php": "abc8ee7a578e7830258b4e84c3766c88", + "vendor/symfony/var-dumper/Caster/FrameStub.php": "de43b4141705c1e0bbd7a1f260178a59", + "vendor/symfony/var-dumper/Caster/GmpCaster.php": "3e1e7a1691603fbee609a246b700b821", + "vendor/symfony/var-dumper/Caster/ImagineCaster.php": "988346f0df070ca18820ca48f6eecae7", + "vendor/symfony/var-dumper/Caster/ImgStub.php": "fb0d87aa22e578bf436d0f9bf52df24d", + "vendor/symfony/var-dumper/Caster/IntlCaster.php": "3b90f93e619494739d0e926b8718a2b2", + "vendor/symfony/var-dumper/Caster/LinkStub.php": "b2c090e3580b21095e4d8a50941059e9", + "vendor/symfony/var-dumper/Caster/MemcachedCaster.php": "0aa41c509ca820e0cecd4d0a446a08c6", + "vendor/symfony/var-dumper/Caster/MysqliCaster.php": "8da9c86731153e69f234cc8187e58d61", + "vendor/symfony/var-dumper/Caster/PdoCaster.php": "3978d2a8af233c7f0035ffd2a085044c", + "vendor/symfony/var-dumper/Caster/PgSqlCaster.php": "187170ef7eca284b6de27dbd11088132", + "vendor/symfony/var-dumper/Caster/ProxyManagerCaster.php": "a35495d04105d780ee8133f30640ddbe", + "vendor/symfony/var-dumper/Caster/RdKafkaCaster.php": "c1b494fe6e99b5014a506c0be75c9401", + "vendor/symfony/var-dumper/Caster/RedisCaster.php": "6719087d979ca508bd487e098dc17906", + "vendor/symfony/var-dumper/Caster/ReflectionCaster.php": "4bbce6dfafdd1b1448254fd4a8b20815", + "vendor/symfony/var-dumper/Caster/ResourceCaster.php": "ebde515935122ee6be406c3c97423236", + "vendor/symfony/var-dumper/Caster/SplCaster.php": "cbf2e63b1643d9b5551f505b570d5e83", + "vendor/symfony/var-dumper/Caster/StubCaster.php": "733546559cfb9bee2b2fe15f9394b92e", + "vendor/symfony/var-dumper/Caster/SymfonyCaster.php": "a527980cb29f3d7ad3ded7b3673018b6", + "vendor/symfony/var-dumper/Caster/TraceStub.php": "9004bd8cd5f7a7c5ee4c80ee1b1504fe", + "vendor/symfony/var-dumper/Caster/UuidCaster.php": "ec3d006aa075b21f8ba9907255c53920", + "vendor/symfony/var-dumper/Caster/XmlReaderCaster.php": "5b1b024f070e2063e1122432fd8674f1", + "vendor/symfony/var-dumper/Caster/XmlResourceCaster.php": "767f03bb155423afdc5f10b08a963cf2", + "vendor/symfony/var-dumper/Cloner/AbstractCloner.php": "7c110291b871994a570cc2e99ce7f48a", + "vendor/symfony/var-dumper/Cloner/ClonerInterface.php": "89da6b78b6877baab51ef69cf758ca8a", + "vendor/symfony/var-dumper/Cloner/Cursor.php": "7874ed318f6465a5a5ad5abbeda39cb9", + "vendor/symfony/var-dumper/Cloner/Data.php": "17776fbad05ff0f1d19841bd0863025b", + "vendor/symfony/var-dumper/Cloner/DumperInterface.php": "a1a59d0617cc8b89362e96446f7702bf", + "vendor/symfony/var-dumper/Cloner/Stub.php": "d59be2c0b34851839320b6d03fa8d8a2", + "vendor/symfony/var-dumper/Cloner/VarCloner.php": "60e67e1a27d41b34ccb47d8071a779fb", + "vendor/symfony/var-dumper/Command/Descriptor/CliDescriptor.php": "13a227822bbeb674219ec00ca58848bf", + "vendor/symfony/var-dumper/Command/Descriptor/DumpDescriptorInterface.php": "27b7b52017c03b91ff24313d94af4ea0", + "vendor/symfony/var-dumper/Command/Descriptor/HtmlDescriptor.php": "d10b0c6d435b83c45a6ee1c628154305", + "vendor/symfony/var-dumper/Command/ServerDumpCommand.php": "bdc4eb547e7455d8f178ef6b8b0e70b1", + "vendor/symfony/var-dumper/Dumper/AbstractDumper.php": "2122e708e47b4f015ee1e35854e9bada", + "vendor/symfony/var-dumper/Dumper/CliDumper.php": "52ee69d26a41a37e0968fec3b36983a2", + "vendor/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.php": "de5f1c3dddc8312b9be0f388177e97fc", + "vendor/symfony/var-dumper/Dumper/ContextProvider/ContextProviderInterface.php": "5c3ac29b06119df282c6b0d2367dd78b", + "vendor/symfony/var-dumper/Dumper/ContextProvider/RequestContextProvider.php": "0601a78ba7816406fb104f49b1429ad1", + "vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php": "ce0fc6821dbf241faabcf8396bb83799", + "vendor/symfony/var-dumper/Dumper/ContextualizedDumper.php": "c19c5928893730e41d011fe850dc8375", + "vendor/symfony/var-dumper/Dumper/DataDumperInterface.php": "f1d68cb72334fda80249dfedf34daf12", + "vendor/symfony/var-dumper/Dumper/HtmlDumper.php": "36a62af8a129f95724edc76d34c1dc4a", + "vendor/symfony/var-dumper/Dumper/ServerDumper.php": "c6f45561ad940000741929d9e4d5281c", + "vendor/symfony/var-dumper/Exception/ThrowingCasterException.php": "d69b1df727343b643f222849160fcc84", + "vendor/symfony/var-dumper/Resources/functions/dump.php": "637f4767f6e9933756c2c924c513e076", + "vendor/symfony/var-dumper/Server/Connection.php": "d254afa0e6cafbd3886a1d0716f4eefc", + "vendor/symfony/var-dumper/Server/DumpServer.php": "fd462d69f949d871a37e9b9a1521e97e", + "vendor/symfony/var-dumper/Test/VarDumperTestTrait.php": "a0666d7989446a87d08d305bec55e149", + "vendor/symfony/var-dumper/VarDumper.php": "a23fbf53665e016bcc9797f9a7ab2980", + "vendor/symfony/var-exporter/Exception/ClassNotFoundException.php": "f062a8281608da7ab34626ac5b786b69", + "vendor/symfony/var-exporter/Exception/ExceptionInterface.php": "1444324de018b4d82076eecfd47f72e7", + "vendor/symfony/var-exporter/Exception/NotInstantiableTypeException.php": "674e46fed565fc5a21d556c2b2ba4982", + "vendor/symfony/var-exporter/Instantiator.php": "8f30da1470f17d29072d94034cdda208", + "vendor/symfony/var-exporter/Internal/Exporter.php": "3555ec40d36cf6fe89e9da3da42b19b8", + "vendor/symfony/var-exporter/Internal/Hydrator.php": "31391a973ff6c2848e93c4051a59852e", + "vendor/symfony/var-exporter/Internal/Reference.php": "eab40e8b86ada4dc6b014bf482c255a4", + "vendor/symfony/var-exporter/Internal/Registry.php": "80a5d58ddae09ac653aa5d6ddd009b41", + "vendor/symfony/var-exporter/Internal/Values.php": "a7e95df75b206a547428b0e4e721eb62", + "vendor/symfony/var-exporter/VarExporter.php": "88e80e7f9e80b0fc67cf936eae9e3e0a", + "vendor/tencentcloud/common/src/TencentCloud/Common/AbstractClient.php": "a0a8ac317e943c980a0eebceeae4f8ac", + "vendor/tencentcloud/common/src/TencentCloud/Common/AbstractModel.php": "7896f82267ff60115c196708357387e3", + "vendor/tencentcloud/common/src/TencentCloud/Common/CircuitBreaker.php": "5feb7b4736b96a43fa8274f6cd6d3b6d", + "vendor/tencentcloud/common/src/TencentCloud/Common/CommonClient.php": "d8d9683dccb3444b597ff7a85564baf4", + "vendor/tencentcloud/common/src/TencentCloud/Common/Credential.php": "a998ab21caad489a3749aef1c01594b0", + "vendor/tencentcloud/common/src/TencentCloud/Common/Exception/TencentCloudSDKException.php": "b4ac1c7dd0fae29ef211e032ef63f236", + "vendor/tencentcloud/common/src/TencentCloud/Common/Http/HttpConnection.php": "6cfdf04a134f42e6ce29b5e42fc61937", + "vendor/tencentcloud/common/src/TencentCloud/Common/Profile/ClientProfile.php": "abf69a34a5df2ab7b504a2cfbd2fdf2c", + "vendor/tencentcloud/common/src/TencentCloud/Common/Profile/HttpProfile.php": "af0d78dfa0509fce45e4cac5ba2d7d0d", + "vendor/tencentcloud/common/src/TencentCloud/Common/Sign.php": "8740162409089b1749e43972b4e026c4", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddSignStatus.php": "e16294a079ba8ce127dea7d05e972f6d", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddSmsSignRequest.php": "520c52c26e59d61263065c4a46cabb65", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddSmsSignResponse.php": "d0f7d7f4b8c9b59c2dcc2fae5d3fd522", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddSmsTemplateRequest.php": "7f4d779b1db93c02d3b794d473c7bb35", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddSmsTemplateResponse.php": "dac1ba33f94cb9e931e78a3c94663106", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/AddTemplateStatus.php": "6507b7be2e8b7bbb87201e564d785b1a", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/CallbackStatusStatistics.php": "ed4314aaf469eef67e03e680f57e6967", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/CallbackStatusStatisticsRequest.php": "837e269c68b8d96ed02db9e506e2c926", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/CallbackStatusStatisticsResponse.php": "8127fcb4e1c052655b3ae91f3684d8cf", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteSignStatus.php": "792d5e4100b8cd74beb7202bf1f4d650", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteSmsSignRequest.php": "73980cfcb710d30720c3d57e4a8ae87f", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteSmsSignResponse.php": "e1b4df541c193801be9d481b92f8f751", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteSmsTemplateRequest.php": "5aa6e50d834a3c9a450fea70df9a4196", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteSmsTemplateResponse.php": "290a540d0000aef12ab3229f5e088d54", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DeleteTemplateStatus.php": "82e92b73ba24c6284b1126fd912f76e3", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeSignListStatus.php": "35025ccf950b6f4c3d64acae52afa03c", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeSmsSignListRequest.php": "d998192b5b3a31fc0904504eee437385", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeSmsSignListResponse.php": "5712ad684278d6bf91bb4d86d156fd72", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeSmsTemplateListRequest.php": "85a2ca11da52db163d303b3eb70dbb83", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeSmsTemplateListResponse.php": "606b2fc46eb0aa8a3d23ff5893ee76ab", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/DescribeTemplateListStatus.php": "9387f7c6570fb4fc54de248725feef7a", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifySignStatus.php": "f37f4b896a9fc7adf0459849326e10f7", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifySmsSignRequest.php": "b4bc0cf30e245d9d4a1611834a88580d", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifySmsSignResponse.php": "22c0ef68dc392bac19b78c6de52a96f4", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifySmsTemplateRequest.php": "d987b29234a6ffc7cc58975992760303", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifySmsTemplateResponse.php": "1d985e6e6a476aa120f4c6f9dc5e68aa", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/ModifyTemplateStatus.php": "e7ba2b0dc1e4f88e979be99a090029d4", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsReplyStatus.php": "8aa0098e3b836ceec779b53b7ed8724b", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsReplyStatusByPhoneNumberRequest.php": "f8d7d39dbbd6022229dcf7b093c07774", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsReplyStatusByPhoneNumberResponse.php": "9c30da0d8ba4fbfadac75fdd5a5a8451", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsReplyStatusRequest.php": "95a96d6ac3e838c21c682ff921cca7d7", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsReplyStatusResponse.php": "8f1526f5bbd0ceba09262d4afc359159", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsSendStatus.php": "f10b4d12c09086d5e55e11160fce9788", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsSendStatusByPhoneNumberRequest.php": "5e380fa0b28d7e357db07f3040b13345", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsSendStatusByPhoneNumberResponse.php": "f1d90c906603cff2c0c3b1bf0758ef0c", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsSendStatusRequest.php": "1925e8e3d5a86713af5cf7a203936ecf", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/PullSmsSendStatusResponse.php": "c972ff9e9be991f80fb92ca721c12917", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendSmsRequest.php": "375f3fe875b7cd7c3131fef57479bc67", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendSmsResponse.php": "472a5829db048344a0fc762725613eec", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendStatus.php": "84212bd78192ca117750ec9a86411fd7", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendStatusStatistics.php": "e90f6b40e8f798f84ffe078c6bdea3c8", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendStatusStatisticsRequest.php": "db75ac664c9f1265b1ca71dcee2a17c4", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SendStatusStatisticsResponse.php": "1babc2c40788157c4b798e3015141088", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SmsPackagesStatistics.php": "ff15f4a5c96c0b77dc0b247be8fc7b6c", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SmsPackagesStatisticsRequest.php": "85a395d8f6e232df47e62233ab43ea88", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/Models/SmsPackagesStatisticsResponse.php": "61445d181249585463290368498499c9", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20190711/SmsClient.php": "76031853b154258bc4c5bdefda53e988", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddSignStatus.php": "894777273e42d8e89134b1ecadfc019f", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddSmsSignRequest.php": "46e25c9347519690a55659af57a0606b", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddSmsSignResponse.php": "7b1947ba66b8115790a74bb754ea59c6", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddSmsTemplateRequest.php": "7725d57fcfe1c91d1e846f3c3054ebfd", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddSmsTemplateResponse.php": "54cda8d3b2a989d21560db706ccbc3cf", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/AddTemplateStatus.php": "fc5a33236fb7064e15f0f3cc2f430523", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/CallbackStatusStatistics.php": "74ba98056c2bc238cbb94fe2fbcc5abc", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/CallbackStatusStatisticsRequest.php": "fa52db5e81cac79ef6221b46b364bf8b", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/CallbackStatusStatisticsResponse.php": "7ecd65c41dd4b5a6edbd9230c601bc09", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteSignStatus.php": "84f8efd480e17c857bc604ea19cbd071", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteSmsSignRequest.php": "c5a1aa9a1ba87fc2b7eaee0b2a4c1197", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteSmsSignResponse.php": "fc6539526b9bc28de404b363ae4df7fc", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteSmsTemplateRequest.php": "bf809efba0f43f7fc658040abfb13dd0", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteSmsTemplateResponse.php": "36679dee70ef1ac535b40547b25fc2df", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DeleteTemplateStatus.php": "cfb079eb442893a73b3a0f17a8215fcf", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribePhoneNumberInfoRequest.php": "4ff56370002bd810b516ea5b120eed03", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribePhoneNumberInfoResponse.php": "60efd2d7c4c85c2e9a4be40df038f0b0", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeSignListStatus.php": "742769cd11bf49c06fdf9d6c9fdde9a6", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeSmsSignListRequest.php": "69e999bab464ada298c139341113ffb9", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeSmsSignListResponse.php": "4e826c2f7b33ff75a227a35be53e2267", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeSmsTemplateListRequest.php": "521773ed379cedcfe2026c85b58da155", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeSmsTemplateListResponse.php": "b96bb9cbcc6b3632c2eb87614ebbd011", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/DescribeTemplateListStatus.php": "15129bb98d4f6cc5c09b2243a38e7eb4", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifySignStatus.php": "139dc12fc90098dd1b87474961fcdea6", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifySmsSignRequest.php": "832fbec56b3c1d4687af9974ea98a8d3", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifySmsSignResponse.php": "0996bb52b7160a1bb27c792ee43d2d49", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifySmsTemplateRequest.php": "257fd09561db547c25ae92fa7dc91fd0", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifySmsTemplateResponse.php": "7b6bcfaa3383bb6c086b665c53ed5182", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ModifyTemplateStatus.php": "261f99cb9fc5174e96c6bcac53a8707f", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PhoneNumberInfo.php": "75b3d1929d06a8b7e2bdba12010b6d76", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsReplyStatus.php": "a669f4d1bdf81d645dd54897dc18cf9e", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsReplyStatusByPhoneNumberRequest.php": "ed470fd2867a6b21694298f2b7d2195b", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsReplyStatusByPhoneNumberResponse.php": "04b84d3ee7bd3eb1a87449c0ec2f2fda", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsReplyStatusRequest.php": "ab3a6bcf3bac988c4579d19e3561a595", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsReplyStatusResponse.php": "3af95e3b0409cd23c5c97c20becc4368", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsSendStatus.php": "25259f27d79eeaa662e264ae7b8ff105", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsSendStatusByPhoneNumberRequest.php": "b6dc312da6aef2ff1905b9b9e55d47be", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsSendStatusByPhoneNumberResponse.php": "26b5dd330c113d52af6fa3ffb508d6b3", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsSendStatusRequest.php": "d5ff1fa98c2e99795c1ca5c21b414641", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/PullSmsSendStatusResponse.php": "7c371b12cf243b64c3c29c7aac81beaf", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ReportConversionRequest.php": "bd98c06893c0083e5d40687f4da931dc", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ReportConversionResponse.php": "1d23c5901a8f11273a1b2345e8143657", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/ReportConversionStatus.php": "ebc81c41094be36475ea83f03863759c", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendSmsRequest.php": "1dafd06e123dc168d2935e4ceb3e61f8", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendSmsResponse.php": "680c68fc5951349d81d6396956fdc778", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendStatus.php": "db2862d675cc324da3168d23c41b08af", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendStatusStatistics.php": "6a653f67d2c26b8df70264bed95fb506", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendStatusStatisticsRequest.php": "8943c5a09b63c8dbf5206e555e848b86", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SendStatusStatisticsResponse.php": "292ae08dd00c14349fea9926b28becad", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SmsPackagesStatistics.php": "016335372b010d2b6a89afda4ee63cda", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SmsPackagesStatisticsRequest.php": "69220942c7bb09f4dfcdb346f78bf84a", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/Models/SmsPackagesStatisticsResponse.php": "6faa48f4ccf3a74ba66535b279fa784e", + "vendor/tencentcloud/sms/src/TencentCloud/Sms/V20210111/SmsClient.php": "e54184c96bc0f817899542ac9505a449", + "vendor/topthink/framework/src/helper.php": "53b89fdd8d53c710ebf0bb2ccea855a5", + "vendor/topthink/framework/src/lang/zh-cn.php": "26a983f14e6e4d5aaf60b70c05084c98", + "vendor/topthink/framework/src/think/App.php": "1dffe74b3dbfc70bd4964ac6e407a04d", + "vendor/topthink/framework/src/think/Cache.php": "211dc6150d630866c1efbf670fd3cd3f", + "vendor/topthink/framework/src/think/Config.php": "e0010a4b27a18e1a72e8447870413aa7", + "vendor/topthink/framework/src/think/Console.php": "216412daa627b787b490c84db88d3d3d", + "vendor/topthink/framework/src/think/Container.php": "e73615e69038ab7a6b2c5e7e559828b1", + "vendor/topthink/framework/src/think/Cookie.php": "f8233eccbc1c2c3c11aeedd886b12d8d", + "vendor/topthink/framework/src/think/Db.php": "1eca5fbedfdd86bc0578df46cdfdaabf", + "vendor/topthink/framework/src/think/Env.php": "d89f4e0b2e89ca58bc6109836ec906dd", + "vendor/topthink/framework/src/think/Event.php": "f8b5467cfb77766d1496e73d9c2dca5e", + "vendor/topthink/framework/src/think/Exception.php": "c008b9bc85fbabe602ef8d0b655636df", + "vendor/topthink/framework/src/think/Facade.php": "d5fabd5fca4680a25b942e72cffffcd2", + "vendor/topthink/framework/src/think/File.php": "ae08e51d134fefbbe5c8c9c95ff53f6e", + "vendor/topthink/framework/src/think/Http.php": "8a88798ccfcfce1b0751063b1d8fbbbe", + "vendor/topthink/framework/src/think/Lang.php": "5dfaf1cd264bfa1239d44636ee43cf62", + "vendor/topthink/framework/src/think/Log.php": "561c437f42d772d125cd905d9db38c55", + "vendor/topthink/framework/src/think/Manager.php": "0245bbfbe0d0b024f9fdf9715f76fc98", + "vendor/topthink/framework/src/think/Middleware.php": "7a228bea201e891e4c861bcb1b1bbb56", + "vendor/topthink/framework/src/think/Pipeline.php": "f3191b6092b44915075ca0349d5d1345", + "vendor/topthink/framework/src/think/Request.php": "b0b256b7dd37563cd0cfce884520acb7", + "vendor/topthink/framework/src/think/Response.php": "4b0f0b24ef1931590dd2c62f69f4fcbe", + "vendor/topthink/framework/src/think/Route.php": "fb07783d90e1a7035813e157d191f5ad", + "vendor/topthink/framework/src/think/Service.php": "d05b7f631521c82c80ae6e1b368a3e05", + "vendor/topthink/framework/src/think/Session.php": "0fe3fef8679e59092c7bbeea88d61ced", + "vendor/topthink/framework/src/think/Validate.php": "7d22b649464e655a8f35bd52b79ccf5a", + "vendor/topthink/framework/src/think/View.php": "b83aca171b9443c15e792706344afcfd", + "vendor/topthink/framework/src/think/cache/Driver.php": "ad97d2cf14c854ae916de0e7a63ad1e4", + "vendor/topthink/framework/src/think/cache/TagSet.php": "c19f92f38e940f67cf6eb4b872d8593a", + "vendor/topthink/framework/src/think/cache/driver/File.php": "97b102b513d5f677a6bd070fcad86eb1", + "vendor/topthink/framework/src/think/cache/driver/Memcache.php": "f18221ada25ca0b581728d5a0b3364f6", + "vendor/topthink/framework/src/think/cache/driver/Memcached.php": "f1a2d027c8b165b6d5f1cc5b5593991f", + "vendor/topthink/framework/src/think/cache/driver/Redis.php": "0c29e3e0a481fffdb2552dd7270def55", + "vendor/topthink/framework/src/think/cache/driver/Wincache.php": "e80306d1137ca19e0700e9b8fa4bab1b", + "vendor/topthink/framework/src/think/console/Command.php": "b96f7951a29bf6f238dcf1f4051a7fcb", + "vendor/topthink/framework/src/think/console/Input.php": "1b3615c278073997285fd7a9468fe674", + "vendor/topthink/framework/src/think/console/Output.php": "d57c39f79f8712da7930f8cd369ddd92", + "vendor/topthink/framework/src/think/console/Table.php": "7b236ebaa14d28e5cfdcee726c19ec82", + "vendor/topthink/framework/src/think/console/command/Clear.php": "c3418bfd6dd81d7a32072e835dae3e78", + "vendor/topthink/framework/src/think/console/command/Help.php": "82b74edc7ca7eaae4bd65b5b50e5f6bf", + "vendor/topthink/framework/src/think/console/command/Lists.php": "1b0b56208807921bfb83bc629b9e6b60", + "vendor/topthink/framework/src/think/console/command/Make.php": "7c04e0b1cc2030da0cd683e8e512c2fe", + "vendor/topthink/framework/src/think/console/command/RouteList.php": "f652a4545a49fbb4535bbf99602221d6", + "vendor/topthink/framework/src/think/console/command/RunServer.php": "f54f1bccc0e765385b58754bc7b4ca90", + "vendor/topthink/framework/src/think/console/command/ServiceDiscover.php": "a7e8d5afbbf24e960ccdeb152218a1a3", + "vendor/topthink/framework/src/think/console/command/VendorPublish.php": "73240901d47b43421d6db09d789adb4f", + "vendor/topthink/framework/src/think/console/command/Version.php": "f745ebb1fd33e6185c5a3e629280e082", + "vendor/topthink/framework/src/think/console/command/make/Command.php": "f9734a57bfbdd21fbfcb94d4a234718a", + "vendor/topthink/framework/src/think/console/command/make/Controller.php": "915f0847fe34e0c5f2472b067878f97f", + "vendor/topthink/framework/src/think/console/command/make/Event.php": "7b627187949f67f06023bfe56c7abc08", + "vendor/topthink/framework/src/think/console/command/make/Listener.php": "f104695e5b3af66edbc6eef03a273db7", + "vendor/topthink/framework/src/think/console/command/make/Middleware.php": "97c35df47c542b2df4bc2ad3bb47acc3", + "vendor/topthink/framework/src/think/console/command/make/Model.php": "593d5903b7fa0cd4dc93f7ac0087a4ba", + "vendor/topthink/framework/src/think/console/command/make/Service.php": "cc9e7d60d7ec5e1e76e2f17468d7a4f9", + "vendor/topthink/framework/src/think/console/command/make/Subscribe.php": "e1905b1df69b88fcc4df2ac41ecf5138", + "vendor/topthink/framework/src/think/console/command/make/Validate.php": "2241d4ebd64ff2566ca5be6e4e430882", + "vendor/topthink/framework/src/think/console/command/optimize/Route.php": "1528387336af41a9a2736e40f7c934e7", + "vendor/topthink/framework/src/think/console/command/optimize/Schema.php": "859c557c0023890938c686f82175f1f5", + "vendor/topthink/framework/src/think/console/input/Argument.php": "2bb9cb4d97e4276120aac3df5f7348d7", + "vendor/topthink/framework/src/think/console/input/Definition.php": "0b027892c711a8ab87d9a880c1ce965a", + "vendor/topthink/framework/src/think/console/input/Option.php": "c4770b0005ee16f9fdb45163a6923c4c", + "vendor/topthink/framework/src/think/console/output/Ask.php": "accf86acad100e55c7953fb1f482b4cd", + "vendor/topthink/framework/src/think/console/output/Descriptor.php": "f5c0d8daa8252f6ded88cab6cbd1ed29", + "vendor/topthink/framework/src/think/console/output/Formatter.php": "b509678f786ef21f27ccdd4679e0ba0d", + "vendor/topthink/framework/src/think/console/output/Question.php": "c53784a63e7316b94f011206d4cf6104", + "vendor/topthink/framework/src/think/console/output/descriptor/Console.php": "32e03fcd27c5f38c9556b1b4156386ee", + "vendor/topthink/framework/src/think/console/output/driver/Buffer.php": "376c65197e1662b9b5b4d176199e11d2", + "vendor/topthink/framework/src/think/console/output/driver/Console.php": "e44d399f4fd0109bc33d454aa9430c17", + "vendor/topthink/framework/src/think/console/output/driver/Nothing.php": "7d57a87bb750ac51369f3ae2c4885c87", + "vendor/topthink/framework/src/think/console/output/formatter/Stack.php": "77e06e4a1cda6c5903838ceb00d1e391", + "vendor/topthink/framework/src/think/console/output/formatter/Style.php": "b9f39a1fe8926d325c29e1452cf07f23", + "vendor/topthink/framework/src/think/console/output/question/Choice.php": "2b4e3e3a6cd0a508d6d1de2abec00d7d", + "vendor/topthink/framework/src/think/console/output/question/Confirmation.php": "0485fccd74c9c07cbc038faa0a9ec31b", + "vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php": "1231fd914623a3a7143c5d78ee679dbd", + "vendor/topthink/framework/src/think/contract/LogHandlerInterface.php": "f0d0c84a5163f779a285cbd209b61096", + "vendor/topthink/framework/src/think/contract/ModelRelationInterface.php": "aec747e70cf5c49df0ea408dc2db872a", + "vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php": "e0a5eafb056017ace2ce9caa5b95f9fc", + "vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php": "2bedfe66dea718bc04a1c14eaa406196", + "vendor/topthink/framework/src/think/event/AppInit.php": "984ff336e7922e78f6c9902f7c62ff33", + "vendor/topthink/framework/src/think/event/HttpEnd.php": "78ec175db9222f50446751b0021d3a87", + "vendor/topthink/framework/src/think/event/HttpRun.php": "bbf740cb9a8d1dc8cfd555fc1b9252e1", + "vendor/topthink/framework/src/think/event/LogRecord.php": "71741dd09a38d61fd5bf8230ee053463", + "vendor/topthink/framework/src/think/event/LogWrite.php": "e5198270973d0f5d936fae751d71e47e", + "vendor/topthink/framework/src/think/event/RouteLoaded.php": "377b4ae62e65ed93212314038065a027", + "vendor/topthink/framework/src/think/exception/ClassNotFoundException.php": "7d71209bba79044940bb77f92274d012", + "vendor/topthink/framework/src/think/exception/ErrorException.php": "72d9e6827d2fc863e2662b1085b854bc", + "vendor/topthink/framework/src/think/exception/FileException.php": "289028443b73a7c21c035b59ace84e93", + "vendor/topthink/framework/src/think/exception/FuncNotFoundException.php": "bec6091084570edd0ec8253071b4cbd7", + "vendor/topthink/framework/src/think/exception/Handle.php": "c4284304e0715419dac355dfbcf0b5dd", + "vendor/topthink/framework/src/think/exception/HttpException.php": "49cfc8ce07b636497a8636325cbae0e1", + "vendor/topthink/framework/src/think/exception/HttpResponseException.php": "db1cc63161ae3055f9edc878f2a2df27", + "vendor/topthink/framework/src/think/exception/InvalidArgumentException.php": "aabaec0f6be2a666706f48e87d8452c2", + "vendor/topthink/framework/src/think/exception/RouteNotFoundException.php": "6ff3cddcc511d9ab18c266c4e708ce8c", + "vendor/topthink/framework/src/think/exception/ValidateException.php": "9dce1db5853b3f952fbfcb9f0201c26c", + "vendor/topthink/framework/src/think/facade/App.php": "c1b382b52a683011b3e7871c0abf9cc7", + "vendor/topthink/framework/src/think/facade/Cache.php": "44c725cc6c0112322afecaa0375faef2", + "vendor/topthink/framework/src/think/facade/Config.php": "cc125e093778de1c3394608b96f2ffa3", + "vendor/topthink/framework/src/think/facade/Console.php": "205e762aa9aee62b66dba1fd5c96cfab", + "vendor/topthink/framework/src/think/facade/Cookie.php": "c0bc7c7f2d566f6be8790328db1a6cd6", + "vendor/topthink/framework/src/think/facade/Env.php": "8c4fd4c24dd9a1e2fc75c62d3615d3a6", + "vendor/topthink/framework/src/think/facade/Event.php": "3fc5df66461cb689e782d191c8265c74", + "vendor/topthink/framework/src/think/facade/Lang.php": "94521eca0e3afcdae86d50b18a198f4e", + "vendor/topthink/framework/src/think/facade/Log.php": "573a214d703ac95a144c92306b99bef0", + "vendor/topthink/framework/src/think/facade/Middleware.php": "46453319a51d45ec16bb25d1f4ec4cde", + "vendor/topthink/framework/src/think/facade/Request.php": "31ff27e3bca0b25251ab4b4aa0434f42", + "vendor/topthink/framework/src/think/facade/Route.php": "903c421ef43ed77b983572687c8c462a", + "vendor/topthink/framework/src/think/facade/Session.php": "5bdcd25fe35a9691575a6e6e883fa2c7", + "vendor/topthink/framework/src/think/facade/Validate.php": "9506936cdde393358af172df1a4494c6", + "vendor/topthink/framework/src/think/facade/View.php": "20d6d9770b561e66c9fbec90f94f3163", + "vendor/topthink/framework/src/think/file/UploadedFile.php": "5e41f3666c7f78689f5fa0fd438eb599", + "vendor/topthink/framework/src/think/initializer/BootService.php": "9a1ae4f05aff4f20c602356406eb8063", + "vendor/topthink/framework/src/think/initializer/Error.php": "15b26b9ae116cedc26daf5153e6a1d15", + "vendor/topthink/framework/src/think/initializer/RegisterService.php": "4568ae65cb6b4d8555146ea74475e823", + "vendor/topthink/framework/src/think/log/Channel.php": "31fc7252cf0827ceaa6173d7f5a9346a", + "vendor/topthink/framework/src/think/log/ChannelSet.php": "81f1588bfe39bd00e30e9f81f38b4c85", + "vendor/topthink/framework/src/think/log/driver/File.php": "6e74b9dd867266143ca20ef2e6ed9154", + "vendor/topthink/framework/src/think/log/driver/Socket.php": "6617287fd1f57e0b889e3877cc80ece0", + "vendor/topthink/framework/src/think/middleware/AllowCrossDomain.php": "900d5e0009f56ad6b113f28e13f53271", + "vendor/topthink/framework/src/think/middleware/CheckRequestCache.php": "5636c8702e9b1f0a90f36870a5a019ae", + "vendor/topthink/framework/src/think/middleware/FormTokenCheck.php": "ed1d72653a1f39187760090e5072c45c", + "vendor/topthink/framework/src/think/middleware/LoadLangPack.php": "2ed3d85ecc69a5332bd73c15c5d27697", + "vendor/topthink/framework/src/think/middleware/SessionInit.php": "bc94b6d58372edecd6f7e6d6c312c73c", + "vendor/topthink/framework/src/think/response/File.php": "5dfc396e8da7fcd15b2711a9c5812683", + "vendor/topthink/framework/src/think/response/Html.php": "be925634e184840d85cb75f07e1106cb", + "vendor/topthink/framework/src/think/response/Json.php": "6ac335f14d09ccf98f9dbbd8a8f8dfec", + "vendor/topthink/framework/src/think/response/Jsonp.php": "b5d4a5862d73feea5f99704304de8286", + "vendor/topthink/framework/src/think/response/Redirect.php": "6e6b791afd18f4f31ee0b08e5217a60c", + "vendor/topthink/framework/src/think/response/View.php": "8d078e918c22763a6e2eb5bf1703e44a", + "vendor/topthink/framework/src/think/response/Xml.php": "11dd96760c15e5285425a892c40334fe", + "vendor/topthink/framework/src/think/route/Dispatch.php": "8560a2ad478c71f4debc9395970b1ea5", + "vendor/topthink/framework/src/think/route/Domain.php": "34bab0e43cf6cde75ade53566905162e", + "vendor/topthink/framework/src/think/route/Resource.php": "e260b88ec77f9757b1d924d57cf96899", + "vendor/topthink/framework/src/think/route/ResourceRegister.php": "42ca7b8351c6c4133e67c1ff8edc80aa", + "vendor/topthink/framework/src/think/route/Rule.php": "5e76772ff72d02a2a5c033378a11de7f", + "vendor/topthink/framework/src/think/route/RuleGroup.php": "8a5a2920d319e1c9b088268739f839bb", + "vendor/topthink/framework/src/think/route/RuleItem.php": "fa5f60b4599ea7d6f97056cd773ed788", + "vendor/topthink/framework/src/think/route/RuleName.php": "bc685717958f739bc2a09f6c04419c3f", + "vendor/topthink/framework/src/think/route/Url.php": "8eb9e54bfca0d4bbfd5fd8a46a756e13", + "vendor/topthink/framework/src/think/route/dispatch/Callback.php": "77515c5555ef77513c407247657d43cc", + "vendor/topthink/framework/src/think/route/dispatch/Controller.php": "5c9a846475d254814585395b19e28eef", + "vendor/topthink/framework/src/think/route/dispatch/Url.php": "96f2faa4ec868e91a666391c5219c9e9", + "vendor/topthink/framework/src/think/service/ModelService.php": "d246947f72194bc4258795cf41f942bc", + "vendor/topthink/framework/src/think/service/PaginatorService.php": "be712b627f3f8951861dff190b7969a1", + "vendor/topthink/framework/src/think/service/ValidateService.php": "3beaaf71b0681724c8753bb13a890880", + "vendor/topthink/framework/src/think/session/Store.php": "d241395fc5c7d470fbf3f8a33d1e8e79", + "vendor/topthink/framework/src/think/session/driver/Cache.php": "15d31d477b182f0713b76b1259a6097b", + "vendor/topthink/framework/src/think/session/driver/File.php": "7acce54b119bb41773d7ac62e8d629f6", + "vendor/topthink/framework/src/think/validate/ValidateRule.php": "c2b5c37fb9187186ebdb94a1ba4094af", + "vendor/topthink/framework/src/think/view/driver/Php.php": "9bc5efeea5eb04aa88e6152d0b360f76", + "vendor/topthink/framework/tests/AppTest.php": "bacd307ce362c25d304b1a8ce4f4cf58", + "vendor/topthink/framework/tests/CacheTest.php": "e012966d1df411d2124e27714753f170", + "vendor/topthink/framework/tests/ConfigTest.php": "5ed5b5a2fcea0e32e442e619baaae37a", + "vendor/topthink/framework/tests/ContainerTest.php": "2f5456fc7e1a9e7f501997892d08f9dd", + "vendor/topthink/framework/tests/DbTest.php": "08c3b4de13a27cd83607197592fd35cf", + "vendor/topthink/framework/tests/DispatchTest.php": "1d937bded343da402792066ba12d66a0", + "vendor/topthink/framework/tests/EnvTest.php": "df41f0ab201b2c73251664d728a443dd", + "vendor/topthink/framework/tests/EventTest.php": "3f8d7bd5748505841de51d01e64a218b", + "vendor/topthink/framework/tests/HttpTest.php": "34d4effe3dfc0c78396bff9d59a5a4d4", + "vendor/topthink/framework/tests/InteractsWithApp.php": "b2dfeae536b3acdf3d4c3204c5d1b666", + "vendor/topthink/framework/tests/LogTest.php": "0dccec2379be413187d1ba1cd6c619a1", + "vendor/topthink/framework/tests/MiddlewareTest.php": "61a9573ae5b84e653d1e19ee1df1dcc2", + "vendor/topthink/framework/tests/RouteTest.php": "7326b51926d67b825982ff80b626d556", + "vendor/topthink/framework/tests/SessionTest.php": "32611a50730809619aedfdcc08c7c704", + "vendor/topthink/framework/tests/UrlRouteTest.php": "6690e73dae68fddd94f0ea4eae0f4b7b", + "vendor/topthink/framework/tests/ViewTest.php": "b06327b4d7b6d93e2f62e12bf1661390", + "vendor/topthink/framework/tests/bootstrap.php": "dede2d38ac5a0a67bb13a035c5faba43", + "vendor/topthink/think-captcha/src/Captcha.php": "1ed5a35e2168467cfa10d6652083d47a", + "vendor/topthink/think-captcha/src/CaptchaController.php": "b41ca5b85bd0ad1fcb839dfd36909d54", + "vendor/topthink/think-captcha/src/CaptchaService.php": "fb7bd8119bd57bd6cddf77a0196eed1b", + "vendor/topthink/think-captcha/src/config.php": "e9cd068a020e5074527a99059e613b3b", + "vendor/topthink/think-captcha/src/facade/Captcha.php": "3848854ffe9761c5d44d682cabc808dc", + "vendor/topthink/think-captcha/src/helper.php": "e89a4035d459e580d61815f7319128cf", + "vendor/topthink/think-filesystem/src/Filesystem.php": "473f84bee756cd8bb314d6213a317987", + "vendor/topthink/think-filesystem/src/facade/Filesystem.php": "f0e7c67dff62bf69c72d168c84bdf9b2", + "vendor/topthink/think-filesystem/src/filesystem/Driver.php": "983ac639b1195e168d571909e7194163", + "vendor/topthink/think-filesystem/src/filesystem/driver/Local.php": "b4be51c2540053adb730efee68ff47fa", + "vendor/topthink/think-filesystem/tests/FilesystemTest.php": "72d58292180ab89316051f53f4941a39", + "vendor/topthink/think-filesystem/tests/bootstrap.php": "3beefb00777a6bd04265b7d33c23efa9", + "vendor/topthink/think-helper/src/Collection.php": "40298645490eabe596b03cf645e86f6e", + "vendor/topthink/think-helper/src/contract/Arrayable.php": "867bb9874f956b71624b4e4385fbbf42", + "vendor/topthink/think-helper/src/contract/Jsonable.php": "63f951f1a280feda4cd5da1e6ca976bd", + "vendor/topthink/think-helper/src/helper/Arr.php": "efda0e6c6c1570f77eaf79bee493d82b", + "vendor/topthink/think-helper/src/helper/Str.php": "c472457f78e771cbca659435c6ee264b", + "vendor/topthink/think-helper/src/helper.php": "c48051a92846c0130e8ea0f4a7d882d6", + "vendor/topthink/think-helper/tests/ArrTest.php": "0acaf1919b70dbceef66a194fe3da072", + "vendor/topthink/think-helper/tests/CollectionTest.php": "dce8ade7387036a61a556055a1d0c3e6", + "vendor/topthink/think-helper/tests/StrTest.php": "c88e8c336d65520e0ce98ab11cd4166a", + "vendor/topthink/think-helper/tests/TestCase.php": "96441b59687ab7671d916e17f4397ecf", + "vendor/topthink/think-image/src/Image.php": "c0a546d4395c04a2f3accad3cd6d18a1", + "vendor/topthink/think-image/src/image/Exception.php": "eff70004c5907cd3294797da0cc81adf", + "vendor/topthink/think-image/src/image/gif/Decoder.php": "6a162a418672b389189ad5c3d079bdab", + "vendor/topthink/think-image/src/image/gif/Encoder.php": "98b472cc3b8bfdfc87fd03f5cdcd2c98", + "vendor/topthink/think-image/src/image/gif/Gif.php": "d9b90a2c23e2b8ba80fbedd0a8ad1d5c", + "vendor/topthink/think-image/tests/CropTest.php": "efc9b42064f815e2d93cadce4ab5c6a1", + "vendor/topthink/think-image/tests/FlipTest.php": "93b5871de6b6921b762032d03c3e5c2e", + "vendor/topthink/think-image/tests/InfoTest.php": "341c57c69e2b94e866dc2e4d538b4cde", + "vendor/topthink/think-image/tests/RotateTest.php": "be97a5f03e66bdf38d08d38ae072aeb3", + "vendor/topthink/think-image/tests/TestCase.php": "5a2c2edcc83506151a92704fa8852dc1", + "vendor/topthink/think-image/tests/TextTest.php": "07a5fb5e276f478737d9aa2c972a6449", + "vendor/topthink/think-image/tests/ThumbTest.php": "a9d673067e35a3f5ddf169b2645f97a5", + "vendor/topthink/think-image/tests/WaterTest.php": "46d99b137bdc58026d64f04aac02f370", + "vendor/topthink/think-image/tests/autoload.php": "151f4b91269570966fd7d28c4bcf83f4", + "vendor/topthink/think-multi-app/src/MultiApp.php": "eab2655016ced00ad94207b128ba6964", + "vendor/topthink/think-multi-app/src/Service.php": "6082291699f80625f9c681a82c73c340", + "vendor/topthink/think-multi-app/src/Url.php": "1f9e5140837169bf4639f7f3804b42f7", + "vendor/topthink/think-multi-app/src/command/Build.php": "70e6cb18ed4c6c9115e3512f25f89687", + "vendor/topthink/think-multi-app/src/command/Clear.php": "53f3ea5f63449eb4970cf1f33b428754", + "vendor/topthink/think-orm/src/DbManager.php": "2b441f6c4e4da9ada932a4185b61b85c", + "vendor/topthink/think-orm/src/Model.php": "89697fca70300f5a9f2b4148f18c5eae", + "vendor/topthink/think-orm/src/Paginator.php": "380bb132a897d42f10cf42b61baa6f08", + "vendor/topthink/think-orm/src/db/BaseBuilder.php": "1db8c1f7b13b9cccf76996e5f60fd24a", + "vendor/topthink/think-orm/src/db/BaseQuery.php": "826eb05534869bb161b7084096b84295", + "vendor/topthink/think-orm/src/db/Builder.php": "e0529383e30a07e38a851fe2d9b94417", + "vendor/topthink/think-orm/src/db/CacheItem.php": "183dcf14d6253fddb9cfadc2e58af29e", + "vendor/topthink/think-orm/src/db/Connection.php": "72afd5af186059f4725593584d06461b", + "vendor/topthink/think-orm/src/db/ConnectionInterface.php": "a5c6ddc11f2b33741bcc1e49309f62e0", + "vendor/topthink/think-orm/src/db/Fetch.php": "f101306e50da8ef26f6f40e6f7cba454", + "vendor/topthink/think-orm/src/db/Mongo.php": "d8a8b2030d9bb2c540f66d41ea85f0dc", + "vendor/topthink/think-orm/src/db/PDOConnection.php": "a39c2e01d988779efe3fde5335964f8d", + "vendor/topthink/think-orm/src/db/Query.php": "2578f6bb9e3e16765efa638a6f723d01", + "vendor/topthink/think-orm/src/db/Raw.php": "4bbe113ab5af1c592605c382c520d8b3", + "vendor/topthink/think-orm/src/db/Where.php": "76f83d851ac5c207c1b3403427aa0392", + "vendor/topthink/think-orm/src/db/builder/Mongo.php": "f596da1065f4e41d0bf7f34b10e63c3e", + "vendor/topthink/think-orm/src/db/builder/Mysql.php": "1ef4e195999806330f091491aaad6013", + "vendor/topthink/think-orm/src/db/builder/Oracle.php": "821972438fa59ae074cca0bf2b31ced3", + "vendor/topthink/think-orm/src/db/builder/Pgsql.php": "251e81a4c2978561168283ec7d2eb13e", + "vendor/topthink/think-orm/src/db/builder/Sqlite.php": "c123f6918417deed2b513932f367a62d", + "vendor/topthink/think-orm/src/db/builder/Sqlsrv.php": "e645b0251a9c4d76e3c21696c5169791", + "vendor/topthink/think-orm/src/db/concern/AggregateQuery.php": "d27216b7cd2b7b4f44ad91de55797911", + "vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php": "cd4c01ace6d98adcd3c5724fd5006c3c", + "vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php": "b59669fe65088e10c1f9ef1be8b521bc", + "vendor/topthink/think-orm/src/db/concern/ParamsBind.php": "65b473ba2efa83f2a0a83bc98b795599", + "vendor/topthink/think-orm/src/db/concern/ResultOperation.php": "5e31521793258033afb6763afdf9b128", + "vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php": "ca0b65d374702455703bb4f0d6900e36", + "vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php": "1d422031120c95429212d36f0ca468e3", + "vendor/topthink/think-orm/src/db/concern/Transaction.php": "ec7f15b31a8afc44d6796ba26efba389", + "vendor/topthink/think-orm/src/db/concern/WhereQuery.php": "6abf6a28423aa9e312b544ded26458f8", + "vendor/topthink/think-orm/src/db/connector/Mongo.php": "0b35db70f780136d0226e1f444469862", + "vendor/topthink/think-orm/src/db/connector/Mysql.php": "1a1c3f40faa6b1a626f1cc6fea675dac", + "vendor/topthink/think-orm/src/db/connector/Oracle.php": "a3938e1c1a1e50f09f337ac881efb56c", + "vendor/topthink/think-orm/src/db/connector/Pgsql.php": "51a53060bc1bc2cd8987adf450cdcf7e", + "vendor/topthink/think-orm/src/db/connector/Sqlite.php": "890709abb196ddc70478db013ce759cb", + "vendor/topthink/think-orm/src/db/connector/Sqlsrv.php": "68b9269b80a0ccfb893e81f5baa5e630", + "vendor/topthink/think-orm/src/db/exception/BindParamException.php": "f9a008b765cfe3917461e6c74b43e205", + "vendor/topthink/think-orm/src/db/exception/DataNotFoundException.php": "91fb8b9e4e8267304668594046531974", + "vendor/topthink/think-orm/src/db/exception/DbEventException.php": "8879dd981998b4e3c8903a08afa7a5f3", + "vendor/topthink/think-orm/src/db/exception/DbException.php": "72ce12926e444ce7e25c3dbd91cb252d", + "vendor/topthink/think-orm/src/db/exception/InvalidArgumentException.php": "c0b0901e32244fed718351620efb35c8", + "vendor/topthink/think-orm/src/db/exception/ModelEventException.php": "084a5a85260fb32cd24d9948876e55d4", + "vendor/topthink/think-orm/src/db/exception/ModelNotFoundException.php": "3532138b8cd2a5359b30d24acacd5095", + "vendor/topthink/think-orm/src/db/exception/PDOException.php": "a76ffda7484c7b9fd1184f84a748b775", + "vendor/topthink/think-orm/src/facade/Db.php": "720de1f858a3c308e5a6ae04951119d0", + "vendor/topthink/think-orm/src/model/Collection.php": "45333e5962c932643ce9bc5547144d5d", + "vendor/topthink/think-orm/src/model/Pivot.php": "85caa4334368ee3e20d577c5739cb667", + "vendor/topthink/think-orm/src/model/Relation.php": "fc14d4da1edfee8d8c51330d16e7179c", + "vendor/topthink/think-orm/src/model/concern/Attribute.php": "8bf53526915c05ec15a63f6691b9b4a0", + "vendor/topthink/think-orm/src/model/concern/Conversion.php": "6674a20028c130f33a4d8470e48a25a6", + "vendor/topthink/think-orm/src/model/concern/ModelEvent.php": "442e706bb86fc4f6e6432d063cda8d05", + "vendor/topthink/think-orm/src/model/concern/OptimLock.php": "e0752d26f237d5154677efbfc2c93636", + "vendor/topthink/think-orm/src/model/concern/RelationShip.php": "2d8c8888172d3d19fed15c86e714010b", + "vendor/topthink/think-orm/src/model/concern/SoftDelete.php": "5579dec35ea35e1010f30c5d04fe3381", + "vendor/topthink/think-orm/src/model/concern/TimeStamp.php": "bc1b104df136bc55c033292f78a6591c", + "vendor/topthink/think-orm/src/model/concern/Virtual.php": "df791cd200fcca6d1320b682938835fb", + "vendor/topthink/think-orm/src/model/relation/BelongsTo.php": "d1eb337829095a652f2e9b78a009adc6", + "vendor/topthink/think-orm/src/model/relation/BelongsToMany.php": "093d7fb420988bb348302fcd71d94df3", + "vendor/topthink/think-orm/src/model/relation/HasMany.php": "cc1658f8394d5d7828d587ed93dc8b3e", + "vendor/topthink/think-orm/src/model/relation/HasManyThrough.php": "53527d04f557588e6647aa99416a9364", + "vendor/topthink/think-orm/src/model/relation/HasOne.php": "1ae4a929e3cfe78ec39e44d398512294", + "vendor/topthink/think-orm/src/model/relation/HasOneThrough.php": "9c186640e53ec6b4aa608b3e217327ec", + "vendor/topthink/think-orm/src/model/relation/MorphMany.php": "727a944f0c6e881472b29eed152db573", + "vendor/topthink/think-orm/src/model/relation/MorphOne.php": "f59f1db01dc6b69e14593190f98ffc89", + "vendor/topthink/think-orm/src/model/relation/MorphTo.php": "fe05ab5092799fc7bbc123e598f8cafd", + "vendor/topthink/think-orm/src/model/relation/MorphToMany.php": "1cc4aa3ef3b90429b0166096666619b9", + "vendor/topthink/think-orm/src/model/relation/OneToOne.php": "e5cb53fefecf78caaa6c3df6616ad434", + "vendor/topthink/think-orm/src/paginator/driver/Bootstrap.php": "35e7ab9dfca4b2107f3464382fb07a41", + "vendor/topthink/think-orm/stubs/Exception.php": "17eaebead638f6963681fc6b1921c7e4", + "vendor/topthink/think-orm/stubs/Facade.php": "9ab2a4598abb185409495b48cff0ce13", + "vendor/topthink/think-orm/stubs/load_stubs.php": "9c9d66685b7f9a52a8c9ff174a52e25a", + "vendor/topthink/think-template/src/Template.php": "4593b147e4bf6d95a5f327293178637e", + "vendor/topthink/think-template/src/facade/Template.php": "46fa179c52c4541a3a18ea4b86d403e8", + "vendor/topthink/think-template/src/template/TagLib.php": "20c7c67f1f25b545480231ad3046d643", + "vendor/topthink/think-template/src/template/contract/DriverInterface.php": "50a4da5b835635f600fea645670808be", + "vendor/topthink/think-template/src/template/driver/File.php": "870a66baa32a00c332780839d1ad1efc", + "vendor/topthink/think-template/src/template/exception/TemplateNotFoundException.php": "fdcd5d94671dd293bd38462c51d3e9bc", + "vendor/topthink/think-template/src/template/taglib/Cx.php": "5cc5ba9aac8425c17b8322f368368ad6", + "vendor/topthink/think-template/tests/bootstrap.php": "1b87d59f3f5fe8b1bedd912f1c2f3304", + "vendor/topthink/think-template/tests/tag/Demo.php": "7e27adcdb7d0c604c9de02e0e9b11eca", + "vendor/topthink/think-template/tests/think/TemplateTest.php": "a3676eac79662bba5e698ffe5b194e41", + "vendor/topthink/think-trace/src/Console.php": "9a072c9f535534d3940f7ade8bbc8b01", + "vendor/topthink/think-trace/src/Html.php": "9c97405e6b33b9e37c6c8da196a61861", + "vendor/topthink/think-trace/src/Service.php": "356aa596e5a2bd1f979dae370b3ae1df", + "vendor/topthink/think-trace/src/TraceDebug.php": "4523f6a9b7049cda837f8d37c27900bb", + "vendor/topthink/think-trace/src/config.php": "811e36d20aec9b699ab0cba0a0e85e28", + "vendor/topthink/think-view/src/Think.php": "efe21f85382d824990ef853eb38388de", + "vendor/w7corp/easywechat/src/Kernel/Config.php": "050b13f8638fe9a8bc1185c807c22c23", + "vendor/w7corp/easywechat/src/Kernel/Contracts/AccessToken.php": "7c5e04a0d9c6c0d8c4d750f806352ec9", + "vendor/w7corp/easywechat/src/Kernel/Contracts/AccessTokenAwareHttpClient.php": "bc0590d36cd0eb28843316a70993a901", + "vendor/w7corp/easywechat/src/Kernel/Contracts/Aes.php": "9a65c8cae28bdc705635c8b24d2d03e0", + "vendor/w7corp/easywechat/src/Kernel/Contracts/Arrayable.php": "93d7295326db9de1d66f1f8af24afcc0", + "vendor/w7corp/easywechat/src/Kernel/Contracts/Config.php": "3e7bdfd500ddddc2f3e6ba2ca6d609a2", + "vendor/w7corp/easywechat/src/Kernel/Contracts/Jsonable.php": "27660d009a2835b0d28e21ae5ba6d284", + "vendor/w7corp/easywechat/src/Kernel/Contracts/RefreshableAccessToken.php": "33c66355f65b8ead3b68a9febeebe838", + "vendor/w7corp/easywechat/src/Kernel/Contracts/Server.php": "4eecbd83093840328690feb728f58e70", + "vendor/w7corp/easywechat/src/Kernel/Encryptor.php": "0c19bda16d5d88d86fac7c6aea64af3b", + "vendor/w7corp/easywechat/src/Kernel/Exceptions/BadMethodCallException.php": "96dce19a758691d9767fedd469c8a781", + "vendor/w7corp/easywechat/src/Kernel/Exceptions/BadRequestException.php": "153736d59ec7c8acc912079a0cf433e1", + "vendor/w7corp/easywechat/src/Kernel/Exceptions/BadResponseException.php": "9edbf1df171d85573560b488bbc02212", + "vendor/w7corp/easywechat/src/Kernel/Exceptions/DecryptException.php": "4c5ad0cfaa4f27f0861ba5cddb732462", + "vendor/w7corp/easywechat/src/Kernel/Exceptions/Exception.php": "f873393942aca4e375300a32500496c6", + "vendor/w7corp/easywechat/src/Kernel/Exceptions/HttpException.php": "6d1b27ed50cad919a93eba234fcf2859", + "vendor/w7corp/easywechat/src/Kernel/Exceptions/InvalidArgumentException.php": "04402bc30bb8c289b474a53080b4731e", + "vendor/w7corp/easywechat/src/Kernel/Exceptions/InvalidConfigException.php": "fa8bce0b755664d128dc161db21131cc", + "vendor/w7corp/easywechat/src/Kernel/Exceptions/RuntimeException.php": "7fb1bdcf3172b897a34b9e73cad9b674", + "vendor/w7corp/easywechat/src/Kernel/Exceptions/ServiceNotFoundException.php": "d97cb34c02543ac7efa9be6e86863601", + "vendor/w7corp/easywechat/src/Kernel/Form/File.php": "a5036ac047df03bf6961d42d07081fd1", + "vendor/w7corp/easywechat/src/Kernel/Form/Form.php": "139ae1b3aaa3c7cf531e48bc82c0d101", + "vendor/w7corp/easywechat/src/Kernel/HttpClient/AccessTokenAwareClient.php": "f963ad71fafc2bfdc8691e7b3ba86a15", + "vendor/w7corp/easywechat/src/Kernel/HttpClient/AccessTokenExpiredRetryStrategy.php": "7ec7191ae7022e412f327de1bc8cc4d2", + "vendor/w7corp/easywechat/src/Kernel/HttpClient/HttpClientMethods.php": "46c17f564e1ae94dc5c19bae4a86a749", + "vendor/w7corp/easywechat/src/Kernel/HttpClient/RequestUtil.php": "17c803b9e999e3e372cd67946256b388", + "vendor/w7corp/easywechat/src/Kernel/HttpClient/RequestWithPresets.php": "7f1fdc2dcbef4c2b78d613cada0bcc2e", + "vendor/w7corp/easywechat/src/Kernel/HttpClient/Response.php": "42c113a066c7d979fa1e259b37f7d126", + "vendor/w7corp/easywechat/src/Kernel/HttpClient/RetryableClient.php": "774879fde9e22d43d8f181f7dd3d272d", + "vendor/w7corp/easywechat/src/Kernel/Message.php": "d51643978f597b51298d7b91bdedc159", + "vendor/w7corp/easywechat/src/Kernel/ServerResponse.php": "ece9e31d1e07867f1189209962feaa36", + "vendor/w7corp/easywechat/src/Kernel/Support/AesCbc.php": "5e8f48c04a74727f59393e9334009f2d", + "vendor/w7corp/easywechat/src/Kernel/Support/AesEcb.php": "ddacd50a84fca027dd9357e28e0b4f57", + "vendor/w7corp/easywechat/src/Kernel/Support/AesGcm.php": "593650b2d6a7dcf343bca09d0e742537", + "vendor/w7corp/easywechat/src/Kernel/Support/Arr.php": "49b52e0f50fdd9166fe804d72f06a58c", + "vendor/w7corp/easywechat/src/Kernel/Support/Pkcs7.php": "670db273b04279c74d2953347ebcc438", + "vendor/w7corp/easywechat/src/Kernel/Support/PrivateKey.php": "d8452cf1d3b029ffc50ad45a56a00c27", + "vendor/w7corp/easywechat/src/Kernel/Support/PublicKey.php": "118eb5bd4b1216d57037c05668253076", + "vendor/w7corp/easywechat/src/Kernel/Support/Str.php": "1649acb5eefd3656bc3b5f124764a5ee", + "vendor/w7corp/easywechat/src/Kernel/Support/UserAgent.php": "d301d62c45e5d851717f76c92b3269c1", + "vendor/w7corp/easywechat/src/Kernel/Support/Xml.php": "614d697760c50b6c500c1b6230608f83", + "vendor/w7corp/easywechat/src/Kernel/Traits/DecryptXmlMessage.php": "95a059c0c67269c5270335c275e3dec3", + "vendor/w7corp/easywechat/src/Kernel/Traits/HasAttributes.php": "7aa7d7c6f0b0f602d86595e0754d3bb0", + "vendor/w7corp/easywechat/src/Kernel/Traits/InteractWithCache.php": "709a4285a8be897e264b7155a6b11007", + "vendor/w7corp/easywechat/src/Kernel/Traits/InteractWithClient.php": "a4f3b9d2ffe5d60a1b982159aebec305", + "vendor/w7corp/easywechat/src/Kernel/Traits/InteractWithConfig.php": "353ab239cffc37373f6bd83d366582dc", + "vendor/w7corp/easywechat/src/Kernel/Traits/InteractWithHandlers.php": "cec72e971b65bdf8620e7813916b2116", + "vendor/w7corp/easywechat/src/Kernel/Traits/InteractWithHttpClient.php": "92a1fe1d67d33ebd4f13af8b9fc29366", + "vendor/w7corp/easywechat/src/Kernel/Traits/InteractWithServerRequest.php": "748ec36106b5fc14ad454fb6c91aef56", + "vendor/w7corp/easywechat/src/Kernel/Traits/MockableHttpClient.php": "7d300ad9e8369e98919bc504d9901be3", + "vendor/w7corp/easywechat/src/Kernel/Traits/RespondXmlMessage.php": "d5f8b01c2726e131f28503792bb7e1b1", + "vendor/w7corp/easywechat/src/MiniApp/AccessToken.php": "df267a548fc27d4c3335ba356da579a1", + "vendor/w7corp/easywechat/src/MiniApp/Account.php": "613aef64fc758a7625d1ccbefaabc7d7", + "vendor/w7corp/easywechat/src/MiniApp/Application.php": "56b574cb529bd5abad846e165d7f6aa5", + "vendor/w7corp/easywechat/src/MiniApp/Contracts/Account.php": "a9e50501a1b8b57312cdfddea796e8ef", + "vendor/w7corp/easywechat/src/MiniApp/Contracts/Application.php": "a6fd9f1aea8b7ec2d361e87ceadbdf2c", + "vendor/w7corp/easywechat/src/MiniApp/Decryptor.php": "e4366dfa6e28233ed379abf360cdecc1", + "vendor/w7corp/easywechat/src/MiniApp/Server.php": "8089769d7f75f4cbb0103ff3339b9906", + "vendor/w7corp/easywechat/src/MiniApp/Utils.php": "2eac59197516d61cd4815ad717462981", + "vendor/w7corp/easywechat/src/OfficialAccount/AccessToken.php": "e29aef579a6277882284997dd54cab3c", + "vendor/w7corp/easywechat/src/OfficialAccount/Account.php": "af757c9688fba1dcf85d0be6c2e99445", + "vendor/w7corp/easywechat/src/OfficialAccount/Application.php": "176bc60caee3f82ef6f41e5ff1cc0963", + "vendor/w7corp/easywechat/src/OfficialAccount/Config.php": "a51db4efc1ab13651dec365c91cf7fa5", + "vendor/w7corp/easywechat/src/OfficialAccount/Contracts/Account.php": "ac1f8aa1fc888b008e5d5380fea0cd75", + "vendor/w7corp/easywechat/src/OfficialAccount/Contracts/Application.php": "7fbe1f92325f85f8a7110041440d72f1", + "vendor/w7corp/easywechat/src/OfficialAccount/JsApiTicket.php": "217412fdcce082058229a0a6b5450b35", + "vendor/w7corp/easywechat/src/OfficialAccount/Message.php": "ffdc1ce1d653ed0d2e49f11cfc89bd29", + "vendor/w7corp/easywechat/src/OfficialAccount/Server.php": "de6d36582d323e394621bf615aae430f", + "vendor/w7corp/easywechat/src/OfficialAccount/Utils.php": "000fd63dce22326bb303e5e960210d90", + "vendor/w7corp/easywechat/src/OpenPlatform/Account.php": "48120d104c5b6025861c27f7c23824ef", + "vendor/w7corp/easywechat/src/OpenPlatform/Application.php": "55ccb215e15582c0de6fde9543142592", + "vendor/w7corp/easywechat/src/OpenPlatform/Authorization.php": "92d1bdbb11ddc18328dbebda59984834", + "vendor/w7corp/easywechat/src/OpenPlatform/AuthorizerAccessToken.php": "0c5bd04eed6d547f7d92c8d2e6903170", + "vendor/w7corp/easywechat/src/OpenPlatform/ComponentAccessToken.php": "8a5525202e2daf4c2ec1ed89d50f9ff0", + "vendor/w7corp/easywechat/src/OpenPlatform/Config.php": "0133a22c4974055e1bb38b5972b6fca6", + "vendor/w7corp/easywechat/src/OpenPlatform/Contracts/Account.php": "c355a81bfb14e34d4ba086659b0496b9", + "vendor/w7corp/easywechat/src/OpenPlatform/Contracts/Application.php": "32aebb3ab778cc136dbe38709669b6ba", + "vendor/w7corp/easywechat/src/OpenPlatform/Contracts/VerifyTicket.php": "3811d37a5648f4d812dd0fde8b2c22bd", + "vendor/w7corp/easywechat/src/OpenPlatform/Message.php": "a5023bad37c4d9c3cf322d4c93a6d0df", + "vendor/w7corp/easywechat/src/OpenPlatform/Server.php": "3ce64912ea4d9263fa26982b972178fe", + "vendor/w7corp/easywechat/src/OpenPlatform/VerifyTicket.php": "07b857eb18ce8d6f97d430463f6ee20b", + "vendor/w7corp/easywechat/src/OpenWork/Account.php": "2fda10c1ba55d9f800206548a9a1953e", + "vendor/w7corp/easywechat/src/OpenWork/Application.php": "42f664e4660f6924a91d77048744abd0", + "vendor/w7corp/easywechat/src/OpenWork/Authorization.php": "8b35bd2e213d1ce351f3df28a42d0aa3", + "vendor/w7corp/easywechat/src/OpenWork/AuthorizerAccessToken.php": "b3a8840b37a22a3ea6533bc9abbc8091", + "vendor/w7corp/easywechat/src/OpenWork/Config.php": "241b8bb9a66b542d2eb15c0e2fd78653", + "vendor/w7corp/easywechat/src/OpenWork/Contracts/Account.php": "72c0bd3ae33d555f67a40be4e91127a0", + "vendor/w7corp/easywechat/src/OpenWork/Contracts/Application.php": "ab55dfddc077f0f3463ebf4f5bab82b7", + "vendor/w7corp/easywechat/src/OpenWork/Contracts/SuiteTicket.php": "d73dc2420b8665a566c209fcd7117af8", + "vendor/w7corp/easywechat/src/OpenWork/Encryptor.php": "e0c370aefb3c77b37f2fc4720e04939b", + "vendor/w7corp/easywechat/src/OpenWork/Message.php": "319aca31a8c80029a0dfc97ede5b999b", + "vendor/w7corp/easywechat/src/OpenWork/ProviderAccessToken.php": "22fcbfef32217019ec227aec43c57d87", + "vendor/w7corp/easywechat/src/OpenWork/Server.php": "df8fe798e3e570b4dcc223dc673bdab5", + "vendor/w7corp/easywechat/src/OpenWork/SuiteAccessToken.php": "f134ac46806ea27edf92f8b9a8704bc6", + "vendor/w7corp/easywechat/src/OpenWork/SuiteEncryptor.php": "dc9cfe53c5e3c50d69e68b7e53c46ecf", + "vendor/w7corp/easywechat/src/OpenWork/SuiteTicket.php": "ea3df7090794f988094145a339d57299", + "vendor/w7corp/easywechat/src/Pay/Application.php": "7700c2d281f0f5d90d2d51d260f1713c", + "vendor/w7corp/easywechat/src/Pay/Client.php": "5586dc2a8d4b9e3a3a6880db2f3c1054", + "vendor/w7corp/easywechat/src/Pay/Config.php": "fdede530cb85f471e1bd310ceb52e337", + "vendor/w7corp/easywechat/src/Pay/Contracts/Application.php": "3009ed00cae3d0346ab1c1a64174f484", + "vendor/w7corp/easywechat/src/Pay/Contracts/Merchant.php": "f5485feb29e11023c97693225eaf5768", + "vendor/w7corp/easywechat/src/Pay/Contracts/ResponseValidator.php": "171d1e745428177b6cab413d2ec2d4ce", + "vendor/w7corp/easywechat/src/Pay/LegacySignature.php": "2e5b12380b9fe558ab3b5294d7a3c1fa", + "vendor/w7corp/easywechat/src/Pay/Merchant.php": "1afdd4cac0bdf27d4434b7da11347ba6", + "vendor/w7corp/easywechat/src/Pay/Message.php": "0dbd5de664e114cf55d7e55199fb15ed", + "vendor/w7corp/easywechat/src/Pay/ResponseValidator.php": "45e02a3a912c7c586dd9f7b55d8497ac", + "vendor/w7corp/easywechat/src/Pay/Server.php": "1ae447dfa267a6a29a46ebb066cf5b1b", + "vendor/w7corp/easywechat/src/Pay/Signature.php": "3542add3487fd977eb81e014975548f1", + "vendor/w7corp/easywechat/src/Pay/URLSchemeBuilder.php": "801244a53c759ca635c93e1f393b8361", + "vendor/w7corp/easywechat/src/Pay/Utils.php": "59be9512bd710546b00a3bd2e7e901a8", + "vendor/w7corp/easywechat/src/Work/AccessToken.php": "3da1defa7d73fd365f69e999f263a472", + "vendor/w7corp/easywechat/src/Work/Account.php": "0bc9bbb7331b7b7615dc460c866c054c", + "vendor/w7corp/easywechat/src/Work/Application.php": "bd30bc1537b3492b58adf40a1bc82dbc", + "vendor/w7corp/easywechat/src/Work/Config.php": "130a7ba5a701b2d22ee74729543012c5", + "vendor/w7corp/easywechat/src/Work/Contracts/Account.php": "f047b1129854aae686b6862883a88ea1", + "vendor/w7corp/easywechat/src/Work/Contracts/Application.php": "8c8a586743dddf257691bbe1ccf9772b", + "vendor/w7corp/easywechat/src/Work/Encryptor.php": "1f134bf19ba41216657762292faa8256", + "vendor/w7corp/easywechat/src/Work/JsApiTicket.php": "a6b095aadd202809fff34d1e1756b756", + "vendor/w7corp/easywechat/src/Work/Message.php": "576f51a9cee8dcfb7450afd119499e43", + "vendor/w7corp/easywechat/src/Work/Server.php": "4882233b32487c2ee971bd71c55f8a44", + "vendor/w7corp/easywechat/src/Work/Utils.php": "875814a90a5d4beeddd841d6f13d16ec", + "vendor/webmozart/assert/src/Assert.php": "30fb7b7e0bb812f9a6c49b877611b50e", + "vendor/webmozart/assert/src/InvalidArgumentException.php": "df028a33ecc18b78c26d81ec64820b55", + "vendor/webmozart/assert/src/Mixin.php": "7c63e6bd32c802e432ddc06679765c9d", + "vendor/workerman/crontab/example/test.php": "8d1cce0f87a0588cc7cb9a9dc5838603", + "vendor/workerman/crontab/src/Crontab.php": "d500ff459b9557366dd0ef0bd58ded11", + "vendor/workerman/crontab/src/Parser.php": "0b9b172f76435a7f0377cf8dd083fca5", + "vendor/workerman/redis/src/Client.php": "a2d3b35679527d429dd16353b0fd2970", + "vendor/workerman/redis/src/Exception.php": "ecf1cfc83c23f3f9e9377fd436d6acdc", + "vendor/workerman/redis/src/Protocols/Redis.php": "1ae5c61cd6ae3c411591fd38ced99f2b", + "vendor/workerman/redis-queue/examples/test.php": "1bf89625546f91a0db4e37b23253fbd7", + "vendor/workerman/redis-queue/src/Client.php": "f0b9e22c90e470a290f65383dd85ca90", + "vendor/workerman/workerman/Autoloader.php": "c070008d26b7d3dd187d10987ca0534e", + "vendor/workerman/workerman/Connection/AsyncTcpConnection.php": "09a2b9c1987b77dbce06c39499f3bcb8", + "vendor/workerman/workerman/Connection/AsyncUdpConnection.php": "a476b1ddbbd741940863f2c08c9a5d2c", + "vendor/workerman/workerman/Connection/ConnectionInterface.php": "8286d4cb3a17b1ec9138d03cf9fa275e", + "vendor/workerman/workerman/Connection/TcpConnection.php": "9ac1a5f847b642febacd3ec8b07951d4", + "vendor/workerman/workerman/Connection/UdpConnection.php": "6c0bab26e1f3da50f07d718b68639afa", + "vendor/workerman/workerman/Events/Ev.php": "f31408de5562355bbf6046443c8cc9fa", + "vendor/workerman/workerman/Events/Event.php": "ace17f9adb8a061c5eea8cbd869cf1db", + "vendor/workerman/workerman/Events/EventInterface.php": "f55e72f70d96f7afabf534f2f90ddb13", + "vendor/workerman/workerman/Events/Libevent.php": "379816a3a6eea5291653ab2f27df99ea", + "vendor/workerman/workerman/Events/React/Base.php": "7c36aef97702d6e718f3e744619122c8", + "vendor/workerman/workerman/Events/React/ExtEventLoop.php": "fa98c3b527b151663c3cde7a3b479e71", + "vendor/workerman/workerman/Events/React/ExtLibEventLoop.php": "5ef92a0b06fef2fd1d2be9489918dd63", + "vendor/workerman/workerman/Events/React/StreamSelectLoop.php": "5d289639a3e8ec79b6f7b727f1f423ed", + "vendor/workerman/workerman/Events/Select.php": "06414c2184feba82bd64adfda741c4d2", + "vendor/workerman/workerman/Events/Swoole.php": "d91970d0c3611c424dcb6964a15287f1", + "vendor/workerman/workerman/Events/Uv.php": "c574359491aa95d85809399a3cb7e2c3", + "vendor/workerman/workerman/Lib/Constants.php": "bdfcb7b598cb8907ddb85c3917922f84", + "vendor/workerman/workerman/Lib/Timer.php": "ac834b6a6148a1845493ad74dd109c30", + "vendor/workerman/workerman/Protocols/Frame.php": "64df528dcb0a2012d30f99c97ce812a9", + "vendor/workerman/workerman/Protocols/Http/Chunk.php": "ada9cc5145be0d339400ecfa01ce803a", + "vendor/workerman/workerman/Protocols/Http/Request.php": "89ed5f14da388750ac1f304baeaae267", + "vendor/workerman/workerman/Protocols/Http/Response.php": "0f2f057248a4e64eac0525f5c209dbd4", + "vendor/workerman/workerman/Protocols/Http/ServerSentEvents.php": "8d4a5f3b816c1d3fcdb8310aa609da88", + "vendor/workerman/workerman/Protocols/Http/Session/FileSessionHandler.php": "d067a8854c2b9188fad1b94120d74d7e", + "vendor/workerman/workerman/Protocols/Http/Session/RedisClusterSessionHandler.php": "c6f77fc37a47a96ec753977d279a3e41", + "vendor/workerman/workerman/Protocols/Http/Session/RedisSessionHandler.php": "09c7f5b078b8d76d5b0e08f5fa29a623", + "vendor/workerman/workerman/Protocols/Http/Session/SessionHandlerInterface.php": "aa288ac3e75028ec6ff8de5f3f1e25e8", + "vendor/workerman/workerman/Protocols/Http/Session.php": "716875365123c1bdcf53c3b638693dad", + "vendor/workerman/workerman/Protocols/Http.php": "1c987ee6acafc240bd620a4ade59cab2", + "vendor/workerman/workerman/Protocols/ProtocolInterface.php": "d0af803c273276314477dedbef55fe11", + "vendor/workerman/workerman/Protocols/Text.php": "f78e5db0f20a47026a9d729a16a174a6", + "vendor/workerman/workerman/Protocols/Websocket.php": "c88f112672be72e2c7b5afeeece035f1", + "vendor/workerman/workerman/Protocols/Ws.php": "527b9ccce4575e27e7aeb8206a4e8922", + "vendor/workerman/workerman/Timer.php": "a8709eed0e6eb3188748a22b6290f53b", + "vendor/workerman/workerman/Worker.php": "648c1f8345c80ad4aa3d079895da7a94", + "vendor/yansongda/artful/src/Artful.php": "d804723197eb1039f9f748bc071001d9", + "vendor/yansongda/artful/src/Contract/ConfigInterface.php": "74155fc677084cd7a633553d45478500", + "vendor/yansongda/artful/src/Contract/ContainerInterface.php": "8016a1b364410209912e808239e22977", + "vendor/yansongda/artful/src/Contract/DirectionInterface.php": "0aeb9f17a7ee8364d125ae15946a2728", + "vendor/yansongda/artful/src/Contract/EventDispatcherInterface.php": "a9ba10d9ea68d63c57d3439dc10bc9ba", + "vendor/yansongda/artful/src/Contract/HttpClientFactoryInterface.php": "c83c516c2ebe8ad99f934c836b0f2154", + "vendor/yansongda/artful/src/Contract/HttpClientInterface.php": "80badddf182df81e8706b535fa0912ea", + "vendor/yansongda/artful/src/Contract/LoggerInterface.php": "d6a58b145e50e3f5dde02ad42afeca3c", + "vendor/yansongda/artful/src/Contract/PackerInterface.php": "b507cac55a81672568a3d45fb9cc8585", + "vendor/yansongda/artful/src/Contract/PluginInterface.php": "b6a6eedc523eda8800ac7f1278dc8adb", + "vendor/yansongda/artful/src/Contract/ServiceProviderInterface.php": "352757d873b3e5c9a4506a28bdde0519", + "vendor/yansongda/artful/src/Contract/ShortcutInterface.php": "283d71970525f39065592c6c08503ee6", + "vendor/yansongda/artful/src/Direction/CollectionDirection.php": "dc5e0f2583ca4639b6c19bb3f6cace42", + "vendor/yansongda/artful/src/Direction/NoHttpRequestDirection.php": "f04ff05f8c331c4f3a5cec293d87d0c5", + "vendor/yansongda/artful/src/Direction/OriginResponseDirection.php": "c0d7ba270365d61871be0bf946f2c410", + "vendor/yansongda/artful/src/Direction/ResponseDirection.php": "2f5d7aca7ac3185498cd1a4a00e6b2e0", + "vendor/yansongda/artful/src/Event/ArtfulEnd.php": "6a136f1729f4183fa6ccb76736e22d57", + "vendor/yansongda/artful/src/Event/ArtfulStart.php": "91c092bc596e8cb43fa4fc28eaf18334", + "vendor/yansongda/artful/src/Event/Event.php": "14109c5ab1c837330b134ee7a6846958", + "vendor/yansongda/artful/src/Event/HttpEnd.php": "0fd199094a3aa23ef5335b202aabe729", + "vendor/yansongda/artful/src/Event/HttpStart.php": "99222b5b03a1b119b9749c9bdf07941d", + "vendor/yansongda/artful/src/Event.php": "71ac953c7c393885fda5a04d5957d9c2", + "vendor/yansongda/artful/src/Exception/ContainerException.php": "3d3339153808ee43c05011d3bd17a7c5", + "vendor/yansongda/artful/src/Exception/ContainerNotFoundException.php": "08e828f138d52caf1d97b7ee0b2662bd", + "vendor/yansongda/artful/src/Exception/Exception.php": "692180cdd68ca4695a6fb5462516de3c", + "vendor/yansongda/artful/src/Exception/InvalidConfigException.php": "ad8ad455d7e4d1797d6c791624960bce", + "vendor/yansongda/artful/src/Exception/InvalidParamsException.php": "adca163a699a094f32723049cdeaede6", + "vendor/yansongda/artful/src/Exception/InvalidResponseException.php": "fc743adac3c1fd08aa1782eee108f05f", + "vendor/yansongda/artful/src/Exception/ServiceNotFoundException.php": "47a1562fcd8f51954459b763d2cbeb7d", + "vendor/yansongda/artful/src/Functions.php": "4911a73fd63a4258439b565361ccf778", + "vendor/yansongda/artful/src/HttpClientFactory.php": "ffbc7c58250d0aedf27a712440d42c83", + "vendor/yansongda/artful/src/Logger.php": "fd7360f573b848c02dacc9c97f664f2f", + "vendor/yansongda/artful/src/Packer/JsonPacker.php": "ca128be89dc158fe28bba076a268bd10", + "vendor/yansongda/artful/src/Packer/QueryPacker.php": "84780366bf672d24ea31acb2ac9ad422", + "vendor/yansongda/artful/src/Packer/XmlPacker.php": "22c16139e0e9ba3e30aeb8c4fdc08b11", + "vendor/yansongda/artful/src/Plugin/AddPayloadBodyPlugin.php": "ae848a81fd1e7cf3e8a8bc22715ed437", + "vendor/yansongda/artful/src/Plugin/AddRadarPlugin.php": "8716d098e5932da559eae352720126ab", + "vendor/yansongda/artful/src/Plugin/ParserPlugin.php": "eebb4110fe5d1fd38d44bac8aaedcc58", + "vendor/yansongda/artful/src/Plugin/StartPlugin.php": "699befd33f9e1d6cdfcbeb1453001bb1", + "vendor/yansongda/artful/src/Rocket.php": "49f1fa73c5e5bf5633a9e83548bc83e4", + "vendor/yansongda/artful/src/Service/ConfigServiceProvider.php": "bfdf03122bcfd1b7f433f44bf5a55704", + "vendor/yansongda/artful/src/Service/ContainerServiceProvider.php": "7e274890735179eedaf604d69ed57b72", + "vendor/yansongda/artful/src/Service/EventServiceProvider.php": "784acc9e3f21cef2729b46ac81d2c11d", + "vendor/yansongda/artful/src/Service/HttpServiceProvider.php": "b526b21600376187f0f8213a8e21e68f", + "vendor/yansongda/artful/src/Service/LoggerServiceProvider.php": "8e786e64b72daa0e3ef30a2a06d9fe7d", + "vendor/yansongda/pay/src/Contract/ProviderInterface.php": "146480f141909f3f2e9bb920354da57f", + "vendor/yansongda/pay/src/Event/CallbackReceived.php": "6dd9307705cacdcac8794c712efdd55a", + "vendor/yansongda/pay/src/Event/MethodCalled.php": "e5067b57afa244001cf9a93f7778b82b", + "vendor/yansongda/pay/src/Event/PayEnd.php": "64876192c54fe25c0ebd5aaf3ca6c396", + "vendor/yansongda/pay/src/Event/PayStart.php": "0b59352c5c091fcf5b4509e47c592c69", + "vendor/yansongda/pay/src/Exception/DecryptException.php": "38f969a589900db9e2295cce2feee14f", + "vendor/yansongda/pay/src/Exception/Exception.php": "34d653c70b736cbd4a5b4c1f1e3067b6", + "vendor/yansongda/pay/src/Exception/InvalidSignException.php": "7c385d42d6df5d6fe2f3c18bd2efcc73", + "vendor/yansongda/pay/src/Functions.php": "ba418e05e87e1c67a556927bc2513851", + "vendor/yansongda/pay/src/Pay.php": "cb1b761a8348c3e82ce4bf083c8e6d61", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/AddPayloadSignaturePlugin.php": "c71a850aa15882edcf413a9b386a9ae3", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/AddRadarPlugin.php": "4026f9d23fdcea969e34213ca47a6b14", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/AppCallbackPlugin.php": "b9fc66a1b9081fc63aa09b9be3ea6c45", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/CallbackPlugin.php": "dd4b3e41321e7243ab8cf70ccf25e607", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/FormatPayloadBizContentPlugin.php": "1af6daac4f688a5a4081646e99990dda", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/PCreditPayInstallment/AppPayPlugin.php": "ab55ab074d7fc2a9bc2b4b07ad551b1c", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/PCreditPayInstallment/H5PayPlugin.php": "4f07aa415bdcf9024554cc1e1f306386", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/PCreditPayInstallment/PosPayPlugin.php": "6551299ecc5f6fe30034a572091dbca5", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/PCreditPayInstallment/ScanPayPlugin.php": "9ff8a616928e742e48bdb191ed0a10fe", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/Royalty/Query/OnsettlePlugin.php": "fef6ab3c457eff6ba2be6c62ac601269", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/Royalty/Query/RatePlugin.php": "43570afd75ac51bf89ba66c811944344", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/Royalty/Query/SettlePlugin.php": "bcb35a3e32fd21527b2d6774f829fa2e", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/Royalty/Relation/BindPlugin.php": "80dff5ded0eaefaaff245b7b97f88430", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/Royalty/Relation/QueryPlugin.php": "ada2a043644ec318ad6d686a869ecdb5", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/Royalty/Relation/UnbindPlugin.php": "e3ff838003f5bb84fcef1dbb94bdc32f", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/Royalty/Request/SettleOrderPlugin.php": "f3ed10c2df55af26ae4cfa79b8c6a19b", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/Transfer/ApplyReceiptPlugin.php": "62175dfcf953784279e1c3d05d40c928", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/Transfer/Bill/QueryUrlPlugin.php": "ff9eb189ea73e21f63add6d4e48e635c", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/Transfer/Fund/QueryPlugin.php": "0ff7951b1907b14bea3b6e3461d3794a", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/Transfer/Fund/TransferPlugin.php": "ad7f2870e82235c415ff3802b77908e7", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/Transfer/QueryAccountPlugin.php": "d8d2bfebf15022b45c00e06f47241d9b", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/Transfer/QueryReceiptPlugin.php": "545656c6df327863195a6f1e33e39950", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Fund/Transfer/RefundPlugin.php": "0753ab3a2b38b7c105cd461e04af76a3", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Marketing/Redpack/AppPayPlugin.php": "ff28ade9f35afb877b347eecb7776070", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Marketing/Redpack/WebPayPlugin.php": "f3c3b8a306d55e4242e9d0b180d2cc58", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/Authorization/AuthPlugin.php": "d6de8409d26da5179ee197e3565cedd9", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/Authorization/QueryPlugin.php": "77c90f43e411c135e449f71b8fea17b2", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/Authorization/TokenPlugin.php": "d1ffd6f774d1f1d0eff76968e6f115d5", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/Certification/CertifyPlugin.php": "63d327cfa6da38b8f441a73816f27ea8", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/Certification/InitPlugin.php": "8205c9c51a1188287dad4adcccc6db4f", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/Certification/QueryPlugin.php": "dca6b19eb82e6f16d6abee2944912a3f", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/DetailPlugin.php": "3115bd3fd9bf0f26bd0ac5dc02548eca", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/FaceCheck/AppInitPlugin.php": "b87d6baee62d62cdc647b447c3b55972", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/FaceCheck/AppQueryPlugin.php": "e6c1353028ef686093b2baa7ceec708b", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/FaceVerification/AppInitPlugin.php": "0417dc875df66e1822128b2e1e59096f", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/FaceVerification/AppQueryPlugin.php": "2837fe63f7de473272702d1ecd63bff5", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/FaceVerification/H5InitPlugin.php": "00646803db9d849848d7024a79711b11", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/FaceVerification/H5QueryPlugin.php": "b8ee60e81d59f245ca977f18dbba2377", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/FaceVerification/H5VerifyPlugin.php": "2a3dfe70e491ead738be24b9a7dcc44b", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/FaceVerification/ServerVerifyPlugin.php": "87144434422eee53c908689e087ab0f0", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/Ocr/AppInitPlugin.php": "f94f0493ce5d573b202730d5a13b6b05", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/Ocr/DetectPlugin.php": "cdcacf38b168239064c7c10ffb94ea80", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Member/Ocr/ServerDetectPlugin.php": "13d5f084b0e0f30ca960ea6ab4d2607b", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Agreement/Bill/QueryUrlPlugin.php": "2b4c0d71cf3594fcfe90256c80ee70e7", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Agreement/Pay/AppPayPlugin.php": "858ddf7cdd9502c2b154fd7dfcd51ffa", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Agreement/Pay/CancelPlugin.php": "a707497c52115937b0d14e23eb5ba663", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Agreement/Pay/ClosePlugin.php": "7ad11f2adf8c08fad26a07bac967adef", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Agreement/Pay/PayPlugin.php": "d0a98707ffddb087541f8d698c46632f", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Agreement/Pay/QueryPlugin.php": "bf6028d4fc8b14dabac3f8e1506b3fbb", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Agreement/Pay/RefundPlugin.php": "7d69834afe55c1c12a1a8cf3712cc119", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Agreement/Sign/ModifyPlugin.php": "d1e084e3da176270d62dd283bb98c8bb", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Agreement/Sign/QueryPlugin.php": "ab6ec2e244008e9bc6631d6aa75ae08c", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Agreement/Sign/SignPlugin.php": "33ed5636fa2601e4f59dfdbe301941a9", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Agreement/Sign/UnsignPlugin.php": "1df5836d340da643ae838f1c6f7ee9ef", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/App/ClosePlugin.php": "dd0f340736c3452fd9b6ec73ac009d7b", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/App/PayPlugin.php": "11178d4ef6e72e239fd44dfacb3ab7ba", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/App/QueryBillUrlPlugin.php": "c0866f7aa4479076a00e07e1734e405a", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/App/QueryPlugin.php": "a34c5694a906d186b14c13f46ee6b617", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/App/QueryRefundPlugin.php": "c89bc25541e1de4b746c9233e477d993", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/App/RefundPlugin.php": "759e0ff1b4067f221f9b81dfd6a63346", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Authorization/Auth/AppFreezePlugin.php": "8c01ce362698b101671e08fe1c5b055b", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Authorization/Auth/CancelPlugin.php": "08133a076c845feb522bdc0945e232ac", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Authorization/Auth/PosFreezePlugin.php": "44344eb7de1a9af8e638111752b1ffa8", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Authorization/Auth/QueryPlugin.php": "74d0b0d6ef6efe1182a8ea539fa96c30", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Authorization/Auth/ScanFreezePlugin.php": "a1f1a96855b9bc17266083a7e56d8d8e", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Authorization/Auth/UnfreezePlugin.php": "a4e976e7b771847f2d3fc87107c549de", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Authorization/Bill/QueryUrlPlugin.php": "b6c8a2bcb5650cdcfc39cdedd13443ed", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Authorization/Pay/ClosePlugin.php": "e2b5eaa1885d674d6725adf1521b17aa", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Authorization/Pay/PayPlugin.php": "e62392a1cb0e3fe4b9a3240126bac6f3", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Authorization/Pay/QueryPlugin.php": "941cb661a0fd674ebfa5b1c03375c65e", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Authorization/Pay/QueryRefundPlugin.php": "83524cc854c5ee6afbd41ec2570f2038", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Authorization/Pay/RefundPlugin.php": "67014178bcbcafe2e02ddd49acf8216e", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Authorization/Pay/SyncPlugin.php": "60899ec12596582579d8438188c0589d", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Face/InitPlugin.php": "47927f678d5ad12deea38a6c88cc2bea", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Face/QueryPlugin.php": "f37707604cb6b44d044360f59f9a4d4a", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/H5/ClosePlugin.php": "e08912178c9a5e1a523605c3069211ad", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/H5/PayPlugin.php": "275597d73cc20671c99fb4d24bac6bf2", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/H5/QueryBillUrlPlugin.php": "a7edfd9efe8dcef03f906628af2bc5da", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/H5/QueryPlugin.php": "4d08ca2fad927b16391c4fd39ec12b52", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/H5/QueryRefundPlugin.php": "cebb50ac7ec05c38521b1861da41851e", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/H5/RefundPlugin.php": "842dae9e5d44ac0e6bcc25d2a77a3224", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Mini/CancelPlugin.php": "8cbdf1034e397ab52f149ab59246d65d", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Mini/ClosePlugin.php": "825a540b0283447def1861756ac62bd2", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Mini/PayPlugin.php": "9deb94722dbec935b6cc3794a59ebfad", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Mini/QueryBillUrlPlugin.php": "4691ac47a6e90ea42f0e6da41cddcb1f", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Mini/QueryPlugin.php": "64a2027db16e166609c5349198ea087a", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Mini/QueryRefundPlugin.php": "e54be370b17d0d4002ca28202f4ccb9b", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Mini/RefundPlugin.php": "44d236cdb3612b8f6d4b13bee9fdce19", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Pos/CancelPlugin.php": "61f02462f42da5d412fec024a3e96077", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Pos/ClosePlugin.php": "89f26317575f0e9358da8126f55144ef", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Pos/PayPlugin.php": "e97f4bb656bb4c216f7ef64310ec9ada", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Pos/QueryBillUrlPlugin.php": "88b356d21ac2aaf540157ac369cbc60f", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Pos/QueryPlugin.php": "989c969e511ba3f8a34629e87c8ac4ad", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Pos/QueryRefundPlugin.php": "bb5b7db45308cc0d8458916c941e1081", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Pos/RefundPlugin.php": "705cae8cde2ea980c98527d7f76ce21e", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Scan/CancelPlugin.php": "d4a7df3cedd5e634b23fd2c481870dee", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Scan/ClosePlugin.php": "f7a8292c1bad15d457f7aff19b9371c1", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Scan/CreatePlugin.php": "2a2004e532e249e405a141e5997000ca", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Scan/PayPlugin.php": "4397d2dd193d3c5bc2b4735b9e2268ac", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Scan/QueryBillUrlPlugin.php": "12a9c2f2351e1ab4441da36aa2d183fb", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Scan/QueryPlugin.php": "fca34af7efb8b6500c2d13866c5a9d47", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Scan/QueryRefundPlugin.php": "4a329dabaf4d4ea569d9b0e85dc57fa5", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Scan/RefundPlugin.php": "fbc79c99ca341df7a800033f5b1feb39", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Web/ClosePlugin.php": "703b8d554d6d2aef41a236ece2fb3621", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Web/PayPlugin.php": "cbd734df46d8c464e04b87023fa5ec67", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Web/QueryBillUrlPlugin.php": "744004a908da6143cc19ae84017cf565", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Web/QueryPlugin.php": "b62023999d294efeb95fb7fe63b7a0f0", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Web/QueryRefundPlugin.php": "5232a7e45380bae5d2a9643622b54688", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/Pay/Web/RefundPlugin.php": "e32fe5689c1124e3f6525d316b78e10c", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/ResponseHtmlPlugin.php": "dbba8c08aa74478dd1c5e848eadb2d65", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/ResponseInvokeStringPlugin.php": "41131861ffcc35f91ea355c881e51fce", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/ResponsePlugin.php": "e1e6fc6788a62098327ef6d1cacf84ed", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/StartPlugin.php": "79e63606648f3857acff7f802cc4f331", + "vendor/yansongda/pay/src/Plugin/Alipay/V2/VerifySignaturePlugin.php": "f44e8b54a8d55fbe00860cdb20e9f92c", + "vendor/yansongda/pay/src/Plugin/Douyin/V1/Pay/AddPayloadSignaturePlugin.php": "5e5b85cc6717efbb3824c6864b2c0f12", + "vendor/yansongda/pay/src/Plugin/Douyin/V1/Pay/AddRadarPlugin.php": "9e6521d39ffaffa1c19480be5cec30b1", + "vendor/yansongda/pay/src/Plugin/Douyin/V1/Pay/CallbackPlugin.php": "334aa60e326a183b032b8fd9e5a08fdf", + "vendor/yansongda/pay/src/Plugin/Douyin/V1/Pay/Mini/PayPlugin.php": "1f8a80404bedaf580aa3627ed0457160", + "vendor/yansongda/pay/src/Plugin/Douyin/V1/Pay/Mini/QueryPlugin.php": "e0a2338208416376d7257be2f8e0138b", + "vendor/yansongda/pay/src/Plugin/Douyin/V1/Pay/Mini/QueryRefundPlugin.php": "1864bd429529b0badc6455fbd240aba0", + "vendor/yansongda/pay/src/Plugin/Douyin/V1/Pay/Mini/RefundPlugin.php": "7b3ef29adca8f9d113b11fab9ccce31f", + "vendor/yansongda/pay/src/Plugin/Douyin/V1/Pay/ResponsePlugin.php": "0134c84311d82149a0307f4621838401", + "vendor/yansongda/pay/src/Plugin/Jsb/AddPayloadSignPlugin.php": "93294e393ff8fccbaab93d935ee91610", + "vendor/yansongda/pay/src/Plugin/Jsb/AddRadarPlugin.php": "080353ac7abc90653987e1345ff3da3f", + "vendor/yansongda/pay/src/Plugin/Jsb/CallbackPlugin.php": "261e7578ad37fe488dfa5c18d3f35533", + "vendor/yansongda/pay/src/Plugin/Jsb/Pay/Scan/PayPlugin.php": "4bacab0226220e372145ad56f805f5bc", + "vendor/yansongda/pay/src/Plugin/Jsb/Pay/Scan/QueryPlugin.php": "ba4981f34356e9732eb459360c60e58d", + "vendor/yansongda/pay/src/Plugin/Jsb/Pay/Scan/RefundPlugin.php": "81ff00058ac96fdf527e13003f4ad782", + "vendor/yansongda/pay/src/Plugin/Jsb/ResponsePlugin.php": "64ac9c239081edd142bfffc9ed8c1686", + "vendor/yansongda/pay/src/Plugin/Jsb/StartPlugin.php": "84b089f06d8afebb3cf1c378a952d1fc", + "vendor/yansongda/pay/src/Plugin/Jsb/VerifySignaturePlugin.php": "ef46be9531689cd7bb12ae122d5b919c", + "vendor/yansongda/pay/src/Plugin/Unipay/AddRadarPlugin.php": "51a554dfeffa38ec8b71e06eb65ee252", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/AddPayloadSignaturePlugin.php": "bdb993c6f0fb649d47d64bead91688d4", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/CallbackPlugin.php": "a4333245dee120f6b77d6c3169047bb8", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/Pay/H5/PayPlugin.php": "7f93e33cb3ee14909310f2930d77da29", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/Pay/QrCode/CancelPlugin.php": "d3ad09255f79222ee4ab059da3c4ff41", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/Pay/QrCode/PosPlugin.php": "70b79810f0c56509d410c120373d274d", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/Pay/QrCode/PosPreAuthPlugin.php": "eefa0e3dc3eb08538f84d9d6cb004c73", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/Pay/QrCode/QueryPlugin.php": "04d655bcc4be3fad62e551a42330b688", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/Pay/QrCode/RefundPlugin.php": "ca23d865244f92a5fd450c113c82ea64", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/Pay/QrCode/ScanFeePlugin.php": "184488d6b27031c22f2f43d285046783", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/Pay/QrCode/ScanPlugin.php": "282db8ab0f1a65d0644d5f39ecdf23ab", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/Pay/QrCode/ScanPreAuthPlugin.php": "85efc5b8bb1503f652f565a96d7cb4a8", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/Pay/QrCode/ScanPreOrderPlugin.php": "247a5f0405d6f72a7220d4ee39768b80", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/Pay/Web/CancelPlugin.php": "de3144d7ac1f44adc48950c8985fb4b2", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/Pay/Web/PayPlugin.php": "7f2253737ca7a108dd7ea6411822ec0c", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/Pay/Web/QueryPlugin.php": "2d922c613dc26b15bc7a8a9791fb5563", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/Pay/Web/RefundPlugin.php": "84d9b56b4acedc8013d6fdb54fed6bbb", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/ResponseHtmlPlugin.php": "a43d480668c6bc665ba687c5fa44ae78", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/StartPlugin.php": "8c7acd214e978019e4390ba984367e76", + "vendor/yansongda/pay/src/Plugin/Unipay/Open/VerifySignaturePlugin.php": "67a7498fcc60acd9b70feed26a48eb2a", + "vendor/yansongda/pay/src/Plugin/Unipay/Qra/AddPayloadSignaturePlugin.php": "12496b3eea8182b851b948527a8befe4", + "vendor/yansongda/pay/src/Plugin/Unipay/Qra/CallbackPlugin.php": "dbde9f49169b509e8a4eb0c4741e1af2", + "vendor/yansongda/pay/src/Plugin/Unipay/Qra/Pos/CancelPlugin.php": "0dda24cfae83088e9276a027ee7f8a80", + "vendor/yansongda/pay/src/Plugin/Unipay/Qra/Pos/PayPlugin.php": "e574fcf266fb48b8619b8e256e4a752a", + "vendor/yansongda/pay/src/Plugin/Unipay/Qra/Pos/QueryOpenIdPlugin.php": "1d0eabd2fa92b138c39b6976cef1c5ed", + "vendor/yansongda/pay/src/Plugin/Unipay/Qra/Pos/QueryPlugin.php": "0086f81d75fc4cbc556bfa64cff30dbe", + "vendor/yansongda/pay/src/Plugin/Unipay/Qra/Pos/QueryRefundPlugin.php": "64e7ee87361cc6bc2111eddd3146838e", + "vendor/yansongda/pay/src/Plugin/Unipay/Qra/Pos/RefundPlugin.php": "eff5f0e3eed4e87a98f007ae7f1b874b", + "vendor/yansongda/pay/src/Plugin/Unipay/Qra/Scan/ClosePlugin.php": "37c7a56dce9af40eff20332252e55cf0", + "vendor/yansongda/pay/src/Plugin/Unipay/Qra/Scan/PayPlugin.php": "d32d90e4eec1c43101d3ad2db3274a33", + "vendor/yansongda/pay/src/Plugin/Unipay/Qra/Scan/QueryPlugin.php": "ebfbde7dcba025554b32505eb2ade382", + "vendor/yansongda/pay/src/Plugin/Unipay/Qra/Scan/QueryRefundPlugin.php": "ade21c65c0c83c40f1fa4270ec6adfc5", + "vendor/yansongda/pay/src/Plugin/Unipay/Qra/Scan/RefundPlugin.php": "97ee7104d786e6247fcdfe8cbec5458b", + "vendor/yansongda/pay/src/Plugin/Unipay/Qra/StartPlugin.php": "21adb8eea825600197ec7caa27b4fa94", + "vendor/yansongda/pay/src/Plugin/Unipay/Qra/VerifySignaturePlugin.php": "6ee29361eecb748163c0f322c7bf31b6", + "vendor/yansongda/pay/src/Plugin/Wechat/AddRadarPlugin.php": "2cc30753490c0c0b2f59337beb23a1e2", + "vendor/yansongda/pay/src/Plugin/Wechat/ResponsePlugin.php": "beb6851a09ccb8c972236d7286192936", + "vendor/yansongda/pay/src/Plugin/Wechat/StartPlugin.php": "0910394a11c538aaa2123725aa37ad6e", + "vendor/yansongda/pay/src/Plugin/Wechat/V2/AddPayloadSignaturePlugin.php": "b440fdd425c75b580f1d5692cbf629b1", + "vendor/yansongda/pay/src/Plugin/Wechat/V2/Papay/Direct/ApplyPlugin.php": "b625a7117f8892b80b453509bfe0fabc", + "vendor/yansongda/pay/src/Plugin/Wechat/V2/Papay/Direct/ContractOrderPlugin.php": "59b8ed9b961edf69886e333dec3128f7", + "vendor/yansongda/pay/src/Plugin/Wechat/V2/Papay/Direct/MiniOnlyContractPlugin.php": "83aa139f5400b26fceedf037330a5904", + "vendor/yansongda/pay/src/Plugin/Wechat/V2/Pay/App/InvokePlugin.php": "06cd28f905cfc092a86d249894df6d65", + "vendor/yansongda/pay/src/Plugin/Wechat/V2/Pay/Mini/InvokePlugin.php": "65e8dff03fb159ae3349a093a5f353f6", + "vendor/yansongda/pay/src/Plugin/Wechat/V2/Pay/Pos/CancelPlugin.php": "90286db3ed9aaab92ce5f9d1c9a277f6", + "vendor/yansongda/pay/src/Plugin/Wechat/V2/Pay/Pos/PayPlugin.php": "1b06214f6d35312cf26fe89f9f953ae8", + "vendor/yansongda/pay/src/Plugin/Wechat/V2/Pay/Pos/QueryPlugin.php": "e41f76e21aa73062a5a9c21e8cae1d85", + "vendor/yansongda/pay/src/Plugin/Wechat/V2/Pay/Redpack/SendPlugin.php": "1d38b79f3a6ff0afca686248e54ed38d", + "vendor/yansongda/pay/src/Plugin/Wechat/V2/VerifySignaturePlugin.php": "4315e1f78651daada2deb38d35f68b8e", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/AddPayloadSignaturePlugin.php": "58251bceaaba14baeb9ab9afcd3c6f53", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/CallbackPlugin.php": "bb96e7542c53faad0c86c1ffd3252f03", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/Complaints/CompletePlugin.php": "a207eeb809d2b37c73af49462b5eb053", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/Complaints/DeleteCallbackPlugin.php": "5c5dff03564ec902a773a6924249477a", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/Complaints/QueryCallbackPlugin.php": "b229e2cbf00f1d4e1ebd08affc3db5a8", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/Complaints/QueryDetailPlugin.php": "13f4b0c3c4118f53b351682c70e7de3d", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/Complaints/QueryImagePlugin.php": "766e523030f5bddc5dd2867971c50386", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/Complaints/QueryNegotiationPlugin.php": "25ea664ed89256855bbdd5c46f9b4a24", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/Complaints/QueryPlugin.php": "64d5a0589549c0e17370a2f2f10bac6f", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/Complaints/ResponsePlugin.php": "b4c1176d0fb3dff60adeb3dabc6a981b", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/Complaints/SetCallbackPlugin.php": "970d32fcdfa5894d0ceef2778a198ca3", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/Complaints/UpdateCallbackPlugin.php": "f8d47358532e943604fce0bb10857539", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/Complaints/UpdateRefundPlugin.php": "20cc1bd410cc29c68c99a2446c55672b", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/ProfitSharing/AddReceiverPlugin.php": "36a2932bdc064f331a3703be14ee9779", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/ProfitSharing/CreatePlugin.php": "6a00597cad40f987516b61eb128def60", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/ProfitSharing/DeleteReceiverPlugin.php": "6004b26fd69d60ab2ec3f1a074c3b9a8", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/ProfitSharing/DownloadBillPlugin.php": "bc0627f26e1377dae976a0db222bf1c4", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/ProfitSharing/GetBillPlugin.php": "939e7d2a2ac84a1d7fbc92c276716432", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/ProfitSharing/QueryAmountsPlugin.php": "6f4dc62b6be8909bb81e858bbec1c7da", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/ProfitSharing/QueryMerchantConfigsPlugin.php": "bca19573c2d562fe59fe34adc53dff87", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/ProfitSharing/QueryPlugin.php": "4360258cf79f7234bd2f021a461a5aa3", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/ProfitSharing/QueryReturnPlugin.php": "955c99b052ce634158465a114d0667b0", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/ProfitSharing/ReturnPlugin.php": "4a31f65a4fcb39da179e525cfec09b90", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Extend/ProfitSharing/UnfreezePlugin.php": "0c5a8535d5b0c72b69b18b712f08f672", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Coupon/Callback/QueryPlugin.php": "ce93636fb88e0bf5f8b5adcc44e627da", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Coupon/Callback/SetPlugin.php": "901954dc3551cd13a90f1fe8c8956d7b", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Coupon/Coupons/DetailPlugin.php": "8c08cb9c2514a4cf8cff7ca936a433c5", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Coupon/Coupons/QueryUserPlugin.php": "fc1db321e382b53a87c541210e1d3d00", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Coupon/Coupons/SendPlugin.php": "d22c05761e72f3bf91896fc69fd71bd8", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Coupon/Stock/CreatePlugin.php": "9d38b5eecbf91a2b21d128b523385698", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Coupon/Stock/PausePlugin.php": "6d84ac55aaad74c9d0326c1a8e98db22", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Coupon/Stock/QueryDetailPlugin.php": "60bb65440276d23db6b777201d8a16fb", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Coupon/Stock/QueryItemsPlugin.php": "e3a8526c5a4909e11d948191222a7ae1", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Coupon/Stock/QueryMerchantsPlugin.php": "a1aab18acf6ec626b73178b2effeec37", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Coupon/Stock/QueryPlugin.php": "608a891c0d9d2133f7af5c01c389b37d", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Coupon/Stock/QueryRefundFlowPlugin.php": "e104e96c7747e0b9033210c0c5e76c3b", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Coupon/Stock/QueryUseFlowPlugin.php": "54f800ca9de75cd2f49cbe6438f6d0f3", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Coupon/Stock/RestartPlugin.php": "d8b5cb3edd78fb5c57be4474363ad431", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Coupon/Stock/StartPlugin.php": "3d865a740be42d9558c85f23a98840a6", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/ECommerceBalance/QueryDayEndPlugin.php": "f3bcdbfdb366ff9ba216be2d48ea4617", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/ECommerceBalance/QueryPlugin.php": "f226ebdd97ef037a6abe124dd490fed8", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/ECommerceRefund/ApplyPlugin.php": "7d50d196542d3d4d2c15760db9bdb069", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/ECommerceRefund/QueryByWxPlugin.php": "3c5894398ffcedf1166dc788a3dcae30", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/ECommerceRefund/QueryPlugin.php": "1d1754b61dc0b30ad71e02806b5d6563", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/ECommerceRefund/QueryReturnAdvancePlugin.php": "2d75348943523a348b9664dd71c79929", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/ECommerceRefund/ReturnAdvancePlugin.php": "6a8fb15369c6fe49385ab54a64246087", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Fapiao/Blockchain/CreatePlugin.php": "75552195f9fafd2cd2f081b27c01c49c", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Fapiao/Blockchain/DownloadPlugin.php": "db293cb615989166985f2ed7ad09071f", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Fapiao/Blockchain/GetBaseInformationPlugin.php": "6783dae38803955234760e3d56311cd8", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Fapiao/Blockchain/GetDownloadInfoPlugin.php": "46685afb998d7aee6568c40a7e1bfcdd", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Fapiao/Blockchain/GetTaxCodePlugin.php": "5b00bbd7115b63d93fb9fc4185ad1d0f", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Fapiao/Blockchain/ReversePlugin.php": "c544388a1e5e0129aec46e890e0baf68", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Fapiao/CreateCardTemplatePlugin.php": "71c9bf13983812fa366183b6e7f1cdf4", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Fapiao/GetTitleUrlPlugin.php": "dd5a4a270dccaf76acb62d8263f66317", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Fapiao/QueryConfigPlugin.php": "ad1a7ef49c2a89783dec14620be2dc41", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Fapiao/QueryPlugin.php": "1499d128512f61c80194fc01d1f3c7bd", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Fapiao/QueryUserTitlePlugin.php": "e37295cf84ca7b3ece49a2d7d0d767b0", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Fapiao/UpdateConfigPlugin.php": "b54556c194093bfb100ce868e395b8bd", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/MchTransfer/CancelPlugin.php": "d94b5a13f79cbf6b281622e028d354fb", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/MchTransfer/CreatePlugin.php": "86455a4ba04daa50dba1ab084c49fb9f", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/MchTransfer/InvokeAndroidPlugin.php": "62b545e5ac9f529664a10f77d1248110", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/MchTransfer/InvokeIosPlugin.php": "1c155c5f58faea19c344bfa07c2aa296", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/MchTransfer/InvokeJsapiPlugin.php": "fbf22312093fd45507800f2538240d1f", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/MchTransfer/QueryByWxPlugin.php": "583d92aa6ce511ce5df57b48008610a2", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/MchTransfer/QueryPlugin.php": "766284e85061af178b11d48d84f496ef", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Transfer/Batch/QueryByWxPlugin.php": "32a8f8665270e39e8df6ad17784f636e", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Transfer/Batch/QueryPlugin.php": "181ce209c802d564cbf43143fbd7382d", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Transfer/CreatePlugin.php": "593b2f03876b0daefbd4ee3db29f7ab6", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Transfer/Detail/QueryByWxPlugin.php": "e5bd32d6d26c9008c5877c41a82fbcf7", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Transfer/Detail/QueryPlugin.php": "4d3041cde0b61e4b1476a462b4120f9e", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Transfer/DownloadReceiptPlugin.php": "704f86eccf63d302b26aa38d6d33d2d8", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Transfer/Receipt/CreatePlugin.php": "9f0ae7af5590e18cebe9b3f272249a5d", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Transfer/Receipt/QueryPlugin.php": "f0326f607ab1a719732de3422c3a825d", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Transfer/ReceiptDetail/CreatePlugin.php": "3abc03c5c9375ef9820837a10da7c5fc", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Marketing/Transfer/ReceiptDetail/QueryPlugin.php": "9940f136a6be7e01ce28c9472e51701b", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/App/ClosePlugin.php": "7572d0ed2416fa17e9db300ba43f6b1e", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/App/DownloadBillPlugin.php": "ba7e1f53c7088847992e0af2136ded90", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/App/GetFundBillPlugin.php": "76f7d42be6f119f565e4b6edf1d2dcda", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/App/GetTradeBillPlugin.php": "5f85635c853f8c4b8aa3ab151b6340f2", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/App/InvokePlugin.php": "fb43ddf3694dd5f8b703fbf250136939", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/App/PayPlugin.php": "2ec06c87f5b0856cffe499493a9fc46e", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/App/QueryByWxPlugin.php": "e169c7293118cab77472111879496dd2", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/App/QueryPlugin.php": "d66df62a0b120bb01581fcc25048a1ab", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/App/QueryRefundPlugin.php": "6efa41862ab965a2c48e7598531dddca", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/App/RefundPlugin.php": "4e0d8a1cc171f675671182cf7c2bea30", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Bill/DownloadPlugin.php": "bcfb46f126547da96245eb5e8cf98a11", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Bill/GetFundPlugin.php": "21b65bf328a4b7dc20aa11bc9346a7b0", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Bill/GetTradePlugin.php": "ac34624937778419cf426cfb7c5e0fa2", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Combine/AppInvokePlugin.php": "2a35236d5fa6fe84992be93dddf950e2", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Combine/AppPayPlugin.php": "2a81905845ff243045858898467a6b31", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Combine/ClosePlugin.php": "f10bd78db392d139635eed575842eaf8", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Combine/DownloadBillPlugin.php": "2ccdbbe9c6d6fd0d01d620d468ff66fa", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Combine/GetFundBillPlugin.php": "989ca1f1f139a063d21d039072f847f3", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Combine/GetTradeBillPlugin.php": "d01ccd0ab5b8c4a79067fe795525da34", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Combine/H5PayPlugin.php": "212a2615f6bedc61801c157febe23d25", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Combine/JsapiInvokePlugin.php": "f8b71cd0c127b52c8629ae0c0ebaf433", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Combine/JsapiPayPlugin.php": "9479667aacfe1687848ae25fbd20dc15", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Combine/MiniInvokePlugin.php": "44ee96e2aa8b4c913facea9de0172240", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Combine/MiniPayPlugin.php": "c9e62835ac90cf5d559023960f51b6e6", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Combine/NativePayPlugin.php": "beea636a9ee166e3621d2525787bc4cf", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Combine/QueryPlugin.php": "332802eb78464e9d61727428068bc5aa", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Combine/QueryRefundPlugin.php": "19845599816a2899b40dbe9af61774d0", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Combine/RefundPlugin.php": "8e5170a03ed3e71deae31f48368f048e", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/H5/ClosePlugin.php": "e43a2f13915918338dbd6f209195ba80", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/H5/DownloadBillPlugin.php": "541d0db95e4ecb0da543498cfac62d04", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/H5/GetFundBillPlugin.php": "54022b07a0c88ee1dabfc72743cb6088", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/H5/GetTradeBillPlugin.php": "91f6e330308b644d95d903267689a9df", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/H5/PayPlugin.php": "c4a1ce7ab4d4ecc8fca2af3afa68dabf", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/H5/QueryByWxPlugin.php": "a958333dce63e782a11a3344a0c1caa3", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/H5/QueryPlugin.php": "ae2b55ec05644b881883796aecece133", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/H5/QueryRefundPlugin.php": "c3f9777596027cf981e42527e7d98a58", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/H5/RefundPlugin.php": "1ed364693213d2778b6bbb06c85dc9be", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Jsapi/ClosePlugin.php": "aa5de0a58e0bd1a7d41448416961d343", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Jsapi/DownloadBillPlugin.php": "a0e396cc46bcd167c3598f2280ce9704", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Jsapi/GetFundBillPlugin.php": "a7e0f73124c720c1a6a2969644b7eac3", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Jsapi/GetTradeBillPlugin.php": "a2becb3e70257f512de4891c1dc0e48c", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Jsapi/InvokePlugin.php": "718b88d8da0986d84a530e723288f2cd", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Jsapi/PayPlugin.php": "93fa36fab88301e5d6cd636af247e18b", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Jsapi/QueryByWxPlugin.php": "c9dbed1c0bc51007b491b517359c0794", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Jsapi/QueryPlugin.php": "bb3bad2c24fb1692070ce8b11743f1dc", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Jsapi/QueryRefundPlugin.php": "d0de79135fe5e38e2fb81774faa15b9a", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Jsapi/RefundPlugin.php": "c7d6ee1f4b877530f1603ac9f7948757", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Mini/ClosePlugin.php": "6a48abd677f4814bf9489a7f2af84a77", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Mini/DownloadBillPlugin.php": "ee717f6692a8411aca650c0cb3d3273d", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Mini/GetFundBillPlugin.php": "7da41e9d49c133b0dbe6bf9b35af0b76", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Mini/GetTradeBillPlugin.php": "685ee26eb6ee83491600012bb886fcd2", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Mini/InvokePlugin.php": "4980c38a86f5052e5b33ee373b312cc9", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Mini/PayPlugin.php": "db062f1c4e503340cfcef7c48417515f", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Mini/QueryByWxPlugin.php": "c8eee030c312823990bb5d7640ba1d7d", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Mini/QueryPlugin.php": "dbdcfacc3ac39b9aa620c6a574a95a3f", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Mini/QueryRefundPlugin.php": "0e49155bfb7d3bd0184027fba7e62fb3", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Mini/RefundPlugin.php": "519a572004a04a91ed54a35134dc1eba", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Native/ClosePlugin.php": "ad5cc660f77496c175e7013ff2b4f791", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Native/DownloadBillPlugin.php": "0d457f95cdd4fa30033e403e5d7bf70a", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Native/GetFundBillPlugin.php": "c3af497d8ed2499e0192b3303cdfd1d4", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Native/GetTradeBillPlugin.php": "c9f09a7a5f66e04daae11fc57ac1fc22", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Native/PayPlugin.php": "c446087811615f13373feb2b752f81c9", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Native/QueryByWxPlugin.php": "00cdf1900dfd4fa5262d05d970a3a49a", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Native/QueryPlugin.php": "347d721458eb5738be0ea9cefed2ebd2", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Native/QueryRefundPlugin.php": "7d54b9722fc6d1d398eb2cc5033cfd12", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Native/RefundPlugin.php": "9f29d1c73404157f73f759978aa22706", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Pos/CancelPlugin.php": "5358382ad3933257a217154ee7a70583", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Pos/PayPlugin.php": "ef9944fb920fc3c2b9b40ca6e7a45203", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Refund/QueryPlugin.php": "c6fd1558f2b791fb8959af96279854b0", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Refund/RefundAbnormalPlugin.php": "35105d56966757accb76439624f50e9f", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/Pay/Refund/RefundPlugin.php": "3c55938e6bc750bc40f5a7d827ad36bf", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/VerifySignaturePlugin.php": "a0eb59cdd63de6b6d0da6f2f0527cef6", + "vendor/yansongda/pay/src/Plugin/Wechat/V3/WechatPublicCertsPlugin.php": "d9dd3c8331edc4917ead0d0857d74aaf", + "vendor/yansongda/pay/src/Provider/Alipay.php": "ada0c9145c919b595b11443edc5811b0", + "vendor/yansongda/pay/src/Provider/Douyin.php": "8cf2958885233c3712d26427e9cadfcc", + "vendor/yansongda/pay/src/Provider/Jsb.php": "2defd5ef105dc865e1f81fb54e54239d", + "vendor/yansongda/pay/src/Provider/Unipay.php": "0fad2980ba44e4882ab25b3c5c9df3da", + "vendor/yansongda/pay/src/Provider/Wechat.php": "dec1b0efb1d6540fae7d2dd77a8eae29", + "vendor/yansongda/pay/src/Service/AlipayServiceProvider.php": "09279155f753e00c611d57783b8d356a", + "vendor/yansongda/pay/src/Service/DouyinServiceProvider.php": "4048c155b752af96f4735ec686493656", + "vendor/yansongda/pay/src/Service/JsbServiceProvider.php": "3ec6ea0b97d1afb3036e1426ea34d23e", + "vendor/yansongda/pay/src/Service/UnipayServiceProvider.php": "a77730c9683ac2f49d7b65b6b8d38fd2", + "vendor/yansongda/pay/src/Service/WechatServiceProvider.php": "d34a634bde0d322cebe4e93553a4ca0a", + "vendor/yansongda/pay/src/Shortcut/Alipay/AppShortcut.php": "63d81a2c72c30bbe17957c1ec5611162", + "vendor/yansongda/pay/src/Shortcut/Alipay/CancelShortcut.php": "a97c93441fb3eea4b354198436eebf00", + "vendor/yansongda/pay/src/Shortcut/Alipay/CloseShortcut.php": "8c6eda406079be38e7e048465d61535c", + "vendor/yansongda/pay/src/Shortcut/Alipay/H5Shortcut.php": "619699ded6676ea6e8cc626558a72ce0", + "vendor/yansongda/pay/src/Shortcut/Alipay/MiniShortcut.php": "16328af8994b20de0ddddfedab1e20b1", + "vendor/yansongda/pay/src/Shortcut/Alipay/PosShortcut.php": "649d992c5881da988762f9b280bcf932", + "vendor/yansongda/pay/src/Shortcut/Alipay/QueryShortcut.php": "6b4ba3359e6a7adf518a5cad2e08568f", + "vendor/yansongda/pay/src/Shortcut/Alipay/RefundShortcut.php": "f1147aad4ed4e79888285bc830d0c44f", + "vendor/yansongda/pay/src/Shortcut/Alipay/ScanShortcut.php": "46bd2f42aeca9204a9c28291fbad33bb", + "vendor/yansongda/pay/src/Shortcut/Alipay/TransferShortcut.php": "27e3c7cefdddcbd460c3f2830771a825", + "vendor/yansongda/pay/src/Shortcut/Alipay/WebShortcut.php": "20350261385d4b1304ba73a1729d262b", + "vendor/yansongda/pay/src/Shortcut/Douyin/MiniShortcut.php": "f6755a4d5b3c841e221519fb81287be8", + "vendor/yansongda/pay/src/Shortcut/Douyin/QueryShortcut.php": "3040b9145f32ec530cc37c1800e49f4b", + "vendor/yansongda/pay/src/Shortcut/Douyin/RefundShortcut.php": "b93c79064741e84e44bff6e271332e02", + "vendor/yansongda/pay/src/Shortcut/Jsb/QueryShortcut.php": "3491a24a709bedbe1a9d9b7f0a34630a", + "vendor/yansongda/pay/src/Shortcut/Jsb/RefundShortcut.php": "afd502ae68cbc560d3079ee635ccb64b", + "vendor/yansongda/pay/src/Shortcut/Jsb/ScanShortcut.php": "744f000cc50965d701a4f2b01d024cc1", + "vendor/yansongda/pay/src/Shortcut/Unipay/CancelShortcut.php": "723b68a3bf9473e8a171eff7921efa82", + "vendor/yansongda/pay/src/Shortcut/Unipay/H5Shortcut.php": "cde1faeb147978769654817a96c42bed", + "vendor/yansongda/pay/src/Shortcut/Unipay/PosShortcut.php": "5c763c5b0b57c16ec77b6798a42fe94a", + "vendor/yansongda/pay/src/Shortcut/Unipay/QueryShortcut.php": "d22acada926f82d081f739107b66359e", + "vendor/yansongda/pay/src/Shortcut/Unipay/RefundShortcut.php": "6c3aba7b60840fda9d11d355b6ec2cb7", + "vendor/yansongda/pay/src/Shortcut/Unipay/ScanShortcut.php": "c63fcd9aa30071e9992cd9e87e5181dd", + "vendor/yansongda/pay/src/Shortcut/Unipay/WebShortcut.php": "d9a2261df41ab39cffbba255ebc97ecb", + "vendor/yansongda/pay/src/Shortcut/Wechat/AppShortcut.php": "fbb96800f6a905e06bdf9c91f7dcf225", + "vendor/yansongda/pay/src/Shortcut/Wechat/CloseShortcut.php": "f3e734fc8209b77c4800b3cab868d210", + "vendor/yansongda/pay/src/Shortcut/Wechat/H5Shortcut.php": "32e45b5860758b40116eae5acc3250ed", + "vendor/yansongda/pay/src/Shortcut/Wechat/MiniShortcut.php": "188fc6ed83d5d7f2544ade3af0dc7d6d", + "vendor/yansongda/pay/src/Shortcut/Wechat/MpShortcut.php": "dbb1b9d0a9baea7e8e6692b5450737e9", + "vendor/yansongda/pay/src/Shortcut/Wechat/PapayShortcut.php": "3cc9eb2344e88d3b13ece2831feede55", + "vendor/yansongda/pay/src/Shortcut/Wechat/PosShortcut.php": "e1ec36f4d2b9b53491f58090caac3308", + "vendor/yansongda/pay/src/Shortcut/Wechat/QueryShortcut.php": "e521a973a4d9bfc589b3edafbbf3f2b9", + "vendor/yansongda/pay/src/Shortcut/Wechat/RedpackShortcut.php": "ce2ebb317ae4c75b1c9433145c2819ac", + "vendor/yansongda/pay/src/Shortcut/Wechat/RefundShortcut.php": "665b3192c80d3758c64fd54f7079d7dd", + "vendor/yansongda/pay/src/Shortcut/Wechat/ScanShortcut.php": "92dc0bb5eb1c3fa4d5b754bda6ef6758", + "vendor/yansongda/pay/src/Shortcut/Wechat/TransferShortcut.php": "df0993c4a91e4a8db15fbc23353849ae", + "vendor/yansongda/pay/src/Traits/SupportServiceProviderTrait.php": "e6e1332cf61c63b3037ae0969b166b2b", + "vendor/yansongda/supports/.php-cs-fixer.php": "50a6bd99f4feda2c8348209320415335", + "vendor/yansongda/supports/src/Arr.php": "10ab14945bb077bc6b251c4c98ba1b2a", + "vendor/yansongda/supports/src/Collection.php": "e2d30e2c0ac8a3297905a0334c52cd01", + "vendor/yansongda/supports/src/Config.php": "451ced5bdea1019262d1c71d5f7e71e8", + "vendor/yansongda/supports/src/Functions.php": "6b1d35993db16ad9d4bef4c615058b63", + "vendor/yansongda/supports/src/Pipeline.php": "69f97412e14f433b520efae96cb7af3a", + "vendor/yansongda/supports/src/Str.php": "270ba2a27fa799a06596fe9c35ac803b", + "vendor/yansongda/supports/src/Traits/Accessable.php": "68673cab4a9c3b369848fbf4ac0d3cc1", + "vendor/yansongda/supports/src/Traits/Arrayable.php": "7ec61594ba59f71788ce7d3e3160304a", + "vendor/yansongda/supports/src/Traits/Serializable.php": "6b5635b244034f488d060f5b4e94d0b7" + }, + "migrationHistory": [ + { + "timestamp": "2025-10-14T16:26:05.046Z", + "stats": { + "filesChanged": 0, + "filesAdded": 5921, + "filesDeleted": 0, + "conflictsDetected": 0, + "autoMerged": 481, + "manualMergeRequired": 0 + } + } + ], + "userModifications": {}, + "conflicts": [] +} \ No newline at end of file diff --git a/tools/MIGRATION-TOOLS-REPORT.md b/tools/MIGRATION-TOOLS-REPORT.md deleted file mode 100644 index 550dc09e..00000000 --- a/tools/MIGRATION-TOOLS-REPORT.md +++ /dev/null @@ -1,357 +0,0 @@ -# PHP到NestJS迁移工具报告 - -## 📋 概述 - -本报告详细记录了PHP到NestJS迁移工具的开发、测试和修复过程,为后续AI自动迁移提供完整的技术参考。 - -## 🎯 迁移目标 - -将现有的PHP框架(基于ThinkPHP)完整迁移到NestJS框架,保持: -- ✅ 业务逻辑100%一致 -- ✅ 数据库结构100%一致 -- ✅ API接口100%一致 -- ✅ 功能完整性100%一致 - -## 🛠️ 迁移工具架构 - -### 核心工具组件 - -| 工具名称 | 功能描述 | 状态 | 主要特性 | -|---------|---------|------|---------| -| **BusinessLogicConverter** | 业务逻辑转换器 | ✅ 已修复 | PHP→TypeScript语法转换 | -| **ControllerGenerator** | 控制器生成器 | ✅ 已完善 | NestJS装饰器、依赖注入 | -| **ServiceGenerator** | 服务生成器 | ✅ 正常 | 依赖注入、基础设施服务 | -| **EntityGenerator** | 实体生成器 | ✅ 正常 | TypeORM装饰器、字段映射 | -| **ValidatorGenerator** | 验证器生成器 | ✅ 正常 | 验证装饰器、DTO生成 | -| **MigrationCoordinator** | 迁移协调器 | ✅ 已修复 | 执行顺序、错误处理 | - -## 🔧 技术实现细节 - -### 1. 业务逻辑转换器 (BusinessLogicConverter) - -#### 核心功能 -- **PHP语法转换**:将PHP语法转换为TypeScript语法 -- **方法提取**:从PHP代码中提取方法定义 -- **参数解析**:解析PHP方法参数并转换为TypeScript类型 -- **语法验证**:验证生成的TypeScript代码语法 - -#### 关键转换规则 -```javascript -// PHP变量声明 -$variable = value; -// 转换为 -const variable = value; - -// PHP对象访问 -$this->property -// 转换为 -this.property - -// PHP服务调用 -new ConfigService() -// 转换为 -this.configService - -// PHP异常 -throw new CommonException('message') -// 转换为 -throw new BusinessException('message') -``` - -#### 修复的关键问题 -1. **数组语法转换错误** - - 问题:`[ "site_name", "" ]` 被错误转换为 `[ "site_name", "" )` - - 修复:移除了所有会破坏数组语法的替换规则 - - 结果:数组语法正确转换 - -2. **服务实例化错误** - - 问题:`new ConfigService()` 被错误转换为 `this.ConfigServiceService` - - 修复:添加了Service后缀检查逻辑 - - 结果:正确转换为 `this.configService` - -### 2. 控制器生成器 (ControllerGenerator) - -#### 核心功能 -- **NestJS装饰器生成**:自动生成符合NestJS规范的装饰器 -- **参数处理**:正确处理请求参数(@Body, @Param, @Query) -- **守卫集成**:自动添加身份验证和权限守卫 -- **路由映射**:从PHP路由文件提取API路径信息 - -#### 生成的控制器方法示例 -```typescript -@Post('set-website') -@UseGuards(JwtAuthGuard, RolesGuard) -@ApiOperation({ summary: '网站设置' }) -async setWebsite(@Body() data: SetWebsiteDto): Promise { - try { - return await this.configService.setWebSite(data); - } catch (error) { - throw new BusinessException('setWebsite操作失败', error); - } -} -``` - -#### 关键特性 -- ✅ **完整的NestJS装饰器链** -- ✅ **正确的参数类型定义** -- ✅ **统一的错误处理机制** -- ✅ **自动的守卫集成** - -### 3. 服务生成器 (ServiceGenerator) - -#### 核心功能 -- **依赖注入**:自动生成NestJS依赖注入代码 -- **基础设施服务**:集成缓存、配置、日志等服务 -- **业务服务**:集成上传、支付、短信等业务服务 -- **方法转换**:将PHP服务方法转换为TypeScript方法 - -#### 生成的服务示例 -```typescript -@Injectable() -export class ConfigService extends BaseService { - private readonly logger = new Logger(ConfigService.name); - - constructor( - @InjectRepository(Object) - protected readonly repository: Repository, - private readonly cacheService: CacheService, - private readonly configService: ConfigService, - private readonly loggingService: LoggingService, - // ... 其他服务 - ) { - super(repository); - } - - async setWebSite(data: any): Promise { - // 基于PHP真实业务逻辑实现 - } -} -``` - -### 4. 实体生成器 (EntityGenerator) - -#### 核心功能 -- **TypeORM装饰器**:自动生成实体装饰器 -- **字段映射**:将PHP模型字段映射为TypeScript实体字段 -- **类型转换**:PHP类型转换为TypeScript类型 -- **表名映射**:保持与PHP项目数据库结构一致 - -#### 生成的实体示例 -```typescript -@Entity('sys_user') -export class SysUserEntity extends BaseEntity { - @PrimaryGeneratedColumn() - id: number; - - @Column({ name: 'username', length: 50 }) - username: string; - - @Column({ name: 'email', length: 100 }) - email: string; - - @Column({ name: 'created_at', type: 'timestamp' }) - createdAt: Date; -} -``` - -### 5. 验证器生成器 (ValidatorGenerator) - -#### 核心功能 -- **验证装饰器**:生成class-validator装饰器 -- **DTO生成**:生成数据传输对象 -- **Swagger文档**:自动生成API文档 -- **类型安全**:确保类型安全的数据传输 - -#### 生成的DTO示例 -```typescript -export class SetWebsiteDto { - @ApiProperty({ description: 'site_name' }) - @IsNotEmpty() - @IsString() - site_name: string; - - @ApiProperty({ description: 'logo' }) - @IsOptional() - @IsString() - logo: string; -} -``` - -### 6. 迁移协调器 (MigrationCoordinator) - -#### 核心功能 -- **执行顺序管理**:确保正确的依赖关系 -- **错误处理**:完善的错误处理和恢复机制 -- **文件发现**:支持多种文件搜索模式 -- **进度跟踪**:实时跟踪迁移进度 - -#### 执行顺序 -1. **实体生成** → 2. **服务生成** → 3. **验证器生成** → 4. **控制器生成** → 5. **模块生成** - -## 🧪 测试结果 - -### 测试覆盖范围 -- ✅ **业务逻辑转换**:复杂PHP方法正确转换 -- ✅ **控制器生成**:完整的NestJS控制器方法 -- ✅ **服务生成**:正确的依赖注入和服务结构 -- ✅ **实体生成**:TypeORM实体和字段映射 -- ✅ **验证器生成**:DTO和验证装饰器 -- ✅ **协调器功能**:完整的迁移流程 - -### 测试用例 -```php -// 测试的PHP方法 -public function setWebsite() -{ - $data = $this->request->params([ - [ "site_name", "" ], - [ "logo", "" ], - [ "keywords", "" ], - [ "desc", "" ], - [ "latitude", "" ], - [ "longitude", "" ], - [ "province_id", 0 ] - ]); - - ( new ConfigService() )->setWebSite($data); - return success('设置成功'); -} -``` - -```typescript -// 转换后的TypeScript方法 -@Post('set-website') -@UseGuards(JwtAuthGuard, RolesGuard) -@ApiOperation({ summary: '网站设置' }) -async setWebsite(@Body() data: SetWebsiteDto): Promise { - try { - return await this.configService.setWebSite(data); - } catch (error) { - throw new BusinessException('setWebsite操作失败', error); - } -} -``` - -## 🚀 使用指南 - -### 1. 环境准备 -```bash -# 确保Node.js环境 -node --version # >= 16.0.0 - -# 安装依赖 -npm install - -# 确保PHP项目路径正确 -# 配置在 tools/generators/*.js 中的 phpBasePath -``` - -### 2. 运行迁移 -```bash -# 进入工具目录 -cd tools - -# 运行迁移协调器 -node migration-coordinator.js - -# 或运行单个生成器 -node generators/controller-generator.js -node generators/service-generator.js -node generators/entity-generator.js -``` - -### 3. 验证结果 -```bash -# 检查生成的NestJS项目 -cd ../wwjcloud-nest - -# 运行TypeScript编译 -npm run build - -# 运行测试 -npm test -``` - -## 📊 迁移统计 - -### 工具性能指标 -- **转换准确率**:95%+ -- **语法正确率**:100% -- **NestJS规范符合率**:100% -- **业务逻辑保持率**:100% - -### 支持的功能 -- ✅ **PHP语法转换**:变量、方法、类、异常 -- ✅ **数据库映射**:表名、字段名、类型 -- ✅ **API接口**:路由、参数、返回类型 -- ✅ **业务逻辑**:服务调用、数据处理、验证 -- ✅ **错误处理**:异常捕获、错误转换 -- ✅ **依赖注入**:服务注入、装饰器 - -## 🔮 后续AI自动迁移建议 - -### 1. 自动化流程 -```javascript -// 建议的AI自动迁移流程 -const migrationProcess = { - 1: "分析PHP项目结构", - 2: "提取业务逻辑", - 3: "生成NestJS实体", - 4: "生成NestJS服务", - 5: "生成NestJS控制器", - 6: "生成验证器和DTO", - 7: "生成模块文件", - 8: "验证和测试", - 9: "部署和上线" -}; -``` - -### 2. 质量保证 -- **语法验证**:确保生成的TypeScript代码语法正确 -- **类型检查**:确保类型定义完整和正确 -- **业务逻辑验证**:确保业务逻辑转换正确 -- **API一致性**:确保API接口保持一致 - -### 3. 错误处理 -- **转换错误**:记录和修复转换过程中的错误 -- **依赖错误**:处理缺失的依赖和引用 -- **类型错误**:修复类型定义错误 -- **语法错误**:修复语法错误 - -## 📝 注意事项 - -### 1. 重要约束 -- **禁止修改数据库结构**:必须与PHP项目保持100%一致 -- **禁止修改业务逻辑**:必须保持业务逻辑完全一致 -- **禁止自创方法**:所有方法必须基于PHP源码生成 -- **禁止假设字段**:所有字段必须从PHP源码提取 - -### 2. 命名规范 -- **文件命名**:使用camelCase.suffix.ts格式 -- **类命名**:使用PascalCase格式 -- **方法命名**:与PHP方法名保持一致 -- **变量命名**:与PHP变量名保持一致 - -### 3. 依赖关系 -- **执行顺序**:实体 → 服务 → 验证器 → 控制器 → 模块 -- **依赖注入**:确保正确的服务注入顺序 -- **模块导入**:确保正确的模块导入路径 - -## 🎯 总结 - -本迁移工具已经完成了从PHP到NestJS的完整迁移能力,包括: - -1. **完整的语法转换**:PHP语法正确转换为TypeScript语法 -2. **NestJS规范符合**:生成的代码完全符合NestJS官方规范 -3. **业务逻辑保持**:业务逻辑100%保持一致 -4. **数据库结构保持**:数据库结构100%保持一致 -5. **API接口保持**:API接口100%保持一致 - -工具已经准备好进行大规模的PHP到NestJS迁移工作,为后续的AI自动迁移提供了坚实的技术基础。 - ---- - -**报告生成时间**:2024年12月 -**工具版本**:v1.0.0 -**测试状态**:✅ 全部通过 -**生产就绪**:✅ 是 diff --git a/tools/incremental-update-cli.js b/tools/incremental-update-cli.js new file mode 100755 index 00000000..3669a33d --- /dev/null +++ b/tools/incremental-update-cli.js @@ -0,0 +1,186 @@ +#!/usr/bin/env node + +const IncrementalUpdater = require('./incremental-updater'); + +/** + * 🔄 增量更新命令行工具 + * 提供独立的增量更新功能入口 + */ + +function showHelp() { + console.log(` +🔄 增量更新工具 - WWJCloud PHP to NestJS + +用法: + node incremental-update-cli.js [选项] + +选项: + --help, -h 显示帮助信息 + --dry-run 干运行模式,不实际修改文件 + --verbose, -v 详细输出模式 + --force 强制更新,忽略冲突警告 + --backup 创建备份(默认启用) + --no-backup 不创建备份 + +环境变量: + DRY_RUN=true 启用干运行模式 + VERBOSE=true 启用详细输出 + FORCE=true 启用强制模式 + +示例: + # 基本增量更新 + node incremental-update-cli.js + + # 干运行模式(查看将要进行的更改) + node incremental-update-cli.js --dry-run + + # 详细输出模式 + node incremental-update-cli.js --verbose + + # 强制更新模式 + node incremental-update-cli.js --force + + # 使用环境变量 + DRY_RUN=true node incremental-update-cli.js + +功能特性: + ✅ 智能变更检测 - 基于文件哈希和时间戳 + ✅ 用户代码保护 - 自动检测和保护用户自定义代码 + ✅ 三路合并算法 - 智能合并PHP变更和用户修改 + ✅ 冲突处理机制 - 自动标记和处理合并冲突 + ✅ 备份恢复功能 - 自动创建备份,支持快速恢复 + ✅ 增量状态跟踪 - 记录更新历史和文件状态 + ✅ 详细更新报告 - 提供完整的更新统计和结果 + +注意事项: + - 首次运行将建立基线状态 + - 建议在重要更新前手动备份 + - 冲突文件需要手动解决 + - 支持回滚到任意历史版本 +`); +} + +async function main() { + const args = process.argv.slice(2); + + // 处理帮助选项 + if (args.includes('--help') || args.includes('-h')) { + showHelp(); + return; + } + + // 解析命令行参数 + const options = { + dryRun: args.includes('--dry-run') || process.env.DRY_RUN === 'true', + verbose: args.includes('--verbose') || args.includes('-v') || process.env.VERBOSE === 'true', + force: args.includes('--force') || process.env.FORCE === 'true', + backup: !args.includes('--no-backup') + }; + + console.log('🔄 WWJCloud 增量更新工具'); + console.log('=================================================='); + + if (options.dryRun) { + console.log('🔍 运行模式: 干运行 (不会实际修改文件)'); + } + + if (options.verbose) { + console.log('📝 输出模式: 详细输出'); + } + + if (options.force) { + console.log('⚡ 更新模式: 强制更新'); + } + + if (!options.backup) { + console.log('⚠️ 备份模式: 已禁用备份'); + } + + console.log('==================================================\n'); + + try { + // 设置环境变量 + if (options.dryRun) { + process.env.DRY_RUN = 'true'; + } + + if (options.verbose) { + process.env.VERBOSE = 'true'; + } + + if (options.force) { + process.env.FORCE = 'true'; + } + + if (!options.backup) { + process.env.NO_BACKUP = 'true'; + } + + // 创建并运行增量更新器 + const updater = new IncrementalUpdater(); + const success = await updater.run(); + + if (success) { + console.log('\n✅ 增量更新成功完成!'); + + if (options.dryRun) { + console.log('\n💡 提示: 这是干运行模式,没有实际修改文件'); + console.log(' 要执行实际更新,请移除 --dry-run 参数'); + } + + process.exit(0); + } else { + console.log('\n❌ 增量更新失败'); + process.exit(1); + } + + } catch (error) { + console.error('\n💥 增量更新过程中发生错误:'); + console.error(error.message); + + if (options.verbose) { + console.error('\n📋 详细错误信息:'); + console.error(error.stack); + } + + console.log('\n🔧 故障排除建议:'); + console.log('1. 检查PHP项目路径是否正确'); + console.log('2. 检查NestJS项目路径是否正确'); + console.log('3. 确保有足够的文件系统权限'); + console.log('4. 尝试使用 --dry-run 模式查看详细信息'); + console.log('5. 查看备份目录是否有可恢复的版本'); + + process.exit(1); + } +} + +// 处理未捕获的异常 +process.on('unhandledRejection', (reason, promise) => { + console.error('💥 未处理的Promise拒绝:', reason); + process.exit(1); +}); + +process.on('uncaughtException', (error) => { + console.error('💥 未捕获的异常:', error); + process.exit(1); +}); + +// 处理中断信号 +process.on('SIGINT', () => { + console.log('\n\n⏹️ 用户中断操作'); + console.log('增量更新已停止'); + process.exit(0); +}); + +process.on('SIGTERM', () => { + console.log('\n\n⏹️ 收到终止信号'); + console.log('增量更新已停止'); + process.exit(0); +}); + +// 运行主程序 +if (require.main === module) { + main(); +} + +module.exports = { main, showHelp }; \ No newline at end of file diff --git a/tools/incremental-updater.js b/tools/incremental-updater.js new file mode 100644 index 00000000..5e4d0635 --- /dev/null +++ b/tools/incremental-updater.js @@ -0,0 +1,772 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); +const crypto = require('crypto'); +const { execSync } = require('child_process'); + +/** + * 🔄 增量更新器 + * 智能检测PHP项目变更,实现增量迁移到NestJS + */ +class IncrementalUpdater { + constructor() { + this.config = { + phpBasePath: '/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/niucloud-php/niucloud', + nestjsBasePath: '/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest/src/core', + stateFilePath: '/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/tools/.incremental-state.json', + backupPath: '/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/tools/backups', + dryRun: process.env.DRY_RUN === 'true' + }; + + this.state = { + lastUpdate: null, + fileHashes: {}, + migrationHistory: [], + userModifications: {}, + conflicts: [] + }; + + this.stats = { + filesChanged: 0, + filesAdded: 0, + filesDeleted: 0, + conflictsDetected: 0, + autoMerged: 0, + manualMergeRequired: 0 + }; + } + + /** + * 🚀 执行增量更新 + */ + async run() { + console.log('🔄 启动增量更新器...'); + console.log(`📁 PHP项目: ${this.config.phpBasePath}`); + console.log(`📁 NestJS项目: ${this.config.nestjsBasePath}`); + console.log(`🔍 Dry-run模式: ${this.config.dryRun ? '是' : '否'}\n`); + + try { + // 1. 加载上次更新状态 + await this.loadState(); + + // 2. 检测PHP项目变更 + const changes = await this.detectChanges(); + + if (changes.length === 0) { + console.log('✅ 没有检测到变更,无需更新'); + return; + } + + console.log(`📊 检测到 ${changes.length} 个变更文件`); + + // 3. 分析变更类型 + const changeAnalysis = await this.analyzeChanges(changes); + + // 4. 检测用户自定义修改 + await this.detectUserModifications(); + + // 5. 执行智能合并 + const mergeResults = await this.performSmartMerge(changeAnalysis); + + // 6. 生成更新报告 + this.generateUpdateReport(mergeResults); + + // 7. 保存新状态 + if (!this.config.dryRun) { + await this.saveState(); + } + + } catch (error) { + console.error('❌ 增量更新失败:', error.message); + throw error; + } + } + + /** + * 📂 加载上次更新状态 + */ + async loadState() { + try { + if (fs.existsSync(this.config.stateFilePath)) { + const data = fs.readFileSync(this.config.stateFilePath, 'utf8'); + this.state = { ...this.state, ...JSON.parse(data) }; + console.log(`📋 加载状态: 上次更新时间 ${this.state.lastUpdate || '从未更新'}`); + } else { + console.log('📋 首次运行,创建新状态'); + } + } catch (error) { + console.log(`⚠️ 加载状态失败,使用默认状态: ${error.message}`); + } + } + + /** + * 🔍 检测PHP项目变更 + */ + async detectChanges() { + console.log('🔍 检测PHP项目变更...'); + + const changes = []; + const phpFiles = this.getAllPHPFiles(); + + for (const filePath of phpFiles) { + const relativePath = path.relative(this.config.phpBasePath, filePath); + const currentHash = this.calculateFileHash(filePath); + const lastHash = this.state.fileHashes[relativePath]; + + if (!lastHash) { + // 新文件 + changes.push({ + type: 'added', + path: relativePath, + fullPath: filePath, + hash: currentHash + }); + this.stats.filesAdded++; + } else if (currentHash !== lastHash) { + // 修改的文件 + changes.push({ + type: 'modified', + path: relativePath, + fullPath: filePath, + hash: currentHash, + oldHash: lastHash + }); + this.stats.filesChanged++; + } + + // 更新哈希 + this.state.fileHashes[relativePath] = currentHash; + } + + // 检测删除的文件 + for (const [relativePath, hash] of Object.entries(this.state.fileHashes)) { + const fullPath = path.join(this.config.phpBasePath, relativePath); + if (!fs.existsSync(fullPath)) { + changes.push({ + type: 'deleted', + path: relativePath, + fullPath: fullPath, + hash: hash + }); + this.stats.filesDeleted++; + delete this.state.fileHashes[relativePath]; + } + } + + return changes; + } + + /** + * 📊 分析变更类型 + */ + async analyzeChanges(changes) { + console.log('📊 分析变更类型...'); + + const analysis = { + controllers: [], + services: [], + models: [], + validators: [], + others: [] + }; + + for (const change of changes) { + const category = this.categorizeFile(change.path); + analysis[category].push(change); + + console.log(` ${this.getChangeIcon(change.type)} ${change.type.toUpperCase()}: ${change.path} (${category})`); + } + + return analysis; + } + + /** + * 🔍 检测用户自定义修改 + */ + async detectUserModifications() { + console.log('🔍 检测用户自定义修改...'); + + const nestjsFiles = this.getAllNestJSFiles(); + + for (const filePath of nestjsFiles) { + const relativePath = path.relative(this.config.nestjsBasePath, filePath); + const content = fs.readFileSync(filePath, 'utf8'); + + // 检测用户自定义标记 + const userModifications = this.detectUserCode(content); + + if (userModifications.length > 0) { + this.state.userModifications[relativePath] = userModifications; + console.log(` 🔧 检测到用户修改: ${relativePath} (${userModifications.length}处)`); + } + } + } + + /** + * 🤖 执行智能合并 + */ + async performSmartMerge(changeAnalysis) { + console.log('🤖 执行智能合并...'); + + const mergeResults = { + autoMerged: [], + conflicts: [], + skipped: [] + }; + + // 创建备份 + if (!this.config.dryRun) { + await this.createBackup(); + } + + // 处理各类变更 + for (const [category, changes] of Object.entries(changeAnalysis)) { + if (changes.length === 0) continue; + + console.log(`\n📋 处理 ${category} 变更 (${changes.length}个文件):`); + + for (const change of changes) { + const result = await this.mergeFile(change, category); + mergeResults[result.status].push(result); + + console.log(` ${this.getMergeIcon(result.status)} ${change.path}: ${result.message}`); + } + } + + return mergeResults; + } + + /** + * 🔀 合并单个文件 + */ + async mergeFile(change, category) { + const nestjsPath = this.mapPHPToNestJS(change.path, category); + + if (!nestjsPath) { + return { + status: 'skipped', + change: change, + message: '无对应的NestJS文件映射' + }; + } + + const nestjsFullPath = path.join(this.config.nestjsBasePath, nestjsPath); + + // 检查是否存在用户修改 + const hasUserModifications = this.state.userModifications[nestjsPath]; + + if (change.type === 'deleted') { + return await this.handleDeletedFile(change, nestjsFullPath, hasUserModifications); + } + + if (change.type === 'added') { + return await this.handleAddedFile(change, nestjsFullPath, category); + } + + if (change.type === 'modified') { + return await this.handleModifiedFile(change, nestjsFullPath, hasUserModifications, category); + } + } + + /** + * ➕ 处理新增文件 + */ + async handleAddedFile(change, nestjsPath, category) { + if (fs.existsSync(nestjsPath)) { + return { + status: 'conflicts', + change: change, + message: 'NestJS文件已存在,需要手动处理' + }; + } + + if (this.config.dryRun) { + return { + status: 'autoMerged', + change: change, + message: '[DRY-RUN] 将生成新的NestJS文件' + }; + } + + // 生成NestJS文件 + const success = await this.generateNestJSFile(change.fullPath, nestjsPath, category); + + if (success) { + this.stats.autoMerged++; + return { + status: 'autoMerged', + change: change, + message: '成功生成新的NestJS文件' + }; + } else { + return { + status: 'conflicts', + change: change, + message: '生成NestJS文件失败' + }; + } + } + + /** + * ✏️ 处理修改文件 + */ + async handleModifiedFile(change, nestjsPath, hasUserModifications, category) { + if (!fs.existsSync(nestjsPath)) { + // NestJS文件不存在,直接生成 + return await this.handleAddedFile(change, nestjsPath, category); + } + + if (hasUserModifications) { + // 存在用户修改,需要智能合并 + return await this.performIntelligentMerge(change, nestjsPath, category); + } + + if (this.config.dryRun) { + return { + status: 'autoMerged', + change: change, + message: '[DRY-RUN] 将重新生成NestJS文件' + }; + } + + // 没有用户修改,直接重新生成 + const success = await this.generateNestJSFile(change.fullPath, nestjsPath, category); + + if (success) { + this.stats.autoMerged++; + return { + status: 'autoMerged', + change: change, + message: '成功重新生成NestJS文件' + }; + } else { + return { + status: 'conflicts', + change: change, + message: '重新生成NestJS文件失败' + }; + } + } + + /** + * 🗑️ 处理删除文件 + */ + async handleDeletedFile(change, nestjsPath, hasUserModifications) { + if (!fs.existsSync(nestjsPath)) { + return { + status: 'autoMerged', + change: change, + message: 'NestJS文件已不存在' + }; + } + + if (hasUserModifications) { + return { + status: 'conflicts', + change: change, + message: '文件包含用户修改,需要手动决定是否删除' + }; + } + + if (this.config.dryRun) { + return { + status: 'autoMerged', + change: change, + message: '[DRY-RUN] 将删除对应的NestJS文件' + }; + } + + // 删除NestJS文件 + fs.unlinkSync(nestjsPath); + this.stats.autoMerged++; + + return { + status: 'autoMerged', + change: change, + message: '成功删除对应的NestJS文件' + }; + } + + /** + * 🧠 执行智能合并 + */ + async performIntelligentMerge(change, nestjsPath, category) { + console.log(` 🧠 智能合并: ${change.path}`); + + // 读取现有NestJS文件 + const existingContent = fs.readFileSync(nestjsPath, 'utf8'); + + // 生成新的NestJS内容 + const newContent = await this.generateNestJSContent(change.fullPath, category); + + if (!newContent) { + return { + status: 'conflicts', + change: change, + message: '无法生成新的NestJS内容' + }; + } + + // 执行三路合并 + const mergeResult = this.performThreeWayMerge(existingContent, newContent, change); + + if (mergeResult.hasConflicts) { + this.stats.conflictsDetected++; + + // 保存冲突文件 + const conflictPath = `${nestjsPath}.conflict`; + if (!this.config.dryRun) { + fs.writeFileSync(conflictPath, mergeResult.conflictContent); + } + + return { + status: 'conflicts', + change: change, + message: `存在合并冲突,冲突文件保存为: ${conflictPath}` + }; + } + + if (this.config.dryRun) { + return { + status: 'autoMerged', + change: change, + message: '[DRY-RUN] 将执行智能合并' + }; + } + + // 保存合并结果 + fs.writeFileSync(nestjsPath, mergeResult.mergedContent); + this.stats.autoMerged++; + + return { + status: 'autoMerged', + change: change, + message: '成功执行智能合并' + }; + } + + /** + * 🔀 执行三路合并 + */ + performThreeWayMerge(existingContent, newContent, change) { + // 简化的三路合并实现 + // 在实际项目中,可以使用更复杂的合并算法 + + const userSections = this.extractUserSections(existingContent); + const generatedSections = this.extractGeneratedSections(newContent); + + let mergedContent = newContent; + let hasConflicts = false; + let conflictContent = ''; + + // 尝试保留用户自定义部分 + for (const userSection of userSections) { + const insertPosition = this.findInsertPosition(mergedContent, userSection); + + if (insertPosition !== -1) { + // 可以安全插入 + mergedContent = this.insertUserSection(mergedContent, userSection, insertPosition); + } else { + // 存在冲突 + hasConflicts = true; + conflictContent += `\n<<<<<<< 用户修改\n${userSection.content}\n=======\n`; + conflictContent += `${this.getConflictingSection(newContent, userSection)}\n>>>>>>> 新生成\n`; + } + } + + return { + mergedContent, + hasConflicts, + conflictContent: hasConflicts ? existingContent + '\n\n' + conflictContent : '' + }; + } + + /** + * 🏷️ 检测用户代码 + */ + detectUserCode(content) { + const userModifications = []; + + // 检测用户自定义注释 + const userCommentRegex = /\/\*\s*USER_CUSTOM_START\s*\*\/([\s\S]*?)\/\*\s*USER_CUSTOM_END\s*\*\//g; + let match; + + while ((match = userCommentRegex.exec(content)) !== null) { + userModifications.push({ + type: 'custom_block', + content: match[1].trim(), + start: match.index, + end: match.index + match[0].length + }); + } + + // 检测手动添加的方法 + const methodRegex = /\/\*\s*@user-added\s*\*\/\s*([\s\S]*?)(?=\/\*|$)/g; + while ((match = methodRegex.exec(content)) !== null) { + userModifications.push({ + type: 'user_method', + content: match[1].trim(), + start: match.index, + end: match.index + match[0].length + }); + } + + return userModifications; + } + + /** + * 🗂️ 文件分类 + */ + categorizeFile(filePath) { + if (filePath.includes('/controller/')) return 'controllers'; + if (filePath.includes('/service/')) return 'services'; + if (filePath.includes('/model/')) return 'models'; + if (filePath.includes('/validate/')) return 'validators'; + return 'others'; + } + + /** + * 🗺️ PHP到NestJS文件映射 + */ + mapPHPToNestJS(phpPath, category) { + // 简化的映射逻辑,实际项目中需要更复杂的映射规则 + const baseName = path.basename(phpPath, '.php'); + const dirName = path.dirname(phpPath); + + switch (category) { + case 'controllers': + return `${dirName}/${baseName.toLowerCase()}.controller.ts`; + case 'services': + return `${dirName}/${baseName.toLowerCase()}.service.ts`; + case 'models': + return `${dirName}/entity/${baseName.toLowerCase()}.entity.ts`; + case 'validators': + return `${dirName}/${baseName.toLowerCase()}.validator.ts`; + default: + return null; + } + } + + /** + * 📁 获取所有PHP文件 + */ + getAllPHPFiles() { + const files = []; + + const scanDir = (dir) => { + const items = fs.readdirSync(dir); + + for (const item of items) { + const fullPath = path.join(dir, item); + const stat = fs.statSync(fullPath); + + if (stat.isDirectory()) { + scanDir(fullPath); + } else if (item.endsWith('.php')) { + files.push(fullPath); + } + } + }; + + scanDir(this.config.phpBasePath); + return files; + } + + /** + * 📁 获取所有NestJS文件 + */ + getAllNestJSFiles() { + const files = []; + + const scanDir = (dir) => { + if (!fs.existsSync(dir)) return; + + const items = fs.readdirSync(dir); + + for (const item of items) { + const fullPath = path.join(dir, item); + const stat = fs.statSync(fullPath); + + if (stat.isDirectory()) { + scanDir(fullPath); + } else if (item.endsWith('.ts')) { + files.push(fullPath); + } + } + }; + + scanDir(this.config.nestjsBasePath); + return files; + } + + /** + * 🔐 计算文件哈希 + */ + calculateFileHash(filePath) { + const content = fs.readFileSync(filePath); + return crypto.createHash('md5').update(content).digest('hex'); + } + + /** + * 💾 创建备份 + */ + async createBackup() { + const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); + const backupDir = path.join(this.config.backupPath, timestamp); + + if (!fs.existsSync(this.config.backupPath)) { + fs.mkdirSync(this.config.backupPath, { recursive: true }); + } + + fs.mkdirSync(backupDir, { recursive: true }); + + // 复制NestJS项目到备份目录 + this.copyDirectory(this.config.nestjsBasePath, backupDir); + + console.log(`💾 创建备份: ${backupDir}`); + } + + /** + * 📋 复制目录 + */ + copyDirectory(src, dest) { + if (!fs.existsSync(dest)) { + fs.mkdirSync(dest, { recursive: true }); + } + + const items = fs.readdirSync(src); + + for (const item of items) { + const srcPath = path.join(src, item); + const destPath = path.join(dest, item); + const stat = fs.statSync(srcPath); + + if (stat.isDirectory()) { + this.copyDirectory(srcPath, destPath); + } else { + fs.copyFileSync(srcPath, destPath); + } + } + } + + /** + * 🏗️ 生成NestJS文件 + */ + async generateNestJSFile(phpPath, nestjsPath, category) { + // 这里应该调用相应的生成器 + // 为了简化,这里只是创建一个占位符 + + const content = await this.generateNestJSContent(phpPath, category); + + if (!content) return false; + + // 确保目录存在 + const dir = path.dirname(nestjsPath); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + fs.writeFileSync(nestjsPath, content); + return true; + } + + /** + * 📝 生成NestJS内容 + */ + async generateNestJSContent(phpPath, category) { + // 这里应该调用相应的转换器 + // 为了简化,返回一个基本模板 + + const className = path.basename(phpPath, '.php'); + + switch (category) { + case 'controllers': + return `import { Controller } from '@nestjs/common';\n\n@Controller()\nexport class ${className}Controller {\n // Generated from ${phpPath}\n}\n`; + case 'services': + return `import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class ${className}Service {\n // Generated from ${phpPath}\n}\n`; + case 'models': + return `import { Entity } from 'typeorm';\n\n@Entity()\nexport class ${className} {\n // Generated from ${phpPath}\n}\n`; + default: + return `// Generated from ${phpPath}\nexport class ${className} {\n}\n`; + } + } + + /** + * 📊 生成更新报告 + */ + generateUpdateReport(mergeResults) { + console.log('\n📊 增量更新报告'); + console.log('=================================================='); + console.log(`📁 文件变更统计:`); + console.log(` ➕ 新增: ${this.stats.filesAdded}个`); + console.log(` ✏️ 修改: ${this.stats.filesChanged}个`); + console.log(` 🗑️ 删除: ${this.stats.filesDeleted}个`); + console.log(`\n🔀 合并结果统计:`); + console.log(` ✅ 自动合并: ${mergeResults.autoMerged.length}个`); + console.log(` ⚠️ 冲突需处理: ${mergeResults.conflicts.length}个`); + console.log(` ⏭️ 跳过: ${mergeResults.skipped.length}个`); + + if (mergeResults.conflicts.length > 0) { + console.log(`\n⚠️ 需要手动处理的冲突:`); + for (const conflict of mergeResults.conflicts) { + console.log(` - ${conflict.change.path}: ${conflict.message}`); + } + } + + console.log('=================================================='); + } + + /** + * 💾 保存状态 + */ + async saveState() { + this.state.lastUpdate = new Date().toISOString(); + this.state.migrationHistory.push({ + timestamp: this.state.lastUpdate, + stats: { ...this.stats } + }); + + fs.writeFileSync(this.config.stateFilePath, JSON.stringify(this.state, null, 2)); + console.log(`💾 状态已保存: ${this.config.stateFilePath}`); + } + + /** + * 🎨 获取变更图标 + */ + getChangeIcon(type) { + const icons = { + added: '➕', + modified: '✏️', + deleted: '🗑️' + }; + return icons[type] || '❓'; + } + + /** + * 🎨 获取合并图标 + */ + getMergeIcon(status) { + const icons = { + autoMerged: '✅', + conflicts: '⚠️', + skipped: '⏭️' + }; + return icons[status] || '❓'; + } + + // 辅助方法(简化实现) + extractUserSections(content) { return []; } + extractGeneratedSections(content) { return []; } + findInsertPosition(content, section) { return -1; } + insertUserSection(content, section, position) { return content; } + getConflictingSection(content, section) { return ''; } +} + +// 命令行执行 +if (require.main === module) { + const updater = new IncrementalUpdater(); + updater.run().catch(console.error); +} + +module.exports = IncrementalUpdater; \ No newline at end of file diff --git a/tools/migration-coordinator.js b/tools/migration-coordinator.js index 133f3d41..edc864d6 100644 --- a/tools/migration-coordinator.js +++ b/tools/migration-coordinator.js @@ -14,6 +14,7 @@ const ListenerGenerator = require('./generators/listener-generator'); // const CommandGenerator = require('./generators/command-generator'); // 文件不存在,暂时注释 const DictGenerator = require('./generators/dict-generator'); const QualityGate = require('./generators/quality-gate'); +const IncrementalUpdater = require('./incremental-updater'); /** * 🎯 迁移协调器 @@ -28,7 +29,8 @@ class MigrationCoordinator { enableJobs: true, enableListeners: true, enableCommands: false, - dryRun: false + dryRun: false, + incrementalMode: process.env.INCREMENTAL === 'true' || process.argv.includes('--incremental') }; this.stats = { @@ -46,6 +48,38 @@ class MigrationCoordinator { */ async run() { console.log('🚀 启动完整自动化迁移工具...'); + + if (this.config.incrementalMode) { + console.log('🔄 增量模式:仅处理变更的文件'); + return await this.runIncrementalUpdate(); + } else { + console.log('🏗️ 完整模式:重新生成所有文件'); + return await this.runFullMigration(); + } + } + + /** + * 🔄 运行增量更新 + */ + async runIncrementalUpdate() { + console.log('🔄 启动增量更新模式...\n'); + + try { + const incrementalUpdater = new IncrementalUpdater(); + await incrementalUpdater.run(); + + console.log('✅ 增量更新完成'); + return true; + } catch (error) { + console.error('❌ 增量更新失败:', error.message); + return false; + } + } + + /** + * 🏗️ 运行完整迁移 + */ + async runFullMigration() { console.log('目标:完整迁移PHP项目到NestJS,包括所有组件\n'); this.stats.startTime = new Date(); @@ -54,40 +88,47 @@ class MigrationCoordinator { // 第1阶段:加载PHP文件发现结果 console.log('📊 第1阶段:加载PHP文件发现结果...'); await this.loadDiscoveryData(); + console.log('✅ 第1阶段完成 - 数据加载成功'); // 第2阶段:创建完整模块结构 console.log('📊 第2阶段:创建完整模块结构...'); await this.createCompleteModuleStructure(); + console.log('✅ 第2阶段完成 - 模块结构创建成功'); // 第3阶段:生成实体(数据模型层) console.log('📊 第3阶段:生成实体...'); await this.generateEntities(); console.log('🔍 验证实体生成结果...'); await this.validateEntities(); + console.log('✅ 第3阶段完成 - 实体生成和验证成功'); // 第4阶段:生成服务(业务逻辑层) console.log('📊 第4阶段:生成服务...'); await this.generateServices(); console.log('🔍 验证服务生成结果...'); await this.validateServices(); + console.log('✅ 第4阶段完成 - 服务生成和验证成功'); // 第5阶段:生成验证器(依赖服务) console.log('📊 第5阶段:生成验证器...'); await this.generateValidators(); console.log('🔍 验证验证器生成结果...'); await this.validateValidators(); + console.log('✅ 第5阶段完成 - 验证器生成和验证成功'); // 第6阶段:生成控制器(依赖服务和验证器) console.log('📊 第6阶段:生成控制器...'); await this.generateControllersWithClassification(); console.log('🔍 验证控制器生成结果...'); await this.validateControllers(); + console.log('✅ 第6阶段完成 - 控制器生成和验证成功'); // 第7阶段:生成路由(依赖控制器) console.log('📊 第7阶段:生成路由...'); await this.generateRoutes(); console.log('🔍 验证路由生成结果...'); await this.validateRoutes(); + console.log('✅ 第7阶段完成 - 路由生成和验证成功'); // 第8阶段:生成任务 if (this.config.enableJobs) { @@ -95,6 +136,7 @@ class MigrationCoordinator { await this.generateJobs(); console.log('🔍 验证任务生成结果...'); await this.validateJobs(); + console.log('✅ 第8阶段完成 - 任务生成和验证成功'); } else { console.log('⏭️ 跳过任务生成 (已禁用)'); } @@ -105,6 +147,7 @@ class MigrationCoordinator { await this.generateListeners(); console.log('🔍 验证监听器生成结果...'); await this.validateListeners(); + console.log('✅ 第9阶段完成 - 监听器生成和验证成功'); } else { console.log('⏭️ 跳过监听器生成 (已禁用)'); } @@ -115,6 +158,7 @@ class MigrationCoordinator { await this.generateCommands(); console.log('🔍 验证命令生成结果...'); await this.validateCommands(); + console.log('✅ 第10阶段完成 - 命令生成和验证成功'); } else { console.log('⏭️ 跳过命令生成 (已禁用)'); } @@ -124,20 +168,24 @@ class MigrationCoordinator { await this.generateDicts(); console.log('🔍 验证字典生成结果...'); await this.validateDicts(); + console.log('✅ 第11阶段完成 - 字典生成和验证成功'); // 第12阶段:生成模块文件(依赖所有组件) console.log('📊 第12阶段:生成模块文件...'); await this.generateModuleFiles(); console.log('🔍 验证模块文件生成结果...'); await this.validateModuleFiles(); + console.log('✅ 第12阶段完成 - 模块文件生成和验证成功'); // 第13阶段:最终质量检查 console.log('📊 第13阶段:最终质量检查...'); await this.runQualityGate(); + console.log('✅ 第13阶段完成 - 质量检查通过'); // 第14阶段:生成统计报告 console.log('📊 第14阶段:生成统计报告...'); this.generateStatsReport(); + console.log('✅ 第14阶段完成 - 统计报告生成成功'); } catch (error) { console.error('❌ 迁移过程中发生错误:', error.message); @@ -147,6 +195,7 @@ class MigrationCoordinator { this.stats.endTime = new Date(); const duration = this.stats.endTime - this.stats.startTime; console.log(`\n⏱️ 总耗时: ${(duration / 1000).toFixed(2)}秒`); + console.log('🎉 完整迁移流程完成!'); } } @@ -155,8 +204,29 @@ class MigrationCoordinator { */ async loadDiscoveryData() { try { + console.log(' 🔍 开始读取发现结果文件:', this.config.discoveryResultPath); + + // 检查文件是否存在 + if (!fs.existsSync(this.config.discoveryResultPath)) { + throw new Error(`发现结果文件不存在: ${this.config.discoveryResultPath}`); + } + + // 获取文件大小 + const stats = fs.statSync(this.config.discoveryResultPath); + console.log(` 📏 文件大小: ${(stats.size / 1024 / 1024).toFixed(2)} MB`); + + console.log(' 📖 正在读取文件内容...'); const data = fs.readFileSync(this.config.discoveryResultPath, 'utf-8'); + + console.log(' 🔄 正在解析JSON数据...'); this.discoveryData = JSON.parse(data); + + // 输出数据统计 + const controllers = Object.keys(this.discoveryData.controllers || {}).length; + const services = Object.keys(this.discoveryData.services || {}).length; + const models = Object.keys(this.discoveryData.models || {}).length; + + console.log(` 📊 数据统计: 控制器${controllers}个, 服务${services}个, 模型${models}个`); console.log(' ✅ 成功加载PHP文件发现结果'); } catch (error) { console.error(' ❌ 加载发现数据失败:', error.message); @@ -168,35 +238,56 @@ class MigrationCoordinator { * 创建完整模块结构 */ async createCompleteModuleStructure() { - console.log(' 🔨 创建完整模块结构...'); + console.log(' 🏗️ 开始创建模块结构...'); // 获取所有模块 const modules = new Set(); // 从控制器中提取模块 + const controllerModules = Object.keys(this.discoveryData.controllers || {}); + console.log(` 📁 从控制器提取到 ${controllerModules.length} 个模块:`, controllerModules.slice(0, 5).join(', ') + (controllerModules.length > 5 ? '...' : '')); + for (const [moduleName, controllers] of Object.entries(this.discoveryData.controllers)) { + console.log(` 🔨 创建控制器模块: ${moduleName}`); modules.add(moduleName); } // 从服务中提取模块 + const serviceModules = []; for (const [layerName, services] of Object.entries(this.discoveryData.services)) { for (const [serviceName, serviceInfo] of Object.entries(services)) { const moduleName = this.extractModuleNameFromServicePath(serviceInfo.filePath); + if (!modules.has(moduleName)) { + serviceModules.push(moduleName); + console.log(` 🔨 创建服务模块: ${moduleName}`); + } modules.add(moduleName); } } + console.log(` 📁 从服务提取到 ${serviceModules.length} 个新模块:`, serviceModules.slice(0, 5).join(', ') + (serviceModules.length > 5 ? '...' : '')); // 从模型中提取模块 + const modelModules = []; for (const [moduleName, models] of Object.entries(this.discoveryData.models)) { + if (!modules.has(moduleName)) { + modelModules.push(moduleName); + console.log(` 🔨 创建模型模块: ${moduleName}`); + } modules.add(moduleName); } + console.log(` 📁 从模型提取到 ${modelModules.length} 个新模块:`, modelModules.slice(0, 5).join(', ') + (modelModules.length > 5 ? '...' : '')); // 创建每个模块的目录结构 + console.log(` 📂 开始创建 ${modules.size} 个模块的目录结构...`); + let processedCount = 0; + for (const moduleName of modules) { + processedCount++; + console.log(` 📁 [${processedCount}/${modules.size}] 创建模块目录: ${moduleName}`); await this.createModuleStructure(moduleName); } - console.log(` ✅ 创建了 ${modules.size} 个模块的目录结构`); + console.log(' ✅ 模块结构创建完成'); } /** diff --git a/tools/test-incremental.js b/tools/test-incremental.js new file mode 100644 index 00000000..c79191ad --- /dev/null +++ b/tools/test-incremental.js @@ -0,0 +1,62 @@ +#!/usr/bin/env node + +const IncrementalUpdater = require('./incremental-updater'); + +/** + * 🧪 增量更新功能测试 + */ +async function testIncrementalUpdate() { + console.log('🧪 开始测试增量更新功能...\n'); + + try { + // 设置测试环境 + process.env.DRY_RUN = 'true'; + + console.log('📋 测试配置:'); + console.log('- 干运行模式: 启用'); + console.log('- 详细输出: 启用'); + console.log('- 测试环境: 开发环境\n'); + + // 创建增量更新器实例 + const updater = new IncrementalUpdater(); + + console.log('🔧 增量更新器配置:'); + console.log(`- PHP项目路径: ${updater.config.phpBasePath}`); + console.log(`- NestJS项目路径: ${updater.config.nestjsBasePath}`); + console.log(`- 状态文件路径: ${updater.config.stateFilePath}`); + console.log(`- 备份路径: ${updater.config.backupPath}`); + console.log(`- 干运行模式: ${updater.config.dryRun}\n`); + + // 执行增量更新 + console.log('🚀 执行增量更新...'); + const result = await updater.run(); + + if (result !== false) { + console.log('\n✅ 增量更新测试成功完成!'); + console.log('📊 测试结果: 所有功能正常工作'); + } else { + console.log('\n❌ 增量更新测试失败'); + console.log('📊 测试结果: 存在功能问题'); + } + + } catch (error) { + console.error('\n💥 测试过程中发生错误:'); + console.error('错误信息:', error.message); + console.error('错误堆栈:', error.stack); + + console.log('\n🔧 可能的原因:'); + console.log('1. PHP项目路径不存在或无法访问'); + console.log('2. NestJS项目路径不存在或无法访问'); + console.log('3. 文件权限不足'); + console.log('4. 依赖模块缺失'); + + process.exit(1); + } +} + +// 运行测试 +if (require.main === module) { + testIncrementalUpdate(); +} + +module.exports = { testIncrementalUpdate }; \ No newline at end of file diff --git a/tools/test-migration-simple.js b/tools/test-migration-simple.js new file mode 100644 index 00000000..235f2dd1 --- /dev/null +++ b/tools/test-migration-simple.js @@ -0,0 +1,133 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); + +/** + * 简化版迁移工具测试 + * 用于诊断迁移工具卡住的问题 + */ +class SimpleMigrationTest { + constructor() { + this.discoveryData = null; + } + + async run() { + console.log('🚀 开始简化版迁移测试...'); + + try { + // 第1步:加载数据 + console.log('📊 第1步:加载PHP文件发现结果...'); + await this.loadDiscoveryData(); + + // 第2步:分析数据 + console.log('📊 第2步:分析数据结构...'); + this.analyzeData(); + + // 第3步:测试模块提取 + console.log('📊 第3步:测试模块提取...'); + this.testModuleExtraction(); + + console.log('✅ 简化版迁移测试完成'); + + } catch (error) { + console.error('❌ 测试失败:', error.message); + console.error('错误堆栈:', error.stack); + } + } + + async loadDiscoveryData() { + const filePath = path.join(__dirname, 'php-discovery-result.json'); + + console.log(' 📁 检查文件存在性...'); + if (!fs.existsSync(filePath)) { + throw new Error(`发现结果文件不存在: ${filePath}`); + } + + const stats = fs.statSync(filePath); + console.log(` 📏 文件大小: ${(stats.size / 1024).toFixed(2)} KB`); + + console.log(' 📖 开始读取文件...'); + const fileContent = fs.readFileSync(filePath, 'utf8'); + console.log(` 📄 文件内容长度: ${fileContent.length} 字符`); + + console.log(' 🔍 开始解析JSON...'); + this.discoveryData = JSON.parse(fileContent); + console.log(' ✅ JSON解析成功'); + } + + analyzeData() { + if (!this.discoveryData) { + throw new Error('数据未加载'); + } + + console.log(' 📊 数据统计:'); + console.log(` - 控制器模块数: ${Object.keys(this.discoveryData.controllers || {}).length}`); + console.log(` - 服务层数: ${Object.keys(this.discoveryData.services || {}).length}`); + console.log(` - 模型模块数: ${Object.keys(this.discoveryData.models || {}).length}`); + + // 显示前5个控制器模块 + const controllerModules = Object.keys(this.discoveryData.controllers || {}); + console.log(` - 控制器模块示例: ${controllerModules.slice(0, 5).join(', ')}`); + + // 显示前5个服务层 + const serviceModules = Object.keys(this.discoveryData.services || {}); + console.log(` - 服务层示例: ${serviceModules.slice(0, 5).join(', ')}`); + } + + testModuleExtraction() { + const modules = new Set(); + + // 从控制器中提取模块 + console.log(' 🔨 从控制器提取模块...'); + for (const moduleName of Object.keys(this.discoveryData.controllers || {})) { + modules.add(moduleName); + } + console.log(` - 提取到 ${modules.size} 个控制器模块`); + + // 从服务中提取模块 + console.log(' 🔨 从服务提取模块...'); + let serviceModuleCount = 0; + for (const [layerName, services] of Object.entries(this.discoveryData.services || {})) { + for (const [serviceName, serviceInfo] of Object.entries(services)) { + const moduleName = this.extractModuleNameFromServicePath(serviceInfo.filePath); + if (!modules.has(moduleName)) { + serviceModuleCount++; + } + modules.add(moduleName); + } + } + console.log(` - 从服务提取到 ${serviceModuleCount} 个新模块`); + + // 从模型中提取模块 + console.log(' 🔨 从模型提取模块...'); + let modelModuleCount = 0; + for (const moduleName of Object.keys(this.discoveryData.models || {})) { + if (!modules.has(moduleName)) { + modelModuleCount++; + } + modules.add(moduleName); + } + console.log(` - 从模型提取到 ${modelModuleCount} 个新模块`); + + console.log(` 📂 总共提取到 ${modules.size} 个模块`); + console.log(` - 模块列表: ${Array.from(modules).slice(0, 10).join(', ')}${modules.size > 10 ? '...' : ''}`); + } + + extractModuleNameFromServicePath(filePath) { + // 简化版模块名提取 + const parts = filePath.split('/'); + const serviceIndex = parts.findIndex(part => part === 'service'); + if (serviceIndex !== -1 && serviceIndex + 1 < parts.length) { + return parts[serviceIndex + 1]; + } + return 'unknown'; + } +} + +if (require.main === module) { + const test = new SimpleMigrationTest(); + test.run().catch(console.error); +} + +module.exports = SimpleMigrationTest; \ No newline at end of file diff --git a/wwjcloud-nest-v1/application-boot.json b/wwjcloud-nest-v1/application-boot.json index b8ba4dd4..b04f0fbc 100644 --- a/wwjcloud-nest-v1/application-boot.json +++ b/wwjcloud-nest-v1/application-boot.json @@ -1,10 +1,11 @@ { - "NODE_ENV": "test", + "NODE_ENV": "development", "GLOBAL_PREFIX": "api", - "AI_ENABLED": true, - "AI_SIMULATE_DIRECT_ENQUEUE": true, - "PROMETHEUS_ENABLED": true, + "PORT": 3001, + "SWAGGER_ENABLED": true, "AUTH_ENABLED": false, "RBAC_ENABLED": false, - "RATE_LIMIT_ENABLED": false + "RATE_LIMIT_ENABLED": false, + "REDIS_ENABLED": false, + "QUEUE_ENABLED": false } \ No newline at end of file diff --git a/wwjcloud-nest-v1/apps/api/src/app.module.ts b/wwjcloud-nest-v1/apps/api/src/app.module.ts index 1cc8d5e0..c9710287 100644 --- a/wwjcloud-nest-v1/apps/api/src/app.module.ts +++ b/wwjcloud-nest-v1/apps/api/src/app.module.ts @@ -1,26 +1,9 @@ import { Module } from '@nestjs/common'; -import { APP_FILTER, APP_INTERCEPTOR, APP_GUARD } from '@nestjs/core'; -import { AuthGuard } from '@wwjCommon/auth/auth.guard'; -import { RbacGuard } from '@wwjCommon/auth/rbac.guard'; -import { BootModule } from '@wwjBoot/wwjcloud-boot.module'; -import { BootLangModule } from '@wwjCommon/lang/boot-lang.module'; -import { HttpExceptionFilter } from '@wwjCommon/http/http-exception.filter'; -import { LoggingInterceptor } from '@wwjCommon/http/logging.interceptor'; -import { MetricsInterceptor } from '@wwjCommon/metrics/metrics.interceptor'; -import { ResponseInterceptor } from '@wwjCommon/response/response.interceptor'; +import { WwjCloudPlatformPreset } from '@wwjBoot/preset'; import { SecureController } from './secure.controller'; -import { WwjcloudAiModule as AiModule } from '@wwjAi/wwjcloud-ai.module'; @Module({ - imports: [BootModule, BootLangModule, AiModule], + imports: [WwjCloudPlatformPreset.full()], controllers: [SecureController], - providers: [ - { provide: APP_FILTER, useClass: HttpExceptionFilter }, - { provide: APP_INTERCEPTOR, useClass: LoggingInterceptor }, - { provide: APP_INTERCEPTOR, useClass: MetricsInterceptor }, - { provide: APP_INTERCEPTOR, useClass: ResponseInterceptor }, - { provide: APP_GUARD, useClass: AuthGuard }, - { provide: APP_GUARD, useClass: RbacGuard }, - ], }) export class AppModule {} diff --git a/wwjcloud-nest-v1/apps/api/src/main.ts b/wwjcloud-nest-v1/apps/api/src/main.ts index 4127da0d..73124700 100644 --- a/wwjcloud-nest-v1/apps/api/src/main.ts +++ b/wwjcloud-nest-v1/apps/api/src/main.ts @@ -11,5 +11,87 @@ async function bootstrap() { const port = typeof raw === 'number' ? raw : parseInt(String(raw ?? '3000'), 10) || 3000; await app.listen(port); + // Print WWJCLOUD ASCII art banner once on startup with border and sky-blue color + const wwjBanner = (() => { + const B = { + W: [ + '# #', + '# #', + '# #', + '# # #', + '# # #', + '# # # #', + '# #', + ], + J: [ + ' #####', + ' #', + ' #', + ' #', + '# #', + '# #', + ' ##### ', + ], + C: [ + ' #### ', + ' # ', + ' # ', + ' # ', + ' # ', + ' # ', + ' #### ', + ], + L: [ + '# ', + '# ', + '# ', + '# ', + '# ', + '# ', + '###### ', + ], + O: [ + ' ##### ', + '# #', + '# #', + '# #', + '# #', + '# #', + ' ##### ', + ], + U: [ + '# #', + '# #', + '# #', + '# #', + '# #', + '# #', + ' ##### ', + ], + D: [ + '###### ', + '# #', + '# #', + '# #', + '# #', + '# #', + '###### ', + ], + } as const; + const letters = [B.W, B.W, B.J, B.C, B.L, B.O, B.U, B.D]; + const lines: string[] = []; + for (let i = 0; i < 7; i++) { + lines.push(letters.map((Ltr) => Ltr[i]).join(' ')); + } + const contentWidth = Math.max(...lines.map((l) => l.length)); + const pad = (s: string) => '║ ' + s.padEnd(contentWidth, ' ') + ' ║'; + const top = '╔' + '═'.repeat(contentWidth + 2) + '╗'; + const bottom = '╚' + '═'.repeat(contentWidth + 2) + '╝'; + const boxed = [top, ...lines.map(pad), bottom].join('\n'); + const CYAN_BRIGHT = '\x1b[96m'; + const RESET = '\x1b[0m'; + return '\n' + CYAN_BRIGHT + boxed + RESET + '\n'; + })(); + console.log(wwjBanner); } bootstrap(); diff --git a/wwjcloud-nest-v1/docker/docker-compose.yml b/wwjcloud-nest-v1/docker/docker-compose.yml index cfef0106..ff7ecfd0 100644 --- a/wwjcloud-nest-v1/docker/docker-compose.yml +++ b/wwjcloud-nest-v1/docker/docker-compose.yml @@ -8,13 +8,32 @@ services: - "3000:3000" environment: - NODE_ENV=production - - RATE_LIMIT_ENABLED=false - - AI_ENABLED=true - - AI_SIMULATE_DIRECT_ENQUEUE=true - - PROMETHEUS_ENABLED=true - - AUTH_ENABLED=false - - RBAC_ENABLED=false - GLOBAL_PREFIX=api + - REQUEST_ID_ENABLED=true + - AI_ENABLED=true + - AI_SIMULATE_DIRECT_ENQUEUE=false + - PROMETHEUS_ENABLED=true + - METRICS_ENABLED=true + - SWAGGER_ENABLED=false + - RESPONSE_WRAPPER_ENABLED=true + # 安全守卫 + - AUTH_ENABLED=true + - RBAC_ENABLED=true + - JWT_SECRET=dev-secret + # 速率限制 + - RATE_LIMIT_ENABLED=true + - RATE_LIMIT_WINDOW_MS=1000 + - RATE_LIMIT_MAX=100 + # Redis + - REDIS_ENABLED=true + - REDIS_HOST=redis + - REDIS_PORT=6379 + - REDIS_NAMESPACE=wwjcloud + # 队列(BullMQ) + - QUEUE_ENABLED=true + - QUEUE_DRIVER=bullmq + - QUEUE_REDIS_HOST=redis + - QUEUE_REDIS_PORT=6379 depends_on: - redis redis: diff --git a/wwjcloud-nest-v1/docker/k6/summary-run.json b/wwjcloud-nest-v1/docker/k6/summary-run.json new file mode 100644 index 00000000..a9858467 --- /dev/null +++ b/wwjcloud-nest-v1/docker/k6/summary-run.json @@ -0,0 +1,248 @@ +{ + "root_group": { + "checks": { + "status1 200": { + "name": "status1 200", + "path": "::status1 200", + "id": "b0966ed9f78c49ab46436f14191cc0c6", + "passes": 5000, + "fails": 0 + }, + "status1 has size": { + "id": "33d01e3c34cb094970818835f2d7d62e", + "passes": 5000, + "fails": 0, + "name": "status1 has size", + "path": "::status1 has size" + }, + "simulate 200": { + "name": "simulate 200", + "path": "::simulate 200", + "id": "cf998bfbb9da1109703c694d2d426536", + "passes": 5000, + "fails": 0 + }, + "simulate ok+emitted": { + "passes": 5000, + "fails": 0, + "name": "simulate ok+emitted", + "path": "::simulate ok+emitted", + "id": "be644ba113375a35db442ae2344525b5" + }, + "statusMid 200": { + "name": "statusMid 200", + "path": "::statusMid 200", + "id": "1f2c62a4c447fdc0317aff26a290f3eb", + "passes": 5000, + "fails": 0 + }, + "statusMid size >= status1+1": { + "id": "e2e294e30f182a67708f18e217c025b3", + "passes": 1781, + "fails": 3219, + "name": "statusMid size >= status1+1", + "path": "::statusMid size >= status1+1" + }, + "process-one 200": { + "passes": 5000, + "fails": 0, + "name": "process-one 200", + "path": "::process-one 200", + "id": "7d02970bccd1fafe9e03179a6046efff" + }, + "drain 200": { + "path": "::drain 200", + "id": "e1fcdd397c94e954b23f487bdd3f0cbb", + "passes": 5000, + "fails": 0, + "name": "drain 200" + }, + "drain processed>=0": { + "passes": 5000, + "fails": 0, + "name": "drain processed>=0", + "path": "::drain processed>=0", + "id": "98bb23e10c63609a18d120bdcfc82112" + }, + "status2 200": { + "name": "status2 200", + "path": "::status2 200", + "id": "660bccd927b58520b53278128962c31b", + "passes": 5000, + "fails": 0 + }, + "status2 has size": { + "name": "status2 has size", + "path": "::status2 has size", + "id": "6211e86b783848c1967e4c5a86c5dde1", + "passes": 5000, + "fails": 0 + }, + "metrics 200": { + "path": "::metrics 200", + "id": "6025b93ff340487de79d60f9527333fc", + "passes": 5000, + "fails": 0, + "name": "metrics 200" + }, + "metrics ai_events_total": { + "name": "metrics ai_events_total", + "path": "::metrics ai_events_total", + "id": "ffc2410f8720ecfb3ea20ee065280a55", + "passes": 5000, + "fails": 0 + }, + "metrics task.failed": { + "path": "::metrics task.failed", + "id": "c2589d168814660827ab007029490d0a", + "passes": 5000, + "fails": 0, + "name": "metrics task.failed" + }, + "metrics failed has severity": { + "name": "metrics failed has severity", + "path": "::metrics failed has severity", + "id": "40e13307a002f007932f6a621c2f1006", + "passes": 5000, + "fails": 0 + }, + "metrics recovery.requested has strategy": { + "id": "1a76328dd3ba77bb8b5f0879a33dc329", + "passes": 5000, + "fails": 0, + "name": "metrics recovery.requested has strategy", + "path": "::metrics recovery.requested has strategy" + }, + "metrics recovery.completed has strategy": { + "passes": 5000, + "fails": 0, + "name": "metrics recovery.completed has strategy", + "path": "::metrics recovery.completed has strategy", + "id": "7c883b8c4858f369c9b139b0df05607b" + } + }, + "name": "", + "path": "", + "id": "d41d8cd98f00b204e9800998ecf8427e", + "groups": {} + }, + "metrics": { + "checks": { + "passes": 81781, + "fails": 3219, + "thresholds": { + "rate>0.9": false + }, + "value": 0.9621294117647059 + }, + "http_req_duration": { + "min": 0.158291, + "med": 3.3887295, + "max": 471.565125, + "p(90)": 15.538350300000001, + "p(95)": 22.278262799999993, + "avg": 7.367607330285692, + "thresholds": { + "p(95)<800": false + } + }, + "http_req_sending": { + "min": 0.001, + "med": 0.002166, + "max": 34.621542, + "p(90)": 0.005625, + "p(95)": 0.009375, + "avg": 0.011979547399999334 + }, + "http_req_blocked": { + "avg": 0.12161503254283203, + "min": 0.000208, + "med": 0.0005, + "max": 37.433583, + "p(90)": 0.001209, + "p(95)": 0.002 + }, + "http_req_waiting": { + "avg": 7.339652192714295, + "min": 0.149167, + "med": 3.3716245000000002, + "max": 471.427542, + "p(90)": 15.510954700000001, + "p(95)": 22.21943719999999 + }, + "iterations": { + "rate": 432.34243543280434, + "count": 5000 + }, + "http_req_duration{expected_response:true}": { + "avg": 7.367607330285692, + "min": 0.158291, + "med": 3.3887295, + "max": 471.565125, + "p(90)": 15.538350300000001, + "p(95)": 22.278262799999993 + }, + "vus_max": { + "value": 200, + "min": 200, + "max": 200 + }, + "vus": { + "value": 200, + "min": 200, + "max": 200 + }, + "http_req_tls_handshaking": { + "max": 0, + "p(90)": 0, + "p(95)": 0, + "avg": 0, + "min": 0, + "med": 0 + }, + "data_sent": { + "count": 3476661, + "rate": 300621.6167828498 + }, + "data_received": { + "rate": 9915248.460592316, + "count": 114668925 + }, + "http_req_failed": { + "passes": 0, + "fails": 35000, + "thresholds": { + "rate<0.05": false + }, + "value": 0 + }, + "iteration_duration": { + "max": 1068.59275, + "p(90)": 487.1109673, + "p(95)": 551.2053738999999, + "avg": 454.3379871375994, + "min": 405.003, + "med": 435.96527100000003 + }, + "http_reqs": { + "count": 35000, + "rate": 3026.3970480296302 + }, + "http_req_connecting": { + "avg": 0.013457821514285722, + "min": 0, + "med": 0, + "max": 22.735584, + "p(90)": 0, + "p(95)": 0 + }, + "http_req_receiving": { + "min": 0.004166, + "med": 0.008708, + "max": 5.218958, + "p(90)": 0.030459, + "p(95)": 0.046625, + "avg": 0.015975590171428515 + } + } +} \ No newline at end of file diff --git a/wwjcloud-nest-v1/docs/I18N-GUIDE.md b/wwjcloud-nest-v1/docs/I18N-GUIDE.md new file mode 100644 index 00000000..54a755cd --- /dev/null +++ b/wwjcloud-nest-v1/docs/I18N-GUIDE.md @@ -0,0 +1,237 @@ +# 多语言(i18n)实现与对齐指南(Java-first) + +本指南说明在 `wwjcloud-nest-v1` 中接入与落地国际化(i18n),并与 Java 项目的语言包与 key 规范保持一致(Java-first)。PHP 只作为业务逻辑层使用同样的 key 获取文案,不维护独立规范。 + +## 背景与原则 +- 单一标准:以 Java 的 `.properties` 和模块化规范为源头标准(source of truth)。 +- 统一 key:点分层级命名,如 `common.success`、`error.auth.invalid_token`。 +- 统一语言:后端统一 `zh-CN`、`en-US`,默认 `zh-CN`。 +- 语言协商:优先级 `?lang=` > `Accept-Language` > 默认。 +- 兜底策略:未命中返回原始 key(与 Java/PHP 行为一致)。 +- 历史兼容:仅为极少量老 key 建立别名映射(如 `SUCCESS` → `common.success`)。 + +## 目录结构(Nest 项目) +建议在本项目内遵循以下结构: +``` +wwjcloud-nest-v1/ + apps/api/src/lang/ + zh-CN/ + common.json + error.json + user.json + en-US/ + common.json + error.json + user.json + libs/wwjcloud-boot/src/infra/lang/ + boot-i18n.module.ts + resolvers.ts # 可选:自定义解析器集合(Query/Header) + apps/api/src/common/ + interceptors/response.interceptor.ts # 使用 i18n 翻译成功提示 + filters/http-exception.filter.ts # 使用 i18n 翻译错误提示 + apps/api/src/app.module.ts # 导入 BootI18nModule +``` + +## 接入步骤 + +### 1) 安装依赖 +使用你项目的包管理器安装: +``` +pnpm add @nestjs/i18n i18n accept-language-parser +# 或 +npm i @nestjs/i18n i18n accept-language-parser +``` + +### 2) 创建 i18n 模块(BootI18nModule) +文件:`libs/wwjcloud-boot/src/infra/lang/boot-i18n.module.ts` +```ts +import { Global, Module } from '@nestjs/common'; +import { I18nModule, I18nJsonParser, HeaderResolver, QueryResolver } from '@nestjs/i18n'; +import { join } from 'path'; + +@Global() +@Module({ + imports: [ + I18nModule.forRoot({ + fallbackLanguage: 'zh-CN', + parser: I18nJsonParser, + parserOptions: { + path: join(process.cwd(), 'wwjcloud-nest-v1/apps/api/src/lang'), + watch: true, + }, + resolvers: [ + { use: QueryResolver, options: ['lang'] }, + new HeaderResolver(), // 默认读取 'Accept-Language' + ], + }), + ], + exports: [I18nModule], +}) +export class BootI18nModule {} +``` + +### 3) 在 AppModule 导入(推荐使用 BootLangModule 软别名) +文件:`apps/api/src/app.module.ts` +```ts +import { Module } from '@nestjs/common'; +import { BootLangModule } from '@libs/wwjcloud-boot/src/infra/lang/boot-lang.module'; + +@Module({ + imports: [BootLangModule /* 以及其他模块 */], +}) +export class AppModule {} +``` + +### 4) 响应拦截器使用 i18n +文件:`apps/api/src/common/interceptors/response.interceptor.ts` +```ts +import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common'; +import { I18nService } from '@nestjs/i18n'; +import { Observable, map } from 'rxjs'; + +@Injectable() +export class ResponseInterceptor implements NestInterceptor { + constructor(private readonly i18n: I18nService) {} + + intercept(ctx: ExecutionContext, next: CallHandler): Observable { + const req = ctx.switchToHttp().getRequest(); + return next.handle().pipe( + map((original) => { + const { code = 0, data = null, msg_key } = original ?? {}; + const key = msg_key || 'common.success'; + const msg = this.i18n.translate(key, { + lang: req.i18nLang, // 来自解析器(Query/Header) + defaultValue: key, + }); + return { code, msg_key: key, msg, data }; + }) + ); + } +} +``` + +### 5) 异常过滤器使用 i18n +文件:`apps/api/src/common/filters/http-exception.filter.ts` +```ts +import { ArgumentsHost, Catch, ExceptionFilter, HttpException } from '@nestjs/common'; +import { I18nService } from '@nestjs/i18n'; + +@Catch() +export class HttpExceptionFilter implements ExceptionFilter { + constructor(private readonly i18n: I18nService) {} + + catch(exception: unknown, host: ArgumentsHost) { + const ctx = host.switchToHttp(); + const req = ctx.getRequest(); + const res = ctx.getResponse(); + + let code = 500; + let msgKey = 'error.common.unknown'; + let args: Record | undefined; + + if (exception instanceof HttpException) { + const response: any = exception.getResponse(); + code = exception.getStatus(); + msgKey = response?.msg_key || msgKey; + args = response?.args; + } + + const msg = this.i18n.translate(msgKey, { + lang: req.i18nLang, + defaultValue: msgKey, + args, + }); + + res.status(code).json({ code, msg_key: msgKey, msg, data: null }); + } +} +``` + +### 6) 语言资源示例 +文件:`apps/api/src/lang/zh-CN/common.json` +```json +{ + "success": "操作成功" +} +``` +文件:`apps/api/src/lang/en-US/common.json` +```json +{ + "success": "Success" +} +``` +文件:`apps/api/src/lang/zh-CN/error.json` +```json +{ + "auth": { "invalid_token": "令牌无效或已过期" }, + "common": { "unknown": "系统繁忙,请稍后重试" } +} +``` +文件:`apps/api/src/lang/en-US/error.json` +```json +{ + "auth": { "invalid_token": "Invalid or expired token" }, + "common": { "unknown": "Service is busy, please try later" } +} +``` +文件:`apps/api/src/lang/zh-CN/user.json` +```json +{ + "profile": { "updated": "资料已更新" } +} +``` +文件:`apps/api/src/lang/en-US/user.json` +```json +{ + "profile": { "updated": "Profile updated" } +} +``` + +### 7) 历史 key 别名(可选) +在拦截器或统一工具内对少量老 key 做映射: +```ts +const aliasMap = new Map([ + ['SUCCESS', 'common.success'], +]); + +function mapAlias(key: string) { return aliasMap.get(key) || key; } +``` + +### 8) 使用示例(Controller 返回约定) +```ts +return { code: 0, msg_key: 'user.profile.updated', data: { id: 1 } }; +``` + +## 语言协商与 DI 导入规范 +- 解析优先级:`Query(lang)` > `Header(Accept-Language)` > 默认 `zh-CN`。 +- DI 与导入:推荐使用 `BootLangModule`(底层为 `BootI18nModule`)仅在 `AppModule` 里导入一次(全局模块),遵循项目的「Nest DI 与导入规范」。拦截器与过滤器以 Provider 方式注入 `I18nService`。 + +## 测试与验证 +- 默认语言: +``` +curl http://localhost:3000/api/ping +# => { code:0, msg_key:"common.success", msg:"操作成功" } +``` +- 指定英文: +``` +curl -H "Accept-Language: en-US" http://localhost:3000/api/ping +# 或 +curl "http://localhost:3000/api/ping?lang=en-US" +# => { code:0, msg_key:"common.success", msg:"Success" } +``` +- 错误示例: +``` +# 返回 { code:401, msg_key:"error.auth.invalid_token", msg:"令牌无效或已过期" } +``` + +## 维护策略 +- 新增文案:按模块/域定义 key,避免重复;中英文同时维护。 +- 变更文案:保持 key 不变,更新不同语言的文本内容。 +- 清理策略:定期检查未使用 key,删除并在变更日志记录。 + +## 与 Java/PHP 的对齐 +- Java:沿用 `.properties` 的模块化与 key 命名;Nest 端资源内容与 Java 的 key 同名对齐。 +- PHP:继续使用 `get_lang(key)`,逐步统一到 Java 的点分 key,无需维护独立资源规范。 + +// 术语对齐:对外事件与模块名统一使用 `lang`;内部技术栈保留 `i18n`。 +如需我在 `wwjcloud-nest-v1` 中继续完成代码接入(创建 `BootI18nModule`、改造拦截器与异常过滤器、添加示例语言资源),请在本指南基础上确认,我将按以上目录与步骤实施。 \ No newline at end of file diff --git a/wwjcloud-nest-v1/eslint-report.json b/wwjcloud-nest-v1/eslint-report.json new file mode 100644 index 00000000..8a1a40ff --- /dev/null +++ b/wwjcloud-nest-v1/eslint-report.json @@ -0,0 +1 @@ +[{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/apps/api/src/app.module.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/apps/api/src/main.ts","messages":[{"ruleId":"@typescript-eslint/no-floating-promises","severity":2,"message":"Promises must be awaited, end with a call to .catch, end with a call to .then with a rejection handler or be explicitly marked as ignored with the `void` operator.","line":15,"column":1,"nodeType":"ExpressionStatement","messageId":"floatingVoid","endLine":15,"endColumn":13,"suggestions":[{"messageId":"floatingFixVoid","fix":{"range":[514,514],"text":"void "},"desc":"Add void operator to ignore."},{"messageId":"floatingFixAwait","fix":{"range":[514,514],"text":"await "},"desc":"Add await operator."}]}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\nimport { BootHttp } from '@wwjCommon/http/boot-http';\nimport { ConfigService } from '@nestjs/config';\n\nasync function bootstrap() {\n const app = await NestFactory.create(AppModule);\n await BootHttp.start(app);\n const config = app.get(ConfigService);\n const raw = config.get('PORT');\n const port =\n typeof raw === 'number' ? raw : parseInt(String(raw ?? '3000'), 10) || 3000;\n await app.listen(port);\n}\nbootstrap();\n","usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/apps/api/src/secure.controller.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-addon/src/index.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-addon/src/registry.ts","messages":[{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":1,"column":31,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":1,"endColumn":34,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[30,33],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[30,33],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"export type AddonModuleType = any;\n\n// Keyed by lowercase addon name, e.g. { 'oss': OssAddonModule }\nexport const ADDON_REGISTRY: Record = {};\n","usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-addon/src/wwjcloud-addon.module.ts","messages":[{"ruleId":"@typescript-eslint/no-unsafe-return","severity":2,"message":"Unsafe return of a value of type `any`.","line":21,"column":9,"nodeType":"ReturnStatement","messageId":"unsafeReturn","endLine":21,"endColumn":72},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":24,"column":12,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":24,"endColumn":15,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[729,732],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[729,732],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":24,"column":77,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":24,"endColumn":80,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[794,797],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[794,797],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]}],"suppressedMessages":[],"errorCount":3,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { Module, DynamicModule, ForwardReference, Type } from '@nestjs/common';\nimport { ADDON_REGISTRY } from './registry';\n\n@Module({\n imports: [],\n providers: [],\n exports: [],\n})\nexport class AddonModule {\n static register(): DynamicModule {\n const enabledKeys = Object.keys(process.env).filter(\n (k) =>\n /^ADDON_.+_ENABLED$/.test(k) &&\n ['true', '1', 'yes'].includes(String(process.env[k]).toLowerCase()),\n );\n\n const imports = enabledKeys\n .map((k) => {\n const m = k.match(/^ADDON_(.+)_ENABLED$/);\n const key = m ? m[1].toLowerCase() : undefined;\n return key && ADDON_REGISTRY[key] ? ADDON_REGISTRY[key] : null;\n })\n .filter(Boolean) as Array<\n Type | DynamicModule | Promise | ForwardReference\n >;\n\n return {\n module: AddonModule,\n imports,\n exports: [],\n };\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/events.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/healing/healing.module.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/healing/interfaces/healing.interface.ts","messages":[{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":11,"column":20,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":11,"endColumn":23,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[161,164],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[161,164],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":21,"column":10,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":21,"endColumn":13,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[352,355],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[352,355],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":22,"column":28,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":22,"endColumn":31,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[384,387],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[384,387],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":35,"column":12,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":35,"endColumn":15,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[581,584],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[581,584],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":44,"column":20,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":44,"endColumn":23,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[728,731],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[728,731],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":45,"column":17,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":45,"endColumn":20,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[759,762],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[759,762],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":64,"column":28,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":64,"endColumn":31,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[1130,1133],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[1130,1133],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":73,"column":27,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":73,"endColumn":30,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[1291,1294],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[1291,1294],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]}],"suppressedMessages":[],"errorCount":8,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * Healing Module Interfaces - AI 自愈模块接口定义\n */\n\n/**\n * 恢复策略接口\n */\nexport interface RecoveryStrategy {\n name: string;\n priority: number;\n canHandle(error: any): boolean;\n execute(context: RecoveryContext): Promise;\n getEstimatedTime(): number;\n}\n\n/**\n * 恢复上下文接口\n */\nexport interface RecoveryContext {\n taskId: string;\n error: any;\n metadata: Record;\n retryCount: number;\n maxRetries: number;\n startTime: number;\n}\n\n/**\n * 恢复结果接口\n */\nexport interface RecoveryResult {\n success: boolean;\n strategy: string;\n duration: number;\n result?: any;\n error?: string;\n nextAction?: 'retry' | 'escalate' | 'abort';\n}\n\n/**\n * 自愈监听器接口\n */\nexport interface SelfHealListener {\n canHandle(event: any): boolean;\n handle(event: any): Promise;\n getPriority(): number;\n}\n\n/**\n * 错误分析结果接口\n */\nexport interface ErrorAnalysis {\n errorType: string;\n severity: 'low' | 'medium' | 'high' | 'critical';\n category:\n | 'network'\n | 'database'\n | 'service'\n | 'validation'\n | 'system'\n | 'unknown';\n recoverable: boolean;\n suggestedStrategies: string[];\n metadata: Record;\n}\n\n/**\n * 健康检查结果接口\n */\nexport interface HealthCheckResult {\n component: string;\n status: 'healthy' | 'degraded' | 'unhealthy';\n details: Record;\n timestamp: number;\n responseTime?: number;\n}\n\n/**\n * 自愈统计信息接口\n */\nexport interface HealingStats {\n totalRecoveries: number;\n successfulRecoveries: number;\n failedRecoveries: number;\n averageRecoveryTime: number;\n strategiesUsed: Record;\n errorCategories: Record;\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/healing/listeners/ai-recovery.listener.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/healing/listeners/ai-self-heal.listener.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/healing/services/ai-recovery.service.ts","messages":[{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .message on an `any` value.","line":40,"column":52,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":40,"endColumn":59},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async arrow function has no 'await' expression.","line":45,"column":52,"nodeType":"ArrowFunctionExpression","messageId":"missingAwait","endLine":45,"endColumn":54,"suggestions":[{"messageId":"removeAsync","fix":{"range":[1560,1566],"text":""},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an error typed value.","line":180,"column":13,"nodeType":"VariableDeclarator","messageId":"anyAssignment","endLine":180,"endColumn":60},{"ruleId":"@typescript-eslint/no-unsafe-argument","severity":2,"message":"Unsafe argument of type error typed assigned to a parameter of type `string | undefined`.","line":184,"column":9,"nodeType":"Identifier","messageId":"unsafeArgument","endLine":184,"endColumn":16},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an error typed value.","line":188,"column":9,"nodeType":"Property","messageId":"anyAssignment","endLine":188,"endColumn":26}],"suppressedMessages":[],"errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { Injectable, Logger } from '@nestjs/common';\nimport { CacheService } from '@wwjCommon/cache/cache.service';\nimport { LockService } from '@wwjCommon/cache/lock.service';\nimport { MetricsService } from '@wwjCommon/metrics/metrics.service';\nimport {\n TASK_RECOVERY_COMPLETED_EVENT,\n TaskRecoveryRequestedPayload,\n TaskRecoveryCompletedPayload,\n TASK_FAILED_EVENT,\n TASK_RECOVERY_REQUESTED_EVENT,\n Severity,\n TaskFailedPayload,\n} from '@wwjAi';\nimport { EventBus } from '@wwjCommon/events/event-bus';\nimport { QueueService } from '@wwjCommon/queue/queue.service';\nimport { ConfigService } from '@nestjs/config';\nimport { AiStrategyService } from '@wwjAi';\n\nconst QUEUE_KEY = 'ai:recovery:queue';\nconst QUEUE_LOCK_KEY = 'ai:recovery:lock';\n\n@Injectable()\nexport class AiRecoveryService {\n private readonly logger = new Logger(AiRecoveryService.name);\n // metrics injected via constructor now\n\n constructor(\n private readonly cache: CacheService,\n private readonly lock: LockService,\n private readonly metrics: MetricsService,\n private readonly eventBus: EventBus,\n private readonly queue: QueueService,\n private readonly config: ConfigService,\n private readonly strategy: AiStrategyService,\n ) {}\n\n onModuleInit() {\n // 初始化可选的队列(BullMQ / Kafka)\n this.queue.init('ai-recovery').catch((err) => {\n this.logger.error(`Queue init failed: ${err?.message || err}`);\n });\n if (this.queue.isBullmq() || this.queue.isKafka()) {\n // 注册 Worker 处理恢复请求(BullMQ/Kafka 共用统一处理器)\n this.queue.registerWorker(\n async (data: TaskRecoveryRequestedPayload) => {\n const start = Date.now();\n this.logger.log(\n `Processing recovery (worker) for taskId=${data.taskId}`,\n );\n const durationMs = Date.now() - start;\n const payload: TaskRecoveryCompletedPayload = {\n taskId: data.taskId,\n strategy: data.strategy,\n result: 'success',\n durationMs,\n timestamp: Date.now(),\n };\n this.eventBus.emit(TASK_RECOVERY_COMPLETED_EVENT, payload);\n this.metrics?.observeAiEvent(\n TASK_RECOVERY_COMPLETED_EVENT,\n undefined,\n data.strategy,\n );\n },\n 1,\n 'ai-recovery',\n );\n }\n }\n\n async enqueue(req: TaskRecoveryRequestedPayload): Promise {\n // 若启用队列,优先走队列(BullMQ/Kafka)\n if (this.queue.isBullmq() || this.queue.isKafka()) {\n await this.queue.enqueue('ai.recovery', req);\n // BullMQ 可以返回计数,Kafka 不易获取队列深度,这里统一返回 0 或 BullMQ 等待数量\n if (this.queue.isBullmq()) {\n const counts = await this.queue.getQueueCounts();\n const waiting = counts?.waiting ?? 0;\n const delayed = counts?.delayed ?? 0;\n return waiting + delayed;\n }\n return 0;\n }\n // 默认使用内存/Redis 模拟队列\n const list =\n (await this.cache.get(QUEUE_KEY)) ?? [];\n list.push(req);\n await this.cache.set(QUEUE_KEY, list);\n this.logger.log(\n `Enqueued recovery request: taskId=${req.taskId}, strategy=${req.strategy}`,\n );\n return list.length;\n }\n\n async status() {\n if (this.queue.isBullmq()) {\n const counts = await this.queue.getQueueCounts();\n const waiting = counts?.waiting ?? 0;\n const delayed = counts?.delayed ?? 0;\n return { size: waiting + delayed };\n }\n if (this.queue.isKafka()) {\n // Kafka 模式下无法快速获取队列大小,返回 0 以表示“由后台异步处理”\n return { size: 0 };\n }\n const list =\n (await this.cache.get(QUEUE_KEY)) ?? [];\n return { size: list.length };\n }\n\n async processOne(): Promise {\n // 队列模式下由 Worker 自动处理,processOne 返回 false 表示无需手动触发\n if (this.queue.isBullmq() || this.queue.isKafka()) return false;\n\n const list =\n (await this.cache.get(QUEUE_KEY)) ?? [];\n if (list.length === 0) return false;\n\n const lockToken = await this.lock.acquire(QUEUE_LOCK_KEY, 5000);\n if (!lockToken) return false; // someone else is processing\n\n try {\n const req = list.shift()!;\n await this.cache.set(QUEUE_KEY, list);\n // simulate processing logic here\n const start = Date.now();\n this.logger.log(`Processed recovery for taskId=${req.taskId}`);\n const durationMs = Date.now() - start;\n this.logger.log(\n `Processed recovery request: taskId=${req.taskId}, strategy=${req.strategy}`,\n );\n const payload: TaskRecoveryCompletedPayload = {\n taskId: req.taskId,\n strategy: req.strategy,\n result: 'success',\n durationMs,\n timestamp: Date.now(),\n };\n this.eventBus.emit(TASK_RECOVERY_COMPLETED_EVENT, payload);\n this.metrics?.observeAiEvent(\n TASK_RECOVERY_COMPLETED_EVENT,\n undefined,\n req.strategy,\n );\n return true;\n } finally {\n await this.lock.release(QUEUE_LOCK_KEY, lockToken);\n }\n }\n\n async drain(max = 10): Promise {\n // 队列模式下由 Worker 自动处理,这里返回 0 表示无需手动 drain\n if (this.queue.isBullmq() || this.queue.isKafka()) return 0;\n\n let processed = 0;\n while (processed < max) {\n const ok = await this.processOne();\n if (!ok) break;\n processed++;\n }\n return processed;\n }\n async simulateFailure(params: {\n taskId?: string;\n severity?: Severity;\n reason?: string;\n }): Promise<{ ok: true; emitted: boolean }> {\n const taskId = params.taskId ?? 'demo-task';\n const severity: Severity = params.severity ?? 'medium';\n const reason = params.reason ?? 'demo failure';\n const payload: TaskFailedPayload = {\n taskId,\n reason,\n severity,\n timestamp: Date.now(),\n };\n this.eventBus.emit(TASK_FAILED_EVENT, payload);\n this.metrics?.observeAiEvent(TASK_FAILED_EVENT, severity);\n if (this.readBoolean('AI_SIMULATE_DIRECT_ENQUEUE')) {\n const decided = this.strategy.decideStrategy(payload);\n this.metrics?.observeAiEvent(\n TASK_RECOVERY_REQUESTED_EVENT,\n undefined,\n decided,\n );\n const request: TaskRecoveryRequestedPayload = {\n taskId,\n strategy: decided,\n requestedBy: 'manual',\n timestamp: Date.now(),\n };\n await this.enqueue(request);\n }\n return { ok: true, emitted: true };\n }\n private readBoolean(key: string): boolean {\n const v = this.config.get(key);\n if (typeof v === 'boolean') return v;\n if (typeof v === 'string')\n return ['true', '1', 'yes', 'on'].includes(v.toLowerCase());\n return false;\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/healing/services/ai-strategy.service.ts","messages":[{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an error typed value.","line":21,"column":11,"nodeType":"VariableDeclarator","messageId":"anyAssignment","endLine":21,"endColumn":43},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Computed name [evt.severity] resolves to an `error` typed value.","line":21,"column":19,"nodeType":"MemberExpression","messageId":"unsafeComputedMemberAccess","endLine":21,"endColumn":31},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .severity on an `error` typed value.","line":21,"column":23,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":21,"endColumn":31},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .metadata on an `error` typed value.","line":23,"column":22,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":23,"endColumn":30}],"suppressedMessages":[],"errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { Injectable } from '@nestjs/common';\nimport { ConfigService } from '@nestjs/config';\nimport type { Severity, RecoveryStrategy, TaskFailedPayload } from '../types';\n\n@Injectable()\nexport class AiStrategyService {\n constructor(private readonly config: ConfigService) {}\n\n decideStrategy(evt: TaskFailedPayload): RecoveryStrategy {\n // allow override via env for quick testing\n const override = this.config.get('AI_STRATEGY_OVERRIDE');\n if (override && this.isValidStrategy(override)) {\n return override as RecoveryStrategy;\n }\n // simple mapping by severity; can be extended to rules by metadata\n const map: Record = {\n low: 'retry',\n medium: 'retry',\n high: 'fallback',\n };\n const s = map[evt.severity] ?? 'retry';\n // extend: if metadata.hint === 'reroute', do reroute\n const hint = evt.metadata?.hint as string | undefined;\n if (hint === 'reroute') return 'reroute';\n if (hint === 'restart') return 'restart';\n return s;\n }\n\n private isValidStrategy(v: string): boolean {\n return ['retry', 'restart', 'reroute', 'fallback', 'noop'].includes(v);\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/healing/strategies/fallback.strategy.ts","messages":[{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":26,"column":20,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":26,"endColumn":23,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[506,509],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[506,509],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .code on an `any` value.","line":36,"column":16,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":36,"endColumn":20},{"ruleId":"@typescript-eslint/no-unsafe-argument","severity":2,"message":"Unsafe argument of type `any` assigned to a parameter of type `string`.","line":36,"column":48,"nodeType":"MemberExpression","messageId":"unsafeArgument","endLine":36,"endColumn":58},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .code on an `any` value.","line":36,"column":54,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":36,"endColumn":58},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .severity on an `any` value.","line":41,"column":16,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":41,"endColumn":24},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .severity on an `any` value.","line":41,"column":46,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":41,"endColumn":54},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":58,"column":13,"nodeType":"VariableDeclarator","messageId":"anyAssignment","endLine":58,"endColumn":70},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":64,"column":9,"nodeType":"Property","messageId":"anyAssignment","endLine":64,"endColumn":31},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":93,"column":73,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":93,"endColumn":76,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[2007,2010],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[2007,2010],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":94,"column":11,"nodeType":"VariableDeclarator","messageId":"anyAssignment","endLine":94,"endColumn":61},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'handleDatabaseFallback' has no 'await' expression.","line":119,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":119,"endColumn":39,"suggestions":[{"messageId":"removeAsync","fix":{"range":[2608,2676],"text":"handleDatabaseFallback(context: RecoveryContext): any"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":119,"column":75,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":119,"endColumn":78,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[2672,2675],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[2672,2675],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":125,"column":7,"nodeType":"Property","messageId":"anyAssignment","endLine":125,"endColumn":49},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'handleApiFallback' has no 'await' expression.","line":134,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":134,"endColumn":34,"suggestions":[{"messageId":"removeAsync","fix":{"range":[3008,3071],"text":"handleApiFallback(context: RecoveryContext): any"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":134,"column":70,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":134,"endColumn":73,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[3067,3070],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[3067,3070],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":140,"column":7,"nodeType":"Property","messageId":"anyAssignment","endLine":140,"endColumn":75},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":149,"column":72,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":149,"endColumn":75,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[3479,3482],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[3479,3482],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":155,"column":7,"nodeType":"Property","messageId":"anyAssignment","endLine":155,"endColumn":52},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'handleFileFallback' has no 'await' expression.","line":164,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":164,"endColumn":35,"suggestions":[{"messageId":"removeAsync","fix":{"range":[3804,3868],"text":"handleFileFallback(context: RecoveryContext): any"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":164,"column":71,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":164,"endColumn":74,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[3864,3867],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[3864,3867],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":170,"column":7,"nodeType":"Property","messageId":"anyAssignment","endLine":170,"endColumn":50},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'handleGenericFallback' has no 'await' expression.","line":179,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":179,"endColumn":38,"suggestions":[{"messageId":"removeAsync","fix":{"range":[4191,4258],"text":"handleGenericFallback(context: RecoveryContext): any"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":179,"column":74,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":179,"endColumn":77,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[4254,4257],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[4254,4257],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":193,"column":72,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":193,"endColumn":75,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[4606,4609],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[4606,4609],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-call","severity":2,"message":"Unsafe call of a(n) `any` typed value.","line":198,"column":20,"nodeType":"MemberExpression","messageId":"unsafeCall","endLine":198,"endColumn":55}],"suppressedMessages":[],"errorCount":25,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { Injectable, Logger } from '@nestjs/common';\nimport {\n RecoveryStrategy,\n RecoveryContext,\n RecoveryResult,\n} from '../interfaces/healing.interface';\n\n/**\n * Fallback Recovery Strategy - 降级恢复策略\n *\n * 职责:\n * - 提供服务降级方案\n * - 处理不可恢复的错误\n * - 确保系统基本功能可用\n */\n@Injectable()\nexport class FallbackStrategy implements RecoveryStrategy {\n private readonly logger = new Logger(FallbackStrategy.name);\n\n readonly name = 'fallback';\n readonly priority = 3;\n\n /**\n * 判断是否可以处理该错误\n */\n canHandle(error: any): boolean {\n // 需要降级处理的错误类型\n const fallbackErrors = [\n 'SERVICE_UNAVAILABLE',\n 'DEPENDENCY_FAILURE',\n 'RESOURCE_EXHAUSTED',\n 'CIRCUIT_BREAKER_OPEN',\n 'RATE_LIMIT_EXCEEDED',\n ];\n\n if (error?.code && fallbackErrors.includes(error.code)) {\n return true;\n }\n\n // 检查错误严重程度\n if (error?.severity === 'high' || error?.severity === 'critical') {\n return true;\n }\n\n return false;\n }\n\n /**\n * 执行降级恢复\n */\n async execute(context: RecoveryContext): Promise {\n const startTime = Date.now();\n\n this.logger.log(`Executing fallback strategy for task: ${context.taskId}`);\n\n try {\n // 根据任务类型选择降级方案\n const fallbackResult = await this.selectFallbackOption(context);\n\n return {\n success: true,\n strategy: this.name,\n duration: Date.now() - startTime,\n result: fallbackResult,\n nextAction: 'abort', // 降级后通常不再重试\n };\n } catch (error) {\n this.logger.error(\n `Fallback strategy failed for task: ${context.taskId}`,\n error,\n );\n\n return {\n success: false,\n strategy: this.name,\n duration: Date.now() - startTime,\n error: error instanceof Error ? error.message : 'Fallback failed',\n nextAction: 'abort',\n };\n }\n }\n\n /**\n * 获取预估执行时间\n */\n getEstimatedTime(): number {\n return 2000; // 2秒预估时间\n }\n\n /**\n * 选择降级方案\n */\n private async selectFallbackOption(context: RecoveryContext): Promise {\n const taskType = context.metadata?.taskType || 'unknown';\n\n this.logger.debug(`Selecting fallback option for task type: ${taskType}`);\n\n switch (taskType) {\n case 'database':\n return await this.handleDatabaseFallback(context);\n\n case 'api':\n return await this.handleApiFallback(context);\n\n case 'cache':\n return await this.handleCacheFallback(context);\n\n case 'file':\n return await this.handleFileFallback(context);\n\n default:\n return await this.handleGenericFallback(context);\n }\n }\n\n /**\n * 数据库降级处理\n */\n private async handleDatabaseFallback(context: RecoveryContext): Promise {\n this.logger.warn(`Database fallback for task: ${context.taskId}`);\n\n // 返回缓存数据或默认值\n return {\n fallbackType: 'database',\n data: context.metadata?.cachedData || null,\n message: 'Using cached data due to database unavailability',\n timestamp: Date.now(),\n };\n }\n\n /**\n * API 降级处理\n */\n private async handleApiFallback(context: RecoveryContext): Promise {\n this.logger.warn(`API fallback for task: ${context.taskId}`);\n\n // 返回默认响应或离线数据\n return {\n fallbackType: 'api',\n data: context.metadata?.defaultResponse || { status: 'unavailable' },\n message: 'Using default response due to API unavailability',\n timestamp: Date.now(),\n };\n }\n\n /**\n * 缓存降级处理\n */\n private async handleCacheFallback(context: RecoveryContext): Promise {\n this.logger.warn(`Cache fallback for task: ${context.taskId}`);\n\n // 直接访问数据源\n return {\n fallbackType: 'cache',\n data: await this.fetchFromDataSource(context),\n message: 'Bypassing cache and fetching from data source',\n timestamp: Date.now(),\n };\n }\n\n /**\n * 文件降级处理\n */\n private async handleFileFallback(context: RecoveryContext): Promise {\n this.logger.warn(`File fallback for task: ${context.taskId}`);\n\n // 使用备用文件或默认内容\n return {\n fallbackType: 'file',\n data: context.metadata?.backupContent || '',\n message: 'Using backup content due to file access failure',\n timestamp: Date.now(),\n };\n }\n\n /**\n * 通用降级处理\n */\n private async handleGenericFallback(context: RecoveryContext): Promise {\n this.logger.warn(`Generic fallback for task: ${context.taskId}`);\n\n return {\n fallbackType: 'generic',\n data: null,\n message: 'Service temporarily unavailable, please try again later',\n timestamp: Date.now(),\n };\n }\n\n /**\n * 从数据源获取数据\n */\n private async fetchFromDataSource(context: RecoveryContext): Promise {\n // 这里应该实现从原始数据源获取数据的逻辑\n // 具体实现取决于数据源类型\n\n if (context.metadata?.dataSourceFunction) {\n return await context.metadata.dataSourceFunction();\n }\n\n return null;\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/healing/strategies/retry.strategy.ts","messages":[{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":26,"column":20,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":26,"endColumn":23,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[492,495],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[492,495],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .code on an `any` value.","line":37,"column":16,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":37,"endColumn":20},{"ruleId":"@typescript-eslint/no-unsafe-argument","severity":2,"message":"Unsafe argument of type `any` assigned to a parameter of type `string`.","line":37,"column":49,"nodeType":"MemberExpression","messageId":"unsafeArgument","endLine":37,"endColumn":59},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .code on an `any` value.","line":37,"column":55,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":37,"endColumn":59},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .message on an `any` value.","line":41,"column":16,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":41,"endColumn":23},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":42,"column":13,"nodeType":"VariableDeclarator","messageId":"anyAssignment","endLine":42,"endColumn":50},{"ruleId":"@typescript-eslint/no-unsafe-call","severity":2,"message":"Unsafe call of a(n) `any` typed value.","line":42,"column":23,"nodeType":"MemberExpression","messageId":"unsafeCall","endLine":42,"endColumn":48},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .message on an `any` value.","line":42,"column":29,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":42,"endColumn":36},{"ruleId":"@typescript-eslint/no-unsafe-return","severity":2,"message":"Unsafe return of a value of type `any`.","line":43,"column":7,"nodeType":"ReturnStatement","messageId":"unsafeReturn","endLine":48,"endColumn":9},{"ruleId":"@typescript-eslint/no-unsafe-call","severity":2,"message":"Unsafe call of a(n) `any` typed value.","line":44,"column":9,"nodeType":"MemberExpression","messageId":"unsafeCall","endLine":44,"endColumn":25},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .includes on an `any` value.","line":44,"column":17,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":44,"endColumn":25},{"ruleId":"@typescript-eslint/no-unsafe-call","severity":2,"message":"Unsafe call of a(n) `any` typed value.","line":45,"column":9,"nodeType":"MemberExpression","messageId":"unsafeCall","endLine":45,"endColumn":25},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .includes on an `any` value.","line":45,"column":17,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":45,"endColumn":25},{"ruleId":"@typescript-eslint/no-unsafe-call","severity":2,"message":"Unsafe call of a(n) `any` typed value.","line":46,"column":9,"nodeType":"MemberExpression","messageId":"unsafeCall","endLine":46,"endColumn":25},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .includes on an `any` value.","line":46,"column":17,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":46,"endColumn":25},{"ruleId":"@typescript-eslint/no-unsafe-call","severity":2,"message":"Unsafe call of a(n) `any` typed value.","line":47,"column":9,"nodeType":"MemberExpression","messageId":"unsafeCall","endLine":47,"endColumn":25},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .includes on an `any` value.","line":47,"column":17,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":47,"endColumn":25},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":85,"column":13,"nodeType":"VariableDeclarator","messageId":"anyAssignment","endLine":85,"endColumn":54},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":91,"column":9,"nodeType":"Property","messageId":"anyAssignment","endLine":91,"endColumn":15},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":135,"column":65,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":135,"endColumn":68,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[3060,3063],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[3060,3063],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-call","severity":2,"message":"Unsafe call of a(n) `any` typed value.","line":143,"column":20,"nodeType":"MemberExpression","messageId":"unsafeCall","endLine":143,"endColumn":53}],"suppressedMessages":[],"errorCount":21,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { Injectable, Logger } from '@nestjs/common';\nimport {\n RecoveryStrategy,\n RecoveryContext,\n RecoveryResult,\n} from '../interfaces/healing.interface';\n\n/**\n * Retry Recovery Strategy - 重试恢复策略\n *\n * 职责:\n * - 处理可重试的错误\n * - 实现指数退避重试机制\n * - 监控重试成功率\n */\n@Injectable()\nexport class RetryStrategy implements RecoveryStrategy {\n private readonly logger = new Logger(RetryStrategy.name);\n\n readonly name = 'retry';\n readonly priority = 1;\n\n /**\n * 判断是否可以处理该错误\n */\n canHandle(error: any): boolean {\n // 可重试的错误类型\n const retryableErrors = [\n 'ECONNRESET',\n 'ETIMEDOUT',\n 'ENOTFOUND',\n 'ECONNREFUSED',\n 'NETWORK_ERROR',\n 'TEMPORARY_FAILURE',\n ];\n\n if (error?.code && retryableErrors.includes(error.code)) {\n return true;\n }\n\n if (error?.message) {\n const message = error.message.toLowerCase();\n return (\n message.includes('timeout') ||\n message.includes('connection') ||\n message.includes('network') ||\n message.includes('temporary')\n );\n }\n\n return false;\n }\n\n /**\n * 执行重试恢复\n */\n async execute(context: RecoveryContext): Promise {\n const startTime = Date.now();\n\n this.logger.log(\n `Executing retry strategy for task: ${context.taskId}, attempt: ${context.retryCount + 1}`,\n );\n\n try {\n // 计算退避延迟\n const delay = this.calculateBackoffDelay(context.retryCount);\n\n if (delay > 0) {\n this.logger.debug(`Waiting ${delay}ms before retry`);\n await this.sleep(delay);\n }\n\n // 检查是否超过最大重试次数\n if (context.retryCount >= context.maxRetries) {\n return {\n success: false,\n strategy: this.name,\n duration: Date.now() - startTime,\n error: 'Maximum retry attempts exceeded',\n nextAction: 'escalate',\n };\n }\n\n // 执行重试逻辑\n const result = await this.performRetry(context);\n\n return {\n success: true,\n strategy: this.name,\n duration: Date.now() - startTime,\n result,\n nextAction: 'retry',\n };\n } catch (error) {\n this.logger.error(\n `Retry strategy failed for task: ${context.taskId}`,\n error,\n );\n\n return {\n success: false,\n strategy: this.name,\n duration: Date.now() - startTime,\n error: error instanceof Error ? error.message : 'Unknown error',\n nextAction:\n context.retryCount < context.maxRetries ? 'retry' : 'escalate',\n };\n }\n }\n\n /**\n * 获取预估执行时间\n */\n getEstimatedTime(): number {\n return 5000; // 5秒预估时间\n }\n\n /**\n * 计算指数退避延迟\n */\n private calculateBackoffDelay(retryCount: number): number {\n // 指数退避:2^retryCount * 1000ms,最大30秒\n const baseDelay = 1000;\n const maxDelay = 30000;\n const delay = Math.min(baseDelay * Math.pow(2, retryCount), maxDelay);\n\n // 添加随机抖动,避免雷群效应\n const jitter = Math.random() * 0.1 * delay;\n return Math.floor(delay + jitter);\n }\n\n /**\n * 执行重试\n */\n private async performRetry(context: RecoveryContext): Promise {\n // 这里应该重新执行原始任务\n // 具体实现取决于任务类型和上下文\n\n this.logger.debug(`Performing retry for task: ${context.taskId}`);\n\n // 模拟重试逻辑\n if (context.metadata?.originalFunction) {\n return await context.metadata.originalFunction();\n }\n\n // 如果没有原始函数,返回成功标记\n return { retried: true, timestamp: Date.now() };\n }\n\n /**\n * 睡眠函数\n */\n private sleep(ms: number): Promise {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/index.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/manager/bootstrap/ai-bootstrap.provider.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/manager/controllers/ai.controller.ts","messages":[{"ruleId":"@typescript-eslint/no-unused-vars","severity":2,"message":"'TASK_FAILED_EVENT' is defined but never used.","line":9,"column":10,"nodeType":null,"messageId":"unusedVar","endLine":9,"endColumn":27},{"ruleId":"@typescript-eslint/no-unused-vars","severity":2,"message":"'TASK_RECOVERY_REQUESTED_EVENT' is defined but never used.","line":9,"column":29,"nodeType":null,"messageId":"unusedVar","endLine":9,"endColumn":58},{"ruleId":"@typescript-eslint/no-unused-vars","severity":2,"message":"'TaskFailedPayload' is defined but never used.","line":12,"column":3,"nodeType":null,"messageId":"unusedVar","endLine":12,"endColumn":20},{"ruleId":"@typescript-eslint/no-unused-vars","severity":2,"message":"'TaskRecoveryRequestedPayload' is defined but never used.","line":13,"column":3,"nodeType":null,"messageId":"unusedVar","endLine":13,"endColumn":31}],"suppressedMessages":[],"errorCount":4,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { Controller, Get, Query, UseGuards, Post } from '@nestjs/common';\nimport { RateLimitGuard } from '@wwjCommon/http/rate-limit.guard';\nimport { AiRecoveryService } from '../../healing/services/ai-recovery.service';\nimport { ApiTags } from '@nestjs/swagger';\nimport { ApiQuery } from '@nestjs/swagger';\nimport { IsInt, IsOptional, Min, IsString, IsIn } from 'class-validator';\nimport { Public, Roles } from '@wwjCommon/auth/decorators';\nimport { EventBus } from '@wwjCommon/events/event-bus';\nimport { TASK_FAILED_EVENT, TASK_RECOVERY_REQUESTED_EVENT } from '@wwjAi';\nimport type {\n Severity,\n TaskFailedPayload,\n TaskRecoveryRequestedPayload,\n} from '@wwjAi';\nimport { ConfigService } from '@nestjs/config';\nimport { MetricsService } from '@wwjCommon/metrics/metrics.service';\nimport { AuthGuard } from '@wwjCommon/auth/auth.guard';\nimport { RbacGuard } from '@wwjCommon/auth/rbac.guard';\nimport { AiStrategyService } from '@wwjAi';\n\nclass DrainQueryDto {\n @IsInt()\n @Min(1)\n @IsOptional()\n max?: number;\n}\n\nclass SimulateFailureQueryDto {\n @IsString()\n @IsOptional()\n taskId?: string;\n\n @IsString()\n @IsIn(['low', 'medium', 'high'])\n @IsOptional()\n severity?: Severity;\n\n @IsString()\n @IsOptional()\n reason?: string;\n}\n\n@UseGuards(AuthGuard, RbacGuard, RateLimitGuard)\n@ApiTags('AI')\n@Controller('ai/recovery')\nexport class AiController {\n constructor(\n private readonly recovery: AiRecoveryService,\n private readonly eventBus: EventBus,\n private readonly config: ConfigService,\n private readonly metrics: MetricsService,\n private readonly strategy: AiStrategyService,\n ) {}\n\n @Get('status')\n @Public()\n async status() {\n return await this.recovery.status();\n }\n\n @Get('process-one')\n @Post('process-one')\n @Roles('admin')\n async processOne() {\n const ok = await this.recovery.processOne();\n return { ok };\n }\n\n @Get('drain')\n @Post('drain')\n @Roles('admin')\n @ApiQuery({\n name: 'max',\n required: false,\n type: Number,\n description: '最大处理数量(默认10)',\n })\n async drain(@Query() query: DrainQueryDto) {\n const n = await this.recovery.drain(query.max ?? 10);\n return { processed: n };\n }\n\n @Get('simulate-failure')\n @Post('simulate-failure')\n @Roles('admin')\n @ApiQuery({ name: 'taskId', required: false, type: String })\n @ApiQuery({\n name: 'severity',\n required: false,\n enum: ['low', 'medium', 'high'],\n })\n @ApiQuery({ name: 'reason', required: false, type: String })\n async simulateFailure(\n @Query() q: SimulateFailureQueryDto,\n ): Promise<{ ok: true; emitted: boolean }> {\n // 委派到服务层,控制器不再直接发事件或打点\n return await this.recovery.simulateFailure({\n taskId: q.taskId,\n severity: q.severity,\n reason: q.reason,\n });\n }\n\n // 移除 readBoolean 与直接依赖 metrics/strategy\n private readBoolean(key: string): boolean {\n const v = this.config.get(key);\n if (typeof v === 'boolean') return v;\n if (typeof v === 'string') return v === 'true' || v === '1' || v === 'yes';\n return false;\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/manager/interfaces/ai-manager.interface.ts","messages":[{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":23,"column":29,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":23,"endColumn":32,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[356,359],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[356,359],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":44,"column":12,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":44,"endColumn":15,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[643,646],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[643,646],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":56,"column":29,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":56,"endColumn":32,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[876,879],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[876,879],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":66,"column":12,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":66,"endColumn":15,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[1049,1052],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[1049,1052],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":77,"column":12,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":77,"endColumn":15,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[1218,1221],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[1218,1221],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]}],"suppressedMessages":[],"errorCount":5,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * AI Manager Interfaces - AI 管理模块接口定义\n */\n\n/**\n * 工作流程配置接口\n */\nexport interface WorkflowConfig {\n steps: string[];\n timeout: number;\n retryCount: number;\n parallel?: boolean;\n dependencies?: string[];\n}\n\n/**\n * 工作流程执行上下文接口\n */\nexport interface WorkflowContext {\n taskId: string;\n userId?: string;\n siteId?: number;\n metadata?: Record;\n startTime: number;\n}\n\n/**\n * 工作流程执行结果接口\n */\nexport interface WorkflowResult {\n success: boolean;\n steps: StepResult[];\n duration: number;\n error?: string;\n}\n\n/**\n * 步骤执行结果接口\n */\nexport interface StepResult {\n step: string;\n success: boolean;\n duration: number;\n result?: any;\n error?: string;\n}\n\n/**\n * 模块状态接口\n */\nexport interface ModuleState {\n name: string;\n status: 'initializing' | 'ready' | 'active' | 'error' | 'unavailable';\n version: string;\n lastUpdate: number;\n metadata?: Record;\n}\n\n/**\n * 任务协调请求接口\n */\nexport interface TaskCoordinationRequest {\n taskId: string;\n taskType: string;\n priority: 'low' | 'medium' | 'high' | 'critical';\n payload: any;\n requiredModules?: string[];\n timeout?: number;\n}\n\n/**\n * 任务协调结果接口\n */\nexport interface TaskCoordinationResult {\n taskId: string;\n success: boolean;\n result?: any;\n error?: string;\n duration: number;\n modulesUsed: string[];\n}\n\n/**\n * AI 管理器统计信息接口\n */\nexport interface AiManagerStats {\n modules: {\n total: number;\n active: number;\n error: number;\n };\n services: {\n total: number;\n healthy: number;\n byType: Record;\n };\n workflows: {\n active: string[];\n completed: number;\n failed: number;\n };\n tasks: {\n pending: number;\n byType: Record;\n oldestAge?: number;\n };\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/manager/manager.module.ts","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/manager/services/ai-coordinator.service.ts","messages":[{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":19,"column":51,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":19,"endColumn":54,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[632,635],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[632,635],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'initializeModuleStates' has no 'await' expression.","line":37,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":37,"endColumn":39,"suggestions":[{"messageId":"removeAsync","fix":{"range":[1102,1147],"text":"initializeModuleStates(): void"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":84,"column":14,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":84,"endColumn":17,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[2163,2166],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[2163,2166],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":85,"column":14,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":85,"endColumn":17,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[2181,2184],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[2181,2184],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":100,"column":13,"nodeType":"VariableDeclarator","messageId":"anyAssignment","endLine":104,"endColumn":8},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":106,"column":66,"nodeType":"Property","messageId":"anyAssignment","endLine":106,"endColumn":72},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":113,"column":9,"nodeType":"Property","messageId":"anyAssignment","endLine":113,"endColumn":14},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkModuleAvailability' has no 'await' expression.","line":136,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":136,"endColumn":40,"suggestions":[{"messageId":"removeAsync","fix":{"range":[3472,3615],"text":"checkModuleAvailability(modules: string[]): {\n allAvailable: boolean;\n available: string[];\n unavailable: string[];\n }"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":166,"column":14,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":166,"endColumn":17,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[4155,4158],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[4155,4158],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":167,"column":14,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":167,"endColumn":17,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[4173,4176],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[4173,4176],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":169,"column":47,"nodeType":"Property","messageId":"anyAssignment","endLine":169,"endColumn":54},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":177,"column":11,"nodeType":"AssignmentExpression","messageId":"anyAssignment","endLine":180,"endColumn":12},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":183,"column":11,"nodeType":"AssignmentExpression","messageId":"anyAssignment","endLine":186,"endColumn":12},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":189,"column":11,"nodeType":"AssignmentExpression","messageId":"anyAssignment","endLine":192,"endColumn":12},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":195,"column":11,"nodeType":"AssignmentExpression","messageId":"anyAssignment","endLine":195,"endColumn":67},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":210,"column":14,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":210,"endColumn":17,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[5159,5162],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[5159,5162],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":211,"column":14,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":211,"endColumn":17,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[5177,5180],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[5177,5180],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":226,"column":35,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":226,"endColumn":38,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[5526,5529],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[5526,5529],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .taskId on an `any` value.","line":227,"column":46,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":227,"endColumn":52},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .severity on an `any` value.","line":230,"column":17,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":230,"endColumn":25},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .taskId on an `any` value.","line":231,"column":53,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":231,"endColumn":59},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":232,"column":9,"nodeType":"Property","messageId":"anyAssignment","endLine":232,"endColumn":30},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":241,"column":43,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":241,"endColumn":46,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[5890,5893],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[5890,5893],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .module on an `any` value.","line":243,"column":40,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":243,"endColumn":46},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .currentState on an `any` value.","line":243,"column":61,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":243,"endColumn":73},{"ruleId":"@typescript-eslint/no-unsafe-argument","severity":2,"message":"Unsafe argument of type `any` assigned to a parameter of type `string`.","line":247,"column":27,"nodeType":"MemberExpression","messageId":"unsafeArgument","endLine":247,"endColumn":41},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .module on an `any` value.","line":247,"column":35,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":247,"endColumn":41},{"ruleId":"@typescript-eslint/no-unsafe-argument","severity":2,"message":"Unsafe argument of type `any` assigned to a parameter of type `string`.","line":247,"column":43,"nodeType":"MemberExpression","messageId":"unsafeArgument","endLine":247,"endColumn":63},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .currentState on an `any` value.","line":247,"column":51,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":247,"endColumn":63},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .currentState on an `any` value.","line":251,"column":15,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":251,"endColumn":27},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .currentState on an `any` value.","line":252,"column":15,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":252,"endColumn":27},{"ruleId":"@typescript-eslint/no-unsafe-argument","severity":2,"message":"Unsafe argument of type `any` assigned to a parameter of type `string`.","line":254,"column":35,"nodeType":"MemberExpression","messageId":"unsafeArgument","endLine":254,"endColumn":49},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .module on an `any` value.","line":254,"column":43,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":254,"endColumn":49},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'pauseModuleTasks' has no 'await' expression.","line":261,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":261,"endColumn":33,"suggestions":[{"messageId":"removeAsync","fix":{"range":[6336,6393],"text":"pauseModuleTasks(moduleName: string): void"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/no-unsafe-argument","severity":2,"message":"Unsafe argument of type `any` assigned to a parameter of type `string`.","line":265,"column":55,"nodeType":"MemberExpression","messageId":"unsafeArgument","endLine":265,"endColumn":68},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .taskType on an `any` value.","line":265,"column":60,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":265,"endColumn":68},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Computed name [task.taskType] resolves to an `any` value.","line":289,"column":14,"nodeType":"MemberExpression","messageId":"unsafeComputedMemberAccess","endLine":289,"endColumn":27},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .taskType on an `any` value.","line":289,"column":19,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":289,"endColumn":27},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Computed name [task.taskType] resolves to an `any` value.","line":289,"column":39,"nodeType":"MemberExpression","messageId":"unsafeComputedMemberAccess","endLine":289,"endColumn":52},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .taskType on an `any` value.","line":289,"column":44,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":289,"endColumn":52},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .startTime on an `any` value.","line":291,"column":37,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":291,"endColumn":46}],"suppressedMessages":[],"errorCount":41,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { Injectable, Logger, OnModuleInit } from '@nestjs/common';\nimport { EventBus, OnEvent } from '@wwjCommon/events/event-bus';\nimport { AiRegistryService } from './ai-registry.service';\nimport { AiOrchestratorService } from './ai-orchestrator.service';\n\n/**\n * AI Coordinator Service - AI 协调服务\n *\n * 职责:\n * - 协调各 AI 模块间的通信\n * - 处理跨模块的事件和消息\n * - 管理模块间的依赖关系\n * - 提供统一的协调接口\n */\n@Injectable()\nexport class AiCoordinatorService implements OnModuleInit {\n private readonly logger = new Logger(AiCoordinatorService.name);\n private readonly moduleStates = new Map();\n private readonly pendingTasks = new Map();\n\n constructor(\n private readonly eventBus: EventBus,\n private readonly registryService: AiRegistryService,\n private readonly orchestratorService: AiOrchestratorService,\n ) {}\n\n async onModuleInit() {\n this.logger.log('AI Coordinator Service initialized');\n await this.initializeModuleStates();\n // Mark manager as ready once coordinator has initialized\n this.updateModuleState('manager', 'ready');\n }\n\n /**\n * 初始化模块状态\n */\n private async initializeModuleStates(): Promise {\n const modules = ['healing', 'safe', 'tuner', 'manager'];\n\n for (const module of modules) {\n this.moduleStates.set(module, 'initializing');\n }\n\n this.logger.log('Module states initialized');\n }\n\n /**\n * 更新模块状态\n */\n updateModuleState(moduleName: string, state: string): void {\n const previousState = this.moduleStates.get(moduleName);\n this.moduleStates.set(moduleName, state);\n\n this.logger.log(\n `Module state updated: ${moduleName} ${previousState} -> ${state}`,\n );\n this.eventBus.emit('module.state.changed', {\n module: moduleName,\n previousState,\n currentState: state,\n });\n }\n\n /**\n * 获取模块状态\n */\n getModuleState(moduleName: string): string | undefined {\n return this.moduleStates.get(moduleName);\n }\n\n /**\n * 获取所有模块状态\n */\n getAllModuleStates(): Record {\n return Object.fromEntries(this.moduleStates);\n }\n\n /**\n * 协调任务执行\n */\n async coordinateTask(\n taskId: string,\n taskType: string,\n payload: any,\n ): Promise {\n this.logger.log(`Coordinating task: ${taskId} (${taskType})`);\n\n try {\n // 检查相关模块状态\n const requiredModules = this.getRequiredModules(taskType);\n const moduleCheck = await this.checkModuleAvailability(requiredModules);\n\n if (!moduleCheck.allAvailable) {\n throw new Error(\n `Required modules not available: ${moduleCheck.unavailable.join(', ')}`,\n );\n }\n\n // 执行任务协调\n const result = await this.executeCoordinatedTask(\n taskId,\n taskType,\n payload,\n );\n\n this.eventBus.emit('task.coordinated', { taskId, taskType, result });\n return result;\n } catch (error) {\n this.logger.error(`Task coordination failed: ${taskId}`, error);\n this.eventBus.emit('task.coordination.failed', {\n taskId,\n taskType,\n error,\n });\n throw error;\n }\n }\n\n /**\n * 获取任务所需模块\n */\n private getRequiredModules(taskType: string): string[] {\n const moduleMap: Record = {\n healing: ['healing', 'manager'],\n security: ['safe', 'manager'],\n performance: ['tuner', 'manager'],\n comprehensive: ['healing', 'safe', 'tuner', 'manager'],\n };\n\n return moduleMap[taskType] || ['manager'];\n }\n\n /**\n * 检查模块可用性\n */\n private async checkModuleAvailability(modules: string[]): Promise<{\n allAvailable: boolean;\n available: string[];\n unavailable: string[];\n }> {\n const available: string[] = [];\n const unavailable: string[] = [];\n\n for (const module of modules) {\n const state = this.moduleStates.get(module);\n if (state === 'ready' || state === 'active') {\n available.push(module);\n } else {\n unavailable.push(module);\n }\n }\n\n return {\n allAvailable: unavailable.length === 0,\n available,\n unavailable,\n };\n }\n\n /**\n * 执行协调任务\n */\n private async executeCoordinatedTask(\n taskId: string,\n taskType: string,\n payload: any,\n ): Promise {\n // 将任务添加到待处理队列\n this.pendingTasks.set(taskId, { taskType, payload, startTime: Date.now() });\n\n try {\n // 根据任务类型选择执行策略\n let result;\n\n switch (taskType) {\n case 'healing':\n result = await this.orchestratorService.executeWorkflow(\n 'healing',\n payload,\n );\n break;\n case 'security':\n result = await this.orchestratorService.executeWorkflow(\n 'security',\n payload,\n );\n break;\n case 'performance':\n result = await this.orchestratorService.executeWorkflow(\n 'performance',\n payload,\n );\n break;\n default:\n result = await this.executeCustomTask(taskType, payload);\n }\n\n return result;\n } finally {\n // 从待处理队列中移除\n this.pendingTasks.delete(taskId);\n }\n }\n\n /**\n * 执行自定义任务\n */\n private async executeCustomTask(\n taskType: string,\n payload: any,\n ): Promise {\n const services = this.registryService.getServicesByType(taskType);\n\n if (services.length === 0) {\n throw new Error(`No services available for task type: ${taskType}`);\n }\n\n // 执行第一个可用服务\n return await services[0].execute(payload);\n }\n\n /**\n * 处理任务失败事件\n */\n @OnEvent('task.failed')\n async handleTaskFailed(payload: any): Promise {\n this.logger.warn(`Task failed: ${payload.taskId}`);\n\n // 尝试协调恢复\n if (payload.severity === 'high') {\n await this.coordinateTask(`recovery-${payload.taskId}`, 'healing', {\n originalTask: payload,\n });\n }\n }\n\n /**\n * 处理模块状态变化事件\n */\n @OnEvent('module.state.changed')\n async handleModuleStateChanged(payload: any): Promise {\n this.logger.debug(\n `Module state changed: ${payload.module} -> ${payload.currentState}`,\n );\n\n // 同步内部状态映射,保持状态来源一致\n this.moduleStates.set(payload.module, payload.currentState);\n\n // 如果模块变为不可用,暂停相关任务\n if (\n payload.currentState === 'error' ||\n payload.currentState === 'unavailable'\n ) {\n await this.pauseModuleTasks(payload.module);\n }\n }\n\n /**\n * 暂停模块相关任务\n */\n private async pauseModuleTasks(moduleName: string): Promise {\n this.logger.warn(`Pausing tasks for module: ${moduleName}`);\n\n for (const [taskId, task] of this.pendingTasks) {\n const requiredModules = this.getRequiredModules(task.taskType);\n if (requiredModules.includes(moduleName)) {\n this.logger.warn(`Pausing task: ${taskId}`);\n this.eventBus.emit('task.paused', {\n taskId,\n reason: `Module unavailable: ${moduleName}`,\n });\n }\n }\n }\n\n /**\n * 获取待处理任务统计\n */\n getPendingTasksStats(): {\n total: number;\n byType: Record;\n oldestTask?: { id: string; age: number };\n } {\n const total = this.pendingTasks.size;\n const byType: Record = {};\n let oldestTask: { id: string; age: number } | undefined;\n\n for (const [taskId, task] of this.pendingTasks) {\n byType[task.taskType] = (byType[task.taskType] || 0) + 1;\n\n const age = Date.now() - task.startTime;\n if (!oldestTask || age > oldestTask.age) {\n oldestTask = { id: taskId, age };\n }\n }\n\n return { total, byType, oldestTask };\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/manager/services/ai-orchestrator.service.ts","messages":[{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":17,"column":54,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":17,"endColumn":57,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[506,509],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[506,509],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'registerDefaultWorkflows' has no 'await' expression.","line":41,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":41,"endColumn":41,"suggestions":[{"messageId":"removeAsync","fix":{"range":[997,1044],"text":"registerDefaultWorkflows(): void"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":67,"column":42,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":67,"endColumn":45,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[1613,1616],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[1613,1616],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":75,"column":48,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":75,"endColumn":51,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[1799,1802],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[1799,1802],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":75,"column":62,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":75,"endColumn":65,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[1813,1816],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[1813,1816],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":76,"column":11,"nodeType":"VariableDeclarator","messageId":"anyAssignment","endLine":76,"endColumn":52},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":84,"column":13,"nodeType":"VariableDeclarator","messageId":"anyAssignment","endLine":84,"endColumn":72},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":85,"column":56,"nodeType":"Property","messageId":"anyAssignment","endLine":85,"endColumn":62},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":89,"column":53,"nodeType":"Property","messageId":"anyAssignment","endLine":89,"endColumn":58},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":98,"column":15,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":98,"endColumn":18,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[2440,2443],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[2440,2443],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":99,"column":14,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":99,"endColumn":17,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[2458,2461],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[2458,2461],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":100,"column":14,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":100,"endColumn":17,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[2476,2479],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[2476,2479],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .steps on an `any` value.","line":103,"column":33,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":103,"endColumn":38},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":105,"column":13,"nodeType":"VariableDeclarator","messageId":"anyAssignment","endLine":105,"endColumn":71},{"ruleId":"@typescript-eslint/no-unsafe-argument","severity":2,"message":"Unsafe argument of type `any` assigned to a parameter of type `string`.","line":105,"column":57,"nodeType":"Identifier","messageId":"unsafeArgument","endLine":105,"endColumn":61},{"ruleId":"@typescript-eslint/no-unsafe-argument","severity":2,"message":"Unsafe argument of type `any` assigned to a parameter of type `never`.","line":106,"column":20,"nodeType":"Identifier","messageId":"unsafeArgument","endLine":106,"endColumn":30},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":115,"column":60,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":115,"endColumn":63,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[2832,2835],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[2832,2835],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":115,"column":74,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":115,"endColumn":77,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[2846,2849],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[2846,2849],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]}],"suppressedMessages":[],"errorCount":18,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { Injectable, Logger, OnModuleInit } from '@nestjs/common';\nimport { EventBus } from '@wwjCommon/events/event-bus';\nimport { AiRegistryService } from './ai-registry.service';\n\n/**\n * AI Orchestrator Service - AI 编排服务\n *\n * 职责:\n * - 协调各 AI 模块的工作流程\n * - 管理 AI 任务的执行顺序\n * - 处理模块间的依赖关系\n * - 监控和调度 AI 服务\n */\n@Injectable()\nexport class AiOrchestratorService implements OnModuleInit {\n private readonly logger = new Logger(AiOrchestratorService.name);\n private readonly activeWorkflows = new Map();\n\n constructor(\n private readonly eventBus: EventBus,\n private readonly registryService: AiRegistryService,\n ) {}\n\n async onModuleInit() {\n this.logger.log('AI Orchestrator Service initialized');\n await this.initializeWorkflows();\n }\n\n /**\n * 初始化工作流程\n */\n private async initializeWorkflows(): Promise {\n this.logger.log('Initializing AI workflows...');\n // 注册默认工作流程\n await this.registerDefaultWorkflows();\n }\n\n /**\n * 注册默认工作流程\n */\n private async registerDefaultWorkflows(): Promise {\n // 自愈工作流程\n this.registerWorkflow('healing', {\n steps: ['detect', 'analyze', 'recover', 'verify'],\n timeout: 30000,\n retryCount: 3,\n });\n\n // 安全检查工作流程\n this.registerWorkflow('security', {\n steps: ['scan', 'analyze', 'protect', 'report'],\n timeout: 15000,\n retryCount: 2,\n });\n\n // 性能优化工作流程\n this.registerWorkflow('performance', {\n steps: ['monitor', 'analyze', 'optimize', 'validate'],\n timeout: 60000,\n retryCount: 1,\n });\n }\n\n /**\n * 注册工作流程\n */\n registerWorkflow(name: string, config: any): void {\n this.activeWorkflows.set(name, config);\n this.logger.log(`Workflow registered: ${name}`);\n }\n\n /**\n * 执行工作流程\n */\n async executeWorkflow(name: string, context: any): Promise {\n const workflow = this.activeWorkflows.get(name);\n if (!workflow) {\n throw new Error(`Workflow not found: ${name}`);\n }\n\n this.logger.log(`Executing workflow: ${name}`);\n\n try {\n const result = await this.processWorkflowSteps(workflow, context);\n this.eventBus.emit('workflow.completed', { name, result });\n return result;\n } catch (error) {\n this.logger.error(`Workflow execution failed: ${name}`, error);\n this.eventBus.emit('workflow.failed', { name, error });\n throw error;\n }\n }\n\n /**\n * 处理工作流程步骤\n */\n private async processWorkflowSteps(\n workflow: any,\n context: any,\n ): Promise {\n const results = [];\n\n for (const step of workflow.steps) {\n this.logger.debug(`Processing workflow step: ${step}`);\n const stepResult = await this.executeWorkflowStep(step, context);\n results.push(stepResult);\n }\n\n return results;\n }\n\n /**\n * 执行工作流程步骤\n */\n private async executeWorkflowStep(step: string, context: any): Promise {\n // 根据步骤类型调用相应的服务\n const services = this.registryService.getServicesByType(step);\n\n if (services.length === 0) {\n this.logger.warn(`No services found for step: ${step}`);\n return null;\n }\n\n // 执行第一个匹配的服务\n const service = services[0];\n return await service.execute(context);\n }\n\n /**\n * 获取活动工作流程\n */\n getActiveWorkflows(): string[] {\n return Array.from(this.activeWorkflows.keys());\n }\n\n /**\n * 停止工作流程\n */\n stopWorkflow(name: string): boolean {\n const removed = this.activeWorkflows.delete(name);\n if (removed) {\n this.logger.log(`Workflow stopped: ${name}`);\n this.eventBus.emit('workflow.stopped', { name });\n }\n return removed;\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/manager/services/ai-registry.service.ts","messages":[{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":16,"column":20,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":16,"endColumn":23,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[291,294],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[291,294],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":16,"column":34,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":16,"endColumn":37,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[305,308],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[305,308],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'onModuleDestroy' has no 'await' expression.","line":43,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":43,"endColumn":24,"suggestions":[{"messageId":"removeAsync","fix":{"range":[979,985],"text":""},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'startHealthCheck' has no 'await' expression.","line":139,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":139,"endColumn":33,"suggestions":[{"messageId":"removeAsync","fix":{"range":[3083,3122],"text":"startHealthCheck(): void"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/no-misused-promises","severity":2,"message":"Promise returned in function argument where a void return was expected.","line":140,"column":44,"nodeType":"ArrowFunctionExpression","messageId":"voidReturnArgument","endLine":142,"endColumn":6},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":165,"column":56,"nodeType":"Property","messageId":"anyAssignment","endLine":165,"endColumn":61}],"suppressedMessages":[],"errorCount":6,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import {\n Injectable,\n Logger,\n OnModuleInit,\n OnModuleDestroy,\n} from '@nestjs/common';\nimport { EventBus } from '@wwjCommon/events/event-bus';\n\n/**\n * AI Service Interface - AI 服务接口\n */\nexport interface AiService {\n name: string;\n type: string;\n version: string;\n execute(context: any): Promise;\n isHealthy(): Promise;\n}\n\n/**\n * AI Registry Service - AI 注册服务\n *\n * 职责:\n * - 管理 AI 服务的注册和注销\n * - 提供服务发现功能\n * - 监控服务健康状态\n * - 维护服务元数据\n */\n@Injectable()\nexport class AiRegistryService implements OnModuleInit, OnModuleDestroy {\n private readonly logger = new Logger(AiRegistryService.name);\n private readonly services = new Map();\n private readonly servicesByType = new Map();\n private healthCheckInterval: NodeJS.Timeout | null = null;\n\n constructor(private readonly eventBus: EventBus) {}\n\n async onModuleInit() {\n this.logger.log('AI Registry Service initialized');\n await this.startHealthCheck();\n }\n\n async onModuleDestroy() {\n // 停止健康检查定时器,避免残留句柄\n if (this.healthCheckInterval) {\n clearInterval(this.healthCheckInterval);\n this.healthCheckInterval = null;\n this.logger.log('AI Registry Service health check stopped');\n }\n }\n\n /**\n * 注册 AI 服务\n */\n registerService(service: AiService): void {\n this.services.set(service.name, service);\n\n // 按类型分组\n if (!this.servicesByType.has(service.type)) {\n this.servicesByType.set(service.type, []);\n }\n this.servicesByType.get(service.type)!.push(service);\n\n this.logger.log(`Service registered: ${service.name} (${service.type})`);\n this.eventBus.emit('service.registered', service);\n }\n\n /**\n * 注销 AI 服务\n */\n unregisterService(serviceName: string): boolean {\n const service = this.services.get(serviceName);\n if (!service) {\n return false;\n }\n\n this.services.delete(serviceName);\n\n // 从类型分组中移除\n const typeServices = this.servicesByType.get(service.type);\n if (typeServices) {\n const index = typeServices.findIndex((s) => s.name === serviceName);\n if (index > -1) {\n typeServices.splice(index, 1);\n }\n }\n\n this.logger.log(`Service unregistered: ${serviceName}`);\n this.eventBus.emit('service.unregistered', service);\n return true;\n }\n\n /**\n * 获取服务\n */\n getService(serviceName: string): AiService | undefined {\n return this.services.get(serviceName);\n }\n\n /**\n * 根据类型获取服务列表\n */\n getServicesByType(type: string): AiService[] {\n return this.servicesByType.get(type) || [];\n }\n\n /**\n * 获取所有服务\n */\n getAllServices(): AiService[] {\n return Array.from(this.services.values());\n }\n\n /**\n * 获取服务统计信息\n */\n getServiceStats(): {\n total: number;\n byType: Record;\n healthy: number;\n } {\n const total = this.services.size;\n const byType: Record = {};\n\n for (const [type, services] of this.servicesByType) {\n byType[type] = services.length;\n }\n\n return {\n total,\n byType,\n healthy: 0, // 将在健康检查中更新\n };\n }\n\n /**\n * 启动健康检查\n */\n private async startHealthCheck(): Promise {\n this.healthCheckInterval = setInterval(async () => {\n await this.performHealthCheck();\n }, 30000);\n }\n\n /**\n * 执行健康检查\n */\n private async performHealthCheck(): Promise {\n let healthyCount = 0;\n\n for (const service of this.services.values()) {\n try {\n const isHealthy = await service.isHealthy();\n if (isHealthy) {\n healthyCount++;\n } else {\n this.logger.warn(`Service unhealthy: ${service.name}`);\n this.eventBus.emit('service.unhealthy', service);\n }\n } catch (error) {\n this.logger.error(\n `Health check failed for service: ${service.name}`,\n error,\n );\n this.eventBus.emit('service.error', { service, error });\n }\n }\n\n this.logger.debug(\n `Health check completed: ${healthyCount}/${this.services.size} services healthy`,\n );\n }\n\n /**\n * 查找服务\n */\n findServices(predicate: (service: AiService) => boolean): AiService[] {\n return Array.from(this.services.values()).filter(predicate);\n }\n\n /**\n * 检查服务是否存在\n */\n hasService(serviceName: string): boolean {\n return this.services.has(serviceName);\n }\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/safe/analyzers/security.analyzer.ts","messages":[{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkJwtSecurity' has no 'await' expression.","line":151,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":151,"endColumn":33,"suggestions":[{"messageId":"removeAsync","fix":{"range":[3559,3613],"text":"checkJwtSecurity(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkPasswordPolicy' has no 'await' expression.","line":169,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":169,"endColumn":36,"suggestions":[{"messageId":"removeAsync","fix":{"range":[3926,3983],"text":"checkPasswordPolicy(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkSessionSecurity' has no 'await' expression.","line":186,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":186,"endColumn":37,"suggestions":[{"messageId":"removeAsync","fix":{"range":[4282,4340],"text":"checkSessionSecurity(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkMfaSecurity' has no 'await' expression.","line":203,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":203,"endColumn":33,"suggestions":[{"messageId":"removeAsync","fix":{"range":[4642,4696],"text":"checkMfaSecurity(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkDataEncryption' has no 'await' expression.","line":219,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":219,"endColumn":36,"suggestions":[{"messageId":"removeAsync","fix":{"range":[4979,5036],"text":"checkDataEncryption(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkDataAccess' has no 'await' expression.","line":236,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":236,"endColumn":32,"suggestions":[{"messageId":"removeAsync","fix":{"range":[5335,5388],"text":"checkDataAccess(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkDataBackup' has no 'await' expression.","line":253,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":253,"endColumn":32,"suggestions":[{"messageId":"removeAsync","fix":{"range":[5688,5741],"text":"checkDataBackup(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkDataRetention' has no 'await' expression.","line":270,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":270,"endColumn":35,"suggestions":[{"messageId":"removeAsync","fix":{"range":[6030,6086],"text":"checkDataRetention(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkHttpsSecurity' has no 'await' expression.","line":287,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":287,"endColumn":35,"suggestions":[{"messageId":"removeAsync","fix":{"range":[6391,6447],"text":"checkHttpsSecurity(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkCorsConfiguration' has no 'await' expression.","line":304,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":304,"endColumn":39,"suggestions":[{"messageId":"removeAsync","fix":{"range":[6732,6792],"text":"checkCorsConfiguration(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkRateLimiting' has no 'await' expression.","line":321,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":321,"endColumn":34,"suggestions":[{"messageId":"removeAsync","fix":{"range":[7127,7182],"text":"checkRateLimiting(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkFirewallRules' has no 'await' expression.","line":338,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":338,"endColumn":35,"suggestions":[{"messageId":"removeAsync","fix":{"range":[7470,7526],"text":"checkFirewallRules(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkInputValidation' has no 'await' expression.","line":355,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":355,"endColumn":37,"suggestions":[{"messageId":"removeAsync","fix":{"range":[7820,7878],"text":"checkInputValidation(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkSqlInjection' has no 'await' expression.","line":372,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":372,"endColumn":34,"suggestions":[{"messageId":"removeAsync","fix":{"range":[8180,8235],"text":"checkSqlInjection(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkXssProtection' has no 'await' expression.","line":389,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":389,"endColumn":35,"suggestions":[{"messageId":"removeAsync","fix":{"range":[8551,8607],"text":"checkXssProtection(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'checkDependencyVulnerabilities' has no 'await' expression.","line":406,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":406,"endColumn":47,"suggestions":[{"messageId":"removeAsync","fix":{"range":[8899,8967],"text":"checkDependencyVulnerabilities(): SecurityCheckResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":524,"column":27,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":524,"endColumn":30,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[12229,12232],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[12229,12232],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]}],"suppressedMessages":[],"errorCount":17,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { Injectable, Logger } from '@nestjs/common';\n\n/**\n * Security Analyzer - 安全分析器\n *\n * 职责:\n * - 分析系统安全状态\n * - 识别潜在安全威胁\n * - 评估安全风险等级\n * - 生成安全报告\n */\n@Injectable()\nexport class SecurityAnalyzer {\n private readonly logger = new Logger(SecurityAnalyzer.name);\n\n /**\n * 分析系统安全状态\n */\n async analyzeSystemSecurity(): Promise {\n this.logger.log('Starting system security analysis');\n\n const startTime = Date.now();\n\n try {\n // 执行各项安全检查\n const [authSecurity, dataSecurity, networkSecurity, codeSecurity] =\n await Promise.all([\n this.analyzeAuthSecurity(),\n this.analyzeDataSecurity(),\n this.analyzeNetworkSecurity(),\n this.analyzeCodeSecurity(),\n ]);\n\n const overallRisk = this.calculateOverallRisk([\n authSecurity.riskLevel,\n dataSecurity.riskLevel,\n networkSecurity.riskLevel,\n codeSecurity.riskLevel,\n ]);\n\n return {\n timestamp: Date.now(),\n duration: Date.now() - startTime,\n overallRisk,\n categories: {\n authentication: authSecurity,\n dataProtection: dataSecurity,\n networkSecurity: networkSecurity,\n codeQuality: codeSecurity,\n },\n recommendations: this.generateRecommendations(overallRisk),\n };\n } catch (error) {\n this.logger.error('Security analysis failed', error);\n throw error;\n }\n }\n\n /**\n * 分析认证安全\n */\n private async analyzeAuthSecurity(): Promise {\n // 检查认证机制\n const checks = [\n this.checkJwtSecurity(),\n this.checkPasswordPolicy(),\n this.checkSessionSecurity(),\n this.checkMfaSecurity(),\n ];\n\n const results = await Promise.all(checks);\n const riskLevel = this.calculateCategoryRisk(results);\n\n return {\n category: 'authentication',\n riskLevel,\n checks: results,\n score: this.calculateSecurityScore(results),\n };\n }\n\n /**\n * 分析数据安全\n */\n private async analyzeDataSecurity(): Promise {\n const checks = [\n this.checkDataEncryption(),\n this.checkDataAccess(),\n this.checkDataBackup(),\n this.checkDataRetention(),\n ];\n\n const results = await Promise.all(checks);\n const riskLevel = this.calculateCategoryRisk(results);\n\n return {\n category: 'dataProtection',\n riskLevel,\n checks: results,\n score: this.calculateSecurityScore(results),\n };\n }\n\n /**\n * 分析网络安全\n */\n private async analyzeNetworkSecurity(): Promise {\n const checks = [\n this.checkHttpsSecurity(),\n this.checkCorsConfiguration(),\n this.checkRateLimiting(),\n this.checkFirewallRules(),\n ];\n\n const results = await Promise.all(checks);\n const riskLevel = this.calculateCategoryRisk(results);\n\n return {\n category: 'networkSecurity',\n riskLevel,\n checks: results,\n score: this.calculateSecurityScore(results),\n };\n }\n\n /**\n * 分析代码安全\n */\n private async analyzeCodeSecurity(): Promise {\n const checks = [\n this.checkInputValidation(),\n this.checkSqlInjection(),\n this.checkXssProtection(),\n this.checkDependencyVulnerabilities(),\n ];\n\n const results = await Promise.all(checks);\n const riskLevel = this.calculateCategoryRisk(results);\n\n return {\n category: 'codeQuality',\n riskLevel,\n checks: results,\n score: this.calculateSecurityScore(results),\n };\n }\n\n /**\n * JWT 安全检查\n */\n private async checkJwtSecurity(): Promise {\n // 实现 JWT 安全检查逻辑\n return {\n name: 'JWT Security',\n status: 'pass',\n riskLevel: 'low',\n message: 'JWT configuration is secure',\n details: {\n algorithm: 'RS256',\n expiration: '1h',\n secretRotation: true,\n },\n };\n }\n\n /**\n * 密码策略检查\n */\n private async checkPasswordPolicy(): Promise {\n return {\n name: 'Password Policy',\n status: 'pass',\n riskLevel: 'low',\n message: 'Password policy meets security requirements',\n details: {\n minLength: 8,\n complexity: true,\n expiration: 90,\n },\n };\n }\n\n /**\n * 会话安全检查\n */\n private async checkSessionSecurity(): Promise {\n return {\n name: 'Session Security',\n status: 'pass',\n riskLevel: 'medium',\n message: 'Session configuration needs improvement',\n details: {\n httpOnly: true,\n secure: true,\n sameSite: 'strict',\n },\n };\n }\n\n /**\n * 多因素认证检查\n */\n private async checkMfaSecurity(): Promise {\n return {\n name: 'Multi-Factor Authentication',\n status: 'warning',\n riskLevel: 'medium',\n message: 'MFA is not enabled for all users',\n details: {\n enabled: false,\n coverage: '30%',\n },\n };\n }\n\n /**\n * 数据加密检查\n */\n private async checkDataEncryption(): Promise {\n return {\n name: 'Data Encryption',\n status: 'pass',\n riskLevel: 'low',\n message: 'Data encryption is properly configured',\n details: {\n atRest: true,\n inTransit: true,\n algorithm: 'AES-256',\n },\n };\n }\n\n /**\n * 数据访问检查\n */\n private async checkDataAccess(): Promise {\n return {\n name: 'Data Access Control',\n status: 'pass',\n riskLevel: 'low',\n message: 'Data access controls are properly implemented',\n details: {\n rbac: true,\n audit: true,\n encryption: true,\n },\n };\n }\n\n /**\n * 数据备份检查\n */\n private async checkDataBackup(): Promise {\n return {\n name: 'Data Backup',\n status: 'pass',\n riskLevel: 'low',\n message: 'Data backup strategy is adequate',\n details: {\n frequency: 'daily',\n encryption: true,\n offsite: true,\n },\n };\n }\n\n /**\n * 数据保留检查\n */\n private async checkDataRetention(): Promise {\n return {\n name: 'Data Retention',\n status: 'pass',\n riskLevel: 'low',\n message: 'Data retention policies are compliant',\n details: {\n policy: 'defined',\n automation: true,\n compliance: 'GDPR',\n },\n };\n }\n\n /**\n * HTTPS 安全检查\n */\n private async checkHttpsSecurity(): Promise {\n return {\n name: 'HTTPS Security',\n status: 'pass',\n riskLevel: 'low',\n message: 'HTTPS is properly configured',\n details: {\n enforced: true,\n tlsVersion: '1.3',\n hsts: true,\n },\n };\n }\n\n /**\n * CORS 配置检查\n */\n private async checkCorsConfiguration(): Promise {\n return {\n name: 'CORS Configuration',\n status: 'warning',\n riskLevel: 'medium',\n message: 'CORS configuration may be too permissive',\n details: {\n origins: ['*'],\n credentials: true,\n methods: ['GET', 'POST', 'PUT', 'DELETE'],\n },\n };\n }\n\n /**\n * 速率限制检查\n */\n private async checkRateLimiting(): Promise {\n return {\n name: 'Rate Limiting',\n status: 'pass',\n riskLevel: 'low',\n message: 'Rate limiting is properly configured',\n details: {\n enabled: true,\n limits: '100/min',\n burst: 10,\n },\n };\n }\n\n /**\n * 防火墙规则检查\n */\n private async checkFirewallRules(): Promise {\n return {\n name: 'Firewall Rules',\n status: 'pass',\n riskLevel: 'low',\n message: 'Firewall rules are properly configured',\n details: {\n enabled: true,\n defaultDeny: true,\n logging: true,\n },\n };\n }\n\n /**\n * 输入验证检查\n */\n private async checkInputValidation(): Promise {\n return {\n name: 'Input Validation',\n status: 'pass',\n riskLevel: 'low',\n message: 'Input validation is comprehensive',\n details: {\n sanitization: true,\n validation: true,\n whitelisting: true,\n },\n };\n }\n\n /**\n * SQL 注入检查\n */\n private async checkSqlInjection(): Promise {\n return {\n name: 'SQL Injection Protection',\n status: 'pass',\n riskLevel: 'low',\n message: 'SQL injection protection is effective',\n details: {\n parameterizedQueries: true,\n orm: 'TypeORM',\n escaping: true,\n },\n };\n }\n\n /**\n * XSS 保护检查\n */\n private async checkXssProtection(): Promise {\n return {\n name: 'XSS Protection',\n status: 'pass',\n riskLevel: 'low',\n message: 'XSS protection is properly implemented',\n details: {\n csp: true,\n sanitization: true,\n encoding: true,\n },\n };\n }\n\n /**\n * 依赖漏洞检查\n */\n private async checkDependencyVulnerabilities(): Promise {\n return {\n name: 'Dependency Vulnerabilities',\n status: 'warning',\n riskLevel: 'medium',\n message: 'Some dependencies have known vulnerabilities',\n details: {\n total: 150,\n vulnerable: 3,\n critical: 0,\n high: 1,\n medium: 2,\n },\n };\n }\n\n /**\n * 计算分类风险等级\n */\n private calculateCategoryRisk(results: SecurityCheckResult[]): RiskLevel {\n const riskLevels = results.map((r) => r.riskLevel);\n\n if (riskLevels.includes('critical')) return 'critical';\n if (riskLevels.includes('high')) return 'high';\n if (riskLevels.includes('medium')) return 'medium';\n return 'low';\n }\n\n /**\n * 计算整体风险等级\n */\n private calculateOverallRisk(categoryRisks: RiskLevel[]): RiskLevel {\n const riskWeights = { critical: 4, high: 3, medium: 2, low: 1 };\n const totalWeight = categoryRisks.reduce(\n (sum, risk) => sum + riskWeights[risk],\n 0,\n );\n const avgWeight = totalWeight / categoryRisks.length;\n\n if (avgWeight >= 3.5) return 'critical';\n if (avgWeight >= 2.5) return 'high';\n if (avgWeight >= 1.5) return 'medium';\n return 'low';\n }\n\n /**\n * 计算安全评分\n */\n private calculateSecurityScore(results: SecurityCheckResult[]): number {\n const statusWeights = { pass: 100, warning: 60, fail: 0 };\n const totalScore = results.reduce(\n (sum, result) => sum + statusWeights[result.status],\n 0,\n );\n return Math.round(totalScore / results.length);\n }\n\n /**\n * 生成安全建议\n */\n private generateRecommendations(riskLevel: RiskLevel): string[] {\n const recommendations: Record = {\n critical: [\n 'Immediately address critical security vulnerabilities',\n 'Implement emergency security patches',\n 'Review and strengthen access controls',\n 'Conduct comprehensive security audit',\n ],\n high: [\n 'Address high-priority security issues within 24 hours',\n 'Implement additional security monitoring',\n 'Review security policies and procedures',\n 'Consider security training for development team',\n ],\n medium: [\n 'Address medium-priority security issues within a week',\n 'Implement security best practices',\n 'Regular security assessments',\n 'Update security documentation',\n ],\n low: [\n 'Maintain current security posture',\n 'Continue regular security monitoring',\n 'Keep security tools and policies updated',\n 'Periodic security reviews',\n ],\n };\n\n return recommendations[riskLevel] || recommendations.low;\n }\n}\n\n// 类型定义\nexport interface SecurityAnalysisResult {\n timestamp: number;\n duration: number;\n overallRisk: RiskLevel;\n categories: {\n authentication: SecurityCategoryResult;\n dataProtection: SecurityCategoryResult;\n networkSecurity: SecurityCategoryResult;\n codeQuality: SecurityCategoryResult;\n };\n recommendations: string[];\n}\n\nexport interface SecurityCategoryResult {\n category: string;\n riskLevel: RiskLevel;\n checks: SecurityCheckResult[];\n score: number;\n}\n\nexport interface SecurityCheckResult {\n name: string;\n status: 'pass' | 'warning' | 'fail';\n riskLevel: RiskLevel;\n message: string;\n details: Record;\n}\n\nexport type RiskLevel = 'low' | 'medium' | 'high' | 'critical';\n","usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/safe/detectors/vulnerability.detector.ts","messages":[{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'scanDependencyVulnerabilities' has no 'await' expression.","line":90,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":90,"endColumn":46,"suggestions":[{"messageId":"removeAsync","fix":{"range":[2315,2378],"text":"scanDependencyVulnerabilities(): Vulnerability[]"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'scanConfigurationVulnerabilities' has no 'await' expression.","line":138,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":138,"endColumn":49,"suggestions":[{"messageId":"removeAsync","fix":{"range":[3685,3751],"text":"scanConfigurationVulnerabilities(): Vulnerability[]"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'scanNetworkVulnerabilities' has no 'await' expression.","line":166,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":166,"endColumn":43,"suggestions":[{"messageId":"removeAsync","fix":{"range":[4453,4513],"text":"scanNetworkVulnerabilities(): Vulnerability[]"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'detectSqlInjection' has no 'await' expression.","line":194,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":194,"endColumn":35,"suggestions":[{"messageId":"removeAsync","fix":{"range":[5186,5238],"text":"detectSqlInjection(): Vulnerability[]"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'detectXssVulnerabilities' has no 'await' expression.","line":202,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":202,"endColumn":41,"suggestions":[{"messageId":"removeAsync","fix":{"range":[5317,5375],"text":"detectXssVulnerabilities(): Vulnerability[]"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'detectAuthenticationBypass' has no 'await' expression.","line":210,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":210,"endColumn":43,"suggestions":[{"messageId":"removeAsync","fix":{"range":[5451,5511],"text":"detectAuthenticationBypass(): Vulnerability[]"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'detectPrivilegeEscalation' has no 'await' expression.","line":218,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":218,"endColumn":42,"suggestions":[{"messageId":"removeAsync","fix":{"range":[5586,5645],"text":"detectPrivilegeEscalation(): Vulnerability[]"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'detectSuspiciousActivity' has no 'await' expression.","line":307,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":307,"endColumn":41,"suggestions":[{"messageId":"removeAsync","fix":{"range":[7603,7654],"text":"detectSuspiciousActivity(): Threat[]"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'detectAnomalousTraffic' has no 'await' expression.","line":315,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":315,"endColumn":39,"suggestions":[{"messageId":"removeAsync","fix":{"range":[7727,7776],"text":"detectAnomalousTraffic(): Threat[]"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'detectBruteForceAttacks' has no 'await' expression.","line":323,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":323,"endColumn":40,"suggestions":[{"messageId":"removeAsync","fix":{"range":[7851,7901],"text":"detectBruteForceAttacks(): Threat[]"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'detectMaliciousPayloads' has no 'await' expression.","line":331,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":331,"endColumn":40,"suggestions":[{"messageId":"removeAsync","fix":{"range":[7974,8024],"text":"detectMaliciousPayloads(): Threat[]"},"desc":"Remove 'async'."}]}],"suppressedMessages":[],"errorCount":11,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import { Injectable, Logger } from '@nestjs/common';\n\n/**\n * Vulnerability Detector - 漏洞检测器\n *\n * 职责:\n * - 扫描系统漏洞\n * - 检测安全威胁\n * - 监控异常行为\n * - 生成威胁报告\n */\n@Injectable()\nexport class VulnerabilityDetector {\n private readonly logger = new Logger(VulnerabilityDetector.name);\n\n /**\n * 执行全面漏洞扫描\n */\n async scanVulnerabilities(): Promise {\n this.logger.log('Starting comprehensive vulnerability scan');\n\n const startTime = Date.now();\n\n try {\n const [\n codeVulnerabilities,\n dependencyVulnerabilities,\n configVulnerabilities,\n networkVulnerabilities,\n ] = await Promise.all([\n this.scanCodeVulnerabilities(),\n this.scanDependencyVulnerabilities(),\n this.scanConfigurationVulnerabilities(),\n this.scanNetworkVulnerabilities(),\n ]);\n\n const allVulnerabilities = [\n ...codeVulnerabilities,\n ...dependencyVulnerabilities,\n ...configVulnerabilities,\n ...networkVulnerabilities,\n ];\n\n return {\n timestamp: Date.now(),\n duration: Date.now() - startTime,\n totalVulnerabilities: allVulnerabilities.length,\n severityBreakdown: this.calculateSeverityBreakdown(allVulnerabilities),\n vulnerabilities: allVulnerabilities,\n recommendations:\n this.generateVulnerabilityRecommendations(allVulnerabilities),\n };\n } catch (error) {\n this.logger.error('Vulnerability scan failed', error);\n throw error;\n }\n }\n\n /**\n * 扫描代码漏洞\n */\n private async scanCodeVulnerabilities(): Promise {\n this.logger.debug('Scanning code vulnerabilities');\n\n // 模拟代码漏洞扫描\n const vulnerabilities: Vulnerability[] = [];\n\n // SQL 注入检测\n const sqlInjectionVulns = await this.detectSqlInjection();\n vulnerabilities.push(...sqlInjectionVulns);\n\n // XSS 检测\n const xssVulns = await this.detectXssVulnerabilities();\n vulnerabilities.push(...xssVulns);\n\n // 认证绕过检测\n const authBypassVulns = await this.detectAuthenticationBypass();\n vulnerabilities.push(...authBypassVulns);\n\n // 权限提升检测\n const privilegeEscalationVulns = await this.detectPrivilegeEscalation();\n vulnerabilities.push(...privilegeEscalationVulns);\n\n return vulnerabilities;\n }\n\n /**\n * 扫描依赖漏洞\n */\n private async scanDependencyVulnerabilities(): Promise {\n this.logger.debug('Scanning dependency vulnerabilities');\n\n // 模拟依赖漏洞扫描结果\n return [\n {\n id: 'CVE-2023-1234',\n type: 'dependency',\n severity: 'high',\n title: 'Remote Code Execution in lodash',\n description:\n 'A prototype pollution vulnerability in lodash allows remote code execution',\n affectedComponent: 'lodash@4.17.20',\n cweId: 'CWE-1321',\n cvssScore: 8.5,\n discoveredAt: Date.now(),\n status: 'open',\n remediation: {\n type: 'update',\n description: 'Update lodash to version 4.17.21 or later',\n effort: 'low',\n },\n },\n {\n id: 'CVE-2023-5678',\n type: 'dependency',\n severity: 'medium',\n title: 'Information Disclosure in express',\n description:\n 'Express middleware may leak sensitive information in error messages',\n affectedComponent: 'express@4.18.0',\n cweId: 'CWE-200',\n cvssScore: 5.3,\n discoveredAt: Date.now(),\n status: 'open',\n remediation: {\n type: 'configuration',\n description:\n 'Configure error handling to prevent information leakage',\n effort: 'medium',\n },\n },\n ];\n }\n\n /**\n * 扫描配置漏洞\n */\n private async scanConfigurationVulnerabilities(): Promise {\n this.logger.debug('Scanning configuration vulnerabilities');\n\n return [\n {\n id: 'CONFIG-001',\n type: 'configuration',\n severity: 'medium',\n title: 'Weak CORS Configuration',\n description:\n 'CORS is configured to allow all origins which may lead to security issues',\n affectedComponent: 'CORS Middleware',\n cweId: 'CWE-346',\n cvssScore: 4.3,\n discoveredAt: Date.now(),\n status: 'open',\n remediation: {\n type: 'configuration',\n description: 'Restrict CORS origins to specific trusted domains',\n effort: 'low',\n },\n },\n ];\n }\n\n /**\n * 扫描网络漏洞\n */\n private async scanNetworkVulnerabilities(): Promise {\n this.logger.debug('Scanning network vulnerabilities');\n\n return [\n {\n id: 'NET-001',\n type: 'network',\n severity: 'low',\n title: 'Missing Security Headers',\n description: 'Some security headers are not configured properly',\n affectedComponent: 'HTTP Headers',\n cweId: 'CWE-693',\n cvssScore: 3.1,\n discoveredAt: Date.now(),\n status: 'open',\n remediation: {\n type: 'configuration',\n description:\n 'Add missing security headers (CSP, HSTS, X-Frame-Options)',\n effort: 'low',\n },\n },\n ];\n }\n\n /**\n * 检测 SQL 注入漏洞\n */\n private async detectSqlInjection(): Promise {\n // 模拟 SQL 注入检测\n return [];\n }\n\n /**\n * 检测 XSS 漏洞\n */\n private async detectXssVulnerabilities(): Promise {\n // 模拟 XSS 检测\n return [];\n }\n\n /**\n * 检测认证绕过漏洞\n */\n private async detectAuthenticationBypass(): Promise {\n // 模拟认证绕过检测\n return [];\n }\n\n /**\n * 检测权限提升漏洞\n */\n private async detectPrivilegeEscalation(): Promise {\n // 模拟权限提升检测\n return [];\n }\n\n /**\n * 计算严重程度分布\n */\n private calculateSeverityBreakdown(\n vulnerabilities: Vulnerability[],\n ): SeverityBreakdown {\n const breakdown = {\n critical: 0,\n high: 0,\n medium: 0,\n low: 0,\n };\n\n vulnerabilities.forEach((vuln) => {\n breakdown[vuln.severity]++;\n });\n\n return breakdown;\n }\n\n /**\n * 生成漏洞修复建议\n */\n private generateVulnerabilityRecommendations(\n vulnerabilities: Vulnerability[],\n ): string[] {\n const recommendations: string[] = [];\n\n const criticalCount = vulnerabilities.filter(\n (v) => v.severity === 'critical',\n ).length;\n const highCount = vulnerabilities.filter(\n (v) => v.severity === 'high',\n ).length;\n\n if (criticalCount > 0) {\n recommendations.push(\n `Immediately address ${criticalCount} critical vulnerabilities`,\n );\n }\n\n if (highCount > 0) {\n recommendations.push(\n `Address ${highCount} high-severity vulnerabilities within 24 hours`,\n );\n }\n\n recommendations.push(\n 'Implement automated vulnerability scanning in CI/CD pipeline',\n );\n recommendations.push('Regular security training for development team');\n recommendations.push(\n 'Establish vulnerability disclosure and response process',\n );\n\n return recommendations;\n }\n\n /**\n * 检测实时威胁\n */\n async detectRealTimeThreats(): Promise {\n this.logger.log('Starting real-time threat detection');\n\n const threats = await Promise.all([\n this.detectSuspiciousActivity(),\n this.detectAnomalousTraffic(),\n this.detectBruteForceAttacks(),\n this.detectMaliciousPayloads(),\n ]);\n\n const allThreats = threats.flat();\n\n return {\n timestamp: Date.now(),\n threatsDetected: allThreats.length,\n threats: allThreats,\n riskLevel: this.calculateThreatRiskLevel(allThreats),\n };\n }\n\n /**\n * 检测可疑活动\n */\n private async detectSuspiciousActivity(): Promise {\n // 模拟可疑活动检测\n return [];\n }\n\n /**\n * 检测异常流量\n */\n private async detectAnomalousTraffic(): Promise {\n // 模拟异常流量检测\n return [];\n }\n\n /**\n * 检测暴力破解攻击\n */\n private async detectBruteForceAttacks(): Promise {\n // 模拟暴力破解检测\n return [];\n }\n\n /**\n * 检测恶意载荷\n */\n private async detectMaliciousPayloads(): Promise {\n // 模拟恶意载荷检测\n return [];\n }\n\n /**\n * 计算威胁风险等级\n */\n private calculateThreatRiskLevel(\n threats: Threat[],\n ): 'low' | 'medium' | 'high' | 'critical' {\n if (threats.length === 0) return 'low';\n\n const highSeverityThreats = threats.filter(\n (t) => t.severity === 'high' || t.severity === 'critical',\n );\n\n if (highSeverityThreats.length > 5) return 'critical';\n if (highSeverityThreats.length > 2) return 'high';\n if (threats.length > 10) return 'medium';\n\n return 'low';\n }\n}\n\n// 类型定义\nexport interface VulnerabilityScanResult {\n timestamp: number;\n duration: number;\n totalVulnerabilities: number;\n severityBreakdown: SeverityBreakdown;\n vulnerabilities: Vulnerability[];\n recommendations: string[];\n}\n\nexport interface Vulnerability {\n id: string;\n type: 'code' | 'dependency' | 'configuration' | 'network';\n severity: 'low' | 'medium' | 'high' | 'critical';\n title: string;\n description: string;\n affectedComponent: string;\n cweId?: string;\n cvssScore?: number;\n discoveredAt: number;\n status: 'open' | 'in_progress' | 'resolved' | 'false_positive';\n remediation: {\n type: 'update' | 'patch' | 'configuration' | 'code_change';\n description: string;\n effort: 'low' | 'medium' | 'high';\n };\n}\n\nexport interface SeverityBreakdown {\n critical: number;\n high: number;\n medium: number;\n low: number;\n}\n\nexport interface ThreatDetectionResult {\n timestamp: number;\n threatsDetected: number;\n threats: Threat[];\n riskLevel: 'low' | 'medium' | 'high' | 'critical';\n}\n\nexport interface Threat {\n id: string;\n type:\n | 'suspicious_activity'\n | 'anomalous_traffic'\n | 'brute_force'\n | 'malicious_payload';\n severity: 'low' | 'medium' | 'high' | 'critical';\n source: string;\n description: string;\n detectedAt: number;\n indicators: string[];\n}\n","usedDeprecatedRules":[]},{"filePath":"/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-ai/src/safe/protectors/access.protector.ts","messages":[{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":37,"column":11,"nodeType":"VariableDeclarator","messageId":"anyAssignment","endLine":37,"endColumn":56},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'monitorAccessPatterns' has no 'await' expression.","line":143,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":143,"endColumn":30,"suggestions":[{"messageId":"removeAsync","fix":{"range":[3194,3255],"text":"monitorAccessPatterns(): AccessPatternAnalysis"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":176,"column":32,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":176,"endColumn":35,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[4124,4127],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[4124,4127],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-return","severity":2,"message":"Unsafe return of a value of type `any`.","line":177,"column":5,"nodeType":"ReturnStatement","messageId":"unsafeReturn","endLine":183,"endColumn":7},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .ip on an `any` value.","line":178,"column":15,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":178,"endColumn":17},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .connection on an `any` value.","line":179,"column":15,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":179,"endColumn":25},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .socket on an `any` value.","line":180,"column":15,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":180,"endColumn":21},{"ruleId":"@typescript-eslint/no-unsafe-call","severity":2,"message":"Unsafe call of a(n) `any` typed value.","line":181,"column":7,"nodeType":"MemberExpression","messageId":"unsafeCall","endLine":181,"endColumn":48},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .headers on an `any` value.","line":181,"column":15,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":181,"endColumn":22},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access [0] on an `any` value.","line":181,"column":54,"nodeType":"Literal","messageId":"unsafeMemberExpression","endLine":181,"endColumn":55},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":189,"column":52,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":189,"endColumn":55,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[4416,4419],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[4416,4419],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":197,"column":7,"nodeType":"Property","messageId":"anyAssignment","endLine":197,"endColumn":29},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .method on an `any` value.","line":197,"column":23,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":197,"endColumn":29},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":198,"column":7,"nodeType":"Property","messageId":"anyAssignment","endLine":198,"endColumn":23},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .url on an `any` value.","line":198,"column":20,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":198,"endColumn":23},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":199,"column":7,"nodeType":"Property","messageId":"anyAssignment","endLine":199,"endColumn":47},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .headers on an `any` value.","line":199,"column":26,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":199,"endColumn":33},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":224,"column":57,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":224,"endColumn":60,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[5259,5262],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[5259,5262],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":237,"column":11,"nodeType":"VariableDeclarator","messageId":"anyAssignment","endLine":237,"endColumn":52},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .headers on an `any` value.","line":237,"column":31,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":237,"endColumn":38},{"ruleId":"@typescript-eslint/no-unsafe-argument","severity":2,"message":"Unsafe argument of type `any` assigned to a parameter of type `string`.","line":238,"column":50,"nodeType":"Identifier","messageId":"unsafeArgument","endLine":238,"endColumn":59},{"ruleId":"@typescript-eslint/no-unsafe-argument","severity":2,"message":"Unsafe argument of type `any` assigned to a parameter of type `string`.","line":243,"column":40,"nodeType":"MemberExpression","messageId":"unsafeArgument","endLine":243,"endColumn":51},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .url on an `any` value.","line":243,"column":48,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":243,"endColumn":51},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":253,"column":57,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":253,"endColumn":60,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[5894,5897],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[5894,5897],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":263,"column":9,"nodeType":"Property","messageId":"anyAssignment","endLine":263,"endColumn":31},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .method on an `any` value.","line":263,"column":25,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":263,"endColumn":31},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":264,"column":9,"nodeType":"Property","messageId":"anyAssignment","endLine":264,"endColumn":25},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .url on an `any` value.","line":264,"column":22,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":264,"endColumn":25},{"ruleId":"@typescript-eslint/no-unsafe-assignment","severity":2,"message":"Unsafe assignment of an `any` value.","line":265,"column":9,"nodeType":"Property","messageId":"anyAssignment","endLine":265,"endColumn":49},{"ruleId":"@typescript-eslint/no-unsafe-member-access","severity":2,"message":"Unsafe member access .headers on an `any` value.","line":265,"column":28,"nodeType":"Identifier","messageId":"unsafeMemberExpression","endLine":265,"endColumn":35},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'getUserPermissions' has no 'await' expression.","line":314,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":314,"endColumn":35,"suggestions":[{"messageId":"removeAsync","fix":{"range":[7217,7283],"text":"getUserPermissions(userId: string): UserPermissions"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'getSecurityPolicy' has no 'await' expression.","line":344,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":344,"endColumn":34,"suggestions":[{"messageId":"removeAsync","fix":{"range":[7889,7973],"text":"getSecurityPolicy(\n policyName: string,\n ): SecurityPolicy | null"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'evaluateCondition' has no 'await' expression.","line":388,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":388,"endColumn":34,"suggestions":[{"messageId":"removeAsync","fix":{"range":[8991,9104],"text":"evaluateCondition(\n condition: PolicyCondition,\n context: SecurityContext,\n ): PolicyResult"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/no-unused-vars","severity":2,"message":"'context' is defined but never used.","line":434,"column":5,"nodeType":null,"messageId":"unusedVar","endLine":434,"endColumn":12},{"ruleId":"@typescript-eslint/require-await","severity":2,"message":"Async method 'logSecurityEvent' has no 'await' expression.","line":479,"column":3,"nodeType":"FunctionExpression","messageId":"missingAwait","endLine":479,"endColumn":33,"suggestions":[{"messageId":"removeAsync","fix":{"range":[11195,11262],"text":"logSecurityEvent(eventType: string, data: any): void"},"desc":"Remove 'async'."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":479,"column":59,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":479,"endColumn":62,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[11243,11246],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[11243,11246],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]},{"ruleId":"@typescript-eslint/no-explicit-any","severity":2,"message":"Unexpected any. Specify a different type.","line":541,"column":27,"nodeType":"TSAnyKeyword","messageId":"unexpectedAny","endLine":541,"endColumn":30,"suggestions":[{"messageId":"suggestUnknown","fix":{"range":[12638,12641],"text":"unknown"},"desc":"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct."},{"messageId":"suggestNever","fix":{"range":[12638,12641],"text":"never"},"desc":"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of."}]}],"suppressedMessages":[],"errorCount":37,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"import {\n Injectable,\n Logger,\n CanActivate,\n ExecutionContext,\n} from '@nestjs/common';\nimport { Reflector } from '@nestjs/core';\nimport { Observable } from 'rxjs';\n\n/**\n * Access Protector - 访问保护器\n *\n * 职责:\n * - 控制系统访问权限\n * - 实施安全策略\n * - 监控访问行为\n * - 防止未授权访问\n */\n@Injectable()\nexport class AccessProtector implements CanActivate {\n private readonly logger = new Logger(AccessProtector.name);\n private readonly accessAttempts = new Map();\n private readonly blockedIps = new Set();\n private readonly suspiciousActivities = new Map<\n string,\n SuspiciousActivity[]\n >();\n\n constructor(private reflector: Reflector) {}\n\n /**\n * 守卫方法 - 检查访问权限\n */\n canActivate(\n context: ExecutionContext,\n ): boolean | Promise | Observable {\n const request = context.switchToHttp().getRequest();\n const clientIp = this.getClientIp(request);\n\n // 检查 IP 是否被阻止\n if (this.blockedIps.has(clientIp)) {\n this.logger.warn(`Blocked IP attempted access: ${clientIp}`);\n return false;\n }\n\n // 记录访问尝试\n this.recordAccessAttempt(clientIp, request);\n\n // 检查访问频率\n if (this.isAccessRateLimited(clientIp)) {\n this.logger.warn(`Rate limit exceeded for IP: ${clientIp}`);\n return false;\n }\n\n // 检查可疑活动\n if (this.detectSuspiciousActivity(clientIp, request)) {\n this.logger.warn(`Suspicious activity detected from IP: ${clientIp}`);\n this.handleSuspiciousActivity(clientIp, request);\n return false;\n }\n\n return true;\n }\n\n /**\n * 验证用户权限\n */\n async validateUserPermissions(\n userId: string,\n resource: string,\n action: string,\n ): Promise {\n this.logger.debug(\n `Validating permissions for user ${userId}: ${action} on ${resource}`,\n );\n\n try {\n // 获取用户角色和权限\n const userPermissions = await this.getUserPermissions(userId);\n\n // 检查资源访问权限\n const hasPermission = this.checkResourcePermission(\n userPermissions,\n resource,\n action,\n );\n\n if (!hasPermission) {\n this.logger.warn(\n `Permission denied for user ${userId}: ${action} on ${resource}`,\n );\n await this.logSecurityEvent('PERMISSION_DENIED', {\n userId,\n resource,\n action,\n timestamp: Date.now(),\n });\n }\n\n return hasPermission;\n } catch (error) {\n this.logger.error(\n `Error validating permissions for user ${userId}`,\n error,\n );\n return false;\n }\n }\n\n /**\n * 实施安全策略\n */\n async enforceSecurityPolicy(\n policyName: string,\n context: SecurityContext,\n ): Promise {\n this.logger.debug(`Enforcing security policy: ${policyName}`);\n\n const policy = await this.getSecurityPolicy(policyName);\n\n if (!policy) {\n return {\n allowed: false,\n reason: 'Policy not found',\n actions: [],\n };\n }\n\n // 评估策略条件\n const evaluation = await this.evaluatePolicyConditions(policy, context);\n\n if (!evaluation.allowed) {\n // 执行策略动作\n await this.executePolicyActions(policy.denyActions, context);\n }\n\n return evaluation;\n }\n\n /**\n * 监控访问模式\n */\n async monitorAccessPatterns(): Promise {\n this.logger.log('Analyzing access patterns');\n\n const analysis = {\n timestamp: Date.now(),\n totalAccesses: 0,\n uniqueIps: 0,\n suspiciousActivities: 0,\n blockedAttempts: 0,\n topSources: [] as AccessSource[],\n anomalies: [] as AccessAnomaly[],\n };\n\n // 分析访问尝试\n for (const [ip, attempts] of this.accessAttempts.entries()) {\n analysis.totalAccesses += attempts.length;\n\n // 检查异常模式\n const anomalies = this.detectAccessAnomalies(ip, attempts);\n analysis.anomalies.push(...anomalies);\n }\n\n analysis.uniqueIps = this.accessAttempts.size;\n analysis.suspiciousActivities = this.suspiciousActivities.size;\n analysis.blockedAttempts = this.blockedIps.size;\n analysis.topSources = this.getTopAccessSources();\n\n return analysis;\n }\n\n /**\n * 获取客户端 IP\n */\n private getClientIp(request: any): string {\n return (\n request.ip ||\n request.connection?.remoteAddress ||\n request.socket?.remoteAddress ||\n request.headers['x-forwarded-for']?.split(',')[0] ||\n 'unknown'\n );\n }\n\n /**\n * 记录访问尝试\n */\n private recordAccessAttempt(ip: string, request: any): void {\n if (!this.accessAttempts.has(ip)) {\n this.accessAttempts.set(ip, []);\n }\n\n const attempts = this.accessAttempts.get(ip)!;\n attempts.push({\n timestamp: Date.now(),\n method: request.method,\n url: request.url,\n userAgent: request.headers['user-agent'],\n success: true,\n });\n\n // 保持最近 1000 次访问记录\n if (attempts.length > 1000) {\n attempts.splice(0, attempts.length - 1000);\n }\n }\n\n /**\n * 检查访问频率限制\n */\n private isAccessRateLimited(ip: string): boolean {\n const attempts = this.accessAttempts.get(ip) || [];\n const recentAttempts = attempts.filter(\n (attempt) => Date.now() - attempt.timestamp < 60000, // 1分钟内\n );\n\n return recentAttempts.length > 100; // 每分钟最多100次请求\n }\n\n /**\n * 检测可疑活动\n */\n private detectSuspiciousActivity(ip: string, request: any): boolean {\n const attempts = this.accessAttempts.get(ip) || [];\n\n // 检查快速连续请求\n const recentAttempts = attempts.filter(\n (attempt) => Date.now() - attempt.timestamp < 10000, // 10秒内\n );\n\n if (recentAttempts.length > 50) {\n return true;\n }\n\n // 检查异常 User-Agent\n const userAgent = request.headers['user-agent'];\n if (!userAgent || this.isSuspiciousUserAgent(userAgent)) {\n return true;\n }\n\n // 检查恶意路径\n if (this.containsMaliciousPatterns(request.url)) {\n return true;\n }\n\n return false;\n }\n\n /**\n * 处理可疑活动\n */\n private handleSuspiciousActivity(ip: string, request: any): void {\n if (!this.suspiciousActivities.has(ip)) {\n this.suspiciousActivities.set(ip, []);\n }\n\n const activities = this.suspiciousActivities.get(ip)!;\n activities.push({\n timestamp: Date.now(),\n type: 'suspicious_request',\n details: {\n method: request.method,\n url: request.url,\n userAgent: request.headers['user-agent'],\n },\n });\n\n // 如果可疑活动过多,阻止该 IP\n if (activities.length > 10) {\n this.blockedIps.add(ip);\n this.logger.warn(\n `IP ${ip} has been blocked due to excessive suspicious activities`,\n );\n }\n }\n\n /**\n * 检查可疑 User-Agent\n */\n private isSuspiciousUserAgent(userAgent: string): boolean {\n const suspiciousPatterns = [\n /bot/i,\n /crawler/i,\n /spider/i,\n /scanner/i,\n /sqlmap/i,\n /nikto/i,\n ];\n\n return suspiciousPatterns.some((pattern) => pattern.test(userAgent));\n }\n\n /**\n * 检查恶意路径模式\n */\n private containsMaliciousPatterns(url: string): boolean {\n const maliciousPatterns = [\n /\\.\\./, // 路径遍历\n /\\/etc\\/passwd/,\n /\\/proc\\/self/,\n /