From f9ee42815d0e4fe1fd558fedb7fc7e45f0721c02 Mon Sep 17 00:00:00 2001 From: ChuXun <70203584+ChuXunYu@users.noreply.github.com> Date: Sun, 4 Jan 2026 15:29:07 +0800 Subject: [PATCH] 1 --- docx2md/1_Compact.md | 974 +++++++++++++++++++++++++ docx2md/1_Images_Ordered/Image_002.png | Bin 0 -> 5297434 bytes docx2md/1_Images_Ordered/Image_003.png | Bin 0 -> 190592 bytes docx2md/1_Images_Ordered/Image_004.png | Bin 0 -> 312351 bytes docx2md/1_Images_Ordered/Image_005.png | Bin 0 -> 228587 bytes docx2md/1_Images_Ordered/Image_006.png | Bin 0 -> 201705 bytes docx2md/1_Images_Ordered/Image_007.png | Bin 0 -> 160658 bytes docx2md/1_Images_Ordered/Image_008.png | Bin 0 -> 160658 bytes docx2md/1_Images_Ordered/Image_009.png | Bin 0 -> 174355 bytes docx2md/1_Images_Ordered/Image_010.png | Bin 0 -> 199561 bytes docx2md/1_Images_Ordered/Image_011.png | Bin 0 -> 189131 bytes docx2md/1_Images_Ordered/Image_012.png | Bin 0 -> 175435 bytes docx2md/1_Images_Ordered/Image_013.png | Bin 0 -> 146142 bytes docx2md/1_Images_Ordered/Image_014.png | Bin 0 -> 145167 bytes docx2md/1_Images_Ordered/Image_015.png | Bin 0 -> 136589 bytes docx2md/1_Images_Ordered/Image_016.png | Bin 0 -> 154396 bytes docx2md/1_Images_Ordered/Image_017.png | Bin 0 -> 231646 bytes docx2md/1_Images_Ordered/Image_018.png | Bin 0 -> 56733 bytes docx2md/1_Images_Ordered/Image_019.png | Bin 0 -> 136241 bytes docx2md/1_Images_Ordered/Image_020.png | Bin 0 -> 162617 bytes docx2md/1_Images_Ordered/Image_021.png | Bin 0 -> 101953 bytes docx2md/1_Images_Ordered/Image_022.png | Bin 0 -> 397839 bytes docx2md/1_Images_Ordered/Image_023.png | Bin 0 -> 400696 bytes docx2md/1_Images_Ordered/Image_024.png | Bin 0 -> 113390 bytes docx2md/1_Images_Ordered/Image_025.png | Bin 0 -> 132808 bytes docx2md/1_Images_Ordered/Image_026.png | Bin 0 -> 132468 bytes docx2md/AI友好型.py | 120 +++ docx2md/docx2md.py | 2 +- 28 files changed, 1095 insertions(+), 1 deletion(-) create mode 100644 docx2md/1_Compact.md create mode 100644 docx2md/1_Images_Ordered/Image_002.png create mode 100644 docx2md/1_Images_Ordered/Image_003.png create mode 100644 docx2md/1_Images_Ordered/Image_004.png create mode 100644 docx2md/1_Images_Ordered/Image_005.png create mode 100644 docx2md/1_Images_Ordered/Image_006.png create mode 100644 docx2md/1_Images_Ordered/Image_007.png create mode 100644 docx2md/1_Images_Ordered/Image_008.png create mode 100644 docx2md/1_Images_Ordered/Image_009.png create mode 100644 docx2md/1_Images_Ordered/Image_010.png create mode 100644 docx2md/1_Images_Ordered/Image_011.png create mode 100644 docx2md/1_Images_Ordered/Image_012.png create mode 100644 docx2md/1_Images_Ordered/Image_013.png create mode 100644 docx2md/1_Images_Ordered/Image_014.png create mode 100644 docx2md/1_Images_Ordered/Image_015.png create mode 100644 docx2md/1_Images_Ordered/Image_016.png create mode 100644 docx2md/1_Images_Ordered/Image_017.png create mode 100644 docx2md/1_Images_Ordered/Image_018.png create mode 100644 docx2md/1_Images_Ordered/Image_019.png create mode 100644 docx2md/1_Images_Ordered/Image_020.png create mode 100644 docx2md/1_Images_Ordered/Image_021.png create mode 100644 docx2md/1_Images_Ordered/Image_022.png create mode 100644 docx2md/1_Images_Ordered/Image_023.png create mode 100644 docx2md/1_Images_Ordered/Image_024.png create mode 100644 docx2md/1_Images_Ordered/Image_025.png create mode 100644 docx2md/1_Images_Ordered/Image_026.png create mode 100644 docx2md/AI友好型.py diff --git a/docx2md/1_Compact.md b/docx2md/1_Compact.md new file mode 100644 index 0000000..6093c50 --- /dev/null +++ b/docx2md/1_Compact.md @@ -0,0 +1,974 @@ +# 课程编号:A0801260211 + +软件系统设计实训 + +个人报告 + +--- +> 📸 **[指令:请在此处上传图片 001]** +> 文件名: `Image_001.jpeg` +--- + +| | | | | +|------------------|------------------------|--------------|--------------| +| **姓名** | **张臻** | **学号** | **20245738** | +| **班级** | **软件2402** | **指导教师** | **姜琳颖** | +| **实践课程名称** | **软件系统设计实训** | | | +| **开设学期** | **2025-2026 秋季学期** | | | +| **开设时间** | **16-18周** | | | +| **报告日期** | **12.28** | | | + +**东北大学软件学院** + +目录 + +1\. 实训目的 Aim of Project - 1 - + +[2. 预习内容 Preview Content - 1 -](\l) + +[3. 实训内容和实践过程 Project Content and Process - 2 -](\l) + +[3.1 概述Overview - 2 -](\l) + +[3.2 相关技术Relevant Technologies - 2 -](\l) + +[1. 建模与设计工具: - 2 -](\l) + +[2. 架构技术选型: - 2 -](\l) + +[3.3 需求获取Requirement Elicitation - 3 -](\l) + +[1. 用户痛点挖掘与分析: - 3 -](\l) + +[2. 需求转化: - 3 -](\l) + +[3. 业务流程梳理——泳道图设计 - 3 -](\l) + +[3.4 需求分析Requirements Analysis - 5 -](\l) + +[3.4.1 功能分析概览 - 5 -](\l) + +[3.4.2核心用例详述 (Core Use Case Specifications) - 7 -](\l) + +[3.4.3核心对象生命周期分析 - 22 -](\l) + +[3.5 概要设计Architectural Design - 23 -](\l) + +[3.5.1 设计原则与目标 - 23 -](\l) + +[3.5.2 系统总体架构设计 - 24 -](\l) + +[3.5.3 关键技术选型与决策 - 24 -](\l) + +[3.5.4 功能模块与接口设计 - 25 -](\l) + +[3.5.5工程文件组织结构设计 - 27 -](\l) + +[3.6 详细设计Detailed Design - 29 -](\l) + +[3.6.1 详细设计工作概述 - 29 -](\l) + +[3.6.2 模块详细设计与建模 - 29 -](\l) + +[3.6.3关键数据表结构设计 - 33 -](\l) + +[3.6.4 交互原型设计 (UI/UX) - 35 -](\l) + +[4. 实训总结 Summary - 42 -](\l) + +[4.1 项目回顾与工作总结 - 42 -](\l) + +[4.2 遇到的挑战与解决方案 - 42 -](\l) + +[(1) 如何在高并发下实现精准的“每日连胜”计算? - 42 -](\l) + +[(2) PBL 互评中如何防止“恶意差评”和“刷分”? - 42 -](\l) + +[(3) 如何让风控系统既安全又不影响用户体验? - 43 -](\l) + +[4.3 经验教训与感悟 - 43 -](\l) + +[4.4结语 - 44 -](\l) + +[5. 参考资料 References - 45 -](\l) + +# + +# 实训目的 Aim of Project + +本次实训聚焦于软件生命周期的前端阶段——需求分析与系统设计。旨在通过对“智慧课程学习平台”的完整设计过程,深入掌握复杂软件系统的建模方法与架构设计能力。实训的具体目的包括: + +掌握需求工程全流程方法论:通过模拟真实场景,实践从模糊的业务痛点出发,经历需求获取、分析、澄清到撰写标准需求规格说明书 (SRS) 的完整闭环。 + +提升复杂系统架构设计能力:基于领域驱动设计 (DDD) 思想,进行微服务架构的拆分与界限上下文划分,设计高可用、高并发的云原生系统蓝图。 + +强化详细设计与建模技能:熟练运用UML(统一建模语言)绘制类图、时序图、状态图等,能够进行精细化的数据库 Schema 设计与 API 接口定义,为后续开发提供无歧义的“施工图纸”。 + +培养规范化的工程文档素养:严格遵循国家标准或行业规范编写概要设计 (HLD) 与详细设计 (LLD) 文档,确保技术文档的完整性、一致性与可追溯性。 + +# 预习内容 Preview Content + +在项目启动前,我针对系统设计所需的理论知识与工具进行了深入预习,重点掌握了以下内容: + +领域驱动设计 (DDD):深入研读了DD相关理论,理解了实体(Entity)、值对象(Value Object)、聚合及领域服务的概念,为业务模块的解耦与划分打下基础。 + +UML建模与设计模式:学习了常见设计模式(如策略模式、工厂模式、观察者模式),并熟练掌握了使用PlantUML和ProcessOn绘制标准UML图形的技巧。 + +微服务架构理论:学习Spring Cloud Alibaba生态组件Nacos,Sentinel,Gateway的架构原理与适用场景,以便在架构设计阶段做出正确的技术选型。 + +数据库设计规范:复习了数据库范式理论与反范式优化策略,重点研究了图数据库与时序数据/流数据在教育场景下的数据模型设计。 + +交互设计基础:了解了以用户为中心的设计 原则,学习了Axure/Figma等原型工具的使用,以便输出高质量的UI交互原型。 + +# 实训内容和实践过程 Project Content and Process + +## 3.1 概述Overview + +本次实训项目“智慧课程学习平台”旨在构建一个“以学生个性化学习为中心,教师智能推荐为辅助”的自适应教育生态。**作为核心系统分析师与架构设计人员,我主导了系统的全链路设计**。本系统的核心设计理念在于:**利用知识图谱与AI算法为学生生成个性化学习路径,同时通过多维能力画像赋能教师,使其能精准地进行个性化干预与资源推荐**。 工作重点在于将模糊的教育痛点转化为精确的工程模型,通过领域驱动设计方法划分微服务边界,并输出高保真的详细设计文档。具体工作如下: + +1. 需求工程:主导**用户访谈**,梳理业务流程。 + +2. 架构设计:负责M01至M05**所有模块**的技术架构决策与逻辑设计。 + +3. 详细设计:**主导**进行**核心模块的类结构设计**、**数据库建模、API接口定义及UI原型设计。** + +## 3.2 相关技术Relevant Technologies + +1. 建模与设计工具: + + 1. PlantUML / Draw.io:用于绘制用例图、类图、时序图、活动图及部署架构图。 + + 2. Figma / Axure:用于制作高保真用户界面 (UI) 原型与交互逻辑演示。 + + 3. MySQL Workbench / Neo4j Browser:用于设计关系型数据库E-R图与知识图谱数据模型。 + +2. 架构技术选型: + + 1. 微服务架构:设计基于Spring Cloud Alibaba的分布式架构,利用其服务治理能力应对理论上的高并发场景。 + + 2. 流计算架构:规划引入Apache Flink处理xAPI实时流数据,设计了“存算分离”的数据流转路径。 + + 3. 图计算技术:选用Neo4j作为知识图谱的存储方案,利用其图算法优势支持自适应路径规划。 + +## 3.3 需求获取Requirement Elicitation + +在需求获取阶段,我作为组长主导了从“用户痛点”到“技术需求”的转化过程。我通过场景分析法梳理PBL教学与系统安全两大核心领域的业务逻辑,并且,并承担了以下关键工作: + +1. 用户痛点挖掘与分析: + + 1. 场景模拟: + + 1. 针对“学生”角色(缺乏个性化): 识别出传统教学“千人一面”的痛点。基础不同的学生被迫按同一线性路径学习,导致“学霸吃不饱,学渣吃不消”。学生急需基于自身能力画像的个性化学习路径。 + + 2. 针对“教师”角色(缺乏干预手段): 识别出教师缺乏数据支撑,无法进行针对性辅导的痛点。教师需要系统自动识别“高阻断知识点”和“风险学生”,以便进行个性化资源推荐与干预。 + + 3. 针对“教务管理”角色: 识别出账号共享难管控的安全隐患,以及PBL项目中普遍存在的“搭便车”与“评分不公”痛点。针对PBL中普遍存在的“搭便车”与“评分不公”痛点,我通过调研实际教学场景,梳理出基于客观证据的评价需求。 + + 4. 针对教育平台面临的账号倒卖与异地代课风险,我组织了安全需求评审,确立了主动防御机制。 + +2. 需求转化: + + 1. 将“个性化学习”诉求转化为 FR-ADAPT-01 (自适应路径规划)需求,决定设计基于知识图谱的动态导航功能。确定引入M01自适应引擎与 M04 游戏化服务。 + + 2. 将“账号安全”诉求转化为 NF-SEC-01 (异地登录风控) 非功能需求,定义了“IP跳变触发MFA”的业务规则。 + + 3. 将模糊的“公平评价”转化为“多源数据交叉验证”需求。针对PBL项目“搭便车”现象,确立了M02 协作评价服务中的“Git 贡献度分析”与“方差仲裁”机制。 + + 4. 需求转化:将“系统安全”细化为“身份真实性校验”与“环境异常感知”两个维度。 + +3. 根据教研员反馈,定义了“课程健康度 (CHI)”指标,设计 M03 智慧教研智脑 以实现教学内容的自动诊断。 + +4. 业务流程梳理——泳道图设计 + +为了明确各子系统在需求执行中的职责边界,我绘制了“PBL协作评价全链路数据流泳道图”。该图详细描述了从代码提交触发 Webhook,到仲裁引擎计算方差,再到信誉分更新的完整闭环。 + +--- +> 📸 **[指令:请在此处上传图片 002]** +> 文件名: `Image_002.png` +--- + +图 1 协作评价全链路数据流泳道图 + +图1的设计详细规划了代码提交与互评打分两条数据流在仲裁引擎中的汇聚逻辑。 + +## 3.4 需求分析Requirements Analysis + +### 3.4.1 功能分析概览 + +在需求分析阶段,本人作为组长负责**统一认证、游戏化激励、风险教研、社交路由四大核心子系**统的逻辑建模。本阶段工作的重点是将业务需求转化为严谨的系统功能规格,明确数据流转规则与业务判断逻辑。 + +根据业务拆解,系统以“学生能力画像(涵盖认知、勤奋、协作、影响力、代码质量、创新性六大维度)”为数据基座,支撑起个性化推荐与教师干预两大核心业务。根据业务拆解,本人负责的功能模块清单如下(共计**26**个用例): + +表 1 功能模块清单 + +| | | | | +|--------------|--------------|-----------------------------------------------------------------------------------------------|--------------------------------------| +| **子系统** | **模块名称** | **包含核心用例(UseCases)** | **核心逻辑点** | +| 统一认证 | 身份与安全 | 统一身份登录、SSO/社交登录、风险检测、MFA二次验证、会话心跳续期、角色切换、监控大屏 | 身份校验、多设备互踢、异常登录识别 | +| **游戏化** | 激励引擎 | **每日连胜检查**、火焰特效、积分补签、多维画像 | 连续性算法、积分扣减规则、画像合成 | +| **风险教研** | 质量监控 | **触发红色预警**、人工干预、课程健康度监控、教学事故工单、智能归因、资源热更新、A/B测试验证 | 行为数据聚合、阈值判定、版本对比逻辑 | +| **社交路由** | 互助匹配 | 注册在线状态、发起悬赏、智能路由匹配、消息推送、建立会话、评价与影响力结算、PBL互评、争议仲裁 | 匹配算法、加权打分、信誉分计算 | + +以下为我负责整体用例图: + +--- +> 📸 **[指令:请在此处上传图片 003]** +> 文件名: `Image_003.png` +--- + +图 2 整体用例情况 + +图2涵盖了我负责的**六大核心模块:用户中心、课程管理、学习中心、作业考试、互动社区、后台管理**。 + +## 3.4.2核心用例详述 (Core Use Case Specifications) + +为了确保系统逻辑的严密性,本报告选取其中**7个**逻辑最为复杂的核心用例进行详细规约说明。为了清晰地界定各子系统的功能边界及参与者权限,本人绘制了如下分模块用例图。图中明确了学生、教师及系统后台在不同业务场景下的交互范围。”以下为这7个核心用例的部分整体用例图: + +--- +> 📸 **[指令:请在此处上传图片 004]** +> 文件名: `Image_004.png` +--- + +图 3 部分用例整体用例图 + +图3涵盖了风险教研子系统、社交路由子系统、统一认证子系统、游戏化激励子系统的核心用例的用例情况。 + +1. **\[认证核心\]** 统一身份登录 (UC-AUTH-01) + +本用例是系统的安全门户,其核心逻辑不仅仅在于校验账号密码,更在于构建“事件驱动”的登录流程。分析中明确了登录过程必须包含“风险前置校验”环节,即在生成令牌前先判断环境安全;同时,登录成功被定义为一个全局触发事件,该事件将作为信号源,自动激活下游的“每日连胜计算”和“在线状态注册”模块,从而实现子系统间的逻辑解耦。 + +表 2 UC-AUTH-01 + +
| 项目 | 内容描述 |
| 用例名称 | 统一身份登录 |
| 用例编号 | UC-AUTH-01 |
| 主要参与者 | 学生、教师、管理员、认证服务 |
| 前置条件 | 用户已注册账号;网络连接正常。 |
| 后置条件 | 客户端获取有效令牌(Token);系统建立会话白名单;发布“用户已登录”事件。 |
| 基本事件流 | 1.用户在登录页输入账号和密码。 2.前端对密码进行加密预处理并发送请求。 3.系统验证凭证正确性(比对数据库中的加密密文)。 4.系统调用 UC-AUTH-03 (风险检测)评估当前登录环境。 5.若无风险,系统生成身份令牌(包含用户ID、角色、有效期)。 6.系统将令牌存入会话存储,并强制踢出超限设备(如限制单用户 3 设备)。 7.系统向消息中心发布“用户已登录”事件(含 IP、时间戳)。 8.系统返回令牌,前端跳转至仪表盘。 |
| 扩展事件流 | 若风险检测判定为高危(如异地登录): 1.系统中断标准流程,转入 UC-AUTH-04 (MFA 二次验证)。 2.验证通过后,继续执行步骤 5。 若密码连续错误超过 5 次: 1.系统锁定该账号 15 分钟。 2.返回“账号已冻结”提示。 |
| 特殊需求 | 登录接口响应需包含next_action字段,指示前端是否需要进行 MFA 或强制改密。 |
| 非功能需求关联 | 安全性 NF-SEC-01(密码传输加密);性能 NF-PER-02(登录响应 < 500ms)。 |
| 项目 | 内容描述 |
| 用例名称 | 风险检测 |
| 用例编号 | UC-AUTH-03 |
| 主要参与者 | 认证服务 (系统后台) |
| 前置条件 | 用户凭证已校验通过,但尚未签发 Token。 |
| 后置条件 | 返回风险等级(低/中/高)及具体风险标签。 |
| 基本事件流 | 1.系统提取当前请求的 IP 地址,解析地理位置。 2.系统提取浏览器指纹(User-Agent + Canvas特征)。 3.系统查询缓存中该用户最近一次登录的 IP 和设备信息。 4.规则匹配: -计算地理位置距离:若距离 > 100km且时间差 < 1h,标记为异地。 -比对设备指纹:若为全新设备,标记为新设备。 5.返回风险评估结果。 |
| 扩展事件流 | 若 IP 在黑名单库中: 直接返回“High Risk - Blocked”,阻断登录。 |
| 特殊需求 | IP 库需定期更新;指纹计算需在前端完成并加密传输。 |
| 非功能需求关联 | 性能 NF-PER-03(风控计算延迟 < 100ms)。 |
| 项目 | 内容描述 |
| 用例名称 | 每日连胜检查 |
| 用例编号 | UC-GAME-01 |
| 主要参与者 | 学生、激励引擎 |
| 前置条件 | 监听到系统发布的“用户已登录”事件。 |
| 后置条件 | 用户连胜天数更新,触发奖励发放。 |
| 基本事件流 | 1.激励引擎消费登录事件。 2.计算当前日期在年份中的索引 (Day of Year)。 3.读取用户的历史签到记录状态。 4.检查昨日状态: 判断“昨天”是否已签到。 5.连胜逻辑: - 若昨日已签到:执行连胜计数 +1。 - 若昨日未签到:重置连胜计数为 1。 6.将“今日”的状态标记为已签到。 7.若连胜天数达到里程碑(如 3, 7, 30天),触发 UC-GAME-05 (勋章结算)。 |
| 扩展事件流 | 今日已登录过(重复事件): 检测到今日状态已为签到,直接忽略,不执行计算。 |
| 特殊需求 | 必须处理跨年场景的连胜计算(如1月1日需检查12月31日)。 |
| 非功能需求关联 | 性能 NF-PER-05(事件处理吞吐量 > 5000TPS)。 |
| 项目 | 内容描述 |
| 用例名称 | 触发红色预警 |
| 用例编号 | UC-RISK-01 |
| 主要参与者 | 风险教研引擎 |
| 前置条件 | 实时计算作业正在运行,持续消费学习行为流。 |
| 后置条件 | 生成预警记录,推送到教师端待办列表。并为教师生成个性化干预建议(推荐习题/微课)。 |
| 基本事件流 | 1.数据聚合:引擎按用户维度聚合最近 7 天的行为数据。 2.规则判定: -活跃度检测:连续 7 天无登录记录。 -掌握度检测:模型预测当前知识点掌握概率 < 60%。 3.若满足上述任一条件,系统标记该学生为“高危 (Red Risk)”。 4.写入预警记录表,记录触发原因代码。 5.通过消息通道向该生的辅导员/教师发送实时通知。并结合AI助教分析,向教师推送针对该学生的个性化补救资源建议(如推荐特定章节的强化训练),供教师一键推送。 |
| 扩展事件流 | 数据不足(冷启动): 若学生为新生且行为数据稀疏,不触发预警,标记为“观察期”。 |
| 特殊需求 | 预警算法需支持“防抖动”,避免同一天内重复报警。 |
| 非功能需求关联 | 实时性NF-RTM-01(从行为发生到预警触发延迟 < 5分钟)。 |
| 用例名称 | 执行 A/B 测试验证 |
| 用例编号 | UC-RISK-07 |
| 主要参与者 | 风险教研引擎 |
| 前置条件 | 资源存在 v1.0 (旧) 和 v1.1 (新) 两个版本。 |
| 后置条件 | 确定新版本是否胜出,并执行全量发布或回滚。 |
| 基本事件流 | 1.系统配置流量分配策略:10%学生访问 v1.1,90% 访问 v1.0。 2.持续运行 48 小时,分别收集两组的 CHI (健康度) 数据。 3.效果对比: - 若 v1.1 的 CHI 显著高于 v1.0(提升 > 5%):判定胜出。 - 否则:判定失败。 4.胜出:系统自动将流量切换为 100% v1.1。 5.失败:系统自动回滚至 v1.0,并通知教师“迭代无效”。 |
| 扩展事件流 | 样本量不足: 若不足以产生统计显著性,延长测试时间或扩大流量比例至 30%。 |
| 特殊需求 | 同一学生在测试期间必须始终看到同一个版本(会话粘滞)。 |
| 非功能需求关联 | 可测试性 NF-TST-01(支持灰度路由)。 |
| 项目 | 内容描述 |
| 用例名称 | 智能路由匹配 |
| 用例编号 | UC-SOC-03 |
| 主要参与者 | 路由引擎 |
| 前置条件 | 收到求助请求;在线用户池不为空。 |
| 后置条件 | 锁定最佳候选人列表。 |
| 基本事件流 | 1.筛选候选人: -在线:在在线用户池中。 -能力:已点亮该知识点节点。 -角色:排除求助者自己。 2.计算匹配分 (Score): Score =影响力 * 0.5 + 响应速度 * 0.3 + 知识掌握度 * 0.2。 3.按 Score 降序排列,生成候选队列。 4.将请求发送给队列首位的候选人。 |
| 扩展事件流 | 无合格候选人在线: 1.将请求转入异步论坛发帖模式。 2.通知求助者“暂无学霸在线,已转论坛”。 |
| 特殊需求 | 避免路由给刚刚拒绝过求助的用户。 |
| 非功能需求关联 | 效率 NF-EFF-01(匹配计算耗时 < 500ms)。 |
| 项目 | 内容描述 |
| 用例名称 | 评价与影响力结算 |
| 用例编号 | UC-SOC-06 |
| 主要参与者 | 学生 (求助者)、路由引擎 |
| 前置条件 | 互助会话结束。 |
| 后置条件 | 积分转移,影响力分更新。 |
| 基本事件流 | 1.求助者对解答质量进行评分(1-5星)和标签(如“耐心”“大牛”)。 2.结算:解冻积分,转入互助者账户。 3.若评分为 5 星,额外奖励系统积分。 4.更新画像: - 重新计算互助者的影响力 (Influence)。 - Influence = 旧值 + (评分 * 权重)。 5.若影响力升级,触发勋章颁发。 |
| 扩展事件流 | 求助者恶意差评(如1星无理由): 互助者可申诉,进入UC-SOC-08 (争议仲裁)流程。 |
| 特殊需求 | 评分需去除“互刷”嫌疑(如同两人频繁互评)。 |
| 非功能需求关联 | 公平性 NF-FAI-01。 |
RB6^hx!o2e5=Tg7b4YGsQ^;$+EX{Iq#8 zZPFO?qTRQ9r$%k;G{V#KXHNwYLza~)_k+M8Lakl7)T~>_xC|HqxbF?BHISyQo63)E zeza9OpyvST+r6($n?FrzH>_2msX8h$=s!Ly={XzfqzKA8v^Omrk2G^SJ{M_iyB?=T18LG5Wxb$ zW83;A`dWW0>9ZA-Q!29V*tJ(utDri2s{3bf$qKb(o{EP}^?mHsS~hJUHLJOQ!M=<4 zWYSF1y>ok0EKTYZGJWE3vySV=Pm$R~ DkhwM9(ZR{Q~<6}wxo&R?DSh7$(cQ~RP`ZR@40?v F0udln~lou1bCHnqc FNctn5Wr*xSR7zNn= 8I0O@XR-g=`UY ;{=esEG&v(}TXZnow@Zkd^Y}h}`;eRoN1w?V!?|-8|*gVi@ zMF j~;`}I-XMzt%EvYks?JlOZ+j 9(I&N6-a zctNxd#1_jQJ$j)3?_Znqt=AFSh;k64a9vpK+Kp_lGrX74hgh*<>w6)T`Mf!JaIbl8 zML)0)?YevSwt25ajp{BQo6n`UZ%myKq0m?JS)% g zSg@EzEIpE0vnJ{N>?$czq}Dp`ndlls=ma$j)FMr2jUYkP$P66<1W^VNGZSYnF!yNo zw288N=QcT|FA$U&Gi;DFYu!N#>+ql_j~_{n^hxB@wTE&=!=vg}DWmFKM2V!sja>Cb z1cQjvvQaHLcI2Rh3m4vqDx)XOmYe#bD^n o##+b?a*5U1j$J{;0gv2qO~070;!1uOv!$+@8+_RTaT-`*fDK;(e+(UAZ63F2#1 z)E@I?sc6ok;&R-@zW4|05hA*O34;J*89uxqWMCLkSp8CV@9sTWymql{*I(+7YD7TW zrfsF%59MUOKFC45!BDB1^=eAhGF8oM?6yA8K?rKsshup)U*#u`o@hj!dQIxdtf{kf z7+^*@ee$#leV0ts&bZ;@^aJ*p6x3g%$4(n-HNz|+?#!Ap%ZMo0F}TlQ6WxR8A=n-L z75lr)-^suK{42u;4VUd(w#zX6AVnXp=&$C8mRYxQo#{(ijc&NCLpj{^*K>SWj~_8! zRye!=%7KU?{F8wQm9J1fQ#b#RfNuyCDU{bFIDrTeS_R0(Is~tB#WJ=bHHQu#m!gI8 zo7WeFj3Nc|$?m-eq_GN*^=ntPUE=NAcjkQC4j)$VpoFLtT+gdLc=*ulf}r9XLwjP! ziYa3!PM1y{T1mnL@$~&R%696S^_w-C@+XO}5ql6=5cN~KL=owr!vqf>J)vJDA4#?> znaumm5}O)pR9mhbSxtmVm@uJLOzI%RMopB_6Q=2xDkrTguB=+D|I2iER^?hv^h?@1 z6G_y%c_Zokb8FkRv4SsV1BZ^5qkG(cC97Jgto+t wSI%P;2qMJrcI 9M2_kCHmnqs7oWJ|P0jZ%8ONd~Ca5YdPV=% |)HLzpb#tDCNa|3HnD`B9m8XNWq2U}af? zc=2Sm-YcJMp0bA_$_DouqK{X>&Zl#^Ki~+MXS$Yk<@oW#nu;K-WXzaZMvZb8$=bGU zr~<(ry+6T>*sx&1I!To(t*lz5@0;G8jQ9XC@SlIyng$_yrc|k1M#xE-GOf&>z0B0x zxpQk-v&Kbg)+{4Y^@n{#!Q8raQ#yC z3m48d_23zE-n{A3p~G*c%+R5IRJ56*DFGsxXrTG?S8Ei?BdJ=oxCtD%dGopvhpJVp zD}DR^CP|Yfml7q)OSNhx%rh>I_v<&@MAXcfF~QUsM@MYr&RtNNH?O6iSz!dxF1d2$ zmub@$84=~rKYN+ynYSv?K$Ka&e4G6GYb$du7;M{i%v1YEj2IxLOS}J|g#!@6Ai%(0 zYlLylnhg!-Q>Tte&z^ruw{GoCYKVXSnI-%8yO__R7A@)+ac%3?4LY3ZU-|RTv4XZk z@Tpw6mZ__J`6?>n^ittwj@b@Me}V<(&frC|Xys-jh~&wfQpy+0BQqwCGyh2HHu_QW z7AP!(hL1N(pZeKDzqJ0;`FB~R;s?&bKUCPn(ZeK7x(u@S_+=BF6C!vBeGr~zj{SH4 zo~d`kjzdzkWLa6cbdmh>TW?93I;~8byTp?ygA+EbUoGE#pVge3JY{O>|JN8J8jTw{ zL@XaO{7 (FZYH2T?NLXZ>EL%$Z`MP%xaSqyEC)L0`kYy7n@|qqgWT)w@sZ zmhmIU%Sp|t0YhE8j_opH4Yo7sgWT2wTg`B!srsO_{qT0#c5s^@e+&c@d)ujz2gy<- zGyOTQc|HywI4rUBp>x@yWr9c=l()pCo&$OsA*pi7%5w4CMH!{THNa)fiZw>zN2Cz; zLG6d-EtprPjGbb;T$b!vjDTa?!IeNyAWO3Zi@#(nKq&p?Cx4!tI^1ZRVYl$#l~Tzr zN7Ci1*G%Mw1va`ylp%Tq?`u53z^3Z(!b?}KN|lQ5he=uGv0S)hh4kt-RJ#1$PYRW) zB0uObL*$!*Ax}+)Y=tGY4%bVXE~otZb1R7zGln_#sXu7Lh86z^GU?*{T!qTXsBu%x zdk7*>>z{s;U7MGi94{Dt)ud%deJ{C-!s*kdl9LCwYBXtIftZ6RmKPdfw?gN3uku3~ z+ojLy`*OtC$#U3bgPb|ML-S|E6PLaFRW#`#eR_13
{u%mNfSf$`hGAledI=vs zoY|ctTV^BfApehdHbDj5HZ2+%foQ kg?} zr P?z&t#D!6 zB@ihQElL#IHXgk3z>oK_6{U?FB? 7?y(}RG0Ve zm53S*v&Pw3#_JF+2pfCXtTEAdR$UM+Fq8_{I=y|nKvaMb0z;d&>Gp9wA5kiZzVXf= znq*K;mXFloU6vtI2W>g1Z5yv53BGURn$;^*kbT;gAu8lRRPoNr7cVYHG;hl=6|f*s z!5aVkvn-!6!?YK}(ICLw)4V?Rwo&_$Q5oaDAlHt|iWMf(24d3)EkAGkc;gr bI;VTe#Qm4SC||NROPM#w-+`|<=PP8=a=(`MA{wC9bmfY-+S z`7=zO8bpBX*l|*J?mTJ4o0TgU8$khL#F8b>vT4&njqa$RqQyGXa72wD7s~G4XXV(j zLq?48+N1Bj%OcLshjnh|`7&e1cysu--`c4#F<8Z)ol>TZXJOGgf9={8rk#k^saCC? z%$+;U_N*~;=0uGkSt?t$9FgM1%gCKOxAhw9B~hZJM%010^x%Peq>5GF#*M4Zkf60| zcWYgmYD1r8vt`RI&6>59#*JI4c+|>>BZzicw{DMeIH5ztRvJ+Rb==cPpCwB+o4!EA z*|lq{Mz+i{)q53au+!Ojon*?C%^b&{Sh3>D@ZnR8BNq Pa$Y$$nd?1 zaspe3M94jZ{vkRB!W#1WBunNVZH)6WWy)&q2YwI^Y8I%YXONdAeu6|Mxh@hiId51i zgZuT+hsWz?th{e-){#T|Wtc{?z)F-ZZ#xCUiO!rlA?sExGy4$khRBuzMT+YKbsSrQ z-lY0MfqMBdyLR=m#7mIS6bYmM^b;gZY`kp6DrO%N2lvo$`KB$~OUrh@2+D*_5Kihf zZZ0#YjF(nTYTK%Rq`wyYyI`& 96FW^_T4m8uAZu!rtP>k1O??)R*6X`CX14K5B%KTJ_x( zWBYRU>j(E9wB@Xc93`?D26a%URDq?-kj{KTvC8MppWCb^O`cRT>w^}eZ_p-)p7;gL zK6DeweXXRw4|O<2mtI|rXw$oEZyDNus0y3!e_;xy$w&u}9&Dm$@XI(Ni;%$B-intl zE`N0U!(8L9aeqnKLS?1GkqRa`a3W1)x^c}$`{G ZR!I{iF;VjC`m zlMxb+oH3TY(*GNgHEP4MiBo4w|G^`TK;qLdABYnP^nD3o0K U9U@4`+n{bW9olru)36^T z7R51G#`I~;GOE7c3+Zs5Rckkz_Z8ZMp+%NKTq&3@w=JiR6`fPHb~8a@;@@ p2P&XvddeaAbStU^m>kKsr-Za>rr!U(=w#El)>d=?{G zXP?$Tc7Xfm4syX*;*!_8k#rY^d@mU0^q)p2LU^jxs+FxMqVo`SV;_+M0SyV9y)z66 zwG5vr7)E9d1+(^J2~oy7vwq0MF(fpO9W$mG1_!anJF~y1xR)EYZS$@e_kCsp`}VoW znKLJ3?b`RxbPx*a)M+A!#Q6R9pN#-;^yon&&LGkS(I-e`3$yZ^%$YM)vS!U`B5<%D zQ8pOz<8^osa^Ap_B}-{WW8m`vQ8z`3lr;N`6)SC)UjHCE1`#J6J2p3mZtG}@ZQC~L z(4OMbv}qe{YXOtrrhNITnlw0}6e?6)AUb8ql0+kA%4u{?3r|%RD^^CPP90;8mnv1k z 5{J5u^-(;De!H7}A7cOBXJjHBmGD`;U|Y1&W#|rpuQvNT*Ict!j0s zSQI0kW4II6gOUYmVa9pWIvMy!H`%!JuzBH>uT;(4oADZzf+U9ahJSF#0RywfzF{5X z03obIjTYV0mv@LGKX>UNWhzugG4sHReTbaF*gVTn@23pIq9CZiRxkfokRaIJ4r!E3 zcpX*+0jFE1wzfk 8H{|k(F=Roj5ZW+t4 zj=VA$?u5KE_7=`#3^!iK_JWLeuj}yo%NxWQ82W43$VnrmWZsg3VN>>oI)3W%li7s? z%810tlRuByUZF!2AjDXPvW1EjGG#D>6Rs1+ZYCb99G4{UDFR5)i(x+yE)dybZxC0I zcgC_yDm)e|oZoEzHFAPXn>Amy=nz6{W+tng{Sw2XtUNUK`>~E+&8^vukc_x|nG&)| zhx++Oq}j6FMI&Uo%IQPf%`e&zn-I~{U6aNm+5}NJ+cqq*2|^HcAQ-`{ND{2qt5sEp z{46qpM~$i#u*+u1SA(1smO-?^&?n@8S@8EnGvo=!P`CX94E8~^dic=u!wRmoOJ}k> z;W2v^%E6FZqUUcvn{~Xm5nVKI!BVr0@(^HL_PGBlkDU;DF6a=@;K4(gd^(6~LZl5I zx{xmjkwB3mz0bpebIPg6+eIS^A8I}dYghvI(?}qo2vjOvT578ZfQXJtD%jW?qH7=k zSa#{^RU@DvilW``zsrd;XJn)1ltGk=S3~s2Pe1->OHhj>vq zK8)hEyR!2g7i>Y7P|)*{P#BPd@hj0ntLJ-!cqELY^6zy} )Y-G% zo{oGzmO%`|y)LYIhhX>t0PV3C_OQQ2{rZ|pp^6cH__+llU*0goDsr5ZF75vR5%&p0 zoe&MuwQD;aw$n>~{IR_Z9QeC=zu=kA5*5(eix 4(+O)Q u*~m&{PBF=J-hL|&xdfN+yPe^IGasg~5Q|Dy^`D~vFMVLxr!bkfAc zYvsC5kh6UGA}LoczwFz0-m20JZ9*bn%yzVF*#aFplvl6e`MuG-`%n71eJwR==#Rs{ z4^$B ?(b9NzQOZ#^yo3oDae~Me*A2+UaOXSbTWp1l`QEV6k&-p zM~)njNt5O&n>adTY_jRsy?eJ!zx(&^Zt~tB`pGiP4h6?O3~Cmrhd5yf(@Xur*+*x( z!Hi8OjvkgN<3~zyk0_XM`cQfE`ZZG~e!@gLE%0Kwbn(1Q8Z+E>ACaeJX#ZYDAQ{r{ zy)sw+hiWom^j~uM(gibHQvGV>G{43i+j-utK#YOVf~X#Q!%(R+s>H&w<;)|^T6OT` znX+UzNqxQUx39xD>-eC#dijzhu?zk3&3P>IX#$8Y!R$&%c#9!TSM*o%t(&$=`)2LU ztW91&oI~m_#uv|D{B*_Ml)!no9-?Y6t@V-xOHAk=iiXqS1=n<#hSy)iFuis^9dd!( zE~}TVmIHean8+A!s`t~bwE9c>=@X|tor7e*jcPP9IcBWkO`ZzaZ9tU4wAygwsIhF_ zs^#H^_}+O(%})q)C^?D#9fR_?iHQ-5}=)qF^9y*c-P0)%OG RJ~Nf=gy ekT+Dae~MbYL&DjeT&4SXP2yBx_EUGMTJgJWDWq3;o9MFwEpszjig5qdBp# z4p9b%Hl@>HT{IF1XacE{B{TV0<}X_&7*=C%HFXvq49z*I5A8_m3o#^FqC_TN$_gD8 z)IsyfU`Ws!O(YA^#xe*tm{Pfu3O u+Z!TX za1Hxt4jf064W{Ns orp9>j2z}>6F=)AJslK(S**3ghB++&VBnNi{{5c-kjAM z356fJM(C_t*hU_s6`F_`>kwsNXcO8-`|WLx?a; z2E%7C3DfN`HKoCyQEK_E+5o|$ehxpe~_X@ zOY5}KC5=OPS-*aj8D3PWQekcLd@} ANr1JMk#F%1~-yG96A*E(HI+mNH@*|R4`G{R@Cy}*n%BLc_j z&-?2I^0i-bkKAF!0-!4{LvnU>*PsJw$DoWXTfal+IvpsTJG3yb&`Q;6+rm$()T}2X z2lvyT?UTySoqI?x{duob+h)?Zd0P#AxM6yYBr=$%yKS?2QdP?%`!1fkD^#gr=1lFY z1N1TXb;YVRrB1_UX3D4B`3l;IB}$ys7WakYnAaQo(rQ8(%gX&wRgfvTNsD$8Q`2X| z?JcrqC&mQ#P;~6=?CFz6`LW-3?aF02a&W)x=L73lzJf({|31yITGWIHS^K#RI07x& zx6u2VR ~E!Hu|gV-62d3~qyOqJoxArlukUH&hnt_Hj~qLp*>tmL2+cejOoY8aov=5I z&50Ao{pTS2{aD9%B7}Zmo^AZ!K*rw@gZr3J4;(LAINt|jf|lv~IaDb3_Zh-qwr^Z2 zNY>Iy<9o4< q8TMyy6H3!w$9F;vLLE@o(1*gMt7;#n+Qwkvn(bRPwNB@f1paRVm^KLGP+;wJ zF6!f&K^F5yBQ(s)42%RN?VC20W|~DeiiS?i968c_{y V*}8gQ B|nYm-f%Ec>JOx10*UoE?Ik!4yR`h+@LH*9F0NRcfU z_2XLcbW9SaRmz;<{ddw#s{F*!F+E-ls>byB^S$nt`8w_gs)RKcH3}fn4X)Wp=Pk$g z3M8t*`55OEQ(5DhP?%r^bLX~&6(K~%N)CgJynkrMV Qr#7brkb zckulJQ*f2jds0OE-Jp7Pa}BS5@EMM=PbrcnHJO5|l`n6$t#TNnWv`fFoEpM;P&cM# zDy!3LA)IK>!GmV1rvjS27}G}Kb%i!yj`ZI&Y>M_}2;|I}&o&08V#Vqv imfCxmcd3Zd4m>ucypE)&MFeY>;yzk}?*2&tJqeVkEE8tWKlWUj@S9Lq9i&TcXS zLkYq8uq;_}*shE3B$$o})~#EA88>dICZ!prS%xc`aZl!e#~)0wRJX3@|7!@hL55+3 zm>_fSkRgAVEW%JaI(F=C6qu`5FKH&?)+TfC=+V tLih?)A55wA>#r?McH)T> z=a^?i>_?&*s6)Ma4Hkr{VE*vx)$5yZqQ{RPntG5J# }WhQ9=IrbA(uPf#d9MzqB>eLtWOeo+azHOA;OIXm49Kt&@ZMd?(rBp0xe3p2=36 zDor~3Y8+-A^N=Tv71m_FP37g`$6*@DhI~K(q7X!ruD!cTp=^but-fw+)UDyETql+J zi 43FASMnz~Ke$ilxT$%4hpO_t`!kt1r@Ko}$RK lieMI!Kzc zc}g+R5MCeDro}D$SODL3 z)k#IH_3QVV#3#NxBXE|2XwgLf??GT$vShwyDW0iQHLVJqo$;a75WQ;DD6M^4Z9-k_ zfB1zcv}VmRGc{ATY{^V`43g?#dMOw}oDkyk^UvJ{iEo-TsisqD4b_auWsRUSe*9mW zA$g;Y`&w?Mr XCN+{BN1WrI6x_JJq ziJ loLSJZTc!Sf-B^#zT~qP{OBj)*R|T zchP9q7L840k56T}Ki~*ZqzO2dtjV1KqDzo`2gz 1)#sLumBIB9ois|Loj#RF$g2BWT7E0S z4CagO-o1mlwaD;0dh`qxAUyv#9~AEUh7GIa?%mr`t5zdV-NEw!-ZP$)+Pp7 `GZ4JcggiCv4}G?EhZbgX C04AsI^A+vDW+3&M~vj26g5zHl8q+;2PSYR{zRSkkFfv_e2dsL5+DH* zAOR8}0TLhq5+DKJ5O5iivm=!n-;na53{p|goIF+*&z~ia9zHN>sjZ^duU^slg%8N| ziKFC)YIUSRv(}zc#9QUKBmoj20TLhq5+DH*AOR8}0TLhq68LrrP?+)Oy?^)aopfs3 zM2;TXFE5@y_qLWdZ{EoLdv|5djEQpSz#bVoX4)s`4wYK7IwWQ+fVVuklLSbB1W14c zNPq-LfCNZ@1W14cf-(Unpz-J39niD09NxdzM}fw^T8KEu4jqvGJ$|*{&2 uD@c0wh2JBtQZrKmsH{0wmyxz!v93rx^?22?;kyfCPdB0g5z!yp7MFKa<-xZ}{=7 z_r-7BxGt!JMgk;20wh2JBtQZrKmsH{0wh2JBtQZbX8iaXxO(}bynFZ7k7vCvj>N*( zu3UP*gKH!}0wh2JBtQZrpac@%&pn2*0DLKs011!)36Q|IO@JbeAMd~WG}>?cc-H&k znAz#!ga6*|;2H^#011!)36KB@kN^pg011!)36Q|IOTcAF&W==P{CNMPM2)8NWQX+Q zS?`O73>i|QMveY{2iHh|1V|t#63CeD^a{oT1jRecK9K+kkN^pg011!)34BHZ6lwej zH(}zWD$<1T<5};E2M-=X5+qLYeh1e`fCNZ@1W14cNPq-LfCNZ@1W14czF7hkX8d^T z!-fqfapEQL<5};E$4ih m%86=8 Nyr5u=a%QCV{U*fFg}Qxd#s(Tm}pqFHKu^kmxaDNvKevKBy^F zsL zW)&nr0wh2JBtQZrKmsH{0wh2JBtQZ|nE=N&1?9WTzL5Y4kN^pgfM)`W1~q=jSOCvV zxJ3daKmsH{0wh2J4nu$ E`NPq-LfCNZ@1W14cNPq-LfCNZ@1ndd849VG%>Wn=R zf3C-AP(fbbzAvYn^%6H#W#Ffp^_15)?@HW8Klrm&o<;&BKmsH{0wh2JBtQZr;0=Lf zaXU 7T_Db`Rq0ckN^pg011!)36OyQ2vDT)A2)B$ zir>1H1P>ohJ*;4zMgk;20wh2JBtQZrKmsH{0wh2JBtQZmBf#*EkJ0htu`mhah*NOY zy4+kPOyYQcJe$QGp1|s~%O)}wz~OHb8%P2qKmsH{0wh2JBtQZrKmvi4fWwP4&yJjw z7l#f?h!C$OnA1CPl6MZxI(F#{BCc-oWUfBWJFvM)aB+1FCU4({lCa-rk?@()I&f>* zG!h^I5+DH*AOR8}0TLhq5+DH*2zmrA#JRo0Q!K#uy$<$tSf%FmwVU!}?P`gYEs7*> znZ`ZIOCY!@$s1-dtqc}2cpzx4Hc{sTzq|9K+@82YB9<;Ip%ZdW@W657*h&&00TLhq z5+DH*AOR8}0TLjApg_POg_)=OkBHNi1CqYo_kl)`v0e;;Mv$=@tXYj?=1nRw^CXe; zv)9U-J6R+`*6*yNT#^6@kN^pg011!)36KB@kbv(9+ X=S)c=rHd7=>bo;oiUdf& z3jv4A68z%yc?os*uq3aSDbNWtUf2e%O%-dvJoJA@<@u>|fvfFoEeVhS36KB@kN^pg z011!)36KB@1X2PHCCs?JdM(elt&>DmHHi!Ds}M+7DV@C9v0hwXzWyrL=S4|?1W14c zNPq-Lz<~&?O?193V*woKhOj9lKmsHX)CoA0Nb}#)Rg$s+hu3`V7hQ^mndHHe6<@m< zygmt#011!)36KB@kN^pg011!)2?Tipjw8%ya@yc8?ntPp;etGLNAFw6|) zu%ow??IQsaAORBaBY|HhWKP6b06#)waS|W_5+DH*AORBiG6Wn(q
&x_- zSNSA?7}?_p?g@ OJ1W14cNPq-LfCNZ@1W4cu5pWnK zB$(T~Pj>m Pkb!v-vh}CcbfM9#{&5G>OP<6ByK(* tylbjq*z856_kBJNfCSx)LT#C>b$gj+84`Kw`v*BDZhfmsF_|Tc^wQ z>v!arU;Z-N!8D2`QKC4~rcF(WAK&*0dOCI-s{Q*(`MlTRrcYlc4H}deCnqP{wYWk8 zBtQZrKmsH{0wh2JBtQZr5TpqdD?UY^qmxMKVuh;)>5c}4&IKBg=J@gR^6Rg|<=nZe z5;CNFvzIN~BEf>W3l0!AU=bsRSK%Y75l9e0)1pN+vma3}5LaM0ANAb5`#>^eNMZIx zh!9quJ$oTNdp4JK>vqYbM^B}B^D3rH?%dx=(V{tI^5lOdXU>d992zs`A4#74!{j+z zw(OS>A>4(do;}CO>C=~Gz<_oVHEKi^e&$M(CcWhEzxx}320{_UCI~h5BF&R0&jq5< z%9W$!-8)xVy?Te#t=mlns7a=+zWK9i)eadnsDr1X2@=FMkw?|475B8C8zeviBtQZr zKmsH{0wh2JBtQZrKmuQf!28gOuXBB0Up0OD 0dO zZT4l$md*$#D_3sSsF#;2faI5A#d4|`vQol_4`a5YMT;aq|2#w@M~)y9Coa|qm_G!9 z3L;jjROu+wrY)64i#8f@$Ju$W6fBt4)P3j9e=4v CKy`Qo3|rsaCC+EM4lXLyi8E&Yc^Y`tS$Cla3ubufj?@`TqOV^77?tS+Qb^$yKvu z%K;To;z`Sv)dYeH3=ukroCzH|lo3@hBq?lIcku`jIgcMdGsmAlf2mP5mrMi=qI(cM z^WAqTO&!)B2tuPr&o>c0%a?DFh7Bv2LkAALpZEIc(Q_upPWSF(l*>RBhTH^Y^XJcO z%4W-!Ub=K?Ea}r%F+-#xMG7wo6ULUaXRk<_G)b&WaY+IsKmsH{0wh2JBtQZrKmsH{ z0wnO22n3qwnN6Ga3X=FjL@8J>n;blN(hNUBj+F%q)~Tp+&qTZ+Ck*ndAW{W_1%@t7 zn6OAvrc9(mdWIM=Ct0%iGHlo{204TZM8qI3%$6 vl@syqR?9k^9WMty)!= zk|pyRk!Hk*Uj-2`_6E@>Uc8uQ7X%ty+cM;}xpnKlv}-rW(|+r?*JX$hAxwUp)TtB8 zm@!>7!lu0`0+GowYrR8bPGZc3=uiUj-4~>{6hjH zKmsH{0wmxt1RACZ9geX84s$!$5E38(5+DH*_(}v^hUDxRXhLW()+kk~L?#TTNRjL^ zbm&Zzpan@|kXR;i ILlS)8}Ss{XyMG7K5ZU zNKgY+WzwV`wsA#B3WMyymc@$~%cvk$_zd M0_MHqL zKHD6(|6?gG_WLjv3t5l7+S|8pO+Co|YbD)58_t|rDlRTZO?$Bpvl8{#X9Y% ({#&S{XB@lvuH% zN!++GZ1j-X_u#=(^5DT^ll%o^l(J?`Ydh|B1!JU|Hm#&$3=+~*) &o&@o9pj7WoIIh!}{GYM#rG{-Wu z8KF4VSS@S6Ps@DyGHV!7CnH8d=z*O)dBN0yDXLPZPV!OV1>zI38`DUD1W4d>637s4 zb4SJkd``lwn*>OJ1W14cNPq-LASe yf91l3>pFE)RTDvT DslixARQ5YgbFhP&JXA zI}fXnk-^+=WZ~Vp^N@+Wv9bd9=rPtr*I>+$y&;OFOqqPLefuHFm+yN`{E}RD@1A9n z*dSV`SFe_)oj3>cUnB8M=FDl#)J=$%u`FrQc-pst)~2WB LRsa?m0Lz&_~VaOnv|xcAi2w{SFcq(2_Y9R zUYGXm>qw3q>22Z*1QZAw7y^Z%KbU(P! ?h)S^^ z234a*Nh1b91o3L!x-~V4U?9xE5S8OK>o4{r@r`8|j%9C%%&|lu`~6r)VjD{|LKbAp zytc)Do^DJ51)Df=kxu2*);i^rOE(EL`H4Q+m;b-OzzVznVJyJ^&yh8d011!)36KB@ zkN^pg011!)3HU_7VMH1y&5ZZ%#TyA8)_p1@uMI}T2jt3IIc|_sZ=X^m98JIP X?@5r5faPpDhp3q2u1W14cNPq-LfCNZ@1W3S_1Xlh~VzZZ60AHTTVkAHU zhJeF}G-yq*cq!!BCHLv6d4Ikhf#+8qh*NBzhjD$qmhs9YKmsH{0wh2JBtQZrKmsH{ z0wfT`2)GQ%+0miYnJ6U+$%TdI#O E0IeT4m^!!OG$tPNPq-L zfCNb3GZ09(ZT)V>0(=IrtdaysfCNauM* ;a z^w_=T9ysX~R5TJG0TLhq5+DH*AOR8}0TLhq5+H%kOTgitzC%WjD&fmimE*(q$lE6` zKX30@yNv)?ANy;!gezG^a1UrCKmsH{0zr|$iQ@moWGp~XytC{R36KB@kN^pgK+quI zFmr6%;|vuyrbMmZSWeGhE@6T{l=x**NSN4>?2B+cfC#+2{aCK8JS#8XM3HF9JXqM! z0aP=qApsH~0TLhq5+DH*AOR8}0TLhq68IDWhZJVe=wM+&N%Wdk >eE*}{_^Gny}p}-i5u;!w&PP5cXJ9ZZmz+_DSB*)T(*ux2p{%Sr|>ul zI3$7Jho@M}SOAB-HEa|KkN^pg011!)36KB@kboZvIIKux^&@z=uoA6YF>BM|m$zmt z6}PwVBx-}o4&PQbkOWA81W14cNPq-LfCNZ@1W14cNZ{)daJbwvUl)fXTzy~mxW6+N zz!B~Q+du*&KmsH{0wh2JBtQZrKmsH{0$-8 3o7W-%5+DH*AOR8}0TLhq5+DH* zAb~GU;PvrYQ5XyGrK$VxdM-n9c69i0PX6oK*E=hGh7@wDd2hL? x@WoRcHn4Yq{@NPq-LfCNZ@1W14cNPq-L zfCNb3n<7AA=9{|R>?{e8011!)36Ovz5~!T%R0DaKt;qHjw}ckN^pgz?UUJk>< 9O#*vp-?#RJPy;PiWGuL~t ^m}3Ew zcB(FSR_vBXE+^&Pi`RxttctlMM3e{t%88Yc011!)36KB@kN^pg011!)3HXzM%aEKM zInK$S@OT;t1O@^T(k7D7v7*?NnUK*VY4}X7z|eHIkpxJ91W14cNPq-LfCNZ@1cESu ztu5wu{xBARB25s!>fI!kt)g*Yh&;~|`NZ}+(j?@H00wh2JBtQZrKmsH{0wh2J zB;X(fD9kv>jbJlK;Byg(TfLA3(_}OfJeVYI_k)O&)91Pr>m>maAOR8}0TLhq68MG* z>~0@%<%h8V-!Kq%odo wAszo zRqpS(C^yEsNQCT}BvOuafu`+jC<%}N36KB@kN^pg011!)3HX)(g&E(HV!3acz_U|V z u22_7bJzHI`ND1#T9Q?OtXBUcjR_jX;9TQe_7oO-1hN%Kv=6WRHIAW$OQ zildAL2ndp_g9J!`1W14cNPq+ao&a;t1UysL7{mxXKXX-H>~@jVZSn+KfhMruk{G#@ zNP@y~ U&S4D0tLfyn9Ni0kcZ0`ZJS0wh2JBtQZrKmsH{0wh2J zL4g2;8OOSd_tNgwd5@Dw>0*VeI#$cR@z%ILe T9IN|@t7nwEi#9n{ zqu3e}AOR8}0TLhq5+DH*AORBaCjp8y{shO -S1rou-NASOh|Z4=wWiiDNa2 ztswytAOR8}0TLhq5+DJGB~T}O)qfZZ;IOyHOT#GAcmcvq60iuoxphav#*J)ka_K+> zLWFh`*Vk_xs6}iF36KB@kN^pg011!)36KB@_>TaE8UJzPS>FHwC%1RsKraJl7sJJi zB(HBh2%L>)t4V+aNPq-LfCT<;0 SWuU@^DBS+49Diahowrx8o$Bv!z zwky}K-;t9iFWQcQ!~XsH{mLH}Dq2{1^B;#f`2!tKApsH~0TLhq5+DH*AOR9^FajYQ ztUYWF2?Qzvefv%_;= M&emXa`GY YWi~M&}kVlVvbCk)?21d zT_QbuHka2rBxk^YDUvBuYU$FYk*7XSoVZx3S1&G6qC_ %(Xn7s2k(QFZ>^SX8|5nvb5ofD}e|kBuH=#4#Azp-Q8_*cZWqbTx`(=g1fuR zVnLS0-QAtI{9T>@3^O4KAxx5yub*df>&cUH$glyF1@jRa2KPn#rYE403TvK{<0~ zjM_a;&zm {Mz2!Mco5HQ M1>BqFZgIOlhcO$$WI<#(jG8=7aE@ z*{ty?RxFRkyXDIlrjsWx%Axk|JxMicl$P_bNW$JX+|FJ*ESPlaR9`$7p@t0y$o?Nb ze5N~h9#OMqRfRY-O3ud(|NQeW{r-DnI& Oc$;ERJ&6>5EY;3G(`}TjRd-o>Ppg~2!BtPZOomt)&E$XEVhbstx00@8p2!H?x zfB*=900 lEj`Qfz z3wrzZBeiN(lk()rB0mckZl?S9pGgm$8Z}DEF>BW@s}hUYTd02h3aSJ 3#(4r-jeH!=@P5h2XX72YI+sDJ ?LDq zX+iJaeUxqd%;J!powdwxEGxwy4&ickPA(spEgLVh8ne)&?&-2(#ZH-DM|p?sd-cjz zc+mvQ@j1s#fdV W0zTvsY>P z@*N@}t}j_xSyJ}w87On+S~OxrN12NzI^#HOiSx#sIu)7lm-D>vd>l%|f(wTTRjk;B ztgWr2FvEFjwr!g(y=R6Foh5AYAkHJhLJ=n%j#_HhE+ayjI!P~{3m0z4FsW3joaFO} z5wj_E>XdZu+%=g~hu`J=GV|w;5JJ-^VbfBTsKOpK=gwVK4bR>*>@^b_8Y(?&I3$Xh zD20!0QjTugv*)A~c-pk7r8MIT0w4eaAOHd&00JNY0w4eaMn?d`jL~g57OX7-EVyLL z<|%WreE#e&1rqj*;XEz>{dZG{8!keS*-1;5Y!zo;4;RA5Mv;5vs0=S!wdxOAvu3YM z XA*Ykf?ZOqD^XA~e`6ATmxD U3n{&hPdD;8+&6V%htXW2$uEbtD8#efela&q;djsv- z^_TFdu@RwJO{Flyd1U_lvyTj);`zC-U^HviVCgAy@7_~lZ<@x9D--9_`S|e*J$(3F z_S5 S8i8Hmm!C%U1<*AcVGjuCHUWq 9tkl|!GJG^wmnSGsfo)iWn2j;=5Z7L53GCQh8pg-@DNx0!_~^^!KNtNP +8l+VttlN)ew09$OhOptVMGu3VXjKk+I4 z&qR`)63+2?74Lum2!H?xfIwUcB=>0A4ZZ+zrG wP@d<^_^1Oi`tqTmo4vP$KsyqMQwM-BJ_C^T>d0T2KI5C8!X z009sH0T9q@0uX8Rdi!8}LKCoZbt3bu+35LxggPZO>mQ9D<{wP=)?6dk=9 yoLhmCoA@13>@; zKmY_l00ck)1V8`;Kp;K@Ak4&v8s0H#0`_?`5r6cle7W*~Uiz%3Jj1)_li9Ep1V8`; zKmY_l00h1#km16kHt+@bo(pO~00azz05Ulk#5Q6PAOHd&00JNY0w4eaAOHd&00JNY z0{Tb*!i+xd8f*pu5C8!X009s%Bmx^N1G7QHbZ5+R)zkqGUefWL9q7x|hpIZ2LXgN8OJ_jl}1Xyu~<$rcd%87G8QT9DASN; zMoI(A1_2NN0T2LzpCsTiy{*XB=1Em6mTT~nucA8$fB*=900_i~07RPjP{TVQpf3bW zOeo#&HOa&>(oxRT)>?!;719^$VJ8TH00@8p2!H?xfB*=900 T7EZ~?A-5+*h_O6-)YZa>7y<-900ck)1V8`;KmY_l00cllYXtI7I6oAb zfwhJc18JK;(6e{+?%)}spg=OAaBUB7RO2~hccb?wuG0J6M-6J-!*_hilXSiS;#+BA zMmAYJDMg9gWMT@j+n~N&SPTe&00@8p2!H?xfB*<20Rf0KNdO&F#!kTh?o)cV<0v_# zv!l%Qvy+*PMeHx2^~VI-<)v)hi&FC39zX7j9zP`T>H150F@Fu2rgW#2^-4pa`5`fM z009sH0T2KI5C8!X009t)i2#I|n8+ka{XN&_x022mAW4=S%cSr2o+h&|&nagQkt{(Z zPeIWV0l^Xijh0x7VH|R}%8&o!_w-=eN^ 1{e`k9W1s9RrL8BTRv^mg{)WLqvQ6tq*}4{?r?b~lL}(a@fB*=900@8p z2!H?xfPn51So?d%p6~_Gy?u$nB8W6GfI)TQ5(v2SluSRrAeUmEi90c71A$*8z#({9 zJLIS5i?{vaNO&CtKmY_l00ck)1V8`;K)@IYK$tPcUDv@izuSA9($)9ULCatg2>h6U zMG9MTNNY*{LSRGz0T2KI5C8!XNN@rrulxT4Uw{P1j0r#h1d@UPM4F_ajyW|5@DE$Z z%nllLcmM%?Bj8>+JAK%HO5e Uz9ci#P>Kl0QSkb`k+2>Fl8C^cAw3TynJ>V}vBgFt(Yi4$2!H?xfB*=9 z!1n~8)O^nbHHl2XBqWeb%<)xBWbBwO0SF||=15;}JxPF(F(e3p00@8p2!H?xfB*=9 zfT0q=uVF*oSv^{p3Blz+kG2b@#zKIPa|(X?I+h;B(&SxcZ-FH91uz!KSSJX800@8p z2!H?xfPeuKfJkG2o2qw9ium!_#5Zm{pm*;+%B8(|^MRf|eMR@~X=Y@7|NfI|=`UWq zrNF>o`5X}uL3i#vR<+^g=LmfG@L7X3??r57&z_U9HLKd*zWqoyZ$3~x$8>Z3`h5x) zu|vF%{5f^%QcPW?osS>CjImw4;o-yQahhNKogdv>x!6;%_ e2Hm$2h zALU`exH}zV^9A_y=_}p3^^gh`%Bj5aQ&$$5ME(-WkikRaJr*LaUcF1Xb7z+I_wPTY z)2FXcmMrP0V8I+3eYN@U^5t7%0W4RpOcWLtPG)A28t(GtJ1Hb2RK>hcpFe5Ts4kQy zO)5FPtE)3zx^$a%?><2R0fDrB{eEiIs;0`c%9V>z;ljD(Gta@?GG|UpojQ%B9zB|h zeY-_lwj5IR=NlfM_v-oc*L3jU85%#no2Z*hLx!{yd%A&&70V<0vv8*_*8ThMb=og7 z^$s4~PBmW2l#X=v>{U8?^qi`$ckdRmj@O$lo2RUQ_3E9xrb^|c>i4rZCZ=LTBYyTR z^alYD009sH0T2KI5C8!XFlGV}X^eUI^ z^!x9PXzJAE@;Q6<401n|c?S+`BSntDz#ytrsi^!YZM Po6AdPnJ{B zqIu-U+S-yDH~vj|MRm2bv>@K!j~_qFJ#XK>E*&}YFFkwqS_m{VWxwBkD<;S1hZ{HU z)9csoDR17a)Uo4OF=l1ir$B-1#QjQ^%rBq$4}0M3-hG_>{R1g9G)#V1nl`N>1;D9O z`>Fcj1_VF=1V8`;KmY_l00ck)1QLkAZ w`6 zbN-> >Z!1Gz*yCgS_L;-oq1>eaiYNOSx4BjKrYN_vnqY*>jtfBs4wHl=uNtX;d0vSv-E z8jn3MxGq^TTWZpz3bF7I5D-KgHXM+`LFv*3q?ZkQ#_ZqkM-Lu6r>|cFD5_0dw{6=I zTC--d6leDBJ4MHi`AR$5x35E;JCB#1EbRGn`0!c!@4uTue8@*disUBtvU&OP9o@bA zm@F(TsAkR5LWJ5)c6K&W1i5?ni3}5C0gLOZR4FdoQ=~{n4H{Gww%d`Lo3ohzs2KMK z9Y20Su8(c1U%!Iza=Aeq?xbE=Xkk%@%ZU>g#Qbm7o25;4>XcX2vCX_U>C&a90tIr& z{hU2}h^k%vX4kIcQh3?1;~24x?9JoryOrk79VVG>-+q)zl*lIqt?AQOiZxV{{hKtY zOdRIK--DJdtE;?_ShQ10u3Q v- zT)0W(D2b3BFzm^}g>#mu-$%8F+gNOf6jt^Mu_e9yQD3J{9~wEbGyU_=zfve!vScjv z>^WI@iL8`j!}RGZ= H9EZXGDmt9uz`fAiDtqL#V@Giwuhdqkct=mVu?(W?u(U>t^ zrO-2Q;B*>2x(h8>u!iQ$Su4b=+Vbk?=pe<6v18}UbxobROb8t7WcU$##c(Lk=g 0x0clVS+cqu}zu1+#!j)fxj)ZtRARv8gO^*4kWNdtdC z00ck)1V8`;K;S0{gyl-!;yYh}pBw|-LBQAv`1yGEgHmJc-vT{YKf95zy96r}ojTQ* zE-sv4gcF$j?|=QJ3k@qd?B2q^+Bpt}U0~RSg;f+Kt1YVp#f#_FSTSd`ee&d$ba}~} zH=A(JX(rWyty`zll`D6oLd1zsILQjD8Jrk~ UWF(lYx0i7sEhgBC9yBV1A3 zC{w1iG;`)Es#mW9ak7_It!hYB GhxHx+JYcNXTLUeq)CGV98fi_7@5 zTD5vfww!!NQJ?rdX2;L$YP4?Mewj#S@!~B)UFsxUgPzDe{^y_bGWLmGl~`fv(xo9S zTed^0H|!F_32N9iY1y)!!WC(f u|rW7Msq=;HL*$l@%tzJDz#yGKf!$Je4L|eBWmYIj0ol}T$!bGx@ zP| C2Y@vF0OE_~CnY zA7b%{%dTC=M6#cfGA3)_z_uz5stMF?n8D%0XN1txUJ50(Yxky2n+{3whlL^*u-FZU z$FEkc1aSuGBS+3j7b{LY! 7alB2!H?xfB@0q?p{aW3xIC|2!H?xfI#9BfJl?LyfIrm2ylWGC2KCf&T%OmQ MI+$4;?_$Coeu(mRFYbZXTqE8=ga6AMji z*6iWeH41xk@R`zFIO8shHh=uFNM_3&J9dFM&ghNs@JKDi4nEF^kD}ss&UCD;Vr^|D zMHWuDqh2^0GqYAc1q +=gi*LMFES9m@6ciMq5{%gEiuV@<1V8`;KmY_l00ck)1V8`;5{tmM|E!)^Gh!YP z_(=jRY&?DXN+u!USJ_jBGw$*a{ViLLh#%D!Qb=K;gOii+kxlIN(x}mILNxd!JuW!= ztf@Hjn7t!7nF$xp1k9clQ443x<;=LgzFWjGK=tI U@1ftM*wm?0J=ur Oer>3Dh>V3xO|yzV9OJ2LTWO0T2KI5HMr{ z5NQl~clBm%ks&=XnX8 $YGFY{T|nV>KD(MfT)e#_ZRUH$iXV8rN{AFcD`8umJJ%Pvb*yAq(UmKARor z00ck)1V8`;KmY_l00iPnAogFxQAWw0)9XpYX01HB_SF0V8l@W^K_FTJL4kpkA(aiC zxqgPSX3whX^L+j~%GRln>RDHBX3t(HLzvjBBOyz0aEKIUq9)i)$T{_Q?57p_e$c)z z0H4bp5D+Lmr{c@z!= M8F@P9z3|0JTYvC z_e^3?#vHK|h|rIJ-(# MLeE9-FQuQmA-i<#bXG(0s HIswk8nz~CPy0z#6y*c$j>*HfU5YQ%p z(9eN%YyN2pv2`css>QWAG{yn}5HLCdx2 ji2HjlnADM;+l4S~OvQA}3Bs^?T;zuANJc1%ZLdn$1B7OtlElD8k zYcK`8_)K9T;=7pKky5p-FPK__4hVn%2!H?xfB*=900@8p2*jHJgqe7w!;1+?z@bof z;t!Y5PyQ7A`U4Tt(!?A2*IQ5M$)Y`!ZE}ZrkAWA7ENrdG&NT&@m_a1`(f8qS{mTEq z7vM*f&<+A100JNY0w4eaAOHfI1R&CA^1zc05-@kLCH|nqpFntEFqtK@A=}LE@gD?l zf&d7B00@8p2!H?xfB*=900?NGfS-?dKm2!K?Q_M5hDIRy!`gxH1u(Q-#d<&h1V8`; zKmY_l00ck)1VBLN2*8C#=e7g}fj|NfFgK;(XK(4w=;aA8IEIXlK-isoRQ0PPU74^Z zx@Oer00H| U5ZCa>2^yJ0j4fB*=9 z00`(Nfg8& 8G)j{ed*o#J9MJyM4||ys}tAK)yeB9 zbB8KqYH1AV*i0?9UV|@yk$vs4To3>O5C8!X00Dg>;OFDr&lvu-RG;<)wt@f%fB*<2 zAc3@XiqnNbi|OUzOB5OyOrLK*B`YTf%GSG10?vw|K>!3m00ck)1V8`;Kp yVYRgKRNRW<%Ng*N>(bsz3k)KmY_l z00ck)1VA8h2tb%g9L{l@ KMehFcszKjIHiHaMOfdB}AfPoT-h@g+x9?|E!PblckM{!J& zI44PmOGH?hJj%(&H5uJqv{Q#IjWo?7g+1A&bt9(&naRZ5Oy})|fgk_^AOHd&00JNY z0&yn*VJ7aZ&=Uke00clF3W3lsf%JIG5ef?nq~y6%l1uqiWa*rNOiXp(InyqOJ-Pjs zGs=o|@KK0dAs++i%l)@>Z}m2c2r?y)>ZQmgwUZ7S3zI+q1VA7$2z<1Bd=I_=i9s53 zfB*<2J^_d{iO(D}f&d7BfI$#=ed02Get4hKHP1(8ww8LgCcO}7n5u~hS){Nf$NcAJU_tX9V#u>$EJc0lSfB*<2 zJ%Oh?PZC*wrVQmQ)S86nGF56zOIeY<( zX1lRa5C8!X009t)od86d*!iFp1V8`;Kp+Z%*C(%#rK<_Kl*|~V1&@hIAX%1_ bngzil*$nEGM^RC zB2Gr~q^cFmHHf(vTC_~SE`tl1J4eu$yU(>eGKK>I5C8!X009sH0T4(m0uX5ui!|l| z0T2KI10e8d(_u>2G`|6?#Bi37x@r!3e#p;o7KD|600@8p2!H?xfPj$^fG}fZ8;<41 zi$D*L25aC85HECi$&d+zg#?hfy_F#^QUBJ)S%jS}DfCN#{@D(TK>!3m00ck)1V8`; z2qF!>1RwwcAOHe!BJlO$E3(bt5U0NAl(+<3D`lmZM=vJsq?io^KmY_l00ck)1VG>y z2xOby;@ Aohlgxz5Ady_QFsQ009sH z0T2KI5CDO11R%_OV}Uym009sHfmjFxzIsd6Za?;(dHVE~#wc&ze4vn!P>ni%2nYzG zw{Jhn`iBpnQ$$3>cYO?{;=+ZSu`cEL^EZ-FU|?{p{bFs52#>WHjUWI5AOHd&kkADB z4O-;!y)QsQ&x-Luz`zLj`FQt(Qe$A7isgU+2!KFB5r_y2BNKD89}eHU_n)#4D>hG_ zyremE*3sO#>*f867jISXU%YsWe0{glr%zw0S+gNzA`+=YS3Z9HLZ3f>RW lk1if>_siN}qp3?Dw5{QNG{(WC#;!iAgVr%98+ zs{1{APJZ|5(4n&=pYGi!(!6;azH5(Lh2bh)aa%unfdB}A00@8p2!Mco5-`_Kvtcy| zfB*=9fG!ePxpEh=JIv GBrs8LE){ouhf>eI)Ewr`)Is{5Iny?am6i4zy-&p-P_``Yin zH=<6R#*vRtUwZxez3gKy1g#V)lF55#=j60^? FoEm~BU zTvVNK0|FqBxCAQx&%Z5v0TP!vW&;5b009s{mSB7bKmY_l00gv0z~0`LSdg%@v!*d) zx{{@(1@-LNOnApsrDVzMXuyD06dD>zFJDG_(S(Ob(A25RsYnqovbVPp9w+DM>eV}B zVPT;%s(kq(LKL|upM!%#=-IQ^ |<;#~%@=(Ub6$C&41V8`;KmY_l zz;Fp5tjTcq7Ape*5CDNhCs4a~S@Q5mB}4^VYTkUPOsdka-&EpICk{X2y5Qh%$!PZN zJ4s<8T#ChvI(5oPF{4?tYLqdfh+qHzk|Be;2z`nSZ90DZf)FqAQ_Y%XX!q_DGHDGb zck%YlO(RCkCJqnUx9=4F_FGp~C=}Oi*l>U vJ1MQ56Q9u9$KmY_l00ck)1hh&3Ax>JwiNQbs1VF%e3511( z)3$9#>Fn97w0iY!kymCc-Mslg w2vd;`9Xd _uRhyh;rr1B*Sz%bQmMOSH6A? z6wkwim{L=SB~ygwOt=g;nmKb7+1Oagd^4P|mqnJ`xif2crYH-I40F05! jPhVJ ?^6hA9;(l3RF&G!gk#veMweZDnqi<;%y@{Q1L$c=Cj HZ8W$|V8>OJJ?=`M5Ia3j}o-WtAoc%+meK?Mrrpl;n7i##uHR3Sp_1@rZ5fbd$` zs!B>6^^_ zmSJ3AX8JY`UQk|(#9T{y>0jT$}0DNXBzAT^43JhoxpykXS1@jw}-rHq9u z2!H?xfB*=900@A9VH1Ebqg(sC!RJN^_yXwGp1>Lq0D)g1z}_)jI5$k6J}pF;PiL9O zg*{~0bEI6kLc$AX8RgHPUH03!@u18FGi_RbYTtge5I;7myi{Zd@yFdgrSw+elZ}*8 zw{AIkLR7(mIi%Oi>eUm)QQm8*a^ 9#2s_ua3@aOTcAMX z+$`3VESXP+QStkuM$Hw;jE7SH{;erTjtn$%WG8v-HRrYA#K-;mwUjw?cwF|z89lm- zJh4i#iLZ|zzYuHKAoI+ymruot-l`8jo0^))d^jUUbfQ(OCQ9Lny?1#0!i95*(5jj8 z6erF_g8~8|00JNY0w4eaAYcRp{CvFoApwmMY&4b#0w4ea+8|&ej#LU48Gg;IWBx}6 zs~8;Hv~}wdnQfO{X#V|ol{{aXRTqwJnmv1nh(odzF-#UR7K+_z_U)TX>|VmLKGUYH z5URy)>d>LChS^Hu7Ns&n1`myMvU%PO8+?>zdF|LS(j{luu=c8YR(kkoDK2Jaru6sU zBjr86zj^cj %=S_!!AOHd&00N0gz{b^y0-t{%3kSCtr)9B4DSUj9dg 9mTO>;3&f&800fMi07M$&-hZqf1V8`;;!MCM zwIc;S{Tk=~=$Lo}ULCkYsY*tMT_xVEmP%cnp^s4$7&>xI1^5CO^;ZCk z{{aElGWp2PEhF8Yb&>*KeELCeG;5PU=+_{+x9~KDyfUNojl};|p@0AgfB*=900@8p z2 ^}#y|c>I~nENm%#oyufxZ*6Ex#d<&h1V8`;KmY_lz*q?Ez5B6Iw7vik zX^iD7fOUcZ2!KEW5HK+_rL=WQ$&rKKeWow>pVRwO? S%Y+ z1Q?AOTc>m)r<|T-QxS<~5&$uV1OX5L0T2KI5CDNBB>-V2N%3QH5C8!XFdPDwPRYng zeDtN -*172kx#ez5!Z(Yg=o~{0R%t*1V8`; zKmY_l00a_)fO%p}f;r+wpnCo*IpGTsH&*Bc0w4eaze*tA#I|%{h%Z?>CX+)w-F}*m zH=RUol?srlmBp_PkM}_U1V8`;KmY_l00cnbrwPD&=BJV21rPuM5C8#vC6KXAMY3{s zpj&fx(5LH<>CEqck!1>d$}_6DzAg!Ng8&GC00@8p2!KFr1RSex^oK7%Y=m^I4I+(> zZ3xT(0T2KI5J)%z77ljgQalHReEdowUjr%l-Dk3NPDYOTGbP-l7#RdW00ck)1V8`; zKmY_{A%GC4Sm2-u1V8`;K)~<_ o#wrz@R`a zj) lECS+7isp?2}x-J<_3XZCvanY=7sPD_;rpL0R%umCka5L(aCLrQ6K;UAOHdh zMZl?G7P4@#l_HI~y)}6@FPl(P8N|3Dp&`_=9fT}{*i5mA3s SKY;>M{vCkWCjH+>tN;W+00cnbX9$>>P?q0o5Q%Hb61mADneETKjlLkD zWdbek7ZfLlc~aGi g8)!QZ6XLcuwh#=SUdFj=$D|)*Q6H^nic6B1#G%jRj zjpL{Eb|Vwn@Vt4mi?4qKjhiA|X$HcTCXw-DIuHN>5C8!X_>KUCneULG0t7$+1VA7v zfsfZ8(wozlh|I&tHhprkad!|xfMwKf@_9~^PcxFn7a&@5;!tTxxkl9>*UG7dM@>W= z`s-$w@X%25e}0=@pF2wtK_=vo*;9B2dFiIHuu7*0 s+5@3Rr?v&gfB*=900 x2!H?x#DxHR$lPDChwQRBP{yu> h(iqgZ)`zYYqyF_2! zyLTTbI9McA`9bmb51>z h(3Jy6m38CdEUHvPeDP!(e{f^Wr!Y!@BQq0 z^XJb=)oYigF_ZuIv#+8*2!H?xfB*=9fR+eAq|p*c3 zdsWW?0f97R@D#dy`KFxaz=0EV>Cz3_wd)AYoVhf{sr&VvK-aF_rsK!Y(U{R9VlJA( za~(eHCtJF79!956U!W;d7Rb4|l7$+@F1|i`^o+)jpRMuPx9?aqBNJ7t+LrwM{)@Ja z*Iue*Bl_~ipDtd!PVe7;r0LUrX~~j}(e~GeN)~5o)+qyVMjti{Hi7^MfB*;>4uKR+ z%N>r!7XTqnhO@<32?&4y2xyJKv%P1?t!5UHYX<+A&>Gal97uQuW$aj(9 z`phO`{4QOaQ-k`y(} x9&@EMe$Ja z^2$a%dbFlck>r?5x8Fy~EB~obp*a09ae#cbu!#KEmN|1)Q1$BN$jr=4*4x|L$?=mX zPe#+GkC5}{&!3BikLWIilo>Ne$$mSwAEcHo>rndi9(48UZE|&Wk@ftCg`NLRT`1ov zTqLio=g_M;vzOE0AzfAdmiTU<+I1??%a?EH{Q0ZYrSovHt|!E{tzEN&^5n@zlcx+; z_1CqVp~JqdC8}+8#JUdbJQKAV&maH-AP`pq!+P&;8jUYNTwhO;eyyf0?VThOV^R=^ zl>n5QSn;3{1V8`;jE}(Eb2lhuX;0%@xB;%%qqY}4S$&2)n^w~5>h9lvLM>bLrLp7s z(0~73ld26*aR2^eN|nl)Ql@m0^X=XH4~-f*ojP`ELe9>P)UA6<>L6TdHf-2UH*Vac z!GpU*YnP?vxAVfStSl)-3I|m`o@2`7`P8>>d*WCpe!h3_FQYs~^4!L`{QQ5NI z(lw@BxuVhqhuvN{Cd<(=Qnk7(++&ItFF-an*3_a!9XbA*)!V45aPe_=P9dLHtk^=W z+cZ$MvrCPyP-@DSD@K3KT1N91Opt9H=fpO)X;WWiCvHFh1V8`;KmY_lAg%-;%*2%x z`hfrlfPj$@_;~HUII5|Dk*wCRmuY5WL7@TuT3=+YTv=%M9$)D$)1W~WA%N_abEFsX zL`q4Y-knN{SfqXXm(gD$rild*j!Bv{X&zk>327qlBVAy!Wy>gCU{ HA-yL zW|8HXMI0`jIya>?tG840=C$Rs&(xvh;9yT%w(O_l$IjB!{|%G%{D+g@j2$zRvS!Ud z+eI>-nX^X8IcE!(7>>>2 Xo0i#c5C)vrP<#`NmdMjmUlV)+)DH-Efr<3EE3 zO(u?o;_~IoS8CFvro6`=!z9opTZ%^d<_ln$JAqY!00@A9aS?z>V_f@<)q(&BfWQw4 zn3#nd#M#q7T&R(BFtLb8kd^ZBNg*L2G8?bosq@sJVKvn}eC*P;tp`L*QC$iP3!@Sx z3QF%1cXwB6-);~s`1=o;940h0ObR*dZNtKk;>FUoO=MgX4_LSEZ!&gC8JxXySm5C# zHyqc*rD)N7B4NxDd9VE0z56IxTU$}zejQ}88m^x)bEJ%C;`^dS^V6h>bE!_<$|{kj zW5*^`sbWj2Sh0jij^jr;a%7T;Y`8y{TD2?5Y{Pu-nIWyn4!oFeWda@+q29cSJTj|i z&o-p)0VF%&4+ww&2!H?xfB*=@Kmfu_3}8?V0w4ea#!4W966S}zvGPp%bu0V%_x{c2 z62=!`yGZQv;`uA-eR4}Am)W{ypK94GzOX>Tg+rhw3-6g-yM0BnnJ}5Og%ivi5yvob z#$FCZ;=);fm1Hz5!YJkW^Vh0lm3T}ReAshFy`)Z^ik>}tMSM0ld&ck?*|lm_lu2Tg zem8I4lioGTGYdS)lG%}+osCjO98UH3!iiMBURNmq9X_&J)y6liTGf?DLGe9j5)KoI zo4DK&*^xORPVU^< xy zJS27L*s=da#@4$U?<)^kvZNDPVvEp$1E(o(-mElk+yeUZ&pxzl*$(pd_7ca??4rq& zdnw&T*vcv4%@HDgG-ss!`yWi!8SW^5Z%V`x$lp z$}@)vy?XstdDOTbK6HvYbZji^m=}vKN>RV(oG>N-KP-rkNn&9|y|8x;=a9*q#ghU= zrd}?bSy(BYTW05u!}8Ht9J`b+Urwb- $0 zYa`Fe=3|(Y!Z~b4kD4xW=QztOz!S#*MLm19Rpp{l`th|=rIM=08#nGs@1QDGN~`K{ z0|Fob0w4eaAOHe!B>-V2uB6Zp1VBLN2-G>bX??=@0_faQb=DvbZ5cCW9u+B)o3drA zP5=J8n#z?cO!MZgr=dgJ(}W2NrT4;{Hy`Nf(^pcI;bU&Pb(<&>!nPB6LDGw}iVKLa zl2meyDN{O9=FDlMU9YQaWTM%$X gCrc35<1+O(=Tny86tZf)M&y7iC_ zA3jH&J8L%?EekSNuHB?tckfbYSO}3w5o2R(N!4qAFFdd)^UptLXwl-yB029PsxR`l zO!#8}acI+X;ZegP+`PGw$2+l@GfW64hs1UGFdy2xZ<)lAJVi1(ar~S-+KH3v4juZt z3e%G(-$WWt;yZ49UsYR7H(kY<--Qa+rqroZ3gPdp42$yfyFfz*PodABztEDUJ~Et& z-)HZej~_qFa3!95>C#QKN}R>b-Zw*p9UNBm<%_>eMC_Hjiu9D}E{>YwqmEEO00ck) z1V8`;KtS6BAkt`?D8>T;5C8!KC$N0^PBJ$)mp{T;4Ds{3OcyTPq%vg+(WOhb#gB3h zElDnfiAhpGU{8uxt!fHy88>R%w$^uavS;@s{=`;TF!}u1U;N-cFGU{~0QT-ZDTS9w zlYGUAJnv}Wz&65`OVW#j#h){0uF%`JA5_Ce=b>}?@*Np| QcOsZ&d3 z-jHX{UW*^{ZRzaUmBQ=hH#yG9lNaT@jT=`M3?h@;a>J)jU+Ln-bz&?_k?1x+ bC7Tvsahr+@`DZ(^@tVJ^6T)DGQ!=jaB=uy;n z)Svl0>YgHrE+^;Z@F1@|*(DDSOX4%BIq%A#|38(<)6+xjZzg$e_VyhMDPzV+5w2ak zh9Vj7R>AIz6hqX G4IAns6A80z`Sa(b z%9TqA!R4d){(bAu35dT4v1ZZYNpk-mK72}}$MlvtY?wC}4tZihh|lTXx^=(c?kVfj zrcEvO#ZlfXf85mm^61*LzgjJB zwMW3ZK#4rY;R_HH7)TjX+0dEmXDDm-tlC3}kw8EP2^`#gfV#HnLND)M(n0HDH|g&3 z?Ub=o a >qQk;UY^6d4Z>mzIIE@@RSBOBj#1H8_(xatLoj$@-;{a{i zbV!6yC8LH7D@o6nz`$TB7<~NrMR;{oAQqL_+lGI9XUddDgrY #GJpO?=}mFy&>1O6O_|b1B(weIL6bUlC2`F2PASqbA5YI} zbo{ul$ft5moLb~7#g=>bp3u>wi-gz7c~Q4m*0DDcv*h_%_}IUH9^JX~SR~dRCIucA zV%Vne@Cd41yEm~H(U>t^rKrOpW}`-RR!oiYdUwGo`XKg4Q;@L~f=p)N$>jM%K_ QS2N#;3rH1|>00JOj G5=wLDu9IrS`SaJM%Ll6moZRE-)0Z+~47-C=tmrKg*IW?^XYNqDc6CHdP mr%v^y z8pN?pn>Qa43XT_@KYv3cuJIG?_h{$NV^YDXQl$j7Ze5dym4%fMRz|q6J57cR9`c^! zpg4Al3)`ubks~_`rDlVMGNZKBs}~u6bK}MX@lI_y*4eYygv-qwsTS3%*H5||asPbz zveA+yW5s&bQlUaQMLbw{x_0fJbW0jO{4ePaRJd?1xz6$9{}ypS9prh?2M)}a({bz; zyV1m@go%Axw|Sdjoq^0O%%s~*9+Aw4T|pFgk+_V5J|F-BAOHd&00R0)z-^(O@Xqk0 zsujyM&_C;q(_)A;#<}lUH3)zJ2>cR(f(3KP%)jh5GkWwqDXg$N&AxqpGOmY{z--)j zkg8QHNrMKp6)`}!C`}qyDM) hhvBM!|^Rj91+*E+e^E4qoh!= zV#Q9XSFeI}i}CSUCX$Fe7w$P3M9j=CA=+G{jvedC7@;v^%1PIr>C;yTaj2*`S|>B5 zO7$&1h38~98>Miv8y0Oi=8D~R3Kq;M);5>!-hHBUiS@d8@fc|zyA~ H!HTQUce0qfB*=900@8p z2!KF>5`Zw1pm;Gj2!H?x7#;ymgmU!gzcR_l {0Q&pyjWRZA>(;~6x9?PuopynYDdLIv9q!BG2`5Zpk*Qz5skC8( z54pKH%k01}Uw%8^Ir1G7mADesSQd{s0gZZL&zCc2R><+ay<5nmr6Pr=$S`B}(8-rC zyI4~f;W0B^dik)(RJU$ *|uiq_V^J>ItY;*zv z!y?f2&U*2W6Zirc)~;eTAOHg22tcIy#sYUB00JNY0&yVl;K4H~BJht&7B)B}r+W3s zBYs$@;P4&xMB!| Z09q(SvcXsZ8vV*mq~0` ztf*hVzdY)R1s_f 5-(K zIES+`SFWrnv_v<5T WQJcpB8vAVA #O`bGQ9%ps!>TQv@=(^HPUisLo0|!^A-e10a3mp?jV(~h8-$#v{PRo{0RlW26 z{YNQ+as?kxwPN{ZDqGfD)vny6O69Dv4@y0*AOHd&00JNY0=i28!i?_j4J-oz5CDNB zA|TX`Sjvta|4^-3WyBBh*CHRxY~jU{MV?p9uW)`DKD%1Iu<*fW9Y^OK!)I7eow}S> zubw2b=|&!} lwUcP)Qyhr*=?-n1Qz9K8|94XQa7|>dto!z6yWO>H+zI}6r2hDSF z-f kRJaK3f*DqYSNqWz)JuIk1Eqo66j2Wv$9+x3flwom(KT(T%zM5;- zHbrd~;=#J_>bPR?;I{G;ZKJ5 E2?OGj0)?y2)T%|N^*}RYbnzf7$A6ca#lqhp)>&o*! zejK^pmM!`c3oq(6K6>;_gxi@@zy2L)K>vy2crrgBf<$^ku?-(Sd=lYxTZ9-_kk+o< zL0h*i5a+wU5SgAeGh%b!nl(D8Jh6&znb<<{1-N_n5l!{^n~oii{7&T&M`L+-xQg%c zT9JvnF~2HuIc=tMXD> z;00JNY0wAE{1R&Dr z_y)l|5C8!XNNfTo5#N4vMmINm%y5`ao;+EoeEA|8VLdZv4$^pq1s3)MC{f~@a8tHy zAu3(Efb3VjdMS~cr3|sBg;IFzHESj-kMi2FV}0>sIg=`<%hRW?L>Q8be2;U*969p0 z2uZRL$%Cs(+t{my&u+H0wO0M8=MX7JM+c2@`7G{CnbOK!I8oa)I_l5^i(U;I{wB_# zwvU@tKiJQ>4WikL&kX-8&ZzD`ppy*6(QN(xY2MtGv~$NH+3@h;)9*V(sadjQgG`pp z-Z$*g)TvVwYS^Hg$YFF{hC{KJ%a$$srASe;W(9d3_qA(xL|+m)c^*lxms+(di0{Q| zk(=n5^hn`wtera#3-7L+A`vx*)a8_3JKMG$5Z+!cG8BoEUuVmfQ6y`=Bj&mxJhP6< zGr{@0rIZvY9E6~lMnjNN+SIS?Su|uwS6a7j7ab6uMm#nbKA(H_nwhGuSA}OyqlVpS z;i5_M%yOk+#K<0U%~!A7qKT6RQm IS)+v5mqK|BR}cUJ z5C8!X00BKD@a^A(_0V{j3<4kk0wAD$0uf=c3o}ZxUe1LQHP=e&)GorHL+j_|QG5Zu z*~j4_{3BcWfyymB77I6AxL#eLk(JT>@$$;75@@)Y6YQ$L$3MXNna5=t`JP1=_3#u9 zLsEZ7nWk^w7T<|CN}DcTIsXoaUB$KhXm8^>j(R^1Z|dD^91S1lqh1~DeTkBVsEBu7 zau?npt=rU>f{XHfiuMIjdGNpqYS6HnYR}Eg%xKf*c~YPW3=E<&rJK-|%QxxP&3jb5 zSOY1@vDi|#P8S&xHSv!*RH zuzCi?y 6_+qVBL!{O@H z?IHy!_VVf9Zvqt-d3)Ff7Oi&dI4tk^nZ1@!KmY_l00ck)1oV#pyl3=p&tNeKfB*<2 zC;=O{loasv1KD`szsM&j=tLMiLgdR4vY6Iq;>5IR(zww|5zeEOx^+6s@E_&*%a=%z zfIVGUKzaWBwG6jOBaZcsDt0LEDA$mXP$_aK&+1psN0TE*X6aGF^?bzph7G%Amul6@ zilfMX7amdRY1z_^H1&VOq&E$F-Y8}Gi0+g(Zw~T1^`8`f8aJ*^K|<`|yfWFdXOi7Y zlqe`YYdUpqs^QVXjl8ZGFJ24bCP)f>YgTU;o@CjnaABcL#!y)JVeycQl2?iESvd4N zy@~qv8Be1}&7kAQ&xsJhLfj 0083R`k009sH0T2KIJs{xc (hOiWS&rzTvP@x3oVlA46cK_Kx6 zxR%LB54Y~64DE^}-lUi*K?uA$e4A1h_ezkll|eZ @OPxwy z?d)t+u|KSauuV!yt=7lcIZ} xiU2zOtQd&Xu#WytlWvrDjcgQJc06= kY^Muo$79T{o&-oIGaUyj3F8b7Zm_jy3AlbF6d~@$$+hvh$vjLI#T| z90$coWw^vPrZR{6S>;MybXSgp3k?m8u1TY=T)CpOXt8F(B#jQ@VfJ6kY0T&u@)MK$ z(7}Tzs8FGAA{w*h1WHPoJY}%RVBK1I{O+ozJ$=`P3J?GR5C8!X00CVi@VUoi5vuM< zRV$WjplKUK8ciN}0s#;J0T2)b($y_X_ZFVz1G2$GPYFC+d7eC~mP|0~Ig{=Vk@>gM zZ>6YB>;5$BuhG(DrBtcH;(T>a8aQB*ocqLyf2D9!p+X7y%$_bRKJ47JSjI|)g?;a} z!f{9}N|Y$xkV=+lNCooOq;~Ba5yvrcq86SbZ=PyY)VrRHS&Htg>0ezq$1b&Q)n6qP zDdX``O`P0@ ;Zl-Z7>>w`KF009sH0T2KI-6nt#C*9s3SO)?i z00K!uz|6*y(pD=&_ZFR`jO|5u6Q7HNqBjJd@480G(q$xD56;@0Fr{kMGU6Dn!jZ{S z#`KnAi89l;@qMXI?ank^oTJTQOzYOqmSP5bqZBQgUnFiZqfsNL$*jD5MmHaa6t%Q& zT~B1$t*ts*i{DYoq{)M5w3w4c5heTcz=55VW+~vXeO&l_>a*vz%KOV#_NcN$uUI)v zm3dfsm&a53awrme?Icg0Ouoy1IEhT3zU`$K%akb#WSABo7d3j+bQ#K}o)K7iX~2Mv z%B{T4p1oXV^1XHIzBqy`CHeYpph*+w(w{y QhUN3UYllhm&i){eKn`71L z8Q*2}WkH3{k>=yH>Iu)0bRs{@p~EYscZqV87az~WXLb8b9V)#~qMM7y;WMeDE9|kN zUerUE)bCk%QI3mJuKb?5=%e0W>BH|uJ-fP08E@hb7e(0NJUasib(Y6H< w(%c6 z7dyI=IdgiM@%QkN)pFf@*7wO%8&zkOFZP`x$8vD6R|!z+ aI>(Z9vY=; z#0?0500@8p2!Mdz5P&eFH(LcmK>!3mAn^&