commit 82f3140847573d99292c61dec1ccccf19fa35bbb Author: AirCoding Date: Thu May 28 18:45:01 2026 +0800 Initial commit: AirCoding V1.0.0 Alpha architecture baseline Complete architecture document set with multi-model review remediation: - Frozen interface contracts, runtime semantics, DB schemas - Event/tool/error/provider registries - Scheduler and main agent state machines - C4 module/code views, solution architecture, baseline V1 - Multi-model review reports and joint assessment - Phase-gate remediation complete (P0/P1/P2/UX resolved) - Implementation plan with T-000A through T-045 - Reference folders kept as placeholders only diff --git a/AGENTS.md b/AGENTS.md new file mode 100755 index 0000000..16e6fdf --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,7 @@ +# AGENTS.md + +- Canonical workflow context for this repository lives in `AirPlan/AGENTS.md`. +- Always load `AirPlan/AGENTS.md` first for project instructions, workflow rules, plan/todo state, ADR/C4 context, and current Air sync blocks. +- Treat `AirPlan/plan.md`, `AirPlan/todo.md`, and `AirPlan/docs/` as the authoritative workflow documents. +- Treat `AirPlan/state/` as the authoritative plugin and runtime state root. +- This root file is only a bootstrap shim; keep real workflow context maintained inside `AirPlan/AGENTS.md`. diff --git a/AirPlan/AGENTS.md b/AirPlan/AGENTS.md new file mode 100755 index 0000000..d6b2f4e --- /dev/null +++ b/AirPlan/AGENTS.md @@ -0,0 +1,69 @@ +# AGENTS.md + +## Workflow Root + +- This project uses `AirPlan/` as the workflow root. +- Keep planning, execution state, ADR, C4, validation, debug, and plugin runtime data under `AirPlan/`. +- The repo-root `AGENTS.md` only bootstraps into this file. + + +## AirArc Workflow + +1. Use `AirPlan/AGENTS.md` as the canonical project context entry point. +2. Load and maintain: + - `AirPlan/docs/analysis/requirements.md` + - `AirPlan/docs/architecture/solution-architecture.md` + - `AirPlan/docs/architecture/baselineV1.md` + - `AirPlan/docs/architecture/db-schema-v1.md` + - `AirPlan/docs/architecture/event-registry-v1.md` + - `AirPlan/docs/architecture/tool-registry-v1.md` + - `AirPlan/docs/architecture/scheduler-state-machine-v1.md` + - `AirPlan/docs/architecture/prompt-layering-v1.md` + - `AirPlan/docs/architecture/provider-capability-matrix-v1.md` + - `AirPlan/docs/architecture/error-taxonomy-v1.md` + - `AirPlan/docs/architecture/artifact-naming-v1.md` + - `AirPlan/docs/architecture/scope-escalation-v1.md` + - `AirPlan/docs/architecture/security-model-v1.md` + - `AirPlan/docs/architecture/capability-trust-v1.md` + - `AirPlan/docs/architecture/cross-platform-matrix-v1.md` + - `AirPlan/docs/architecture/branch-deepcode-cli/` + - `AirPlan/docs/architecture/c4/module.md` + - `AirPlan/docs/architecture/c4/code-view.md` + - `AirPlan/docs/architecture/interface-contracts-v1.md` + - `AirPlan/docs/architecture/runtime-semantics-v1.md` + - `AirPlan/docs/architecture/多模型三视角审查联合评估.md` + - `AirPlan/docs/architecture/adr/` + - `AirPlan/docs/architecture/decisions-round-1.md` + - `AirPlan/docs/architecture/decisions-round-2.md` + - `AirPlan/docs/architecture/decisions-round-3.md` + - `AirPlan/docs/architecture/main-agent-state-machine.md` +3. Produce or refine `AirPlan/plan.md` and `AirPlan/todo.md`. +4. Keep plans optimized for lower-cost follow-up sessions, including scope, validation, file targets, and parallelization boundaries. +5. AirArc is architecture-only: it may plan tasks and edit planning or architecture documents, but it must not write code or implement tasks directly. + + + +## AirEng Workflow + +1. Use `/aireng` as the sole scheduler for confirmed execution. +2. Prefer `AirPlan/state/airarc/reviews/execution-plan.json`, then `AirPlan/state/airarc/reviews/parallel-review.json`, before falling back to local `AirPlan/todo.md`. +3. Dispatch isolated `/airdo` subagents with bounded concurrency instead of defaulting to parent-thread coding. +4. Monitor active workers on a 5-minute cadence, merge ready results, and continue later waves automatically when work remains. +5. Keep `AirPlan/todo.md`, `AirPlan/plan.md`, `AirPlan/AGENTS.md`, ADR, and C4 docs synchronized during dispatch, monitoring, repair, and merge. +6. AirEng owns global debug, XDB, repair, intervention, and document convergence, but it should only intervene directly for hard blockers and must return to scheduler mode immediately afterward. + + + +## AirDo Workflow + +1. Use `/airdo` for one narrow task slice from `AirPlan/todo.md`. +2. Before editing, load: + - `AirPlan/AGENTS.md` + - `AirPlan/docs/architecture/adr/` + - `AirPlan/docs/architecture/c4/module.md` + - `AirPlan/plan.md` + - `AirPlan/todo.md` +3. Keep task-local progress resumable in `AirPlan/state/airdo/`. +4. When AirEng owns orchestration, return shared document changes through `documentUpdates`. +5. Route GUI work through AirXDB, debugging through AirDbg, network evidence through AirNDB, and static analysis through AirSDB when needed. + diff --git a/AirPlan/docs/analysis/requirements.md b/AirPlan/docs/analysis/requirements.md new file mode 100755 index 0000000..c257ff4 --- /dev/null +++ b/AirPlan/docs/analysis/requirements.md @@ -0,0 +1,176 @@ +# Requirements + +Date: 2026-05-27 +Status: Formal V1.0.0 Alpha requirements + +## 1. Product Intent + +AirCoding is a self-owned local AI coding agent/runtime for developer workflows. It should combine Claude Code-quality execution discipline, OpenTUI/OpenCode-inspired terminal UX, project-local persistence, multi-agent orchestration, and extensible toolchain capability packages. + +The V1.0.0 Alpha target is not a half-finished skeleton. It must deliver a usable Linux-first local coding loop with a complete C++ development workflow and a plugin/capability foundation. C++ is the first deep toolchain profile; the runtime remains extensible for later language profiles. + +## 2. Primary Users + +| User | Need | +|---|---| +| Developer/operator | Give coding requirements, monitor progress, approve important decisions, receive verified changes | +| AirCoding maintainer | Extend runtime, tools, providers, prompts, and toolchain packages safely | +| Future plugin/capability author | Add tools/capabilities without bypassing core security and event contracts | + +## 3. Functional Requirements + +### FR-001 CLI Startup and Project Initialization + +AirCoding must start from a CLI entrypoint, detect/open a project, initialize `.air/` when needed, load resources/config, run read-only Doctor, and open a session. + +### FR-002 Project-Local State + +AirCoding must store project source-of-truth workflow state under project `.air/`: + +```text +.air/shared/ # shareable project config/rules/plan docs +.air/local/ # private sessions/artifacts/workspaces/backups/local DBs +``` + +### FR-003 Session Persistence + +AirCoding must persist each session in SQLite at: + +```text +/.air/local/sessions//session.db +``` + +It must support messages, drafts, durable events, task graph state, agents, tool/command runs, artifacts, diagnostics, evidence refs, workspaces, summaries, and UI state. + +### FR-004 Event-Driven Runtime + +AirCoding must publish RuntimeEvents for live behavior and persist durable events transactionally with domain table updates. + +### FR-005 Main Agent Conversation + +AirCoding must provide a user-facing Main Agent that can receive requests, answer directly when appropriate, classify work, show progress, and present blockers/confirmations. + +### FR-006 Architecture Designer + +AirCoding must route architecture/interface/product-impacting decisions to an Architecture Designer that updates architecture artifacts and produces impact assessments. + +### FR-007 Scheduler and TaskGraph + +AirCoding must schedule TaskSpec records with hard/soft dependencies, write-area conflict handling, retry budgets, child worker dispatch, heartbeat monitoring, merge coordination, and restart recovery. + +### FR-008 Independent Worker Agents + +Executor, Reviewer, Debugger, Compactor, and ExperienceMiner must run as independent Bun child processes communicating through NDJSON IPC. + +### FR-009 Claude Code-Quality Execution Primitives + +Execution tools must enforce read-before-edit, exact conservative edits, small patches, no unrelated refactors, permission checks, and verification-before-completion discipline. + +### FR-010 ToolRegistry and Built-In Tools + +AirCoding V1.0.0 Alpha must provide schema-validated built-in tools for filesystem, shell, git, project scanning, full C++ build/test/static-analysis/debug workflows, GUI screenshot evidence, network capture evidence, artifacts, context assembly, permission requests, and Doctor. + +### FR-011 Permission and Security Model + +AirCoding must classify paths/commands/network/credentials, enforce permission profiles, protect system-sensitive and credential operations, back up project-outside writes, and refuse unsafe requests. + +### FR-012 Plugin and Capability Foundation + +AirCoding V1.0.0 Alpha must include the plugin/capability foundation: manifest loading, validation, enable/disable config, dependency declaration, Doctor integration, namespaced tool registration, source/trust metadata, and PermissionEngine enforcement. Third-party registry/signing may remain later work, but local and built-in capability packaging must be usable. + +### FR-013 Provider Layer + +AirCoding must use Anthropic canonical messages internally and route provider calls through adapters with capability matrix validation and conversion reports. + +### FR-014 Context Assembly and Compaction + +AirCoding must assemble prompts from ordered layers, fit token budgets, record omissions, and use copy-on-write compaction when needed. + +### FR-015 Artifact and Evidence Management + +AirCoding must write artifacts through temp-file then atomic rename, record URI/path/hash/metadata, and link claims through evidence refs. + +### FR-016 TUI and HUD + +AirCoding must provide an OpenTUI/Solid-based terminal UI and HUD consuming ProjectionStore, not raw DB/EventBus. + +### FR-017 Complete C++ Development Workflow + +AirCoding V1.0.0 Alpha must support a complete C++ development workflow: project detection, build-system assessment, CMake configure, Ninja-first/Make-fallback build, compiler/linker diagnostic parsing, clangd code-intelligence queries, cppcheck static analysis, CTest/GoogleTest execution, debug run/log parsing, failure diagnosis, scoped fix execution, review, and evidence-backed verification. + +### FR-018 Doctor + +AirCoding must run read-only Doctor on startup, report environment/capability issues, and support fix mode under permission policy. + +### FR-019 Logging and Diagnostics + +AirCoding must write user-readable `air.log` and encrypted developer `air.developer.log`, with seven-day retention by default. + +### FR-020 Release Gate + +AirCoding must define tier-1 Linux release gates covering unit tests, integration fixture replay, real LLM E2E, project init, C++ build/test flow, SQLite recovery, child IPC, TUI startup, and artifact/event persistence. + +## 4. Non-Functional Requirements + +### NFR-001 Local-First Operation + +Project state, artifacts, logs, and debug knowledge must remain local unless the user explicitly exports/shares/uploads them. + +### NFR-002 Recoverability + +AirCoding must recover from process/session restart by reading SQLite state, detecting lost agents, preserving workspaces, and rebuilding Scheduler queues. + +### NFR-003 Extensibility + +Language/toolchain support must be added through `toolchain-*` packages and capability manifests. + +### NFR-004 Provider Flexibility + +Internal contracts must remain stable across Anthropic, OpenAI, OpenRouter, ollama, and compatible endpoints. + +### NFR-005 UI Responsiveness + +Main Agent and TUI must remain responsive while background workers run. + +### NFR-006 Evidence-Based Completion + +Tasks must not be marked completed without appropriate build/test/debug/review evidence or an explicit skipped-gate report. + +### NFR-007 Linux-First Platform Support + +Linux x86_64 is tier 1. Linux arm64 and WSL2 are tier 2. macOS is experimental. Windows native is post-MVP/experimental. + +### NFR-008 Security Boundary Preservation + +LLM output, tool results, plugins, and external content are untrusted data until validated by runtime contracts and policy. + +## 5. Constraints + +1. Runtime: TypeScript on Bun. +2. Monorepo: Bun workspaces + Turborepo. +3. TUI: OpenTUI/Solid. +4. IPC: NDJSON over stdio. +5. DB: SQLite per session with WAL/NORMAL/foreign_keys OFF. +6. Internal message format: Anthropic canonical content blocks. +7. C++ is first deep toolchain; runtime remains language-agnostic. +8. Python is subprocess-only helper layer, not core runtime. +9. Early distribution uses binary tarball, not public package channels. +10. Architecture docs and workflow state live under `AirPlan/` for this repository. + +## 6. Acceptance Notes + +V1.0.0 Alpha is acceptable when it can demonstrate: + +1. CLI starts and initializes/opens a project `.air/` tree. +2. Session DB schema initializes and persists messages/events/tasks/tool runs/artifacts. +3. EventStore transactionally applies core durable events to domain tables and safely records schema-only registered events. +4. ProjectionStore hydrates and updates a usable TUI/HUD view. +5. Scheduler dispatches worker child processes via NDJSON IPC, supports tool calls through the parent runtime, and receives WorkerResult. +6. ToolRegistry executes filesystem/shell/git/artifact/context/doctor/C++/debug/GUI/network evidence tools through PermissionEngine. +7. C++ workflow can detect, configure, build, statically analyze, test, debug, fix, review, and re-verify a representative fixture project. +8. Failed build/test/debug commands produce diagnostics/artifacts/evidence refs and can trigger Debugger repair. +9. ContextAssembler produces Anthropic canonical messages with omissions where needed. +10. Provider adapter path can perform model calls under capability validation and conversion reporting. +11. Capability manifests can be loaded, validated, enabled, and registered as namespaced tools. +12. Doctor reports platform/provider/toolchain/capability/display/network status and supports permissioned fix mode. +13. Release gate commands are documented and runnable on tier-1 Linux. diff --git a/AirPlan/docs/architecture/DeepSeekV4Pro三视角审查.md b/AirPlan/docs/architecture/DeepSeekV4Pro三视角审查.md new file mode 100644 index 0000000..942ad42 --- /dev/null +++ b/AirPlan/docs/architecture/DeepSeekV4Pro三视角审查.md @@ -0,0 +1,365 @@ +# DeepSeek V4 Pro 三角度架构审查报告 + +Date: 2026-05-28 +Status: Third-round architecture review using DeepSeek V4-Pro model +Reviewer: DeepSeek V4-Pro (1M context) +Scope: All architecture documents under `AirPlan/docs/architecture/` + +## 审查背景 + +当前架构文档集(26 个文件)是第二轮 MIMO2.5 审查后的修正版本。第二轮审查发现 6 项阻塞级和 10 项应修复问题,本文件已独立输出为 `MIMO2.5三视角审查.md`。 + +本轮审查旨在用新模型独立评估架构质量,覆盖三个视角: +1. 架构设计师 — 概念完整性、设计一致性和边界清晰性 +2. 软件开发工程师 — 可编译性、类型完整性和实现可行性 +3. 用户 — 与原始需求的对齐程度 + +--- + +## 1. 架构设计师视角 + +### 1.1 概念完整性 + +AirCoding V1.0.0 Alpha 架构展示了良好的概念完整性。核心原则(项目本地状态、事件驱动 + SQLite 恢复、ToolRegistry/PermissionEngine 作为统一副作用边界、独立子进程 worker)在所有文档中保持连贯。 + +**核心架构决策评价:** + +| 决策 | 质量 | 理由 | +|---|---|---| +| EventIngestor 作为事件摄入边界 | 优秀 | 解决了 EventStore 职责过宽问题,EventStore 不再隐式触发业务动作 | +| 边列表任务依赖模型 | 优秀 | 完整表达 hard/soft/conflict/serialization,Scheduler 可动态追加持久化冲突边 | +| IPC 协议含 tool.call/result | 优秀 | 使独立 worker 进程能通过父进程 ToolRegistry/PermissionEngine 安全调用工具 | +| TUI 只依赖 ProjectionClient | 优秀 | TUI 不导入 runtime 内部,边界清晰 | +| ProviderManager 在 packages/llm | 清晰 | runtime 通过 facade 调用 LLM,不耦合 provider 实现 | +| snake_case 命名统一 | 务实 | 避免序列化层,DB/event/tool/contract 一致 | + +### 1.2 依赖方向分析 + +包级依赖方向已收敛为单向无循环图: + +```text +contracts + ↑ +cli → runtime → llm (ProviderManager facade) +cli → tui → contracts (ProjectionClient only) +cli → toolchain-cpp +runtime → contracts +tui → contracts +llm → contracts +toolchain-cpp → contracts + +runtime 不依赖 tui +tui 不依赖 DB/EventBus/runtime 内部 +toolchain-cpp 不直接依赖 runtime 或 llm +``` + +服务级依赖方向也已澄清: + +- Scheduler → WorkerManager(单向) +- EventIngestor → EventStore/EventBus(单向) +- DoctorService → CapabilityRegistry → ToolRegistry(单向) +- CapabilityRegistry 不依赖 DoctorService(已修正) + +### 1.3 跨文档一致性评估 + +当前文档集存在两类跨文档问题: + +#### 1.3.1 已收敛的领域 + +- IPC 协议:interface-contracts 已定义完整 envelope 类型,baseline 引用之 +- Permission 模型:interface-contracts、security-model、scope-escalation、event-registry 使用一致 action+grant_scope +- Error 模型:interface-contracts、tool-registry、event-registry 统一使用 AirError +- Task 依赖:interface-contracts、scheduler-state-machine、event-registry、baseline 统一使用边列表 +- 文档优先级:solution-architecture §2 已定义 8 级 precedence rule + +#### 1.3.2 仍有不一致的领域 + +| 问题 | 涉及文档 | 严重度 | +|---|---|---| +| error-taxonomy 中 cause_ref 为扁平字段对象,interface-contracts 中为 EntityRef | error-taxonomy-v1 vs interface-contracts-v1 | 高 | +| event-registry 中 EntityRef 内联定义(10 个值),interface-contracts 定义 12 个值 | event-registry-v1 vs interface-contracts-v1 | 高 | +| ToolCategory 和 ToolResultEnvelope 在 interface-contracts 和 tool-registry 重复定义 | interface-contracts-v1 vs tool-registry-v1 | 中 | +| DebugKnowledgeStore 和 LearnedMemoryStore 接口缺失 | runtime-semantics-v1 引用但未定义 | 中 | + +这些已在 MIMO2.5 审查中详细记录,此处不再逐项展开。 + +### 1.4 架构风险矩阵 + +| 风险 | 概率 | 影响 | 现有缓解措施 | 剩余风险 | +|---|---|---|---|---| +| 跨 DB/文件事务原子性不足 | 中 | 中 | outbox/compensation 模型 | 低 — 已定义恢复扫描 | +| worker 工具调用链路过长 | 低 | 中 | NDJSON IPC + correlation_id | 低 — 协议完整性好 | +| Compaction 策略过于复杂 | 中 | 低 | copy-on-write + 显式回退引用 | 低 — 设计清晰 | +| C++ 工具链覆盖不够 | 中 | 中 | cppcheck+clangd+CMake+Ninja/Make | 中 — 需要真实项目验证 | +| 插件权限绕过 | 低 | 高 | capability trust model + PermissionEngine | 低 — 边界充分 | + +### 1.5 架构师结论 + +**可以进入概要设计阶段**。架构方向正确,依赖方向已收敛,包边界清晰。剩余 4 项跨文档不一致问题应在进入概要设计前修复,但都属于工程一致性层面,不影响设计方向。 + +--- + +## 2. 软件工程师视角 + +### 2.1 可编译性评估 + +`packages/contracts` 在修复以下问题后可编译: + +#### 2.1.1 类型定义问题 + +**E1. `TaskInsert = TaskRecord` 类型不安全** + +`interface-contracts-v1.md` 第 240 行:`export type TaskInsert = TaskRecord`。这意味着调用方创建任务时必须提供所有 Record 字段,包括服务器生成的 `created_at`、`retry_count`、`status`。正确做法是定义子集类型。 + +**建议修复:** +```ts +export type TaskInsert = Omit & { + status?: TaskStatus // defaults to "pending" + retry_count?: number // defaults to 0 +} +``` + +**E2. `JsonSchema` 泛型参数 T 未使用** + +第 41 行:`export type JsonSchema = JsonObject`。T 在类型体中从未引用,是 phantom type,不提供任何编译时安全检查。要么移除泛型参数,要么定义品牌化类型。 + +**建议修复:** +```ts +declare const JsonSchemaBrand: unique symbol +export type JsonSchema = JsonObject & { [JsonSchemaBrand]: T } + +// 用于测试/类型推导 +export type InferSchemaType> = + T extends JsonSchema ? U : never +``` + +**E3. `FollowUpTask.type` 引用不存在的 `TaskType` 成员** + +`FollowUpTask.type` 定义为 `TaskType | "docs"`,但 `TaskType` 不含 `"docs"`。`"docs"` 作为类型字符串存在于类型标注中,但 Scheduler 收到 `type: "docs"` 时无法创建合法的 `TaskSpec.type`(它是 `TaskType`,不含 `"docs"`)。 + +**建议修复:** 将 `"docs"` 加入 `TaskType`:`TaskType = ... | "docs"` + +#### 2.1.2 缺失接口 + +**E4. `DebugKnowledgeStore` 和 `LearnedMemoryStore` 无任何接口定义** + +`runtime-semantics-v1.md` §6.3-6.4 引用了这两个关键服务,但 `interface-contracts-v1.md` 中没有任何对应接口。开发者实现 §6 的跨 DB 事务语义时没有契约参照。 + +**E5. `CompactionPolicy`、`PromptLayer`、`PromptLayerLoader` 无任何接口定义** + +`c4/code-view.md` §4 列出了 `CompactionPolicy.ts` 和 `PromptLayerLoader.ts`,`prompt-layering-v1.md` 详细描述了 L0-L9 分层逻辑。但 `interface-contracts-v1.md` §16 只定义了极简的 `ContextAssembler` 输入输出,`PromptLayer` 和 `CompactionPolicy` 的类型形状完全空白。 + +#### 2.1.3 语义不完整 + +**E6. `PathPolicy` 类型仅有 `allow/deny`,缺失 `source` 元数据** + +`interface-contracts-v1.md` 中 `PathPolicy` 定义为 `{ allow?: string[], deny?: string[] }`,但 `security-model-v1.md` 和 `runtime-semantics-v1.md` 要求路径评估考虑 "从哪个角色/配置文件来的"。`PathPolicy` 需要 `source` 元数据来表达这个语义。 + +**E7. `PermissionEngine.record` 返回 `Promise` 无失败路径** + +如果记录权限决策失败(磁盘满、DB 锁),调用方无法得知。这违反 "证据优先" 架构原则。 + +**建议修复:** 返回 `Promise>` 或指定抛出的类型化错误。 + +**E8. `ProjectionStore.apply` 接受 `RuntimeEvent` — 无类型窄化** + +实现者需要猜测哪些事件触发投影更新。当前设计依赖运行时类型检查,而 contracts 包应该为关键投影提供编译时保证。 + +**E9. `EventBus.subscribe` handler 异常行为未定义** + +如果订阅 handler 抛出异常:EventBus 吞掉错误?传播给发布者?终止订阅?contracts 未定义。 + +**建议:** 明确 "handler 异常被 EventBus 吞掉并记录到 developer log,不传播给发布者,不终止订阅"。 + +#### 2.1.4 类型别名一致性 + +**E10. 多处缺少 branded ID 类型** + +`SchedulerWavePlan.wave_id` 是 `string`,而非 `WaveID`。其他标识符都用了品牌化类型(`TaskID`、`AgentID` 等),`wave_id` 应该一致。 + +### 2.2 可测试性评估 + +**优点:** +- `Clock` 和 `IdGenerator` 接口设计良好,支持时间/ID 确定性测试 +- `TransactionHandle` 接口允许测试事务边界 +- Repository 接口支持 mock/stub +- EventBus/EventStore/EventIngestor 边界清晰,可独立测试 + +**不足:** +- `ToolExecutor.execute` 返回 `AsyncIterable | Promise` 未品牌化联合,测试需 duck-type +- `ProviderAdapter.complete` 返回值相同问题 +- 无契约定义 IPC mock/stub 边界 + +### 2.3 可部署性评估 + +**优点:** +- `Clock` 抽象使时间可控 +- `IdGenerator` 抽象使 ID 可预测 +- `TransactionManager` 抽象使事务边界可测试 +- binary tarball 分发策略清晰 + +**不足:** +- 无环境变量/配置文件 schema 定义(除 `~/.air/models.yaml` 外) +- 无 Docker/容器化分发方案 + +### 2.4 工程师结论 + +**必须修复(阻塞实现):E1、E3、E4、E5** + +**应在实现前修复:E2、E6、E7、E8、E9、E10** + +其余问题可在实现过程中逐步处理。interface-contracts-v1.md 是最大的单一阻塞文件 — 一旦它稳定,package 边界就稳定了。 + +--- + +## 3. 用户视角 + +### 3.1 核心需求对齐表 + +按 AirCoding 原始概念文件 (`idea.md`)、讨论中确立的决策和 VibeBox 衍生分支重新评估: + +| # | 原始需求 | 当前架构状态 | 对齐度 | +|---|---|---|---| +| 1 | 自有 AI coding agent/runtime,非 Claude Code 插件包装 | 独立架构,自有运行时/调度器/工具系统/权限引擎 | 完全 | +| 2 | Claude Code 级执行层代码质量 | D-059 + runtime-semantics §9(read-before-edit token、exact edit、completion gate) | 完全 | +| 3 | OpenCode TUI 复用(UI 风格,非业务状态) | `@opentui/solid`,TUI 只消费 ProjectionClient,不导入 runtime 内部 | 完全 | +| 4 | Hermes-style 经验挖掘/技能/Curator | ExperienceMiner 角色、candidate→promotion→rollback 生命周期、Skill/SKILL.md 格式 | 充分 | +| 5 | 事件驱动 + SQLite 恢复 | EventBus 实时 + EventStore 持久化 + ProjectionStore 投影 + restart recovery | 完全 | +| 6 | 独立子进程 worker + NDJSON IPC | Bun child processes + 完整 IPC envelope(control/event/log/tool.call/result/stream/worker.result/checkpoint/error) | 完全 | +| 7 | C++ 为第一个深度语言 | `toolchain-cpp` 完整工作流(detect/configure/build/static-analysis/test/debug/fix/review/verify) | 完全 | +| 8 | 项目本地状态可携带 | `.air/shared`(git-shareable)+ `.air/local`(project-local) | 完全 | +| 9 | 多 agent 调度(Scheduler + TaskGraph) | Scheduler state machine + 边列表依赖 + write-area 冲突 + wave dispatch + merge coordination | 完全 | +| 10 | 权限模型(分层确认、高权限 announce_then_run) | PermissionEngine + action + grant_scope + layered checks + 凭据/系统敏感边界 | 完全 | +| 11 | AirConsole 模块化工作流 | AirPlan/AGENTS.md 入口 + AirArc/AirEng/AirDo 工作流 + AirDbg/AirNDB/AirSDB/AirXDB 调试插件 | 完全 | +| 12 | VibeBox 下位分支(ARM Linux appliance) | `branchvibebox/` 独立 baseline + feasibility plan + Electron 模板 | 完全 | +| 13 | 不可半成品 MVP,目标 V1.0.0 Alpha | 范围含完整 C++ 开发闭环 + 插件/能力基础 + 发布验证 | 完全 | +| 14 | 参考 Codex 工具/OpenAI 工具 | `reference/openai-codex/`,tool-registry 含 Codex 风格 tool breadth | 充分 | +| 15 | 参考 Anthropic Claude Skills | `reference/anthropic-skills/`,SKILL.md 格式在 ExperienceMiner 中引用 | 充分 | + +### 3.2 设计质量评估 + +**满足/超越需求的领域:** + +1. **EventIngestor 引入**:比原始需求更清晰地分离了事件摄入与持久化,是超出原始讨论的架构改进 +2. **边列表任务依赖**:从原始讨论的 "hard/soft 数组" 演进到 `(hard|soft|conflict|serialization)` 边列表,表达能力更强 +3. **IPC 协议**:从原始讨论的 "event/control/log" 三个 kind 扩展到 9 个 kind,覆盖了 worker 的完整通信需求 +4. **跨 DB 事务语义**:主动定义了 debug-records.db、learned-memory.db 的 outbox/compensation 模型 +5. **执行原语强化**:从 "原则" 级别提升到 "read observation token required for edit" 的强制契约级别 + +**与用户意图一致的权衡:** + +| 权衡 | 用户意图 | 架构决策 | 一致性 | +|---|---|---|---| +| 进度优先 vs 完美 | 用户多次表示 "先确定再完善" | 定义清晰的文档优先级,允许渐进式完善 | 一致 | +| 复用 vs 自研 | "能复用就复用,不能就 AI 生成" | TUI 复用 OpenTUI,核心运行时自研 | 一致 | +| 权限 vs 自动化 | "高权限模式 auto-run,凭据必须确认" | action + grant_scope 模型 | 一致 | +| 复杂度 vs 可用性 | "V1.0.0 Alpha 不是半成品" | 完整 C++ 工作流 + 插件基础在范围内 | 一致 | + +### 3.3 用户体验路径 + +最终开发者体验路径: + +```text +$ air init # 一键初始化项目 +$ air # 启动 TUI/HUD +> 帮我修复 src/core/parser.cpp 的编译错误 + → Main Agent 分类 → Scheduler 创建 Executor 任务 + → Executor 读取文件 → 精确编辑 → 构建 → 测试 + → Reviewer 审查 → 通过 → 合并 workspace + → 展示 diff + 构建/测试证据 +``` + +这个路径在架构中完全支持,从 CLI 到 TUI 到 Scheduler 到 tools 到 workspace merge 到 evidence 展示都有覆盖。 + +### 3.4 用户视角结论 + +**架构完全对齐原始需求,无方向性偏差。** 每一个关键决策都可以追溯到讨论中明确的选择。 + +--- + +## 4. 三视角综合结论 + +### 4.1 阻塞实现的问题(6 项) + +这些必须在进入 `packages/contracts` 编码前解决: + +| ID | 问题 | 涉及文档 | 修复方向 | +|---|---|---|---| +| E1 | `TaskInsert = TaskRecord` 不安全 | interface-contracts-v1 | 定义 Omit 子集类型 | +| E3 | `FollowUpTask.type` 含 `"docs"` 但 `TaskType` 无 | interface-contracts-v1 | 将 docs 加入 TaskType | +| E4 | `DebugKnowledgeStore` / `LearnedMemoryStore` 缺失 | interface-contracts-v1 | 添加对应接口 | +| E5 | `PromptLayer` / `CompactionPolicy` / `PromptLayerLoader` 缺失 | interface-contracts-v1 | 添加对应接口 | +| E9 | `EventBus.subscribe` handler 异常行为未定义 | interface-contracts-v1 | 明确吞掉+记录 | +| B3* | `debug-records.db` / `learned-memory.db` 无 DDL | db-schema-v1 | 补充 DDL | + +> *B3 来自上一轮审查,本节确认仍然有效。 + +### 4.2 应在实现前修复的问题(6 项) + +| ID | 问题 | 涉及文档 | 修复方向 | +|---|---|---|---| +| E2 | `JsonSchema` phantom generic | interface-contracts-v1 | 品牌化或移除 | +| E6 | `PathPolicy` 缺少 source 元数据 | interface-contracts-v1 | 添加 source 字段 | +| E7 | `PermissionEngine.record` 无错误路径 | interface-contracts-v1 | 返回 Result 类型 | +| E8 | `ProjectionStore.apply` 无类型窄化 | interface-contracts-v1 | 添加事件类型文档 | +| E10 | `wave_id` 非品牌化 ID | interface-contracts-v1 | 添加 WaveID 类型 | +| B1* | error-taxonomy cause_ref 冲突 | error-taxonomy-v1 | 统一为 EntityRef | + +> *B1 来自上一轮审查,本节确认仍然有效。 + +### 4.3 可接受延迟的问题(4 项) + +| 问题 | 理由 | +|---|---| +| error-taxonomy 和 event-registry 中的 EntityRef 内联定义 | 编译时可通过 import 解决,不影响核心架构 | +| ToolCategory/ToolResultEnvelope 重复定义 | 编译时结构兼容,仅需一次 import 修复 | +| 无 Docker 分发方案 | V1.0.0 Alpha 仅需 binary tarball | +| 无环境变量 schema | 实现时可后期补充 | + +### 4.4 架构质量评分 + +| 维度 | 评分 | 说明 | +|---|---|---| +| 概念完整性 | 9/10 | 核心原则一致,包边界清晰 | +| 跨文档一致性 | 7/10 | 大部分已收敛,6 项不一致待修复 | +| 可编译性 | 7/10 | 修复 E1/E3 后可编译,修复 E4/E5 后完整 | +| 可测试性 | 8/10 | Clock/IdGenerator 抽象好,ToolExecutor 返回值待改进 | +| 可部署性 | 7/10 | binary tarball 清晰,Docker 可选 | +| 需求对齐度 | 10/10 | 所有原始需求在架构中均有对应设计 | +| 平均 | **8.0/10** | 充分进入概要设计阶段 | + +### 4.5 与 MIMO2.5 审查的比较 + +| 维度 | MIMO2.5 | DeepSeek V4 Pro | +|---|---|---| +| 发现问题数 | 16 (6B+10S) | 16 (6E-critical + 6E-should + 4E-ok) | +| 关键分歧 | — | `ForeignKeys` 问题(MIMO2.5 视为 S8),本审查认为已有合理工程解释 | +| 新发现 | — | E6 (PathPolicy 缺少 source)、E9 (EventBus 异常行为) | +| 共识 | B1-B3/B5/B6/S1-S7 相同 | 一致 | +| 总体评分 | — | 8.0/10 | + +DeepSeek V4 Pro 与 MIMO2.5 两个独立模型在阻塞问题识别上高度一致,增加了审查结论的置信度。 + +--- + +## 5. 下一步行动 + +### 立即行动(进入概要设计前) + +1. 修复 E1:`TaskInsert` 改为 Omit 子集 +2. 修复 E3:`TaskType` 加入 `"docs"` +3. 修复 E4/E5:补充 `DebugKnowledgeStore`、`LearnedMemoryStore`、`PromptLayer`、`CompactionPolicy` 接口 +4. 修复 E9:明确 `EventBus.subscribe` handler 异常行为 +5. 修复 B3:补充 `debug-records.db` / `learned-memory.db` DDL +6. 修复 B1:`error-taxonomy` 中 `cause_ref` 统一为 `EntityRef` + +### 概要设计中同步 + +7. 修复 E2/E6/E7/E8/E10 +8. 修复跨文档的 EntityRef 和 ToolCategory 重复定义问题 +9. 产出 `系统概要设计.md` +10. 产出 `系统详细设计.md` + +### 总体建议 + +**进入概要设计阶段**,先修 6 项立即行动问题,再产出概要设计文档。 diff --git a/AirPlan/docs/architecture/MIMO2.5三视角审查.md b/AirPlan/docs/architecture/MIMO2.5三视角审查.md new file mode 100644 index 0000000..b45cffa --- /dev/null +++ b/AirPlan/docs/architecture/MIMO2.5三视角审查.md @@ -0,0 +1,329 @@ +# MIMO2.5 三角度架构审查报告 + +Date: 2026-05-28 +Status: Second-round architecture review after major corrections +Model: MIMO v2.5 (1M context) +Reviewer scope: All architecture documents under `AirPlan/docs/architecture/` + +## 审查背景 + +本轮审查基于第一轮审查后的修正结果,包括: + +- 接口契约统一为 `snake_case` 并重写为可实现版本 +- Permission 统一为 `action + grant_scope` 模型 +- Error 统一为 `AirError` 嵌入式结构 +- Task 依赖统一为边列表模型(含 `hard/soft/conflict/serialization`) +- IPC 补齐 `tool.call/tool.result/tool.stream/worker.result/worker.checkpoint/protocol.error` +- C4/UML 修正 TUI、ProviderManager、EventIngestor、Scheduler/WorkerManager、Capability/Doctor 依赖方向 +- 新增 `runtime-semantics-v1.md` 明确跨 DB 事务、heartbeat、执行原语等 +- 目标从半成品 MVP 升级为 V1.0.0 Alpha(含完整 C++ 工作流和插件基础) +- 明确 source-of-truth precedence +- 消除 VibeBox 双 baseline 歧义 + +--- + +## 1. 架构师视角 + +### 1.1 总体评价 + +架构方向正确,修正后的 IPC 协议、依赖方向、EventIngestor、权限模型、任务依赖边列表均已收敛。剩余问题主要是**跨文档一致性**,不是设计方向问题。 + +V1.0.0 Alpha 范围合理:完整 C++ 开发闭环、插件/能力基础、TUI/HUD、验证与打包都在范围内。推迟容器沙箱、第三方插件签名、Windows 原生支持等是正确的取舍。 + +### 1.2 可接受的取舍 + +| 取舍 | 理由 | +|---|---| +| 项目本地 `.air` 作为状态源 | 本地 coding agent 的合理选择,避免云端耦合 | +| Anthropic canonical 内部消息格式 | 简化多 Provider 支持,转换在 adapter 边界 | +| EventBus 用于实时、SQLite 用于恢复 | 正确的职责分离,已通过 EventIngestor 澄清 | +| 独立 Bun 子进程 + NDJSON IPC | 良好的隔离边界,协议已补齐 | +| C++ 作为第一个深度工具链 | 对架构有高验证价值,同时保持 `toolchain-*` 可扩展性 | +| Architecture Designer 作为显式升级路径 | 多 agent 编码运行时的合理治理模型 | +| `foreign_keys = OFF` | 降低迁移/恢复复杂度,但需要应用层一致性契约(见 S8) | + +### 1.3 已修正的关键问题 + +1. **IPC 协议**:已补齐 tool.call/result/stream、worker.result/checkpoint、protocol.error +2. **依赖方向**:已消除 Scheduler↔WorkerManager、EventStore↔EventBus、CapabilityRegistry↔DoctorService 循环 +3. **TUI 边界**:已明确 TUI 只依赖 `ProjectionClient`,不导入 runtime 内部 +4. **ProviderManager 归属**:已明确在 `packages/llm`,runtime 通过 facade 调用 +5. **EventIngestor**:已引入作为事件摄入边界,EventStore 不再隐式触发业务动作 +6. **Permission 模型**:已统一为 `action + grant_scope` +7. **Task 依赖**:已改为边列表模型,Scheduler 可动态追加持久化冲突边 +8. **执行原语**:已通过 `runtime-semantics-v1.md` 定义 read-before-edit token、exact edit、completion gate + +### 1.4 剩余架构关注点 + +1. **跨 DB/文件事务**:`runtime-semantics-v1.md` 已定义 outbox/compensation 模型,但 `DebugKnowledgeStore` 和 `learned-memory` 服务接口尚未定义 +2. **学习/技能生命周期**:`candidate → approval → promotion → rollback` 流程已有文档描述,但缺少形式化状态机 +3. **项目扫描**:已确认无限递归无排除原则,安全边界(symlink 环、挂载异常)已补充 + +--- + +## 2. 工程师视角 + +### 2.1 阻塞级问题(B1-B6) + +这些问题会阻止 `packages/contracts` 编译为可用 TypeScript 包,或导致运行时失败。 + +#### B1. `AirError.cause_ref` 类型冲突 + +**位置**:`interface-contracts-v1.md` §3 vs `error-taxonomy-v1.md` §2 + +**问题**: +- `interface-contracts-v1.md` 中 `cause_ref` 类型为 `EntityRef`(`{ type: EntityType, id: string }` 结构) +- `error-taxonomy-v1.md` 中 `cause_ref` 为内联扁平字段对象:`{ event_id?, task_id?, agent_id?, tool_run_id?, command_run_id?, artifact_id?, diagnostic_id? }` +- 两个结构体不兼容,消费者期望其中一种格式会与另一种冲突 + +**修复方向**:以 `interface-contracts-v1.md` 的 `EntityRef` 为准,更新 `error-taxonomy-v1.md` + +--- + +#### B2. `DebugKnowledgeStore` 和 learned-memory 服务接口缺失 + +**位置**:`runtime-semantics-v1.md` §6.3, §6.4 + +**问题**: +- `runtime-semantics-v1.md` 引用 `DebugKnowledgeStore` 作为写入 `debug-records.db` 的服务 +- 引用未命名的 "ExperienceMiner/Curator service" 写入 `learned-memory.db` +- 两个服务在 `interface-contracts-v1.md` 中均无接口契约 +- `c4/code-view.md` 中也未列出这些运行时类 +- 开发者实现 §6 的跨 DB 事务语义时没有可实现的契约 + +**修复方向**:在 `interface-contracts-v1.md` 中添加 `DebugKnowledgeStore` 和 `LearnedMemoryStore` 接口 + +--- + +#### B3. `debug-records.db` 和 `learned-memory.db` 无 schema 定义 + +**位置**:`db-schema-v1.md` + +**问题**: +- `db-schema-v1.md` 只覆盖 `session.db` +- 这两个项目级数据库在至少 4 个文档中被引用,但无 DDL、无表定义、无列规范 +- `debug.record.created` 事件载荷暗示了 `debug_record_id`、`failure_signature`、`summary` 等列,但目标表结构未定义 + +**修复方向**:在 `db-schema-v1.md` 中补充 `debug-records.db` 和 `learned-memory.db` 的 schema + +--- + +#### B4. `PermissionProfile` 命名冲突 + +**位置**:`security-model-v1.md` §3 vs `interface-contracts-v1.md` §10 + +**问题**: +- `security-model-v1.md` 定义 `PermissionProfile` 为 `"low" | "normal" | "high" | "developer"`(安全态势) +- `interface-contracts-v1.md` 定义 `AgentRuntimeContext.permission_profile` 为 `"main_direct" | "executor" | "reviewer" | "debugger" | "system"`(角色权限模板) +- 两个不同概念使用相同名称 `permission_profile`,实现者可能混淆 + +**修复方向**:将 `AgentRuntimeContext.permission_profile` 重命名为 `permission_template` 或 `role_permission` + +--- + +#### B5. `EntityType` 集合不一致 + +**位置**:`interface-contracts-v1.md` §4 vs `event-registry-v1.md` §1 + +**问题**: +- `interface-contracts-v1.md` 定义 `EntityType` 含 12 个值,包括 `"capability"` 和 `"provider"` +- `event-registry-v1.md` 内联定义自己的 `EntityRef` 只有 10 个值,缺失 `"capability"` 和 `"provider"` +- 如果两者编译到同一包,会有两个冲突的 `EntityRef` 定义 + +**修复方向**:以 `interface-contracts-v1.md` 为准,event-registry 引用该定义而非内联 + +--- + +#### B6. `CompactionPolicy`、`PromptLayer`、`PromptLayerLoader` 无契约 + +**位置**:`c4/code-view.md` §4 vs `interface-contracts-v1.md` §16 + +**问题**: +- `c4/code-view.md` 列出 `CompactionPolicy.ts`、`PromptLayerLoader.ts` 并引用 `PromptLayer` 类型 +- `interface-contracts-v1.md` §16 只定义了最小 `ContextAssembler` 接口 +- `ContextAssembleInput.refs` 是 `string[]` 无结构,而 code-view 的 `ContextPack.refs` 有结构化形状 +- 没有 `PromptLayer` 定义,`ContextAssembler` 无法实现 + +**修复方向**:在 `interface-contracts-v1.md` 中补充 `PromptLayer`、`CompactionPolicy`、`PromptLayerLoader` 接口 + +--- + +### 2.2 应修复问题(S1-S10) + +这些问题不会阻止编译,但会造成混淆、重复或测试困难。 + +#### S1. `ToolCategory` 和 `ToolResultEnvelope` 重复定义 + +**位置**:`interface-contracts-v1.md` §12 和 `tool-registry-v1.md` §2 + +**问题**:两者定义了相同的 `ToolCategory` 和 `ToolResultEnvelope`。编译到同一包时 TypeScript 会报重复标识符。 + +**修复方向**:`tool-registry-v1.md` 引用 `interface-contracts-v1.md`,不重复定义。 + +--- + +#### S2. `TaskInsert = TaskRecord` 强制调用方传服务器生成字段 + +**位置**:`interface-contracts-v1.md` §6 + +**问题**:`TaskInsert` 等于 `TaskRecord`,意味着调用方必须提供 `created_at`、`retry_count`、`status`。通常 insert 应使用子集类型,服务器默认值由存储层填充。`PersistedEventRecord` 有同样问题。 + +**修复方向**:定义 `TaskInsert` 和 `EventInsert` 为省略服务器生成字段的子集类型。 + +--- + +#### S3. `ToolExecutor.execute` 返回未区分联合类型 + +**位置**:`interface-contracts-v1.md` §12 + +**问题**:返回 `AsyncIterable | Promise>`,调用方需 duck-type 或 `Symbol.asyncIterator` 检查来区分流式与非流式。`streaming: boolean` 字段存在但未在类型层面强制。 + +**修复方向**:使用判别联合或品牌化返回类型。 + +--- + +#### S4. `EventBus.subscribe` handler 抛错行为未定义 + +**位置**:`interface-contracts-v1.md` §7 + +**问题**:如果订阅 handler 抛出异常,契约未说明:(a) 错误被吞掉,(b) 传播给发布者,(c) 订阅被终止。 + +**修复方向**:明确 handler 错误不影响发布者,错误被记录但不传播。 + +--- + +#### S5. `JsonSchema` 泛型参数 `T` 未使用 + +**位置**:`interface-contracts-v1.md` §2 + +**问题**:`type JsonSchema = JsonObject` 中 `T` 从未在类型体中引用,是幽灵类型,不提供编译时安全。 + +**修复方向**:移除泛型参数或定义品牌化类型。 + +--- + +#### S6. `SchedulerWavePlan.wave_id` 是 `string` 而非品牌化 ID + +**位置**:`interface-contracts-v1.md` §9 + +**问题**:系统中其他标识符都用品牌化类型别名(`TaskID`、`AgentID` 等),`wave_id` 是普通 `string`,不一致且无法防止 ID 类型混淆。 + +**修复方向**:添加 `WaveID` 品牌化类型。 + +--- + +#### S7. `FollowUpTask.type` 允许 `"docs"` 但 `TaskType` 不含 `"docs"` + +**位置**:`interface-contracts-v1.md` §11 + +**问题**:`FollowUpTask.type` 为 `TaskType | "docs"`,但 `TaskType` 不含 `"docs"`。Scheduler 收到 `type: "docs"` 的 follow-up 时无法调度。 + +**修复方向**:将 `"docs"` 加入 `TaskType`,或从 `FollowUpTask.type` 中移除。 + +--- + +#### S8. `foreign_keys = OFF` 无应用层一致性契约 + +**位置**:`db-schema-v1.md` §1 + +**问题**:禁用外键并声明"应用层一致性检查处理引用",但无文档定义这些检查是什么、何时运行、孤立行如何处理。 + +**修复方向**:在 Repository 接口中明确 insert 是否验证外键存在,或在 `runtime-semantics-v1.md` 中补充孤儿清理规则。 + +--- + +#### S9. `PermissionEngine.record` 返回 `Promise` 无错误指示 + +**位置**:`interface-contracts-v1.md` §10 + +**问题**:如果记录权限决策失败(磁盘满、DB 锁),调用方无法得知。 + +**修复方向**:返回结果类型或指定抛出的类型化错误。 + +--- + +#### S10. `ProjectionStore.apply` 接受任意事件无过滤规范 + +**位置**:`interface-contracts-v1.md` §14 + +**问题**:`apply(event: RuntimeEvent): void` 未指定哪些事件类型会触发投影更新,实现者需猜测。 + +**修复方向**:添加文档说明预期的事件集,或使用类型窄化联合。 + +--- + +### 2.3 可接受的缺口 + +| 缺口 | 理由 | +|---|---| +| 无 monorepo 工具配置 | 实现选择 | +| 无具体 SQLite 迁移策略 | 单版本 V1.0.0 Alpha 可接受 | +| 无 Provider 重试/退避细节 | adapter 实现细节 | +| 无 TUI 组件细节 | TUI 仅消费投影,实现自由度高 | +| 无具体 token 计数实现 | Provider adapter 处理 | +| `ProviderCapabilityMatrix.supports/.conversion` 为 `JsonObject` | 故意保留 provider 特定形状灵活性 | +| 无具体 `semantic_signature` 算法 | 格式已定义,哈希函数为实现选择 | +| 无 IPC 传输层契约 | 信封格式已定义,传输为实现细节 | +| 无 EventStore schema 验证失败的具体错误形状 | 次要缺口 | + +--- + +## 3. 用户视角(原始需求对齐) + +### 3.1 需求对齐检查 + +| 原始需求 | 当前状态 | 评价 | +|---|---|---| +| 自有 AI coding agent/runtime,非 Claude Code 插件包装 | 独立架构,自有运行时、调度器、工具系统 | 已满足 | +| Claude Code 级执行层质量 | D-059 + runtime-semantics 定义了 read-before-edit、exact edit、completion gate | 已满足 | +| OpenCode TUI 风格复用 | `@opentui/solid`,投影消费模式,不复用业务状态 | 已满足 | +| 项目本地 `.air` 状态 | `.air/shared` + `.air/local`,session DB 项目本地 | 已满足 | +| 事件驱动 + SQLite 恢复 | EventBus 实时 + EventStore 持久化 + ProjectionStore 投影 | 已满足 | +| 独立子进程 worker + NDJSON IPC | 已定义完整 IPC 协议含 tool 调用 | 已满足 | +| C++ 作为第一个深度工具链 | `toolchain-cpp` 包含完整工作流 | 已满足 | +| 多 agent 调度 | Scheduler + TaskGraph + 边列表依赖 + 波次规划 | 已满足 | +| 权限模型 | `action + grant_scope`,路径/命令/网络/凭据分类 | 已满足 | +| VibeBox 下游分支 | `branchvibebox/` 独立 baseline + feasibility plan | 已满足 | +| 非半成品 MVP,目标 V1.0.0 Alpha | 范围已升级,含完整 C++ 工作流和插件基础 | 已满足 | + +### 3.2 无方向性冲突 + +用户视角下无设计方向性冲突。所有 B/S 级问题都是工程实现一致性问题,不影响产品定位和架构决策。 + +--- + +## 4. 优先级建议 + +### 必须在系统概要设计前修复(B1-B6) + +| 优先级 | ID | 修复内容 | +|---|---|---| +| 1 | B1 | 统一 `AirError.cause_ref` 为 `EntityRef`,更新 error-taxonomy | +| 2 | B4 | 重命名 `AgentRuntimeContext.permission_profile` 为 `permission_template` | +| 3 | B5 | event-registry 引用 interface-contracts 的 `EntityRef`,不内联 | +| 4 | B2 | 在 interface-contracts 补充 `DebugKnowledgeStore` 和 `LearnedMemoryStore` 接口 | +| 5 | B3 | 在 db-schema-v1 补充 `debug-records.db` 和 `learned-memory.db` DDL | +| 6 | B6 | 在 interface-contracts 补充 `PromptLayer`、`CompactionPolicy`、`PromptLayerLoader` | + +### 可在概要设计中同步修复(S1-S10) + +| 优先级 | ID | 修复内容 | +|---|---|---| +| 1 | S7 | 将 `"docs"` 加入 `TaskType` 或从 `FollowUpTask.type` 移除 | +| 2 | S2 | 定义 `TaskInsert`/`EventInsert` 子集类型 | +| 3 | S1 | tool-registry 引用 interface-contracts,不重复定义 | +| 4 | S6 | 添加 `WaveID` 品牌化类型 | +| 5 | S4 | 定义 EventBus handler 错误行为 | +| 6 | S8 | 补充 FK 一致性契约或孤儿清理规则 | +| 7 | S9 | `PermissionEngine.record` 返回结果类型 | +| 8 | S10 | `ProjectionStore.apply` 添加事件过滤文档 | +| 9 | S3 | `ToolExecutor` 返回判别联合 | +| 10 | S5 | 移除 `JsonSchema` 泛型参数 | + +--- + +## 5. 审查结论 + +**可以进入系统概要设计阶段**,前提是 B1-B6 先修复。S1-S10 可在概要设计过程中同步处理。 + +架构文档集整体质量高,V1.0.0 Alpha 范围明确,接口契约基本可编译,运行时语义已澄清。本轮修正解决了第一轮审查发现的所有关键问题,剩余问题都是工程一致性层面的细节。 diff --git a/AirPlan/docs/architecture/adr/ADR-0001-use-airplan-as-the-workflow-root.md b/AirPlan/docs/architecture/adr/ADR-0001-use-airplan-as-the-workflow-root.md new file mode 100755 index 0000000..042abc9 --- /dev/null +++ b/AirPlan/docs/architecture/adr/ADR-0001-use-airplan-as-the-workflow-root.md @@ -0,0 +1,15 @@ +# ADR-0001: Use AirPlan As The Workflow Root + +- Status: Accepted +- Date: YYYY-MM-DD + +## Context +This project needs a durable workflow root for planning, execution state, architecture context, validation evidence, and resumable AI sessions. + +## Decision +Store project workflow artifacts under `AirPlan/`, use the repo-root `AGENTS.md` only as a bootstrap shim, and let `aireng` plus `airdo` maintain plan, todo, ADR, and C4 context there. + +## Consequences +- Planning and execution context stay resumable across sessions. +- Global workflow docs live in one predictable location. +- Plugin runtime state does not clutter the main project tree. diff --git a/AirPlan/docs/architecture/adr/ADR-0002-use-bun-typescript-monorepo.md b/AirPlan/docs/architecture/adr/ADR-0002-use-bun-typescript-monorepo.md new file mode 100644 index 0000000..7aadcc1 --- /dev/null +++ b/AirPlan/docs/architecture/adr/ADR-0002-use-bun-typescript-monorepo.md @@ -0,0 +1,28 @@ +# ADR-0002: Use Bun TypeScript Monorepo For AirCoding Runtime + +- Status: Accepted +- Date: 2026-05-27 + +## Context + +AirCoding needs a self-owned runtime that can support CLI, TUI, agent orchestration, provider adapters, contracts, and toolchain packages without becoming a wrapper around an existing coding agent. + +## Decision + +Use TypeScript on Bun with Bun workspaces and Turborepo. Organize MVP packages as: + +```text +packages/cli +packages/tui +packages/runtime +packages/llm +packages/toolchain-cpp +packages/contracts +``` + +## Consequences + +- Runtime, UI, providers, and toolchains share compileable contracts. +- Worker agents can run as independent Bun child processes. +- Python remains subprocess-only for existing scripts/libraries, not the core runtime. +- Future language support is added through `toolchain-*` packages. diff --git a/AirPlan/docs/architecture/adr/ADR-0003-use-project-local-air-state.md b/AirPlan/docs/architecture/adr/ADR-0003-use-project-local-air-state.md new file mode 100644 index 0000000..9f71e4d --- /dev/null +++ b/AirPlan/docs/architecture/adr/ADR-0003-use-project-local-air-state.md @@ -0,0 +1,30 @@ +# ADR-0003: Use Project-Local `.air` State + +- Status: Accepted +- Date: 2026-05-27 + +## Context + +AirCoding sessions, artifacts, rules, plans, backups, and debug evidence must be resumable and portable with the project where possible, while still keeping private/local state out of normal source sharing. + +## Decision + +Use project-local `.air/` as the source of truth: + +```text +/.air/shared/ # git-shareable project config, rules, plan docs +/.air/local/ # private sessions, artifacts, backups, workspaces, local DBs +``` + +Session DBs live at: + +```text +/.air/local/sessions//session.db +``` + +## Consequences + +- Project state can move with the project directory. +- `.air/shared/` can be versioned; `.air/local/` is gitignored by default. +- Runtime recovery uses project-local SQLite and artifacts. +- Global `~/.air/` remains config/cache/log/index state, not session source of truth. diff --git a/AirPlan/docs/architecture/adr/ADR-0004-use-eventstore-domain-tables-and-projectionstore.md b/AirPlan/docs/architecture/adr/ADR-0004-use-eventstore-domain-tables-and-projectionstore.md new file mode 100644 index 0000000..19a2323 --- /dev/null +++ b/AirPlan/docs/architecture/adr/ADR-0004-use-eventstore-domain-tables-and-projectionstore.md @@ -0,0 +1,28 @@ +# ADR-0004: Use EventStore, Domain Tables, And ProjectionStore + +- Status: Accepted +- Date: 2026-05-27 + +## Context + +AirCoding needs live TUI/HUD updates, crash recovery, scheduling queries, tool/run evidence, and resumable session state. Raw message storage alone is insufficient for scheduling and recovery. + +## Decision + +Use an event-driven runtime with: + +```text +EventBus # live ephemeral/durable event publication +EventStore # durable event validation and transactional persistence +Domain tables # scheduling/recovery/query source of truth +ProjectionStore # derived TUI/HUD view model +``` + +Canonical messages are stored as Anthropic content JSON. Domain tables store tasks, agents, tool runs, command runs, artifacts, diagnostics, evidence, workspaces, summaries, and UI state. + +## Consequences + +- Scheduler and recovery query domain tables instead of parsing message history. +- TUI/HUD consumes ProjectionStore, not DB/EventBus directly. +- Durable event insert and corresponding domain table update happen in one SQLite transaction. +- Event payloads and persistence policy are governed by `event-registry-v1.md`. diff --git a/AirPlan/docs/architecture/adr/ADR-0005-use-independent-worker-processes-and-ndjson-ipc.md b/AirPlan/docs/architecture/adr/ADR-0005-use-independent-worker-processes-and-ndjson-ipc.md new file mode 100644 index 0000000..e554d96 --- /dev/null +++ b/AirPlan/docs/architecture/adr/ADR-0005-use-independent-worker-processes-and-ndjson-ipc.md @@ -0,0 +1,30 @@ +# ADR-0005: Use Independent Worker Processes And NDJSON IPC + +- Status: Accepted +- Date: 2026-05-27 + +## Context + +A single agent process doing all work would cause context explosion, reduce responsiveness, and make parallel execution fragile. AirCoding needs workers that can be monitored, retried, cancelled, and recovered independently. + +## Decision + +Run Executor, Reviewer, Debugger, Compactor, and ExperienceMiner as independent Bun child processes. Use NDJSON over stdio for IPC. + +IPC messages use: + +```text +kind: event +kind: control +kind: log +``` + +The Scheduler owns process lifecycle, heartbeat monitoring, timeout handling, and WorkerResult collection. + +## Consequences + +- Main Agent remains responsive. +- Workers have bounded task context. +- Scheduler can detect lost workers through heartbeat/process state. +- stdout is reserved for protocol; stderr is crash/fatal fallback. +- Worker loops may be role-specific rather than one generic shared loop. diff --git a/AirPlan/docs/architecture/adr/ADR-0006-align-execution-layer-with-claude-code.md b/AirPlan/docs/architecture/adr/ADR-0006-align-execution-layer-with-claude-code.md new file mode 100644 index 0000000..279dc6a --- /dev/null +++ b/AirPlan/docs/architecture/adr/ADR-0006-align-execution-layer-with-claude-code.md @@ -0,0 +1,30 @@ +# ADR-0006: Align Execution Layer With Claude Code Quality Discipline + +- Status: Accepted +- Date: 2026-05-27 + +## Context + +AirCoding's usefulness depends heavily on safe, correct code modifications. The user explicitly prioritized Claude Code-level execution quality over broad but loose tool behavior. + +## Decision + +Align execution-layer primitives with Claude Code as much as possible: + +- read before edit +- exact conservative replacements +- small patches +- no unrelated refactors +- no premature abstractions +- schema-validated tool use +- permission checks before side effects +- verification before completion +- build/test/debug evidence collection +- root-cause failure diagnosis +- explicit blocker escalation for architecture/interface conflicts + +## Consequences + +- `fs.edit`, `fs.patch`, `shell.run`, WorkerResult, and review gates must preserve this discipline. +- Codex/OpenCode may inform tool breadth/UI/runtime ideas, but not at the cost of execution quality. +- Workers should fail or block rather than guessing unsafe edits. diff --git a/AirPlan/docs/architecture/adr/ADR-0007-use-toolregistry-permissionengine-and-capability-manifests.md b/AirPlan/docs/architecture/adr/ADR-0007-use-toolregistry-permissionengine-and-capability-manifests.md new file mode 100644 index 0000000..4a9e637 --- /dev/null +++ b/AirPlan/docs/architecture/adr/ADR-0007-use-toolregistry-permissionengine-and-capability-manifests.md @@ -0,0 +1,21 @@ +# ADR-0007: Use ToolRegistry, PermissionEngine, And Capability Manifests + +- Status: Accepted +- Date: 2026-05-27 + +## Context + +AirCoding needs a growing tool surface across filesystem, shell, git, build, debug, GUI, network, memory, and future plugins. Tools must be extensible without bypassing safety boundaries. + +## Decision + +Use ToolRegistry for schema-validated tool execution, PermissionEngine for all side-effect decisions, and CapabilityRegistry for built-in/future tool bundles. + +Capabilities declare dependencies and permissions. Doctor/setup detects and installs/fixes dependencies according to permission policy. Capability tools are not privileged above built-ins. + +## Consequences + +- All tool calls share lifecycle events, artifacts, errors, and evidence behavior. +- Plugin/capability extension is possible without opening a permission bypass. +- Doctor owns dependency installation rather than arbitrary plugin scripts. +- MVP tool names and schemas are frozen in `tool-registry-v1.md`. diff --git a/AirPlan/docs/architecture/adr/ADR-0008-use-anthropic-canonical-messages-with-provider-adapters.md b/AirPlan/docs/architecture/adr/ADR-0008-use-anthropic-canonical-messages-with-provider-adapters.md new file mode 100644 index 0000000..1785e15 --- /dev/null +++ b/AirPlan/docs/architecture/adr/ADR-0008-use-anthropic-canonical-messages-with-provider-adapters.md @@ -0,0 +1,21 @@ +# ADR-0008: Use Anthropic Canonical Messages With Provider Adapters + +- Status: Accepted +- Date: 2026-05-27 + +## Context + +AirCoding needs provider flexibility while preserving a stable internal representation for prompts, tools, messages, context compaction, and session persistence. + +## Decision + +Use Anthropic canonical content blocks internally. ContextAssembler emits Anthropic canonical messages. Provider adapters convert at the LLM boundary to Anthropic, OpenAI, OpenRouter, ollama, or compatible endpoints. + +Provider capability matrix controls whether a model can satisfy the task and whether conversion is lossless, lossy, or unsupported. + +## Consequences + +- Same-provider model switching has low conversion cost. +- Cross-provider differences are localized to adapters. +- Unsupported required features block before model call. +- Tool/result/message persistence remains stable across providers. diff --git a/AirPlan/docs/architecture/adr/ADR-0009-target-linux-first-with-tiered-platform-support.md b/AirPlan/docs/architecture/adr/ADR-0009-target-linux-first-with-tiered-platform-support.md new file mode 100644 index 0000000..1bc24fb --- /dev/null +++ b/AirPlan/docs/architecture/adr/ADR-0009-target-linux-first-with-tiered-platform-support.md @@ -0,0 +1,21 @@ +# ADR-0009: Target Linux First With Tiered Platform Support + +- Status: Accepted +- Date: 2026-05-27 + +## Context + +AirCoding's first deep workflow targets C++ development and local agent execution, which depend heavily on POSIX shell/process/filesystem semantics and local toolchains. + +## Decision + +Use Linux x86_64 as tier-1 MVP platform, Linux arm64 and WSL2 as tier-2, macOS as experimental, and Windows native as experimental/post-MVP. + +MVP shell/process/C++ workflows target POSIX-like Linux behavior. + +## Consequences + +- Release gates block on tier-1 Linux. +- Platform detection and path classification must be platform-aware. +- Windows native deep support and MSVC workflows are deferred. +- VibeBox ARM Linux remains compatible as a downstream branch but does not define mainline MVP release blockers. diff --git a/AirPlan/docs/architecture/artifact-naming-v1.md b/AirPlan/docs/architecture/artifact-naming-v1.md new file mode 100644 index 0000000..95f3ad8 --- /dev/null +++ b/AirPlan/docs/architecture/artifact-naming-v1.md @@ -0,0 +1,303 @@ +# AirCoding Artifact Naming and Layout V1 + +Date: 2026-05-27 +Status: Canonical artifact naming/layout standard for V1.0.0 Alpha skeleton + +This document defines artifact URI format, directory layout, naming conventions, metadata requirements, compression rules, and evidence linkage. + +## 1. Goals + +Artifact storage must be: + +1. Project-local and session-local. +2. Stable across project moves when using artifact URI and DB records. +3. Queryable through SQLite domain tables. +4. Safe for large logs/binaries/screenshots/pcaps/core dumps. +5. Linked to tool/command/task/agent/evidence records. +6. Compatible with crash recovery and final reports. + +## 2. Root Layout + +Session artifact root: + +```text +/.air/local/sessions//artifacts/ +``` + +Canonical subdirectories: + +```text +artifacts/ + messages/ + context/ + command-runs/ + tool-runs/ + builds/ + tests/ + static-analysis/ + debug/ + screenshots/ + pcaps/ + core-dumps/ + diffs/ + reports/ + doctor/ + permissions/ + workspaces/ + ui-assets/ + tmp/ +``` + +`tmp/` is not referenced by `artifacts` table until a file is atomically renamed into a canonical directory. + +## 3. Artifact URI + +Canonical URI: + +```text +artifact://project//session// +``` + +Rules: + +1. URI is stable and stored in `artifacts.uri`. +2. Filesystem path is stored in `artifacts.path`. +3. Consumers should prefer URI + DB lookup over reconstructing paths. +4. Artifact IDs are opaque stable IDs, not semantic filenames. + +## 4. Artifact ID + +V1 artifact ID format: + +```text +art_ +``` + +Examples: + +```text +art_01JZ7QX4D4N9Y6QZ3C9QH4SX2A +``` + +Rules: + +1. IDs are generated before writing temp files. +2. IDs must be unique within session DB. +3. IDs are not reused after failed writes. +4. Human-readable meaning belongs in filename and metadata, not ID. + +## 5. Filename Format + +Canonical filename: + +```text +-- +``` + +Timestamp format: + +```text +YYYYMMDDTHHMMSSmmmZ +``` + +Examples: + +```text +20260527T142233120Z-art_01JZ7QX4D4N9Y6QZ3C9QH4SX2A-build-log.txt.gz +20260527T142240992Z-art_01JZ7QXXM8WAPVTA5Y4F4P5NTQ-screenshot.png +20260527T142251002Z-art_01JZ7QY8P6PR3G2T5BXE91D6KD-diff.patch +``` + +Slug rules: + +```text +lowercase +ascii letters/numbers/hyphen only +collapse repeated hyphens +max 64 chars +no secrets, usernames, absolute paths, tokens, or raw command strings +``` + +## 6. Type to Directory Mapping + +| Artifact type | Directory | Default extension | +|---|---|---| +| `message_snapshot` | `messages/` | `.json.gz` | +| `context_pack` | `context/` | `.json.gz` | +| `stdout` | `command-runs//` | `.stdout.txt.gz` | +| `stderr` | `command-runs//` | `.stderr.txt.gz` | +| `combined_output` | `command-runs//` | `.combined.txt.gz` | +| `tool_output` | `tool-runs//` | `.json.gz` | +| `build_log` | `builds/` | `.txt.gz` | +| `test_report` | `tests/` | `.json` or `.xml` | +| `static_analysis_report` | `static-analysis/` | `.json` | +| `debug_report` | `debug/` | `.md` | +| `backtrace` | `debug/` | `.txt` | +| `screenshot` | `screenshots/` | `.png` | +| `pcap` | `pcaps/` | `.pcap` | +| `core_dump` | `core-dumps/` | `.core` | +| `diff` | `diffs/` | `.patch` | +| `review_report` | `reports/` | `.md` | +| `doctor_report` | `doctor/` | `.json` | +| `permission_report` | `permissions/` | `.json` | +| `workspace_diff` | `workspaces//` | `.patch` | +| `ui_asset` | `ui-assets/` | `.svg` / `.png` / `.json` | + +## 7. Command and Tool Run Layout + +Command run artifacts: + +```text +command-runs// + --stdout.txt.gz + --stderr.txt.gz + --combined.txt.gz + --diagnostics.json +``` + +Tool run artifacts: + +```text +tool-runs// + --input.json.gz + --output.json.gz + --report.md +``` + +Only store tool input as artifact when needed for audit/debug; secrets must be redacted or omitted according to tool policy. + +## 8. Write Protocol + +Artifact file write protocol: + +```text +1. generate artifact_id +2. write to artifacts/tmp/.tmp +3. fsync/close where supported and appropriate +4. compute sha256 and size +5. atomic rename into canonical directory +6. insert artifacts row and emit artifact.created in same logical operation +7. link evidence_refs if applicable +``` + +If DB insert fails after rename, recovery scans orphaned files and either registers or quarantines them under `tmp/orphans/`. + +## 9. Compression Rules + +Default compression: + +| Content | Rule | +|---|---| +| text logs over threshold | gzip | +| JSON context/message snapshots | gzip | +| screenshots PNG/JPEG | no double compression | +| pcap | no compression by default | +| core dumps | no compression by default in MVP | +| small markdown reports | no compression | +| patches | no compression unless very large | + +Default threshold: + +```text +compress text/json artifacts >= 64 KiB +``` + +## 10. Metadata Requirements + +Minimum artifact row: + +```ts +interface ArtifactMetadataV1 { + schema_version: 1 + producer: "tool" | "command" | "agent" | "scheduler" | "main" | "system" + content_type?: string + compression?: "gzip" | "none" + redaction?: "none" | "partial" | "full" | "not_applicable" + preview_available?: boolean + original_path?: string + command_run_id?: string + tool_run_id?: string + task_id?: string + agent_id?: string + related_event_ids?: string[] + notes?: string[] +} +``` + +DB columns store common query fields separately; metadata is for extra detail. + +## 11. Evidence Linking + +Artifacts are facts only when linked by `evidence_refs`. + +Example: + +```text +artifact: command combined output +claim: "cpp.build failed with undefined reference in linker stage" +evidence_ref.kind: command_output +evidence_ref.ref: artifact://... +location_json: { "line_start": 120, "line_end": 148 } +``` + +Rules: + +1. A report may cite many evidence refs. +2. A single artifact may support multiple claims. +3. Evidence claims should be concise and testable. +4. Do not treat artifact existence as proof without a claim. + +## 12. Redaction and Sensitive Data + +Default local artifacts are not automatically redacted because they are project-local debug evidence. + +Before export/share/upload: + +```text +preview +redact secrets/credentials/private paths where policy requires +record redaction status +require explicit user authorization +``` + +Doctor bundles may include full diagnostics and are encrypted for the development team when exported through that channel. + +## 13. Retention + +Session artifacts are retained with the session by default. + +Cleanup candidates: + +```text +tmp files +orphaned failed writes +duplicate large command stream chunks after combined artifact exists +old developer logs outside project session artifacts +``` + +No automatic deletion of evidence-bearing artifacts in MVP unless user explicitly runs cleanup and confirms the policy. + +## 14. V1.0.0 Alpha Cut Line + +V1.0.0 Alpha skeleton must implement: + +1. Artifact ID generation. +2. Canonical URI creation. +3. Directory mapping by artifact type. +4. Temp-write then atomic rename. +5. sha256 and size recording. +6. gzip compression for large text/json. +7. `artifacts` table insertion. +8. `artifact.created` event emission. +9. Evidence ref linking. +10. Orphan scan/quarantine on startup. + +Post-MVP: + +```text +content-addressed deduplication +artifact browser UI +automatic retention policies +export bundle redaction profiles +remote artifact storage adapters +``` diff --git a/AirPlan/docs/architecture/baselineV1.md b/AirPlan/docs/architecture/baselineV1.md new file mode 100644 index 0000000..b60dfc2 --- /dev/null +++ b/AirPlan/docs/architecture/baselineV1.md @@ -0,0 +1,884 @@ +# AirCoding Architecture Baseline V1 + +Date: 2026-05-26 +Status: Canonical baseline for formal C4 / ADR / plan / todo work + +This document supersedes earlier exploratory wording in `idea.md` and decision rounds where conflicts exist. Round files remain historical records; this baseline is the implementation-facing source of truth until V2. + +## 1. Product Positioning + +AirCoding is a self-owned AI coding agent/runtime, not a Claude Code plugin wrapper. + +The runtime is language-agnostic. C++ is the first deep language profile, with later expansion through `toolchain-` packages. + +Core loop: + +```text +Requirement understanding + → architecture/interface design + → code reading + → implementation planning + → build + → static analysis + → test + → run/debug + → crash/log/network/GUI evidence analysis + → fix + → change summary + → experience mining +``` + +## 2. Reference Projects and Roles + +### OpenCode + +Reference for: + +- Runtime layering +- TUI visual style and interaction layout +- Session/event/sync concepts +- Provider/model abstraction +- Plugin/SDK extension ideas + +AirCoding reuses OpenCode-style UI primitives and OpenTUI patterns, but does **not** reuse OpenCode SDK/sync/session business state. + +### Claude Code CLI + +Primary reference for execution-layer quality. + +AirCoding execution-layer primitives should align with Claude Code as much as possible to maximize code quality, correctness, safe modification behavior, and verification discipline. + +Reference areas: + +- File read/edit/write safety boundaries +- Exact and conservative diff/update application behavior +- Patch granularity and conflict handling +- Tool lifecycle and schema style +- Permission checks around filesystem and shell +- Read-before-edit discipline +- Small-step edits +- Avoiding unrelated refactors and premature abstractions during task execution +- Verification-before-completion discipline +- Build/test/debug evidence collection before declaring completion +- Project Rules / memory adherence during edits +- Root-cause-oriented failure handling rather than random retries +- Explicit blocker escalation when implementation discovers architecture/interface conflicts +- TAOR / TORI execution feedback loops + +Claude Code is the quality benchmark because it productizes coding execution discipline: conservative edits, strong tool boundaries, persistent project rules, contextual memory, and verified build/test/debug closure. + +### Hermes Agent + +Reference for: + +- Experience mining +- Nudge Engine interval-triggered learning +- Curator daemon +- Skill self-patching +- SKILL.md format and FTS retrieval + +### OpenAI Codex + +Reference for: + +- Shell / patch / test direct execution loop +- Coding sandbox and tool orchestration +- Tool/plugin/core-plugin/MCP implementation ideas +- Wider tool surface including image generation/editing/vision capabilities + +Local reference path: `reference/openai-codex/`. + +### Anthropic Claude Skills + +Reference for: + +- `SKILL.md` structure and frontmatter conventions +- Skill directory layout (`scripts/`, `references/`, `assets/`) +- Reusable workflow packaging +- Skill trigger/retrieval descriptions +- Skill/Project Rules/MCP/Capability boundary + +Local reference path: `reference/anthropic-skills/`. + +### asciinema / Atuin / claude-hud + +Reference for: + +- PTY capture and terminal replay +- Command metadata/history indexing +- HUD/statusline layout and activity display + +## 3. Technology Baseline + +- Runtime: TypeScript on Bun +- Monorepo: Bun workspaces + Turborepo +- TUI: `@opentui/solid`, `@opentui/core`, `@opentui/keymap` +- Storage: SQLite per session, project-local +- IPC: NDJSON over stdio +- Python: subprocess-only helper layer for existing scripts/libraries, not core runtime +- Distribution: binary tarball before public package channels + +## 4. Monorepo Packages + +Canonical V1.0.0 Alpha package set: + +```text +packages/ + contracts/ # shared TypeScript interfaces (no implementation deps) + cli/ # command entrypoint, resource loading, startup/doctor/init + tui/ # OpenTUI/Solid UI, ProjectionStore consumers, HUD + runtime/ # EventBus, Scheduler, Agent process mgmt, ToolRegistry, PermissionEngine, SessionStore, ContextAssembler + llm/ # provider/model adapters, Anthropic canonical format, cross-provider conversion + toolchain-cpp/ # C++ detector, build/test/static-analysis/debug tools +``` + +Future language packages: + +```text +packages/toolchain-python/ +packages/toolchain-rust/ +packages/toolchain-js/ +``` + +Dependency direction: + +```text +contracts → (no implementation deps) +cli → tui/runtime/llm/toolchain-cpp +runtime → contracts, llm (interfaces/adapters), toolchain-* via registry +tui → contracts (ProjectionClient only) +llm → contracts +toolchain-cpp → contracts +runtime must not depend on tui +tui must consume ProjectionStore, not raw DB/EventBus directly +``` + +## 5. Project and Global Filesystem Layout + +### Global User Directory + +`~/.air/` stores user-global configuration, caches, global skills, logs, and project index only. It is not the source of truth for project sessions. + +```text +~/.air/ + ├── config.yaml + ├── models.yaml + ├── permissions.yaml + ├── compaction-rules.md + ├── project-index.db + ├── cache/ + │ ├── plugins/ + │ ├── providers/ + │ ├── lsp/ + │ └── downloads/ + ├── resources/versions// + ├── skills/ + └── logs/ + ├── air.log + └── air.developer.log +``` + +### Project Directory + +Project source of truth lives under the project. + +```text +/.air/ + ├── shared/ + │ ├── project.json + │ ├── permissions.yaml + │ ├── compaction-rules.md + │ ├── rules/ + │ │ ├── project-rules.md + │ │ └── toolchain-rules.md + │ └── plan/ + │ ├── AGENTS.md + │ ├── plan.md + │ ├── todo.md + │ └── docs/ + └── local/ + ├── sessions// + │ ├── session.db + │ └── artifacts/ + ├── state/ + ├── backups/ + ├── debug-records.db + ├── learned-memory.db + ├── workspaces/ + ├── tmp/ + └── locks/ +``` + +Recommended `.gitignore`: + +```gitignore +.air/local/ +``` + +`.air/shared/` is git-shareable. `.air/local/` is portable with the project directory but private/local by default. + +`project_id` is a stable UUID generated at initialization and stored in `.air/shared/project.json`. It is not derived from the absolute path. + +## 6. Runtime Architecture + +AirCoding is event-driven. + +```text +Main Agent + → Architecture Designer + → Scheduler + → Executor + → Reviewer + → Debugger + → Compactor + → ExperienceMiner +``` + +### Main Agent + +- Only user-facing agent +- Handles conversation, decisions, progress summaries, requirement changes +- Must remain responsive and idle-ready +- Does not perform background work itself +- Direct mode is a foreground execution lane, not a long-running Main Agent blockage + +Canonical Main Agent state machine is defined in `AirPlan/docs/architecture/main-agent-state-machine.md`. + +### Architecture Designer + +- Architecture planning and impact assessment +- Requirement-change assessment for design/interface/goal changes +- C4/ADR/plan/todo alignment +- Full-cycle architecture review + +Canonical implementation/interface/architecture/product escalation rules are defined in `AirPlan/docs/architecture/scope-escalation-v1.md`. + +### Scheduler + +- Reads TaskGraph +- Computes dependency order, write-area conflicts, waves, retries, workspaces +- Spawns child agents as independent Bun processes +- Monitors heartbeat and progress +- Handles merge coordination + +Canonical Scheduler task graph, wave, retry, heartbeat, workspace merge, and recovery state machine is defined in `AirPlan/docs/architecture/scheduler-state-machine-v1.md`. + +### Worker Agents + +- Executor: implementation/build/test verification +- Reviewer: read-only code/static-analysis review +- Debugger: evidence gathering, diagnosis, instrumentation, fix, verification +- Compactor: copy-on-write context compaction +- ExperienceMiner: memory/skill extraction, patching, promotion suggestions + +Worker loops are independent implementations, not one generic shared loop. + +## 7. RuntimeEvent and EventStore + +Cross-cutting runtime semantics for EventIngestor, heartbeat coalescing, cross-DB/file side effects, compaction ownership, execution primitives, scanner behavior, and learning/skills lifecycle are defined in `AirPlan/docs/architecture/runtime-semantics-v1.md`. + +Event envelope: + +```ts +interface RuntimeEvent { + id: string + type: string + version: number + timestamp: string + session_id: string + project_id?: string + source: EventSource + route: string[] + payload: T +} +``` + +`route` is an append-only structured route chain. Event durability is determined by EventStore based on event type, not by the event producer. + +Canonical event names, payload schemas, persistence policy, and producer/consumer rules are defined in `AirPlan/docs/architecture/event-registry-v1.md`. + +Persistence rules: + +1. Event producers emit valid envelopes but do not decide storage ad hoc. +2. EventStore owns persistence policy by event type. +3. Durable event insert and matching domain table update happen in one SQLite transaction. +4. Ephemeral stream/progress events may be throttled or coalesced by EventBus/ProjectionStore. +5. Event payload schema changes increment that event type's `version`. + +V1 durable event families: + +```text +session, message, agent, task, tool, command, +artifact, diagnostic, evidence, +context, summary, permission, doctor, +requirement, architecture, workspace, memory, debug +``` + +V1 ephemeral event families: + +```text +agent heartbeat, task progress, assistant message delta, +tool progress, command stdout/stderr delta, HUD frame render +``` + +## 8. IPC Protocol + +Child agents are independent Bun processes. + +IPC uses NDJSON over stdio. + +Canonical IPC envelopes are defined in `AirPlan/docs/architecture/interface-contracts-v1.md`. + +Required V1.0.0 Alpha IPC kinds: + +```text +control +event +log +tool.call +tool.result +tool.stream +worker.result +worker.checkpoint +protocol.error +``` + +All request/response IPC messages include `id`, `direction`, `timestamp`, `session_id`, `agent_id`, and optional `correlation_id`. + +- stdout: protocol only +- stderr: crash fallback and fatal diagnostics + +Exit codes: + +```text +0 protocol-level completion, including task failed/blocked +1 uncaught exception +2 startup/protocol error +3 permission error +4 parent cancelled +5 hard timeout killed +``` + +## 9. TaskSpec and WorkerResult + +### TaskSpec + +```ts +interface TaskSpec { + id: string + type: "execute" | "review" | "debug" | "compact" | "mine_experience" + title: string + description: string + acceptance_criteria: string[] + scope: { + write_area?: string + expected_files?: string[] + allowed_paths?: string[] + denied_paths?: string[] + } + dependencies: Array<{ + depends_on_task_id: string + dependency_type: "hard" | "soft" | "conflict" | "serialization" + reason?: string + source?: "architecture" | "scheduler" | "worker" | "user" | "system" + }> + verification: { + commands?: string[] + required: boolean + fallback_allowed: boolean + } + constraints: { + max_turns: number + soft_timeout_ms: number + hard_timeout_ms: number + retry_budget: number + model_policy: "scheduler_forced" | "agent_select" + model_id?: string + } + context_refs: { + plan_ref?: string + arc_ref?: string + parent_task_results?: string[] + artifacts?: string[] + } + output_contract: "ExecutorResult" | "ReviewerResult" | "DebuggerResult" | "CompactorResult" | "ExperienceMinerResult" +} +``` + +### WorkerResult + +```ts +interface WorkerResult { + task_id: string + agent_id: string + agent_type: "executor" | "reviewer" | "debugger" | "compactor" | "experience_miner" + status: "completed" | "failed" | "blocked" | "cancelled" + summary: string + changed_files: string[] + diff_ref?: string + artifacts: ArtifactRef[] + verification: VerificationResult[] + risks: Risk[] + follow_up_tasks: FollowUpTask[] + evidence_refs: EvidenceRef[] + result: T +} +``` + +`failed` means the task goal was not achieved and Scheduler may retry/skip. `blocked` means upper-level decision is needed. + +`summary` is a 3–6 sentence human-readable summary covering what was done, evidence, conclusion, and risk. It is not used for scheduling decisions. + +## 10. Tool and Capability System + +### ToolDefinition + +```ts +interface ToolDefinition { + name: string + version: number + description: string + input_schema: JsonSchema + output_schema: JsonSchema + category: "filesystem" | "shell" | "build" | "test" | "debug" | "static_analysis" | "gui" | "network" | "memory" | "project" | "internal" + permissions: { + read_paths?: PathPolicy + write_paths?: PathPolicy + execute?: boolean + network?: boolean + system_sensitive?: boolean + } + streaming: boolean + execute(input: I, context: ToolExecutionContext): AsyncIterable | Promise> +} +``` + +Inputs and outputs are schema-validated. Streaming tools emit a final `tool.result`. + +Canonical V1.0.0 Alpha built-in tool names, input/output schemas, and cut lines are defined in `AirPlan/docs/architecture/tool-registry-v1.md`. + +Bash is implemented as `shell.run`, a normal shell tool with extra PermissionEngine risk analysis. + +### Capability + +Capabilities are runtime-registered tool bundles with dependencies, triggers, evidence types, and config schema. + +Canonical capability manifest, source trust, dependency declaration, permission declaration, lifecycle, event namespace, and enable/update rules are defined in `AirPlan/docs/architecture/capability-trust-v1.md`. + +Capability manifests declare dependencies; they do not install them directly. + +Doctor/setup manages detection and installation. + +## 11. Doctor and Dependency Policy + +- First startup runs read-only doctor automatically. +- If issues exist, user is prompted to run fix. +- High-permission mode may `announce_then_run` dependency installation after first startup. +- First startup always asks before `doctor --fix`, even in high-permission mode. +- `credentials` and `system_sensitive` dependencies always require explicit confirmation. + +## 12. Permission and Security Model + +Canonical local security boundaries, permission profiles, path classification, command risk analysis, network policy, credential handling, logs/export rules, and refusal/block conditions are defined in `AirPlan/docs/architecture/security-model-v1.md`. + +Core principles: + +```text +read → allow +project directory → allow +project-outside non-system → backup then allow +system-sensitive → explicit confirmation +credentials → explicit confirmation +``` + +Project-outside backups are stored as a git repo at: + +```text +/.air/local/backups/ +``` + +## 13. Session DB and Domain State + +Session DB path: + +```text +/.air/local/sessions//session.db +``` + +Canonical schema details are defined in `AirPlan/docs/architecture/db-schema-v1.md`. + +Canonical message storage: + +- `messages` stores complete Anthropic canonical content JSON. +- `message_drafts` stores streaming assistant intermediate state and is deleted after final completion. +- `message_parts` is not a source-of-truth MVP table. + +Domain state tables are the source of truth for scheduling/recovery/query: + +```text +tasks +task_dependencies +task_attempts +agents +tool_runs +command_runs +artifacts +diagnostics +evidence_refs +workspaces +events +ui_state +``` + +Query-friendly columns are preferred over parsing JSON. Examples: + +- `tool_runs.origin_message_id` +- `command_runs.origin_message_id` +- common artifact foreign keys (`task_id`, `agent_id`, `tool_run_id`, `command_run_id`) +- event source/task/agent/tool/command IDs +- `route_json` plus `route_text` + +`ui_state` stores only UI recovery state and is flushed periodically plus on normal exit. + +## 14. Contract V1 Type Baseline + +Canonical implementation-facing service/interface contracts are defined in `AirPlan/docs/architecture/interface-contracts-v1.md`. + +Shared implementation contracts live in a dedicated package: + +```text +packages/contracts/ + runtime.ts + event.ts + ipc.ts + task.ts + worker-result.ts + tool.ts + artifact.ts + project.ts + provider.ts + ui.ts + error.ts +``` + +Principles: + +1. Contracts must be compileable and shared by runtime, TUI, LLM, and toolchain packages. +2. Shape stability matters more than perfect detail in V1. +3. Schema-heavy fields may start as `unknown` and tighten later. +4. ContextPack stays lightweight and reference-based; large context bodies are stored as artifacts/summaries and loaded through ContextAssembler. +5. Domain packages depend on `packages/contracts`; they must not import each other's private types. + +Core identity aliases: + +```ts +type ISOTimeString = string +type UUID = string +type ProjectID = string +type SessionID = string +type TaskID = string +type AgentID = string +type ToolRunID = string +type CommandRunID = string +type ArtifactID = string +type MessageID = string +``` + +Core event source: + +```ts +interface EventSource { + kind: "main" | "architecture_designer" | "scheduler" | "agent" | "tool" | "system" + id?: string + agent_type?: "executor" | "reviewer" | "debugger" | "compactor" | "experience_miner" +} +``` + +Control messages: + +```ts +type ControlMessage = + | { + type: "agent.start" + version: 1 + task_spec: TaskSpec + context_pack: ContextPack + runtime: AgentRuntimeContext + } + | { type: "agent.cancel"; reason: string } + | { type: "agent.pause"; reason: string } + | { type: "agent.resume" } + | { type: "agent.extend_timeout"; extra_ms: number; reason: string } + +interface AgentRuntimeContext { + session_id: SessionID + project_id: ProjectID + agent_id: AgentID + worktree_path?: string + permission_template: "main_direct" | "executor" | "reviewer" | "debugger" | "system" +} +``` + +ContextPack: + +```ts +interface ContextPack { + refs: { + plan_ref?: string + arc_ref?: string + task_refs?: string[] + artifact_refs?: string[] + rule_refs?: string[] + } + assembled_context_ref?: string + notes?: string[] +} +``` + +Common result helpers: + +```ts +interface VerificationResult { + name: string + status: "passed" | "failed" | "skipped" | "unknown" + evidence_refs?: string[] + notes?: string +} + +interface Risk { + severity: "low" | "medium" | "high" + summary: string +} + +interface FollowUpTask { + title: string + description: string + type?: "execute" | "review" | "debug" | "docs" +} +``` + +Provider capability matrix, model assignment, adapter conversion, fallback policy, and doctor checks are defined in `AirPlan/docs/architecture/provider-capability-matrix-v1.md`. + +Canonical error kinds, severity, retryability, failure signatures, user-facing formatting, and Scheduler routing are defined in `AirPlan/docs/architecture/error-taxonomy-v1.md`. + +`TaskSpec`, `WorkerResult`, `RuntimeEvent`, `ToolDefinition`, `ArtifactRef`, and `EvidenceRef` are defined by earlier sections of this baseline and must be exported from `packages/contracts`. + +## 15. Artifact Layout + +Artifacts live under: + +```text +/.air/local/sessions//artifacts/ +``` + +Canonical URI format, artifact ID format, filename conventions, directory mapping, compression, metadata, write protocol, and evidence linking are defined in `AirPlan/docs/architecture/artifact-naming-v1.md`. + +## 15. Context and Compaction + +ContextAssembler outputs Anthropic canonical messages. Provider conversion happens only at the LLM adapter boundary. + +Canonical prompt/context layer order, agent-specific context profiles, conflict handling, and prompt asset locations are defined in `AirPlan/docs/architecture/prompt-layering-v1.md`. + +ContextAssembler records omissions and publishes `context.compaction.requested` when compaction is needed; it does not compact itself. + +Compaction rules use Markdown + YAML frontmatter. + +Rule locations: + +```text +built-in default +~/.air/compaction-rules.md +/.air/shared/compaction-rules.md +``` + +Compaction uses copy-on-write: + +```text +snapshot messages 1-N + → async Compactor subagent + → new messages keep appending + → compaction marker inserted when done + → original messages preserved for explicit backtracking +``` + +## 16. Memory, Skills, and Debug Knowledge + +Project Rules: + +```text +/.air/shared/rules/project-rules.md +``` + +Skills: + +```text +~/.air/skills//SKILL.md +``` + +ExperienceMiner triggers: + +- DebugRecord produced +- session end +- N turns/tool calls interval +- existing skill/rule discovered outdated during execution + +Non-debug experiences promote after repeated occurrence and user confirmation. Debug experience confidence comes from evidence and verification, not numeric scoring. + +Debug Knowledge is local-first. Sharing/upload is a separate explicit flow and must be redacted/previewed. + +## 17. Provider and Model Layer + +- Native providers: Anthropic and OpenAI +- Compatibility: OpenRouter, ollama, custom Anthropic/OpenAI-compatible endpoints +- Internal canonical message format: Anthropic content blocks +- Cross-provider conversion happens at the adapter boundary +- Same-provider model switching has no format conversion cost +- Canonical provider/model capability contract is defined in `AirPlan/docs/architecture/provider-capability-matrix-v1.md` + +## 18. TUI and HUD + +TUI uses OpenTUI/Solid. + +Reuse from OpenCode: + +- theme system +- dialog/modal/toast patterns +- keymap wrapper +- layout style +- spinner/border/error components +- markdown/code/diff rendering patterns + +Do not reuse OpenCode SDK/sync/session business layer. + +HUD/TUI consumes ProjectionStore only. + +```text +DB persistent state + EventBus live events + → ProjectionStore + → TUI/HUD +``` + +HUD never directly queries SQLite. + +## 19. UI Design Asset Capability + +AirCoding supports optional `ui-design-assets` capability. + +MVP supports: + +- ASCII/wireframe mockups +- design specs +- SVG icons +- screenshot design analysis +- prompts for external image generators + +Post-MVP supports bitmap image generation/editing via providers. + +Generated UI/design assets are artifacts first and must be shown to the user before being written into project files. + +## 20. C++ Toolchain V1.0.0 Alpha + +`toolchain-cpp` provides: + +- BuildTool: CMake built-in, Ninja first then Make fallback +- DiagnosticParser: deterministic compiler/linker output extraction and semantic signatures (LLM-based interpretation belongs to runtime Debugger/Reviewer, not toolchain) +- TestRunner: CTest + GoogleTest first +- StaticAnalysis: cppcheck built-in, clang-tidy later +- CodeIntelligence: clangd CLI mode first +- `compile_commands.json`: generated on demand, not persisted as cache + +Build-system conflicts are shown to the user. + +BuildTool attempts built-in repair first; unresolved failures route to Debugger. + +## 21. Project Initialization + +Scanner collects filesystem metadata only: + +- full directory tree +- file extension statistics +- special files +- git summary + +No directory exclusions and no depth limit. + +LLM proposes ProjectProfile; user confirms/corrects. + +Project schema lives at: + +```text +/.air/shared/project.json +``` + +Old schema detection triggers migration plan and user confirmation. + +## 22. Migration + +- Opening a project detects `.air` schema versions. +- Old schema shows a migration plan. +- User confirmation is always required, even in high-permission mode. +- `.air` is backed up first. +- Failure rolls back. + +Migration backups should be stored under project-local backup state, e.g.: + +```text +/.air/local/backups/migrations// +``` + +## 23. Logging and Doctor Bundles + +`air.log` is user-readable and contains startup failures, exceptions, and environment configuration issues. + +`air.developer.log` is full debug/performance log encrypted with the development team's public key. + +Doctor bundles may include full diagnostics and are not automatically redacted. They are never automatically uploaded; user must explicitly export/send them. + +Doctor bundles and Debug Knowledge sharing are separate channels: + +- doctor bundle: development-team diagnostic channel +- Debug Knowledge: shareable knowledge channel that requires redaction, preview, and explicit authorization + +## 24. Testing + +- Unit tests: `bun test`, CI, deterministic, no LLM +- Integration tests: CI, recorded LLM fixture replay +- E2E tests: release gate, real LLM, must pass before release +- Platform support levels and release validation matrix are defined in `AirPlan/docs/architecture/cross-platform-matrix-v1.md` + +## 25. Distribution + +Canonical platform support levels, distribution targets, and release gates are defined in `AirPlan/docs/architecture/cross-platform-matrix-v1.md`. + +Early distribution uses binary tarball: + +```text +bin/air +resources/ +LICENSE +``` + +Resources include templates, prompts, themes, HUD presets, Python scripts, and toolchain resources. + +No public npm/brew/apt/winget channel until stable. + +## 26. V1.0.0 Alpha Prerequisite Baselines + +This baseline is sufficient for formal architecture design and V1.0.0 Alpha implementation planning. The following prerequisite baselines are frozen for V1: + +1. Interface contracts: `AirPlan/docs/architecture/interface-contracts-v1.md`. +2. SQLite schema: `AirPlan/docs/architecture/db-schema-v1.md`. +3. Event payload registry: `AirPlan/docs/architecture/event-registry-v1.md`. +4. Tool registry: `AirPlan/docs/architecture/tool-registry-v1.md`. +5. Scheduler state machine: `AirPlan/docs/architecture/scheduler-state-machine-v1.md`. +6. Prompt layering model: `AirPlan/docs/architecture/prompt-layering-v1.md`. +7. Provider capability matrix: `AirPlan/docs/architecture/provider-capability-matrix-v1.md`. +8. Error taxonomy: `AirPlan/docs/architecture/error-taxonomy-v1.md`. +9. Artifact naming/layout: `AirPlan/docs/architecture/artifact-naming-v1.md`. +10. Scope escalation model: `AirPlan/docs/architecture/scope-escalation-v1.md`. +11. Security model: `AirPlan/docs/architecture/security-model-v1.md`. +12. Capability trust model: `AirPlan/docs/architecture/capability-trust-v1.md`. +13. Cross-platform matrix: `AirPlan/docs/architecture/cross-platform-matrix-v1.md`. +14. Runtime semantics: `AirPlan/docs/architecture/runtime-semantics-v1.md`. + +V1.0.0 Alpha scope includes a complete C++ development workflow and local/built-in plugin capability foundation. diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/README.md b/AirPlan/docs/architecture/branch-deepcode-cli/README.md new file mode 100644 index 0000000..9d2b41e --- /dev/null +++ b/AirPlan/docs/architecture/branch-deepcode-cli/README.md @@ -0,0 +1,36 @@ +# DeepCode CLI Branch + +Date: 2026-05-28 +Status: AirCoding mainline branch, pre-design research phase + +DeepCode CLI is a mainline AirCoding branch (not a downstream simplification like VibeBox). It explores integrating DeepSeek's model architecture innovations and research capabilities into the AirCoding agent runtime. + +## Reference Documents + +- [DeepSeek Research Survey](deepseek-research-survey.md) — Complete inventory of DeepSeek papers, models, architectures, and technical innovations (36 repos, ~395K stars) + +## Key DeepSeek Innovations Relevant to DeepCode CLI + +1. **Multi-head Latent Attention (MLA)** — 93% KV cache reduction for long code contexts +2. **DeepSeekMoE** — Fine-grained experts + shared experts, 37B activated from 671B total +3. **GRPO** — RL without critic model, applicable to code/debug agent training +4. **DeepSeek Sparse Attention** — Efficient long-context processing +5. **DeepSeek-Coder/V2** — Fill-in-Middle, SWE-bench, Codeforces competitive +6. **DeepSeek-R1** — Emergent chain-of-thought reasoning via pure RL +7. **DeepSeek-Prover-V2** — Formal Lean 4 theorem proving +8. **DeepSeek-Math-V2** — Self-verifiable reasoning, IMO 2025 gold +9. **Engram** — Conditional memory sparsity as new axis beyond MoE +10. **DeepSeek-OCR/OCR-2** — Visual understanding for GUI evidence +11. **3FS/FlashMLA/DeepGEMM/DeepEP/DualPipe** — Full inference infrastructure stack + +## Open Design Questions + +1. How does DeepCode CLI relate to AirCoding mainline — does it add DeepSeek as a provider, or fork architecture? +2. Which DeepSeek innovations should DeepCode CLI adopt at the runtime level vs. treat as provider capabilities? +3. Does DeepCode CLI target DeepSeek models as primary, or remain provider-agnostic with DeepSeek optimizations? +4. Should MLA/MoE-aware context assembly be part of the runtime, or handled by provider adapter? +5. How should formal proving (Prover-V2) integrate with the existing review/debug workflow? +6. Should self-verifiable reasoning (Math-V2 style) influence the verification architecture? +7. Does DeepCode CLI need its own GRPO-trained code agent, or reuse general DeepSeek models? +8. How does the Engram conditional memory concept map to AirCoding's memory/skills system? +9. Should infrastructure tools (3FS, smallpond) be optional capabilities for large-codebase workflows? diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/deepseek-paper-analysis.md b/AirPlan/docs/architecture/branch-deepcode-cli/deepseek-paper-analysis.md new file mode 100644 index 0000000..008b360 --- /dev/null +++ b/AirPlan/docs/architecture/branch-deepcode-cli/deepseek-paper-analysis.md @@ -0,0 +1,1270 @@ +# DeepSeek 论文特性分析:基于模型架构的 Agent 优化指南 + +日期: 2026-05-28 +目标: 针对 DeepCode CLI Agent 的模型特性优化 +参考文献: DeepSeek arXiv 论文 + 官方技术报告 + GitHub 仓库 + +## 目录 + +1. [Multi-Head Latent Attention (MLA) — 2405.04434](#1-multi-head-latent-attention-mla--240504434) +2. [DeepSeekMoE — 2401.06066](#2-deepseekmoe--240106066) +3. [GRPO — 2402.03300 / 2501.12948](#3-grpo--240203300--250112948) +4. [DeepSeek-V3: Auxiliary-Loss-Free Load Balance + MTP — 2412.19437](#4-deepseek-v3-auxiliary-loss-free-load-balance--mtp--241219437) +5. [DSA / DeepSeek-V3.2 — 2512.02556](#5-dsa--deepseek-v32--251202556) +6. [Native Sparse Attention — 2502.11089](#6-native-sparse-attention-nsa--250211089) +7. [CSA + HCA / DeepSeek-V4 — 完整技术报告分析](#7-csa--hca--deepseek-v4--完整技术报告分析) +8. [Engram — 条件记忆](#8-engram--条件记忆) +9. [DeepSeek-R1: 涌现推理行为 — 2501.12948 / Nature 645](#9-deepseek-r1-涌现推理行为--250112948--nature-645) +10. [综合 Agent 优化策略](#10-综合-agent-优化策略) + +--- + +## 1. Multi-Head Latent Attention (MLA) — 2405.04434 + +### 论文核心 + +**DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model** +- arXiv: 2405.04434, May 2024 +- 236B total / 21B activated, 128K context +- KV cache 减少 93.3%, 吞吐量提升 5.76x + +### 核心技术细节 + +#### MLA 低秩 KV 联合压缩 + +标准 MHA 需要为每个 token 缓存 2×n_h×d_h×l 元素。MLA 将所有 KV 压缩为潜在向量: + +``` +c_t^KV = W_DKV · h_t (压缩, d_c << n_h·d_h) +k_t^C = W_UK · c_t^KV (解压 Key) +v_t^C = W_UV · c_t^KV (解压 Value) + +缓存: 只需存 c_t^KV → (d_c + d_h^R)×l 元素 ≈ 4.5×d_h×l +对比 MHA: 2×n_h×d_h×l (n_h 通常 32-128) +``` + +对于 DeepSeek-V2: d_c = 4×d_h, d_h^R = d_h/2 → 等价于 GQA with 2.25 groups, 但性能超过 MHA + +#### 解耦 RoPE 策略 + +RoPE 与低秩 KV 压缩不兼容(位置敏感性破坏矩阵吸收)。 + +解决方案: 额外多 Head 查询 q_t,i^R + 共享 Key k_t^R 承载 RoPE + +``` +q_t,i = [q_t,i^C; q_t,i^R] (内容部分 + RoPE 部分) +k_t,i = [k_t,i^C; k_t^R] (内容部分 + 共享 RoPE Key) + +推理时: W_UK 可吸收到 W^Q, W_UV 可吸收到 W^O + 解耦 Key (k_t^R) 需要额外缓存 d_h^R 元素 +``` + +#### Query 低秩压缩 + +训练时也压缩 Query 以减少激活内存: +``` +c_t^Q = W_DQ · h_t (压缩) +q_t^C = W_UQ · c_t^Q (解压) +``` + +### Agent 优化含义 + +| 特性 | 对 Agent 的影响 | 优化策略 | +|---|---|---| +| KV cache 极低 (4.5×d_h) | 超长上下文可行 | Agent 可维护完整对话历史 + 项目上下文 | +| 解耦 RoPE 位置编码 | 位置信息独立于内容 | **上下文顺序敏感**: 前置的关键信息在 RoPE 部分影响更大 | +| Query 低秩压缩 | 查询表征有信息瓶颈 | **提示词应聚焦**: 避免冗余/模糊指令,让有限 query 维度承载高价值信息 | +| W_UK/W_UV 吸收到 W^Q/W^O | 推理时 KV 解压零开销 | Agent 框架调用时无需特殊处理 KV 缓存 | + +#### 具体优化建议 + +1. **上下文分层策略** (基于 MLA 的 KV 效率): + ``` + 利用 MLA 的 93.3% KV 减少 → Agent 可用 10x 以上上下文长度 + V4-Pro: 1M tokens → 完整项目仓库上下文一次加载 + ``` + +2. **位置敏感输入设计** (基于解耦 RoPE): + ``` + 前 128 tokens (sliding window): 最关键的指令和约束 + 中间范围 (CSA 4x 压缩): 相关文件 / 代码段 + 远距离 (HCA 128x 压缩): 仓库全局信息 + ``` + +3. **提示词聚焦原则** (基于 Query 压缩): + ``` + ❌ 模糊: "帮我看看这个代码有什么问题" + ✅ 精准: "分析 src/core/agent.rs:42-78 中的错误处理逻辑,特别是 Result 的传播路径" + ``` + +--- + +## 2. DeepSeekMoE — 2401.06066 + +### 论文核心 + +**DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models** +- arXiv: 2401.06066, Jan 2024 +- 目标: 更精细的专家专业化 + +### 核心技术细节 + +#### 细粒度专家分割 (Fine-Grained Expert Segmentation) + +将标准 FFN 专家分割为 m 个更小的专家: +``` +标准做法: 16 个专家, 选 top-2 → C(16,2) = 120 种组合 +DeepSeekMoE: 64 个细粒度专家, 选 top-8 → C(64,8) = 4.4×10^9 种组合 +``` + +组合爆炸 → 更灵活、更精准的知识获取。 + +#### 共享专家隔离 (Shared Expert Isolation) + +隔离 K_s 个始终激活的共享专家,捕获通用知识: +``` +专家类型: + 1. 共享专家 (Shared): 始终激活, 捕获通用知识 → 减少路由专家冗余 + 2. 路由专家 (Routed): 每 token 选 top-K → 高度专业化 + +V2 (236B): 2 共享 + 160 路由, 选 6 路由专家 +V3 (671B): 1 共享 + 256 路由, 选 8 路由专家 +V4-Pro (1.6T): 1 共享 + 384 路由, 选 6 路由专家 +``` + +#### 设备限制路由 (Device-Limited Routing) + +每个 token 的目标专家限制在最多 M 个设备上 (M≥3 时性能接近无限制)。 + +#### 三级负载均衡损失 + +| 损失类型 | 目标 | 公式 | +|---|---|---| +| Expert-Level (L_ExpBal) | 防止路由崩溃 | α₁∑f_i·P_i | +| Device-Level (L_DevBal) | 跨设备计算均衡 | α₂∑f'_i·P'_i | +| Comm-Bal (L_CommBal) | 通信开销均衡 | 控制跨设备通信 | + +### Agent 优化含义 + +| 特性 | 对 Agent 的影响 | 优化策略 | +|---|---|---| +| 细粒度专家 (384个) | 每 token 仅激活 6 个 | **任务类型决定激活路径** | +| 共享专家 (始终激活) | 通用知识无损失 | 系统提示词/Agent 规则等通用知识被共享专家处理 | +| 路由专家 (top-6) | 特定任务路由到特定专家 | **提示词应明确任务类型** 以帮助路由 | +| 设备限制路由 | 同一设备上的专家协同 | 相似任务连续调用可能复用同一设备专家集合 | + +#### 具体优化建议 + +1. **任务路由优化** (基于 MoE 路由机制): + ``` + 不同任务类型触发不同专家组合: + - 代码生成 → 路由到代码专家 + - 架构分析 → 路由到推理/规划专家 + - 错误诊断 → 路由到 debug/分析专家 + + 隐含: prompt 开头的 token 影响路由决策最大 + → 开头就明确任务类型: "Generate Python code..." / "Analyze the architecture..." + ``` + +2. **共享专家利用**: + ``` + 共享专家处理通用知识 → 以下信息始终被共享专家覆盖: + - Agent 身份规则 ("You are an expert software engineer") + - 输出格式约束 + - 通用编码规范 + ``` + +3. **V4-Pro 的 384 专家架构优化**: + ``` + V4-Pro: 1共享 + 384路由, 选6 + 激活率: 6/384 = 1.56% → 极端稀疏 + + → Agent 的每个请求只激活极少数专家 + → 高度相似的任务反复调用 → 相同专家组合 → 一致的输出风格 + → 多样性任务 → 不同专家组合 → 需要更多 "热身" token 稳定路由 + ``` + +--- + +## 3. GRPO — 2402.03300 / 2501.12948 + +### 论文核心 + +**DeepSeekMath** (2402.03300): GRPO 首次提出 +**DeepSeek-R1** (2501.12948 / Nature 645:633-638): GRPO 扩展到通用推理 + +### 与 PPO 的核心差异 + +``` +PPO: Policy Model + Critic Model (Value Function) + Reward Model +GRPO: Policy Model + Group Samples + Reward Model (无 Critic) +``` + +GRPO 从一组响应中计算 advantage: +``` +对 prompt q, 采样一组响应 {o₁, o₂, ..., o_G} +计算每个响应的奖励 {r₁, r₂, ..., r_G} +advantage_i = (r_i - mean(r)) / std(r) ← 以组均值为基线 +``` + +优势: +- 不需要单独的 Critic/Value 模型 → 节省 ~50% 训练内存 +- 训练更稳定 (组内归一化) +- 适用于只有最终答案可验证的场景 (数学、代码) + +### R1 训练流程 + +``` +Stage 1: R1-Zero — 纯 RL, 无 SFT 数据 + → 涌现 CoT、自验证、反思行为 + +Stage 2: R1 — Cold-start SFT + RL + → 收集少量 "冷启动" CoT 数据做 SFT + → 然后 RL 训练 + → 解决 R1-Zero 的可读性和语言混杂问题 + +Stage 3: Distillation — 用小模型模仿 R1 推理模式 + → R1-Distill-Qwen-1.5B/7B/14B/32B + → R1-Distill-Llama-8B/70B +``` + +### 涌现行为分析 (来自 Nature 论文) + +纯 RL 训练 (R1-Zero) 产生以下涌现能力: + +| 涌现行为 | 描述 | Agent 意义 | +|---|---|---| +| Chain-of-Thought | 自动分解复杂问题为步骤 | Agent 自然规划多步操作 | +| Self-Verification | 模型自动检查自己的输出 | Agent 可自我审查代码 | +| Reflection | 回顾和修正推理路径 | Agent 可回溯修复错误 | +| Dynamic Adaptation | 更难问题分配更多思考时间 | Agent 自动调节推理深度 | +| "Aha" Moment | 模型突然意识到错误并修正 | 零样本错误恢复能力 | + +### Agent 优化含义 + +1. **R1 无需 explicit CoT 提示**: + ``` + ❌ "Let's think step by step" (对 R1 多余) + ✅ 直接给任务描述 + 约束 + 输出格式 + ``` + +2. **R1 对 prompt 精确度极度敏感**: + ``` + 模糊 prompt → 长且发散的 reasoning (浪费 token) + 精确 prompt → 聚焦推理, 高效输出 + ``` + +3. **Group-based 训练思想** 可用于 Agent 调优: + ``` + 对 Agent 的每个任务, 采样多个轨迹 + 用验证器 (test pass / build success) 打分 + 用 GRPO 方式优化 Agent policy + ``` + +--- + +## 4. DeepSeek-V3: Auxiliary-Loss-Free Load Balance + MTP — 2412.19437 + +### 论文核心 + +**DeepSeek-V3 Technical Report** +- arXiv: 2412.19437, Dec 2024 +- 671B total / 37B activated +- 训练仅 2.788M H800 GPU hours (~$5.5M) +- 无不可恢复 loss spike + +### 关键技术 + +#### Auxiliary-Loss-Free Load Balancing + +之前的 MoE 使用辅助损失 (expert balance loss) 来防止路由崩溃,但这会损害模型性能。V3 引入**动态偏置**: + +``` +对每个 expert i, 维护偏置 b_i +在训练中动态调整: + - 若 expert i 负载过高 → b_i -= γ (偏置降低, 减少该 expert 被选概率) + - 若 expert i 负载过低 → b_i += γ (偏置升高, 增加概率) + +路由决策: gating_score + b_i +辅助损失: 不使用! (省去 α₁∑f_i·P_i 项) +``` + +#### Multi-Token Prediction (MTP) + +传统: 预测下一个 token → V3: 同时预测 D 个后续 token + +``` +传统: P(t_{i+1} | t_1...t_i) +MTP: P(t_{i+1} | t_1...t_i) × P(t_{i+2} | t_1...t_i, t_{i+1}) × ... + +好处: + - 更长的训练信号 → 更强的规划能力 + - 对代码生成特别有益 (语句/函数级规划) + - 推理时可选择使用或忽略 MTP 头 +``` + +### Agent 优化含义 + +1. **MTP 训练 → 规划能力**: + ``` + V3 的 MTP 训练使模型内置规划能力 + → Agent 架构中不需要显式 Planning Module + → 只需给高层次的指令, 模型自动规划步骤 + ``` + +2. **无辅助损失 → 更自然的路由**: + ``` + 路由纯粹基于 token-expert 亲和度 + → 代码 token 自然路由到代码领域的 expert + → 格式 token 路由到格式 expert + ⇒ prompt 应使用领域相关术语来激活对应 expert + ``` + +3. **训练稳定性** → **生产可靠性**: + ``` + 全程无 rollback → 模型行为高度可预测、稳定 + → 适合构建 Agent 生产系统 + ``` + +--- + +## 5. DSA / DeepSeek-V3.2 — 2512.02556 + +### 论文核心 + +**DeepSeek-V3.2: Pushing the Frontier of Open Large Language Models** +- arXiv: 2512.02556, Dec 2025 +- 三大创新: DSA + Scalable RL + Agent Task Synthesis Pipeline + +### DSA 架构细节 + +#### Lightning Indexer + +一个小型、多头的评分器,决定每个 query 关注哪些 token: + +``` +I_{t,s} = Σⱼ w_{t,j} · ReLU(q^I_{t,j} · k^I_s) + +其中: + - H_I: 索引器 Head 数量 (很小, 如 4-8) + - q^I_{t,j}: query token 的索引查询 + - k^I_s: 前驱 token 的索引键 + - w_{t,j}: 可学习的 head 权重 + - ReLU 激活: 确保正分数, 且利于 FP8 实现 +``` + +索引器计算效率极高: 小 Head 数 + FP8 → 极低开销。 + +#### 细粒度 Token 选择 + +每个 query 只选择 top-k 的 KV 条目做注意力: + +``` +u_t = Attn(h_t, {c_s | I_{t,s} ∈ Top-k(I_{t,:})}) + +其中 Top-k 选择分数最高的 k 个前驱 token +``` + +#### 在 MLA 框架下的 DSA 实现 + +DSA 基于 MLA 的 MQA 模式实现: + +``` +透明图: + 输入 h_t + → 计算 c_t^KV (MLA 压缩) + q_t (query) + → Lightning Indexer 评分 I_{t,s} + → Top-k 选择前驱 KV + → 稀疏注意力计算 + → 输出 u_t +``` + +#### 训练过程: 两阶段 + +| 阶段 | 步骤 | 数据 | 操作 | +|---|---|---|---| +| 1. Dense Warm-up | 1000 步, 16 seq × 128K tokens | 2.1B tokens | 冻结所有参数, 仅训练 Lightning Indexer | +| | 目标: 用 KL 散度对齐 Indexer 输出与 Full Attention 分布 | | | +| 2. Sparse Training | 全体参数优化 | 长上下文数据 | 引入 Top-k 选择, 对齐索引器 | + +### V3.2 的 Scalable RL 框架 + +- 后训练计算量大幅增加 (接近预训练规模的显著比例) +- V3.2-Speciale: 更高计算变体 +- IMO 2025 金牌 + IOI 金牌 + +### Agentic Task Synthesis Pipeline + +自动化生成 Tool-use 场景的训练数据: + +``` +合成管道: + 1. 定义工具集 (代码执行、搜索、文件操作) + 2. 自动生成需要工具使用的任务 + 3. 用验证器 (test pass, search result) 作为奖励 + 4. RL 训练 Agent 行为 + +结果: 在复杂交互环境中的泛化能力和指令遵循显著提升 +``` + +### Agent 优化含义 + +| DSA 特性 | 对 Agent 影响 | 优化策略 | +|---|---|---| +| Lightning Indexer 选 top-k | 模型只关注 "最重要" 的前驱 tokens | **结构化上下文**: 关键信息放在易于被索引器选中的位置 | +| Top-k 选择 | 短距离和长距离 token 竞争 | 减少上下文中的噪音, 让高价值 token 脱颖而出 | +| ReLU 索引器 | 负相关 → 完全忽略 | 避免与任务目标负相关的内容 | +| Dense Warm-up 对齐 | 索引器分布接近 full attention | 遵循常规 attention 的位置偏好 | +| Agent 合成管道 | V3.2 有原生 Agent 能力 | 直接使用 tool-use 格式, 模型已经过此类训练 | + +#### 具体优化建议 + +1. **上下文质量 > 数量**: + ``` + 基于 DSA 的 Top-k 机制: + 如果上下文包含大量无关信息, 索引器可能选到噪声 + → Agent 应主动清理上下文, 只保留高价值信息 + → 使用 RAG 或检索机制预先筛选相关文档 + ``` + +2. **"关键信息" 定位**: + ``` + 索引器偏好: + - Query token 和 key 有高语义匹配 → 用关键词匹配 + - ReLU 只保留正分数 → 使用正面描述而非否定 + + 示例: + ❌ "Don't use any external library" + ✅ "Use only Python standard library: os, sys, json" + ``` + +3. **Short Context 优势**: + ``` + 短上下文中, 每个 token 被选中概率更高 + → 对简单任务, 尽量缩小上下文 + → 复杂的重构任务才需要完整项目上下文 + ``` + +--- + +## 6. Native Sparse Attention (NSA) — 2502.11089 + +### 论文核心 + +**Native Sparse Attention: Hardware-Aligned and Natively Trainable Sparse Attention** +- arXiv: 2502.11089, Feb 2025 +- 作者: Jingyang Yuan, Huazuo Gao, Damai Dai 等 (DeepSeek) + +### 核心技术 + +#### 动态层次化稀疏策略 + +两层设计: + +1. **Coarse-grained Token Compression** (粗粒度压缩): + - 将 token 块压缩为紧凑表示 + - 捕获全局上下文 + - 减少 attention 范围 + +2. **Fine-grained Token Selection** (细粒度选择): + - 从压缩结果中选择关键 token + - 保持局部精度 + +#### 硬件对齐优化 + +- Arithmetic intensity balanced → 充分利用 GPU 计算能力 +- 支持端到端训练 (非 post-hoc 稀疏化) +- 64K 序列长度下显著加速 Decoding/Forward/Backward + +### 与 DSA 的关系 + +NSA 是 DSA 的前身/理论研究。DSA 是 NSA 的改进版,部署在 V3.2 中。 + +关键区别: +- NSA: 块级压缩 + 选择 +- DSA: 以 Lightning Indexer 做细粒度 token 级别选择 + +--- + +## 7. CSA + HCA / DeepSeek-V4 — 完整技​术报告分析 + +### 论文来源 + +**DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence** +- 完整 PDF: 43 页 (4.3MB), 来自 HuggingFace (deepseek-ai/DeepSeek-V4-Pro/blob/main/DeepSeek_V4.pdf) +- 发布日期: 2026-04-23 (预览版本) +- arXiv: 待发布 + +### 模型系列 + +| 模型 | 总参数 | 激活参数 | 层数 | 隐藏维度 | 路由专家 | 激活专家 | 训练 tokens | +|---|---|---|---|---|---|---|---| +| V4-Pro | 1.6T | 49B | 61 | 7168 | 384 | 6 | 33T | +| V4-Flash | 284B | 13B | 43 | 4096 | 256 | 6 | 32T | + +### 架构总览 + +V4 保留 Transformer + MTP (Multi-Token Prediction) 架构,在 V3 基础上有三大升级: + +1. **mHC**: Manifold-Constrained Hyper-Connections 替代标准残差连接 +2. **CSA + HCA**: 混合注意力架构实现极致长上下文效率 +3. **Muon**: 替代 AdamW 作为主要优化器 + +MoE 仍使用 DeepSeekMoE 框架,但有两个改动: +- activation function: Sigmoid(·) → Sqrt(Softplus(·)) +- 前 3 个 MoE 层使用 Hash routing (基于 token ID 的确定性路由) +- 取消路由目标节点数约束 + +### 7.1 Compressed Sparse Attention (CSA) + +#### 核心思想 + +CSA 分两步: 先沿着序列维度压缩 KV, 再对压缩后的 KV 做稀疏注意力。 + +#### KV 压缩 (Token-Level Compressor) + +每个 token 产生两组 KV 条目 (双流压缩, 重叠窗口): + +``` +C^a = H · W^a_KV, C^b = H · W^b_KV (KV 条目, shape: n × c) +Z^a = H · W^a_Z, Z^b = H · W^b_Z (压缩权重, shape: n × c) + +对每 m 个 token 压缩为 1 个条目: + S = Softmaxrow([Z^a + B^a; Z^b + B^b]) (2m 元素 softmax) + C_i^Comp = Σ S^a_j ⊙ C^a_j + Σ S^b_j ⊙ C^b_j + +V4-Pro 压缩率 m = 4, V4-Flash 压缩率 m = 4 +``` + +关键: C^a 和 C^b 的索引窗口有重叠 (overlap), 因此实际压缩率为 1/m。 + +#### Lightning Indexer (稀疏选择) + +一个小型多头评分器, 决定每个 query 关注哪些压缩 KV 块: + +``` +低秩 query 计算: + c^Q_t = h_t · W^DQ (压缩, R^d → R^dc) + q^I_t = [q^I_{t,1}; ...; q^I_{t,n^I_h}] = c^Q_t · W^IUQ (解压, R^dc → R^{c_I * n^I_h}) + +索引评分: + w^I_t = h_t · W^w (每 head 权重, R^d → R^{n^I_h}) + I_{t,s} = Σ_h w^I_{t,h} · ReLU(q^I_{t,h} · K^IComp_s) (聚合分数, ReLU 确保正分) + +Top-k 选择: + C_t^SprsComp = {C_s^Comp | I_{t,s} ∈ Top-k(I_{t,:})} + +V4-Pro: n^I_h = 64, c_I = 128, top-k = 1024 +V4-Flash: n^I_h = 64, c_I = 128, top-k = 512 +``` + +#### 共享 KV MQA (Multi-Query Attention) + +压缩 KV 条目同时作为 Key 和 Value (MQA 模式): + +``` +query 也采用低秩压缩: + q_t = [q_{t,1}; ...; q_{t,n_h}] = c^Q_t · W^UQ (n_h query heads) + +核心注意力: + o_{t,i} = CoreAttn(query=q_{t,i}, key=C_t^SprsComp, value=C_t^SprsComp) + +V4-Pro: n_h = 128, c = 512, d_c = 1536 +V4-Flash: n_h = 64, c = 512, d_c = 1024 +``` + +#### Grouped Output Projection + +n_h 个 head 的输出先分组再投影, 降低计算量: +``` +n_h → g 组 (V4-Pro: g=16, V4-Flash: g=8) +每组: o^G_{t,i} ∈ R^{c * n_h/g} → 中间输出 o'^G_{t,i} ∈ R^{d_g} (d_g=1024) +最终: 拼接后投影到 d 维 +``` + +#### 滑动窗口补充分支 (Sliding Window Attention) + +每个 query 额外关注最近的 n_win = 128 个未压缩 KV 条目, 保证局部精细度。 + +### 7.2 Heavily Compressed Attention (HCA) + +#### 核心思想 + +比 CSA 更激进的压缩 (m' ≫ m), 不做稀疏选择, 直接对压缩表示做 dense attention。 + +#### KV 压缩 + +``` +C = H · W^KV, Z = H · W^Z (单流压缩, 无重叠) + +每 m' 个 token 压缩为 1 个: + S = Softmaxrow(Z + B) + C_i^Comp = Σ S_j ⊙ C_j + +V4: m' = 128 +``` + +HCA 提供极紧凑的全局上下文表示。 + +### 7.3 混合注意力的协同工作 + +``` +整体注意力流程 (每层): + 1. SWA (128 tokens) — 精确局部上下文 + 2. CSA (4x 压缩, top-1024) — 选择性中程信息 + 3. HCA (128x 压缩) — 全局摘要感知 + +CSA 和 HCA 在层间交错使用: +- V4-Pro: 前 2 层用 HCA, 后续层 CSA/HCA 交错 +- V4-Flash: 前 2 层用 SWA, 后续层 CSA/HCA 交错 +``` + +#### 效率对比 (1M 上下文) + +| 指标 | V3.2 (GQA8) | V4-Pro | V4-Flash | 减少 | +|---|---|---|---|---| +| 单 token 推理 FLOPs | 100% | 27% | 10% | 73-90% | +| KV Cache | 100% | 10% | 7% | 90-93% | +| vs BF16 GQA8 baseline | 100% | ~2% | ~2% | 98% | + +#### KV 混合精度存储 + +``` +RoPE 维度: BF16 (64 维) +其他维度: FP8 +→ KV cache 较纯 BF16 减少近一半 +闪电索引器: 全部 FP4 精度 +路由专家权重: FP4 (MXFP4) +``` + +### 7.4 Manifold-Constrained Hyper-Connections (mHC) + +#### 标准 Hyper-Connections (HC) + +将残差流宽度扩展 n_hc 倍: +``` +维度: R^d → R^{n_hc × d} +更新: X_{l+1} = B_l · X_l + C_l · F_l(A_l · X_l) + 其中 A_l ∈ R^{1×n_hc}, B_l ∈ R^{n_hc×n_hc}, C_l ∈ R^{n_hc×1} + 层输入: A_l · X_l ∈ R^d (实际隐藏维度不变) +``` + +#### mHC 的核心创新 + +将残差映射矩阵 B_l 约束到**双随机矩阵流形** (Birkhoff polytope): + +``` +B_l ∈ M = {M ∈ R^{n×n} | M·1_n = 1_n, 1^T_n·M = 1^T_n, M ≥ 0} + +约束效果: + - ∥B_l∥₂ ≤ 1 (谱范数有界) → 非扩张变换 → 数值稳定 + - M 对乘法封闭 → 深层堆叠保持稳定性 + - A_l, C_l 通过 Sigmoid 约束为非负有界 +``` + +#### Sinkhorn-Knopp 投影 + +使用 Sinkhorn-Knopp 算法将 B̃_l 投影到双随机流形 (20 次迭代): +``` +M^(0) = exp(B̃_l) (指数确保正性) +M^(t) = T_r(T_c(M^(t-1))) (交替行列归一化, 20 次) +``` + +#### 动态参数化 + +参数由输入相关 (动态) 和输入无关 (静态) 两部分组成: +``` +Ã_l = α^pre · (X̂_l · W^pre) + S^pre (X̂_l = RMSNorm(vec(X_l))) +B̃_l = α^res · Mat(X̂_l · W^res) + S^res +C̃_l = α^post · (X̂_l · W^post)^T + S^post +``` + +V4 配置: n_hc = 4, α 初始化为小值 + +#### 工程优化 + +mHC 增加激活内存和通信量, 通过以下方式补偿: +- 融合 kernel (前向+反向) +- 选择性重计算 (checkpoint 中间 hidden states) +- 调整 DualPipe 1F1B 重叠方案 +- 总开销: 仅占重叠 1F1B pipeline 阶段的 6.7% + +### 7.5 Muon Optimizer + +#### 算法 + +``` +对每个权重矩阵 W ∈ R^{n×m}: + 1. G_t = ∇L_t(W_{t-1}) (梯度) + 2. M_t = μ·M_{t-1} + G_t (动量, μ=0.95) + 3. O'_t = HybridNewtonSchulz(μ·M_t + G_t) (Nesterov 技巧 + 正交化) + 4. O_t = O'_t · max(n,m)^{1/2} · γ (RMS 重缩放, γ=0.18) + 5. W_t = W_{t-1}·(1 - ηλ) - η·O_t (权重衰减 + 更新) +``` + +#### Hybrid Newton-Schulz 迭代 + +10 次迭代, 两阶段: +``` +阶段 1 (前 8 步): (a,b,c) = (3.4445, -4.7750, 2.0315) → 快速收敛 +阶段 2 (后 2 步): (a,b,c) = (2.0, -1.5, 0.5) → 精确稳定在奇异值=1 +``` + +每次迭代: M_k = a·M_{k-1} + b·(M_{k-1}·M^T_{k-1})·M_{k-1} + c·(M_{k-1}·M^T_{k-1})^2·M_{k-1} + +#### AdamW 保留部分 + +| 模块 | 优化器 | +|---|---| +| Embedding 层 | AdamW (β₁=0.9, β₂=0.95, ε=1e-20, wd=0.1) | +| Prediction head | AdamW | +| mHC 静态偏置 + 门控因子 | AdamW | +| 所有 RMSNorm 权重 | AdamW | +| 其余所有参数 | Muon | + +#### 工程实现 + +- Newton-Schulz 可在 BF16 下稳定计算 → 通信减半 (BF16 reduce-scatter) +- MoE 梯度: 在 data-parallel 间随机舍入到 BF16, 使用 all-to-all + FP32 本地求和 +- 连续同形状参数自动合并 → 批量 NS 迭代提高硬件利用率 +- 混合 ZeRO 策略: knapsack 算法分配 dense 参数, MoE 参数按 expert 独立优化 + +### 7.6 基础设施 + +#### MegaMoE (融合 EP Kernel) + +单 fused kernel 实现 MoE 的四阶段流水线: +``` +阶段: Dispatch (all-to-all) → Linear-1 (GEMM) → Act (SwiGLU+FP8) → Linear-2 (GEMM) → Combine (all-to-all) + +Expert Wave 调度: 将专家分为 waves, 计算/通信/激活在 wave 间流水 + → 计算隐藏通信: 只要 C/B ≤ 6144 FLOPs/Byte, 通信完全被隐藏 + → V4-Pro: 每个 token-expert 对 6hd FLOPs, 仅 3h bytes 通信 + → 实测: 1.50-1.73× 推理加速, 最高 1.96× (RL rollout/agent serving) +``` + +开源: DeepGEMM + MegaMoE (github.com/deepseek-ai/DeepGEMM/pull/304) + +#### TileLang DSL + +- DSL 开发 fused kernels, 替代数百个 Torch ATen 算子 +- Host Codegen: 将 Python 运行时校验移到生成的 C++ host 代码 + - 每次调用开销: 几十到几百 μs → <1 μs +- Z3 SMT 求解器集成: 布局推导、内存冲突检测、边界分析的正式整数分析 +- IEEE-754 合规 + bitwise reproducibility (与 CUDA NVCC 对齐) + +#### Batch-Invariant & Deterministic Kernels + +**Batch Invariance**: 任意 batch 位置输出 bitwise 一致 +``` +Attention: 双 kernel 策略 + - Kernel 1: 单 SM 计算整个序列 (满 wave 高吞吐) + - Kernel 2: 多 SM 处理尾部 wave (减少 wave-quantization) + - 精心设计确保累加顺序一致 + +GEMM: DeepGEMM 替代 cuBLAS, 放弃 split-k, 用特殊优化补偿性能 +``` + +**Determinism**: 确定性问题来自 backward 的 atomicAdd +``` +Attention backward: 每 SM 独享累加 buffer → 全局确定性求和 +MoE backward: token 顺序预处理 + 多 rank 间 buffer 隔离 +mHC matmul: split-k 分别输出 → 确定性 reduce +``` + +#### Inference KV Cache + +**异构缓存结构**: +``` +State Cache (固定大小, 按请求分配): + - SWA segment: 最近 n_win tokens 的未压缩 KV + - CSA/HCA segment: 等待压缩的尾部 tokens + +Classical Cache (多 block 按请求分配): + - 每个 block 覆盖 lcm(m, m') 个原始 token + - V4: lcm(4, 128) = 128 tokens/block + - k_1 = 128/4 = 32 CSA 压缩条目, k_2 = 128/128 = 1 HCA 压缩条目 +``` + +**On-Disk KV Cache** (共享前缀复用): +``` +CSA/HCA: 完整存储压缩 KV, 从磁盘读取 +SWA: 三种策略: + 1. Full Caching: 存全部 SWA KV → 计算零冗余但写密集 + 2. Periodic Checkpointing: 每 p tokens 存一次 checkpoint → 可调节存储/计算 + 3. Zero Caching: 不存 SWA → 重算最后 n_win·L 个 token +``` + +#### 训练框架 + +**Contextual Parallelism**: 两阶段通信 +``` +Stage 1: rank i 发送末尾 m 个 token 给 rank i+1 (跨边界压缩) +Stage 2: all-gather 收集本地压缩 KV → fused select-and-pad 重组 +``` + +**Tensor-Level Activation Checkpointing**: +- TorchFX tracing 构建计算图 +- 对标注的 tensor 自动识别最小重计算子图 +- 自动去重 (共享存储的 tensor 不重复重算) + +### 7.7 预训练 + +#### 数据 + +| 数据类别 | 说明 | +|---|---| +| Web 数据 | 过滤批量自动生成和模板化内容 | +| 数学/编程 | 核心组件, mid-training 加入 agentic 数据 | +| 多语言 | 更大语料覆盖长尾知识 | +| 长文档 | 优先科学论文和技术报告 | +| 总计 | V4-Flash: 32T, V4-Pro: 33T tokens | + +Tokenizer: DeepSeek-V3 tokenizer (128K 词汇), 加入少量特殊 tokens +策略: token-splitting + FIM (Fill-in-Middle) + sample-level attention masking + +#### 训练超参数 + +| 参数 | V4-Flash | V4-Pro | +|---|---|---| +| 学习率 | 2.7×10^{-4} → 2.7×10^{-5} | 2.0×10^{-4} → 2.0×10^{-5} | +| 最大 batch size | 75.5M tokens | 94.4M tokens | +| LR warmup | 前 2000 步 | 前 2000 步 | +| 序列长度 | 4K → 16K → 64K → 1M | 4K → 16K → 64K → 1M | +| 稀疏注意力引入 | 1T tokens 后用 dense warmup | 更长的 dense warmup | +| MTP loss weight | 0.3 (decay 后 0.1) | 0.3 (decay 后 0.1) | +| 偏置更新速度 | 0.001 | 0.001 | +| 平衡 loss weight | 0.0001 | 0.0001 | + +#### 训练稳定性 + +**Anticipatory Routing**: 防 loss spike +``` +核心: 步骤 t 用 θ_t 计算特征, 但用 θ_{t-Δt} 的路由索引 +实现: 在步骤 t-Δt 提前获取数据, 预计算并缓存路由索引 +额外开销: ~20% (仅 loss spike 时触发) +自动检测: loss spike → 短回滚 → 激活 AR → 稳定后恢复标准训练 +``` + +**SwiGLU Clamping**: 消除异常值 +``` +SwiGLU 线性部分: 裁剪到 [-10, 10] +SwiGLU 门控部分: 上限 10 +``` + +### 7.8 后训练 + +#### 两阶段范式 + +``` +Phase 1: 领域专家独立训练 + 每个 domain (数学/编码/Agent/指令遵循): + 1. SFT (domain-specific 高质量数据) + 2. RL (GRPO + 领域奖励模型) + +Phase 2: On-Policy Distillation (OPD) + 学生模型: 统一模型 + 教师模型: 10+ 领域专家 + 损失: L_OPD(θ) = Σ w_i · D_KL(π_θ ∥ π_{E_i}) (反向 KL) + 全词汇 logit 蒸馏 (克服 token 级 KL 的高方差) +``` + +#### 三种 Reasoning Effort 模式 + +| 模式 | 特性 | 典型用途 | +|---|---|---| +| Non-think | 快速直觉响应 | 日常任务, 低风险 | +| Think High | 有意识逻辑分析 | 复杂问题解决, 中等风险 | +| Think Max | 极限推理 (特殊系统提示) | 探索模型推理能力边界 | + +Think Max 的系统提示注入: +``` +Reasoning Effort: Absolute maximum with no shortcuts permitted. +You MUST be very thorough in your thinking and comprehensively decompose the +problem to resolve the root cause, rigorously stress-testing your logic against all +potential paths, edge cases, and adversarial scenarios. +``` + +#### Generative Reward Model (GRM) + +替代传统标量奖励模型: +``` +actor network 原生作为 GRM +joint optimization: 评估能力 + 生成能力 +只用少量人类标注 → 模型利用内部逻辑泛化到复杂任务 +``` + +#### Quick Instruction + +特殊 token 实现辅助任务, 复用已有 KV cache: +``` +<|action|> → 判断是否需要 web search +<|title|> → 生成对话标题 +<|query|> → 生成搜索查询 +<|authority|> → 分类权威性需求 +<|domain|> → 识别对话领域 +<|extracted_url|>/<|read_url|> → URL 提取和读取判断 +``` + +优势: 无需单独的小模型, 零冗余 prefilling, 并行执行, TTFT 显著降低。 + +#### Interleaved Thinking + +``` +工具调用场景: 完整保留所有推理历史 (跨用户消息边界) + 使模型在长周期 agent 任务中保持连贯累积思考 + +通用对话场景: 丢弃前轮推理内容, 保持简洁 +``` + +#### FP4 Quantization-Aware Training + +对以下组件进行 FP4 QAT: +``` +1. MoE expert weights (FP32 master → FP4 量化 → FP8 计算) + FP4→FP8 去量化无损 (FP8 多 2 个 exponent bits) + Backward: STE (Straight-Through Estimator) 通过量化操作 + +2. Indexer QK path (query-key 激活) + 全部 FP4: 缓存、加载、矩阵乘法 + +3. Index scores: FP32 → BF16 (2× 加速, 99.7% recall) +``` + +#### DSec Sandbox (Agentic AI 基础设施) + +Rust 实现, 三个组件: Apiserver + Edge + Watcher, 基于 3FS 和自定义 RPC + +``` +四种执行基底 (统一 Python SDK libdsec): + - Function Call: 预热容器池, 零冷启动 + - Container: Docker 兼容, EROFS 按需加载 + - microVM: Firecracker, VM 级隔离 + - fullVM: QEMU, 任意客户操作系统 + +关键设计: + - 分层存储: 3FS-backed EROFS layers + overlaybd + - 高密度并发: 页面缓存去重 + 内存回收 + spinlock 缓解 + - 轨迹日志: 全局有序, 支持预emption 恢复和确定性回放 +``` + +### 7.9 评测结果 + +#### Base Model 对比 (selected) + +| Benchmark | V3.2-Base (37B) | V4-Flash-Base (13B) | V4-Pro-Base (49B) | +|---|---|---|---| +| MMLU-Pro (EM) | 65.5 | 68.3 | **73.5** | +| SimpleQA (EM) | 28.3 | 30.1 | **55.2** | +| HumanEval (Pass@1) | 62.8 | 69.5 | **76.8** | +| LongBench-V2 (EM) | 40.2 | 44.7 | **51.5** | +| MATH (EM) | 60.5 | 57.4 | **64.5** | +| BBH (EM) | 87.6 | 86.9 | **87.5** | + +V4-Flash-Base 以 13B 激活超越 37B 激活的 V3.2-Base, 证明架构效率提升。 + +#### V4-Pro-Max 推理模式对比 + +| Benchmark | Opus-4.6-Max | GPT-5.4-xHigh | Gemini-3.1-Pro-High | V4-Pro-Max | +|---|---|---|---|---| +| SimpleQA | 46.2 | 45.3 | **75.6** | 57.9 | +| HLE | 40.0 | 39.8 | **44.4** | 37.7 | +| LiveCodeBench | 88.8 | — | 91.7 | **93.5** | +| Codeforces | — | 3168 | 3052 | **3206** | +| SWE-Verified | 80.8 | — | 80.6 | **80.6** | +| TerminalBench 2.0 | 65.4 | **75.1** | 68.5 | 67.9 | +| MRCR 1M | **92.9** | — | 76.3 | 83.5 | +| CorpusQA 1M | **71.7** | — | 53.8 | 62.0 | + +### Agent 优化含义 + +### Agent 优化含义 + +| V4 特性 | 对 Agent 影响 | 优化策略 | +|---|---|---| +| 三层注意力 (128 + CSA + HCA) | **信息衰减**: HCA 的 128x 压缩 → 只有最粗粒度的信息保留 | 关键信息必须放在 sliding window 或 CSA 范围 | +| Sliding window = 128 tokens | 精确注意力范围极有限 | **最关键的指令必须在 128 tokens 内** | +| CSA top-1024 (4x 压缩) | 项目级上下文可以保留但会压缩 | 文件级别信息放在此区 | +| HCA (128x 压缩) | 高压缩 → 只有主要概念/主题保留 | 只放仓库级元信息 (目录结构、全局约定) | + +#### 三层上下文预算优化 + +``` +┌──────────────────────────────────────────────────────────┐ +│ Sliding Window (128 tokens) — 精确注意力 │ +│ 优先级 1: 当前任务指令 (task, file, line) │ +│ 优先级 2: 输出格式约束 │ +│ 优先级 3: 当前修改位置的代码片段 (3-5行) │ +├──────────────────────────────────────────────────────────┤ +│ CSA Range (4x 压缩, top-1024) — 选择性的精确信息 │ +│ 当前文件上下文 (函数/类定义, 相关代码段) │ +│ 相关文件的函数签名和类型定义 │ +│ 最近工具调用历史 (最后 3-5 步) │ +├──────────────────────────────────────────────────────────┤ +│ HCA Range (128x 压缩) — 粗粒度摘要 │ +│ 项目目录结构 │ +│ 全局约定和配置 │ +│ 整体任务目标 │ +│ 完整 git 历史摘要 │ +└──────────────────────────────────────────────────────────┘ +``` + +#### 关键优化: 将最重要的内容放在最前面 + +由于 sliding window 只有 128 tokens: + +``` +[SYSTEM PROMPT — 始终在窗口内] +You are an expert Rust engineer. Follow the project conventions. + +[USER MESSAGE — 开始 128 tokens 控制的关键区域] +Task: Add error handling to src/db/query.rs:142 +Current code (line 140-145): + let result = db.execute(sql).await; + Ok(result) +Requirement: Return proper error types, log context, and handle network failures. +→ 这些最关键的信息总是被精确关注 + +[稍后的内容 — CSA/HCA 处理] +... +``` + +--- + +## 8. Engram — 条件记忆 + +### 论文核心 + +**Engram: Learning to Specialize with N-gram Lookup** (DeepSeek repo) + +### 核心技术 + +Engram 引入新的稀疏性维度: 条件记忆 (不同于 MoE 的条件计算) + +``` +MoE: 输入 → 路由 → 选择的专家 → 输出 +Engram: 输入 → N-gram 查询 → O(1) 内存查找 → 输出 + +关键: 确定性寻址 (不是可学习的路由) + - 给定 N-gram, 总是访问相同的记忆槽位 + - 可以 offload 到主机内存 (推理时极低开销) +``` + +#### U-shaped Scaling Law + +MoE 和 Engram 之间存在 U 形分配曲线: +``` +最优比例: + 小模型: 更多 MoE, 少量 Engram + 大模型: MoE 和 Engram 的平衡 + 超大模型: 更多 Engram, MoE 专注推理 + +Engram 擅长: 知识记忆、事实召回、词汇知识 +MoE 擅长: 推理、规划、组合泛化 +``` + +### Agent 优化含义 + +1. **知识 vs 推理分离**: + ``` + Engram → 事实知识 (API 签名, 标准库函数, 已知 bug) + MoE → 推理 (分析、规划、调试) + + → Agent 的 prompt 中, 事实性信息适合用结构化格式 + → 推理任务需要更多推理 tokens + ``` + +2. **O(1) 查找速度**: + ``` + Engram 的记忆访问是常数时间 + → 适合 Agent 需要快速查表的场景 + → 如: 已知函数签名、类型定义、错误码 + ``` + +--- + +## 9. DeepSeek-R1: 涌现推理行为 — 2501.12948 / Nature 645 + +### Nature 论文中的关键发现 (2025, vol 645, pp 633-638) + +#### 纯 RL 的 Reasoning 涌现 + +R1-Zero 的训练: +- 无 SFT 阶段 +- 仅用 RL (GRPO) +- 奖励信号仅来自答案正确性 + +训练过程中, 模型**自发**发展出: +1. **Chain-of-Thought**: 在 `` 块中逐步推理 +2. **Self-Verification**: 计算中间步骤后检查结果 +3. **Reflection**: 发现错误时回溯 +4. **"Aha Moment"**: 训练到某点后, 模型突然学会修正自己之前的推理 + +#### 蒸馏结果 + +| 模型 | MATH | 特点 | +|---|---|---| +| R1-Distill-Qwen-1.5B | 28.9% | 超小模型中即有推理 | +| R1-Distill-Qwen-7B | 55.9% | 超越许多大模型 | +| R1-Distill-Qwen-14B | 69.7% | 接近 GPT-4 | +| R1-Distill-Llama-70B | 80.7% | 最强蒸馏版 | +| DeepSeek-R1 (671B) | 90.8% | 完整版 | + +### Agent 优化含义 + +#### R1 的 Think Token 行为 + +``` +对 Agent 的意义: +- R1 的 块包含原始推理过程 +- 这些 tokens 对最终输出质量至关重要 +- 但消耗推理成本 (需计费) + +策略: + 1. 简单任务: 用 V4-Flash (无 thinking) → 快速低成本 + 2. 复杂任务: 用 R1 先推理 → 提取计划 → V4-Pro 执行 + 3. 调试/错误分析: R1 的 self-verification 能力特别有用 +``` + +#### 蒸馏思想用于 Agent + +``` +知识蒸馏不仅适用于模型参数: +- 可以用 R1 为每个复杂任务生成推理轨迹 +- 用这些轨迹训练 V4-Flash 的 agent 行为 +- 结果: Flash 的价格 + R1 级别的推理质量 +``` + +--- + +## 10. 综合 Agent 优化策略 + +### 10.1 模型选择矩阵 (基于架构特性) + +| 任务类型 | 推荐模型 | 理由 (架构特性) | +|---|---|---| +| 简单代码生成 | V4-Flash | 13B 激活, CSA+HCA 高效, $0.14/M | +| 复杂系统重构 | V4-Pro-Max | 49B 激活 + Max reasoning, SWE-bench 80.6% | +| 调试/根因分析 | R1 → V4-Pro | R1 的 self-verification + V4-Pro 的代码能力 | +| 代码审查 | V4-Pro | 384 专家中代码相关专家高度专业化 | +| 架构设计 | V3.2-Speciale | IOI gold 级别的规划能力 | +| 多文件编辑 | V4-Pro (1M ctx) | 三层注意力支持全仓库上下文 | +| 文档生成 | V4-Flash | 共享专家覆盖通用知识 | +| 测试生成 | V4-Pro | MTP 训练的规划能力 | +| 形式验证 | Prover-V2 | Lean 4 专用 | + +### 10.2 提示词结构优化 (基于所有论文分析) + +``` +┌─────────────────────────────────────────────┐ +│ [Sliding Window — 128 tokens, 精确注意] │ +│ 作用: V4 CSA+HCA 的 sliding window │ +│ 内容: 系统指令 + 任务描述 + 约束条件 │ +│ ─────────────────────────────────────────── │ +│ [CSA Range — 4x 压缩, top-1024] │ +│ 作用: DSA Lightning Indexer 选择关键 token │ +│ 内容: 相关代码 + 错误信息 + 历史调用 │ +│ ─────────────────────────────────────────── │ +│ [HCA Range — 128x 压缩] │ +│ 作用: 全局上下文 (压缩为摘要级信息) │ +│ 内容: 项目结构 + 全局约定 + 背景知识 │ +└─────────────────────────────────────────────┘ + +DSA 索引器策略: + 1. 关键信息用 正面关键词 描述 (ReLU 只通过正分数) + 2. 重复关键约束 (增加被索引器选中的概率) + 3. 避免无关信息 (占用 top-k 位置) + +MLA 优化: + 4. 精准而非模糊的指令 (query 压缩限制信息容量) + 5. 利用长上下文优势 (93% KV 减少) + 6. 位置编码: 前置最重要内容 +``` + +### 10.3 上下文管理策略 + +``` +Agent 执行上下文 = 3 级缓存 (对应 V4 的三层注意力): + +L1: Agent Scratchpad (~128 tokens) + - 当前步骤的指令 + - 最近工具调用的结果 + - 输出格式约束 + +L2: Working Context (~4K-32K tokens, CSA 优化) + - 当前文件关键部分 + - 相关文件类型定义 + - 最近 N 个交互 + +L3: Project Context (~128K+ tokens, HCA 压缩) + - 项目目录树 + - 配置文件和约定 + - 全局常量和类型 + - Git 变更摘要 +``` + +### 10.4 多模型协作架构 + +``` +基于不同模型的架构特性: + + ┌─────────────┐ + │ Planner │ ← R1 / V3.2-Speciale + │ (推理规划) │ IOI gold 级别规划能力 + └──────┬──────┘ + │ 计划 + ┌──────▼──────┐ + │ Executor │ ← V4-Pro / V4-Flash + │ (代码生成) │ 49B/13B 激活 + └──────┬──────┘ SWE-bench 80.6% + │ 代码 + ┌──────▼──────┐ + │ Verifier │ ← V4-Pro / Prover-V2 + │ (验证/测试) │ self-verification + └─────────────┘ Lean 4 formal proof +``` + +### 10.5 论文索引 (含关键公式/数据) + +| 论文 | arXiv | 关键贡献 | 关键数据 | +|---|---|---|---| +| DeepSeekMoE | 2401.06066 | 细粒度专家 + 共享专家 | 2B 匹配 GShard 2.9B, 16B 匹配 LLaMA2 7B (40% 计算) | +| DeepSeekMath | 2402.03300 | GRPO 算法 | MATH 51.7% (无工具), GRPO 节省 ~50% 训练内存 | +| DeepSeek-V2 | 2405.04434 | MLA (低秩 KV 压缩) | KV cache -93.3%, 吞吐 +5.76x, d_c=4×d_h | +| DeepSeek-Coder-V2 | 2406.11931 | MoE 代码模型 | 236B MoE, 代码智能 | +| DeepSeek-V3 | 2412.19437 | Aux-loss-free load balance, MTP | 671B/37B, 2.788M H800 hours | +| DeepSeek-R1 | 2501.12948 | 纯 RL 推理, GRPO 扩展 | Nature 645:633-638, MATH 90.8% | +| NSA | 2502.11089 | 硬件对齐的稀疏注意力 | 块级压缩 + 选择, 端到端训练 | +| DeepSeek-V3.2 | 2512.02556 | DSA + Scalable RL + Agent Pipeline | IMO/IOI gold, SWE-bench 67.8 | +| DeepSeek-OCR-2 | 2601.20552 | Visual Causal Flow | 下一代 OCR | +| DeepSeek-V4 | DeepSeek_V4.pdf (HF) | CSA+HCA + mHC + Muon + V4-Flash (284B/13B) | 1.6T/49B, 27% FLOPs, 10% KV cache, 33T tokens | +| Engram | (repo) | N-gram 条件记忆 | O(1) 查找, U-shaped scaling | + +### 10.6 关键数字速查 + +``` +架构参数速查: + V2: 236B total, 21B active, 128K ctx, 2S+160R, top-6 + V3: 671B total, 37B active, 128K ctx, 1S+256R, top-8 + V3.2: 671B total, 37B active, 128K ctx, +DSA + V4-Flash:284B total, 13B active, 1M ctx, 1S+256R, top-6, 43 layers, d=4096, m=4, m'=128, n_h=64, d_c=1024, g=8 + V4-Pro: 1.6T total, 49B active, 1M ctx, 1S+384R, top-6, 61 layers, d=7168, m=4, m'=128, n_h=128, d_c=1536, g=16 + + 注意力机制速查: + MHA: 2×n_h×d_h×l (n_h=128 → 256×d_h×l) + GQA: 2×n_g×d_h×l (n_g=8 → 16×d_h×l) + MLA: (d_c+d_h^R)×l = 4.5×d_h×l (d_c=4×d_h, d_h^R=0.5×d_h) + V4 CSA: m=4 compression + top-k (1024/512) + SWA 128 + FP8/FP4 mixed + V4 HCA: m'=128 compression + SWA 128 + no sparse selection + +训练效率: + V3: 2.788M H800 hours ≈ $5.5M + V4: 未公开 (估计 10x+ 于 V3) + +价格速查 (per 1M tokens): + V4-Pro: $1.74 in / $3.48 out + V4-Flash: $0.14 in / $0.28 out + R1: $0.50 in / $2.18 out + GPT-5.5: ~$0.55 in / ~$2.00 out + Claude 4.6: ~$15 in / ~$75 out +``` diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/deepseek-research-survey.md b/AirPlan/docs/architecture/branch-deepcode-cli/deepseek-research-survey.md new file mode 100644 index 0000000..0699cac --- /dev/null +++ b/AirPlan/docs/architecture/branch-deepcode-cli/deepseek-research-survey.md @@ -0,0 +1,689 @@ +# DeepSeek Research Survey + +Date: 2026-05-28 +Status: Reference survey for DeepCode CLI branch + +Source: GitHub deepseek-ai organization API + README fetches, arXiv references, training data. +Note: Some 2025-2026 details may need further verification against latest arXiv publications. + +## 1. DeepSeek Company Overview + +DeepSeek is a Chinese AI research company backed by High-Flyer quantitative fund. They have been remarkably prolific, publishing 15+ significant open-source papers and model releases across MoE architecture, reasoning, code, math, vision, multimodal, and infrastructure — all with open-source weights and MIT/Apache 2.0 licenses. + +Key architectural innovations: + +- **Multi-head Latent Attention (MLA)**: KV cache compression via low-rank latent representation, ~93% cache reduction +- **DeepSeekMoE**: Fine-grained expert segmentation + shared experts + topology-aware routing +- **GRPO (Group Relative Policy Optimization)**: RL without separate critic model +- **DeepSeek Sparse Attention (DSA)**: Fine-grained sparse attention for long-context efficiency +- **Engram**: Conditional memory via N-gram embeddings as a new sparsity axis complementary to MoE + +## 2. Complete Model/Repository Inventory + +### 2.1 Foundation Language Models + +| Repository | Description | Stars | Key Features | +|---|---|---|---| +| `DeepSeek-LLM` | Base LLM series (7B/67B) | 6,954 | First foundation model, Llama-style architecture | +| `DeepSeek-V2` | MoE with MLA | 5,009 | 236B total/21B activated, MLA, DeepSeekMoE | +| `DeepSeek-V3` | Large MoE | 103,641 | 671B total/37B activated, FP8 training, ~$5.5M cost | +| `DeepSeek-V3.1-Exp` | Experimental model | 1,594 | Benchmark improvements over V3 | +| `DeepSeek-V3.2-Exp` | Experimental sparse attention | 1,593 | DeepSeek Sparse Attention (DSA), long-context optimization | +| `DeepSeek-V3.2-Exp-Dense` | Dense attention variant | 1,593 supplement | Matches V3.1-Terminus benchmarks | +| `DeepSeek-V4-Pro` | Latest flagship MoE | — | 1.6T total/49B activated, CSA+HCA hybrid attention, MIT license, Apr 23 2026 | +| `DeepSeek-R1` | Reasoning model | 92,019 | Pure RL reasoning (GRPO), competes with OpenAI o1 | +| `DeepSeek-R1-Lite` | Lightweight reasoning | — | Lighter R1 variant | +| `DeepSeek-MoE` | MoE research | 1,934 | Fine-grained expert specialization paper | + +### 2.2 Code Models + +| Repository | Description | Stars | Key Features | +|---|---|---|---| +| `DeepSeek-Coder` | Code LLM (1.3B-33B) | 23,509 | Code-focused training, Fill-in-Middle | +| `DeepSeek-Coder-V2` | MoE code model | 6,791 | 236B MoE, breaks closed-source barrier in code intelligence | + +### 2.3 Math and Formal Reasoning + +| Repository | Description | Stars | Key Features | +|---|---|---|---| +| `DeepSeek-Math` | Math reasoning (7B) | 3,298 | GRPO introduced, mathematical reasoning | +| `DeepSeek-Math-V2` | Self-verifiable math reasoning | 1,589 | IMO 2025 gold, Putnam 2024 118/120, verifier-generator loop | +| `DeepSeek-Prover-V1.5` | Formal theorem prover | 574 | Lean 4, RL + MCTS for proof search | +| `DeepSeek-Prover-V2` | Advanced formal prover | 1,267 | Recursive subgoal decomposition, DeepSeek-V3 powered | + +### 2.4 Vision and Multimodal + +| Repository | Description | Stars | Key Features | +|---|---|---|---| +| `DeepSeek-VL` | Vision-Language | 4,116 | Real-world vision-language understanding | +| `DeepSeek-VL2` | MoE Vision-Language | 5,291 | MoE-based multimodal understanding | +| `Janus` | Unified multimodal | 17,733 | Decoupled visual encoding for understanding + generation | +| `DeepSeek-OCR` | OCR/context compression | 23,186 | Context optical compression | +| `DeepSeek-OCR-2` | Visual Causal Flow | 2,889 | arXiv: 2601.20552, next-gen OCR | + +### 2.5 Training/Inference Infrastructure + +| Repository | Description | Stars | Key Features | +|---|---|---|---| +| `DualPipe` | Bidirectional pipeline parallelism | 2,955 | Computation-communication overlap for V3/R1 training | +| `DeepGEMM` | FP8 GEMM kernels | 7,308 | Clean, efficient FP8 with fine-grained scaling | +| `FlashMLA` | Efficient MLA kernels | 12,670 | Optimized Multi-head Latent Attention GPU kernels | +| `DeepEP` | Expert-parallel communication | 9,679 | Efficient expert-parallel communication library | +| `EPLB` | Expert Parallelism Load Balancer | 1,380 | Production MoE load balancing | +| `LPLB` | Linear programming load balancer | 505 | Research-stage LP-based expert load balancing | +| `TileKernels` | Tilelang kernel library | 1,559 | Kernel library written in tilelang | +| `3FS` | Distributed file system | 9,931 | High-performance FS for AI training/inference | +| `smallpond` | Data processing framework | 4,961 | Lightweight, built on DuckDB and 3FS | +| `profile-data` | Overlap analysis | 1,158 | Analyze computation-communication overlap in V3/R1 | +| `open-infra-index` | Infrastructure index | 8,001 | Production-tested AI infrastructure tools | + +### 2.6 Research/Training Innovations + +| Repository | Description | Stars | Key Features | +|---|---|---|---| +| `Engram` | Conditional memory sparsity | 4,427 | N-gram lookup as new sparsity axis beyond MoE | +| `ESFT` | Expert-Specialized Fine-Tuning | 735 | EMNLP 2024, tune only task-relevant MoE experts | + +### 2.7 Agent/Ecosystem + +| Repository | Description | Stars | +|---|---|---| +| `awesome-deepseek-agent` | Agent project curation | 2,582 | +| `awesome-deepseek-integration` | API integration examples | 37,621 | +| `awesome-deepseek-coder` | Code project curation | 788 | + +## 3. Key Papers (Chronological) + +### 2024 + +| Paper | arXiv | Key Contribution | +|---|---|---| +| DeepSeekMoE | 2401.06066 | Fine-grained MoE with shared experts | +| DeepSeek-Coder | 2401.14196 | Code-focused LLM with Fill-in-Middle | +| DeepSeekMath | 2402.03300 | GRPO algorithm, mathematical reasoning | +| DeepSeek-VL | 2403.05525 | Real-world vision-language understanding | +| DeepSeek-V2 | 2405.04434 | Multi-head Latent Attention (MLA) + DeepSeekMoE | +| DeepSeek-Coder-V2 | 2406.11931 | MoE code model breaking closed-source barrier | +| ESFT | 2407.01906 | Expert-Specialized Fine-Tuning for MoE | +| Fire-Flyer AI-HPC | 2408.14158 | Cost-effective software-hardware co-design | +| DeepSeek-Prover-V1.5 | 2408.08152 | RL + MCTS for formal theorem proving | +| Janus | 2410.13848 | Decoupled visual encoding for unified multimodal | +| JanusFlow | 2411.05820 | Autoregression + Rectified Flow for multimodal | +| DeepSeek-VL2 | 2412.10302 | MoE vision-language models | +| DeepSeek-V3 | 2412.19437 | 671B MoE, FP8 training, $5.5M cost | + +### 2025 + +| Paper | arXiv | Key Contribution | +|---|---|---| +| DeepSeek-R1 | 2501.12948 | Pure RL reasoning, GRPO, emergent CoT | +| Native Sparse Attention | 2502.11089 | Hardware-aligned trainable sparse attention | +| DeepSeek-V3.2 | 2512.02556 | DSA + Scalable RL + Agentic Task Synthesis Pipeline | +| DeepSeek-OCR-2 | 2601.20552 | Visual Causal Flow | + +### 2026 + +| Paper | arXiv | Key Contribution | +|---|---|---| +| DeepSeek-Prover-V2 | — | Recursive subgoal decomposition for Lean 4 | +| DeepSeek-Math-V2 | — | Self-verifiable math reasoning, IMO gold | +| DeepSeek-V4 | DeepSeek_V4.pdf (HF) | V4-Pro (1.6T/49B) + V4-Flash (284B/13B), CSA+HCA, mHC, Muon, MIT | + +### Undated / In Repo + +| Paper | Source | Key Contribution | +|---|---|---| +| Engram | Repo | Conditional memory via scalable lookup | +| DualPipe | Repo | Bidirectional pipeline parallelism | + +## 4. Agent Optimization Guide (针对 DeepCode CLI Agent 优化) + +### 4.1 Model Selection by Task + +| Task | Recommended Model | Reasoning | +|---|---|---| +| Code generation (complex) | V4-Pro / V4-Pro-Max | 80.6% SWE-bench, 93.5 LiveCodeBench | +| Code gen (simple/high volume) | V4-Flash | 13B active, $0.14/M in, 74% cheaper than GPT-4o | +| Architecture design / Refactoring | V4-Pro + R1 hybrid | R1 for reasoning plan, V4-Pro for execution | +| Debugging / Root cause analysis | R1 / V4-Pro reasoning mode | Internal CoT, self-verification, reflection | +| Code review | V3.2 / V4-Pro | Strong Codeforces + Aider scores | +| Formal verification | DeepSeek-Prover-V2 | Lean 4 theorem proving | +| Documentation / Explanations | V4-Flash | Cost-effective, fast | +| Long-context analysis (1M tokens) | V4-Pro | CSA+HCA, 10% KV cache of V3.2 | +| Chat / Interactive | V4-Flash | Low latency, fast TTFT | +| Math-heavy reasoning | V3.2-Speciale / R1 | IMO 2025 gold, Putnam 118/120 | + +### 4.2 Prompting Strategies for Coding Agents + +#### V4 Pro / Flash (Chat Models — Non-Thinking) +```text +Effective patterns: +- ✅ Use system prompts with explicit persona and constraints +- ✅ Provide XML/fenced output format instructions +- ✅ Use few-shot examples in user messages +- ⚠️ Temperature: 0.3-0.6 (coding = 0.3, creative = 0.6) +- ✅ Structured outputs via JSON schema in system prompt +- ✅ Function calling / tool use natively supported + +Example system prompt for coding agent: + You are an expert software engineer. Write production-ready, well-typed code. + Follow the project conventions. Use concise explanations. + Output code blocks with language tags. +``` + +#### R1 / Reasoning Models (Thinking Mode) +```text +Critical differences from chat models: +- ❌ System prompts are WEAK — R1 deprioritizes them during thinking +- ✅ Put ALL instructions in the USER prompt +- ✅ Explicit output format MUST come LAST (after reasoning completes) +- ✅ Temperature: 0.5-0.7 (0.6 recommended) +- ✅ Use tags for internal reasoning naturally +- ⚠️ Vague prompts → excessively long thinking (waste tokens) +- ✅ Precise, well-scoped questions → concise, accurate answers +- ✅ For coding: provide exact file path, language, constraints + +Example prompt for R1: + Write a Python function that [specific task]. + Constraints: [list]. + File: [path/to/file.py]. + Output ONLY valid JSON: {"code": "...", "explanation": "..."} +``` + +#### Hybrid Strategy (Recommended for DeepCode CLI) +```text +Step 1: Problem Analysis (R1) + - Use R1 to reason about architecture, debug root cause, plan refactoring + - Let it think freely, capture the plan + +Step 2: Code Generation (V4-Pro / V4-Flash) + - Feed R1's plan as context to V4-Pro with explicit system prompt + - Generate actual code with tool use + +Step 3: Verification (V4-Pro / Prover-V2) + - Code review, test generation, formal verification +``` + +### 4.3 API Configuration for Agent Use + +| Parameter | V4-Pro | V4-Flash | R1 | +|---|---|---|---| +| Model name | `deepseek-v4-pro` | `deepseek-v4-flash` | `deepseek-reasoner` | +| Input price /1M | $1.74 | $0.14 | $0.50 (V3.2 pricing) | +| Output price /1M | $3.48 | $0.28 | $2.18 | +| Context window | 1,000,000 | 1,000,000 | 164K | +| Max output | 384K | 384K | 8K | +| Function calling | ✓ | ✓ | limited | +| Streaming | ✓ | ✓ | ✓ | +| Prompt caching | ✓ | ✓ | — | +| Assistant prefill | ✓ | ✓ | — | +| Vision (PDF/Image) | ✓ | ✓ | — | + +#### Cost Optimization for Agent Loops +```text +V4-Flash for high-volume agentic tasks: + - Triage, classification, simple edits: V4-Flash ($0.14/$0.28) + - Complex reasoning, multi-step: V4-Pro ($1.74/$3.48) + - Planning/pre-analysis: R1 ($0.50/$2.18) + +Prompt caching strategy: + - Long system prompt + repeated context → cached (cache hit ≈ 10% cost) + - Prefix-aware: keep consistent prefix for repetitive agent tasks + - 90% cache hit rate → effective cost ~$0.17/M for V4-Pro + +Typical agent cost estimates: + - V4-Flash per agent step: ~$0.001-0.005 (assuming 2K in/1K out) + - V4-Pro per agent step: ~$0.01-0.05 + - 100-step agentic workflow with V4-Flash: ~$0.10-0.50 +``` + +### 4.4 Context Window Strategy for Agents + +#### V4-Pro 1M Context: Tiered Access +```text +Sliding window (128 tokens): Immediate local context (always dense) +CSA (4x compression, top-1024): Project-level context (selected) +HCA (128x compression, dense): Full repository context (compressed) + +For DeepCode CLI: + - Active file: sliding window (always precise) + - Related files (imports, types): CSA tier (selective) + - Full project map: HCA tier (compressed summary) + - Git history, conventions, README: HCA tier +``` + +#### Context Budget Allocation +```text +System prompt / Agent rules: 4K (stable, cached) +Project conventions / AGENTS.md: 4K (stable, cached) +Current file context: 16K (sliding window) +Related files: 32K (CSA-selected) +Open files / tabs: ~8K +Tool call history: 16K (last N interactions) +Agent scratchpad: 4K +Total: ~84K (well within 1M limit) +``` + +### 4.5 Function Calling / Tool Use + +V4-Pro natively supports function calling and structured outputs. + +For DeepCode CLI tools (read, edit, grep, bash, etc.): +```text +Recommended: native OpenAI-compatible function calling + - Define tools as JSON schema in API call + - V4-Pro routes to appropriate experts for tool selection + - Parallel function calling supported + +Fallback: structured output mode (JSON schema) + - Force model to output valid JSON matching a schema + - Useful for orchestrator pattern + - Combine with assistant prefill for guided output start +``` + +### 4.6 Evaluation Benchmarks Relevant to Coding Agents + +| Benchmark | V4-Pro-Max | V4-Pro-High | V4-Flash-Max | V3.2 | R1 | +|---|---|---|---|---|---|---| +| SWE-bench Verified | **80.6%** | 79.4% | 79.0% | ~50% | — | +| LiveCodeBench | **93.5** | 89.8 | 91.6 | 74.1 | — | +| Codeforces | **3206** | 2919 | 3052 | 2121 | — | +| Aider-Polyglot | **~80** | ~76 | ~68 | 74.5 | — | +| HLE (Pass@1) | 37.7 | 34.5 | 34.8 | — | — | +| GPQA Diamond | 90.1 | 89.1 | 88.1 | 79.9 | 71.5 | +| MMLU-Pro | 87.5 | 87.1 | 86.2 | 85.0 | 84.0 | +| SimpleQA-Verified | **57.9** | 46.2 | 34.1 | — | — | +| Terminal Bench 2.0 | 67.9 | 63.3 | 56.9 | — | — | +| SWE-Pro | 55.4 | 54.4 | 52.6 | — | — | +| MRCR 1M | 83.5 | 83.3 | 78.7 | — | — | +| CorpusQA 1M | 62.0 | 56.5 | 60.5 | — | — | +| BrowseComp | 83.4 | 80.4 | 73.2 | 40.1 | — | +| MCPAtlas Public | 73.6 | 74.2 | 69.0 | — | — | +| Toolathlon (Pass@1) | 51.8 | 49.0 | 47.8 | — | — | + +*V4-Pro matches Claude Opus 4.6 on SWE-bench (80.6 vs 80.8) at 2% of the cost. + +### 4.7 Key Takeaways for Agent Optimization + +1. **V4-Pro is the best coding model as of May 2026** — $3.48/M output is unmatched value +2. **V4-Flash for agentic loops** — $0.14/$0.28 enables cheap multi-step workflows +3. **R1 for planning/reasoning** — but feed its output to V4-Pro for code generation +4. **1M context is real** — with CSA+HCA tiered access, full-repo context is practical +5. **OpenAI-compatible API** — drop-in replacement for existing agent frameworks +6. **MIT license** — no restrictions on commercial use or fine-tuning +7. **No system prompt for R1** — all instructions in user message +8. **Temperature 0.3 for V4 coding, 0.6 for R1 reasoning** + +--- + +## 5. Key Technical Innovations Deep Dive + +### 4.1 Multi-head Latent Attention (MLA) + +Introduced in DeepSeek-V2. Solves KV cache memory bottleneck. + +```text +Standard MHA: cache full K and V matrices per layer per token +MLA: compress KV to low-rank latent vector c_kv, reconstruct K/V on-the-fly + +c_kv = W_DKV · h_t (compress to latent, dimension d_c << n_h · d_h) +k = W_UK · c_kv (upsample K) +v = W_UV · c_kv (upsample V) + +Result: ~93% KV cache reduction, comparable or better performance +``` + +### 4.2 DeepSeekMoE + +Introduced in DeepSeek-MoE, refined in V2/V3. + +```text +Standard MoE: few large experts, top-k routing +DeepSeekMoE: + - Fine-grained segmentation: many smaller experts (e.g., 256) + - Shared experts: always activated, capture common knowledge + - Routed experts: specialized knowledge per token + - Auxiliary-loss-free load balancing (V3) +``` + +### 4.3 GRPO (Group Relative Policy Optimization) + +Introduced in DeepSeek-R1. Eliminates need for separate critic model. + +```text +Standard PPO: policy model + critic/value model +GRPO: + - Sample group of responses per prompt + - Compute rewards for each response + - Group mean as baseline + - Advantages = (reward - group_mean) / group_std + - No separate critic model needed + - Significantly lower memory/computation cost +``` + +Key result: R1-Zero trained with pure RL (no SFT) developed emergent reasoning behaviors — chain-of-thought, self-verification, reflection — and spontaneously learned to allocate more "thinking time" to harder problems. + +### 4.4 DeepSeek Sparse Attention (DSA) + +Introduced in DeepSeek-V3.2-Exp. Fine-grained sparse attention for long-context. + +```text +Dense attention: O(n²) for all token pairs +DSA: fine-grained sparse pattern maintaining output quality + - First fine-grained sparse attention achieving parity with dense + - Substantial long-context training/inference efficiency improvement + - V3.2-Exp matches V3.1-Terminus on public benchmarks +``` + +### 5.5 DeepSeek V4-Pro / V4-Flash (Hybrid CSA + HCA Attention) + +Released April 24, 2026. Full technical report: DeepSeek_V4.pdf (43 pages, 4.3MB, from HuggingFace). + +```text +V4-Pro: + - Total parameters: 1.6T + - Activated per token: 49B + - Layers: 61 transformer layers, hidden dim: 7168 + - MoE: 1 shared expert + 384 routed experts, 6 active per token (Hash routing for first 3 layers) + - Attention: interleaved CSA+HCA (first 2 layers HCA only) + - CSA: m=4 compression, top-k=1024, n_h^I=64 indexer heads, c_I=128, n_h=128 query heads, c=512 head dim, d_c=1536 + - HCA: m'=128 compression + - SWA: n_win=128 sliding window, grouped output: g=16, d_g=1024 + - mHC: n_hc=4 expansion, Sinkhorn-Knopp 20 iterations + - Context: 1,000,000 tokens + - Training: 33T tokens, Muon (μ=0.95, wd=0.1, γ=0.18), AdamW for embed/prediction head/RMSNorm + - LR: 2.0e-4 → 2.0e-5, max batch: 94.4M, 4K→16K→64K→1M sequence ramp + - Precision: FP4 (routed expert weights + indexer QK path) + FP8 (other weights) + - Download size: ~865 GB, License: MIT + - Optimizer: Muon (hybrid Newton-Schulz: 8 fast + 2 stable iterations) + +V4-Flash: + - Total parameters: 284B + - Activated per token: 13B + - Layers: 43 transformer layers, hidden dim: 4096 + - MoE: 1 shared expert + 256 routed experts, 6 active per token (Hash routing for first 3 layers) + - Attention: interleaved CSA+HCA (first 2 layers pure SWA) + - CSA: m=4 compression, top-k=512, n_h^I=64, c_I=128, n_h=64, c=512, d_c=1024 + - HCA: m'=128 compression + - SWA: n_win=128, grouped output: g=8, d_g=1024 + - mHC: n_hc=4 expansion, Sinkhorn-Knopp 20 iterations + - Context: 1,000,000 tokens + - Training: 32T tokens, Muon (μ=0.95, wd=0.1, γ=0.18) + - LR: 2.7e-4 → 2.7e-5, max batch: 75.5M + - Download size: ~160 GB, License: MIT + +Key architectural innovations (paper-grounded): + +1. Compressed Sparse Attention (CSA): + - Dual-stream KV compression (C^a, C^b with overlapping windows), m=4 + - Lightning Indexer: low-rank queries (W^DQ + W^IUQ), ReLU scoring, per-head weights + - Shared KV MQA: compressed entries serve as both K and V + - Grouped Output Projection: g groups reduce n_h·c → d overhead + +2. Heavily Compressed Attention (HCA): + - Single-stream compression, m'=128 (no overlap) + - Dense attention on heavily compressed representation + - No sparse selection — pure global summary + +3. Combined CSA + HCA at 1M context: + - V4-Pro: 27% FLOPs, 10% KV cache of V3.2 + - V4-Flash: 10% FLOPs, 7% KV cache of V3.2 + - vs BF16 GQA8 baseline: ~2% KV cache + - Mixed KV precision: BF16 (RoPE 64 dims) + FP8 (remaining) + +4. Manifold-Constrained Hyper-Connections (mHC): + - Residual mapping B_l constrained to doubly stochastic manifold (Birkhoff polytope) + - Sinkhorn-Knopp projection (20 iters, exp→row norm→col norm) + - Dynamic parameterization: input-dependent + static components + - A_l, C_l bounded via Sigmoid, ∥B_l∥₂ ≤ 1 ensures stability + - Engineering overhead: only 6.7% of 1F1B pipeline stage + +5. Muon Optimizer: + - Hybrid Newton-Schulz: 8 steps (3.4445, -4.7750, 2.0315) + 2 steps (2, -1.5, 0.5) + - Nesterov momentum (μ=0.95), BF16 Newton-Schulz stable + - Mixed ZeRO: knapsack for dense params, per-expert for MoE + - MoE gradients: stochastic rounding to BF16, all-to-all + FP32 local sum + +Infrastructure innovations: + +6. MegaMoE (Fused EP Kernel): + - Wave-based expert scheduling (1.5-1.96× speedup) + - Computation-communication ratio: C/B ≤ 6144 FLOPs/Byte hides communication + - Open-sourced in DeepGEMM + +7. TileLang DSL: + - Host Codegen: Python checks → C++ (<1μs per invocation) + - Z3 SMT solver for formal integer analysis + - IEEE-754 + bitwise reproducibility + +8. Batch-Invariant & Deterministic Kernels: + - Dual-kernel attention (single SM + multi SM for wave-quantization) + - DeepGEMM replaces cuBLAS end-to-end + - Deterministic MoE backward: token order preprocessing + buffer isolation + +9. KV Cache Management: + - Heterogeneous: State Cache (SWA + uncompressed tail) + Classical Cache (CSA/HCA blocks) + - Block size: lcm(4, 128) = 128 original tokens per block + - On-disk storage: Full SWA / Periodic Checkpointing / Zero SWA Caching + +Post-training innovations: + +10. FP4 Quantization-Aware Training: + - MoE expert weights: FP32 master→FP4→FP8 (lossless dequant) + - Indexer QK path: full FP4 + - Index scores: FP32→BF16 (2× speedup, 99.7% recall) + +11. On-Policy Distillation (OPD): + - 10+ teacher models → single student + - Full-vocabulary reverse KL (D_KL(π_θ ∥ π_Ei)) + - Teachers offloaded to distributed storage, ZeRO-like sharding + - Cached last-layer hidden states → on-the-fly logits reconstruction + +12. Quick Instruction: + - Special tokens (<|action|>, <|query|>, <|domain|>, etc.) + - Reuses existing KV cache, zero redundant prefill + - Parallel execution of auxiliary tasks + +13. Interleaved Thinking: + - Tool-calling: full reasoning history preserved across rounds + - General conversation: previous reasoning discarded per turn + +14. DSec Sandbox (Rust): + - 4 substrates: Function Call / Container / microVM (Firecracker) / fullVM (QEMU) + - 3FS-backed layered storage, preemption-safe trajectory logging + - Hundreds of thousands of concurrent instances + +Training stability: + +15. Anticipatory Routing: + - Step t uses θ_t for features, θ_{t-Δt} routing indices + - Auto-detection: loss spike → short rollback → activate → revert + - ~20% overhead when active (negligible overall) + +16. SwiGLU Clamping: + - Linear component: clamp [-10, 10] + - Gate component: upper bound 10 + +V4-Pro-Max benchmarks (selected): + - SimpleQA: 57.9% (vs Gemini 3.1 Pro 75.6%) + - HLE: 37.7% (vs Opus 4.6 40.0%) + - LiveCodeBench: 93.5 (highest, vs GPT-5.4 91.7%) + - Codeforces: 3206 (23rd human, vs GPT-5.4 3168) + - SWE-Verified: 80.6% (vs Opus 4.6 80.8%) + - TerminalBench 2.0: 67.9% (vs GPT-5.4 75.1%) + - MRCR 1M: 83.5 MMR (vs Opus 4.6 92.9%) + - CorpusQA 1M: 62.0% (vs Opus 4.6 71.7%) + - Formal Putnam 2025: 120/120 + +Pricing: + - V4-Pro: $1.74/M in, $3.48/M out + - V4-Flash: $0.14/M in, $0.28/M out + - V4-Pro (Max reasoning): $3.48/M in, $6.96/M out + - vs GPT-5.5: ~$0.55-0.75/M in, ~$2-3/M out (~25-30x cheaper) + - vs Claude Opus 4.6: ~$15/M in, ~$75/M out (~20x cheaper) +``` + +### 5.6 DeepSeek V3.2: DSA + Scalable RL + Agent Pipeline + +arXiv: 2512.02556 (Dec 2, 2025). Not an experimental — full V3.2 release. + +```text +Three key innovations: + +1. DeepSeek Sparse Attention (DSA): + - Lightning indexer: small, multi-head scorer (FP8 efficient) + - Fine-grained token selection: top-k KV retrieval per query + - Implemented under MLA framework + - Dense warm-up (1K steps, 2.1B tokens) trains indexer via KL-divergence + - Full sparse training adapts all params to sparse pattern + - Result: first fine-grained sparse attention matching dense quality + +2. Scalable RL Framework: + - Post-training compute scaled substantially (larger than typical) + - V3.2-Speciale: higher compute variant + - Achieves IMO 2025 gold + IOI gold + - Matches GPT-5 on reasoning, Gemini-3.0-Pro on complex reasoning + +3. Agentic Task Synthesis Pipeline: + - Novel pipeline for generating training data for tool-use scenarios + - Scalable agentic post-training + - Improved generalization and instruction-following in interactive envs + +Benchmarks: + - Codeforces: 2121 (V3.2-Exp), higher in full V3.2 + - LiveCodeBench: 74.1 (Exp) + - Aider-Polyglot: 74.5 (Exp) + - MMLU-Pro: 85.0 + - GPQA-Diamond: 79.9 + - AIME 2025: 89.3 + - SWE-bench Verified: ~50 (via V3.2) + - BrowseComp: 40.1 / BrowseComp-zh: 47.9 +``` + +### 5.7 Engram (Conditional Memory) + +Introduced as a new sparsity axis complementary to MoE. + +```text +MoE: scales capacity via conditional computation (routing) +Engram: scales knowledge via conditional memory (lookup) + +Key idea: N-gram embedding lookup as O(1) knowledge primitive + - Deterministic addressing + - Offloadable to host memory with minimal inference overhead + - Relieves early layers from static pattern reconstruction + - U-shaped scaling law for optimal MoE vs Engram allocation + - Engram-27B improves over MoE baselines on knowledge/reasoning/code/math +``` + +## 6. DeepSeek Model Evolution Timeline + +```text +DeepSeek-LLM (base) + ↓ +DeepSeekMoE (fine-grained experts) + ↓ +DeepSeek-V2 (MLA + DeepSeekMoE, 236B) + ↓ +DeepSeek-Coder / Coder-V2 (code focus) + ↓ +DeepSeek-Math / Math-V2 (GRPO, IMO gold) + ↓ +DeepSeek-V3 (671B MoE, FP8, $5.5M, 128K context) + ↓ +DeepSeek-R1 / R1-Zero (pure RL reasoning, emergent CoT) + ↓ +DeepSeek-VL / VL2 / Janus (multimodal) + ↓ +DeepSeek-Prover-V1.5 / V2 (Lean 4 formal reasoning) + ↓ +DeepSeek-OCR / OCR-2 (visual understanding) + ↓ +DeepSeek-V3.1-Terminus (128K context extension) + ↓ +DeepSeek-V3.2-Exp / V3.2 (DSA sparse attention + agent pipeline) + ↓ +Engram (conditional memory sparsity) + ↓ +DeepSeek-V4-Pro / V4-Flash (CSA+HCA hybrid attention, mHC, Muon, 1M context) +``` + +The V4 series (Apr 2026) represents the current frontier — CSA+HCA attention enabling practical 1M-token context at 27% FLOPs and 10% KV cache of V3.2. + +## 7. Infrastructure Innovation Timeline + +```text +Fire-Flyer AI-HPC (hardware-software co-design) + ↓ +FlashMLA (efficient MLA GPU kernels) + ↓ +DeepGEMM (FP8 GEMM with fine-grained scaling) + ↓ +DeepEP (expert-parallel communication) + ↓ +DualPipe (bidirectional pipeline parallelism) + ↓ +EPLB / LPLB (expert load balancing) + ↓ +3FS (distributed file system for AI) + ↓ +smallpond (data processing on DuckDB + 3FS) + ↓ +TileKernels / TileLang (DSL kernel library with Host Codegen + Z3 SMT) + ↓ +MegaMoE (fused EP kernel with wave scheduling, 1.5-1.96× speedup) + ↓ +DSec Sandbox (Firecracker microVM + 3FS, 100K+ concurrent agent sandboxes) +``` + +## 8. Relevance to DeepCode CLI + +DeepSeek's research is directly relevant to DeepCode CLI architecture: + +### 8.1 Code Intelligence + +- DeepSeek-Coder/Coder-V2: Fill-in-Middle, long-context code understanding +- DeepSeek-V3.2-Exp: Codeforces 2121, LiveCodeBench 74.1, Aider-Polyglot 74.5 +- SWE-bench Verified 67.8, SWE-bench Multilingual 57.9 + +### 8.2 Reasoning for Debugging/Architecture + +- DeepSeek-R1: emergent chain-of-thought, self-verification, reflection +- GRPO: efficient RL without critic model +- Applicable to training code-review/debug agents + +### 8.3 Formal Verification + +- DeepSeek-Prover-V2: Lean 4 theorem proving +- Applicable to formal verification of generated code + +### 8.4 Efficient Inference + +- MLA: 93% KV cache reduction for long code contexts +- DSA: efficient long-context processing +- MoE: 37B activated from 671B total parameters +- Engram: O(1) knowledge lookup + +### 8.5 Multimodal Evidence + +- DeepSeek-OCR/OCR-2: visual understanding for GUI evidence +- Janus: unified multimodal for screenshot/code understanding + +### 8.6 Infrastructure + +- 3FS: distributed file system for large codebase training +- DualPipe: efficient distributed training +- DeepGEMM/FlashMLA: optimized inference kernels + +## 9. Total GitHub Stats Summary + +| Category | Repos | Total Stars | +|---|---|---| +| Foundation Models | 6 | ~209,000 | +| Code Models | 2 | ~30,000 | +| Math/Proving | 4 | ~6,700 | +| Vision/Multimodal | 5 | ~53,000 | +| Infrastructure | 11 | ~50,000 | +| Research | 2 | ~5,200 | +| Ecosystem | 3 | ~41,000 | +| **Total** | **36** | **~395,000** | diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-Coder-V2_2406.11931.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-Coder-V2_2406.11931.pdf new file mode 100644 index 0000000..355057f Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-Coder-V2_2406.11931.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-Coder_2401.14196.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-Coder_2401.14196.pdf new file mode 100644 index 0000000..5359b43 Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-Coder_2401.14196.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-Math-V2.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-Math-V2.pdf new file mode 100644 index 0000000..5062a44 Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-Math-V2.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-OCR-2_2601.20552.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-OCR-2_2601.20552.pdf new file mode 100644 index 0000000..7049836 Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-OCR-2_2601.20552.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-Prover-V1.5_2408.08152.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-Prover-V1.5_2408.08152.pdf new file mode 100644 index 0000000..6ae19ab Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-Prover-V1.5_2408.08152.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-Prover-V2_2504.21801.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-Prover-V2_2504.21801.pdf new file mode 100644 index 0000000..9ec3c2c Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-Prover-V2_2504.21801.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-R1_2501.12948.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-R1_2501.12948.pdf new file mode 100644 index 0000000..e1c0902 --- /dev/null +++ b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-R1_2501.12948.pdf @@ -0,0 +1,70910 @@ +%PDF-1.7 +% +1 0 obj +<< /Metadata 3 0 R /Names 4 0 R /OpenAction 5 0 R /Outlines 6 0 R /PageMode /UseOutlines /Pages 7 0 R /Type /Catalog >> +endobj +2 0 obj +<< /Author (DeepSeek-AI; Daya Guo; Dejian Yang; Haowei Zhang; Junxiao Song; Peiyi Wang; Qihao Zhu; Runxin Xu; Ruoyu Zhang; Shirong Ma; Xiao Bi; Xiaokang Zhang; Xingkai Yu; Yu Wu; Z. F. Wu; Zhibin Gou; Zhihong Shao; Zhuoshu Li; Ziyi Gao; Aixin Liu; Bing Xue; Bingxuan Wang; Bochao Wu; Bei Feng; Chengda Lu; Chenggang Zhao; Chengqi Deng; Chenyu Zhang; Chong Ruan; Damai Dai; Deli Chen; Dongjie Ji; Erhang Li; Fangyun Lin; Fucong Dai; Fuli Luo; Guangbo Hao; Guanting Chen; Guowei Li; H. Zhang; Han Bao; Hanwei Xu; Haocheng Wang; Honghui Ding; Huajian Xin; Huazuo Gao; Hui Qu; Hui Li; Jianzhong Guo; Jiashi Li; Jiawei Wang; Jingchang Chen; Jingyang Yuan; Junjie Qiu; Junlong Li; J. L. Cai; Jiaqi Ni; Jian Liang; Jin Chen; Kai Dong; Kai Hu; Kaige Gao; Kang Guan; Kexin Huang; Kuai Yu; Lean Wang; Lecong Zhang; Liang Zhao; Litong Wang; Liyue Zhang; Lei Xu; Leyi Xia; Mingchuan Zhang; Minghua Zhang; Minghui Tang; Meng Li; Miaojun Wang; Mingming Li; Ning Tian; Panpan Huang; Peng Zhang; Qiancheng Wang; Qinyu Chen; Qiushi Du; Ruiqi Ge; Ruisong Zhang; Ruizhe Pan; Runji Wang; R. J. Chen; R. L. Jin; Ruyi Chen; Shanghao Lu; Shangyan Zhou; Shanhuang Chen; Shengfeng Ye; Shiyu Wang; Shuiping Yu; Shunfeng Zhou; Shuting Pan; S. S. Li; Shuang Zhou; Shaoqing Wu; Shengfeng Ye; Tao Yun; Tian Pei; Tianyu Sun; T. Wang; Wangding Zeng; Wanjia Zhao; Wen Liu; Wenfeng Liang; Wenjun Gao; Wenqin Yu; Wentao Zhang; W. L. Xiao; Wei An; Xiaodong Liu; Xiaohan Wang; Xiaokang Chen; Xiaotao Nie; Xin Cheng; Xin Liu; Xin Xie; Xingchao Liu; Xinyu Yang; Xinyuan Li; Xuecheng Su; Xuheng Lin; X. Q. Li; Xiangyue Jin; Xiaojin Shen; Xiaosha Chen; Xiaowen Sun; Xiaoxiang Wang; Xinnan Song; Xinyi Zhou; Xianzu Wang; Xinxia Shan; Y. K. Li; Y. Q. Wang; Y. X. Wei; Yang Zhang; Yanhong Xu; Yao Li; Yao Zhao; Yaofeng Sun; Yaohui Wang; Yi Yu; Yichao Zhang; Yifan Shi; Yiliang Xiong; Ying He; Yishi Piao; Yisong Wang; Yixuan Tan; Yiyang Ma; Yiyuan Liu; Yongqiang Guo; Yuan Ou; Yuduan Wang; Yue Gong; Yuheng Zou; Yujia He; Yunfan Xiong; Yuxiang Luo; Yuxiang You; Yuxuan Liu; Yuyang Zhou; Y. X. Zhu; Yanhong Xu; Yanping Huang; Yaohui Li; Yi Zheng; Yuchen Zhu; Yunxian Ma; Ying Tang; Yukun Zha; Yuting Yan; Z. Z. Ren; Zehui Ren; Zhangli Sha; Zhe Fu; Zhean Xu; Zhenda Xie; Zhengyan Zhang; Zhewen Hao; Zhicheng Ma; Zhigang Yan; Zhiyu Wu; Zihui Gu; Zijia Zhu; Zijun Liu; Zilin Li; Ziwei Xie; Ziyang Song; Zizheng Pan; Zhen Huang; Zhipeng Xu; Zhongyu Zhang; Zhen Zhang) /Creator (arXiv GenPDF \(tex2pdf:57610bf\)) /DOI (https://doi.org/10.48550/arXiv.2501.12948) /License (http://arxiv.org/licenses/nonexclusive-distrib/1.0/) /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.28 \(TeX Live 2025\) kpathsea version 6.4.1) /Producer (pikepdf 8.15.1) /Title (DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning) /Trapped /False /arXivID (https://arxiv.org/abs/2501.12948v2) >> +endobj +3 0 obj +<< /Subtype /XML /Type /Metadata /Length 7011 >> +stream + + + + DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement LearningDeepSeek-AIDaya GuoDejian YangHaowei ZhangJunxiao SongPeiyi WangQihao ZhuRunxin XuRuoyu ZhangShirong MaXiao BiXiaokang ZhangXingkai YuYu WuZ. F. WuZhibin GouZhihong ShaoZhuoshu LiZiyi GaoAixin LiuBing XueBingxuan WangBochao WuBei FengChengda LuChenggang ZhaoChengqi DengChenyu ZhangChong RuanDamai DaiDeli ChenDongjie JiErhang LiFangyun LinFucong DaiFuli LuoGuangbo HaoGuanting ChenGuowei LiH. ZhangHan BaoHanwei XuHaocheng WangHonghui DingHuajian XinHuazuo GaoHui QuHui LiJianzhong GuoJiashi LiJiawei WangJingchang ChenJingyang YuanJunjie QiuJunlong LiJ. L. CaiJiaqi NiJian LiangJin ChenKai DongKai HuKaige GaoKang GuanKexin HuangKuai YuLean WangLecong ZhangLiang ZhaoLitong WangLiyue ZhangLei XuLeyi XiaMingchuan ZhangMinghua ZhangMinghui TangMeng LiMiaojun WangMingming LiNing TianPanpan HuangPeng ZhangQiancheng WangQinyu ChenQiushi DuRuiqi GeRuisong ZhangRuizhe PanRunji WangR. J. ChenR. L. JinRuyi ChenShanghao LuShangyan ZhouShanhuang ChenShengfeng YeShiyu WangShuiping YuShunfeng ZhouShuting PanS. S. LiShuang ZhouShaoqing WuShengfeng YeTao YunTian PeiTianyu SunT. WangWangding ZengWanjia ZhaoWen LiuWenfeng LiangWenjun GaoWenqin YuWentao ZhangW. L. XiaoWei AnXiaodong LiuXiaohan WangXiaokang ChenXiaotao NieXin ChengXin LiuXin XieXingchao LiuXinyu YangXinyuan LiXuecheng SuXuheng LinX. Q. LiXiangyue JinXiaojin ShenXiaosha ChenXiaowen SunXiaoxiang WangXinnan SongXinyi ZhouXianzu WangXinxia ShanY. K. LiY. Q. WangY. X. WeiYang ZhangYanhong XuYao LiYao ZhaoYaofeng SunYaohui WangYi YuYichao ZhangYifan ShiYiliang XiongYing HeYishi PiaoYisong WangYixuan TanYiyang MaYiyuan LiuYongqiang GuoYuan OuYuduan WangYue GongYuheng ZouYujia HeYunfan XiongYuxiang LuoYuxiang YouYuxuan LiuYuyang ZhouY. X. ZhuYanhong XuYanping HuangYaohui LiYi ZhengYuchen ZhuYunxian MaYing TangYukun ZhaYuting YanZ. Z. RenZehui RenZhangli ShaZhe FuZhean XuZhenda XieZhengyan ZhangZhewen HaoZhicheng MaZhigang YanZhiyu WuZihui GuZijia ZhuZijun LiuZilin LiZiwei XieZiyang SongZizheng PanZhen HuangZhipeng XuZhongyu ZhangZhen Zhanghttp://arxiv.org/licenses/nonexclusive-distrib/1.0/cs.CLcs.AIcs.LG + + + + +endstream +endobj +4 0 obj +<< /Dests 8 0 R >> +endobj +5 0 obj +<< /D [ 9 0 R /Fit ] /S /GoTo >> +endobj +6 0 obj +<< /Count 17 /First 10 0 R /Last 11 0 R /Type /Outlines >> +endobj +7 0 obj +<< /Count 86 /Kids [ 12 0 R 13 0 R 14 0 R ] /Type /Pages >> +endobj +8 0 obj +<< /Kids [ 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R ] /Limits [ (Doc-Start) (table.caption.9) ] >> +endobj +9 0 obj +<< /Annots [ 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R 37 0 R 38 0 R 39 0 R 40 0 R ] /Contents [ 41 0 R 42 0 R 43 0 R 44 0 R ] /Group 45 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 46 0 R /Resources 47 0 R /Type /Page >> +endobj +10 0 obj +<< /A 48 0 R /Next 49 0 R /Parent 6 0 R /Title 50 0 R >> +endobj +11 0 obj +<< /A 51 0 R /Parent 6 0 R /Prev 52 0 R /Title 53 0 R >> +endobj +12 0 obj +<< /Count 36 /Kids [ 46 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R ] /Parent 7 0 R /Type /Pages >> +endobj +13 0 obj +<< /Count 36 /Kids [ 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R ] /Parent 7 0 R /Type /Pages >> +endobj +14 0 obj +<< /Count 14 /Kids [ 65 0 R 66 0 R 67 0 R ] /Parent 7 0 R /Type /Pages >> +endobj +15 0 obj +<< /Kids [ 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R ] /Limits [ (Doc-Start) (lstnumber.2.136) ] >> +endobj +16 0 obj +<< /Kids [ 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R ] /Limits [ (lstnumber.2.137) (lstnumber.5.116) ] >> +endobj +17 0 obj +<< /Kids [ 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R ] /Limits [ (lstnumber.5.117) (lstnumber.6.62) ] >> +endobj +18 0 obj +<< /Kids [ 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R ] /Limits [ (lstnumber.6.63) (subsection.A.3) ] >> +endobj +19 0 obj +<< /Kids [ 92 0 R 93 0 R ] /Limits [ (subsection.B.1) (table.caption.9) ] >> +endobj +20 0 obj +<< /A << /D (cite.gpt3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 461.247 525.52 523.981 538.531 ] /Subtype /Link /Type /Annot >> +endobj +21 0 obj +<< /A << /D (cite.gpt3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 511.174 94.219 524.185 ] /Subtype /Link /Type /Annot >> +endobj +22 0 obj +<< /A << /D (cite.gpt4) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 97.99 511.174 139.81 524.185 ] /Subtype /Link /Type /Annot >> +endobj +23 0 obj +<< /A << /D (cite.gpt4) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 143.582 511.174 167.93 524.185 ] /Subtype /Link /Type /Annot >> +endobj +24 0 obj +<< /A << /D (cite.wei2022chain) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 340.874 511.174 388.217 524.185 ] /Subtype /Link /Type /Annot >> +endobj +25 0 obj +<< /A << /D (cite.wei2022chain) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 391.989 511.174 422.519 524.185 ] /Subtype /Link /Type /Annot >> +endobj +26 0 obj +<< /A << /D (cite.kaplan2020scaling) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 489.203 247.269 525.406 260.231 ] /Subtype /Link /Type /Annot >> +endobj +27 0 obj +<< /A << /D (cite.kaplan2020scaling) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 233.72 95.615 246.682 ] /Subtype /Link /Type /Annot >> +endobj +28 0 obj +<< /A << /D (cite.kaplan2020scaling) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 99.617 233.72 123.864 246.682 ] /Subtype /Link /Type /Annot >> +endobj +29 0 obj +<< /A << /D (cite.wei2022emergent) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 127.865 233.72 175.514 246.682 ] /Subtype /Link /Type /Annot >> +endobj +30 0 obj +<< /A << /D (cite.wei2022emergent) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 179.516 233.72 209.327 246.682 ] /Subtype /Link /Type /Annot >> +endobj +31 0 obj +<< /A << /D (cite.kojima2022large) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 488.029 179.523 525.406 192.485 ] /Subtype /Link /Type /Annot >> +endobj +32 0 obj +<< /A << /D (cite.kojima2022large) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 165.974 94.697 178.936 ] /Subtype /Link /Type /Annot >> +endobj +33 0 obj +<< /A << /D (cite.kojima2022large) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 98.145 165.974 121.934 178.936 ] /Subtype /Link /Type /Annot >> +endobj +34 0 obj +<< /A << /D (cite.wei2022chain) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 125.382 165.974 171.212 178.936 ] /Subtype /Link /Type /Annot >> +endobj +35 0 obj +<< /A << /D (cite.wei2022chain) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 174.66 165.974 204.476 178.936 ] /Subtype /Link /Type /Annot >> +endobj +36 0 obj +<< /A << /D (cite.chung2024scaling) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 225.345 125.327 286.633 138.288 ] /Subtype /Link /Type /Annot >> +endobj +37 0 obj +<< /A << /D (cite.chung2024scaling) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 290.122 125.327 314.194 138.288 ] /Subtype /Link /Type /Annot >> +endobj +38 0 obj +<< /A << /D (cite.gpt4) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 317.683 125.327 359.011 138.288 ] /Subtype /Link /Type /Annot >> +endobj +39 0 obj +<< /A << /D (cite.gpt4) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 362.5 125.327 386.572 138.288 ] /Subtype /Link /Type /Annot >> +endobj +40 0 obj +<< /A << /S /URI /URI (https://arxiv.org/abs/2501.12948v2) >> /BS << /W 0 >> /NM (fitz-L0) /Rect [ 12 254.29499 32 587.595 ] /Subtype /Link >> +endobj +41 0 obj +<< /Length 10 /Filter /FlateDecode >> +stream +x+| +endstream +endobj +42 0 obj +<< /Filter /FlateDecode /Length 2696 >> +stream +xڽYKW`D/k76`"[b)RCɯW]դr + XϪ+y—Nd得NuxㅗYD!p/P ?[ ,̜M%iH[|wj E:f\,n/Om?.U_^|D$^sK5 &0Mya;wVo>DA~*M&L"*Ǿn)VzzaǏFntyl^fNZ?+RG|*s/N@$@x)>Z]*K̊M{IHz9 jqUkGc1QeYlvů4d_\0pj4uXSCPy 2wrWydqF~3NeWˊE`σm_5e۪nxi7+mI=Xx +.l0#Vp|Ԙo1Apl͡mif;Bܖ~.V#'oJ~5\lA|) +Η?{: #>}{n6SCM9v?P}?|nYᑣ[}J`'g=?ZsD8HWܽO%fͱiq _NɆU"Qn&CG"O4gLΐFЕ]&Aq*+-BHmMfs bVa`D#\lG cI 4Ž#w7N1)x/sO#@ƃ\[+ q;J\jǭzN +s5iR)}oXd`[c9iH <˳ȅ.oT8p >Ҷ1I{avD7/ċz \,m @r齏6DV!$6鋕? "L㌊ELЉ*[ZAm $6=gw?#rZ:c :kMT&drN@m3jx$`!>I|5\|gpnP*"˯ ++"! ̆81XxS4Vqq+мTYYbŖ z4֜Ho; 95[BkKIUMAq7Y"'`2;v9-p4z/K3jSo8؂.Yd9EwhFwa{> +stream +x +f +endstream +endobj +44 0 obj +<< /Filter /FlateDecode /Length 142 >> +stream +xE +@ {"?Кd6ă 7CU> +endobj +46 0 obj +<< /Count 6 /Kids [ 9 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R ] /Parent 12 0 R /Type /Pages >> +endobj +47 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F68 103 0 R /Times-Roman 104 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im1 106 0 R >> >> +endobj +48 0 obj +<< /D (section.1) /S /GoTo >> +endobj +49 0 obj +<< /A 107 0 R /Count -3 /First 108 0 R /Last 109 0 R /Next 110 0 R /Parent 6 0 R /Prev 10 0 R /Title 111 0 R >> +endobj +50 0 obj + +endobj +51 0 obj +<< /D (appendix.J) /S /GoTo >> +endobj +52 0 obj +<< /A 112 0 R /Next 11 0 R /Parent 6 0 R /Prev 113 0 R /Title 114 0 R >> +endobj +53 0 obj + +endobj +54 0 obj +<< /Count 6 /Kids [ 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R ] /Parent 12 0 R /Type /Pages >> +endobj +55 0 obj +<< /Count 6 /Kids [ 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R ] /Parent 12 0 R /Type /Pages >> +endobj +56 0 obj +<< /Count 6 /Kids [ 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R ] /Parent 12 0 R /Type /Pages >> +endobj +57 0 obj +<< /Count 6 /Kids [ 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R ] /Parent 12 0 R /Type /Pages >> +endobj +58 0 obj +<< /Count 6 /Kids [ 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R ] /Parent 12 0 R /Type /Pages >> +endobj +59 0 obj +<< /Count 6 /Kids [ 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 150 0 R ] /Parent 13 0 R /Type /Pages >> +endobj +60 0 obj +<< /Count 6 /Kids [ 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R ] /Parent 13 0 R /Type /Pages >> +endobj +61 0 obj +<< /Count 6 /Kids [ 157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R ] /Parent 13 0 R /Type /Pages >> +endobj +62 0 obj +<< /Count 6 /Kids [ 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R 168 0 R ] /Parent 13 0 R /Type /Pages >> +endobj +63 0 obj +<< /Count 6 /Kids [ 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R ] /Parent 13 0 R /Type /Pages >> +endobj +64 0 obj +<< /Count 6 /Kids [ 175 0 R 176 0 R 177 0 R 178 0 R 179 0 R 180 0 R ] /Parent 13 0 R /Type /Pages >> +endobj +65 0 obj +<< /Count 6 /Kids [ 181 0 R 182 0 R 183 0 R 184 0 R 185 0 R 186 0 R ] /Parent 14 0 R /Type /Pages >> +endobj +66 0 obj +<< /Count 6 /Kids [ 187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R ] /Parent 14 0 R /Type /Pages >> +endobj +67 0 obj +<< /Count 2 /Kids [ 193 0 R 194 0 R ] /Parent 14 0 R /Type /Pages >> +endobj +68 0 obj +<< /Kids [ 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R ] /Limits [ (Doc-Start) (cite.csimpleqa) ] >> +endobj +69 0 obj +<< /Kids [ 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R ] /Limits [ (cite.deepseekmath) (cite.ouyang2022training) ] >> +endobj +70 0 obj +<< /Kids [ 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R ] /Limits [ (cite.qwen2_5) (equation.12) ] >> +endobj +71 0 obj +<< /Kids [ 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R ] /Limits [ (equation.13) (lstnumber.-1.1) ] >> +endobj +72 0 obj +<< /Kids [ 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R ] /Limits [ (lstnumber.-1.10) (lstnumber.2.103) ] >> +endobj +73 0 obj +<< /Kids [ 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R ] /Limits [ (lstnumber.2.104) (lstnumber.2.136) ] >> +endobj +74 0 obj +<< /Kids [ 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R ] /Limits [ (lstnumber.2.137) (lstnumber.2.29) ] >> +endobj +75 0 obj +<< /Kids [ 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R ] /Limits [ (lstnumber.2.3) (lstnumber.2.61) ] >> +endobj +76 0 obj +<< /Kids [ 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R ] /Limits [ (lstnumber.2.62) (lstnumber.2.94) ] >> +endobj +77 0 obj +<< /Kids [ 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R ] /Limits [ (lstnumber.2.95) (lstnumber.3.37) ] >> +endobj +78 0 obj +<< /Kids [ 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R ] /Limits [ (lstnumber.3.38) (lstnumber.4.13) ] >> +endobj +79 0 obj +<< /Kids [ 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R ] /Limits [ (lstnumber.4.14) (lstnumber.5.116) ] >> +endobj +80 0 obj +<< /Kids [ 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R ] /Limits [ (lstnumber.5.117) (lstnumber.5.149) ] >> +endobj +81 0 obj +<< /Kids [ 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R ] /Limits [ (lstnumber.5.15) (lstnumber.5.41) ] >> +endobj +82 0 obj +<< /Kids [ 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R ] /Limits [ (lstnumber.5.42) (lstnumber.5.74) ] >> +endobj +83 0 obj +<< /Kids [ 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R ] /Limits [ (lstnumber.5.75) (lstnumber.6.106) ] >> +endobj +84 0 obj +<< /Kids [ 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R ] /Limits [ (lstnumber.6.107) (lstnumber.6.3) ] >> +endobj +85 0 obj +<< /Kids [ 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R ] /Limits [ (lstnumber.6.30) (lstnumber.6.62) ] >> +endobj +86 0 obj +<< /Kids [ 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R ] /Limits [ (lstnumber.6.63) (lstnumber.6.95) ] >> +endobj +87 0 obj +<< /Kids [ 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R ] /Limits [ (lstnumber.6.96) (lstnumber.8.1) ] >> +endobj +88 0 obj +<< /Kids [ 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R ] /Limits [ (lstnumber.8.10) (lstnumber.8.9) ] >> +endobj +89 0 obj +<< /Kids [ 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R ] /Limits [ (page.1) (page.41) ] >> +endobj +90 0 obj +<< /Kids [ 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R ] /Limits [ (page.42) (page.74) ] >> +endobj +91 0 obj +<< /Kids [ 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R ] /Limits [ (page.75) (subsection.A.3) ] >> +endobj +92 0 obj +<< /Kids [ 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R ] /Limits [ (subsection.B.1) (subsubsection.D.3.5) ] >> +endobj +93 0 obj +<< /Kids [ 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R ] /Limits [ (table.caption.1) (table.caption.9) ] >> +endobj +94 0 obj +<< /Annots [ 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R ] /Contents 366 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 46 0 R /Resources 367 0 R /Type /Page >> +endobj +95 0 obj +<< /Annots [ 368 0 R 369 0 R ] /Contents 370 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 46 0 R /Resources 371 0 R /Type /Page >> +endobj +96 0 obj +<< /Annots [ 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R ] /Contents 377 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 46 0 R /Resources 378 0 R /Type /Page >> +endobj +97 0 obj +<< /Annots [ 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R ] /Contents 386 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 46 0 R /Resources 387 0 R /Type /Page >> +endobj +98 0 obj +<< /Annots [ 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R ] /Contents 393 0 R /Group 394 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 46 0 R /Resources 395 0 R /Type /Page >> +endobj +99 0 obj +<< /pgfprgb [ /Pattern /DeviceRGB ] >> +endobj +100 0 obj +<< /pgf@ca1.0 << /ca 1 >> >> +endobj +101 0 obj +<< /BaseFont /BRBLGI+URWPalladioL-Bold /Encoding 396 0 R /FirstChar 2 /FontDescriptor 397 0 R /LastChar 122 /Subtype /Type1 /ToUnicode 398 0 R /Type /Font /Widths 399 0 R >> +endobj +102 0 obj +<< /BaseFont /OKIHKH+URWPalladioL-Roma /Encoding 396 0 R /FirstChar 2 /FontDescriptor 400 0 R /LastChar 252 /Subtype /Type1 /ToUnicode 401 0 R /Type /Font /Widths 402 0 R >> +endobj +103 0 obj +<< /BaseFont /FYMCCB+LMMonoLt10-Bold /Encoding 403 0 R /FirstChar 46 /FontDescriptor 404 0 R /LastChar 115 /Subtype /Type1 /ToUnicode 405 0 R /Type /Font /Widths 406 0 R >> +endobj +104 0 obj +<< /BaseFont /Times-Roman /Encoding /WinAnsiEncoding /Subtype /Type1 /Type /Font >> +endobj +105 0 obj +<< >> +endobj +106 0 obj +<< /BBox [ 0 0 146.25 31.019532 ] /Filter /FlateDecode /FormType 1 /Group 45 0 R /PTEX.FileName (./logo/DeepSeek.pdf) /PTEX.InfoDict 407 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /a0 << /CA 1 /ca 1 >> >> /XObject << /x6 408 0 R >> >> /Subtype /Form /Type /XObject /Length 1440 >> +stream +xmWK7 )t">*k!q6&wUcy]-6O$[i'6;#ޮק꣆Ͳ_kN{?Y~[ p[;~ۗ_\2+^gV}:` h ϻY ?"\&`q >: cC`YbL=/xI+JQw^}L8 }{xɭ̍Vǰs4lՎ6چ5GHEav>9 蝅nmj~Nk'y EbZ3呆LkqY㋉Թw@mpt%P eE 9b"`ULzmx0e^ ׋"pFCti wg.-PjՋ]a +Nt3ōN9BFH<^jm2 9.!vn8q1X* lȈoH ޘEA<b1u聳io,?QִE6dP]܁TjI%fВy&AjO(̠+b]2/4xSH*\XK^|jj-%,#v#24LGGk9Dg").\r6݁>r׹Ʈفp,#l(icMMT=OZrbRh&C"p:LJ#¢inY-C)nH&:9hTGхpM*s.r_MFODٺ&Qʼn%_D9aOOPl3^|ѵbCsocHi.ógt5xT"l؋"FMIeC:/ѳC\:)A fO )MZ0#5 cr3 -_fb!c<$Qh*lQEȎU|=4[$`D!RTs8 j8/\jBʃR xX3ENR +/F%R&Lc.aƭ8B!RڌVWH؄nOPi.$,"Z댺{;̓$F41yVTҥP:xW3*M1M5Kؓ P&Fa9FkM5b3*C֚<)) xPk + ;[Mo:4q D7IrJu'' }K4mqʋɅя-^x͟^X2чNH^),*NϛM8}.ZKZ0v@> mƤq[Ƕ??eX +endstream +endobj +107 0 obj +<< /D (section.2) /S /GoTo >> +endobj +108 0 obj +<< /A 409 0 R /Next 410 0 R /Parent 49 0 R /Title 411 0 R >> +endobj +109 0 obj +<< /A 412 0 R /Parent 49 0 R /Prev 410 0 R /Title 413 0 R >> +endobj +110 0 obj +<< /A 414 0 R /Count -2 /First 415 0 R /Last 416 0 R /Next 417 0 R /Parent 6 0 R /Prev 49 0 R /Title 418 0 R >> +endobj +111 0 obj + +endobj +112 0 obj +<< /D (appendix.I) /S /GoTo >> +endobj +113 0 obj +<< /A 419 0 R /Count -3 /First 420 0 R /Last 421 0 R /Next 52 0 R /Parent 6 0 R /Prev 422 0 R /Title 423 0 R >> +endobj +114 0 obj + +endobj +115 0 obj +<< /Annots [ 424 0 R ] /Contents 425 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 54 0 R /Resources 426 0 R /Type /Page >> +endobj +116 0 obj +<< /Annots [ 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R ] /Contents 465 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 54 0 R /Resources 466 0 R /Type /Page >> +endobj +117 0 obj +<< /Annots [ 467 0 R 468 0 R 469 0 R 470 0 R ] /Contents 471 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 54 0 R /Resources 472 0 R /Type /Page >> +endobj +118 0 obj +<< /Annots [ 473 0 R ] /Contents 474 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 54 0 R /Resources 475 0 R /Type /Page >> +endobj +119 0 obj +<< /Contents 476 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 54 0 R /Resources 477 0 R /Type /Page >> +endobj +120 0 obj +<< /Contents 478 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 54 0 R /Resources 479 0 R /Type /Page >> +endobj +121 0 obj +<< /Annots [ 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R ] /Contents 493 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 55 0 R /Resources 494 0 R /Type /Page >> +endobj +122 0 obj +<< /Annots [ 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R ] /Contents 516 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 55 0 R /Resources 517 0 R /Type /Page >> +endobj +123 0 obj +<< /Annots [ 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R ] /Contents 525 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 55 0 R /Resources 526 0 R /Type /Page >> +endobj +124 0 obj +<< /Annots [ 527 0 R ] /Contents 528 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 55 0 R /Resources 529 0 R /Type /Page >> +endobj +125 0 obj +<< /Annots [ 530 0 R 531 0 R 532 0 R ] /Contents 533 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 55 0 R /Resources 534 0 R /Type /Page >> +endobj +126 0 obj +<< /Contents 535 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 55 0 R /Resources 536 0 R /Type /Page >> +endobj +127 0 obj +<< /Annots [ 537 0 R ] /Contents 538 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 56 0 R /Resources 539 0 R /Type /Page >> +endobj +128 0 obj +<< /Annots [ 540 0 R 541 0 R ] /Contents 542 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 56 0 R /Resources 543 0 R /Type /Page >> +endobj +129 0 obj +<< /Annots [ 544 0 R 545 0 R 546 0 R ] /Contents 547 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 56 0 R /Resources 548 0 R /Type /Page >> +endobj +130 0 obj +<< /Contents 549 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 56 0 R /Resources 550 0 R /Type /Page >> +endobj +131 0 obj +<< /Contents 551 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 56 0 R /Resources 552 0 R /Type /Page >> +endobj +132 0 obj +<< /Annots [ 553 0 R ] /Contents 554 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 56 0 R /Resources 555 0 R /Type /Page >> +endobj +133 0 obj +<< /Contents 556 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 57 0 R /Resources 557 0 R /Type /Page >> +endobj +134 0 obj +<< /Annots [ 558 0 R ] /Contents 559 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 57 0 R /Resources 560 0 R /Type /Page >> +endobj +135 0 obj +<< /Annots [ 561 0 R 562 0 R 563 0 R 564 0 R ] /Contents 565 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 57 0 R /Resources 566 0 R /Type /Page >> +endobj +136 0 obj +<< /Contents 567 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 57 0 R /Resources 568 0 R /Type /Page >> +endobj +137 0 obj +<< /Contents 569 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 57 0 R /Resources 570 0 R /Type /Page >> +endobj +138 0 obj +<< /Contents 571 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 57 0 R /Resources 572 0 R /Type /Page >> +endobj +139 0 obj +<< /Contents 573 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 58 0 R /Resources 574 0 R /Type /Page >> +endobj +140 0 obj +<< /Contents 575 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 58 0 R /Resources 576 0 R /Type /Page >> +endobj +141 0 obj +<< /Contents 577 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 58 0 R /Resources 578 0 R /Type /Page >> +endobj +142 0 obj +<< /Contents 579 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 58 0 R /Resources 580 0 R /Type /Page >> +endobj +143 0 obj +<< /Annots [ 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R ] /Contents 598 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 58 0 R /Resources 599 0 R /Type /Page >> +endobj +144 0 obj +<< /Contents 600 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 58 0 R /Resources 601 0 R /Type /Page >> +endobj +145 0 obj +<< /Annots [ 602 0 R 603 0 R ] /Contents 604 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 59 0 R /Resources 605 0 R /Type /Page >> +endobj +146 0 obj +<< /Annots [ 606 0 R 607 0 R ] /Contents 608 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 59 0 R /Resources 609 0 R /Type /Page >> +endobj +147 0 obj +<< /Annots [ 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R ] /Contents 641 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 59 0 R /Resources 642 0 R /Type /Page >> +endobj +148 0 obj +<< /Annots [ 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R ] /Contents 653 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 59 0 R /Resources 654 0 R /Type /Page >> +endobj +149 0 obj +<< /Contents 655 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 59 0 R /Resources 656 0 R /Type /Page >> +endobj +150 0 obj +<< /Annots [ 657 0 R ] /Contents 658 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 59 0 R /Resources 659 0 R /Type /Page >> +endobj +151 0 obj +<< /Annots [ 660 0 R 661 0 R 662 0 R 663 0 R ] /Contents 664 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 60 0 R /Resources 665 0 R /Type /Page >> +endobj +152 0 obj +<< /Annots [ 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R ] /Contents 671 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 60 0 R /Resources 672 0 R /Type /Page >> +endobj +153 0 obj +<< /Contents 673 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 60 0 R /Resources 674 0 R /Type /Page >> +endobj +154 0 obj +<< /Annots [ 675 0 R 676 0 R 677 0 R ] /Contents 678 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 60 0 R /Resources 679 0 R /Type /Page >> +endobj +155 0 obj +<< /Annots [ 680 0 R 681 0 R 682 0 R 683 0 R 684 0 R 685 0 R 686 0 R 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R ] /Contents 692 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 60 0 R /Resources 693 0 R /Type /Page >> +endobj +156 0 obj +<< /Annots [ 694 0 R 695 0 R 696 0 R 697 0 R ] /Contents 698 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 60 0 R /Resources 699 0 R /Type /Page >> +endobj +157 0 obj +<< /Contents 700 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 61 0 R /Resources 701 0 R /Type /Page >> +endobj +158 0 obj +<< /Annots [ 702 0 R ] /Contents 703 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 61 0 R /Resources 704 0 R /Type /Page >> +endobj +159 0 obj +<< /Annots [ 705 0 R 706 0 R ] /Contents 707 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 61 0 R /Resources 708 0 R /Type /Page >> +endobj +160 0 obj +<< /Contents 709 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 61 0 R /Resources 710 0 R /Type /Page >> +endobj +161 0 obj +<< /Annots [ 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R ] /Contents 716 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 61 0 R /Resources 717 0 R /Type /Page >> +endobj +162 0 obj +<< /Annots [ 718 0 R 719 0 R 720 0 R 721 0 R ] /Contents 722 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 61 0 R /Resources 723 0 R /Type /Page >> +endobj +163 0 obj +<< /Contents 724 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 62 0 R /Resources 725 0 R /Type /Page >> +endobj +164 0 obj +<< /Annots [ 726 0 R ] /Contents 727 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 62 0 R /Resources 728 0 R /Type /Page >> +endobj +165 0 obj +<< /Annots [ 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R ] /Contents 739 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 62 0 R /Resources 740 0 R /Type /Page >> +endobj +166 0 obj +<< /Contents 741 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 62 0 R /Resources 742 0 R /Type /Page >> +endobj +167 0 obj +<< /Annots [ 743 0 R 744 0 R ] /Contents 745 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 62 0 R /Resources 746 0 R /Type /Page >> +endobj +168 0 obj +<< /Annots [ 747 0 R 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R ] /Contents 761 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 62 0 R /Resources 762 0 R /Type /Page >> +endobj +169 0 obj +<< /Annots [ 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R ] /Contents 772 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 63 0 R /Resources 773 0 R /Type /Page >> +endobj +170 0 obj +<< /Annots [ 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R ] /Contents 783 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 63 0 R /Resources 784 0 R /Type /Page >> +endobj +171 0 obj +<< /Annots [ 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R 800 0 R ] /Contents 801 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 63 0 R /Resources 802 0 R /Type /Page >> +endobj +172 0 obj +<< /Annots [ 803 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R ] /Contents 830 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 63 0 R /Resources 831 0 R /Type /Page >> +endobj +173 0 obj +<< /Annots [ 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 839 0 R 840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R 875 0 R 876 0 R 877 0 R 878 0 R 879 0 R 880 0 R 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R 905 0 R 906 0 R 907 0 R 908 0 R 909 0 R 910 0 R ] /Contents 911 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 63 0 R /Resources 912 0 R /Type /Page >> +endobj +174 0 obj +<< /Contents 913 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 63 0 R /Resources 914 0 R /Type /Page >> +endobj +175 0 obj +<< /Contents 915 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 64 0 R /Resources 916 0 R /Type /Page >> +endobj +176 0 obj +<< /Contents 917 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 64 0 R /Resources 918 0 R /Type /Page >> +endobj +177 0 obj +<< /Contents 919 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 64 0 R /Resources 920 0 R /Type /Page >> +endobj +178 0 obj +<< /Contents 921 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 64 0 R /Resources 922 0 R /Type /Page >> +endobj +179 0 obj +<< /Contents 923 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 64 0 R /Resources 924 0 R /Type /Page >> +endobj +180 0 obj +<< /Contents 925 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 64 0 R /Resources 926 0 R /Type /Page >> +endobj +181 0 obj +<< /Contents 927 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 65 0 R /Resources 928 0 R /Type /Page >> +endobj +182 0 obj +<< /Contents 929 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 65 0 R /Resources 930 0 R /Type /Page >> +endobj +183 0 obj +<< /Contents 931 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 65 0 R /Resources 932 0 R /Type /Page >> +endobj +184 0 obj +<< /Contents 933 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 65 0 R /Resources 934 0 R /Type /Page >> +endobj +185 0 obj +<< /Contents 935 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 65 0 R /Resources 936 0 R /Type /Page >> +endobj +186 0 obj +<< /Annots [ 937 0 R ] /Contents 938 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 65 0 R /Resources 939 0 R /Type /Page >> +endobj +187 0 obj +<< /Annots [ 940 0 R 941 0 R 942 0 R 943 0 R 944 0 R 945 0 R 946 0 R 947 0 R ] /Contents 948 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 66 0 R /Resources 949 0 R /Type /Page >> +endobj +188 0 obj +<< /Annots [ 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R 960 0 R 961 0 R 962 0 R 963 0 R ] /Contents 964 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 66 0 R /Resources 965 0 R /Type /Page >> +endobj +189 0 obj +<< /Annots [ 966 0 R 967 0 R 968 0 R 969 0 R 970 0 R 971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 977 0 R 978 0 R ] /Contents 979 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 66 0 R /Resources 980 0 R /Type /Page >> +endobj +190 0 obj +<< /Annots [ 981 0 R 982 0 R 983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R ] /Contents 994 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 66 0 R /Resources 995 0 R /Type /Page >> +endobj +191 0 obj +<< /Annots [ 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R ] /Contents 1009 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 66 0 R /Resources 1010 0 R /Type /Page >> +endobj +192 0 obj +<< /Annots [ 1011 0 R 1012 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R ] /Contents 1022 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 66 0 R /Resources 1023 0 R /Type /Page >> +endobj +193 0 obj +<< /Annots [ 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R ] /Contents 1031 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 67 0 R /Resources 1032 0 R /Type /Page >> +endobj +194 0 obj +<< /Annots [ 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R ] /Contents 1044 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 67 0 R /Resources 1045 0 R /Type /Page >> +endobj +195 0 obj +<< /Limits [ (Doc-Start) (appendix.D) ] /Names [ (Doc-Start) 1046 0 R (Hfootnote.1) 1047 0 R (appendix.A) 1048 0 R (appendix.B) 1049 0 R (appendix.C) 1050 0 R (appendix.D) 1051 0 R ] >> +endobj +196 0 obj +<< /Limits [ (appendix.E) (appendix.J) ] /Names [ (appendix.E) 1052 0 R (appendix.F) 1053 0 R (appendix.G) 1054 0 R (appendix.H) 1055 0 R (appendix.I) 1056 0 R (appendix.J) 1057 0 R ] >> +endobj +197 0 obj +<< /Limits [ (cite.AIME2024) (cite.Lin_ZeroEval_A_Unified_2024) ] /Names [ (cite.AIME2024) 1058 0 R (cite.AlphaGeometryTrinh2024) 1059 0 R (cite.DBLP:conf/nips/ChristianoLBMLA17) 1060 0 R (cite.DBLP:journals/corr/HintonVD15) 1061 0 R (cite.IFeval) 1062 0 R (cite.Lin_ZeroEval_A_Unified_2024) 1063 0 R ] >> +endobj +198 0 obj +<< /Limits [ (cite.QwQ) (cite.alphazero) ] /Names [ (cite.QwQ) 1064 0 R (cite.agentless) 1065 0 R (cite.aider) 1066 0 R (cite.akyurek2024surprising) 1067 0 R (cite.alphago) 1068 0 R (cite.alphazero) 1069 0 R ] >> +endobj +199 0 obj +<< /Limits [ (cite.bai2022training) (cite.chiang2024chatbot) ] /Names [ (cite.bai2022training) 1070 0 R (cite.brown2024large) 1071 0 R (cite.busbridge2025distillation) 1072 0 R (cite.ceval) 1073 0 R (cite.chen2025empirical) 1074 0 R (cite.chiang2024chatbot) 1075 0 R ] >> +endobj +200 0 obj +<< /Limits [ (cite.chung2024scaling) (cite.csimpleqa) ] /Names [ (cite.chung2024scaling) 1076 0 R (cite.cmmlu) 1077 0 R (cite.cnmo) 1078 0 R (cite.codeforces) 1079 0 R (cite.codex) 1080 0 R (cite.csimpleqa) 1081 0 R ] >> +endobj +201 0 obj +<< /Limits [ (cite.deepseekmath) (cite.frames) ] /Names [ (cite.deepseekmath) 1082 0 R (cite.dpo) 1083 0 R (cite.dsvii) 1084 0 R (cite.dsviii) 1085 0 R (cite.feng2024alphazeroliketreesearchguidelarge) 1086 0 R (cite.frames) 1087 0 R ] >> +endobj +202 0 obj +<< /Limits [ (cite.gae) (cite.gpqa) ] /Names [ (cite.gae) 1088 0 R (cite.gao2022scalinglawsrewardmodel) 1089 0 R (cite.geiping2025scaling) 1090 0 R (cite.gou2024critic) 1091 0 R (cite.gou2024tora) 1092 0 R (cite.gpqa) 1093 0 R ] >> +endobj +203 0 obj +<< /Limits [ (cite.gpt2) (cite.kaplan2020scaling) ] /Names [ (cite.gpt2) 1094 0 R (cite.gpt3) 1095 0 R (cite.gpt4) 1096 0 R (cite.gsm8k) 1097 0 R (cite.hao2023reasoning) 1098 0 R (cite.kaplan2020scaling) 1099 0 R ] >> +endobj +204 0 obj +<< /Limits [ (cite.kl_approx) (cite.liu2025oatzero) ] /Names [ (cite.kl_approx) 1100 0 R (cite.kojima2022large) 1101 0 R (cite.kumar2024training) 1102 0 R (cite.li2025codei) 1103 0 R (cite.lightman2023let) 1104 0 R (cite.liu2025oatzero) 1105 0 R ] >> +endobj +205 0 obj +<< /Limits [ (cite.livecodebench) (cite.mmlu) ] /Names [ (cite.livecodebench) 1106 0 R (cite.llama3_1_405b) 1107 0 R (cite.madaan2023selfrefine) 1108 0 R (cite.mathshepherd) 1109 0 R (cite.meta_mtp) 1110 0 R (cite.mmlu) 1111 0 R ] >> +endobj +206 0 obj +<< /Limits [ (cite.mmlu_pro) (cite.ouyang2022training) ] /Names [ (cite.mmlu_pro) 1112 0 R (cite.mmlu_redux) 1113 0 R (cite.muennighoff2023scaling) 1114 0 R (cite.nakano2021webgpt) 1115 0 R (cite.openr1) 1116 0 R (cite.ouyang2022training) 1117 0 R ] >> +endobj +207 0 obj +<< /Limits [ (cite.qwen2_5) (cite.safety-benchmark-sst) ] /Names [ (cite.qwen2_5) 1118 0 R (cite.safety-benchmark-anthropic-red-team) 1119 0 R (cite.safety-benchmark-bbq) 1120 0 R (cite.safety-benchmark-dna) 1121 0 R (cite.safety-benchmark-harmbench) 1122 0 R (cite.safety-benchmark-sst) 1123 0 R ] >> +endobj +208 0 obj +<< /Limits [ (cite.safety-benchmark-xstest) (cite.snell2024scalingllmtesttimecompute) ] /Names [ (cite.safety-benchmark-xstest) 1124 0 R (cite.schick2023toolformer) 1125 0 R (cite.schulman2017proximal) 1126 0 R (cite.simpleqa) 1127 0 R (cite.singh2024beyond) 1128 0 R (cite.snell2024scalingllmtesttimecompute) 1129 0 R ] >> +endobj +209 0 obj +<< /Limits [ (cite.snell2025scaling) (cite.touvron2023llama) ] /Names [ (cite.snell2025scaling) 1130 0 R (cite.sun2020test) 1131 0 R (cite.suzgun-etal-2023-challenging) 1132 0 R (cite.swe_verified) 1133 0 R (cite.tinyzero) 1134 0 R (cite.touvron2023llama) 1135 0 R ] >> +endobj +210 0 obj +<< /Limits [ (cite.uesato2022solving) (cite.wei2022emergent) ] /Names [ (cite.uesato2022solving) 1136 0 R (cite.vllm) 1137 0 R (cite.wang2022self) 1138 0 R (cite.wangself) 1139 0 R (cite.wei2022chain) 1140 0 R (cite.wei2022emergent) 1141 0 R ] >> +endobj +211 0 obj +<< /Limits [ (cite.welleck2023generating) (cite.zelikman2022star) ] /Names [ (cite.welleck2023generating) 1142 0 R (cite.xin2024deepseekproverv15harnessingproofassistant) 1143 0 R (cite.yao2023react) 1144 0 R (cite.yao2023tree) 1145 0 R (cite.yuan2023scaling) 1146 0 R (cite.zelikman2022star) 1147 0 R ] >> +endobj +212 0 obj +<< /Limits [ (cite.zelikman2024quietstar) (equation.12) ] /Names [ (cite.zelikman2024quietstar) 1148 0 R (cite.zhou2023leasttomost) 1149 0 R (equation.1) 1150 0 R (equation.10) 1151 0 R (equation.11) 1152 0 R (equation.12) 1153 0 R ] >> +endobj +213 0 obj +<< /Limits [ (equation.13) (equation.6) ] /Names [ (equation.13) 1154 0 R (equation.2) 1155 0 R (equation.3) 1156 0 R (equation.4) 1157 0 R (equation.5) 1158 0 R (equation.6) 1159 0 R ] >> +endobj +214 0 obj +<< /Limits [ (equation.7) (figure.caption.15) ] /Names [ (equation.7) 1160 0 R (equation.8) 1161 0 R (equation.9) 1162 0 R (figure.caption.13) 1163 0 R (figure.caption.14) 1164 0 R (figure.caption.15) 1165 0 R ] >> +endobj +215 0 obj +<< /Limits [ (figure.caption.16) (figure.caption.22) ] /Names [ (figure.caption.16) 1166 0 R (figure.caption.18) 1167 0 R (figure.caption.19) 1168 0 R (figure.caption.2) 1169 0 R (figure.caption.20) 1170 0 R (figure.caption.22) 1171 0 R ] >> +endobj +216 0 obj +<< /Limits [ (figure.caption.24) (figure.caption.6) ] /Names [ (figure.caption.24) 1172 0 R (figure.caption.27) 1173 0 R (figure.caption.29) 1174 0 R (figure.caption.30) 1175 0 R (figure.caption.4) 1176 0 R (figure.caption.6) 1177 0 R ] >> +endobj +217 0 obj +<< /Limits [ (figure.caption.7) (lstlisting.3) ] /Names [ (figure.caption.7) 1178 0 R (figure.caption.8) 1179 0 R (lstlisting.-1) 1180 0 R (lstlisting.1) 1181 0 R (lstlisting.2) 1182 0 R (lstlisting.3) 1183 0 R ] >> +endobj +218 0 obj +<< /Limits [ (lstlisting.4) (lstnumber.-1.1) ] /Names [ (lstlisting.4) 1184 0 R (lstlisting.5) 1185 0 R (lstlisting.6) 1186 0 R (lstlisting.7) 1187 0 R (lstlisting.8) 1188 0 R (lstnumber.-1.1) 1189 0 R ] >> +endobj +219 0 obj +<< /Limits [ (lstnumber.-1.10) (lstnumber.-1.15) ] /Names [ (lstnumber.-1.10) 1190 0 R (lstnumber.-1.11) 1191 0 R (lstnumber.-1.12) 1192 0 R (lstnumber.-1.13) 1193 0 R (lstnumber.-1.14) 1194 0 R (lstnumber.-1.15) 1195 0 R ] >> +endobj +220 0 obj +<< /Limits [ (lstnumber.-1.2) (lstnumber.-1.7) ] /Names [ (lstnumber.-1.2) 1196 0 R (lstnumber.-1.3) 1197 0 R (lstnumber.-1.4) 1198 0 R (lstnumber.-1.5) 1199 0 R (lstnumber.-1.6) 1200 0 R (lstnumber.-1.7) 1201 0 R ] >> +endobj +221 0 obj +<< /Limits [ (lstnumber.-1.8) (lstnumber.1.12) ] /Names [ (lstnumber.-1.8) 1202 0 R (lstnumber.-1.9) 1203 0 R (lstnumber.1.1) 1204 0 R (lstnumber.1.10) 1205 0 R (lstnumber.1.11) 1206 0 R (lstnumber.1.12) 1207 0 R ] >> +endobj +222 0 obj +<< /Limits [ (lstnumber.1.13) (lstnumber.1.3) ] /Names [ (lstnumber.1.13) 1208 0 R (lstnumber.1.14) 1209 0 R (lstnumber.1.15) 1210 0 R (lstnumber.1.16) 1211 0 R (lstnumber.1.2) 1212 0 R (lstnumber.1.3) 1213 0 R ] >> +endobj +223 0 obj +<< /Limits [ (lstnumber.1.4) (lstnumber.1.9) ] /Names [ (lstnumber.1.4) 1214 0 R (lstnumber.1.5) 1215 0 R (lstnumber.1.6) 1216 0 R (lstnumber.1.7) 1217 0 R (lstnumber.1.8) 1218 0 R (lstnumber.1.9) 1219 0 R ] >> +endobj +224 0 obj +<< /Limits [ (lstnumber.2.1) (lstnumber.2.103) ] /Names [ (lstnumber.2.1) 1220 0 R (lstnumber.2.10) 1221 0 R (lstnumber.2.100) 1222 0 R (lstnumber.2.101) 1223 0 R (lstnumber.2.102) 1224 0 R (lstnumber.2.103) 1225 0 R ] >> +endobj +225 0 obj +<< /Limits [ (lstnumber.2.104) (lstnumber.2.109) ] /Names [ (lstnumber.2.104) 1226 0 R (lstnumber.2.105) 1227 0 R (lstnumber.2.106) 1228 0 R (lstnumber.2.107) 1229 0 R (lstnumber.2.108) 1230 0 R (lstnumber.2.109) 1231 0 R ] >> +endobj +226 0 obj +<< /Limits [ (lstnumber.2.11) (lstnumber.2.114) ] /Names [ (lstnumber.2.11) 1232 0 R (lstnumber.2.110) 1233 0 R (lstnumber.2.111) 1234 0 R (lstnumber.2.112) 1235 0 R (lstnumber.2.113) 1236 0 R (lstnumber.2.114) 1237 0 R ] >> +endobj +227 0 obj +<< /Limits [ (lstnumber.2.115) (lstnumber.2.12) ] /Names [ (lstnumber.2.115) 1238 0 R (lstnumber.2.116) 1239 0 R (lstnumber.2.117) 1240 0 R (lstnumber.2.118) 1241 0 R (lstnumber.2.119) 1242 0 R (lstnumber.2.12) 1243 0 R ] >> +endobj +228 0 obj +<< /Limits [ (lstnumber.2.120) (lstnumber.2.125) ] /Names [ (lstnumber.2.120) 1244 0 R (lstnumber.2.121) 1245 0 R (lstnumber.2.122) 1246 0 R (lstnumber.2.123) 1247 0 R (lstnumber.2.124) 1248 0 R (lstnumber.2.125) 1249 0 R ] >> +endobj +229 0 obj +<< /Limits [ (lstnumber.2.126) (lstnumber.2.130) ] /Names [ (lstnumber.2.126) 1250 0 R (lstnumber.2.127) 1251 0 R (lstnumber.2.128) 1252 0 R (lstnumber.2.129) 1253 0 R (lstnumber.2.13) 1254 0 R (lstnumber.2.130) 1255 0 R ] >> +endobj +230 0 obj +<< /Limits [ (lstnumber.2.131) (lstnumber.2.136) ] /Names [ (lstnumber.2.131) 1256 0 R (lstnumber.2.132) 1257 0 R (lstnumber.2.133) 1258 0 R (lstnumber.2.134) 1259 0 R (lstnumber.2.135) 1260 0 R (lstnumber.2.136) 1261 0 R ] >> +endobj +231 0 obj +<< /Limits [ (lstnumber.2.137) (lstnumber.2.141) ] /Names [ (lstnumber.2.137) 1262 0 R (lstnumber.2.138) 1263 0 R (lstnumber.2.139) 1264 0 R (lstnumber.2.14) 1265 0 R (lstnumber.2.140) 1266 0 R (lstnumber.2.141) 1267 0 R ] >> +endobj +232 0 obj +<< /Limits [ (lstnumber.2.142) (lstnumber.2.147) ] /Names [ (lstnumber.2.142) 1268 0 R (lstnumber.2.143) 1269 0 R (lstnumber.2.144) 1270 0 R (lstnumber.2.145) 1271 0 R (lstnumber.2.146) 1272 0 R (lstnumber.2.147) 1273 0 R ] >> +endobj +233 0 obj +<< /Limits [ (lstnumber.2.148) (lstnumber.2.152) ] /Names [ (lstnumber.2.148) 1274 0 R (lstnumber.2.149) 1275 0 R (lstnumber.2.15) 1276 0 R (lstnumber.2.150) 1277 0 R (lstnumber.2.151) 1278 0 R (lstnumber.2.152) 1279 0 R ] >> +endobj +234 0 obj +<< /Limits [ (lstnumber.2.153) (lstnumber.2.18) ] /Names [ (lstnumber.2.153) 1280 0 R (lstnumber.2.154) 1281 0 R (lstnumber.2.155) 1282 0 R (lstnumber.2.16) 1283 0 R (lstnumber.2.17) 1284 0 R (lstnumber.2.18) 1285 0 R ] >> +endobj +235 0 obj +<< /Limits [ (lstnumber.2.19) (lstnumber.2.23) ] /Names [ (lstnumber.2.19) 1286 0 R (lstnumber.2.2) 1287 0 R (lstnumber.2.20) 1288 0 R (lstnumber.2.21) 1289 0 R (lstnumber.2.22) 1290 0 R (lstnumber.2.23) 1291 0 R ] >> +endobj +236 0 obj +<< /Limits [ (lstnumber.2.24) (lstnumber.2.29) ] /Names [ (lstnumber.2.24) 1292 0 R (lstnumber.2.25) 1293 0 R (lstnumber.2.26) 1294 0 R (lstnumber.2.27) 1295 0 R (lstnumber.2.28) 1296 0 R (lstnumber.2.29) 1297 0 R ] >> +endobj +237 0 obj +<< /Limits [ (lstnumber.2.3) (lstnumber.2.34) ] /Names [ (lstnumber.2.3) 1298 0 R (lstnumber.2.30) 1299 0 R (lstnumber.2.31) 1300 0 R (lstnumber.2.32) 1301 0 R (lstnumber.2.33) 1302 0 R (lstnumber.2.34) 1303 0 R ] >> +endobj +238 0 obj +<< /Limits [ (lstnumber.2.35) (lstnumber.2.4) ] /Names [ (lstnumber.2.35) 1304 0 R (lstnumber.2.36) 1305 0 R (lstnumber.2.37) 1306 0 R (lstnumber.2.38) 1307 0 R (lstnumber.2.39) 1308 0 R (lstnumber.2.4) 1309 0 R ] >> +endobj +239 0 obj +<< /Limits [ (lstnumber.2.40) (lstnumber.2.45) ] /Names [ (lstnumber.2.40) 1310 0 R (lstnumber.2.41) 1311 0 R (lstnumber.2.42) 1312 0 R (lstnumber.2.43) 1313 0 R (lstnumber.2.44) 1314 0 R (lstnumber.2.45) 1315 0 R ] >> +endobj +240 0 obj +<< /Limits [ (lstnumber.2.46) (lstnumber.2.50) ] /Names [ (lstnumber.2.46) 1316 0 R (lstnumber.2.47) 1317 0 R (lstnumber.2.48) 1318 0 R (lstnumber.2.49) 1319 0 R (lstnumber.2.5) 1320 0 R (lstnumber.2.50) 1321 0 R ] >> +endobj +241 0 obj +<< /Limits [ (lstnumber.2.51) (lstnumber.2.56) ] /Names [ (lstnumber.2.51) 1322 0 R (lstnumber.2.52) 1323 0 R (lstnumber.2.53) 1324 0 R (lstnumber.2.54) 1325 0 R (lstnumber.2.55) 1326 0 R (lstnumber.2.56) 1327 0 R ] >> +endobj +242 0 obj +<< /Limits [ (lstnumber.2.57) (lstnumber.2.61) ] /Names [ (lstnumber.2.57) 1328 0 R (lstnumber.2.58) 1329 0 R (lstnumber.2.59) 1330 0 R (lstnumber.2.6) 1331 0 R (lstnumber.2.60) 1332 0 R (lstnumber.2.61) 1333 0 R ] >> +endobj +243 0 obj +<< /Limits [ (lstnumber.2.62) (lstnumber.2.67) ] /Names [ (lstnumber.2.62) 1334 0 R (lstnumber.2.63) 1335 0 R (lstnumber.2.64) 1336 0 R (lstnumber.2.65) 1337 0 R (lstnumber.2.66) 1338 0 R (lstnumber.2.67) 1339 0 R ] >> +endobj +244 0 obj +<< /Limits [ (lstnumber.2.68) (lstnumber.2.72) ] /Names [ (lstnumber.2.68) 1340 0 R (lstnumber.2.69) 1341 0 R (lstnumber.2.7) 1342 0 R (lstnumber.2.70) 1343 0 R (lstnumber.2.71) 1344 0 R (lstnumber.2.72) 1345 0 R ] >> +endobj +245 0 obj +<< /Limits [ (lstnumber.2.73) (lstnumber.2.78) ] /Names [ (lstnumber.2.73) 1346 0 R (lstnumber.2.74) 1347 0 R (lstnumber.2.75) 1348 0 R (lstnumber.2.76) 1349 0 R (lstnumber.2.77) 1350 0 R (lstnumber.2.78) 1351 0 R ] >> +endobj +246 0 obj +<< /Limits [ (lstnumber.2.79) (lstnumber.2.83) ] /Names [ (lstnumber.2.79) 1352 0 R (lstnumber.2.8) 1353 0 R (lstnumber.2.80) 1354 0 R (lstnumber.2.81) 1355 0 R (lstnumber.2.82) 1356 0 R (lstnumber.2.83) 1357 0 R ] >> +endobj +247 0 obj +<< /Limits [ (lstnumber.2.84) (lstnumber.2.89) ] /Names [ (lstnumber.2.84) 1358 0 R (lstnumber.2.85) 1359 0 R (lstnumber.2.86) 1360 0 R (lstnumber.2.87) 1361 0 R (lstnumber.2.88) 1362 0 R (lstnumber.2.89) 1363 0 R ] >> +endobj +248 0 obj +<< /Limits [ (lstnumber.2.9) (lstnumber.2.94) ] /Names [ (lstnumber.2.9) 1364 0 R (lstnumber.2.90) 1365 0 R (lstnumber.2.91) 1366 0 R (lstnumber.2.92) 1367 0 R (lstnumber.2.93) 1368 0 R (lstnumber.2.94) 1369 0 R ] >> +endobj +249 0 obj +<< /Limits [ (lstnumber.2.95) (lstnumber.3.1) ] /Names [ (lstnumber.2.95) 1370 0 R (lstnumber.2.96) 1371 0 R (lstnumber.2.97) 1372 0 R (lstnumber.2.98) 1373 0 R (lstnumber.2.99) 1374 0 R (lstnumber.3.1) 1375 0 R ] >> +endobj +250 0 obj +<< /Limits [ (lstnumber.3.10) (lstnumber.3.15) ] /Names [ (lstnumber.3.10) 1376 0 R (lstnumber.3.11) 1377 0 R (lstnumber.3.12) 1378 0 R (lstnumber.3.13) 1379 0 R (lstnumber.3.14) 1380 0 R (lstnumber.3.15) 1381 0 R ] >> +endobj +251 0 obj +<< /Limits [ (lstnumber.3.16) (lstnumber.3.20) ] /Names [ (lstnumber.3.16) 1382 0 R (lstnumber.3.17) 1383 0 R (lstnumber.3.18) 1384 0 R (lstnumber.3.19) 1385 0 R (lstnumber.3.2) 1386 0 R (lstnumber.3.20) 1387 0 R ] >> +endobj +252 0 obj +<< /Limits [ (lstnumber.3.21) (lstnumber.3.26) ] /Names [ (lstnumber.3.21) 1388 0 R (lstnumber.3.22) 1389 0 R (lstnumber.3.23) 1390 0 R (lstnumber.3.24) 1391 0 R (lstnumber.3.25) 1392 0 R (lstnumber.3.26) 1393 0 R ] >> +endobj +253 0 obj +<< /Limits [ (lstnumber.3.27) (lstnumber.3.31) ] /Names [ (lstnumber.3.27) 1394 0 R (lstnumber.3.28) 1395 0 R (lstnumber.3.29) 1396 0 R (lstnumber.3.3) 1397 0 R (lstnumber.3.30) 1398 0 R (lstnumber.3.31) 1399 0 R ] >> +endobj +254 0 obj +<< /Limits [ (lstnumber.3.32) (lstnumber.3.37) ] /Names [ (lstnumber.3.32) 1400 0 R (lstnumber.3.33) 1401 0 R (lstnumber.3.34) 1402 0 R (lstnumber.3.35) 1403 0 R (lstnumber.3.36) 1404 0 R (lstnumber.3.37) 1405 0 R ] >> +endobj +255 0 obj +<< /Limits [ (lstnumber.3.38) (lstnumber.3.42) ] /Names [ (lstnumber.3.38) 1406 0 R (lstnumber.3.39) 1407 0 R (lstnumber.3.4) 1408 0 R (lstnumber.3.40) 1409 0 R (lstnumber.3.41) 1410 0 R (lstnumber.3.42) 1411 0 R ] >> +endobj +256 0 obj +<< /Limits [ (lstnumber.3.43) (lstnumber.3.48) ] /Names [ (lstnumber.3.43) 1412 0 R (lstnumber.3.44) 1413 0 R (lstnumber.3.45) 1414 0 R (lstnumber.3.46) 1415 0 R (lstnumber.3.47) 1416 0 R (lstnumber.3.48) 1417 0 R ] >> +endobj +257 0 obj +<< /Limits [ (lstnumber.3.49) (lstnumber.3.53) ] /Names [ (lstnumber.3.49) 1418 0 R (lstnumber.3.5) 1419 0 R (lstnumber.3.50) 1420 0 R (lstnumber.3.51) 1421 0 R (lstnumber.3.52) 1422 0 R (lstnumber.3.53) 1423 0 R ] >> +endobj +258 0 obj +<< /Limits [ (lstnumber.3.54) (lstnumber.3.59) ] /Names [ (lstnumber.3.54) 1424 0 R (lstnumber.3.55) 1425 0 R (lstnumber.3.56) 1426 0 R (lstnumber.3.57) 1427 0 R (lstnumber.3.58) 1428 0 R (lstnumber.3.59) 1429 0 R ] >> +endobj +259 0 obj +<< /Limits [ (lstnumber.3.6) (lstnumber.3.8) ] /Names [ (lstnumber.3.6) 1430 0 R (lstnumber.3.60) 1431 0 R (lstnumber.3.61) 1432 0 R (lstnumber.3.62) 1433 0 R (lstnumber.3.7) 1434 0 R (lstnumber.3.8) 1435 0 R ] >> +endobj +260 0 obj +<< /Limits [ (lstnumber.3.9) (lstnumber.4.13) ] /Names [ (lstnumber.3.9) 1436 0 R (lstnumber.4.1) 1437 0 R (lstnumber.4.10) 1438 0 R (lstnumber.4.11) 1439 0 R (lstnumber.4.12) 1440 0 R (lstnumber.4.13) 1441 0 R ] >> +endobj +261 0 obj +<< /Limits [ (lstnumber.4.14) (lstnumber.4.19) ] /Names [ (lstnumber.4.14) 1442 0 R (lstnumber.4.15) 1443 0 R (lstnumber.4.16) 1444 0 R (lstnumber.4.17) 1445 0 R (lstnumber.4.18) 1446 0 R (lstnumber.4.19) 1447 0 R ] >> +endobj +262 0 obj +<< /Limits [ (lstnumber.4.2) (lstnumber.4.5) ] /Names [ (lstnumber.4.2) 1448 0 R (lstnumber.4.20) 1449 0 R (lstnumber.4.21) 1450 0 R (lstnumber.4.3) 1451 0 R (lstnumber.4.4) 1452 0 R (lstnumber.4.5) 1453 0 R ] >> +endobj +263 0 obj +<< /Limits [ (lstnumber.4.6) (lstnumber.5.10) ] /Names [ (lstnumber.4.6) 1454 0 R (lstnumber.4.7) 1455 0 R (lstnumber.4.8) 1456 0 R (lstnumber.4.9) 1457 0 R (lstnumber.5.1) 1458 0 R (lstnumber.5.10) 1459 0 R ] >> +endobj +264 0 obj +<< /Limits [ (lstnumber.5.100) (lstnumber.5.105) ] /Names [ (lstnumber.5.100) 1460 0 R (lstnumber.5.101) 1461 0 R (lstnumber.5.102) 1462 0 R (lstnumber.5.103) 1463 0 R (lstnumber.5.104) 1464 0 R (lstnumber.5.105) 1465 0 R ] >> +endobj +265 0 obj +<< /Limits [ (lstnumber.5.106) (lstnumber.5.110) ] /Names [ (lstnumber.5.106) 1466 0 R (lstnumber.5.107) 1467 0 R (lstnumber.5.108) 1468 0 R (lstnumber.5.109) 1469 0 R (lstnumber.5.11) 1470 0 R (lstnumber.5.110) 1471 0 R ] >> +endobj +266 0 obj +<< /Limits [ (lstnumber.5.111) (lstnumber.5.116) ] /Names [ (lstnumber.5.111) 1472 0 R (lstnumber.5.112) 1473 0 R (lstnumber.5.113) 1474 0 R (lstnumber.5.114) 1475 0 R (lstnumber.5.115) 1476 0 R (lstnumber.5.116) 1477 0 R ] >> +endobj +267 0 obj +<< /Limits [ (lstnumber.5.117) (lstnumber.5.121) ] /Names [ (lstnumber.5.117) 1478 0 R (lstnumber.5.118) 1479 0 R (lstnumber.5.119) 1480 0 R (lstnumber.5.12) 1481 0 R (lstnumber.5.120) 1482 0 R (lstnumber.5.121) 1483 0 R ] >> +endobj +268 0 obj +<< /Limits [ (lstnumber.5.122) (lstnumber.5.127) ] /Names [ (lstnumber.5.122) 1484 0 R (lstnumber.5.123) 1485 0 R (lstnumber.5.124) 1486 0 R (lstnumber.5.125) 1487 0 R (lstnumber.5.126) 1488 0 R (lstnumber.5.127) 1489 0 R ] >> +endobj +269 0 obj +<< /Limits [ (lstnumber.5.128) (lstnumber.5.132) ] /Names [ (lstnumber.5.128) 1490 0 R (lstnumber.5.129) 1491 0 R (lstnumber.5.13) 1492 0 R (lstnumber.5.130) 1493 0 R (lstnumber.5.131) 1494 0 R (lstnumber.5.132) 1495 0 R ] >> +endobj +270 0 obj +<< /Limits [ (lstnumber.5.133) (lstnumber.5.138) ] /Names [ (lstnumber.5.133) 1496 0 R (lstnumber.5.134) 1497 0 R (lstnumber.5.135) 1498 0 R (lstnumber.5.136) 1499 0 R (lstnumber.5.137) 1500 0 R (lstnumber.5.138) 1501 0 R ] >> +endobj +271 0 obj +<< /Limits [ (lstnumber.5.139) (lstnumber.5.143) ] /Names [ (lstnumber.5.139) 1502 0 R (lstnumber.5.14) 1503 0 R (lstnumber.5.140) 1504 0 R (lstnumber.5.141) 1505 0 R (lstnumber.5.142) 1506 0 R (lstnumber.5.143) 1507 0 R ] >> +endobj +272 0 obj +<< /Limits [ (lstnumber.5.144) (lstnumber.5.149) ] /Names [ (lstnumber.5.144) 1508 0 R (lstnumber.5.145) 1509 0 R (lstnumber.5.146) 1510 0 R (lstnumber.5.147) 1511 0 R (lstnumber.5.148) 1512 0 R (lstnumber.5.149) 1513 0 R ] >> +endobj +273 0 obj +<< /Limits [ (lstnumber.5.15) (lstnumber.5.154) ] /Names [ (lstnumber.5.15) 1514 0 R (lstnumber.5.150) 1515 0 R (lstnumber.5.151) 1516 0 R (lstnumber.5.152) 1517 0 R (lstnumber.5.153) 1518 0 R (lstnumber.5.154) 1519 0 R ] >> +endobj +274 0 obj +<< /Limits [ (lstnumber.5.155) (lstnumber.5.2) ] /Names [ (lstnumber.5.155) 1520 0 R (lstnumber.5.16) 1521 0 R (lstnumber.5.17) 1522 0 R (lstnumber.5.18) 1523 0 R (lstnumber.5.19) 1524 0 R (lstnumber.5.2) 1525 0 R ] >> +endobj +275 0 obj +<< /Limits [ (lstnumber.5.20) (lstnumber.5.25) ] /Names [ (lstnumber.5.20) 1526 0 R (lstnumber.5.21) 1527 0 R (lstnumber.5.22) 1528 0 R (lstnumber.5.23) 1529 0 R (lstnumber.5.24) 1530 0 R (lstnumber.5.25) 1531 0 R ] >> +endobj +276 0 obj +<< /Limits [ (lstnumber.5.26) (lstnumber.5.30) ] /Names [ (lstnumber.5.26) 1532 0 R (lstnumber.5.27) 1533 0 R (lstnumber.5.28) 1534 0 R (lstnumber.5.29) 1535 0 R (lstnumber.5.3) 1536 0 R (lstnumber.5.30) 1537 0 R ] >> +endobj +277 0 obj +<< /Limits [ (lstnumber.5.31) (lstnumber.5.36) ] /Names [ (lstnumber.5.31) 1538 0 R (lstnumber.5.32) 1539 0 R (lstnumber.5.33) 1540 0 R (lstnumber.5.34) 1541 0 R (lstnumber.5.35) 1542 0 R (lstnumber.5.36) 1543 0 R ] >> +endobj +278 0 obj +<< /Limits [ (lstnumber.5.37) (lstnumber.5.41) ] /Names [ (lstnumber.5.37) 1544 0 R (lstnumber.5.38) 1545 0 R (lstnumber.5.39) 1546 0 R (lstnumber.5.4) 1547 0 R (lstnumber.5.40) 1548 0 R (lstnumber.5.41) 1549 0 R ] >> +endobj +279 0 obj +<< /Limits [ (lstnumber.5.42) (lstnumber.5.47) ] /Names [ (lstnumber.5.42) 1550 0 R (lstnumber.5.43) 1551 0 R (lstnumber.5.44) 1552 0 R (lstnumber.5.45) 1553 0 R (lstnumber.5.46) 1554 0 R (lstnumber.5.47) 1555 0 R ] >> +endobj +280 0 obj +<< /Limits [ (lstnumber.5.48) (lstnumber.5.52) ] /Names [ (lstnumber.5.48) 1556 0 R (lstnumber.5.49) 1557 0 R (lstnumber.5.5) 1558 0 R (lstnumber.5.50) 1559 0 R (lstnumber.5.51) 1560 0 R (lstnumber.5.52) 1561 0 R ] >> +endobj +281 0 obj +<< /Limits [ (lstnumber.5.53) (lstnumber.5.58) ] /Names [ (lstnumber.5.53) 1562 0 R (lstnumber.5.54) 1563 0 R (lstnumber.5.55) 1564 0 R (lstnumber.5.56) 1565 0 R (lstnumber.5.57) 1566 0 R (lstnumber.5.58) 1567 0 R ] >> +endobj +282 0 obj +<< /Limits [ (lstnumber.5.59) (lstnumber.5.63) ] /Names [ (lstnumber.5.59) 1568 0 R (lstnumber.5.6) 1569 0 R (lstnumber.5.60) 1570 0 R (lstnumber.5.61) 1571 0 R (lstnumber.5.62) 1572 0 R (lstnumber.5.63) 1573 0 R ] >> +endobj +283 0 obj +<< /Limits [ (lstnumber.5.64) (lstnumber.5.69) ] /Names [ (lstnumber.5.64) 1574 0 R (lstnumber.5.65) 1575 0 R (lstnumber.5.66) 1576 0 R (lstnumber.5.67) 1577 0 R (lstnumber.5.68) 1578 0 R (lstnumber.5.69) 1579 0 R ] >> +endobj +284 0 obj +<< /Limits [ (lstnumber.5.7) (lstnumber.5.74) ] /Names [ (lstnumber.5.7) 1580 0 R (lstnumber.5.70) 1581 0 R (lstnumber.5.71) 1582 0 R (lstnumber.5.72) 1583 0 R (lstnumber.5.73) 1584 0 R (lstnumber.5.74) 1585 0 R ] >> +endobj +285 0 obj +<< /Limits [ (lstnumber.5.75) (lstnumber.5.8) ] /Names [ (lstnumber.5.75) 1586 0 R (lstnumber.5.76) 1587 0 R (lstnumber.5.77) 1588 0 R (lstnumber.5.78) 1589 0 R (lstnumber.5.79) 1590 0 R (lstnumber.5.8) 1591 0 R ] >> +endobj +286 0 obj +<< /Limits [ (lstnumber.5.80) (lstnumber.5.85) ] /Names [ (lstnumber.5.80) 1592 0 R (lstnumber.5.81) 1593 0 R (lstnumber.5.82) 1594 0 R (lstnumber.5.83) 1595 0 R (lstnumber.5.84) 1596 0 R (lstnumber.5.85) 1597 0 R ] >> +endobj +287 0 obj +<< /Limits [ (lstnumber.5.86) (lstnumber.5.90) ] /Names [ (lstnumber.5.86) 1598 0 R (lstnumber.5.87) 1599 0 R (lstnumber.5.88) 1600 0 R (lstnumber.5.89) 1601 0 R (lstnumber.5.9) 1602 0 R (lstnumber.5.90) 1603 0 R ] >> +endobj +288 0 obj +<< /Limits [ (lstnumber.5.91) (lstnumber.5.96) ] /Names [ (lstnumber.5.91) 1604 0 R (lstnumber.5.92) 1605 0 R (lstnumber.5.93) 1606 0 R (lstnumber.5.94) 1607 0 R (lstnumber.5.95) 1608 0 R (lstnumber.5.96) 1609 0 R ] >> +endobj +289 0 obj +<< /Limits [ (lstnumber.5.97) (lstnumber.6.100) ] /Names [ (lstnumber.5.97) 1610 0 R (lstnumber.5.98) 1611 0 R (lstnumber.5.99) 1612 0 R (lstnumber.6.1) 1613 0 R (lstnumber.6.10) 1614 0 R (lstnumber.6.100) 1615 0 R ] >> +endobj +290 0 obj +<< /Limits [ (lstnumber.6.101) (lstnumber.6.106) ] /Names [ (lstnumber.6.101) 1616 0 R (lstnumber.6.102) 1617 0 R (lstnumber.6.103) 1618 0 R (lstnumber.6.104) 1619 0 R (lstnumber.6.105) 1620 0 R (lstnumber.6.106) 1621 0 R ] >> +endobj +291 0 obj +<< /Limits [ (lstnumber.6.107) (lstnumber.6.111) ] /Names [ (lstnumber.6.107) 1622 0 R (lstnumber.6.108) 1623 0 R (lstnumber.6.109) 1624 0 R (lstnumber.6.11) 1625 0 R (lstnumber.6.110) 1626 0 R (lstnumber.6.111) 1627 0 R ] >> +endobj +292 0 obj +<< /Limits [ (lstnumber.6.112) (lstnumber.6.117) ] /Names [ (lstnumber.6.112) 1628 0 R (lstnumber.6.113) 1629 0 R (lstnumber.6.114) 1630 0 R (lstnumber.6.115) 1631 0 R (lstnumber.6.116) 1632 0 R (lstnumber.6.117) 1633 0 R ] >> +endobj +293 0 obj +<< /Limits [ (lstnumber.6.118) (lstnumber.6.13) ] /Names [ (lstnumber.6.118) 1634 0 R (lstnumber.6.119) 1635 0 R (lstnumber.6.12) 1636 0 R (lstnumber.6.120) 1637 0 R (lstnumber.6.121) 1638 0 R (lstnumber.6.13) 1639 0 R ] >> +endobj +294 0 obj +<< /Limits [ (lstnumber.6.14) (lstnumber.6.19) ] /Names [ (lstnumber.6.14) 1640 0 R (lstnumber.6.15) 1641 0 R (lstnumber.6.16) 1642 0 R (lstnumber.6.17) 1643 0 R (lstnumber.6.18) 1644 0 R (lstnumber.6.19) 1645 0 R ] >> +endobj +295 0 obj +<< /Limits [ (lstnumber.6.2) (lstnumber.6.24) ] /Names [ (lstnumber.6.2) 1646 0 R (lstnumber.6.20) 1647 0 R (lstnumber.6.21) 1648 0 R (lstnumber.6.22) 1649 0 R (lstnumber.6.23) 1650 0 R (lstnumber.6.24) 1651 0 R ] >> +endobj +296 0 obj +<< /Limits [ (lstnumber.6.25) (lstnumber.6.3) ] /Names [ (lstnumber.6.25) 1652 0 R (lstnumber.6.26) 1653 0 R (lstnumber.6.27) 1654 0 R (lstnumber.6.28) 1655 0 R (lstnumber.6.29) 1656 0 R (lstnumber.6.3) 1657 0 R ] >> +endobj +297 0 obj +<< /Limits [ (lstnumber.6.30) (lstnumber.6.35) ] /Names [ (lstnumber.6.30) 1658 0 R (lstnumber.6.31) 1659 0 R (lstnumber.6.32) 1660 0 R (lstnumber.6.33) 1661 0 R (lstnumber.6.34) 1662 0 R (lstnumber.6.35) 1663 0 R ] >> +endobj +298 0 obj +<< /Limits [ (lstnumber.6.36) (lstnumber.6.40) ] /Names [ (lstnumber.6.36) 1664 0 R (lstnumber.6.37) 1665 0 R (lstnumber.6.38) 1666 0 R (lstnumber.6.39) 1667 0 R (lstnumber.6.4) 1668 0 R (lstnumber.6.40) 1669 0 R ] >> +endobj +299 0 obj +<< /Limits [ (lstnumber.6.41) (lstnumber.6.46) ] /Names [ (lstnumber.6.41) 1670 0 R (lstnumber.6.42) 1671 0 R (lstnumber.6.43) 1672 0 R (lstnumber.6.44) 1673 0 R (lstnumber.6.45) 1674 0 R (lstnumber.6.46) 1675 0 R ] >> +endobj +300 0 obj +<< /Limits [ (lstnumber.6.47) (lstnumber.6.51) ] /Names [ (lstnumber.6.47) 1676 0 R (lstnumber.6.48) 1677 0 R (lstnumber.6.49) 1678 0 R (lstnumber.6.5) 1679 0 R (lstnumber.6.50) 1680 0 R (lstnumber.6.51) 1681 0 R ] >> +endobj +301 0 obj +<< /Limits [ (lstnumber.6.52) (lstnumber.6.57) ] /Names [ (lstnumber.6.52) 1682 0 R (lstnumber.6.53) 1683 0 R (lstnumber.6.54) 1684 0 R (lstnumber.6.55) 1685 0 R (lstnumber.6.56) 1686 0 R (lstnumber.6.57) 1687 0 R ] >> +endobj +302 0 obj +<< /Limits [ (lstnumber.6.58) (lstnumber.6.62) ] /Names [ (lstnumber.6.58) 1688 0 R (lstnumber.6.59) 1689 0 R (lstnumber.6.6) 1690 0 R (lstnumber.6.60) 1691 0 R (lstnumber.6.61) 1692 0 R (lstnumber.6.62) 1693 0 R ] >> +endobj +303 0 obj +<< /Limits [ (lstnumber.6.63) (lstnumber.6.68) ] /Names [ (lstnumber.6.63) 1694 0 R (lstnumber.6.64) 1695 0 R (lstnumber.6.65) 1696 0 R (lstnumber.6.66) 1697 0 R (lstnumber.6.67) 1698 0 R (lstnumber.6.68) 1699 0 R ] >> +endobj +304 0 obj +<< /Limits [ (lstnumber.6.69) (lstnumber.6.73) ] /Names [ (lstnumber.6.69) 1700 0 R (lstnumber.6.7) 1701 0 R (lstnumber.6.70) 1702 0 R (lstnumber.6.71) 1703 0 R (lstnumber.6.72) 1704 0 R (lstnumber.6.73) 1705 0 R ] >> +endobj +305 0 obj +<< /Limits [ (lstnumber.6.74) (lstnumber.6.79) ] /Names [ (lstnumber.6.74) 1706 0 R (lstnumber.6.75) 1707 0 R (lstnumber.6.76) 1708 0 R (lstnumber.6.77) 1709 0 R (lstnumber.6.78) 1710 0 R (lstnumber.6.79) 1711 0 R ] >> +endobj +306 0 obj +<< /Limits [ (lstnumber.6.8) (lstnumber.6.84) ] /Names [ (lstnumber.6.8) 1712 0 R (lstnumber.6.80) 1713 0 R (lstnumber.6.81) 1714 0 R (lstnumber.6.82) 1715 0 R (lstnumber.6.83) 1716 0 R (lstnumber.6.84) 1717 0 R ] >> +endobj +307 0 obj +<< /Limits [ (lstnumber.6.85) (lstnumber.6.9) ] /Names [ (lstnumber.6.85) 1718 0 R (lstnumber.6.86) 1719 0 R (lstnumber.6.87) 1720 0 R (lstnumber.6.88) 1721 0 R (lstnumber.6.89) 1722 0 R (lstnumber.6.9) 1723 0 R ] >> +endobj +308 0 obj +<< /Limits [ (lstnumber.6.90) (lstnumber.6.95) ] /Names [ (lstnumber.6.90) 1724 0 R (lstnumber.6.91) 1725 0 R (lstnumber.6.92) 1726 0 R (lstnumber.6.93) 1727 0 R (lstnumber.6.94) 1728 0 R (lstnumber.6.95) 1729 0 R ] >> +endobj +309 0 obj +<< /Limits [ (lstnumber.6.96) (lstnumber.7.10) ] /Names [ (lstnumber.6.96) 1730 0 R (lstnumber.6.97) 1731 0 R (lstnumber.6.98) 1732 0 R (lstnumber.6.99) 1733 0 R (lstnumber.7.1) 1734 0 R (lstnumber.7.10) 1735 0 R ] >> +endobj +310 0 obj +<< /Limits [ (lstnumber.7.11) (lstnumber.7.16) ] /Names [ (lstnumber.7.11) 1736 0 R (lstnumber.7.12) 1737 0 R (lstnumber.7.13) 1738 0 R (lstnumber.7.14) 1739 0 R (lstnumber.7.15) 1740 0 R (lstnumber.7.16) 1741 0 R ] >> +endobj +311 0 obj +<< /Limits [ (lstnumber.7.17) (lstnumber.7.21) ] /Names [ (lstnumber.7.17) 1742 0 R (lstnumber.7.18) 1743 0 R (lstnumber.7.19) 1744 0 R (lstnumber.7.2) 1745 0 R (lstnumber.7.20) 1746 0 R (lstnumber.7.21) 1747 0 R ] >> +endobj +312 0 obj +<< /Limits [ (lstnumber.7.22) (lstnumber.7.27) ] /Names [ (lstnumber.7.22) 1748 0 R (lstnumber.7.23) 1749 0 R (lstnumber.7.24) 1750 0 R (lstnumber.7.25) 1751 0 R (lstnumber.7.26) 1752 0 R (lstnumber.7.27) 1753 0 R ] >> +endobj +313 0 obj +<< /Limits [ (lstnumber.7.28) (lstnumber.7.4) ] /Names [ (lstnumber.7.28) 1754 0 R (lstnumber.7.29) 1755 0 R (lstnumber.7.3) 1756 0 R (lstnumber.7.30) 1757 0 R (lstnumber.7.31) 1758 0 R (lstnumber.7.4) 1759 0 R ] >> +endobj +314 0 obj +<< /Limits [ (lstnumber.7.5) (lstnumber.8.1) ] /Names [ (lstnumber.7.5) 1760 0 R (lstnumber.7.6) 1761 0 R (lstnumber.7.7) 1762 0 R (lstnumber.7.8) 1763 0 R (lstnumber.7.9) 1764 0 R (lstnumber.8.1) 1765 0 R ] >> +endobj +315 0 obj +<< /Limits [ (lstnumber.8.10) (lstnumber.8.15) ] /Names [ (lstnumber.8.10) 1766 0 R (lstnumber.8.11) 1767 0 R (lstnumber.8.12) 1768 0 R (lstnumber.8.13) 1769 0 R (lstnumber.8.14) 1770 0 R (lstnumber.8.15) 1771 0 R ] >> +endobj +316 0 obj +<< /Limits [ (lstnumber.8.16) (lstnumber.8.20) ] /Names [ (lstnumber.8.16) 1772 0 R (lstnumber.8.17) 1773 0 R (lstnumber.8.18) 1774 0 R (lstnumber.8.19) 1775 0 R (lstnumber.8.2) 1776 0 R (lstnumber.8.20) 1777 0 R ] >> +endobj +317 0 obj +<< /Limits [ (lstnumber.8.21) (lstnumber.8.26) ] /Names [ (lstnumber.8.21) 1778 0 R (lstnumber.8.22) 1779 0 R (lstnumber.8.23) 1780 0 R (lstnumber.8.24) 1781 0 R (lstnumber.8.25) 1782 0 R (lstnumber.8.26) 1783 0 R ] >> +endobj +318 0 obj +<< /Limits [ (lstnumber.8.27) (lstnumber.8.31) ] /Names [ (lstnumber.8.27) 1784 0 R (lstnumber.8.28) 1785 0 R (lstnumber.8.29) 1786 0 R (lstnumber.8.3) 1787 0 R (lstnumber.8.30) 1788 0 R (lstnumber.8.31) 1789 0 R ] >> +endobj +319 0 obj +<< /Limits [ (lstnumber.8.32) (lstnumber.8.37) ] /Names [ (lstnumber.8.32) 1790 0 R (lstnumber.8.33) 1791 0 R (lstnumber.8.34) 1792 0 R (lstnumber.8.35) 1793 0 R (lstnumber.8.36) 1794 0 R (lstnumber.8.37) 1795 0 R ] >> +endobj +320 0 obj +<< /Limits [ (lstnumber.8.4) (lstnumber.8.9) ] /Names [ (lstnumber.8.4) 1796 0 R (lstnumber.8.5) 1797 0 R (lstnumber.8.6) 1798 0 R (lstnumber.8.7) 1799 0 R (lstnumber.8.8) 1800 0 R (lstnumber.8.9) 1801 0 R ] >> +endobj +321 0 obj +<< /Limits [ (page.1) (page.14) ] /Names [ (page.1) 1802 0 R (page.10) 1803 0 R (page.11) 1804 0 R (page.12) 1805 0 R (page.13) 1806 0 R (page.14) 1807 0 R ] >> +endobj +322 0 obj +<< /Limits [ (page.15) (page.2) ] /Names [ (page.15) 1808 0 R (page.16) 1809 0 R (page.17) 1810 0 R (page.18) 1811 0 R (page.19) 1812 0 R (page.2) 1813 0 R ] >> +endobj +323 0 obj +<< /Limits [ (page.20) (page.25) ] /Names [ (page.20) 1814 0 R (page.21) 1815 0 R (page.22) 1816 0 R (page.23) 1817 0 R (page.24) 1818 0 R (page.25) 1819 0 R ] >> +endobj +324 0 obj +<< /Limits [ (page.26) (page.30) ] /Names [ (page.26) 1820 0 R (page.27) 1821 0 R (page.28) 1822 0 R (page.29) 1823 0 R (page.3) 1824 0 R (page.30) 1825 0 R ] >> +endobj +325 0 obj +<< /Limits [ (page.31) (page.36) ] /Names [ (page.31) 1826 0 R (page.32) 1827 0 R (page.33) 1828 0 R (page.34) 1829 0 R (page.35) 1830 0 R (page.36) 1831 0 R ] >> +endobj +326 0 obj +<< /Limits [ (page.37) (page.41) ] /Names [ (page.37) 1832 0 R (page.38) 1833 0 R (page.39) 1834 0 R (page.4) 1835 0 R (page.40) 1836 0 R (page.41) 1837 0 R ] >> +endobj +327 0 obj +<< /Limits [ (page.42) (page.47) ] /Names [ (page.42) 1838 0 R (page.43) 1839 0 R (page.44) 1840 0 R (page.45) 1841 0 R (page.46) 1842 0 R (page.47) 1843 0 R ] >> +endobj +328 0 obj +<< /Limits [ (page.48) (page.52) ] /Names [ (page.48) 1844 0 R (page.49) 1845 0 R (page.5) 1846 0 R (page.50) 1847 0 R (page.51) 1848 0 R (page.52) 1849 0 R ] >> +endobj +329 0 obj +<< /Limits [ (page.53) (page.58) ] /Names [ (page.53) 1850 0 R (page.54) 1851 0 R (page.55) 1852 0 R (page.56) 1853 0 R (page.57) 1854 0 R (page.58) 1855 0 R ] >> +endobj +330 0 obj +<< /Limits [ (page.59) (page.63) ] /Names [ (page.59) 1856 0 R (page.6) 1857 0 R (page.60) 1858 0 R (page.61) 1859 0 R (page.62) 1860 0 R (page.63) 1861 0 R ] >> +endobj +331 0 obj +<< /Limits [ (page.64) (page.69) ] /Names [ (page.64) 1862 0 R (page.65) 1863 0 R (page.66) 1864 0 R (page.67) 1865 0 R (page.68) 1866 0 R (page.69) 1867 0 R ] >> +endobj +332 0 obj +<< /Limits [ (page.7) (page.74) ] /Names [ (page.7) 1868 0 R (page.70) 1869 0 R (page.71) 1870 0 R (page.72) 1871 0 R (page.73) 1872 0 R (page.74) 1873 0 R ] >> +endobj +333 0 obj +<< /Limits [ (page.75) (page.8) ] /Names [ (page.75) 1874 0 R (page.76) 1875 0 R (page.77) 1876 0 R (page.78) 1877 0 R (page.79) 1878 0 R (page.8) 1879 0 R ] >> +endobj +334 0 obj +<< /Limits [ (page.80) (page.85) ] /Names [ (page.80) 1880 0 R (page.81) 1881 0 R (page.82) 1882 0 R (page.83) 1883 0 R (page.84) 1884 0 R (page.85) 1885 0 R ] >> +endobj +335 0 obj +<< /Limits [ (page.86) (section.4) ] /Names [ (page.86) 1886 0 R (page.9) 1887 0 R (section.1) 1888 0 R (section.2) 1889 0 R (section.3) 1890 0 R (section.4) 1891 0 R ] >> +endobj +336 0 obj +<< /Limits [ (section.5) (subfigure.1.2) ] /Names [ (section.5) 1892 0 R (section.6) 1893 0 R (section.7) 1894 0 R (storelineno.1) 1895 0 R (subfigure.1.1) 1896 0 R (subfigure.1.2) 1897 0 R ] >> +endobj +337 0 obj +<< /Limits [ (subfigure.15.1) (subsection.2.2) ] /Names [ (subfigure.15.1) 1898 0 R (subfigure.16.1) 1899 0 R (subfigure.9.1) 1900 0 R (subfigure.9.2) 1901 0 R (subsection.2.1) 1902 0 R (subsection.2.2) 1903 0 R ] >> +endobj +338 0 obj +<< /Limits [ (subsection.2.3) (subsection.A.3) ] /Names [ (subsection.2.3) 1904 0 R (subsection.3.1) 1905 0 R (subsection.3.2) 1906 0 R (subsection.A.1) 1907 0 R (subsection.A.2) 1908 0 R (subsection.A.3) 1909 0 R ] >> +endobj +339 0 obj +<< /Limits [ (subsection.B.1) (subsection.B.6) ] /Names [ (subsection.B.1) 1910 0 R (subsection.B.2) 1911 0 R (subsection.B.3) 1912 0 R (subsection.B.4) 1913 0 R (subsection.B.5) 1914 0 R (subsection.B.6) 1915 0 R ] >> +endobj +340 0 obj +<< /Limits [ (subsection.C.1) (subsection.E.1) ] /Names [ (subsection.C.1) 1916 0 R (subsection.C.2) 1917 0 R (subsection.D.1) 1918 0 R (subsection.D.2) 1919 0 R (subsection.D.3) 1920 0 R (subsection.E.1) 1921 0 R ] >> +endobj +341 0 obj +<< /Limits [ (subsection.E.2) (subsection.G.1) ] /Names [ (subsection.E.2) 1922 0 R (subsection.E.3) 1923 0 R (subsection.E.4) 1924 0 R (subsection.E.5) 1925 0 R (subsection.F.1) 1926 0 R (subsection.G.1) 1927 0 R ] >> +endobj +342 0 obj +<< /Limits [ (subsection.G.2) (subsubsection.3.2.2) ] /Names [ (subsection.G.2) 1928 0 R (subsection.H.1) 1929 0 R (subsection.H.2) 1930 0 R (subsection.H.3) 1931 0 R (subsubsection.3.2.1) 1932 0 R (subsubsection.3.2.2) 1933 0 R ] >> +endobj +343 0 obj +<< /Limits [ (subsubsection.B.3.1) (subsubsection.B.4.3) ] /Names [ (subsubsection.B.3.1) 1934 0 R (subsubsection.B.3.2) 1935 0 R (subsubsection.B.3.3) 1936 0 R (subsubsection.B.4.1) 1937 0 R (subsubsection.B.4.2) 1938 0 R (subsubsection.B.4.3) 1939 0 R ] >> +endobj +344 0 obj +<< /Limits [ (subsubsection.B.4.4) (subsubsection.D.3.5) ] /Names [ (subsubsection.B.4.4) 1940 0 R (subsubsection.D.3.1) 1941 0 R (subsubsection.D.3.2) 1942 0 R (subsubsection.D.3.3) 1943 0 R (subsubsection.D.3.4) 1944 0 R (subsubsection.D.3.5) 1945 0 R ] >> +endobj +345 0 obj +<< /Limits [ (table.caption.1) (table.caption.21) ] /Names [ (table.caption.1) 1946 0 R (table.caption.10) 1947 0 R (table.caption.11) 1948 0 R (table.caption.12) 1949 0 R (table.caption.17) 1950 0 R (table.caption.21) 1951 0 R ] >> +endobj +346 0 obj +<< /Limits [ (table.caption.23) (table.caption.31) ] /Names [ (table.caption.23) 1952 0 R (table.caption.25) 1953 0 R (table.caption.26) 1954 0 R (table.caption.28) 1955 0 R (table.caption.3) 1956 0 R (table.caption.31) 1957 0 R ] >> +endobj +347 0 obj +<< /Limits [ (table.caption.32) (table.caption.37) ] /Names [ (table.caption.32) 1958 0 R (table.caption.33) 1959 0 R (table.caption.34) 1960 0 R (table.caption.35) 1961 0 R (table.caption.36) 1962 0 R (table.caption.37) 1963 0 R ] >> +endobj +348 0 obj +<< /Limits [ (table.caption.38) (table.caption.43) ] /Names [ (table.caption.38) 1964 0 R (table.caption.39) 1965 0 R (table.caption.40) 1966 0 R (table.caption.41) 1967 0 R (table.caption.42) 1968 0 R (table.caption.43) 1969 0 R ] >> +endobj +349 0 obj +<< /Limits [ (table.caption.44) (table.caption.49) ] /Names [ (table.caption.44) 1970 0 R (table.caption.45) 1971 0 R (table.caption.46) 1972 0 R (table.caption.47) 1973 0 R (table.caption.48) 1974 0 R (table.caption.49) 1975 0 R ] >> +endobj +350 0 obj +<< /Limits [ (table.caption.5) (table.caption.9) ] /Names [ (table.caption.5) 1976 0 R (table.caption.9) 1977 0 R ] >> +endobj +351 0 obj +<< /A << /D (cite.dsviii) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 331.695 680.848 396.098 693.809 ] /Subtype /Link /Type /Annot >> +endobj +352 0 obj +<< /A << /D (cite.dsviii) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 399.505 680.848 428.875 693.809 ] /Subtype /Link /Type /Annot >> +endobj +353 0 obj +<< /A << /D (cite.deepseekmath) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 251.73 667.298 301.483 680.26 ] /Subtype /Link /Type /Annot >> +endobj +354 0 obj +<< /A << /D (cite.deepseekmath) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 304.668 667.298 328.042 680.26 ] /Subtype /Link /Type /Annot >> +endobj +355 0 obj +<< /A << /D (section.2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 319.757 586.003 327.313 598.965 ] /Subtype /Link /Type /Annot >> +endobj +356 0 obj +<< /A << /D (section.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 195.644 403.089 202.982 416.05 ] /Subtype /Link /Type /Annot >> +endobj +357 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 69.87 261.232 286.561 274.225 ] /Subtype /Link /Type /Annot >> +endobj +358 0 obj +<< /A << /D (cite.deepseekmath) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 321.299 175.166 372.371 188.128 ] /Subtype /Link /Type /Annot >> +endobj +359 0 obj +<< /A << /D (cite.deepseekmath) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 375.833 175.166 399.644 188.128 ] /Subtype /Link /Type /Annot >> +endobj +360 0 obj +<< /A << /D (cite.deepseekmath) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 105.89 121.614 155.239 134.576 ] /Subtype /Link /Type /Annot >> +endobj +361 0 obj +<< /A << /D (cite.deepseekmath) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 158.222 121.614 181.596 134.576 ] /Subtype /Link /Type /Annot >> +endobj +362 0 obj +<< /A << /D (cite.schulman2017proximal) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 419.612 94.516 493.817 107.477 ] /Subtype /Link /Type /Annot >> +endobj +363 0 obj +<< /A << /D (cite.schulman2017proximal) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 497.162 94.516 520.537 107.477 ] /Subtype /Link /Type /Annot >> +endobj +364 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 295.827 80.967 362.499 93.928 ] /Subtype /Link /Type /Annot >> +endobj +365 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 365.961 80.967 389.772 93.928 ] /Subtype /Link /Type /Annot >> +endobj +366 0 obj +<< /Filter /FlateDecode /Length 3197 >> +stream +xڕYI۸ϯБ& L.&~Te&D"5>*n 6~wCo/"ܼ7D0lM*6Y9߼^QziFg.R\۲!lNFLq?=<<9Elݶ[mMw;( |IɯLf'G-B"dIbΚbh8Hn4(Uy;8$l)#+J9ufd vO_Ogd>hۍO?^wvͤ8φTH8DvG<2~uGS*%ipέ["z4/I>\g'0=|IPuUWOp2h^pN"9,]C>TfHR_Xk0dDx-R<TeےF8VZB| Ga|f &ǩ88T%x@00c'[}Ev⯶Ҍk MF s=w((.b#"H ~YVKǴ?DhdjFHT 9 O0RuT]TxmH|vjJtTT@.*(ވ(BK~} eDKO>94)kWฏ0k,lW +H0>vnusI6 I// kvNx !EznA l݁J<`<] .Kt~aF4l[kGc|=a9tG+ron!@ Qv }XO0'C: ZG2 +fv3ySrf>p{7 IHUgxL0 ntQ0'FJN oǚ+0oچ3|Abn@l*` +kcU%/ ,Ql132hRHɚ% 2 |)q:*\J$@hE + =g ܰ0Wj 8q^g $E&85ȗw$\޺ptWUIxW(Ap尉9]jw%ײҜKt3e6VSwݳK0ӫ.s!md#pMkΥ 2A.y> `A$Kc?/SO0ݻz>0]i+޾k_`\cdH'p~2T*]mA͜񶣢p)dzָVWwpk.= %dyx-  !U#>EGH÷QXD~ל4.\qiU%r ؓz;:uZ +q۱ԍ)ׁ-Y*,RP(+ȅz]AP O2חZ^K|Ɂ%_Xs/ +͊ךS& qQ⧹1 +;Z8%$PE8譞I`q(<Ң0]kxx<խ@˴n/jG`bj^n! Pǂ|x'9Si54RD4$d|F ^ :~].RyBObm.tC\؂,p-Sl3<9"i6ϋKUkY EV!V&O{etA_ +8ڹ Uʁ5pI9X4_޴赵n(HQ#Fo\~ +endstream +endobj +367 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F171 1978 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +368 0 obj +<< /A << /D (subsection.A.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 371.804 529.362 390.149 542.323 ] /Subtype /Link /Type /Annot >> +endobj +369 0 obj +<< /A << /D (subsection.B.1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 422.721 258.685 439.264 271.647 ] /Subtype /Link /Type /Annot >> +endobj +370 0 obj +<< /Filter /FlateDecode /Length 4065 >> +stream +x[bSEv\& *B8ݮNX`atO+ȗۑ4~{f/n|#?~O YSx~ _B,cӆyYH>.R$VWu^|>::1!sF@xɤagϾZUٗyE.Ov==*j`Ḩ297zK;6K0Y,szaq/)&s{N +H5c%z(o陑]*v8%b)k[Z?@y7))ipf%Wz9Rc7Sc2&7dmm\Sc+՛9(ɔ4j;˜CD4՚I U@L_,J40q R%iLE GbS>P#rڛ:/gu`z 6GLn2`2(md7 ?j݀0@T%L39-P`4 +~]I.Zon 61^36AnSl'@v~nڑS-.8]TGqz M#AfsMԊ!'R<Ċ5$a3Ϛq3[ߌY@oujN !@-&H;-Oe 䎼KBT^7(Єuɪ,>Z}<1OH;vwc1̮.=Bf ⹬J +|;|#5a;t ܏(v +Q;XB,>dt.f"df f:%y#p\JC )au^xSr\cKYt.nD5F{S\0&?7/5<\XQ!J:t6С`@0`\tL(Lq6'pkXvl$|Ms.9տ踀BY71|_g*$ҮC?Kf~PA +̭7v] '{R7>ӿ*H U"<<1RKnYP S/̽vo%@YQJOUH@;LuG*lVn[guF(LwZ'm2)VQuLq#a'ا#V} r#߮ϷKIʟ }y7S."L=H'];Ë7:{ +ʘ!kT'jm +ɞ=9&$6bXw~XmF<nl6$"&*n4 +:zjv0o9WY[]}" +W MtԮXy+`%7Uü부P?ǯ{GXBDfI,v; 89DMi̻5Mrv.56\~]!Bth]X*X N{ D%jۚ{ i a+ {T,C~)]Эux'Ġ +B} wÞ(2)␫8ױ.⧐st=cqGx%ba p-5 KĚ +endstream +endobj +371 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F171 1978 0 R /F185 1979 0 R /F249 1980 0 R /F251 1981 0 R /F263 1982 0 R /F267 1983 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +372 0 obj +<< /A << /D (table.caption.49) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 377.542 552.524 390.443 565.486 ] /Subtype /Link /Type /Annot >> +endobj +373 0 obj +<< /A << /D (subsection.D.1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 227.468 538.975 246.086 551.937 ] /Subtype /Link /Type /Annot >> +endobj +374 0 obj +<< /A << /D (figure.caption.2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 122.669 121.821 130.226 134.782 ] /Subtype /Link /Type /Annot >> +endobj +375 0 obj +<< /A << /D (cite.wangself) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 273.173 81.173 328.947 94.134 ] /Subtype /Link /Type /Annot >> +endobj +376 0 obj +<< /A << /D (cite.wangself) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 332.443 81.173 361.311 94.134 ] /Subtype /Link /Type /Annot >> +endobj +377 0 obj +<< /Filter /FlateDecode /Length 2427 >> +stream +xڍXmB_Z'is₻-Ze[YR$yͯ g(K^9( gyFq wS ϣȂTQ:rI0k!;޼?$CI"`UW@;+soL.\'e%R뙤y{N"qTƥh:H* ;;+QfNR~|.I| ,BKBLqkx +$co1'c?͎f EMa@?lk`R2/I4R'lGnjsqzڦ;lAx؀qH<ߌ2 5F2q0|'.Nm3^KO%iRU[ck?T3ͨz >arl`jeF?Mw2T٭`[A7NVuv <;MH%_pQ8?=tfmB|msf& +Iޡ{rOmݸ0Y DQXVOX]3샕[bе} m'zhHN w 38Y2Khk$rpIߒCD!U)pϭE9\ e)d7ۄS=\B缿*\z#,T, +jg)sh +endstream +endobj +378 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F171 1978 0 R /F249 1980 0 R /F251 1981 0 R /F263 1982 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im2 1984 0 R /Im3 1985 0 R >> >> +endobj +379 0 obj +<< /A << /D (figure.caption.18) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 116.065 416.076 128.967 429.038 ] /Subtype /Link /Type /Annot >> +endobj +380 0 obj +<< /A << /D (figure.caption.2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 189.657 334.781 197.213 347.743 ] /Subtype /Link /Type /Annot >> +endobj +381 0 obj +<< /A << /D (figure.caption.16) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 492.13 246.711 499.686 259.673 ] /Subtype /Link /Type /Annot >> +endobj +382 0 obj +<< /A << /D (subsection.C.2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 148.343 233.162 166.538 246.124 ] /Subtype /Link /Type /Annot >> +endobj +383 0 obj +<< /A << /D (table.caption.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 69.87 206.064 77.426 219.025 ] /Subtype /Link /Type /Annot >> +endobj +384 0 obj +<< /A << /D (figure.caption.16) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 103.001 192.515 110.339 205.476 ] /Subtype /Link /Type /Annot >> +endobj +385 0 obj +<< /A << /D (subsection.C.2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 211.247 192.515 228.837 205.476 ] /Subtype /Link /Type /Annot >> +endobj +386 0 obj +<< /Filter /FlateDecode /Length 3232 >> +stream +xZ[o~KQX1s ES IAm(򵟤T=&bU~eI,o"+ꮧ.oKʝ᡺S'`c +uy AiaPW^PI@T20!2X/>B ~ H$3=ADh& "xYRBɢ@$mN#*_[Np `(2 >L~<.'dA_*'\k=}STEjޖ(cR +"s01CM%DS.JJ\a'LpBϖ9f"r@mPF"Hd4 ̞4>!TBI1餲̉?oD_;/|( _"$Ŕ/"b_15ƼSS0u [͘QaLT=ozgMqd3,pE=R> %`"Le"1%Dٟm=OgB[+oۿ:7mV;ۿrn +v7/HM/sa6.Dr#aVbQ@D!σ-Rţ0Vr. /Ϡ/K2BGHDa,`Ǚ,b!(ʃe +9D` tJT],uyЄc[> < ,ڵ|٘v/ /2HhO4EHL&܄' 8vi|`VYU8볇ރeC`cL7;>5!i ,xG3) 0TzJQZSc{MR|moV)M!#{PA6;f>#Ua,y1DUssv3EvAeP3h耢'JwRPz1: } +pL/</L/sԩ# zu0 I'2![8u6w_k0-o]};?-qR`?k \ w\ntzWG ;HfE7py"ru߉ހ d]vu;9j_'re̥SA6n&}}6"Ĉ>RwBg$L>;#!a?!4q /z,%4A,>7\T xM^7,x+׶k$u/:"L5hbΆ)'q i(Svgv9/lF3``ei@Gs;n,΀=$N1~RyUuI|6KN揷O|{ΞWEN8AOXCz(%­[D @AuW;F|ڼUz[. ]l}o H`brEzke+|[7o{;C4 j5 I&sH,٭3Gd%Tdks%r6캽 +jPmVu"o-@0vp F;Wn!׻Uw%|B4#!XD.yo!~)qӝ<*4QHl7vuզWf<لvh:vANŶ6:[ubWE(ҷk׍F;/)8CvS1^+VtFͺSSSª[յp2UǛP? rF܁{™*|*/H56ʟCY297auO0!pn1CtyTRݺ{E+ۇf>0IZ3j_uMq?䅣 ;i4k66fNwIEd'F˪ˆIW9= x"aB}嫼usgnVe{Sƫ3]{5?y7G,`t]յ5\f267^lj NgB̮˶>-Md6sH@:327K{-i8 l?R䳎Z+.ʗ.cn.j +=#j^4ؠl&4DDZFOQ 2ڞlƍwStTWKȆ9j[ݨPTC+?KWѺk=a`4C#г_xʏa8QG`\OzdݥfUm[: +<7'_ۥ'Nd؅;'*vp+?HAU46v A`ئ j68mlܠÑKӭw3>8qV89LkG A ,:܃):6F3|`ژ5ʵNCf2%/{L"'qá0/x2黐ق}iI`q0$xC媪.sRD,і*iƍ*kIu:C8v`^# l ?U-hdb+j.Fl]뉣HdCwxNY]]"1ۜ՗nG̻,C 6Ldftv d}x>~uL+r33hG܍lLܾQ׿ k[pA `Ԝ:_S5mBuzf"LCdNw6ՍK:gsIWvסKyORNQU]; +\J988g~zCffvfsﭽ:= ;(쀖>;QK"uv%PXHSdrNB"ZAuIEP(UT[[Oif8Il,Do˲KgӼ.s!%I(?l㨯GMz;s͇d]LlHKID +endstream +endobj +387 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F171 1978 0 R /F249 1980 0 R /F251 1981 0 R /F263 1982 0 R /F267 1983 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +388 0 obj +<< /A << /D (subsection.A.1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 339.252 517.257 357.913 530.219 ] /Subtype /Link /Type /Annot >> +endobj +389 0 obj +<< /A << /D (figure.caption.4) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 445.246 402.807 452.694 415.768 ] /Subtype /Link /Type /Annot >> +endobj +390 0 obj +<< /A << /D (subsection.3.1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 510.05 267.315 525.951 280.276 ] /Subtype /Link /Type /Annot >> +endobj +391 0 obj +<< /A << /D (subsection.3.2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 389.915 253.765 405.271 266.727 ] /Subtype /Link /Type /Annot >> +endobj +392 0 obj +<< /A << /D (subsection.B.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 147.007 226.667 163.847 239.628 ] /Subtype /Link /Type /Annot >> +endobj +393 0 obj +<< /Filter /FlateDecode /Length 2112 >> +stream +xuXM -rU[ʒrl69dƵ&bܖD(u @,k$Rv8CM8H".se.8GwM{&deLXMo|e):jBS&"+.o*7T@>XU;4<+{cMyyUo. 4Dp"2I8 ryN+D(n8I1~qJh S#i#DkKDZV#YQOɑFA 7vVty "d9'S+lF8݋+ @ͳ]Äi8k}|_W5듺ajx6[CRȫH \pW,vT]ߊ_>GZĆwPIVQuG0{\B9X S l=7֋a%!GC(be H0Ӟ ^vjO|Qm/. ;mg*Wdi ~Hjd*gHNk8<Ғ䁽G +;8W)L4I`:UkW]Jb?JR~HCXCZRx~\i6!׵ CT +$8䣞4$a}s)a;gق\ +8R9!T ]EELjh* +:C[(?*YU5XGcEn䬚yjP[T@E0Y-a\놩j,iS@eو7Su~k$lJI?̪kk % zxfuu!ݣi{);-K_"<<1 $Փ,xzn?9 a8pICYp Dl}2HgCq5y0p@uf\G<~T(-}S1W)dVA٭McNZ~aJJݭO A:k-K, +Ay|V;7y >D>}m] i}7"]ۻKNU8“ ?,@ĽqM\Ar=L+B9NL"@7Cqq:$TGCS~>0OutGI6E |tjSo,]*qBB֦yș[ȁd5t bIz(Jƻ,nprKC ;FY8аl en fJߡQ3d sU܁nةm \3vf99>έ ,-P]):F/'=\^-2Ć7}MЙoPOcd4[C$҄vBXjRo&,@ͅ7V4^5Y,8{Ya"D]F^W+DU6kpF ݨ +甂xY,$tm_PI}k3؀%jZW+z[vFA5:|r~4;>N7#KF -'x~M1r9|8U KJ +T@y ݕOz]5 +endstream +endobj +394 0 obj +<< /CS /DeviceRGB /S /Transparency >> +endobj +395 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im4 1986 0 R >> >> +endobj +396 0 obj +<< /Differences [ 2 /fi /fl 33 /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright 95 /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft 125 /braceright 147 /quotedblleft /quotedblright /bullet /endash /emdash 168 /dieresis 176 /degree 183 /periodcentered 228 /adieresis 232 /egrave /eacute 246 /odieresis 252 /udieresis ] /Type /Encoding >> +endobj +397 0 obj +<< /Ascent 708 /CapHeight 672 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Z/a/asterisk/b/c/colon/comma/d/e/eight/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/r/s/seven/six/t/three/two/u/v/w/x/y/z/zero) /Descent -266 /Flags 4 /FontBBox [ -152 -301 1000 935 ] /FontFile 1987 0 R /FontName /BRBLGI+URWPalladioL-Bold /ItalicAngle 0 /StemV 123 /Type /FontDescriptor /XHeight 471 >> +endobj +398 0 obj +<< /Filter /FlateDecode /Length 698 >> +stream +xmTn0CƆ@LE"j.R$Λ1iZ)A337?nkNe$냛.Gמ]=U[wVش7m~X{kW{{;LQڜi\]sťpjA{5λ#tVQ͡i P{ L:Ց @tvM{BM_ht>X]0}j74훺"t{ArjwaѩM]_?zB΍ڝ]]悅K(eۚeks<, X#.KIɌC2O0'\8i!+e8I++7>\ÇzTao 7^R}ף|'2 rN +endstream +endobj +399 0 obj +[ 611 611 167 333 611 333 333 333 0 333 606 0 667 500 333 333 0 0 0 0 0 0 0 0 0 0 0 0 333 227 250 278 402 500 500 889 833 278 333 333 444 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 667 722 833 611 556 833 833 389 389 778 611 1000 833 833 611 833 722 611 667 778 778 1000 667 667 667 333 606 333 606 500 278 500 611 444 611 500 389 556 611 333 333 611 333 889 611 556 611 611 389 444 333 611 556 833 500 556 500 ] +endobj +400 0 obj +<< /Ascent 715 /CapHeight 680 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/adieresis/ampersand/asterisk/at/b/backslash/braceleft/braceright/bracketleft/bracketright/bullet/c/colon/comma/d/degree/dieresis/dollar/e/eacute/egrave/eight/emdash/endash/equal/exclam/f/fi/five/fl/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/odieresis/one/p/parenleft/parenright/percent/period/periodcentered/plus/q/question/quotedbl/quotedblleft/quotedblright/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/udieresis/underscore/v/w/x/y/z/zero) /Descent -282 /Flags 4 /FontBBox [ -166 -283 1021 943 ] /FontFile 1988 0 R /FontName /OKIHKH+URWPalladioL-Roma /ItalicAngle 0 /StemV 84 /Type /FontDescriptor /XHeight 469 >> +endobj +401 0 obj +<< /Filter /FlateDecode /Length 698 >> +stream +xmTn0CƆ@LE"h.R$Λ1iZ)A337?^$ŝPIs77EW]=?:Wz\==硫nMioRE+ִ%Q;{&Ө5wZ(W\q/7}P^kMݧ`tTshz+&TuS}Hyq:=tb/x:.> M^UP@`T;0˻ީs#jv~_a߾`R-rfbiy= 9ff ؤdF@!i @E\ +` H s ` %(Ng *R0fd90#üb.k(@.o @u)(A:,RxVs}e#3cgWCYjxM#ƿp'g_rbhyp̅.c+StI(^Z9Bh?+q ~Pj=?fc91ا/s4lƽǮ<b]xB}Tz\'\z.۴2WsQr0M7]/S/Ar +endstream +endobj +402 0 obj +[ 605 608 167 380 611 291 313 333 0 333 606 0 667 500 333 287 0 0 0 0 0 0 0 0 0 0 0 0 333 208 250 278 371 500 500 840 778 278 333 333 389 606 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 1000 667 667 667 333 606 333 606 500 278 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 333 606 333 606 0 0 0 278 500 500 1000 500 500 333 1144 525 331 998 0 0 0 0 0 0 500 500 606 500 1000 333 979 424 331 827 0 0 667 0 278 500 500 500 500 606 500 333 747 333 500 606 333 747 333 400 606 300 300 333 603 628 250 333 300 333 500 750 750 750 444 778 778 778 778 778 778 944 709 611 611 611 611 337 337 337 337 774 831 786 786 786 786 786 606 833 778 778 778 778 667 604 556 500 500 500 500 500 500 758 444 479 479 479 479 287 287 287 287 546 582 546 546 546 546 546 606 556 603 603 603 603 ] +endobj +403 0 obj +<< /Differences [ 16 /quotedblleft 33 /exclam /quotedbl /numbersign /dollar /percent 39 /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright ] /Type /Encoding >> +endobj +404 0 obj +<< /Ascent 600 /CapHeight 600 /CharSet (/a/at/c/d/e/h/k/l/m/o/p/period/r/s) /Descent -217 /Flags 4 /FontBBox [ -454 -308 734 1039 ] /FontFile 1989 0 R /FontName /FYMCCB+LMMonoLt10-Bold /ItalicAngle 0 /StemV 83 /Type /FontDescriptor /XHeight 431 >> +endobj +405 0 obj +<< /Filter /FlateDecode /Length 843 >> +stream +xmUMo0WxNWH +Z&T~3ڮzy87?nkNehܤ=77U\;?:׺v==onU;O^uu#½O +ۍ=٘a?kLy6F/7}̽][H<Sicݾk^90jYVH^v}0<rL ͯ_/CkBnyWTHkuqö{s\녚"p]ϞќKյ u/A )`JbD>`2$`TY'`(ZqBJŌ +)Ǩ%553<,(hlwB60aG+LgıcW c rn +q9Mܗ8% CMq.5ShrAI皎\Sȩ ]8 `Y7ь1Oyezl,d mYĸSSJf-1i:C&e c4R$D& +&+übLaj by+bYBg YJYYr֟bx(rGT̛`F+٭L ,C9?d+͊11ӊĊ׊T_~+Cg!o!_??/?㫄Y +?^B\jUP{xᇻL^U}9pQq0O}c}3tȢ}Ə!VOu˷ +endstream +endobj +406 0 obj +[ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] +endobj +407 0 obj +<< /CreationDate (D:20240104052304Z) /Creator /Producer (cairo 1.16.0 \(https://cairographics.org\)) >> +endobj +408 0 obj +<< /BBox [ 0 0 147 32 ] /Filter /FlateDecode /Resources 1990 0 R /Subtype /Form /Type /XObject /Length 2113 >> +stream +xmXIr,u2~t| G8Kjyh%X|,{ȕ߼\\/_־GW)w_uu,?҈}}^|`tΘ}Y(^.Z3Pq2lN{[q.Pnwkqlz\D h?1V¹6iSqwN_{!L|︨ת:/"\E Q5CE胺^$hc?l fvq_NX @C?kӈ a(ӑ@TV8lۂ\}kTuP H8(Yl-Y5B.)- +Z,9aĬYʝ$;o}9ΐ,yٕ?sfn l%80vq:=qC"̡pjE5<%#i~HX&P8%&iBvb;Y:9/\7(f`M"Xd*u9k*Yd%Κ$H n(' TUiB 0SWfkӎ`Q;kY8ܱ(wq5<`k伈 ָ91kkxi73B7|$qίKF/W22vZ0[_n!ᅧ79SYfҭglNgCf]n;rKԻX_<$Bd3PGYKf6z4](se6\b]^ j;'}F._k){?Nb{Q\>&{PS[-"C:^k6׵J{T y Md!4ڵ8r|> +; 7X}Pif[pRPy0" lF$hҵv> +endobj +410 0 obj +<< /A 1991 0 R /Next 109 0 R /Parent 49 0 R /Prev 108 0 R /Title 1992 0 R >> +endobj +411 0 obj + +endobj +412 0 obj +<< /D (subsection.2.3) /S /GoTo >> +endobj +413 0 obj + +endobj +414 0 obj +<< /D (section.3) /S /GoTo >> +endobj +415 0 obj +<< /A 1993 0 R /Next 416 0 R /Parent 110 0 R /Title 1994 0 R >> +endobj +416 0 obj +<< /A 1995 0 R /Count -2 /First 1996 0 R /Last 1997 0 R /Parent 110 0 R /Prev 415 0 R /Title 1998 0 R >> +endobj +417 0 obj +<< /A 1999 0 R /Next 2000 0 R /Parent 6 0 R /Prev 110 0 R /Title 2001 0 R >> +endobj +418 0 obj + +endobj +419 0 obj +<< /D (appendix.H) /S /GoTo >> +endobj +420 0 obj +<< /A 2002 0 R /Next 2003 0 R /Parent 113 0 R /Title 2004 0 R >> +endobj +421 0 obj +<< /A 2005 0 R /Parent 113 0 R /Prev 2003 0 R /Title 2006 0 R >> +endobj +422 0 obj +<< /A 2007 0 R /Count -2 /First 2008 0 R /Last 2009 0 R /Next 113 0 R /Parent 6 0 R /Prev 2010 0 R /Title 2011 0 R >> +endobj +423 0 obj + +endobj +424 0 obj +<< /A << /D (subsection.B.2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 69.87 679.346 87.007 692.307 ] /Subtype /Link /Type /Annot >> +endobj +425 0 obj +<< /Filter /FlateDecode /Length 3273 >> +stream +xڭZY~_r"0ɖ|ĩ$&U)9KEm~}{p-,1WOL_Xlbw7:[H"E*Ej8ÞM9z{Rݱʦx+Yo0-+n0tqݾsTUGܹ8n/UHOBX-<;Ta,C}{Ov2:e УBܷBc4>G-;"^I|as疥=Tѻ:>u}sc|#:*xb$У}sݒUvnCʚ^]/^tldFB<RD督sJyb/夾uSiK jZ~=Uze躨7i8ĕIesגk9Hn3ۤD1R靹;0{ӑoܻvIg}}ŋ-JT0~ptlv;"Q^zTS=xPGϩk/r +7m^T~WxZns> u4˖v۸eQzs"QqJx6ӖONԡ7Oϧ_ :2xf۴ԋ+ȭB{f]kT2m64pny$2Ur_iVvmS워64pvpvFd +ئdɌxwzkQڟݚwOXEFv:?T7\wDV +\PTd +bS:Dz9o}:Aaڥ@> j{4OgxQ4b>>­&%{4”ohe,ԐX_96`]QUQ7ʳ䊶aou5>"Ң?(O}6{jNrSy_+ %$Nf5lל M*g9x}p"uy]Eyiwtiw ޙX0IOabelRp: >%*=hJNcWv`Q$ZK2y ̠P!yt4=Bfe8WC+$pnZıp%cCa~ ͂6y`3nS;hEU'3!I'QAf1^p#i$X(4~M,EXjKk +_ < +~ίyÔGv1E߬T"6>ě+ocނ]\a/=EO91+d@*%5S4gKzO+yt#|vbo\zxX10YgB/Lэ}iOy&cY Y*[h{Jr4;\<@xa^cݪ_HL)KI{`~m"LOSqbJLY]pVC?iE 2 $]{k C6e2W\LrB4PF +<I9B/E+9+ c8|]ܻcI"W4 H\B9$I-.E +XӢnBi蔂 +4o'.8ezbU(tlhx5~FUJ(Q7OhXsxz ,C!ZՕlPY `OT$(1ɢUAT8T3wC<T&-CT.,y컖3L \fi=CyBWshʺ[9$wT] *spt-w;;P9k)3PSE +@ '*15u*==VBdpzI se~hYԅT!X:D,ehI(+g5Eb@.@X/2BU)'F)x~v1ajRA"ŋ +6m>R90j}VC[w]ƍe=B۶Y6O@>bEm<_0D| `=jg3` ru$}Y# |~_w]mήC}=pC %R1G L>"QoU ޺k\o9;PC)Ck%D XыO1oO/, }nB~ħ؜+.-y \XbM(1E>UC 4݇oPj q%susoWrI;0O/R/> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +427 0 obj +<< /A << /D (subsection.B.6) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 319.247 741.819 336.384 754.78 ] /Subtype /Link /Type /Annot >> +endobj +428 0 obj +<< /A << /D (subsection.B.5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 385.189 336.841 402.177 349.803 ] /Subtype /Link /Type /Annot >> +endobj +429 0 obj +<< /A << /D (subsubsection.B.4.4) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 188.406 323.292 213.428 336.254 ] /Subtype /Link /Type /Annot >> +endobj +430 0 obj +<< /A << /D (cite.mmlu) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 245.14 263.881 325.789 276.842 ] /Subtype /Link /Type /Annot >> +endobj +431 0 obj +<< /A << /D (cite.mmlu) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 329.239 263.881 353.006 276.842 ] /Subtype /Link /Type /Annot >> +endobj +432 0 obj +<< /A << /D (cite.mmlu_redux) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 437.096 263.881 493.206 276.842 ] /Subtype /Link /Type /Annot >> +endobj +433 0 obj +<< /A << /D (cite.mmlu_redux) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 496.655 263.881 520.422 276.842 ] /Subtype /Link /Type /Annot >> +endobj +434 0 obj +<< /A << /D (cite.mmlu_pro) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 134.813 250.332 193.756 263.293 ] /Subtype /Link /Type /Annot >> +endobj +435 0 obj +<< /A << /D (cite.mmlu_pro) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 198.574 250.332 222.821 263.293 ] /Subtype /Link /Type /Annot >> +endobj +436 0 obj +<< /A << /D (cite.ceval) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 272.887 250.332 337.673 263.293 ] /Subtype /Link /Type /Annot >> +endobj +437 0 obj +<< /A << /D (cite.ceval) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 342.492 250.332 366.739 263.293 ] /Subtype /Link /Type /Annot >> +endobj +438 0 obj +<< /A << /D (cite.cmmlu) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 450.588 250.332 491.216 263.293 ] /Subtype /Link /Type /Annot >> +endobj +439 0 obj +<< /A << /D (cite.cmmlu) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 496.035 250.332 520.282 263.293 ] /Subtype /Link /Type /Annot >> +endobj +440 0 obj +<< /A << /D (cite.IFeval) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 109.72 237.573 167.578 249.744 ] /Subtype /Link /Type /Annot >> +endobj +441 0 obj +<< /A << /D (cite.IFeval) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 172.689 237.573 203.089 249.744 ] /Subtype /Link /Type /Annot >> +endobj +442 0 obj +<< /A << /D (cite.frames) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 265.773 237.573 335.893 249.744 ] /Subtype /Link /Type /Annot >> +endobj +443 0 obj +<< /A << /D (cite.frames) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 341.004 237.573 365.251 249.744 ] /Subtype /Link /Type /Annot >> +endobj +444 0 obj +<< /A << /D (cite.gpqa) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 470.335 237.573 523.988 249.744 ] /Subtype /Link /Type /Annot >> +endobj +445 0 obj +<< /A << /D (cite.gpqa) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 223.233 93.528 236.195 ] /Subtype /Link /Type /Annot >> +endobj +446 0 obj +<< /A << /D (cite.simpleqa) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 157.104 223.233 197.693 236.195 ] /Subtype /Link /Type /Annot >> +endobj +447 0 obj +<< /A << /D (cite.simpleqa) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 201.133 223.233 230.207 236.195 ] /Subtype /Link /Type /Annot >> +endobj +448 0 obj +<< /A << /D (cite.csimpleqa) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 305.071 223.233 346.709 236.195 ] /Subtype /Link /Type /Annot >> +endobj +449 0 obj +<< /A << /D (cite.csimpleqa) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 350.149 223.233 373.806 236.195 ] /Subtype /Link /Type /Annot >> +endobj +450 0 obj +<< /A << /D (cite.swe_verified) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 483.472 223.233 524.061 236.195 ] /Subtype /Link /Type /Annot >> +endobj +451 0 obj +<< /A << /D (cite.swe_verified) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 210.475 99.212 222.646 ] /Subtype /Link /Type /Annot >> +endobj +452 0 obj +<< /A << /D (cite.aider) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 139.848 210.475 184.037 222.646 ] /Subtype /Link /Type /Annot >> +endobj +453 0 obj +<< /A << /D (cite.aider) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 187.45 210.475 210.868 222.646 ] /Subtype /Link /Type /Annot >> +endobj +454 0 obj +<< /A << /D (cite.livecodebench) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 299.014 210.475 344.514 222.646 ] /Subtype /Link /Type /Annot >> +endobj +455 0 obj +<< /A << /D (cite.livecodebench) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 347.927 210.475 371.345 222.646 ] /Subtype /Link /Type /Annot >> +endobj +456 0 obj +<< /A << /D (cite.codeforces) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 73.07 196.135 132.59 209.096 ] /Subtype /Link /Type /Annot >> +endobj +457 0 obj +<< /A << /D (cite.codeforces) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 135.951 196.135 159.325 209.096 ] /Subtype /Link /Type /Annot >> +endobj +458 0 obj +<< /A << /D (cite.cnmo) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 498.798 196.135 524.097 209.096 ] /Subtype /Link /Type /Annot >> +endobj +459 0 obj +<< /A << /D (cite.cnmo) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 183.377 94.117 195.547 ] /Subtype /Link /Type /Annot >> +endobj +460 0 obj +<< /A << /D (cite.AIME2024) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 462.818 183.377 492.651 195.547 ] /Subtype /Link /Type /Annot >> +endobj +461 0 obj +<< /A << /D (cite.AIME2024) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 496.581 183.377 520.828 195.547 ] /Subtype /Link /Type /Annot >> +endobj +462 0 obj +<< /A << /D (appendix.D) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 362.819 169.037 373.255 181.998 ] /Subtype /Link /Type /Annot >> +endobj +463 0 obj +<< /A << /D (table.caption.5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 114.805 148.713 122.192 161.674 ] /Subtype /Link /Type /Annot >> +endobj +464 0 obj +<< /A << /D (figure.caption.4) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 177.659 135.164 185.215 148.125 ] /Subtype /Link /Type /Annot >> +endobj +465 0 obj +<< /Filter /FlateDecode /Length 3172 >> +stream +xڵYo6޿ߪ*nn&=h%Cgӿf8CYrއ"@LQp(Z<,ś"}q" +(# /XQ0×ŧ7X,̪2}GmuDYӲa,0z&44oLsC9S5nH ;&J>\#޳$YJ*{6@I(Xۇ֬y%|o, Vwoڭ { 32ueG ,1o~Xm@ ts2,LsE2l~@Ӡwz1ȶlxe|@kxhzi +6j mUkASI#"8&^2V 1gJZVϘz\~_Ո?H֦@11YfZ$Yl3?7=yI#7EUhEK2O E E\xzS1]4<$ַ^AFWjJpoUk櫙wp]$Jٻ{89Ii`.b `8zخ,/泭2S)%'$&z8;s#klhКdu=nʊw\[FT㹲z*&7zH7AxOIg P_S5B mOKEE.K)%Nmւoi=@/"58^nw % +i*8t?w27/=nd<ó<̼.y]m ^Njɞvz^ 7|fP+<;. A եz1YW+|pI I/hΞH{sS$K45p{t<]9vC'Bw;?Am\rQs8AǠ܍wC}# LG\Dۦi - aLI 5!xo}I;ӵO'&kbS=5K6YYN}rdl}d%oQ +W{l#y?%gɍu=҆NRY2v&jE"p^3[:mq5$se<ٞPo@\Qo']Ǘs8I  +g"GjrH3g (_g6]z 9UP-A)5T\VLG"Adb+EEQ٨i+lo'hiyS|Y.254GR"~ceꡙsS|VrCgX6ŀMRĨ"M +zvq.+2r3x*\rUIP .T Pv ׾퉣֯/y9S !\ "Hq("t|r=z3GMnRA))2Yèb +t(y77F}*>"Se$_4@>َ!خi~D/X"GWD:l\sf#T9T^.h~^{ո ο[4ޗ_!U>LŽ{ͬe#)'0˄aXW7׷Q|SZ|=^ +~뿮hɫlH`]ʙ@.у" p[ny :egwY2rt`sӜC1~^0?*Lu:3tpU)dfm[~{l=dn#Smє~ Q$=t8gQۥLG-#19 OQp>hБPF oOdfT=QM u<#mW}[l?P܌:n*R=mwG+x˟o~kp9ׁ8LtvЍ;dpS? 3saَM_@8Rw7ׇyf7#[ S) n8*ִ>OKUwȥ2L3CwKEn[8޵0hEЂ2#bw$]E\j~IP}JTC4U ˇ_>K :VM +!ٺlhmM/5S}o4縖t[-fp+K?[lSfH#t~?DpqBUͥM IUͤɂ_ D\吺|Z|fĖn#\B{6-^z`k@Nm:&TuuESp%:U9lρΩG٧g#WVpq0R #V `xjD~QO4p]YDw_Kz:l냠c(BCJfK9 +endstream +endobj +466 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F249 1980 0 R /F251 1981 0 R /F263 1982 0 R /F313 2013 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +467 0 obj +<< /A << /D (table.caption.17) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 466.802 176.474 485.753 189.436 ] /Subtype /Link /Type /Annot >> +endobj +468 0 obj +<< /A << /D (subsection.D.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 308.772 162.925 327.058 175.886 ] /Subtype /Link /Type /Annot >> +endobj +469 0 obj +<< /A << /D (appendix.E) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 145.76 149.376 154.305 162.337 ] /Subtype /Link /Type /Annot >> +endobj +470 0 obj +<< /A << /D (appendix.F) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 276.857 122.277 284.933 135.239 ] /Subtype /Link /Type /Annot >> +endobj +471 0 obj +<< /Filter /FlateDecode /Length 3294 >> +stream +xڭ[Ks6ϯ%toⲵΣvMr$E*"emA)#b ~Gw}{My211Q"HH MR̰(ldI}13q?ۚǮ>/*[آNsiuFV뼮#צ9:} -;k?o)9sG? +sdN|-:LRϭ8RƔ) =EZLYՂΦi ]cl_an`,j[ zHpS̕@Lbb\`qOQ@=B32&C!\tϿ $^h͡ڨbSTqpXS;[LtA*FT{nlʦGCɴ$LC6Jn6(vJ d'H>>[:]@kv/XD( d4&f˷ҋ)`t` Wi*8 5IN o ~Dg $RʠJ-IHIp%Ѝmk$ %lxO!"/ډ'~I`p񭝭?QZ$Bi$ +p: tnaZf #fYawIUH}*VP\J` -D := ̅ CiXq?|\eL;*K2`L2'DX`tw* b_,w3^#( WcD4@fq{d 6="Y(UCQZy ?̟N n7'C Gb4==N.[,s e\arPͩ ZJiBkAͩn Kv{ +`-[o/n{1ƌ$'b5V'f-`&dcKҽktl0!ȗ4uvu].YJkobKq"=FCj2n턔-x1G,G^m/o0?2 $VM4ԃ& S{ )A2+DD%qZr'<Ba>⠃*Cdݰ?x'_r@Ai$EV$N~Kֈ)ir=ؠ`m^MS[ ݆:2aOcIDiNb"_ljmٱ3kBϯ!6P9˒>.r( +əJo |w O&LF.mxqgȮ=GnmUOvv@LiN])Y8{Bl]ȱ5̼*m"ld̿'&<8ؐ\pr 0q|='JzJcdK7MzCSX`tr?rR{4gD %Bɤ4BКxv4ء3XeB͟lpPUBoW]!8Ѧ Rfy&l*9fo2t_4p`<{/c8>Ȫ`@9D~΁ q0},A{`O|* "0T̅0YUm2'iY {O}9j Kk*3Pߠ, +e`qu9cape;QYȤ𺞻BΰM4ޒVe'vU<νvк>dHt"rVL?ʤ{uYYl>5i4ߩ;G[deq =-q=س{$ s90<a1&OkL<|_êNO/^RWl$ m˃.D9C5ҺJ,cf$nطoʊl1n ~͈KETyj綁֯낎jeN" z/(\e0S7veQ.+4Y -;|.IgufCmp<Vqnvc>]@NӔv#jl 28N7UxK_[Mó~'~񭅺Aܕ0v ive/Aiؙp隝*.2Efa_W,vqlyf(kt} NT)g #T D%$[6@FHLtȄFᦺ^euzj> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +473 0 obj +<< /A << /D (subsection.D.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 174.674 628.444 192.959 641.406 ] /Subtype /Link /Type /Annot >> +endobj +474 0 obj +<< /Filter /FlateDecode /Length 3072 >> +stream +xڕY[ ~ϯ[3kUucNNvrLifiYItMɻ__eYۦ|'*Y}Ex~_ D׹VL(VeU-V(u$hN$R^^o>AwnH:+')$+iUtye G/yv71= ,:?2?pNjkZ3hWZ~^(YRD/Fڷ=w-q"K:?OZ%pXZjjT_h{v1ZE_3xUݩՏتA AeKqnj )n(ᙺ0V;Wx\JԷb"g5GHܩvt~ׄ 76GzS<_Ou梩٩~ܫft6:iy&iWh w(븖5,̮&&FRJ6)xNgiމd2[ZĊScޓ( Zt3?I$NC +Ga4bq +q;b!r*QuRiGv<ܡcXVvvAVY'4Վ}sԙb&y ƇV_t~zS v5Fu<_@J3? >OhsNdZnϞ䷇kT47/?)y0OW/g1:k>}u9z_u'޿ #0qB0{Ix޶oT\bbOA&6lNu@3] heHw:c#ZAd&d%Lx <Y,|`[ ++ +Njv @ޛ#Gr#]dK3ŶT6s/І{r\ESH&{2zh_py9y\ ip9A*6B@B)4rz&h'yBdC" +PE~[kپ3$[ vh$'"*i0x{,恷K҅3񀞊Ę0\Z\33wj kZSU 2 +<|\ݣ5щC` +<~.a[5XF8edBNy TS.s&dz<}їrWf/(D 8ʄĆ|bѴܥ@V_O6m $|c`2vA'r>|yF{A_I2ݎ5{:LA Ch|קg,}:-WJ/sgDDY}1b@ˆ׼9d?y)\h0EM@A5#h@D!Ky& >I F%4o![KNx3zέCUw;1a #u0vzՅf1Prd7q)g9Ȫ!=TYTsVR6lPWyT0+Fn[ޥ^ؚpTFdžw.vḑ2&tJ>~MX ag2hBR Jٳ;8P[ H Xޢ5Y,h1 )D$Cչss̕3F==x\x=E a⤚*d0+3ׯȳb7I莈~MF=#HR暚(:}<$D*9,d2Lħ(; +oF ' +RYZ-1|6%"*\:JZeQwz|qGTrBfqXzخIY5y)yF4F!.1$لIaIJݳdLB3~.ܵ`" / +FgGSQUtɘO`aZ9c1̒ppisՊ2C%$+AKWEq21myעAf("3BV7v[zߏaHƻmK[jfq> C!MѥWUկ%GLrbR&#DږQ1GPKg]VMp9\Bʘ /?'7v.~03v冉|>C= ,ꊈ +߁Uڜaa0iH\9ef6 +endstream +endobj +475 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +476 0 obj +<< /Filter /FlateDecode /Length 3198 >> +stream +xڍYɒWfDs_6[vwg"!S!ȪV3 dW}B hwE￈x.:q +:]+0O]ae@/ iTotz'iWÉD2JVFJCojEG=H^v= =,gI3ڻ<(JnbWIf 6rQ*NjؗiFu?u3zy& "unyH> @x)z&? mO9Q\e҉4,z@'2s恙hlc**JwE]YQjqz=I|7 8Na͗nOۙO zVOŤSgiмyzaE'77;a1 @-qJ"?$w@(C*k5&Qás?gY+8LKǯp7ui +jIq|+僔1CV!BQLvź$V+' eȿSIlc.al5o5r;Moi^΀Mp"CoϪ%ږ8T:\oXn + KQQX&{rhjd +mMB/>АѧWma3O 6t^DG' Gm\fJFO:^9EGԺG I2 x "r:AӉ#u|,<)YihVahŘh JQ l!(^RI8Zu@QdE^?$1 +E%Ls"\?6! Nͧu9X=> ]̽_;V#ʣ7yYfIEA?Kļ + .s;1@ p:@#c<{ 9<@':.f<*5 I㑤F4W2 X& + yX DR0J8DU"51ũ$Oͣ0ͦȽ  #x5CYT쁔r :GYM8t+&)Xfr85$^$)睔lV@/H,LD<ꀕLAǐ?ѿ\tàMlIӑe}<6=W7N±y<_8KqyYܙHny\,@1#L5Gv+W,*` +H(e`\s|- + 9ÇEQ7³!һj Lz2=Xwِ Z(Y# ɚ ti#5:.A: +xZVWEm^&Af3q mѧ P[ 54>Ư2SȸGյ/='ț^=G:-\1޻%^k+H0iXl.s:6 +V6I[w<"˽΍[C+O-$$N}bSd+[$O`<"Ey%(Lrq4M(уs`cDӁ GKargkbl1Cx%z d +ܐ3 |hJ;P dk7r;\IĂx(c` t\NY܊iz-@$܈duiTKKXcRW֢H/yo/ }c45z@#uXSRqEM { apE̳$IQ)m$'&:+G>bȀ* s=gpW1(sYtiV1)Z[a6< +An$E +1ܷ7L|q֣)HĆ/ +8<q$Ъ'΢gO&}t 7^}U +'iUĺh/8KjoB[ +CjOz"*geEl1=l ^HGerRkMO+EN@%l5 gгKRg5`+7.J d=*Juhg=4KW 3S=~e/7TUs;J<).ԟh;~QnB(hrNB˯wd$ $Wƈ]WۺSŀ^H;J*@%^>k>*ۮ#_qP[ԛ l;'/CWV^8gv&?oQ>H?HL`HUiOV+}!:8<A,;ݿАg8R=079 + +8uLȁ0]Ou} =lN0t@?0ѭ҂sNB];H~õ] +endstream +endobj +477 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +478 0 obj +<< /Filter /FlateDecode /Length 3093 >> +stream +xuZ[w8~_G'JO3Ir:MsNc36[Yr#kR/@&/5Jz/.~_ujQaDq\4^$2XYU(.V'IQ77'giV(]5AK3q{gLǥ v]` iXwcy:w]KH@ٝ%eN)iW'ylfN#d laI+Dz= ]3/ 9B/(ً{ww\_qD@=@`5,K5Y0ն[;ԛLGCQ9o^5J0~&f=f>.s嶻nmKt;}i/)Qe4YZÞTZ K}Ug!'Z&[7WtAe01XF'=$AEDE8mIZuGO'u M5MK- +uq^@uwp`4+Z2VvN^CE*JSʕm7]Zz`hg[a\ԹZm7`4ݺu帗i {G0yï>ֶEQdQ^!uGq횣+LA2g)fI< Jhʢ<a10] e{k=ml )fJ2>kirh % +Go{:u8ZyԉtՊD9" ^/δ4,xHƀ:] +/}G^`⪈$r緑/#I'k^\ .MKe3@7r0?tB8[f~`Y]Ni2ϘLP߹`ȇA҅x@]Dkymsr%v-.9sIOҀl>TPa[hTmXf 4K]kJXgKC@ "0Ù2pt]%9&V,#]Z3׹zoڝ@8tI)=aY.Ǜ 258$%)E)ox=0x=o]шyg]n7pldž#=Q8̏D4-!.)|-n61;0Q>q;> oG[.9#3ң#Za~>,a"}.όɁ ` [9x7y} n3S +%@JvVC\G܇7QxdE ^ 8\$@Vn9"JjM4D\3 LfI}~Dͱm|H 9d>QפE,F1 岈W2od|#!>ӛ$_H3PlqzNЭe4kEqMӓNm#.ϓieJǠ 0=F"FGJz0(ϴ$ތP&J?ٖpv;*<\ԶFtѣ#ӇIDEFS<{UʧuaKJ d%d,.%&h "gݬeIŬT"'6C ;J jWC|у| ~p$h1 |sԣ% +Ӧ<<&ȢJpԊГXNK,(>2Y[j upSvxe[VJlwd IO[R㢛@DDZ@F*tG |K7th:O&ݐ²Gh7ٕ$#{QhK7; *OwzrKa/S= pdvXcE6Iv^Zr3$\uO2͢TA~bk ;ׁ+YiBb6,1"rz>-\㿚H J=rQ1r[({V'f_Gak07lOo2QӇXWm\@cUԤ.$A^W]#'?Mp'ȼ7 Q í[1=(:l2BiTzQ3JңQ. +endstream +endobj +479 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +480 0 obj +<< /A << /D (cite.dsviii) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 140.075 667.378 205.621 680.34 ] /Subtype /Link /Type /Annot >> +endobj +481 0 obj +<< /A << /D (cite.dsviii) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 209.1 667.378 238.971 680.34 ] /Subtype /Link /Type /Annot >> +endobj +482 0 obj +<< /A << /D (cite.dsvii) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 250.602 558.984 316.974 571.946 ] /Subtype /Link /Type /Annot >> +endobj +483 0 obj +<< /A << /D (cite.dsvii) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 320.464 558.984 350.111 571.946 ] /Subtype /Link /Type /Annot >> +endobj +484 0 obj +<< /A << /D (cite.meta_mtp) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 410.444 545.435 481.383 558.397 ] /Subtype /Link /Type /Annot >> +endobj +485 0 obj +<< /A << /D (cite.meta_mtp) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 484.962 545.435 509.209 558.397 ] /Subtype /Link /Type /Annot >> +endobj +486 0 obj +<< /A << /D (subsection.D.1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 479.75 376.07 498.701 389.032 ] /Subtype /Link /Type /Annot >> +endobj +487 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 279.922 191.922 346.594 204.884 ] /Subtype /Link /Type /Annot >> +endobj +488 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 350.056 191.922 373.866 204.884 ] /Subtype /Link /Type /Annot >> +endobj +489 0 obj +<< /A << /D (cite.gpt3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 99.488 130.951 157.317 143.912 ] /Subtype /Link /Type /Annot >> +endobj +490 0 obj +<< /A << /D (cite.gpt3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 160.281 130.951 183.655 143.912 ] /Subtype /Link /Type /Annot >> +endobj +491 0 obj +<< /A << /D (cite.gpt2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 193.295 103.852 261.698 116.814 ] /Subtype /Link /Type /Annot >> +endobj +492 0 obj +<< /A << /D (cite.gpt2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 265.217 103.852 289.399 116.814 ] /Subtype /Link /Type /Annot >> +endobj +493 0 obj +<< /Filter /FlateDecode /Length 3129 >> +stream +xڅYYs~_, 92){wjƕTe7 I)òӍn,Wl[jV_~O,qXB< +,[2 R]6/7~uyluEU=z;:QXFxm27 m?jiqtFJx\2 "M(5b!AfjY?5}YzS#DZ?+=pQ\\=́3wh5Q`Zz~ԕ>ltO_xewӈ9w= q `v#J#hpkr+ N}VPzaQ<( FKͳjgצֺxq%u E _.=yKT*cBz[srGsT{#^o@9`Ba8%t(Am՟!]4 BDfpۉ` + @~)0BW$5i֎qN8xgYLS{Ov, vmeI+<ᝤ /1fvCemSc;{lyhr%%xn1أn [݁ƽaz{%F9%vVUS ,4{6 InU 0tS\d%K{Kc6.cC*=^Kg9ܦ^@V,F2"8 +x)R}/iklf H͒xeAcFm3x7Bq;圌cK.|H$Y $}'߹%:=WڢeP!.42ja3I\Ɂ " к%].a(p+pd/⇱d9cIZ$~UDj,(1ll rTR\ArQ̳d0E1G oIUppii"툊C՛}Gwt\L/pOeaZ}3 ;/g0= WKgy? {_汒q)QW +a)dD8=i| T΃4a4hd`soHm6, /M!^acSQW"&{l6WBqlY$rcZ29{2Yw"(!@t%e+\v%hRz%T@[ AQ!4-4s'ێ 9]ZN8;;';c޳{"A=k2%sy1:~|~\V=.YŅA>3 +O|ēF] +/#=X5KD/瀝cr]km$ H}7Ŷ}P"8)zUnLc%y qFC@p00;5DPsHخoB'm?.m;]ָ8GPKVIUVB4qll0e+Xc TѮ{tD %xIEBƾOѕ%:iT׆KU.;c +@-r9'/t0j7! /:BBؙsk! En;G63D?{L,1 ?hܟ.:Ɨ ;W+X$)&y?:K2`x +pD t +Ş#)LU]׸Ⱥ/N'4 dP^"b(s.`ms>'Ā4upQ_%̄ogB5^3<rz$3z:f 2w5Y`e@g @78\V]_WV Vt`5=o78Т:43@3xx[[`8fCG@@ǷWeY$vld .P!=ӹ7鳂 B(U|+OaZ +endstream +endobj +494 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +495 0 obj +<< /A << /D (cite.gpt2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 424.513 741.819 493.067 754.78 ] /Subtype /Link /Type /Annot >> +endobj +496 0 obj +<< /A << /D (cite.gpt2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 496.581 741.819 520.828 754.78 ] /Subtype /Link /Type /Annot >> +endobj +497 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 204.177 687.622 271.148 700.584 ] /Subtype /Link /Type /Annot >> +endobj +498 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 274.625 687.622 298.545 700.584 ] /Subtype /Link /Type /Annot >> +endobj +499 0 obj +<< /A << /D (cite.gpt3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 326.342 660.524 388.958 673.485 ] /Subtype /Link /Type /Annot >> +endobj +500 0 obj +<< /A << /D (cite.gpt3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 393.374 660.524 417.621 673.485 ] /Subtype /Link /Type /Annot >> +endobj +501 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 118.895 606.327 185.566 619.288 ] /Subtype /Link /Type /Annot >> +endobj +502 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 189.028 606.327 212.839 619.288 ] /Subtype /Link /Type /Annot >> +endobj +503 0 obj +<< /A << /D (cite.DBLP:conf/nips/ChristianoLBMLA17) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 391.768 531.806 472.261 544.768 ] /Subtype /Link /Type /Annot >> +endobj +504 0 obj +<< /A << /D (cite.DBLP:conf/nips/ChristianoLBMLA17) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 476.183 531.806 500.43 544.768 ] /Subtype /Link /Type /Annot >> +endobj +505 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 427.954 430.187 494.006 443.149 ] /Subtype /Link /Type /Annot >> +endobj +506 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 497.454 430.187 521.025 443.149 ] /Subtype /Link /Type /Annot >> +endobj +507 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 458.494 403.089 524.091 416.05 ] /Subtype /Link /Type /Annot >> +endobj +508 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 389.54 93.353 402.501 ] /Subtype /Link /Type /Annot >> +endobj +509 0 obj +<< /A << /D (cite.deepseekmath) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 295.989 205.392 348.519 218.353 ] /Subtype /Link /Type /Annot >> +endobj +510 0 obj +<< /A << /D (cite.deepseekmath) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 352.329 205.392 376.576 218.353 ] /Subtype /Link /Type /Annot >> +endobj +511 0 obj +<< /A << /D (cite.schulman2017proximal) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 176.221 164.744 254.967 177.705 ] /Subtype /Link /Type /Annot >> +endobj +512 0 obj +<< /A << /D (cite.schulman2017proximal) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 259.328 164.744 283.575 177.705 ] /Subtype /Link /Type /Annot >> +endobj +513 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 73.143 151.195 139.814 164.156 ] /Subtype /Link /Type /Annot >> +endobj +514 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 143.276 151.195 167.087 164.156 ] /Subtype /Link /Type /Annot >> +endobj +515 0 obj +<< /A << /D (figure.caption.6) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 481.291 151.195 488.738 164.156 ] /Subtype /Link /Type /Annot >> +endobj +516 0 obj +<< /Filter /FlateDecode /Length 3407 >> +stream +xڍYےF}W5Kq'd9k4Ok X4deV503_.Py;y2 6MyM ?}*7*PFA`6Yii_*l8T6@77LՑˁi0eŽ :vMUtXM/$cʽp{u7Lh٪?'Ú=c7ʫU7*ȽWKxh=VWϊWt«!BhXaꙓl;ެOp.Xmdgnq8E!y4E6U3]Am?Sy>C 9Z)HVRòTM7~,wMیt5r8\ZߚkuyDǫeS#_PװqܵZc)g8AOz ""a䨅wiO|e} ()L 6=,L!_8/a Oz87hEEq@g}A_ 1f%;BRqZ43eWh 1,BY zwYu- ]EuV&0ԜesyI4"Y*B8܃C*S/@.92ʃȤ?U;U +V Ī nPZao]DP 5 +hpY=^n |@N壬,v.l-z߷d!Q kq2ň2?1ي&rךobuI?L[z-vXc ,.k%/ +GsfµZ F~,ef9IY +uDR*xE&ha-&M'T؀DîP>6Bh׆1J4n%pop [u_ytym"LBu߶#3Pi<|;C0;? + oo勝$u|8PpfOIOB ?(tidWP:z9 UuVlAZ6fX#o(ЌGye'^s;Ҕ=\&J4LsgU*8`E>,u+OnN8 /}}3rCxn 9q3 XmP{&^őR Wvci&2, q3]'I~Jעg1 `<=l1V$ h}&W*U"bNPYOYa\X^1# 4τ}l +l=:`? A#'Kd~\?X$cs=S& bQ+O65JS Oj8rs[YTQ, TfIO?p eᵣ]6grB!۴BZV JE|I[_]V鑲<}ALɚa%U0j >p,JZ>:}Jy1Y Z3,ApgJMh>f eʴzkG-yc1s֮uʏ0&=y +} A <t2C;ex 0HcHipzMi.n +/>QGDV.D8leE +s |?Lwx= vXʎ,\+ [ndJ% :GI.6쨞[/8x88h3:oyBi ʾ|}4 sVVz,QſJhw|]Z&4[2L +I]i.[d'1q(ɓciQڏ~D %?QޟJ/k}y Hm78T0l{O,>2-[vitֵ^Ec]`9iz_8+(>7KhZ=SJbAc3 ݗ`mZv*MniRoj]?ǥOchJbRjfƙG-5鳖49@=fh(22SFۇQLv42=GIT+RV$)LA쩠Gu\/5D`cw +P) Mhŕ/*d(TMxK(H$v1Vnl'4ڧ{/~!κȔMfLWw%S.$.G< T$Aݨ=κZ5~ d\2(. a1)E*hBRC5Eu3TN^^54Stkva$V.?L;bxZ$m v\LLSTj9mH*FS+HGYɑ~n[eyBuP΅Đ!1=˃H*V,92Ùܧ.ϿsWSG ߷IV#q}7:;AZ~O=s5^.Fw=ᑯ?DzyC%2WygTy]rw"84L)ǠBEX(kTMi™#eMlWJ 1(C_]{~3Tʮc=lH74 |e +-y[kAa#[tmngK +` |.N욇ɠ +$JpRT&\>_/;yzm%ZU4;*N]tQx4Jr?Vrm{Exl*F?UkiJԚ+>{b:Oe|D= +B??Ĭ3wӧBbY=0O +D!e$8u'X6΅3'[a>g,o +XGJtQb?Y +endstream +endobj +517 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F249 1980 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +518 0 obj +<< /A << /D (cite.gae) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 162.376 279.743 238.492 292.704 ] /Subtype /Link /Type /Annot >> +endobj +519 0 obj +<< /A << /D (cite.gae) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 241.977 279.743 265.919 292.704 ] /Subtype /Link /Type /Annot >> +endobj +520 0 obj +<< /A << /D (cite.kl_approx) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 343.555 110.378 394.619 123.339 ] /Subtype /Link /Type /Annot >> +endobj +521 0 obj +<< /A << /D (cite.kl_approx) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 398.514 110.378 422.761 123.339 ] /Subtype /Link /Type /Annot >> +endobj +522 0 obj +<< /A << /D (equation.11) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 180.811 96.829 193.92 109.79 ] /Subtype /Link /Type /Annot >> +endobj +523 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 140.114 83.279 207.175 96.241 ] /Subtype /Link /Type /Annot >> +endobj +524 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 210.643 83.279 234.607 96.241 ] /Subtype /Link /Type /Annot >> +endobj +525 0 obj +<< /Filter /FlateDecode /Length 3314 >> +stream +x[io_i &,rmADKR"Qv_g.HYbk8{_3IU2D4 IDW?]Q$)nFKY4c$Ij~ZFWǿ!5(O#,hts"\,S".\v/h/fL&1~$nƲ$э vuczovySU}~߾}fG6^rl]Z4+}^|s]/ڵK@.A) +ENž)@ml/M/; ^:l~1D`5 W°fF&2qAܳߚpΤFDq/)ǙHnAX*Di7c`^b[#F2ݚVD<*9cG:B 4'dRL7@UȨ366蝊𮮪o,My_|43RbDb\$ek`=*󋙒_@pXBk:XY},}<~5a*1 tS^@ Ja24X E"@ i)L[eI5 ]*rl7Az>*R ad"wIZ+_"xQAe|:œW2elO#58fDhFg|y"ҩE)vdq4ZLEGիN4% TI4zS%YѪmp m6K7}}u9 RLUG H2?یn u4`ղ,b)qJ -`Aft[S!hkr8|}]D0~7p7#]XVOX#2z $1g8`~?'%sNNL+.q~r){)5.v+Tx^qMnq&=-g2vg01}d䳙ذ6ka dV)`TJ(UҠy Bdz{Cg?s(j̡ <k`'$bf7c83YLD'Iil)E'PHqn_[G9OI,W8T (i6J4h/Q[Eٳ@+PtT3E`L-2VCHb) 'e\1Y)A' w(x<'A–) '(BX"~[TQE>"*=>Q izF #Tcbh'C&VWrӶ"1}rW\ 9pyԘ hg2R5Vc2) rㅓ@ ê;<$p13{K/{c0#e)MJsx; Y\lw)SĜvK|'!Ih-jImwhtIx 3)>wfAg(d@@{汞)]~( ;=N>z +9y4Tw rNi845cg(qX)ɲIHrR [G 璊KZӻqmN+NJN!yWz8^ՃK@UC٬JY@s>n2f]{UX75~k)eª W֕k<~[~Mu6 0G%fü` }Is}&nV*]nJ!CKb]ݰ{?NYy._rFAecT1VTOi>c2[z8@B' Te~mB-q(:ay k~Xq໯dng)~h~Ye[Ko!7v/@D&dQOZɝJ2]rvuVr~Wix"2O<aLe|*=w +ElO@H2G٢38Z;TQeb^z+*=7{hy5JlaN2+0,b,apUa51~|f?o _TKL1GΆu}|aʬA Wp}"XGwfUƍ}}}U_V!oUK.iO}P-ť +{ּgrrwUr2j .hj MW(d $GZv1 Tjs~KcpwypG  Li-2kkyX}?Gs[M,zw{Tx@g]TQ,u[;G=U,")͠<D?N +u;;àRS ҆[iK&Hu m/WGΟЛCaŇXZm5=c4I˗_$ƀ!ni$` $:=6c!۝9lEww okAmOy}N6-!Mؓ)rJIVuf{횹:lnKOϭVkIWcP=KA$.vqڊ5Լm_$9M佛kmR.|mn+cJUEp+YcSM]%A#w  ĉ1y2aS> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im5 2014 0 R >> >> +endobj +527 0 obj +<< /A << /D (figure.caption.7) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 120.827 304.942 128.285 317.904 ] /Subtype /Link /Type /Annot >> +endobj +528 0 obj +<< /Filter /FlateDecode /Length 1575 >> +stream +x}WY6~_٪x3+NTJ A1 <o~}ZꆙaڪjI_ ^ī/q"DiE1Eg<oͧ}oxC7oWxq8*ۀ%HrAg֑<{ehd gPlB5p;\!h +X'b4 u7cKY \@ߍ M+.YX# b(p3?[Տ:SC˭$xMU< J>)w&+}M u,<(@9bKMGLQ v~qklYNAL,!YTcȮxIkG<>|F,Q^%-[c_8*N{!+1-N֜B)Qvg $*sExRFhY=Z*qt# 76#}]QDŸ&ᕭL7H.LJ{]lyR6!Y攲?ݱ+|ei~/qѼF⠱a/PlyFgo$,B>#nkݕQ6w 5I +u]iYXck1S?[ q?vSQFi:}YL2,N/^;]) +o]jCYSsk-(Y <'|~)tHrT8"QXQ(oz}Wcª"NfH[V[9${+ۉ36tk0+[rM ̥ *WK~U`ei$H +S1UhysfÄpŻG{;sPlۨfln(<O)QL]tjpZr1xO`ZA(g"ci ne2lJl9OjҜ$`_Js[_!VV\Hs/ԍa!yINQzDZu~zxL"%ߓ"? +Є!,h>aTC^13# 4\3(8c89EK14f$"TgnSWXXFI֚aGk~G[1 ǧwek}dE/R77x5?Ϝ3VyL 0JӠ#Cv;dfҍ 鈋ҋyTbn=N 'RgE$,|6dQVgү/0 +endstream +endobj +529 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F249 1980 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im6 2015 0 R >> >> +endobj +530 0 obj +<< /A << /D (figure.caption.8) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 247.552 344.272 254.928 357.234 ] /Subtype /Link /Type /Annot >> +endobj +531 0 obj +<< /A << /D (cite.vllm) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 210.898 284.895 268.482 297.856 ] /Subtype /Link /Type /Annot >> +endobj +532 0 obj +<< /A << /D (cite.vllm) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 271.974 284.895 296.09 297.856 ] /Subtype /Link /Type /Annot >> +endobj +533 0 obj +<< /Filter /FlateDecode /Length 2046 >> +stream +xڥXKs6WHUY 2$Iew\(C&%| FSrGuCitǛHIYQ󤪪no>$nzid˒BVTIU0{S+?a:͛wLK*XXHGC{qXo{9躟&̃4XMfh_*c?j{Mcj=M! $d! Y}5ًY|0ܓ7IIPͱvOn,㷂t5mf40^ѻ g% -4I`( 89.b=`Mk +Vҩ3g=m5!8)MymtW?Wje~Ej{xUxm.r]E=KDV&"AˠkSM Eי{Ѓ= "qWڋ~mP5yC 4Nl&Ҹa| +1YҪ>p4),E'.Vv'307LStc:%S[յO;w9~ s'Núr`\v6)~Oн%ܝwءʴE;֑jh/Qm2_Z@Jm"4V:v@m@4Ci +\ٹ;Ģd3j4%pHnHp,$װ,+KX@Yt7hLD!r,MXAc sY>hʤ-FK H 5s7pz]NW(I +e䖉$}*K$Tzt3Oy*㝫nqL" c:OsCcsԝRjyK@,̠f *=@nadqĤ +H$`~ 3b<i}:DLDs/~wt/Ju a^E.+5Py a]_J _ + UtC \)!J_\mOX)> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im7 2016 0 R >> >> +endobj +535 0 obj +<< /Filter /FlateDecode /Length 2952 >> +stream +xڭkoܸE:I$HQq.C&qEVY+m ^z(G΋;x*w?F"0<^ȽT C}ߖU1&V_ð)(Ow?;&0Q9j o[aIX + MB 0]7nK)XdXu[<VCꚖfG0ާ\mP՞tQ'J r,SoMGHbPMZ-׬_-O(HrEFn,Ŷ ɥȬi{Rlm}uhVm] +l Z/,`dQ%)p!\LoCrx|BZ,$hpP-vK2<򮞖{0m5Z7H,U@HhQKDAx=Yq_ `$60#8y0k[RP+ HuaE\]xac58Zo(S6+d|+# hB2$dCH_nd86!bNFGh1 맒7" $ha~3 戀1K_Ǟ n56 mZ<K+0n!_uxЎEcB~@_>Oćvh}E06_7K*=)4UV`D]@c?{aNW)pQ[;ۚB6ApFqVUS`_z950Ͷ識Kat#J>i_T,a%/̂ =rOә^[T 9Ei2 bIi ʀuXǨ bܓ-hWohd4 _ 6B#iL >#?$~P8iCR rzJZBtq:7&B ~#]6BQ$) UaT9ہ]j%H2<]}k` +!W·$z8HU~ӭTy5PJf4 + i鬃ޕ!fF(<'ER7JfW`zM %840=S^8w;d(@FⴰHPAư3!R>\dC9O`bp 53RZk,=22ɈO_J RGE"֤l\Hyd@JK<@\dž:!'s5$"=V';CeB7Lw{r?E=RɒX),zG%S*dvt>R~| t +?J +cŀ\vf/ NtYf\n5$yF/#-^*mtѡz͊&:~EZvTD gE_ yX t} fs&]B vtvK*OyI8l+ +3W7}VުC`* +S[}DJ@`N iǹ[M_yM"AH) VO.-"70);Z88j 6s<.OlYyEY8Cڏ6ɸ_0cސQZ7;h)Ikvav%PHSsBYȡ2rj$ CvDc9uBu̒(˱#5s@cBb䆊_Tm8@wlgg-4 !DoPPێR#3܌.78;鴭`Lvwc q2eRM\+웰&d +i Ҳ !%b^'z}$qQ;юю"fywm屭Y +ׂ)%Ml~ f +g*_ZIZlp6+I!]`[ݱsNK:+ +X)XB>1+F]]ECtq,HBVMdI(L5$AqJA[:RqOIB.pE|^4hnh^=O6n-}a+ 9Ԙq Ҫf[^etj4/%ٔf+gwSe}xyͬa\% ʄz@D! +endstream +endobj +536 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F249 1980 0 R /F251 1981 0 R /F263 1982 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +537 0 obj +<< /A << /D (table.caption.9) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 307.918 519.689 315.475 532.651 ] /Subtype /Link /Type /Annot >> +endobj +538 0 obj +<< /Filter /FlateDecode /Length 3502 >> +stream +xڭZK6Wj+UO>vk$o{nNEIP$͇ﷁnP$#.a޼bʯ^s8 SnSHbCM*lS7kYn~{^h>a-R}Uۢ[pz63e+u؅vQ>Pe+Y^W~c-]ɍ'ƒwEՕ:( # NSy77E{s$(!sv +"}xd-o n%L.©čy⮲OO[ zc|~YWM49e8!pҜPOk/h.JX\ r!^UxU};YsM^G%0M\J4 Z8ӏ/D]K# EɗK®&r+jARL:afBIUK%{h؛*ڬ|AW#vWҖEы!* +]Q6 8}* Z00 uAb} ?ӡ@O4n'_xb[)E3G/mwE!eY?ȥ` /!쏎z ˔E.ӕ0+ޞt +L[Y]"zyx hC'؀n-h 㥷`I_|Ύh3l{I{03 0V ˆ>q&c4t$rTBDx4hr#h;ZScKܡZiD7EZF-Y/6mvKKge>CG?Md>];!74 ,#X-v?OGYfgGʘz2MsCn;h+~"ς|q">~*ɶ t˄PSSk>uvmh{kl h֛5:NqCJZ;h58_wPfXػƛmU6+Rhx:< C~Q&K|ʡKkVlM%4)og"9^_w <5)9B3HmOm&EN kLFʡ"mJ7?!eP$&egba O~1D1C-_Zs0rD l4_SSs!^vF^WB\KyCS"9?2 C:=sB(*UR;3[/ ^pn_'ik(>;_"φqFXP:(ذ`<0&;ƇӇ'/ O+*LcLwE"=*SL/mS$a*4^bsgipqddk2zjM1袉$=!,t@ hƩ^@h  - 92kq(9H`G_?A/Ya"xNYG2j= b;3ϓ'QX.=*1#A%. a()/ͧ\{x#b c_PTЯk; N%.ò'p{ieHW8p#=E*R&~,?^M`M y?ZgGI B-xC nqc69m")}6]R`ROSݖ46tu݀>ɥh&*4[|vY\s¶.ľ_`u[(;&AZsZ1mhau\жRFSdmoDJHȘK"-X *0RcmE7b͖C3=2,u3j.1JNHIg,%LQ~Nt=3wKЙ8|ڈ ?85IAᠻSZ*2B)(hR<}L!X3rDXl'zcWL7 5їK/\ ߝt]ˇc +6.=YpJDpeEs7MEs0R<6]SƽM02 $x~(h" ڦnC1z\[XJݧ`C)tǃ$Iۅ f]8a\ǫ k{>$7X,n7}:=D{js/{?f#+.XOKJx=\Ӳi1{ZƯJ,Q#|/9GԶG7-Od::_Ѷ-! +U,hdUD +]8_xAJ%B39hYm^m_QQ{/ԳvIؚa1U>c&X,գ5V~}|t)T"WZ\t?q +endstream +endobj +539 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F249 1980 0 R /F251 1981 0 R /F263 1982 0 R /F313 2013 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +540 0 obj +<< /A << /D (cite.li2025codei) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 418.852 619.876 456.978 632.838 ] /Subtype /Link /Type /Annot >> +endobj +541 0 obj +<< /A << /D (cite.li2025codei) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 461.47 619.876 485.717 632.838 ] /Subtype /Link /Type /Annot >> +endobj +542 0 obj +<< /Filter /FlateDecode /Length 3436 >> +stream +xڵZKW趜Ld;Y)WReO*Ú O7R1'λp7!ͷed(Ӯȅ]'"ǙSPq|ya00ܘD]9W><aJiHTr T(p'=AQvO97pGX夑ظlz$dL.zB.x#-ΆfK.驤u#LSU9mFOHNPF7\dED씕=Ľ-4; !&̉~[FCUm> +f7Bɂxk1;bƖ?\Gdž"LcbzZHJ6gć%Y0@՝.Vm{F/O03=l@U|TZ2 +PaE#J N )"aqgNag +xkh2b`6Ϻɔw"ůyPLzL`f+ޘOoP=6{~-}rrǴ:LfsyBX.Θ.HSdI#o2&X$c-8Ȧqa#-7Vz3إޱ"T"^#a=  LQXevnV4ZhJ2*_ϋkj&` dg݅b>8LR(1{? =6ָ7 3_ W`g38OvkQ%c=!`Py#* $~"7`f +t@0D +d0@աt<Dgr; c` +|P*_iTXh;GȺ1( U(X"oVI\5;4~}eޛe~_)'R5"O[aChF|D\ta ffAgHF?9ce"DJ|@% ;%DUCTFG3Қ~-;uVy5 9P]-o,T8-DpCRT&Ta7z͉g=% {(Y=b iZ3$v 1$0[ I*T)4$T]7=}sx/`T -\/h}qX b5b)կ2 <3H,UQEӟȌ#hhgN.(73xj~r1J8IY<{f%+-ĞR!30~;M;=(dlj`_:w`jeM-7tD$IU eg9;Ɣ#:ۈ~a6Mi-="-=`u\HaVaM!Jʞ% /Lxe%s'r\d+%K4ysqҧ Ne5/dk]gE^d * |-p.TNq9u62$@d091+c1 C_1a 1M2:rM&ԅ ׂPRD P`tNv,BޖZ%zћ℥3!ԍ4-,3}CtIjMU|2c#{y1GahMbl03sD f"pj#V0ؓ,$hW6@ ֦py/X(f?M95DkUy8CD#2^p#fo5,w|ȉ~05m=N_vFt%ԣB*`=X ի4>.ע]n@yBM +Yl.l!ZQfBК7'_QNLkBO'e;1]+}y7\75`& Auh-,ġD*]6 2xARes7o?B .{ E}"&}'z]oipqj(, E(*8`P›Q$.֔ W'Զԕ3Yz^q~[CK +?р 6Yۀ_D^g]nT"ؙNF9@sYJ^WU , y 'qZRVW؊rG JO' +2Af _RB2;3}]B  7h asmWƧ-jAǭy ^^3,nMµ{U dw%Nq\N ?[EF,ďӼ'=Uǂsms=*@ (qx#> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +544 0 obj +<< /A << /S /URI /Type /Action /URI (https://www.sympy.org/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 73.172 347.099 213.814 360.501 ] /Subtype /Link /Type /Annot >> +endobj +545 0 obj +<< /A << /D (lstlisting.1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 505.314 279.353 512.87 292.315 ] /Subtype /Link /Type /Annot >> +endobj +546 0 obj +<< /A << /D (lstlisting.2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 473.959 130.312 481.406 143.273 ] /Subtype /Link /Type /Annot >> +endobj +547 0 obj +<< /Filter /FlateDecode /Length 3219 >> +stream +xk6 +P-+")^ޫIqZ\YrDiPuWbCCh]Eϯ"srP ?DPTnn<8e:;mWmYE%W0I{9zy +t4bU )=U# ?bi<>eqc2%Ea*Čc\}%T|۾5O?{VFÂ܊+͐R?_~Pd$RMO;t>7{fC]z_tybag'š8WVmUB9Kf'qL’CzO'A}̱#ϰ}_/T\r1+g,ul.;c5\aitYSXfwŔZ]O0*t./j !>#Ld $,+k( jޒ-Mk^ܵ_`} l-\2Bg̊ީL@Y0M +Q)#4=9A/&ֻꭣQsNNPȩ ,>$Ő!0JQct TxΝ -Z[ZE#-:"V}Zdݮ`49`ҫ u'=BIܥ\^In( `#g(JQ Z"tؽAs=!kz7*d.C^I$lg7WLm +endstream +endobj +548 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F171 1978 0 R /F251 1981 0 R /F362 2017 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +549 0 obj +<< /Filter /FlateDecode /Length 1929 >> +stream +x[]۸}_u oE@ZLY,n}(Di%9$R~z@҈+ S1c1vY16TTFfJ|ڮ.gUvj̪#w2ij0,"x)(P,Ƣ] S54Uy[1o;f)NTqF 9(3!n>D/C>~*tiD#}鎱t}4!jOý`@03KdzM*wKkRTLL! ЬHPU%DZI@Jţh|9S.Z­=cU! 5Q9qW +7#A[d0否+No+ (D.&J[4~o"C+vB 3!R+$ZQkqUT$48̡M +k$_J1?ӵ_g.'h3\$3f#էw(*a@6в("wB6V:9>m\ z܆f< 9 bœKEvcg˸m캲궻SXǶO~ognBBQjpPEe IgOq7s|v)?azql<{~}zoK 2ďPxW4 S +b55`5__ "kI*BTJc 5 <}GUqHY{f{=ݣBDrBe/Ț`$wSN.EJ䢀I +endstream +endobj +550 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F251 1981 0 R /F362 2017 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +551 0 obj +<< /Filter /FlateDecode /Length 1386 >> +stream +xZKoFW! ZOvC@o)|KVk):i`wY*Ljy|3+Y!_D?B0ŗ?ͬ7ӽ NKBˣn^FBbzQdzoEH(,Φ`KK!Lw/^7#:^޾G뛛W~}r~>B<= +- +K*N +[) (hv颾=6t/:?<.qͧkINJ*h2bINb'Ѻmz^"}M4g UYm{?Akgz^NAGFJnS ^*OM??UA!H/ ] Dd5RCVM ĩ%@ڜ-w-rS:|{Q6T]VbKj:M[>Qg.9U"ֳv|J !z +pz +jPls;_|D0 ZZ\-v' pn<1 &H}-:|;RA%^Y $Nwid1I]F=j E~"1i wfgFA7u/D|iJq Zǫ|^&|Y㺛!r=b)6]J8%~8!T?ƵI P"d6xA"26kdNɼjP"NFtP{rWnC{ jrH0"zAP/3ӆPts 9Vr<Fd^Lz^~wyCp8#@]$g7ǻKI}ҿkSD6gxcSiBԮbOf$e5Ntv +*֓Nw- $eiӯ At:dUAFU)a;NmN9b1NDПSXdު 8dO Me_}'_{J):jO)$V=ޞRSt(s !P%(H.~()xi} +hq9Hp[*" N4qdSJt#`Tb7 $֤M +A@ĈA[}8zCl#ԑ ߿ .'c.\y r'UW1Ƅh,ٴ^N@,2yٔ66|"4!-GEt4ZyD״ꘆSb%:xE(St >xEHk(Qg!Bw +aF]}u !ƪ{Cyoݏal(RdHP/{F +endstream +endobj +552 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F362 2017 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +553 0 obj +<< /A << /D (lstlisting.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 420.985 127.53 428.432 140.492 ] /Subtype /Link /Type /Annot >> +endobj +554 0 obj +<< /Filter /FlateDecode /Length 1937 >> +stream +x[ms6_qS7x%urm6zMqh +XKJRq2\Pdw(Y>Ųe_lo6#Ʋg(9SY8JKJf-irTimU_CѕUu1on}[]|O#|HC4)HRA[݁!s__3:<x (fߎEUq7a*́.qд_5ue:^ȥ_y Y0]bn XHTsUon{X3z 4W!;:U&2&Q-_ڷE/sEtI8%Gc -I^`QkWs=Rt3 9RFڂ7mrlE)2 r#᧦D4hHR$Kӧt +LhyRK\)zC*~ԕ׎z^׉3vE[6WXbFo(w LIP"Gyۺ Dv,:ܸm!4myک-_SU,C)q(r(qX6my]#P okI4H>% Τܤc꯶h_l8$Ũl~1gq(Ot9 -r0Yը7)ϫEqGEMm2%2,-RS6S^z?x8D9lĜc)LJ 'EԪu<&XÊh^χGl\&Ku>~XwHĝ%´ `\ yStGw3?*m!o{tiV! ct]?mVo@$ȰofBze0K:#Y66(~kfn@(lZhCP`}"u0wU,U > +!&>v޼!W5= w@Hq>~y?%vD.މwLEU 8@  v#^N˹_x!vu2=,:,9BLR,>=N|ݭ0[,Iy}@AE]6uYuidQ4՗$ݍ4H; +o!9ĉɰ~VMSGz$lB">M~g;[u6zr?mNYvW`c?A g"Nzv:3x/]įOTfD~`50_5鄲#*#)=:3^6)֤ /8' +endstream +endobj +555 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F251 1981 0 R /F362 2017 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +556 0 obj +<< /Filter /FlateDecode /Length 1264 >> +stream +x՚Mo7[ĵ' ?~"AM, ZBVZ{\)x1%wg$By{2,gLa8uJhE>,{oyܓ{_‡yHzJO<;Ԩ-Wl^>;V1p`a5 Uï| +m[x8VRAhI;tVc;elqݔ3_Lz| `Bp Kii}rϙQ2DpRȈjEBfy0'/@*E(6m <VjؖvUFpX##Չm˫Lvvl/[!PY( +A"'c$hn3{NF&GHLb &5X`Y姍KVcͣh`,YQ%2<AIjZdҏfY9ݎ{EמK|hE*/£zN8JC6J.}Ltݜ/f͢wWQ>b:zkNMBaݒB2Η;<;.(T`=k2Bh7%gp +gYJF\2*۲Nfɭ\9G;gNNF8V%@vC兀E5*Ѳ)*u9HG[x.9'P$C/5 %@IQu0*I-kbSxє?ģWNټ>nUSUe*{ix6EccM778wu3Jr#G}R762!e+,kwS4GE C^Cx\V^Txw<|Iq|2>_A Xk5HEE}e Nkeו-٨* Fg(xwQ>JH~gS:VJj.ɱQ>2de$XǚnwCv}6˥_.:: QtҜ_.]qX[$z/sm/l&۽S!nI9#Kw!pmE#a]8ɩ(F_ÇȻf9p[Uq_/Nn_z@Z7.イ5c +endstream +endobj +557 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F362 2017 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +558 0 obj +<< /A << /D (lstlisting.4) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 350.853 268.124 358.409 281.086 ] /Subtype /Link /Type /Annot >> +endobj +559 0 obj +<< /Filter /FlateDecode /Length 2862 >> +stream +x]o]@L _铓i mEa;q$Og7.GI4۝(Qp~9EV&%7WI)\@:zXCnD/~.R>]f%$~Kc=iYK7:)/bԷ=y5fژwJzk|GOfW?\|}Iģ!s݆mk8cG34rH)FXҎqsg䣗8%s—{~yO5\^~C뇤g*MmeAD 6:{]8I/V껩AC4V 8~?a+=L/r䧗L>򵻺GB FI.j{W1t~V ʼomw_b־3|ٟkP`/EPcAK˒Ic{kG:cd0] OMgw3AYk=iaSU/G#EiQ0Y"Ю^ެ'_^xOa9I٧5Z.rKKOJd=ZYr,@0U"XR zC?LJ?(ZڟOnI.EVL22@14zP>.T>7]cʭV`9b,Y N`!_OKZU(ocpѮTl롽*FGoA lMkN'ЇV#qߑz5ջ4!Iժփ^tFL@@F⿷DsW$gq +Q_v^mUn3ќ= ހex9~DR +endstream +endobj +560 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R /F313 2013 0 R /F362 2017 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +561 0 obj +<< /A << /D (table.caption.10) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 203.926 385.052 211.422 396.727 ] /Subtype /Link /Type /Annot >> +endobj +562 0 obj +<< /A << /D (lstlisting.5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 216.606 185.59 224.053 198.551 ] /Subtype /Link /Type /Annot >> +endobj +563 0 obj +<< /A << /D (lstlisting.6) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 227.515 185.59 234.963 198.551 ] /Subtype /Link /Type /Annot >> +endobj +564 0 obj +<< /A << /D (lstlisting.7) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 259.621 185.59 267.068 198.551 ] /Subtype /Link /Type /Annot >> +endobj +565 0 obj +<< /Filter /FlateDecode /Length 3032 >> +stream +xڽY[o#E~_a $:ڸ{, V+&x`Զvx\9ձg4,l˩˹6hH~+3UTz(d4S(i4?luw1O8Xik66=7nBA}v^wj{Hۯt#c=}wܾ~{-ͮ?]Ey>+8%e=Z*rK(zw[XjF,^SW~?l`odYZXhk=P^_aQ%|}`ܚ,qbJ&QYpq%֫~7H?{[iimk!_kXnv0=- m ,@W]Z~PdY1e' eҜhuM, +=;:Ӳl/=3[3κ7iepgli/Z˓ FqtMY%tZ;F? ;Fs Bi "=7#5hvܯt4kf0lQ$<0yq!nzp^_en҈T)̃Q̴5\.ҒFEۺzVf96h",OΈ1fdWx)A\",et0ݏn,9fRq6(v`̠WIt~0l)2/| }'z\E[RE +R֝Ӯwlj8}FsF󼙾P-({.`HmjM" +BGxg + >`nusϷؚͶTͣ$c\mI.|XwMUm"n:B'WiƥYbW9*;/Z|lۄ:4* +bdUN)I0_pIFਦ18Xۃ[N]Af99KwDÝvERعyŅܚk "KXߙJ(k7p(N>j +2(s8]w/<*WY&8bپxS4[a,ٝ#mgq´(nfW/?_4VW}?n{l5eH+_`n%Z87s+x姬d.'V\Nɲ * $)X<,)Cϣ +9{6WI꿄ҪbT\MK,-$ å{u;)#NM sK%/}$"\Z$ +3kFueREQѭU*>:Ҵ@.*uTyM &+2J1%Y&!~t'-JBur]*oF=LʌW>`q;ͯH}"L`5cFJc-֣yK#-j*14@d12.(Qsrh + -Whk_TGN&OTIB) J2GY=Grx0\28܊ك25T[۱ +4 h^PV4Lݔ\ڱ+`+o 00ria[ W8\{utM_v7,bVmy~=ҁ6ލA T2`69W 〤LIeono}]I}.x K&,[I*ܙFq[ϱQC&bHlM̸¼F>"#{F8!0 ݉YPNP kL5W3 {޸q% Oosy!zYJÅ(wqzYkv؞U:|ةR+)ϹdF:w/,]ޤHV] v- tXLUa4[ó="K⑻3e$^DDU6?qW1h43%r Bn#2:h'#V=a$2ÍMo>Ab*¢Hq(!%!^ևGi#)H8ch)%0Oͪ?ýB %KLC`P6O>Ag>|&ȝj=ge<^LM8wdth[+viˍ^>&}2vjPm unfq +ZG`桉<6y|mTt]*Bs??wܿeQ|3Woo~| wf~_tU׀u&f8Y.oR,8ΑSEȍ?cgލc|kpO\BlQy!+NݑD %!Sꯗ=Iq~Ragp*LT9ɿkO,$ +endstream +endobj +566 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R /F362 2017 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +567 0 obj +<< /Filter /FlateDecode /Length 2523 >> +stream +x\Y~ׯj2''JU\qbWڪ<đjH1Ac7pf[bquOCx?_`b1k׳ޞv b32 1`rg݋z? f>!jzg._,܇媽@Ql,g/Fۿ~?~9򼌠 eŌ["o^Ft3Prܮ.>rglTxc?RݫtHwХWi*_~!CbD*@qh&b.˞a}xwFT*ҵL*?[,A̟>m_G7+>n01 +iF!aaAzEj +8_}OGQLiÑaŘ,h21ғ6A0@aXlr%x\E8rO%"8+E!pg P#" l+of;s~Zf7)ꤦm$0Ǩ۬SH=a\vߥ K\A#>ܕ:eYKv wNΏ菥.J.T+e͑ˢ )`QmNK?^r)/zR7Py)H` p A!6-}^_ȦBBdR9DfyfEYvo̫,`Vka&8܄#9uQɤ!.OMb8|T#Y=N [qI!N.onUѫ].8t^t4E|_ Qb FAQe`8j@DLB^uɵNtTfo&I%N >=M׋AI`$MrUj"\QݶSݜQY8'"dJҵgq2 )Hn[ JZB)!9?!@6aOOT[Ih7 /|ԞdOOGE8bVlA(+'^?鬬-F,}Dm-Ds,.Xy nl}ES? aX4o˾bETتS,&(&1`&QdnTCnb#uez.9σ=eq:`Cyr s,r}84`vYIEP<9rkU@d^=J? "dF̒yѶV'Ɨӵmb N8K: H +a%$E~{j\2{lL/s=XeپaJn}s~0aI0s+ o. ]󉥇Ag&gim÷Y&]dy +s%cVAڜcĉ]26HB@"V@ +-!s>MT < ڋ*?ʚH~jIUxHl$p9OyyCdE5U-ʓ/#)D4F=_{Q5:gI3 +,Une8o:o˗]zhK4J+iQ ah;L],2}v^ν+* rDKyڙZA⪱\0>:b 192YiPNP9}z)CyT>2qjtV|Tp3"ZqClRrJx}#^7o H~8B b7 +hß e0m??.NL"Q82;qj槓8LaMih`d9ؤ2Pn +q]wKߍFg^ Ѯ6JxwB)H|r`>Dmv!FJ궑*NI}vze̱k|񺍐_%ئoH2x&IG@0~'RWOR6MА ئu@%Lj4E$FSDHc9c8>X&Fl&"i'v_1h( +endstream +endobj +568 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F362 2017 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +569 0 obj +<< /Filter /FlateDecode /Length 1764 >> +stream +x[nF}WA/܇I"(@P4u@S+D:40兩H8⮰sfΙ%f~9C +G?,yw?(‘D$# zq +Qa5?_=Ett$InN?x;L;đlyWĎc=Lrs7-~=3mM1|EoKW`x寏n=fo @(@dOs; }dA$# +PAA .ff?r񲋖凢?63PA* iioǶd~&5,eڀn&,xaub4}>wcʝx~0q0^+VT@Tڒ|>BA +ș"w6qrު.]]EY<#eˈj/P|! $ 9{:ÖG}AU@>wGf\-|>?1t͛ę(Ҽ,\\aHYp4ߞ/WpҾ8|wʡh TB8ʜiX-iЋ娐n#k[yj + _4_exr(?nmI e@Gyrby2$lP#c.t&}D|Yj=-'p`b#K!qXBsBWMOS!iˏC (do'Yf3:NntE:Kl{Wʿ=}`xN3ax 0Q}W1PcI}KXٛuʐ,ߎA5-ULU!dG03eA,Ɏ2(8L`PwB̴Ѿr{lpCr6;>SA1 +@j T1 LuZ08)|T%Vq"p{vx~.JOCZ]`q%2OY:Aha +PsH1 ;Rag{s埂>]l[6ioP-,}0l˵#@PPqI+ne='x땳+Z˾ᐆ,I =!JL&MZGTM=(;6N˧;ИE?N`!q²4wpH TQ7a5$ wշ_{;ˮ:YxV,>(LR?tڞ; Hķ];S2oosJ-SqA*6baYt07uH roiu%.adnof36Qit_|MUa͞L7GIKS8_$_xxXAfy~OEZMRӺ܇ͩ޴v?Md`)eߪʴG?!f xyc; +pʨD\o:;yL\{kKۭ# ʄ`#'$8!/q>b efrffV>ĒHPXNq>\5ZzV߃}-SLMj1d?B!ZH~?۳}/F+ j+Ƈ !lF)\uo#G{ yݒ__[t @@Dl +endstream +endobj +570 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F362 2017 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +571 0 obj +<< /Filter /FlateDecode /Length 2000 >> +stream +x\MoFW6'ܠiM?K[=AK+D:$e7 Kjw)dq z %r){3Kf#2-9F=>lZ%#:"FZ0PD˓z#Z`FMO~SPB>{~-Wldp::n.)p>:|_I&?O׋/R.$ow}8sp޸ L4 +_uӓOw=H yb@3<@t\v T1Ky\O8u.IYZ3.^qH!i2юC#E= @Z+V"CQV6ꟳ*Ig>:} zLgfL6{6uۢ:/"S2@p0Z2@h`:'Ġ`uox:GKn(ta Ta=`>6}"[IAPpLyr$0tRKK/)ol;6{I%iig6/<'/r~>vv92r*!+" GNq$T1ˇoŞ: +G!u 0CHbV +ӑb*zƀ}sG⤡_Dٔ}A.bN]HA2G8zϺQ^xmA֢9Ƅ)7-C3(UħK;LIbN<L~ + E(SQD!}*;,? wVit?e"ZLri +W,JʛdCЏ,^ck%Ӊ!B6XdϹhDfPXշpx)j̀ݓ-HCu;ܛTլ7" L]j "؞c.>x\$Llޭ/^Oݧ` +!  &|dWZէB/R6 _AZihQq04NH0|aԞ*s(7 /Fy6!#LDYɇ'{&2ǑE-!?r͡<8A;,񳛶O]*-f" + SD5WTIkf=}8G΁ __fYuT j_X_,'A9ޚ65HYxbf!,##PjtPaJy2w+PqJ ^21NQ Xt4i5T?Jnn;4Ҥ~tOX"c-$(n?m +x6i ?E@P~_ym \NZ <Ԅk̿]2bc. E{m'/CdsF헯ܐ^-v0A!>ALh˛,,,n:.vi*_)Xow~%fF"0w'pI,Wt/V16keoݫǫ7]8vuF5J|qT4[,ʥhxP#@IGb`M{ EmXLh<NWyVt`A#M&yC5R,$*'ՈCAz[v4%l&n޷q6ߟ6)k?2}marEc R?\gMWEGEl^lhzΊ}K*}<`1Bn{Ȉ8q0qκʐol^&me,VP-رgdOQx 0g0A =mtonUm:,-=!g)u. $Fq_KgP48Uzt]l ;֡Medy6i,*X-ʤ/R‡[yGamB (.~Yγ,;!W~cI`&Z5 }LwO~^ߔ瓘,0B6:uRӿ= +endstream +endobj +572 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F362 2017 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +573 0 obj +<< /Filter /FlateDecode /Length 1855 >> +stream +x[nF}Wȃ$R4K$‰ZZٌ%R!:R$JҦU垙sfv&yBg{+yһꟵG}[D0J%Z0PD$^s]HR6ؤthW{/{sNA ߿G{>%֏ir4Z )r ׳Y%EVtp.ڻ.UUV|T $>W.Ӈ*vs=z#e*،"`pj69|DoO0>M'8 ?󄅓c77WFe:>novh^frk/g0bA3b0K@[?2@ KpECYZ9e4b1y,bu0Qlr熛D٧Mݐ"`Tóqw:] 셫76cB}c_Q/O&V`PC2(7k*9i5(lJZ@B 9jӶBS4A*6A]"1A +8akѥVn/v4RLSȖ+iVFa-<]n WHR 3dCw7_8n~;G{^$O.މi5;K/K$WŢΊUFY>D ! N ++=>*J4LǙVӪ[! +8Ak5 ⮖V0f!1JвgtY}iQeu[)l* +3]~篞[lhjb%kSL \a!9:~K?ŭI-'$']6AY6$vnʚd',_dUP~&Ɂj)tC/sý^ޓ<<>.~z|ty:p6?qiUk :]9Nf<b̘B+P~}k +mAfͯM}$(eƏWnI/ZHpyK3_~zb}q*bmzP:υK㴊~ iCyv .{ũt󿫢irC4I%9=mIusXJ9^+8Pr +wM L:2 +f I 6Ǐ[WcR!n.~+cmP+:pZm j<'~'qZβ4U[lutGnqr@@P`mqsi +0.%/BFA7Ύ g]iTa}< DM^8 X|^' uo[b&.LPKJ0 JD1b(ˎgͮ@NыES͢6dɴ.Psf(s_\1[ճigM%S!`b)_\WL9aE@XXiWv!``,Hg‚1]4˳r2 \wé3QbU<tW (UMp:}L2͖]D aD"JևjqP'ooqbA@uQ_݌Uj47Aھ&(pCNh> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +575 0 obj +<< /Filter /FlateDecode /Length 2018 >> +stream +x[m~st_$E6h!5 ؓH\ .Elp' WkBԸbK9RQc9"BFq$A1IptﳮYϏݎC^> p9H^1 ,0"A.>Et4]bb70C h֠A0EpaG\al&1blP1GuLڵ!&&{"Ÿ=19f|T~gGID9Ȟz(ቈ!BA1EkP:&?E;KC$E>ڸ>(ϝwEnwMꕻԚɛf6{uH z;+ ӧ`i< hИ+$2a`4jv$ȩÌi@tn%0GM;;ugV.Jmn0aK4@t#:A:0]1|At`%g5d6s T: Ƅ%*Bu :%kY/g4 +aTs7ՂhtDrjW.{ &f90s=f𙑠*~oxWe۩^YN)S8b<1uMi[9:bi*nھ9/*u1__4R_E<ý۷x@^!YECLJZ +'g';fӔ<(4%G\(v^}S955ZtQ%Kbtw +=[g +7R4LI TCRn'<1 +m8?Ksi~_p¥}t.6-$_C/=%JKfi }RFeoRT U)R:uPk| ׋cсS%ʂaZ3y;LtGDQ V\cjDI7L3SדMÊ'Cޤ)M^>W7طm.|:7i,aˏlXni\ nC¡$%C]AnZ#{$GؘLJ2jg0 +endstream +endobj +576 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F362 2017 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +577 0 obj +<< /Filter /FlateDecode /Length 2229 >> +stream +x\ێF}  fgo&Mv&X,f Z#f8MY iy&ko +C":Uu\'8HN&{i猸cqBQ*e8Edq{!YBtRdukzy%4>$Y&Wf<+Y^Ȭۯܭo嫰aW 4Ặ:\U6a_s1˵ynGl\Bc H3mw-,UjZW6VU*/ofh [v]megp`̗)fЧT~~cU'˥N)ha!=㟗Cwt*oۢCoD&3on+dJ}4-\n60Tk#5AX+oUUOƚraa!0 _NO#M]ED('e@OR#'E3|g< Z3\!*h:ĭw!e@#7~6/`8x `kA`iAD$bzl/ ԧ +G̅.S6fĞ5Cir3y9WbQd6(&ʬSaFQT; a) qt0aj7."u&6(904a2nP_N1jjl t| +q4\{DEzw@_mgâ3_L`mQ, z T(=)Oހ1RO{7󍋈b g2* DxpBǓ'dMESo.R'OB4T9[䪥:qx{ZC||[cp}jBPdj򀱇yIdTAҎɯZh"oBБմ2~Nj{۷G l$D}~`G|H Yǿ·:vmkٍzl;;E{Y 4@;jʨ&R&]\{HLJY#a1M-GعoOR5jr#$O)JURi>)f]>Sv`pwSg* ue$ MK/ƪږ;.l92s Cc2).b_3\06郶9sw4 4E8 bs4T!`H]R!ByW4- S""= ? >^gJBQNH˟HYgSKp|Ɓ$8S T͈n6$'; Ȅm15f6#Nv%HxPV@hgr\9@X҂lLa ձGV + &zu֭juq=6Oɑ`0QSZ"dW=kJIH#)M_|Y*}j|xɐNN7])F#n>z4 +@/>u5H >v<)~)|''. D?@UqRgS.5|b@vRb;ϔ[S6gx;]<师?2|j> t2\ 7iwAgݱ@Ο̟|8cHxl f6$% +i4kta#YdIn+p.<ݰwO[i|*NƜ9yh0{7xl)9ZH/> j3nks|\+%;tIyKcF]Xp«HB+*Rκ }0NiۈMt~Q(d\!D Cő߀I/Fd֝tGv7I\ ;BBkPC"}B^ +|Zx OzJ5>7y757Kُf|Utd*n/i#zyM w*u)?ɦ_j\xǍkKȍ_ cTSb"""d#Ok +endstream +endobj +578 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F251 1981 0 R /F362 2017 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +579 0 obj +<< /Filter /FlateDecode /Length 2633 >> +stream +x[[ܶ~8^3 oA]nmb(P7\3#nL~}oFN4eP/:r?ef?lV=^7d`&ŘoCg'd^n/~M_sŗoYL7~2Bi=_E4y'U6J÷;o>Ue㤡AA]f8k{?RI]-=RiPcp[Fd± MPߟ '1J8ňm٫W(av:ߎqAȶ?\Zʋ{Ɗzx/PNы.y 2XS9L &2CB#v|ڬE@`K| e^vb(Ac0. !mFqQI-\ڀ^ٙn@ }ytv~c>ZV C@B΂pR7;tz{w{@^U{yWpNoDy 2y.2LpƋr!P6[w\ҕB|_ڊw :î1\X[Xc98`IԁVr*[L[]RX +o^Mc)G;H՗XdsHQKwel#mIpOA,qvz I?lZv-%Рp1^i}໽hj|_y6Dm8!!rh*#8<ͬTXZji8)#6+NPfщt=UWYi(b%Eߥ~.\j>qΐJ#QiB)V0jEs׽PvpLKl ɵ8ror뽔wdO lvAa8y_bn}ړ=ٵIl:8j<1)z˖(4ԊPzm_%5Yl'0FڎQ}JOFuQvlOa>zr3䨤_n`w1G `3Xo +endstream +endobj +580 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F313 2013 0 R /F362 2017 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +581 0 obj +<< /A << /D (subsection.B.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 266.972 705.953 283.515 718.915 ] /Subtype /Link /Type /Annot >> +endobj +582 0 obj +<< /A << /D (subsubsection.B.3.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 172.315 613.834 197.797 626.796 ] /Subtype /Link /Type /Annot >> +endobj +583 0 obj +<< /A << /D (table.caption.11) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 494.914 613.834 502.47 626.796 ] /Subtype /Link /Type /Annot >> +endobj +584 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 101.012 492.35 256.843 507.931 ] /Subtype /Link /Type /Annot >> +endobj +585 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/Qwen/Qwen2.5-Math-1.5B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 266.805 492.35 364.928 507.931 ] /Subtype /Link /Type /Annot >> +endobj +586 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 101.012 478.801 248.661 494.343 ] /Subtype /Link /Type /Annot >> +endobj +587 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/Qwen/Qwen2.5-Math-7B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 266.805 478.801 356.746 494.343 ] /Subtype /Link /Type /Annot >> +endobj +588 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-14B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 101.012 465.252 254.115 480.794 ] /Subtype /Link /Type /Annot >> +endobj +589 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/Qwen/Qwen2.5-14B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 266.805 465.252 332.888 480.794 ] /Subtype /Link /Type /Annot >> +endobj +590 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 101.012 451.703 254.115 467.244 ] /Subtype /Link /Type /Annot >> +endobj +591 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/Qwen/Qwen2.5-32B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 266.805 451.703 332.888 467.244 ] /Subtype /Link /Type /Annot >> +endobj +592 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Llama-8B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 101.012 438.153 249.795 453.695 ] /Subtype /Link /Type /Annot >> +endobj +593 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/meta-llama/Llama-3.1-8B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 266.805 438.153 332.201 453.695 ] /Subtype /Link /Type /Annot >> +endobj +594 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Llama-70B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 101.012 424.604 255.25 440.146 ] /Subtype /Link /Type /Annot >> +endobj +595 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/meta-llama/Llama-3.3-70B-Instruct) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 266.805 424.604 378.695 440.146 ] /Subtype /Link /Type /Annot >> +endobj +596 0 obj +<< /A << /D (table.caption.12) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 445.825 284.224 453.272 295.898 ] /Subtype /Link /Type /Annot >> +endobj +597 0 obj +<< /A << /D (figure.caption.13) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 493.017 148.079 500.464 161.04 ] /Subtype /Link /Type /Annot >> +endobj +598 0 obj +<< /Filter /FlateDecode /Length 2662 >> +stream +xr6Б2E8̮*{urIHZ"ۍn>$KL*U[Fnb]G뻋("8"#$T"\בdt?ƭqy>ߺP8h}sz#Q,x!FrRE&5-{a)]vRH?2֎ +D%D͞8 fo:e%B2TqXxGLlҖӠyJy:΂ek}0 U5Tt*.38ZuݦyqNLtEΫBx Bi+_|3dIӔ(x߼SK#2ՇKT5`)ʴ8)Zei|Hđ)pGZMش>_F"Tk}^fLS>,QގQX3Rq%qD%a)F6_ PKay76Tm-Mt;իnM} +XˁőZe%%菮nXaK<]7wHSH{^xxb LRGmvfwUS.Б.! mdg|9z:3@{Rv>}ChٻlnɟLKo6^xDfŬsg 9?[Wxx zBZJ#w4VUW yBXbO$ Fq7.3О J.e0UV5[p#莈>ykЭ }k`^;> +&o̦`t5YfZL|;of0{37{=7{=3{&gl榬S6)ɔh¤i$MF,%bG= +܋1irP +P>]}x>vnH! ޣ >S[=`\z dڋ/ߍ +ЛA撕VEra64](W{(ۿ]z1l!Vۋ_E K6']ƛ +(-5C$?9e \!Ǘq6n&o(I6.c6 p6)6t-8w,?<: E%edyfQiZy +ٔAi -9,BTu>S#.,u͟ã3xT3&=bޟ?01L b7|7Y4CAb)E9cQ!,|W}ܖ s~ҶHZ% & +rD&d53}^M囦~gD%6Dc[QJ\)(*zLepw_iu+\!*i+y{wņ;)$/#`>'eYRLATm!lqS>h:n IX"|7ZڄPX{f f;4-5ђ:x.WZD2VЃsXCd$#Pa"ں:] z͓OY2:ͧf,ESPb'@#v~$Ed%C%C"g\)^I_bk!* m4zkQp +7&,µ-H~+zrdeGlw T#mW&2KĮ h~YVX"K;دc:OiHK [=Y(bD9$K6p~ZYQjZWq4Q #4RLV{9 >#)Yso +y۰B!C3H~ +oU?C)qHNF63n|>wp׫~y:n]\1=of6267zv;ӝjˋ2V`LoܜF"o=M]kƠnL2T +j?UO(Rw;^T'39gb_oJoS!0U`lV-t_8t +endstream +endobj +599 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R /F313 2013 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +600 0 obj +<< /Filter /FlateDecode /Length 285 >> +stream +xeMo 9Av~ش66=Pe6bڴ?uC;>Bn"f +s`B&%T]"sj9vO>xƖ{tbߖDP@0%}Xgu > /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im8 2018 0 R >> >> +endobj +602 0 obj +<< /A << /D (figure.caption.14) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 516.977 646.722 524.533 659.683 ] /Subtype /Link /Type /Annot >> +endobj +603 0 obj +<< /A << /D (figure.caption.15) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 161.561 263.881 168.975 276.842 ] /Subtype /Link /Type /Annot >> +endobj +604 0 obj +<< /Filter /FlateDecode /Length 2454 >> +stream +xڭXsܶ_wB͘4$7׎$LUiwSU9./lz"~/Dca +L<ȋ8e2ɠl>Ƃ-Xe*8ٝM&Yf:x/otn%D%A΋ghDoP,\\b-KReI,+"ȗuYonIboXu1;T4O"WHTX9#vO{͹X3Tyļjס7E;˞̊,Vi I0L2q,"˙So# :Ga*YȒq%EED~T Z*6Lt !@ B/8RR/~fH,"f^Z${s'4IJ@MMUW3rOɗmsq|  5$,'o,E +8E׏Y F+$|72ÄUp"yF ff~eLxVGC6TB>UH-.խ5T|VI WL\;`hr QM|# v+^ p@J6L@Tx?Lsu yK r;!Ω½ + +_c[GBZyaDTX :CWG-JK?Er Ĵ3DzڛJjhUOd w;]|~rZ7B}gFL1Z␚X7R3w]_Y?hN]̦׎˘}ex|F[u*X!$ ,Έ->p2sK[vЎWžvuC]Dq:>auzvy§vb< :)+:;9-'89Nh"|; Y CeWDM%Љ5SyM +endstream +endobj +605 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im9 2019 0 R >> >> +endobj +606 0 obj +<< /A << /D (figure.caption.16) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 209.22 286.447 216.721 299.408 ] /Subtype /Link /Type /Annot >> +endobj +607 0 obj +<< /A << /D (figure.caption.16) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 203.261 171.278 210.812 184.24 ] /Subtype /Link /Type /Annot >> +endobj +608 0 obj +<< /Filter /FlateDecode /Length 1821 >> +stream +xڅXK6ЭZ VDRcd-& h-6k"v_!ghKZ+ΐr^  ~z_,Ncle}Wݠ3y/۝z+nqq!:_wxy{67`k;=.'P}wn1"9]6hhau ǽ(F!> *=s-cEpYFZrg~sqzobwkjA-r9z:9.EP_ n+eVPS<ĪUil)ʷȤB`[Y*tJl_h^ +$< +py{hsh<=jh=ິ) IZE2l55\ ڢb)!wcrrk0%X6OLL4*k\^4)B0Y(#xp9Nc6s0[E+%Xni}|M]`,poɾOWjU!.-3%4;lgd]i}p"BW 8ʇ`wf'%^BTKQ,/BZ #FK=kNRjG/RNGj\ =դ+#s {]^fK""ٚہǑ +endstream +endobj +609 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im10 2020 0 R >> >> +endobj +610 0 obj +<< /A << /D (cite.mmlu) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 300.777 442.05 382.171 455.011 ] /Subtype /Link /Type /Annot >> +endobj +611 0 obj +<< /A << /D (cite.mmlu) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 385.654 442.05 409.639 455.011 ] /Subtype /Link /Type /Annot >> +endobj +612 0 obj +<< /A << /D (cite.mmlu_redux) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 494.548 442.05 525.406 455.011 ] /Subtype /Link /Type /Annot >> +endobj +613 0 obj +<< /A << /D (cite.mmlu_redux) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 428.501 95.662 441.462 ] /Subtype /Link /Type /Annot >> +endobj +614 0 obj +<< /A << /D (cite.mmlu_redux) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 99.709 428.501 123.956 441.462 ] /Subtype /Link /Type /Annot >> +endobj +615 0 obj +<< /A << /D (cite.mmlu_pro) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 196.015 428.501 253.415 441.462 ] /Subtype /Link /Type /Annot >> +endobj +616 0 obj +<< /A << /D (cite.mmlu_pro) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 257.463 428.501 281.71 441.462 ] /Subtype /Link /Type /Annot >> +endobj +617 0 obj +<< /A << /D (cite.ceval) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 330.042 428.501 393.286 441.462 ] /Subtype /Link /Type /Annot >> +endobj +618 0 obj +<< /A << /D (cite.ceval) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 397.334 428.501 421.581 441.462 ] /Subtype /Link /Type /Annot >> +endobj +619 0 obj +<< /A << /D (cite.IFeval) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 468.254 428.501 523.988 441.462 ] /Subtype /Link /Type /Annot >> +endobj +620 0 obj +<< /A << /D (cite.IFeval) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 414.951 99.379 427.913 ] /Subtype /Link /Type /Annot >> +endobj +621 0 obj +<< /A << /D (cite.frames) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 156.735 414.951 221.805 427.913 ] /Subtype /Link /Type /Annot >> +endobj +622 0 obj +<< /A << /D (cite.frames) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 225.235 414.951 248.784 427.913 ] /Subtype /Link /Type /Annot >> +endobj +623 0 obj +<< /A << /D (cite.gpqa) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 344.299 414.951 393.417 427.913 ] /Subtype /Link /Type /Annot >> +endobj +624 0 obj +<< /A << /D (cite.gpqa) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 396.847 414.951 420.396 427.913 ] /Subtype /Link /Type /Annot >> +endobj +625 0 obj +<< /A << /D (cite.simpleqa) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 483.68 414.951 524.075 427.913 ] /Subtype /Link /Type /Annot >> +endobj +626 0 obj +<< /A << /D (cite.simpleqa) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 401.402 99.681 414.364 ] /Subtype /Link /Type /Annot >> +endobj +627 0 obj +<< /A << /D (cite.csimpleqa) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 176.719 401.402 219.496 414.364 ] /Subtype /Link /Type /Annot >> +endobj +628 0 obj +<< /A << /D (cite.csimpleqa) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 223.113 401.402 247.36 414.364 ] /Subtype /Link /Type /Annot >> +endobj +629 0 obj +<< /A << /D (cite.swe_verified) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 360.21 401.402 401.848 414.364 ] /Subtype /Link /Type /Annot >> +endobj +630 0 obj +<< /A << /D (cite.swe_verified) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 405.466 401.402 435.866 414.364 ] /Subtype /Link /Type /Annot >> +endobj +631 0 obj +<< /A << /D (cite.aider) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 478.165 401.402 523.988 414.364 ] /Subtype /Link /Type /Annot >> +endobj +632 0 obj +<< /A << /D (cite.aider) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 387.853 94.117 400.814 ] /Subtype /Link /Type /Annot >> +endobj +633 0 obj +<< /A << /D (cite.livecodebench) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 186.778 387.853 234.85 400.814 ] /Subtype /Link /Type /Annot >> +endobj +634 0 obj +<< /A << /D (cite.livecodebench) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 238.917 387.853 263.164 400.814 ] /Subtype /Link /Type /Annot >> +endobj +635 0 obj +<< /A << /D (cite.codeforces) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 430.1 387.853 491.968 400.814 ] /Subtype /Link /Type /Annot >> +endobj +636 0 obj +<< /A << /D (cite.codeforces) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 496.035 387.853 520.282 400.814 ] /Subtype /Link /Type /Annot >> +endobj +637 0 obj +<< /A << /D (cite.cnmo) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 398.507 374.304 423.806 387.265 ] /Subtype /Link /Type /Annot >> +endobj +638 0 obj +<< /A << /D (cite.cnmo) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 426.679 374.304 450.054 387.265 ] /Subtype /Link /Type /Annot >> +endobj +639 0 obj +<< /A << /D (cite.AIME2024) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 349.543 361.545 378.83 373.716 ] /Subtype /Link /Type /Annot >> +endobj +640 0 obj +<< /A << /D (cite.AIME2024) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 382.292 361.545 406.103 373.716 ] /Subtype /Link /Type /Annot >> +endobj +641 0 obj +<< /Filter /FlateDecode /Length 2270 >> +stream +xڕXYo6~۪C5Ύ3---^`a"dXWͽǽ +=E\(J9ㄅE3a1K>4BxxŹ;q A xJD'8+x!g/X^@ʼտ۩߈W L_l㧫0˓aqm._zu"Z]-NpZMai6& O2cRm5{ _A,q'#%؀oGav@/j,d;5˻R q݈ď*5x+˩ےX8[QpJUUf=Â@= +8mw4w8[ Bd5>{"dE"b (fE\]sIYO{׹PjԷ^+]:;"0eq(mܫ^7$xσF8>^L!x]#oѹwBSM!lxԨ,͚Rc>|ooG>oh[o7ڧFʚ(0nv:3U59VDa<\),"T2/"F@yI|`ys>-\xQWYPYazص {;#3]ht-i3^ix Q`}3s^g7= OX%by`b4 ;cR:k#8_ofN3]~{-qU6Q!XEi3;_|!d*叐̌4Y#݆𜎇aK檀mgL gKɶ{ )׭TreNP$8O6YwguQo%d6F_feFnl[}8=^3S6jYOZ8Әaߴ/z%y,[brltHRann/g\٭YNJ`% 3kR\Je]m)JP,pc& Z6S5SϣKsG@K(<͕qWjOcT9 PkfkN6FVˠ%.kZU[eqTd beG +Ф}xffl-k+Y +oS a[aHj +IY[SHu]xK>ZA%+ d;ڤcWthetm9Wx~x߉+@,W LvpunQjgfXbuk: +'7S +V3CWVg)n.XP'(1ΚI7D,k7̑K[YEkԿ DlF,r/K4GHNq/P@qw&EB2PB@#t;.!+'9]Do%Q4!ԿJ!)J G+ ڀԽ`pTGV +eUi*0u9 m"8KV,J(eCCo5†1F,\ T;ߡn/] 7ꌄ-]<:C) !i Prz{1y)d^o5iDb%ƮPZ%(5t1qPPΪV={2 +wX cV ` 7OSS4AKL{W=c]!RAÑ`WVvIˁJs=¦q!* _Bκ&2DH9wjՙZgb$gdGf?|Tgt͸ \i|aB*iP(u.-8ոk_E*XS0/F]@[P _ `XmA5`Z{m1Ҋ(6NfH!ų*1o"PTuqn!̔t` Sh[rk^O&7l~PU2c䰑/m{,.(ƚ5^J> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im11 2021 0 R /Im12 2022 0 R >> >> +endobj +643 0 obj +<< /A << /D (cite.Lin_ZeroEval_A_Unified_2024) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 454.474 496.221 472.979 509.183 ] /Subtype /Link /Type /Annot >> +endobj +644 0 obj +<< /A << /D (cite.Lin_ZeroEval_A_Unified_2024) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 476.571 496.221 500.818 509.183 ] /Subtype /Link /Type /Annot >> +endobj +645 0 obj +<< /A << /D (cite.agentless) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 363.679 360.729 410.17 373.691 ] /Subtype /Link /Type /Annot >> +endobj +646 0 obj +<< /A << /D (cite.agentless) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 414.827 360.729 439.074 373.691 ] /Subtype /Link /Type /Annot >> +endobj +647 0 obj +<< /A << /D (table.caption.35) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 115.752 313.307 128.872 326.269 ] /Subtype /Link /Type /Annot >> +endobj +648 0 obj +<< /A << /D (table.caption.49) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 171.215 313.307 184.335 326.269 ] /Subtype /Link /Type /Annot >> +endobj +649 0 obj +<< /A << /D (cite.QwQ) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 166.905 197.218 198.145 209.388 ] /Subtype /Link /Type /Annot >> +endobj +650 0 obj +<< /A << /D (cite.QwQ) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 201.607 197.218 230.872 209.388 ] /Subtype /Link /Type /Annot >> +endobj +651 0 obj +<< /A << /D (cite.codex) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 126.995 135.455 179.976 148.417 ] /Subtype /Link /Type /Annot >> +endobj +652 0 obj +<< /A << /D (cite.codex) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 183.428 135.455 207.108 148.417 ] /Subtype /Link /Type /Annot >> +endobj +653 0 obj +<< /Filter /FlateDecode /Length 3407 >> +stream +xڭZrW(0`=ZnuKvxC ,EYUXDuԚ{L?۞g~n~3{3Lg,,I(2ܟVESr_ֲ/z8<+s}YA8v%2G=ǁԹU+n/{^;GER{ج64P4{<2uN] A & ,p(r蜦Phi!vn~7.nʲ.-zM"g#{!/HPwɎdKIMRHI9VjU4Z }s43 |' Z#3#h*䋿]~hlb 6XN)i~A+IzKLr{zm3cjXy[edfn}W0媃S߳|6-0M%<&/vDA,VS@xӌ6<95x6>=XHpT^%Blyz3lBy"Jm&qoṟdcMwkZV=,v +E5{iV +[/7eGv$/7`%*T[Ql\2۾y3iXJ w#=˪bBС{߹~{CE󝯟wJo$?h'#u B)'٨oik]a~qsP}i9ʍfPoT{4d:=?^M`' }S4 E)1L0daGXm4eՈR/sSB$FHy~e1̀: S66:n^7!^PȺn)h9m&qxqLw'}ZyصR+:H +IЩ-!h |YS&] zc[ m!"R̲^O'J(a^>8 ɏ%R[CÕD/iK'tHh?/NJ@7욽|,@Npt0XIeRsj.5" brWIE"Htj8N'@@+c:ZFDǦ0]t ajV< `.yRǚpba6f}[c2^5n5B_p\԰zU٭g'Nx lp%Tm3IJ ӊQQ-(l}-N"GĴ +ǵB f(ztIĶF'T68Ӂ:'Ll\5\Tr(kջ|wu+ܨq!,->>pOgKЗB{Z ;MQ[S &Ȧgzq(733|ussE<$3p,s.Dsg^ƮOBj8pLi.u3z]>DxQF/a |p> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +655 0 obj +<< /Filter /FlateDecode /Length 3782 >> +stream +xڭ\Ks6ϯP2v+Ό83Ɂ83x"erl\Dh7G?wW?MSzY9BHR_E̒S͌X~ ~Caƕ8gFI'E|Q$޾WkYh-r-M;zFGUhxC gM ?~q.OWU8Bݿ:B4 +@ ;mfyYӣr44x݆4@Tg~gsO5]M ^BuiAQC`cbة/.ϯy> 8js)(\ {@t~/]lYtA1?r4(DډfJs_,sVKՑl<&#tc7C7JW#:m%FIMBzGtvxeï"_ZHgV w `p>yo*o?LkӦ@c RԟaUFxɱYTMAд4@#q6 tB,.>Bu˕M^+U) *nNY.#XMGwM¬v9t{@N WiGx zҜ0,19Qk}X̻iXf5@N$Y \ PLUZ?AM;!DƞɎ WY]H¬0!nO` s:5rbf&:kHܨu(ǟ}Q51sZ_en44pb}5>۞Y2LP}PM~ $@'#n헴Y(d0qtR_31 f +6tvjeĮBK&`:냑s*9@L} ut7DpmRP^j+HGj0}0 ~wc;JtlǠ!X4;KefQǍx7ʳIVChfȄGg}J>;}W؝ˬs~a߯߾n3jaI _O]%#;NJ4 $_,}L:Gة=ʫ5@'?b.HljLj`GI o`={t,P@=Tvf$7K=5 㽏?pM}钍M=:S(x|if=v:8utP 'ٹ/-2nVE:6Yahnʬ/ܓrvc&'Shʀ9*s9ZgttfY +:/7)_ڴi6v7 LBVV. V4ϷtK{}s~Fm5I<{9fF}! +PsOwa̳+$Qt_ Uth/ kK9Lh`sIl~]ϧuUZ|t6~NjM:K}w Ir` K5mKΫHYl$$̻HZaV>'&lܝ*]Ή/&~6}:akmgצ7m?}s7F}ztϬ;jun\׉sk6ո3p~vՁ wX_]+Zܫ7ϋm <1MqtX{*`-yhewa\\}p%89ob1ټm0 L"'Y91f +endstream +endobj +656 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F249 1980 0 R /F251 1981 0 R /F263 1982 0 R /F267 1983 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +657 0 obj +<< /A << /D (figure.caption.18) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 119.472 246.326 132.156 259.288 ] /Subtype /Link /Type /Annot >> +endobj +658 0 obj +<< /Filter /FlateDecode /Length 1739 >> +stream +xڅWݓ6/r3A <^MM3Ӵ2l59ع>w:Adigz4Bill"|{} }<9q} #Gs߂V~ڢh"QF{yGtm3:'cbAZAD.d/Eu ΡEG] @3;ə"fǁa}*b}!_1-ٸytoZ#ymƁh}ҎVCx(fA 8oǭiZRh>ӕv:W":Yf224.gu43=8f'}tw Ac?,_w+x Y0c͚7tOD +hnz::m MY,VMRTiU +ט^d7p&fZUfI)U_+@k㔘HQWoe!W?ڻ`K{;0-# YN'fb޿[*YR5iF`w#hgcpp<"k=*naWOVe Jy4s#~0'z=9ç8z<'^dOYZ{lTERYsdb +Rb4)>@róJ98Ϊ<PnEZG4s̄:[^ ;Ekk|&=LV;CMrg;"fgmGT7-znрXκϗRIY+Tfۂ;5Ђ[KZ͒^{ huķho9gtxlM{#E`{Y:_^D,q! + +3yࢯJ#`}ͣY=4Th)uɺ@Q -AEpZh݉YAmL 53Fl#5 ,QS,0_@%e9<৭Lb]'"I%F/ Ζx +pwKh{)2( +pv >Ea' u\{EE~-\6Wm#19 Uŝp@<y=#ܖuG VXKnB,{BÓÿhȥef1sĘEh#Ǘ7n@9.m#qYB +:PRʯ=O*cY;L:,k!`-sYfh,l:' +endstream +endobj +659 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im13 2023 0 R >> >> +endobj +660 0 obj +<< /A << /D (cite.chiang2024chatbot) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 301.508 442.985 364.475 455.947 ] /Subtype /Link /Type /Annot >> +endobj +661 0 obj +<< /A << /D (cite.chiang2024chatbot) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 367.94 442.985 391.86 455.947 ] /Subtype /Link /Type /Annot >> +endobj +662 0 obj +<< /A << /D (figure.caption.19) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 512.831 260.071 525.951 273.033 ] /Subtype /Link /Type /Annot >> +endobj +663 0 obj +<< /A << /D (figure.caption.20) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 146.656 124.579 159.514 137.541 ] /Subtype /Link /Type /Annot >> +endobj +664 0 obj +<< /Filter /FlateDecode /Length 2443 >> +stream +xuXY8~_aKԀ8f{`=X,&@Klے);_EVQū氉6E/ QX&0MuiQ&nb6"XGOw￰ܰ(m7edQ(<5?/0 .΢ewO|8 _H7g#Fv^>w|+kfoD.ݷ5oۋcdnϲqȎntSzڟG:uhyxk.ƻӴV>\ +U 5.Fё69e2HCC9ęi ]3,JRw8)jO\giiR^oq|˳Y!tj3-I×'ɳԹ8hQ]{4hϘeWAaM)@0")8` F:i +=;iaBXJ +h1꿲%)XIh Z I +ֺi=mR툔/8:bnZmVM[Z[."OP^)3c;FF3''H@h\^ +EtFMVDK(Th3m/Z,cNŜTL;{]D9շ4I9Dkwm!/̍9 M~Exw Mq\A׀Z-\$X[zuH mס@!˦h#-IC0[1њ2)bI5g!cJ6rsϒ6 +d cQ Wq@A.;rՆ_O-5b↫zqƙH{(k ŘO_yҕDYNj”6Ъ A2ڌ|ص˿&EsX CcaQt n2xf'- <:|*VxJ U W9.o5݋Qyh>i-uň薡u3kBiFqi^zgsh4',498"纨<=Iz1`: +Mػ1|l'jAȎ*2ƂW,2J6q,h0wi\ >e.$l@36q"+X50n lrlV5b1)*q"ɪ𺀁-쨿: [M4A݄5P^-,( +j%`ovI|`x=o KD ti-G~U  Zn o!R; _v &a(!=ظ:gW}-a".YRf|x+M,Y)8xʴ9'a Ŧsi+a#hRJa˖kLExF+9nq΅ }zç BBBu=GU@7#:sB 50(lnojPAɌڕ94,3"7iHZPG3'3Q7xAiY BJFAͩ>rNBCѪu2`gGp;sYPB>Oʓ`KMj>f3@*+Q?!3$hP_u=Ls)]*N}0.;wt3S{S'ˠU<ȶnRf}wΑH/K Xa1"9}{xBW YVS )NtvX캛e8S "jKV¼a>f)``tZn4o^TVe*_ĀT+M$բb#2QY5?q%--5W,N ad#BerO3ZB 2qЀARnu0%/aβb0c .bC% +;_S!{cj'XO)-SkP¶o-KCH)t[KocHV̧[ `SzdT^|TMki(Ӄ.{WϡXq٥yZ4Yl +endstream +endobj +665 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im14 2024 0 R >> >> +endobj +666 0 obj +<< /A << /D (subsubsection.D.3.1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 303.14 496.203 330.436 509.164 ] /Subtype /Link /Type /Annot >> +endobj +667 0 obj +<< /A << /D (subsubsection.D.3.2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 197.019 482.654 224.315 495.615 ] /Subtype /Link /Type /Annot >> +endobj +668 0 obj +<< /A << /D (subsubsection.D.3.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 284.005 469.104 310.755 482.066 ] /Subtype /Link /Type /Annot >> +endobj +669 0 obj +<< /A << /D (subsubsection.D.3.4) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 157.619 455.555 184.592 468.517 ] /Subtype /Link /Type /Annot >> +endobj +670 0 obj +<< /A << /D (subsubsection.D.3.5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 480.411 455.555 507.384 468.517 ] /Subtype /Link /Type /Annot >> +endobj +671 0 obj +<< /Filter /FlateDecode /Length 2447 >> +stream +xZmo_~*h˗(ԕEIEP8@%%+3;w<(M€יgf9^{Ξ0ȒKb*O2 r˸F(m[7z{&y2OA»@S^"eA_U۱/VR?~J*1]a%fwZ݆oh}Qz(0{]ҵhǢ_r#*@(l<vA@xDۀN*<#MKq]?22h_IJl4@e X2I=xkoc-~TJd(w􋾭H*úڡZwnkֻ=7v}4s[S=.3Yda:e6$xDP>P۶Ϛ]1\]Uso-u|ҴMQVu564:xuenp/E[5j ̺2 4&E]ڮfpaW1|fl+3!Ϯ^ ym:VEz,XGSi, +ht sKNfXyDy#'3)IoO1 uv8[c_ <%V 5VfxNs(Ц#-NQz +Fؐ m47Q2U:@kAX"P Gw|MWݣ!; +XU(Adaq[0pLw5uvӱ\0琳g 0~B J EJQZ Ҫ0 =c<0~(#ѵՁ=/Zut +bOtYDM5gS>g>t$9w-wMߛK@ #_QÈ@(>vm<`h73k)NdtʃDfT@`hHu,a|*a7YI.X@dv4C3M}p<C912+"İjT LYEpZ BG"n4C]=0t; +ނkbޜW/BI8ᯉ`vO ß~zߝLB[ MƑUE6ggK!}!0A<ڙЫy ]oq9[rꂾ)4H".8|SC)٥z)k> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im15 2025 0 R >> >> +endobj +673 0 obj +<< /Filter /FlateDecode /Length 3181 >> +stream +x\ێ6}W4)UR~⛷Ħ˗wi~vCMeowqH$ȄqlHO{60I;Cǎw{৙Aُ=uib8*wZ;J1JtbnZsz6L;zY'RHy++i{a$rTlØajesy0Ndjx0]$; ~jd7<wڹHyuM ,H8ڍ#E5sTJl8wtb5x:Y^[SDI^! 4W-]к;I\pQc~]'{Ѐ3R -L3=},Prr]ptXofU@>Z $a^Z[ JC_}ju&iAB;?cVąyb&IN,wl\gg:๪:{.`YM@CL8#q=? 0)~y+ +яe~%ؙzY<;Och4#+0=JI\Hfk\!:Zh hI. r5fz7Q&@mUQn$\x|[tGNat%bIA'J |nLd}A9-dB9-#d./ٻU7l Kcrc+whbR +Eі;sE46B$I$vޡ{SQڟ?>if:؟t>]k443m lhA<3+~rq7HVsȤ#그gB> +Ok4S+0$-I`6, Y,x{FmE 7_7l+k +!L\\kS;j),zI+M\9$p {*TT+`!\3rwE<(. *1Ls.H=k?@^Km_?{4Lubne$]gmqZisMŖ5&*&*jg ZA wi$gp}UbbV7 iulj% D<0:. +G,,:WI/wT+{<苫BHH8a/FScZOoU˗4nYHhzB+u#* ܊LDcnUB\׫fgZfSrtG-b8,"0W6DK?lt:,+&- f\S xHDw $<Ќ!#vbE^!K.v՝]Ke;(kVR=7^\ L7N.eP3>V7d)fN4৶TK1}l/j!t:ڥс#{0eGTsfMs|*o\^/9ħ!`pѪ7VqazuXL@VfVWjXS +!quda?Vea$‰Qȳ0-tdBLHݞ J+!ʌyuO xWHQ,tBP&?q+zԶ6AnN^^5 fO?NxLQn `ƣ4|zzk'ZfSN?5yu=tue; ̪L>0L(T4={vAQbE O#'NUɥWYF#!o7F4cW00 I^Df-5tZWtu& ljsJV6Fzv-b5d<֏eܔԶbAe~qr-E*=wY-ԫnSp7Bv4j#)mA\'llqC"=)QP2p>/$3!nyIwV)V!2CXLIӗ-z~xCGn3 b!/,DHY.`Չib0MnjN߱)y|6z\f};D(A_5̭„> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +675 0 obj +<< /A << /D (lstlisting.8) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 330.688 418.52 338.244 431.482 ] /Subtype /Link /Type /Annot >> +endobj +676 0 obj +<< /A << /D (cite.safety-benchmark-sst) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 201.02 108.065 263.334 121.027 ] /Subtype /Link /Type /Annot >> +endobj +677 0 obj +<< /A << /D (cite.safety-benchmark-sst) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 266.782 108.065 290.593 121.027 ] /Subtype /Link /Type /Annot >> +endobj +678 0 obj +<< /Filter /FlateDecode /Length 2786 >> +stream +xYY~_}tl$3q #R&g<6SUMQZı}+JDHD?TYt7țo$ +yJrF3O3d$PEϾnu +2]GH +NN*_06Ԯk?Zd*vECo}?6k{övٌ+n‹O膭驹GWoojivNGI9]PN<9^Q% vPmNO;2ݢ* +35,Z"F,X2l` Ӓ4sxh|jMO,^=pYK6X5˭ (XA5+kie3W2~z<hB#{qK[ޓ_v]׆tȐBd]yO3lQ$Ԥ|}{iں;Ycynp}[7ԇ f Sa%ߗ"U y@ :3z7]4P!ߨ'VfE9^3]q&B&)<^~l{+ ^v*ӧ} Qicѿ4)Dߌ@TMS`s.? M?&*åK[M}#RWYI(c = '- j4Ȅv-u2 ꗰNǡ0ϛx֒`fv>[_U"ǡhxP+* lhM.}hLK3frrii_05 XЂ3#l8?:w^D {FWYBB'l }U:Q~sh&|lj&Q~zIª=i)ҋﻱ05߯43cӍ.{KT)v3UepUncG7w:?*#bÉb k0ic81:/]1t݊Լ̢ UBSsyM}O{pXdCbf~ŒZE2W+LØY$/a +}Bc$hhsqvQ {`&[ +ݱ ~?š}{תۍwFyp_;t^ +%s9JCm{wc2;sLotAVQ)G =JFs8huo''Xx̏a34&ݱ2*Mwz`LJ;ش<%rFޥ;p $MƟe4s=%uK[3ŗBU:) 3 ` ˙"q .s"J2щ:~G&DL:3;zf~xLaSu]ݿNxhNؓRERl>GOXq*h fLܔa|I}+6T1ڛv +D>uķ_&yИ,U z1iCĭưK! ;HNy|G&av͇KSSty=P2mXs Μ@yA,}VȒ;_+ xo|V&*2oZƷ17;2^eYlW){5MrM[)4#m4C<O*ҘcqZ܎HOƁqy:_oT",ZHj͐H.W>yz)]7]o#˦1bձ!/~7zGw]ߕnּq?چ]љE> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +680 0 obj +<< /A << /D (cite.safety-benchmark-bbq) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 224.525 741.819 288.15 754.78 ] /Subtype /Link /Type /Annot >> +endobj +681 0 obj +<< /A << /D (cite.safety-benchmark-bbq) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 291.732 741.819 315.979 754.78 ] /Subtype /Link /Type /Annot >> +endobj +682 0 obj +<< /A << /D (cite.safety-benchmark-anthropic-red-team) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 209.113 674.073 277.645 687.034 ] /Subtype /Link /Type /Annot >> +endobj +683 0 obj +<< /A << /D (cite.safety-benchmark-anthropic-red-team) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 281.483 674.073 305.73 687.034 ] /Subtype /Link /Type /Annot >> +endobj +684 0 obj +<< /A << /D (cite.safety-benchmark-xstest) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 137.347 579.229 201.269 592.19 ] /Subtype /Link /Type /Annot >> +endobj +685 0 obj +<< /A << /D (cite.safety-benchmark-xstest) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 204.745 579.229 228.709 592.19 ] /Subtype /Link /Type /Annot >> +endobj +686 0 obj +<< /A << /D (cite.safety-benchmark-dna) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 182.732 497.933 237.646 510.895 ] /Subtype /Link /Type /Annot >> +endobj +687 0 obj +<< /A << /D (cite.safety-benchmark-dna) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 241.081 497.933 271.301 510.895 ] /Subtype /Link /Type /Annot >> +endobj +688 0 obj +<< /A << /D (cite.safety-benchmark-harmbench) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 164.464 430.187 235.049 443.149 ] /Subtype /Link /Type /Annot >> +endobj +689 0 obj +<< /A << /D (cite.safety-benchmark-harmbench) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 238.879 430.187 263.126 443.149 ] /Subtype /Link /Type /Annot >> +endobj +690 0 obj +<< /A << /S /URI /Type /Action /URI (https://crfm.stanford.edu/helm/safety/latest/#/leaderboard) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 110.72 306.462 499.621 319.455 ] /Subtype /Link /Type /Annot >> +endobj +691 0 obj +<< /A << /D (table.caption.21) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 375.462 190.885 382.816 203.846 ] /Subtype /Link /Type /Annot >> +endobj +692 0 obj +<< /Filter /FlateDecode /Length 3626 >> +stream +xڭZKo6W4Ȁ[#Ƀ$ &db`쁖nbR8~E5%X`X*:vWWo~PISQXEl6TI&iRz24W.tWKEϿ>HoL+cmǿu=aԓolwƎ5vz'~TmʰC8~?~-ȩ +T"x`i/'}߶##͂캐x|˫\ wQk̰V( 4e!lc gq;⠣s||-'w|6z@eHY/qtl͓X0ÂgEyZU>Y3#^doB&)´*y8lwؠ\fV}?Pcm.."qnb@e\{j ީq>$ЊQnamg'ָ_3xm(8LT0֦^dU0# TmUg.jhtO\F6 vLC"N$tRp]]~4L@U\[*Dey(h\ϐ1Fs7rf3r!qzͲݍ`p ޡ +U$wT'M! SL>F .0ls]" jK\-V.*NW",2ΞdtJiOƌrP[q")R]7/F>"ь +[IĂ%~.ױ`ƌ1Ղe=_\dai 7u52f8[ʉc? vąUfa;1YrL~}AhX<$H{-fA(A w/=`R2i. T2GgI怨YIA)~Nps4Waɮo`\(s;bИ+]13 \^`\BjiMɎ  &p0œi\ L= +U;5̵^zJLpWM0xCOR\XL%e",L.~2yӹ'+2wI 8]J2Poq֓K\b +怀g'Z5kImgh[/)/l8ȡԣqw 5zԩKW.&.OM'?IxYM\V "sv.1.Re{#;Yc ֍9c:p9ߟD*^ˌan]'Y?~gfqvQJ)6h=ߑ~Kxk;{{7ze[赶Zo7Vz^{(mΓ JQ19J L0NE;¬}X{Pq}#|p *-=h'&ހom^9c.Aw.=Yeer_X9ܔ_w̖㲻G@z{YmhBY{>VXT.%%ּbq^iQ3%Sݟȉ)%g#HФF7r;$3b>:Y`Dθ!47ۺKlt4NKjI~`DʲH{qҧ*$D$jv_O +zXp>P o@ yp4:#%ä]3B 1l0wAj5K渰o~j3wH+ i52sܷͬ_wy-AL +:0\*6Bh;.%\(]$n E/Ͼ* ap´K9 %;UA, v _ ĩZ<0r򙤎e&cmV:W>"Yӭ- ͣ̀R 7/ْ=)XMFofj9nuWv'c9wEֺT9((k$uһњ#)Q:*\2\2A2l*`/0Q[.3Goz$ʝjK)XsG{gو/#yp'Uku}>%2]ys"Ν_ 0Dr U]9G]>a1ރt*+in4+Z[m T3%vC s:GPt~hL`ҞGZ~tǹ Lh.eTV +O(P @n'7I E6ȖNg>p"\qKV`[D8L;H%LT G^`"PBOaR+e㤐m}?ӵРx~yZF-]DW{Yq_H2B3alutOKz+u5@o!%ohikYGPڑU.G[.TS6ZA,%k\š MebGiW%. +endstream +endobj +693 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F171 1978 0 R /F421 2026 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +694 0 obj +<< /A << /D (subsubsection.D.3.1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 402.605 688.108 429.405 702.058 ] /Subtype /Link /Type /Annot >> +endobj +695 0 obj +<< /A << /D (subsubsection.D.3.4) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 180.659 255.294 206.963 268.256 ] /Subtype /Link /Type /Annot >> +endobj +696 0 obj +<< /A << /D (subsubsection.D.3.5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 330.485 255.294 356.788 268.256 ] /Subtype /Link /Type /Annot >> +endobj +697 0 obj +<< /A << /D (figure.caption.22) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 353.604 221.421 366.724 234.383 ] /Subtype /Link /Type /Annot >> +endobj +698 0 obj +<< /Filter /FlateDecode /Length 3148 >> +stream +xڭ]۶ݿB/2CHOv74mi;pmT_],ӝV/w\vd_߼-%qlusy2,JnU#95IT\zorɦ/~X">)}G}l1xm̧{FlnoN=]@L,T$PeFp XqvfR1ʸ&rgwrT*gsrLk2|Z68Ox +g1ECi vJвD$#I_ ,!"?WhPm{ +z 0,m]762ia)'@zj{/P,$yt}4eKR|P+/->pdx2Zs!QH@驁_ 77au淞>- 緕-{kq675`sl:%1m[|5axtΟRY6SFL8tp[~_iƃ'3`-V=WO3D=q<@n8U#m.̞LnNu:莭0`9\"gf?Q'4hBƨUx(C@;}z#9mO: n릎<~āoH$+p͔bc{R.U}x*%lq>D)z3z v(+‹Lc<[S-4 L4''^"WT5=*787ned(i#\m<@9?g"ZPBdcĐhNwjkºuTnHNq̝` +K<=> E1P\0bvx@z);"d {mþphIwOduBG+ퟮ)d1437|CoS1B>]?e]X>Q=ܛ+@>갡?C]KWl@"G$rt!ذC GpkJ:u,3-)m'-!]=VWj"ۣ $e>D8VBrmp]YKDi'Aa>nh hy"q@CnOsl@OcF{o*.|@!o5}D}jD6~4?h dV`ZsOHK$B&I)t`A[cSu Y=kRy[P(B0hjBY ?ޕ1X# +(Es\q`6S8N0ʞ},-bjPH{5dΩI7"BU2HsKPV +ˢMaI+ p?.?nO;>B=a݌勇1L: CHHrm.4 ;u <k>15!gǣpش:ld+}pN}`Q`5i|6, !lzΙ_mw +endstream +endobj +699 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R /F313 2013 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +700 0 obj +<< /Filter /FlateDecode /Length 218 >> +stream +xeN0EY: OfACbڤ-(C*ORYk=c`  A30XBg 7h] N| FWww5n/;6`51z  +Xj=2vɔ.Ir%gWJ{ɛq2e}}*Iqp4xo8M5a9>Pkdgs?mUP +endstream +endobj +701 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im16 2027 0 R >> >> +endobj +702 0 obj +<< /A << /D (table.caption.23) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 132.905 113.419 145.916 126.381 ] /Subtype /Link /Type /Annot >> +endobj +703 0 obj +<< /Filter /FlateDecode /Length 3165 >> +stream +xڍYK W-EOc;+899%NzEf2@juoOŗ@ã]t|~)]ܩ(,R=>ݡU`2SwyYv'iXdsP-?I4ojiǁPTYk, ]|ăIpixoC]^;7"0]{V?gWTo$Qq8I̬Æ4 j0OfQix<M6kaۚgR-}ӬkUȧCΑ^Aa^j&^eywroWn_^5."$׊/i +}יg@7 29U8vӅ"_HRolJd Ʈ_][=U֌S[/JPAJ^1T<0KKf3'ͨ ,6e2q\M'zsUf`ikd45JsDidWXĬ˩*V7$KPc < Eq =ϵgG:\3z䎘]j#NCݭ }5O`xA+F8L3f3ʝ^霠OdQ)LׯD@ex,8Y^ُ8J|EOAhBaCZXz2ήILzS }8w{NZՏlXK1uFWOK&/?52O٬1R9V腸 U͌Z +)86143?eX 'g +! +'sEN$yj2wn4cM@c\Tc\Oc+c+k\yB_S25{+^,Ա Zn<2Y`B biĊY-;p&}8%C=`#3ީn?ݘL^*9<YBڥ=GK8Z.eHTr4}q e-coCdzA>;/n + Ж -n7K~MIE%Ш70 K֌.NT-sG}46Cx0 V@΅O{1#gK.GހTšive#2/Ȑ55uEBT{#D;K"< DǑ2ע-ɅGཱུ#Jݗcg9 i.a;-c=\ +QYWlGyweE H`\H#n](7I&I~ɠNDG$QfNH4>߉U7MG4<ü[#:LC5ܞ,hJkX-˕j;4+ >0Be +)by[΁rhEzwe(ns-{†WȆ7XIb䕴*E1e>oƾB)<89Fx,^]xq en=;Ic:xFhp@8z8 +s=s3(V83m?3ꅻ^'~8Qsk?qkہॅt9UrHVμQQB aoL>νB؏\Щ>mB6XٶL ͳ]W#mtm3HSq|ϒ#K:/2xVv +l5B݀=9.rEFp/^ff:I $r|1ϦC-[;䋦HeuΚKTׂ<$vZ>۸ j $.g!Q-$,#RGS nl(ݤ@^$ +w㫑jT ~|C׵9j[SnHߥ]UL.JQs3s.A8"gCg.]u0 %v]PȡfǙ5*dL U?R1uGc_qW֝KR)}6`XqsI(~&^L3"QfRPξ8WGK"A,7#썑]jgt7cqoBf; QDA$I5GCUNd谡?Uͫ2#%Fq㣯o_ +͍T\+시ˉן3!̮ PEdV>ŗLKEdzIMgx'dPeVđ yd$~~Bt'/P~_ %e*a~ˍ!lSY*al{&aZ* Փqϴիari)ۇB(/b|)n!M|e>U{۾Kt? Ȅ/Rq_ eТ yxuo*_qQ\\d3Z* @,9;)Ź/}OM#AorfJ3-΃{q3uäHMOER +|M3TR|I.<#SFJ&v\,./w]^zLHVuƉvۥNzM?.u^B +JQ.ëxAR1ßrɆ՟k/PF.waeby!K)rEev q7o"C{ѐ5)/TKPl>.~f(k +endstream +endobj +704 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +705 0 obj +<< /A << /D (subsubsection.D.3.1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 335.155 661.01 361.955 674.96 ] /Subtype /Link /Type /Annot >> +endobj +706 0 obj +<< /A << /D (table.caption.23) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 330.591 404.419 343.275 417.381 ] /Subtype /Link /Type /Annot >> +endobj +707 0 obj +<< /Filter /FlateDecode /Length 3393 >> +stream +xڵ[[4~_κNu>q_8p^a;'q[d˹ x"˖URIS'_ʯ~r/(gU^1)L)Ȅ*yU<Zs*OY~~Q˷ ^/n+}w[{όٽ1*}qX=wL5neڞʍ<[xָN^W`"SӯH~i3]okYfY#ܻnhS[^hf{ XY=~m{?OTbTe,n&(Ӄ9"TnZsECKvE?@sAҩ/f9i@^UUW]>^D$?8=&01+]8&vK`\]MY ݦ>4'3ń ?*䰮fkYͶ> DZDgwvQĐeVȄ=]iEGc[O#փ1%?A4#BUD3ZLLb`6Ifu\zY&2FJ o!SPD1-j$F*ׇ2)JCKT uW1 +%9D k.Q@)!*31ʣl Ϲ\0rv` +|* +T#Tq1H$y ,<`v*ޠ<9XRyLDs&â"t3BvF +`t _h9v`c5:gA)=FMi^^9 `bsXuճ@Nr4h^ߦCP l"qy8^OAe˙]HXܥWciɍ[,#* @}ڳ Ԏ!/!ԞAv@K#q+Xoڙ*UfV(nUg2);Ԉ-Vݰ9;6Dof0 B.i X@I?M:SDb8_PYxʯcb}!#(BM*ς,8*]B >FvۣKˣt7,sHceP KAco6 N==mn̂ xhTpH:H\nQ-u'M,Wai%<@W7< #x"H:|@lcxݥÞJ뼕}%  Q`7:%6ýb:Xz_e`XneVo>E+}Gߥ2N3j۾. @OĂݍS,q;?s.CRޗey.heHKG|*BP +KS Aq6')0sP" QTAn{; OaL/ 1L|'K%l̖[ j" )t}:q8=9[ul| w˵K,i\s9QtC: :ͮ58QF/(1#;^gbALDL`05%_k2pMflNU!ԑ +:rsKQ5~t"3t(NMW6sEaJ+s9ct:ù4m/_BiL(opl[vp:ָ` +PuNve_Xƴa,>9o (q;]1nVVb> ߝ:+TViye/ڴz@n՟X<HѷO_=_g#(ܲ ]c6=)px~r ]m{w7W`SWࡧ0aCD%>SrPW!o.diw'#eA,4U-1@P& +endstream +endobj +708 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +709 0 obj +<< /Filter /FlateDecode /Length 319 >> +stream +xeRMo0 WJKӔ6׉1mcCUtkMĿ_ e*Eb~~v` ^=6ho2BWޯG9( # +ʆiϔ dDz%mH%bn!T9[bw& +"NgKrCd&KSEQlvMWeuh@Bd:$AGg9+j0 +=dMmiMy "<lFYYU|u>3ES;i;v+9 /dN#+|ciUn*""[,`,(V*yI?xޓw +endstream +endobj +710 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im17 2028 0 R >> >> +endobj +711 0 obj +<< /A << /D (subsubsection.D.3.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 87.609 665.306 114.235 678.267 ] /Subtype /Link /Type /Annot >> +endobj +712 0 obj +<< /A << /D (figure.caption.24) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 103.574 509.49 116.388 522.452 ] /Subtype /Link /Type /Annot >> +endobj +713 0 obj +<< /A << /D (subsubsection.D.3.1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 295.072 495.941 321.995 508.902 ] /Subtype /Link /Type /Annot >> +endobj +714 0 obj +<< /A << /D (figure.caption.24) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 446.804 482.392 459.51 495.353 ] /Subtype /Link /Type /Annot >> +endobj +715 0 obj +<< /A << /D (subsubsection.D.3.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 435.232 129.245 462.528 142.206 ] /Subtype /Link /Type /Annot >> +endobj +716 0 obj +<< /Filter /FlateDecode /Length 3193 >> +stream +xڥZKW2jDɱN*w*99p(H.E|<k5CNn4>|P;_<};N~jtܥ%.b?W;_ߧݯ8z9EPMwlKєNlJY邝 u<7 b=3/ʫڱޔC6_ټXP# 7\RtUʟǶ{s>vK{0t ;l]ՐzV6P6֦b3i.f'z-oUczEc S]gtP^g{3/{H;W ^(y{Zöi~(_q7UV׊$yGiʊ<姓݉vl_'WG읫әLCI{|}7:r +\Q3ھwRΔ"HտCy`; W%޻)P\ݵ ̥ڻbk4]ukx|=/NzAO4; 2ЛW=y\o4Ir_TÔ-7ה6s-Ѕqdk>*2z|h*uP}툁0a.JU+{Y;h; +n窖>J-}%9 5`e%Gu_\N ߈sd ؋L -M/,Q2>-$8w6M՗5Ԣf%ɣ nƙF0;f~?jMD{ߍO6*v. +Ӏ-Vk:mzz/3WZ_?lWpq$8hG &sG&4[~7+زuzo~]G~!=:جʖ({iUPǾ'ں=reW=٬j]rFǭ řu nML ХE>/nJgSK=a=r,>m9 F]a@=}3|-iY _ +hMrv8I4vs.f=S]?K~Ua>IHUhL,ȢE_F8 +:h 7CN_ Y:M8z|qrO|0p +c֗2]TP팹E#W4vD !b5w,Al+-c(DԜ Fl\ +Y;@c?$D/]c b ᮿAspIhmgr|`}WJ@n3" + ++se~70CE*s 0$G +W#XnKfE꜡Dۨ%*$}W0z*;v%3O kZ~Qxo„%B0q,> hS;z" BgF0a5KZ(`-P{2grK䔙Pw5Ll1ɲ"mv'$&,ZD|7޷u1^C4Z)~趏ZR2 h{;>'6[:8?taR*^[]1 +۸Ǟ֑/F݅D_)@ Ds1O>4"Ly VEPWK.PwĢsBpš<6T"Z96z^q&̠1-Rr'R% ݋qօ%E\ >aQwKo+!h=L=X`!ɝυaLp `Pc_tt +2DPm.fGQ좗ϒ/ J)o٫M]ZVg]-,I"MqQ`HvOc;`/EK]gE &hmA54\B¬_rUB Ɫ+$5r}տw8,f$ UsJLng.!0cś.14A侅Cq&\PE#`t_K ֋-z sUcWIK Հ,D[w[<"=0"ʝJTj)PnteL+I: CBa +rD[tM8u~ @.Sȴ.UX&5u<+ [Mg8;⻏c?4#;Ucnx_T$oxcEC4{D]M[' 9Uu>_gޥ@6KNqƺE okSb70@Zz%MGuuj.sw$0$碻ǚ?Vq<0Na(Xj9ZQuPxގ\ஸX9|r7rqKe.h^[4>|% +7}tT{n,M^VC ȡ\W9rιթ0!ɀ`6՝ԅ +?TLM.1݃wY6VG݌ew|!e&Og%8X[͆y[GJ.J0=|ήra ]oZG"~.}K(U~s +endstream +endobj +717 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F313 2013 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +718 0 obj +<< /A << /D (subsubsection.D.3.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 81.349 741.819 107.653 754.78 ] /Subtype /Link /Type /Annot >> +endobj +719 0 obj +<< /A << /D (subsubsection.D.3.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 341.3 714.721 368.422 727.682 ] /Subtype /Link /Type /Annot >> +endobj +720 0 obj +<< /A << /D (table.caption.25) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 297.729 701.171 310.849 714.133 ] /Subtype /Link /Type /Annot >> +endobj +721 0 obj +<< /A << /D (table.caption.26) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 511.413 158.814 524.533 171.775 ] /Subtype /Link /Type /Annot >> +endobj +722 0 obj +<< /Filter /FlateDecode /Length 3053 >> +stream +xڵZK6W*Nbc/[vbgJ6=F)R P=8EhP,nb3_^?TB\\( E\d"Ou\Pv.je"dMb^hu)Mlw+YD]Rf]\L{0C%iV`aWߴݠڮB$i[*&fUwC~ ~~!c!c*U0c[5C zhu fgNwӴ7|.3 5_-LWpsKzύ;ҽfk*8G<-:0!Ռ YyaѬ4*3Է?@NϹM*yu58ZRA#ա +,숃wӥuڤ=<302Ddh68:NҔ94@R);oz Tn}\yRp2*ednrQTE[ Z"eY=`GӺo~)WY)UwU{@ 4E'2],(VⓑxiW-n"f}_ H,ۺ|#=;,zYR0rԃ {ڪH)ϯ,HK&Y\ֱ>{X$Y,BNZ.>eg"]duQq W*TjIVJ/4uQ.㬉zC>qt‰Y)u!"TiRh%XzNC<'IYB[\ç4 +eaY'0w Ӿ%LGߟ4ѷ/~~BE!KiH&Qc2iL[sXK˷}J"N3bD?wwj)S%/%L e]qNQqb bd\3=2Q%.8iͯ{Is)̟6 +]dq06!D[% MfXR#aY©wzeD-4sD/u;J'kbN9>YvF!g"A֩};7,p{ykY%wp1;Jr#(E휇x2Y ]ȿkȽܯ _!siv.ANPΔ"fD$Z2_2&{BcG7'1. rJ*ؔ'q%rh/Bi$zc}̒bD:<(b(R؟ @"`缂.BO,⢚ +y!ezeIOT{\%@$gHӓC硟PN^<6Bb ӎ8Nl_9&P^EKMe4֧Ms. np946]/96,EN %>9a;[_aU釱0yKae8 +:(BިC|nURF@ J»lj\jL`<Tu"Gݵ.݆5yqg,/d4Б< )Q8?gP]׼`%ϫ +,7y_sFХ,P+A0eQsa8Yy.J4MD)zXn_۞Bπ! }X}-mC<|)9/tUfq2MTS;pc@1+$\`Oa?ȉ^LOS"g9[KB}L, K)7 +Pg'R#A~*+ &$ըrŶGn[ە1r7TsO%]]{FfJ''5[cglPgci:$75L^NQlmU77cbݐsCgO[X3nj-G_?ni 6V2slL:E鮞|MM v[CV!ݐQI^m ٺm8F9B , qhrѢhM]=VOZn.9!W<j4!?ebhv.*!qO ^^w\"FV'k5s ͸k/71B+:ٕ^v@yΜ6ǀ +F^̪ 3Kepxzcv$qeܦrX* +$ū[j!'Egا!81(ixE7[Sٓ05؍ri AO[G*:641/"y=ƷR}d ~dQ)/sxr;j kh:>oKq(i/ ېV!a$n7gB%=۵Ir(jִ~").]o%bhp7]CqSYgEf숣62@8x8 XZ j+~91wKVmCkޘxڇR49L;C?S@ǎ#۽n[3'OiU:C2[C1[`e7etbd +2RQ7?0ڌ'$qݟ?@_/i!>@<[*zݏD;ܧ xf;TiZ[0ߛζP9r .YzQם ^ YۧPjZÞ~ih[/羽(u,p!O?ͣ>]Z!K + HF&eULi%OG +W$#&y͋_!U&Qn=q:o? +endstream +endobj +723 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +724 0 obj +<< /Filter /FlateDecode /Length 290 >> +stream +x͒MO slPYk4nGCek5ݮ z5$ ˼ *`p0/3@@(T ^*1|\1ұnJėPhۡhNfgygagjAȷ%,!M|0.BڈpBc~g\tMa<[OC6vŅ{k_Cn)w8)x|^Mśڮ==y 5 +CD̈kx +'ԩJq@.L?EMn\w~J>@JKKKy +endstream +endobj +725 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im18 2029 0 R /Im19 2030 0 R >> >> +endobj +726 0 obj +<< /A << /D (figure.caption.27) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 201.309 271.318 214.233 284.28 ] /Subtype /Link /Type /Annot >> +endobj +727 0 obj +<< /Filter /FlateDecode /Length 2856 >> +stream +xڭZs6_Gjd IӉVۙKSĆ"U߂)d@v],P P f~;LX!} H&c*D0__LPfBLfx/Q(fu}rѕn?E:Sy5[u/txQ|`l74V1gTETp]EV,u0k.̃ˍ񋖅o͋tFotmU<y]Vmӑip,Ry_n UBnz _;S2]/:&1;BT0ZѴbDcJ#; +ȫ,y̖E!q"Z}V11kV{!*,ʓ_,WB G ++ 40?g(ʸYEbeϾ8I؎\D80Pgu+A]+sE!{ctշPXI) kTYjmI*,TRX^$"D!^gd86eopS&K9]xB<#3r d<.cN.Ke+gI$ 8%0v__}'C^]&ɏCO:*fB 9Ya6d)n*_!„,}%8ӀgIrxXx,@ϭk/_ P@Uba@A$;>}? oo>}fF>, 9Lux(lFXP|x]=9ט#rkosXS)1^AxEX;x1<4d J;.xo>({u 4H}DURU; 8w{rPkQ8d]*mPⲬ\xLE8}O"MDŽQG(A~BXC%EOxwsq}u;EG%:9D$I[RxߜEѩVO!?^FY9©@q* t)r Juéjm눑fUN$nVǖr"nq!ݻ8B'CՉpؗfb8(]~۹~tR`<&T6Z JQ3V s# 쵇{n2 a^e}(emW^HۏN1P̝c$s ԧcC"/(w}٨]i(3d")N3Dp4f'夳 'Gu],mR5cQAb~[\{06-[Ƥr枿cnK߽( >ҍ{ 3#.kߺgi#df4*GsjHpX|, +pbKv0NеWž8wEJ2*PDc&[%E"L[VaSq\/ܰŶr#@]o t|Uj*$@ V1*NqƬAӮ\^tWEmU޵c|0p6bGEW[-0-8|-Tbq:G ŽSi˻-;#=^S[tn[]\WmeoD,}5ίc2P.\oSo@|+'zb:!#[WjnV`|iV=F{@P kzTaO׸wo +v{a'-&/Aҋ%ݝ h uoZKNŸG~V:[7ozɰBe͝t$$L$X1$נ[wmzJ;' lӁ) ~ݽ=mL#9>mY=mJ7Xw;5n"tF3JWbaL+Cwp fJ|Gplo4V_mn8ØƮY6u*3 :"]Bl(*c?uΉz΍~[ +@;tZt<7zxfѻ́ȆԜoUf՝onK`sL{YI'Lz_YiӬ;wh0윌gv1ކ2TAa^vV|Y{Zg˕Y4Uv[jNTu|۽l)uIɃr-N|z +endstream +endobj +728 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F249 1980 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +729 0 obj +<< /A << /D (table.caption.28) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 111.718 490.8 124.838 503.793 ] /Subtype /Link /Type /Annot >> +endobj +730 0 obj +<< /A << /S /URI /Type /Action /URI (https://artofproblemsolving.com/wiki/index.php/2025_AIME_II_Problems) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 203.169 490.8 525.406 503.793 ] /Subtype /Link /Type /Annot >> +endobj +731 0 obj +<< /A << /S /URI /Type /Action /URI (https://artofproblemsolving.com/wiki/index.php/2025_AIME_II_Problems) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 69.87 476.841 186.778 489.803 ] /Subtype /Link /Type /Annot >> +endobj +732 0 obj +<< /A << /S /URI /Type /Action /URI (https://artofproblemsolving.com/wiki/index.php/2024_AMC_12B_Problems) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 73.215 450.152 522.791 463.145 ] /Subtype /Link /Type /Annot >> +endobj +733 0 obj +<< /A << /S /URI /Type /Action /URI (https://artofproblemsolving.com/wiki/index.php/AMC_historical_results?srsltid=AfmBOoqQ6pQic5NCan_NX1wYgr-aoHgJ33hsq7KSekF-rUwY8TBaBao1) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 123.328 409.095 525.406 422.498 ] /Subtype /Link /Type /Annot >> +endobj +734 0 obj +<< /A << /S /URI /Type /Action /URI (https://artofproblemsolving.com/wiki/index.php/AMC_historical_results?srsltid=AfmBOoqQ6pQic5NCan_NX1wYgr-aoHgJ33hsq7KSekF-rUwY8TBaBao1) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 69.87 395.956 525.406 407.804 ] /Subtype /Link /Type /Annot >> +endobj +735 0 obj +<< /A << /S /URI /Type /Action /URI (https://artofproblemsolving.com/wiki/index.php/AMC_historical_results?srsltid=AfmBOoqQ6pQic5NCan_NX1wYgr-aoHgJ33hsq7KSekF-rUwY8TBaBao1) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 69.87 381.997 77.847 394.958 ] /Subtype /Link /Type /Annot >> +endobj +736 0 obj +<< /A << /S /URI /Type /Action /URI (https://artofproblemsolving.com/community/c3752401_2024_contests) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 485.534 299.468 525.406 312.429 ] /Subtype /Link /Type /Annot >> +endobj +737 0 obj +<< /A << /S /URI /Type /Action /URI (https://artofproblemsolving.com/community/c3752401_2024_contests) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 69.87 285.918 467.057 299.321 ] /Subtype /Link /Type /Annot >> +endobj +738 0 obj +<< /A << /D (figure.caption.29) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 421.59 272.369 434.71 285.331 ] /Subtype /Link /Type /Annot >> +endobj +739 0 obj +<< /Filter /FlateDecode /Length 3710 >> +stream +xڭks6{~tJT4^|u4%m{L@,̇BR~>@T,{:b,bw), qŋ7R )LdrqqHEHL8^\' +t'K@.~8}"9Re"plֹ[u=Ms}M݅'K-m"/v;tS +ZFxvѢ^[ieb)uw8ͨPgN.oZwd23*G6-(ⱹB_$ ޝBUp7۝p #Fm{"- \ۭ29ŋ/$b"&Pz,Qȫ&ka!4N74Zh#C)T6CF|gi׮/G7 "DQ:cju(%|3ITeT@TxS(s"xbt:GyiΥ(Aɏ\!ׁQ݂f߃)3=iCyշ.N(X/܁~b$~K +PKO%<%L@TIF37vcGc:ȄIX GCQ=QM&Gդ0'y}Qh;W\J%G$LDL>fbHUpIu}1;bϵ7zHyLCurJj^Ο|J{E&b(~(Lʑxv) r:XסGLEBo] LYn1A?9[.}iKĻz)r#*ҍnW8i`;c@ +"Puʢ*j;\27uo Dh\۶8e)i~sQ L0R^/Î҃}l.|A,R:#J+cĤC+{caղd-(@N5޸U''[oqt*ܯyZh7]-5ܸ5".A8S6#b[fyb*W;+<87 a?I??qs( F8,l:  X 0^/?:qaƫrC.{2Z}[J0͔A׸ i%Tt K񯻶~=Ya1(D" TAǚBy\$Nvul +z+6[>V"[F:t94x۝]%XGsΏBC úmsx?&3'L$thJ;$r2w|M +B v0f"F"hq qF;VJF~ȂkA i8ֽ_ù#+j;b4C!QH Lel>!8C2 ^F@Z/yO?e +D&niV @Wn|B<η'bkJ1:clUN۝ dv uF:[M?OT* +̡諛t>oھ1˴.1WI9lXEp)q## +"MURIX2A?u ph?O~J%NfQfnYx;W{M H !|³2hZ, +B=~D n'\EPP/'gD?'Մ.ǹQrB0̰NI;w0ɢ/]G-8f!$NPll)F\ժ!\DD؉#Ol/γ+\&*o +WnsAcCQ[˄72V sz Ư:EDt_&n,44B9[ǰ ~*Gfn}nS2<0_˻jWF* 5DpC*Ɋ$Y$PiKҶqVCƴ`IQo5Lz 4&|C0$,8zI/m=v™s|En'/Ρ2? +6fZ LQA1}7FoiC +l 3l^"V!x5>cGbY ȱ!Oi|&u bE&^o{.:;'G'Us! F:kjǀtr @vtŵ +'TfLG+DIH$Ee9F5,v3?+jRn@qG쌖bƔ&Ǵ|0>ـ@2dp&F@1#5n-8Yq+ ϔ?i)[W +ύ?'!%MC@=XEDnCz"r>RdFơܫ+7`r +{ / Mz"$Rލc7ƧPx&!zHx>_>pfĞ'K{7 D+ $Ӥӑ&<.zɮ'I!*,|H+Mҁު$>@㦭׌Vut/J +њ 8d~-.}SlcU2A 5'b<&~4ŃڇuNh1އtLQ ͻ0h%wܻ }n-4^4& b[]0+I$ +C5WpuNb=Q +9ֳD-7nZLyBpbePC6::pkB/6_TCUO5[ⱊ4VX ?>̯xV⌡`@zp}OR}omw7XWc#Ш"v, oqPau;PF`(ۢb<\()*w R(B9 +G*p +?;n[-NI`l{' esomk>F{5!u=:$mQ#&#n>J3H^V|O5b] Eb-aXٶ +th@\նB_6I|s?\dɁ:L٧"p` +ï0WeILqyub@2A\v@ivnG'12 +V6mί|RT )/]y_KPezt l(, +Q(THvx<`_{%ܗ51[0^Jn?CbPsEDW(]b8r0Kvj, V- q^GL/kTޯ9I4 у/#e,h*JF}N\(mcm>aBzI0t;|T'΂rVrFa$}!T?&) ++RS3=4Ww}]wڡ{0Z1!`5GNtt쉁N +1xWA[w7{|R @3_N$?8 +endstream +endobj +740 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F171 1978 0 R /F249 1980 0 R /F251 1981 0 R /F263 1982 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +741 0 obj +<< /Filter /FlateDecode /Length 318 >> +stream +x}RMO0+r5ѓ&܌-.t5{ 51$fJ) @>WJS"XYЍ!"%c[ζ+u* adnMk4hg7M1TBhzpj'/Bj8N X&)˫yE[w}=~8*Zl҃G?Vlr~dn q`#Y}j >tfUFŠk+g; +,?A sSsœ9殉~ +endstream +endobj +742 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im20 2031 0 R >> >> +endobj +743 0 obj +<< /A << /D (figure.caption.30) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 121.909 401.661 135.029 414.622 ] /Subtype /Link /Type /Annot >> +endobj +744 0 obj +<< /A << /D (figure.caption.29) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 507.708 388.112 520.828 401.073 ] /Subtype /Link /Type /Annot >> +endobj +745 0 obj +<< /Filter /FlateDecode /Length 2203 >> +stream +x}Xr6+x0bc=9@PZ\Pj@&IP +L,:F,~9g +yeQFMU"~j6"Nk^ 4nM82<[\$wG^Wi=X؟'K;=GfUmk-{_{mߩ 0_ jPnvte",M$9 D H.D0{ƻNHh|fL4Sg:kR,X_!2Arߢ)Dؕwa,eUtۂZG!7;Ftʐ&|Җ,S2׍/8F8KX/(  'XRt "nU?:'\ROJ=qYXeWk`ts#0N GEZȴLVD! + +mX ᫯ +p +  cjӷӅ/&FRڜZگ`YɼQD)"HrRB=(Od4s`Vnq!F#cL] +\Mdt*3Ш6 0mOL*xoqA~Ȭ 6hUWС{\qP`E7pǝ~ sεJVI)}6bpTa@B5,)(hGEK 0VEcRk:n![ҝn2OdN"go Cʏg@k)ϙ]e6q3!S ӃUHmkc9wJ 0 +IGʤ.pXƒC:KQi. ۇKfU"(1ɎФ8R< )T -ը+\ >gК@d,pbpJ?rM:;ǭ!-u_`B>lm5 ~A0_(M3+8] Z5RY ˷%B:T~Y@݀,-r}}j;)l^!)F|j5 860'Nt9s`r>V]V6^AVϲP:2RR;pNpNQ/pe[jd 8YtjahC F{c Uh{n)q]7B8>ނ:E' +Yk퐘 shn7 +!<_6/ *Jz5}ݽ ^@?sPyU 啤fa@:` 5`~WU׷C.p۰`[_vs@2gmB_5ܼ:-ד]s,n_7}kՒYk+ڠŮpI<ƶx>Be—%$-~f?e4G{*&ЮCZ{#3 +J7Um<1"e+c~Cب e^ +;;A M,wEXd'K7!#ZeVmt{7x +endstream +endobj +746 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] /XObject << /Im21 2032 0 R >> >> +endobj +747 0 obj +<< /A << /D (table.caption.31) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 196.953 379.617 209.723 392.578 ] /Subtype /Link /Type /Annot >> +endobj +748 0 obj +<< /A << /D (cite.busbridge2025distillation) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 129.52 189.523 207.924 202.485 ] /Subtype /Link /Type /Annot >> +endobj +749 0 obj +<< /A << /D (cite.busbridge2025distillation) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 211.485 189.523 235.732 202.485 ] /Subtype /Link /Type /Annot >> +endobj +750 0 obj +<< /A << /D (cite.DBLP:journals/corr/HintonVD15) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 239.293 189.523 302.52 202.485 ] /Subtype /Link /Type /Annot >> +endobj +751 0 obj +<< /A << /D (cite.DBLP:journals/corr/HintonVD15) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 306.081 189.523 330.328 202.485 ] /Subtype /Link /Type /Annot >> +endobj +752 0 obj +<< /A << /D (cite.qwen2_5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 240.117 176.765 271.795 188.935 ] /Subtype /Link /Type /Annot >> +endobj +753 0 obj +<< /A << /D (cite.qwen2_5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 275.296 176.765 305.557 188.935 ] /Subtype /Link /Type /Annot >> +endobj +754 0 obj +<< /A << /D (cite.llama3_1_405b) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 376.016 176.765 423.55 188.935 ] /Subtype /Link /Type /Annot >> +endobj +755 0 obj +<< /A << /D (cite.llama3_1_405b) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 427.051 176.765 451.189 188.935 ] /Subtype /Link /Type /Annot >> +endobj +756 0 obj +<< /A << /D (cite.touvron2023llama) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 454.689 176.765 524.001 188.935 ] /Subtype /Link /Type /Annot >> +endobj +757 0 obj +<< /A << /D (cite.touvron2023llama) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 162.425 93.375 175.386 ] /Subtype /Link /Type /Annot >> +endobj +758 0 obj +<< /A << /D (subsubsection.B.3.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 328.71 148.876 353.755 161.837 ] /Subtype /Link /Type /Annot >> +endobj +759 0 obj +<< /A << /D (cite.busbridge2025distillation) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 377.644 121.777 454.57 134.739 ] /Subtype /Link /Type /Annot >> +endobj +760 0 obj +<< /A << /D (cite.busbridge2025distillation) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 458.032 121.777 481.843 134.739 ] /Subtype /Link /Type /Annot >> +endobj +761 0 obj +<< /Filter /FlateDecode /Length 3126 >> +stream +xڭYYoF~`)@eرq aH lΰG*Q!@뮯*XUon_PJ~bu[A UIb VxB$^uXPz2lW؃m/*X+<[!ڶO4Pp,Lۻ uLi59ume[F07o?-tv5*Mg^wxd=*i,=bػTYk"1kwC%ElClc wy7Z1_cqq)vmU10mV8JNL7JG>v 5]6l8d?qN:V-HfE? \i;' t_@@JG^SrQޣmU tb +0[h#ԩx{''$Ґn9{{۽efGݾg^[ݛrmK5H{}<MVOMv$@X*f}[g]_u}hHˁj[c7ܯCvDg>ho9zރ5;F}fK^ߴ(YLkgv-h=iՈBdsݠpe쫈iݞF~7f GȔ,H7g՝RΣGv|{0{U9Z2f;]:!F.A٭0 -Qun;oW>y={]EIk@r@0MFn4u qP|EУȔ 1M,NH۹ʖ. +w{lFn Ux`A\w{FCbN.e KȌ _h,5 T QqDpdY`<@q 3`Ls}%[AKZ(?)]3_2}V@+Ɏ LЕ}0A.<%g-v.w>ZH釠ЁuWë_~ V9B]OVnaabu1O4԰Z{{&WxG֜$bpNa:'GO++ӈəKKj6b-#(7ZB;9C ܊#?eɺaW UwM Fjlʱ^KCr:%d+B>G# ^.k^AH] L B!^hIyI|.y3QpNx6XFu$86ح6/0R'~_S͎(O$Jp;~ƶ/s1uqF\@p1g\r>/E 6=HG9'.nCz.b#$)Z}1!K Od^j),MI]2_Qq~K/p=saR-r(y;Pt=&= it XdrNqU#A[XE(="1RscJ]ka9Xr,\K5=^8QΎҋ䧿N`eQweUpzd,M3Np+zZZG464~ O %I=䓊$4AP?\T.bWp r*,hOb"VHR`=dNULU ʵ7;v4{ٻ[TS}Bov{ba=2OePM@,8R`"@ EbSTVP-e-ƃ( +xj!𽫿yapZykgdr[IQյ&88vzM{Z[( Ձv +Ek !9k54UGix;[n.Be= B~{u5"uPLL[E:ѽC׳,T4cQ=< +ڮiov-f7fpg 9b']j2l`}Esق?8̗>V-$d'ᘈ_޻(4fDwiÛh3[qN|ހ2_cܹ,ϐ3>޻7HdJLCѳ{ ыZwgK6hZTߤxy0> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +763 0 obj +<< /A << /D (subsubsection.B.4.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 69.87 717.562 94.891 727.349 ] /Subtype /Link /Type /Annot >> +endobj +764 0 obj +<< /A << /D (cite.lightman2023let) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 496.223 456.305 525.406 469.266 ] /Subtype /Link /Type /Annot >> +endobj +765 0 obj +<< /A << /D (cite.lightman2023let) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 442.756 121.892 455.717 ] /Subtype /Link /Type /Annot >> +endobj +766 0 obj +<< /A << /D (cite.lightman2023let) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 126.493 442.756 150.74 455.717 ] /Subtype /Link /Type /Annot >> +endobj +767 0 obj +<< /A << /D (cite.livecodebench) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 264.2 442.756 313.34 455.717 ] /Subtype /Link /Type /Annot >> +endobj +768 0 obj +<< /A << /D (cite.livecodebench) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 317.941 442.756 342.188 455.717 ] /Subtype /Link /Type /Annot >> +endobj +769 0 obj +<< /A << /D (table.caption.32) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 489.949 430.494 503.069 442.168 ] /Subtype /Link /Type /Annot >> +endobj +770 0 obj +<< /A << /D (appendix.F) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 357.473 327.588 365.652 340.549 ] /Subtype /Link /Type /Annot >> +endobj +771 0 obj +<< /A << /D (appendix.F) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 139.046 94.516 147.226 107.477 ] /Subtype /Link /Type /Annot >> +endobj +772 0 obj +<< /Filter /FlateDecode /Length 2578 >> +stream +xڭYI6WHU VTĉS$^j E"ح"7:aɏX>}\ڄd%O]%پUuTCݵq-x\ǽ{ i㪛?vG'\bcgDHK%P]ҡu\Ljv#\*\lm=|Zp.|I]yI(2m1!4?>^p[x` +2L jJ?HR2&T~x㣙AdywFvg Di"Yb$oݍ:~vML6[ã ie9IûLuOQNpZ2R&7C0*/@.LUޑ)= AneF+ xT3h^)/rЈKXz| +7x|n2ZCB~+>2W-gσ^ߺ6~z֦"`Ni1Q S,#R6R TZ=uYֹ> "Ȩ |!)Tu(KDB굦b5С;cOUUgPXv-0'ejj @"u\kw$]ڣ}Kۏ^xt䑏sJ=9Xꚮw8aPw袈L_wT;n:ŷrxO6֛]YZF}sj~^'{:r`c-8LrT7Fjs3u.t6kc/cvQq\ +Dڰ#B9o2Pe\u8&մ]"WkxKxѭ xVF 6ZF4>ծYg6<:cS3MSj*|}[?7AUӵ.,ܮ]{mAt S̨@ihEupa7J%u4\UikޏxITw5eXH#B!Ƚc$)e?ghI}%յeTdݲvx ܷ#Cr_.JGT;X mǨ*bcv#>̆]cv!=¤WjY&RQR}Q02ŭ<Ä#>JjCB=ՀRje:Rl8_$MnkBAQ$ +endstream +endobj +773 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F249 1980 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +774 0 obj +<< /A << /D (subsubsection.B.4.1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 135.043 579.151 160.525 592.112 ] /Subtype /Link /Type /Annot >> +endobj +775 0 obj +<< /A << /D (table.caption.33) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 379.281 579.151 392.401 592.112 ] /Subtype /Link /Type /Annot >> +endobj +776 0 obj +<< /A << /D (table.caption.34) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 144.735 375.913 157.506 388.875 ] /Subtype /Link /Type /Annot >> +endobj +777 0 obj +<< /A << /D (cite.qwen2_5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 109.331 101.416 141.156 114.377 ] /Subtype /Link /Type /Annot >> +endobj +778 0 obj +<< /A << /D (cite.qwen2_5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 146.434 101.416 176.834 114.377 ] /Subtype /Link /Type /Annot >> +endobj +779 0 obj +<< /A << /D (cite.dsvii) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 291.637 101.416 358.389 114.377 ] /Subtype /Link /Type /Annot >> +endobj +780 0 obj +<< /A << /D (cite.dsvii) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 363.667 101.416 393.478 114.377 ] /Subtype /Link /Type /Annot >> +endobj +781 0 obj +<< /A << /D (cite.dsviii) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 73.19 87.867 139.498 100.828 ] /Subtype /Link /Type /Annot >> +endobj +782 0 obj +<< /A << /D (cite.dsviii) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 143.002 87.867 173.208 100.828 ] /Subtype /Link /Type /Annot >> +endobj +783 0 obj +<< /Filter /FlateDecode /Length 2830 >> +stream +xڭYYoF~Knv³s$;ؙ2M$U]EK&OlQ󫪦6>\ 7wW߿*2InI^@űwWz,\H2߇ +3Nk tM5=j}-Sm:|f][ =o?~zGPFySYdeW0HKTvY}lN^a:UASJE$AL }]6^ SiyN%}E$u*ԧl@+6bd3!`&HTbx_ܰߎ:+]]^5Uq cƺY]aێtn:*P:`ŀOBy1B!>@.Ok>V4hzxsCE۔p0iCRG`;Ѩ̇W>{&OHޏ0Es./Z>@R/-tFtu t U,VEVv3h߶攖50t1o-ͮE\^@GIJA-ň NX{_(8_䦚#;q~ί&cŶ2EBCF__)>+sΔ8҅Q0" A5f՘r"kOa[[h'Ǡ]x]SmF?4՚\0R-U7CLQoؐkr U[V^׎PSlwy5N# #[0z`9M =\5﫮+)<[5= +|~hi߁Xˋ4H#Ise'ØWAg9v󂖶 *7)`4.$S4d_qH2~G1[(䏱:3"yw`SH^}8HI%xL3M;0GЈc{_ PĂc}5Ea0$'XTddGٵvh;,v+3FN'zt^ V(tro[8};6eUH^o]Ί76f¿IVPu֮&\v4ё"3}V5knavS&%VRƕ[|NI*wߊС5C=(lB&!TQ c8W zìؙ.o*,Fp> αIA拿&;GQVʰMsqJ'}H2~_~0{:xW)DT%amX^'"Lӈ1e@l!SnmAW7v4`?3Z*lZEUWj,h76L6azal)fB,ea:-R/Զ4!p* ,e'J*KԯvQwL$Q5þ wiMQ+]'AN$GqފJ0,1f8wq*k"8M _(ۛ8 9=0+㳄L5?+nOR 1DVWP&m }GY'\2 ++]QjdnjnsG{GlbF̆>ozAT@;ˌY=Tֆs̬\ۤK(lmgrdjNIh\F542y=#jK|k|3fzuX9 )uL&YC`A$iJ(p7YItDQ˔ye&`M|nmpŔ7SRp +..pi[WZ,L!QO__Ex}_m +endstream +endobj +784 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +785 0 obj +<< /A << /D (cite.lightman2023let) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 266.932 298.524 343.115 311.485 ] /Subtype /Link /Type /Annot >> +endobj +786 0 obj +<< /A << /D (cite.lightman2023let) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 346.634 298.524 370.881 311.485 ] /Subtype /Link /Type /Annot >> +endobj +787 0 obj +<< /A << /D (cite.uesato2022solving) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 374.399 298.524 436.362 311.485 ] /Subtype /Link /Type /Annot >> +endobj +788 0 obj +<< /A << /D (cite.uesato2022solving) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 439.881 298.524 464.128 311.485 ] /Subtype /Link /Type /Annot >> +endobj +789 0 obj +<< /A << /D (cite.mathshepherd) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 467.646 298.524 523.988 311.485 ] /Subtype /Link /Type /Annot >> +endobj +790 0 obj +<< /A << /D (cite.mathshepherd) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 284.975 99.681 297.936 ] /Subtype /Link /Type /Annot >> +endobj +791 0 obj +<< /A << /D (cite.gao2022scalinglawsrewardmodel) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 114.252 217.229 161.32 230.19 ] /Subtype /Link /Type /Annot >> +endobj +792 0 obj +<< /A << /D (cite.gao2022scalinglawsrewardmodel) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 164.776 217.229 188.434 230.19 ] /Subtype /Link /Type /Annot >> +endobj +793 0 obj +<< /A << /D (cite.snell2024scalingllmtesttimecompute) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 499.432 190.13 525.406 203.092 ] /Subtype /Link /Type /Annot >> +endobj +794 0 obj +<< /A << /D (cite.snell2024scalingllmtesttimecompute) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 176.581 95.038 189.543 ] /Subtype /Link /Type /Annot >> +endobj +795 0 obj +<< /A << /D (cite.snell2024scalingllmtesttimecompute) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 98.531 176.581 122.691 189.543 ] /Subtype /Link /Type /Annot >> +endobj +796 0 obj +<< /A << /D (cite.alphago) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 345.053 127.447 398.145 140.408 ] /Subtype /Link /Type /Annot >> +endobj +797 0 obj +<< /A << /D (cite.alphago) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 400.897 127.447 430.184 140.408 ] /Subtype /Link /Type /Annot >> +endobj +798 0 obj +<< /A << /D (cite.alphazero) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 511.165 127.447 525.406 140.408 ] /Subtype /Link /Type /Annot >> +endobj +799 0 obj +<< /A << /D (cite.alphazero) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 113.898 115.337 126.859 ] /Subtype /Link /Type /Annot >> +endobj +800 0 obj +<< /A << /D (cite.alphazero) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 119.74 113.898 149.551 126.859 ] /Subtype /Link /Type /Annot >> +endobj +801 0 obj +<< /Filter /FlateDecode /Length 3345 >> +stream +xڍZK-Clv]R;ĈRLҎ} FSI ht_7N`];;EPyeD.?"gݟˮ0S:+Wq(-~/c r{|C?#zFI#A0d 3N hS@+g\YVN?wD2˒.B?CE?2p̓pJe;zv\iXqSk%(C}:5 "zZTw4x# ˴]roeAϊRVjxy"u޿xb/`E,;]3\rayד \νg˒.ҽ + *U_)+<č-u+^IBvC@}}kdǯ3:lU]8`+ꣳd0x2U_Ug8>σh_ihSv7x3*{g[ǿ0y!.Iʯ/bo3ٞ׆~lԔf2ƌB_8/mh ]{Ʊf (egn`,oUUC7/eWK㒏t"V֡A|MY[,9b4r8Qga4+2ffe)AO־`߂nIi(@Fk ܗgyW3y+C*^C{*2_d~PՈ`gʋKJnjh%v?))qonxȌUT +`^2oE44LXٷjZ@J{} Cx4EL`h4( QG5piI0`I/'&O.-,dXPR~$GU;9"OCxcsE`#3ZݝH;=[7untz^ ;|w:R? 3::m!numj7b sDK{!W.|3z + Lm5f:0Rj%1D^iԾPG3BV0{+9 OD' N &b2& 4u8X@)3B4"pl>aS cC҄E׎|#[D# BpDw4x~Ӂ Ax D΍Η%]s鶘6!E3L<.{ <78IX+Au\:k'0BN" QR7o``c*g(o61LxQa[IP̬d&Rq +i8vAxTW.rUŀ2qnI E|FHLGO/|Isߒ[GKmhcΫ4zJ1y9H}c`K +?}lCv WA{0^TfA +E6MtL /]FJY t@]I +~j1w0nr@E$u= e?0RҔDߘDpqNwޗ. ?BQJWKE!І( Ӫ/o0GaSJ'-ߺvI/"2-dA;17:cNn%?.<T|Af mewPb^UjpAkɋRKԵ? fe99uI$Ydz+E)bZ'na3@fޥUY*z/f溾-"Vn٦;NC*Ǯ"gS#h4ck(ٺgCݿL,OŦ?mSi߾gKrjb#(L١:WL Pů~*A?!!4l BtKYCUg/ڲB7" cArvp-#~x/u@뤬9ĔuPs%d#˒F $tN58?8ۺVk a`E11ƺ$}=[;pҺ~+Eye/+ײs<7N)^Vc$ht +W_b+#벵+Xi6WVhle^ޙ:rp@ +fL#$p#Q$DpT;)`{H845@%bJ\5ۊ#5o5W078d 9~EšJy* +endstream +endobj +802 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +803 0 obj +<< /A << /D (cite.wei2022chain) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 240.964 440.223 286.853 453.185 ] /Subtype /Link /Type /Annot >> +endobj +804 0 obj +<< /A << /D (cite.wei2022chain) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 290.314 440.223 320.157 453.185 ] /Subtype /Link /Type /Annot >> +endobj +805 0 obj +<< /A << /D (cite.suzgun-etal-2023-challenging) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 487.396 399.576 525.406 412.537 ] /Subtype /Link /Type /Annot >> +endobj +806 0 obj +<< /A << /D (cite.suzgun-etal-2023-challenging) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 386.027 95.17 398.988 ] /Subtype /Link /Type /Annot >> +endobj +807 0 obj +<< /A << /D (cite.suzgun-etal-2023-challenging) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 99.649 386.027 123.896 398.988 ] /Subtype /Link /Type /Annot >> +endobj +808 0 obj +<< /A << /D (cite.kojima2022large) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 463.864 386.027 527.315 398.988 ] /Subtype /Link /Type /Annot >> +endobj +809 0 obj +<< /A << /D (cite.kojima2022large) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 73.143 372.477 96.953 385.439 ] /Subtype /Link /Type /Annot >> +endobj +810 0 obj +<< /A << /D (cite.wang2022self) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 280.704 338.604 337.966 351.566 ] /Subtype /Link /Type /Annot >> +endobj +811 0 obj +<< /A << /D (cite.wang2022self) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 342.868 338.604 373.268 351.566 ] /Subtype /Link /Type /Annot >> +endobj +812 0 obj +<< /A << /D (cite.zhou2023leasttomost) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 117.473 311.506 171.522 324.467 ] /Subtype /Link /Type /Annot >> +endobj +813 0 obj +<< /A << /D (cite.zhou2023leasttomost) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 175.906 311.506 205.362 324.467 ] /Subtype /Link /Type /Annot >> +endobj +814 0 obj +<< /A << /D (cite.yao2023tree) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 396.743 297.957 441.28 310.918 ] /Subtype /Link /Type /Annot >> +endobj +815 0 obj +<< /A << /D (cite.yao2023tree) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 445.582 297.957 474.329 310.918 ] /Subtype /Link /Type /Annot >> +endobj +816 0 obj +<< /A << /D (cite.kaplan2020scaling) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 99.286 174.78 165.742 187.741 ] /Subtype /Link /Type /Annot >> +endobj +817 0 obj +<< /A << /D (cite.kaplan2020scaling) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 170.689 174.78 194.936 187.741 ] /Subtype /Link /Type /Annot >> +endobj +818 0 obj +<< /A << /D (cite.muennighoff2023scaling) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 199.883 174.78 295.436 187.741 ] /Subtype /Link /Type /Annot >> +endobj +819 0 obj +<< /A << /D (cite.muennighoff2023scaling) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 300.383 174.78 324.63 187.741 ] /Subtype /Link /Type /Annot >> +endobj +820 0 obj +<< /A << /D (cite.snell2025scaling) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 202.514 161.231 254.032 174.192 ] /Subtype /Link /Type /Annot >> +endobj +821 0 obj +<< /A << /D (cite.snell2025scaling) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 257.52 161.231 281.462 174.192 ] /Subtype /Link /Type /Annot >> +endobj +822 0 obj +<< /A << /D (cite.brown2024large) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 175.072 100.259 238.996 113.221 ] /Subtype /Link /Type /Annot >> +endobj +823 0 obj +<< /A << /D (cite.brown2024large) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 244.066 100.259 268.313 113.221 ] /Subtype /Link /Type /Annot >> +endobj +824 0 obj +<< /A << /D (cite.gsm8k) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 273.383 100.259 336.079 113.221 ] /Subtype /Link /Type /Annot >> +endobj +825 0 obj +<< /A << /D (cite.gsm8k) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 341.149 100.259 365.396 113.221 ] /Subtype /Link /Type /Annot >> +endobj +826 0 obj +<< /A << /D (cite.lightman2023let) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 73.215 86.71 150.506 99.672 ] /Subtype /Link /Type /Annot >> +endobj +827 0 obj +<< /A << /D (cite.lightman2023let) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 154.578 86.71 178.825 99.672 ] /Subtype /Link /Type /Annot >> +endobj +828 0 obj +<< /A << /D (cite.uesato2022solving) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 182.897 86.71 245.967 99.672 ] /Subtype /Link /Type /Annot >> +endobj +829 0 obj +<< /A << /D (cite.uesato2022solving) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 250.04 86.71 274.287 99.672 ] /Subtype /Link /Type /Annot >> +endobj +830 0 obj +<< /Filter /FlateDecode /Length 3034 >> +stream +x}YK6WTՈKHnNkdc_r{(@uWor*a2EJ01_L8@ƮjZv[Ե.{} Z]s-MxDDڛZzy6V~|N9j^{x=ZvMYՃv‰d""!ɚk(4cm_l7bq#/a9,kw$M^!"="Պ*:HHT#Hs]$7=y˜m)CO +I}a$Vayl ~AK_K/UB4m mO>iO-/+UMp'qg)4x<uhksF"Y(D? >L!U'r[O*Їzw$;N:IֳK[pFZ/NTI*1C, tS'2[Eq[AG\z}ioLF}5Ћ֒L6Քp +f23YH!;4*UKZ#"M#7< :gz3PW*^]z(ЏqIW$J0Y!喘mvI ?I$?puO49$iKz^yҜӶŪA#Ng?M38ELdۼ899GA^N@0`7 );'FH4{ tnx~OOYFs'/*pZIRrj|]aa=seM}O߬eI/fP=;|Yx29f~r^II(=|{Y@5(Ҥ@+(/^\iK<ԙ{=y8琥/) A IX l/(àu(w{!31_ Ǣ\ `_Mo4e ZJ9S|?bYtG/tmYh/Fo3 TP#}qwȽv}XF[oM4v'I|]1|F( MP/U*(k"]=`o^7Uw9VqwAX3%4,Hx^ٳg6h5ʭk(Vx*c.) TidwzCUQ +I1%:F,јMrgSn_CK:) S!E/7$V9R0Zp&<6<5NU%I8 +3!kKqmMƌQ>,wdptU2FoJrK'F$hAB:f^Uyg],YU:r V|߈s(-~':WxN}.]! ]db -_"*\^1ǹO88pN O MXFsR1=┘)yeb]BmHߚw 4[:Nt$ H=\O$4lviwCUXH)6C0Ckpgc}Ijwfbv]ٌMX ;L5t7ѫL=+SC,&0ϹS~{B[JMc8 Ak&^,\wTi$4;X$a#(*I.Z 䜷\T穏jAHi;_>;dǻA\911d qCC[}@bXgG._,$ʩfϹ ë@-~ .*2P'r? b +endstream +endobj +831 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +832 0 obj +<< /A << /D (cite.wang2022self) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 73.193 741.819 129.247 754.78 ] /Subtype /Link /Type /Annot >> +endobj +833 0 obj +<< /A << /D (cite.wang2022self) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 132.753 741.819 162.986 754.78 ] /Subtype /Link /Type /Annot >> +endobj +834 0 obj +<< /A << /D (cite.feng2024alphazeroliketreesearchguidelarge) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 339.52 728.27 390.064 741.231 ] /Subtype /Link /Type /Annot >> +endobj +835 0 obj +<< /A << /D (cite.feng2024alphazeroliketreesearchguidelarge) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 393.479 728.27 416.918 741.231 ] /Subtype /Link /Type /Annot >> +endobj +836 0 obj +<< /A << /D (cite.hao2023reasoning) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 420.333 728.27 467.713 741.231 ] /Subtype /Link /Type /Annot >> +endobj +837 0 obj +<< /A << /D (cite.hao2023reasoning) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 471.128 728.27 494.568 741.231 ] /Subtype /Link /Type /Annot >> +endobj +838 0 obj +<< /A << /D (cite.AlphaGeometryTrinh2024) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 497.983 728.27 525.406 741.231 ] /Subtype /Link /Type /Annot >> +endobj +839 0 obj +<< /A << /D (cite.AlphaGeometryTrinh2024) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 714.721 94.578 727.682 ] /Subtype /Link /Type /Annot >> +endobj +840 0 obj +<< /A << /D (cite.AlphaGeometryTrinh2024) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 98.012 714.721 121.67 727.682 ] /Subtype /Link /Type /Annot >> +endobj +841 0 obj +<< /A << /D (cite.xin2024deepseekproverv15harnessingproofassistant) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 125.104 714.721 169.213 727.682 ] /Subtype /Link /Type /Annot >> +endobj +842 0 obj +<< /A << /D (cite.xin2024deepseekproverv15harnessingproofassistant) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 172.648 714.721 196.306 727.682 ] /Subtype /Link /Type /Annot >> +endobj +843 0 obj +<< /A << /D (cite.kumar2024training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 335.181 701.171 397.335 714.133 ] /Subtype /Link /Type /Annot >> +endobj +844 0 obj +<< /A << /D (cite.kumar2024training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 400.818 701.171 424.912 714.133 ] /Subtype /Link /Type /Annot >> +endobj +845 0 obj +<< /A << /D (cite.madaan2023selfrefine) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 428.396 701.171 496.429 714.133 ] /Subtype /Link /Type /Annot >> +endobj +846 0 obj +<< /A << /D (cite.madaan2023selfrefine) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 499.912 701.171 524.007 714.133 ] /Subtype /Link /Type /Annot >> +endobj +847 0 obj +<< /A << /D (cite.welleck2023generating) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.324 687.622 136.816 700.584 ] /Subtype /Link /Type /Annot >> +endobj +848 0 obj +<< /A << /D (cite.welleck2023generating) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 140.891 687.622 165.138 700.584 ] /Subtype /Link /Type /Annot >> +endobj +849 0 obj +<< /A << /D (cite.gou2024critic) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 473.607 687.622 523.988 700.584 ] /Subtype /Link /Type /Annot >> +endobj +850 0 obj +<< /A << /D (cite.gou2024critic) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 674.073 99.026 687.034 ] /Subtype /Link /Type /Annot >> +endobj +851 0 obj +<< /A << /D (cite.yao2023react) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 102.468 674.073 147.563 687.034 ] /Subtype /Link /Type /Annot >> +endobj +852 0 obj +<< /A << /D (cite.yao2023react) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 151.006 674.073 180.738 687.034 ] /Subtype /Link /Type /Annot >> +endobj +853 0 obj +<< /A << /D (cite.nakano2021webgpt) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 430.32 660.524 495.806 673.485 ] /Subtype /Link /Type /Annot >> +endobj +854 0 obj +<< /A << /D (cite.nakano2021webgpt) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 499.231 660.524 522.889 673.485 ] /Subtype /Link /Type /Annot >> +endobj +855 0 obj +<< /A << /D (cite.chen2025empirical) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 214.974 646.975 268.438 659.936 ] /Subtype /Link /Type /Annot >> +endobj +856 0 obj +<< /A << /D (cite.chen2025empirical) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 271.91 646.975 295.829 659.936 ] /Subtype /Link /Type /Annot >> +endobj +857 0 obj +<< /A << /D (cite.gou2024tora) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 299.301 646.975 347.941 659.936 ] /Subtype /Link /Type /Annot >> +endobj +858 0 obj +<< /A << /D (cite.gou2024tora) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 351.413 646.975 381.396 659.936 ] /Subtype /Link /Type /Annot >> +endobj +859 0 obj +<< /A << /D (cite.schick2023toolformer) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 384.867 646.975 443.703 659.936 ] /Subtype /Link /Type /Annot >> +endobj +860 0 obj +<< /A << /D (cite.schick2023toolformer) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 447.175 646.975 471.095 659.936 ] /Subtype /Link /Type /Annot >> +endobj +861 0 obj +<< /A << /D (cite.akyurek2024surprising) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 480.263 633.425 525.406 646.387 ] /Subtype /Link /Type /Annot >> +endobj +862 0 obj +<< /A << /D (cite.akyurek2024surprising) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 619.876 95.641 632.838 ] /Subtype /Link /Type /Annot >> +endobj +863 0 obj +<< /A << /D (cite.akyurek2024surprising) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 99.668 619.876 123.915 632.838 ] /Subtype /Link /Type /Annot >> +endobj +864 0 obj +<< /A << /D (cite.sun2020test) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 127.943 619.876 175.979 632.838 ] /Subtype /Link /Type /Annot >> +endobj +865 0 obj +<< /A << /D (cite.sun2020test) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 180.007 619.876 204.254 632.838 ] /Subtype /Link /Type /Annot >> +endobj +866 0 obj +<< /A << /D (cite.geiping2025scaling) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 183.147 606.327 249.599 619.288 ] /Subtype /Link /Type /Annot >> +endobj +867 0 obj +<< /A << /D (cite.geiping2025scaling) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 253.06 606.327 276.871 619.288 ] /Subtype /Link /Type /Annot >> +endobj +868 0 obj +<< /A << /D (cite.zelikman2024quietstar) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 345.163 606.327 419.099 619.288 ] /Subtype /Link /Type /Annot >> +endobj +869 0 obj +<< /A << /D (cite.zelikman2024quietstar) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 422.56 606.327 446.371 619.288 ] /Subtype /Link /Type /Annot >> +endobj +870 0 obj +<< /A << /D (cite.bai2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 482.461 478.255 524.097 491.216 ] /Subtype /Link /Type /Annot >> +endobj +871 0 obj +<< /A << /D (cite.bai2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 464.705 94.117 477.667 ] /Subtype /Link /Type /Annot >> +endobj +872 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 98.082 464.705 166.836 477.667 ] /Subtype /Link /Type /Annot >> +endobj +873 0 obj +<< /A << /D (cite.ouyang2022training) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 170.802 464.705 195.049 477.667 ] /Subtype /Link /Type /Annot >> +endobj +874 0 obj +<< /A << /D (cite.schulman2017proximal) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 267.889 410.509 345.639 423.47 ] /Subtype /Link /Type /Annot >> +endobj +875 0 obj +<< /A << /D (cite.schulman2017proximal) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 349.501 410.509 373.748 423.47 ] /Subtype /Link /Type /Annot >> +endobj +876 0 obj +<< /A << /D (cite.dpo) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 422.935 410.509 492.718 423.47 ] /Subtype /Link /Type /Annot >> +endobj +877 0 obj +<< /A << /D (cite.dpo) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 496.581 410.509 520.828 423.47 ] /Subtype /Link /Type /Annot >> +endobj +878 0 obj +<< /A << /D (cite.singh2024beyond) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 314.682 349.537 368.298 362.499 ] /Subtype /Link /Type /Annot >> +endobj +879 0 obj +<< /A << /D (cite.singh2024beyond) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 371.367 349.537 394.741 362.499 ] /Subtype /Link /Type /Annot >> +endobj +880 0 obj +<< /A << /D (cite.yuan2023scaling) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 397.81 349.537 448.477 362.499 ] /Subtype /Link /Type /Annot >> +endobj +881 0 obj +<< /A << /D (cite.yuan2023scaling) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 451.545 349.537 474.92 362.499 ] /Subtype /Link /Type /Annot >> +endobj +882 0 obj +<< /A << /D (cite.zelikman2022star) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 477.988 349.537 525.406 362.499 ] /Subtype /Link /Type /Annot >> +endobj +883 0 obj +<< /A << /D (cite.zelikman2022star) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 335.988 96.672 348.949 ] /Subtype /Link /Type /Annot >> +endobj +884 0 obj +<< /A << /D (cite.zelikman2022star) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 101.731 335.988 125.978 348.949 ] /Subtype /Link /Type /Annot >> +endobj +885 0 obj +<< /A << /D (cite.lightman2023let) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 73.215 308.89 149.834 321.851 ] /Subtype /Link /Type /Annot >> +endobj +886 0 obj +<< /A << /D (cite.lightman2023let) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 153.571 308.89 177.818 321.851 ] /Subtype /Link /Type /Annot >> +endobj +887 0 obj +<< /A << /D (cite.deepseekmath) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 181.554 308.89 233.938 321.851 ] /Subtype /Link /Type /Annot >> +endobj +888 0 obj +<< /A << /D (cite.deepseekmath) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 237.675 308.89 261.922 321.851 ] /Subtype /Link /Type /Annot >> +endobj +889 0 obj +<< /A << /D (cite.mathshepherd) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 265.658 308.89 322.436 321.851 ] /Subtype /Link /Type /Annot >> +endobj +890 0 obj +<< /A << /D (cite.mathshepherd) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 326.172 308.89 355.983 321.851 ] /Subtype /Link /Type /Annot >> +endobj +891 0 obj +<< /A << /D (cite.openr1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 423.358 254.693 447.371 267.654 ] /Subtype /Link /Type /Annot >> +endobj +892 0 obj +<< /A << /D (cite.openr1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 451.038 254.693 475.285 267.654 ] /Subtype /Link /Type /Annot >> +endobj +893 0 obj +<< /A << /D (cite.liu2025oatzero) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 478.952 254.693 523.988 267.654 ] /Subtype /Link /Type /Annot >> +endobj +894 0 obj +<< /A << /D (cite.liu2025oatzero) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 241.934 93.681 254.105 ] /Subtype /Link /Type /Annot >> +endobj +895 0 obj +<< /A << /D (cite.tinyzero) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 97.143 241.934 143.12 254.105 ] /Subtype /Link /Type /Annot >> +endobj +896 0 obj +<< /A << /D (cite.tinyzero) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 146.582 241.934 170.393 254.105 ] /Subtype /Link /Type /Annot >> +endobj +897 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 234.733 169.037 302.076 181.998 ] /Subtype /Link /Type /Annot >> +endobj +898 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1-Zero{}) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 325.039 169.037 419.112 181.998 ] /Subtype /Link /Type /Annot >> +endobj +899 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 259.671 155.487 418.579 168.449 ] /Subtype /Link /Type /Annot >> +endobj +900 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 422.554 155.487 525.406 168.449 ] /Subtype /Link /Type /Annot >> +endobj +901 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 69.87 141.938 116.007 154.9 ] /Subtype /Link /Type /Annot >> +endobj +902 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-14B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 119.343 141.938 269.576 154.9 ] /Subtype /Link /Type /Annot >> +endobj +903 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 272.911 141.938 423.144 154.9 ] /Subtype /Link /Type /Annot >> +endobj +904 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Llama-8B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 426.48 141.938 525.406 154.9 ] /Subtype /Link /Type /Annot >> +endobj +905 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Llama-8B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 69.87 128.389 117.997 141.35 ] /Subtype /Link /Type /Annot >> +endobj +906 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Llama-70B) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 121.459 128.389 275.697 141.35 ] /Subtype /Link /Type /Annot >> +endobj +907 0 obj +<< /A << /S /URI /Type /Action /URI (https://github.com/deepseek-ai/DeepSeek-V3) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 444.612 108.475 525.406 121.467 ] /Subtype /Link /Type /Annot >> +endobj +908 0 obj +<< /A << /S /URI /Type /Action /URI (https://github.com/deepseek-ai/DeepSeek-V3) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 69.87 94.516 273.91 107.918 ] /Subtype /Link /Type /Annot >> +endobj +909 0 obj +<< /A << /S /URI /Type /Action /URI (https://github.com/deepseek-ai/DeepSeek-R1) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 486.611 94.516 525.406 107.918 ] /Subtype /Link /Type /Annot >> +endobj +910 0 obj +<< /A << /S /URI /Type /Action /URI (https://github.com/deepseek-ai/DeepSeek-R1) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 69.87 81.376 299.029 94.369 ] /Subtype /Link /Type /Annot >> +endobj +911 0 obj +<< /Filter /FlateDecode /Length 3310 >> +stream +x}YIw6W6{}It&錭$=$>S#v_?Z,BVR0[ςُ{S0ˠ g,0`Ol'_v-H_Sj%Uͭ(%0<rAUXxՆǷzؘwّ陧,1ݠAZUQxuUWsV)˵;5W[}W.E .G~D|ԸOxϾ5;54cYo ᰦöW l XZagy Q4I$iU -f򎛟y+>Ϯ6=ρHipaq˽q_ zSm[ZwG3#v5BX8,>j5:4l,o\x9% _nkjZ֮wf3Љ ԫv̀m߂ 4Sśsq2qdm"l" +/V{R.G,+C?+SXais3KQrZj4]ev=)5iNҩ{+rKn:2[llfxaďf & LzA%{ + |l5pيv=hw+@˖/ h= +1%ʲOKhezgkK=o^ gh''8rLZ-cg[]ىQu$H]@A]&=vI >Z?lHӠ^N^;&L\U*,11=^L/s9 PV.˔;ZPQ츴# R0=QOhSH"Ϲp_~ QcwW,,G s$#_K}<\^TӚK8{6Kj,-6.Qs0rKnMفK~3Lv+foSJ*%-8Fsb@I! +1Y0kz3`phO6.#klf'l=B۹5Ӵ+xOlqa*nˤ5DQsa8Ds&I am)l\HdRA$ ۿ"EP-Nc?s6s؁(AACꨴ:%[:w֍7ղ(9P\D* dRX Ɵ8 ] P\ć/`TilǑbn{M%.a +@}I.9$pQR]goE|G|i%@XO6@{**BjB֌]zib$vWv`9!iȢ}b4R6l_#ÆjFgC61gYcr,Չf[i@B㷊J\ \m\ӌXF;e@*\dR^$)V)Wk: 0@=!& + +@q!C3ƒduTr"ѭʞYVk. 33j_rñ" _Yw0r@a$<9s3&4IPjM]8٦bpH tcuO[IΝ=PٿڥTV +K6) xScSa ;'q<1qqIqK|0r׌,OUNTYI'3''4L\Qsٴke_r yp}*=KпE0Xd~J@Oa!C0q>#B@R%se"8- LRNSB^+c_젷ט.]~./jid8 g!IsL(u>d xd{#&Z OVS:vi駢V5tkTJl AƩId)a+cqm|ɇ~z{͓>;6A\[)]-y'8zq'.޵jŭ5%n//C?Z{W8OSav()XPhp٫z;*tJAy^!6O9p' r7z' Kkf8O<*5{@#b oI_^ߔ$oM_}k8̚cF`xx}yS;>[H;xm%xٲ4e AQP0c-%cb)~qYaC=R{~$<,ܬ-KM oQerjn&K@݇g@3,zw($d +endstream +endobj +912 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F171 1978 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +913 0 obj +<< /Filter /FlateDecode /Length 3841 >> +stream +x]ms6_L陊@&}s뇴sCKZ"n&YC|@o3b><{ң$HHB˥'E I艈R]Yx9~v>cy}LY.E+^7oK[17¤yֿnzS/l6ˮg/BCrx(#΢ "'3D0SU,;|7T`u 9Fї#a#E#({Lg1\Yu"<`ܪ͢dz;ýx[ƒ$2! 4a]jk O4Jh楶y#!CC@tV'4[+pƊ0`GsgŎtz;taX@khNd 1[٦;N00( ,5Cl0Rbt6V1Yq5zT:'|DAh{WHrIb "q%Ra:tݹ'18Npu"`ݪdz;ý>F Ek]Y]ꈴl$d1"7vP2^ᓆXbd*hA7R"K& +W4py:zJlj@ Lr0M}9&j1N0YAr80b}94jMw2ai@#1?tAntc(@l88=jvcG` cguDttqi޹^IB5ڣj]94x3Bz[+$RՋg3?Yb:`N=,pLtcnNd 1[Y#Lo'pr%cfƮnP&LhoC b0\ +\jv:sVG^7FIxi텹D6?KϡͻUv xGu"`q8ܪ6v~<AH~sDN{oQ +_fMЬ"zacdհl-.Y+D+4ҦQW%>!&`oNøsٙڏՄ1b)N2扞twNa0?^ޱښ>x:ai+'qrv_k_v ,K`^kqJ P:dZ2ٽAY@fd%vN ۾[Y4Lo'p' O6OV顟ZD7oF7шc1^b UjrRe3'5Uf6߽CĢYm>cmQYAH/b)z1\' Y_z̭,L8|q  0s8gʅ~^f;X84dfEwwĜt$g8HcE.nM] #!"H~2~AAo͚+.ƘU'Uu"`\ܪ͂dz;tS=<Ž:q `08shnfdz;YK6ccxHFmc)R R#EG^Sn? c0;w>g0ƙP#R((\ˍG ʀ9w,ӉPbSYJguPYۏ;x\94(rB"8iTaCW)}@ghtOQtb! +8wEjvc/?bԞ&.ص dxE]ɯ/bgLC`epQ2 t FI0{a7G* hr0g}94j3Np/I&a_zH"}KHkj3/:T<#¥YQS7TVxν1wJ&tPM6rPMu eg;jJzV1ֵ\'º `]_zέ,M8?~u4 B:\5SԬЫtpIP@D 0a1F*:3E7O e~ٻ"ۻk`߼HAEu0Z郭J9SfShMOT +K@|n~?d7\e&jS(+< fa]YTj]6 :zw*)ubs]ny&*F׺+ˋ `:CLпo֝ef~Yag_:y΋kl몚zHPƕi1wKeXh@w2]|n ~*S~R5 +n`wfZi{z"L^iL }<6_gPwyuyZ? UٔAK| d`H)N?Mjeg,Fu]vҁ?dQ`ys*^:JCB WJ&a{l;28(78>,Z +endstream +endobj +914 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R /F362 2017 0 R /F435 2033 0 R /F68 103 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +915 0 obj +<< /Filter /FlateDecode /Length 1339 >> +stream +xڭWߓ6~q^[2ؐN~4%q.  sN.d %ybY}5~\. +P$V/< +h aȼU]˄|]$Wob`w%Կw#}Y IWݬ0x6xKJUËOebƫJnD_TsvfJ碰nmQ %%bE FdJ~nEj46BJ-]_U(n/-.\W"2gS|-*Csna6EAӂGX„Ce-4/y}~.c֤6ЯbV\m#ڭ`HSFTF& e&mԥ~%ԴpP0a^42 1zx#u3[U5'JY0$β(1v +oy*]hx1|ȐM`6PE!aa͂9;+bO.z81I XE4&4L ޵Le遌I>^w$ 4& A]W޽Zb)@ H-#ޓ1eySd55*eG"x܈2WwV?ѽ5790d:W:Js^*,r^:UmfZ |vJ7rjE#D| +C_%(-s6(Hwxym岁(hP*$3pSXU @W_ﭗ>HJmܠP;}t,lc᧤ӗ|DaZp}NY3r戳\t?tYRN\(#-#4U.jexmdZ`Sm KQWqUjN?ޭG4c6iw,;me]Hrs%SQq3,b'ѧ/6ܬmtiD.]^W.k弳hJ郮>.Wy0ܽ~>`öv wvЛJ[UuNי,m=>I{wA;ùƲpPVks:q *qguGO{Qs@[g]A5P#CʹRHN|?A< ϥ(ѯ*7p:qZ }ْ]O\0y>9'$}|e2=k?ڬ5<DzabJ%_[BCe?,}gp䵫1= Tcvp=~tb6Sv[-Q?K%܋"lO +endstream +endobj +916 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +917 0 obj +<< /Filter /FlateDecode /Length 1684 >> +stream +xڵXK6Ћ "%I4m6/EZV"K%6C һi1|4h=x,bhYRAt#*4Zozy_fƜ.>M2;sƥ+WB5DJA*4\/ii2lRDOT`1X<*ul4L(hƀNHh)큙3pv4i-$, ey +>g(Hho!WtJӝC?kd!Zs"4M˓tٙsQ-݉2?Ry\b^{]%%/齋D2zCiюK#PC-R,2k&ւ|+n5<| +,*v#OP`W˜T} M,uaҖ(pL [*OIgJiB(فE}?DݟOH͝w3Ap|Rխfɏo Vө VesYxNwP,o-(C;cw^qpjZlvƵ˰ n2ۢ +y* wIȾ=θis*٣0z`TIC7XH垠yx7R]d0*XcpRpl,\(/\!o_RLpiTX~c}'IDR&}c= +endstream +endobj +918 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F171 1978 0 R /F227 2034 0 R /F249 1980 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +919 0 obj +<< /Filter /FlateDecode /Length 1202 >> +stream +xڭWIo8W ,IuI:4h:q1EHFr?O"mɂX۾A#4%8'9E)R1'MJtLF9 M%FcSm1I˞)gEQZU/ߏ7㋁N7ӖZn*ha{=u깾NM陵Nq8Bc"rBXVV@Z+崧 ]eV#JiG㐒['^1\.NmrurU4 @3 +$,IP824Yw 8,ڈ.ƺ3*/\ֹ8(jQXY[UW!IpZ_<ňM%FY0_NNηrg_|%8P@5UYGK TUSHFNqBmD-0\I#}arT\4kʈyJK{.=`2 &IOJ8!3t?p.P 7qdhu9r~=lx {/dCXl& uUPEsʩGײp'w]Cb24աh5#Զ)Jh=T7'āgO3]Pyb*.k0s;iB5N7^z8}{B6=#ŹYۃB)Q&=/Z#KdfɬەԥlZt]ccayNticTmOBベb)N|bt}}};툝R +j͵;6bN.ޥh] ﱕSiyCK-u*_(pgWu~q4H,?8ߕ~'[tV'5ѯGI#p 's\²ڎĚ8_v/N^C#a~  KI7-`8%rhSLh; YW c*J]4dj%O,k8XG +6 hQ-\. 6o~ȗԒfһ3Pª=Y +$e?dB7b94 Qc +~d%eY +endstream +endobj +920 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +921 0 obj +<< /Filter /FlateDecode /Length 3011 >> +stream +xڭYmo6hW$~8tߺۢhhkYt%9ܯ!g(Jr09(rg#,gg_Q,,XZyl /DI.VůꢈyۨH@Wo|->] +0bγ0c/?\Ke+=HL/V7zǑVV 6D> ,v<Td;nצAG!" +x{ d=BnT^,#΂FozoT?o^ʶ?Nߪwx-lMy !ln1 ,_,y&qXU5w Msj?Acu/6t TJ Aᰢ=Xv>:GZ=qPD|Q;[T0fq,Al7~HEX,[.BEDjû zKIŒh_. +%΃nl*֡N_$G Y&zXX<1;zH}==l~t,$“I虑[՘E!W +-aV>2:m2-߄P~ +n1[;Lrj) +.8w8`ÌX2t =ݫ5O#<&r)+HRS#]xi}g:?=Is3Jv8 r{aY <eQIйGcU=vwzwRHer2TEJ2I p"W~0=v_Î @pJFɞ1cؘbHkrmX^FT5_"l;` qan +*ЌعνU nuAg33t~(bߎgHMF S8xQ&7~c $8N^s$i%mH1JW{zXSOdxQQ O&91M 1Eװ/*`=qkV@;vnE^0‘ؠ1'gaLqo~[K$[+JWxp!'-!c>}"Qƃ7 +G0tվBS Litl ϟ9/"[DY&<+p_w<(؏k1k 2j(r'zSi~l?I (md7[kM 6zZ)\ ߫]+s, Jxq#1ا 0VTPJM`e穮.<·y@T7uIjGojLi/b&0alDj/e.a7"1j)Ŝ@d;_h}P֕9Gb +HSx=ZH8( _0l94IPA f q;9kZ#wUF} oz8uuځ-(; %dSRYt9Yt4H+Bk!9fQ%rJL鸧l4t[{+`+ / {8I|^Vfm<$̢2u9"{89TS\2 43BRO, ]p#m5ʂ$Fi]<_i#NQVEr^YfVu"xE"<ء6`"ke t3䫂v `AZ}Co"pV,(ꌦr̓ov#^ 2C|_T9xLJad,_KY ?kQ%y*_HiPx9#q/P(bOesyYqYjQcՎ5U{~APnpkü/81 "(&6%nS[r R"$ap.22e P6˰mwTµ e'Q)- %tcHw ;&2w@hL )z\SIit.Β!D>58/ +4}?rq2_?\ ``R'A=džYPO jJlM48弆fUꯂC+{=ZxԭDXT<%穯,du%Vu&ǎg~P}ٞ7%N~Cg%_]6ǔOcJp#xB|, 8F{=D>WXļ{=/= Y`ΑաSGETŶz%4x6$kɗ~k z#yy~6<`?Z",yXXq +endstream +endobj +922 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +923 0 obj +<< /Filter /FlateDecode /Length 2100 >> +stream +xڭr`ND-NIUUS4j$} r%>BF@Mo0*v^q{YYx_Mb]~l~~ۇ8}V4iNqSSmT=m۟T'/k? FVv(g6R}'qzywew%AV$od'U2ot8 ;)s|ZU+sK9a/RBM8"0n҇ӌ6wI3,FX4{ Ҁ~Gvn? 7ы->|xh?Oe3ճ caBREEAd5jh%nYI:wdm0bar?z0"ȃ8.,"νxk`/ Ni1 [͏.tR +vbAf^`_X 1=a?TXMT#x łP$n䫡VB(к`\wx ųttq|6݀5j),hZF+YHIh١I$O2$:3ф;+[yA(dʹ?d:%lzX4[i`1~Ĭ!";9 +#wJOSC'c_fv:@-NThМo8 yL~4i'״ DD/%&8˕m< 'ku= 5ףR F>h_fWz۩,:]Яs;6 繰-;ӊ2 'L<۬O~P5 $🭃8sH ?KR?!Qj%\iJss +㤺p +8K:6 DfZR4Wg\K*i ;bӰJ$5s΅Bp!̎"AGDQ +|(Xĕ3rZ8Hp3ɘ8ZanUP_tiL=[L)Br\DX8LQ-ᤚn%c(!'dl㧋au̻H)wGmW5rI s>0 Pm~> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +925 0 obj +<< /Filter /FlateDecode /Length 2086 >> +stream +xڭXkoܶ_!K@V%Qsk禈aޠ("%nfE_ߡfȕd9.Hy9ly|:邅|/3sЉKY" ]qW2D?Wtp6XA4⿸;3xY2^uqsvy~sBUpHu(彨~8,XJ6uYop\dpV*؝al)pqV.[ԺXu ^RNv'_[ȶԲj%(nGy VےkR$ȷ$l4u^u:XaUUP݇Rm`5YHu[~-1E)zuiz ,vx=NHUZv-dUZ(BphdZCw!jZFcQ )xtˀk=4F?x9< GC0x/ }fm48{ZPgkIeaBmP\N<5 +P foU}w "$|udg u8 N;O)VC?sDQ4+ @_>wxĽ8IP뛫1Mg`e&iG<5 +WiL耠7SCV}FރYa)Y|KȊ_nxG4 LIF 9g)CqN:VoPَrw+E1޶U"h"h6u_浌KyZ"øx@ed ZQUDj{`Z=v&b)a r!-BvY|[жag/T1w5ˏefZQYIfju䇙AM]V?;ʡN .SblGb' 5 3WL-8C6^Q c~Fe9XG}aLxJB2(~K+ZK.صCBv/Chń_} Q#Ԏ(^P8?o߾ +4W>LØSjOݐ&$E B[xǏ4eݪѽ` Y w4+uQLV`!^Cf%;fRER"`DfU;d-PVqeB(_SG&p)ZB(1J;u + m]@c)>zsmHkfeq(s^n(VX`\ú(ⴸ|o9^E EC@p,`Gj=:}O Y ,Um'hi[%Cw&F2KLTxhr=eI$D{,<gX>}i@ysj3`0vAq":SX(,񩿵Cn$n8hR&e7ܰ!Wpw[vWvC V'r +Lz|;`7ZlK]k_g, p݄Gv5+Ad°{} s LrainLN?i_DM<9W"47ȩ/cAن\3Y DL}%~/Rq6S~YpzHtV;7\TͣދR?ixKCsq'7' +endstream +endobj +926 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +927 0 obj +<< /Filter /FlateDecode /Length 2837 >> +stream +xڭY[o۸~ϯ0Rekŋn{ЇhYef#K%%Ϳ?CP:{b73 h]D_ϢGW7g?d"[(̣-n6Z, +e7RU)%"XpC +ڣ zk2NV_th2"zjo!8ZE +2Qك~W·+[s. e2|u+m-|3M{1;`~ ),ld̎99 Чi? g8Cxi| P~/ziAAl-N'i)j+mMR9GZ)ͭ6϶wIp*\M f +Y|r|BE?9ZښȳŽ0P,~QD O,g<E@&{fhKgQ 8Ip4) > _;}tŽv% +Y&Xh~֪U+{N/$ ,.Y`0a4ˮΜ3DS h v+4'Xy;,ם\i?EmUےt%5+G)9c;D㉬ ??/ S8|̓0%2SG,lno@Zvl0E{5y1dT徊'.f +/dJBf$м6x:Py֪y9,{4ofSLwGa"D ?W}x,¶dGsD__ٌ*y&PwoGKp[,,bLH2gap^wͯn+\H}0)9ӅL!qf_dtDA#UIoѶ +f:UA5FiH4Yh*lՏ)uwT%4d)K*L7 7ȤDP{IX0J<9{y 5@[hO~TPM,/y ubQY2C|gx:(ⱆ$u#}`/^Q>ern`BŐ`|pavߗF!`Z PCuwi*g~5<;/jvXd7g2;f;h@klSOKQ7< ym* !~ap4`\>خt Qhy@i}x6~2kdyO6U{@VzHFiht/uQp#{|p"X>:qbUlHzs׆_?:ߙ/RbM+@ .E/x/gbëϭt[JI9,#ٿU`tȧ/7Tid"1xIAb !&O\K` FgRPB&($1!K=&iR)≍?*>Aݜí׫|o@hI9Cot{ ?&?4G|MЕi'oWJ}:ZI4HOa1Y,3ȏsX58%4A7 +endstream +endobj +928 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F249 1980 0 R /F251 1981 0 R /F263 1982 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +929 0 obj +<< /Filter /FlateDecode /Length 1778 >> +stream +xXmkF_!Ձo#iWom!i\b8!褳V9{GYeCI$3rX8<'_<\NZ̉C+c9PV֕Ş-=߱`qWW^ͽر?#hW2/odF1_ROث|Z᷂%҂+YI3.dI[H.MJW>_ 1e:k@8kzV |qȼUŷ3u3smUʍHA}͛EQZi]R\NB^AzY%UzCtf9wuqnT9 } )J*s\2%rXEV=qLx=%W[rWz'ިܓelMoL)En%thBa]|(O+Y)}dJS9k|RyG"rfi](MB؀]5\\LJ3F'E_krYl~+ urg6Ŏk+jSIUͦe4-K4e=䒫[yߔ|H\WD07usq~9֍7SXX=q1Ltʋ}8sxl gs?_|LjAXN g냮ԮC 9Q,@.j&αM%M7[,hau%)բh1+²mATfmp*d$,R06|ZW8"0 L.4:3Xt<k q@j[<@45$/rp dIӮirudgNd/mg6ar` +Ko,C֒ԩIӐN섰" 9 dYhnJ˂:1!N4; L%6Dm n*ee-/ =Gz.gͧՉo)D \B'# twٲ`" +Y$f0u %v~؆I 7L5\/~2Mޤ+;ؖb4,Lf ,TPVZ fF¼nzɯ!fX8W2#uO4A*?Tccg#u 0<0"`3űAn[ɽ)@C6\B~͌-І({z*,~ .F2J)zq:F;1Hg#Mh)Qw[C=iIЮDh8:xyFR&[j&> bdT46*j6(p0l*8L^L`^LYu^j0E_W)aTN3> ra7S0eme*k&7zBOUȻc{X 8G8^4{ENφ; /TgG{;giTޑe7d쀄75\ maۍp B c +w^I6렉d~C iN{ebbVkl8 Uj|G,R Z1]M~!9y\o lfzZ6<}}<g]dYq>J_JB&aJ3D=bnJwLXsXPB_ye-b;Or:34O3-]=n-gO]Cq{QP +endstream +endobj +930 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F249 1980 0 R /F251 1981 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +931 0 obj +<< /Filter /FlateDecode /Length 3610 >> +stream +x\m_!Ty2fc.Ɛ`Sx[-ٷwv E̬^FGJ*|ڽմjuNfl |~pt#.gUZ>;z>f|fXD3RU5٣^[Oϖ{Bsa:#x 9L+]|3q9Ud~f~Ӈ~0czٶ~X\/N=\//7W{|X'ïZ]/Vۡy=PѴirs|aU={8;[OA$д}bbl8[}<~Zl^]) TWoO#vWWfu^ a~neQ5ifN=cl~~q<yvq~~,׽|{/ N{x}lz}luZnG&U:.~xt DzѕZYFΞx۶nmU糺ϝ׳jН fQjvtl}vx4(gy4sQ1 >ڸDX„kƤkG-t?1@'-v-fr$csǯiʰtxߒZD:GߒΞɘ\S+щX(GJLuʘ[culrDnF󧮡M^ݧ6zU%;* 6,ipM6R\pNP?eAqo?7R'XLf#$mdrMY&0L>r "Oj,?™x.h,3άQYg8Tav>bK`29i&mOtNm[m̙{fЭj6M!EJ\M:V^IҦ6њ(Mu=xA[IZf9Ya<ڤib㮾T=eZI1X1Z6ccnQDOi1OН#▷pA?e LCPt *tr=;~ev,Ѧ>tƒܽK]Ҷy͍\ ?cjC=mC5V02'R4jR7 >\i`;,&aML*; )?XɓgX4ULm^ә߶)ke6dMW6%f3!9>LyRl<=G;r3Ț"|{jVhcHڑcΥ Z$A sh)?7kG&ezYE[i r럶ʙEB&] e0-#XKx6`=:ӊhļ$3'7me7FH\o 1)OK 2LMna2dp)**RʛSJOv.|t 5Meol1^ tcKTr[0WЛ?<`W^t)o%P +1;DJ"Px q)?ڻwYt3Т {0(WZ+6G@46#GQ$KɄpaO(>BjqM &nCy5ܢ!HX峄<u=3%cУp=%Bb;dUҊՐHhM +@Ihɞю +gp(&x>BG@8k|E~5':Ausf/PKT8;-v:h2L'4~Bs1lweQ9)m)yYejƜꮨ!+jYdگ4c~q"R)~'^k, +$$Fųt!ۈb$›!q7kA|n;?"E%z蟷EH [D)S;󉔽':ɬP;_:m?kc|ZHd$'t(yQJX" "o#VÁ&Ij2HEh0OqmN9'}av ++{CT13VX5x;F 0٬CGT0#0Uie6rjq]YEncS 3}ơQj%1'J#II2p;c,04#TZʄ{|ҿ00bZJXaD[3CLO!+"k B` +-KTMa„y +AAjKOkAA"1FG4]604I%]RES#(15t%i; ޡbԝ'פSg՝JC2kfEquL㶕I {a[tPKI'LO/La_cMK%S!͎2@ĄvF0@R%(+doӇK{>LԘ*APJ"3Jf64"g0 pnJ8ۊºI1Rnzs݀Rp8!p#ɷwZ$4KC?(@=E4aTʼn^ +Ќ96%AQ^Ӣk=&EJtA`w5A̛ _Ѩ!W\_3%ЀSIaTv=_KC + +ɀ l1lT8򪟞.r-7h{$ofȳ +tkdy)\ڰuȄ-8cvm6GEݏQU%lӳB.)D[w?Pmʡ>LKV&irt 4yPE`zƟ z>!W`V-Px+,a)/8CXV: %/ +#E07 fгB\U([[Cezɗ!E6~I>ᜫccpl]m)kE0LQ !&i 7p%&.K 25CC» 4O13cDt0aXC_G9±\}wd"+aVl*J|l 4IPp-C7cˢ%/ĸ`cb'UBy<ø}ʞf:X׊ӺJڗǙ(<*ITBߥTas 6?dETFYqJa;C_&Q)"ْ&ЃFP*goLiHev 6*U]ت*ީ;HukXzn2d}EdD(aH8\Mҟ dBiT%jtжz-Mtb> *!^(]%.G +a`ًl{2᠖߿(*J}No_%KNE_gl%3z!1c..+djm^_7o¿ px s}|~Xo^//˗׋͘ڽAr__VPz5vwKFΔ⃄?$% +endstream +endobj +932 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R /F421 2026 0 R /F461 2035 0 R /F462 2036 0 R /F463 2037 0 R /F464 2038 0 R /F465 2039 0 R /F466 2040 0 R /F467 2041 0 R /F468 2042 0 R /F470 2043 0 R /F471 2044 0 R /F472 2045 0 R /F473 2046 0 R /F474 2047 0 R /F475 2048 0 R /F476 2049 0 R /F477 2050 0 R /F478 2051 0 R /F479 2052 0 R /F480 2053 0 R /F481 2054 0 R /F482 2055 0 R /F483 2056 0 R /F484 2057 0 R /F485 2058 0 R /F486 2059 0 R /F487 2060 0 R /F488 2061 0 R /F489 2062 0 R /F490 2063 0 R /F491 2064 0 R /F492 2065 0 R /F493 2066 0 R /F494 2067 0 R /F495 2068 0 R /F496 2069 0 R /F497 2070 0 R /F498 2071 0 R /F499 2072 0 R /F500 2073 0 R /F501 2074 0 R /F502 2075 0 R /F503 2076 0 R /F504 2077 0 R /F505 2078 0 R /F506 2079 0 R /F507 2080 0 R /F508 2081 0 R /F509 2082 0 R /F510 2083 0 R /F511 2084 0 R /F512 2085 0 R /F513 2086 0 R /F514 2087 0 R /F515 2088 0 R /F516 2089 0 R /F517 2090 0 R /F518 2091 0 R /F519 2092 0 R /F520 2093 0 R /F521 2094 0 R /F522 2095 0 R /F523 2096 0 R /F524 2097 0 R /F525 2098 0 R /F526 2099 0 R /F527 2100 0 R /F528 2101 0 R /F529 2102 0 R /F530 2103 0 R /F531 2104 0 R /F532 2105 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +933 0 obj +<< /Filter /FlateDecode /Length 4449 >> +stream +x\s*S{YUmNvgsv⬵٩9'C))]׃!U]'ht&jB&oOy1$+II'痓e|8dbUXN8=i߇+-ӴR:=}cFmwge>Ezn]ܜbZWҾY/=^O^\YBٱrf{6wͮn)Y&3ʳ\fռZf͛Uwߘ'ji6Wv]m}5oMMgoͷ$'Mmֻ=WCJSt"K4Ki6 'w۰lڡ ?̍dX1 +U|dm-'yYLz2YM?1)R2i|"X)poߝJ& E,#Ҿ#ܽZ^065‡<\CI-8n(:hwۡAFP.cɇqKP9b &!µAˏn|Kz VOl8wNC}d&Hu`C`\ɩc>dƽ='r812?!uB3¬*94U eޟǩ%,Y9?0%vn,W|6A?HMU&aé@4iOrƢF.ۨbZI-=<^R=E7rWM,)';%O_d嶥}BWRm#=w-<,< * qj-B30? 1K鰢CFN҈d1<7ij2ɛ͑5ׇ8"0It^G,LC-e0%{ЕP(*L.Mp7D@3I)\(HizGh46PuP-":$hʠ2M<+eDLr&MMM`XSE6}vb{p0QpViqi=d}"G6̛@FM1?p1*G@Cy='"izshL?Je I//# €+ph$4vc[99Vp"#2Al&j%B<5O +顅(-ѸPLEf(eJ^>8D{̗ǨӓEvi4Kj8et꒔"_b;7'M:F΋g\<o0*$䩐.(`y%HiѠhd5Ht wHzI|.ߐ`i ҍQl'qZ ϐ`'IA:C>zqPGe8} B.<.Ce`[Fg$z!FJ\(% (LxIÎ.QtRV0/տDx:|vCDy^mСoUCg/OrTs%^鑶~u {9WxWP=<=Վ<-7 -a,<.Kͦ.kE.9,h퇬趆Ih+518a"5ȿeW 4wi;x#yHɫi8G~wT6%ex2>v: Q8}SH-shoIܼo5@ ): +|2SP&1Ltk +2g'E5R?ɂǙuқQyKN`q.Nj[bb/ð7^8 aYr0r~HÊzɣiLG@a6F q:B#{qb(@΁tix +8Q{"V"1|~AOmGaa9T#;KhUKmBRlG̱U#MW +sʏ dvLcN%aN7TѲa7"PgðفIZݓ q#RK#P#Bϛuq2OOg?0M_9;??yko@4U*x᾽34ͫZV/h+0|l> nsC:ݾhu>XiFMAaԄQ.v~RVD6u)MteyzƵQiT^9cmiX5Yۇ[ɥ[TSL Dz&EFY^u0`Ey)Cfyc fP+'jڐo uκ}hB-Dҷu^A[ANPax~竺ѐb Enn0PNXjt~Z6sw!͇}l_nJ꽖ВdXM“W~^-nBGMt>sg.;]ՋsZ$ig|2xVLR`Yl2 RՐ%uXAm˃$`%x(I $f=WGphJ5$KR*C~I)~4h9KSU>%TYfZ` +Lk{ߜtvPN(uWVUko?Y_eJa7gJlͧ %ڗ/C}(WhoooPB 3mů4Rx8-$9mZųS/ա)d +endstream +endobj +934 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F251 1981 0 R /F421 2026 0 R /F461 2035 0 R /F462 2036 0 R /F463 2037 0 R /F464 2038 0 R /F465 2039 0 R /F466 2040 0 R /F467 2041 0 R /F468 2042 0 R /F470 2043 0 R /F471 2044 0 R /F472 2045 0 R /F473 2046 0 R /F474 2047 0 R /F475 2048 0 R /F476 2049 0 R /F477 2050 0 R /F478 2051 0 R /F479 2052 0 R /F480 2053 0 R /F481 2054 0 R /F482 2055 0 R /F483 2056 0 R /F484 2057 0 R /F485 2058 0 R /F486 2059 0 R /F489 2062 0 R /F490 2063 0 R /F492 2065 0 R /F493 2066 0 R /F494 2067 0 R /F495 2068 0 R /F496 2069 0 R /F497 2070 0 R /F498 2071 0 R /F499 2072 0 R /F500 2073 0 R /F501 2074 0 R /F502 2075 0 R /F503 2076 0 R /F505 2078 0 R /F507 2080 0 R /F508 2081 0 R /F509 2082 0 R /F510 2083 0 R /F511 2084 0 R /F512 2085 0 R /F513 2086 0 R /F514 2087 0 R /F515 2088 0 R /F516 2089 0 R /F518 2091 0 R /F519 2092 0 R /F520 2093 0 R /F521 2094 0 R /F522 2095 0 R /F523 2096 0 R /F527 2100 0 R /F529 2102 0 R /F530 2103 0 R /F531 2104 0 R /F533 2106 0 R /F534 2107 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +935 0 obj +<< /Filter /FlateDecode /Length 1663 >> +stream +xXYoF~ ʰ6݇vF'pb%)Ê;̒M }r9YZZy{:=xƖ؉]kzkEs +CEn`M֍=DG2#[UpAY*t^fքsѮ"y*qL\:kE!|l^b/냛 a^<ε9 qo,yXyaw2ݡL3u`JG1sJ[8W}-~d .&g.vg^N{t:M^>sb򂶝gI/jRHbB;2eD{ r z4\c7rK ~LMH$&k7 6%%ƻw1gX=qk&fSJp*21轜0ItR/>׈ۊ~[ vCk{{8vSޒjȯ[!0CƩ!-?9cgW7RoV-`\769 j ?ǩ.L8da+anN@q0@lӅ7Iaw`DZ]d{o"w Me.R/a. oc:}F:ޥz[(3zrsL4ܮ|(7Ը˓$ras+]R},Wx +9 +|bEME0u[tdꈩ`֤@`Moƒey;P-*F'z~!Q/8+eBann+:͖ q'UOeNu~Tm55o&G1v(ݨZCD(mRǝ"cQpGM3iuFɴ)akqd,[ bgË^kK,ЛŪP d^HLfUp«ҩDxF+TKQj(SP@<$d2ћ4L!Tࡔv%Rd)3t|DJe]~6"+ԼLDV@ +yF!0w FgQ!5%d o0( <|QDg|UBT +JBE} + +%t霎.d?z^dJ9n6Y-Xgw2IԲЛ8w#^o> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +937 0 obj +<< /A << /D (Hfootnote.1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 377.027 104.739 383.154 118.974 ] /Subtype /Link /Type /Annot >> +endobj +938 0 obj +<< /Filter /FlateDecode /Length 2763 >> +stream +x[[s۸~fF.Hz:fxך都3%:f#Jz2= v4i"Rwn 磝g/ K#Q3΢,F &,Mh7tZ)Fv%xH30-`xTʧ#J]gE^$zŤ>6NiRV p^]Ku_/oq C<<հ*q]Tr1r^Tru.*'ey1m7^,[+BF/F;wD@2D3g;ǿhm?E,.7gQSRFG;Q2A}J(\q{뻷#8:oc Ef_zSyxpA +Zj'źNO 1s= >hLR3}Z-xlNMm𘸳!^}W2mB +0emH +3a +/>u.pB'L +KC1Ȍ07bN@>QFY7"L,U `X0&!p9mЀ =)i /T'gYX;mofP˩yr.|ѢkK7)Yh[dG3+n`o^DRjfgY3krϯhM>o#FY`5p-/"((Z(.8DvulӲm>-ٻ|9ʫs oJɘmv\=qf>!>D}E[iS!WkL1Id3Bz Sq!>Շ}}NE>G;ڶvG I]GWuBkW}B__ͻN+xh'q Qwt+)?g63I$p}O~p>Ԝm löj}pd-ߢ\e. '?grt|%SSoĘ"Fh1@T:<DŽoHD xD :,̔2D!z5:%8g}4uvlyRr^l;7qY#Xf +쮹 }ALӳ48 ¿S`V;6rڛ`:@Z6TE mHHO=&Ў!+Ykom[uyh۾^G[>oş&IUݺS(ڶŮ+~a(- QBP V J̈1YnNY}`bZF4/owx0zGqѹ<%$ :ntZ|):'byX02o)U^}ơ"@wq8dŬq|V4~PxJө Οt,] *R ] 4jן4d#AG $*֐5\Jvvk^˚x_,w.S FA>wbQh:l`Fl" ذ'– E^gjXkLRŔW+tuP7}y17snUURwlS=\1tW&a"PʬV;}9f6GvuN\3ZxI8G)$IQ"c9!sq,sXGyr#e4MjllY)@/K%RbʪG0J ;bo;M=ZUK,ᶦ~!ém bPp1N.z$q +A%ZҼv)DOn hH^9Mg 5+6 5aAxH@m% +(jje [`(u B1؄#D7لmR]3aW nTd> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +940 0 obj +<< /A << /S /URI /Type /Action /URI (https://github.com/meta-llama/llama-models/blob/main/models/llama3_1/MODEL_CARD.md) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 288.772 716.923 525.406 729.916 ] /Subtype /Link /Type /Annot >> +endobj +941 0 obj +<< /A << /S /URI /Type /Action /URI (https://github.com/meta-llama/llama-models/blob/main/models/llama3_1/MODEL_CARD.md) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 704.037 366.21 716.367 ] /Subtype /Link /Type /Annot >> +endobj +942 0 obj +<< /A << /S /URI /Type /Action /URI (https://proceedings.neurips.cc/paper/2020/hash/1457c0d6bfcb4967418bfb8ac142f64a-Abstract.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 136.978 457.04 525.406 470.033 ] /Subtype /Link /Type /Annot >> +endobj +943 0 obj +<< /A << /S /URI /Type /Action /URI (https://proceedings.neurips.cc/paper/2020/hash/1457c0d6bfcb4967418bfb8ac142f64a-Abstract.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 444.521 291.108 455.339 ] /Subtype /Link /Type /Annot >> +endobj +944 0 obj +<< /A << /S /URI /Type /Action /URI (https://arxiv.org/abs/2107.03374) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 105.884 279.676 309.477 292.669 ] /Subtype /Link /Type /Annot >> +endobj +945 0 obj +<< /A << /S /URI /Type /Action /URI (https://proceedings.neurips.cc/paper/2017/hash/d5e2c0adad503c91f91df240d0cd4e49-Abstract.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 434.568 107.667 525.406 121.467 ] /Subtype /Link /Type /Annot >> +endobj +946 0 obj +<< /A << /S /URI /Type /Action /URI (https://proceedings.neurips.cc/paper/2017/hash/d5e2c0adad503c91f91df240d0cd4e49-Abstract.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 94.926 525.406 107.918 ] /Subtype /Link /Type /Annot >> +endobj +947 0 obj +<< /A << /S /URI /Type /Action /URI (https://proceedings.neurips.cc/paper/2017/hash/d5e2c0adad503c91f91df240d0cd4e49-Abstract.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 84.01 145.71 93.224 ] /Subtype /Link /Type /Annot >> +endobj +948 0 obj +<< /Filter /FlateDecode /Length 5065 >> +stream +xڭÚ)Mk {m̍ '~W2A5칰w Sk1S%ClVld +{~f81"YODa + $^ GK&~6NpX4>l +RXB&bNҎ%5h-)kV,֌tEbP;/O&r=&}Vez|Ɋx1ΦJKW޻`?ˍnWn*J/T# Zkpd_l?A(C +pPGG bS3ΊӪX@(]2/nJH8~˧(Ϡ†$ dTdnQOgNGXJ&fJDC0#PsTM' Bv(felPϼM5D)ڏ"@lInEE%BAC 6>rH0ݩ&;&Hާd2:3{hoUj^˗`EeLtGc>E>o@/ +x!,?_uh)#6Qm)J[\,)P?՛ IxB",%^& bilz@dZI:CenHtymd8بC4bWh*6I=fF4r6S(ikcy)AY,Ny!RB| 5x5l10Ň]_˔z6 k˷R +&^ֹbmY_ÓM6@LFhWF|qUh1n/~oge{;=~M3d%`z}HO-kob3I9[15JΥ)lȻht~Nym#/ s+20Hdsܪu%* +rNq•ŎQSvRg}lRq!%S9[js?rF;~vFsW a;I +_0W4Dm~Eؠ:qGr(;E*NzIcnn/OXMѫ[/=X`Y~ظ6%p CV+e/>졳:C949*8ݲ;y|.//ӞtONGqV{>TwPBBǘE;lύC>hGƒqTM7Te6&`u:nA/hwLkhӯO? 8eoO`8x0,Rq U/g5/"{6.]L:I{K9KBقO/_XBAAx +j]g!g!SicԪ3GCܘe!>AUp߹Z eVO!AIVjH|Ĝ\V4cL'-}m(OXXѾ Tp*9pˣq>+DÑ Y(*s77rBO&_Vwj AWPG*e^Jt\K`o馰poeW.vKJ0"M;Tʄ[3)4QɄ/N06֐*끢G uJ@ץ:u&TmOTRUM^_?6z š$ zUu +7y ( VYpNd19fT tFo)G%]e| +vUN( ~>dt=+,g:H9$MgtE9m7|YUDWo2:.{WezߪD36uP)ZZFA18|!%eXȹ(΍}s.UZ#nhݫ[k.L=|Ȗ[w@ TIDģUj2\J!|+|%pydR`aAFr33tmRʽa0Z%AVe.y4nGf>iH<|:~BM ŏz\r!CZ%^]7o[UN*;M)*]JmjB94XfFl#v6QD˅Ol_ܛkLGZZ`"t<:a:rύm)"m[:9/}oe$kF9O ܊̢C*})͍ԢH u> p܂אJYo!fmyu +F?J9]gu#èB/S%СT-=h }Cpc{wn3Uݨ)g #*ֳC)Ġ⹏tQw|d ßDe;#c*$UXm RqDMk)%jXZ&!xe{j}~g 3t*垆gL[}pWc-6UvGJ@ +:դo9~sS"z[;U%ƞ%5o[UHb`f֭!6mtuka^w>3pg_=@P5{0ʹ%>(WA 66 0č>z8iE= E2brB;OMӯ T}f*Nb'>l,bk3߯BIaBE3ĆA||*RHTf;egMj&}[NJl<u}xbҴWw&f=g v;K^Ee\$:' bm[mAZGHٴߩe|iKpFK_<+A5EYc{iS_|*輗Q $fb ߲P&@Sua+X>g}O +_u9u9ɂڭ/Kb%oIhH.WzFhfƷT)i\=%c} _$:ay{J7ɲǼp[6mQ?WD +endstream +endobj +949 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F134 101 0 R /F138 102 0 R /F171 1978 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +950 0 obj +<< /A << /S /URI /Type /Action /URI (https://jmlr.org/papers/v25/23-0870.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 674.483 335.208 687.475 ] /Subtype /Link /Type /Annot >> +endobj +951 0 obj +<< /A << /S /URI /Type /Action /URI (https://www.cms.org.cn/Home/comp/comp/cid/12.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 410.326 651.557 525.406 664.96 ] /Subtype /Link /Type /Annot >> +endobj +952 0 obj +<< /A << /S /URI /Type /Action /URI (https://www.cms.org.cn/Home/comp/comp/cid/12.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 638.418 278.01 651.41 ] /Subtype /Link /Type /Annot >> +endobj +953 0 obj +<< /A << /S /URI /Type /Action /URI (https://doi.org/10.48550/arXiv.2405.04434) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 297.084 551.931 525.406 565.732 ] /Subtype /Link /Type /Annot >> +endobj +954 0 obj +<< /A << /S /URI /Type /Action /URI (https://doi.org/10.48550/arXiv.2405.04434) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 541.824 114.21 551.038 ] /Subtype /Link /Type /Annot >> +endobj +955 0 obj +<< /A << /S /URI /Type /Action /URI (https://github.com/huggingface/open-r1) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 486.555 493.749 525.406 506.711 ] /Subtype /Link /Type /Annot >> +endobj +956 0 obj +<< /A << /S /URI /Type /Action /URI (https://github.com/huggingface/open-r1) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 480.61 284.178 493.602 ] /Subtype /Link /Type /Annot >> +endobj +957 0 obj +<< /A << /S /URI /Type /Action /URI (https://arxiv.org/abs/2309.17179) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 486.033 444.135 525.406 457.097 ] /Subtype /Link /Type /Annot >> +endobj +958 0 obj +<< /A << /S /URI /Type /Action /URI (https://arxiv.org/abs/2309.17179) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 430.996 245.88 443.988 ] /Subtype /Link /Type /Annot >> +endobj +959 0 obj +<< /A << /S /URI /Type /Action /URI (https://arxiv.org/abs/2210.10760) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 304.669 284.31 317.662 ] /Subtype /Link /Type /Annot >> +endobj +960 0 obj +<< /A << /S /URI /Type /Action /URI (https://aider.chat/docs/leaderboards/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 308.722 282.154 525.406 295.146 ] /Subtype /Link /Type /Annot >> +endobj +961 0 obj +<< /A << /S /URI /Type /Action /URI (https://aider.chat/docs/leaderboards/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 270.275 101.61 281.597 ] /Subtype /Link /Type /Annot >> +endobj +962 0 obj +<< /A << /S /URI /Type /Action /URI (https://aclanthology.org/2025.naacl-long.262/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 338.764 114.77 525.406 128.172 ] /Subtype /Link /Type /Annot >> +endobj +963 0 obj +<< /A << /S /URI /Type /Action /URI (https://aclanthology.org/2025.naacl-long.262/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 101.631 177.708 114.623 ] /Subtype /Link /Type /Annot >> +endobj +964 0 obj +<< /Filter /FlateDecode /Length 4502 >> +stream +xڭ]w8䜚o=N2ldig} b{$lĕtuu߈h4EwoWޜJ(>=HQFdPK9R\;?dh$l8X[h8b!={\_ƒuB8OF݂|fY`vPhF7w뷮%t.Cnu3^,LM6y0%0D~gRdmPm̮XdYR#>-Cmҏr4MyOs|gܦբLs" $0cn@$oxڮB=p]P"C20G͏^cz=$Km=z.ʺCp2G8[$X`4A[Ȁ;J!+F3>ؔm[D;j":ЏaQEdd$Lm*lUyBMNµ_eXPS<3 YuA6ЏytY#%Š$_'G toh2)moa8D;^Ϝsp\N}z:O!t!^y>\]n5#;[bmU$ٜ܆B!rPWoT>dAdI| qlhg\΄~|1'j0%kv 3 -ĩS(8X7M!YO:fg6G8401'dr(3D"H[I۫+hW+Ɛ*)O6w~BVV_=Ⱦ,s]6%CdU檄ʦ )Һ)7eڣ'We~p5M'U }˹{M?q.>j~WA_T6_٬zLbѺE2tƽs0Mzim7.I*`y =oQ$xI&@` +D8Tfpx̶#`I:>l%NЍ(bV~h/#3ʇM[;Q عBkLz[;o0{<)"9cΙ}][`.hhҘER7x&ͽmz1qXF^9Jܵ+9tN5V6 +?]R}eo-fnˠɈ>2Gl-12`!+5DtC0CKeXS=w {Tש~_̾V칇Lsc!Ti9=Y,mڇ "qH>f6ΎN"BaȀ@;,0 AFǢ6Hkcgcu"Bs@9Fn{G80"4 +F+@!8XDA#q~"䔷H(G_ɧǐP䆢Q-Wީ$1K =OxĦxDZ\G'Xt(e`(#fM;=#9z̹#$Al c(C" I *8r9`Tp哥)i%1`%G_|Abx=U%XۚzHVļ<xeg8IQ_3$DY 1w.CT X#>q,jFmOJb& fCXߚ[U3ȐUyH`[ `C\d ã]/l9Q2Rc@ #= 1: ʐ ӎg]J>h}Yg9AB#0z] cMD X9p;\ Eq H4-tO'1 `Ot2#:=y`:Ng + n2r1jK誧q w b|OS:Mje599FSxAlBY?N!A+CK9OQۂ?)7lP{BOPx+H*wtHD2ƿ!] +B4pNcLl2|doݠ{O-1H$ɘ[Y׋¶ж),-!Χ[h$fx|+jx!&trb +endstream +endobj +965 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F171 1978 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +966 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=pEWAcejiU2) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 701.581 347.31 714.574 ] /Subtype /Link /Type /Annot >> +endobj +967 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=Sx038qxjek) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 344.502 651.159 525.406 664.96 ] /Subtype /Link /Type /Annot >> +endobj +968 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=Sx038qxjek) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 638.418 170.91 650.266 ] /Subtype /Link /Type /Annot >> +endobj +969 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=Ep0TtjVoap) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 344.822 587.996 525.406 601.796 ] /Subtype /Link /Type /Annot >> +endobj +970 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=Ep0TtjVoap) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 575.255 170.91 587.102 ] /Subtype /Link /Type /Annot >> +endobj +971 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=VTWWvYtF1R) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 241.963 524.833 508.556 538.633 ] /Subtype /Link /Type /Annot >> +endobj +972 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=d7KBjmI3GmQ) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 105.884 412.864 378.777 425.856 ] /Subtype /Link /Type /Annot >> +endobj +973 0 obj +<< /A << /S /URI /Type /Action /URI (http://arxiv.org/abs/1503.02531) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 214.353 376.799 411.646 389.791 ] /Subtype /Link /Type /Annot >> +endobj +974 0 obj +<< /A << /S /URI /Type /Action /URI (http://papers.nips.cc/paper_files/paper/2023/hash/c6ec1844bec96d6d32ae95ae694e23d8-Abstract-Datasets_and_Benchmarks.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 135.912 286.537 525.406 299.53 ] /Subtype /Link /Type /Annot >> +endobj +975 0 obj +<< /A << /S /URI /Type /Action /URI (http://papers.nips.cc/paper_files/paper/2023/hash/c6ec1844bec96d6d32ae95ae694e23d8-Abstract-Datasets_and_Benchmarks.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 273.651 455.407 284.836 ] /Subtype /Link /Type /Annot >> +endobj +976 0 obj +<< /A << /S /URI /Type /Action /URI (https://doi.org/10.48550/arXiv.2403.07974) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 248.072 222.566 508.366 236.367 ] /Subtype /Link /Type /Annot >> +endobj +977 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=e2TBb5y0yFf) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 295.799 123.338 525.406 137.139 ] /Subtype /Link /Type /Annot >> +endobj +978 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=e2TBb5y0yFf) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 110.597 126.81 122.445 ] /Subtype /Link /Type /Annot >> +endobj +979 0 obj +<< /Filter /FlateDecode /Length 5260 >> +stream +xڭ\ms6_O7L@fnnlNg%#tEʮo)QD\>X(9=H]Uȶ2.oHDG|+/ʻO7O:-(>G]gu-]?\˛j)o7GI;PƌS7yZܮRh{ 4WxOxMDH\=wBj\5SB~C8^U2@E.^bb~Ԟ,޷cN8#sn֭қQ78gcS@8f{ƶWgNPCńo,qh(яwYqáQ\d5EKabB/"8Ih +K˒]sGoj|ϻW'ԓ /{ԠQalem7 +aM,-}Zۖhclc6W\Ͳ'Di_r6ʆ ȇS +`oTJlcjd~7GrӤvy=swuYΏrą){OjX[dnX0dIg{j)1@Y\᠄!NNDNĈ "pxHM:~}C-G@ - 5MEwނǫ@:|$oJ `T }` ~aH1.;D\ø +=q/=&0ޠ4}@AӮT:_f>pPeEmڎPPAzCFmvN1kة!C8`e%UGg^tt +//9KkU]%^2,ǻ?]aIݴX»կ<8",ܯlW&Lﳷ&(R.7$&rzKD +ϖbb7Xi Iھe| c cG l; wDͣ9v}l-cH[hGFvgxV]F[H WHY|JV9-̳kR{onSL?Jt&K̄^n%f!2;L&Bfn +/ؘ4fxXYa + NTg8s@35ÄwG3c8G; _,DFE|Q3C$-1:;c7䮵֘ kA v̼% nK(45ͬrִ1ͱḻo}Xz7-90E9~u\׿Rwcͱ2uB;$љ3-)1|o>o}A{M4T}E704wT; M` 6P|SBuow4 N"wBEw#(GIf\Χ%2a"@FV᝶(x ,_,qIv.!5*HuXwvZ@"!5kc!L5jBdgذ!57gؘ(Ε\DA`-˗>Eet#>*&2lXLjgV=KF ?ǵ/&3Ԥْϋ(7Ҿ@A<HrHL!a +XCb9@f Dһ[!I4Q?9rUU̲c)#J`?կGi_؄`\m[%"x@|U'w(#4OgћU98m_',t(֮,E!$NgL +3wbba +7MnIJy*tc+ <[m'}^3%1HVrCjĹ.jO~ߧ4xl,O~۹[ESIq`27&IW9߽BX`z&}et8ZOm%,`Ѹb>ItYǾj3o|/mj⁺i`] 118VK%%";]1sVWV4[V5o3 +1 +!xu5XyjWI&Arcѷ}n!Ig@pe}( acB"$ qN8`s-QHnao ; HM';>gUf砖텐/(XQէI x2H2J _%IB3*I501 +HKw /SMC&o2HCygHK ˚%mc=<Po0+El2rΖbJ& yeC `S@Z%tu7 /iol8< O΀.[|OcNCUSS:H3֖vXe vRUIa`xXq3~r4;͌e+13X\f--SK|V"ͬɊC䉄bGi rXSZOջc}k C–+Unei)t.8Is_ٗ||۶dr_ ]KN{@7}=]dy_ mυ/AQ_o)AVnN0v #bgOpӼws<aljY'OD xm63e-<B.>^3/%|*>EZ?t_v:x˯ҬZƍ7Z<}c7Qʦy].4$0 ++p,@,@@4)@az'Wt(uN{5RcvXt +ʏY 4^ZeCw'e%;!$u96Bu?/`%-䣆`H,k9B7~߃ιnjmLbH1s(:[;hbv  0Ak\Z2pic3C#CŶƶyńix ԘZE2n 8b`Hn=Pl\c2j s_aJ8$m8A0PHMl.@7&R^J{H \O@[ ܍x& Q! pRPLU!$6Rc6SoW|@FjDH Ȍt}e2y-s(A}Dr-AA;/㊁S/z->GjF갩W&z  a]5?1"pQ `qdT!ʑ-JdB.  XbOop#$|ɡ3I۳#xT-&v9ٲOc1؝3'l±†Wy4IK֦]wK nfRK;v9k7,ke2IN#ǻ/M + +#rhf>KUv|˴N~Ko'HkVX#!'}ϷiބT5Iu >cmn#޼(&2"CŚ69RqKD⦻r..o"UY[xuTe>IK@.lRN/8',:++4uhRuȋ}7Qy.|5Y68^h#Q]| cNjf"@Tݤ& zN $(Ii bk"yn5B4AB6v=hK γ5q9X~r +_>TrC f 淳79qCӦ)?.۲|>,rR?=Gxƚ|<$ZR&94w6(Z\<~imk74и3|8lZ +cړ\n lp( !]pZ'I%3nH/(mp$pHG{ 84${q>>mӫҁEˣjVֻ4wG`x0[Vh)s;3vJn+oC:^+@I6]o |U{6=̒^19H@e:g$th [Z%0sXg2!>j2|W܃B1 }7^'AxLڲwד(oqN1C'eйVv:{gSmc.t)?]2^T^PywI}-jS$)u/ym-% I +j/x9 :w_c&P +Dc'O@N) +endstream +endobj +980 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F171 1978 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +981 0 obj +<< /A << /S /URI /Type /Action /URI (https://doi.org/10.48550/arXiv.2409.12941) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 384.813 715.13 525.406 728.123 ] /Subtype /Link /Type /Annot >> +endobj +982 0 obj +<< /A << /S /URI /Type /Action /URI (https://doi.org/10.48550/arXiv.2409.12941) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 703.252 202.41 714.574 ] /Subtype /Link /Type /Annot >> +endobj +983 0 obj +<< /A << /S /URI /Type /Action /URI (https://doi.org/10.18653/v1/2024.findings-acl.671) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 516.044 391.908 529.037 ] /Subtype /Link /Type /Annot >> +endobj +984 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=v8L0pN6EOi) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 134.357 419.451 400.95 432.444 ] /Subtype /Link /Type /Annot >> +endobj +985 0 obj +<< /A << /S /URI /Type /Action /URI (https://github.com/WildEval/ZeroEval) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 384.704 309.51 397.697 ] /Subtype /Link /Type /Annot >> +endobj +986 0 obj +<< /A << /S /URI /Type /Action /URI (https://oatllm.notion.site/oat-zero) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 201.774 349.547 424.765 362.95 ] /Subtype /Link /Type /Annot >> +endobj +987 0 obj +<< /A << /S /URI /Type /Action /URI (https://maa.org/math-competitions/american-invitational-mathematics-examination-aime) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 389.384 314.402 525.406 328.202 ] /Subtype /Link /Type /Annot >> +endobj +988 0 obj +<< /A << /S /URI /Type /Action /URI (https://maa.org/math-competitions/american-invitational-mathematics-examination-aime) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 301.66 485.251 314.653 ] /Subtype /Link /Type /Annot >> +endobj +989 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=S37hOerQLB) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 332.987 239.007 525.406 252.807 ] /Subtype /Link /Type /Annot >> +endobj +990 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=S37hOerQLB) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 227.264 158.31 238.113 ] /Subtype /Link /Type /Annot >> +endobj +991 0 obj +<< /A << /S /URI /Type /Action /URI (https://codeforces.com/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 262.861 142.812 409.754 156.215 ] /Subtype /Link /Type /Annot >> +endobj +992 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=j5BuTrEj35) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 295.799 94.118 525.406 107.918 ] /Subtype /Link /Type /Annot >> +endobj +993 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=j5BuTrEj35) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 81.376 120.195 93.224 ] /Subtype /Link /Type /Annot >> +endobj +994 0 obj +<< /Filter /FlateDecode /Length 5489 >> +stream +xڥ\[s6ӾϯGD4q2؎Ӽv^mDu~ (S"ZP. L'_#L$6!ohMȁJb-"X<#'TCWUCo/,*]eO+l ]O_hm:],PS4!͟RH#X|w@WGM~H< qB4aјqF.@ftn$,YZ7ttʛUg6Q.΋_n>^962[Cw*+CWg_xf1.W79A._%#5Eg0j{Hw^ٚJ]Z7剉 5+< r7ѬaY#`k!_-a'IbG Ӱ>~^՛#&.ʻ#׉;#&ł7|?-7v^J]ɑ:qV5>4KXJeˣ_ i>o՝wi5]`3מE׍/ѷ}OUU:_}_v6E =o= AϺ_¨Qnw."[ `tV6Q+5Y.s ,[T.\*[NEiZU,_Q蕐1`:+0@jT魭gfIr6s$U4i z0`ь[;X,Pj ۿvKکl٣8s@7l:qUm oXv @Rxsa3f`|i Vʗ(wKdM}M?}wPek9I9E^^^g3~]fiՔ2Ǫ*Ɛ͢봺wu,+Y?t*&BeK-Rc_p 3d3vx/q%^HX&B8bb#2wV.C+%`~(=w@N-D +6Xj$c.wjأMB:gO0P@"!5سc jJ |!5T^GsF.Al@o;7W*TD2c, }xOj@}P[K֙ h1>ĄMԤ0]OCSO=t 8idJ~ڀ 6&|ڷq |fmIǚyTǠ%}2Tc]$ cآ.z 1OA6e Oա ^W@abht xc;֪ps۫(.6b6D?)8Jq8 +s^m#PζZ +B|ВcpBt՚pJ-^+%G{ZjK{nwof{{=9Hh(:E9㠃!v(D패-;z$GvnpE,?`$M$>jcc% HP)lYlvkK."rjeQakNXܫY97`]rU;\9$_œM ?ćftGڲ H#CHM foO +@t (PQ"1-;R&3f,B" 8/' Wpo}j"\$qS}jwziYR}(Lj|ZjIU,-OUE'&d|<6c-YK\eyzI$1%ixuSW#v-"16u &kYkOOIUgf$v޿U*րJ84UhRctp(Q@ ez?{mПMNljP +Up_e^+Va>/ n܎I.|Y 8ݱ^\DV؆k +);pSQe`$&^#A$t6`5y_lI^rmE5$ +Ԕ㦪˼} G-}1l} &2},c* !qJ !}~qܨeZU081!n8VI. \Ug_ī~k dmLvZL(UkۼNJ vpt[|ݣH>ʳ82Czbf fFF;TQ= 4A9_ ++e8$QyJZTzkRCsj/mz5FhO7!Ӂ#O]^ϛxZ,rcyb"_å +2*yrShз&/nem^^)ط$%ZeZڕteDq_ߒL!m}ka7>o0bER{Tu3s'G6% e ̣ %E#`:ƴ;'=B"$Qّ^cbx 4C!F=ϮG,Y\Atڃ$P024NERAݙ=*6BF61a=(4ۡ<܃}Z%O$v8\c;cAݵ/^N|NPx,gY |YLW-_lȦq,|~^}uz\ \EZͣlMDdPkBmSPE{յhA k=wetRkr(Q`߾ 2bW.e4G,!!,IԱI!YtqŐsV8TFB$EW@lbI/dC<BEJN?fMه8:Yo +Us$ts<܁"ѳȃ(j[2tF>eWUrA ^?ç/ڋqY0XC۶*=`O Bh%(G/x@ݥXfxY\}KOؿ_ek횞%cKQB{b~5S?'! oL\zq~Ԟp'kѯ7\)ʒI^4ws@?/8k!(ƣ7'i,8I}V)H{=ᙅwEY=~Viz_!5 h9 P؃2Olsؗs[bRA=U{٢wh5)n0"충{!KSPȀׂ1 /<Ş) z){4Xs;S4C(! EԀ.1n#^A +j` "p2f- @Mg{@ <։H%F"a)Ȟ-w.q;5{ y(\Z)_S&G @aTS=R.O//|^RĨɧ^&?$ &͈`Qa? Ԅ1]GĨ!tyyē(ڄx 7~ש7KsJwxSjӟ {搘ź9]9<;FtYS~9.PO[[^|-nnU~Kn[zkz@%^_S=/E5vN;/t㎟˳R*q;[8M;`?V 4 +endstream +endobj +995 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F171 1978 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +996 0 obj +<< /A << /S /URI /Type /Action /URI (https://openai.com/index/introducing-simpleqa/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 295.472 670.066 525.406 683.469 ] /Subtype /Link /Type /Annot >> +endobj +997 0 obj +<< /A << /S /URI /Type /Action /URI (https://openai.com/index/introducing-simpleqa/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 656.927 143.058 669.919 ] /Subtype /Link /Type /Annot >> +endobj +998 0 obj +<< /A << /S /URI /Type /Action /URI (https://openai.com/index/introducing-swe-bench-verified/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 228.398 621.05 525.406 634.043 ] /Subtype /Link /Type /Annot >> +endobj +999 0 obj +<< /A << /S /URI /Type /Action /URI (https://openai.com/index/introducing-swe-bench-verified/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 608.532 143.058 620.494 ] /Subtype /Link /Type /Annot >> +endobj +1000 0 obj +<< /A << /S /URI /Type /Action /URI (http://papers.nips.cc/paper_files/paper/2022/hash/b1efde53be364a73914f58805a001731-Abstract-Conference.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 225.866 503.071 525.406 516.872 ] /Subtype /Link /Type /Annot >> +endobj +1001 0 obj +<< /A << /S /URI /Type /Action /URI (http://papers.nips.cc/paper_files/paper/2022/hash/b1efde53be364a73914f58805a001731-Abstract-Conference.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 491.36 461.707 503.322 ] /Subtype /Link /Type /Annot >> +endobj +1002 0 obj +<< /A << /S /URI /Type /Action /URI (https://qwenlm.github.io/blog/qwq-32b-preview/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 435.213 368.742 525.406 382.144 ] /Subtype /Link /Type /Annot >> +endobj +1003 0 obj +<< /A << /S /URI /Type /Action /URI (https://qwenlm.github.io/blog/qwq-32b-preview/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 355.602 285.306 368.595 ] /Subtype /Link /Type /Annot >> +endobj +1004 0 obj +<< /A << /S /URI /Type /Action /URI (https://qwenlm.github.io/blog/qwen2.5) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 359.572 332.866 525.406 346.268 ] /Subtype /Link /Type /Annot >> +endobj +1005 0 obj +<< /A << /S /URI /Type /Action /URI (https://qwenlm.github.io/blog/qwen2.5) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 319.726 152.01 332.719 ] /Subtype /Link /Type /Annot >> +endobj +1006 0 obj +<< /A << /S /URI /Type /Action /URI (http://papers.nips.cc/paper_files/paper/2023/hash/a85b405ed65c6477a4fe8302b5e06ce7-Abstract-Conference.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 441.182 206.518 525.406 220.318 ] /Subtype /Link /Type /Annot >> +endobj +1007 0 obj +<< /A << /S /URI /Type /Action /URI (http://papers.nips.cc/paper_files/paper/2023/hash/a85b405ed65c6477a4fe8302b5e06ce7-Abstract-Conference.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 193.777 525.406 206.769 ] /Subtype /Link /Type /Annot >> +endobj +1008 0 obj +<< /A << /S /URI /Type /Action /URI (http://papers.nips.cc/paper_files/paper/2023/hash/a85b405ed65c6477a4fe8302b5e06ce7-Abstract-Conference.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 181.258 247.191 192.075 ] /Subtype /Link /Type /Annot >> +endobj +1009 0 obj +<< /Filter /FlateDecode /Length 5868 >> +stream +xڭiɳxZC'֚hRL4E1'%A@-?仆o=l@< TootqBl)w۾-v=]zg1]kP etLW8?/ Cσ?4Mge#czpD%*+=JΪl@` #pVm̋9bfU/K!yƢZisf5=踎γ.󰴘/1zt.a6m~y} t7rY>@™Z+P74cM`h$hNv~)ù1b T.U6~yVl۷:[ޮӇ7͢ǨE6ϧp̾|2KFS<7a0X&l$-K5!-fY7 '!}yp!b%M + 3Å6C~^.i"\jԕ!7P閸wm`?H>D:Mx,A!t,q2C\R\=#4(0I ٕ gY[ W1w%3˧V= ¨)`$lႡOq%NSw +xC9؜0ʑ=+h[Aq^tWcŦorz 9z@&VZŒQdh'7RM&,Hhװƴ`"dP_HCzg q}+p kG0aa$ DFl ⠾LZ1STes|!6jM>xe~V!(8]q彿oyq)M8@$Za=-P Dhm<!̷TM\..7r*dtuҕOu /zuzz׋u<+W)?!Ϧu#<; }Z6xrXlP6GQ$4!@cpۡh]:_ +`x(L"+u6u^#S?r3 +O7v<؄ܹIMoK}lY_eG#>`}6v̸Pϋ9Pm$;?kX N:F<D^N2'CI"ll( '{Cz=U^aQ[;Ls٥Y~(#D=f&AѢ;\F Wҍ$\a,!b 1&.o@Umj q6f.'aCUQ`A`wVa L3қaI5ݥ +xsrtEs{JP82P Vea$H@4GvsڌlD\0 D{ԿQ \ؘ!m)=>ntК:HP gt(KFTgHk!xfN C`s8{/yfUck;8 3[38ᦻXPKz)y1+ou+h%=IX6]i{" l!1∙CeqIepBc?].ҵ+%wOy=[NgҾLzFK ՠSou0NtÍ >5=)$c+|8-֐u8p3w8.B8BJQ0xQCp g~dkܑσLR'$ʬ;qSH]a02DDo puOg>ڤ{^c7f-̧׭&{OWms{*Z~oC[MӗOm'̔ˊ :NݍEi>Mldy}5u'gΥ;Y]?D`S﹫ m^|"u)-l_zwq7G xu_OgAwN直ΰRt=`݂vM]B~?\> N8,XHNӸD!6nG>`N^@&a#@(Ħ%'8, +pӈ1` hDq⎑cڷ^PWLʺݦS$~wڃ~9,緙K|%>UvViVycnʿ:OAsʧʔϮxx:/cѯW}~Q:j>!e=4iYQ7O'FGŠ)-C5;ſDdcv"kLD\r2C. +2~0A|>4 5A7\B6#.*=&x 8&-lˀ)a j*zO''0b vC@& .aO&FL~-fOhJ0p[a}{~c^IId !ȘrY}%sX>b XBBDә] +_N?qYim[4Fp,D?*;Pƥ[{2q8 JG®d`nXClMEz+y;XCd, +^^f~F>=1Bs +R.-poS^r˵#XaAJ5HΈk̶w|Vv}dL4봂* +endstream +endobj +1010 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F171 1978 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +1011 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=Yacmpz84TH) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 665.516 347.31 678.509 ] /Subtype /Link /Type /Annot >> +endobj +1012 0 obj +<< /A << /S /URI /Type /Action /URI (http://joschu.net/blog/kl-approx.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 340.184 642.591 525.406 655.993 ] /Subtype /Link /Type /Annot >> +endobj +1013 0 obj +<< /A << /S /URI /Type /Action /URI (http://joschu.net/blog/kl-approx.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 632.085 133.11 641.299 ] /Subtype /Link /Type /Annot >> +endobj +1014 0 obj +<< /A << /S /URI /Type /Action /URI (http://arxiv.org/abs/1712.01815) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 139.811 444.545 337.104 457.537 ] /Subtype /Link /Type /Annot >> +endobj +1015 0 obj +<< /A << /S /URI /Type /Action /URI (https://doi.org/10.1038/nature24270) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 284.967 381.382 507.46 394.374 ] /Subtype /Link /Type /Annot >> +endobj +1016 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=lNAyUngGFK) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 372.149 276.763 525.406 290.563 ] /Subtype /Link /Type /Annot >> +endobj +1017 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=lNAyUngGFK) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 263.612 196.11 276.573 ] /Subtype /Link /Type /Annot >> +endobj +1018 0 obj +<< /A << /S /URI /Type /Action /URI (https://arxiv.org/abs/2408.03314) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 334.389 227.547 525.406 240.95 ] /Subtype /Link /Type /Annot >> +endobj +1019 0 obj +<< /A << /S /URI /Type /Action /URI (https://arxiv.org/abs/2408.03314) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 217.042 94.995 226.256 ] /Subtype /Link /Type /Annot >> +endobj +1020 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=4FWAwZtd2n) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 281.048 163.986 525.406 177.786 ] /Subtype /Link /Type /Annot >> +endobj +1021 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=4FWAwZtd2n) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 153.879 107.91 163.092 ] /Subtype /Link /Type /Annot >> +endobj +1022 0 obj +<< /Filter /FlateDecode /Length 4122 >> +stream +xڭ[]W8Ҿ_91֗e9{o/0;3=&ċcM)Ivfo]K%꩒Oo"7 KX(Ӓ1F7+l/ +E=ٞ=C57xs|#4J-1ӌ0!x$oc]p48x\,]!ЃX$PFԺ? =U뤗2dL$dXm^0Zl^5 SC%$,<$:SfMi_vpn4Teyr§'n2}A$ #&q y=v8xLM*PB8-(tFyUV3rRMm +G:˻y^7~dXX5PC! *G+^DKI' x܃$c*%%ShI}eh:_]fyazmxMofLmiLg3#߶ZES|eNyp#3g`)"d1U> SͳM~UU@S3{RAЧxZMQQV:.FGk&fZ>M~yM{^ܥ~) De4Jl0C-*$Y@zϚ<3Y*ZkQ4B d*og vYp0\4  dfO_Ef pJv[->c rrqK{1\ EC9l&*vO7-e__JrC"Rl)8h#e +ȸ?vW#YH +,$9#>LiΈx]= 딱 +S}'ބS ރzyN_b(M3Xq4Cz0<),Ms0=l4}SϺ??7`5g ΋iVU(=<8=~i;B0{p0FLw<Dm $ eQh,wUCzSTwVÃUWUFQNo{8ikD5<ֈ;uq6\Ta[ϡx'Uv ͍1^bƃnr0Χ=D.jռ^e ')PENx + \fÌ!?fe^ 0sIĴ*r#F7)d':i4?XBXV +*ѳ{]<~ab1/6w&:\GSJv#`(,?(~ȯ28q`'L#_z p +A ̄ ׬;3^}a'zpQ"A@AWz@/QΈѷÓMr7. 꾺ZpcEi;y>صx+]zYW̐ژ{ɻWP% y=qI)exQ͛[G#C4duUvu&H(ESӛ˩X+@%-lRhR0JX7 *(0ãl8N$v ۍ)ݓ|R-,Z(' +Pnv<ʋ} J[q)j?ߘYڏF)ǧ}rT6UYM:(Ypin~xҢS9jvN[4]lRP w$8>Gfǰq[ٳu&%{(ogmCks݇K;1vHRÑ::y7C"]]WVZg+KaRv7Dnj㪀p˼FĴtHdإ`K.iٶ۱=y40mecϰHB]vbpWc<J.GџOrdռq/8=ޗSawfFة$#K6Z+ y"X+µZ@fMb!~#*H:/{'ҵ+FR-,[ bH]zK*nA5O5|~V ؃6w'y0'y6ona]6{؆/F+oj\-}/κ7o%2l6\ܘ׎n-*`9 t_-4AQoaJez-_iR=ftԏ{=&i^P!v'IBȥxPٳ!.SKNrOwhchkxp.4tY۽ gWSRpo<5Z@@T+C%$ [ xEULdfv_6]d>F%-']9my yq^86I'UY7YxL-Ja7D~vm) }"`qV4۳8cObIv3_9?&|tЍ%܌mxl% uCq2|gDQH9D̲Hݙ/xzS-z @9 阽!(pۂR,jWgW37udCv˅|Lі-!dugAi 8Hl nfZ}^@|'ᩎrP[;}\۫x'b_t)D@>LOVQ /݄q KD/u$*-[r$љ%=t%СmoAZ +d_->}*.8Sh\f@^(dm^E(:wiǀ +U@Y|ނXE1u&X#l=+g殷wVyc-[7h(k&^Ĺc_f2~ ==#'D3/Se.D1!SLX7?%fpT[䲺V,'U +c<1 3.d8z'l| C.䡈$F["7Ŵ.wj,DP+XVVN *R*͖ss I>}@5^|:LzͶs_=ዥ3u톞8 E*D:zl6<Y?zq~8ُ^vT!Dz%$ $C +endstream +endobj +1023 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F171 1978 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +1024 0 obj +<< /A << /S /URI /Type /Action /URI (https://aclanthology.org/2023.findings-acl.824/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 674.483 379.308 687.475 ] /Subtype /Link /Type /Annot >> +endobj +1025 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=1PL1NIMMrw) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 252.85 375.991 519.443 389.791 ] /Subtype /Link /Type /Annot >> +endobj +1026 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=1PL1NIMMrw) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 251.661 312.827 518.254 326.628 ] /Subtype /Link /Type /Annot >> +endobj +1027 0 obj +<< /A << /S /URI /Type /Action /URI (http://papers.nips.cc/paper_files/paper/2024/hash/ad236edc564f3e3156e1b2feafb99a24-Abstract-Datasets_and_Benchmarks_Track.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 173.76 525.406 186.753 ] /Subtype /Link /Type /Annot >> +endobj +1028 0 obj +<< /A << /S /URI /Type /Action /URI (http://papers.nips.cc/paper_files/paper/2024/hash/ad236edc564f3e3156e1b2feafb99a24-Abstract-Datasets_and_Benchmarks_Track.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 160.874 442.492 172.059 ] /Subtype /Link /Type /Annot >> +endobj +1029 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=yzkSU5zdwD) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 486.246 109.789 525.406 123.149 ] /Subtype /Link /Type /Annot >> +endobj +1030 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=yzkSU5zdwD) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 97.048 308.88 110.04 ] /Subtype /Link /Type /Annot >> +endobj +1031 0 obj +<< /Filter /FlateDecode /Length 4991 >> +stream +x\[s6~_Gj!T:K27I&;V +hg(+Rvy~vDʴGu^$A6@k4d4%wgO>z#azD8MR2|;"qB0Jb-Hqk,\.1Ktt6[ᆲ%NLO?"׾]6_.LYȖG$I#_(%y}oXOrˏ״a:ϖg-Ty_?i[I)FcƩk< 0CS̫'r.>2EYuI|EVrO>ddnS8=@̳wqu;nټTS[ :V)s>7qaDJ$ _XtUͲ%eĵ'tnin@%#_Ąf.bIMBV ۫>+c)""D&W+M[ň884/Z4%N?z~Z9g2Ne@4jSwy 3GnR}ɹxEs$$dM*՗tk@t IuRi !Cnѥi%q]W4yU>mL)`J%sfa&2.+ZV- $e6nVe)O=E5͊:@BTz:;DZۘ 7xf)hLY.)!wN%iT|~vfR\g A mMvrdFuނS0F`|d6A0L!|õN#9 Vi%xy =}K:M*gp-%(>;6‚x\ƿ2˪E,T9R+>ڲn"1Pרi(Ή!'EB15(ও 8RY9uی31@DhVF0x!D*Mi +o}0l >uwT7E:#=,IVcoM9f91uIY61;̨,&T~'3n~3*X ``/11hތRBQ%6S>3:K7D'q$dOgYiXaĂ+ϢO- +KO̳͒v@Pɔ[vm{&7H,h[՟Lʦ9vR͋"6xn[EvV7euS[{R-]׵xhY䷏~q[lͣ+Lґ=l|#F.m5%!&bϔMPj(U +)~ChhJ;zPWQ"Q$Xh-4ޞ{y _B4fMv hͽg sgZP1Q>Ju3 5Pdw1;}=u]wz Evb2A2GtFBtHrBm;倚q 49D,< rZb88!m) 541$)z)`*Z[b(hL0ûW3Jw'CSXl+n&o7Y^i/6.`(ń:w +pطkq]ݳ6v]یypU_!3R-bʆ& +$!,@Oރcqғ"00ɲvV X"Ee">M,_,`nazlߍekiU:w>4nC,){$Ӣߊ%툃'CHzO@sgfiS%H_ +A] nw [yg[$t+&Cahږ 1 a@En@q|W`k<cLw "zyCr]6+",p_3پ~i:;VvkfC^N9ƗU3]re-ߺcǎiLnGY0po(f2L.k'\7/wh0Ti(&;RyTͳVƴh$[)@ i$ݓ/x~>ܿz ti<>nUW.yxyU4%v/|#QWyl ::=JD@lnWSi]%/UK.۬xSt)<ЄS;pf=(Vc,fKf5,@+gAf2Ki;2h*|'}'I*ٲLl1ZWYRwG_]Qk ܵf5kM=#,l$+fKsoPI_Ov5P~ͿWΐ'^uw1f'X$ѩdPa#N1 +]K,R!7\ +npr P\b$h8R 7<FARVE+4 [3,WCS2tПxܳxP_Cn)}-1F!5u<>˜p~{2>[ȃAdlK3ܸs;MT}'ܨT/\AMPb.{JTh%SEXnB/U^[4E2r3=4@ +209JҏXa #daϒ43>|nx))䐮TƂ"M঄ \@hZx D'wi,L8iicI~;NNV^I}e`R?w0<:Lԧ=5CnmfnoPgXit|sD"<;iL9]#fQ,ђcVy1ЛӰTQfn"}/Bw=+IXڔzE~kOb/R=zß[3/:[1j]0bVg} =q֦['{m]_g\g|-5<_TM_qR)jV/uI|̔yb1jaY ,.yț~uD* 㙴<=ԇSu '8AHjwafd:M\RH~ihm,Gv̀'̇δQܐBAo*x.DvpF{~)jWWvgHx@^zRݓDnYG~jo&M=ܹ40g{.(s[{t~om:/ Wϧ}U|>Y= !-zOx. +endstream +endobj +1032 0 obj +<< /ColorSpace 99 0 R /ExtGState 100 0 R /Font << /F138 102 0 R /F171 1978 0 R >> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +1033 0 obj +<< /A << /S /URI /Type /Action /URI (http://papers.nips.cc/paper_files/paper/2022/hash/9d5609613524ecf4f15af0f7b31abca4-Abstract-Conference.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 674.483 525.406 687.475 ] /Subtype /Link /Type /Annot >> +endobj +1034 0 obj +<< /A << /S /URI /Type /Action /URI (http://papers.nips.cc/paper_files/paper/2022/hash/9d5609613524ecf4f15af0f7b31abca4-Abstract-Conference.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 661.964 335.391 672.781 ] /Subtype /Link /Type /Annot >> +endobj +1035 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=hH36JeQZDaO) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 217.09 610.511 489.983 624.312 ] /Subtype /Link /Type /Annot >> +endobj +1036 0 obj +<< /A << /S /URI /Type /Action /URI (https://arxiv.org/abs/2408.08152) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 512.091 284.31 525.084 ] /Subtype /Link /Type /Annot >> +endobj +1037 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=5Xc1ecxO1h) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 334.413 461.669 525.406 475.47 ] /Subtype /Link /Type /Annot >> +endobj +1038 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=5Xc1ecxO1h) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 451.562 158.31 460.776 ] /Subtype /Link /Type /Annot >> +endobj +1039 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=WE_vluYUL-X) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 270.821 398.506 525.406 412.307 ] /Subtype /Link /Type /Annot >> +endobj +1040 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=WE_vluYUL-X) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 386.795 102.108 397.613 ] /Subtype /Link /Type /Annot >> +endobj +1041 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=_3ELRdg2sgI) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 233.563 285.729 506.456 299.53 ] /Subtype /Link /Type /Annot >> +endobj +1042 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=oRXPiSOGH9) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 186.742 236.115 453.335 249.916 ] /Subtype /Link /Type /Annot >> +endobj +1043 0 obj +<< /A << /S /URI /Type /Action /URI (https://openreview.net/forum?id=WZH7099tgfM) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 173.76 353.61 186.753 ] /Subtype /Link /Type /Annot >> +endobj +1044 0 obj +<< /Filter /FlateDecode /Length 4657 >> +stream +xڭ\[s۶~ϯ#=1ĕ@f:{8ͥNIvthx"(9[( +%!þ.,NnN=< s²f|>aiQ&yBr<)_yr~,%cI߻"Wժ^bAЃY I?\( y{"Mʭ*I +{ru_,e}mj#c橑vtI3df8H>a.r*GQmje +!S):HR榱CzY"͕E)Q(I?B= -ԿZ\Ql$ヌVn<|+3r)}y6u& R!dl\(X*:rŷfU<1ϱrI0}|`fKőne`0&dXm=.X1#,Z*e0&lPg{Ʀfzi4* +in^XrȰU>riϸ#Pg"=Rq q:BTɨ M[]eG-9C̟iK,+^`xsa!Oln#ٿP]2Rk$W0a_,P`{E6&VZ#5j^v1 y81-*5$y7 +K("F)e5ou$Uh&ظ6cutrF }X͆<$q|Í9CKŪ\.a ȭQs c &3@|gޤjT/4KRT"6qߛ評^ ~rtda +:$bH,#J +2,,frFGse< SaBK,lBRJ!\1۫Q1$ WG]XU5]Gr}K_>o +%erϊ ɓ ʼlB2֬o^vrY4W_)K +@,YA`!~U-r\NȬIMu$lY!AT0 "e٠IP31(d2eG|Xwve4dIiFTiK_"}&wTuM^ -Xm&LiWP|֧V[]Z}A5 EϨౠ3&oHSm:tS%/u.U'UTڤ-8_zޯ[yה)KLܮ|ܳTaW u.vr#?bn6D=9/"o8>]3Œ~ʻ]tqyǡœϰs;0v1 +X1p:r +:1̑݃ Y==U%_ nu=5]n/9,Wt. kvw/ܚs4,YLP, QNH{2HνϫxgC_:Gr^Tt$uds/;ldP2s쮗ͬ„Khg;1,B?$ˍ'7V#*TT؊r32cF,z>K01-Cd.u}2"C˒Ozc +0iq8+"dV?w#3\\ ObA-wNm M 5__խX\|8j$`Ӻ^Q.8glo-L=MЗGvǚpx-蜛YvM5Wq؁cR~Ea=rLv屃R%MG4Nzܓ#AuP*OV}J@-C92< +EA)`3)?tPPJER=cJqhTDBVtL +b8 +E1)Bl.G"nxsꇝ96݅qw(g/},՗PFzCXŷU(u s}C"0O:Aݺ*W^:@;o5a]+ c/t/(O?b: Дr~_:xx/*{sW_hixiOaI(c^W-Z`?Wf@41킫 >Q(I?ebL46RRQda8C~! 1 # +5)dw70Kt#O%P .7 Ӏl ~.޾xiv9C>4k9Mc/)*/7U_H Z~e~V w6u?Ugٺmm<_rpx}N]n-Dy(qp_YywdUOnf+$rQ\]%^({Lk<PQc^Ȼ`sneAL_3;2[sa˙8htA<3a3lgfӂGI!86b=xMNĜdL1(8s}#z!8vqH4 yx.e8&l>}ւmQ$?gB.|]I2;|&H @"&H{/ ^c"HV\Cqؤjjfb,xk8J?s2y~QjyjԹ{ -%6AT(f5FcbpY%P.c?e*ELcOa-m؈>|("> /Pattern 105 0 R /ProcSet [ /PDF /Text ] >> +endobj +1046 0 obj +<< /D [ 9 0 R /XYZ 70.866 756.85 null ] >> +endobj +1047 0 obj +[ 9 0 R /Fit ] +endobj +1048 0 obj +<< /D [ 121 0 R /XYZ 70.866 736.726 null ] >> +endobj +1049 0 obj +<< /D [ 124 0 R /XYZ 70.866 166.514 null ] >> +endobj +1050 0 obj +<< /D [ 145 0 R /XYZ 70.866 365.232 null ] >> +endobj +1051 0 obj +<< /D [ 146 0 R /XYZ 70.866 84.205 null ] >> +endobj +1052 0 obj +<< /D [ 162 0 R /XYZ 70.866 276.3 null ] >> +endobj +1053 0 obj +<< /D [ 168 0 R /XYZ 70.866 339.966 null ] >> +endobj +1054 0 obj +<< /D [ 170 0 R /XYZ 70.866 336.262 null ] >> +endobj +1055 0 obj +<< /D [ 172 0 R /XYZ 70.866 526.028 null ] >> +endobj +1056 0 obj +<< /D [ 173 0 R /XYZ 70.866 242.931 null ] >> +endobj +1057 0 obj +<< /D [ 174 0 R /XYZ 70.866 465.308 null ] >> +endobj +1058 0 obj +<< /D [ 190 0 R /XYZ 43.593 345.971 null ] >> +endobj +1059 0 obj +<< /D [ 193 0 R /XYZ 43.593 619.565 null ] >> +endobj +1060 0 obj +<< /D [ 187 0 R /XYZ 43.593 179.884 null ] >> +endobj +1061 0 obj +<< /D [ 189 0 R /XYZ 43.593 407.56 null ] >> +endobj +1062 0 obj +<< /D [ 194 0 R /XYZ 43.593 168.457 null ] >> +endobj +1063 0 obj +<< /D [ 190 0 R /XYZ 43.593 415.465 null ] >> +endobj +1064 0 obj +<< /D [ 191 0 R /XYZ 43.593 386.364 null ] >> +endobj +1065 0 obj +<< /D [ 194 0 R /XYZ 43.593 606.016 null ] >> +endobj +1066 0 obj +<< /D [ 188 0 R /XYZ 43.593 299.366 null ] >> +endobj +1067 0 obj +<< /D [ 187 0 R /XYZ 43.593 699.65 null ] >> +endobj +1068 0 obj +<< /D [ 192 0 R /XYZ 43.593 439.241 null ] >> +endobj +1069 0 obj +<< /D [ 192 0 R /XYZ 43.593 502.404 null ] >> +endobj +1070 0 obj +<< /D [ 187 0 R /XYZ 43.593 665.165 null ] >> +endobj +1071 0 obj +<< /D [ 187 0 R /XYZ 43.593 617.131 null ] >> +endobj +1072 0 obj +<< /D [ 187 0 R /XYZ 43.593 439.767 null ] >> +endobj +1073 0 obj +<< /D [ 189 0 R /XYZ 43.593 371.495 null ] >> +endobj +1074 0 obj +<< /D [ 187 0 R /XYZ 43.593 275.952 null ] >> +endobj +1075 0 obj +<< /D [ 187 0 R /XYZ 43.593 227.918 null ] >> +endobj +1076 0 obj +<< /D [ 188 0 R /XYZ 43.593 759.441 null ] >> +endobj +1077 0 obj +<< /D [ 190 0 R /XYZ 43.593 601.002 null ] >> +endobj +1078 0 obj +<< /D [ 188 0 R /XYZ 43.593 669.179 null ] >> +endobj +1079 0 obj +<< /D [ 190 0 R /XYZ 43.593 160.434 null ] >> +endobj +1080 0 obj +<< /D [ 187 0 R /XYZ 43.593 405.282 null ] >> +endobj +1081 0 obj +<< /D [ 189 0 R /XYZ 43.593 520.337 null ] >> +endobj +1082 0 obj +<< /D [ 192 0 R /XYZ 43.593 552.018 null ] >> +endobj +1083 0 obj +<< /D [ 191 0 R /XYZ 43.593 278.735 null ] >> +endobj +1084 0 obj +<< /D [ 188 0 R /XYZ 43.593 583.5 null ] >> +endobj +1085 0 obj +<< /D [ 188 0 R /XYZ 43.593 533.886 null ] >> +endobj +1086 0 obj +<< /D [ 188 0 R /XYZ 43.593 475.306 null ] >> +endobj +1087 0 obj +<< /D [ 190 0 R /XYZ 43.593 759.441 null ] >> +endobj +1088 0 obj +<< /D [ 192 0 R /XYZ 43.593 624.148 null ] >> +endobj +1089 0 obj +<< /D [ 188 0 R /XYZ 43.593 335.431 null ] >> +endobj +1090 0 obj +<< /D [ 188 0 R /XYZ 43.593 263.301 null ] >> +endobj +1091 0 obj +<< /D [ 189 0 R /XYZ 43.593 696.278 null ] >> +endobj +1092 0 obj +<< /D [ 189 0 R /XYZ 43.593 633.114 null ] >> +endobj +1093 0 obj +<< /D [ 191 0 R /XYZ 43.593 175.112 null ] >> +endobj +1094 0 obj +<< /D [ 191 0 R /XYZ 43.593 314.611 null ] >> +endobj +1095 0 obj +<< /D [ 187 0 R /XYZ 43.593 569.097 null ] >> +endobj +1096 0 obj +<< /D [ 191 0 R /XYZ 43.593 710.015 null ] >> +endobj +1097 0 obj +<< /D [ 188 0 R /XYZ 43.593 633.114 null ] >> +endobj +1098 0 obj +<< /D [ 189 0 R /XYZ 43.593 569.951 null ] >> +endobj +1099 0 obj +<< /D [ 189 0 R /XYZ 43.593 218.071 null ] >> +endobj +1100 0 obj +<< /D [ 192 0 R /XYZ 43.593 660.213 null ] >> +endobj +1101 0 obj +<< /D [ 189 0 R /XYZ 43.593 168.457 null ] >> +endobj +1102 0 obj +<< /D [ 190 0 R /XYZ 43.593 697.595 null ] >> +endobj +1103 0 obj +<< /D [ 190 0 R /XYZ 43.593 512.058 null ] >> +endobj +1104 0 obj +<< /D [ 190 0 R /XYZ 43.593 477.311 null ] >> +endobj +1105 0 obj +<< /D [ 190 0 R /XYZ 43.593 380.718 null ] >> +endobj +1106 0 obj +<< /D [ 189 0 R /XYZ 43.593 267.685 null ] >> +endobj +1107 0 obj +<< /D [ 187 0 R /XYZ 43.593 734.136 null ] >> +endobj +1108 0 obj +<< /D [ 190 0 R /XYZ 43.593 297.675 null ] >> +endobj +1109 0 obj +<< /D [ 193 0 R /XYZ 43.593 484.272 null ] >> +endobj +1110 0 obj +<< /D [ 189 0 R /XYZ 43.593 759.441 null ] >> +endobj +1111 0 obj +<< /D [ 189 0 R /XYZ 43.593 470.723 null ] >> +endobj +1112 0 obj +<< /D [ 193 0 R /XYZ 43.593 272.267 null ] >> +endobj +1113 0 obj +<< /D [ 188 0 R /XYZ 43.593 213.687 null ] >> +endobj +1114 0 obj +<< /D [ 190 0 R /XYZ 43.593 139.236 null ] >> +endobj +1115 0 obj +<< /D [ 191 0 R /XYZ 43.593 759.441 null ] >> +endobj +1116 0 obj +<< /D [ 188 0 R /XYZ 43.593 511.371 null ] >> +endobj +1117 0 obj +<< /D [ 191 0 R /XYZ 43.593 602.386 null ] >> +endobj +1118 0 obj +<< /D [ 191 0 R /XYZ 43.593 350.487 null ] >> +endobj +1119 0 obj +<< /D [ 188 0 R /XYZ 43.593 425.692 null ] >> +endobj +1120 0 obj +<< /D [ 191 0 R /XYZ 43.593 449.338 null ] >> +endobj +1121 0 obj +<< /D [ 193 0 R /XYZ 43.593 308.332 null ] >> +endobj +1122 0 obj +<< /D [ 190 0 R /XYZ 43.593 222.28 null ] >> +endobj +1123 0 obj +<< /D [ 193 0 R /XYZ 43.593 533.886 null ] >> +endobj +1124 0 obj +<< /D [ 191 0 R /XYZ 43.593 139.236 null ] >> +endobj +1125 0 obj +<< /D [ 192 0 R /XYZ 43.593 723.376 null ] >> +endobj +1126 0 obj +<< /D [ 192 0 R /XYZ 43.593 588.083 null ] >> +endobj +1127 0 obj +<< /D [ 191 0 R /XYZ 43.593 687.688 null ] >> +endobj +1128 0 obj +<< /D [ 192 0 R /XYZ 43.593 376.078 null ] >> +endobj +1129 0 obj +<< /D [ 192 0 R /XYZ 43.593 258.718 null ] >> +endobj +1130 0 obj +<< /D [ 192 0 R /XYZ 43.593 209.104 null ] >> +endobj +1131 0 obj +<< /D [ 192 0 R /XYZ 43.593 145.941 null ] >> +endobj +1132 0 obj +<< /D [ 193 0 R /XYZ 43.593 759.441 null ] >> +endobj +1133 0 obj +<< /D [ 191 0 R /XYZ 43.593 651.812 null ] >> +endobj +1134 0 obj +<< /D [ 191 0 R /XYZ 43.593 485.215 null ] >> +endobj +1135 0 obj +<< /D [ 193 0 R /XYZ 43.593 669.179 null ] >> +endobj +1136 0 obj +<< /D [ 193 0 R /XYZ 43.593 583.5 null ] >> +endobj +1137 0 obj +<< /D [ 190 0 R /XYZ 43.593 649.299 null ] >> +endobj +1138 0 obj +<< /D [ 193 0 R /XYZ 43.593 434.658 null ] >> +endobj +1139 0 obj +<< /D [ 193 0 R /XYZ 43.593 371.495 null ] >> +endobj +1140 0 obj +<< /D [ 194 0 R /XYZ 43.593 759.441 null ] >> +endobj +1141 0 obj +<< /D [ 193 0 R /XYZ 43.593 154.907 null ] >> +endobj +1142 0 obj +<< /D [ 194 0 R /XYZ 43.593 655.63 null ] >> +endobj +1143 0 obj +<< /D [ 194 0 R /XYZ 43.593 569.951 null ] >> +endobj +1144 0 obj +<< /D [ 194 0 R /XYZ 43.593 443.625 null ] >> +endobj +1145 0 obj +<< /D [ 194 0 R /XYZ 43.593 506.788 null ] >> +endobj +1146 0 obj +<< /D [ 194 0 R /XYZ 43.593 380.462 null ] >> +endobj +1147 0 obj +<< /D [ 194 0 R /XYZ 43.593 330.848 null ] >> +endobj +1148 0 obj +<< /D [ 194 0 R /XYZ 43.593 281.234 null ] >> +endobj +1149 0 obj +<< /D [ 194 0 R /XYZ 43.593 231.62 null ] >> +endobj +1150 0 obj +<< /D [ 95 0 R /XYZ 70.866 701.038 null ] >> +endobj +1151 0 obj +<< /D [ 116 0 R /XYZ 507.686 452.551 null ] >> +endobj +1152 0 obj +<< /D [ 123 0 R /XYZ 70.866 458.194 null ] >> +endobj +1153 0 obj +<< /D [ 123 0 R /XYZ 189.365 409.114 null ] >> +endobj +1154 0 obj +<< /D [ 123 0 R /XYZ 224.755 340.389 null ] >> +endobj +1155 0 obj +<< /D [ 95 0 R /XYZ 189.365 651.958 null ] >> +endobj +1156 0 obj +<< /D [ 95 0 R /XYZ 224.755 583.233 null ] >> +endobj +1157 0 obj +<< /D [ 96 0 R /XYZ 209.08 368.422 null ] >> +endobj +1158 0 obj +<< /D [ 115 0 R /XYZ 188.758 527.602 null ] >> +endobj +1159 0 obj +<< /D [ 115 0 R /XYZ 219.79 350.929 null ] >> +endobj +1160 0 obj +<< /D [ 115 0 R /XYZ 218.119 102.736 null ] >> +endobj +1161 0 obj +<< /D [ 116 0 R /XYZ 513.14 486.723 null ] >> +endobj +1162 0 obj +<< /D [ 116 0 R /XYZ 513.14 469.089 null ] >> +endobj +1163 0 obj +<< /D [ 144 0 R /XYZ 70.866 596.427 null ] >> +endobj +1164 0 obj +<< /D [ 145 0 R /XYZ 70.866 551.098 null ] >> +endobj +1165 0 obj +<< /D [ 146 0 R /XYZ 70.866 763.625 null ] >> +endobj +1166 0 obj +<< /D [ 147 0 R /XYZ 70.866 763.625 null ] >> +endobj +1167 0 obj +<< /D [ 150 0 R /XYZ 70.866 622.466 null ] >> +endobj +1168 0 obj +<< /D [ 151 0 R /XYZ 70.866 763.625 null ] >> +endobj +1169 0 obj +<< /D [ 96 0 R /XYZ 70.866 763.625 null ] >> +endobj +1170 0 obj +<< /D [ 152 0 R /XYZ 70.866 763.625 null ] >> +endobj +1171 0 obj +<< /D [ 157 0 R /XYZ 70.866 675.391 null ] >> +endobj +1172 0 obj +<< /D [ 160 0 R /XYZ 70.866 763.625 null ] >> +endobj +1173 0 obj +<< /D [ 163 0 R /XYZ 70.866 727.192 null ] >> +endobj +1174 0 obj +<< /D [ 166 0 R /XYZ 70.866 620.368 null ] >> +endobj +1175 0 obj +<< /D [ 167 0 R /XYZ 70.866 763.625 null ] >> +endobj +1176 0 obj +<< /D [ 98 0 R /XYZ 70.866 763.625 null ] >> +endobj +1177 0 obj +<< /D [ 123 0 R /XYZ 70.866 763.625 null ] >> +endobj +1178 0 obj +<< /D [ 124 0 R /XYZ 70.866 763.625 null ] >> +endobj +1179 0 obj +<< /D [ 125 0 R /XYZ 70.866 763.625 null ] >> +endobj +1180 0 obj +<< /D [ 174 0 R /XYZ 70.866 736.838 null ] >> +endobj +1181 0 obj +<< /D [ 129 0 R /XYZ 70.866 682.641 null ] >> +endobj +1182 0 obj +<< /D [ 130 0 R /XYZ 70.866 723.288 null ] >> +endobj +1183 0 obj +<< /D [ 132 0 R /XYZ 70.866 123.852 null ] >> +endobj +1184 0 obj +<< /D [ 134 0 R /XYZ 70.866 756.85 null ] >> +endobj +1185 0 obj +<< /D [ 135 0 R /XYZ 70.866 180.608 null ] >> +endobj +1186 0 obj +<< /D [ 139 0 R /XYZ 70.866 497.124 null ] >> +endobj +1187 0 obj +<< /D [ 141 0 R /XYZ 70.866 135.481 null ] >> +endobj +1188 0 obj +<< /D [ 152 0 R /XYZ 70.866 302.857 null ] >> +endobj +1189 0 obj +<< /D [ 174 0 R /XYZ 70.866 738.818 null ] >> +endobj +1190 0 obj +<< /D [ 174 0 R /XYZ 70.866 629.229 null ] >> +endobj +1191 0 obj +<< /D [ 174 0 R /XYZ 70.866 618.27 null ] >> +endobj +1192 0 obj +<< /D [ 174 0 R /XYZ 70.866 596.352 null ] >> +endobj +1193 0 obj +<< /D [ 174 0 R /XYZ 70.866 574.434 null ] >> +endobj +1194 0 obj +<< /D [ 174 0 R /XYZ 70.866 563.476 null ] >> +endobj +1195 0 obj +<< /D [ 174 0 R /XYZ 70.866 552.517 null ] >> +endobj +1196 0 obj +<< /D [ 174 0 R /XYZ 70.866 727.859 null ] >> +endobj +1197 0 obj +<< /D [ 174 0 R /XYZ 70.866 705.941 null ] >> +endobj +1198 0 obj +<< /D [ 174 0 R /XYZ 70.866 694.982 null ] >> +endobj +1199 0 obj +<< /D [ 174 0 R /XYZ 70.866 684.024 null ] >> +endobj +1200 0 obj +<< /D [ 174 0 R /XYZ 70.866 673.065 null ] >> +endobj +1201 0 obj +<< /D [ 174 0 R /XYZ 70.866 662.106 null ] >> +endobj +1202 0 obj +<< /D [ 174 0 R /XYZ 70.866 651.147 null ] >> +endobj +1203 0 obj +<< /D [ 174 0 R /XYZ 70.866 640.188 null ] >> +endobj +1204 0 obj +<< /D [ 129 0 R /XYZ 70.866 665.094 null ] >> +endobj +1205 0 obj +<< /D [ 129 0 R /XYZ 70.866 555.505 null ] >> +endobj +1206 0 obj +<< /D [ 129 0 R /XYZ 70.866 544.547 null ] >> +endobj +1207 0 obj +<< /D [ 129 0 R /XYZ 70.866 522.629 null ] >> +endobj +1208 0 obj +<< /D [ 129 0 R /XYZ 70.866 511.67 null ] >> +endobj +1209 0 obj +<< /D [ 129 0 R /XYZ 70.866 500.711 null ] >> +endobj +1210 0 obj +<< /D [ 129 0 R /XYZ 70.866 478.793 null ] >> +endobj +1211 0 obj +<< /D [ 129 0 R /XYZ 70.866 467.834 null ] >> +endobj +1212 0 obj +<< /D [ 129 0 R /XYZ 70.866 654.136 null ] >> +endobj +1213 0 obj +<< /D [ 129 0 R /XYZ 70.866 643.177 null ] >> +endobj +1214 0 obj +<< /D [ 129 0 R /XYZ 70.866 632.218 null ] >> +endobj +1215 0 obj +<< /D [ 129 0 R /XYZ 70.866 621.259 null ] >> +endobj +1216 0 obj +<< /D [ 129 0 R /XYZ 70.866 610.3 null ] >> +endobj +1217 0 obj +<< /D [ 129 0 R /XYZ 70.866 599.341 null ] >> +endobj +1218 0 obj +<< /D [ 129 0 R /XYZ 70.866 588.382 null ] >> +endobj +1219 0 obj +<< /D [ 129 0 R /XYZ 70.866 566.464 null ] >> +endobj +1220 0 obj +<< /D [ 130 0 R /XYZ 70.866 705.742 null ] >> +endobj +1221 0 obj +<< /D [ 130 0 R /XYZ 70.866 585.194 null ] >> +endobj +1222 0 obj +<< /D [ 131 0 R /XYZ 70.866 208.905 null ] >> +endobj +1223 0 obj +<< /D [ 131 0 R /XYZ 70.866 197.946 null ] >> +endobj +1224 0 obj +<< /D [ 131 0 R /XYZ 70.866 186.987 null ] >> +endobj +1225 0 obj +<< /D [ 131 0 R /XYZ 70.866 165.07 null ] >> +endobj +1226 0 obj +<< /D [ 131 0 R /XYZ 70.866 154.111 null ] >> +endobj +1227 0 obj +<< /D [ 131 0 R /XYZ 70.866 143.152 null ] >> +endobj +1228 0 obj +<< /D [ 131 0 R /XYZ 70.866 132.193 null ] >> +endobj +1229 0 obj +<< /D [ 131 0 R /XYZ 70.866 121.234 null ] >> +endobj +1230 0 obj +<< /D [ 131 0 R /XYZ 70.866 110.275 null ] >> +endobj +1231 0 obj +<< /D [ 131 0 R /XYZ 70.866 99.316 null ] >> +endobj +1232 0 obj +<< /D [ 130 0 R /XYZ 70.866 574.235 null ] >> +endobj +1233 0 obj +<< /D [ 132 0 R /XYZ 70.866 756.85 null ] >> +endobj +1234 0 obj +<< /D [ 132 0 R /XYZ 70.866 745.891 null ] >> +endobj +1235 0 obj +<< /D [ 132 0 R /XYZ 70.866 734.933 null ] >> +endobj +1236 0 obj +<< /D [ 132 0 R /XYZ 70.866 723.974 null ] >> +endobj +1237 0 obj +<< /D [ 132 0 R /XYZ 70.866 713.015 null ] >> +endobj +1238 0 obj +<< /D [ 132 0 R /XYZ 70.866 702.056 null ] >> +endobj +1239 0 obj +<< /D [ 132 0 R /XYZ 70.866 691.097 null ] >> +endobj +1240 0 obj +<< /D [ 132 0 R /XYZ 70.866 680.138 null ] >> +endobj +1241 0 obj +<< /D [ 132 0 R /XYZ 70.866 669.179 null ] >> +endobj +1242 0 obj +<< /D [ 132 0 R /XYZ 70.866 658.22 null ] >> +endobj +1243 0 obj +<< /D [ 130 0 R /XYZ 70.866 563.276 null ] >> +endobj +1244 0 obj +<< /D [ 132 0 R /XYZ 70.866 647.261 null ] >> +endobj +1245 0 obj +<< /D [ 132 0 R /XYZ 70.866 636.302 null ] >> +endobj +1246 0 obj +<< /D [ 132 0 R /XYZ 70.866 625.344 null ] >> +endobj +1247 0 obj +<< /D [ 132 0 R /XYZ 70.866 603.426 null ] >> +endobj +1248 0 obj +<< /D [ 132 0 R /XYZ 70.866 592.467 null ] >> +endobj +1249 0 obj +<< /D [ 132 0 R /XYZ 70.866 581.508 null ] >> +endobj +1250 0 obj +<< /D [ 132 0 R /XYZ 70.866 570.549 null ] >> +endobj +1251 0 obj +<< /D [ 132 0 R /XYZ 70.866 559.59 null ] >> +endobj +1252 0 obj +<< /D [ 132 0 R /XYZ 70.866 548.631 null ] >> +endobj +1253 0 obj +<< /D [ 132 0 R /XYZ 70.866 537.672 null ] >> +endobj +1254 0 obj +<< /D [ 130 0 R /XYZ 70.866 552.317 null ] >> +endobj +1255 0 obj +<< /D [ 132 0 R /XYZ 70.866 526.713 null ] >> +endobj +1256 0 obj +<< /D [ 132 0 R /XYZ 70.866 515.755 null ] >> +endobj +1257 0 obj +<< /D [ 132 0 R /XYZ 70.866 504.796 null ] >> +endobj +1258 0 obj +<< /D [ 132 0 R /XYZ 70.866 493.837 null ] >> +endobj +1259 0 obj +<< /D [ 132 0 R /XYZ 70.866 482.878 null ] >> +endobj +1260 0 obj +<< /D [ 132 0 R /XYZ 70.866 471.919 null ] >> +endobj +1261 0 obj +<< /D [ 132 0 R /XYZ 70.866 460.96 null ] >> +endobj +1262 0 obj +<< /D [ 132 0 R /XYZ 70.866 450.001 null ] >> +endobj +1263 0 obj +<< /D [ 132 0 R /XYZ 70.866 439.042 null ] >> +endobj +1264 0 obj +<< /D [ 132 0 R /XYZ 70.866 428.083 null ] >> +endobj +1265 0 obj +<< /D [ 130 0 R /XYZ 70.866 541.359 null ] >> +endobj +1266 0 obj +<< /D [ 132 0 R /XYZ 70.866 417.124 null ] >> +endobj +1267 0 obj +<< /D [ 132 0 R /XYZ 70.866 406.165 null ] >> +endobj +1268 0 obj +<< /D [ 132 0 R /XYZ 70.866 395.207 null ] >> +endobj +1269 0 obj +<< /D [ 132 0 R /XYZ 70.866 373.289 null ] >> +endobj +1270 0 obj +<< /D [ 132 0 R /XYZ 70.866 362.33 null ] >> +endobj +1271 0 obj +<< /D [ 132 0 R /XYZ 70.866 351.371 null ] >> +endobj +1272 0 obj +<< /D [ 132 0 R /XYZ 70.866 340.412 null ] >> +endobj +1273 0 obj +<< /D [ 132 0 R /XYZ 70.866 329.453 null ] >> +endobj +1274 0 obj +<< /D [ 132 0 R /XYZ 70.866 318.494 null ] >> +endobj +1275 0 obj +<< /D [ 132 0 R /XYZ 70.866 307.535 null ] >> +endobj +1276 0 obj +<< /D [ 130 0 R /XYZ 70.866 530.4 null ] >> +endobj +1277 0 obj +<< /D [ 132 0 R /XYZ 70.866 296.576 null ] >> +endobj +1278 0 obj +<< /D [ 132 0 R /XYZ 70.866 285.618 null ] >> +endobj +1279 0 obj +<< /D [ 132 0 R /XYZ 70.866 274.659 null ] >> +endobj +1280 0 obj +<< /D [ 132 0 R /XYZ 70.866 263.7 null ] >> +endobj +1281 0 obj +<< /D [ 132 0 R /XYZ 70.866 230.823 null ] >> +endobj +1282 0 obj +<< /D [ 132 0 R /XYZ 70.866 219.864 null ] >> +endobj +1283 0 obj +<< /D [ 130 0 R /XYZ 70.866 519.441 null ] >> +endobj +1284 0 obj +<< /D [ 130 0 R /XYZ 70.866 508.482 null ] >> +endobj +1285 0 obj +<< /D [ 130 0 R /XYZ 70.866 486.564 null ] >> +endobj +1286 0 obj +<< /D [ 130 0 R /XYZ 70.866 475.605 null ] >> +endobj +1287 0 obj +<< /D [ 130 0 R /XYZ 70.866 694.783 null ] >> +endobj +1288 0 obj +<< /D [ 130 0 R /XYZ 70.866 464.646 null ] >> +endobj +1289 0 obj +<< /D [ 130 0 R /XYZ 70.866 453.687 null ] >> +endobj +1290 0 obj +<< /D [ 130 0 R /XYZ 70.866 442.728 null ] >> +endobj +1291 0 obj +<< /D [ 130 0 R /XYZ 70.866 431.769 null ] >> +endobj +1292 0 obj +<< /D [ 130 0 R /XYZ 70.866 420.811 null ] >> +endobj +1293 0 obj +<< /D [ 130 0 R /XYZ 70.866 409.852 null ] >> +endobj +1294 0 obj +<< /D [ 130 0 R /XYZ 70.866 398.893 null ] >> +endobj +1295 0 obj +<< /D [ 130 0 R /XYZ 70.866 387.934 null ] >> +endobj +1296 0 obj +<< /D [ 130 0 R /XYZ 70.866 376.975 null ] >> +endobj +1297 0 obj +<< /D [ 130 0 R /XYZ 70.866 366.016 null ] >> +endobj +1298 0 obj +<< /D [ 130 0 R /XYZ 70.866 683.824 null ] >> +endobj +1299 0 obj +<< /D [ 130 0 R /XYZ 70.866 355.057 null ] >> +endobj +1300 0 obj +<< /D [ 130 0 R /XYZ 70.866 344.098 null ] >> +endobj +1301 0 obj +<< /D [ 130 0 R /XYZ 70.866 333.139 null ] >> +endobj +1302 0 obj +<< /D [ 130 0 R /XYZ 70.866 322.18 null ] >> +endobj +1303 0 obj +<< /D [ 130 0 R /XYZ 70.866 311.222 null ] >> +endobj +1304 0 obj +<< /D [ 130 0 R /XYZ 70.866 300.263 null ] >> +endobj +1305 0 obj +<< /D [ 130 0 R /XYZ 70.866 289.304 null ] >> +endobj +1306 0 obj +<< /D [ 130 0 R /XYZ 70.866 278.345 null ] >> +endobj +1307 0 obj +<< /D [ 130 0 R /XYZ 70.866 267.386 null ] >> +endobj +1308 0 obj +<< /D [ 130 0 R /XYZ 70.866 245.468 null ] >> +endobj +1309 0 obj +<< /D [ 130 0 R /XYZ 70.866 672.865 null ] >> +endobj +1310 0 obj +<< /D [ 130 0 R /XYZ 70.866 234.509 null ] >> +endobj +1311 0 obj +<< /D [ 130 0 R /XYZ 70.866 223.55 null ] >> +endobj +1312 0 obj +<< /D [ 130 0 R /XYZ 70.866 212.591 null ] >> +endobj +1313 0 obj +<< /D [ 130 0 R /XYZ 70.866 190.674 null ] >> +endobj +1314 0 obj +<< /D [ 130 0 R /XYZ 70.866 179.715 null ] >> +endobj +1315 0 obj +<< /D [ 130 0 R /XYZ 70.866 168.756 null ] >> +endobj +1316 0 obj +<< /D [ 130 0 R /XYZ 70.866 157.797 null ] >> +endobj +1317 0 obj +<< /D [ 130 0 R /XYZ 70.866 146.838 null ] >> +endobj +1318 0 obj +<< /D [ 130 0 R /XYZ 70.866 135.879 null ] >> +endobj +1319 0 obj +<< /D [ 130 0 R /XYZ 70.866 124.92 null ] >> +endobj +1320 0 obj +<< /D [ 130 0 R /XYZ 70.866 661.906 null ] >> +endobj +1321 0 obj +<< /D [ 130 0 R /XYZ 70.866 113.961 null ] >> +endobj +1322 0 obj +<< /D [ 130 0 R /XYZ 70.866 103.002 null ] >> +endobj +1323 0 obj +<< /D [ 131 0 R /XYZ 70.866 756.85 null ] >> +endobj +1324 0 obj +<< /D [ 131 0 R /XYZ 70.866 745.891 null ] >> +endobj +1325 0 obj +<< /D [ 131 0 R /XYZ 70.866 734.933 null ] >> +endobj +1326 0 obj +<< /D [ 131 0 R /XYZ 70.866 723.974 null ] >> +endobj +1327 0 obj +<< /D [ 131 0 R /XYZ 70.866 713.015 null ] >> +endobj +1328 0 obj +<< /D [ 131 0 R /XYZ 70.866 702.056 null ] >> +endobj +1329 0 obj +<< /D [ 131 0 R /XYZ 70.866 691.097 null ] >> +endobj +1330 0 obj +<< /D [ 131 0 R /XYZ 70.866 680.138 null ] >> +endobj +1331 0 obj +<< /D [ 130 0 R /XYZ 70.866 650.948 null ] >> +endobj +1332 0 obj +<< /D [ 131 0 R /XYZ 70.866 669.179 null ] >> +endobj +1333 0 obj +<< /D [ 131 0 R /XYZ 70.866 658.22 null ] >> +endobj +1334 0 obj +<< /D [ 131 0 R /XYZ 70.866 636.302 null ] >> +endobj +1335 0 obj +<< /D [ 131 0 R /XYZ 70.866 625.344 null ] >> +endobj +1336 0 obj +<< /D [ 131 0 R /XYZ 70.866 614.385 null ] >> +endobj +1337 0 obj +<< /D [ 131 0 R /XYZ 70.866 603.426 null ] >> +endobj +1338 0 obj +<< /D [ 131 0 R /XYZ 70.866 592.467 null ] >> +endobj +1339 0 obj +<< /D [ 131 0 R /XYZ 70.866 581.508 null ] >> +endobj +1340 0 obj +<< /D [ 131 0 R /XYZ 70.866 570.549 null ] >> +endobj +1341 0 obj +<< /D [ 131 0 R /XYZ 70.866 559.59 null ] >> +endobj +1342 0 obj +<< /D [ 130 0 R /XYZ 70.866 639.989 null ] >> +endobj +1343 0 obj +<< /D [ 131 0 R /XYZ 70.866 548.631 null ] >> +endobj +1344 0 obj +<< /D [ 131 0 R /XYZ 70.866 537.672 null ] >> +endobj +1345 0 obj +<< /D [ 131 0 R /XYZ 70.866 526.713 null ] >> +endobj +1346 0 obj +<< /D [ 131 0 R /XYZ 70.866 515.755 null ] >> +endobj +1347 0 obj +<< /D [ 131 0 R /XYZ 70.866 504.796 null ] >> +endobj +1348 0 obj +<< /D [ 131 0 R /XYZ 70.866 493.837 null ] >> +endobj +1349 0 obj +<< /D [ 131 0 R /XYZ 70.866 482.878 null ] >> +endobj +1350 0 obj +<< /D [ 131 0 R /XYZ 70.866 471.919 null ] >> +endobj +1351 0 obj +<< /D [ 131 0 R /XYZ 70.866 460.96 null ] >> +endobj +1352 0 obj +<< /D [ 131 0 R /XYZ 70.866 439.042 null ] >> +endobj +1353 0 obj +<< /D [ 130 0 R /XYZ 70.866 629.03 null ] >> +endobj +1354 0 obj +<< /D [ 131 0 R /XYZ 70.866 428.083 null ] >> +endobj +1355 0 obj +<< /D [ 131 0 R /XYZ 70.866 417.124 null ] >> +endobj +1356 0 obj +<< /D [ 131 0 R /XYZ 70.866 406.165 null ] >> +endobj +1357 0 obj +<< /D [ 131 0 R /XYZ 70.866 395.207 null ] >> +endobj +1358 0 obj +<< /D [ 131 0 R /XYZ 70.866 384.248 null ] >> +endobj +1359 0 obj +<< /D [ 131 0 R /XYZ 70.866 373.289 null ] >> +endobj +1360 0 obj +<< /D [ 131 0 R /XYZ 70.866 362.33 null ] >> +endobj +1361 0 obj +<< /D [ 131 0 R /XYZ 70.866 351.371 null ] >> +endobj +1362 0 obj +<< /D [ 131 0 R /XYZ 70.866 340.412 null ] >> +endobj +1363 0 obj +<< /D [ 131 0 R /XYZ 70.866 329.453 null ] >> +endobj +1364 0 obj +<< /D [ 130 0 R /XYZ 70.866 596.153 null ] >> +endobj +1365 0 obj +<< /D [ 131 0 R /XYZ 70.866 318.494 null ] >> +endobj +1366 0 obj +<< /D [ 131 0 R /XYZ 70.866 307.535 null ] >> +endobj +1367 0 obj +<< /D [ 131 0 R /XYZ 70.866 296.576 null ] >> +endobj +1368 0 obj +<< /D [ 131 0 R /XYZ 70.866 285.618 null ] >> +endobj +1369 0 obj +<< /D [ 131 0 R /XYZ 70.866 274.659 null ] >> +endobj +1370 0 obj +<< /D [ 131 0 R /XYZ 70.866 263.7 null ] >> +endobj +1371 0 obj +<< /D [ 131 0 R /XYZ 70.866 252.741 null ] >> +endobj +1372 0 obj +<< /D [ 131 0 R /XYZ 70.866 241.782 null ] >> +endobj +1373 0 obj +<< /D [ 131 0 R /XYZ 70.866 230.823 null ] >> +endobj +1374 0 obj +<< /D [ 131 0 R /XYZ 70.866 219.864 null ] >> +endobj +1375 0 obj +<< /D [ 132 0 R /XYZ 70.866 106.957 null ] >> +endobj +1376 0 obj +<< /D [ 133 0 R /XYZ 70.866 669.179 null ] >> +endobj +1377 0 obj +<< /D [ 133 0 R /XYZ 70.866 658.22 null ] >> +endobj +1378 0 obj +<< /D [ 133 0 R /XYZ 70.866 647.261 null ] >> +endobj +1379 0 obj +<< /D [ 133 0 R /XYZ 70.866 636.302 null ] >> +endobj +1380 0 obj +<< /D [ 133 0 R /XYZ 70.866 625.344 null ] >> +endobj +1381 0 obj +<< /D [ 133 0 R /XYZ 70.866 614.385 null ] >> +endobj +1382 0 obj +<< /D [ 133 0 R /XYZ 70.866 603.426 null ] >> +endobj +1383 0 obj +<< /D [ 133 0 R /XYZ 70.866 592.467 null ] >> +endobj +1384 0 obj +<< /D [ 133 0 R /XYZ 70.866 581.508 null ] >> +endobj +1385 0 obj +<< /D [ 133 0 R /XYZ 70.866 570.549 null ] >> +endobj +1386 0 obj +<< /D [ 132 0 R /XYZ 70.866 95.998 null ] >> +endobj +1387 0 obj +<< /D [ 133 0 R /XYZ 70.866 559.59 null ] >> +endobj +1388 0 obj +<< /D [ 133 0 R /XYZ 70.866 548.631 null ] >> +endobj +1389 0 obj +<< /D [ 133 0 R /XYZ 70.866 537.672 null ] >> +endobj +1390 0 obj +<< /D [ 133 0 R /XYZ 70.866 526.713 null ] >> +endobj +1391 0 obj +<< /D [ 133 0 R /XYZ 70.866 515.755 null ] >> +endobj +1392 0 obj +<< /D [ 133 0 R /XYZ 70.866 504.796 null ] >> +endobj +1393 0 obj +<< /D [ 133 0 R /XYZ 70.866 493.837 null ] >> +endobj +1394 0 obj +<< /D [ 133 0 R /XYZ 70.866 482.878 null ] >> +endobj +1395 0 obj +<< /D [ 133 0 R /XYZ 70.866 471.919 null ] >> +endobj +1396 0 obj +<< /D [ 133 0 R /XYZ 70.866 460.96 null ] >> +endobj +1397 0 obj +<< /D [ 133 0 R /XYZ 70.866 756.85 null ] >> +endobj +1398 0 obj +<< /D [ 133 0 R /XYZ 70.866 450.001 null ] >> +endobj +1399 0 obj +<< /D [ 133 0 R /XYZ 70.866 439.042 null ] >> +endobj +1400 0 obj +<< /D [ 133 0 R /XYZ 70.866 428.083 null ] >> +endobj +1401 0 obj +<< /D [ 133 0 R /XYZ 70.866 417.124 null ] >> +endobj +1402 0 obj +<< /D [ 133 0 R /XYZ 70.866 406.165 null ] >> +endobj +1403 0 obj +<< /D [ 133 0 R /XYZ 70.866 395.207 null ] >> +endobj +1404 0 obj +<< /D [ 133 0 R /XYZ 70.866 384.248 null ] >> +endobj +1405 0 obj +<< /D [ 133 0 R /XYZ 70.866 373.289 null ] >> +endobj +1406 0 obj +<< /D [ 133 0 R /XYZ 70.866 362.33 null ] >> +endobj +1407 0 obj +<< /D [ 133 0 R /XYZ 70.866 351.371 null ] >> +endobj +1408 0 obj +<< /D [ 133 0 R /XYZ 70.866 745.891 null ] >> +endobj +1409 0 obj +<< /D [ 133 0 R /XYZ 70.866 340.412 null ] >> +endobj +1410 0 obj +<< /D [ 133 0 R /XYZ 70.866 329.453 null ] >> +endobj +1411 0 obj +<< /D [ 133 0 R /XYZ 70.866 318.494 null ] >> +endobj +1412 0 obj +<< /D [ 133 0 R /XYZ 70.866 307.535 null ] >> +endobj +1413 0 obj +<< /D [ 133 0 R /XYZ 70.866 296.576 null ] >> +endobj +1414 0 obj +<< /D [ 133 0 R /XYZ 70.866 285.618 null ] >> +endobj +1415 0 obj +<< /D [ 133 0 R /XYZ 70.866 274.659 null ] >> +endobj +1416 0 obj +<< /D [ 133 0 R /XYZ 70.866 263.7 null ] >> +endobj +1417 0 obj +<< /D [ 133 0 R /XYZ 70.866 252.741 null ] >> +endobj +1418 0 obj +<< /D [ 133 0 R /XYZ 70.866 241.782 null ] >> +endobj +1419 0 obj +<< /D [ 133 0 R /XYZ 70.866 734.933 null ] >> +endobj +1420 0 obj +<< /D [ 133 0 R /XYZ 70.866 230.823 null ] >> +endobj +1421 0 obj +<< /D [ 133 0 R /XYZ 70.866 219.864 null ] >> +endobj +1422 0 obj +<< /D [ 133 0 R /XYZ 70.866 208.905 null ] >> +endobj +1423 0 obj +<< /D [ 133 0 R /XYZ 70.866 197.946 null ] >> +endobj +1424 0 obj +<< /D [ 133 0 R /XYZ 70.866 186.987 null ] >> +endobj +1425 0 obj +<< /D [ 133 0 R /XYZ 70.866 176.028 null ] >> +endobj +1426 0 obj +<< /D [ 133 0 R /XYZ 70.866 165.07 null ] >> +endobj +1427 0 obj +<< /D [ 133 0 R /XYZ 70.866 154.111 null ] >> +endobj +1428 0 obj +<< /D [ 133 0 R /XYZ 70.866 143.152 null ] >> +endobj +1429 0 obj +<< /D [ 133 0 R /XYZ 70.866 132.193 null ] >> +endobj +1430 0 obj +<< /D [ 133 0 R /XYZ 70.866 723.974 null ] >> +endobj +1431 0 obj +<< /D [ 133 0 R /XYZ 70.866 121.234 null ] >> +endobj +1432 0 obj +<< /D [ 133 0 R /XYZ 70.866 110.275 null ] >> +endobj +1433 0 obj +<< /D [ 133 0 R /XYZ 70.866 99.316 null ] >> +endobj +1434 0 obj +<< /D [ 133 0 R /XYZ 70.866 713.015 null ] >> +endobj +1435 0 obj +<< /D [ 133 0 R /XYZ 70.866 691.097 null ] >> +endobj +1436 0 obj +<< /D [ 133 0 R /XYZ 70.866 680.138 null ] >> +endobj +1437 0 obj +<< /D [ 134 0 R /XYZ 70.866 741.807 null ] >> +endobj +1438 0 obj +<< /D [ 134 0 R /XYZ 70.866 555.505 null ] >> +endobj +1439 0 obj +<< /D [ 134 0 R /XYZ 70.866 544.547 null ] >> +endobj +1440 0 obj +<< /D [ 134 0 R /XYZ 70.866 533.588 null ] >> +endobj +1441 0 obj +<< /D [ 134 0 R /XYZ 70.866 522.629 null ] >> +endobj +1442 0 obj +<< /D [ 134 0 R /XYZ 70.866 511.67 null ] >> +endobj +1443 0 obj +<< /D [ 134 0 R /XYZ 70.866 500.711 null ] >> +endobj +1444 0 obj +<< /D [ 134 0 R /XYZ 70.866 489.752 null ] >> +endobj +1445 0 obj +<< /D [ 134 0 R /XYZ 70.866 478.793 null ] >> +endobj +1446 0 obj +<< /D [ 134 0 R /XYZ 70.866 467.834 null ] >> +endobj +1447 0 obj +<< /D [ 134 0 R /XYZ 70.866 434.958 null ] >> +endobj +1448 0 obj +<< /D [ 134 0 R /XYZ 70.866 697.971 null ] >> +endobj +1449 0 obj +<< /D [ 134 0 R /XYZ 70.866 423.999 null ] >> +endobj +1450 0 obj +<< /D [ 134 0 R /XYZ 70.866 413.04 null ] >> +endobj +1451 0 obj +<< /D [ 134 0 R /XYZ 70.866 687.012 null ] >> +endobj +1452 0 obj +<< /D [ 134 0 R /XYZ 70.866 676.053 null ] >> +endobj +1453 0 obj +<< /D [ 134 0 R /XYZ 70.866 654.136 null ] >> +endobj +1454 0 obj +<< /D [ 134 0 R /XYZ 70.866 621.259 null ] >> +endobj +1455 0 obj +<< /D [ 134 0 R /XYZ 70.866 588.382 null ] >> +endobj +1456 0 obj +<< /D [ 134 0 R /XYZ 70.866 577.423 null ] >> +endobj +1457 0 obj +<< /D [ 134 0 R /XYZ 70.866 566.464 null ] >> +endobj +1458 0 obj +<< /D [ 135 0 R /XYZ 70.866 163.062 null ] >> +endobj +1459 0 obj +<< /D [ 136 0 R /XYZ 70.866 625.344 null ] >> +endobj +1460 0 obj +<< /D [ 138 0 R /XYZ 70.866 636.302 null ] >> +endobj +1461 0 obj +<< /D [ 138 0 R /XYZ 70.866 625.344 null ] >> +endobj +1462 0 obj +<< /D [ 138 0 R /XYZ 70.866 614.385 null ] >> +endobj +1463 0 obj +<< /D [ 138 0 R /XYZ 70.866 592.467 null ] >> +endobj +1464 0 obj +<< /D [ 138 0 R /XYZ 70.866 581.508 null ] >> +endobj +1465 0 obj +<< /D [ 138 0 R /XYZ 70.866 570.549 null ] >> +endobj +1466 0 obj +<< /D [ 138 0 R /XYZ 70.866 559.59 null ] >> +endobj +1467 0 obj +<< /D [ 138 0 R /XYZ 70.866 548.631 null ] >> +endobj +1468 0 obj +<< /D [ 138 0 R /XYZ 70.866 537.672 null ] >> +endobj +1469 0 obj +<< /D [ 138 0 R /XYZ 70.866 526.713 null ] >> +endobj +1470 0 obj +<< /D [ 136 0 R /XYZ 70.866 570.549 null ] >> +endobj +1471 0 obj +<< /D [ 138 0 R /XYZ 70.866 515.755 null ] >> +endobj +1472 0 obj +<< /D [ 138 0 R /XYZ 70.866 504.796 null ] >> +endobj +1473 0 obj +<< /D [ 138 0 R /XYZ 70.866 493.837 null ] >> +endobj +1474 0 obj +<< /D [ 138 0 R /XYZ 70.866 482.878 null ] >> +endobj +1475 0 obj +<< /D [ 138 0 R /XYZ 70.866 460.96 null ] >> +endobj +1476 0 obj +<< /D [ 138 0 R /XYZ 70.866 450.001 null ] >> +endobj +1477 0 obj +<< /D [ 138 0 R /XYZ 70.866 439.042 null ] >> +endobj +1478 0 obj +<< /D [ 138 0 R /XYZ 70.866 428.083 null ] >> +endobj +1479 0 obj +<< /D [ 138 0 R /XYZ 70.866 406.165 null ] >> +endobj +1480 0 obj +<< /D [ 138 0 R /XYZ 70.866 395.207 null ] >> +endobj +1481 0 obj +<< /D [ 136 0 R /XYZ 70.866 559.59 null ] >> +endobj +1482 0 obj +<< /D [ 138 0 R /XYZ 70.866 373.289 null ] >> +endobj +1483 0 obj +<< /D [ 138 0 R /XYZ 70.866 362.33 null ] >> +endobj +1484 0 obj +<< /D [ 138 0 R /XYZ 70.866 351.371 null ] >> +endobj +1485 0 obj +<< /D [ 138 0 R /XYZ 70.866 340.412 null ] >> +endobj +1486 0 obj +<< /D [ 138 0 R /XYZ 70.866 318.494 null ] >> +endobj +1487 0 obj +<< /D [ 138 0 R /XYZ 70.866 307.535 null ] >> +endobj +1488 0 obj +<< /D [ 138 0 R /XYZ 70.866 285.618 null ] >> +endobj +1489 0 obj +<< /D [ 138 0 R /XYZ 70.866 274.659 null ] >> +endobj +1490 0 obj +<< /D [ 138 0 R /XYZ 70.866 263.7 null ] >> +endobj +1491 0 obj +<< /D [ 138 0 R /XYZ 70.866 252.741 null ] >> +endobj +1492 0 obj +<< /D [ 136 0 R /XYZ 70.866 526.713 null ] >> +endobj +1493 0 obj +<< /D [ 138 0 R /XYZ 70.866 241.782 null ] >> +endobj +1494 0 obj +<< /D [ 138 0 R /XYZ 70.866 230.823 null ] >> +endobj +1495 0 obj +<< /D [ 138 0 R /XYZ 70.866 186.987 null ] >> +endobj +1496 0 obj +<< /D [ 138 0 R /XYZ 70.866 176.028 null ] >> +endobj +1497 0 obj +<< /D [ 138 0 R /XYZ 70.866 121.234 null ] >> +endobj +1498 0 obj +<< /D [ 138 0 R /XYZ 70.866 110.275 null ] >> +endobj +1499 0 obj +<< /D [ 139 0 R /XYZ 70.866 756.85 null ] >> +endobj +1500 0 obj +<< /D [ 139 0 R /XYZ 70.866 745.891 null ] >> +endobj +1501 0 obj +<< /D [ 139 0 R /XYZ 70.866 734.933 null ] >> +endobj +1502 0 obj +<< /D [ 139 0 R /XYZ 70.866 713.015 null ] >> +endobj +1503 0 obj +<< /D [ 136 0 R /XYZ 70.866 515.755 null ] >> +endobj +1504 0 obj +<< /D [ 139 0 R /XYZ 70.866 702.056 null ] >> +endobj +1505 0 obj +<< /D [ 139 0 R /XYZ 70.866 691.097 null ] >> +endobj +1506 0 obj +<< /D [ 139 0 R /XYZ 70.866 680.138 null ] >> +endobj +1507 0 obj +<< /D [ 139 0 R /XYZ 70.866 669.179 null ] >> +endobj +1508 0 obj +<< /D [ 139 0 R /XYZ 70.866 658.22 null ] >> +endobj +1509 0 obj +<< /D [ 139 0 R /XYZ 70.866 647.261 null ] >> +endobj +1510 0 obj +<< /D [ 139 0 R /XYZ 70.866 636.302 null ] >> +endobj +1511 0 obj +<< /D [ 139 0 R /XYZ 70.866 625.344 null ] >> +endobj +1512 0 obj +<< /D [ 139 0 R /XYZ 70.866 603.426 null ] >> +endobj +1513 0 obj +<< /D [ 139 0 R /XYZ 70.866 592.467 null ] >> +endobj +1514 0 obj +<< /D [ 136 0 R /XYZ 70.866 482.878 null ] >> +endobj +1515 0 obj +<< /D [ 139 0 R /XYZ 70.866 581.508 null ] >> +endobj +1516 0 obj +<< /D [ 139 0 R /XYZ 70.866 570.549 null ] >> +endobj +1517 0 obj +<< /D [ 139 0 R /XYZ 70.866 559.59 null ] >> +endobj +1518 0 obj +<< /D [ 139 0 R /XYZ 70.866 548.631 null ] >> +endobj +1519 0 obj +<< /D [ 139 0 R /XYZ 70.866 537.672 null ] >> +endobj +1520 0 obj +<< /D [ 139 0 R /XYZ 70.866 526.713 null ] >> +endobj +1521 0 obj +<< /D [ 136 0 R /XYZ 70.866 471.919 null ] >> +endobj +1522 0 obj +<< /D [ 136 0 R /XYZ 70.866 417.124 null ] >> +endobj +1523 0 obj +<< /D [ 136 0 R /XYZ 70.866 406.165 null ] >> +endobj +1524 0 obj +<< /D [ 136 0 R /XYZ 70.866 340.412 null ] >> +endobj +1525 0 obj +<< /D [ 135 0 R /XYZ 70.866 152.103 null ] >> +endobj +1526 0 obj +<< /D [ 136 0 R /XYZ 70.866 329.453 null ] >> +endobj +1527 0 obj +<< /D [ 136 0 R /XYZ 70.866 296.576 null ] >> +endobj +1528 0 obj +<< /D [ 136 0 R /XYZ 70.866 285.618 null ] >> +endobj +1529 0 obj +<< /D [ 136 0 R /XYZ 70.866 263.7 null ] >> +endobj +1530 0 obj +<< /D [ 136 0 R /XYZ 70.866 252.741 null ] >> +endobj +1531 0 obj +<< /D [ 136 0 R /XYZ 70.866 241.782 null ] >> +endobj +1532 0 obj +<< /D [ 136 0 R /XYZ 70.866 230.823 null ] >> +endobj +1533 0 obj +<< /D [ 136 0 R /XYZ 70.866 208.905 null ] >> +endobj +1534 0 obj +<< /D [ 136 0 R /XYZ 70.866 197.946 null ] >> +endobj +1535 0 obj +<< /D [ 136 0 R /XYZ 70.866 176.028 null ] >> +endobj +1536 0 obj +<< /D [ 135 0 R /XYZ 70.866 108.267 null ] >> +endobj +1537 0 obj +<< /D [ 136 0 R /XYZ 70.866 165.07 null ] >> +endobj +1538 0 obj +<< /D [ 136 0 R /XYZ 70.866 154.111 null ] >> +endobj +1539 0 obj +<< /D [ 136 0 R /XYZ 70.866 143.152 null ] >> +endobj +1540 0 obj +<< /D [ 136 0 R /XYZ 70.866 132.193 null ] >> +endobj +1541 0 obj +<< /D [ 136 0 R /XYZ 70.866 121.234 null ] >> +endobj +1542 0 obj +<< /D [ 136 0 R /XYZ 70.866 99.316 null ] >> +endobj +1543 0 obj +<< /D [ 137 0 R /XYZ 70.866 756.85 null ] >> +endobj +1544 0 obj +<< /D [ 137 0 R /XYZ 70.866 745.891 null ] >> +endobj +1545 0 obj +<< /D [ 137 0 R /XYZ 70.866 734.933 null ] >> +endobj +1546 0 obj +<< /D [ 137 0 R /XYZ 70.866 723.974 null ] >> +endobj +1547 0 obj +<< /D [ 135 0 R /XYZ 70.866 97.309 null ] >> +endobj +1548 0 obj +<< /D [ 137 0 R /XYZ 70.866 713.015 null ] >> +endobj +1549 0 obj +<< /D [ 137 0 R /XYZ 70.866 691.097 null ] >> +endobj +1550 0 obj +<< /D [ 137 0 R /XYZ 70.866 680.138 null ] >> +endobj +1551 0 obj +<< /D [ 137 0 R /XYZ 70.866 658.22 null ] >> +endobj +1552 0 obj +<< /D [ 137 0 R /XYZ 70.866 647.261 null ] >> +endobj +1553 0 obj +<< /D [ 137 0 R /XYZ 70.866 625.344 null ] >> +endobj +1554 0 obj +<< /D [ 137 0 R /XYZ 70.866 614.385 null ] >> +endobj +1555 0 obj +<< /D [ 137 0 R /XYZ 70.866 603.426 null ] >> +endobj +1556 0 obj +<< /D [ 137 0 R /XYZ 70.866 592.467 null ] >> +endobj +1557 0 obj +<< /D [ 137 0 R /XYZ 70.866 570.549 null ] >> +endobj +1558 0 obj +<< /D [ 136 0 R /XYZ 70.866 756.85 null ] >> +endobj +1559 0 obj +<< /D [ 137 0 R /XYZ 70.866 559.59 null ] >> +endobj +1560 0 obj +<< /D [ 137 0 R /XYZ 70.866 548.631 null ] >> +endobj +1561 0 obj +<< /D [ 137 0 R /XYZ 70.866 537.672 null ] >> +endobj +1562 0 obj +<< /D [ 137 0 R /XYZ 70.866 526.713 null ] >> +endobj +1563 0 obj +<< /D [ 137 0 R /XYZ 70.866 515.755 null ] >> +endobj +1564 0 obj +<< /D [ 137 0 R /XYZ 70.866 504.796 null ] >> +endobj +1565 0 obj +<< /D [ 137 0 R /XYZ 70.866 493.837 null ] >> +endobj +1566 0 obj +<< /D [ 137 0 R /XYZ 70.866 482.878 null ] >> +endobj +1567 0 obj +<< /D [ 137 0 R /XYZ 70.866 471.919 null ] >> +endobj +1568 0 obj +<< /D [ 137 0 R /XYZ 70.866 460.96 null ] >> +endobj +1569 0 obj +<< /D [ 136 0 R /XYZ 70.866 745.891 null ] >> +endobj +1570 0 obj +<< /D [ 137 0 R /XYZ 70.866 450.001 null ] >> +endobj +1571 0 obj +<< /D [ 137 0 R /XYZ 70.866 439.042 null ] >> +endobj +1572 0 obj +<< /D [ 137 0 R /XYZ 70.866 428.083 null ] >> +endobj +1573 0 obj +<< /D [ 137 0 R /XYZ 70.866 406.165 null ] >> +endobj +1574 0 obj +<< /D [ 137 0 R /XYZ 70.866 395.207 null ] >> +endobj +1575 0 obj +<< /D [ 137 0 R /XYZ 70.866 384.248 null ] >> +endobj +1576 0 obj +<< /D [ 137 0 R /XYZ 70.866 373.289 null ] >> +endobj +1577 0 obj +<< /D [ 137 0 R /XYZ 70.866 362.33 null ] >> +endobj +1578 0 obj +<< /D [ 137 0 R /XYZ 70.866 351.371 null ] >> +endobj +1579 0 obj +<< /D [ 137 0 R /XYZ 70.866 340.412 null ] >> +endobj +1580 0 obj +<< /D [ 136 0 R /XYZ 70.866 702.056 null ] >> +endobj +1581 0 obj +<< /D [ 137 0 R /XYZ 70.866 329.453 null ] >> +endobj +1582 0 obj +<< /D [ 137 0 R /XYZ 70.866 307.535 null ] >> +endobj +1583 0 obj +<< /D [ 137 0 R /XYZ 70.866 296.576 null ] >> +endobj +1584 0 obj +<< /D [ 137 0 R /XYZ 70.866 285.618 null ] >> +endobj +1585 0 obj +<< /D [ 137 0 R /XYZ 70.866 274.659 null ] >> +endobj +1586 0 obj +<< /D [ 137 0 R /XYZ 70.866 263.7 null ] >> +endobj +1587 0 obj +<< /D [ 137 0 R /XYZ 70.866 252.741 null ] >> +endobj +1588 0 obj +<< /D [ 137 0 R /XYZ 70.866 241.782 null ] >> +endobj +1589 0 obj +<< /D [ 137 0 R /XYZ 70.866 219.864 null ] >> +endobj +1590 0 obj +<< /D [ 137 0 R /XYZ 70.866 197.946 null ] >> +endobj +1591 0 obj +<< /D [ 136 0 R /XYZ 70.866 691.097 null ] >> +endobj +1592 0 obj +<< /D [ 137 0 R /XYZ 70.866 186.987 null ] >> +endobj +1593 0 obj +<< /D [ 137 0 R /XYZ 70.866 176.028 null ] >> +endobj +1594 0 obj +<< /D [ 137 0 R /XYZ 70.866 165.07 null ] >> +endobj +1595 0 obj +<< /D [ 137 0 R /XYZ 70.866 154.111 null ] >> +endobj +1596 0 obj +<< /D [ 137 0 R /XYZ 70.866 143.152 null ] >> +endobj +1597 0 obj +<< /D [ 137 0 R /XYZ 70.866 132.193 null ] >> +endobj +1598 0 obj +<< /D [ 137 0 R /XYZ 70.866 121.234 null ] >> +endobj +1599 0 obj +<< /D [ 137 0 R /XYZ 70.866 110.275 null ] >> +endobj +1600 0 obj +<< /D [ 137 0 R /XYZ 70.866 99.316 null ] >> +endobj +1601 0 obj +<< /D [ 138 0 R /XYZ 70.866 756.85 null ] >> +endobj +1602 0 obj +<< /D [ 136 0 R /XYZ 70.866 636.302 null ] >> +endobj +1603 0 obj +<< /D [ 138 0 R /XYZ 70.866 745.891 null ] >> +endobj +1604 0 obj +<< /D [ 138 0 R /XYZ 70.866 734.933 null ] >> +endobj +1605 0 obj +<< /D [ 138 0 R /XYZ 70.866 723.974 null ] >> +endobj +1606 0 obj +<< /D [ 138 0 R /XYZ 70.866 713.015 null ] >> +endobj +1607 0 obj +<< /D [ 138 0 R /XYZ 70.866 702.056 null ] >> +endobj +1608 0 obj +<< /D [ 138 0 R /XYZ 70.866 691.097 null ] >> +endobj +1609 0 obj +<< /D [ 138 0 R /XYZ 70.866 680.138 null ] >> +endobj +1610 0 obj +<< /D [ 138 0 R /XYZ 70.866 669.179 null ] >> +endobj +1611 0 obj +<< /D [ 138 0 R /XYZ 70.866 658.22 null ] >> +endobj +1612 0 obj +<< /D [ 138 0 R /XYZ 70.866 647.261 null ] >> +endobj +1613 0 obj +<< /D [ 139 0 R /XYZ 70.866 479.889 null ] >> +endobj +1614 0 obj +<< /D [ 139 0 R /XYZ 70.866 370.3 null ] >> +endobj +1615 0 obj +<< /D [ 141 0 R /XYZ 70.866 460.96 null ] >> +endobj +1616 0 obj +<< /D [ 141 0 R /XYZ 70.866 450.001 null ] >> +endobj +1617 0 obj +<< /D [ 141 0 R /XYZ 70.866 439.042 null ] >> +endobj +1618 0 obj +<< /D [ 141 0 R /XYZ 70.866 428.083 null ] >> +endobj +1619 0 obj +<< /D [ 141 0 R /XYZ 70.866 417.124 null ] >> +endobj +1620 0 obj +<< /D [ 141 0 R /XYZ 70.866 406.165 null ] >> +endobj +1621 0 obj +<< /D [ 141 0 R /XYZ 70.866 395.207 null ] >> +endobj +1622 0 obj +<< /D [ 141 0 R /XYZ 70.866 384.248 null ] >> +endobj +1623 0 obj +<< /D [ 141 0 R /XYZ 70.866 373.289 null ] >> +endobj +1624 0 obj +<< /D [ 141 0 R /XYZ 70.866 362.33 null ] >> +endobj +1625 0 obj +<< /D [ 139 0 R /XYZ 70.866 359.341 null ] >> +endobj +1626 0 obj +<< /D [ 141 0 R /XYZ 70.866 351.371 null ] >> +endobj +1627 0 obj +<< /D [ 141 0 R /XYZ 70.866 340.412 null ] >> +endobj +1628 0 obj +<< /D [ 141 0 R /XYZ 70.866 329.453 null ] >> +endobj +1629 0 obj +<< /D [ 141 0 R /XYZ 70.866 318.494 null ] >> +endobj +1630 0 obj +<< /D [ 141 0 R /XYZ 70.866 307.535 null ] >> +endobj +1631 0 obj +<< /D [ 141 0 R /XYZ 70.866 296.576 null ] >> +endobj +1632 0 obj +<< /D [ 141 0 R /XYZ 70.866 285.618 null ] >> +endobj +1633 0 obj +<< /D [ 141 0 R /XYZ 70.866 274.659 null ] >> +endobj +1634 0 obj +<< /D [ 141 0 R /XYZ 70.866 252.741 null ] >> +endobj +1635 0 obj +<< /D [ 141 0 R /XYZ 70.866 219.864 null ] >> +endobj +1636 0 obj +<< /D [ 139 0 R /XYZ 70.866 348.382 null ] >> +endobj +1637 0 obj +<< /D [ 141 0 R /XYZ 70.866 186.987 null ] >> +endobj +1638 0 obj +<< /D [ 141 0 R /XYZ 70.866 176.028 null ] >> +endobj +1639 0 obj +<< /D [ 139 0 R /XYZ 70.866 337.423 null ] >> +endobj +1640 0 obj +<< /D [ 139 0 R /XYZ 70.866 326.464 null ] >> +endobj +1641 0 obj +<< /D [ 139 0 R /XYZ 70.866 315.505 null ] >> +endobj +1642 0 obj +<< /D [ 139 0 R /XYZ 70.866 304.547 null ] >> +endobj +1643 0 obj +<< /D [ 139 0 R /XYZ 70.866 293.588 null ] >> +endobj +1644 0 obj +<< /D [ 139 0 R /XYZ 70.866 282.629 null ] >> +endobj +1645 0 obj +<< /D [ 139 0 R /XYZ 70.866 271.67 null ] >> +endobj +1646 0 obj +<< /D [ 139 0 R /XYZ 70.866 468.93 null ] >> +endobj +1647 0 obj +<< /D [ 139 0 R /XYZ 70.866 260.711 null ] >> +endobj +1648 0 obj +<< /D [ 139 0 R /XYZ 70.866 249.752 null ] >> +endobj +1649 0 obj +<< /D [ 139 0 R /XYZ 70.866 238.793 null ] >> +endobj +1650 0 obj +<< /D [ 139 0 R /XYZ 70.866 227.834 null ] >> +endobj +1651 0 obj +<< /D [ 139 0 R /XYZ 70.866 216.875 null ] >> +endobj +1652 0 obj +<< /D [ 139 0 R /XYZ 70.866 205.916 null ] >> +endobj +1653 0 obj +<< /D [ 139 0 R /XYZ 70.866 194.957 null ] >> +endobj +1654 0 obj +<< /D [ 139 0 R /XYZ 70.866 183.999 null ] >> +endobj +1655 0 obj +<< /D [ 139 0 R /XYZ 70.866 173.04 null ] >> +endobj +1656 0 obj +<< /D [ 139 0 R /XYZ 70.866 162.081 null ] >> +endobj +1657 0 obj +<< /D [ 139 0 R /XYZ 70.866 447.012 null ] >> +endobj +1658 0 obj +<< /D [ 139 0 R /XYZ 70.866 151.122 null ] >> +endobj +1659 0 obj +<< /D [ 139 0 R /XYZ 70.866 140.163 null ] >> +endobj +1660 0 obj +<< /D [ 139 0 R /XYZ 70.866 129.204 null ] >> +endobj +1661 0 obj +<< /D [ 139 0 R /XYZ 70.866 118.245 null ] >> +endobj +1662 0 obj +<< /D [ 139 0 R /XYZ 70.866 107.286 null ] >> +endobj +1663 0 obj +<< /D [ 139 0 R /XYZ 70.866 96.327 null ] >> +endobj +1664 0 obj +<< /D [ 140 0 R /XYZ 70.866 745.891 null ] >> +endobj +1665 0 obj +<< /D [ 140 0 R /XYZ 70.866 734.933 null ] >> +endobj +1666 0 obj +<< /D [ 140 0 R /XYZ 70.866 691.097 null ] >> +endobj +1667 0 obj +<< /D [ 140 0 R /XYZ 70.866 680.138 null ] >> +endobj +1668 0 obj +<< /D [ 139 0 R /XYZ 70.866 436.053 null ] >> +endobj +1669 0 obj +<< /D [ 140 0 R /XYZ 70.866 658.22 null ] >> +endobj +1670 0 obj +<< /D [ 140 0 R /XYZ 70.866 647.261 null ] >> +endobj +1671 0 obj +<< /D [ 140 0 R /XYZ 70.866 614.385 null ] >> +endobj +1672 0 obj +<< /D [ 140 0 R /XYZ 70.866 603.426 null ] >> +endobj +1673 0 obj +<< /D [ 140 0 R /XYZ 70.866 559.59 null ] >> +endobj +1674 0 obj +<< /D [ 140 0 R /XYZ 70.866 548.631 null ] >> +endobj +1675 0 obj +<< /D [ 140 0 R /XYZ 70.866 526.713 null ] >> +endobj +1676 0 obj +<< /D [ 140 0 R /XYZ 70.866 515.755 null ] >> +endobj +1677 0 obj +<< /D [ 140 0 R /XYZ 70.866 493.837 null ] >> +endobj +1678 0 obj +<< /D [ 140 0 R /XYZ 70.866 482.878 null ] >> +endobj +1679 0 obj +<< /D [ 139 0 R /XYZ 70.866 425.094 null ] >> +endobj +1680 0 obj +<< /D [ 140 0 R /XYZ 70.866 471.919 null ] >> +endobj +1681 0 obj +<< /D [ 140 0 R /XYZ 70.866 460.96 null ] >> +endobj +1682 0 obj +<< /D [ 140 0 R /XYZ 70.866 450.001 null ] >> +endobj +1683 0 obj +<< /D [ 140 0 R /XYZ 70.866 439.042 null ] >> +endobj +1684 0 obj +<< /D [ 140 0 R /XYZ 70.866 428.083 null ] >> +endobj +1685 0 obj +<< /D [ 140 0 R /XYZ 70.866 417.124 null ] >> +endobj +1686 0 obj +<< /D [ 140 0 R /XYZ 70.866 406.165 null ] >> +endobj +1687 0 obj +<< /D [ 140 0 R /XYZ 70.866 395.207 null ] >> +endobj +1688 0 obj +<< /D [ 140 0 R /XYZ 70.866 384.248 null ] >> +endobj +1689 0 obj +<< /D [ 140 0 R /XYZ 70.866 373.289 null ] >> +endobj +1690 0 obj +<< /D [ 139 0 R /XYZ 70.866 414.136 null ] >> +endobj +1691 0 obj +<< /D [ 140 0 R /XYZ 70.866 362.33 null ] >> +endobj +1692 0 obj +<< /D [ 140 0 R /XYZ 70.866 351.371 null ] >> +endobj +1693 0 obj +<< /D [ 140 0 R /XYZ 70.866 340.412 null ] >> +endobj +1694 0 obj +<< /D [ 140 0 R /XYZ 70.866 329.453 null ] >> +endobj +1695 0 obj +<< /D [ 140 0 R /XYZ 70.866 318.494 null ] >> +endobj +1696 0 obj +<< /D [ 140 0 R /XYZ 70.866 307.535 null ] >> +endobj +1697 0 obj +<< /D [ 140 0 R /XYZ 70.866 296.576 null ] >> +endobj +1698 0 obj +<< /D [ 140 0 R /XYZ 70.866 274.659 null ] >> +endobj +1699 0 obj +<< /D [ 140 0 R /XYZ 70.866 263.7 null ] >> +endobj +1700 0 obj +<< /D [ 140 0 R /XYZ 70.866 252.741 null ] >> +endobj +1701 0 obj +<< /D [ 139 0 R /XYZ 70.866 403.177 null ] >> +endobj +1702 0 obj +<< /D [ 140 0 R /XYZ 70.866 241.782 null ] >> +endobj +1703 0 obj +<< /D [ 140 0 R /XYZ 70.866 230.823 null ] >> +endobj +1704 0 obj +<< /D [ 140 0 R /XYZ 70.866 219.864 null ] >> +endobj +1705 0 obj +<< /D [ 140 0 R /XYZ 70.866 208.905 null ] >> +endobj +1706 0 obj +<< /D [ 140 0 R /XYZ 70.866 197.946 null ] >> +endobj +1707 0 obj +<< /D [ 140 0 R /XYZ 70.866 186.987 null ] >> +endobj +1708 0 obj +<< /D [ 140 0 R /XYZ 70.866 176.028 null ] >> +endobj +1709 0 obj +<< /D [ 140 0 R /XYZ 70.866 165.07 null ] >> +endobj +1710 0 obj +<< /D [ 140 0 R /XYZ 70.866 154.111 null ] >> +endobj +1711 0 obj +<< /D [ 140 0 R /XYZ 70.866 143.152 null ] >> +endobj +1712 0 obj +<< /D [ 139 0 R /XYZ 70.866 392.218 null ] >> +endobj +1713 0 obj +<< /D [ 140 0 R /XYZ 70.866 132.193 null ] >> +endobj +1714 0 obj +<< /D [ 140 0 R /XYZ 70.866 121.234 null ] >> +endobj +1715 0 obj +<< /D [ 140 0 R /XYZ 70.866 99.316 null ] >> +endobj +1716 0 obj +<< /D [ 141 0 R /XYZ 70.866 756.85 null ] >> +endobj +1717 0 obj +<< /D [ 141 0 R /XYZ 70.866 723.974 null ] >> +endobj +1718 0 obj +<< /D [ 141 0 R /XYZ 70.866 713.015 null ] >> +endobj +1719 0 obj +<< /D [ 141 0 R /XYZ 70.866 691.097 null ] >> +endobj +1720 0 obj +<< /D [ 141 0 R /XYZ 70.866 680.138 null ] >> +endobj +1721 0 obj +<< /D [ 141 0 R /XYZ 70.866 669.179 null ] >> +endobj +1722 0 obj +<< /D [ 141 0 R /XYZ 70.866 658.22 null ] >> +endobj +1723 0 obj +<< /D [ 139 0 R /XYZ 70.866 381.259 null ] >> +endobj +1724 0 obj +<< /D [ 141 0 R /XYZ 70.866 647.261 null ] >> +endobj +1725 0 obj +<< /D [ 141 0 R /XYZ 70.866 636.302 null ] >> +endobj +1726 0 obj +<< /D [ 141 0 R /XYZ 70.866 625.344 null ] >> +endobj +1727 0 obj +<< /D [ 141 0 R /XYZ 70.866 592.467 null ] >> +endobj +1728 0 obj +<< /D [ 141 0 R /XYZ 70.866 581.508 null ] >> +endobj +1729 0 obj +<< /D [ 141 0 R /XYZ 70.866 570.549 null ] >> +endobj +1730 0 obj +<< /D [ 141 0 R /XYZ 70.866 548.631 null ] >> +endobj +1731 0 obj +<< /D [ 141 0 R /XYZ 70.866 526.713 null ] >> +endobj +1732 0 obj +<< /D [ 141 0 R /XYZ 70.866 504.796 null ] >> +endobj +1733 0 obj +<< /D [ 141 0 R /XYZ 70.866 471.919 null ] >> +endobj +1734 0 obj +<< /D [ 141 0 R /XYZ 70.866 118.245 null ] >> +endobj +1735 0 obj +<< /D [ 142 0 R /XYZ 70.866 647.261 null ] >> +endobj +1736 0 obj +<< /D [ 142 0 R /XYZ 70.866 614.385 null ] >> +endobj +1737 0 obj +<< /D [ 142 0 R /XYZ 70.866 603.426 null ] >> +endobj +1738 0 obj +<< /D [ 142 0 R /XYZ 70.866 570.549 null ] >> +endobj +1739 0 obj +<< /D [ 142 0 R /XYZ 70.866 559.59 null ] >> +endobj +1740 0 obj +<< /D [ 142 0 R /XYZ 70.866 515.755 null ] >> +endobj +1741 0 obj +<< /D [ 142 0 R /XYZ 70.866 504.796 null ] >> +endobj +1742 0 obj +<< /D [ 142 0 R /XYZ 70.866 471.919 null ] >> +endobj +1743 0 obj +<< /D [ 142 0 R /XYZ 70.866 460.96 null ] >> +endobj +1744 0 obj +<< /D [ 142 0 R /XYZ 70.866 428.083 null ] >> +endobj +1745 0 obj +<< /D [ 141 0 R /XYZ 70.866 107.286 null ] >> +endobj +1746 0 obj +<< /D [ 142 0 R /XYZ 70.866 417.124 null ] >> +endobj +1747 0 obj +<< /D [ 142 0 R /XYZ 70.866 395.207 null ] >> +endobj +1748 0 obj +<< /D [ 142 0 R /XYZ 70.866 384.248 null ] >> +endobj +1749 0 obj +<< /D [ 142 0 R /XYZ 70.866 373.289 null ] >> +endobj +1750 0 obj +<< /D [ 142 0 R /XYZ 70.866 362.33 null ] >> +endobj +1751 0 obj +<< /D [ 142 0 R /XYZ 70.866 351.371 null ] >> +endobj +1752 0 obj +<< /D [ 142 0 R /XYZ 70.866 340.412 null ] >> +endobj +1753 0 obj +<< /D [ 142 0 R /XYZ 70.866 329.453 null ] >> +endobj +1754 0 obj +<< /D [ 142 0 R /XYZ 70.866 318.494 null ] >> +endobj +1755 0 obj +<< /D [ 142 0 R /XYZ 70.866 307.535 null ] >> +endobj +1756 0 obj +<< /D [ 141 0 R /XYZ 70.866 96.327 null ] >> +endobj +1757 0 obj +<< /D [ 142 0 R /XYZ 70.866 296.576 null ] >> +endobj +1758 0 obj +<< /D [ 142 0 R /XYZ 70.866 285.618 null ] >> +endobj +1759 0 obj +<< /D [ 142 0 R /XYZ 70.866 756.85 null ] >> +endobj +1760 0 obj +<< /D [ 142 0 R /XYZ 70.866 745.891 null ] >> +endobj +1761 0 obj +<< /D [ 142 0 R /XYZ 70.866 734.933 null ] >> +endobj +1762 0 obj +<< /D [ 142 0 R /XYZ 70.866 702.056 null ] >> +endobj +1763 0 obj +<< /D [ 142 0 R /XYZ 70.866 691.097 null ] >> +endobj +1764 0 obj +<< /D [ 142 0 R /XYZ 70.866 658.22 null ] >> +endobj +1765 0 obj +<< /D [ 152 0 R /XYZ 70.866 285.31 null ] >> +endobj +1766 0 obj +<< /D [ 152 0 R /XYZ 70.866 99.009 null ] >> +endobj +1767 0 obj +<< /D [ 153 0 R /XYZ 70.866 756.85 null ] >> +endobj +1768 0 obj +<< /D [ 153 0 R /XYZ 70.866 745.891 null ] >> +endobj +1769 0 obj +<< /D [ 153 0 R /XYZ 70.866 647.261 null ] >> +endobj +1770 0 obj +<< /D [ 153 0 R /XYZ 70.866 625.344 null ] >> +endobj +1771 0 obj +<< /D [ 153 0 R /XYZ 70.866 592.467 null ] >> +endobj +1772 0 obj +<< /D [ 153 0 R /XYZ 70.866 548.631 null ] >> +endobj +1773 0 obj +<< /D [ 153 0 R /XYZ 70.866 471.919 null ] >> +endobj +1774 0 obj +<< /D [ 153 0 R /XYZ 70.866 406.165 null ] >> +endobj +1775 0 obj +<< /D [ 153 0 R /XYZ 70.866 340.412 null ] >> +endobj +1776 0 obj +<< /D [ 152 0 R /XYZ 70.866 274.351 null ] >> +endobj +1777 0 obj +<< /D [ 153 0 R /XYZ 70.866 296.576 null ] >> +endobj +1778 0 obj +<< /D [ 153 0 R /XYZ 70.866 263.7 null ] >> +endobj +1779 0 obj +<< /D [ 153 0 R /XYZ 70.866 219.864 null ] >> +endobj +1780 0 obj +<< /D [ 153 0 R /XYZ 70.866 132.193 null ] >> +endobj +1781 0 obj +<< /D [ 153 0 R /XYZ 70.866 121.234 null ] >> +endobj +1782 0 obj +<< /D [ 153 0 R /XYZ 70.866 110.275 null ] >> +endobj +1783 0 obj +<< /D [ 153 0 R /XYZ 70.866 99.316 null ] >> +endobj +1784 0 obj +<< /D [ 154 0 R /XYZ 70.866 745.891 null ] >> +endobj +1785 0 obj +<< /D [ 154 0 R /XYZ 70.866 734.933 null ] >> +endobj +1786 0 obj +<< /D [ 154 0 R /XYZ 70.866 702.056 null ] >> +endobj +1787 0 obj +<< /D [ 152 0 R /XYZ 70.866 241.475 null ] >> +endobj +1788 0 obj +<< /D [ 154 0 R /XYZ 70.866 691.097 null ] >> +endobj +1789 0 obj +<< /D [ 154 0 R /XYZ 70.866 680.138 null ] >> +endobj +1790 0 obj +<< /D [ 154 0 R /XYZ 70.866 669.179 null ] >> +endobj +1791 0 obj +<< /D [ 154 0 R /XYZ 70.866 658.22 null ] >> +endobj +1792 0 obj +<< /D [ 154 0 R /XYZ 70.866 647.261 null ] >> +endobj +1793 0 obj +<< /D [ 154 0 R /XYZ 70.866 636.302 null ] >> +endobj +1794 0 obj +<< /D [ 154 0 R /XYZ 70.866 625.344 null ] >> +endobj +1795 0 obj +<< /D [ 154 0 R /XYZ 70.866 614.385 null ] >> +endobj +1796 0 obj +<< /D [ 152 0 R /XYZ 70.866 230.516 null ] >> +endobj +1797 0 obj +<< /D [ 152 0 R /XYZ 70.866 219.557 null ] >> +endobj +1798 0 obj +<< /D [ 152 0 R /XYZ 70.866 208.598 null ] >> +endobj +1799 0 obj +<< /D [ 152 0 R /XYZ 70.866 186.68 null ] >> +endobj +1800 0 obj +<< /D [ 152 0 R /XYZ 70.866 164.762 null ] >> +endobj +1801 0 obj +<< /D [ 152 0 R /XYZ 70.866 109.968 null ] >> +endobj +1802 0 obj +<< /D [ 9 0 R /XYZ 69.866 817.626 null ] >> +endobj +1803 0 obj +<< /D [ 118 0 R /XYZ 69.866 817.626 null ] >> +endobj +1804 0 obj +<< /D [ 119 0 R /XYZ 69.866 817.626 null ] >> +endobj +1805 0 obj +<< /D [ 120 0 R /XYZ 69.866 817.626 null ] >> +endobj +1806 0 obj +<< /D [ 121 0 R /XYZ 69.866 817.626 null ] >> +endobj +1807 0 obj +<< /D [ 122 0 R /XYZ 69.866 817.626 null ] >> +endobj +1808 0 obj +<< /D [ 123 0 R /XYZ 69.866 817.626 null ] >> +endobj +1809 0 obj +<< /D [ 124 0 R /XYZ 69.866 817.626 null ] >> +endobj +1810 0 obj +<< /D [ 125 0 R /XYZ 69.866 817.626 null ] >> +endobj +1811 0 obj +<< /D [ 126 0 R /XYZ 69.866 817.626 null ] >> +endobj +1812 0 obj +<< /D [ 127 0 R /XYZ 69.866 817.626 null ] >> +endobj +1813 0 obj +<< /D [ 94 0 R /XYZ 69.866 817.626 null ] >> +endobj +1814 0 obj +<< /D [ 128 0 R /XYZ 69.866 817.626 null ] >> +endobj +1815 0 obj +<< /D [ 129 0 R /XYZ 69.866 817.626 null ] >> +endobj +1816 0 obj +<< /D [ 130 0 R /XYZ 69.866 817.626 null ] >> +endobj +1817 0 obj +<< /D [ 131 0 R /XYZ 69.866 817.626 null ] >> +endobj +1818 0 obj +<< /D [ 132 0 R /XYZ 69.866 817.626 null ] >> +endobj +1819 0 obj +<< /D [ 133 0 R /XYZ 69.866 817.626 null ] >> +endobj +1820 0 obj +<< /D [ 134 0 R /XYZ 69.866 817.626 null ] >> +endobj +1821 0 obj +<< /D [ 135 0 R /XYZ 69.866 817.626 null ] >> +endobj +1822 0 obj +<< /D [ 136 0 R /XYZ 69.866 817.626 null ] >> +endobj +1823 0 obj +<< /D [ 137 0 R /XYZ 69.866 817.626 null ] >> +endobj +1824 0 obj +<< /D [ 95 0 R /XYZ 69.866 817.626 null ] >> +endobj +1825 0 obj +<< /D [ 138 0 R /XYZ 69.866 817.626 null ] >> +endobj +1826 0 obj +<< /D [ 139 0 R /XYZ 69.866 817.626 null ] >> +endobj +1827 0 obj +<< /D [ 140 0 R /XYZ 69.866 817.626 null ] >> +endobj +1828 0 obj +<< /D [ 141 0 R /XYZ 69.866 817.626 null ] >> +endobj +1829 0 obj +<< /D [ 142 0 R /XYZ 69.866 817.626 null ] >> +endobj +1830 0 obj +<< /D [ 143 0 R /XYZ 69.866 817.626 null ] >> +endobj +1831 0 obj +<< /D [ 144 0 R /XYZ 69.866 817.626 null ] >> +endobj +1832 0 obj +<< /D [ 145 0 R /XYZ 69.866 817.626 null ] >> +endobj +1833 0 obj +<< /D [ 146 0 R /XYZ 69.866 817.626 null ] >> +endobj +1834 0 obj +<< /D [ 147 0 R /XYZ 69.866 817.626 null ] >> +endobj +1835 0 obj +<< /D [ 96 0 R /XYZ 69.866 817.626 null ] >> +endobj +1836 0 obj +<< /D [ 148 0 R /XYZ 69.866 817.626 null ] >> +endobj +1837 0 obj +<< /D [ 149 0 R /XYZ 69.866 817.626 null ] >> +endobj +1838 0 obj +<< /D [ 150 0 R /XYZ 69.866 817.626 null ] >> +endobj +1839 0 obj +<< /D [ 151 0 R /XYZ 69.866 817.626 null ] >> +endobj +1840 0 obj +<< /D [ 152 0 R /XYZ 69.866 817.626 null ] >> +endobj +1841 0 obj +<< /D [ 153 0 R /XYZ 69.866 817.626 null ] >> +endobj +1842 0 obj +<< /D [ 154 0 R /XYZ 69.866 817.626 null ] >> +endobj +1843 0 obj +<< /D [ 155 0 R /XYZ 69.866 817.626 null ] >> +endobj +1844 0 obj +<< /D [ 156 0 R /XYZ 69.866 817.626 null ] >> +endobj +1845 0 obj +<< /D [ 157 0 R /XYZ 69.866 817.626 null ] >> +endobj +1846 0 obj +<< /D [ 97 0 R /XYZ 69.866 817.626 null ] >> +endobj +1847 0 obj +<< /D [ 158 0 R /XYZ 69.866 817.626 null ] >> +endobj +1848 0 obj +<< /D [ 159 0 R /XYZ 69.866 817.626 null ] >> +endobj +1849 0 obj +<< /D [ 160 0 R /XYZ 69.866 817.626 null ] >> +endobj +1850 0 obj +<< /D [ 161 0 R /XYZ 69.866 817.626 null ] >> +endobj +1851 0 obj +<< /D [ 162 0 R /XYZ 69.866 817.626 null ] >> +endobj +1852 0 obj +<< /D [ 163 0 R /XYZ 69.866 817.626 null ] >> +endobj +1853 0 obj +<< /D [ 164 0 R /XYZ 69.866 817.626 null ] >> +endobj +1854 0 obj +<< /D [ 165 0 R /XYZ 69.866 817.626 null ] >> +endobj +1855 0 obj +<< /D [ 166 0 R /XYZ 69.866 817.626 null ] >> +endobj +1856 0 obj +<< /D [ 167 0 R /XYZ 69.866 817.626 null ] >> +endobj +1857 0 obj +<< /D [ 98 0 R /XYZ 69.866 817.626 null ] >> +endobj +1858 0 obj +<< /D [ 168 0 R /XYZ 69.866 817.626 null ] >> +endobj +1859 0 obj +<< /D [ 169 0 R /XYZ 69.866 817.626 null ] >> +endobj +1860 0 obj +<< /D [ 170 0 R /XYZ 69.866 817.626 null ] >> +endobj +1861 0 obj +<< /D [ 171 0 R /XYZ 69.866 817.626 null ] >> +endobj +1862 0 obj +<< /D [ 172 0 R /XYZ 69.866 817.626 null ] >> +endobj +1863 0 obj +<< /D [ 173 0 R /XYZ 69.866 817.626 null ] >> +endobj +1864 0 obj +<< /D [ 174 0 R /XYZ 69.866 817.626 null ] >> +endobj +1865 0 obj +<< /D [ 175 0 R /XYZ 69.866 817.626 null ] >> +endobj +1866 0 obj +<< /D [ 176 0 R /XYZ 69.866 817.626 null ] >> +endobj +1867 0 obj +<< /D [ 177 0 R /XYZ 69.866 817.626 null ] >> +endobj +1868 0 obj +<< /D [ 115 0 R /XYZ 69.866 817.626 null ] >> +endobj +1869 0 obj +<< /D [ 178 0 R /XYZ 69.866 817.626 null ] >> +endobj +1870 0 obj +<< /D [ 179 0 R /XYZ 69.866 817.626 null ] >> +endobj +1871 0 obj +<< /D [ 180 0 R /XYZ 69.866 817.626 null ] >> +endobj +1872 0 obj +<< /D [ 181 0 R /XYZ 69.866 817.626 null ] >> +endobj +1873 0 obj +<< /D [ 182 0 R /XYZ 69.866 817.626 null ] >> +endobj +1874 0 obj +<< /D [ 183 0 R /XYZ 69.866 817.626 null ] >> +endobj +1875 0 obj +<< /D [ 184 0 R /XYZ 69.866 817.626 null ] >> +endobj +1876 0 obj +<< /D [ 185 0 R /XYZ 69.866 817.626 null ] >> +endobj +1877 0 obj +<< /D [ 186 0 R /XYZ 69.866 817.626 null ] >> +endobj +1878 0 obj +<< /D [ 187 0 R /XYZ 69.866 817.626 null ] >> +endobj +1879 0 obj +<< /D [ 116 0 R /XYZ 69.866 817.626 null ] >> +endobj +1880 0 obj +<< /D [ 188 0 R /XYZ 69.866 817.626 null ] >> +endobj +1881 0 obj +<< /D [ 189 0 R /XYZ 69.866 817.626 null ] >> +endobj +1882 0 obj +<< /D [ 190 0 R /XYZ 69.866 817.626 null ] >> +endobj +1883 0 obj +<< /D [ 191 0 R /XYZ 69.866 817.626 null ] >> +endobj +1884 0 obj +<< /D [ 192 0 R /XYZ 69.866 817.626 null ] >> +endobj +1885 0 obj +<< /D [ 193 0 R /XYZ 69.866 817.626 null ] >> +endobj +1886 0 obj +<< /D [ 194 0 R /XYZ 69.866 817.626 null ] >> +endobj +1887 0 obj +<< /D [ 117 0 R /XYZ 69.866 817.626 null ] >> +endobj +1888 0 obj +<< /D [ 9 0 R /XYZ 70.866 353.366 null ] >> +endobj +1889 0 obj +<< /D [ 94 0 R /XYZ 70.866 262.228 null ] >> +endobj +1890 0 obj +<< /D [ 97 0 R /XYZ 70.866 105.441 null ] >> +endobj +1891 0 obj +<< /D [ 116 0 R /XYZ 70.866 324.289 null ] >> +endobj +1892 0 obj +<< /D [ 117 0 R /XYZ 70.866 112.566 null ] >> +endobj +1893 0 obj +<< /D [ 118 0 R /XYZ 70.866 548.145 null ] >> +endobj +1894 0 obj +<< /D [ 119 0 R /XYZ 70.866 255.044 null ] >> +endobj +1895 0 obj +<< /D [ 9 0 R /XYZ 70.866 756.85 null ] >> +endobj +1896 0 obj +<< /D [ 96 0 R /XYZ 70.866 756.85 null ] >> +endobj +1897 0 obj +<< /D [ 96 0 R /XYZ 296.507 608.124 null ] >> +endobj +1898 0 obj +<< /D [ 163 0 R /XYZ 70.866 720.418 null ] >> +endobj +1899 0 obj +<< /D [ 163 0 R /XYZ 70.866 425.416 null ] >> +endobj +1900 0 obj +<< /D [ 147 0 R /XYZ 70.866 756.85 null ] >> +endobj +1901 0 obj +<< /D [ 147 0 R /XYZ 299.001 594.885 null ] >> +endobj +1902 0 obj +<< /D [ 94 0 R /XYZ 70.866 176.163 null ] >> +endobj +1903 0 obj +<< /D [ 95 0 R /XYZ 70.866 246.132 null ] >> +endobj +1904 0 obj +<< /D [ 96 0 R /XYZ 70.866 252.768 null ] >> +endobj +1905 0 obj +<< /D [ 98 0 R /XYZ 70.866 227.663 null ] >> +endobj +1906 0 obj +<< /D [ 115 0 R /XYZ 70.866 287.849 null ] >> +endobj +1907 0 obj +<< /D [ 121 0 R /XYZ 70.866 711.022 null ] >> +endobj +1908 0 obj +<< /D [ 121 0 R /XYZ 70.866 275.448 null ] >> +endobj +1909 0 obj +<< /D [ 122 0 R /XYZ 70.866 261.819 null ] >> +endobj +1910 0 obj +<< /D [ 125 0 R /XYZ 70.866 462.437 null ] >> +endobj +1911 0 obj +<< /D [ 126 0 R /XYZ 70.866 547.946 null ] >> +endobj +1912 0 obj +<< /D [ 126 0 R /XYZ 70.866 147.318 null ] >> +endobj +1913 0 obj +<< /D [ 142 0 R /XYZ 70.866 262.006 null ] >> +endobj +1914 0 obj +<< /D [ 143 0 R /XYZ 70.866 285.22 null ] >> +endobj +1915 0 obj +<< /D [ 143 0 R /XYZ 70.866 149.075 null ] >> +endobj +1916 0 obj +<< /D [ 145 0 R /XYZ 70.866 321.074 null ] >> +endobj +1917 0 obj +<< /D [ 146 0 R /XYZ 70.866 363.198 null ] >> +endobj +1918 0 obj +<< /D [ 147 0 R /XYZ 70.866 485.694 null ] >> +endobj +1919 0 obj +<< /D [ 149 0 R /XYZ 70.866 666.071 null ] >> +endobj +1920 0 obj +<< /D [ 151 0 R /XYZ 70.866 98.477 null ] >> +endobj +1921 0 obj +<< /D [ 162 0 R /XYZ 70.866 243.106 null ] >> +endobj +1922 0 obj +<< /D [ 164 0 R /XYZ 70.866 143.597 null ] >> +endobj +1923 0 obj +<< /D [ 165 0 R /XYZ 70.866 382.993 null ] >> +endobj +1924 0 obj +<< /D [ 165 0 R /XYZ 70.866 232.718 null ] >> +endobj +1925 0 obj +<< /D [ 168 0 R /XYZ 70.866 586.999 null ] >> +endobj +1926 0 obj +<< /D [ 169 0 R /XYZ 70.866 287.936 null ] >> +endobj +1927 0 obj +<< /D [ 170 0 R /XYZ 70.866 294.101 null ] >> +endobj +1928 0 obj +<< /D [ 171 0 R /XYZ 70.866 431.184 null ] >> +endobj +1929 0 obj +<< /D [ 172 0 R /XYZ 70.866 483.867 null ] >> +endobj +1930 0 obj +<< /D [ 172 0 R /XYZ 70.866 244.756 null ] >> +endobj +1931 0 obj +<< /D [ 173 0 R /XYZ 70.866 535.644 null ] >> +endobj +1932 0 obj +<< /D [ 115 0 R /XYZ 70.866 252.199 null ] >> +endobj +1933 0 obj +<< /D [ 116 0 R /XYZ 70.866 654.745 null ] >> +endobj +1934 0 obj +<< /D [ 127 0 R /XYZ 70.866 602.985 null ] >> +endobj +1935 0 obj +<< /D [ 128 0 R /XYZ 70.866 378.581 null ] >> +endobj +1936 0 obj +<< /D [ 134 0 R /XYZ 70.866 389.428 null ] >> +endobj +1937 0 obj +<< /D [ 142 0 R /XYZ 70.866 226.221 null ] >> +endobj +1938 0 obj +<< /D [ 142 0 R /XYZ 70.866 116.824 null ] >> +endobj +1939 0 obj +<< /D [ 143 0 R /XYZ 70.866 681.139 null ] >> +endobj +1940 0 obj +<< /D [ 143 0 R /XYZ 70.866 419.542 null ] >> +endobj +1941 0 obj +<< /D [ 152 0 R /XYZ 70.866 443.002 null ] >> +endobj +1942 0 obj +<< /D [ 154 0 R /XYZ 70.866 277.25 null ] >> +endobj +1943 0 obj +<< /D [ 156 0 R /XYZ 70.866 508.469 null ] >> +endobj +1944 0 obj +<< /D [ 159 0 R /XYZ 70.866 109.724 null ] >> +endobj +1945 0 obj +<< /D [ 161 0 R /XYZ 70.866 255.443 null ] >> +endobj +1946 0 obj +<< /D [ 95 0 R /XYZ 70.866 406.311 null ] >> +endobj +1947 0 obj +<< /D [ 135 0 R /XYZ 70.866 571.111 null ] >> +endobj +1948 0 obj +<< /D [ 143 0 R /XYZ 70.866 573.712 null ] >> +endobj +1949 0 obj +<< /D [ 145 0 R /XYZ 70.866 763.625 null ] >> +endobj +1950 0 obj +<< /D [ 149 0 R /XYZ 70.866 625.953 null ] >> +endobj +1951 0 obj +<< /D [ 156 0 R /XYZ 70.866 763.625 null ] >> +endobj +1952 0 obj +<< /D [ 159 0 R /XYZ 70.866 763.625 null ] >> +endobj +1953 0 obj +<< /D [ 162 0 R /XYZ 70.866 686.28 null ] >> +endobj +1954 0 obj +<< /D [ 164 0 R /XYZ 70.866 763.625 null ] >> +endobj +1955 0 obj +<< /D [ 165 0 R /XYZ 70.866 763.625 null ] >> +endobj +1956 0 obj +<< /D [ 97 0 R /XYZ 70.866 763.625 null ] >> +endobj +1957 0 obj +<< /D [ 168 0 R /XYZ 70.866 545.723 null ] >> +endobj +1958 0 obj +<< /D [ 169 0 R /XYZ 70.866 714.16 null ] >> +endobj +1959 0 obj +<< /D [ 169 0 R /XYZ 70.866 248.223 null ] >> +endobj +1960 0 obj +<< /D [ 170 0 R /XYZ 70.866 763.625 null ] >> +endobj +1961 0 obj +<< /D [ 174 0 R /XYZ 70.866 415.125 null ] >> +endobj +1962 0 obj +<< /D [ 175 0 R /XYZ 70.866 592.701 null ] >> +endobj +1963 0 obj +<< /D [ 176 0 R /XYZ 70.866 692.726 null ] >> +endobj +1964 0 obj +<< /D [ 177 0 R /XYZ 70.866 580.746 null ] >> +endobj +1965 0 obj +<< /D [ 178 0 R /XYZ 70.866 668.815 null ] >> +endobj +1966 0 obj +<< /D [ 179 0 R /XYZ 70.866 603.859 null ] >> +endobj +1967 0 obj +<< /D [ 180 0 R /XYZ 70.866 666.026 null ] >> +endobj +1968 0 obj +<< /D [ 181 0 R /XYZ 70.866 696.711 null ] >> +endobj +1969 0 obj +<< /D [ 182 0 R /XYZ 70.866 675.59 null ] >> +endobj +1970 0 obj +<< /D [ 183 0 R /XYZ 70.866 651.267 null ] >> +endobj +1971 0 obj +<< /D [ 184 0 R /XYZ 70.866 746.995 null ] >> +endobj +1972 0 obj +<< /D [ 184 0 R /XYZ 70.866 328.485 null ] >> +endobj +1973 0 obj +<< /D [ 185 0 R /XYZ 70.866 679.974 null ] >> +endobj +1974 0 obj +<< /D [ 186 0 R /XYZ 70.866 743.328 null ] >> +endobj +1975 0 obj +<< /D [ 186 0 R /XYZ 70.866 248.033 null ] >> +endobj +1976 0 obj +<< /D [ 117 0 R /XYZ 70.866 763.625 null ] >> +endobj +1977 0 obj +<< /D [ 127 0 R /XYZ 70.866 763.625 null ] >> +endobj +1978 0 obj +<< /BaseFont /MEJKPD+LMMono10-Regular /Encoding 403 0 R /FirstChar 16 /FontDescriptor 2111 0 R /LastChar 122 /Subtype /Type1 /ToUnicode 405 0 R /Type /Font /Widths 2112 0 R >> +endobj +1979 0 obj +<< /BaseFont /PWFOWP+PazoMathBlackboardBold /FirstChar 68 /FontDescriptor 2113 0 R /LastChar 69 /Subtype /Type1 /ToUnicode 2114 0 R /Type /Font /Widths 2115 0 R >> +endobj +1980 0 obj +<< /BaseFont /THWSRE+XCharterMathMI /FirstChar 17 /FontDescriptor 2116 0 R /LastChar 159 /Subtype /Type1 /ToUnicode 2117 0 R /Type /Font /Widths 2118 0 R >> +endobj +1981 0 obj +<< /BaseFont /THVSRT+txsys /FirstChar 0 /FontDescriptor 2119 0 R /LastChar 188 /Subtype /Type1 /ToUnicode 2120 0 R /Type /Font /Widths 2121 0 R >> +endobj +1982 0 obj +<< /BaseFont /OGYQFN+txmiaX /FirstChar 61 /FontDescriptor 2122 0 R /LastChar 61 /Subtype /Type1 /ToUnicode 2123 0 R /Type /Font /Widths 2124 0 R >> +endobj +1983 0 obj +<< /BaseFont /DOJAYA+txexs /FirstChar 0 /FontDescriptor 2125 0 R /LastChar 213 /Subtype /Type1 /ToUnicode 2126 0 R /Type /Font /Widths 2127 0 R >> +endobj +1984 0 obj +<< /BBox [ 0 0 612.85317 453.3394 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/plot_aime_with_maj.pdf) /PTEX.InfoDict 2128 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /A1 << /CA 0 /Type /ExtGState /ca 1 >> /A2 << /CA 1 /Type /ExtGState /ca 1 >> /A3 << /CA .8 /Type /ExtGState /ca .8 >> >> /Font << /F1 2129 0 R >> /Pattern << >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << /M0 2130 0 R /M1 2131 0 R >> >> /Subtype /Form /Type /XObject /Length 2985 >> +stream +xZMGׯ#:'##fXh-`@hf2 h̢ˠmim3L"_ˬ'WzzqEQm|?;O] ggrųa={]<Ӯhkd`oFA\YÃ>3O=dlo_SHiVw&K?Κ-`c Ar{{C%k8|D{ }O,ly<*9/ &aԓ_6lW}Ew{/E!J-+[5!@%ZuAs֞7$,^f-݈۪Eܜ&gs:nr.8q@JZUq;ħa Mb01WYK7¶jp6 b]i;t.|ԤYK7jp%7d=z puhló5%矮(-|&j&Q9aS/0H8;l863o1pŀa\T8C))oAQp~TBʀ!E5zŷC13!\q6vANX-j( 0#.[ +]bM $#@0!~`GĆ }@b3r8GaT.G g7~bD!KN=3p ,VQ .kVxJ"P(U<#ܰ`\Hb88V;E_=9B#2R5 i4I8QZCqպepa,@B/~w"vF'wsU[? YV64$uۢ5ٺum=0c@e{&Ov*hNa.bi9d=`D.n8jɁuOGt*ZVϜ#4UmƢSw',r$v!%n'F˹a kKx83OyJCY8R"cs_iAyv1sn[P? "{MhU[EÔܺ]Ђ'>'=lXfmt#3[f{mYK+/pPJ͟ z[w%"VlgE!ur\ +)h#;Xj1 ;ơ ZIy[&ůe `I:¬aWx=6M3$Uݵ=75{k09JiK%ۛwRatlc[̒ipzb͍/oWLY^qr]o?_osWoܼ?^/#>lc`x-b;cahJKP\ֳJZ8*A:Zznp+B4J(ՃDyѠ:TD"AsXI]T G`tVmJˣ*HfQKԏ И W+S='^> /A2 << /CA 1 /Type /ExtGState /ca 1 >> /A3 << /CA .3 /Type /ExtGState /ca 1 >> >> /Font << /F1 2133 0 R >> /Pattern << >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << >> >> /Subtype /Form /Type /XObject /Length 104039 >> +stream +xM/K݅M>M 聏tƕ)l,k w3}ꖐ(JZr?22b??w__o~y뿍￾剿/v~ۣwۘ/wo~Y /6`?vh?#<~o?׿go'^vׯo?_}޻}FW(g~7_/~eX +4\߿]//<}~/v랳N>//~_/&r1Zm=W._.ٻok׬=dٿ:ߣ첵X_^7Z_lq?l}}v˶F6m[+/gmIJ={n_^7Zzx߁ʝln//gk]b>o>PCOF~$~x'v?/,FGzm<4Cs5rƌnjdxxg-&z st<9F,}| WXb֍w݆Wadep4.w{%rdž97x 3pn>S9ݱ]m< Vߧᝇ{ +iG8FJ3 [cSne+ Iԗ0eKΐ5|]$ay;0|b-/;gVXI 7&vsC/t>47Ha8{ +cR-& ys3QysW'jB9Gف{sy_`GKp(wHðZQil;\oo@8h?{cږ./ QT;<vvS՛)P:{-ԳC1w|`kNMȮk8syjVk8(vvaei' +x?sT g(͐4os^ۚ+F< ?~>ԓсށ0i~ɀc`c +3 +[?xƎ?oN5p&#D1o}{5H|-J'$`Ξ%+? ,gYQJTK&3p{ ]QBo&A +rOHa)ka0 mٽI)=tO}+C7)9wyH\egw>l MFa>zx Uy:AB8\ 8f׽B^>n Bm-X١7D46 _0aqvH;$S;d58G/y -cp+1P}RmaEšg-K(d6OAͻBżc^VpC:yb#w7$۶SCϴq*x3m6<54!rQ+k8vL +G)eǻiMA{ O7>X5L}v 3uXͶl2)A!R db+B327Q{aƅ5ⲅ$OdPN%lS +Knܔ]̤=2aL'TBSX{ND4nR!9ty55t⫽FMylt3붧W[ +r=@C,6T7x$`#$alkYğⴥjȿ7 #߀^?9$458mmysFR[^ ʬ3Z ڙaHٷpz:iA3y$лύ74&[)*7?"KAaϩQTr3RTW쑰{67Lk8'_8EfiPg6,OcT_ z8[;=GZ;= fyzS6 POmّrxI[pھYWB5Jal!mSn5BC= =¿}:ۛ& 'wsO;TBi-<3\p .#pxѕ Bpa>ai&OMyalhӖ29V #C]&Z{8&\ &EGa5idFW5|Ԥoyr 86oރ`b?I z(C$) {I^P1ndhUBގ:_+vq1MvlȖjmOA_m«QZyioDM9WU\ x[!cg <3+8ƌ0$h.'Ga/^ݪE +Ocz{P/ÈOŷ}w=}?V7 i Ep˸5rßlMa!e n?ޑ3&n;Z2Š)xҕufHx@#ynqC$xBwa%eH|xgXO+؁GDV|Skrb^T1D4;&#4YҰZs+qZDl/_[2'#ǵ瀏cdSXʚTX-=& ꀻKk:H0~=Od<:FML)QN& .b: ppԼ1HmtdǘFo*% |bMsȨY>Oy(-z+5lj# +/DzPx2!ނoѓnOno#v0tdvZ:jB`x _+Ls2s3ry7S=ٝF+0çL92~x?#h8R2Ocˤ1r Heb:=T#Wϴotl>\bd5;&_C +Y}9*']%dWz?!8q0e*יkɰyN r-VQrG8_,ZQ}NH`8,4NzOG8aDK,gC90+e",ͨa}[D~wE\fpxqjSǹ O iWJ#7&8dCǂR:uYJm9)={ a@綜S U8ZհJ7L;-3Iǔ&'9^BG$ޯ%%p"'zzZ֚/ r5|a ("pr;.Y)f"vv )Ɩ}nG]Xp@OA Q` x:t6'ϛEnV+y}*!2{PUw\FO.dnd!waYcޙ xr_23Z^``V 2O|oP@-cöIj +aLݲ6#uo==,kfc(Y ljrNK`Q: 1t4 +E9&,uR/ۢxUJcь|Y4ˑ:ngX连0 󀩮IߣHC׼FvPtq2!- 7Q{#d{=iIOi  8:[p±gP?^$JlL#(׾n==3w O4B@]a<*5&2SF.W'a˳o>9VG_,6JF++Q }s +~Sk0Z'%;p3LEFi\_W@D[zd6#?WQYïćHB]:iSȃ ˷h%ߚ=Mnjm7:4bvӋ^hG=c*2.dHg9qr+g̈3LDv#l +G%jxQ/;A%CdQG G7o=|P_L;:'vB|ʙ옄˘&D. ^@SScl{ lcb?{ p YtH }¡7DY(Ty*IڹK-j8\ jeI@jPG.ymF' +PLd3Җ~8 Q:>NfX n4"rז55)hg"7Ά-b|dָܥ'IJ/a5o1N*rHgP/~+рP0/Ln8sgpm#:@\;T%Z-5f;أ&BGʛО0[Huyq43|·ָ(Mӥ[ N׶9pE5ʏBءі|0zVc9{r4=(LG8yj1dB EoP^ehd▩hY-U91oUi@gC;BwOF+c4)32w_+^!OR5.S:[>T2'(vX>#ETEi7xA?gjc{ziKUm^F8l Cucjq6KZϓ8bnT`60˄jcOco=XiAVf{c7rg-8"ȞKr@shM sl ZRXay;99J=^$07Dd ?:G.UE{jl{GepZ}Z =SkxnuCBLE:.7PEr<w94/%g% +e+W|d[?W|Oxca +|teg\zwcVxQoj|k>HlƉ]b=_JGOAʯ!Rŗ WX +ܓXHp< +wws |*0 fR`$3 Oo2SoS?N%84k 1M  ~CxpF^K_=v2Hn0Z+ag0^ ;7Cmy{眢?8+y~Bز 7o7p%<+_0 Mtv&c[ML +4U{d0، )jP׀&a!3 , b⮍|{3H'Ȗ?MyKbti6xA_ c.I{AcTxtz~ȧFS'}ՠtB VwZow&o7]JSpLx ܚ{z_L}lji+GU C&gU:l\* SG^JZ3 T8p/TUPu/A 1tO58Y~JU_t>E >6\*M~f+I[wugxtIkg>Oƺ-!Z>38qF +)znXQJW_鸴@ )Lwϟ?V9Ej[Zг5L9=C}w3 k +[x)`; m#Ud>I#>N4&_!>mՆ}jupG !Ư71_=E#Iɢv*mL@o/E[C0s=lYb$<[dM>7~yT"a{L# +c22)mN:~- N2lI(&cMcK"]ηf݇!M-Kp*fƇÐNqn(}X|A ^$~>kCWn7nwՓ:woRl +Sm44& S T[O]ԆM}TNwzVRrɃg|L(--qr|woV3CeAa# +kFDƤ_v6Y9qU)5.61p3\9@+ +mCBvlW-0pOl*ƞ^EY}KukY"$f_u*c +qikӋIv, wŜ.xqޠoK@K]rx6k$OaHSjpQJl;05egaЬ3RpfUY!niJ<8U{|Ӽbmn^uI3nI =hrm; nZiXx3&2xwűd-xYǑ&i|;Ĝb31&,.3IOs>ۢ,IG\Ybo%a~UaϰLLdYϏqJ.+6órȣjȨ_y|)YD_2v?pWY'2zx@%eE{!WQbs F- &G@fʭ=" 'ŗ.ZM/MxpySsGQӻ:iaJIVN`HM 4gq= 3=m&O24d^O-v &UTqȬYR~'[wW4\W-| t4~GUP)ޚ殠eCpRIҠ=)EZ.ğ'*(@z~&>JEdSOJn#_ĺyY2IM2hȇjbNArac/"oQYՈS CjTVHn=:2R)NS"J ;8q \lG}é4)jn];69j ]6I$#]2?.Ə0'Mɱ{g8NfBڧ}㬟_aw$]ly#&qZr>mT.܆=R9x@sYrD&"@2tN w ߊ.VxOO*c̋^4U7q +|X Iaa,^ʤʂ[uv +pS;REs5; +bnjQԁf}Fc븽JJ;aRNc.G]'.!?zt;cW%ԇt&=­cgQoTN޸ָrBDl.7,gC6lDti~R4\R*=BTynqv D%܂1da{R5G%,-দg\WI!|$DGhz.̶6۔Pĕ[OXVQ[ԜpxB]J*Av46r-ڱ2Ҥ:isgt*1aU[蛔ԅ"}?鎴 N*ns*K$0iV;VaY(\AR5ltL J*e"v 1)> +Vѕ^sVaGI{ؐQբה)X*7i#䭃rrmLQނK tr.B9fSqn)Y(J ]Wt@Ki,Δ +9UNWwbAҙm^HSܛAF膜3h*:|LT׶uVOfi͟Uyo}֩['5 f{ZޒnʋoBEĽ mSpU*GjNK:<kt<--{Gz +*~ʨ}ln~p.2. +nM:0|-|Djn'.VC(b1Myx޾{oӵ \..T#AA8~ZzYg~^BSrT`[4<M){k^\n>C`˅o.$2h( c^}p[:\VS1npqE\EŢͮNDDZ\D]b]$k][k`:sGZP$E.3V6Ͳb(cל=?C ٦upv_DfǑEuNNKM~ܶ(F8őu8%rի( vҀ-ϔ"^HKMEX-5}V`cX\8羌LGkponiҿ$ 6t1ɼ^O^L1ǡ(WɃGk|KZif d{2,A4ǸvvMd%ܙӃM^p8#IRBʠ +.±<9zdIһ;zC gY@*ȞKi5U)rJ8 zip`+4\?bfKGIX *:TM*+'?0?EhҥqEQ^/ڐ/\A;wK?;>Vϋe>a ؁ykJ-O՜‹HnH7{K˴D塱GVNGhHpRsz|T"we]3nQԭcWJg};]20CK˫b)*ks*8¼;}; +*v516.7IН4EӕɻO[-vMTY-LI>Z7]7;_EZ +ӍE5}O!_S 8r,)3U.Xg\1=׎+X"77/q3O|oI^T54OQMI4#apV쓭`Fz,gYE'tAa :W)bh| V@i%G/s8l RjrAՊ4^9y>axQx1``:LĮX1D +c˘v,/U %NgS9Cdn.uI?|78tmy8wgSl36iޤܜX1; ܲ):5ebOᯣOMZPo ^

Bל隣$b~49 Yb}#?Fqb3^D-Co+&=#I +j== +jRkgYⓔC4U#d+HwîOu>0϶[p$ݏO +WoV bFFT6iݏ1e(VSN/'Gпʄ7(>2T3<ǼB?zkz>g=}˟F|+۝f'LocIaˤp&`;iRGlvM%; x]wEƺ)W ޒC37/`3p_YAMl#,Vn/Ìroi~0|Kb"͛l}:J6out! \05{˒+4dV?-ێ[,d΋^wbA⚡gfc[[\3 r2皇:~~w;T%>[#ƨ=?.)2`v o'}ax(5)X-l[R.* Fd3R:A\sO'Qz{\] h0>Rh‹n'~u[?W F +3DM^ NS"Ay # [sС#Ƨ N9pGya;$r%3X˽9'.}{z"EbE6Sd}d3"JhY^d3۞NA YXPqyX*qLn1%‹T&=܁i'Wkf~麁7 IjUʣbˑqtĭ4BU2qJ5k,r$[!uOܕUp 61I ڄ7f+C Vܻ]$ 9- |\r)c֌ *P[`g qx6M"L7Kd@{tEd@g]yk&VMg< L)4^m2hΟ@#. +>K||QJ$_W4&S:3 HWMg:}a]WI+n:4[%T0?=O{:}CqtNפXj?0ZD9e?_TfFټKoEm# <}!, +!BӸ'KA߼W|:=}*xa]\Qߩ+L`EL͊NX]36pJ^yc!r >yk xQ֐cvV|3}/n(H^jM"T}9  x, mGpJ3xS;9ҵqȇP^_-*n"pN $2ae:;ثV;[=?SUn9Ey?0*TľjZTӰ̕_3Mw=?rL @Y䰠SbƥSfInґ5V +tfW̬>/]4h ^"(ySvw YӥGEwQ_oyW~{S=ÄI=zgGύm=[*g=~6<}Gr->GyA3Ew *筟-8ƔY0.R'GN&Ds!/Z+kGM=?CGp_vŗhMH54t2nM[/qM=ICSjxI0Z66#ʐz&hWY8B]ekCOVQ>x +LXcZ wPa(l|kW.91uY5Xfqc˂ѫldBE7Ukvm[Lݎ֖S-yxQSMʡo+ܶ]4?669ɞO*cz*~&!ԷjT +%9>NΆQbBc0mr b4mLڱv-Zxv ݤC\|t\T,dj\d4dW3 `CsBk( ++%4dxD6"[ަ*mzYpmJ?v/đ}|xE-+IV;o:=$o8;>fTGJP +Z`L]T8?bDbsx&CWs|PiW13 fm, v>wʮ= ;'$* TYa Wr vzm2Kaՙ_*mԉ F\fw} d*õ.E,`|>9^eQxOSTp`3e)*WݙW"zWW8]kI۲Z_xetMm? #W 3P]7LxԦ>굊/ ['@ftd|8ŗ&J3"L 4]c&\ݥUخ_[4$7.5^΀mP6:5fts*;Q:~jU1!j}r[9 +VDm$ϋp&_e}[c>*訖~8u +.Oz'c|*(u +NRvcK3O2=ԆOse 'JNўpsɂly'en(#"2^lC]ҮlT we1Pk&BԷUH-7 +oBXi^!$j*P%]CIXaAhK=A]V!<~i*d=o.'wE37tYB8 qMKxyo@Wĩ#.!N-íǧ #TBqi[R^&T=]sBY"(Ty_p6h@G l Z`as:clk[,k۱ý7銝9(P6XϷ,$Vyҕ {GG,6"LUy[/n(iKNu1uJ."3ͥh(9^v۽nk|yyrrd_.d)tJx9ċ|#/Qod7 թl*I@Ѳ ,bzqc1jjf*̏?O8X9䳪Rĥ;ZpBX<+h\$>h<èP:S@G>(l!W'I7A5?uaH%3@lEBX|)XPo>c|]O,GA4`M-OKʂy5N/ F銵kAuYzЦVU#a +σvCQ!@3K9aY3r,=v^}8ceFXC ]g"sTs'xul*ݶ9 $sCd}ݓ8|Gr7"I FeYq\6!-KNy8){Ȳ˞}jSe5#3#jh_mmRԝTYp-zu]Cxǚc6w[@ǎHTfĕp1Šhá%sk"A9NJ ! va5Z +BYJifWmEð;ڰD~aDPx3e@[ [+vx,{¹/%׭h pmuR:'=2p2um+>ntP'eM@4w*UD^]4\:C2­7wdu WR(Aƫt6k(Oq{۳_>Ȩw)mCeSKi}>íxحw񖎛!-e e&x)s%=a, vxb/P^Z8l,M8^Ov"L૴._Oi- ?m?,(N o\i.8389~XUo:~_%jNV4@Tfi&9۴4 +Cdp =_-@[4-@4d)#5 IqctJa.!YB[E50a'\G{lѱ-ht`\^:3/AVu^]0^zׁHL~<>vUr(gWɥpQ"rT况%'1SˉƧXaŗg^ 3w*IX6lsV#J죁&|s5HZjU~Og?ŚtO8I*6!C|axf:O "x +'xV jaOuP#4֐ػrEupe~;"NdlNt•;~? Lz],Bғv?"]~²8o Y;dUhyw«wnWy@VO9I/xU z.&CؓX_7jXYF0\Wݟԟ=6~S.d*fi<޻ϮJbqz~Ya|] +^;k4<{5!rToEпnQF]V46ᢑ#g#!p>{%Tplw8ij;Qݽ^xgVxpYͪ U &$œƏ3a5̩h"d8onbrG){ c'rÅ?xKb?4ߺ'=oۭ{h"U+Ț +̺ +XQnZo7+NHYsT2{3kd̊zעĶ-̅)s{>J!v½7jl%GiΡ1Ic^1xI6Jm,YmаVsE=w :5Z=~H@& G I wr$، KƻjaHy 0Cʫ|ݩ#F$ #%4 "QL(-WoTɻ9MqbB77FFr4ZhE2Dyn#b"[wņ~*96$BS!(yk>bCK)7Oyz]șMB4$xАm-p66 l;Ͷz3lT| "lQC2 +5dnۈe)U7$EB!4g߲[Li0JL.x]7Ll;yc9Yn0;"g}b$`g,xq.dզ \TKgG|xQ5tO`YV&/jV~wn.He ^27Z^d[74/ZYUVƗ +w HU +/T%Wmy9GR8|-psi+* w->|8RM*CċhBɷm$5mcߕwfhS7ܵmQk/&j@<U㶁C?MU3_A= /JRUCg$|}Zbe|E݊=Y4/6HٺED(Fi/nPPqeʩ"Ro%ڳ&;oCHÕGf(Ci+?P~3 cbyBQ c}VtG*LuS!p+-LJ 7M[Ëxt랗wE<ʇm)gdEEGiz=JlKZt{Rh<@ +~gf+3c;23}27U~gܟ|+?9R v\s/ +C4XNE-d694U1|C G@HnN^KRSk~[謹:JJMTHTh"??W"O}H(n|һiߧ +sozdkӷsFUҞ:vK؟}E}˔46O>Uiǧ>LSkc$V!,\hԎ5pc#t7mY!<.ZR@=U Ȱ>W@ m-= +E'SaRK};\(E ;։+/]s3!{Vx_@;6ķdV5K|=xu'nT0՗|OzFX;,OXQ'*G=hK8#/Kt`=a|P <Ȑ%[p)Z$û~Oh64z(:0<#$a2>ںJbIܓ'mͭqS0KUlM?s~+߯}_z+9yYiEׅ}!ORn%m# n ~V4^[+'Eh/em[G Cm0 <<&0zߺ^7_KDLW8 VAto|eV]J0XyB>H9`]et&J~B3Uj" YdDw?KaJ:xNe/!x zlDނK!WSYVns[̃?yҩaj,Ԭ\[)1H2ðk5W9  U˔8)-0<}(R$Tv(s@rq&m ls/ѩ!tÏK#"pÎOU%gKUMROz-p5<-](ZS{{w3%6 <$ ;ɓƔCO2?qRh#(e^VH +.4RZ}sZZ *02DOWy\x^4w dL[KsY\E.O./%:u7%ݼfN ϕ#l)۟>:?vh#G|$GVF'¹xe{;%©oZbXABrV5 v|>̅=bsgnc\2#:^V|{[KR D"#*!ǕwdZs%cIֶcv{sٌKNp +O-^P! U %#GfHfC95COZN95aR>swyoQ&+y2FW9ྒHrUkx)S2U ֙CN._IPqd Jc=$)ri%Q*“b-;V ︓53 ʰ_mZgմĘ 0T^+Ӧ6RdXjgn,V?i0c1寘cFD[&0 x/p-FdmFx +D>;?L(m+Ҫ䝂6Dzi6?,C+X=$Ps3DLx$Դl𝃟uEC>~]_G6q,Q~hҒ (?CwIm|553"_u,}LН?NwOG6 6'<ى +xC_ލgK'OHrw6?ȳ$SzL$GL}ʖ啩7OHt2xJEh$٢9i̺k pJCJD,mt$b?Åǧgb%ba^2ơ#y^%e>*݃2y  \98Ď^xJRb4GH.dG;{C*}$zvDN}F3Ý'|\^]fF$N@%̡F~ZfV i|XwTF]ds[XIOR3:r>2Y8^\XjλԂoJqG-GGPJ\{sܧ8 +X.5E4|gkhQKl?ٺ 89<|͖lK&BK `L *L׆Ln͏K׷JfY¬>"\OoД>.NDqgTuVoWgDdSfVefC*LqV+"WCj \%g&(Tgf8p̳rW*,9 ֡\D8 i /hul+"7\Ч7([cGNZ9^)t)y̿(KPS\uJRx)%#*֩ Y>)޾'c)ZPJ*x(zY$|rv‰[)NO&Tne#d9?#l[ad aaVxoΔй{X~O_{$Xz9wɏ]9 +)$k>?+ 9:;h2SrtVBdH:U<"jDɧNN5{J8ur6βRsOh+S7NeqnSJ ?9 1IH=uz Mu )I4n8N! V7|*^ ?; CXOM0`zSJ6=߿O 8C7/u2~Z{<) TR~F]C~6k;=G,X-=^PȪ{΃q$觷|t1iF3^f$GSBpp3_JUVGG +x6iTSDZ&Z`Kv W \OŠ'p G.*:rьKNz wj` <@iUB!K['!JE u-!Oz hzKoڒe_2xGu^TTGpKr1hpA֧.CdQYb 'EuC +>V7HQCվ0 8ϧ1—_--xtXnXb{z4l{,S>21>xvŕU\rrc~6U6l"n(GZ{Y7ɄYк(q/t낯dŒݽmۄnr6@ +uo?z\MWsߴ7o- !,Z"xK sD~3OYAn^:[\\48zw~c{ O>̝'8i3:,ɳ΍o>lpo>K-q^?3t""ɟEgv~ *[9'VQm[^i<#0tx9Pp8#Dg.qE_SNp7qTtanN\ke jF݃wU\ip~B.o [9bQ{ r5>=kxMjMϖ܍3Rm><3R^t_+K{ϮV%ȎSB::n#؞}&>:1ί)v#8ccq46z;? +-.Ru,8ҡoF/=z`of-> Gffo(-1#f»RLVǸAъ&lM?v:%5XmRGhFm޲7b+ I9+wFj E*zqb5,K7"pUQ.u9C= + rh~&eF%Ks6oR:_9ka +OU̶j\c$=xwio7Mަ|'V .gۜI&޾.qm2o\pg{W&ۿY*I34 7u&-x$1yMGYO^rq-#)S_loE(ǝ7bc/mGSf;9̓/-8{*8BpZ&Bpz#-!8]spIJ(L:8욶plU P;ܞa]xE.<Χwkv |'W4lM_c8|u4xxuv̵[S,"*5 w>r#I|tĜBւGLuZ7;fD֚ ؂0r0jַ2d&[ +ypq% ~;xt UWK?>g*~~Y]7'VSt5%yH-忖`Sript.7Q\fva LŨa\K 9քcP3 &D'bo)5p]ɵg}kyVˏ>JNeN}Irm&\O]59YH)]?JM|C /#Rk2!A S2XZ59&j\9PVƁ3 FozJP;\(7ݥ~srn\;e;ۺqZnV9' n[@>Gf =ozP1黜ɿug>Ov +LuHf+TWCe5 ODȓT"fE@rݑTE@K}i? +r%F7 l}ϾyWp73xGɋ8Mת5սATO]8pscyy n9-?=J(/XB)M7a~oVj.{At$+8l`K} uo-#-b҈l?~j} q7|.0hd[>Bn,sbS +wH],z_ˆ$7} ekӟ}m NOz{e kQE 'UmZ`#E1b4KЈJ1~y5 R\ޓk58ᯥ#ާ»=l, Sf# S9R/ T{XU v:i8pWQ8s0ӧv>8X2V$M+۵V@ \{]3-膿xzNq8#u'A 51=cR5OZ@"-B/[8>#Q#Me+:?8e-MMtjwTGC3԰L|WJ&S!7 OdCJnNf@v4%⩨JywI$wϺ>tM<ț&ۅ|F# :E_OH2腦 `IR7A;ŷ|l#IıHc1j8£hטA&q,1QƇ,S a,ԘM]'8u&A?^/. J1B1hCm7-:7}xb&F(kV=?lnu9.G>[rMlrlGE +dg <'Q8O'AtjV!0cS +eiuMBZ]y8C 7"I9mЄ +lkTz6T_*'!SH}DnϏ>KE1,M;?plWΔ)+Qlh:('%ݶu}NGen6J)Q GEx1b3V%ծ' _}tzi )yVi݁?kSo_3_9ag!|IJz$5$M( @y?tpD3C]AZ@RL Cwop䉬i@Ԟ.eߺ>u~g2+0ANYnFyҮӇ}!lu:[]&$Ћtr?bor)n?Zwx`+kcx<xZs;]jYJ 0™#qx7G槩b8a,< zH5uHBONJ's&o<ixOMM\4??x v7x됻t; w| v_Dp*8P⥀i[ x0YDv oGG+>pOo֣EO +&uy5zs +B3.W5LƟjЃCZ7Nz&"u;)[~ />%MQE +yD|Wbʚ@+&{>@NS- J +ݩ[W%pHy|Ch! wNTv@œnO*ſ1?7kAq]%~`fnٛD?4:w#< +y:-oS Fiv<ڈf )64g]92Іxt,\/Lx#99bLqeYHޱN~L9I P%1;6Bw“Û}:i4w@NͭwҐ?u?NV~vɻ2)bR&{);Awv#mLr8NoR2NdI6MH](BIec/YX*>;O @auVpq9[ˬ: UN + n/N|/Adr_|ˣͭs9#ŖAgD{x]3AW 8)_Srݚ2֜n~,;cYq=vźļEԻ8CNOYiu.*_'&=pcgMgfj(DrQpt?;b`7f/5p VV5£Ə{c f ~>q\eq7נ!kM@r CwqZ*pPw=q-(pS< 7Ow\%?=s3e,QZЁ;KԳvCnuwtP]ŷCExgp XJuP݅OsֺT&?._Z+㢛!z.ck.VwCK&MgZu5BI~l9oBuӧ -ũ{i}ZEk!+jb]t;+r>Z&rmZ},dMOh@s_i#ve#:$&zGD6;Fij sF|;-pzөqt>LXn3QwL.^*4%?S?Q szQhǿ(8Q:)fUıW*a}qMEbK"NN?[Oscr\\?͊Tޫm4;q4Cs~aW*Vq_Q?/\~퀞QwvA!3#Őj$e_i:H(uʭ$2xj /DR7ޝ:0r hW)(Pi695w i ^1mYPS|=|e>dސIR *b7 M?s,uקE"A/\^&OCvMOm(߸'ZnN~_YSb4Q^! XTGpb>a@ɩ j'D6jq/k-:LQH!e"MJ\,'*ХF݈򁈨Arg@%]y +[ë~7"Xa6iBeBƛ܎`2n&_D.GވEnD゚6w#2UDJU}^uDj Tť"o+0Ѕapvkh1#)f ߀ Vcq5;͗x޾ק x{Bhټ7Ab{|˜`j$vnWǾ6ktpg<"_j=\͚٘);xxНd.ibZMB|=%1O|b\۟M]/Y^"SS6 u ſ o;O"L'OˆZ"+v%J&EwS,H[D r .6"OzN "2u} ~CS{lT2, FVNIm&"dvE=G 19%tN C;*&EVrSy$=[80vj帆s-23u )ܧ[zCMaUfcIەs5"ůgx'_3iJ&s9̵GmUƚTIrf T;o?{_?x-qfJH%a+N+#)nJR{9N>TW:5+^ YeGӬYXv~C)CAY +oMһGNIN) teua;ryKY.rX,H꧊}1AM*,jX-(eۻU+/`#qt2|-ۅ#ADKZw"fᴚv|e!-TRݮ*? ;mւK Qr[n6 Vb@|3V訶Sއ9GV`%,廽gȵqYTg!5Df F! '<6cJVaSy#35+W/0V[%P[dKN~qX .4yh޹9ֱT+ɣ\m=-::>=Ru-EJ!Z.,ˆ*|*AfyӪm1q.uig~U_Ju!u\.ՋL32Imx},6(*g$KhdnHd,˓I?̵}ҽEt.6-_ᨮ2 wH8][8БN.y|u|aK {| aOLD?%cXXoTY)M[Pt􍏼+P÷[NĪī:G6r%5_û؆ CJJyr iZOź!PS;E%'QhLj/ݓ G$MO IL(p׏Op0˾.HaLB%ӳU:!)''%S>ܱ8ؐTZ|vy@7Q`j9M>ek涶2voK䴅>*Z`Vk1 _{ع{$b%|E6[f7Yuǿì޺Kp̾tKɏ14'В%|L-?U䋕qν-^L'e 8Pg>l Ө.!b:fjOMYB$R_N~(~T2?R3V$}cPi1p?:M|"rŞHG|oeM XpԨ}@Ɵݬ UfHSSIW̏Bض/.ʼn#g-[.bI1֌(m\咬KHQ.E-TW&|?h!Mu珅f m9E2O sOPrTo4wڌvC#s)ɲaL&jX4v*|BBfyvb}Jf{C3 _Yj]rB)77,)4GR +%}#dGڔn Ne^0ƚeJ )*W~#9 +NNS>Z~%ցCp\jYOÛ$qՌLy,039"L˳6n%]ʀu'0vxIvyh; >9Յ}ϙi:g>SDrjO !v3Ӂ|w=`TMcDf-\#J[e84o^&ad# GFSuy+GǪτ֜9WW]=4GH#j;B%3 lkn=+BOGΎE,cUg] 3 +ND6''[BjDo Tv؂USb_ NX=,V~^^KFpk\^G=Vdsj8a<=ɼx,[멋EBs1InvATO-B"ݚuExli< x{Uah %`ZMT4u=F-kFX?(ؼR9>>~kφR P/PXc˺>NQoGћŕM݇:2VQ§i:C׺G,88w+`8Fǰqpw8,$Ɠ +v4>%ڷ?фM~ԂVNDMrMFfxu8{ة@E95$<7_ݳAQq9|#HFH(o_mCN-7GVh <@; :Uz9>_go萶4Y:B_8OH3]gVL-clZYZX4:3 0m `7Gbw ~ϯ`ZTpXFsӜ`f-o_`и׮ʼsQ#& b7욶JrJea|4:YϹ,"%C{^{?~I:pm''՛.Yuf^w9~8Õ[EGє.agɟG'cɷ!\7ڒZJJ$ԝ&HbITw~Hl?H"n29i[2zG]eew'KV:>j8{)r."8q=z֞2qUksj8vIKq)G$> IGs')=pSpH)]ln r8f뱬8D;f;t@ Ʒo-gNʮCctϗO*֜pK\+3ZMg0Vp(o4-X=yv +("8{~ sSسFҚx,N ,%JBx}Y7hP~~CKMъqȡ2X+]‹ļpS%FDԻO* +ѰxU?Oۧ-X\'"v |xկ-T~z6"6}Fzr~< + P~+E}m=[Fvc]ޞڠXݎ v8Qe:?n;!Z  \$@[ lІ! R[@T3Q:^JXY++ЦR:uq^'7+=V #OO{J ϿroC\#u۱iF 3 + >pTŜպ~yrzŢǢ +֡D>4EE]&QR]cxBPNٹۻ呀گ)Ss̽3;>u5ȴ3I+#k.a"'p% }NխֈH'_ evIys˜y}SVk/o\LLL8G"BSzg'ԜAAG s>#hmE?I= =3q-+=.Ug#Aĺ-&N]^f +6߀n8'/S}ZEV2bԞEG\ȧxǩc,kO'*]Et w`!UY9"2]_ˡr?J1dyNq],傷;. }'W\΁'{/9nweIyuWØ<9V;%J8~lɏ^VձVpI38 3o{G.z9P̍tkpY +u[Bu#=#{4r33}SrRz]&<:uus۠ w"dXc?TMۨI("[P駛c`0cIkyIsՄdž +d6%ՀCg,j S3i'C_JEflwul]sYF=j+%_s^Og/~I0ip[AblǓH:%Ai>Sq[za} #+}iUu.5 jy h>7'0[=l@d"Jz6FB?߰5zV[ l u%b;=Wkd2I)fɗ~5;1?G,5 a&V QGU҂VЦ$̒r[Sz +4Gr\˻pב:`<ДW$Å57kpMA.3肝c$jC6БCĦ߇@Z-jh}R%-sNBǺ8hq<_"HiB<2#m}MT,]fB]=% \T:rg9 4dftDYt,Ux=<>Ð+d3P$|e\W# $.J<+`gQ/sͮdx} 66K~Ȝ5O]uv \6>c>P\)͐ v#̲6XHXg@6ťo>cTfQ_$`M*/d@ )c>rFgn̻ֈ3@H]BcA}fïΨ 7nzj"?mϗ8l8PrEw9.܍ͅg`'(_p빳C~Tpw*RSYjֈ:A>8c8*::Iݣaugp@Yߟ{xf^Ȓ'ؐcĞ~Yh\NXI@yQK^  <4caPK_/ YN'D?|Up5!cm*ƒNcyOi_6e!ߊm5xbG/>zk`#мP0ne}w (G% HUv^ ;qvziVw׳s4Y:V5n%-"uFvB($q^؎督oBvm_DGtorK< y*'ljXu: +)s|D$B"ʏ/F19)6!;fV™-19o67_7 7E37QihI51>8=C'dX(ߧ I¥یx?𯂜YWo߬Oz◌< N/=p9Ә-E 6]ٸan'> 01q4A`rȝ߀x~hO-R lh`Ǜ)Ѱq2Nstn$4cf7Jad4i N`^C<#kīVNMBeSjFuwGy;^u/!c(1OڡfɊG9ǂcBP"jT'_4"aSI|+fhk6%SFӕ';q pT-}JPy:kеwBa$ ͫNbFOɦ?Syf5%ƣO*6}𾰵tOW'webVW⠊h'5sS +ZnJܐG}PAtYUzF ltFVƉm}6? mDj^"!&|4'IyDd"I(VR40HO"M4BcI;w9-ڣy TwsQT7=9tD>r#@ޤRwRrJ+9sYgX7I]L"—MI +U]ũ.ⶑKlDF{]ݓn/- &M4#z8*JBh5VJNR!H L/z\R'R0pd X ^R$+X +x'KyiFڬq4w5;>6cG>+~ԫ^}vg'ㆇ&d礜&A[x\R v/@ Z;mɹJo8Du%^#|Ct#T<}p "\IĠM78}Mx8̈촿8L39!jI_2:ndT 4,:tn_9aH9 Nka_Zs++=vՍix0Yd*g;T6>r8/ܫ4yZdlEzN79YWzuĻSp#, ߠO#f:x THK[fwL~R?"6@-DÿȮ%fr(#O=5p^7!y-jE|![ġ]`Hei;$\DoI8|מ*BZm)Een߭VXF ۮ[ꂐ;Pdeja_͑<<1!}C֞N(զAW烓5 s_ {>[ò XV8Ndb;%bȓ?p-7NJ8obr]HĶ%;C2DLɓ~^P&#͔5g/ 3&ַ.7LM K8`K3t"0\ҾGάz.`I,!E.L=sܾӥB@iHn$UҙG:i@$ZS NHv>rs3cd@:{,xҡ)-1W#֎LōR$te!cEQE02O{ +uDvw앜\Nu`ɀLy?LǦS7h;_]elƛ1Q +ǩS% + d^dn ! c^qvM}i挟br4sOg;,z v%V;g+'Ȝ54gܦ|CZyMC*VzΌNPl#tXdaٲJ K՝(o&}iҳфGѫh(:^+l)7-- -޼6f-Hєl,2DZqӡv>,iPSSR0![uS>I,6mSU1<Zl˶F݈qYeƏKzV9LMtkSDG%ŸB#o3QGdw>m\{ dӦ^66)8)osh)f"q1jiuȞMdnc˰5@(5u /C= $Drfs,}6@q3>W A K嗧q3=A@fA{ioyI:mɟ}Ё`]<N| q͐Wc'v8d%x"N^ siTPl;G|$@r|@L3| +f}|Jۻm-|kF}WzrۯW4tY7=rB-O*:}aMRMM b,Q,/4kMF0.|tF6Iu$F0^jk%7!Qb?@06ɯ^׷1CjK +pHI?G/H x'<&ς3@xu4 "Ӭ'' )4"IێOf'B>_7}k`T/8̦&SpW0{i4)P16uyM^R۱f*H 2[n0~{S@CiޤjODu +Wm +Q8}‚2ҩv(-k|w d4%sDؒO@0v䞚u$C}~ƻgFK㥖(WX& >"FK߇W/Ȓ߉E\pI#MEȲS~ʴR2~ o]n3ML#HO=himLI0K]V~&%/(ʔJF'}PGj5 n>V ~R:Uoӧ>RL1gf{ǦT!NNʀã=+"Uyg: 9<; +$r:vh/ݻ|4OpއNJ\7crwSnu`(:SNɘbL#C% X§(@ ^MW҇&ql/#@uD"# #gI g'_+w{dua_zcKVE2MmGV"6בlWajq\nPPuOx||EQb4.WBy|NY>fmUT2΁lJ9'r&6kTE, N |6R-1;)i3|noB|NN)88vő_yOT! 1H!>ݸڇqTχ$pt>! Jb97Dq*ƶ~鍞Nsl?8d|(c7̒璧ҜUpsi]onMգqUMOH0KOx]S.GI*!J%¤ML=u#+%wz+eqΨN p؅KHVW 3}-" x'`8Mo>CY)IBSr: #;׫r 9Ctj9e*ȑDHv#Go_.@Ƹj\`z~D_D;WD]xfj\' r84sJ7UJ˽ߠ#l:fB3M/ը1֗^W|;R MM lphH"N}bّx;,&FGZ˅wyi_!5OS3`))6ק)ү&@`W!khVМޙDCs&V%k'M*=.{-C!--D]_~qNwwx$ +zuzr +5|sVA' +G9;;9+v +csirˉ$lI5LSA)Rݟ3/}$ iv:j I*4usD2SH1K §CvM1 n%!v?($ +rq"pKA~>Uif/6$&=n,TpU|``Gx$<ߊA`X% R1ᘛlqlF-r2G_жf9(~gӵˠ3ffX;۱{Ⱟ57p6vŴ=%1YUK ]pnӧ/X.0Zb"wp$w]4 K >Q>x[*AAn]f3 qcl}Ml5h"ze'B͒:/5yQ#}+c#EfL}>}\&zD_7L_ښ)$Ȗ;_Nv_JvfEQT"+-!n&vW6wӞʂ]GYú1ņpQ[? +;Nib]k//%r4 Xi }jɳ0RySAC5;A8o'̪I`$?20K%yl{7_G~ٽ[CN`k<zs_ 9ꞿH$TWh`;ϐ+74)%jIU˴<ԩni,qS >*}*#N5gr l%o*75$#{+a>IAUgԫ%ˈr:e07]625튎2DGL϶g}+P*V' Pw(/]G٬Lrփ U Noވ LoEqz#`ag?V&i@--oTF9:Se&6BnׯжW=j2+Zc'gD~qb 'l*s WƱ咛|4RRK}YrĺqBe!s@#$vBQEdrO΁5 <36-ߨ59@"!G=̧lDdG?9XwWBcN8Фo\ы +6/b2[KԱ?w6ґf$X54>䰞F M &.11i+^`="cO+|3mf>̊n+hi!N!@!ie,dpJ䓮QӋRa?fB-Qk&I|9H y~p%Y4GzC˥`*FD Fp\֕`岂RfOTm]Ӊ\v[A*ф'xs&CnX6 +;p +RMI +r"^UHQI(aqqԑKT)M \;s*9ts*6PyzP"K(Fm6QfR<ӻ:+X,M! #PڬFK)~YHX*eOcsz3OԄ4eh[n\4[ 9 wv%fOɨZ'v ?xnRur̲&BSa2x'LtL"(LH]f"S6Y]Ў^BYfiEO:Ӝ2ezZROh|Soz~#e6]Psf2cXieԀ{Eg~#<.SIJ1:˗ 81%9*8.o$voGm?PeK*8-*xzՆPV0r:wǶ2o|8m)@)ݓT<$%yWZ\%y)sgbEgI=B]}EnjDFSr:鿰!(a̰x;ݲJI 2K\g8SWX;pS?Ob`GGn/lGdϣ(Z;^ZZN3{\C%"|0?M;SYW/Ȍ >q2OdbҚGL3O9V? y޲U`B\e%UL/^ٺ'㧗i[ܝuڱGֈ0om%Ӭ=0Gϊ_SԍOh2,8*&~y]j +4Knh`JHuRa;T>fQSwK=o ˯FEo'kc{R2S +w+p-ۦPY>*O)n-±UbA|d6`Ӄ\ޒNHEF}'Vָw3YAʙ( ¿Il$ Aj:sU|J= WPWt+Oތ!x@dK;IdN4dSv7x+`mH1Wxש?jemOԑ$){Zt0n4d#^lGIg ir'&vc FVsL &kU5"F<ޘmFAbW]Z6)ȣ{du\oP?r 2K=[xZ$*dBGHNeSxsuu9-*yU*Ј2w&Ge3#eΊ1吓1֋+! GH.8c|H2 &j'8 :d*X341G9 G'M'c@ M]9 F e!xF]=ާ8Y#=V슕Lx7]iI4&|9Hoa(/sʬX2YWKod<-Y iJK3rʕ/8ĚX)S ~~?w2fxk)p̊;.NŨx1*`{qƵTɺ$Xi` Utp$7]g˽И oied}/Ӯ>Īcbq6qzi v+S)4nG̮ {Q/@5V,G+F4|w͒0q ؎DO8{w{0 +m*w=zQ'w@"V"Um\y^>6LR"4aylpJJI\p$Ǒzы 5X`ผN-ŇA + 1W q얟jb><|1[ν4 +:M-{zRˉ8 +0|a0|o2 +.B~z%^/h}w箙Dd~ +xz|c8"\9 +,u|d9庍jrBuۇyJSK>y:/S|弬)q=䝻}H{U\Dh<X~F>VКv<4c~X5p(EaƓ!Eb9XvKTЃ?T|%1y:cA>ɒ!jKu`y= $|)2{>̞LaRdwi6{Χ-Sf5ĿG3V =e)Xq:uHA +Ġ=@`# k= ̞O"g>c_Y;9 +4Y|:ݦ'36AlHAͲ3!.XQ<['I%X'ѳ ,dX~$S* tˆ L1,O3#H [\pՙ-p"/uD7|rKIA3_"03,'q= OpwrLg*<W +Q{zf%[a|\H'#1pЙ>\*2>y,#J/FGq({OS,-`~Gf>ZahvT 1mvќ0{8CG92!o)BxN8o^ +56dOߩ8^I[.v1ۦO)\~ƇkçCq!-OE1540*&QA^`N*yq߅rpGS ~a֜f63mN]c`p9G!X#FH.pY7YS#YNwΥg2#A܄I߃b4 Nj`3bT^P~sxZ 2iwprz<8ۥ,/G@'nveU>4ڑQEt[i_U;E3@w)rZB< I-8:Y2cnjv?&mޒ-w7^}fN7Z&qTIUq,8gtj *4&>܁#VmX*3nSVk>ĞbVΘ]`YRyJaӖğSV'(,Խ7B mQG:go;oe-<.67ޜ|nFalYʶm"x`X ? !59)D=kh \6yLP`es=Զdu/qXv&n'|sypy<Z6⍐ePm3{G-YD(۶73tKF1[2n{L>nzǸ:SYӛ_\Ռsevl0W-)9|3 +A.fGΌ3޾BtAhD_̄5D(0d>*MR#Ǣ÷/7&[[$ ^7]ոlOC<3ZWpGk 9[J+/͝!A/F<(eSοۗ⾢ +_}Oo^\Xo!g {i[">kxV1pa[P"ޓ"TBn\1=mk +<+jғX._I0:AM6[sW77jʿW֑eob߰Eof=VqD߳T~e i?3G~6ŊOS_b~b 30\4ghbeBjR!b(}Cƪ I#\.)Ӥ/dFҺ!T.R\eyaS6j]I}xYO:ɰI|ֈYS\ϣr7(|i\0N=n6erϽ<¶eܣfizBFs*r}\&D|a9Kt#Y9pC!nݰW6pycR~Ye˭aOhBpTYr:lK<c7DJnX飧4+Y7pcWdڮ6+( uG /&,]%)^WҶCL:DJ*K$Zω3f)2sRDmTc \ēUkzڻb4]!\d'4ߘ`ڛ֬e?Ƚ!I]vdu,>H z𩀔bPzeX.ԴمT;ʭ}ך*\Ƴ2#cS(DV2rv&++"ǎ=98{#pܯ%X,]9%)+XY[eC-rR cvP-dه:g֐I҆pVr1v5}\xмcUYSD\ѰI,pK}O~IR +<]VQ(d X٬\wpKҰV|Eqr#nF!ŶP=5~#\!Ϝ0.=~zR\%?"+59寮kp7>PE;*qn|lTS2 |TOX Ua+$ Wލ-i64J+}Ծ-?, #5PKWnQpXӺ}z[a\|5G/|tJr-_ťMBmgߏ1*u!fV R xGwi@b3r +6ۭ"tfh5æJafgU +*:0"Ms"H ) ,0׾}٨fo{}kQ0˸r;<(D75GaRXhe \aRtnT=z|SxݻurgB +q ᚬVn(㛂^ޗTu{Uv)\rk/gqsCߖʱ <9\}CtjOo䕕u|Fx/}a)٧Y.Î 0p$]35i*|9ZXھ⫔kj$w +5l!}k?VA.ЙJࣔ|S5OYFEYi.(GU +O5:@JuJ".'tK M*e O*o-m.1cӨƾL-$dOa#_E꘰J1qKݢ?Kz׬zeVݷ¶l$OlCSAMj6W.cN\C>TWA )FMvVjw~~A5Ȉ\'*^x{RϽ{[6M-Q&v~غAu(6=2MѴoXۑ6L jQ66۶i3}y`e +G>~(S=b_R`]N +צl?Swe:>G,9 ĘKΝvs52iX َmNz=̯F@ah4jql47.SHGTEeu\g,I@e,EAWitӔ *IcL$e/d~WNE_V:ْ`EpV&}O87e.s2]J.-)$$rY_n( g*tOWOPs^yN2ߌ]lQ3Eer ^=Δ0Y^ >]Rd> IN4r?įWgZ>\:OKå U/蕢O9=oT +1W&PکoR##ۦ? !7[o>ZA=Ax>U8{mU3lg5;Մ&ocyXvH{*pPpR{o=];#«r)9m6檱qT*NwU>C M\WsPo,ɈJv"L}-)0̑:>|W˼g@y«Nm#^ +ݯv(+/M6aOM #,TUwFDfH pkyXm&U9fܕA,2 ԕq+浅WҮOzs˼51]ldO) `3賯ۃWwƩ]djmW te ל>4#~gW<5_À]u3ޅۧ/E{=G]?]OmW#;Mۖ&- +%tm^ѭP7ShǧksG ߔm׬5{}5&=f5Jis+ Պ"*1T~w_߹ޕ/_L4r0·AÕ޶y/_ ]Uʧع5(s#.ZJAGX[Xh +:HHûuh( xy;Q=TTV +/r]P׍_͔S<×Ix5)N:UtebΤ[| XQ e=S{x.®OnEXK0'B,p2^,EX_|WƬefy"#rf . p)ݫLUku!8dG6mn +W}Q%^MwY1 -ߑdBsn ;4f2S`i+IŰbs`E/MIր؋5zu BG}˥ +y +h>Fm?6^ +#X.sԈ#_JQ.xű5|]lJ YG*'Qxr[ lm{WuM;&֥lZۘebAL~-+xt{x:B4:m Q 6nJ{;,TLl|LQCStN@ Pql +_5+04|~nI(}lݦ<Wp8UC{Ecv5g)e4OQ9OY %k1E4*nLޅh7d$#" #C~t܋ϒ64Ih$)`f_fSܲ֋8x+NKỲb_Mx?mN6%w;el +tk.<4b/I*C: !z) sճçC\)]b +ic -,_XJ/1Q|Eysjywa*Ŧ]v ҩ׈Gm q^W ot? +;,zbI9|J4]&;>_|K\a :O/ҔO?#0NS v5Eϻ%mozliDIOUE J4BϼadX2eu&sեP,&k3~1YoݶA *ܟ^mTT|n%)m#Xoܦg ܼS\}/M]~J_hSqyQzF)ݱ2 L6HBKX›c3F}G 5 _L7F~86>Z4ֱ+*UpE5J7yՕAǁtsw[p䲄W5nl5tHeIC70&>~2|=W>?_5}56m"Qt_}kk" Krs.bm)Sr+;ۇ6rͽ! &3~g˕5JF{d5|YI-՟;(+]*_Vjqɩ|v_i0~z(CTs؝5;Ú݇q˙|xsm?k>͑at=֘56X~_39NyWoUJ{uJ KO'@FcTTe`*V@I)+S1<^-1֮ό&mp܅F~ڪ5)+7\LyWÒ[W(ŋiC h&%-=Gmo*O1Ue./۵Fy#,`YFUI,;[#› + E0P#pe$]|W3<9crg0>QHQVgOfx ZY[J!8MLߘ ۥ}H8Жnzwsۡ5=ˢVY*\ mfڃ8MFwԄ*\֭%k@p昉yp{̭m9CUmMoU0uV𒷧R({d&RK}\5&uU <[ +}i P'o[M=^v.ɧy쨚FScKX#i Hj98+eaJ\<%8[q56iW,j:?D zMLVΐ;e OT'j'16 :}~´~p࿷'a )s/'|3?Qɀ5xC}5~nJ0a.vK-161%lnnNh9_*ԄyhUlaR;psb2(ga[fI-\5W9cuWڃN!`jvAwHa\ U/>JxfnH6 + +VAQKoa;=n,cO<}wRrUtw9Gsk_ \`ѝM!caÕDM娒~qmJ3{'2a\ AWQny -F3{n?ihEu-"<\T|c{f+>5N2F,#|9/e_+o8}Ÿ^}JPu <ƣ+ohkn~01t"2W 5LhE`,Ҷ>uA :R>SD흚<|6iFV*aWCF{~c+X5]qyƃojaը6Cr|r4BE5lѫqF'|:qGi,c]3nP3UfrMæp갌|\S\}9bIH} N'*ZD\Ǫ^mTfpe&؞"#3!S(3!?ELHݱPօ +-xf2C!*仦T*SR RǗ)w4T{#ط8G'F@@h۔s#+j&ޢ$d>z(҉ѓz3y~lnPhlFCR'7|vts[ dx<0qcѧ*3 Vӱvfap5FpRFFhvQiEMYm"ZJf a%"8j96veL-PM ]$G=PWr=!6$Iϳpe'_[![ +VyJ i#x8XۇaӃZw$&&Zhd_&bJ=b4wCƷ FE'B 8m8S6tتtS})w>OFgy7FVL(f* -+Q3OJnX[&70<:Y6~xh͸pip[Jo}n­`YFTlNOoc')⒦Rn!pr$I!)X.Z{Txaú.}j)Am#6B)`qxJXXkm}Np$׌rH_A1$Mh&9UBnWf.i3 v&WKdm|gKbSxm+ikO~nOmni7+iͰorKݞj`d'R@._A×?Ю*S^p7RO/ݎo7 &MX/I(7_M2Ո +F$v+%>J44Jգ Ue0Bո`9.W0nH1n{\f`ɳLrˆ{v͍N6W==þ%:MJ-{8M` 1iƓj]=lK}7i+)ZN6p2-n@CPC\^a(#!oUi{A7an߄i{]q8Ҍ Nfj?JfZ~io\6E2 *ˁ[|sf}3Iesn 4R쏮vȍK74}#d>/\C%qzuM_m!1k?Dow4۲%Jkhq)jZ=x0\gV2k 15f򝿙W_&f_mC[n"EʻBBܽ-~8QG-2 ЬT* ,|'Re^[?lgSKW.+QHJC:ÕAvX]Jr0ywʌf5O۰=+R ;x9Œ uhXŝ@3xg z+ +Baْ)26[&>2$<z./>?_$F"͐w~&wMH +/F0IfA,&Geyi\$PORu`4p0v}>K\ܩLatMsUVܖ(A0.Fv_ϕ%nIi q6PF,X]V|+&6BykNF0`դ߉,>XeA|սgohI`YArf2]uw֢Ewھd,uf+lp߻ p=im|U s!A~2ΖnNm=+/,anXSs :fg y嫜fR}:|=-aǮI;c;" ^Ʒ$@S'F8?9R)]oYS=imL˟+wZ&kHx6wowɣl (5V_Ie(i[vg&e庫2>)3_L \ SΒwmP}2 m껁[6j˽PmJvoچxضmSOT+LE}-C)V{@;2ICr1?]9WWmqm +2]jN]sE?r8<ٱsv2eVؖ6SvG;9vMLi#@ mʳb&+\.41ȪeC]_>1^eϱl'pC싛"xFjϏpyrJI= ݘ:9pBgY X=LY-i{<plO}hoa^1"R|CQq'}|9ǝ5 ~6X8=m +eBpyH5vm6@ :.]x9D|zyВˡ*3|ACGڄ$-kg7K.ـ + sB +lLŃtm}(PJ_߰|hut7[W|o.PojJLhYyrйZieI_fؤ10!9T P䚇c1kyec*K춨ϣ? A},`zWxT2,ز \~HVvUr,q^oOD޻gGK~q)8\էLaޛh']?Q>^~܃:zن-a.J=E=O_3{qS*\囹)#oPJ +zMiYdz@JbSwgF~T{'^Ϙ6䤳w%iFM;Ӳ9#uP3|x5츟/g,oz#(C[|TވygЭV!8{J7~͒Ubg/5ZYπʍrf:Ԏ.y?wxyq'#sFJ03d'ҌBtY6hM.6>}l oU&Dmja;DJ~ ~Jk#IKf "݌+KQ,4+fKL5Mp+:C=q]s/^6Aڦ`ݳ̂YX|)_|ʬ=]0Z=KEs`p P+Ȼ9gQ|r0ia M#X|! t3ux@ aXdPd;q O0a6#*W&hDg0m[Q({&xpGOH +éK͔so^~WF_Hp^I]m2}g1#d$է r4a;ylPy WxFf1LJV6zjxNz޴Bg#`𶝤n"~5WG{ \O<7e (1#UOqRL  …JMF 6̮4As-(ɨk NKJ&FjTfѪZz>D2a&p ͖Kce-Ȱѳ9HYcK[/ Vw%IOc0T1C$ +vDv*M1 1U`lIp{-8zDZf3N2-d*.HrZ>7S~kfF@-9vhebi +2V(TBA0+Ün22U?ⴭr RM^bPh~ !zҾQR1 +Ʉw-'eQFLbu=djU6.% DߟVn%p?֢1 hׁ!2Ճz~#jǟ:0QZ6o`GQEI,UA}Ut +)BmF-Fpq$POBcd:ti.Vx# 璹q2FL=A4C9bRVhl6B`;?6Q.Hy;9O>Kolj Dux SSh"6N[\ QX~Fo6Z}xUhmGAgO|踝{oR)eOG>I?Y0*w|?CWxyߌ+/!4|x3͇aOO: +أqE39n 拉O ocJf]+Ͽ]qb+ tmH{ȳU^]r ٶ$!ր[3qzXj? y:J!#@8yUʯ@Tnѻ/̕=Ϫ|ضpYX+b܆nxrȹɈiVvȫ]-L_=ðI^0BƳ0Q?7 x&Ue#G)7JK[ +vFZ26jO~1oϝ~ǻogwFIG8h}^"cfd .s`WҾ" qԫꀫ iT9 ÀD3wfpbȸC>k{qEZ%vS/'3qЈ>J~m4` +aXM9Cooˎ$͇;ZvD,f:'@DFawl4JQ\["cE7p HC4~˱t>'Ҷc)["OWb0vJ&c"7aȸEa|#Q)` ;᫷2+K[24 X$Uv("n>m@dD-O3뭠sU$LIE;vo㺊~E +\;ƻHKgPzqGDL-EQPRMJ}gL?р^dvxw5P2mQ;,zCm|e$O +8W><W ׬#C +A4c;a֡?ݡFno:}AK~+Gn>Y`.)(dkA'G!Z݁g/J/SzQmf8!i4ڍ>!Pj#d֟mp##I$e*Uz+S@'/#SxOaAЇDOj` ^І9nPhh"Bz@!D+R@3pA@0TxS;${Gx-;@2=gm]|ό{מ~f(}Ωq>/g:t|/ \Lȯj Y}xr=gƢs>+{LNaU)3q,9KIZ5eD9H5z/eֽr(E~I$pu䊜=p*Sě8вfRch' GTV_^s^!?XN80R +*QRƕXxS +39{5+`$A]>u" +/ g^ $vK{Eu߭!JR3/ \ҍVg^Mso⇪i}:E7SP5-wqlדZi`'T3 x +Ri`$exx[r?jMd(}Ě(r<i@"aqdO+I酙T^A> ;OLp80[›s39 -柸9m]즏jq`xz%;lYl:ϳg-rĦ@,uS 4Le=b!=H] )i@~9"jS,C=^}DPv +W6yZiR=Pa,^١uC1?I7(uJL |)6uU}_GSsO6'U^6]a\DՅ{XQ +t=&P:Me¢ 9dlpW9qM pQ$84n}0"313 3N>k'gT5L4݊;zXPKƕG${R[i#xH2#O +>VbT_}W,cKB{AQ\rJ*Rg2jx5ZV>۪`%exAo<.Snl8Y Wk2>3d2˔vTS>?krl}m` ]KUJt֧߼ۧ:7AmTH{ +V֭^In^ƕ`/rF@W߫)kѼr+Zc}Thz㴘Xf ӥ0" =*Jp5K!6bsڨ VOy%4;gQPҰ9vRjJ=;6F8|-̓aL%Ed*)JqmM.YyinڴH VP2op?ܜS˷6h}]rޕ6Y9i{젇}=6)8哳= TgK$̋"f%Qn[f;3FVxf(*۸3P_QϿWЬ,l;ٽf~_$1$QVux#]OVoAB>3q lzhV=\k +PN]6}g=m)p;k ^O fyaۡgEr=(I *#2pAp͛>9TC~M/SuOd-M=!{25s ϤucOYs6kuSr֟A6TE<9¹6na֘,Hmªmw͊swj]SbM3١0UwSsaat nqw%?Bʻk\gnKdhel'KXbtN ҩ,a 11)mhwrw=6ł5w-cðG=D׸u_V\-R:٩v50sΎ g8sȆ?XuQdg=KciU +G./+l:) T]=@ 4xK>̧ɽ&;ƝUHB R 24me*HT3lKcvĬ.RS!y|awJ?5VM5;݀9SՐ#38>b[cNgGA_5+Q/f';(+jtU9v4#-OcS- pD(RWx XCtQ=;~Ő񌄃+̥c< o>|K8͸;+5lcJ8.|bg1@VB ><^™q|;}vĎvQ/U+;e'pGT8Ain_vBK\6֎dJzvjm;h#@=5r~܅Wb.0mgm|%ˍss{1Iiv(Fg}<e=lTt8!KUB97,Ms8U?~)?Q Z26ޔ־x܎1Xs?mTܾL [i!x1|r;kC;G1?gm_<Nnk% &(D԰Y*"cz[~}zϿ\@]\JZna. U5\g~]c2<\!hyşu#WGnrDt buuQrSj6*.0W I@Qx.orX!*++z+F}$>.Q}R`k8ˆF_ "[KaؿSkF3UvddS{wOTmyhMX[d2^}iݛQܪ2>,ag2m=‡Y>܊t 56m o1e-ofGg Lc`Ieg01TsayX*; +E"ŔrŐ!b8 Lq]hR^fwLDB7EB@;1ilBC 9QZ1vCa.=C4/FEx6QnLUzxk_|Oo5C҇we)|ev{5fOKu#e$KC1/珵 +gUh՚ZcE ,=Wӯg:+էϾ:ZNk|6 +`TGXmP%SiTr]K׫蚡2yB͗~)0i7ТL~wv"I|i?=~dRQaū3(T' }/rvtf-jp%bvq5Dfi.~LD&E9$]?vffA8, +zOp^=9[?s.>})ҬgH<{Dn?kI[; kQ)i%#FLt"ψ:jTF5,ur񥔃A#ϟW4@+l}oRw4γfEүy sn^Iۊ5=և[7t9~4[0CieCM~WOؿO=5fU +c=ǜ|% VBf;u T+X\~:zr<WC.<+ +`@]Mrǧ;uz\7.on(TBEU._&G۞u|ʮ|;CK&x3Txf3446jZ!{A(r{֕ +d]v[%DaKc䏁uNoWie]4=`_][ΟNG="{^=QkmϜ:J=sjûTe^wy uL~؄z|PG Pi +njT)򍯉3%|6~IN5 #m$ W_?jʙ7zwE裰݉HT}%bs~ C3."VȨI$kfMVG7~5/toK |e$6 t( ^q'Mp7.:>)0FY^œoGk~)0;Ηqqr)-OuM”cc[Gkʹ]\M4*t +nkrgguMIhtf\ |=Ҹ͟jlZ/_ +v8R RDm3GmH„oC $UˇWbʆ>*NSQ< خLCm\R#RPsI'嚏 Mq 9E-b[M5 KR[ &Nw{òdHzs*r"ܯɊl/k<߰h$ERҁ+7պ{_>%1 nQ-ͮ-b?+؁n6*1O_>OWWdΦ319͌yB\)%ۛ3fi#77n6c7K>-I]oY>Ҧ?rvq v 4wxW2Cb;nl\%dpl+󬴡b#*A";"e{'˴s䮡W͆ &#qJL6}Lbj|› &ܦpW)*˹"q+>m#fZm{TW]BZ#=q^z(/_m{Hċ }w6NuDŽ͝qu>~1=#f's)k=1Ig*Cw5dx>Es_̄NyVQ|q5febS`^T\ nIcx`mGRdq3ۆr>a,wU:efC5MCvR./]Td6R + P|M!x޼IӞ6ը"o]N̶#wxmuwSrͶq9ְm=hm#zSdq;ZpkO] J1UEWej|<_J`hgMJO{V;HVCZ,Ⱦr\$)QPRE| +o=%rp{vXDr:yvN^d_=:6 #ӟ971ź3~ptOxܴNnecR9x%{iyvn.S+/blMӨ>+9Yd;;|oZ'Ϛ;hTm͍eUH\Qs&5!Z?זwyfXMGZ+{!Xۼ﮼ + m߆i{νG}E`  2W_ߡ:IYU)j'6 +7n>paLpnjAS\#O|}a8w~qng**QIYON)4&?YL "6}vCZN/o/-هǶԔ: S?~#%(ygāI!3꫑}8lh"CNʈ@v#%^\PC) +*^I2EQ:;EAng?u}~ӹ߽frt=ѾmZ8Mx" +$!ͷsy cI96-g>Zb`eG&vS># H /A"[LgO^a"8, ?ϟod ,!X7͍z}bݵ'Mm !\?VtC}z[!.g3~p[y)nNVp󼼑JC1W>u|7oIG3%ûb_RPOMPޖwo&plj.$͛e7Kyϲ*Ũۛ7N-f3ש`.mZD|v{mӪiy%ג-cո=)(v{#~ޏgMo1[ + MF@cE.p[yw@OD뮎ق +*M, <߃w5/XǗgn7̟\VGdnst͸Xьnoܐ0|Ϳ̿(%9pg'`W[//=+`fMͿ гi .5$#2jt|ǜIQ] 0|9rfRyVɶR$R{r#Y{F{BOb.)ťOXJ}5l 3ޓ":)9W?^'dELbɘ&o&]A,Cxr)g9uHPG) DbWT"Rqo-}Hd)RSv}w-{h-Cg΀J>Myz|9-:5 oPIsIyȣT'ۙH7po9%9?gD%ab}3ґp_ң?dӅG] 3334ƕq8`}z)1sXGo\;Z)LY0򽞕zJVRs2rJy,Ѕ{I"W@o珸zHh? {ic=i{|oL_?/^ɔT'iC"H_¸z}zh|^&/CMҁ=T~aB"7=Ba^0yycҰ%zH N%y}}~{?=[Ա O{:{\J[ÇEڧ:l_ov룇ͱ:̽;`z܄=kpt<-б&=g][%"-sosjE +ᡦl\ sk-߳@(q 4w#SMEes8F-օۤ;^5'e{6Qm^L;RQ+ؼ{Ű}ZK HZeR>r^Mx=ֶA(}?oƬ}͠쇎}eIꞶj#|,«I _\OI5mv#L60x(:0bы +zϘ~cn+)nA=M@=CO\ 鳜7,BY"LFJ}If9b,B0CMЃ7LЙJC :L)]fٟ zph_㏵ :ԙW<У~1pdPRnsp<GKa9:Cf`=O?y`y;,9 nWq~\q':ފ nW,Ň|ahu}H g֞wFÈ9d>2!Nsbk l?i1iM9 lÙ!9ybg>cypA GmJ83S1m&fvVV0QLyu~c7߃М=6S1;iνqKʹ:wY~f{O[ ~Xr&=Oa277%?D@ YzvjPrJxe=v6lɸ%'`9WrU.9#ܚ +18k7Ǧ̩wm?Sv8mkd5jOvn^b콌d=F籾Cj>=֙yΫlz]MD'Gߥx{_'u46 .VꌏuBt-fu=<ZU=9ge.gCcpKy,6^GJY:v驠4zT(YTmLqEʗoK0[;6 zd۩=ڒ)X?ϩS%NI!9Ck| =xI-&۫^yHޠa j0(o?`4oS +[BQ<6kq)ˬdjx8%~i׀}v}ʓ9p8LAir=)zvYԧ]֙$a/.ps]|~ +e]mCvpwmC+^WӆDzHn$Uw!xDa l\ώd݅_h89gCSmNOl_~i\N_T'E$n[K>AQVTm!e2,DA- SТ$ONʣո` Q=&( NY쇇w(}Lid6,{K+fOK.(~ ӌ?v3馁; SjVCrQ?-1A_s2p&9Sv.- (W&ᐝTLNp(C| &p8cm֍4Km{?xUFNV?vxloscBљhR{$v- vn%9˫{ڝJ}zG}}w9Z d23d NRlx1c[Q,}/NHPUŗ<DXSyH]f>qjxy?*LrpC 2_c:k-i`xtEؠk^.}8GJmzmu:p,59.bmMyg7A%΀y^g}%Vyo/ +=썒L',"*wp>Trw\kS}Wb|S +c3I]!ՙ:M@:[O75]gO;j`sj*;1~gpu1 WyoCvow=1as!qVV1 *XMmxY}|FRQ|kR5bߨtB`ö0܂rF2w랫,\y{NwFPil~n4^Ϡ*⪂L5p<#-krq}";)KH]5V+\Gl@1q~-UFŻ'K/\n KЎц1o<v}u^Ly%~i +oߞ[m{ccMGiz[f.ִvզpb|n[i9yR& V l2 QVT]!ٟyxP[1T7>n ÖT o7{ϚV!1xH;8;[l'1Rs6C92FO|dPY"H$'.`9c5ܹ+E'Z6d]113'e +xX8t;Uy&$ھ=qcbIO"p,˰P&?ȁҏ,ŧ(|WY/͕ +\w;wc #3nyUA6P;lLP]'lb3{DŸG_wy`smMA*!v(|{>r3H^T!qjv'D3Dj{h,-l6A6 PtScm) AP 'c~EwӶ +Ű喯zt3016cnOVh8nvԞK(ti\3(Wv䴆4C?@mNFϪyRzPCܵCJ- +.v!ljeně*c͍RnNWCSֲ#97-ݔ +xܶiA/rTP49]F.ZHk?s,x/"?L{B׀^Uq2U}?C> /*lz,0WjƑ*k%9>.(5 oK6{x܌-86[ew}6Ҙ.aN f9DD4ұDŮ6TAo7&[ntJRxb?6B)c˟!Űd{6&z.3B~1Vn[\!ݰ-m +xR$ZH TH*=2w.pN.1Y)JW/xNyd!韭[uzG 2S-rH$l˵|FHF J&TGag<1FS0lllc G{9M̶(ceMOst̶!O`XB'7>n{gD347]ZJ;WmZg#O5>mǖ"Z"#<1ڍ4#Dx|c÷l8tkN5sǵ5po*w%Z+ +8N6qPrP|_Hx>Jv6R8~3 绽?Ux?gm^ϖ3 ԒSz'c*x~l~ePpUXyDD]w|0[dЏ_0خj(ɣɌugyЍc[y)6f|fG\ӇJEn´֝\$*oEw.fş7pe,GVZL (]Foe-?f|f#^#ǯC~.:}ml2{mk-kV]`gVv0t:|T5?w7l܆}x% (̡/լJ +&.k<ר\GX, Zex]V'uW;d.*U!Q.3I1~_{3QXσ41VMu^661^2yr?Ђdؙ.uzѿAX{xy}W?2RE6s +{JM #]bH|McMcP9>٬owSC*Yvᕢ.X49<~Rt/NjOJ9 LK 9k>0C ƒf4S[Pp_;6]j;?x"$|ؾ24<^jfwPvmnqf4[_=gE6+qf"+Wcl;s"eapu6'OT)V:#Ӟ'3L=1$q{VQI̍`a23lC HFyk|U}m7n/l&Vi2oSE5_ۿՌ5ջ<2,Z,@qڝ,2cm'ߺRxR!5&R'Η?"F"`om9#gU-;ٰj(\sK +.ij WΘ~$$c&Pof|+ ={'UOBylnͯkZr6aW[.+-$'- ok\VjUg2ӛwy[SOWADs Ɂ2gEȡ%O,b_F(""R>x:{_TpVer.dsxaCHdCMӴI<-'rOqsɾsMVZu>1gGsV&Ray}~؈t7Xþw?j7Yz<5lY樝 + xwcAfyKӢ%1m~׶gYhR1(w5?Y +p!idkDӊS*J̆qiD*LcpǏ܉. +Dnok=L벜4ۋit4D{9~:#xscnJxʥ}iU`^ٸC\qt8!Vi_ +Q~;`Yݴ@-͡5Œu +w奞cL-Jѣ+0yޜ|n; x5nk^1fF.'6t34WY4 4,y ɋwT@MU;px u +9[$N3+9M+3U +%\M"֍͆G3uS2]{:X܀);P x-Y&`+?U%t5`GM_6w Yr[pZ=eg'eWˢI:˂[,N1' (47:SiH"<>3l\aO25dKՋ,)?65B=yV `!3?6-׈ \kn[Lqo}khozA0N࿟Vk'Kf]¦{7^ت":0ٖH-oeQ&=V =V` B]y>|N\Cgw.hI\61Eiq=)j|٬rxgkY:9>:{I^֑6LP؈=5,-׾V>ي=OD'\'7Oyh^m6iLMJQ$>mޑ,+/Ri  +#;+Ւ@a^g- +ՕjŚ.P nknw&XpkW9+8!;:hsP TeQD m6ӝ`^ G*|8ҨeM$pWҳO*6e4R _Y|cclr2n+o6ݳ1X_ȶZwp{v-Ϣ9Bm<?#:\-եsħ?JSw)oOFCD?_KO٭z`3bpj+:hÍ My\jZSfLjs=aϵ;2"1eܶd|7-|L.ϧδK^{˸]rk&K5iOϷ;798+30 mY]'~O,D%Y4O jI<nQ;`jQ5]-YתUC,+ge;j&;Xpdϲ44e <)k A r<-|u+ kǎ1u!sɘ~Ws+bܙ%]E2 Z|E,맔̃GCvj a| ;6{\9Yl6&rvc=s;vrilcv~|ronL/ìܩ;cnE'i`jz߸z84tNHƻ"Uu+? nr]?[nZG3Qkmu-ۼp7OpHt5aܶ܄svw',nuG +bVsUPIO%I>gMyls+w7RzmG3y"ɓ@gd%ݛAoz@ LW-I.RsiaMl\{YY%: ;VM#NMr|ݻL iGoÈaLVdFWy=;سjhS=A3+ D7~ooӻ> _|/?mU9vڼ"*+bFMR*o덡6N6%Ow^NʙΔDϝNj th>;HF7YQ(j{x;j:?YF(< &*a0~dݮy@%5ȡ6摝J<];/7]Y32b7 2ORg qwMך1n-kgD4LCwR[{;ψ64svI.s!]|H.t{c(!Vz`eO>rT.ZAN܄5gn6tb"c/T7/3 K=Nľ>_nbVhtn +5ZB ސ\< puC*x@\YKWvN[6{|kWZfdMo+տsސb̀5berYKrq$cmC`KdC–ۏ׵3=N |wC[HApGrnWn_)չ1X5ëf'm; PJ}gJD +3}"pydGt=$yYJdj,S?jT2i&C#~>ݛGkr xH#V ͉zNmYm +!ε6U#HwV7@u{IxE0c)-jܰRHI3^zBVUܽR#GA~Ov:+U˷ZtٙL,ꆔX=1V;g^&+r+| xPhvĿ՘qSef*IhopS @&=}ᯔ,]IA?= XIq0Ox V&E=BaK:ό6Yɏ+m=+ĭe<Ҁ&,9U/ɁJ Xc4?ؖ{x[Z+z<_U82掅Nh^waZ`6gZ2.#Si5 <\"wޡkk=;gN}C`J=WkG, C!bq#gӋy,Y/(97 OSx/8D,[eCfEfwjr^e35T˔,3kU='}-㳢2PΚ)/&\}_? *H';t=Tx[M?*>M]:;BN n +@dimG-z~9By!ۨͨi|LV!bKxN72i܅mpcݟ/sZ 'e_ ;n~i(FAp̬6*L=I?س0Ha[4vrrɸu(=m; tǗ3b;Mq|цI/-}UF=05ϻ^߶9@S=ŕ.#%}/;su'3Bha;7U bk+l-H2NIj F~J,~oFks^oa&Ϗ1x| {s-~iP{w)e~ cu?mec! +p#p DiwV EH{y+QiJďetIT{ЂsV'2]Xs X^o[by(wqʌc4|@q[@BBc"gsHqϖs3k'iikTSgl9:skNiƺ ^bCTJ5$Q^u蹉_ת~F'V߯/Z2 =WcFY<=~|mzLP&X1ھ;UGvjiU+b'Y>wɿ BEήJ$ZEVq|B;2뺮|-B_pb>~9&:k3fk#7~w-(-uBF w}I6ghy{pc F#n۟1v=߇ڞXnFZpƂO9-ۣ\MMp3GŏU|CpDD;WQ~[f|- a;B? +8Uo3.⻝;]smU['aOICE O*BQbV;D7+g W.1cPG߯bm*3[pSH1Kq z!؎SXYtvO[᳸PcytQ;AY(3MPy(@NN`"G|&A^ˏ&rgahw'w̷ ,b v>DS*p;]3+to)0pv[-3CG}MOj4eTENob"{z|O^WoS?V偷kW87v.tT|:p0~cc\ $؅sf?A|7dā;㇄hƟ +}'m*G)8jlݫIJED]Ywܕ2-v~\]w}lE;@']qQ&;荒_0pnåZKa.\acM+<߳>90#<8ZX5 +[4+Mk|93GVvż# f;y,dߝ{31ފ Pr[s|+-~"ydL^<.eެ ۜ͝"|iTZ +gwZ 1.SQP6N ͜,+BZrclMy=r6&[z&-mtTY8$)*K'TM^-]דx +CR0chd͉;`$O9h9 G۰DCFixCt2k-ٿ5tGx}|zӒwmo_Z4kP~$Z:!QGm{ p{4N1n/w+#h=^Fع[1R[E ' +R+^ې?'V+/>O5{Eb]<+11ۢ\e;^%Y6\-nN;gCs_ +-@v6bn>AX^IW&6b*#w>)K÷E^:όӸ 'D *۠wpഈJY\frz4wijdCy 4w*gY[9 wщm3)N7d9O;Y>[8.slL +E3pj+;j]O iܪ1b4Nƈsb]Q Ѳ-ye!VvNfͧ5^V]ŠG{cIg5,tt-,:$swn>ȹR3l T.>0ALᕴtH8%Ql&\^4BR)T :,Q'sn|f쓩N!>MNM 'w>)WrBb닸aV%~RpмfNyoeoU_wcTϝc2!!s;6zџ} {le~!vd=pwjHWRds2V#!g?IB~dwPRQRf6 +\9mwt0^~L;0*yꮾ9r3Mru}N5ޓ$Lyn piTv@c(wjsWԑp4++c}_UD- ]TZrvd>ɴF/R&ۑ956Ȝ694OL<|ryiY&j|dGfu;] 4RFYV|s;Rc׊7ʽ|8t=*]%Lp +(@Ηj2y9c*9Kr[>b#xouڗ"7jdD{^dj%rU] ͙0Gzw`TP5-;Cy[U5.xҔ4z&FEϭyU] Fd|gܚ e +O/Ӡ; לؠB>c$chדyPp/fYW,=~Ϭx>+wOUU8w3<~5(Z1wȶHӸ]UmA](!k\ݚΌt*WfWbxBw\-Zm OM}%Fq_VVqs/=eiX*\;Rb{IQUWnQ˯Ɏ+Zx\L+˕<ޗ_W&g$L(LzDX,=:F?<(;Ԧ4`cnl?)<y S!(&"(O̺CѬ&Se͸m$9-sM5Em|mE5SWh^-[pFV v ٜ +|$yzH OI~Y5]g6ngvg +Lvl.WՕLA=;L4?rx/ +;4le5->z8*}FpSspCc%WT2g;kŷ</Q?^whQzYj;H'rspz dkrc%"wI.x>e ŲzgbY{kfgbY)x+Op;!@v`X=N94>3՘ˢ&l: tw~JDz{+]r<}yG҅M",߻M젲罾˷Ų,.sY,^-PdV8 eԎc++L܃1y*~7*˓s>g>;0N$qLVSaZ|܎<:nPcdV^v(;"2ept-kcڇ4@7^Lpndp+b=ɂd8nwi? n^u1#k {w\13!46p`me_"{oX SGpso4(ӊ޼Sۮg:OQ;4?.mUEudZ>[c8E#J]f@x=i֘Xc1eUl2v8!HNo&unnh5V}8Z]l2sJ)G1\Fc}=XNwötYOs +97P&㧳Jgx*wWٰK~r/ G>?/,E8 OxNgf6}?׹_%Ůo~]^?=h?kb"3; }}s'aVZNp*瑶9w-pOQ}pL!Xm' ǸmE[8V&bSdb1vR,pGDJPTΗ.MxY3[ +M̋EBeF:Η9v+gSГMQ%nx((UnM ۮ0=hI;/dA9b g)1/8xgv;fy9{NX.d-+|sm{<#$0besGb TT6޸ W=L3ꀞT6od5imwzE[mkL<2 Sζ2gwiB Nq2k`lo&6U7`;MCե7(*j~BZ}b)?Tpk32kU DoO!+颼h.sP^96hNm W\m|TPn/*-/(>9z-Xxߔǯ@KSj\=7'YgXo\9V˜ +D„*hsoAeb|´(%~͕[<ދQA{Nޥ/o'x0ލqKYpD:۔.}aD b>⩩}b|[zu ^TEjSJ+bV?"ڔ+\{6蛈)&-OeSY/) +5n:p滜RݿzG7,t߂WaKjx7^\D8 _5r"Smpi9M̜ڟ\h y 暑=H?cE AF'#xYu\tĠXLս|PopY:h;$Xˮ-שּ +Us|OP4}?;8nLǗkڿ;e:\yS18?Lx&ِϷyq4`y~ o싕 Ph/ҺUuq>3ńDӝ:;š6}JY®O)Gvi#5׌ǎ҂l;A2_D'^1 Uy^I5jaxKͷwI+PW]<9E(wPc|VM;*]s0xxr;TΫt=gOJ+z.x@܆;Cς\d!^7X5&saW"m&6>Rzw㫹誘6=3Ɯ}hmE^-W"lߵkʥFiYXu%.Җ - F8 "lܾ*A0R?2A+Q,Nj5qߗ)ؖN٥AEwNsmyUkBȇyPaIR5&@,bwp*<9EM Zͼr݆VC](Xi;GP'ݰo)gmԖ񞸿3,.-&59CRBA1>sz@U%O`A.8?F]Â5 Vqg̐}V.O! ,>k'!_ C4^<V]-~*>#fv+,t{2%}O.IK8wfٓ̽ j'OO\WL^T=c?\ E6f jX=5[HaL If=Smq~r#=I5A]a`ș2MꞥN)^Rnݚ+ݗ<2@f{^hv|X侤(r ;E1ZNQsi&{n0kux-Q:{V k%wjƶhm+]w.u"2N G>`[LJ2ս7 >b+:2H.V@=.@6cKxdw7=/mxq. ?7H[U :/C3QdЕ ^3&w5R<H w^]Yn HkQd ?ntɉ  f4zkځWKY\IV7*>^g^C V#P30Gx4]=$7>K]k$ lYϵbK@pV,eBI%C+/Kx]qeC=)7N\OP N<,g9\ uE6jTb>ZxEޟ.6wB(Ѯ"óNFXΙpւH@! xeLRW+Yg )<4= Lpz*E11n\kn $,~m+d4 >Q7_Ƙڊ{(=P:==4}}fbԖvR7 6ӑ {9<(❾Atl=J6xB|'2N*P<q.ᵒ3~ _&.V9Mz R9+ Kmip 0X%ͅQW' +O1D]Ot?p;K,{YɊfpG; ~gȁɝmm^|_+#qq(G1]uw"AHTNBM[bӕv2{;C䴪;! 뵿o7S~_g~_~w/?&1^}s +:|a 7ޙ3cs|}~:[}n0Άt_Ooߟ_?I_w_/7(0O//a_ßOO2%E +endstream +endobj +1986 0 obj +<< /BBox [ 0 0 907 405 ] /Filter /FlateDecode /FormType 1 /Group 394 0 R /PTEX.FileName (./figures/R1Pipieline_v0603.pdf) /PTEX.InfoDict 2134 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /Alpha0 2135 0 R /Alpha2 2136 0 R >> /Font << /Font1 2137 0 R >> /Pattern << >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << >> >> /Subtype /Form /Type /XObject /Length 4795 >> +stream +x\ˮ$G®͈5xDM%@BdH  %/2+b1$sշ4LW"2Ddd}V5SO*sH^9j\PI)y+㇮9y5:yR5N2釫ZsԴjcP19OES,ZL'<?չюѽ0ѮB K#ѩdӸ哬 .[ƘC ;iuSyPoC홀!ygmݓw {<ޓ)vnmmj\jZ㽿w͇ͷ3Ӈ͓n76; NzfQ/(fF{($3f~΢:bˡ |qjN50d"PTu|IhS͵ʙ`/&X$C'Jr G\æݿݗۅu8 6}$v(D\ЮFhsrVy[CHÕck rht* )OLC8bzUJ=&i.ˇaY(YѬi + +JZWhв B z$&PvjQҕ. +4pV 0[k& +?zkKG[]¦~  >-A# S]0a2upA` Q ]`ō֮oBW;|hiJ~s뽇1^s8^8)ag4tH<6/atu C h c݄_i|J"g=H +R}r.1' ۲uf5qaīIz&a?]۰=7,..d3ӡÝ01c>o>y*fx9;$Kiq@wDPܓw38( h{6-=3Q #$dc' g3$duٯ~|p>)u6yI :e <jDc H'46w M!ճC= *ϗ,T85pÅuX6@ڡ]˾{a?o}FĜTr^}1O,bV~@K\#fG_>$|"dޟ`_c܇S?]pMYؼFtt{V^NVt0Evܡ׈e?a`4su4X.bӓ;r%U 㭩J ar盕mlh睂0gxv +#@ P`OoKMabĄPrsFޯelX! Zy8g-z$x7ύ&Yf"9sA,4Y ИPa`m*9+O£1:)Ycႜ:l Pe4NPPn&Q|0`?3 0ʄ +x&_ЮZV9TcPy 6٭P/!huQSy'*PC; +\C:s熰/IQ`'O 7/S8=_].s䊨OL0},œxؖI^u`aq= fDYqV.{ä T80*!%hm36'7 k+F߷p%H}JcX! +%@sͭKt  +tv~Y9ZCKگ#D[CW +^16Y۳vI +ڐ-qG&I`>lj/;oR5Ι[cukc`e+ ,/ZTbubKY]0GuɄ--T6!3G=͇ Kfz8IǡL<[CSY~u|(0׆2bPrKg걘8=OyBU}o7ϲXx]QQMsKiDiZukM6bqmi&@rM2 {}%jG7Vxۺ!mMTd dmY"l88JVvRJKm8NN^Ϻm[F4`ísn+I@ӥp?U\qsCC/讫T&a,d坝]V՟] ^UtM`J|\SO1е`<:ҊZL \c]M)zW%d*fTZE;ѭ\E/q CR7d[,AM}ܦdrBs :Wd*K#v-n51QӐ}Em=ӤzA_# +6U/vrJN:nW'e<#PѲ?j~HGJq[LT4{3IAgo&Zf$6f5:F^a"&d HX8a]l-H|'+l7jb6G}xK "B$4,×7TZ"ȸDM5 ?m>ޟ}sSzw%Uߣ+&9KYaޥ!m5JpnH]:`ۀV6& DR^& &OȡQp0o="\-9P#` &LyLg d +.;!&2w^Z @yg\vK;'+Gi+';qJrb 6*/2o]3ۊf8jhl;`uoUz#Go'! vD`K%KbEM|S òY"iĆ~m`4_QVnn$ +1;`Tb&fRw$Uyq<'-_Ȥ x_k_BX#*N(&諎r{ +!I\FbG#9?uQ "#k^5kN#"DI6ӰFea(~}H 4͋+ ņg.@]`p?sx k?ɭHmޭb H̖e hAm3=ŀ!,Q^4~]wWjyKWLnbj/l]펝'd|v52#.okv0j}MD+d' *{Q(b@|jHCyLEx՛'NRH>|l*G 2MPa*`)g:xoiVGPOsj5F^ɱr~M"DʺfM}s\ly, ΌDEbwBkYod* tǚ=vU .ZI#6Le/jh5:ꨕSzT)̸lja*:m +[ vc&,'wA77{;0l_ c +endstream +endobj +1987 0 obj +<< /Filter /FlateDecode /Length1 1614 /Length2 22765 /Length3 0 /Length 23577 >> +stream +xڬzceߓeڶm۶mm;+Yi;+m۶mTN==?=qv}ywɉTL Lky{-;~bR H +(:9i 3.4c|nvt84&U J?!;Yn^I ȞMѻP/(O_)Fzqisy1z9?6wgO,V皤VQ =;; 1$8-- h#>=qRf(b_8pGyjԛ^ _(X|A3 񒤸oc'&Υ3F;OjCm,IJ<f^xZmW}Q=.gpX9%ק +ּY8POF-wZz)`4cСޤ{6׆yݐATg5=.X㺱Siv#o`#`⏿ Ja6IJ x4"K*e7 ;BImuPvw,mA>7TxE 9J'S}v2{7mxlKD^[l~Nm2܂x7zىY+?$/ +\ 'FLAҨj&zzN?TXrN~ ET, pE`~\Mq!.yPٮ1pKLSr0v$L60aU:wx, J:Ƿ*4F@c&/,D'6)5WlJT/ gڗIc#&֖]}Bk~+E~4&TkM‡O'"˶I!6Ii_)I/@RN+>C_7dsR0L3|&WjC +8ې'HQdA#OǡyzqIM{AͲb{(;żm _!}BwRkkE2!Y\Ԁ:O`sD~=@#x TWbNw3vs}%/ +. +!_dwj߇Y6U26Z}2LMyXF`-®لj-P?R(%⺻vXdG{> X&[!&bK악>?4 }اz2Eh\eTIUbhl@ &sK9 aeJ> CfQLO4]xUdD.V"Ń$C'ɬKNYr44Bai|hD쒬"]̈́E!/E+J nv:F>N~0,:;-oکx}s\}I߻8a1%dCTE78*-'#S\TZmn"YT EA,g f{)CRFj=AgY +u +&KRd-,o8 +j̡tt0a`jCG2zMKĝ]eW svOEvMZtM!J o1>yb>BHN9D(U<3zP:YeTN!O)zZYaa(ZWan9~HhQv3aqR7$*hUT>< >EOFVgr+~uwMn͚7z9jE+PT63cxw3rkڗjM%ԩ`-b9ߡNLwh!nDҹܷA0Htm*'\d;uIiW?b] _{j xTY/~B*3)0N*}j#X^^%eyN ܖ-g٧u9Ȏ߬Iud RbiO%6e!Eh[W\檂3v1=ٵɑR[4kŇyLӯ'``(Gm0m,خϲfEq3MgDD +YZ;wsyLTZe?Ҵ +#t`% 8w){;;^.byW>< X2ʧkp +B IHPIԇ("3&%g -ݸ-1T4e*Xgh]J4'Nk?/kNn˿7 ?"%ȹ:l7?8rUY>lKlw-(P(Yӣ#gM5;(|LqZ^?[ӱJa;G+2Իfʠ+ЂA/JsA|?y$ϴ)]~71Biʗ*R5[s~՛ʨ Lq3cN%ˬMnݟ&ܡF}_@,aH#3/aPWaԣV΢2(nF (y2gy`R Mma l:/-=flLT'EDˏ"bY]Lyjv1YLA.b{#AaJz;<-߽ + s@vO!-J/ѣͰJɪ_DMt&Dep [V>&`KJm&tVJ +n(2N? ճ@b%hf@9 xRzMKuG:H, mzĆ h(B"_Z+ +h E#Lr1rMAO:{'>5rMHaz)ܕޭhXۇ!Ud,r_nȶa"{en%3ۈ2Y ̷`~.xmnu;,QftBgF + ݁~3z5v_WLQcӔJSarjI߁lI|Dk-, s'xDCbSSXL88_֮A8-@MY#{ iFKSìRu{tBcl<Sck,߾yr!l Q±![ЏN9v_ѝi˥.E75G:;_oOQ40D]: +1 ;b%U=s+Hv(|,NĮٚjDpMa7\ِgc(l'sQu}Κgn1bpRJA) C\0B')l(O`RT + 2:m'kM1υ-?G)Ъf8]h/C]tUKSj.5*l?N21㞡 +q%)#~gBtE{],>cUK%X+Vs x+y ƀ]lJoT Y73s#d +¦ i&+Ddp(-r#y/F>elmG]7UuKg.5v +I6'~USG9h';qeZ > y#=2C0or$|dXv2SyeȎx + +Vd&üM.,VJXڝi@ɚ}_cD"u@|f'!䯱Jƌ cҌZfY:G!d>[0DTjE6o?w'FymӠoļb_ ㋇_,- 3\[+X=ɑX&4)W~wY5TY #BL竫qOql#1˅i-G{ {OqNV/4 1pEhY u-.(V{ 5d$v߈q:!YVlNхZvԂLe #:DL_6EQݳ O)$)V,=GT=ө"+sR U}BIPdK|'D#ԥhfw(hQ{-]iCF/ o+{#&i{p{r(V3[vgZI9':.+S4&N<@eΘͬҺkꖲ_5RkzA7}NN(7xٲlҸJ׎d+섴>X+A +-o |IG#6d16Ts=ur }O6;Q`JJE)Wn){Ae#}#$88uB[܁Hpyha_miZMV] +$Ri|ί\ZB笾vn^bp\-ԼK3#K]n;Ƥ-e2Mes]I'y*3I8pxN$ZN-:Z/1-Xs?rr)yx ֞Fy~Kgtŀ^~G_Ex e Ɵ; mIsQ}D#yC0U$<gR|)6"3Stw-n"%~'xQϗ?'m$)@0@/v}IuVC TZIE*#(':bB%PfIET\K<}?XoIZvS揾JFC~]I_N'_X|aaT_?=n[uHF+z#$g!*T +Ѿw,sX]W}K";]?w, +`-w1戴k\0&(.gkբ&Qdry&_UA:ZJF|dHA4Q#ONcS%k+ *sBguuXzhM\"8XH=Em1 q퍱| qRǼqxш@1wxX1D1`3WuC⧁*v3ySȀ,ʞqHE}ؤT6ʭ;Cng|AQwߙ>WY6*fguYΨLI[j; ŚQ)fS Z2O# 4E}X6S.sq-[UB潜lODrh\-uWh ~UȟQ.Sh' ]Pd)O:cz ǙN"ْZ2(_У^s:33ay; s19CI^\"3V7Ksypc$yj8n)"o$i+7 +ü0;hK!s \2g2cSh78غ6ḲPǘVQ\ myG:uy3 8=I5Psj#4Q6^z".}-,,s|4m<><ኋ3C5D]LuW./N:U./)yd-bhGW֖^ddp ęR\JadrAWA|"Tbo!zՄx.u#KoUsϒQ4UFo{eP/<'vֿ>CIokʒu7Id~&dfE1td}ƃzԃxXSF$L[)+e12I`.w_,'kd[VX>@eԑ4~>a@e[)zt"Q7XG>ƞ;j.I__#+dګ$tW|Z$ +V7P)~ Ex EW_oGd5vLqeBj+ɰx2 VgH„?,z!&sةOgtRzIBȹϻ`}M 2q ìmow7p!'tq|B#Jij ŃC)% {-aG#*׆O7gax5$ HFg? Tۚ1dW|.cTjtʃ릝۝g峸rU' (,éhΦ[luD} raZ 785{SZ>Cƾg_cgnO j丒yL}pV.q<"!Lsby敥ROtv='MIyK^9?PpÀJpO}| ?v̬;MPKD8"ZG6\ԙ7=}ݘu$a:l}QZR휏x2hʁeY^= ]`$hϦcqwx;dW}0c.,~uezuU썞^JeiUgٵ?ű?RTŁTC:6.tXX]d[ +F +LV5Sa I/}u^~4eks\H..zfWgSԎEe)Z!gkpƪV xf3d3mաVRc4Sfu<~ݞ x[;َQQڑ9i,kR mj۽)S/aËztHl,qUW%cUXiVur>Yv e G 'zRQ ƮIX,I(pL0PΰrhkVg"fUywosyBчiuLsk_JffRYՒj,y5XGB`AًBVžCw7$ĿuWh%M4SMJE7A|VŨ-M}VϨTe2āQ4G8b +)l%}hMߊy"` 5nۤOwTG>.W#n>ɲ' +jFiϾ q([zZmC`;N=/1(Q&ӱX,t|"6E9=U*c.Ʒ]R|Ur.M,|Y ͣitM/y>fw]R? Dcʹ _;dN4Pgɠ6͉kRPڮ@WIעUX%ltG lD"]ge­'|W=\}OC(ߏ`RG:;鞃l.a"syR kx.CikUGDfGqUo#K4{$ljbꚠwr@%Jͫ".u}DH8lql%NXM&/knP>X"!E㗵th z /J㻝RC&筂ȻC~+jW$%un_s2LEk"Wst"~Tu/8roJT܇} .L22OU:YʰSLԪjeD +Bv;531tig".r۽uE75iA8 +j=}/yFbb OLǍV@XNo Y&~ -ґaf kޗ;m݈~G(5?)&Ը~؞ޥT-0e{@FLぇĕVc*C#=ӐE·)-c*a\DwV!HIΧm }iCPy]9hI-؈]\GEF +b5C;8,^Ad! lDɾDpY~u;:L]iy9pOV:\x-ouo*GK - { |z@\{3XϩohS,_g1^A|9=Ϥ3E<oI[a:>Zsa(k$zz쨖cȏx-+!qaα=;x&7Cw6t +. ڂ,>F-1FH햇oZ1Q%5z[*m59/u slQ֐ql敖FoNλ +ꇙ -y#ʮ #PSL'VQ}k7/~ʷ4 n > +2BwF'v}z8"yH}8xnHz8+ PJh?Z, }h^vWE|nLѪ8frj9z]Cר ;ױ$ 1Bϋ?@ ~$gOaO وeXuHaLn+UuK mCۊXf7Xp2/SZqԳG8(k8w7S/C'Z0,8YX?jqPD{[pKZI`{tdpW!O]|]sF BpfqnZB.h)b+L]6y:Qh)BI!+%R=fq:1oX3JctDx[nFMh>~fmC%ϓqB cJ;q +Q;\Mΰu .y\J媀5-X4mbt K^+ZS7G$Mt#W~kҧ~=ck. P[o$J$|פHs>EvGAUn5w¢bmj]ڊ kdj@ MfQ=r\v~4e^xshNUjZ?*7!)4OlZR,FSLQg-ághvFƩdn"rqIS(Qmn7{d1 ްnCкic0}"vHIeaW&Id7ߗ2ͮԋUlv~ʲMs}YL߸MdjLJ[.=%cH`lG<M,>4ޞ_*i1X!r`+:8k^9 t['CNR&vc䘦 hWnŎř ]SL>M0+'-\䔢_f|_|܁:yC|\Is vo˹HO"pL#O{4] 㡑\EVr)ܰ=l{7A7 N6\xϹ4cR!Ev"^obAT@PD1qIjTpC͜5+Ȣ߷Nȕ8Cqžw--XDm 2Tx_xՉf9EEZ\1ZA[?\exa_19: +tv=欓TӬْlTݼp'yC]"_ej|DM:Sgn-Vv~?`ۼZ3{Ž6G={ѐѦ15k MYB!ȣ91glᡳ>Vi?i }J򋄑0قPCL߳赝8w3]iHfNuL0*A;vݜcB|9s@{YDIF鏿_~l\9;Qs$|?]=+S/e?yf*u2[=oHR) +4; p&C6{OѩRBgi[ -6ÚxHe2VdYIM\3NFSWoLVRެQA&˚f'p:P~Gփ\M=ۍ;s gs8ͼ?cfx!l(jn\OXbP|a< ؕɨ 9d(S(._>Xr5+zt{z>뉻@U(6 ]i:rod +:9bwI7?mi2kQ2QtN0~s(R`l> }.mA/qc0f!r:L ERIYQ3y*dQ&t׋E@5 Gw@gDy۫%܊X*#L%i86V,.ׯ3^sX?:PIYm^T#vcgհ {%{K=vi:rb # m3q ; ET"| u٦*B^{Spw=3$1]"y-\zGaZr_. ϑ0Zo2f/ bf/*ads <[Ys`^WSs.lAy>>k3I=llb+)/MymE3rS +-7Q4TiZ31_E01*9)զ|1T_8mu|"[2' Rk{=H5. kj/FWZcKu?=5OF$'nl򀘐^_,-,&7{n0ȗ%&T kw p]- wz_)DOf<Pԕ+vqUY@p˟-IE)!釿.SegvjҪ.2 +`h/K&:aįhZ2U! 6_@.~wX9ۺU5V04XQ$8SH#s-/՟]ec-x)]MGܨsm,DpEvog2ٕoǏ ~4xKeUhPg=Db/*zu=lW?X7J<8lC Ӕ5 + >:)Q?2'c,혽3@Y$,(^v D=~_(]0K3rbd%vq#\]*Ϙ] 'i2bQ|5UM+-Y_nƐDޢΌY h+ +cPC]%է9:UZƉ\8&?4*(SI ,?F^X$L,h"+E pEXԵ7W'So܈:G ,yNƎP;HPAzb* ynLyi<*Ņ.c +)5 # \E ︈fhU*H,>T4 /z}fr +huJIYD;)mw0dFC$&Ǡ^ : S9(x_ex݊AͼrΌbZY(0 +7Lxul}*`~ [\v}i8*>fRJL:<#?ۡ ՚-7oANj؝I nm.dFؾ2k'b5T%;gmY)#M陹wkYybS6]/'sҘ=%5*MB2ik_F)a`kΞI`ëN.}q7diq wI؄N-Үg_ ~1eS)П/RmQXow]5ZG#IHFf`nN+>Z .vmaw$Ev*SK^Բ41a+-evei7Z}$4q] RaAWN5=m9&biAvGw]2&B c?lYuJg )'t]ʯ + yux{I뢠;AN:!T{=XDbνL +b]Ň%k{ÃYV/؛'6a0c)ZAT(6N>p\.e%y?(DFx r|M) <]ro#`W#,fw3eh0h&Q.Ӂ"a_mP p좾B\$VN E"9* [LSWOe[c])o<4)oCJrrlyb0ɽ1Y%#nM* 2IDYd5fL1,/a>朳O^/|)7WQ{9hc5.D}vd|\*m`\2UĽR<A_LK|4wG'Ia^f%'pirR:k7ͪѺfNTH" +jvr\)x.߷$ך ?vy'9 =j1kk_=R~Ͽ@l%=aV-[yvl*ݷGv+O$Ⱦi6G~|! xA.GDmݍ-5Z6GC72uP̄[TTb*"jvC+ނvB{ld}OWhce=[nNO0(>*9)jlT$aTB(ؙ'hƥ՜j! {^Ӂf:U[\6N, ;Ĕ|ۏt[BM.# ,_ӋԆ>qQ4%?QP +a/ho< qB`qm+'КS=^$"hj6ȷ~B;.]wΰDÙrYd@Du8jAzitӓ'ph^HmjW&DE%oufht#׏Y>ZQh>&}HhׅTBPclLM;>!vQU!J%h0? 6Oi'>r 59HIӱ@g,Q&I;#_s8) I^q2Le#Of8#X*|_k"o{ b4ImOB{ ;-E 'D\@&SU_:FMPS8o2CZIF c=͋f]WrTn³6 4}ON/sn.QTTGO4/7t +'Jɹ g'! ՘#dιd/ϲ5@ \2izy"O0_tl#! 0l:VInXq`Z4Am Dq'h'c04IO<.WᅥXYbR:WõH@w7k}R&NV+j ב&62q]U*1҄EB +cnVޭ`5hz $66&:tSƟfh9I WtXa1Up)>*ikZf\O,m:~Ej 4fSѷj3ߘ߱<$ &}r#{,I?A>S ЏT\ɨ)0)LѓA}\J$@+ԫ_&۠lK|{_Ft$4+c-Own j '-vj}snS){})eg  $,3%*ߏfAIzu-iQERiBbh#\h=EA{t:Lsqm1mbQN0պk_BHIlWҎFqUAh?U*ts¡M6LEqs.*:yk+91W>GG(n7E?=qz&?Wr\B~W%03BIbdm< +leXhƉrbm?=`v:6:WH!`d.U}5r dK(ʼnm +}^V^[mT.GG"ln$[DI A*_T|zׯwl >,;<\v4[B!2~P4 md4.# G C}xAx9Xs-52Q+n G,lZn roϼȗcNqU0h'2_¨0!xp}ƥ6Vda:5'w^fOeiVz-K3PI;̘צ"eD1rtu-01]OߠfB]X-f3a3un^Y | O>>)Q M;nՔ"0JGzefGmڊq{EKpުnc_Vr8jL !H\:H/z( > *st.*8;Us7=TB7W{}F}gUU w Q>; +{y߻NԠ)PL7efpث{IAf!zJ wֻs=/40W(3o\t)IDT>35}x|)cyRᇶ Z &f+幜̔Ͷ)m'(l1>6T3:p " Z 9'hK C/;D^hJU,3F +&,Ƣ _kW5O -wvQ AsB4eth.+`o G9G6 +b Qv~)fBnuT)'ƢB}4yQ_Ӵ::_m[PȞmD>m|/Y>1\?Eo i7OӒqF6]Kxk\cR]nɞ8QՒpwklUj sЅr#k{\`@ח>ڸ9ʡcDwqo׸s `29sJFI.KθYD( ;+w{F=x!4y.Fߥ/?ㄍ'j# JiuCl&TމpRJx/[I^ +yUoa0ء_Ո/ +KHou?禼&et'TkOztMJxO8"&Oo> 7ș4UDcOZI6K5ձwNXteUKX$N0DTDb +l/`'8.e.9B=_ :H",z9]҃HoT9|+Em:(_RͬE]$sqF_~IKVWNΟ@9]GӚwi]3.t\WQ!<>Qw'jq;1dFW HcI$ +{>-{x 0} >!\UfbՅpܳ;9Ia +f$-K~`Iwzn Ȩ*Q*%t?^b0} +ݪ/ؤ,4Gə`nt%Bfjxsf+FSBDDݫ*F2U{ 6Ya0 07C PhRHȳ&n[`J({,x깸fL1/[f&>zaʷ Ԇn u(1"rX؞oHNȩTI^0Ԙv6~rNΓίo,*Z*U{J- Oר%;=7k?M;Wjkz["MCg=L w"CgsqIr,4!Ovk)08躘 +Kzۈv~ז aȡHqލ+zVۮk'"Eے+#%j)7ϖ[ſ9Ͷ+kڝ3^Yz,I.lٗuo_ 5Yl#ոWClҚM&Y iۏ +OsP0(%YGkgo©ɩ|sV[4H:r9EVa$O-c_}1*n &&D^D~%&uSd CH/QnX[K~w9H!edF-cJ 2qlj0Kѭ~60bZx/H`!B=_tEoJ_U8'3 +gEudgWpOAQT3PJr_fA*o+bY-w y-?.hM؇(1H ?VOXӜ+;]Q,ߣ㋊Oe~s0HS_{ ?#6맒^t-/ލȒL*)xͳ*?"v2r#n-O"O1pY:sG]MDڜøk4ܐcP϶$ R-"@Ǣf99bêz"qVVٻDw*q7vBT7%X7hF䄼4&Û' S}( \M>*ٿHd#Dtɳ?&Wb^ǜwZjܡmuu3`S@6֖6Dn0HHa"bh(haClv +endstream +endobj +1988 0 obj +<< /Filter /FlateDecode /Length1 1616 /Length2 26616 /Length3 0 /Length 27438 >> +stream +xڬeT]%Ӹ[pw $h; w/{Νug~7?zTٵYTd*L&vF );[g&6fV~ +hbafg5s!PQ;v@g?@ dl|||Tq;{G 3sg_ :0OߝNf k;{_ 0ĕU*Ih4 [#bdma P0:vXlM,)͉/p[r7b؃m,>,f@[=pX[C_Bv#l99;;Z;fU@r;YuLFSҿ0@ ['3\F 5o`pq5/G/?:K@{{kw?9X8;M4v埣"kkj`c\A63C`2E`Qs@2;HD'k yR.J@пy\2[4#@A# +Q[r2Idbll0ZӿvM[-诞|V4?\ [D2gQaTja(E.Asx1qsy9;_ Z+-:fe53紨;mMimWgo@ cE;c`Ԍ4Zܜq ^6ȡ|jm +÷I6}9^kdE]_>uA ~ rکVwn֯;jo0ēptX()؝h`' G4{ cI'dw /\qOF,Zemi?)̶M!7kc:9Ծd(ѐL8KCwl"~S,df@e Ǔլv fV:IA'n(cXuI=j8z/|ܢ(H'G! [U~k׀eI^NeFVm +|@; Vq3qA:/Փbq,X8G~2pT]uAztD =[< f.&Ny +or2]~}'zt +zw\VY5sy'j>x=v0 x[ +#Vnul;ǽ}t5ꡣ9b}MkKUeWo6j6D@-BґdWC$Vֱ6=aL?gкqE|iǶV/I۷݊7zEdt7G]gI.iH4B80+_\kAsbX+c[1ت([aR75Jhi,]cUv5l}Nr^ꂅ͝\t:FIG6`!oIv7 h Ԕ)9yV_] +oH&Pj.A~b'ʺ7Um]H-RDzBcӰMX.:JKgv{"+hu3)%2kn#ViIy\v?iheWxoiR:ᾒK0ؔ/vRhVD gcG bX՘~2 ,!mƑIzXUc?za_:E(U&IۂgνdcT>,H?\ u力nBepsԐ"aOdN53EU+4d`Q50ѯ4i}ldom'SJm1)5d7qtFx:vC" k\>?jdS)R٨Q9D͉Wm1c{ r[_`XIuӍ*S2OC0\x9kkGjHՎ5Bx zYF|=ᤩ8~@B)լ3LJ*iڬW<;/ IRJ2V|ϻnpYǴ̘2A# BwDŽ(]~*}ˉ0 acSx3UnrR@%'.L:cEK|x鸘/Y1SK8(7: C~w0g`H[Fqtg? DьEEl\ڊ잠af+ÑI 9%Ŝ1ەk$)Sq9\rr1 4'ehx;ͷpwY(d3>2D`u`=쵉mؕ¾3k/v0kϵӠ셌0R{cd~9i#Uao䫼PTQ>jQz6ҀCF7T15)n yP剡pZ8S7 }DV)VcMɚ qG~"0:n Jʤ"gߧXbеoĎECRS5Y~dHm]9%Pnұ Bh}5L6E9+kq=5=DsBΈk5zՐt7Ouֻr%?kW({ G5u̽Fyf^aC`}(³7q??Jr`Z}]<|ܡ̖ZCB|Ok_kL>Y8FA䕣p^̱Fo7I'vIzڹFu*[*LpUHݭʐ-jt,qO\Gܞ5advSۤ)V;5S: o[d,͑R유Nnf>K|o +/yV]V!7z*"H&U-QIiPB9l/k(sѝc_ 8"' /sã_0((6l`M"byn-F @[q2ۅӮGY9m@M#s"~֒Lӗ%:( ];(v{{ gHd9@cTi֏,Z +ؓ¶W?v> f:L %9Μ#b GzYΙ[.R̫JEFI-tݮ.kƔ^Eͺ&qNBZ٩nyb.m$qXX\38G[eEg +/ބLobKXR䙂ܺn]i0t9ЄjxNƨ0(EXܚS#PTuqݣ.q+]!o0eQn5wdD +Gޖ0ܜ# v_LuWZܡ^ֻFvA,}V5O 28 +=}d|0xzrPP 9`S?p0Ұ% }B )hSjc3ԑ5F &5 +r +Cr8)YW+)9X=zizuMoI= `͢!ͬJЬb.^[,kO\#Cr1dLPJ_}exܿbEU5( ֥dZ2#:QW::{Sw>`}]O!0Y{j`5=(-D +UUPKzsC %g\ށ,J$I1ňaƢc=(/%Z7O[R=X-e*LQ۪GnQ<,35@CŠ9x ZeTհtKUZOgX~w} I}T> ll[UX/V=<Vў]fu2?Xvuq~Qe( h}=.a㍹1tpX.T9Fxv REw<Ƚ{"U\p or(5kUǿu6M!pXLș^φϻ$~5ئE +''hi #ʫە>E\ԅ،h wAGFs.|D{>v y%y=KUWLם2>p! ldZYB8Y,F>_gpdB@Bw$.͠TuA1+[0| Wh3WR Nщ>R0sQD+Q;|T7|=|gP%nʁ; @[K#lcoMi9ۨO=?TG0$Wr@AjjSvYB_էt1?Ԕzh(r{he$!׻pZ<v"qT~k 5]M;TZ~g=ӯTe-̔l:82w|i^Z^Jl_!XONmIK1k>T8+' =C#X9@00ESW!hֆ׋GP*HK+&x'78\ ƫ42zPF51])e;g'f|y#I!2M,8|bIiWSGuF۰60x$6uX'i Z.^0T8FG)w +I42.^2EXHQI<iYtۗF[JNTW>/0F~]˿* +Zl2__B@rňTBM9;ZWD}=k d+ۻЯB2 Q*W*FU;6b:ƿp V9h yY7F;sNEF{Y}xNL0S%񔚞C10 4<^ʪJF 'y 0āJ}Fz9gH6,DVoWs(3F+A'/y_͚ $NDvPv&@DVMΞuȥ+B + GCJ>Buu 3ZN:%Ѳ[ؚ#[fˏ1_ o&|3$90`}LnxJv}@6߮/=d;`s mg-wեvϾK.(sܥ<5ۍ79[12amrSR5\kH/1Dzn 9 Cً5o1d&x:K` &?s]W덤.LUV=ylbZ U]re+ao*eGh179? Y@MGX CR."8r6I%]Tb=Ce -ټ9l^f$atr-Wrϙv$^{E̘8Vt*>?7͂TvcX񽅞vF(jERy2щօ݀):IC󵆔qڡͭk~@㒣HBvԊd P'㠃7¤$Ǜ<튔Ćd*vkz6g oy#JBo L$&y#aWb >ivM|TP)3E.r 5ȝ\numߍO*h$Ӽfo|uN\R eT"e^Cdp|_c5)摳ҷlU 0F> s B/aPɚ"ش¥5M8#& +0)#XGk| XL゘`1KȳI]֬.ETqQm)0颜Kp+9J? btHMd\U5}l]瘉pU,C=tEvvQПE,_T|? nxֺr{LFbxwNpOium>/v|Dc7:Tag̶h쾃_'#Ybp8Ck-3.(m(9>G\.369Q#>D +lQO2LNsMS%[|3s-[pu!g1;*JŹד^a 0i#PcH[4iL֎%:da?'%iՓCP<;;ˆҰ3=i%u4VP._f)$LYɗ-b1@Z{Ww.Ps= rGw*^a[&3e T gJUV/<5`E.vE Jovd0|pRh!ew%1R/ł׫wIZtlퟃ6~uY7~V*= vEgKMk4}.tCQe]]ݷ2V5Tq&V;Lĸz5M DPhiǞ,*I߲?fDDg7Z.7B"{S}$_g$jg y39ƶA Fbl\8T|N]mV.(..$x^ }[4p32zKP@HGJvvs7gہ@4@1n2I,喣^.}ּp>"9M89yicu-X1kRk1=`[?: هE+DԽXهXb6c1/UNGxݒC FIG1 Q S֪[ej![2AStAgxyS2;xM9:&h̍/x>cbAWx,ͥ%-uhTƗ;ZE-dwtZ;ˮEH'_9<{9] w= sAA p2=:cbi+ش}ǵ ߩs!7Fi‹&7m/`yA *'^ YOVm, !Eܥ,oq~Ȣĥl[צ?}B^k˦E? ƧciűN';tr_9GHb5}G'[`md]Kt>NXvޯ=R<-曒moKldi}]1N>v +j<{IhWט+ h9/ :O†re<~V{:`rjݵO2;!F.)R+e],i&=V`Zk4UB=|.p8 EV\[>n,E1"&۹ޞo#X}aDYEVBIЭ@ ؇w<@1E0nL!O*WUUc\n8P:N#XudTKoܮ&naȅahxcm}Ph0/|:ݟ˥X0`%-­眇+]Ln;6թ< .co2._] ŵվ~]H"k8rA[L{د 0j}u2vю7re^rS~͟%VqX3v4Y7N?Dg OߠD%j^$:ݽ?6xRjE| $kZFg5*F=В#'Yrv'|rL؄eyW6|UPlmTטK ,q7x\T +؁UUa2_kY`2 L K:/1:?X⦐+ƈZSGMO[=1pQUc +]&BlBk[=nv&mn3aOw  ݨQ< +D(#TMRٱ^E:~\xv)_C~edQP3ɶ_N[VXT +^_pEPy!(R>Gj -%܃:ZԺ~46oxnB! 7\E8JjID* +yfJ=;^HknN׊_uKzks_yu=>K>Wޮt;$$,+U4MM$#&Vѵ?C}>=0FN;kT.+B∼UbŻ"VS<;1~~A`Nꛧ"'>̉}-;nZ7swnBXayv zl_ ֑jٗ"ѡ>%h<4B6pKrsrYs>?9,=yay"MЁ(S-1N>3/%'q ,0+[k?RrX1}U +I +3czDYő}{,n4U'TcY~ǹ`fzDgq-'9LgDe*=wOZ¨-N<}$A:bK| +|}ˡ$q&ID?a6vɅ:7ujOU n={,2)ֶ܏z2H ݗZeTSຫECVT/ k 0(=2Q"WVŒ&Xc7vQVb&%VDX5C- ]C>ޞn`P3'Wo4,.12= |3k\gFp%] E[&kt+ }hLnb͞ZI|m"ְ ! +>͕1M8ơuvtm:#u?ݦF=b[lB3OhZR.3\TiBAf@ +ajmgoSY-➖<,.FND&\tU&#w5Aj|h(χ#7=59΂\/ycoqSZIw^F5oEMRܐ$'o7cW:~ Eڽ ܖ +OxsQd.GE.i~>5dsfzeBgjk:Aducapo \~^$aNY@~ U]9vgv\֖ˠXLuhwESd`zHěXXi+@1TYye.NTBmsfe=wfu}cqcz/ҷ}T0)ZRJf|}q1YZկM0 M:/ɬO&76>`03wQl@0T(E23{Ԉ$M%f9$IHM*fJdJ6}@]`e +tդNHv]oL9mGX4#K u!^zk8S_##sټ_]&+xS@]!yY4t '“O"SE%(>cC5 IhRw0IZcF~_ew`*|APϦY%i?i;?.E~C;0Tuþ6[ +7R +gqvҼ_DhntҎZ=IM,@)~=+hߕ^ hB +*Heǰܣ>^l:eU+@K`kAXL@#]7JE*)S8t;E";IW)pOyŝrŜT6)OL e} GOHlȢ#yuv_u^L32b#8Knm\T0rǨ*\G2Z#[J3tu-\5h6c[܏.Q 2%y<fS&<-ͫI~H"*~Y^ZRiQԘd{V<@)5ܕQl~{ߞ;bqMQȜ!lۋYL Z>~S.sIJy7D}JY^IWC'A\ +7G6hRfTwK=7E8|HknG"yDֿ4ء寑LVW3E\n^BV?$K{Kw/!7^L@YS<ؔ7dhX(= Y0$A8Y)S1}[ҿ͒GuI~LI- 6dǴElɀъ$hᶊœ3]A/31( {bZNb.(V1W*~2AIuDwՏ4%*5d, ns$ZU ueNx=s#$ Q x`Q5^RH{5kw) 4$m\{6S+,ىue@ki׆YveUm]~:"1L\*P`!K64d,|-EAH ChKdΐm2ni ~rKثab١wg";۶/iA-iT5W ]d _VazFF) geVOyWW]!(^Wx2U?khEzS mL!CRFUr\2s$ (teXoHD3xU -B7A:Z +lri;/tQj5ǿTd )ЫH 1~^oQ}m<\n,˘R PqM+`6VXYD؛f)FА~/ƨdz:`d>//l#l +TTIF^Ɓ8; +Z|kxש[u6.@``Ԉ*ȸէ/.&c?Zڎy5ZCd8W ޲ 1ZpQue\- _.fЄBKxFe[h[ { A.}$[$VaƑ]>y:ertC,G$aJ(^,gZ8C JV;Ag;g94#hC~^ŝuO|ȊkA az^Mh1f˅2e>>S'eow shRGv4.JبaǍ :S9]8E>&}77e0Xo?]_j+\}k2CG5a +=3)kCFt(?(FM|lD+bn2#ԣ!r?BAtX=] &u&F[L7HuXv&ص# Vrj#]hfcѝƕ*bc$sc*y6 ,T6ʃrqk.2 ` &RLKQT|/m4ga1&)~_Anċv"tEJ-;/G;-i[BkK[5@$C] p2HƥPj_̓ 3Imjz,i9t[xy3ub5ernz[j 'm#M\Æ,^}?6Q +iD`1Eym8ܸo:ڞbTKWr!Qtecڢ˻Vihjz?P&eGtv2R:Nk_Ml:lB[-5E~Lй6;$fԅȷCctIg+D%f#z>#{Uh6jAQ%Ǯ!TYҎt*Ve0ݶYu买%ZK؝`~OLo"VŃG,q_KgE݇,?vpDG#H^yU+ۅsE?1NQ#5Y.Ac\mx+w2x:[Ì݇㻾.VD㦙( +?^ +T>!e% ^R J+$*{x F |bQM\WL H0b},L#pЧ + qi\ IɐS weR! z"~9ǘTC~M޽6fݽa!z刼."eg41$dUOj?=Z>02L4qzxbJww_^ʮ% su ͥv5:VLS:\p:?b]lNjeb(H^DTR=<%WXV=5Ee[H*㜈?d ɻ[}27#1k vȢe7[/bb8*R;i*-=!aJEW[$WMm^a~*b/r9Pbhƹ!b^"F +*}6ir貲$8ݕ"?[7xxUvACxmg Dmm+ K{&e#JٮBW㸿6geZK2#lܩ;n^Τg̗j˝E(2칮0wGI\˶WcAm$' BNEvu?O/\0GU}-t`B_tw:@MpW`6gfդ.( U i(<,Lx&nFe5:_k[-|f2Bv E_L ڛVhtUo<֊Hﻨco1͔Lds%p)9XP%b9z;X<'|`mؽKk:\ T'rF4qCKɲ +f|X#niD],Yt2#;%r蓹9Z%j U:0R'k/"2T`_YL冸k(?DԛdD=[ _>QKq8".^Xy|p|xXvZ60m|&SNUqm>-zYH"_#D?%%)0&T+'kGU= JP}E!,먑d&g"'@\31 +Tu&W[ɦװz!ɃD=mc=loI->]XZC8& 0N{=A}3$gs@T  /06'f)+l/]nv=hAu{y:(96M}Djۣgԭ)-4x઀~73;*?;-3IKݺUXzjAY&%f;BuOAn$i3#K4YhdkoDŚRIM"+1G)h"N|<+mG6W1خ*H8P"}/mSQ4][88DyIL"{ U6]ip;#Ieh`3fxкkzeʚ p[4NZCv1GK1[ܗ 0 %*MHI]aY`I` DRpD CdX's_hm}ZJL[m`e-& lJ|w>v  hBr^愪0=\,ܷI&W榚 P4fP˜}$e`ڌ<jfKA_لa"Mas}{?ҽLbP^!gYe(˖Lҿ`ZXsz% |K +XՇ7%-Y@,,=-dZ0 ;nv׷0D:n +QRm=韄fxngaQtv _VfDoD+ܗ l)!Y-fCD\'zX1DӰ!ün)[Hfk~Y?եF?پ%-gZƃ:|Uv꼷ۊ/ +Й qR%&\Eϟiư2ӍRGȲb#ݪ>*d J#_-^lFOVTob@6',j)-E]#EΩM"NAA|֐].f~6Dk1Z6vZP N5,s\ +ڹe70sft-iW.V)'SӚ˯ % ےl%/\"B#nJe&YQ)6-ir:<3&Xnr&ndQ>=*0 +PڮP<^4UR{Gsh3^i^ 2.wy˙MRI[R'pvɄVzJo@Fh s:>j/xVTy +'}F)V"(cd3cF~wÆ%QbT8$K?r݄iMj0/JfL +*KC_pc{Y;'rI)Û$>PjxFO?L۝xNea_t*C F^])!iZLX8d6Lޏ.zJH[}nD$f%&0hA}2Ƒ.+ hq=CuȌok7q$̌ʻ_­o =;_e"""v +:q.`ӇdEΦm/[`S`r e 3%j]>Z-%VaQU:ow(:C+J{%-ƤZi5Xu%kǩʡEDGV[{ƒ( LVF rxPe:U|Ɂ ӿ^v7x<7)rS4DZ/eo0ƈEzUtqS?jһ(^+q1A H4/nsx#՚tR0(?@T8*XDCtdHx!7 i=+)cZp@|&M"! OuK W~b +l~DijX=$b4P߀ऋQM5;ҦŦ팪)b%9b1 ԶBV:WʽJM{{@hu ȧ_|B:=]}!ZnGsNBtT0yR8,rZ)Dн\ +,&]B3'HE D6.X<掱ZTMihMZLL\ PO:'Ujp)P3ΗxP+"YO_'5EaO: W[MAlBs'Zk)p$qs3|9jAƙ}6B`e]?=.!6d6Q)bM5N{nls(1*HMOUd~CC:oY>jiڂF']&.i Lkw` b]OK" uoӀгU@l_^6r(U>ZmMWq5ӡ=RpjQt*j'̩ l&,= !/:*8ZN#S1YۿaqU!Do>ZG.e: d7(`VkXuw 8sJY*Km6 )Dk5k3\`BZoƵ!:JPLѲ[L3[#d ն믭3-[s'2ERѓkþ>3= +x."u΁$vQ S_!;/g7=c"f7D\ +$Lǽb=нz!y,yvEEHbii6zY~I?P0u+IJV~&x+@+=E83U&)sh}Ф~2GLv/Z#DS/菿'>O=X%a eltE:`" Em'/pfK߅Ś]Bu!ئ'z# /g={OsSp@#ᠰJ;ɡgx::蒕itBl"hZ` #7d8F%-k;"{+8mvA̻(Gq0_ /~V!&#&tNO4Qivw=5y^ZiI@$\Dju3cka&qD7WL2 yR)!Wpo젩1en,4Yl7ȧb[*F8Չ}7?~NRӅTj +g9U@3+'nv1klP9^'ԷxŅ75ѩ"pb +]MZ!a +e2tH{ +%Ts~Z)3NvO8 A +TU?ajf#3PʠWRN?^A~9WJn~{ԃ$ +!4RB_wB!P 3)]ˠB]I;hZ:ֻ&>OK!;*䧅YtX4hS\ e%G[z\}.!Un_޸RѦR/2L!f}3ct8ph!#'wFǽasϊ!L`JoͮSJFq'B"So\!W֩t4`V:L j%vΦfB_$SpJj3߉te6AOڄί¬rWM93.=D:5/@r 1sɆO0[#_ʖx$auQi[KP"c3dN5|n>eX=ۏ`8>aE4h𐡑%G:k#OCU&c٩慍$y-Rz"]֖k,+ݘzmroe_pW+O +Xۼܝ< hC>=pfKX=!}bHObR"(m2T=w+Y24딍zcQ^EH-{'[ TaN@K̈Wڹ͝_zsi:= lHjrV`>* }VUM$D?Z@*~^&Elw^OF JD$PǍ)ZaPsP'XAlDX.AneL:~w& ߕwmguK| jfgwuO/dnZ%eGp^ O, `Q|iʎ14fŕ쇫kkYDTɁi BC4U'z(5ixK}f^bW9*l [k`7J4T9}͎G5nCǟei7t8 d۬IgtG2D?4Ϣ89zE'"(~{Et &ԏtTN9(ƂVhwGŢ]Jk8u%>{ +5ZE`ްmX}UgR<3Nf`$6"8~0о +X~}QX!`ېj.!n3h%zl(9Yjv@ʆȶb8vNrFpZ%NK_=maR)r XN;: 3t܊aREX-vszH\~KмDoa!\Q JDF6zeF)1Bo|!o]@˕ +r:S|V4s ur`8@L1|{IGs Yg8*;ؽAhǢ^[v=XO`$ݑfim{W,2'tKAz)n'R(s oD/U5¼TzWݮ( 'qG(bY24 aǪ-hqn]UL'nPW29#DO)][P=PS ؿwj.`i͚+ d@WQՈya 23ƈaN%Qxairlaݖk7NmFmO~/FM/3#w옍&!/W#iS +4Yz:hQ?RfoIށB( ^h|-oƃ5X-+ݑ9af#ER4aj+?>&Wt6ŁQ3_"GK@~$w^d1AQ +3qOgDd|(ٍ2;n_ :nZ\n)}cniҧb@΋HU; Qsdub'[*o)zO%qrztR"5:eY0Qi84{uEg +dZ_׉HXq79f`m[ӷyqsf0&% {xk/2 8"KGR/t}mgAY$cN;A)-"L6s8ar$8U&"jU>&"0΂UR4ҷ.*->Z'3ȤUF=LgDHpyyZWà…@FAhp&=3ȶ?ڛJF2CRmyR_O)O)!nhQsQr$13Z.>U?^4{Uc"j&8?zbMrueO<$}.E,orԡʧ&GWYI6ҦY{BSZj#7!jû^XIF@74Ouеzsek\ +$㵹{]1oji[ <:Ӫm=UEeI@!&t@ҢJ (\b\&+eôܭJb62% "w19?c +endstream +endobj +1989 0 obj +<< /Filter /FlateDecode /Length1 1820 /Length2 22461 /Length3 0 /Length 23633 >> +stream +xڴUTݶ5pwwwwk|Uz}1(HDL ,̼y{yWfQ[3+#33;3^ `fdafdef恣HΟb3@jdP\\L]>@{ +{ ͧ+3HEƦ6.6Vc{3,#@Shv-mu6@CMBU FXjSSא(K) 5@{=@QS7ϧ_w uue g܁.VGmOWsg-]]y<<<-\\-mOl|:mfotZo7V@{_'I)>tOaDi/s X+,3wۛ~}fT*ssvCUKu<v߸6uwrquWD z=G (#) 9r +3zc7  PM]y`6j m:ZgWKWAR0ԖMȞ/8  +uP8KٗiSbھvݙ+#IL}dQX#9ZSξӕEИ:c@I'ի.(]fipE\G_uxH5٠]2* +ǚrGBQXR9Zᇅ^XM%E#/}۾XK'IXS5A#SuسR:~/ioe=w X1g:a FqK~؍Vz $A"j2H}Hqq]?7glqh +'nVϻKFN3X)KpUx2a5Wpp!'A i?^\1yӥۮM)˘M"|nt|zlU= Ә4` (̻ Q?HwǘEaaV#4U78?A)eÉZ-mBpa?<-&, +/ݙrM @@ӳ4!_NtRw`OBۊZTbBGl&ZO0ذsx۪6X^ŰL[jA 2nC%fk"A^w\/w_ק7 A=r|h V#K-ReYA: fXpu7Ս{ =R =ņ!$I>Υ#v랓+ț͉# ڟ|3_BGF&5Kg7y)A1I2!Gm"rdAmDH=yN-Kq -TzgC]"E&(!:bD}=*u~q>}di'+ JfʠaCX >CDr_j +#av58Lv~'9)cj> >TZ7,ݸ:!Rs + GaO:wma~(BA߫y#b<$q!p0T'ߵIjZ76 tR2I+ +;övn E5.+A$Q-qnh%bl6I~ȞB^I|hWhwPЕ8YNI Xҟ}&E,ܽ ^v0i$?7f='#I7$Q7A +y`%'CƳx*۝rYa<-Aє xČZx9i=IQZ~vPi+f|:RgYWy`o"NOxy} !1V)wm2)lar7ϷtI :L>嫺 +y#KRʈG+٦^)>~@q$HUfONaeDk#*Dr!B;3Rmy[ƗwSX[.yb`-l:r$ܗ/9Y+ۮUtYڲ f޶wlGXQs+x,O\^_#ٽxCOZ(bko|p2L#Ư0Nq11dk^eܢ uUmsA6^Llm,_s!=в@HEN?4yFG +z<,G3 sCBc&D#nk~rdǽr'8=;3-C<, iSiciZGw tr(V ILlo {GɝZtP%f5΅2$-n{TpTIv,-ΪvTS'\`:w\*\ [fo3eO4lu * +<_F 7Vû`3h$M +?]y[o`<{P(HMssn]q|Hde[FʫS>fmYaayob<=ۇA!_9w%4Dqd;4:LU3#On#@l?L4ھ M]) tc_=,-Sn'I%:WoXXֳw*ImtӕL ϙS]rs&gJNꛫ/DU G`ezQp+gōY~Һ|f%3&rPVdݓ5<JElMo;̑֔IO50@Sg&\3`eUq&-ÌXZݒ57iS~Q׻pUd527ku[2T>sVedC:nvCgֵ ćbENf_Z[~~egOmwx"]V_4(c8g%fMkrV05 $}ժuw+eV6KMt!~Vp]E ΑRmߎuVA;6Sz -Xuq%e2tzd}Xb + {?0rx4^:V`$ߋ* +^dx'PsWvZACBp@2nhLRdc&Kc9= za` R)53Qxf(7q;>B8 Zb}c~ jiWu]#K=4&Qާ#1rO(>MQ@n}I>zXO(l.{%5Eg,ounoAxzHHtH B [U'+e@hJ`|^R: eq{t؀eHIĖ͝x68\Ҳ_ ` e 'As_$>Wh.|͊t,-'h= <@jHșݲP=ɀCsꘁ/g3&a +tȦ4ģa{%%h˒O<)ͳ'"1EUf)߹`yn ~5-d .0ɍ%C&bn +^~NϚrýwd!S$Uփ߁+l@GMm %+g"=ƻ|'qL_qg%шkcbτ<;U`ogC5ʌK:(`Iv* (j>ɳk0%2 şho2녳` _l]²vQ6>h`8ZVC7r*A#0 rSM9M `Emdky_WtkY/8wN݅3򪈫S^ KdL⋬d'BnW{؟sMK.D,dutݮ^=zDfQ!֥b`N~q\aaFhoA8+\Yyߌ{fVjudMA;*{>6>0ɁWWt,e"H&;I-T27? ,ypz6h9tXa;9A)~䮵x9n 1oX'P_u޸.0mIM9W9wIv+&*+^Dx<؀x"qrv.4YXX'9* 5{Fs|KmQ!0-ԼDE%3P*dy/؝]<$H% 3vvm⯄+J{&V5DA)oRi_}SmS"wY7xVH!ɯ 5 1{S-BMuYcZOSt%Fb^J#qsxO8N@綵}h Y㠸sZlgX}s'3=COj,(j@svۄe ܡsא^4v~cK)#:vok/)3pR7a\JEY3+5қcpyj& +o[qC,G;Fu8G>b Brx|g0{-@&$bt*-s2fno~kG }Rlkބkn-V heDZ4IUQp1퀊7"(ʮ v1"vKvXNk3δϿ+QE74ReJTeP5Ze g\|W@bYbר#GM@1p)5G p[,:+OqGs\%1+G"!=/b5|Eo5oQ2@_{3kJ|_cGx6$Ӫ4~!yjTrH;H((= 9a\Wm1{R:}Lc{8n2V7g`J /KK_ 6AO,w^mk]+3H`L<=2y_{T4x@avV +C[2kx`ڔ<JW:UZKwL7HQB&ե&ī^>짊3F@( +uj^0q"[9=|:wDk?1kE9km\r iؠob@^aЦ" f!E &<AD)IQkK uۉWd_`z>m +e{$3Rߕ,rwJ~s~e0Yxt |oeʶYF@"ҮDI >m` !s#@(kC}qȱ|5Bc/LvuXD/lҮ~/t]b^\E^ҶTŵ̌7tp8 h rLKV-o`[ۏy9& f +xpXhŧ.QGٍk)0ܑrXl~]*U wQ/q<9ըo5;8ڙ.TlWYNhXE!+M\XѕMtx5?1* jUH1cR=koڊ`Z`NFZ;`U.&uuJX :F7,P`mٵw!Glv**[N"L0< $ +H\h v^7hbze=pG:D^r &я/lf%hռj|Pۦɪs}4YUq,ز[σlK5t +ҋ WF4H0\V%Us})ZQ۵$ƥIiU1DE-9 Q&-ZK5^A2lbly4jaDDž$:LuA=Q|#FM(j Z7(-8JpBLL8Gi^D.7/ $;~}!v I{-ڭBS1=1n S9+PSC<8Qxtmx +ogxKDv`/뵸hVng!;kBuLsH/~GUGlGvQp(칔Z +Q8RI*6i 26^; BAGȩnJd[ Ӯ(N۠LQ_uuP([LJjES9Jak>{?ri>{UQUj &BT6]TI䩯W2bckg.gSS:Ew9lLb"m!Q^a>ܿ?˗$Y_'gAރ\oź4GSف"DJ.K6Wج#S~:1hǩXWy/ÔyR5j48S"_ 7ӆmn|x%k3n$&=N +p~F%WɷY f$` Bأ'$!p֒@Ā=~25$3)^zM K_@rDre"<ynt~ +|* AndN_'sfrwJ"Փ8ԉTґWl\ySSB԰C9Q ՗Bx0-3/F=\@AU 5&k~ê*2}vm0Yw2KU%_ms-&D+(4a]()O4̵F Z1Hme2SZ+M;RvK(tMKX?~c-̾+4S.DƷUF! KZпO6BqOBL+fAh`kvs5= 4hl" l+UaOY3wX4%B>8<޹:^3MړjplUBkGLN|zRsّ/UfCjR*r 5<U +KzZ QkG=}Eĸd Q.{r_:YTIϡz8owQh3݆H_'u.v:.]]s8î]F).I A9"tU-Z5"t}3äz&]Z8U=ҺJC0-4wYq;hE [Y*g=tw]}c}h Mm5jSh|Dв@>RIz̓ٔhk8" miceKMS~^i ObLڰ@nf>QӁK,fh]s#n\jnEu؆&Eo)Am#̥X ̶LzJ*t2ޅTQiG8O阺&+*@MZޭ'5:>^ULb(P4$YO0\AZBce0c ^!?O 蠝Љ.|H]`>nф_+wj,W44uùblViҒ%.XDժϛK=JnꢂNHL"İaX 8'S)"$LaMc S 8agW1cq/zd*6É"ԃG!WXm3[Y#[ϤؕY_ .=6G,%G݆ +PJWh*-X!S{>l6Y>Q:.||ܖ0܊ +G')qF> I6ΐ'=RXE ;qqM] w]Dj鸳Q*[q'{ڡT`g`ZƯFl/"B̷M4A)4bPx&>yl>>p@`͇ i6)N"-~+˔ɺx[ +kA`rlHk\A}~(P݉fߝ +tٞ*ܸnw+O7C@@)w\c])8J ^<+~3|nWJ}2LOӠ(lBOnVW?oȞņP3AlQ5]e@ [JqIXsl?' +r#c)[4L7׼9,ˤ,tZԫtW!r0CDK,Eڦ٠)&Z4qpFuZnW&|3SSz+'RsqbHǙd?8g~_Ԓ{*p}} +f,#l"N G]߿DաGTWf&.XyV]qH$w>t`˞NIc +>Aw.+يϮ#gVgY`d{gbDєZJw:᷺N!ebo\¬z Wۡ^H\>_M63FЧ];^r*.yoi櫡t8Ʋw,wѻ7-ޒ=Y`0AC"oq59ځLf{_ 9jLSGŚ%@ܜmJp RKUMR=YP1 u~yi+h/M ?<}xQ~ e+dh(PT@/Ol'M}fyK~w|̮&cۑb٢˧JG$(YƮ%rSo0Z[k< F +ײ[R@k"VK=1]@%BpU\uBXOҙ\Ux2UWbA$t+ +Ym*o=߷ȘXֺ:|{IZ<\tw7nT>e'-r@mqk׬RX8ц6fkJ|4HBQsWjfZM&7<û}@OKZ9\N46o;įDO[ HKҵGj&0l2^{{=  k"?!ke3֠ 4 +h'LnK¾+E +QYpQj7Pf/TUɝkwP+=\TɻNP ݙ/yZ\u!mW ?F9p_!G3߮sӢ*)cNc#ZFLڠڽqL#Jkk{+giiq=ЀqЦn` z{'^)M988(8F:۔{i>Mk@Bfk=p屄lU+7Ir8F8s,ڮg myιQ52 +;#b v{c&*r$ + STNj] Eƴos+!PaّaQE0MrE+O}gڅ+u hN)~dugC^]3GnN]=hIh b};yTP2#NE +`K5[I ĥ)q/LQR8de!ٮ^A +%&kҼʓbv13~? +@}Ξ?]pxq}H`qZ-ьx'h"+[ A᥎=޾ĆM;_ fG5e%-ѓOF|ԮŁN#Ӏ,}?σi[T:nص!ຩ; <;">t/,{SOSfnh62vvvլVF *m|sޥlD:L=J^w_J34-׏ZLRmJ]5>efMs]HuH1E >NnM,?((̖"%l yRNq^A䰨w{p.p7TD"zgfC["5tPiIR1 w-8+.剴fe5KFG]@dӡprŹ#T*`vm[ajeL3#{/\Y+ +u%fqŴ"deuAsi vtj}ȅb>" ;5vTYhKQMt:Ԇė#K,TFKCKXV0m%LYm5r+`t8OU}q*K"犂EVe(y֚p2]"\3T6Vݯj#r~h8u~F-slg?GE^aq$%)v%_"MY<{ 7YrpC@/srhE|FW>5Ht8[LzVefNٙa#7<63 v5 xo(lC[VUjQّ4۴v?9r h&N0"8Ը'bp$hG߬=_u B@gb}reAA}vh6|؄8#l@Ȱ͕"XXHo8QEG~5#i8pf@`.7O;L=FLbE' +#F.W@t]c3;*iT'Pt/ w6EI#Դ$&ŝ{%JSϝxuH62ʡ,ZV 3gi 8ūTPWྱm\vEՌ]pS?ՒĮwkz͡_UIq (;O߼~bK+@{(T3Fst!bC-J06YV=)Tf8;FtX~>r"j&]x3esoeAs0`Wk患بU|1xB֦V ZڟkS3Ucx (s}y +٨H^N*Q>55`2Hz\^[;rp"]kmT@}  /,D}ݖ:\1W; b߆ܩ-ցղ =[q[NhjRؗ茐.K ct)Z'ukSHR㟄djؤA_t +tEFuoם+؆(T=ДF HpD$Srg6RD!.c#QU鎙!oŃط+ L;ؽetkhφ\cخ$zNx$X̲@亷#b ~} +,4/T7h{CQx&^WROP ij.7@$0C_y4@* $cz37۸$B_?MNkVY#r]=IOkG.kqcSIJz?Y(4wc~cɪA- sS<~6rjswn~L  +:+-wqm ';mҮ7Ut [ 5Fr;~ŁF5.;4 Tչ2@&kƽkW[Kvh)$1)X`F8RO; 4>>3,T@f D Р#df2M \siA[ޞe *Qž#ov`nK@fiϻ6&^]h#1F_{_afA[,fp֟J|=k75c[Ĵ*k=]LQtxѲ7KX.!pN_@7-~VU"cL{.2Xr[ +#I^{FY7ME>p)伓WnsG;5("CNf4V3IdWc持a*KPN _CU!FȮLUQ+X /X҇)"CjOK^j53k_\'prZyO?BϯB+Aw6yumبe%Nu9$W[CM$=Zu4_R MxmöT6aJԗ6 Tݮ"a}I,ȖXJj85nճ} ,SwK\jsrڽo rǠNەOV֝kFӑ0m^XBzUXuAtYPNy[uyJoX(؉EŁwk%h|t6QYd:`ǭJ"02O5i#B?28{{mG=Rtw + XJU dzl8ޙ=8& 图Ww dպw\:xV~5-O6~.ogυ-}\I~W`1̦F.',2ddcq?{~kj_nET},?k' 2%x2{M3&%I +8K d=uƂ_ @ +eW|E]V #@A0~v>vUn]TDvTY(‰K'3q4YOlKEl#g&dWT_di>ZmI<UQ "9/~vsPw~$.9; +.ʓz{cJyxz 0XJ;bBI|Up )}|&{Jx@7U}SYصc"kaH7 5;2f&TuWa1;~ 8U@4<ĭؗ3?_lU4RFJP{]{x;9Jġ03,pF:RAHH#:Z {VKQ/R쐠vN'哋*rK{H A%%L?\*G1bŞK_DMo/mވ*J6sL C} mWny%@٭3I"^kX;[W2:уHVw)Qup앩LXt&c v0Id@9˰dm=5hHƿ|kA1+v\G< EN=&݄3ۗNc hTO20mVB8m,9%72Uͧ`̰B$@Om9Ȳ|_Yx~x˳"2 ,oױ @΃2V;c-Ҩ_qv0txB4e¥rXwk7|Ո"URyh +5W=#PEq}M|s"A~/.FkQNIkfB +Z#2,o}׺pC,P&7CUl]F!Ĥ^ī9=acL $Wt,4\N` +LdM +a +p5;( +3%!:<jUZdFIE{oH'aӸjEع..5XsBv|d*6* uQA{E^J{a vwX:R=9:Qր!ɂ]N].Kc\%s~ܒcgO +[$_Qbh-ZauL +xV1ҁ|*:g^1> †DGM,qSCZ)B:jXzAPaH* iŋpu;Oςf$av(m 3*Vҕ1 }P*.߶İU g)D!:oKUDZ0jw; R*+с'}7(aD4W)3Sxfso&]ُ,0bT$XM!+SE3#AKcT^SC2=n?ݳ!$33+n'%?^KY.<߆.F}ko@c2,)Mv;k+;|o)Gԭ1籹<[e G0S]QM];nM*@T Uoo%j|-A_! \0_UsvGQ 0BحEB݊d L\ 59/ĭ[=v5h  HPx޽O SVtf8hݭ BPjggPЙmB0HJ޹^6 + AW)TkKGjj:/&էwx#rpg]??,nq6zXqr0$1k%5sJ^fXגb4L^ֺ1Qgsdf)B_mW(}bѣGs2Zoy۳UVC&E5%!egv-DŃkCǫ`:!)o`Dlq}k`ALnA'T&v7L2_a-1m{\O{]Q4ڷh@$jWC5B33H k !F U} *iT7(<he(⁆`-/3Oo?Lx$@Ҽ%'9CHimmw4Es08B:Y m(N>r`iDS0N56>qމd$Uk:źNCeun؎-&^ + *J߲; nkrl8uz6Vɲ [K#\y& N”]Sg70<[.\+5^`͛OSgg~YJiYJM>ÌdF !șFb![D>GM !dKQ MET8P*q,|_Eo c}؂Ϥ79gڬ}wyh|{;<[cIWN#" +%Sot]d4Okc鸧~ui璩zK!1!41b/mDW5?bLb8OqIb4 +C9`HWwrlL&SYb90u{3?"uu[H2X3\OA$;Tqœ%Ϊ-.#)9c󷍿ZF^W_cȝ5Gz^\7ٌZ,va.ᏃR=',׸ ^Sv+!Su*`,[(f +u9).8AqѷcdZn'K%,Htm~ͪ72 zX8GױL!܅٬.dӱy<魸]3Qceѷ-k4}pƤ.p]Xz.UI[jq,Mb'BohYIy +~K €?Aw$lx;Joi&j{鲖d0HeDA|13YќǪal/;\k1qRqT',ME+PcI:`=C?A@ģVw1RKgsRui+9fIa!*5/YGcXU $* u]ѫ+XkqgލKVu+0?ĝ:!LG>d(T(-9S9o WhKxd%AL0;<;wn* nd +endstream +endobj +1990 0 obj +<< /ExtGState << /a0 << /CA 1 /ca 1 >> >> >> +endobj +1991 0 obj +<< /D (subsection.2.2) /S /GoTo >> +endobj +1992 0 obj + +endobj +1993 0 obj +<< /D (subsection.3.1) /S /GoTo >> +endobj +1994 0 obj + +endobj +1995 0 obj +<< /D (subsection.3.2) /S /GoTo >> +endobj +1996 0 obj +<< /A 2138 0 R /Next 1997 0 R /Parent 416 0 R /Title 2139 0 R >> +endobj +1997 0 obj +<< /A 2140 0 R /Parent 416 0 R /Prev 1996 0 R /Title 2141 0 R >> +endobj +1998 0 obj + +endobj +1999 0 obj +<< /D (section.4) /S /GoTo >> +endobj +2000 0 obj +<< /A 2142 0 R /Next 2143 0 R /Parent 6 0 R /Prev 417 0 R /Title 2144 0 R >> +endobj +2001 0 obj + +endobj +2002 0 obj +<< /D (subsection.H.1) /S /GoTo >> +endobj +2003 0 obj +<< /A 2145 0 R /Next 421 0 R /Parent 113 0 R /Prev 420 0 R /Title 2146 0 R >> +endobj +2004 0 obj + +endobj +2005 0 obj +<< /D (subsection.H.3) /S /GoTo >> +endobj +2006 0 obj + +endobj +2007 0 obj +<< /D (appendix.G) /S /GoTo >> +endobj +2008 0 obj +<< /A 2147 0 R /Next 2009 0 R /Parent 422 0 R /Title 2148 0 R >> +endobj +2009 0 obj +<< /A 2149 0 R /Parent 422 0 R /Prev 2008 0 R /Title 2150 0 R >> +endobj +2010 0 obj +<< /A 2151 0 R /Count -1 /First 2152 0 R /Last 2152 0 R /Next 422 0 R /Parent 6 0 R /Prev 2153 0 R /Title 2154 0 R >> +endobj +2011 0 obj + +endobj +2012 0 obj +<< /BaseFont /GISHRU+XCharterMathRM /FirstChar 1 /FontDescriptor 2155 0 R /LastChar 1 /Subtype /Type1 /ToUnicode 2156 0 R /Type /Font /Widths 2157 0 R >> +endobj +2013 0 obj +<< /BaseFont /QDXOEM+URWPalladioL-BoldItal /Encoding 396 0 R /FirstChar 45 /FontDescriptor 2158 0 R /LastChar 121 /Subtype /Type1 /ToUnicode 2159 0 R /Type /Font /Widths 2160 0 R >> +endobj +2014 0 obj +<< /BBox [ 141.862 205.083 591.766 402.879 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/GRPO.pdf) /PTEX.InfoDict 2161 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /CS0 2162 0 R >> /ExtGState << /GS0 2163 0 R >> /Font << /C2_0 2164 0 R /C2_1 2165 0 R /C2_2 2166 0 R /C2_3 2167 0 R /C2_4 2168 0 R /C2_5 2169 0 R /TT0 2170 0 R /TT1 2171 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 12675 >> +stream +x}k]ɍ+g hq Hc8N ٙqZU{+l-V_U$d~O?bq3J Oq]?~Y///v`S\ZoG-햎%EOe6'<|P~6N[>~hq"nX'=<u¾=?!o2˄}:_?vlW8& #_?f'dqQtoޣb#yk㰷_~[t w~ڄLymǤ$XBw{BÄi:GҤ% Su viOw9TeosHµa*M`[;p8ԛyFC\5hms-$ӝ!N]q=|^˥昉l"~WO> 4pߧ|eLyimy Woc!?Z8l QI=ĆMa}0_|ޯlZ:/Q,c4 IO谯-4h6tSlL46lZC7^LmJ~ܐ23Qє꾾~/,\Ls|ŵ!i&Mx DsD]}'י̬K}i?|]/~QF,!MRv`wn~?,0u+SM~eaȳSg#U^k+ Fږ'ޠ:ضܴOU/fڼfߙ3}/"͜N&k u3E{*VQO45S>> i}Y-3T@e!-OjaRU'헭aH}u̾l1O5 Rj7A_/xY unTK;Q>5+}gQsxʬg}1i(Q.33N(4暅OUO)%Uh thf1+vn{vW{}\ ͙n<6s#s fl5FMD?5y <gTlYYYa[[g)R)N8 5,)u"x|R"K%Hi~Rjd#8gC\׃VYbL(+^L,ξo‚|܎P 1 7iB/RJlI3ƙv^.&GU3]x2EdoOYs DD +-&$h~ߢ8o]ijs薎N[Ҳ#Ue/ +gv[~縰p|nM1yܔ%3f='=KUIMhT*jd ;JfI7TIuM=~3Ֆuʣ\d֧%`la#dfVJ[]2 󋴩pes[ StK 중̝W3cx桗o6? >-f杚T u* +QJD7H]{Cxh3o>쑲f&(%e_<*&:eD\\&`FHUH=&_P4,Q +ٵmjS?:Ds19%oO t"Djl(. _ z D# 0"641M\ it|aɑhwqiɽO%HJ2I6A_{iI?W(h^!TXdӨE<`0o`dZdL |O$%GKi Ok.䆄Kȁ3%a64d$EFAל$5lQ*թ̅2I +6#OmdD :Hj&p'IwE3+ #dE)pھ66L:{ѕ>׍EDZ tz4 &CGڞ RildKq%]HKʐs`kra o]tMre 'c *h,GzxP&i8'HڢW6#]&VH$m3~2 W@A ]t1&,6Rc$<tL']9xʋ6+$k+h+'GƑP/¿i*Nk0r{t+"hF0-OcsҸrЂ8܄tF2lH4 ՐqP*3y:\YW"G+05޴-`t1: I$Pe(d7c{ΨdpPqSmFɃ 3a(F%Y6sc6"^i`aR12zǿ9*wELѤXT۽/ pH[hNgssE8mMu喸ߧG!GU`g6sőp"{!p{Kpg"jfq׾Q* + +%oV~Ms0},ᥦhެe2#GGIƍzLdaJX1X71 RH`.r>3L}Dg*EDYm +I^:)O^ҵt1thʟsѻ@fȐMbuuoX(@eǞ:9$&i1%>[]zb,{0 j]xjPr]L&[m#r +uXpMW3! dFU@Y4ȉ (v4DJ{[Vm8( +2{pύ3|q$7-9uAX^ 4 UE:p썴Tkw7.fJn;(IsŷhBi%P\ߋ|:NM &A ru3ێs"!S]d[ E 9_r'Ci&:u9,<|I ͷ󏑊 [jLzr`!In@tԾ7Mۯ˟fE(4IRn@0 ,G>D2h2?b&d$-eU`ePM@pn+ZH(\FNruS3En>h氢aYN*Na =4F+ l!b^aP©v‚zߩ*d7B޲y@!*;TFme7ѽhH.>Łx Dk`!J }^'"x˜Tzŀ@b=l(4{Z{1\1>R?=dQ)Ne^rLݳʼn;v!-R[#fG'Y=ӹ+qovzܴ$sf%TWNt22rP.Lԑ$J;":NM7փ|/ҭ!=9S`ŋ6pJ K5a(.TC#(iuRmZZ+Hc' + Hq^n( "`i#C]]s:ok8Mwͦרlޒ"RNaU}H*lI&Ke+rm2-T~|tBuYzT=`l򭝹X#MJ&%=sCwT$T;JnmLm91hi.䓕>wMf}p +MO2KϽJb-9 >_r<\d^jP h61pC`%iM>tp9~㋬W/{刏{ A-q[J wr'cfdVoXn%YS݇®g0S+K +`µ/ptTP™^y×wK)g3OY#)g?^@Di +o gB^*TiPJaL;(oĂ ̒Sԝ +W[BET{xfT!Q ܁ t.N +ZtJ> uȡ`%UBdfǠa}(T `sJ ?Rr훜<Ң$ʦm uq׆ '5 O|2]xa_:w~&%=SPZ9U=3 +٦"T?C@ꏹOLVXcOOYӝ|ПgO|Q'+PD A%u-PFAK5X xwJL,d|- Ԡp4i$(&?C㟯@/uBOCԑ)F1J253'V&_i/u[[{֝/ +:O*ŠþJ*g:]A8y@DT?W- =Qmi.L_B.Jm.:z̿\~'w.'O6Bq{l6/6lWhB8yx:䓉p_dþ:@Hpp! y{ģf*Acx-cA#й@ oTBHdMe!?Jyo _(vZ:<g旅ՅQ{C]9ğ81\ Oav# Jq(hta`N) Ueq'v;6]1FyS>dhb +^ڵJ7EUF(UiO;9)ͤ|x<}~x=]/Eke,bR8q(p'oY[եTβߴ mxm@a9ZvSV̝&_,A{rkdgű=kcxN eiSLm@{$ڡTFq(>+uV ?9T3Tǥ 4 uNØQg_=f ~$bF#H+j zfgҮ?#AXn_53QNe6;FKiN!әț@Bթ?Ϳc +9%Q]n_U]bG$72J^4 {]gxp8ZצvSA(/a(v} bOs $c3% qAPхӋƮ9œQuETCNxxn %ο^Y"&+Y>yÉ׊1lmleªf.]fm[Vs,1ov!Oիįu{bK)طMDӣ95¾mׄ" 6OHa:玖ɳP2%*PP uiz |zdmן6]NL1ծ|ᦊ1-r?fdb_da˰(@Fu*BG.8A ] NQ?Ud᧻g,ļTv+#PwA ^/سjhi&;  P2X*:RgӪ7x%) :HjeaA}*ޘQP=J^Ji^K鯁&kg"FE:eJMo\vK`ޝ6M ++Mdؼ=X]FPmOڧ6oѮ*bpj j#P"y0MPn} vGSqe,$Uq4{DM56\i5`Ku}=G-z"Uk**5cQPӫ?rbA{X%XIkWZA]-ݨL͸]7ۼrkM8"7Ou!u/eu!x +9߂N7'y7qV -O.q^>.tC ?%{U/_c;<@/uHJ(V A`Gjfrd}>7a?!t7F 꼀J%J :e"1GZcYm15conU#yȾk!{Z>\P @ ؁"p6ҡ=𢷁"dW XxEaׂ>'wf@euFqWӊjdD>-KNֈQH@ChpY_,o%> +&0$PW(^} ~a^F +RױƾpݩGeT#GxEL> I%[-Z7$FJ*Lgv0F"݉ˎAV.Hw/+:A(rp5ƕժGDR75pQ-PcʻL hOt9z. @ #r2T!Ņl藧WSYrS]X>fA@yӷpd +E}fd.0om8̛K~7[M7M,xZŽ^O ˕wް#rQKavrVhnMKfِc%:!e]$4`F xq_] 2?!d$TaF1E`4""[84X/8P; QAfӪu'x&HG7̧7Q@Y}dtl F9ӑM|F* YEk<;26$*Ab(,:p36Ki uAP###!h LR8eèM d$GFBI\\ [+@8-0Ps)lpЉ +IpKsё!:9HFF 3 +39yE Xt2(b,4lI&BHCqʝOp(d#ө]Y/@q[+0gV}31KXȨbHB%U 8D,zAex8Hkϋ(M Wtr? 0rL.gADDz!\ĉWN)<ccq&qsS o!qʕXH@| gpb.'5`qh^9 w ܮ@Ʉ+H`{s8zYm9±wsS[#C %@!/m#'uqBsJ2bГ#:41aάs86Wp21J3[9PMp8zvΉ)QHK50aʛVSb`təOl(iI4vg[1lG".5yS3UD (g8&(*{&9-\D!pڲsq,m۹&{#9rsM- {|wV"  X\:9E%z Y'oe4:M-R%kfep~.Ѐӌszb}@2%W{9 Νa\"ka.\#MR©o)Еp UۉUA^"B8$D!B֤s9bэ,SӄB\mp*G뀉DN\#OXk3G sr׹3#ض\KSuC ۄ s(vz1$[Gj@Lmgo+I9-68)Xp2RpR +rꨭoZvg&)R3BGYEGJ4aɑ3O9Y+@5 M0b& (_*PHѡ+iAT','2i#WhsT\V,RdZL2 io!u8evDP> Fn>R+0 2BG$#:-&e$GQ0Jѳ*pOJ9,U $1G)[$ +2)L_O.?'] +v}Ox-.]i4 HfkL$ +:LdDžR(,R@}JFUf[.D ЩI +Ǎ(mQ?@n &{w;n,"`=[8 DCƷ&F;{mFkF<</Dw@[ء 3>`mkΕe:D. E;:'` ǬK `u^tsE!1v #p)OҦ˜Nu=ee͏*G[]iڙK~E_z9}wI|x׷>punJ<}*F&$D%[T1d^fTiL Ojo/JhY2=_bdZi^㼲Ha#B|A5тdyzgiY`L V<5N LHmzNT@ d$]J[#BuFCr@%p[Xɿ5,d<|;Qbf%9h;vȎر.\X>+|/| `Y,S&Գf۬ꬱ8SFFWd~$+Ԁǥ`WPرI]2XJȪ"ۓ Vݠ~&%×6ߠq eP m3g0x +$ nA@FKf]lQW 62s* +V" )ڊiMFcKr2X  + +)¬ 5'4x紏u N&J*Ƿ+#XRAY] e>:ϻ|:U2@rpp·Zˣ}ey +Gu >fxb2Jib(rU1W` +whY1XGe@l^"TjWH-HQ%|pēm;NaY2XQB[;W )T(:oOա2я|:~ T\B~]=wUwBǾJdIa g*mVPUj ?HI 4$` pė + &v3䩹.c#ik|@VEt0Fѩ*wH1w45'kpP"RBy@Xɩ,ή] Wrꕳ5M^PJ/T^2+ه}Vt + B39ND]'{3&tRZ%}r:Xݏ 9FvܵK<ˁNIDR:v*?]I:6\"l]XMe˒|e\ l\tK˔(kFϳW͚+߉ @I|)> >> /Subtype /Form /Type /XObject /Length 44 /Filter /FlateDecode >> +stream +x+T05536245503Ds3sS\ + +endstream +endobj +2016 0 obj +<< /BBox [ 1.63643 39.9609 952.474 523.923 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/rl_infra.pdf) /PTEX.InfoDict 2174 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /GS8 2175 0 R >> /Font << /FT9 2176 0 R >> >> /Subtype /Form /Type /XObject /Length 69211 >> +stream +x/Ivows$Y|aрm|wVFUnӻ?+~s_?~o7 {(o׿vΟy7IﭱU}#k2%]<[&,\Uh(YY֏RUyxpc*3u=` +d 'qV-RS +@6 t^lǨl?ܝ*$jˇTk_? TX,^) 4lǪlFQJ d '[yi +%gStA^ZTp筜a%N #|K'^"%o-Z,@8QL;SFw~$~^ +_j*NxZp*?ȁ%w'<^LGV` +'Fmڊ@[)Ўtv=*S +rZYH hG:Nl7ƏzF ;"o-"O:}_9>"th 2R-oH;q9q=NJIh[#Ўtv*xo %>Iь+Cm@sh*R NshUԌ\? ğe4Ns_V9v wQq@y!Yɀ'܏7mG>#eGHot~yurQg}!{9ov{3Ю 6[Y8#)u@3{DH_"@ #'"F)N\Sqi)-tvxoکD@v[<ѩV+i'l]iȥo]ځ>ޛ'CX4(!O:N{mԫ9Nl]ik!O:N{?f<m]ji-Ҏtxo}2wׇB|#:vJJ ovs=@<#R[ׇB|ː']5GyGL|t#G$p?ʏ=/ +ǿ?Iܿ'{:)HOo^1sʿdKo OyZ )-iFo%AOKHp3xLDx,B9_y~a>tOǟ!hGqƣb?tǜekwspbyOto)7RoqzO?i)4O=a|v/ ?|cP0djK%{~u,LZY XG=*mqe=Nvr'sǧm"-=^$,b=vU j o1N|dbj>N6c DjZ6`.&5(PH}0I8:|Ul=ľ"S\ bDNH @e·<5K3_'U]U ~92@ +PUuEC\1L^&3 2Td1:'W1Xb&hxZA <_0{i atz@]st @?_L0FO nP8'dj dwI[3 d8T\j̔C(i}:Kl#Zjw`Q +Xd(ki >b-*a@΄PANoQR{v *^wn*z0f#9vo jvg6"bms44h"Rvvx?-Mw(Dr+u;]{;w(s Wb~늒;+nH{b;+j;\᪵GW=kBWB/mw;1V6LoAZA zoItLP,JVd-"{ʀBduA{*}uhL"޺g6]la0$Sdΰ9+;y[_GVtH.wG,N͑5joP/ˑ-n*qKi;LZAj[6=nLF:!e>mX2B$}godؤjf9 DWm5T6;ZMniVKvԐ%h~wdHu䓫!\k[Ԯm|jF[x4Nm/HUd$eNoK5{ yҶ!*d{ݖ/ mGA1XV.e y@z_y_mw_=5V +FH;@f@[6 H "ACQ҃\i+2WoASDf5v%)3dzAk4a)x$`͛҃AGDc]{&56ۢq3&Ym$k~%Zh -Њ#bN}˳1u[s$^F}Hh^5xRA +Ȭ5xdAk gdE/G!BB%~Z+9D+"m2CУ#%.݅K5m'=~i+5T0!q$07?]-]8re#fxoƒPD#BPғպ[z̋zz `SSGTwhirTn(WNޠSB' +`h;`0_B$3<0wjl&/0=@_^m>|C+ :ԀUϪIs6lL ^jtYݴD'ܝjejU/Q»`|4]y|ӯ[`@P58@`g \Av`gbx4=z$`>ۣ9vuo 946rB:{c1g[`btƾ fvhZC9([WU>fĥ5;.N,j R&q[\LV;}~xB)Fz(AZT(Eo|g'geE['\Vx>îtjI5][L%Y.Ws~,,dD])v;04ϰ>ǵ7oU/,Ȍa JxG"8H1BS8U(p+A\$h;#,~' TRVJ4mf۵_#mq(aYYEW\&V.MhQe+ƩVZoPMU3 MMwxaHSb!YLŧ 9o9Vx-Iw 0߱r}Ӭr7-!.܉\"`J+IήǻNJM +{+%\=;_r~}UEzpUڃo\!5\sr 9ȼ Jld%}dXdgk|eMEߨ Q=2zh?Ta\(24D'fȔnb0d"PD, r(Ր61tB^mP>toEF6^;1Z"m:g)+Y*uy,Ԯ[RߒDȝ-.iq +k + PG*NxNթ\7Kr[u0V/F̳ QMVuTR/b3.0*EkOkgfS-_fqVިűDuԽj>O%ܲ[_7ĩl2=XwuTif$o"S_UoҖaYֵ},.A.y_ocU20Χ̵KR+քN1\@2_Eut?H^KGkP7pT"\°){^ `b1f,hfE^=ȩr B DQQp  fY}~_)ҬANŹ bNʼnWeTStUk j D"O  "I]Hү`S3AIb, +{0@FiJ`{0@1Mf"i|nzdY;  %8:PZ-2J Yܷk/! V"ZC8!\!P9igmE!y !Tvt7;H3|JPlv|2@nS9uӜûL +r|y H2BQj\7$n`TӃ&*ض2Zs冦gy3˩uޘjn+(tO5j->l.\@0j=.\lv +%Lå%6D*l_D٥ `vwɃkl7*9scwݫV;Ӏ8H`Í<ԝ(< WWj +}~g)tqZ,͝)2w='78/5Jb_֩o*,#ZI߀b[́ %hY@##77r={I.x|J>yKNzK^{ LiXţiʓܔ8)Sj=\{O+.OCz.C t:'M4WѐxESc"Oh<5γDZDO$i3=פUtvV˞p{Ky,i3݂gt|g윮x:'龼 @@/&rW$ehA?u zj/}З[q' €U}߲$PH ĻIe. V+M &ې=TmvV%vavB]O#A^n%~jei~%QS0:W=yiSfz]溱/f +ڭ(DWW" ʸ { :~:k$PeBuKe)MHA$HBё'**P sJDc=JXtRH`Z* )5XjgJ`r-װ5Z[[EAŐH[J=T0&s?b稥XW(V``W[2`. *v6,=2K7t3qaCW6Vl` + Gqkv*Y$ XH9{+R+ Vm߭:0Xrpa@r" yK/w!Rwc$H37W"\AhA%-hG)z^ )3j wtznA[4] 4 <k$#2A`B'N"j0̯@Y7,sC/K% <=w)@j-spM@%"IT/^ǝ G d;HJ鼖)o뚻۵d=,0B(ɋqQ 9/Xevn}n,z]ƙ{uY5 @%v Fl I5P@͊CI%Ӯu-'&ko u Q*5^ `z1iˍTlkxh^ +1g{ K+. ȭeIpm@V6mJ=$Whʾ-u}R50 am +? gU%֔\roNqtY-~kr&k8)k Rڈ +d^2_I^Ɵr,BRo9n}{GϴmD0:߼4ڦ5J_R|1i&AI;wi=j{w'UD?k6\ll3@p~ln[})EWSV1`֜wM\ +_&+u/K0-:@#ےGRcp3}?vǽaSG}6! k@9^ov( 'wh-|9YdyttE ˟VvMeN~eq6j>49QTl[lCTʍ3mKsJPyu9"'ZERb@wĝܖmi\׏{Wcc [w-,G!U]S46 XtVnwؽ1#jv@m6&kC/|ېH* - (9e\[u8$٘/7@u +r$~~[e -li#5jTYsG*`L.uwPU ?;^=VDpiq8``1jT!!c'mZQ+3絩.̲4Ꞛni[0YM(]#6Kw ,떟vjCɁFhkN Q +fυqiXzŕ\W$_Mt[/;">\ &z2ūJsY!ҵm.ZUȹl.uA璣*`0ŮKZ(3!+j$ mr8kzx˩3MפNVw fIH:WT!K!yc=X5__uorwȮdݳrxr=ś;ÓE&IP<ؠxytMS8账zO{-+NJ˭˭؞s:/ j9u+_E)[ߚY߯PEgY(-HJorw)zɅ0삹((O,c:~e>sr\\&:1sھ\R*N"=9yko{U?b\Zp0($=2O"g_"dїRz^M}@{7ޔoDQ޴{{S"i znMz&h/߯)▮9DwCiEO]w^e]ԑR;;Nn?t7E6-&Л(Y zPAVhc} d: u%&k]ׇlv/DN 4tWvp:8L@]҇k(+:/ +Ҽ G8pr=*YzrYhc +ľD~RK:D- @$FB*2)RW?­DLgnM%cvr{5=Ől#((ihQD9̊LoV oS!o"8l= .a%![_:zѮ"?LoFj.o%iqJ/h]߽)wOtvKoݻR{{h7/x"?=_^r~F`|z2~rF`}z~%.~)OO-ywiD=yV߽)wOtv}R + O=/h7/x"?=_^r~F`|z2~r}F`}z~eO]'˞޼ݻ4ڻ'o:Byw!ɛЮo^J.~C- S$zkrƊ Z\nM)^YC@]C΋$BZ }F~S;~"Siwa5 +"+*eY[{ozd c޻,e6%7V !M*N*+d Cf[F&e gi1b~Zo QhBF@PVL݌AfRr>T<>iv3 CRႺm݁:"5jF!ʈ 98p =/TY*e f &%N"9 @&l;%neCC + -Q"ȣsJx}O1YW$@+RB]@/&toV J!H + u[Q LI=U QPJ,J({n%7dΐR SDtdKU[xE|s[??t{}ӆ?)}^ߴciE|&h/M$E}燎*lw:Xc#?=_^Tgڧ',^/gʧ'^/g'˺߼JE2wOtTH{[_$Оo^JeI{GETg'޼Jv@e@e@$Kqy)OOҗeyYwqJ/hO.X%6'jb7B>>x2L> + Pbȁp N'q2}!fW-`B-s˻C6@e'b,n=hC4BD"Y[Q 7A?#Aw#$m7捴0B04 O"6156?1}Rơ>ycUO0Ǫ~2&fP"  N9O_Q57e7I'01瑲zL8p6MF45䴲JCW7K"[ 2媃L bLI1o2?[zI=Qy$po)H z)+Iʄ⅛@d:*kTGdtԊ`3=Y~8Wdy򛗭{wt"vyw.BJݓ7޼mO=/h7/x"?=_^r~F`|z2~rF`}z~eO]'˞߼ݻL"hE(9ߍEK;+  , SCZO!*9V5-SR0әki]kzb/25(%~͐n}Ԣafod{(t)~%ݑ[[|"BJ|D+iȥ=yQşo;"d{ UߴۻwD.IK޼l;"Re@e@$yYu{Gכu{GRZ7/xȥ4>=_^em'޼;"Re@e@$yYpy+"ķAg'{j`_}wr,Ihz#^NC}Nӭ'~]̈́_}|?qs'.+(>R̶Se{1;k3LLk}MqzYyݚwlFw ?׻l+oRdGwT~WfchRC2>/n==SVYɞoҷ9y+-Y!;kq&j 0eה֙en'.u&1ʲ./ֹt͏GZYKt]3p$o/uZ? ̀ѕLٲÐ-PXGfoi@f+,%|bM`Qf,d90@zaЁa-2ϵًg] Pli)J ;iH "ZAZlA4ٷJ@U9wzi{2]ow'ٶ=Av+q,dՋ]NRm +g1ؙz"ź(H5&'XlkcԻjC$J`2dˆiԐR.bƗ$LuST{-IpqHi84fd GHnR +h[))&hJ8K@ǠR&=\6XGz2ˠ&YMTE[C.bwl pcqȰwGzRv 4luz DƝhi{9E:J*i4ܳ0' ClϘG1Mk@W[Nea:,L!cyvRA^3{Mp\,kJJf6䓺+5X yYhbs[>&4ݞ D +LB8\'#$`*UwvA*>Z6q)-4K,P$160Pm# +ػ\ 9E䁻v4/9KIw4j588=^qDAÉ^R*Ko!@A}35Tmx8WgQ'*/|`t$A,Q"A&H)i2`ꀌT56)mj, }H \rV,^Ӊ.-R_E$u ?IO c@Lxa颍)w{p joէ -N] zO[\%wcGm+(/V(*#(\%J]$/E7)MKDぉ2 +102u6rknSfto" rfTX2m-&@[Ueu5;pd/.dG_!ßy"]L_ Mz'ܑj9-zl(9>Ѐc@2 PFP͸10zLDyeDfhE*8jXѢk2J*;N4 ^iX5ײ>7xo1sVܷ竒YLc}VC}>d(zqP9gjhY6*YU~I z+5cw9eQQ2uY QQ G]XuYXu&7bң.dCq˶OV#G]Xl؃i.XS +_uYߏlǽُ,Y.+[kuY Qrfv3eG]G]xe!QuY^%uY QuYAuY Q2uYAuYAB]VuY"8VH+6[>VVOV8qXeю!""F %,)o^ӤHIei)%VjԢb]HTW8UH>24 +NcF}d1&BKiюS*i)nz j ,j +FĮ;qi8#@ƞaDXBuY )e<@. dźl;ƃG]HzeG]H}e%uYuY QrE{'?UHzeG]V<. =NE"G]HuYi<@.+muYi + +*벂<겂<&:WDt"ieufBf+ 8^Fx1e5Ί5 2u2 +'X(L,PXPz5rkJ6 B~!,,QX|>Eed +:0{/0F rnXby%@7vV#5dFZUV#iyYu& 8zJ_ ++ 'w2._H7pGnHs96td +C2gBaB9b4ƀ1aeރ/3c8uձXϸq/¾_3o~_df e9/ [Ν^fwl/mKemcM:nKJ]*jeGVEb!%k햲ź}yuF{?G߯E [ge\t}n<^cp].UZ(K`+&I)E.Ź2$~HSrz>&ٚOTTR6'`˪:[6uL>ή2 9Y wPMl5$L}qNw^tT_`LM*2oLn eƸ2\J=ź({ʙAP2a>uEuV . b9P^oSmDW\Ec +{>#Z\WB堹hܻ=!?}nzs*қXv +~ĔMuIT^={nEfIzUYzʍݐ@ʋ Jd (HR`Āƅ1"J,#'J5+J_ThT qT2zTD]TRx(08`K1.`(FʴcL1ަ5dLNɸݍ*C{7i!z3DNvqƔZ'Ұ\ՌɃgU#UςN}P9uO"{E7c_$_W}7HvYؓ0,r(r<I\Hlq¶UWHL:pZ܎#Vqȝǀ/L]Lv3˼p~rO@d"ȯ.= GcjgqzYD-s"h.ف ʤ[ˀ9pxpO{Fuk$Yg=g`Wz-m +0C^*r vl +wMm{+@7\1#ۙp1DwN2 )8htuPpvaɵ.me:Ғ(NA-t|ި`sG.H'!EjXe=3MOT Q ^? +Nտ:OG0V!P8 ?iWl=(N' -9RIsG|)H'=_ +9RlI?{aϗBzǓ3s<{aϗHz3řlz׋3řZzOL +)'g |R,^ZsXY {js؞Y {Zs؟Y {s8_Y/άW/gs^/W/sӓ3;={aϤ`ϑb~rfdɂh+0H]:Zy(0O(k@8Cc] kBFC& +L|G1pJ,f&'(y 8tY:0 ,\CD\$G N`b/̇8M)Y두;s;> l58[Y}|"M@gioQTMlVI qUrC0Cȳn=Du{fنLkS#W&u܂4o_o(.r¬2=c /o(vc^.[_$^M{7m"=yciw.BJӓ-޽)OOȕ޼\ݻRe@e@$y9s{wJݓ7߼<ʛ|}9޽)OO旗y9ۻw!Ir7/g}">=ie|xY>#P>=)e2}x>#?=ɿezrw.BJӓ ߴ!M'Q+zd_S6Wp}&˫٘p2צ1'ĿO-dǝ2φ`zDlQUч9j 4· Kᨍsn^/ևžfIVI>R'(Di6~ #Aڦ/o9 s8*wg9hl tv>q !O܀YnPS17ٚ'!cyo#cmAEh2>of +Hݓ/ "w4;3$qul(p:1+B/H!P|0s +i#f2zH_1C#H7 `Zxl2^]w߽ONvw}oPW7/2mZX`T9""LYeqY=mmgq]yĪ!jg9acp~>9hmFɺdzKJ'"Q*͋ ܦ0@.sPm3 U6W,w/c?԰CeK6L>X6<#Cta H)-gm\A3PT 0 arqp(Q. l*<Ȏv@[P+~W>Z6Э)o쎙a\p# C샿,%9 yPK`F] ;3HHƅ62T̀h(&dUHԤ6E7-WKٵ?y5퀏 +Y#rw"F"fB冗b禙ƛ$[!.P5^@Ӣm3|%}}2U:\7,Wq?S:c*lOEE{b, es0ă-D6lQm uD] wPpۛdS]Fg{\*)ir7z +g\݁;V7 YO@:s(l`oc IOά(|e+E[[`#&&;9;trNy1ZZΨXyN+y^}c^{Ky2<%B[["o՗׆]{+8M- +%րpfU"H8J%K{(V"{o9=nֻ~2 brj(u]rKjvߢp-~voUl`} .tOQ'c>'0Q5DƊ#wl`u G!?*r^TSV UcY/FBYGBϞYaX d?hV\[xǽh#ê}|pYgҒ'g2S.^r9.[sAu2E\ZoV\onxR ?SP4DUPb4 eHSP4g1 -v P32^jfVTPݚ2eݢBVuXު[6{+fomٌ->Y4uj*, +)7Wn !u1xN=dj) ++P_Pu2daj )֥)@^GL-MW oQ l &g-NV&JG@e;ebK-xir1eP }-E8j +`n> sP5xW%Բ f q2g%| SJl&/q>2l}2;gY ܙݤ9 |$\X)pId-ef#\Yp𒆫 KT,ڱlɺk.+/^qg;n@Xq +!֐Hfu(7tT)d-ˍ%k]nMY s{z[d/fl:KrnYs +?,2CLh͹򤹿[4y Bo \-UTsҷjnVbZk˽Lzbl-)[rܲ=[[\t 9ҷV6n׭[hv +wDo-[xDމ 39S`qJHN6h({'#4Խ wND;ebTN<7"b,==߅{u[ֻ?V_r!KB9;e qdAɦ]JՕoxR`y%fe~v|ɚ81(?wQ<Phۢ?'@gy>[OGo'8RG@.Z[ + :9@ѣ Sn y1JJ,O-`X#HUJ=Srw%gd;.maYZʓlL +mWu[0Kn"Wlg Py F +ɾ@N\7Z9İp]}v~Uߟz-4]iBf{6Vw2GY8<)EKL_rId{6qZlseWϠ3H$|& Es@Yr 4HJ.0? Ǒv 3{T 2!ax7vˢ Lz_eJ eds5TL +%EIA\H!(@vRV2[S S'R-S@Yi<SMw$b2rq3L'j.̴f.:R.|^1{EL=3W:Պ_53-9WA~Aw2f L"i H1;Ϻf8Uf4^I졕6ÁR97tGd}DHUC\`z+"ޠ}?O>Ku[out\ G(}XܕXT*8ZYeEfɽu'o0@B'AeMNмo`o߷ߖV_Z +8ft[܄]ܷ+8.E/]g7]Y#N\S%?ksd$ S+6~T@멗A_i9Z/w0@S/ڻ& +-zF [3sV R)ה +P5sZD.@ &߀s(h_~‡Cj== (0:el3#0&R,:hХcQv +ڔ hZ(YS\FеFFE# `O)fA%A<`xP];= vitWLQ;bW!ŮXp#%5&70cV-ԮM,vK-_ްv^kqɖ:5DvsDW?2v?\9yswx̑4G{\e9&s痏/-$ !E+Kr\iʣ-Wb-2mb=]*_W,@i!U_ [x-FX(yƚ2^3d5T^Sf5v_shA5V_j5_lۏ|+/e?TL#z@}K,2Vt},_$z&OmDO)NbcV;ؾ+_ꭵNz?dzwtnض.DH8Olrv#j腄)Z,KŠ/yDe8 sKSÕYcW~ pۓܺ-w z",ȅnA¸z<HY?v?&w1V;QNZj\7ŌZrIn\Ǚ"%~v? ])و> @qN +^ SklȁxMdXWqNuS Ī&@VbRqFf*IZ56 <WBd*|15ܑAK_`J{WnFW*GqmP/yA6@2tg5i9ңz"M8o&_wyL[O +7wugpG;=w<曮rb;+m(D3RJ;+sZ46z q5 5A Z}hdVȞiޢx> XRxl Z55}6cf5fQEӿfgCx@m#iQlGtRSM(f*}WZjy7$m2[E D6CDq XJN_ T6sYYCJ9*8d~[j4WLTRh7u-{z)G҇ y-N] 2MQ%Ky6C8C.$[FlaXvI3AļFbؼ!/fBP?+ն].)HM$l>:$!ȨV7:#Z;٬5y9R UxsogX""s~7rte฿,+ +h{\R$K$Ý@yoA*9AKҹ/5ֲlùjB +? m00 cxP +R + 1uݍE/Рy*9m8k/~*vP❄^07(kFde>C&c +Ãn՘aP/a% E8lZaaDӧ= z^+ elAS1 }̖1#Q8ֶr+L o[U:s ` 7m<c +"=J#9tW<0wI3okS ,) G9̴@z<5Df :ƒEFă 2r2<"|x׼ARhtI;>SHD>w˹˲b ^圱>(3TBkbu[Slq uEᵎmQ'+}.dZt#Ȼw,cg;Ae~[Vj0'FI fmW32L;D%I);c!Qio͂gGd1nX"ǎƈ"2-O{$\b|xvD|rXM"ːG႟%fxc~0avEYuz=}t)dgdxDOwᯇ Yir0K6UrLOKˌ8c3I]}xuhxl06TMwt^'BF fȜGt~ӁB}m6'ο]w%_ a>n,;woW׋[uvQv#;9ۻC|vjж<؝ޖ>.lDT={$ۺhv[;m`m4l Ӷ6PFVqB]Vnki+mQmu-`eE޶{)lѽg[{V,g7 %=3G$|Yۣ>{g"<㞆Gl{,qK:MqTONe< |T.j.|ɸeuSs(%wBϝho1U~*^=OI5𺦴Q~x]L%T Ib/vo> fW-l)Y& Xµ ح1_b⬪5c-#M$&q"_ yPDCh "_(C,߳_VHƍ:~L#k|+^{$ӏ2Q4j$܍£zQӬ!]ɹHȬ2٩gig$Z1Ni Um.My^ + ieLTxI;sk|#ؿdՉ4M?1JKٜ{Jsf$SN~'ރC݉.Cg{gE!ޛBb +zMGt#<dm~Xҕj'$OUҐ-KL/ZsU }ˌnTc/YNt;h Ȍ^7P9vY% >/PtyY6}:$Rd0@x743iY Z$GjujfFrd(R%gЦբd[1$YYQP#gjsD̤|339^ӘNUVʇXܗkK"Ķ~kKi~!v5rs9R^bס5rץ|E. ͇V9jK@[^OLF AI}U/xD@JRdY'k1<$ӧF LR(-R4#V =fס1.mcr ѵ< +F3s?& CMC +$HGl/U-dِnR?^u,>$,YU BIcOE(frp +n|Oɉn[@|2X^bqiKhSMKvƄ[zZL j(qd73%ꬌu3@w5@0${YMZ1g77?l\cLzᭊf7)yFUs*5lp40Sh&/PdF.Z>۪dߖ9 dxTۼ I +F yJK;il`552'oI+3RJDt6LCjS$Y)t:"l˨}%[WR=b?*VH(7Y l# ҚA.o4IKͤ|nu L5ٝs!ʟB8.1n'14,o-IdQβ=MOIIfy*'?ϣUH)˵?j. I\u2yoWWȡdZа x ܂@)U*cD +@@K #*Hׯ@hj -_GNt< {'c.Dk0-wArVψiooc^ +"[2956TwWkW YPvk5\ ;KhQ ꍷ(2IA &zJ%ؓ { G[mO!tlxWɨ#,2u +]+Tb >쵬Wό4c͍5C6W 獚E¶{@^CWG…š5y8tƆh܈~vjܓ\^H<@ )A| d> m{%*h-nx;mr6͘ +mmޏ6{_smY[L=_08 s.X7N80obtjt"DFeK6) P.//#YZǺ!0SGe@$ "DThJk@ܻ#jIkU4 1 1lZ )ʟZ].QM1 +(nx;{qĈ@g>&Çǭy">vdN vY[EOcKȲi~ EfQ{qxY]u1~Qb: br*9!t E-pymF -d>sA&D-6÷ֺPG M\EoO 8ۜ3腳AwD͟Ǧw$W'@J/yzoܴW=+j5qGEkA/# yV{0r:q%>g}6i#j+D?eJ\#2fDԚb؍+'K`xӷH2"PC朘-C@ߖ^cěu 4NKż5WιVzSQsnj I,:; ٌ̅\ڻqc_сc8xU M2/D\ʗ,kOVc5\#d-m6A|9EEx) [jˀdSzQYR,w{ +mU7u 8C[ϛ͎s>U֖GQjs^H?E{Y=w}o9ҿQϵ>{[󺷹\wC~>ྈW/OYu{{X ➚"|g}B7vǽnEu^[t +7=ffUsۭ{n9́w>__q_O5:_1e> o9_hc<6oWQ(OqFq+ =J=\b3c?>@__Xp%֌h:4;5;Rď}!xU2TPE@Ta +13yVȯ(_E76?i g|Jt@8TbƯXj7Cno~n;< u' !([6R ZoUnY$|~Y9<2*%vӹ4;21HJN\( px+/qֱ~qL +H>\ #)Fnx +B#gEFAh2G8f|I!QBʧ΅[e=kw +y?Ӌ5&difz +"U^Â{onCҒ4 H706KS2q%LƤz]Wi*Rx zYKVAQ\;%;^BDRLx٧+\[8u>Ĺ/C|:H} P=ڟ ' K;$2l_,m*i>ϧ;+`V9A'L[I~e>Jy [oaUo.:^nI-]ӷ-lw6x "q*!KЫM.I)Wo$ +nr<2q`^rmCf˘z;s8fbp\n +->c[8pWX-$i[d"Ь,͎g9?cOUxxa3e$Hfd0)Hι-nnh}[$W MQhl-N-"cLG,ݞ򚊹-/Xy2D+7Psv[ +eኩAhxN.nSi묆8 _G7s|咱ǏUV3h}>=>VC 0͛G4F侑kރįsGcgF\#ʎQ6};Hcv41 Zc̦C|wbnw i/ԐB=YSC@q{q>exJtQ´!T t/w 9.]44UMNyYpbzi;ɳu ľ,aT74p=SZLp-I*钰QGQNT_*}$S} -lIV^-ʫw(icW9HgS:S}t:a@Vj>3N =ҨA }X,QM ڲ!ˆk)fk1&"as#c@h%𔹇zڷV3)[jHOxmCc["@ݦ +@růE;!6(ࢯn*(rs(#ko]4ϗu{xn#3kJ\ ?KOZI4#7`tM ײͩul!A4#ijD>6܇@Z64. +> |2ӨCr`/ +լ,@˵E%F܃E@Nܽr<"C<9䐷CZBiry u.SA+NJx(F +C69\ r. HD0,d~_.GSb-*6EsڶJRۚij; kmm350Fζڶ{ 7KkpX|*L*S&T5SQO jrWKΦ: + Ay"QfZJGI<H8{{2ޮ÷/$,I(}{Si?ԛ5Mۣ {|ʂKM~ùC5Tw&e՝">4ǻWkǍnu]{&gGz–Y!K;S?_[y @P~Mo p 8EN!3Tl^Ey hJ6(M.0 ` "_w1F4w~׭n醸IZQx[c]:eV0Vh\W& <pVDs9Oy3l8~ݬ.V"_ ޤCl[ "_(Sl:^8:źL&q,?T+@GE4 ~p@:7cHr e\6K1cs%38tR?]>@1Cn|Okwx~Z π;p%9-2(,q$iʅ-,M(iGq,Hb- t vM4.m+7B4 8TH*;cx~ͦv8$5CM+UX\P>NHI!9l'c2oQ䠃'+^ HyGٹ$.8gj``D-K4]XliBif;u#qqE~ +Y ܴC1/8#2*]6Դ7^p\=.G C$ݭ&xV<Ӷ)'ԯUo} 0aُ` j^M.3N`E8(ր~b)vRRtGp)n[9%*Yr~~UVOSes=?*kکvֹnSeTY?qlu[ec`ǏfR V3ϸe$>8ֱ +`G1!2YS(u`,-5d˔SXBҐ@$=G=u +]u{C(%x*D`!vZvĭ#j99'N IjڎsvW͓t5mo w➊ÄSDKE@*&NW:s[FS9nT۳+F$wM!2]8=K&ڮ'zڒ Ӎiy.dLW/i^3#-΋5_۽LM`qҕmA!grHMdϔ[1t5ͱVۓ0GS4M=s𷺧zP;L.剙?tVb908Axe-;ЋXm&ɽtfp?P=E%&QIU)'Jr@g^@7z噪(z=:Ŏ|-zjͪ a{>ekGzD]ޭc"h gxTkyMDGmQFW֕ Qjokuqn-8yq}UFDe UlceTf!y~9,s!vt_65Ky/hTZ1JlSfS,3' \ELgMw Gq ɺDc=~W=/ ,eRiED?!kG-~FF`Bx䕙=~V0nVbĭs ց?st7 %0aї4lN9cGl"csFңt^{jL$Q}PRm*5TmbnuGc ߰Ǻl~Tk@s,ZiY5!JZYך/ GJ1呪 T&]A[˒vA{`YRmbR^.bo[)6b:Ėu-g/gebOSes9?*˧ҩt9oSeϩs:??*{N=ʞϥ2bbE.%6b%JE +݀Z,ME[<Ҭ4%m1_nC+Y|NZAJ\£Ƃ(P:7݂]lxU>nPSe;v;fĹw"Yߝ& p l<7ݒp,0V+M tLP r SZfvVQ,Gn#8-Ǡ}Rw1ޕ+N,(r'$yX2Ojs#ΧE2qj&V 1kAh-L}~P9 wCX8ݽ b`$$f3rhn'lOoemHBv,}e{MO_Α|;EWQwemƝ]qoXx]= wm]nGrvm(w LWOckXi9B5Ov +sgOD }RnPL鉅1 `E"Ik5y₭-N8)kJ[o_ ж47^F%'&d_nO^jO>Uv/HRdKR_|M1I6a 9~tG1U[oyv$~٫.|]RO> +}IrFwJX`~-ltH/ߔ 6t/[tQ6&Єt$x6#ؔD[P0CڔSckS:x=AwJٔ)ҁWn 8S4T!!oJGңtFqJGff=[WQ a^[V}6ڜNC3GSsҦirss:p Ȕ9r/ q;#/8ѵ6#HrNG:tȯځ7AcoNGerKrN9W*-朎K;t|s yYL:rY:V%6euAnau4mVG-Y6Cr.(QYo| dLЃtT–@YJ8#HꬎYϐuS5dج!W8k?~Xau KbS9ŮS: 9R9b!5r`K9??Kl9UVOճr*kYz~~UNSes;?*~ֹoSeT8ʆKTա(i[6Ur8"ƌy6N#s:`Qn?M e:9癩 7>#N@&{TmGoG4I[x 08xiޘ敔a>%HwҢE_Iv`5إP܏$ ʳ4 (h:-"DT‹ٕp@p;L/I"PIk˦H }y|8>2Bfml>w"n !HF9QN#&M +yyY!u`)z@J J]$!H3C"RsC!,\xF;$92߁"y6w H|g</{e8oz րr:)eEԼdt*h=F#e$B8#vIaWH<8l{v%/y䐍=oَvդ)F\RjR +]P(WMY[|@jRet.]U.ӥs@jst\-\5yn]חll0sm$9rc$SDl Ln[km-ME@Y [~zs T3/!M8'f$yNnʉlny6DmtI%8o;f>l?13!>xmsOr nm9lv%fó;A⮤mlovYzyq +vj!oJ:hf$ӽwo.J: '>4(r\TW'%Hڌ*KOR(N+LBC 304&=[|OI۷`VX= oہvl{!فx#! ?HQ 6OŞmmEŧlK7[\7#m{Kٶukǵ])KL oKnY\ mjt lae㡡:x +^%;2Ngb8GWވT4WS[7cek)qS]h#My"eߨʾ= +kO<dž_7(VS[K]v6ߍTEjЖT7_(٠GbE`]@KR_|G^X7n5}rͧ^nDK}]r^k;euJNَe\L"O uzg;ȭ<ٝqvi(' +1Jjo;Zz-> xL @/I8QY𒝜"\ é#1 8e&e=lmt`OZ,ӈ-W߇y| 6CF}cPRdS\%Huo d"p}М:ْe:e,DI$HsI⚪Z)=aH4}(O?Ik}x]*}C]u_ ~#ۺ3iD€!^.f|88?523 hSxr! eCD880Vi6,0x$se_yx8[W:;oQ <ݯ6i*; 7LM"&;$s=D1#2f(<^aYfK0B)qǹ'.7ܳ_If8%sd qių?Y1Q2W QnK a~ƝoَdS= S6v?޲qI)GJ}n#.)_5gm{NF\RjRBz^-PotY/]Kjzդ~v_W &]KeZ_5r\.F(:aLOcn^N(ʵj-gz0 5)ûq}YsjQ-,6({xڽ)Ϋ$ruStdV:l6Y3#"용Jqz̔ƾx_2aԃ#[)9d%BcKάvw'LSa"H{U~8()GW,oUHd~\3wgƹU2t5I!y=|IZ\vB٩7cGZ3|M21M,mڶfQOa٘+X7Ʀ{D"Nft"I&)1 rph8Z PQJ+'[ھ loy h߃o>u:8R$j ]!b'ީ rpZ)p/W  9KQsbx97'-X?7ҞoDK}]r^[dKS#AvNNr ”t'耧d , H֞yHN\0.]gW/m8*K LȒ< :,StCn^۬Ƞ){<*H/{dldIl :6(N)i/MͳDr@K [;X<2u.'=">ٱq IĪYqNCd :\&u<N@Šo1wc0—vyR3@3U'Ď"VUԎ#/8SvlG\RB? V\SRjbi ^g`7:%1]^j {5x1 :qͶܿ#}wD"g".vCw|WŽ7yqwg s}\IroVv'p 7patz :z:ze"z푕$QΖG硴 a͚S +'*Hu R8Ag7ϳrٵuNw`9Wf`RkNaOww2`3s[v;9᎐z񝑀f4:ӄ܅td{ BfEoEw})[N/'~mo#[`l6;侑>[q/|[ϗ ) _ݦ'[QL f8) vmrZŶq-ֽH " y NSLKLcIoC5:wi0I-E:Ml_PThV;9])ɓ$:JD +d&`eڲ\d3I^r]7IV*}{X| %MZ2C骇bs4ϟONR>0T8zhsv0OT%s)inLS(y*`- +,/.,1:H}DJV CINQUiⅴBp0Cu?z-%Q%8|= 4Xda/d}aCRJHQDR>/c{&AVb" +ȻuDjTeL 4DY"YxLˤڕL8.2wm~6rhΑ+K)N) qI^FT.뒽NI)s:evlII>k ]9$]5gm?˥z^-PotY/]Kjzդ~v]lW &]KeZ_5_.IFt9WM7.ץuj2t.]Uur>.sn%Lg Κr(;#[Rjn]~,)sdKWMYN]rΑ-\5)^.IFetٮWM7l.~@jҾet9.]U.ǥqr\-0ot9/]Kjyd~y,Yz/g]Ϻ|y>^.g]Ϻ|Se|#oCd& XrJUþfnD# KůW><I_G.=Iך@Ƭa= +Q_Apk־ 601Z +H\d;Puhȿlr<%MŞ #,׌t!ڭ5|YxIamJJ4[z&RzX&#4UrEz1t.v z/ L@lX`BYl r"'ULӾW؇"Y<SxVxW5jS'S#V+hK#xAtM9~cbQ#\8?[l:Fl)tکvֹoSeTY=oꩲzu[eTY9UV:˭r,*gVY>UN|,*{N=gVs9Uu~.!|X+Á =T6Q# 8jKKe+Fq~TP!6b:v*kgVY;UVOճv*+Yz~~UVNSes9?*˧|9oSeTY:OҩE. =ݏ~t?~An?*lɅ!/D[gec[xq/3iYl^ۋ|ː˨ߗDnft3wZeu$Æ*ߗ4J,ڼu7xI=`cm]]Hvfs@oG Dx/;͒5+| _:A׻N5=|d_[_ėN)z$4ɲ)1Ow ";r΄.UK3#^͙s/D'R҉"t2/IpV'։+ur/;W$c Y3B3Óx`F䳽]MZ*Yx|oݝ3pE/X֋WH\{#Z#Ʊj1iT5_Gy".K] X^_l7)#SךU)#rV?;o~s`BܱNL;;I[7wwc+1G⎭trP7w S;ƫ'w H0a+1ޥ⎭|p@΋; o_1[9c؋;Ư|qxsh^1^}9raxO;wly{^ S+ ck#⎡16]11R_1_1o97wl;$r/xq7wL;֋;z +ܱSs};en뀷]FT.뒽NI)۲Yگ({YE寐 \.IFetٮWM7l.ۥv@jҾet/]U.qr\-Яot9.]Kjqd|yr]\W ̫&]KZ`]5Y.岝)6㓿BS۲ԍԥ3Ŷ|.u#Av>uL-\-[ +m$etYWM7.ۥv@jRet/]U.qr\-Яot9.]Kjqd|yr^W ̫&]Kg9/r }syqǶY.qrw/PH;ɛ;:itjG>kVi(5/+hE@>cs/ Bg-ؚi t/<kSO +1_;Q×N>|_;qėN.P|o}L0i,\B W/7w [㣀/vwBs|-1_o9wduqc:.#c^lA^})#O9ŮS l)bS>c@^1oXF`ys>}ysrjw ț;//7w ț;q;oX礴1Ë;e#eyqc@ܱ&yqǀc@1"/;;~;$rй1vw H1 57wH䎱G;e>VcD^1"/@7a%,;F$rLjcVOvخ=VB b ')6b!e_:ĎFq~XtGROSes??*kꩲzֹnSeTY=\ϯʩru.[eTY>U:˭|,*KgVY:U*{:ӭTs9\*STǁ*SX;)%5)U,Gijʔ*qLy_Ql:Şu[eTY;U:ۭv*gVY=UVNz*˧Yr~~UOSes>??*Kҩt9nSe3N_Nj\@{t?~O6:\ mn6UcD^17ܱLc@1 /owHq!˛;<c#yqǶ+iD^ܱvRuxK]]Hڵߎ|K5+:{-k5^c oz$D^a/Mƈuq&le4S^3wFK@#xe@R҈"{id$5^)e/mFnKdUqB۸c{1nܱ`7cֵ;?p8o??@32V^ӑ4_x_XK$WWD4eBQ&*2 :Y%[){Qۧ;4*^><bQq_,ڪ>z*Lɿo݂fQ]*.DE"\ =(jx88>,ǃ۟E'X ꋈȊh)Uv/Hk%{)'4wޯ\&5P6OwnCųQ]&u$4 yUoG5*2OdKRހx7 `*Bj4.$tdrװ7J}]r<cMe8r1a>ڈ EցZ~i;e'yſUM^bϺV Q*׍ZMoW1h't R~Yf?-=E/.l㇡h-tp-* ȚF|@S3ݣL n{pTI +"ń-aM/UZ(Pq-KTc$hk|\WaqUCl I[z\Zg=|(J**n,Vlj56={bAWhe]U½t%COAW$N2Y`';gMv 2:TH~'n8OpOXp1Z^:HurCOgdh=(o^yiaK?FhߡƫfhZ*=CWj MJnn1ZD +m'-"֓w+CJ"ЄJVB;+bl|1_ZS[Č͹b 36|7 +͙Ђ<ġBsZH`.q494ͭTh\0~%J՜ m=;BsJb9GlWDL9glw"6|7 +YЂD^9׫9 dxBsJbȡ9K -NМ"JhN=^S[D YZh#S[D9bs=4$s|%Fln>qbsWs-"|'М3_hΚC М"JhZC %4$ЂD )-9_ns|%Flns|'bsWs"ZxBsJbH9[-NМ"Jtj^S\E$!!LR䱧PՑo$X),Ki\L]?U&)M&uY˛:bJ^L +XdLD"[ۤQ.|fRNwoO?Cu?܉6+u,'yRg3bk,5ggsJ9Фgpϝm^xMqT嫚雙 3O~<,Fpn-+\\K G~Lq?Ȁq[Ww Y.}(bRp'n +\^ #)X)Rjr< .D6<&cAt Ver :¨fL=7mςK)*i<=~ Cp}*cニNIirzxw g-.Tr;fƲ0*J0?!f/lN:vT2qwHS{vQz%q͟OQ.b2⒒O)8:ظ]`8[֎3(ԧ+`'u +ПcS4}ez0?ߵ>ThL7YgHHv;ECw'V|T/}lVډzyj-'Hg$?~i*Ӡ?K9s~Ή+3/}buYR"iJ[&fO@o!߀`=q=[hG53$IC_Q7 >RtCyIj5‚ipy +%ȓ[CHL^QyV_%{gJ_F%Zi{DK}]r`U甍ϒ1Ոd ۖk6g( xQ*[&:TҭfC%'>]"R%˛􋔬?Ș$rpr+REJ% 43 Y µV9E#r)"-4O_ыCH&à]&G[͗PJ=C.dP CWZQGbH +aֽxMM1JZ + C?0Jg`%\Ȭ DVBE[w~uTrYb[1%4. /TtWDd䈎BssG>')Cs|ZGzRuK8唍oَ~դ=m%&GJuYuj~2Z0@j-arh\0=1|3C8W!-g@f4`r58ĸ'N y0)s0GsQq _  a*]wNrgqF:h+ +{8Z̆jOϐ;^r,ʿ1K%\ʟb KѣCV6ۮ&ri((] Tǎ=7.Ӈw'|&wF>I!q'),?%?S>5w'קʓC?o_#鏉^gQ_gZ}Tnqe3)G:epf0wxKHSE&uv7GUn-p-w39%gHQ\2)W9 D3Bc%Aڬz # &tY|AFHK_:d\Mz -O"L`A&Mոjc b@\`-,5=@pHVSfRJ>@JOӟ4x@@*qDUœoq^"> QdgI.q=~17#DF =5"G0X@j +6bz@rm6ǶDVÝ]G[MG{Nml>=/tg;X)7k0tޱ\žFƈ:C S&*\Fz3-.N=XE=8>.4zZH.9/9eyJyNَlt  "'@ X-1 +޽Hdh6 ':xgMN]Hav ? }?@*)k1;Dt{ "!aaDFǺO rn׬"gPm?Foq7R0˲șyݵ-꣋U#Vje[`Yt\MeƉFf0 ^iTCdiu *F}{-)(wk9@2S>[$7(E4Crd4 M"&:Q](dw | +=yVHžګ$c +2Aj~VٌK@ݭI钧HG?IQ7nl#>ԍDw.g=e;2Q}ʡ1O9e;YSm%&-甭K-Vn }ӣnT=Rׂ n=cn=l6lO&! ǣ(>)y'.M/ R@;pEy_ȺYŮ_yEY _V1_C_份@Tf:x^<+,ӉI|@OKl16yf?D=:G|2(OIݣU>{DkvهvڐeKnAhd̋/z:bgc{}Z{QF5VJ;iٺ0;Q:5KBWru`e6^COc40 +O;T, ]nR]gF+ G%q"$R?\&7Q/f sndYJypf&ov+L3>|qۤ}-'>y_ϑ'}~SwmguD>8s;>\n zT*7=.@ēJLEH~Pjr1Y@r/d|"tFmLJuFj];7 \ "Df~C_iJGd<4t^ ˜ ?}K%9o +zGx-U[\dRL X5H6MpX6tv)=n*2{E%ޔ"L*̒-[4JipHэVC"fu}@,M6pK5&X"MD6KIe:tsHpڴUY|;CCt +Ua%1.нMbnhX;= +Ryk$eVo}&ER𒙶u{6[k,GTl^%d곚.ԧکA 7]K<%RLo*6Hq$Q]g +iOa)!"j];"Dz?i>N,yZ]p+FT<5=՞z.5iP&~v=&1Wc7j&'^׵܆I9 Ho=p#:K@o[6v&&+VVsJ6Jm dS֦}tAp ]h:$乂 #riqyyPdf5g5U 풽4w{%Á <5q+ +5hXߩFC$hרX~ %MEUBY]Y3(e"d6r'RG0"+@el !Ң"H Q"FTDzɑ2̱}Fl k3*16]#+v8t[#8;@|$Y2LVkB^JX+Udw6$%S{1*N]& S$WC}i#}E2$ZM^ > +kKG z.iBQaQ0Pú*0jrjDlثRJ!j3dt GXĢE!4ka[ +s]i`toF'kC4GD9P,mث޷"d?EK28tniipFh( ' mshȷZ$'*܌9n͉.7|Q7rů-ZwAFw C>n_h#V[>1nEV['n};/Vεp so*|WoN|Wor|FH״o|v%o\z%o\ +ޮͺ\o"]&FoF]įi]Bץo]ٵoÉn]V5o];5\˹\Y {)\'ղ{;\uGջ{Mpϊ }g77܋&{zlqo6O?o2j[#;J@՗_& ? 'xeoO(p C>&PѬ(2+]\{.CGq.g}nk-ZbĤ~WCEAzWoV%7 nP3P傲 ++#+5YI~T:C?[ۄ ++q0[%TV2vb,DghZY2 ۹ +CXDCG6g,(zs +Xan  =31&yə4 |g ոC.lUoVAAfw!ےe\٫,o'YC-/͖^ZkCDpD6\1QPôwgM V,dӬ16i}-7(@<{*O7+ןuq_WuPW]{gtua{FZW gTJ)U9rf$3:X!pD6A?ҴkJqd(`u88Nr +Vr"wG7i.4m͙0R[& `$+bLmP s創*]YVLN*q>l6C2iȻ7PkP~.X<t4?|<|R6P1<h"ЇŦ A@ҨID jWe~+d*28o\w/9݇I% "0Ɇ3|""lo\bd|Q^'鈔ȗ"ak`] RFDl[DD v"jO+,hY+yi5"A>]ď.`BȌ^8Wc@Ja,6^Pr})$,;̾X 3L[@ R-̸ D/J-0%k/0.gܪgX?; + "".3 r-E"na{~lIn. + 2@dA/ +t3 բ2J3&HCUyJa"jϧ,>Si} J3@8s!Z̖(3΄:: m=tZA!-y~b1طj{늒~׎:ZPeI*KRFbd+&J(&vllfnf8ɰiA7m(KD@bwASn&+ +,e" Riv(m j=nA+ YS3dy*oIOΒ1f~IS+'և;fvN!9l|jeUr΂r9Hr֖kpXډ.jXLVSь q@*.V{^Nr L-6jw uټ`l >; wx2>29K@P.8Ʒ@x ['=kneRdm*øy;,i 7A4zv]xBE RU:qMS2͝h_Z_+[=(@@ ߹8Pr$r)u¬>#f):!p9.8 qZQMQT5[i^gf]2m9IգƭtX`9.Bcjt*ɌypX,wP@thQpjJ-J}&~\DDŘ?N07s=pt#GeuS>1L|\Nrp\9sHHףεk];JW+~_enJtW5力7g\tcE  px*nFG# X%?$xfA[)wގ`}c`΀ntPo5ԔcQ#$Iψ'an{@͓)RO!=\>a +g߾$~{$)+!$dViSYzIRUH߇-E)݅[MR&iVY*µh^b $3QirAoZUCP QD]"7 fi&H-!)RX]^%\%)U~LXI)dʲ&v7U+J$$oKEl le  /E ScI2rꈡ҅%Ch*425Ԛ:MHzD,+0KU3)ٖ[YDբ9OD NL] 4^i)Wx+)2@an`WG@3 D\@*fŒH `)Ezia} UܭMՌzYB@ˌHYg%N#,V"jʂ٣f `D %k HڢL1G)T RR| /]B#Hq-IO$ hA4փVGǵ9h0"- %:PWoqaHA{3hx"j  ^sw,"5ZD.C`nۆۛ`#̧sH*mwB[U cá(ێ2w8c Ff>猷iìq2]h9V<لa'[x ~&dz R + \_555 ]F'x5H aB7GrMNE6c`$Gݵ,B3*. s$ rj" ķ˔*"@r4+ n馲0&QXp55Si@ƥxn,'W'=>)fa8tb:/tj&@͵mMh7I2A<~6?{n \පsMf;Ù,v3׾;p/e/3߬R V}y:Xݕ ߀lMȹ͞1Ms".U}.}.}Ԧ,|ķr|^]Ls{ +L3u;\ST-\o5?\Q6pWq<6nS )%^jA2":l׿a%2?>f-^ݺԍM A~zwg, 6!Bi_O{eÜs‡\>m%`3N|UHg@bo;ENU9OsDLYmؔ`Yao|Sq?bWmkŨiOe?z耉{w9B6om<(ԛ"3#omP\ jiKԻmpX& ;Ȇy(°vCgbmaބV.)!lٮRÓ.l.'FR@'@&׵O6;"EiKUn&-^M}R@3[H%D4d+3--N`cO-ŶV*S|qzLqNn2Gmަ"qAo+v5)0sUMR~PcWƧe1nmlwBW"`s3D@K + 0]W琺EY24![㉆v_צxU5^YGnky ò=Պ)[=9KGevgwqb-![2Tu؜~)+Dt{XG|5So 4{zI_?eȇhOڳMOڽpsf9oأ )&Gohḋ<djzDf9g[{ּ|\>vGN)ۭYf;#ldyawj# qdy*\3Hzwe`./mrtV1&ue>sty4okRs(ekN1ut9^7;e/ QR䷼$8Z?jHy?5V *kN\'kN9L:oϓ(?%'k-YFKsU'g4sr|rfZb^Yv2,GQ^R"i@Mky G~mxb<}+5>y| p:\@@Y@2@ WV ;+ȝ6Y Aְɝ&wV ;+C~0O!P`,B-4e9 /-*T}vRroWedhd1wءءeN?ձ\χEhT҄T;ձT;Tk/&FMSK2MYA3Cz+[P$xU)EVU7P%l鞔T^[KfTR]Hd"}^ $ˉ $rDH&&%$ D ML SL UL 'V b~mY=a1De1Dj18,8,28,z8,8- +8 +-R8-8G,FҸ@Yc5/|^hap0bFUk͍Gٳ3cy0H% `vbθ[ۙy;g1o>fl1o( 9lg 鹘δ9 sC}? L_jDjvYfEo faV0ߚNx[+ʨ$M۔$y;5sj.C 5nnyvsIdT/pdRG,tFø밇^u?5޲nO3n%REZeHs:ƨy"vgOc\j=Ht?$ق}]T LGd2Դ葬Y=6GBۦHqG8?6GFh&eept4ѥ8\G'msnͥrls;\3P1Gs,s*f`[IǝOgLrx>~K+3 4WFx(Z?r^C~^'YLSb/8!<tZN={W+ [^Ij+FN{*/_"`5VaUˍq4?TVfpvQ/ k`H{ A231|3EUtYq^Dt8k9/d.>|]8'rn!?o緧 ;!.Ҭcb`KBˑ{*RT.dohtAL!$ZlDXqaqoD{W&Zw\ 崧wbNQ) '@٦`2r$qM5ȧhP3R@RwtC@6]ƭ35IEo +r,a[eU- Hgv5mbgVmL(t93WJ+~ʌؓ'9N{cy\q̱.3qrpy[RG@R9#g)kk eGއk%X D5hmy]exhθfZ ㊆+z uEeGzY5JxRRHS2{Be]ADH%+DqʶSQMkdFOa_ FȕOJT* Œζ0 + c)ۊa }%A- yfd[\0v+:WY:\UUMPA.);O8FmI@FDyZnZ{+@`J sGi ܈fxܸA3nۦ%HqeiU:7ܣN +/kvKh杀H1PA5DpB;g,i)( AEA 4V7qIݿO,(DtJ"& mX7i)kʫ[{kSddlW nZT@T7K + pEάZ"Fk؇̷\Ӫ=Tm:Ex@hYֆadnCjYrv-P$-A?(0z^e>uV|,ȴ2/S.yTGt~oY* +$+) :U}SnԲs ;]>fL&hNZ OEva2^pu|MM{BEn5 k1djݴM3 [Zv'D)ׂ%YXebɛh+hFݭM[LBX&ea`a<(WͰ7{ػږJ=y%N0v'[qdB'W:rx0 QvOڎ8ZN vOڎ8I{C'ARy<{ ۟̀<<V%`gi\enYj?`&foί1qv=Crg+:W7?(HP4Dqc@5K"?RK]sݣؠ|?TH?Pp`mJYGhoYC8Wi*yyS1G*i*)1jcЏWe>M^o˛ʿ/zf}灀 kH rnAvg闍1Xև!tGp_ j;B  I#ـe "crS&f@S@T?@Evt,R)@"}(R>:@B:2%em;y,HނH%E q(#Ș6j#S]'{фN + AͮIg0f#2 +@Lz\ d'fblqU2?0P6_$R6C!>YsJ $[Ih4!,["Bd$,!pd~8etPxT1 ɶ@ȃ@$ĢV8j^j T /^7Ыʨ!?_?,YO*dmV"ZjrEdzjG0wf,%Vx̋ ZHUD.X <,6X#9P6DSaXrd%CPa-P'aS)K:~ ri&pPr $aC( 2^ÖQ.`(o6)a~G Hp$cr92!7PU>8r KUA&*oLjcb[d5IY \ DLC2`gX[ W).BX^(0w(F~18حMUٳĚG`"Ղ ^ Aft|p[jF2)zo@M˧.^\9_S(yH;CWT:rIU.DB*B2jZX:M 3m)@E~I>>ь%&y0"x,E24k%@R6&(op~1luO\:P舑%U2< yJ2 "7F)ӎ|fPE -ƒ0uNXi3})E4e>}+.bPAj  +I&l3X7] )j߇} 2`P 7*"n#r#" v l6&dhU\M&#iXm(}$ PwLBgnUL|p(jdCLٹ$zEd +CNyVYbeePC"V'"yp)j\kQde|pݺ_*%+`щtޘ6”:"S`( 6e9 |5-IŻ\N"GDU8/[O] $!L J3lyj`/3;B!N( Hd@b?E9QyaA gV@bVŚ@E1NRlc¯,q+Kco +r_-T0D4lYֆ)`أٻ _4@!c`>lӖ= f0lCLXJf" $RM,@tx6z`x  P^":*9V^H-?RՔxh% ŬϛҫԀ%sd/:Lyeۊn?Vͩ~$f},"RCpD9HF 1@Frʾo֓]F43I@/,@jU&X#i SI[6ٔ6@+V*q5ޝK7S>r" i?i2l7o¿dB_Uua + $2܇7 +(Ҳv$K-ueKAo-D\t]jƀK d`h@NʙP8RTX *"2oM}Lz+;%Eo4ł ( t!b;K +iLdv5CAl!־E/R}J,[̕ŁT8aGDY_)Μ‰$uHz1*da]ڊ\X$ Ӭ&p`As—$f&L^"\B+bMӄIՍ.W Kswi&O|p\ȧu%3@ڟ?^mwTlq6rcid_iHn]U:yoIVJkqdiXNHq? MIOڎDI{'72׋z^I{'7Ɠ#n-7bOxщYA9sߐ\$Ϲl9sߐ\$~e+ϙ\$.Ϲl)Ϲ)}A#~^Iߴ|I鍬Hssވ=E'Җz7}Csy@;?}CsyH9> +endobj +2018 0 obj +<< /BBox [ 0 0 640.175 423.9406 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/reward_hacking.pdf) /PTEX.InfoDict 2179 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /A1 << /CA 0 /Type /ExtGState /ca 1 >> /A2 << /CA 1 /Type /ExtGState /ca 1 >> /A3 << /CA .3 /Type /ExtGState /ca 1 >> /A4 << /CA .8 /Type /ExtGState /ca .8 >> >> /Font << /F1 2180 0 R >> /Pattern << >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << /M0 2181 0 R /M1 2182 0 R >> >> /Subtype /Form /Type /XObject /Length 11317 >> +stream +xݝI-ɑ+\-HD&Y@/^bI ) |꽌T KHs _w|o[׿ȗ~Iqɗ_]J6Z?z-EL?{~W~koㇷ5=|\A<~7IPKץ/ᕢvs@ltKoK?]JZkkkKk~/9]?˿^7o[nM+4>>Sιv>۵mu=Jj9ۘ}}΁s-էKgg><:/g~YӯGWqgg߯Eb9i&۟_|w~.ɿz?wU}^_o]KvYkPz/<_~HM.J(y"~=/y"nɲN{=EB^DQ2p<ۢehS1Y3{n:WuzV^*VKm-g%y +V5Rzũf5]e[^k:Ru 㺓o~dyXFhޥtWٔq?olEM,#STҫYR(YL:X.q]7h}Itf贎g q)ky]$dYʵ[^F0\|8"|+JJ墏mo lcbE:u4Z'/46B*볊أq2X'UfgDC$e5%bø#S"5X;W*qI+5IMJu2]G_\lco> +x骈%2Qt6uĝ-i0 j]ܔ.) :2mJ´N*oڦ{l]<{^ܻGİ,vtit:: C6@>_Z_'eFœ>Od#%@ʤO 叁-:yXFH2v*OiO%OJpO_8|}Ȕ瞄Ϸ! KwS(r<8ݛM˖cL_y=gOK},an+-Ct=yn-,`R[Y_4S6w/oS14J[nGI@c`*,=坞Mֱ}_yKȰȽt4QԊs +A(D>,nɜ"MD <\|θ'GfK Vyz2bHIX~˗%־EY.>R{a.w-YT6Ҳ0@چ"`k3CR써ʨK@oLH X;R+ +"CKo=q>d29,i05HN 2 5HΟ!\+/N1?Y҃⑅Nz6SNy,2M2əڮk-Zv'R#"bTaaZ~0! IO,Z$ ऄҩ,LL:`"eI;Q?mqXJzQ_# +K%Kd1GE\.FrZpx9$s*KI28BBW$i6fPԵ y'n0txiȐC֒럭:A+"=I| O}$ـl *ObbN+2P}ܤ [d̖ *nvv58sNb_=*ϸIV:>(INb_ɭL$.Ebl]g !D~]@KDL)_aE:8ݚD#.lN+v"JRiJeA^P1w-.sЉ,BQ\pރRނYtAF(>=dcAV6R ,u4y4҉2/Qt9%arv[LC#9].ݗʾ ILtoodIl2CVN#YчP2Dx2Q"/e0Qz/yq" T]ڟ,[[nzv5m[jĂAҖ)lCD}v )um--"&_4x0%<-zbo.<٥𛬨3#ڹ^%YPEEQt Yjv 3NYK'ю|qF5Uע[.7JxҺL|?Rx}eOEd֛yGfb!5a4׍>NPV"Gn a}g+ԯ7Z,w >0elR PʷRR/屬*_ǁ5!G086gNeEXw=I'w $|_[hpIn)<ǐn+ZvroUneL,KqZgImEVs>T)|6{Z]Yf".Ň!z$-QZ>r%9r+\jPiUrX.0Q1sft#i&e2zȴlaCoX x\':4d+*4spj^J` agzHrrDIK6R_+ĢTZI6JX1ѵҷ+d}h%݈B>5hN=*ۥr>M&@E)BzP"4+F(u{? ="BZT[hc5C;" I}9$()@ܘk`84n-R4@oͣA lrHύuVL- +RȔek[7cVr +mR:Rh5@խg(;>ndD γAh}@(] @L6!BtsWw,Jl&l{%$7E  ZD\]g!ʒj)ܷ1}!Mc~'d䡩L"Hѫ$[=%-|C BpC[s3@(zN4wgm(֠DuW)YvI< -VLzX F`7Zq.'Ցcj:JF9԰IͣNZ.%ICR:A_tPft2\\bފF7]z(F0dY:K A9HX{ԣ=O@INRr4YNm.ic'P:&724:p% ^$GwN~04y"V4\F;( 4ߩ;s?n,jFIOJć9Si rCo08آt˂ m/d ++}X>J cz6&s Y`ቦEJ܏g,Ȣ9<%EC9S +{":9Q:VG0=I{alXX +@ GD&%U%&} %y-sp +dPXh Ӈ57jn y-E7Wl[ *{*D&TR`~q}rMO..@PH~![*pp,htd $pR>ew֔!Luz@̕yFP8)O-ydn8ĝxݭ%mt|IW_^\I8'MU-p"cJ%Nƹbqrk Ϻt|{7IGۗ]h;Ddt>QQU'֡=oN^u!NT5b +@=9R 123؁VлU)| R](pȹÐA<\Mv͙t1`]!p<|!mHكC BTHe5jR +$$TzfJ/RRVaL"$I 5><؇u7-$%)rd Q&5|A_*1;\p\Kjy '׬An=DZ٤hdPo|Uޜpnʊ +ra8,k+Te sKGA24L{WPii}"6Ey T1ՙƖ#x3#`YM¿9LJƑZ<6k:YisŸ1:UIP3.Nƀu1\j~ӈFAicDA9BPTZOQ=nFn0'+{ВJ+Ztz|;]@X G.]^Ixe!] < |ʷ\\dRzhU¥4,#EnFrL43Ns;U!Mڌ=`[)^aٗcIߥ@[Jl}/6FGM4~arM:k in!T-JkBNJ q)Ea)Eq:ljREiY>R jWA'!Yېq6}47ˢA>y8)UԚ Y"6 f`56ՎzB|NxbcDml%tIu*grTE%2Q`^ x3=f@7/+CLۍ`51b<=F0rܜ'k]kO E0sPvV@")PY|xn2rwԎ}c2{'Jir72 ++Sv@Fs`a}R6|)8i>*Feʓ[۝穂׼;e+i8-4KЩTƊ^~kHN 轔']7sIJ F 4%dT+}^]33=ׯby*qt;cD)^Ptb҄v4!x4":a^g/^py0\|tqq }QZ뒞XffؒBEp>M@6:S>n%葇iL+q ;֗)D#'E+_nlC2Qwuh)no&y雄7Q,ZAru+pF;zݤxN r3ܰ)߲'X<$Z΢t׫&̎W>fz.͒(p}ߙ(<( X!z¢<V܎>Eލƈ]``l p剩2j Ǭ =ʞGiU)sNB vRO * 1՗'h œ3.[$W"txvaGF{Gۑb2&<:0s+rpK=f/lt3.̋rPAb@FPQQ@tfߕBވM >J+"dsS <-H KJ=ZzuiGw|s >E+b7xKs㝼(DMC`ޛ$F9)![dܾYZU1Z#Ɨ|8' +ЅRjȼ\lMq3G\P2̤p:/tdϢ`UJN3FQE@dˋJkc@$+vST!h#Xҋ3@W(\"/wYC.Zp֩ *S$A߆(}Z>an+b$13'|̐~, @!X0դQݐ 戜$W#S9+.e6)+-Z} CN(RPH0O5' c~ Tw{mvN=Q.m=;uJ(Ex\гÝ%Lh3XvеcD֦3Zȿ 3 w^Lh흒1zc4r.u~%y MO=p#Ͼfuw}\t۞l m](- +c7:&NM!F1;srb!Z?T_mFj'W&е٘?i3BrŐ+]mkXwdvƚzփ$A_սw +!"ɹƸSl_ T7dRV2 ұ<2w/$]"VT N+e]}W3:壕V6 ltXQO+؇<9CphEui.[֏w1X! 3\9OɫK]'M>OK`pYw}5 +=\=hrO&t?S2 qIȳwp;ϓ~ !_1|!çčZ7y.xϭ/Zܘkx|y{MQwRL* zꉪ3|@"wul5P܉߾NCFeƥ7ϯ}~c¼z~~g}' N}}Fagx&^s  I8HbؠL=EL2szD}nyj U"/f&$oӿ&Sɸ/EAh8uk䇛}{`s7ˆuZ8Q8Iu?| ɠel% POoVtasnyq_β[qZ/y\:"5\xQg98G+'(ю-xÃxbZ|;G⚊u }g߹/gO +S۟o.[!F+XH)2o#9fx c܉Okշ<ڏ/ +igoS~r~d7%n\y`syŃ%ϿyۛqU>N + ?=O+>yr~'Ͽx/~'[NL`Lg +I@%?1N,SƔ_)5T!SO +eGfJəNqd ܩc/Ly3:7(V_SOϯQFybʝY<)OS(L*D}OΔ/`3V )Qmf'>7?} ~? _/|ύ6\}suHQx&WŴ.O#ďK +={On\pHOOm_U0nTۗ?zcdZ/ݥ"iQ4Kox>NQ=~/i߼O +endstream +endobj +2019 0 obj +<< /BBox [ 0 0 1720.8157 495.65937 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/LC_Reward.pdf) /PTEX.InfoDict 2183 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /A1 << /CA 0 /Type /ExtGState /ca 1 >> /A2 << /CA 1 /Type /ExtGState /ca 1 >> /A3 << /CA .8 /Type /ExtGState /ca .8 >> >> /Font << /F1 2184 0 R >> /Pattern << >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << /M0 2185 0 R /M1 2186 0 R /M2 2187 0 R /M3 2188 0 R /M4 2189 0 R /M5 2190 0 R >> >> /Subtype /Form /Type /XObject /Length 8179 >> +stream +x]M$ׯ}~Vk`e ؃c4m쵴kaǬJFde%+#Â:I>2#w?ۯ2sf +>/n9`?\9:L[%@|j](u߯O4?@2RTھ?󓁮P]6U `?}ݿڳ5o&oO?ק_}sue;}{̆0{9D)=P.hǩz1j֘7΅4%2 !<@.hjm-ܛaC$9J)=P.ni%3pᭁC?auQؤŽҷ Fzͷ` +Ajk;T)TΞ') [CHuD0rR@NiFGu>]3chwub{ۯVN %L4\EL.1$&l)&;XD 5{kRH +S hlmM@% }tl7 !BA> B·?bam}Jg4q%6}6g45L}Րqc{3T&X'mj!MN %Y*@GTo0LMOSJfgǙ<2*`ss5ۆ +O:[9*`)BCjV3ֶ)B&R]-hyHX M70ʽCi-d<V\s3kBN#ZQhC9濖9 JM?ǘK (.[!{aq&|sH7"stj i9=)o)YbX T:XI9S !4ǒf b3p,kPI`}ϽOq׌bp!G@$BſSm[6cN凋kW/fbwezl?9oKss S6Bi13jm9gLŰ5o#h=ؖ):R`XX%cpOX)c4Z7_xqkL*ӀkI{%yXlu9b| a/` v4Bax5bsu:#.c< 'hC0X3b771?6 ES +q9x +`]"wZЌalۦ ml$ѥ0,!ޢ bQ20gl%aild)u &i^S)&:6q*z:c O8aA}Ɲnq$y7dFE؁Nx46MH?1Y9,"v _ +3u>ӼΑl:ZS):~xţH5K||A1j%ZgGAhY41\Y +4cu1i^U㲂Eu2R8i3 *_hZGp ,MmuX괮9N.?ާvW_Gjwb.F{i1fp ƔZDƗqGf؀̸#D%v MQkSq]\Ium*0;rEWqtcf Pv"DYJ O [s/X.y'°uS4Ns%'0Acfk SǪclDOv=*gzaD$c[}@7l1<bOEd8 O|}ʭ2 |b1#>bS= Lu`ɏLl^F3P"e'cd8Qqث&ntshˤWa %]ZmKw[깩}[~{St"-ut*o?W;'c}#q)g[vK d Y2a%"Jugr8 X ̠^R%|7VohX1(_qRy–lQKc7uW9V_P)jw!7&|oKM@V*8T*!T:CH"o+s>V:cW8 R* :Bjg#bK|م0>s+y.6" , +1}qs>+=u&Sbِcl)ɖ=~spGeNKmc PQǃʼ7˼JO.0i3Y֐3%#Fչ!{i5 8ɦв^3}B]kϼ(aœn2e +R^}ft8j<k+BLp0K_ ɱ*ΞUA e3r |+?7-]p{̉mT5aTmۮk&ߣCTՒY=/ADZ6cj9 /_cRb_x +_}a[f~2ϓOX\= 4X/Ix LߡԖjz2O͎50|VxR\qI';dSUZW6-pw? 'K6fc)7Xv#1kN7{p1gOցr. t;C;x~7y)e(M>َۂOsJ.u7 X& !buE[ƦU`5öOzZKKvz,f^z88fNC0 @۱!Ԯgbpdz=yJ7^~ģr]9O4qrǜǡQWhPX)cLC+쥸IP5F ¢|`j{uReTQQ5O~c?&M<@jűTP5( Ȕj_H&hjV2+!ZKδ$WStj؋$k#ƪYS! k}'k*ȖdM2A|e\5ɦ\M AbYq5EYSܮ5QeXjϏ59ZI:C) kgE4dMkdɢ +"k1a !k*&dML"kj|{էk.QVgx^1Bt5C38Mк^oa9q}lb7Uh/u¯]Ŋ)ub(-[]0eLgU+Kkqث&Ghy5cg2]^] &G)VIϩz5 4Zć܇/&K^ ȃ0%>X>~1yw~8}aRz}v/r ? {?vWux[c5QA~yM7 -bKy +F8jHuI˓A zUL9~XoyU 8 +Eqƒ> {tp|}bX(~qGU bYCfu@?`> {dM?ue'`J,},'zQKvyIfc UWX_RkXjXz~X<<ɮ,VҺe;7X_>ɋ@W2DZZZ.|Wb)!0(NYg*YY s:( +s]Zomys +r9L,l'l<:xE]/ }1os;H+N&iUPֵ1W( քvνlr>I_i<Ծ=?>#/x}7W4zRa>d\Ť=x3<ھG6V4&ƚ n_ڑ<q>Z9d3G +^H(j[-/sϹ̕Wc|0-À~3i|~jiijG{K%vܧv~jb`Mi{T!xy(eOvZx[~yjKN-YXNL~΁!MMM<#.4  _0ַWg\'gV}0ع-x oO0/kk'!{Դ&kzxRj'kS@Ֆ|8`kmɟZU汝2"&`^wK&:1Xz0jxILKpW0-GG5Z,kL(by!аϼs}vB87;͑$j^wS>X+3b+ugcBCvcpkex6%층᬴^vȸ ueǻH!4 p: ryK?.#3RORVd@p#X ֔+Gct53keJ0o=CcxVːCnr7Tk_zy̡RUАwIv(<;ԬCCk@ܰCK|`g<PMߒEɥf*P:LC`56P!"P5|l$GvHvPwJCE;\`z vⓝ6-U)v8]gj HvȌWPUIvѣ1{%;\W\C=pW|CiJ`~ {olnCA WC_[ևoM;*n;ݐK))\_u~x& PFc4n)K!`.8; uƏ{bw_7VVrb3yja%Cjઽyöh,c8zKY!{lrZWl"t]_voxbCxBtT?\x/N:R߿ Я@Ơ<g^r\ſW/n.\{{0,wwue #BJ%l1mF-WtBP + +ᵘ?b)]Uߢlr7\p,%핃J.J||beOlW|0y{aZOK䰪!."lZ"2KERmu_+tOzRGY(&Udr/]Nhyc{iUO/B#M5H-=Jo9;b2(&&Upץ֥j9B50QEӡB1'uc[2{2dQզ~)Skiq/O^TODxT\&Pl-S{^[9H)HPx)F)g~N,nקǧ\ +endstream +endobj +2020 0 obj +<< /BBox [ 0 0 730.8125 496.01377 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/math_performance.pdf) /PTEX.InfoDict 2191 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /A1 << /CA 0 /Type /ExtGState /ca 1 >> /A2 << /CA 1 /Type /ExtGState /ca 1 >> /A3 << /CA .8 /Type /ExtGState /ca .8 >> >> /Font << /F1 2192 0 R >> /Pattern << >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << /M0 2193 0 R /M1 2194 0 R /M2 2195 0 R /M3 2196 0 R /M4 2197 0 R >> >> /Subtype /Form /Type /XObject /Length 3522 >> +stream +x՜K )hZ#7;N ,!7^*R]]jyza 4͢(~R=^o_>z[~~~?> i %*m\ +j_n{qaGe u* +6Z&88zT㧷wǻg7z2U,ڔSpP#YӮw2Gë 6CHJ1 wbV:K +ŏ6pW3?y7ӛ'7_ &߮XeL1*'0 n$t3l]Fj}`9cƥj +7(pQQ`BNP}` nR +^/ V]/h +ven+PYedWEʷ Yq$ƥj,>)r. et-fΡYkc`Bnz~Y㕋e?^+ӺU1'QQGkrdUeya_c$ڦ]ٌQu@h"77IXۈQ*zx7o'/I;IZۈhr8AdE;IڈN9G[\H&vrϦJ08Yu|pb P[f9q fغTANUwv9]G`?c\5t2a9bBe?!K+9D{ Q%eKW臀̪=d :/rKЕ„FQU$ZLhPN+u)+݌LSBr'X8V3RkD4UP8/󟨦Rɘ*ȯ:R*"xw=ϬQ\6 h(d1kun +m調>vBX U6B˹.W5ЬjtDj5'oipsמ27@Ws[PJHqA +̗wi߸y{evQ;`bV`y>&vJK9RlTIr%RK墊u6dIbUXgD.>Jpr̎WWn+#&SW!fppdž:kp\|W,W!g*e* \Y\:W!g*0pnrpv ?Hr9Wng*,*0rrF #W?%3a:ӡ`%kGo*#H␽Ѷ1Cb|Uez _+tY!j6ݫ/5k^zt啭 :r9.u+]1gta'b >t"r䂎5?b Bz- +:;D4Bѯ ʧ!IvAs?A~q A 1#h灅# Z[d!G, +:#4x`Hw 2g.fY9rc#i{x1x+j<3-tW1Wx ҦP^1:,t,  C^/HR᱇ rBϗy`3/ vڇ +ѓTϗ}q'# bge/B/f2'#Xw+3 /񫰼\9l]yRMe_W A1`}l)GK]."Ϧc|KY(@с1{{unEW(GlEc~47;tw-%O(7cїkS4 +}[QxIѣS_zn6݊$>]^a}ۥ}4k)-_s|cn:'/ nn h(ȇ< +Qg<^3Y"/n=~6p!mswqL"!8XCy`{ܖiO!T*yvr.t|FpP8'<wDIFAB\K|!pd#p$`-23.. A_\p8mmg_\' f:/.5s8Jn՗.GfK]sӯ+Nuk0ֿ ?&5g=sW;Hԭgp`)QW4]ٚe:-D9!19q0ˈ.Ͱ#kzҝa{:b=LA}Ԟ7=~<a}͍xkeN-MC_O HoNcx㮱㋋4D H^5}fsڠF134"z$jơJ(@-Γ&60[Q;CCjldbx;B90MoK26.Uv"M:'M +[Dfgf5 +f5b9|ܖ-#| iov?b8籃-yu߽{Ͽ?%b;?7a436Mm=E\~E&/ӗY<}p`{-b~ w19 ,c7z;e4l贛I4 6*oA|x§Ώ'}`Y 1X'ި`yrεLD& g2OI +tZkw3vˮ;q=ﮊ4$Gx=HnrUZLɒ HT[] +endstream +endobj +2021 0 obj +<< /BBox [ 0 0 720 576 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/wait_count_1.pdf) /PTEX.InfoDict 2198 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /A1 << /CA 0 /Type /ExtGState /ca 1 >> /A2 << /CA 1 /Type /ExtGState /ca 1 >> >> /Font << /F1 2199 0 R >> /Pattern << >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << /M0 2200 0 R >> >> /Subtype /Form /Type /XObject /Length 1998 >> +stream +xřMo +hT*q\g=9i?"{#>[3RW bK<55l-Ջ/O%;2%MMjn4.c'vj]-J#}{k~rqZKA:>^pM4c8;nXGQS녻kBj]o;^D 1%Gs t)'s̹CBXR%w ˟g,#\8rz9;@:DoCX\#fb!QTi/m_,%vf6)GEHZRZ-oH.ކ>GE2Ruc "[ REmGSyQDj+:j He M6Jv~]XCK积`K[λL:Z`{2xε3(|QY,ˁ.5"9vS\RATC=2K!4GqdLKP}V3$t'{hK'As`j͡ШIԩ^Ov0w '0ei($YVMWʓ7],#A_: =01i,r:}ծT5֖b鴾4oLA{Hk=η$a˂({^,΁:AǴNuw:_ݦj&NFFnYhx>xt_> \S!ui|}x~:8|}#Ag_~/Oq̨YYÑ&d. ZSիԊj<+f"E JL-j5- tHh)2,hJ⻾^kFj# fsX ǂ[,sm8`W%3D{:I]ڨܴ ܹZ52jq]{O]X"F  6wHhuV$g' ,Y#bB4ifF:Gg+D=ܗTOCŒB=|2JŒ#م JixYM=$u+KC,'Y2Py}2CԇZwR # 3yf13 :9eNQژkk;H ݷLfU94,Yugܱ$V;iWw#FOnUPTcrRBiסBu uLfcM!2ݛmXwgے;!׾A>e6 gɇDixh! Bmͺn^|}·발-)zP uu\#A ʼnuCůӼ2d]M C`฾cz ܏V) + }&)뾞1SZu(=E݈eؖ|D"W_tdÄEw)~__?7_NcY +endstream +endobj +2022 0 obj +<< /BBox [ 0 0 720 576 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/wait_count_2.pdf) /PTEX.InfoDict 2201 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /A1 << /CA 0 /Type /ExtGState /ca 1 >> /A2 << /CA 1 /Type /ExtGState /ca 1 >> >> /Font << /F1 2202 0 R >> /Pattern << >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << /M0 2203 0 R >> >> /Subtype /Form /Type /XObject /Length 1642 >> +stream +xYMo7 ϯЭHtL&@ȡp6_pIQ3;_Et]\J|ǙG^-=y~~>GWr~{G ޯ!}^OɊo7j8Ox2(ťl +ճ} +^/fƭI}V(P½pI=°H_rICRq9rpnܟYl6}n7 9{Tc19 +UC; wwtrh HP/}Ya(Pa_r̲!J>ƇF0OJ%H:"*,ete6>-f6"(,z{ @D$JQGWfCbf#"Ģ>c 3)Nl|"[lDDl$ 7h*^k*1Kgj¥u>^JMyk;656kaM-lmæ*qSZΎ 5Za3Mgj¦TS)o-l&2yPWЬ%!374YڂK'!(v4XJX qYfnjLg+e(ͭ*w,hR>q h:S4$pET@s$, kiLt4 Fh$(4åt33֪sB7 ew,uq?+z+')`BBiPhYK0Q&U,ߥgR'A؉c50^ J/VjlgSԋEM^!,Z4]vUb`BV

0nkZ_s}@Sέe/mJ=r_{qMA#^G4m;jХA6F" MU iɇ۵SYhv/ a *K^BDi9r+aHr{,!xHwȎ+rۺw5Ż/PS}Q t݁Hb$''H&]M}㎥DU1;A5HQ}@z`Z"̞j!@O%&u=}LvQ+5P +endstream +endobj +2023 0 obj +<< /BBox [ 0 0 780.7875 456.46934 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/dsr1_nature.pdf) /PTEX.InfoDict 2204 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /A1 << /CA 0 /Type /ExtGState /ca 1 >> /A2 << /CA 1 /Type /ExtGState /ca 1 >> /A3 << /CA .9 /Type /ExtGState /ca 1 >> /A4 << /CA .8 /Type /ExtGState /ca .8 >> >> /Font << /F1 2205 0 R /F2 2206 0 R /F3 2207 0 R /F4 2208 0 R >> /Pattern << /H1 2209 0 R >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << >> >> /Subtype /Form /Type /XObject /Length 1687 >> +stream +xYn7}W`jwչ9 P 7SNdn+-)k7@+@,9r E|J̇ť`w|%C| $DB .?-'뼲>R^b~#x(׊MT6],@6Js1%A;xO{T|w/,Y`9F#uT)eË3HΟGoɣZ~ԤM=ċʢu9>[dtgM`tkUFOdR87=yAXEwS7Z=oye {dF5hρ޳S6u1Ek?Տm8>f7{mVudx| ^4o/Vrd)zi7fY3R:ҽXf >YgX/=!dAU3uf;6uՏ͕1n3V6ހr5WWMp͊>q ]7l8>Pd0yX<﵄IV<gR$<[x%^O0 ¯wvoaz]L~k7d֛w`.tU5!u`Ǭ_63E/FCz ɤea7HK)xĈ 04#U5#u1F4l h,)F=1b,}Ȕ#U5#u1F5̉HQԯ#Zvk#!)IaRZN~QD]M吞,[=Y/˹DR^!Av~ul9uH'!8/XUwBa2X Ks&!T),R*1(4۔㴰Rܣw‰bnVcTWwlVD6\XDvl`* +Pې(T-Z;卨_[Lh;}#֨M#+{~J/Jj ܘzÕ YFqV lP&o +x3w-z'x{-RÎR|"|I1e)Z[['X#r9'"` p̡0s=kPJ&C+s# qRS%ɻb?]︨ mwJ0GLe04b0(,=턩HjC7ޜƺ4"bjnnt9 +Tp4vFӔAF Zgc +I%_A#xʚ#Ec&UЇu檃áz>ה#8y͹2\rݲ +8#qF\3-7XIźA_ExY.rގvaTr݁/+sg>P?(scqNqv|.Y]U  +endstream +endobj +2024 0 obj +<< /BBox [ 0 0 606.48 305.28 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/lmsysrank.pdf) /PTEX.InfoDict 2210 0 R /PTEX.PageNumber 1 /Resources << /XObject << /Im0 2211 0 R >> >> /Subtype /Form /Type /XObject /Length 44 >> +stream +x+230300PAcS=#0GA%r{(s + +endstream +endobj +2025 0 obj +<< /BBox [ 0 0 812.4 206.16 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/lmsysdetail.pdf) /PTEX.InfoDict 2212 0 R /PTEX.PageNumber 1 /Resources << /XObject << /Im0 2213 0 R >> >> /Subtype /Form /Type /XObject /Length 45 >> +stream +x+043100PA#3=C3GA%r{(s + +endstream +endobj +2026 0 obj +<< /BaseFont /PIBJCZ+gbsnuff /FirstChar 8 /FontDescriptor 2214 0 R /LastChar 31 /Subtype /Type1 /ToUnicode 2215 0 R /Type /Font /Widths 2216 0 R >> +endobj +2027 0 obj +<< /BBox [ 0 0 594.95999 618.95999 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/safety_taxnomy.pdf) /PTEX.InfoDict 2217 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /G3 2218 0 R /G4 2219 0 R /G5 2220 0 R >> /Font << /F6 2221 0 R /F7 2222 0 R >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Subtype /Form /Type /XObject /Length 13215 >> +stream +x}ێeq{}~6d^#3g! DFX+OO!}v[FSBs.O?K\\r2_%.IP]>zr1x]P~~ޘ^¥_|2~%$ޮ_BNڧArbrh|Z+BlmcRKh5 r*9|)מ $\UWx9s}r]OB,Q|m<ߝĚà}LWѻso}Khik 2{}L %B.Ţ_K4 9'?׻<Ȓ_b%]!&j8%ՔB9[cv{Y?Ѓ5fפvjrB,.\~r*UF~(@]TrnŪ[.*UIY$˩[]3]+9}5IU/T)ӵ;iUR/&vZ\U)%Z\mA'M5| LjuYoC kuͫ>L%^Z i6.@mNr`в\kAY|)rX`.46[>ݥ2?1LRCR]g!&]cu-{QSl)v0"HIJ(MW,NzNBPKŅK$]-b%d +k*1ܳOTJ|1S+j|!u%KCct6L$}NC۔bpIi9E(ib:6i'-zt&$|:H2({]}8bł&/6t& dceI0 I[ ` &CZH[VllrE64 s{gȮ.Un \;Xl75w݄^_uPZܮZܮZܮZܮ/q-_K܂W+N/Χ/-~|~O~+ǿ WRȩ+|oE})~g>g8i>-?//'PetׂY׏~ܼ芕+I/+{(9s\MWm"Zڠ/RPKvq ~.5V&M~UAK/D%7 !U__Jm+^z^~MUKq!ܳ8H9HijURŅ@zq%Pez)_VZT⚗1յ"Ý o.IR|/kQ?pIݧbQŬ])=9Ү*<\ɽAS`O*Q1%+/%Tcz#J(NoUBܫVu-xuLC}qqrrk/'gBt>!)2h%[3%8Br/HUi%VWZXҞ)-dz*5Ji tVl-UjAƔYiJi -Lf:Ӑ}/LNi%əq*Ul6jO ~ҽJ5lzT&X]*=g/͵(kc7J .nr ".Ch%:U nVKaK[z0=ު)pJm,EU*:ZorU$OIݠ.. 4z761BO/x_` RVj>~r=Kief#@|zrᇄ:4 0"C9A@@֖ ]bI.ma[Ida:kTtY\aؑaعYYYxg+yry+*3Ox3ZYrKQFgsJK\Jq~.IjZ7 EG*[w(ml\oT$rPѩ";foE\بRRTQZkm:V]9D*5*M|.1I5FRBzPQBt9tڣDeF R$QiMBv>"RKEPcrBE=Tû'A\70*饚e_^QŻHp>L%F%IՈ"sKJl1F%FxAEj:J"ٕ0J"EWVr)gQD uM2\X"F꒹LK!ՓtǏGQ9&E,DV{i'w~tDc2$.<8.4J2dҝĨ4]btx  saw#w@r;3 +9b{g----{ ~ަ|>o3R&D59?~G>e)$%}\k%uzkq ]٢Rѝmc*+Y9Jӟ|M_| +2#/ڲC~z)^?_JE4u\EU{bԑTj]I{! b| PM[Y@4^Stԭ:&-u[bV`ZDݖk+)լ 'Q+RʹnYs&H JBS}F||zR.^*尒bPg| ``I[@ iLablƖ_-S5hnaYOߩSHNwt({hA)_}O8U$bJ,;7^[sڲb{m]#.DUZ vRv=H"i }=RL*z1xW?]iQڕ6 rF9Tv< Kk9,Jg`x \"H@R !~Fv +#{ӔENWIڠ$VWJ-(w%=Np/QOcqvDS|sѶ[s~vc=iuH.J-(22Kȯ-|@icL#7ɘK2yfr%Gxˍ/7UL8GcXJЬ7zwb [EG&{~#\Yð*5-uBZp9y/*q<]BqE 4vgYJ^ ?HT!{FA.d8@z-~q1bsC^ 7n0on\AoRbbE]!Yz%|E{yE'Mw*k;K)H4!# (QtB0Pl|Ąl.1/sL$GI/B|z,"YZ?"^RWGpo^H\> yR N@8]}ëXk0>/]6Q'x0V֐01B l |K0|8y#ύ<7TyD5RV*WG01E_.SBsMc:A'7*"s(~(1++IXU!iOTRR~L*%׫FE9`Rr>"PbR[jP*!TRbә-[ :u*)zʕuDgs92 ٥ܤv*^ ҌUb|>|DED)}D8:Y*U-ƐL~ Pzo&Ki`..V.b]"]¦]or2('->tAa;"&m$6b! D `x[>xtэG7 +xb^-cy?(k;H|iZ~,momE&P%9 T iji"j>(ʍJJNB 0YƎ]ȼKO8e$\8ot3 ENo$@ 7Oj)o(>cޑvl(Fg ntnVbjQ%[ܾ[)ٱO rM2rbG7גHm>NoB$&=|pƤnL1W¤ǒDz5<+gnzt*:hg~[+E!za>td6&BS +k#i4|(ͻT)̕^(H$C8hzT|&4F"]3^w2b#Q#ar$1V}LaĠ[2)8>E(CvE EQBIwm1(Mg/evoy .#oHY9Ļ}{%X2Bm2+`)2T,1@ + %#G1uO +QzT0Rָ<-G(31 L%RblӬߠ7zqǍ1UAp[|Cp )7~C8EL!ۅ~fyAnFY:P׻AV&av)ͥz/7/KjVZMyh,g4U1yW*/Zc +mSp s}xI-S}L:l_=Oo.R9G} 2QFAi-Z~$ + zb0WQSUTdWz" UR\Hľhg[=Ϸm Z_#Z_ h}2b^h}pcf-[Hu*S/pDo0nҪMLۉd0 utMӺ߀‡}7 r "g:{}Qx?eFZF[~4WIۙ:Y̽l9ˉm'ˇpeNqrp=Ri[GmWIZr)Cˬ 1Gx;UѨ. gxѕ^&?.=I+q +U4 ++%NJӸ3 Y>#B/.]=Ra)+4"x%/zn K+ +N@:*^T!eW[J*.ָWsѧ%K`4'h]{/bk:w[2 5G&3pgjN[04èU{PcBqI-XRCףX^չ*#҃qf cqvpS#(Qr2n}9|mJ}>H^QS$z7Z +)Ztb WI7a_l=W2#,$: |)@ny O=򕂿juYDaiէvDnaNl8{B8Vi[J=6{cgF.nV}^ZY5pZN;^mNxvzN*fʕbf+zRq!x%ZnsR @玅^J-]W y*&M8T- 0v^ ` *6n l&c !,)uɝ +€ UWljp\: !Κ "IZfӼ@=Bn!䆐w!䩍z~9y8 9Z&c"ci+Wȉ8]WG@=}$QVu .ɛк[кD5VkN%9__Ez@ { ԩWgǥ_Eu+Z`#nI>L:Yt2u|`Qau8N̤L7p7uaچ)ոMtIfDnf}ɔq)q/nOHL-y,hз.p?+ RU>]Yd+F|#ɍ$7HI:E{v}\6Rtdw 0t4b+t_}}`n=,p +n!3=3dD`w7U2V',?5YᠵxScA0[4uëł^aؠU[ }3C Zfe$e-3$N{!S u͐`}37C c}3Fh lQ BL\ ԻoH7C +@]X4Zqh C477AXhyPW_khxC %7PJXipkG|pkڸtxϚmpvv{z9q{sVu1Z6H0l$n 9kPT0)c@]QB,Y 6ђ@P\w!*]yk, -|Fp,Ce8@K"(';^ \zR;G%ȰjF)T[29PST2L8eFC5"ޓ`!e|'A4nx OMIS~uܸ!R*lл 8u`ƯPݸ+9iͧA)PқcHz(?sr5)6:OArq6鑠+dq>񋦽Y\}*y7D1lFiqy޶j/Aϕd^4^bhWa;H +h$43RFKf`!ì,Z1 %t!$E +E0 E{ 𘦎Ym,6&A0=hxNZxVal: mx8Ap,!rС&սƆio,ƒKcsys,^/_=Z|{ȫS5.y'OnCr@ܹbQHq(9m*4*4TpD %G)!ȁ(;&<{&=l%= +)<ֽ~bM pF 3HV6iS H4f"b <q}FIl"$ 'F]cX"Xz5j0V:Lh,q"g1}KsHZh~ 7|qxŷmV'xpDZ>s1XeQc:whjp\K%g]C|sY)ݩ~]eA YG,tջ7}~THgID45ŨJk~!TM&frjpy.qu.鼁8H"} .VIR>MMP^]#0f6:dvᆴ衩Auc\ͣ'%io2-ӭO^Ti==qžm(s|b@Q6|/N|+siK5_}j\wO}qyQXMҸ܄\́ S2&v1b+ +( Ӆ1 o(^1u +T +L0 +h,h0kk 3 |EI]P)尒bPg| ``I[7Ȁ ҂ oOƖls`,޽p")>)k:_6/E[Vhۍ~BomdHV^dj5*5<-GVjJ65eR8jt6դ~hSa&ek3 6mBdP6^, , C`X \CTBT€XbR~ [ŹXfc2+֌ɬ6Lfe.`2+ɬ+&02hUCX!}ͺԄn]WbH71Zv fe`V⬙`d\aoI|cʍ)7ܘALyjO%nP|w^Frfor (ŵ5ca>80qF["#9ErbCCr mQPWRXsM)6@ B!(`@N$rzԌ^a@a<->πAF3c )''QΒH IIK6S{47&%cDr6  +endstream +endobj +2028 0 obj +<< /BBox [ 0 0 1781.3768 2855.9195 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/safety-multilingual-v3.pdf) /PTEX.InfoDict 2223 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /A1 << /CA 0 /Type /ExtGState /ca 1 >> /A2 << /CA 1 /Type /ExtGState /ca 1 >> >> /Font << /F1 2224 0 R >> /Pattern << >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << >> >> /Subtype /Form /Type /XObject /Length 17165 >> +stream +x͝Kq+r=%h/[Uvz U{[ֲ~}ȓ{8<$K*D$"}?}U}W/C+*x )ZIcnay}m1˟UI+__5m5 a,KBM< x5jd)izԵ!ҍ]K/ţ-apcX^ P}!5lHnqe;-&*C7X|W5\˥'NI% ׮KCG`ƾhkdpt&ۺjirf/_LOq_tA?z4A0Hl Gku%/شe?=٦);L0J?늾]>zy]Ǖ7@Ud8лN|oˮw(_G?evaX w)*A~hY^CUd8Xl]N߶U5OdXi]'2r=ԥȟSoZc }+ƪpPB0v{s)mغdvC8+0K$C#׺d$m;t$dhW&NtVe+ZXeTQY]Kcv&FmMIyD.:"-̘5M#sˮ=+23fwԏ~dWO_~z~/?c;93u6][1G./X24f}XH,-t[nfi"ҏ0s/v96I?_ j]wj)GjiSKD+Tiƪp]tTE%SXA(pVEx&7V2}{AU˒{U!M6MJ !.Y+u?*WTPzWn.Ȑf $Qb:.sDx=U"CEoK& Ӂ̬ӱ*2ܥͅ#j}ڬRド>,[S:F.`ތ{>$}|>"Izb'誡/_稿V}$ t O>q_-ҾldGF4W<}[(nUOĹZuh5d~\df&&,M"OMҲ~t^" +"WJ{z7u2jCC/OW`<W@5?ߔm|sݯSBgYWc6 PJ8됉X2+EM7ĪYdع'_vH*<rCa2^2X~T2u[ýM$QvGSxv![`wk?{Wv!N&WX)|L`HPKOvG3Şc':b.%cw2.˳}\Sh`b90׻?kWz]Xe,͉!`d8{zGyNok'as`@+kw}9ozB ?kg^gkwr=yvו~9G {vg}bދDe撈彇-X;L3QƢ@kQkGa0"-nCϊn>?|ÛѦzFY-R^ˑ^NVZ 7m^,9-ŒZqfie"ҏ0y/v9{6W3y5Cݍt\Mkl'I 8:vizdHld +BUl'd?d;v~PnN4L]v:^5L ɐ!9slwk^]|@a7N )FY-!a>h4kח&ۏj|Mx~&Ĵ&aDd;H:E߫OoO`uFp4%5Li~nҊ$R$-W(WJA#+v^`v߱ l'ɴ8 +@UloF'~uH!A9HʟXyvl'C UBdf}1yd; 3v.߱SMH!D8~]vqNl,vV.Qvpl> gt癥53QTo%aXG>@hFʮd;[V5~wӏޜlΏ`Bp01&*?I}RHSVi?#O?S\{Fu!.Vˮ ɲN,*HF$̳K, "lQxA, lW1~]v7tE ɒ k߁l_vv$=ٮ7!w,LUWa?}c17sg6HmlԤljl}on!h&OjOoE-u'l]k oMmotOj jԚ(بiot +M!Ƿ%/Pzv߾X$2* +@( .GNDQķ/ +žxT7Gv$D]!P:,$qķ%ENIHWŮGӇsNo'K~oב:l |;YJ[E`ە!sͷÌ̦|;LLѷvѷvo!myۡE7. M]ߛ,_&WRzH\!x{-]G$l| oaۚ-%[:`HPɚv gx/r ,-;T! + eUdbNvI$;ugp7>\x{waOou=zk]guuE]INv[pLx;x;x{ŭd8]?(d55Vved8u&]Ҏ¹a>v2IZZ͊y/yo?43c4ѵ>ad|[aF<0"n{oMl͗ג_Ѧ_m>q4ЀֳZ퓸7m^89-|Zofi"3ԉzJbwþi-C2۫i d0 n N@!.Nsn .?_Pp;! N!@Bp{dPt}!@8ngngn/˩T!Sn N d o>mV Gv0u aތ([vyE|FR x;er >Jߢymf?ɭuQ'>Yh$aez_zɴ? &&(,M"OMҒ+J~ JAjEw?Nk!B2;`;L=~9slDro`@ l NA@z[`;! !C`{5J8r !@8lWlWl/Yϧ!N4?خ`EɲlgoLmGvgl LzvIv);iOlbg lWwoE .hD'Lnotc >A$A+?CXc'JڟzVG?[{χrh;/wWmUtC;,/m':?D9˿C3\.jF, " mWQ]Ertcw?A, m 1@ԍc, bp.ڮ|]h{): u倶%vD^-vGYDTە~f ~'HmUB Da4Gq=0>"m+7C?ީa?iBU<dwvDX>f} ѳi퍮XI"OZSyPtISgk2rj]w7>:W}bwE"Q@\/H\;YE!׮k|!pk7THUkWq%YtfF,)pJ6\;\;\{9m]ɒU$kWh \;YsJ[E`ە!'Sjf}k\;}ԸaD vk\??TcFvy&pPpXc*ucҽUxO~(%ٍޏC~ĸ$ѐ[dwk?{VF{0$^n1dbNGvyܭ,ns?jnyrk'vNم-W ĵKA3W8`UCUd8{&GGU? }fޟʵȵhJ9ǪpL\;\;a8ٰkgkiqڷ+\;N`f\; `f\ʐkQdȵ`.V̐kǞ/vk~4M)_߄s‹{8^@ZiSƉ^s紈MlZERTH'*q2:‹uj vZ. [A8w4XD뻐HSjahcۓJŪȐ vP0 pU!MP)t{5 qw4R:P:ftӱ*2yv +R4 cSi#VET;/Qfpjlj>rbUeJ^E=j)(J[WQ8I3ՎdUje2Nz7>R]BC +[ +K'fwQ$RԤ5ɟI(IJcE=A~3_iC;Ƚɾiw4X@Pskah'ܱX; NA@rUM93wXvv2 +k?,֎#%o{\1kgn~vR-4n`'5?6hMhIjDIS/Pg+v^krUٲ OX;GvZn/@7Fȅ(֮vk FQȃs k]eUUhIsv;`wd7ͯ3ҏ%ﹰvb .zj#n]ISjr؍|v;Zk9(Rq4G=5ۆX;a[aVc?-\?=?u>ZXcmW.={ꊁO(VبU՟QQZ%O=B+S蟭)!ȈvEο-x;ZL|H9 +s2.kgK(5vM/ }?D]vȽ&0t;ZRlvv-ⅿ[`lIra*HE֝_,PYvcZ[E`ەnUX;Ψk$^~#qG@Nv2a+֎=/̆Mk;S_ +Ώ8 Lw(Iep@MTFCm?(~~k`H}[R-;J? Ya-%s 䟻%O>L6/tlFzҭ-68~G sմ!쪸``궟H׻@`rs }Dh^AUd8ǫe^ ;pSvv vَX{lg`g*'oܵw4%IZZ͊y/y42? 3c7hg$a~P6fLd; h~k%DCڵ v_Ѧ7}kp4psZ 7m^,)-l[mif"3ĉzJbwþ#i%CV2]6`RA#N@ 'a TEGs` AdR!k,V*2 BB;.r/e ɐf J`hki{Y_n i~&;.r/M|U-]d;-Qfpl>}8oFŽF0EwExn$M mOvݡ4@߫lf$E,4uůQdjvH}JHS4&&)OE?Π"m vZ*F&h;L=~9@s)*2$@>; Sg)P! !CW7KF?L!@8mW`W""=QΆ4?ڮ^λwFY[D-Sۅ>h;Lh;D5z m=.Y=u~?>}z-?]-4 n4?6hMhijDIS/Pg+v^`.s^* -L{Ds`b;@%Ar* +@(W%A$9hNv$lv;Xf~x@mdI{.;G.s% +x2I h^T6c ܮ"^71tjJG-tdt=N @봐ܲ"`ANNuWtH} φs!Eėm3ءѐ&9@v + 7\ǻѐfVgfw4yy v +^ d؍bo +&mVGv#6wh(mS-vѓE#0D3S;)ZV4~iC>\±D8تH^2>I$Ik:?OPs_Ч_iotHgCiP:]mvst;Lt=H}cW8o_'C)taBW!Mrsnzl ѐfrOW_\߸]p i}&p]E!* +xW{ߌwGnlEҴ],a(|u6Ԭw[9(zȔyaHG28Fvq@u+M"b>[,±ת`B {k9 b ZS9DZ>>L}#hpEu?+p58x$p;ZA1gJgW'UO&\] 0*׃X:Y "#@vXdISQuyѕϾddIy&Pc4:ǀ.gwt&.tG~L}SiZ؏,.bUԏ}aB&A:}J#z͆0ugp6jUgj}jV3V7:fjPtʹX:w,]qs D .tI%Q 2DbE|zdI,|BURv܌n>29LȦ׃bˋɒdbU׃̑ѧKѲLWrR+zڮ&0G_3'%i2f ts4~x&aD׮Cϋ02!~ovǧ/_jOWd*|Tzŭ@9p_0X¦CMm?c.XrP~Qt]ޢcL We2!]B.~Vwt[LvH?ya^)0.[QDZ)Y%7x;˜ Goja+v匣.:ѩ|Sit;Pw(OyOCG΃뀜눢K^U_E'Qsz u ōBRN$p3AtrsrGV=8͡SQPzuKd|D + ;)tR&}ދÔ$ꊠ<9$ tW_ǬtQ/wH ~̲VСSEsV +W|C矿>}zl,fQ'f G Q^b8]ɅuP* YK%34;|:a^D?Ry^>sS9zbNsfs2X{@P.,D^.PyO@/gGob/rױCI?8gX^ѯg:CI>Q$NUNCiIyPeiY7/A[&]Xa~(P8l^z>R_ 3e3e#z(Y|eu*/Oo~K:y3#U йd*n'Y3C"۳3U<=L-W(WJ@{+B~ +yiY5K.EϹ{d Z<}P>t_J*OBXpqvZ/.D$&g9Q.^B I?(W7(LDSyKW!и +e3#dKG-ggJ[=@#z+~q^ һ]@$~,{|@`XxuK ǝĎD\ F *2@p>Gp8fwNƕW8C#P @h4WțC-H~b %bȫu89ƍך`C8 hb}@`\߫7@Eq?(eD\W\> *8Y҄! !@p KU@0@%p8gg/jj|<dI2* Wa>U},p%-}~T U0;%U0EZXEXnep,Q8ܾN-4+lB~6d/-!c('4|h%j/,^áT視d; G3<+my(OLF<pFCqvcT㒋"چ[Tt ?sZ^̙(.+a1T̓5tㄐ<1ă^4a+ ăK"{S +-zuP{PQ:P:w#08u= Ύ}ӊg򣎟I@|P.S;|FE]y(JAjU+-2ۅup( !ҝ~zx{asa޴M{+5M;{P syʓ&&n Pys@}P.uPyD՗@rOe@jJ3!*V!ޟ)kUa/zܐmnѣG6mĻDe(Hu|n LwuVϢ""B7]{E~os O}b P ¨VEx[2z; V! +A0c,&Cp*ͮͮU i~&l[!*Ћz]s:Ua74!FY-aah{نy3/RUۇ+`s˼aD֛µE? 㫼˟n +GDp +P P]*sSˏ':[r >gKhxonA1\ϝ/>.e(?sN} Z'xފpZ㞷Ue>kyZ^̙(v:ek;7츁kLD8(\ vC-EZ  w9~>^,N_y>CG΃kePވ2swC=T~6;lv<;I⛾,5MG?&&|ACG΃kfC,埦wuPĵIpw' SuKH + _1S-aB|\ 6e&-ĵ qmO6\=r>O?}Թx 4LTk$kK:0|Js0a$CY4Ggq$1'ҟbvN炶i8+(w5z܂8߃ؚ|8|G[\7'=8N_$-T6yp6y岌CAC=T3m:u(w{ mSy@??]/NihB۴[W + Sy^fh Km mlH 7z:mð޾g +چ^f8 +ھWw~uyϣԴL:,|J{PS{V{rh;=};c ڦ lZn)jr |`k={(|cCI|mgP(Yg Pys@}{%I?V>;IBMTLж +A`U ry'TE6qCj"Y aF"&e6LWems;چAU䆱o Eυ2ߢ{Ew|zs^x0ªeҡ><Զn2wTl[lv04ctMng¶9@gs Y\M6/Pf5ۆ=:{eۆ2"jK.iĶabm=~7E㛰m] 3݀K۾W?zz7ps7e;XCUlWVEn}W>[o:ڍu5P! Bl`%6 Smvlv ~&p[!* "#BUd n+n>mV Gm2 + fDGv+p:aT[;Y4 yH +>>nCn'#owO~ے%ۮ(ːPD(e-;dŸPLl(f7U|>[I7;%jwk\]WndkU?p/"fxd[Fʎl*6nE;$ߡcCm5td ~0 Ơ^W^ywKʏ_Tx?qY%^:8M ^[8ke[{?&KQ{x`bor\SE5K D?!tw,^<nnMߌv,>u&ޟl&n1~o^k }):\z_ζ/??}د~ 4>ï2\9ʘu ^gHW뫵o4F|!R$5dؿrv_mHF. Y21v{_q(vg;&X?h wNg̦q6QbN@G}v~)<@#$"AbHx96!jg:AGHpr21nַP@#$}34p}Vyng;JB V?ʭC +AFp, ; εfOS8X +KBC5},9&*O,環p0  $M9CMTS&Qde?X*ihhzuQy +sLbG|^3PMBY!by%ڨLs:$0KF*>I`ΉeU&1u֬&= &N -&t';{of0{3. `P3Y e- <1bcTHS%8y$И?^εa-۰K5ί=/Ȱz;`OaB{ްp{um",ae9چdzm~`G>܆ ?l7n*#asnm8`KhIa22>ކvKh} QҤAl{&l) mC7lQ7hlZpJ+{ӾXx f}PYTtǼسa$$/ѲW`2D5?CEj\8rdLѓBM٩L3z)ՑI0EX8#`8GBVud ]W#ESe/ L/_H?ld +endstream +endobj +2029 0 obj +<< /BBox [ 0 0 856.85189 568.10128 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/mmlu_category_comparison.pdf) /PTEX.InfoDict 2225 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /A1 << /CA 0 /Type /ExtGState /ca 1 >> /A2 << /CA 1 /Type /ExtGState /ca 1 >> /A3 << /CA .7 /Type /ExtGState /ca 1 >> /A4 << /CA .8 /Type /ExtGState /ca .8 >> >> /Font << /F1 2226 0 R /F2 2227 0 R >> /Pattern << /H1 2228 0 R >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << >> >> /Subtype /Form /Type /XObject /Length 1442 >> +stream +xYr6+Lp/KQg2i{E& N3& "eu#/Ƀ{ UUU8y!_xU +_Z~$yϥиZ輊bp\GE!.$xD CT=IycsU 8>;b(yXkcn QFS:Dkpa$Jw+B9]Lrmu-DmdkKUlm.3x%|[f 9 +^PnqҊ /~1¯̰}AFvF#1H4(`ƐvK J n(%|@Ɛ׭ho܊oL(`fh)(I 9hPmǗؔa g|fJU=r*(ΔJ˖%آ_ :)>)Iq`3}v4#l`C˞ș\Dq򪮿?GhfhN:G6Kip!s"hzgQ7ދ +endstream +endobj +2030 0 obj +<< /BBox [ 0 0 1000.8769 712.5409 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/mmlu_pro_subject_comparison.pdf) /PTEX.InfoDict 2229 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /A1 << /CA 0 /Type /ExtGState /ca 1 >> /A2 << /CA 1 /Type /ExtGState /ca 1 >> /A3 << /CA .7 /Type /ExtGState /ca 1 >> /A4 << /CA .8 /Type /ExtGState /ca .8 >> >> /Font << /F1 2230 0 R /F2 2231 0 R >> /Pattern << /H1 2232 0 R >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << >> >> /Subtype /Form /Type /XObject /Length 3113 >> +stream +x[Msϯu?%۱˕TdKR9+ +?l>Z0=mx{57^m?}vp6}< aяw1x|9 _7SN|r>gon$Ļ_YrZu-?.dhIE#=RwFIU<~;sD8xG>)3s\ޝ?>no0>ln׬N fɑN \+>/恽F +ou@ \J`Sqctv| b&45U +_gp#Gj@4;'%|7GO3i$aJ"wWX\TU$d%j@DiF+M|Up'|̙gp9'0kFJBD+Ex]`|r089i@X1|WWU82+ŽKj3GF*55uEA]֔V0%!+M|Up|2_ʉ9 >Nx[ij䫂Z\ nBG*[ 0>FX45uEJQ\>i3UleJS#_\O`"nVuX%n5@gc45UE1 nAq:ivXRBdO7Sͩ\AI90a Pqp]:SZ8A 4 BJLyƓj.UvmF5=IVWw DuB0 L(.bVwk8\4C-sP dZWw"Hps[ 0̳'5u=N|@9Uaq(a+M|Up&u1yQ `7J55S嫂@|@&|1W nI2F.lj(k@-0 к@gD +X%2; RhiR-^zALc$, q NӜT`}L +B zCvj͎[ȟ> ̶Of&աT#>~O` ȋql^B$g'oՓB77_8~;x񫿝?^=~a㰳յDV2lf4"-3W~ey#=px "j)0:}zx?b{շW78zDjA"ɶJұW#O-xmy-=h>AE0ub,npu}8bzNW7S㘋><):w-$َnnnkkltؗ<`w7o!ۭ4S(h@C}T<7sڃ+1L˅S5Fz"4b;=4e @|($YJXۋ#Oim}-=B31z-Uoz߱C>nQ*4:p:XZFz*sEdi wyu}pX:Zz"3y. CEhEXP-=UGfl‹2xѤXk~1}nJ ϐk<ءBsm +UȌ|mEam"nj ů΋X9̏ŞUVl4`ohtJaў7emތ}1֛֩lTNl5vi8Eviٛش7|bgޜ/ffM@9Ѕz\]l[c;gNV8$: PW,{2.. }{U Y_ZeFcϛG¹dWBaV+K٨j8N:f^]hډU"ƛlTNl5v)~mȃؔ`z8˙ެUVl4Q + eoŦΐfgiԛɛƎ75$y˽樬.6wAn_y7k7D#{r6M(צ1$$`@.Tf[Uo67 zT wYv2~;lOttQOFa[SѶJcr*/YxvF5Qd&Q2~)J҂=f^$HVIrcSK*spUKhBPU.i.+E&3&pGevNe̜)ٻy;E^RiwRd7в=(JZ)NTe.$m\o;B !UG,'n͘lߔR%f5,Fţ+h/)$_Sgx2{ Όz$HKb[^삅:\zF&]ĝHv=Ҏn31xqB AxvϽV]aLNOEZX|S777-K*eZv .b=vwdMQL6 *~*ɓ$ vwuλsS=I #lkxFS +<Nc6l-HCEՔpSseQ%5Eg$!|SJYWǪ1e v-Tz1KVjJlBb#X`/ L)Ck֍9&{v}Sv),D2. Vxb*aG{4C,TY,xrȗb* B*X\nX#HyjkNoo7Nn7ն9>{Om}wsX oMkuy%/};hdGl\ܤjϺ'9Z'ZK'&3M'ɾP'<׭}SygA_Zkēd,N>D-RO> /A2 << /CA 1 /Type /ExtGState /ca 1 >> /A3 << /CA .7 /Type /ExtGState /ca 1 >> /A4 << /CA .8 /Type /ExtGState /ca .8 >> >> /Font << /F1 2234 0 R /F2 2235 0 R >> /Pattern << /H1 2236 0 R >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << >> >> /Subtype /Form /Type /XObject /Length 2004 >> +stream +xZKs6Wh cV;i'AVǎ4%iF̌q3颪I`W$/f0 o0^VoM>h<dKNqla&\YjJ6Q],IbUUF I2jb IC ?Kv$&e!Y)𱐌^F*IQP$Ʋ&ӐlHHR)&WP`d4dV +|$$u79kK\FHvYJKF$FdJL୕$lXڂdHrˆ{sN2CQnnd% ,a힨w' 3XFkmzzD{-0y$6>jB I`% N,5N*[#uJ&=.QSeȘҰQd67.dƗB2I͞w7G4 +I0!s9"ɧ䵅!BBof%8K? +7:O w>z =b:.ׄ+*%\'OC n9Lu~=_W۪Чl),d%~:WS\}?OZjA 0YaS'ѧ{1oVCO4)v'>-#J`juGXT,a1)"Wr^2ʷs]ec$nÍ,sc=b^v ~(⋶]uaon2;te-r UÛݕe+)'L&U]%ǓNLi%>$ )M(3ݣ[ +m ;mNL5Q^H6 j`Zb iY`+!`VRR:hH'N'r[չ4cԤ}\ZmT')&7r5,\Փx1Y׷f7N6Kr&Y&8B Q"QvP->I ]jM%N OG ;)&C"{5j{u_Ns>u:p9 4uƤw'ftsBZ+t&éo|e+Əls@~_ןQyp#hW{W1Rxh]x+;cb}Pg{TD3^ +ePտ0\ +endstream +endobj +2032 0 obj +<< /BBox [ 0 0 711.52597 422.99125 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/test_time_scaling_vs_problem_difficulty.pdf) /PTEX.InfoDict 2237 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /A1 << /CA 0 /Type /ExtGState /ca 1 >> /A2 << /CA .3 /Type /ExtGState /ca .3 >> /A3 << /CA .6 /Type /ExtGState /ca 1 >> /A4 << /CA 1 /Type /ExtGState /ca 1 >> /A5 << /CA .8 /Type /ExtGState /ca .8 >> >> /Font << /F1 2238 0 R >> /Pattern << >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << /F1-DejaVuSans-Bold-arrowright 2239 0 R >> >> /Subtype /Form /Type /XObject /Length 9703 >> +stream +x͝Y&qϯKr7! `"f.ƾEˈ,FԩH0 +ur}~??~g߽?_x|̿KQS/?sT۟~"Kh^<ug_Y?#Wt-GG@_"ٹ5B痸&ߧq$_=z%?8R-ζ#Lkog_u[ ξl2V +f=mЪo-ٵ;m+Hе#-_ٶTa'R϶ k\k0 +`nj@㾰i~>GI9U!-d;zfS59&iL-V>}*ʶz78",#wJBhڶXc4̹4s!AdqFT jׇ-#g܊l5#= x0r +ݰi2퐒-A'}D^2nqr:]k ׫9F<?ƒBBL`5V28(M/sL"EjHfybp9tadlApy^6>:5HTN{w H&VHN9ړ3kO#4QAbP4[ǎOPRl,v收VNK<M6em 9H,)l}s}s+q k +"ptJ4b_Y}ָ/:(1D/t @~{ϑ![g20ayp៳-;jpƥD0͍s*64 =KB$tM6F4d`JsLQ1kOX7K7#_'<;AyhY fr )Ri" = +!s\MSyTY<]j ]aX7 )Ҍ/a܃Ё,EZdșC>Qo"rLH)5 +z$'= +.쬂hP/<9&ll$_uR@>`?H{Wёo2L6lI26Mw$3Dz8N&>EFS= 9CvHx 5<0 {0 +/!Rn/%l4y M{hc"",# ɍDՅ]AHE1e4sWw^,ު[r͹ؾfd=DHc -4;s0^ ̮ا  9!Q%Ѧ łP4rI.4P輑ٿ747:Nbv)`9 +,HtPfw!|/yW#xy>_>fDυUɊ&M2RIe#ВْoԈ|,1h/IĊU 5$.#aUR` ljv{a8Ćd)`F CƂy|(] LpĨ6'KLslt2+*me0+U'HܝMa!ƞjl2P`e*dEgBvD^Ab^(g_m;OeADK:(r1 +Jsɲ1":a~182vӯUF^NiJA5<ۢ CJ^8׾:҈diOՋ!i9%ڌAf#IvfMaK? +^,!edԌ4EjN[v0rh_DƹB*{?b~(1;jS-xvCp6š0M'HFmqoIMR鐥0pc#v wF|`Xq`#tCqöbT-ѕ?n]4C -)}ޚ?`eW 7 0ǀ込#ZyYx^(!jk3MPPUcMe?qGBv{=D`Th FuɈ* k P`6ML-T4RҘ JbAH$Qle9\n +'`GI$ ̎&bVË5 FLn=, e`|U;/E@HF:PH/Ⱥlla-MP٣KQ +kMP?H D0drR<*a @{ L Eac({1=V2&g$ByK qE ^,H-Ɠxc߄͒G+P<Ba]b^+؆]Յ8Xxiؤ,ΥToyVH>O1 M@)t2k)+LܡP2hKiS oEš{J&ޛ*rR ƒa&Fj0IN)bp`7k@&<7}9M,$da!)d5Y^ ტZNr[H,l+ĥo̓s"&ՊN\1;كm(B(+M0A8\ '¶f^44(ξM 9H:@ 1/FcBp/;1M24 +fo~~ɝEbrhl40VJR~!!*Cb_TaUeLl:|.A @}ktR \闁L{͛ h 0,0-m@eFfg6]# UbJ43ctOA.DHMglჰ? \d6)(b]$+Ć'8уW[04P ;!S05))lP㸁%ݦ蟆^J":xOv7ɱ+IIM.oa mI1[(ʕ~E=N.xiYzE,NEfd}m4șr EJ gW/ٕ.2#cՉzq .3ʐŌwεb$CB%BvU ބSfN-0gr~3Jֻӊ97;MH?= c&$܄PkS\?.aR̒('UT/ULcTFuT rTfi6hTw6M(<ʸk$k廢MCV2^kq&ne,//0lViq, +9?rVzuV,\֓q-͒OL!Ez \4]lfyO26#+Q6AzQS~'j@*& %l槐+^f*]/V)`-@Kl;A s* pk Qbnf?>^1QZi%) +kY՟JWq9,ܲ\ ֽrn}yh{LnΖӹO|$Vw\9y5y~ +=yᖟ(6l+hrj3ݤ]u|EF_*^GԶ:\ +?lEE_EG/|qtNMwmڳZUA)2VqYV_Sx)*̰䅛WurѬRpa^V]*2Dl؞VATAVp~UV r¼Jon-ǐӗY0R?q\3R2i##jˑ jl׹xRIՋ#tu6.!iIH"ˢŴ KSt,m%'lLJ¶e>Vj4k-Yg\L?ܒ\ `E ajO>Y fbwkHr ikAǭMZ=Xۜ7{ueu]{ +r}zw*^{~=/}⽌(Yȅg'?oaB3g_򓗏&O~oݘ~!W/oO*N|w=??kl k|Cѯt,!-_쫃U?__|7~7oHF10s7`ߗdn *~@2 +;v:T3 2>bWз%/W!-hߩCV' +a2k+pC_ޗPx_(To:fy + +5AeO(\FmɅۊ?BH+( [A9/ie츷EB_;A21J'\*Pg=k?h7Z-[Z>~윩߿ج!oxkCd24$=ΡT@W\DbyQo{Ws~[?%K`3s4< +JIQVBيnI y8orH'*|淛/sIVڶy!{^KU>*fU')JN9W3y8As>Yfj&hLWڭ5AimodH%lk%6Tz*UڹUڦ=*vlR8ZJԆdN* +2OʆUɧ+@uɩyoV%-*Tf*w,IVjا\EO,}*~ +}, yEh[T6ol%DTU(_|5U#dU/RmAYEK 3? ST7 mY7bO琕A:E)a@!RcPn b\=sa\ǭCcwȺ]DvOK83nɆA%[SKPm} +k|96o) BQY?A(Cx9kb&/ϓPhޤOBp6I(ZBr4️Bq+Ɲ}Mqem[5fkVuy3u5ϊu^4%Ľ+gi_Tn=v,޸ժgrg_}'gbka&uPqƠVCeU8՚(ɉ[l;9NaJ3޽jԳkwVLe{չ)Q$q5zGL/VcT[ߩ~W] +U)y‡>OBF|X +zU3oOA8ZsX-IԻneuNsܬf׆)eqkt[1MW6[S$pA[ rkvauk"0n#fiXHi^l^6-9sZ~ H8n#ll.m3!S\# + s5@% ipM@Y4 3kd$ Ul18`h5A"uܴ_NޠBkr^C$l֨:mr5rB ; |5Q#JG;ޚ|!;{d/^S2V(8-HǯL_Wv<}#A[-BöTkV;mF-t-|c#&|o?K%+"n}@F1q__^zbx7^dXABEε׉l`;;R l|V +wMxL>+:~_cwPzhl^c^mYߑ.zb( +*6:J? +JDm357|,%~/p +}_RvCSmG? +ޟJWkoУ~|}K1?_b +endstream +endobj +2033 0 obj +<< /BaseFont /IUCHJS+LMMono10-Italic /Encoding 403 0 R /FirstChar 35 /FontDescriptor 2240 0 R /LastChar 121 /Subtype /Type1 /ToUnicode 405 0 R /Type /Font /Widths 2241 0 R >> +endobj +2034 0 obj +<< /BaseFont /WOTSKV+txsym /FirstChar 182 /FontDescriptor 2242 0 R /LastChar 190 /Subtype /Type1 /ToUnicode 2243 0 R /Type /Font /Widths 2244 0 R >> +endobj +2035 0 obj +<< /BaseFont /ZADGTD+gbsnu8b /FirstChar 161 /FontDescriptor 2245 0 R /LastChar 247 /Subtype /Type1 /ToUnicode 2246 0 R /Type /Font /Widths 2247 0 R >> +endobj +2036 0 obj +<< /BaseFont /FMYTSY+gbsnu53 /FirstChar 22 /FontDescriptor 2248 0 R /LastChar 247 /Subtype /Type1 /ToUnicode 2249 0 R /Type /Font /Widths 2250 0 R >> +endobj +2037 0 obj +<< /BaseFont /AWUVKV+gbsnu80 /FirstChar 1 /FontDescriptor 2251 0 R /LastChar 253 /Subtype /Type1 /ToUnicode 2252 0 R /Type /Font /Widths 2253 0 R >> +endobj +2038 0 obj +<< /BaseFont /JRIDWR+gbsnu79 /FirstChar 58 /FontDescriptor 2254 0 R /LastChar 240 /Subtype /Type1 /ToUnicode 2255 0 R /Type /Font /Widths 2256 0 R >> +endobj +2039 0 obj +<< /BaseFont /EQCFJX+gbsnu4f /FirstChar 26 /FontDescriptor 2257 0 R /LastChar 250 /Subtype /Type1 /ToUnicode 2258 0 R /Type /Font /Widths 2259 0 R >> +endobj +2040 0 obj +<< /BaseFont /TBEMLG+gbsnu76 /FirstChar 125 /FontDescriptor 2260 0 R /LastChar 248 /Subtype /Type1 /ToUnicode 2261 0 R /Type /Font /Widths 2262 0 R >> +endobj +2041 0 obj +<< /BaseFont /XVCZJM+gbsnu68 /FirstChar 7 /FontDescriptor 2263 0 R /LastChar 72 /Subtype /Type1 /ToUnicode 2264 0 R /Type /Font /Widths 2265 0 R >> +endobj +2042 0 obj +<< /BaseFont /JBKBDB+gbsnu5f /FirstChar 2 /FontDescriptor 2266 0 R /LastChar 217 /Subtype /Type1 /ToUnicode 2267 0 R /Type /Font /Widths 2268 0 R >> +endobj +2043 0 obj +<< /BaseFont /ADGMOQ+gbsnu5b /FirstChar 80 /FontDescriptor 2269 0 R /LastChar 252 /Subtype /Type1 /ToUnicode 2270 0 R /Type /Font /Widths 2271 0 R >> +endobj +2044 0 obj +<< /BaseFont /LMRLZA+gbsnu62 /FirstChar 16 /FontDescriptor 2272 0 R /LastChar 255 /Subtype /Type1 /ToUnicode 2273 0 R /Type /Font /Widths 2274 0 R >> +endobj +2045 0 obj +<< /BaseFont /HDMTOF+gbsnu67 /FirstChar 0 /FontDescriptor 2275 0 R /LastChar 208 /Subtype /Type1 /ToUnicode 2276 0 R /Type /Font /Widths 2277 0 R >> +endobj +2046 0 obj +<< /BaseFont /MKIXNN+gbsnu54 /FirstChar 13 /FontDescriptor 2278 0 R /LastChar 234 /Subtype /Type1 /ToUnicode 2279 0 R /Type /Font /Widths 2280 0 R >> +endobj +2047 0 obj +<< /BaseFont /BGQTTZ+gbsnu6d /FirstChar 59 /FontDescriptor 2281 0 R /LastChar 251 /Subtype /Type1 /ToUnicode 2282 0 R /Type /Font /Widths 2283 0 R >> +endobj +2048 0 obj +<< /BaseFont /OSLXRH+gbsnu98 /FirstChar 121 /FontDescriptor 2284 0 R /LastChar 223 /Subtype /Type1 /ToUnicode 2285 0 R /Type /Font /Widths 2286 0 R >> +endobj +2049 0 obj +<< /BaseFont /OANXTB+gbsnu30 /FirstChar 1 /FontDescriptor 2287 0 R /LastChar 17 /Subtype /Type1 /ToUnicode 2288 0 R /Type /Font /Widths 2289 0 R >> +endobj +2050 0 obj +<< /BaseFont /IRWFYG+gbsnu4e /FirstChar 0 /FontDescriptor 2290 0 R /LastChar 251 /Subtype /Type1 /ToUnicode 2291 0 R /Type /Font /Widths 2292 0 R >> +endobj +2051 0 obj +<< /BaseFont /YTDZXB+gbsnu97 /FirstChar 0 /FontDescriptor 2293 0 R /LastChar 243 /Subtype /Type1 /ToUnicode 2294 0 R /Type /Font /Widths 2295 0 R >> +endobj +2052 0 obj +<< /BaseFont /DQEEXO+gbsnu66 /FirstChar 47 /FontDescriptor 2296 0 R /LastChar 254 /Subtype /Type1 /ToUnicode 2297 0 R /Type /Font /Widths 2298 0 R >> +endobj +2053 0 obj +<< /BaseFont /YWXPFG+gbsnu72 /FirstChar 49 /FontDescriptor 2299 0 R /LastChar 252 /Subtype /Type1 /ToUnicode 2300 0 R /Type /Font /Widths 2301 0 R >> +endobj +2054 0 obj +<< /BaseFont /CGAWZC+gbsnu8f /FirstChar 123 /FontDescriptor 2302 0 R /LastChar 253 /Subtype /Type1 /ToUnicode 2303 0 R /Type /Font /Widths 2304 0 R >> +endobj +2055 0 obj +<< /BaseFont /EJBYAZ+gbsnu59 /FirstChar 4 /FontDescriptor 2305 0 R /LastChar 211 /Subtype /Type1 /ToUnicode 2306 0 R /Type /Font /Widths 2307 0 R >> +endobj +2056 0 obj +<< /BaseFont /XMSPND+gbsnu55 /FirstChar 70 /FontDescriptor 2308 0 R /LastChar 183 /Subtype /Type1 /ToUnicode 2309 0 R /Type /Font /Widths 2310 0 R >> +endobj +2057 0 obj +<< /BaseFont /LDUJSP+gbsnu8d /FirstChar 29 /FontDescriptor 2311 0 R /LastChar 138 /Subtype /Type1 /ToUnicode 2312 0 R /Type /Font /Widths 2313 0 R >> +endobj +2058 0 obj +<< /BaseFont /YOFPCH+gbsnu7f /FirstChar 24 /FontDescriptor 2314 0 R /LastChar 193 /Subtype /Type1 /ToUnicode 2315 0 R /Type /Font /Widths 2316 0 R >> +endobj +2059 0 obj +<< /BaseFont /KAIQOE+gbsnu77 /FirstChar 31 /FontDescriptor 2317 0 R /LastChar 229 /Subtype /Type1 /ToUnicode 2318 0 R /Type /Font /Widths 2319 0 R >> +endobj +2060 0 obj +<< /BaseFont /RKQLNJ+gbsnu94 /FirstChar 137 /FontDescriptor 2320 0 R /LastChar 193 /Subtype /Type1 /ToUnicode 2321 0 R /Type /Font /Widths 2322 0 R >> +endobj +2061 0 obj +<< /BaseFont /NTBPNH+gbsnu60 /FirstChar 21 /FontDescriptor 2323 0 R /LastChar 243 /Subtype /Type1 /ToUnicode 2324 0 R /Type /Font /Widths 2325 0 R >> +endobj +2062 0 obj +<< /BaseFont /DCHGGY+gbsnu5c /FirstChar 4 /FontDescriptor 2326 0 R /LastChar 251 /Subtype /Type1 /ToUnicode 2327 0 R /Type /Font /Widths 2328 0 R >> +endobj +2063 0 obj +<< /BaseFont /MKIIUU+gbsnu51 /FirstChar 63 /FontDescriptor 2329 0 R /LastChar 251 /Subtype /Type1 /ToUnicode 2330 0 R /Type /Font /Widths 2331 0 R >> +endobj +2064 0 obj +<< /BaseFont /ZPWDJQ+gbsnu99 /FirstChar 134 /FontDescriptor 2332 0 R /LastChar 153 /Subtype /Type1 /ToUnicode 2333 0 R /Type /Font /Widths 2334 0 R >> +endobj +2065 0 obj +<< /BaseFont /WKVFUZ+gbsnu91 /FirstChar 202 /FontDescriptor 2335 0 R /LastChar 209 /Subtype /Type1 /ToUnicode 2336 0 R /Type /Font /Widths 2337 0 R >> +endobj +2066 0 obj +<< /BaseFont /KXPEYV+gbsnu95 /FirstChar 25 /FontDescriptor 2338 0 R /LastChar 244 /Subtype /Type1 /ToUnicode 2339 0 R /Type /Font /Widths 2340 0 R >> +endobj +2067 0 obj +<< /BaseFont /CPUEBF+gbsnu65 /FirstChar 54 /FontDescriptor 2341 0 R /LastChar 246 /Subtype /Type1 /ToUnicode 2342 0 R /Type /Font /Widths 2343 0 R >> +endobj +2068 0 obj +<< /BaseFont /HFJXQS+gbsnu89 /FirstChar 129 /FontDescriptor 2344 0 R /LastChar 227 /Subtype /Type1 /ToUnicode 2345 0 R /Type /Font /Widths 2346 0 R >> +endobj +2069 0 obj +<< /BaseFont /ENNGOC+gbsnu52 /FirstChar 0 /FontDescriptor 2347 0 R /LastChar 199 /Subtype /Type1 /ToUnicode 2348 0 R /Type /Font /Widths 2349 0 R >> +endobj +2070 0 obj +<< /BaseFont /UIFGUN+gbsnu5e /FirstChar 1 /FontDescriptor 2350 0 R /LastChar 183 /Subtype /Type1 /ToUnicode 2351 0 R /Type /Font /Widths 2352 0 R >> +endobj +2071 0 obj +<< /BaseFont /HYJUHA+gbsnu70 /FirstChar 107 /FontDescriptor 2353 0 R /LastChar 185 /Subtype /Type1 /ToUnicode 2354 0 R /Type /Font /Widths 2355 0 R >> +endobj +2072 0 obj +<< /BaseFont /BOVEKN+gbsnu73 /FirstChar 135 /FontDescriptor 2356 0 R /LastChar 205 /Subtype /Type1 /ToUnicode 2357 0 R /Type /Font /Widths 2358 0 R >> +endobj +2073 0 obj +<< /BaseFont /SYRBOU+gbsnu82 /FirstChar 42 /FontDescriptor 2359 0 R /LastChar 207 /Subtype /Type1 /ToUnicode 2360 0 R /Type /Font /Widths 2361 0 R >> +endobj +2074 0 obj +<< /BaseFont /SAVLRX+gbsnu90 /FirstChar 2 /FontDescriptor 2362 0 R /LastChar 253 /Subtype /Type1 /ToUnicode 2363 0 R /Type /Font /Widths 2364 0 R >> +endobj +2075 0 obj +<< /BaseFont /VHMMXQ+gbsnu63 /FirstChar 1 /FontDescriptor 2365 0 R /LastChar 208 /Subtype /Type1 /ToUnicode 2366 0 R /Type /Font /Widths 2367 0 R >> +endobj +2076 0 obj +<< /BaseFont /HUKANN+gbsnu96 /FirstChar 20 /FontDescriptor 2368 0 R /LastChar 213 /Subtype /Type1 /ToUnicode 2369 0 R /Type /Font /Widths 2370 0 R >> +endobj +2077 0 obj +<< /BaseFont /PPORZP+gbsnu58 /FirstChar 235 /FontDescriptor 2371 0 R /LastChar 240 /Subtype /Type1 /ToUnicode 2372 0 R /Type /Font /Widths 2373 0 R >> +endobj +2078 0 obj +<< /BaseFont /NGTSDE+gbsnu8c /FirstChar 8 /FontDescriptor 2374 0 R /LastChar 97 /Subtype /Type1 /ToUnicode 2375 0 R /Type /Font /Widths 2376 0 R >> +endobj +2079 0 obj +<< /BaseFont /MPSIAH+gbsnu86 /FirstChar 78 /FontDescriptor 2377 0 R /LastChar 78 /Subtype /Type1 /ToUnicode 2378 0 R /Type /Font /Widths 2379 0 R >> +endobj +2080 0 obj +<< /BaseFont /TTNTQK+gbsnu7c /FirstChar 123 /FontDescriptor 2380 0 R /LastChar 152 /Subtype /Type1 /ToUnicode 2381 0 R /Type /Font /Widths 2382 0 R >> +endobj +2081 0 obj +<< /BaseFont /ZKNANI+gbsnu57 /FirstChar 40 /FontDescriptor 2383 0 R /LastChar 206 /Subtype /Type1 /ToUnicode 2384 0 R /Type /Font /Widths 2385 0 R >> +endobj +2082 0 obj +<< /BaseFont /WRZZJK+gbsnu56 /FirstChar 104 /FontDescriptor 2386 0 R /LastChar 254 /Subtype /Type1 /ToUnicode 2387 0 R /Type /Font /Widths 2388 0 R >> +endobj +2083 0 obj +<< /BaseFont /RTAZLL+gbsnu7e /FirstChar 160 /FontDescriptor 2389 0 R /LastChar 221 /Subtype /Type1 /ToUnicode 2390 0 R /Type /Font /Widths 2391 0 R >> +endobj +2084 0 obj +<< /BaseFont /IIIBRD+gbsnu71 /FirstChar 54 /FontDescriptor 2392 0 R /LastChar 159 /Subtype /Type1 /ToUnicode 2393 0 R /Type /Font /Widths 2394 0 R >> +endobj +2085 0 obj +<< /BaseFont /RDDMOC+gbsnu7a /FirstChar 11 /FontDescriptor 2395 0 R /LastChar 239 /Subtype /Type1 /ToUnicode 2396 0 R /Type /Font /Widths 2397 0 R >> +endobj +2086 0 obj +<< /BaseFont /JNQJXU+gbsnu6c /FirstChar 20 /FontDescriptor 2398 0 R /LastChar 226 /Subtype /Type1 /ToUnicode 2399 0 R /Type /Font /Widths 2400 0 R >> +endobj +2087 0 obj +<< /BaseFont /TKPNYZ+gbsnu6b /FirstChar 33 /FontDescriptor 2401 0 R /LastChar 239 /Subtype /Type1 /ToUnicode 2402 0 R /Type /Font /Widths 2403 0 R >> +endobj +2088 0 obj +<< /BaseFont /BNGXCY+gbsnu75 /FirstChar 40 /FontDescriptor 2404 0 R /LastChar 184 /Subtype /Type1 /ToUnicode 2405 0 R /Type /Font /Widths 2406 0 R >> +endobj +2089 0 obj +<< /BaseFont /FNYBNB+gbsnu88 /FirstChar 34 /FontDescriptor 2407 0 R /LastChar 173 /Subtype /Type1 /ToUnicode 2408 0 R /Type /Font /Widths 2409 0 R >> +endobj +2090 0 obj +<< /BaseFont /VVBESR+gbsnu9f /FirstChar 153 /FontDescriptor 2410 0 R /LastChar 153 /Subtype /Type1 /ToUnicode 2411 0 R /Type /Font /Widths 2412 0 R >> +endobj +2091 0 obj +<< /BaseFont /SIVFNP+gbsnu50 /FirstChar 18 /FontDescriptor 2413 0 R /LastChar 207 /Subtype /Type1 /ToUnicode 2414 0 R /Type /Font /Widths 2415 0 R >> +endobj +2092 0 obj +<< /BaseFont /APNQEV+gbsnu7b /FirstChar 73 /FontDescriptor 2416 0 R /LastChar 173 /Subtype /Type1 /ToUnicode 2417 0 R /Type /Font /Widths 2418 0 R >> +endobj +2093 0 obj +<< /BaseFont /RCBYMF+gbsnu8e /FirstChar 42 /FontDescriptor 2419 0 R /LastChar 171 /Subtype /Type1 /ToUnicode 2420 0 R /Type /Font /Widths 2421 0 R >> +endobj +2094 0 obj +<< /BaseFont /GBJZOW+gbsnu9a /FirstChar 108 /FontDescriptor 2422 0 R /LastChar 216 /Subtype /Type1 /ToUnicode 2423 0 R /Type /Font /Widths 2424 0 R >> +endobj +2095 0 obj +<< /BaseFont /SPRSMS+gbsnu83 /FirstChar 3 /FontDescriptor 2425 0 R /LastChar 242 /Subtype /Type1 /ToUnicode 2426 0 R /Type /Font /Widths 2427 0 R >> +endobj +2096 0 obj +<< /BaseFont /EWEIIY+gbsnu81 /FirstChar 9 /FontDescriptor 2428 0 R /LastChar 244 /Subtype /Type1 /ToUnicode 2429 0 R /Type /Font /Widths 2430 0 R >> +endobj +2097 0 obj +<< /BaseFont /NDWZKA+gbsnu5a /FirstChar 24 /FontDescriptor 2431 0 R /LastChar 90 /Subtype /Type1 /ToUnicode 2432 0 R /Type /Font /Widths 2433 0 R >> +endobj +2098 0 obj +<< /BaseFont /AWJOSW+gbsnu6f /FirstChar 2 /FontDescriptor 2434 0 R /LastChar 2 /Subtype /Type1 /ToUnicode 2435 0 R /Type /Font /Widths 2436 0 R >> +endobj +2099 0 obj +<< /BaseFont /AJRGYC+gbsnu9c /FirstChar 156 /FontDescriptor 2437 0 R /LastChar 156 /Subtype /Type1 /ToUnicode 2438 0 R /Type /Font /Widths 2439 0 R >> +endobj +2100 0 obj +<< /BaseFont /IBJFSI+gbsnu6e /FirstChar 41 /FontDescriptor 2440 0 R /LastChar 56 /Subtype /Type1 /ToUnicode 2441 0 R /Type /Font /Widths 2442 0 R >> +endobj +2101 0 obj +<< /BaseFont /VWRYPE+gbsnu8a /FirstChar 0 /FontDescriptor 2443 0 R /LastChar 0 /Subtype /Type1 /ToUnicode 2444 0 R /Type /Font /Widths 2445 0 R >> +endobj +2102 0 obj +<< /BaseFont /XGCRDY+gbsnu5d /FirstChar 41 /FontDescriptor 2446 0 R /LastChar 244 /Subtype /Type1 /ToUnicode 2447 0 R /Type /Font /Widths 2448 0 R >> +endobj +2103 0 obj +<< /BaseFont /UHICLH+gbsnu74 /FirstChar 3 /FontDescriptor 2449 0 R /LastChar 52 /Subtype /Type1 /ToUnicode 2450 0 R /Type /Font /Widths 2451 0 R >> +endobj +2104 0 obj +<< /BaseFont /YDLOZJ+gbsnu84 /FirstChar 40 /FontDescriptor 2452 0 R /LastChar 139 /Subtype /Type1 /ToUnicode 2453 0 R /Type /Font /Widths 2454 0 R >> +endobj +2105 0 obj +<< /BaseFont /RWUNPI+gbsnu61 /FirstChar 26 /FontDescriptor 2455 0 R /LastChar 26 /Subtype /Type1 /ToUnicode 2456 0 R /Type /Font /Widths 2457 0 R >> +endobj +2106 0 obj +<< /BaseFont /EGTNUS+gbsnu78 /FirstChar 20 /FontDescriptor 2458 0 R /LastChar 179 /Subtype /Type1 /ToUnicode 2459 0 R /Type /Font /Widths 2460 0 R >> +endobj +2107 0 obj +<< /BaseFont /AJNIGP+gbsnu7d /FirstChar 47 /FontDescriptor 2461 0 R /LastChar 47 /Subtype /Type1 /ToUnicode 2462 0 R /Type /Font /Widths 2463 0 R >> +endobj +2108 0 obj +<< /BaseFont /DALVAY+gbsnu9e /FirstChar 196 /FontDescriptor 2464 0 R /LastChar 196 /Subtype /Type1 /ToUnicode 2465 0 R /Type /Font /Widths 2466 0 R >> +endobj +2109 0 obj +<< /BaseFont /NRRGBL+gbsnu6a /FirstChar 33 /FontDescriptor 2467 0 R /LastChar 33 /Subtype /Type1 /ToUnicode 2468 0 R /Type /Font /Widths 2469 0 R >> +endobj +2110 0 obj +<< /BaseFont /DOODEA+URWPalladioL-Ital /Encoding 396 0 R /FirstChar 45 /FontDescriptor 2470 0 R /LastChar 117 /Subtype /Type1 /ToUnicode 2471 0 R /Type /Font /Widths 2472 0 R >> +endobj +2111 0 obj +<< /Ascent 599 /CapHeight 599 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/b/c/colon/d/e/eight/equal/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/period/q/question/quotedblleft/quoteleft/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /Descent -222 /Flags 4 /FontBBox [ -451 -316 731 1016 ] /FontFile 2473 0 R /FontName /MEJKPD+LMMono10-Regular /ItalicAngle 0 /StemV 69 /Type /FontDescriptor /XHeight 431 >> +endobj +2112 0 obj +[ 525 525 525 525 525 525 525 0 525 525 525 0 0 0 0 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] +endobj +2113 0 obj +<< /Ascent 0 /CapHeight 692 /CharSet (/D/E) /Descent 0 /Flags 4 /FontBBox [ -15 -195 1118 709 ] /FontFile 2474 0 R /FontName /PWFOWP+PazoMathBlackboardBold /ItalicAngle 0 /StemV 95 /Type /FontDescriptor /XHeight 469 >> +endobj +2114 0 obj +<< /Filter /FlateDecode /Length 352 >> +stream +xmn0w?u C%BHiH MU]>RK`[ y.j;ө6\ث0&NCik8J0B +pp!Y;p+^E90g趫Dk/¶zK$4Pr ɒRooUI'(?m}Nq n+&-PU4@EU 0?{l0Ƶ{B}Zi_o|gI +endstream +endobj +2115 0 obj +[ 924 753 ] +endobj +2116 0 obj +<< /Ascent 490 /CapHeight 490 /CharSet (/greater/less/period/u1D434/u1D435/u1D43A/u1D43E/u1D43F/u1D440/u1D441/u1D442/u1D443/u1D444/u1D445/u1D44A/u1D44E/u1D44F/u1D451/u1D452/u1D453/u1D454/u1D456/u1D458/u1D459/u1D45A/u1D45B/u1D45C/u1D45D/u1D45E/u1D45F/u1D460/u1D461/u1D462/u1D464/u1D465/u1D466/u1D6FD/u1D700/u1D703/u1D706/u1D70B/uni210E) /Descent -6 /Flags 4 /FontBBox [ -351 -223 951 898 ] /FontFile 2475 0 R /FontName /THWSRE+XCharterMathMI /ItalicAngle -11 /StemV 82 /Type /FontDescriptor /XHeight 400 >> +endobj +2117 0 obj +<< /Filter /FlateDecode /Length 671 >> +stream +x}Tj0+tvF*!'dMtJkHlc;Q.,th,y.{٫s_E뜛-'݌OZWgҷV6d yӔsgϤDԍ}s׏܍\ǺYp,zǣ!cf e{ƝU`v6;i+LR.&e[ە5YqfX;%u \x9 g`.,r,u=Ӌ3`+XK@C fg g.h ] BxfhǨ&ӫNҀ#T %, MtI +TD@J TS11+TR$e" c"edd+gJ?\,K~Lgp]L+O1Y4p8F.ᱸӋBwnj~6=? +endstream +endobj +2118 0 obj +[ 551 467 800 784 639 606 588 604 671 546 509 664 712 312 447 625 498 839 683 708 542 708 602 537 565 664 590 898 569 562 556 525 507 394 523 424 292 481 287 269 514 275 815 556 502 516 512 398 370 333 553 519 798 477 475 440 606 617 738 724 675 780 632 726 813 834 808 647 621 533 503 563 498 540 530 598 290 576 515 581 540 553 671 576 521 572 559 548 779 622 728 754 507 465 610 616 706 567 901 515 551 551 0 595 287 269 499 743 572 396 429 511 516 497 533 483 538 539 0 556 556 556 556 556 556 556 556 556 556 506 278 278 964 964 964 964 319 319 418 418 636 441 636 ] +endobj +2119 0 obj +<< /Ascent 707 /CapHeight 707 /CharSet (/J/arrowdblright/bar/braceleft/braceright/bracketleft/bracketright/greatermuch/minus/multiply/parenleft/parenright/periodcentered/plus/radical/similar) /Descent -152 /Flags 4 /FontBBox [ -47 -944 2835 838 ] /FontFile 2476 0 R /FontName /THVSRT+txsys /ItalicAngle 0 /StemV 52 /Type /FontDescriptor /XHeight 400 >> +endobj +2120 0 obj +<< /Filter /FlateDecode /Length 1012 >> +stream +xmVn:+t҅k>$R* @-֑T@, 4_9r,lqpWJcWctsS o/OO_)-請>绾y9S៻~qAZMN{~%M/qwXL!?xK,? !Pm9)Z_]|+TnTH`8 8@f%s +,Gds8HdS"&G +9 0C@̠9C +&e =L,8YCJ( U2(B2(!iFI %$\/!9R nHZLqP%/n_Y +q9~GD)RBR EvE6ӑd'VK0 aw,qX_TlGchJCZP +͕dyb9$4Rlc+7U)঩c3sѬN ڔmCZiMS:ܯO +vAv l楐3^G'eOyJy)37|ve< ׵o> +endobj +2123 0 obj +<< /Filter /FlateDecode /Length 844 >> +stream +xmUn:+Et=%@m&֑\d2ps,E61O?7vxE<\ooStscrַWcG?9$ۥ׬Jk +'k3w6ϗmDS7EşxP_9TJq#.RZ]3O(~|?Ox߿ ݝ i|'_tz!dۉֿaG/qyz?yY1fhthx_}t'N9|3.y~=W*! ' +{r%⚀R@2%eByl@W(# ICl@F<~$ <&VVc&jmX@) +04P#3GfN7&|3r1)YH W@X2^DL+Q+X!F!uE*KLuHN W'NY' ؍902aWL9&9(%@{Z誹#{Vص8k8FHj'n!h!CgW)lIE.3z]lcgwEژ> +endobj +2126 0 obj +<< /Filter /FlateDecode /Length 558 >> +stream +xmKo0]P'!BHyJ, +  (h+X=7>&޷4s9ꛜf}mM&I+QA8۾ʷԱiI6TF羠1qRDRSvvsWG*4S1]򇚶 9JHeWZΎ, ;e Vy7Dz/j3P]6XYɶk5k +jJybo̶3z +:_bG Rvךбm\UAmϩY+lekdc.0 5Jp!xj!, F!B3őAH _%䋐*MPFGK;Zkfe9[Sc%5a]07:s6xi8pdXpN ̬9;{fl;K9<|qw1B=}/ k=6 _pd {9Ӝ_}pPn:FxM.%\]ը?RDo[B. +endstream +endobj +2127 0 obj +[ 293 293 333 333 371 371 371 371 432 432 402 402 232 436 529 529 356 356 369 369 353 353 371 371 371 371 446 446 433 433 621 621 382 382 363 363 371 371 371 371 562 562 448 448 659 659 567 567 400 400 363 363 363 363 363 363 552 552 552 552 552 552 552 533 400 400 400 400 418 418 853 1255 516 705 945 1393 945 1393 961 1393 808 945 423 853 853 853 812 812 1323 1355 603 1255 1255 1255 1135 1135 945 1355 666 1000 1450 666 1000 1333 343 343 371 371 371 371 414 414 732 824 946 900 939 939 939 629 533 533 622 622 622 622 629 629 333 333 333 333 371 371 371 371 451 451 363 363 200 400 499 550 0 0 0 0 0 0 0 0 0 0 1900 2400 2900 1900 2400 2900 0 0 0 0 0 0 0 0 0 450 450 450 450 450 450 438 748 1056 530 808 423 726 1027 456 714 620 1020 1424 711 1096 563 961 1369 557 953 853 1255 0 0 1255 1691 1255 1691 1255 1691 808 945 853 853 853 853 853 853 1323 ] +endobj +2128 0 obj +<< /CreationDate (D:20250701154933+08'00') /Creator (Matplotlib v3.7.2, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.7.2) >> +endobj +2129 0 obj +<< /BaseFont /BMQQDV+DejaVuSans /CharProcs 2479 0 R /Encoding << /Differences [ 32 /space 45 /hyphen /period 48 /zero /one /two /three /four /five /six /seven /eight /nine 64 /at /A 68 /D /E 73 /I 77 /M 82 /R /S 90 /Z 97 /a 99 /c /d /e 103 /g /h /i 107 /k 109 /m /n /o /p 114 /r /s /t /u 121 /y /z ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1021 -463 1794 1233 ] /FontDescriptor 2480 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BMQQDV+DejaVuSans /Subtype /Type3 /Type /Font /Widths 2481 0 R >> +endobj +2130 0 obj +<< /BBox [ -8 -8 8 8 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 131 >> +stream +xmA E=E/IKEekLq@L4о<~QN$ KNzӐҺLղ(ǠQ-u8pctx6ޓ?Y!F?{C&\)1 /^~cZC +endstream +endobj +2131 0 obj +<< /BBox [ -8 -8 8 8 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 131 >> +stream +xmA E=E/IKEekLq@L4о<~QN$ KNzӐҺLղ(ǠQ-u8pctx6ޓ?Y!F?{C&\)1 /^~cZC +endstream +endobj +2132 0 obj +<< /CreationDate (D:20250701162404+08'00') /Creator (Matplotlib v3.7.2, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.7.2) >> +endobj +2133 0 obj +<< /BaseFont /BMQQDV+DejaVuSans /CharProcs 2482 0 R /Encoding << /Differences [ 32 /space 45 /hyphen 48 /zero /one /two 52 /four /five /six /seven /eight 65 /A 68 /D 82 /R /S 90 /Z 97 /a 100 /d /e 103 /g /h /i 107 /k /l 110 /n /o /p 114 /r /s /t /u /v ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1021 -463 1794 1233 ] /FontDescriptor 2483 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BMQQDV+DejaVuSans /Subtype /Type3 /Type /Font /Widths 2484 0 R >> +endobj +2134 0 obj +<< /Creator /Title >> +endobj +2135 0 obj +<< /CA 1 /ca 1 >> +endobj +2136 0 obj +<< /CA 0 /ca 0 >> +endobj +2137 0 obj +<< /BaseFont /MUFUZY+GoogleSans-Regular /DescendantFonts [ 2485 0 R ] /Encoding /Identity-H /Subtype /Type0 /ToUnicode 2486 0 R /Type /Font >> +endobj +2138 0 obj +<< /D (subsubsection.3.2.1) /S /GoTo >> +endobj +2139 0 obj + +endobj +2140 0 obj +<< /D (subsubsection.3.2.2) /S /GoTo >> +endobj +2141 0 obj + +endobj +2142 0 obj +<< /D (section.5) /S /GoTo >> +endobj +2143 0 obj +<< /A 2487 0 R /Next 2488 0 R /Parent 6 0 R /Prev 2000 0 R /Title 2489 0 R >> +endobj +2144 0 obj + +endobj +2145 0 obj +<< /D (subsection.H.2) /S /GoTo >> +endobj +2146 0 obj + +endobj +2147 0 obj +<< /D (subsection.G.1) /S /GoTo >> +endobj +2148 0 obj + +endobj +2149 0 obj +<< /D (subsection.G.2) /S /GoTo >> +endobj +2150 0 obj + +endobj +2151 0 obj +<< /D (appendix.F) /S /GoTo >> +endobj +2152 0 obj +<< /A 2490 0 R /Parent 2010 0 R /Title 2491 0 R >> +endobj +2153 0 obj +<< /A 2492 0 R /Count -5 /First 2493 0 R /Last 2494 0 R /Next 2010 0 R /Parent 6 0 R /Prev 2495 0 R /Title 2496 0 R >> +endobj +2154 0 obj + +endobj +2155 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni0394) /Descent 0 /Flags 4 /FontBBox [ -78 -222 798 898 ] /FontFile 2497 0 R /FontName /GISHRU+XCharterMathRM /ItalicAngle 0 /StemV 83 /Type /FontDescriptor /XHeight 481 >> +endobj +2156 0 obj +<< /Filter /FlateDecode /Length 573 >> +stream +x}Tn0+|HtGxU$DbA[6$N=3+<Μ|nE^7Rl)/u~N+׋r۾w͛l GxelvE= +X؟#;n^f/ũ-/1iW'kp"nҾ *tQyop(CaSQȋh'L^+{(L 6i+i~uua\ ^(GHo>9\e{z1u{ZдW3+sh4:GfR,I3e8ex +35sGOX "^01A"D$"TPXCqJ8BSD LQ1E%kna"1rK<1x&&4 4 `8$ Y=s94OM3!^rĘ\ ؊!aEk(Qs̈́xicj-=eL1d":|9d9?`֖~}LJvs }EM7l1*!Yd(oxosvkw5ѽ?0~R }$?qIe +endstream +endobj +2157 0 obj +[ 644 ] +endobj +2158 0 obj +<< /Ascent 728 /CapHeight 669 /CharSet (/B/C/D/E/F/H/I/J/K/L/M/P/Q/R/S/T/Z/a/b/c/d/e/eight/f/five/four/g/h/hyphen/i/k/l/m/n/o/one/p/period/r/s/t/three/two/u/v/w/x/y/zero) /Descent -256 /Flags 4 /FontBBox [ -170 -300 1073 935 ] /FontFile 2498 0 R /FontName /QDXOEM+URWPalladioL-BoldItal /ItalicAngle -9 /StemV 114 /Type /FontDescriptor /XHeight 469 >> +endobj +2159 0 obj +<< /Filter /FlateDecode /Length 699 >> +stream +xmTn@Cx ^"#&W)R CfqTcfޛ|{NۻItճ;urnn:];pvA= ]u7Ŧm;J޴۹v'k^Sn_ܯI߿;L觑Ҍo"@]?pjA{5λ#WӋCփנPPM5?#yitM{BMiY]0}j74"x{R@hS/s}y +ymDO*7W,^EY.3܄r33KֈKRlRza2# D4 #.$97 Zd[RF3Ld ={d葡_1`M@ڵd][!Dvbb]0aʼnX_~:,Rx( y]eѱԁ_[WS3+!Z af> +endobj +2162 0 obj +[ /ICCBased 2499 0 R ] +endobj +2163 0 obj +<< /AIS false /BM /Normal /CA 1 /OP false /OPM 0 /SA true /SMask /None /Type /ExtGState /ca 1 /op false >> +endobj +2164 0 obj +<< /BaseFont /PMYFND+CambriaMath /DescendantFonts 2500 0 R /Encoding /Identity-H /Subtype /Type0 /ToUnicode 2501 0 R /Type /Font >> +endobj +2165 0 obj +<< /BaseFont /PMYFND+CambriaMath /DescendantFonts 2502 0 R /Encoding /Identity-H /Subtype /Type0 /ToUnicode 2503 0 R /Type /Font >> +endobj +2166 0 obj +<< /BaseFont /PMYFND+TimesNewRomanPSMT /DescendantFonts 2504 0 R /Encoding /Identity-H /Subtype /Type0 /ToUnicode 2505 0 R /Type /Font >> +endobj +2167 0 obj +<< /BaseFont /PMYFND+TimesNewRomanPSMT /DescendantFonts 2506 0 R /Encoding /Identity-H /Subtype /Type0 /ToUnicode 2507 0 R /Type /Font >> +endobj +2168 0 obj +<< /BaseFont /PMYFND+TimesNewRomanPS-BoldMT /DescendantFonts 2508 0 R /Encoding /Identity-H /Subtype /Type0 /ToUnicode 2509 0 R /Type /Font >> +endobj +2169 0 obj +<< /BaseFont /PMYFND+CambriaMath /DescendantFonts 2510 0 R /Encoding /Identity-H /Subtype /Type0 /ToUnicode 2511 0 R /Type /Font >> +endobj +2170 0 obj +<< /BaseFont /PMYFND+Times-Roman /Encoding /WinAnsiEncoding /FirstChar 65 /FontDescriptor 2512 0 R /LastChar 71 /Subtype /TrueType /Type /Font /Widths [ 722 0 0 0 611 0 722 ] >> +endobj +2171 0 obj +<< /BaseFont /PMYFND+Times-Roman /Encoding /WinAnsiEncoding /FirstChar 32 /FontDescriptor 2513 0 R /LastChar 117 /Subtype /TrueType /Type /Font /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 0 0 0 0 278 0 0 0 778 500 500 500 0 333 0 278 500 ] >> +endobj +2172 0 obj +<< /CreationDate (D:20250701083655Z) /ModDate (D:20250701083655Z) /Title >> +endobj +2173 0 obj +<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter /DCTDecode /Height 7646 /Subtype /Image /Type /XObject /Width 11881 /Length 2331870 >> +stream +JFIFC  +   $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222.i" + }!1AQa"q2#BR$3br +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz + w!1AQaq"2B #3Rbr +$4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +([_'fhMf^fY*#u4W_>hڍ?R+() 6_U{6_#};dIq7H5n` &;:( +( +( +( +( +( +( +( ++Whe%H:o.߇0@oJ ?%q(?tyCI\ ++v<$?~Wn=]?a+7ZZVK5?L +2yd(((()HFHꈣ,p&Ep/lɬ,6#b,Bq"Eu{m'MxIڪ+;v!:Q^kw.B{s`Ǡ#M~uiz擭ZmWƀ4((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*iҧKe@RO`*V]\ʱ[†I$sI?|;%׏51Ť[1[KsqH׏~6~&[-@&z^VI'$*kK;B+K;y..emf> F[ Ն|O:QpBZfHT(qfJB֡#~S`OsWѵ-QOl洺G*v#q@.n6ZNͺӧ}I_i>1ѓS.<$mak|MG Rb-͹8Y@mQYcVӥmnP:BA(((((((\VfՋ\VfEkXx[:iylā5!#ʂ* 0S\tMsWA'?T?]7G 0S\tMsWA'?T?]7G 0S\tMs 5Mc¾"&izZ[,SH Q@Q@Q@W|b;MOmC??Bɤx5Uu-ax0~Mwds<'/RIrѝq1,rIWw 8#.ߐMAK ?*+Ws\OO7TxI ;Ctﰴ-I rFX}_t%f|?}kX%kxWo潒ʎI N y'kkfuo4h(((((((+MoόtQt*Xu'j?7试`Lz[ClU?';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.h϶ԴW_>3m';t-4OGwh]}KE| ??|g>?@R_-D}.?'I'f=U}SE|*'ttH'VRx;E} @Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@S&8!i\$qgc2Mxw F𝔸 JD`mx_+ԵIJ)? +Š [Id`2Yz澹[B\F YscG?xIuϯ]FKQۡOԭ}=@Q@r;& c@M_{\ꨠ"@.F#ݬ9߱} Qh +Yx0$FdyF?CϺWTOْ֥q&(zҕEƙ[_ڹU'NA}͠k~"&9ۑ>~EPEPEPEPEPEPWW+3^^gI]|M((((((, +GvcrI> y6Rc/H~>ƾFwy$i$fwbK3Ork%ouff9o*Bt}OSMsW2'qXa|Beҟ ė#?‡ש gz/ןSԢi 'O޾*p@4m JiYۏ1OR}5EQEW1/J4{v!˟]˂O~ 67>zy7'NQEQEQEQEQEQEQEQEnֿM|5 \Ơ Z+:4e IrTm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +Yd.W/xȠ(4 h 3AZe>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲX^!=!p=*+?-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>Ⱥ?#֧m:>G(o<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z++[\~/grgx|w1nxE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"e>-}xE| +/Q[(Z+ﯲGm_ho<"d 8c>-᎚Jmu?J +ǧi1!O4QEQE=|G_I)-F?C0S_־o#:傌$7%B(x]92iL=#*jmԌ>'4[ESHh:( +( +( +( +( +(>uojXuoj}gI]|M?Jo צPEPEPEPEPEP^igBw=/Sqh<#.~Fz]|F&~m|!Ti@,@xRWYHč +|iHB~4w<2NtIpGJܷ{]-PEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/Jݬ/JĮAqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]?*o~ַk ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֬ǜkѿտZAq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWߴٓƚ]rqW5ټߊ3ZŸo<ºZ x~نU7wL?]8Lg(PTQEQEQEAkcVeYG_^W<^_Ę[4q(Ѿ]_lyhf>|P݄_@gEQEQEQEQEQEE.3U.3U>'@Z|v6F,rr͜~Kڣ3_Z=D.&ynݽz皽kk$=Z܎Ok>4~:vr]:xPV?7^2kY87Vxе|E}j~cy ݫap}|A?~ vтGsї}e_ssip.mQ꧱F:( +( +⮠u/ v]-}_&z93]!?W'uzf.>#M;@}"&5?w%9|k[Ŀ +$}/.-wC/,?w l]ݩ%>V<{Unj$C5o>.781_ҹY_|;1&A1z*)$Z}L*kVMPb4W_/\5"+ m1 ꮥH G@JG#-lqr>W\ymͬ$+PGW|9xb,Z42w=Z<~}EQ{{I{K>E^((((4 +- q?' + C Ks4WAo&^1/^u %9?y?Ŀ7@_ xG}W1^1/$QF{l/f& 9 OkJփ]%O_bfK"8zfz*͏?fz*͏?fz)DWS`S4M,N3Tl _lS|?l _lS|?l _dJrNjQPChmN&lS|?l _lS|?l _lS||:QKAEPEVeYa5͏? UG͏? UG͏? Ukk{) `2~R84QETR,86@6?@6?@6?[]vж(z( +*Q#JC)OZO@6?@6?@;q +)c c=OhCfzc=OhCfzc=OhCfzq"+ʰ}(QLd&C^T?l 6?/T?l 6?/T?l *LD$|/QEQPChmNlS|EPٱ4lS|EPٱ4lS|ESTU9 v6W(s}ohʳ9R#hCfzc=OhCfzc=OhCfznR,dq@h(V򘥐Fj?@6?@6?@-Vh[pS=QT_WRNz*͏?fz*͏?fz*͏?pOBXP8IETM-Cfzc=OhCfzc=OhCfzc=Ohq"+ʰ})QLd&C^6?/T?l 6?/T?l 6?/TWXf +%9'5z +(nn@6'@QT?l 6?/T?l 6?/T?l >RyV(%۠E\(\[2Tfz*͏?fz*͏?fz*۔0?)U(OZbBuI tUG͏? UG͏? UV-Vh[pS=Q@E{(ݑ!'͏? UG͏? UG͏? TpOBXP8I@TMQٱ4~c=Ohٱ4~c=Ohٱ4~c=Oj8X>(M2AK!/S6?@6?@6?u&`Sp>S@(nn@6'Ul _lS|?l _lS|?l _êZO*tHQEVeYa4fc=Ohٱ4~c=Ohٱ4~c=Ojkk{) `2~R8 4QEUI+[yLRCi5͏? UG͏? UG͏? Tpݫ4-) +(/F) =hCfzc=OhCfzc=OhCfzո'!,G(zb$F`X&c=Ohٱ4~c=Ohٱ4~c=Ohٱ4~j8X>(M2AK!/S?@ ~rչji"HK8}kD(y]?j]J YI%I+Kfz*LD$|PE 6fڤqhj*͏?fz*͏?fz*͏?êZO*tH QEUk{FUʖPlS|EPٱ4lS|EPٱ4lS|EVrf'#@UI+[yLRCi4nc=Ohٱ4~c=Ohٱ4~c=Ojŵ7j n +px"'(e42ٱ4~c=Ohٱ4~c=Ohٱ4~ 㹈K(*=ɪ?6?/T?l 6?/T?l 6?/T?l ]G"GҀEɦH"id8Eq}Cfzc=OhCfzc=OhCfzҮdJrNhQ@ 6fڤqj͏? UG͏? UG͏? U8uKIXnir +(73,28&,T?l 6?/T?l 6?/T?l Mmov!rOGf(>ko)Yqm&ٱ4~c=Ohٱ4~c=Ohٱ4~f8<SEE{(ݑ!^lS|?l _lS|?l _lS|%CPQHKdT?l 6?/T?l 6?/T?l 6?/MG"Gҝ@ɦH"id8Eqc=OhCfzc=OhCfzc=OhEu&`Sp>SWD3mRp845Cfzc=OhCfzc=OhCfz-'bB] P( +**K l _lS|?l _lS|?l _[_ݹH\Y*)d!QEPٱ4lS|EPٱ4lS|EPٱ5bf8<@EQT_WRNzlS|EPٱ4lS|EPٱ4lS|EG%CTQHKd@6?@6?@6?]NU#@d$4"8>c=Ohٱ4~c=Ohٱ4~c=OiWXf +%9'4z(D3mRp85[fz*͏?fz*͏?fz*:QKA@Uk{FUʖ@h6?@6?@6?rf'#EPETR,86QlS|EPٱ4lS|EPٱ4lS|EAmw ڳBۂnҐp~Sր/QT?l 6?/T?l 6?/T?l [xbr(J(f +@2hh6?@6?@6?@覣]NU#Nd$4"8Sٱ4~c=Ohٱ4~c=Ohٱ4~œ0Q)8)QECsu 8gc=Ohٱ4~c=Ohٱ4~c=OiꖓʱG!.(Q@ZѕfrG?6?/T?l 6?/T?l 6?/Uܤ.YHER}JSM[lS|?l _lS|?l _lS|mw ڳBۂ 袊(/F) =i?l _lS|?l _lS|?l _xbr*J(f +@2j͏? UG͏? UG͏? UWQĈ*QE2iYzfEPٱ4lS|EPٱ4lS|EPٱ4Y3EPX^!Fsu 8g絽Bܝ#Ҁ3}s_\W#]=e(Ґ?) j*͏?fz*:QKA@Uk{FUʖ@h6?@6?@6?rf'#EPETR,86QlS|EPٱ4lS|EPٱ4lS|EAmw ڳBۂnҐp~Sր/QT?l 6?/T?l 6?/T?l [xbr(J(f +@2hh6?@6?@6?@覣]NU#Nd$4"8Sٱ4~c=Ohٱ4~c=Ohٱ4~œ0Q)8)QECsu 8gc=Ohٱ4~c=Ohٱ4~c=OiꖓʱG!.(Q@ZѕfrG?6?/T?l 6?/T?l 6?/Uܤ.YHER}JSM[lS|?l _lS|?l _lS|mw ڳBۂ 袊(/F) =i?l _lS|?l _lS|?l _xbr*J(f +@2j͏? UG͏? UG͏? UWQĈ*QE2iYzfEPٱ4lS|EPٱ4lS|EPٱ4Y3EPECsu 8gc=OhCfzc=OhCfzc=OhNRyV(%۠E\**K 4UG͏? UG͏? US[_ݹH\Y(OZbBuIl _lS|?l _lS|?l _YmNTQEQ}^7diHe8?)@6?@6?@6?ko)Yqm&-T?l 6?/T?l 6?/T?l XYmNPQEUvFS򞴟6?/T?l 6?/T?l 6?/Q!H>{"?xΟCC@Cfzc=OhCfzc=OhZB *QU'ԭm1K!:*͏?fz*͏?fz*͏?pݫ4-)(nҐp~S֓fz*͏?fz*͏?fz*8'!,G(zbF`X&lS|EPٱ4lS|EPٱ4lS|EPٱ5uHrJuS& hUG͏? UG͏? UJœ0Q)8) QET77P yjy6?/T?l 6?/T?l 6?/T-'bB] U(\[2TEPٱ4lS|EPٱ4lS|EPٱ55۔0?)P( +*)d!Qfz*͏?fz*͏?fz* kn՚EO@UvFSzc=Ohٱ4~c=Ohٱ4~c=Ojs#=1@QE#0U,z@ EPٱ4lS|EPٱ4lS|EPٱ4lS|E5HrJuS& j͏? UG͏? UG͏? U,NIM^*m<͵I<UG͏? UG͏? UOTU9 v6@((73,28&ٱ4~c=Ohٱ4~c=Ohٱ4~mov!rOGf +(V򘥐FhCfzc=OhCfzc=OhCfzՋkn՚EOEPEQ}^7diHe8?)Ic=OhCfzc=OhCfzc=Ohs#=1RPE#0U,zTl _lS|?l _lS|?l _lS|$Eu9V:)LDp4*͏?fz*͏?fz*͏?]bɘ(( +*m<͵I(M2AK!/S?@6?@6?@+Y3@T77P yjy 6?@6?@6?i<rm".QEQUoVg*XdpMCc=OhCfzc=OhCfzc=OhZB *QU'ԭm1K!:*͏?fz*͏?fz*͏?pݫ4-)(nҐp~S֓fz*͏?fz*͏?fz*8'!,G(zbF`X&lS|EPٱ4lS|EPٱ4lS|EPٱ5uHrJuS& hUG͏? UG͏? UJœ0Q)8) QET77P yjy6?/T?l 6?/T?l 6?/T-'bB] U(\[2TEPٱ4lS|EPٱ4lS|EPٱ55۔0?)P( +*)d!Qfz*͏?fz*͏?fz* kn՚EO@UvFSzc=Ohٱ4~c=Ohٱ4~c=Ojs#=1@QE#0U,z@ EPٱ4lS|EPٱ4lS|EPٱ4lS|E5HrJuS& j͏? UG͏? UG͏? U,NIM^*m<͵I<UG͏? UG͏? UOTU9 v6@((73,28&ٱ4~c=Ohٱ4~c=Ohٱ4~mov!rOGf +(V򘥐FhCfzc=OhCfzc=OhCfzՋkn՚EOEPEQ}^7diHe8?)Ic=OhCfzc=OhCfzc=Ohs#=1RPE#0U,zTl _lS|?l _lS|?l _lS|$Eu9V:)LDp4*͏?fz*͏?fz*͏?]bɘ(( +*m<͵I¢(((hNo]-Eh 9}4?Z߉?~n+?#f((((((t~,eiTjҷUO ?D! +kP7^EyKV +7htn~2x[H#4 tP37ï\)W!@gW}Mwtgb3+(c>K&AY l?w+H*H 8 0|%]n#բS% N?:|-mC> 46 T?y+z<=g6`6yF}+Vt(s$k +E)+ꤊm8H6;b (<3G:m`$Khu_ 8 T㷘Ñj8mF_1˴F4KA>Q]/D^mgA3_ƯQER}3Z6my =+~!;yO܀kmÿǜsǵ{ +#e*0Ap8ȼYD _mmaBJy=jjd$t*⫷uG笿 +ho/?G笿 +ho/?G笿 +k8?*~zHEF !T(ϵ:j ? sn![h/G笿 +?c(/G笿 +?c(!_#_*h6Yrz Z(2|AqOk/bXfPwTc(/G笿 +?c(/G笿 +?c(+ISuumAmp$^ʴh~^_:T`mrWEG#_sWEG#_sQW?c*͖$nJ@h嵟 +K_*uZD7w 3 fc(/G笿 +?c(/G笿 +?c(Q7VUcf`'uZۿ7ʲ2 1cw(/G笿 +?c(/G笿 +?c(F\_Vf~z [eXPOZ7??ʟHOB1@E?m=eQ@?m=eQ@?m=eQ@s_SScAI$P>.bJ`[w +HYY1]#_Y1]#_Y1λJMXK.AQ@d<ֵVKؖ9!Et_Y1?m=eP;Et_Y1?m=eP;Wt +A?֯#_KmAmp$^ʀ4h?αbuiԨۊ@?m=eQ@?m=eQ@??+VZdVR+]mgB +k>Hy$ c]#_Y1]#_Y1A?;o/?®YXb0c-QEѿC]$YAf,q7o/?€9+~zo/?€9+~zo/?€'ѿտ [(IU'M@ D\Uvє#@?m=eQ@?m=eQ@vVs_YY1H$*U-[Asvnm$+u#qWEG#_sWEG#_s$?x:~zMXK.AQEPO?? s%Knj#_sWEG#_sWEG#_ei?h-dBcVo+6+VJ Rc(~zvc(~zv??*#_Y"݉]6(Q@!I~PHy$ c#_sWEG#_sWEG#_7&x*تV1أ,lTWwFuV\YAf,qstWEG#_sWEG#_s Y1kl +Us@S&Q'SC)F(/G笿 +?c(/G笿 +?c(/G笿 +?c(B<kjlh"#gڝ@oW)] sn![k;o/?€9Pң<k~zo/?€9EAc(~z uVRh6YrzZ+'t^ı̠69 ++~zo/?€9+~zo/?€9ڻRFc*[m k$TEPu]]HFUoG笿 +ho/?G笿 +ho/?G笿 +Q]R"݉]6*k?WSYZD7w 3 f^c(~zvc(~zvY1r;ej(6?'$2 1cw)Y1]#_Y1]#_Y1> _mmaBJy=jjd$t*⫷uG笿 +ho/?G笿 +ho/?G笿 +k8?*~zHEF !T(ϵ:j ? sn![h/G笿 +?c(/G笿 +?c(!_#_*h6Yrz Z(2|AqOk/bXfPwTc(/G笿 +?c(/G笿 +?c(+ISuumAmp$^ʴh~^_:T`mrWEG#_sWEG#_sQW?c*͖$nJ@h嵟 +K_*uZD7w 3 fc(/G笿 +?c(/G笿 +?c(Q7VUcf`'uZۿ7ʲ2 1cw(/G笿 +?c(/G笿 +?c(F\_Vf~z [eXPOZ7??ʟHOB1@E?m=eQ@?m=eQ@?m=eQ@s_SScAI$P>.bJ`[w +HYY1]#_Y1]#_Y1λJMXK.AQ@d<ֵVKؖ9!Et_Y1?m=eP;Et_Y1?m=eP;Wt +A?֯#_KmAmp$^ʀ4h?αbuiԨۊ@?m=eQ@?m=eQ@??+VZdVR+]mgB +k>Hy$ c]#_Y1]#_Y1A?;o/?®YXb0c-QEѿC]$YAf,q7o/?€9+~zo/?€9+~zo/?€'ѿտ [(IU'M@ D\Uvє#@?m=eQ@?m=eQ@vVs_YY1H$*U-[Asvnm$+u#qWEG#_sWEG#_s$?x:~zMXK.AQEPO?? s%Knj#_sWEG#_sWEG#_ei?h-dBcVo+6+VJ Rc(~zvc(~zv??*#_Y"݉]6(Q@!I~PHy$ c#_sWEG#_sWEG#_7&x*تV1أ,lTWwFuV\YAf,qstWEG#_sWEG#_s Y1kl +Us@S&Q'SC)F(/G笿 +?c(/G笿 +?c(/G笿 +?c(B<kjlh"#gڝ@oW)] sn![k;o/?€9+~zo/?€9+~zo/?€0a_iYIۣ e9?µhǜ֪׶I{#2۾Z(o/?G笿 +ho/?G笿 +j!H>~zmh-dBcPQ@!_5uwlWέ#qUc(/G笿 +?c(/G笿 +?c(OEtUJLV7v%vثW-R_!]Mgi4$ b9z+~zo/?€9+~zo/?€9<=o?m=eU+Q6f rwP(8ۿ7kCW(,Ŏ1?m=eP;Et_Y1?m=eP;Et_Y1?m=eP75~[Ku *:2bc(/G笿 +?c(/G笿 +?c(<k?o/?µ#AI$P>ꥫ.bW0-ͻnu2c(~zvc(~zv|[Y1ۣ e9?€5hy]?mWWc{d,r3( _Y1}? @o/?G笿 +ho/?G笿 +)#]]g[h[\$$8+?t:ߪWlWέ#q@?m=eQ@?m=eQ@kx?$UG笿 +eEe+I~lP(9mgB +]E֑ LH*G笿 +ho/?G笿 +ho/?G笿 +oMUUlcFX٘1V6?'벬4;yey X +讋o/?G笿 +ho/?G笿 +kѿտ?c+Bm-$ր&MOO:FSЌPEt_Y1?m=eP;Et_Y1?m=eP;Et_Y1?m=ePy\TEF !T(ϵ:)j ?R;rBR:w#_sWEG#_sWEG#_`?ҲAGVːsjY> 85Ul%Fe|Q]#_Y1]#_Y1'B}O5Rh[\$$8 (0 _mmaBJy=jjd$t*⫷uG笿 +ho/?G笿 +ho/?G笿 +k8?*~zHEF !T(ϵ:j ? sn![h/G笿 +?c(/G笿 +?c(!_#_*h6Yrz Z(2|AqOk/bXfPwTc(/G笿 +?c(/G笿 +?c(+ISuumAmp$^ʴh~^_:T`mrWEG#_sWEG#_sQW?c*͖$nJ@h嵟 +K_*uZD7w 3 fc(/G笿 +?c(/G笿 +?c(Q7VUcf`'uZۿ7ʲ2 1cw(/G笿 +?c(/G笿 +?c(F\_Vf~z [eXPOZ7??ʟHOB1@E?m=eQ@?m=eQ@?m=eQ@s_SScAI$P>.bJ`[w +HYY1]#_Y1]#_Y1λJMXK.AQ@d<ֵVKؖ9!Et_Y1?m=eP;Et_Y1?m=eP;Wt +A?֯#_KmAmp$^ʀ4h5(#FT ,ܞ]}HFUoG笿 +ho/?G笿 +ho/?G笿 +Q]R"݉]6*k?WSYZD7w 3 f^c(~zvc(~zvY1r;ej(6?'$2 1cw)Y1]#_Y1]#_Y1> _mmaBJy=jjd$t*⫷uG笿 +ho/?G笿 +ho/?G笿 +k8?*~zHEF !T(ϵ:j ? sn![h/G笿 +?c(/G笿 +?c(!_#_*h6Yrz Z(2|AqOk/bXfPwTc(/G笿 +?c(/G笿 +?c(+ISuumAmp$^ʴh~^_:T`mrWEG#_sWEG#_sQW?c*͖$nJ@h嵟 +K_*uZD7w 3 fc(/G笿 +?c(/G笿 +?c(Q7VUcf`'uZۿ7ʲ2 1cw(/G笿 +?c(/G笿 +?c(F\_Vf~z [eXPOZ7??ʟHOB1@E?m=eQ@?m=eQ@?m=eQ@s_SScAI$P>.bJ`[w +HYY1]#_Y1]#_Y1λJMXK.AQ@d<ֵVKؖ9!Et_Y1?m=eP;Et_Y1?m=eP;Wt +A?֯#_KmAmp$^ʀ4h?αbuiԨۊ@?m=eQ@?m=eQ@??+VZdVR+]mgB +k>Hy$ c]#_Y1]#_Y1A?;o/?®YXb0c-QEѿC]$YAf,q7o/?€9+~zo/?€9+~zo/?€'ѿտ [(IU'M@ D\Uvє#@?m=eQ@?m=eQ@vVs_YY1H$*U-[Asvnm$+u#qWEG#_sWEG#_s$?x:~zMXK.AQEPO?? s%Knj#_sWEG#_sWEG#_ei?h-dBcVo+6+VJ Rc(~zvc(~zv??*#_Y"݉]6(Q@!I~PHy$ c#_sWEG#_sWEG#_7&x*تV1أ,lTWwFuV\YAf,qstWEG#_sWEG#_s Y1kl +Us@S&Q'SC)F(/G笿 +?c(/G笿 +?c(/G笿 +?c(B<kjlh"#gڝ@oW)] sn![k;o/?€9+~zo/?€9+~zo/?€0a_iYIۣ e9?µhǜ֪׶I{#2۾Z(o/?G笿 +ho/?G笿 +j!H>~zmh-dBcPQ@!_5uwlWέ#qUc(/G笿 +?c(/G笿 +?c(OEtUJLV7v%vثW-R_!]Mgi4$ b9z+~zo/?€9+~zo/?€9<=o?m=eU+Q6f rwP(8ۿ7kCW(,Ŏ1?m=eP;Et_Y1?m=eP;Et_Y1?m=eP75~[Ku *:2bc(/G笿 +?c(/G笿 +?c(<k?o/?µ#AI$P>ꥫ.bW0-ͻnu2c(~zvc(~zv|[Y1ۣ e9?€5hy]?v$c@m-R~zvc(~zvc(~z 'B}O5uLHYz*Ѡ:2b8+~zo/?€9+~zo/?€9+~zo/?€4-?ʦƂ(0I +F}KV\Ar6 ֳc(/G笿 +?c(/G笿 +?c(?v :\+V +y]?j{d,r3( Bc(~zvc(~zv?_G笿 +F&I$,?hEcWW{|;Q[o/?€9+~zo/?€9+~zo/?€)?$WETȬi#wbWo͊@r%/}֑ LH(/G笿 +?c(/G笿 +?c(&x*w#_\cf`'uZ(:I4;yey X +o#_sWEG#_sWEG#_O./3WXPOZ7??ʸC)F++o/?€9+~zo/?€9+~zo/?€9?ʳc+R4DHU +3@Z*Esۼ.HVGZ(o/?G笿 +ho/?G笿 +jHuJ :\(V( ǜkKؖ9/G笿 +ho/?G笿 +ho/?G笿 +)#]]g[h[\$$8+?t:ߪWlWέ#q@?m=eQ@?m=eQ@kx?$UG笿 +eEe+I~lP(9mgB +]E֑ LH*G笿 +ho/?G笿 +ho/?G笿 +oMUUlcFX٘1V6?'벬4;yey X +讋o/?G笿 +ho/?G笿 +kѿտ?c+Bm-$ր&MOO:FSЌPEt_Y1?m=eP;Et_Y1?m=eP;Et_Y1?m=ePy\TEF !T(ϵ:)j ?R;rBR:w#_sWEG#_sWEG#_`?ҲAGVːsjY> 85Ul%Fe|Q]#_Y1]#_Y1'B}O5Rh[\$$8 (07%?eV.Ň48X>`(((WfJD|;Z@v.,k;NV/*!Fs@]ˆ>KqsRҸf⭌ȵiSgh(((((((((GmK=A~–$:'G-bh ,$ +G:ހ:Cމ*^F$#v:M}_*E}e9%~=hz( +;Z뺍1\Ș1|O|H|~@U"^kV62\GVÞѴ^;ey|]PEPEPt5'}%sOlP|+xTPy,`Er?gWngα[A$\cue{;/5|kQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@eԚoOU=gArWWWV =ik''t((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((cs*X^!FE=SA Waa ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE4@Ȁ( " r?toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((($I8TE ʸ󵕱sN/}Zݠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Pe(8ǜ} +ra PkF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?fލٮ}^\o] uT]Eb]ѝ?ʜȮ GcM>5մ[ F#Z=p6J((n5k:9KdCc} ]_ YԷ-8O1TH?|M@{צ5sT+n^_V/$\K\!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq_>>6=>kv=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@#(e*#PĞ=OƺTc=nS8>7_N|}CkZ~#u暤Nru'r~:/^0OxrՂI<,9+m| R$"GjĖ0hzŭġ#FQ\(>%OӼ wܫPs=zu?kDx.o-<)i.V؋#_OҼ&og湝̒%j +W:eZ.n.XSq:}ͥiMjmaHc* ea4S}@Q@Q@2xQH VV" ߃kc_k0/k>>ӼMk&L—1[]+I8sZ%:((u; ç݉+>bBq=@EQ^C:Z7a'5VkViz6+ ( +(fTRT N|9>|mi;(s>1 E$6w j a`pQORtA_3Ǎ5uy +q+ש@ujzeԭ,NxJTbp$| +k_t&LܹN&tu;'8cԵwQEV<*\DLz,C0E| <\Io:4sD`Qײ||3i5_:bh9gW|(A0 Hk+o Pmil]{4oikqa(}y꾌?CutQEQ\{xKkF`.h̘ǁ8Ϗ.GxР}U;YA S?}oJn> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((((((ё2R2~./ڛd,v7??^W7v])I"C+)45(%XH#Gj/]C,|c^){cw]=pL~@>7xũ[¥eo̚Լ7K =K]^&ѭtֱ&?bqwY&C䑋3RO$tadY\Q1uWouMn:~jXAG?y_H6ip]v֐$h?Rz{ɠ lm,lXm@b((( wFOgֆ#_rf?g_(_ FG_Q˟kK#(>8[܃D}w_?YG J5{{pAE|w^Z[9 k[>YW0?Ӭw@I%߇$F"1Wϰ&mxfH*}=(t_1"X>ǩuE_B t?چ5mMmxU J&l#? +o5;.˳}I*X:J?kzMOs)*/vcZ|S'9 m'N<<:g|;\̳ݏ +^ 'cmHw>e2Ɏtԓ]EPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\UbjEOb2*?[ϼ_ ǜ +֦ih8QuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[!\yWaa ʝKo*U +8v(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISt݉& 85MxQ\p4S./3V~m>DXj(UQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEh:Fix V| zţ'[n~^<m4=mEۤivg/@;vZPEPEPEPEPEPEPEPEP@ A{RbMtqn?tTP] +&=2{bԟ15'9[f?ek#O5z?K?^`iܑ=)P.h$6XZ?p.[TQ@Q@Q@Q@Q@Q@d>|Bu}"_uj(̯~Egyg]1sv[ǧ?]z6 jAamvz/9IldjD Zۢ +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((dGFI[jkXOP*(.aBԴQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEAqyQ47tU/k +F* P(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((mY#42j6ʱ0gn-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQMwXgsQ}]谆@zF*z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((d3Rp3KERֱ|P "mz}Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/Jݬ/JĮAqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]?*o~ַk ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֬ǜkѿտZAq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Ua ʸ߸/߸/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+XRlA'#=s>L@9?YZ +2ZHJ3aZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn&fn>]*&E(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j;e7s7ZJEԡ-ƀ:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>> M }+eO|߸/ѧܬ cֶ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֬y# +grAq}[漙&mJ鱆4z(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((–L!'xAon3ailEJ)=%/x0zADd8*QzQTPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@\L\p:$_O._1\uW{I~jY>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Sc($Gmvoo@Am<֜2ITCkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((.Mr)^38oƟmsprnι7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP&C XY[)!5zAͿqYj1gv;߸/(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((x¶~L;f_EwKb*T8I8ſlvͩʿ7^yyq^Kww3M<ݏ$yyq^Kww3M<ݏ$1/#1XWD^ Rcџu#57[e4OܞPP{hEa1hú>!~Ea1r+?%/x0zA^dPg((((((((((((((((((((((((((*YDHߖO?? [)!5krv2\mu:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((._1\u:PEAZՓAZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEr8ſlvͩʿ7S9Tqr Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +WS._1\t^9?Y>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ/q\W@~EX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W![Vɇlڜ {z3ailEJ)=8𭟓ٵ9WQvAo/.5 ni;//.5 ni;䚂ƺ +%%8EQEQAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((C$GrFX75@=Γ&/3h +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +֭'hL1ytz(ɾs};8QP=*j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((^WX VrA韭Mip$E''#CEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECx%ȃ,@dϹWEdhڴhnzֽPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPExa6*.?ރLG[RiO@ǎ-+gömNU]yzˍB[imy&ˍB[imy&iy9J +(((((9?Gpko xzh#=<5]^ Rcџu#5Ӈ:ObBV 5KŶ^+D` IsGc8*QzQTPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVvm5Ͳ$)(ɾs}. 9Wkr?EQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEV62bk'~f7Zm_@2*p>v +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(OQ{Xշ ++~f3G).(Z( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( ++mvX1 +W9=Iguw-llQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQQ\J`P2QK`/$2oYf@ѪCZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEr8ſlvͩʿ7S9Tqr> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\{jQ_Lc30wlW";ۓQc_5Xе(&1wR;]8|C&.T%gSQ\[e4OܞPP{+ڌ4v>QEEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP j]B M*XɆ9?jP'{s>ޘ_Uן|A|oihˠ\z qc(Jo;0άTxe#xhFGBU#"^9Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@TvwVQrMW7ykֲhԍF|R;_ϵ}5l5MrDFܪf_¶~tf_W%R}:0;Q]gpQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]}]ټ(@f#ӭc?s=bPǜ +֪Ze@ĶWh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/JݬSN1.s=@vk·m0J(REKEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>6q,H$b$?JG9Hʩ99 ( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>>;ֲĤTX_X3/nnKbҙx۞٭*((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((({Y񿇴=w/BO[wGi +op?3XTӧ9;h쪊2Yk?7nE7gj7ặ}qjZ9̈́Eʳ+`ސGW4ҚAm\ŦdaʹfзA +(>Rr|799KvQE"B((((((((*{;;B+KHZim9&+Py[j"I~?+gMmNU콐u}Oz<{ +mS{/d_oS޺^O~{G{/~QEwQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kU-N`HeRwRAq}[~z fH\O#ZEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU[JKϿ?JsZ55&ts39Յ?TNz-e#4-j@q裓Wk?IAv,?lǾ\H݋3cMqTZS_y[xGi3v_r1^}dX[Xǡ7gWZ +(9((tq,q;ª~8E#N0eY#^0rNsURtR4r##*M (((((((/"Vڈh,5 ȭ-!i(¶~tf_W𭟝6ٵ9WA=믯_ {,~AEWqQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQESRKk#`=fzmk? W-@Fu5ݳ͹q0+B|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +/ghD.p9Jլ/J}=G?º;I[Hdsdzk}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((5{eEW |j]?S(br6ڳnΧ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ZM"2 9}=G?º6UGv 61X^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@8k?|9Yoa,mxLje8^NN`'c+xYHQw`}I~17,NYxP:ָOZ|F{@ \u1éW3 {Kú^䷕ ۏ>x^}Y׵ b"?o|Q\51gއWZ[/"k˛w+uy\4Q\w(((t k:i̹Ǚj?Zj.NqU̪+toS>5Ec?~FFfmk-:/8iFϮOOOR_},"6$pcg^|l7S؟BǓWQ]TK. e3tI#٦Ao *ǓҢI%dw($yɮ 7ׇI#G"2:0AAyɮ 7/ syO~S④ VV myGQEQEQEQEQSjZZBO+mDQ4n _DvwVQrM{o[?:mjre{VΛlڜ{ zׯ{= { +((((((((((((((((((((({-m_ZC@7+{MKS$뒮F\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷7߷7 J,?o\W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq_>>6=>kv=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(:p }SRm%v&We+5Zm9o>Jg5-[啯9?ZQSaF-_zNj4=j0 Jw|g7ޏEӾ]O+I$NIjcKjUgt6k"Q?NŢ䔜8e)INER$((kxdVR5,GEw7¿{^8Oy_9^|(zeԚ駄>;)`kTex6sDkѾ{d.bE䟧5ֶp,EK"@?Rm<z4qn%|8ޏ;߻WXUB KEvUBh+QTXQEQEQE~&Z*jh28އC^$oJuWU~&Z*jh28އC^~/ syO~S④ VV myGQEQEQSjZZBO+mDQ4n _DvwVQrM{o[?:mjre{VΛlڜ{ zׯ{= { +((((((((((((((((((((((|AqOkZ|AqOhF\_VfjtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/Jݬ/JĮAqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]?*o~ַk ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Gu P2I8P\'zFl;QyXo gI\1T9jhuwmcOwq/W¨MqŝNP13׉_wڤu2zW-zUZᩏ6i75c~)Sܖ qcݏ?+yfi啎YbI9Ԝy*ӊ(3 +( +( ++oG6t6G}^|QMkQ- JڞOj(@ $h8e\U+ԩ3ΫWaEVFEPEPEOieu8[OD Wq|%u _Z|G#̊RsZtjT~U3C5|:{{Ú^מ좆("X#F@vRxލsPlvOAנ扵Y_msOdzTtilQEntQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@}k.p{5FHȌ+ GPE}e^jzZ*jj>tqןs{Sߪxơy-4E^VΛlڜ{ zx6*^?ާuX\/'="X/e( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +}d,lB습Ec=VXU'S@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQTuwh9sk@Hdvrcµ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((צ&ˑ!JڢߵĿٮɋXI%$'(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ;ZK(U摔XOEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEAzlge$;q\_eEb3I+OHmPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE2YD5gv5?|9H'{ <~YH^Nu*šݎ֫_j6Zd{m+^%Z׵ ,Z|G G +.n3\q)c⩏>i5sڵ-ftoqgҼYM[r%вﯽ*kTywy]Fgv9,$mW9QEQEQ]ZN!om?i2Uʄ%7h9uHѝ*k4oVmYyۼ6j,y?J7OrǓe< I|Zʲz|3&YB?zE&4?sס]tR]t-26ӭYJ#$QE (((((((((((((((((((((((((((((((((((((((((+HnK*q~%tCllY<ր/QEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷7߷7 J,?o\W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq_>>6=>kv=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(}cZ& RdFM)IE]e(^NMy>F]8Iȧןk.uQ?k:~N(iOs|r~̿N8=BtzEvK7AיQ\U1eW1=ȿz/OrsUQ\waEP (a_j6\ؐ>BM膓nȫEz.X&q gI^|6ޑ͟&~]TugK/=Z<7Iޱ8n3Mu3Mq4JܳŘI늦>rU6gRZAXu~$w#hOMr$IWDz0v=Z[ĺκ:sڃ裏Ҳ`<ڹzS_y ^tz]61߼~FMCTg'cU()֝OuJ*nEVfAEPEPE_4]OYӬglАS~55jZ'S_=ZSRauK]J :gf#sѾsEX--x\t0wSqy.d|kZQzMBt1? G&hxztz4|(( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?j 2Pr94S./3G5?٫pAB(tIEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQER3b&E=S)UcZ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Ή̫Su:/Ч9(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((fXdR}EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQHHpsM} +}t|elzӨ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((^zl{ۨm+ptztSj?wy+9Մ>&eR:UI#ߩ_oBeG'jے;c Q_{" $ydi$vwcrIL- :i5SupG{%;rJg^"7-Ρ$piCOMsWLMZΫWzQXEPEPE9p&ᯉ5}ւ-.|Ҫݢ\)ΣBAio,D 1{VF&<?w9?wV:mhkov= +YeIk7cĴoZ|'zG"F[/kB˟e~yڊ=*X4]V,PDF +@RQEtaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE,G-:/Ч+R(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((._1\u:PEAZՓAZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEsZϏ|9nYe6߼lp?*e8^Nq,K,j2s^9dtz=vK9P:ָS]u|J{:qu<(suҷ$7 0akϵz=o<~@W\U1gއWZ[/"ޡ9kOWz(Vqެ(QEQZzOu}q|8.V<ΚM!.N\̢KF5s.5A!^ }ktox{C֚tm2ix1]tU%u,> 6"oݦ=A= נ&4azON;zT0Z/I握7O ?V<ε(IYъV +(Š((((((((((((((((((((((((((((((((((((((((((((((((((((((|AqOkZ|AqOhF\_VfjtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/Jݬ/JĮAqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]?*o~ַk ~ַh(((((((((((((((((((((((((((((((((((((((((((((((((((( o}}&p#vUQWbUڦ>wn5g=X®PAR2_2ķ(񰣈aSľ34z>)6$v?=?ӊʧ+u<]tR+PAR2K]ǤQEQEQEQEQEQEQEQEQEQEQEQT[Oa -':“ijJEyJk-읤!^E&啨\1\Œ4N-_&GQ'#&YEӋ]+,ŘO$SR_W2=#x^w-+Dgb#â㔜8%9INER$(( 2JC#*"'2to#6'͏dxAѾ:~׾iu ;#]4gާ], j,ou96\ؐ\tFCRUY'8{M Kx^=vA|nK,fr7O ] Z]uEUE + +uF +V=S5h+QVXQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]N ~rx<Vd<VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[oo@X>> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQYzc-ﯤŽ1nʢj*R5~z[_I$cHݕE|_xTkŽ!OSޏ^^6q *~X{^.'-cg +(N~|C:SGbNgc=X2R +Gz2'34z>)6$v?=?bOcmNӣ=E`H*FAk=(((((((F`Y +I=hSYrw0V=G^}aծGZc#Oׁ穊 WF{,ig<Gk~+xMܖ&0ڙc5]CV/'~W'AuS':i75c~*Rܖ ݏqw3\$ҷy5:w<ꕧQnETQ@Q@S\H:~4jjGF2N5Gڏkjxz>tRիɀ]>zֆkݯ^KBЂ :g#ѥ?=oM^[bi'+4M3FӬ`\`jN: +=XzTQEjlQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((,2dTdxSQ@ H!Pp((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((($1K24|tܠECKo*U +8v +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +("6I0DI䒂2CBjZ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((C)VEKo5,qg4(((((((((((((((((((((((((((((((((((((((((((((((((((+/_|7QF>TRmE]RQW{oK{0}ko6oL?QhVx%R5 +vx֍wS&yw/?=k4ovv+s0_? ѧQ]PQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES^4bDW0:*DEvQ +uQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ h+mA_k +n ~rs 8'楬ǜ +֠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Ԩ@pNjz߷7 k +F* W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP6,pNzTIX3A\~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((lp2OTֱ|oq\W@E2ׂ1SnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE>L(#zF)6)(_|7QF>TW%-5Fl(T/=/oQ5aG§}Xq.f1|0+ +( +( +( +(='34z>)6$v?=?ڕ(e w+~|C:SGbNgc= &.=l;=:3V dޖS +)I1(3=q [+?MDF +v"uaM^neU/4 P?W +?ZMg}=:(tB̓<~BkFs=ָcsΫB:A\gc=>9u Gu\껒+qW LUYUV$M#I+,rI4(s(((o]ztPO_4'hJnW0)UY*)f'Mzj&4QwOm Ӵ lc ?V'<ԵC@'*3G QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]?*o~ַk ~ַh(((((((((((((((((((((((((((((((((((((((((((((((( o}}&p#vUQWbU>L(#zF+^^6q *~X{xķ(񰣈aSľjq8Ul|3>X?QEpQ@Q@Q@Q@Q@Q@o-۝;WbAgz}:\~2^ͺ=;u%Qk**gRV94uM{Vߩ_qB|裁 +΢ŶQEQEQVlJq2 ҄mCѾkWdԦOS?!^|3ޓL?x:oSMZ<;JɳMpǁ|l@LV{~,xa454TE +:iie9̿>}FxQEvF1UB0VQEEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE>L(#zF)6)(_|7QF>TW%-5Fl(T/=/oQ5aG§}Xq.f1|0+ +( +( +( +( +( +( +( +( +( ++Ѽ-p+407"kݮ=Fy# zr j]?S?"} JޞMKZO3"IX䑎I'v:7^hW' G?+4Kb-0J/~5]fzTj;B%˨J;99ɮ6R>cЧF5+QZQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((NG{|&J(+AFKI)Sw+V(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((M} ̀}+n&E*QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE]C)܏1TR. h H5@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@62LgOɗy?k14ti+.B(((((((((((((((((((((((((((((((((((((((((((((((+/_׬9I_9*"zM)(_|7QF>TW%-5Fl(T/=/oQ5aG§}Xq.f1|0+ +( +( +( +( +( +( +( +( +( +(='34z>)6$v?=?ڕ(e w+~|C:SGbNgca1v'`qܶQўEhT(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((g*>gaƵh/ɗy?kԮ`AsW(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nVݦpJ8k? o/?ƀ5W{I~j@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@U;F;DvߜmjEdAm<֜2ITChQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV\Rf)IV*qߍ>Y!H ?hEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLQ /+B)bfAm<NQvc;ޮPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPU5=2W屾fa1G[I14>qn'mmXOq췣ׯәu=2W屾fa1G|/OPۦ"oF_ºo;~G:Os4QEqxQEQEQEQEQEQEQEQEQEQEW;wZ޷8{kWwz^ÿ~Op󇶵q}0ng*/DQEzGQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQUoR%EffyK [YZ(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((._1\u:PEAZՓAZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEr~ 7l^ Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE2Yc&i8e>1Np8ܧl@ޢXSWJФ7cf +'q^ h~Y!gxonۓż?$cҚ<ٛzR_6u> x|r\ո=UHhoǏj娢%9MN:QE$Q@F>mֱVPu_*A\(QEQEQEQEQEQEggK(TggK(T#8W##ܼ "^m]s/Nu6~>( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫬!{ #w9#?y]?jt61|@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVdkV4&<:P=]*?oCkFqTC(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5%Ɨz2JGLjm;N)$)99:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>>+i,DfB8k&}?ƀ/x{}dhڴhnzֽQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUMCSҭVЏ⑱a}y>04_5}?>JЧ3؊tOkHT~&=hهtC:&յO]+ncG-!-)~fc2ԯd>X裏ǭdQEpNNe''y;)QEVc2lAJ~XǏízXZl[7|XoҶSZpk|+N:\ymܨWǁ־[K,^iH!y#Ҿ[{Kx~qP?^YSF OWemb#y|)CN4v:,QAQ_qm;t"1mP5o:,QAfT= |u#U j<(((((;Hl+ѿտ?? v'# QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEdk~'=J8C摾9zW4HG:PCqOS*[\4;?R;?3}r +|aMh6RM~ ~9W]]\5O3$bPםW9i̪OHhޡj&[HǰªQEq6ެm݅Q@(ٮ7Cӯt]*jGVYwg> ?i^>o`}Ey* wY:~+*=/vrVҥw~Gk38qo!;~8+ŝ_RN!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE#0U,$3R@P2I^o{ri "m)r].K?^?gUi4}R,A4ӯWƵ.Z}5.Z]:WCwoż,2(dt9 qR׀ǓxfY^3KH20K?_y;yVXdPr(Whnw1Z(:B(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE6I(IQeA \>*Vt7#ݜDw3+5Kx>DǿvIJpjTZ#׼A3A7 oyv'ڼu|_hq[7S긪4U켂(c((YX]W+mem-"RBW &ݑ^t&#RO~?u>ۑl~ VEF˷Տ&)`=e;'_GXX@y )_z-èd.0gFA[tWK NSףGZ +(:B((((?6K5 ϿHA׌QW[`h?) ץzM)w9qR\N~(<ࢊ((,QAQS('+5ͳ[Y95xa{Gn.1\(`(((ܼ "^m]y|&m{oY&v|:dZfa[y)2wu85Zue9-zRORQ\&EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((._1\u:PEAZՓAZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?(((((((((((((((((((((((()f ($*bOj_Ϊh) u??ͫCccNӫ +( +ɼ3p,ҤozI%ׯET'(K&ʔ>;yVXdPr⥯&fJea'^oq ݼwȡ0={+ƴn> xoEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}vm }Zݬ/}Zݠ(((((((((((((((((((((((((((((((((*g[5VW] V&Ֆj+- yfPe^g6oB7>8/rndxIXպVuY[Eo +H(+Rzr֣O.Og٭צiF[ }:+h^[ܞEz4BZQZQ@Q@Q@Q@W/ico<ۅ?7oZҕ)՗,2:Y&i8e?}i:?p牵=~]ד( /ȯ{ m_nLSz@{}uܵ<՜^+I%dr^ESQEQEQEQEQEQEQEQEU;:n, !늯E&VcM>&>^QW[]AynLD*p'\tK6?t5brOޥO֒t~ H +t?]e #  +eQX5xhȠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֬ǜkѿտZAq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVk7 rzuoG_ +訠 +Ze@ĶWh +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +4o#;EsX3m(QB*Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((mYI ņI~%=s0 !/AQkۙn&n+?pF:CSͭ:SW> N4 \vMS*=KV5qs/c#d`:*T:<ؚ6QEd`QEQ]' ZmOO&=* I*BUޅkn?Üc#2k׼?DvM~r9`'5ܢ,h`*+j3ԣIU$6Moc+?N^6$G H0UTWN)E*4+AX((((((繙!Yݰ4v@KYƿVmBFR5?JC3hin_O?y=4rk3WEۯ)GHu^!j͕~w\WJ:1傲8e9IL(Ԑ((((((((((((ڮ`Ͷ6򿇧X4TT +嚺*2qwG7ҵݱo-Ȕ?잇WK_5]|@{h8#|=ҼwϿeMLؙ0W:Z׼]qM#?8> #N]וx:oY<,?nNۅUj]jW=N?t#|xa+u{QnBpc((K$Hȧ*pA5hv! tok]Zp(;şDiڥl.,nRx<AP.VH%ć>ףbm}! +19UJ~/y~'u QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@R3R@P2I@0U,$!UyHlө_?N?gUi4}R,A4ӯW܆Njs^7VQEyQEQEQEQEQEQExǓxfY^3KH20K?^&NP4M)U))E}_oq ݼwȡ0=K^?Mᛁex.#|O/}x-YaC#`{(Whn}ߪ%+s(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ/q\W@~EX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ʊY*I|R1n0}3Q:U5yr [Yt8m Oy<{xtsy.U#߻~&SG[4I|xN9jxqhSwԩ:w +(([{;ygq)b^['.G""C=)ѝGhjT*Uv<ea'W8TE,} umGdګ>ґ迏>/CM&# )y:Vz4Zw=Z9dV]'53q/!{~(EZ(Z*((((((F`Y {W:~},-ɟ)ǽmFJ妮D+ɝ}l7 +՜ڼ?}9tvyWjɸyATzUU:~_yNKH,#I#'(c(`Q]7kf+[3-x;/zΥXR4ݑQ9i8F8UQO n.v\k.m-?h^?$;# <{a[UiKݣKY4M2mPu'5f+mvum(EPEPEPEPEPEPEPEPEPEPM46TWFeaGQ@tCY>Ks};+u=&G0_0AK^U +uo)zM+^ I{,%8$z7ըkxMQEnQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +WS._1\t^9?Y>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊((((((((((((((((((((*bOjf ($ &E;fOau>!C:Ib٧S|ڼ^.6<\v;:+<((((((((~<7]*F_oQz4UBriJIJ/S{n㸷eE !*Zo +it^}G6qo* CWBkFsؘ׍Q-Q[!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Ua ʸ߸/߸/((((((((((((((((((((((((((//mtfP?^sVܽ[Oƹǹ=5~;#l^:~YשiZ]XZo>ޭWK=OZ[N +DtKo#M;?_I%dz)$(0(((((j:EHc).Nj&՗+_v+ÿB.Q^j+KF +AEVEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@gjA_,+>hUJ/.M& vom;@ꏧ~qlX{WuxCJԼW8.kf{JT4WI'UзJS6[:Q뛯vXU4(0+BBpr:Ev-OJomG9f?z~-3^}g-pq^RC<,Hʇ* 19e*}tS=Qogat?^VZxt==־~ӿCXbQ\ƁEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((._1\v7v١f*g=P?rO+Z-M`ͻ&PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FT(ZF]=hAg=V HE @QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEѿORFeТWz}LGiEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET {WCuVG"Ng:_/u}.(m/s4g->)^f7$t<|$tQEyQEQEQEQEQEQEQEQEQEQExǓxfY^3KH20K?^&NP4M)U))E}_oq ݼwȡ0=K_;Ob{dDcC+*{gһ{_6/z2-{񴤽f{ +2vg\Mo +c̹'{@Am×5"OEy6 o崑mLhMH)$`E>5 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>>IW"{(/}ZݪVrX+#6uv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( ++7WԯbeT}rkAmh6BtL3 ~9V5kӧ3&mKU-ΡwClg +O|bEkMUwr7RL^F$UNZCCɭT_Uֵ-n2vx_? +Enm݅Q@(tk#*v-[Hzh^ɵ"um{?oK RCmR#-Mup7XkԼ?N>9sV ~Jx8R5UQWKNVzrT-`PacBKEw`((((((("EI#"19izh?ڼ]N ڦ9X#s^._zGTFn?wʷt3/yy]5)'==WaZpT)QEuQ@xoSe"Oתx{zfy/ʧcanﱵ:k;'qSשt<pFVJԢsN˱NiQElQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE_t֠Y]wF#u֕jfL+IxoTe{nDdfNQyFX&hHaA=᥵Ao/Sc?CQw ^m~L+Z*ޣ7&aJ^d#MhŠ(U?REō̐J;GB=UJJiTz2 1$.#CGW{ \³A"KdE|Z7=m7PM7Qxt:zEq-7U,9f?vdteQX5x+"(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|AqOkZY-K9P"9tooj#wh[ KeX\~=Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEż7v[D"tq5<7jR7L$ {zߪ+xn䷸eE*!k +#Z6{؜4k~By93polեҤoI?ׯ^(KGU*Rq(0((((((((((((H yV|Ge'ZR~ XSRveFrvֿSo2?Vݯƛ{y}L2a˨oex&{m]L \Ҷ~%xROc3D|EkuUs:{3;_h.e1=u'h_%ի]JVOkh=tG5h'TW?UWNS2]d#:xU%K]>} Adt޺ia*Tdvի{%Kڷ>}TzZ.n#кdZ+ҥO]Qҥ(KEvQ@Q@Q@Q@Q@Q@Q@\JD,}k_e4[4Y pֽB߸Υ(s浝H#5}xM`ﭕ ,çN:ýGL=om8Q0ٝ*50҆TqRA J`(@񦫠$E?=W{W;EgR*GjJMo)~~t`%H G  2=ׇ;KiEfhX\2ў>:e AYi(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@uwh9sk] ~rhr<X簭Jy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+^H.GL#=+jC(+w?/kb03I@I=: 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Jny@֦'}Jye$$t5R?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEż7v[D"tq5<7jR7L$ {z߫񧍴] +kKP~͊Npݼl((((((((( fwCc}:N_k>Zn5TPCrz飅U̴GfRyϕշr 5uVٲlBUKYmr˫g^us]&qYֱ.x%GxdGJXz,w9Z*ևXzewQT+&Ŧ +(Q@Q@Q@Q@Q@Awӵc+;gk3vBe4(߮3#E\j;6i#ɯ6.)nBSnME^L'^7Em]e?{_ +c̹؞@.knǑXz+LGeaQnsJtSG2DO#)|3no#Jص,w\[G0]bo?j'WZWM<@C q'>]߇Zlnf _kvj0Fbxݣ맅oYeTE<룢UYsMݝ +(((((((((((((((((((((((((((iZi%Ⱥ=."cߏ>5]-d޽ʂ_[Bp(C:qE8jQ7ˢ+(kY{y^)P]? lm֣2Aq+uj%BS[+cVk};TnEō'}#Z]}a<GUGҼ NURO_Oi-LXeE6WCGהtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@e> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h((((((((((((((((((((n--d8 es*֕hr/ZyWxŚnFAk.Z<]^k2۠]÷G_yHřKM%T:gZKl((((((((+onYm]Gq쯫ӯonYm]Gq쯫ӯ=3L4laXmU]\+z,aiF+ C +R}jWJIYQLaEPT6?kn3ͅ[E&M']|OGo.lx ++`%P{+|ϛ. <%cy(AbY]Yۛi>WմU V2Fʡd|E}?u +?id' kᇅ.rWOxg$~9_ LK욝' +ĺ/&~ɫZGV2] %GcEvw_ |WmQ\1.) ,FP:01YJHa*cE=r## 62 +( +( +( +( +( +( +k6R#Uh6mlt{l{0IU4V]noƺFǾǗ[.1@Vݶez3kwo8@tA;99Q}WYq[v|Wku!2okh꙼sJo>R6֝e0r[vlk.bdY?8/~_jǨQ\U_ +̺؞@.knǑXz+LGjrH5Ki/ڢ́]O)ȧֆEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPExa6*.?ރLG[RiO@ǎ-+gömNU]yzˍB[imy&ˍB[imy&iy9J G#":pA4+?S]4Q54G< ?oQߨAcdee8 S]4Q54G< ?oQߨW '`G( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE ս\]OI#QS%8bieu5fc9>|:,aǝ&V!uo^YxYב3~X裏ǭqӆ՜T|Wu;b^U\e)nz[Gkڸ7zEleZ7e( +( +(Vkw>Fg-8_?m ''dPVur6L5$OS][_[KӴ "[i[D?5}OXYz4rړ֦<dג~nAoź?Z #A'MH2}XѢT)QQR{Q[EPEPEPEPEPEPEPEPP][X[5 +W%~O{t8?C{^_kzs4}zx\oz~NjE;oLy7QzW<3<,$jT8gRSwQEfQEFK;QMtfz=//2k9cJY*-e=vG w.5vkX"X_?zni6!vQ>'V话*)ҍ=(S@((((((((((((((((((((((((((((+ZIbqGPAԔPdIrz?yyܛ{y vq{*jelmﭣ#هOpz[ ԧrZF|Ezuƍ!>CC\ o3CC@񾫡mڭDdڽGAvX&qͼ7Wbr5twӯQEpQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(o5Ҽ- yׄe-c?1?L+L.i;#~ ;w!1FT{O|Xy/85 1pSϰ+ľ0|Qq]s|"?`W_&'1Z.GI##I+,rI&EyEPEMiiq}uM< kMz~Cklu[E9ExiPWhԬpY]??5̋=ώ<qgV%Ƙk6lz?ߑ4TE +0Fˋxn䷸eE*!k9-׹fS|{(Q]<7n 횴TS ?އkʜ% rjҕ)8jQEIQEQEQEWMPڻ>?_V?_Pڻ>?_V?_zfiiX°0?'ֻ0WQKo0X'UL-4>+VxG>պ(a$裸 +(Š(((((((((ME*HX^ |V.B2/3Gwm\?k୳dkR#WQYK F[X:']|bɶzdccK+m%QҾYEt|uj9^y䁔~W֕NHo>=|Uev|E}u—y/Ą<~ +@K&՗k)`*%V[YEzYFM@W*ĺGk|_c+akGxK^;讆(ϛ]?kѶM zISR09V *H +( +( +( +( +( +($y|y+b^$ǓtJ\~Mâ*3~c|y\{@۵v^0khoex&{mM\ p?PJ۵K'_kz+X[ٟQ=>˪LOhR,֍|VuMBdO*fOkh=tG5h'4W|Ug/Y0Y? knܴeOqV{3MEy=ƥ8! +Zڵ&[c̈ZExhKiטe&/ +ڶqm[3xԄb(,((((((((((((((((x¶~L;f_EwKb*T8I8ſlvͩʿ7^yyq^Kww3M<ݏ$yyq^Kww3M<ݏ$1/#1XWDQE`rQ@:9)HݑІVSA@ +k:p;5lr4_,tMt~暎\B[OHǰ*GHjyճ*pҞ=W`| >p_zJ _^5ۏ;RU~8gQ^uZ*|Lkbj(Np(|o ~H8(Sv0k[E֯ iRJ#j/ՏZ%tjBsߏ+ $Q ¢(UQwIQzv<,vO\G>DDcz^iekalvA +P~taMZ(iPIZ((((((((((gڵAǯI~!swGV7WVWŧ~u*޽/u62=yW_E˩PGLD(p( 2L#* 'W{ᤳlĝEg?AҹiP3HSݢqZV\+tUuaԊ\v?O*mte!z" ҥ_vNxhW@)h((((((((((((((((((((((((((((((((++YC3xuxZ*9AEىՙzOJ=omG9A?J+khvCF~avqWAx?U @[xʽQ[9r?Ƽ FiCc=QEsQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((9#(zcX#}ECmk v9<皚(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6P]3!m9"Q@?]55FQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@_H"YOzӡ e2z((((((((((((((((((+hiHAԓX~&k|\vќ}}küQMW3Zx_ +Zn_?xG:Eyl:zq KH * +(`v=\6\Uv1|9=+]9$=EF**crYQL+xn䷸eE*!ky93polեҤoI?ׯTWoq UCFl98h׍xsxf٫KH+u0-^&9P,JT%QE&aEP]7|wCj"[yshem׸5OEi̔V*-7iU|I3dz2}| Ͼ Tk?cp: %2ɳ[G0X5ډviꎩ9\zEz |$nC+)t ׸>iꎩ9\zEz\_7=sM>EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE#YcheX`jc \|V2g%s|A~|%H~Ww7-qwq,7ޒV,Oj ++ΩVu*z]Š(B(:|?^6$?`<G)8PrӝGh+utAk{V:1^Snן: +XQ$p[&SwLduUE +@`KEz+EXi҅5h+QVhQEQEQEQEQEQEQEQEQ\t??ӝIr])(wXлUQI_Ho*83k_n+m_c) \ԵKZ_\< +=ҩE{1Z +(AExRקm(8y[Ojg8sI &ݑ]O {'M͑~fJ|= 7G=cο"WҺY١O fF3@m# 3+^+Ü9sIݝ$(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE<kiڞ,O8Q>WiEkFJ2LI>O2pQu> Xa +R$߯٥?)u~?{ B~m~VQVo6mUG&9ZQEwL{=<7 RQRVmjX>%YmWAk1^couGwQȒƲF*r5ml~'4 &堓Cv9DeQu5{MǺ^Yݞ<cC]]x5hΔf2W +((((((((((((((((((((((((((((((((((((((((((((((((((((((((*Xn$˹APkV;hQ 3(+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(ֵx{JS.vI= x7, , >W$~8|{[4h.4՘tĚI9'$b6s┤@J?nMG_?Q@H~z,a%綻Vg"b] 7pOКΊ|CcyPҁ'rvfWھ4ɩdg6oC4EPEPEPEPEPEPEP'ƯHѿ0J;t]?a+7_$_B5^>tyCI\oJ ?%q +(]?a+7G.߇0(v<$?ih_mZ=/H>{(fH2d(־.H%_MS趠袊(((()f 2IK^7ؚ?#:tؿLܲbr>ڟ~k='-Oc}(jxku6Wڕs,Ӡ))E|_k7k((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((4:/ЪzPn2{OOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMgDUϩ:C(k΋z)2A+AX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((hxP%E'.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@V<[x^̾30v#U2`썩eY]cv8 +=I,wŅ̲^_>8|S)I@-c?/Տf/vbs/v-wqq+4sK1&(((![#yesQ^|G+d!iQWhj8yv8 +ULGك|x^~k}qoa.dv?Z܆H`"DP@>zXRv{l(QEtEPEPEPWoq UC׃xsxf٫KH+u0-_~-ỷ%+Ѝhsbpѯ=3 ++VJVa'[^Mxs.Y9VIKP fwCc}:NS fwCc}:N_2HⱱaaT3Ouapߙق:fiiX°0?'֭E{ $}$QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEJG/:=|URi={ÿ +]侑ghĺ;Mos}n{ tVRJ[ F[CuVai#z,A?ʱ.x>Pǀy +XYu'ϛ]%?-ŝգm +־eWRdV2G<&Q_O]x_A4{' ĺ_K=ᙇI0WQ|-3+. iOjUY?ĺ/~ɪMGV2] %GeEvW_ Wm1 b]x[_4ky WTJXQqE9ѣbXu 0E6((((((*ݮXVLTiZAUkv +( +( +( +( +( +( +( +( +( +( +('&|Jt=E/UAi'ڢsEJ7cc>|=9~t} Wx6oO+Vɷ%r?n{W#\q)ʭtlu5x\0oPM'Cs G6nZwfs{jUJ]嫉tCQoۇ+P~K]nb9EzՇUÿqۡJQ$Rȧ 0AoZ^/mǚd]C^_T7Ml tk_3Wa:U{ੇ5Z+9Š(ZbrGޢv'[iZ֟[)(yz2GQWƔ\]δWAET(((((((((((((((((((((((((((((((((((((((((((((((((((()YsZy]? ?:/Ч+RtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPWWPYZMus*o +$$^<טlm-?Aǩ>Bѭ,'e.${ҧ?"~$d|@Migs]igo%̭8R֛2FK#DQN5߆v4\@n&8>P?`;~ +Oij>J'(8!Gk_ٳA_*c׶Q@8뿳~o KkPȂ?)`H'^9ږɧsZ]Gpq;8k߁4oexmnSwU#ƚAb8[rpGC"5"@.F#ݬ9߱} Q=j:-Kܠt=Ǩ>=EhWOْ֥q&(zҔQEQEQEQEQEQEE.3U.3UZ!mVNuKf$ FTV + k?Jo צPxMs4 5MPxMs4 5MPxMs5𯈴}ޡj4e}AEQEQEQEQEQEbx^޳|r#82~Oj[o|A]ڄeԆG= =w fݤiR"{۞TQ^'{BjZyJØVm4W s"(5EuQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷7߷7 J,?o\W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQES]4gQFYk#>)3ij~I>+üWS3}?-mcGjRvrbqh},=i5 ?>WWw2\M$rH$j+ȫZu]x5+;ɅQYSIXFG8TQO<3W7ll\0'~G;(yl:}>zսomC cjF`#eҟWE۩i^h0Ra:(R1Uj,UQEEQ@Q@Q@Q@Q@\[wo%K,2)WG c^I{f:%ti2?N}ʭU20ZbZi|V606 *}ItQZ$6I%dQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@imtn-}$@kxb>nf3Ğ_ߢ2(F_|%|SgB. +6zԉ@*Z+)ahxЖ<>M݌{#~b]|:]Ki2H.tV2R{]K,>YѵKM偗_ZU+KKaVb]Fʿ_eï +]侑d1ĺ;Mou}n{ Vf+-Z&Zh +X_ {jQ_Lc30wlW";ۓQc]X\Reۃ*˖_tQEvEPEPEPEPEPEPEPEGqq = Trk|AsKq6V ~u*šZ+GteTQp4M't6nG8wf]n7?g"X:NMbWWޔVt λ"utb?Ș߉5EpJR.sŠ($((fk7"N^5{s^_[ iНOTyuޣrVL%,J>r-xHiպ5fhN>'?Z^, c=j9d#Gwz7t+M3.V<ԢI%dzQV +(Š(((((((((57Bo>Hח+|CRfM~w?Z`j⬻T{w!֙6]ʍSvu+{#*` +5a4z¦3f|EzQ>E`c2մ=GDo<C_A/uFP΢+(n-g`עh~b_ hjZUզ}M!RP~mZOзGFȩ/Y4[>oQʷt5ěj, 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((M,pC$ҸHRǠd}p|0F- HÆwPʾ-G-fRҦ,1/±h=~)^5 83CZzආ4O:i)kג]t+(((h +Yx0$FdyF?CϺWUE5}$縶qeM|:FZa}qjcefS1_sh::Z߈ Ivd9|#_Rz<.4E?zQ@Q@Q@Q@Q@Q@_B5^_B5^> $&zey_%v7k((((((((%F->m;):[?W^注> MAۢ'){}~Xu tA(}(.TEHȖ#[cqMӮ}NNEOG|k]k: 6S`(Uxe}gI]|C2 +__>W&|?((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +(ĺ_Ѩ'\K}^%v)IE^NfTR@P2I<^i>e]cO}}kgS)6vxF=?r5W77ZܗW<6IQ^sw< +( +)ȍ#"v8UQOO‰h~*SmFJG (a*q%ĜFs9q𯁴 D$E{Q#k15^z`GW +(Т((((((((((((((((((((((((((((((((((((((((((((((((tYe=Aɺ{h.Oy +5u—9+c%$hJ#)P/+<ྖ&wuUmKg욥Z?庽X:/y}ۯ+[wuDXw^/!`b_f?|]Juťeֱn%_)<t}5^uʛ?5uVgH4PG򬥂W9W[+CEz~{aQֱ.x%$QWkP%^uj9^w:`ebVM5MnQE +( +( +( +( +( +( +( +( +( +( +troZTz f+MkO诜!>9|+0j?|W߼_ *>TiEcq- nWtH_0j6h;Eyt?~pLW8PƄ~VT_4XEqSzX߷ _ǾkVUEΎˇĚgOs(O\A83G aUjIdQE2((((((((((((((((((((((((((((((((((((((*+m-丸b5,@hKV(cRpǞ<͚-*6WooAz<&6VliQʽ {zӉ#!cqtŠ( +9?Gpj&Ӻm;O xzh#=<5W:>{jQ_Lc30wlW";ۓQc^Yn}.Y|_QEwQ@Q@Q@Q@KS4j7[Eػru'^e_~ 7AO*Of4l+M6ٮonbz~ ko +2tD?+5=_QnMƣy-̽ @>JڸHhy59Jj55jn{$9T'E +ˢmvyw +((м'x@4'h; ?#,vMJoKߧҷSeG V´y&W_l aǁ^l]7>K#P-z4P՞5+XZimem+"PV(RI-QE ((((((((((AӴYq?"vkJJ妮ɔy3繙!Yݰy׈~&}m =ԋgX׵vͿg>ͯ ]_nN-#-=4rj*(]$G(QEQ[5O0xcmsģ {T8M;#TPKS]^.5Bv?z?>h>G]cF[?렯 KY"G +w#RzENNwgZIh(0(((((((((((((((((((((((((((((((((((((((((((((m`h.aI~r KE4w@yƿ[uƉ&ҷ:Z z*XkEL2WͪSjrZC+YIswn$_fpFHȌ 0AQSjn Ch܀(oCV89h$Q 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((((( u#iaK(Q {|H]xe`=I8< h/}fW`? 3@kiqm_HSPEPEP_xMGuHoe?,JW5AkcVeYG@y^6Fil-͢5u.ͯ}6<\G4GE}sEPEPEPEPEPEPWW+3^_iSxn- HK;Xٛ|q#99f? V%QB䞢[a@uQ_ynݽz皽kk$=Z܎Oh+#]ܗq 7Տר_d6nN զ^?C-@ES5]?ZL참a>r +( +( +( +(0D7a6_QRT ]aڀ<&&6+Mr )i3{ʏ(/>-ɕ&q~'zѼ_ÉSc}[ϭ{GZok1 HFLT?+?_J? WɔW s"(5EuQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+d]#"%| +y]?jjF FPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FLǙ>:nPq@UvkdxRPjZ( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A?Lmmؒ`% o0d5aЅQEQEQEQEQEQEQEQEQEQEQE$^3öFRXGz/EH^zqFNZ等%\F.⥦Yh{. 9(Ϸ^9^jw}q%sZ+WW |MJzv +(9Š)UK0U8u4 &t E??#˽[Vq#+,mtHl#X`?zz#eT~'9Oi~E(s"A#+Մ#hۅ8ӏ,UQEEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s*n}=$s ܧz詔TLǖJgXt-J[ LsFSž^`cp(}=|h-&9?pka'|/ *J4QEsaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP@$EnWQQu?3/5{jQ_Lc30wBm;Ӻ>lW";ۓQc]|9?Gpko xzh#=<5qJ`Q]xQEQXt_!мEGH#Wx"!a8iHKdq49bQZ|EypdeP}rkA|'s^g=SI4r#b}ɨͫ+f5'4_bRkۙn&n+?Wn +(Q@ֽls\S|?AK,_o:'޺ia*TGe Z]W1[xL{wo_*tjnG?d](F5z֣OW"j0 +uWYQEQEQEQEQEQEQEQEQEQEQUo4fW9=O4vA{+\6y>f#+|~?}9tv~K,#I#'ױe/zS)- t!Χng&3ӥrQ^*PX+#RrwaEVScݎTd)ڻ7зyRz]\\[+4M2mPu'5bZt~XiKYh; 6\jn"!O]ʪP@`KE|lEJwBPQEaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX~3Y\~=h sEىIY- TѷM +Aϙ?_2++ k{E%͈pC^75S [z5]ɺ}pX¤jG\]QEd:9)HݑYN>ƛE ;U5d7puojvG?xy4*Ei[*Qc'O^~͐W׵f(lc?Ƞ误t^QGkspn.A٣0hZ+홾x2J-:s:hgӥ?k;_p@&Q^!R^i2 bXDgA;$a^RARAoOz߃51{]`0eGc_Yx~ GlGzkg&<# mcMlП eC>梲7z̓f m'nµh((;]֬;]]e>=+_o|]Kfv#"$u'z?on_gN짉gy\WPA-pAI4FK18\ % B^9̄}}p?޼~x/acV<O}@Q@gI]|C2$!|@}I?+__>PQEPEPEPEPEPOIWImOXh- =8PMrb__p3_(P_b_ Ks5-/?hM|E}u %9cėj>(mDg$̢;3%MY^LgY=}sc=Okφ?Qm_MPSc=Ohٱ5Q@O͏?fz-EvDWS`SOLDp5OfzӵoW)@O͏?fz-Eu?6?\.dJrNjqp봠T3MY> 84?͏?fz-Eu?6?\lS||:QKA!H>袊s}ohʳ9R#jY!_5u?6?\lS|?l rP_mov!rOGfV򘥐Fjr%/c=Ohٱ5Q@O͏?fz-Eu?6?[]vж+&x*آ(Q#JC)OZO\~O]4lS|?l rPSc=Ohٱ5Q@s#=1RU Aq}[@KdW&Q'W@O͏?fz-Eu?6?\lS|$Eu9Vq5ZǜMLd&C^-[AsG͏?Zl 6?j(ٱ4Y3jHtQE 6fڤqj͏?eip5T52iYzfToPl 6?j(ٱ4lS|娠fzҮdJrNk!_iEP77P yjy6?y]?v:G͏?Zl 6?j(TU9 v6W+)#]]ZѕfrG՚?΀4?l 6?j(ٱ4lS|娠fznR,dq\kx?$PEEPI+[yLRCi5͏?]gB +@O͏?fz-Eu?6?\]vж*zʶ(/F) =jq?to@͏?fz-Eu?6?\lS|%CW]N _f +@2ii͏?fz-Eu?6?\lS|?l rPl$Eu9V:8?*4M,N3Tl ;V\ArlS|?l rFIy{fzc=OkWWSNu&`Sp>SW|] 6fڤqjjy]? l 6?j(ٱ4lS|娠fz-'bB] W'Wt +A?WEPk{FUʖPlS|?αٱ4lS|娠fzc=Ok:k{) `2~R85?$WE@TR,86V)/ G͏?Zl 6?j(ٱ5bf8<\utQ7PQ@_WRNzlS|.Ρfzc=Ok:G͏?Z ;qh F`X&lS|7??ʸl 6?j(ٱ4lS|娠fzq"+ʰ}+<kjd$4"8>j ?lS|?l rPSc=Ohٱ5Q@O͏?]bɘ(+RC?Ҋ(nn@6'Ul AC\u?6?\lS|?l rPYi<rm"W)RF**K 5hlS|?l rPSc=Ohٱ5Q@O͏?ܤ.YH +~I\( +V򘥐Fj?X%/B:G͏?Zl 6?j(YmNT?lPT_WRNzn΀:?G͏?Zl 6?j(ٱ5n 㹈K.Aq}[HKd&Q'P?G͏?Zl 6?j(ٱ4lS|娠HrJuCip5U52iYzflS|v (ٱ4lS|娠fzc=Ok:,NIM^.?vT77P yjy't'ٱ4lS|娠fzc=Ok:OTU9 v6\])#@]Q@oVg*XdpMCc=Ok??t:Ơfzc=Ok:G͏?Zܤ.YH;Q]R}JSM[[YEB6l 6?j(ٱ4lS|娠fzՋkn՚Eqx{D@QEQ}^7diHe8?)Ic=Ok::G͏?Zl 6?j(xbr*J./3Wc c=Oj$t*ٱ4lS|娠fzc=Ok:WQĈ*&+O LDp4.bc=Ohٱ5Q@O͏?fz-Eu?6?u&`Sp>S\I΀;J(!T3Vٱ5?? slS|?l rPSc=Ohٱ5Q@d:QKA\!H>73,28&tc=Ohٱ5Q@O͏?fz-Eu?6?rf'#+['s:*(*OZbBuIl b?U +l 6?j(ٱ4lS|娠f8<S?MU@Q}^7diHe8?)W:l 6?j(ٱ4lS|娠fzո'!,G(zbtooh#0U,zKLD@l 6?j(ٱ4lS|娠fzc=Ok;dq"+ʰ}) y\TɦH"id8Eqc=Oiڷ+fzc=Ok:G͏?ZXf +%9'5zuPPChmN榬ǜfzc=Ok:G͏?Zl >RyV(%۠EruwISutQEVeYa5͏?:G͏?Zl 6?j(rf'#\OEtTUI+[yLRCi5nmgB +ٱ4lS|娠fzc=Ok:V-Vh[pSWA?lQEE{(ݑ!'͏?r?'l 6?j(ٱ4lS|娠 㹈K* _f +@2j͏?fzc=Ok:G͏?Zl ]G"GҸ?ʀ&M2AK!/Sꖭ o͏?fz-Eu?6?\lS|U,NIMr$?x:(D3mRp85[fz 85ͳcqhٱ4lS|S:꿶l 6?j(TU9 v6W+)#]]ZѕfrG՚?΀4?l 6?j(ٱ4lS|娠fznR,dq\kx?$PEEPI+[yLRCi5͏?]gB +@O͏?fz-Eu?6?\]vж*zʶ(/F) =jq?to@͏?fz-Eu?6?\lS|%CW]N _f +@2ii͏?fz-Eu?6?\lS|?l rPl$Eu9V:8?*4M,N3Tl ;V\ArlS|?l rPSc=Ohٱ5Q@RLD$|WλJ*m<͵I<ՓC@lS|?l rPSc=Ohٱ5Q@O͏?êZO*tHN?( +73,28&ٱ5cPSc=Ohٱ5Q@O͏?fz-EunR,dqVk~I\ +>ko)Yqm&-R_!@_6?\lS|?l rPSc=Ojŵ7j n +px"<=o ((e42ٱ5]ѿC@O͏?fz-Eu?6?\A<kjd$4"8Sٱ4[AsPSc=Ohٱ5Q@O͏?fz-EuKY3\\?x:(nn@6'SVO?? Oc=Ohٱ5Q@O͏?fz-Eu?6?i<rm":RF:(+\[2Tfzu@O͏?fz-Eu?6?\_ݹH\Yw's**)d!Q\!I~mlS|?l rPSc=Ohٱ5Q@O͏?pݫ4-)㫠ʀ6(nҐp~S֓fz9wFu u?6?\lS|?l rPi%CTCF\_Vf3RǠ5GfzɿIUPSc=Ohٱ5Q@O͏?fz-Eu?6?]NU#\MvVs_@S& iKV\A7fzc=Ok:G͏?Zl *LD$|Z?vQECsu 8gc=Ojǜhٱ4lS|娠fzc=Ok:uKIXnirM'B}O5UoVg*XdpMYCfzc=Ok:G͏?Zl Mmov!rOGVOEtTQETR,86QlS|)/lS|?l rPSc=Ohٱ5Q@7j n +px"b +nҐp~S֯WwFtlS|?l rPSc=Ohٱ5Q@O͏?pOBXP8qu F`X&7??ʀ)lS|?l rPSc=Ohٱ5Q@O͏?fz-EvDWS`SOLDp5OfzӵoW)@O͏?fz-Eu?6?\.dJrNjqp봠T3MY> 84?͏?fz-Eu?6?\lS||:QKA!H>袊s}ohʳ9R#jY\ƫ % 沖Tc4lS|?l rPSc=Ohٱ5Q@}۔0?)U|??+OZbBuIuk?P͏?fz-Eu?6?\lS|mw ڳBۂ:b( +/F) =i?l s?toPSc=Ohٱ5U=GTm,iwczM䢮fz⯊:j=󡐏c8^m^jmfx\yfxz{^rVszaU(wgn(PNZ|?[ݗ:{~._֮)Tv5FuesN{]-##p=I&~U.O88C-,m%*za#OW=6}jΧfzq"+ʰ}+<k&M2AK!/Sꖭ o͏?fz-Eu?6?\lS|U,NIMr$?x:(D3mRp85[fz 85Sc=Ohٱ5Q@O͏?fz-EuꖓʱG!.*rO k\[2TX!_͏?fz-Eu?6?\lS|B +o訢>ko)Yqm&ٱ5R_!T(ٱ4lS|娠fzc=Ok;kn՚EOXQ7VE{(ݑ!^6?'ٱ4lS|娠fzc=Ok:V;qѿտ TM-2oSٱ4lS|娠fzc=Ok:G͏?ZĈ*T6s_SP& j͏?j ?R:G͏?Zl 6?j(]bɘ(_i@Csu 8g|AqOhG͏?Zl 6?j(ٱ4uKIXni'B}O4EZѕfrG?6?COjl 6?j(ٱ4lS|娠B *s?PU'ԭm1K!:պ嵟 +K_(kfzc=Ok:G͏?Zl XYmNW]MTEPvFS򞴟6?˿7hٱ4lS|娠fzc=Ok;H'!,G(zb75~*=ɪ?6?MOO*:G͏?Zl 6?j(ٱ5uHrJk8?*4M,N3OZ(6?\lS|?l rPSc=OiWXf +%9'5Ԑ(m<͵IkŏW׹|8𥾇i-̪jy?ާwuCo'fz(^r>K}u_h:DstGaM yTH+d/ӣ/5VOOa?e?5Tћ-<>im>*'XMA.o..Wo'{PBO?gA-s%`UxZ왼uN&_ؾTY4[?CQo<=U_sU4J/} U^7є0CMnfmQHAEPEPEPEPEPEPEPEPEPEPEPSCyuohrʡNƴ>(kzO?,~ NU sTU[6h[Ik_u +M}8N**"Lb믴TU!. +55~6-FO&V`WQVSE/#8PĤ~W9>n,κ}? +ux[^^jIa>,֧X$FcWtOٱ5$ XWsVMVj};c=Ojŵ7j n +px"eZ_wSJ[֕jd)9!Fk03ER}[<_}~ "*?]ؿVԙ̨>箾e42ٱ5GkI3P?LjtQVt_4X;_6?^[ &GMO~}'ҴU?&K=#fzc=OkĚ,wSHը+?jq{3ERf 㹈K+?D`TEH#-Ъ,F`X&lS|7??ʸl 6?j(ٱ4lS|娠fzq"+ʰ}+<kjd$4"8>j ?lS|?l rPSc=Ohٱ5Q@O͏?]bɘ(+RC?Ҋ(nn@6'Ul AC\u?6?\lS|?l rPYi<rm"W)RF**K 5xh&#H314fx^iFs3) +?xo\;2iQ G73S5dCd>W5^F+Cc}Q\'QEQEQEQE{G/t-J+ sFԎ(Mt4wG~m:FܞPP{kXе(&1wR;]+_I1 }[^<|y=xxBd܏w|_Ċ|TmcN<~B=߷ ɢj*OE8ch;rYI4(S((2JC#*"IJY$z&-j4s7JGϵzÖll_CǯoKRzG/SYh :O=ZT%Qq^ Od3qt 0>_gޒiai+ףKTٱ4lS|娮l 6?j(G"GҝPǜM@ d&C^6?.bJl 6?j(ٱ4lS|娠u&`Sp>SW|] 6fڤqjjy]? l 6?j(ٱ4lS|娠fz-'bB] W'Wt +A?WEPk{FUʖPjLܩszSW|] 6fڤqjjy]? l 6?j(ٱ4lS|娠fz-'bB] W'Wt +A?WEPk{FUʖPlS|?αٱ4lS|娠fzc=Ok:k{) `2~R85?$WE@TR,86V)/ G͏?Zl 6?j(}[O+ d$W!x KVKAk0ko)Yqm&ٱ5R_!T(ٱ4lS|娠fzc=Ok;kn՚EOXQ7VE{(ݑ!^6?'ٱ4lS|娠fzc=Ok:V;qѿտ TM-2oSٱ4lS|娠fzc=Ok:G͏?ZĈ*T6s_SP& j͏?j ?R:G͏?Zl 6?j(]bɘ(_i@Csu 8g|AqOhG͏?Zl 6?j(ٱ4uKIXni'B}O4EZѕfrG?6?COjl 6?j(ٱ4lS|娠B *s?PU'ԭm1K!:պ嵟 +K_(kfzc=Ok:G͏?Zl XYmNW[Z56ֲϱK3(zc??V9Dې4Q{(ݑ!'͏?r?'l |Qx]u9Vny_WWɾ&X3@/+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWoŝPz8BQ+G/>?YZ~ 6ߋja%pU&AON3rSV_@fQEQEQEW?{gZ-}=_+г ~%"g>UIyEtď A3]ˆ>KqsRҀ>͢((((((((( v: VLF0.u8Ӯ+((Ch1FP_Ġp `Ey{▃T7V.\}_V:MD1U1!ck(+~0xx3P5}@yO8ujz&u"#zzŞ4]Qu]Dl1g"(Qϩ$ KI$I5x'w~4MmG; Q{+2M}swCm%% (4MLӬbZF#eժ((3$!|_YzWy_bLo$ßAE}I?((((((񗄬kE:o/"f _X(o/"f _X(o/"f _X+]z=+: 3iw,W* ~+k?;э@[Z.HVy2G_O_Z?m=eWh?_-d?m=eQZPO#_Y1E64DHU +3Nx\ԎZPO#_Y1Ed?m=eQZPRh6YrzZ(^%KnjG#_kQ@?Y1?m=eVRh[\$$8((HFUoG笿 +֢2c(~zj('o/?G笿 +֢)YiYJFĮߛv("3cVG#_kQ@?Y1?m=eVW,cFX٘1V( 4;yey X +o#_kQ@?Y1?m=eVG#_kQ@-„\zQ@OB1Y_Y1Ed?m=eQZPO#_Y1Ed?m=eVh"#gڝE sn![jZ('o/?G笿 +֢2c(~zj('o/?•4tua,=GVQEZ/bXfPwTc+Z~zo/?µ G笿 +?c+ZζѠII /@qZ4Q@RbuiԨۊEd?m=eQZPO#_Y1Ed?m=eU-2+)ZHؕb@Q@ZD7w 3 fc+Z~zo/?µ G笿 +?c+Zec2NEV\YAf,qjQ@?Y1?m=eVG#_kQ@?Y1kl +UsSQ@#te=-G#_kQ@?Y1?m=eVG#_kQ@ Q$`BS"nm$+u#g?m=eVG#_kQ@?Y1?m=eV :\+V(׶I{#2۾ZEd?m=eQZPO#_Y1Ed?m=eT4 2I!e1F({|;Q[o/?µ G笿 +?c+Z~zo/?µ +VZdVR+]+>Hy$ cEd?m=eQZPO#_Y1Ed?m=eU+Q6f rwU((.MY^C,8›ZPO#_Y1Ed?m=eQZP6in%W<5P:FSЌVW#_kQ@?Y1?m=eVG#_kQ@?Y1H$*Q@Esۼ.HVGZ~zo/?µ G笿 +?c+Z~zMXK.AQEQEVKؖ9/G笿 +֢2c(~zj('o/?G笿 +֢3h-dBcVPTtدZGu*06@?Y1?m=eVG#_kQ@?Y1fLV7v%vثPEP}֑ LH*G笿 +֢2c(~zj('o/?G笿 +֢*Xb0cQE&o,!PYcZPO#_Y1Ed?m=eQZPO#_hZ-„\zPHOB1KEd?m=eQZPO#_Y1Ed?m=eQZPcAI$P>(`[w +HYY1Esږ/"! VS] ~ri;cV#_9?@Iۣ e9?µh +{d,r3( 4PO#_Y1Ed?m=eQZPO#_KmAmp$^ʴh( +WlWέ#qUc+Z~zo/?µ G笿 +?c+ZeEe+I~lU(ng@͎1ZPO#_Y1Ed?m=eQZPO#_\cf`'uZ +(22 1cw)Y1Ed?m=eQZPO#_Y1ECkl +UsSQE#te=e?m=eVG#_kQ@?Y1?m=eVZ$BQjuTW0-ͻnuh G笿 +?c+Z~zo/?µ G笿 +TmՄZPEPk$c@m-R~zj('o/?G笿 +֢2c(~zj(:F&I$,?hEJMդwRn*G#_kQ@?Y1?m=eVVlȬi#wbWo͊EQEgi4$ b~zj('o/?G笿 +֢2c(~zj(v(39;PYrhve;Ed?m=eQZPO#_Y1Ed?m=eV[(IU'MEє#PO#_Y1Ed?m=eQZPO#_Y1E64DHU +3Nx\ԎZPO#_Y1Ed?m=eQZPRh6YrzZ(^%KnjG#_kQ@?Y1?m=eVRh[\$$8((HFUoG笿 +֢2c(~zj('o/?G笿 +֢)YiYJFĮߛv("3cVG#_kQ@?Y1?m=eVW,cFX٘1V( 4;yey X +o#_kQ@?Y1?m=eVG#_kQ@-„\zQ@OB1Y_Y1Ed?m=eQZPO#_Y1Ed?m=eVh"#gڝE sn![jZ('o/?G笿 +֢2c(~zj('o/?•4tua,=GVQEZ/bXfPwTc+Z~zo/?µ G笿 +?c+ZζѠII /@qZ4Q@RbuiԨۊEd?m=eQZPO#_Y1Ed?m=eU-2+)ZHؕb@Q@ZD7w 3 fc+Z~zo/?µ G笿 +?c+Zec2NEV\YAf,qjQ@?Y1?m=eVG#_kQ@?Y1kl +UsSQ@#te=-G#_kQ@?Y1?m=eVG#_kQ@ Q$`BS"nm$+u#g?m=eVG#_kQ@?Y1?m=eV :\+V(׶I{#2۾ZEd?m=eQZPO#_Y1Ed?m=eT4 2I!e1F({|;Q[o/?µ G笿 +?c+Z~zo/?µ +VZdVR+]+>Hy$ cEd?m=eQZPO#_Y1Ed?m=eU+Q6f rwU((.MY^C,8›ZPO#_Y1Ed?m=eQZP6in%W<5P:FSЌVW#_kQ@?Y1?m=eVG#_kQ@?Y1H$*Q@Esۼ.HVGZ~zo/?µ G笿 +?c+Z~zMXK.AQEQEVKؖ9;iqZ!zں߷7w殎C2 (`[w +HYY1Ed?m=eQZPO#_Y1Ee&n% +բ*^ı̠6@?Y1?m=eVG#_kQ@?Y1-LHYz*Ѣ +()^_:T`mV~zj('o/?G笿 +֢2c(~zj($nJWh +Ϻ!iI68hQ@?Y1?m=eVG#_kQ@?Y1r;ej(˓CW(,Ŏ1?m=eVG#_kQ@?Y1?m=eV [(IU'MEє#ZPO#_Y1Ed?m=eQZPO#_jF(0I +F}PQ\6 ֥2c(~zj('o/?G笿 +֢2c)SAGVːsj@Q@l%Fe|Ko/?µ G笿 +?c+Z~zo/?µ m k$UEU+6+VJ PO#_Y1Ed?m=eQZPO#_Y"݉]6*QEuCwp<lp1o/?µ G笿 +?c+Z~zo/?µ +V1أ,lTQ@eɡ+ebVG#_kQ@?Y1?m=eVZin%W<5R:FSЌR@?Y1?m=eVG#_kQ@?Y1?m=eVEF !T(ϵ:(+rBR:w#_kQ@?Y1?m=eVG#_kQ@Iۣ e9?µh +{d,r3( 4PO#_Y1Ed?m=eQZPO#_KmAmp$^ʴh( +WlWέ#qUc+Z~zo/?µ G笿 +?c+ZeEe+I~lU(ng@͎1ZPO#_Y1Ed?m=eQZPO#_\cf`'uZ +(22 1cw)Y1Ed?m=eQZPO#_Y1ECkl +UsSQE#te=e?m=eVG#_kQ@?Y1?m=eVZ$BQjuTW0-ͻnuh G笿 +?c+Z~zo/?µ G笿 +TmՄZPEPk$c@m-R~zj('o/?G笿 +֢2c(~zj(:F&I$,?hEJMդwRn*G#_kQ@?Y1?m=eVVlȬi#wbWo͊EQEgi4$ b~zj('o/?G笿 +֢2c(~zj(v(39;PYrhve;Ed?m=eQZPO#_Y1Ed?m=eV[(IU'MEє#PO#_Y1Ed?m=eQZPO#_Y1E64DHU +3Nx\ԎZPO#_Y1Ed?m=eQZPRh6YrzZ(^%KnjG#_kQ@?Y1?m=eVRh[\$$8((I{1$H>i}lR]ѿORF5c(~zj('o/?G笿 +֢)YiYJFĮߛv("3cVG#_kQ@?Y1?m=eVW,cFX٘1V( 4;yey X +o#_Ok:~bךA鞬}OҼ[5 w̳ӷi烃GDt&%6#Nt.v%k!#(.+=W[:]]v +(9(?^"mJ焌z]~^]毾>=>ٴ.GK=>-N'>h`?zz#eOE>4i5s}ɀ >Jc+ZaZ()Ӆ8Y?Y1?m=eVe?Y1H$*Q@Esۼ.HVGZ~zo/?µ G笿 +?c+Z~zMXK.AQEQEVKؖ9/G笿 +֢2c(~zj('o/?G笿 +֢3h-dBcVPTtدZGu*06@?Y1?m=eVG#_kQ@?Y1fLV7v%vثPEP}֑ LH*G笿 +֢2c(~zj('o/?G笿 +֢*Xb0cQE&o,!PYcZPO#_Y1Ed?m=eQZPO#_hZ-„\zPHOB1KEd?m=eQZPO#_Y1Ed?m=eQZPcAI$P>(`[w +HYY1Ed?m=eQZPO#_Y1Ee&n% +բ*^ı̠6@?Y1?m=eVG#_kQ@?Y1-LHYz*Ѣ +()^_:T`mV~zj('o/?G笿 +֢2c(~zj($nJWh +Ϻ!iI68hQ@?Y1?m=eVG#_kQ@?Y1r;ej(˓CW(,Ŏ1?m=eVG#_kQ@?Y1?m=eV [(IU'MEє#ZPO#_Y1Ed?m=eQZPO#_jF(0I +F}PQ\6 ֥2c(~zj('o/?G笿 +֢2c)SAGVːsj@Q@l%Fe|Ko/?µ G笿 +?c+Z~zO׬ M, &=QR\ؙ3:Ə{jR_c30Ҟ-𕗊Gs& 9C}A+cGе)l/1v`{^.#?#qxIPQ+ +( +( +( +( +( +(5 ȭ-!i(7 ;;B+KHZim9&mt;%S&"OW#zVΛlڜ{ zׯ{= "v(39;Wqeɡ+ebVG#_kQ@?Y1?m=eVZin%W<5R:FSЌR@?Y1֬0dCz(Oi3J'bƫuTTEtHYy?U>+UdAGB(ᨽ&1N? +ϛkCWY%Lx5ϑXT&Ix`WP4h>|6l=taFɳT&o`robٛtl^m#R_,UB +A}gQ3 KH=Aywi~o*]'>Oú%OݭJ7-?-G"U>GʹWs|.wO/.Y|52oUv2yeu+&-b5~%oEgRkq?!}WEz,+:AA/kN꯲,⨮o+Yx[tMEGٜ険5qEO5տi+ +6QEQEQEQEQEQEQEQEQEQEQEQE>9dG#!Sr)Rkft.[a|?WDW=EZQm'*VyG YOFG5v367rRᨫX,euH]_\*_/uecayEkYu5Y!ug _E@GkMG +GO֊#EV[}9<=?sO$7(MZ{ JݡWM|Eh ue'Y1?m=eW[/$+>)oQQ嚵4Yz>~zo/?¼^+k3_W⨾nbcLf^J :\+aɯidu?_U". +55kE4Y`6-GO%V`U~0vN$"?D~VT_4X^ı̠6?m=eV?'/޿/ZnJ0+EZK4XOi/G#_>wu>OeCjS8R$fIG笿 +?c+Zc3h-dBcV6\\JCwsw4\\Cio%ī1gw8 +s^Me?>ރǓxYEF*3M?N&V+܆DžO +(O0(((((((((]r-Inf?{oD4vEJm-gƥz'׮-f? kӴL6+tT|ckrZ#УԞ~'xٵgɋ !ר>|9ڢ0̍nlQ^,=: +iQV‘:2b2c(~zj('o/?G笿 +֢2c(~zj($BQjuPW0-ͻnuG笿 +֢2c(~zj('o/?G笿 +֢2AGVːsjEZ/bXfPwVh G笿 +?c+Z~zo/?µ G笿 +F&I$,?_D6GTEfc ?wʷt3/oCRi:Zjn/Rn<?J/HoZ[ c}?뎿o5Ky?称V ӥTpZGD+3;v,rI9$QEz(QE(xRvOr {օ(MJNG-oo5O,p +?|3fs>Z!s{M`m¹y[+R Vm9t];Rz[ۥ) )QU["3cV6ۻ:̟G笿 +?c+Z@d?m=eQZPO#_\cf`'uZ +(22 1cw)Y1Ed?m=eQZPO#_Y1ECkl +UsSQE#te=e?m=eVG#_kQ@?Y1?m=eVZ$BQjuTW0-ͻnuh G笿 +?c+Z~zo/?µ G笿 +TmՄZPEPk$c@m-R~zj('o/?G笿 +֢2c(~zj(:F&I$,?hEJMդwRn*G#_kQ@?Y1?m=eVVlȬi#wbWo͊EQEgi4$ b~zj('o/?G笿 +֢2c(~zj(v(39;PYrhve;Ed?m=eQZPO#_Y1Ed?m=eV[(IU'MEє#PO#_Y1Ed?m=eQZPO#_Y1E64DHU +3Nx\ԎZPO#_Y1Ed?m=eQZPRh6YrzZ(^%KnjG#_kQ@?Y1?m=eVRh[\$$8((HFUoG笿 +֢2c(~zj('o/?G笿 +֢)YiYJFĮߛv("3cVG#_kQ@?Y1?m=eVW,cFX٘1V( -Gznaq$R}+XnKcy%_}讼66N Q>lthݑԫ)R0Ay|)kM.1>yv]WD2'>lC/Q 6eJFp^(D +( +WnuHy$ cEd?m=eQZPO#_Y1Ed?m=eU]N;X٘4C]d<;]N r Rhve;G笿 +֢2c+z`PQi篆c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|IY[^㉬LY(q_J׈Zaz6?fxI.|[ 8nb f??kȮ Gc@~TA5mQ.q((+wbƳbk5|3Lk>0u r7ȇoƯJfn*ˌX&|?zZ/ٯL2kW-wmE΀>((((((((((?ikm3@oia'0R?'24X `WʹJe8 _{Nnlm=e_qŢzk( QExG%^AcJR饚eShP}qJ޽ ;x5v 𭗋# m#.}yWvq,d\¾^>uSgx4+YE*/̛,k + +]о(( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +WS._1\t^9?Y>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊((((((ꚭdA +MJ\7%i-,v^##Oq\'(_k>e_8QG^^u|w٧N'24~45oQׯQy=3 Q +Ϣmݞ;nN(Q]~]槾QA#WN;ER:傹 M6٦Pz{g~iv#>H <+Ҵ{ ld죖>'`OYjw /zZ+ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +[+/ 0LrWAELe3g-uBԥ4gaف Q<[+/ 0LrW:Ə{jR_c30\F~G+EW1QEQEQEQSjZZBO+mDQ4n _DvwVQrM{o[?:mjre{VΛlڜ{ zׯ{= { +((((((((((((((((((ͧ\?ߌ7b-q4<4=8[ ?Bo~h$tL+҃"ox&Qi~_NOPքoL?^ECRe%Q3|$_&Boڊ_khf;?<*o$M?7tzԊ<|7Q.foHgҾUgE$MH.)*e =RFҮ?r+1P_ʟI4Wx/3Oϛᧄ+aIVo/ѣ7|"̿p0j4Q^P5kyWP]j7aV/@<%eLyM}ų|6l9ΐ=Rh5CU}fՖqQ[sx;Đ}7PIԭqc1P%3tE:)H  ((((((((((()A )( B,rf_kBx_fy:*e[3Oa3G6kU"KK`VR4ݎTjL^\NޡEVfAEPEPEPEPEPEPEPEPEP5Eœiǖ +rrwaEUQS\+oi3tD4I]r +<7l"OsqŲ[q#џ50) Q ¢.¼|Vm{u}:[zχh' ϙ"_yWUEU:曻;hQYQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQErgtШcϒNjMOH|g8opz >2!{^Ne TQEuQ@loە W!}Gz6696qm1WQ\،%*ZiN}p,8ʺ0 5-|kږ?ar FyGkӴv @ +?c{~?|'+Gއ&2Ҋ@CAAk:((((((((((((((((((((((((((((((((((((((((((|AqOkZ|AqOhF\_VfjtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\o] uT]Eb]ѝ?C)V hǾ S + r'M~_ m-OH֮\? kҫ/^0OxrՂI<,9+mQEQEs?߀K~RݣOԃWߴG–m2>E$=+h~hKp.%Ԯ~G;ȣ'_0hUλiVd_siztFgڮ{XR*ʀ-EQEQX2xQH VV" ߃kc@x@.MӅ.bV +0 ’q޵((((((|k ?>U`\ g 4Sf<#RŶ4OtrzI&?C׌[TֵkNO2VF'P!нr ҩ|[Fp­QxZ/왼O&57}9N{k(x*/˰x +Wܴ_.2+>o+賟__GP6f/fϘfo7DTf|~xY[/Яhyr#7G+깴+v+1T&gYAy|HR#:+ɾxND?ܑ0|'r ܜ*huE{l6ϓFda7HOq&Yt3yv!tO!:oڊխ_jIܖ_%aT<-eL'Ev|0l]4ՐzՅgoAKoYtj-7B/9+FmY]*Im T4n-nQEQEQEQEQEQEQEQEQEQEQEQEQE{G/t-J+ sFԎ(Mt4wGҞm<Gs{ryC=Ak]RXZi-,`8.g@;5J;K:Š((((((((((*9!渕"Yݰ/.-ȼlT?7yf-K^}(R?,.[V-"sF-Yb&m 7Cs"?^SW]\ܵ4W_>J(3 +( +$Išh|$+|?/@ *oY\–Mczt%=z{.5V~ǰUVEħ7VrzE|'Wc(5 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +yck[5 uWcV(N7<_d˺Dpi[ Cמgp\ʇ "[Cӵ*d_iݫ S +}4`Q/)`CקZ<)Pv( +(7jT_:uWh5ҵ,f?SO'~t5gӯ(i>o@;`&q?:f?z~=3^}.Z?{J;քբ+((((((((((((((((((((((((((((((((((((((((+'t+^F{H©cvhF\_Vf&_ɮGRla'=^(c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((Ϗmk@v1nTŽ^NOе|_:+#ead_(]_77tY+3o@<H#E}Eշ,`[BG$vBG~.RU9v9^--J/(pC~d\7j_\?}\Ŀwtׂ[qjvgN#uߏ1h-Kk2c'P1yy%i;I1$M>Qgw2K#brI(ûj^&݁Acu>=x!x,"0z<AVa+ b8Q¨PEPEP:}ϭ wFOg~οQ/?g_(_ FG_QEP_:@oZa@M1!8O?V )@:Z7a'5VkViz6+iHF쎧!ƀ>$8.:+\Zf|E!o%#2v +dpJrjWk7GIcHlV@j࢟>'ھgo5k a8W?Sް(U,2IA$_CA-xĖ.W糲s#;u<~x /ȗIS"{S?KW}EQEQEQEQEQE?+?_J? WɔW s"(5EuQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@U{M2n#Y V&We[L{xzC\/*je'$t~JbK1$O$W%+%Mwz~Ө QUWۓ=@Mˍg7}kyfyYݲI5}-Gޖ8*b%=(p(:)gc2I v\jְD+J¶"Tv.7hV[Xۼ:{zgZlnf _keivZMHbrO=IպVkRO_O -XD#UDQUS(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ]k|qq 5E]:.h;1J*J ]j!:\})\KMltk1_1׹u8az+_[֩KDfO85^'hQEb +|3Ko2 rQKp=@qoYGOÏCH;-V\Xb\ٓ-ɷYGrql[ϋadY\Q1uуKk{y0_ h>MFgfqDn4󿁾k:Ա^x>|L޾m?@tX!H~$'W(((5u?C5_@.~οQ/(+?Q_xG %]~( t{0?hYT? sڗ'o|;立uW?%h*+닿^$ǦOlOf&|+wX|E}FS^k/1Zjg#{]?R(2p:oᏄ/CcZ7^c7 }]xCÚ i y > hn?g/"dDNp}O+( +( +( +( +( +( +(<Ce}qmF+c2rRE ?#U?t:|!_k7kcz8%$XQUz@((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((m-gֳ RCj}gArWKؚHՔUy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*A";o6\/J o/?ƴM +J\UvkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@rkJ%X;~4mf #3t'u]ѿORF:( +( +* k Y.#i$l^C^H~Z# +tUŞ>0uc嶍xQS(.YlLKC Z,Ŷ ϙOqp?+gMmNU콐u}OzK3:)Uܠp*Z棄)9oaFn[ +(ࢊ(((((((((((((((((((((((((((((((((((((((((((((((>5TSSAAf=**SHέ(Տ,d④ VV m{ɮ 7ׇI#G"2:0AAס*R>o Y6(Np(((((((~Z-*6_oSz&iQ  +zmᴷ%*" .ߞǧ{OT {xm-㷷b5 +@*Z(\B(((((((+^VȺ}[xsR\WbUٶH'\_~"i^}?m p~!񮩯٬ڹ0B^*45moP|>(n1W,Un(U+F֮| g +ԞRQWM"t^fģ/]燾Xi.5"#~ʻPtyO }fa>>.q?OA( +IT4 *QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2X&XHaAMᥭŴLI] EJ݈8ZHRүo}lIpGҩw}l zq^q2-$ju45aZu=ھYGXy%żֳ QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]TW70YIqs2C c/$Qh kW Fh#+k{WMYxw1ѯaz}O?J$ydi$vwcf9$^}|j^?9KW_yNcN#O}5ENN)MI݅QH<'Sm6~~k{ /UJnEӧ*劻9 J;K+y'CD'^V]rØ]1f~gI>+bZ(ޞ|i5P`ږ+(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+Cfz0ꗑė2*( pu0.2USWgQ^ >AG$/wbdc=I _?'1}hũ>ǿQ^ >AG$/ص?#+'1}h]o {Ex$/4bd\cߨ]o}wƏZ̃{?4ObS}r=~}wƏI _?j2GWObӢ6e@u{ nG-OA=( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +?]M-54t ?oCߡA8ԏ,ҍX6H)9Еea׹A|oihˠ\z xtR4r##*^z+3yPh +( +( +( +( +( +9Mp/oңo?ס?k{x|G𯷩=KxXB P; +yzx,M0;{x(cP0¥t(((((((Q U$(jYvs}pD;R}q!ieIUpf?^ejѸy=7zz\_z&1:ī:= Ҹ9$ydi$vwcf9$m0G:QEEPOn&Xad+u=sdҩ!H>,pOs,f8gָ oHbk tG>(?UkBlE:*gxW+puKX}G3^_({6u9>?$Kq34$w3cIW_:l[M`+ +( +;kH$y8$E_)I}=ԃ?{<)xbʰ2ė̏=⺨a'WW;p/? + |Aytק",hT`(R^:P{hBy`( B((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((4'k߫|O#N_RF91 +2h3 +( +( +( +( +( +( +( +|?x:e>?'ϤhC +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +?]M-54t ?oCߡA8ԏ,ҍX6H)9Еea׹A|oihˠ\z xtR4r##*^z+3yPh +( +( +( +9Mp/oңo?ס?k{x|G𯷩=KxXB P; +yzx,M0;{x(cP0¥t(((((((:a[?YMy~#_j;vǍuUqZw2Z4;xKO>t?jźVmS"KI$I=+谹}*.pT) +((-aysD\^`l'&~u͈R7i +rNFOۖPpS:ש{n{/n;~D>O]M$$Q ¢.kYZ}؝VQEy@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEPFFJ(?_{jŕ(?v{}G^awSf}nU ʼ}<׿&+ZI"qG\=zXlέv^0F|Ezuƍ NC?C~^miUɷ Gf}GҾ^׷S)CrQ]FAEP;TnEō T}Gֽ'@msY[N(~^WEr0t ZkNSGE&˺B}Gרht_l7dY]6#fhOg]EWtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( IK`dϹWEgh[[:L@l +Ѣ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+#Z0_h9qҵS&}?ƺ[4hGe@8((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()PYKQ ?B7(yп_*YKWGNT=~=YT0QE!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^u_B5>'U?#^KIzυ4QE}Q@Q@Q@Q@Q@Q@Q@>?2Γg4QE|!Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@yɮ 7נQRjGFuiFyd|$oJuSk >Mv74Tep.ٽ~:H)9Еea Rxt?oZf>;iz;Bl-2>i.SEiQExĒVAET((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*g[{xqE4]5}-C<}M>q4L*2:AgúfpUJ0ټwrT§4>n7~GҸ0pz׽J:qJQEEPIxUж6XJzOQԴZA7sm_¼&XRA rUZ>ޞ"Pt}'EyPv{l8O}ӴwN l.VLQ_=UKN}:ўƍQ\Eg曢t &UqVo'~ߧkXЫ5xŵKSgEEsk~ Q?5_Vb;?G'~ߧhsi訮w Q?4w +'&WG0;?G'~ߧhsi訮w Q?4w +'&WG0;?G'~ߧhsi訮w Q?4w +'&WG0;?G'~ߧhsi訮w Q?5ZűMbqS:5`(e((((((((((((((((((((((+;YF{`֍dϹ XG9\ +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((_\KGT1\p~ ?3@U-6imJ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@V~,jP ?3[VP-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@t6FTEfc5.eѯe_SֳVkWl|I+; o.aküSW2 rۙ.ny䑲I5WNDxXlhAEW)QE$Ks:AO,v"}j)Ť^]Is />r @>v]H>vtή# mv]#? |GdڽZb!4$Upz)WJ)+EQEjlQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQExiOMkxFWЍd}OaEVQ@Q@Q@Q@Q@Q@Q@t_H3P+;B(((((((((((((((((((((((((((((((((((((((((((4'k߫|O#N_RF91 +2h3 +( +( +( +( +( +( +( +|?x:e>?'ϤhC +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +?]M-54t ?oCߡA8ԏ,ҍX6H)9Еea׸DZͼp?o~+7du*pA ׇ^JFT%gxsx^+EF3t3+F {ߴ]Mpe?_oSGioK1TD +a]\/?= ~ߘ[ioK1TD +aREzQEQEQEQEQQ\Agn̐ă,M耖5MЭ뀄5?Jz8Z!EVQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@sx4`޺**՝9sAٓ(+3ji%ϵ."Q꿏d# ޝW'(u~UtqVjZ]"yGֳ+ڌ5tqӳ +(AR\g:m3*`M'M{קb~UWYG<-ѐ>ھsn܉.^t?y8OzM> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()0U$-bZW-<x1'z{+wk{/2@qqѮi#^?y{s]uy #¶wXǝr\8a]&!H>(`}ꚾdz˔}꺾Ooo [đCڑ=( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(<4'k&O#N_RFk>0+RB(((((((?kGuxvQEEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE֑:QP5}GAQ6'-Ge =V{k:Z}nSj&6uu?֩R.D5aXz?=+oezcCMC +{XwGQErM#ãӷQ7tmRbp>eEq-GC-U|TGݱ?Pf>wEy|VwM?WQQ7ŋqtO`?R˱O~B>^jG违aQʼn#YjY_KW7ktqv5|TOݱ],i=b&ٿQ|K5DƩe8/_Z{ -'GTMħk?©d[{]7Cj6/?Rɫ2_[f{]ZlTMy?Rj+{W?[}Mv~,}f}qv>sksio#??Gy}MFזaWK$]g<[Uӓ_ڏ5k:Z}nk*K6uOž^iuK_/]V1x+T_^ERɨ3?_[d{c|B~¼\]iБIB`iᛔ׹JҨŠ((((((((?PGZC>?k}^37qı}Qѣ1_8j$bExFzx$z1V/߶qVo(.yKL+ˣv?p7b#HuvpQY<X}FH*i'eaV?k7įUaEsQRGih\J?/GϷO Yo2H>B=oIVd)n9\5ؒ(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ^akzOl8!U1+c* SX_K?~+ӧW4՞&m3(_OG,/߄ +|Gu?[W/'O? #>3(_OG,/߄ +?AyEx,/߄ +?ax'Q+ax'WSu\Jۤ7sd.+S Z5Z5n 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((._1\u:PEAZՓAZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +) NMyNj*Zep>?ץgRiəU +Q;ĺ_Ѩ$~%>g S)6~xӥswީxwO;V&.U4Z#[ݎ(8B(HƬ +2I j&t3NGk<)=/񬪿i#湑y?~C :쎼6}v]? +%|C;{~붶6Z0F0Ƹ}*j+إF{0Am~O]O j 7 +A?֦WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPFWЍdַiOM}4&QEjHQEQEQEQEQEQEQEGu|ڍEck՛⦕67Z\=Z^-H(>o#*&D8-yK.?_Xj+[t_LC9?Қ1_iw=>~~l>Ƣo6CK*E}Y)kFUDuZ/#5K(}3بo"=&~!E@T|Gu|yEx{xS?1ox +U,/pu]]~O]bY-^B{E|{V?[mIt~7,}f}qv>rkۧ3i>?G,iGm{hzWTU,?_\>m[MOZ5k2}^}nSk*Kp'WcNm]Z|ׂTZ_v=ռm+Q7|2u0~Z*MCAG? H*6i {|MEoCj&٧^EERpxPcz~Gⵈm*U5; wHgTMg/uWT//EoF>mZ6}]yK.¯;|TOݱPMK\=-** nz-"?Qď[\K_a}w:SD>3uCka(//k>ox +TM]ZlV-KEm!{I5u/ Ze~~/5ERMm ]ˍM ƢkSB+d+,c4( )QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEYI2.]Qlwݐk#h"VO$? KHQ_=Gj/Sۆ֭Eukujt)c#Ex~?,=?ҭ/ EVO'-E,\d?[cd_j%tog#e5ʱK(+chsGDom|#B__`^vW'?޸?o隷|7/W[̥V:+&?h2^2q|_ٔZҚ2ٖVWV =A-@Š(((((((((((((((((((((((((# \utv?k~GW~EWAQEQEQEQEQEQEQEWo{4];JHbBvBV\g(IifYiQZQE0 +(5-?gR)GnȨq,q#;ª}wkqsYcoQnoB!9i{ +گJ^~u<*Z̭aY閫menDƒ=Ϲ4Q^3m+lQE +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(2u z[om ,ïOH57ѯΣ+٨6:D3c=>k_Ngٮu?חkt/<>mx}?6aF>BpסEWyQEQEQEQEQEQEQEQEW|0Z_k>ȭ/}?4tvQE|Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r5ݛ„b9=:7#?/\y]?jY=Kn~v +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷74o#;aa ʱ~g+v# Q1$PQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEL푺Ԯ`/!QWVZOgl4QƵ-NW{.'~_{՞v'0?v[S){hKYǏ%{:}zErԩ:曻 +(<5xup?J$c:ӌ\QUْTbp$צxGM{ﶷ궣nJ|'K¬ޡn$^ֺ`R}DZ˒VVuvpG,q袽z[DQE8ۿ7 +A?ٴ;gA$@3'TZ<בFUIOmQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE>'U?#Y5u_B5_oGqG?QZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERf +mn)!C".~v"oWC՛wnRAuWءEj/6?JۦwEKM}]j+u|&OZ| V饿*h?g>h~x~Tg+j^/3iZ_J kMKaC5;U/`g?-J +QV?ҥe*v8 ++EjDZ~?k*>٩< +Wz+W9DyV+՗V>v~GWf>:njIE{0GYo[*5*5-R|??f>/TXݳH*^uG7Ҕ>*@1R|`ԫ߿ݲ?H+*^v?Kjtr$2RG"0T_H׀FWЍvq2ASIɢ+9((((((()р"i+gj'½(_ K<>k[ +'›Tތ֋2¿2^chOˋсj|Fv?ݙ+Uÿtj.'Et2xđ}.C#Tƻ/03!Z,E'މpTU4ܧ0YЊI=6hJ(AEPEPEPEPEPEPEPEPEPEPEPEPEPQPqVcu_'0RCF~(עzbήGuG?FsVoE"I-IOn?Z[0?pVOaT]OC[BWňO"Evp(1yfŔ;M$_B7*>yz/&n8g)b5'ĶFW#oy:J+'Q'K>zT;'vu?֭G&?x/ +U!>r@+7W[5K+ފOaU+jnl/O)Į)bEyjtN_JqK~E,E7郞2? cz!ո!xiUQEaG?uh_*~!eWXBnU_R^ҢoW0Sm5AER(((((((((((!{/]G//ݏ@Z0_UߨQEfQEQEQEQEQEQEQEQEQR[u:Ao+*"“vՌtQ.< vySڻo|3fs>ZtνmaHaN+fЧNXW-e{查lmC;O+EVR;ф`QEdPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQER2RR0AKEy7č Oҥ@N vڸJߋtK^e_]JREV!%QQEwQ@Q@Q@Q@Q@Q@Q@{V~+^^mGNiEW˞QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kU-N`HeRwRAq}[~z fH\O#ZEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\'hepX#aTjfuj”yuֻx~W+ + +g>;/|HԼEux8-j^j7/<ݏzaTɯM#<,N>u}肊(3()@$Ii~Ez-tfsF=Xuwxl%o5Ϝ~46ua+4]? +/.\ihy[qIJֽO8 A 4WF)/taV׸QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQP]@gH +i6c47?YE?צt4TUwk/M&Z|-M"עת#_GR.l +EK7Տv+.dv}"_VW((roYERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWFWЍ{xiO׳^&3FMQ_FyEPEPEPEPEPEPEPOtL?Q_{AEPEPEPMtIUQ@tٿ*T {HV5.1{|7gُuV]m7AG'_!u#A|(?YQ^Eh JdC$O8U@Wf5ROW{d3׭QZ>>[IT^%ȧfpY!n% x$_{H?ǻUI4]Ve_CQZX^=tđe}(FF Wo?у+EϜ诠d/,I(?ʪIKGgTŒ O~g$Ԛ' ױ"浢KZU$N喰[U0~ j+V?jeI_Or)+E?t*.Eu|=,},Uݝ?x7Q}&sb=K5јTVaY(6U$mZ)qkr(AEPEPEPEPEPEPEPEPEPEPEPEPEPRGq4?ꦑ?b*:)5q5xꗩVby:ŢtilΚ?? +VO+x<; )UwTG&t2SV([pGk(]c)b*.GZ_d n?:#}k?)yʰϧRT=?q4B5n?xn_F?G_+(MAE,\#ߣ>/S*3W#_[?al}QʐG4j3)j=[RVto$}')cT}Ex~)עzbέTshVO&K)bEx|B^?\w빭hcr +B _ߨQEfQEQEQEQEQEQEQEQ^iv6bICJ>X\\0SZTGdq^;3_+O^{M`m¹y[+RN:#I;.ǡNiQElQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEyŏ:W%2MJz_U_~+''t((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((b{FBwZ߷7 +7+G9f@I6 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((j֟XޣrD:gEIS̴{q}M_Z5n^yOLQ裠_zGVy|){՝g&jiGDt&J(&u%QL՝YsM(0Ѵ-GMi#Pz4vC\^׺yoe}Tt-",d:*Ԟպ(E$$ +(Š(((jWTY@Ur:f;IF'#h6?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQHHPI &}c.87tZSRɔvΦoi:""IsּXjAeGu\3;bY$dzvG,kh#5snIipQys,⑉ҫ^5*+q:Š(0((((((((?}#^w>݃QExGhQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWFWЍ{xiO׳^&3FMQ_FyEPEPEPEPEPEPEPOtL?Q_{AEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPR[A7c&MJJТNKf&1$Muv*' IO(}Vg騭V&odp}:O~ݔPj +WyEhؕ.7>k [fRO7VnFWkԨVg_kD5>ǐ\OqbFZ'ßݶOf_+Eox\$_{JI<3 Y^_/ M2W)L?V*Tt׍$tV3Z>mHf[?ЩRO +"_Z,`x9tgQ^'<5/]1G#To\GY̗4WFoww}Hj +-VezV5>/ SWqWހ5RO8Mj3.EhO!O7I/M,=VT?5hxwK5譙<'eTF!['0M%%(OxHJE2)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWкoz +꾅п_/W|;0{Q_Z,VYGt{ιk^ԼAzn+z*Efו_)bs aB(# +( +*ji<:('Z3.Q{A#qA}oG:M>w<#[5MVIJ`zsWZEbzuA +QRzj’si^Š(ΐ(((((:ISAwFu>!H>袊((((((((((((((((([zN׈c"%G5.l-{MtuPV-;2hCvze{#Xeo=*ݮɕO˩+̯u Fs=̳F>ZE8kU$r}_[$^]P~ȢarYŠ(QEQEQEQEQEQEQEQEQEQEGu|ξ;? +(#(((((((((((((((((((((((((((((((((((((((((((+|O#N_RFH|QGڤѯg%$L_Œz)LG'](27MLE <4y27M@2'<4])LG't(27MLE <4y27M@2'<4]|?x:k|tV2/"^yL +1Po/5ROZ}ֳOfؕ}ļ-3Ĥ}XX+fOj _{I?׼QZ,T%!ݟ>IfMSnURKKʟ!uΥ/3+-[OU$tyiV/mJgQė}2x?&T駔>3h=b%'+g?7q(9>gUVm}_K<>U0k|RO7VnF5̰~ +vrǴRO>#Ok̿Ԋcp]Q]$_{JI<3度I%\$FUjM6W)L?V CZQEQEQEQEQEQEQEQEQE."^zt/@g_=NEWEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP|XS/Z*ߋtK^e_YQ^QEQEQEQEQEQEQEW|0Z_k>ȭ/}?4tvQE|Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*iOys +|[L{hGB7o_ZwZMΥpd#F8HǢι+OH N:ο5_2Fgdxisd(sڼWR;ɞZӫ.i* *旤k7g<=I&ݐmMC_iǐ~Q=3]ׄ~X]櫲r#>^^ ک-U3}OlVNHbqMhQEzI$]%dQE1Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPE{ui(n + $9$|O]I=dʠ:Ҹ_Hs)_5Pʫ^9牄v=c&87t\ ZG0vb:+١У9'?!Yس1f'$i((EPEl5ф'[Kz@dk:iS}+: $aFsacs6V'p}OoƻtmW_&? ץZ[@Z1/DBҦoVzS\;!>zbo E rpPoӪԟMqo8%0+BB(((((((?kGuxvQEEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMxAEa4(|Eč,|(>!{/_i=y~7QEtQ@Q@Q@Q@Q@Q@Q@} ȿ׬_] E7bxS/ExQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?_Kʽ7+יWel?aEW`QEQEQEQEQEQEQE ?VAZ+K_Oyy8_Q_.zAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((]4,CcG +آ*-M`ͻ&QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEJNKe֮ٞ@E=B rBԔPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEx_]j6uy2*T8M%iYp@,p?ڼwn2BkjxkIJoҸxT-5^1?Zȯ*6Saf[3]/ELXcB79zCtC 9o?ýgR%ʋyG^Dvsiq`/A릢Zz7e Q\&EPFWЍd׫ #uKӪfVg9wU_TaU4,4`N6Xzc̨MOG*x0?L/~^ǙQ^ +? ?*TaTjaV*+SAqQ +? ?*L/~{eEzo*x0??SAqQo}Zc̨MOG*x0??0?Uy8OGAj27<U87>WTW§<Uژ_ժ<?}#^r +#WVsUz5y9*~OfkV~`+:((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((# \utv?k~GW~EWAQEQEQEQEQEQEQEWкoz +꾅п_/W|;0{Q_ Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((21VrZs?f;*+/C崐>2=jPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEM$M#CgkEqk]]JIOEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPP^^i]^OF2HJmomLoUzO +W(_p}V^??54Q3ɿUc}?G*_lkh[}Zg«&7ўXi38wҺ ++7p;+(((((((((((((((((((((+HnK*q~%tCllY<ր/QEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷7߷7 J,?o\W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPExW+;e-c?1c#S) +z9擲: {+i.nHae䑰}k]bY/.x SҸUEٶ1G'.5݆19~#呤ݎYM6+(P 'C55Q{ mi#Zҡ:7Y(|' S6~y~=uQEtaEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEAwymc8"^F +?Zi6쀞$|O]|é+Qd˶AkҡWG<0ڞxDҷ"MtukOtv,`? n+m +:"r;brI9&+(`QEVΑmc[ Z7崟*~g6d'k:iSW|u +IŒ Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*9!縕"1QI/JRL3g.'u/j1Fp}\PaGMcwņ2ùUzpSw+Y'FG;&EykN֯:aEVf!E-1BM!GW"¾|Q"5ԃ]τ~{-IlW:ZHXEDQUz^ ~OpsWE4 ZV~$OVW#ٌcdQE2((((((((((((6?'}'B}O5~O]O h(((((@;/xDw"M?iNX+)F*Ee"ҴT&4|dD>g?yfYGn0vb7vw.Y$^ OZH-- A>(˺-"@l3 ~9Qԧ3^<6qWG J#cu%?Q]aEPEjNԧ[Kt +qڶX:Q߸/=]ZG?-#V?WOUء*(?c~=]ZG?-#V?WOUء**"ƊQ@ +0)9J[I-(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]GsQ=FqU?AAZ 6Rڤjj((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷj͔eL[oNH> 5U5?٫ƱF¨( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( + o}}&p#vUk +8Hޑ*ľ%FחC +%rq*e-Mb/u,%5צjv5*B=+j+ t2KZnv(Jfi_X̳[2?#ҭ׬jSM]QLaEPEPEPE_i^{6f;hw;sS)(ș0\vFܳG/,$qG5^.ֽ̲e?zzXRv{l(QEtEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>}"Gghf9?1NKU8uw@((((W:V^G"19k>(˺-"@r=ʭjtTa);El5 yG[IzTi;]\Z\r^κp;W_9KJ+6pz? mjܝ|F?+AipD:$j~5լRW:N0PQEaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Um$k,m TQ߸/گmec +גjQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZ ͬ7heܠshF\_VfkV;hQ 3(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((f +2M7΋z(R+4QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE5W>)t_?Nrq@ EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPYzc-ﯤŽ1nʢ_ޖaG 7eQ_=_FOzfi_X̳[2?#ҾV2𞡹wMc)}z?^N.)|= 5|#*j|W3,}u&=WAESQESd"FYMcxZW-|z1'z{+UW4r7٬mcn?sW–CMcwň,;Yz5 ;OZ;ndCFc"iwT6QEd`QO)'"6G;Ud]<|ZEکė2 "S?J#˽U~)GOWo I1*@w9{4G˥?zi^}?6$et{5QEzQB劲 +((((((((((((((((fXdR}ECuymcxuy(i۲j NXam=.H?pulwvI1kѡשG<0ڞxDw"kzΧ;w0{_Q^ -mwq9y +9wb$M%WyQE((#Ao(i>Tfᅍ5INZe~=O\u(i'dk +3:RCem,zFһu̻eD ɇ tkl`Z[CFGS׍_7=)U|ZzOt7 s<֥W)oNI%dQEHŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((B@;oOP覫k+c@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@R3 S<BeH#Z( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+/_|7QF>TQ>L(#zF+^^6q *~X{ˉĪJsT%-5Fl(T/=+ŔғER$((+ t2KL5}>+kyFU>zWx7W~7.e#Ϸ_чم:o[~GƺO}ET5;M_OeQaK&5g7X¼!ץzQKy*>xݠ6tJys_y=Ρu%O<-$j +(9KwՅQ@cݎTdz~qtQu[58v|~*SmFJG(eK8D{a^oi^4 ޑ|GMo[Gmk +Cc kҦ^z`GW +(Т((((((((((((((((@'W1xDw">:ҝ)|W&RQWlwFuYu?Gkۅ@;G,x=5-5 h؝?+bIi},k:.Xa Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!F\_ ~AIHy7<2q\#Ax}NGԤ2N`uׯiSGqM JU΍xUW +.QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW?xSM3D2 >漻?uMrY5ZPw~=zӧ%rҥ5 =#h!U2:k +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( + o}}&p#vUk +8Hޑ*ľ%FחC +%rq*e|K}Q/ +8?,K=OzƢe''v|QE +( +( +( +(79[qʾ\ˆACv`=G5}w=ē,rګQT&[з98 +(UVv +Yd@ [^{&ݩē>Ú<#˽{~j$nJ;+m>;[8#8Wu ODzXlSh4 ƲE{(SEQœiǖ*(Š(((((((((((((((|ChldF?E|QtZEzy/A溨`WN!=.=0Q|N]|c^c}^s׷R'q +^ ux?CgWVwl!???!cQEzЄ``W''vQEX(UVv +Yd֧IXaw52q\šir$<>w5α^뺔& +;(X/uJ[HUqU;ʼ~<7]*F_oQz4V.hʔ>;yVXdPr⥯&fJea'^oq ݼwȡ0={+ƴn> xoEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEŶ^L%̀-ϩž-g.dAn.}O|k-I?`+T,w81ErX/uJ[HU(~<7]*F_oQzͽ7v[ʲ"GCvWR7̽L$z׻ '`u6~;yVXdPr⥯\B(((((((((((((((((((((((((((((((((((((((((((((((~z[_I$cHݕEc-ﯤŽ1nʢx/oQ5aG§}\J8xAY|A_xTkŽ!OSޱYIݟ=)9>inQE"B((((((*ŃG$#m!v_<3xu`&n1Z ?09P7/pv>&lĶ D1\ϮyJpXS\V}NRz`+ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(n3O1/W֚M &O=cuZAǘH?ָ _ZƶJݰT_5^#xGmOUCRQ\ؙ0xSM3D2 >y5wRc$GekK1iࣲ +^.##qxWQEsaEP]y7n4T/S ?ľޣh sDҕYR^qo* CT>WR7̽L$zm!U2:rx֍1Z(:B((((((((((((((((((((((((((((((((((((((((((((((((šir$<>w4xŶ^L%̀-ϩub]ԥ4Q@qJ3X_kK1iࣲ +E6ۻ>}QE(ɼ3p,ҤozI%ׯCwoż,2(dt9 q_(Wm?Mᛁex.#|O/{Or{ wSo*+{n㸷eE !*Zt((((((((((((((((((((((((((((((((((((((((((((($3$Yzc-ﯤŽ1nʢּYhz|WA`k^^6q *~X{ɉĪJs:\h@>(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((i(Ĉ8au-/TE +((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(4Vڃ??gArW/ PpN1KY>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W?xSM3D2 >RQ\ؙ0xSM3D2 >y5wRc$GekK1iࣲ +^.##qxWQEsaEPEPEP]y7n4T/S ?ľޣh sDҕYR^qo* CT>WR7̽L$zm!U2:rx֍1Z(:B((((((((((((((((((((((((((((((((((((((((((((((šir$<>w4xŶ^L%̀-ϩub]ԥ4Q@qJ3X_kK1iࣲ +E6ۻ>}QE(((ɼ3p,ҤozI%ׯCwoż,2(dt9 q_(Wm?Mᛁex.#|O/{Or{ wSo*+{n㸷eE !*Zt((((((((((((((((((((((((((((((FdIi0,֓in'$e+Oxn/ۅoj)a?.S[}MEq|R}BI?ݷT? +!⨯i>3hV~_9>5ۏZ_Լ]x:G^?'ƻD޸-'mhӴx;¡h3yul"O&1 j|['#x5/K̇]Ϡ诜d~8uUrxĒwQ2#RtL}5A _,ɭ_?֪I4#iyćO$,[ynJIxgTѬ%HcPRm:z~G֩uEW{aEPEPEPEPEPEPEPEPEPEf T}ym˟k>(&贋Q +?U jӿC9ք7g\@]O1/Wָcvk=2q7ט_WuԳػgA~V=8Urֱc[,wl!?/?!bEzЧ.X+#݅QV (Ubp&mxŔ1eV:Jv*0N jG[?ʃ= תhtI } +8W_9KJ*l6pZ? +}j u'_*<ǩ+Aio@=VլRW:N0PQEaEP6,pNzTIX3A\~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((lp2OTֱ|oq\W@E2ׂ1SnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPQOs )8楬ǜc??V9Dې5WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +WS._1\t^9?Y>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W?xSM3D2 >RQ\ؙ0xSM3D2 >y5wRc$GekK1iࣲ +^.##qxWQEsaEPEPEPEPEP]y7n4T/S ?ľޣh sDҕYR^qo* CT>WR7̽L$zm!U2:rx֍1Z(:B((((((((((((((((((((((((((((((((((((((((((((šir$<>w4xŶ^L%̀-ϩub]ԥ4Q@qJ3X_kK1iࣲ +E6ۻ>}QE(((((ɼ3p,ҤozI%ׯCwoż,2(dt9 q_(Wm?Mᛁex.#|O/{Or{ wSo*+{n㸷eE !*Zt((((((((((((PV|Z?޸Aj2_{]?έ\d:[nQ\ğ<'b?Oqdv5CQ[}gEp2|_}v*qMo/5/E}2H+dUH\MTUU¿N[ +d<~}ExOvمT牤bO&* Wr|PlwRHݷ|@T{Zy>̇R>dž#뺏n\#TuIWC#$<"}LHQ@IXC?ޕGY%9ϫj^c?ͻC}?'kzrCtuNOx^/[w(y$Cjt>_cHZ'ş 'ݚO`?tT<}^ȇV}=O^#\4C|i"ޑWkƨxyw=fOZu6UI>4jgVh;7WPu!~GIO-tǴNONO*qo/q4TEW]ur|IluvQ1NO_dVO!תIXÿ~Op󇶵q}Q^*QXIB(Ö!EVEPEPEPEPEPEPE ݽ 5y(i۲j \&;O ^H8S}kh .r-Ӽ0=^ieka8"*zkg5ʿXS+I擢( $g?#+V+ʜ7'vt +(aEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq_>>6=>kv=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫩/Z:/ǜ +֬ǜ +֠(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ol)"K[˟SsS)(ilLEO@ol)"K[˟Ss_<K1iࣲ +5b]ԥ4Q@Qu_\ +(0(((((((~<7]*F_oQz4UBriJIJ/S{n㸷eE !*Zo +it^}G6qo* CWBkFsؘ׍Q-Q[!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\|[eM49\\@;<[/ +iyȒ@D:Ʊ{RdC(vXIrsTW,~/5b]ԥ4Q@Qmݟ>n(QEQEQEQEQEQEQEvWR7̽L$zm!U2:+ +G%Mmުpp=F+ g`ܩ} ExzbU9>2NOf{p{u|[֩?T>fKHyDJOZ/ڟIo*|#wE0"iWGkd?Ċ'Mj.}Ы(xD<ʻ{$lޕW'?u܇b|h*fo*FrN؜6>?f;Y>+xռ5RO-k?݆5K\.WCi64{\WUI݅B@1KT_k*]g>bž!hzUr?x_܏4U,[-eTɟeq?uuvo+X*=YvtO(cn?sV1La(Z?O?¯ +'޴O]KI}Z_e|%?K#6/1}o[U*T_qj%WfZ> m,cRm +0BOEZ["bG|CxtX&ĝ@Gg}:y}fJHx?Ji5"lI4 +?{ӧ[߆Ǐޥ5TyQ^yQ@Q@Q@Q@Q@Q@Q@W;wZ޷8{kWwz^ѣ*創 +>Xÿ~Op󇶵q}Q^*QXIB(Ö!EVEPEPEPEPEPEMsZǎM#ryj;ݺZS: +IE]W_TyM?EזkuKtv,`=9r=1\;;f9$ׯC'ֳ9gKHе3ɺ-"D Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +:–d + 9+eO|( -$ OcZ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ol)"K[˟SsS)(ilLEO@ol)"K[˟Ss_<K1iࣲ +5b]ԥ4Q@Qu_\ +(0(((((((((m?mkR$F'v)5c]t?wwsU{Yejk>=Oys Ts UQGvڧ?9G?9G稣ϻmSt?wwsQg݇:N|QAN|QA(Tg'>(G'>(\{Ya3·nnz=?C ϊ?7w}Q ϊ?7w}W=E}{jk>=Oys Ts UQGvڧ?9G?9G稣ϻmSt?wwsQg݇:N|QAN|QA(Tg'>(G'>(\{Ya3·nnz=?C ϊ?7w}Q ϊ?7w}W=E}{jk>=Oys Ts UQGvڧ?9G?9G稣ϻmSt?wwsQg݇:N|QAN|QA(Tg'>(G'>(\{Ya3·nnz=?C ϊ?7w}Q ϊ?7w}W=E}{jk>=Oys Ts UQGvڧ?9G?9G稣ϻmSt?wwsQg݇:N|QAN|QA(Tg'>(G'>(\{Ya3·nnz=?C ϊ?7w}Q ϊ?7w}W=E}{jk>=Oys Ts UQGvڧ?9G?9G稣ϻmSt?wwsQg݇:N|QAN|QA(Tg'>(G'>(\{Ya3·nnz=?C ϊ?7w}Q ϊ?7w}W=E}{jk>=Oys Ts UQGvڧ?F[|OU!QE(((((((((((((((((((((((㱻Ud9MF_W?Қ{"$Fe|O/Gun?-_JG_ZUGOzuq:?լ=WYk ]yVFook춹%!j+#-`?-JW#7/EϴVUx}q&}认zs3 +}ZyT{YY_J?x^/Z5r? ~z쩟ThT$|NHCFc5Dze?mؔJ(€Ywy~f=SVvU')~慨MrǬYTz?x_5n?-?ڸ5} EZlet|?jNOYeU, "[Aw*{42zq֫9 czƶYna?/?.k+օ8rYNN(B(URA,N]VZ64bseⲫZ%yJNG)ZGu}ms3?z J$ʃ?PD?5TW[VI\8AEVQ@Q@Q@Q@Q@Q@Q@Q@2OME"Pc]MQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^a8$xJ&J(@GFr/QZۢ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((++^F{H©cvkV&mJ鱆5z(+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((m-gֳ RChZez4( 4QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW|QΩiKI4v3nz!|y-"YaJ8`{ƽVxr ++VJVa'[^MxS.Y7VIKP*LŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((tq,q; +$^awVk{WuɋivOcf)UiQWW<ފ ߂]n?p[7nu /?ƨq燗.UY>7R9XExD <#M$1i?5[薇_SEV(ƁNS-S?ʮGX?݉GY|ȵK)%86s[FfU^?1( KT_k*]g2Gt-Gl\,Ufek*L?-iF5r?^&(ޘ@k(X +^exuPvE[[¿[f4U,Ŭ~'GR\ݶ ԯ݋ zUk E}I(,} dzQTE-QGq}#3W#wށ[ۢR(Q-"ZUnUT1IERIlZ[ )((((((((((((((((((((((((((((((()j#($}⫧gRiGR2RR0A^O SW+?jjc|]?8337å4Ə6$=?֛ͫ▬Ul + +?yίMw-ݽpFq,O{*"]hEF}]Q^QEQEQEQ[iWjCs$4q U=FOu5=%]:nr?>Vvקד*ZX/WR+ҏ,R~Q,OY>V?UwGj:͕k$lT6@'|rM7Xm(p(xzIҸ]cni=2q7xY-,'Xz42u&S5hFGڧnןuGtvl`=9r=1\PhRի3xs#cM6+(`QEV[[a+7hgP~']l\*J䯍Cz[ŒtEbE3J֢9MIݝ)$(QEQEQEQEQEQEQEQEQEQEQYrkJ%X;~4mf #3t'tEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE2iD0  @U;-F;4uٌz@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@UkԲdYm-Y RCkBnd+gր&(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]N ~rx<Vd<VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEEqo ݼ,ȥ]d0=x7<7n 횴TS ?އy-"YaJ8`{½֍6' ߣ>Poxo 5itnׇ8JiJd +(((((((((o,hB$Po,hB$Wxw ZMMpr|LzZ&j+n2yާA^^樾G$ꯑ ?4 ?5]_VG +_P +_PEV>CQ ?4 ?5Gթ*PTp<5=uM<5=uMwQj_ʃ?* ]C/G* ]C/]}ZG +_P +_PEV>CQ ?4 ?5Gթ*PTp<5=uM<5=uMwQj_ʃ?* ]C/G* ]C/]}ZG +_P +_PEV>CQ ?4 ?5Gթ*PTp<5=uM<5=uMwQj_ʃ?* ]C/G* ]C/]}ZG +_P +_PEV>CQ ?4 ?5Gթ*PTp<5=uM<5=uMwQj_ʃ?* ]C/G* ]C/]}ZG +_P +_PEV>CQ ?4 ?5Gթ*PTp<5=uM<5=uMwQj_ʃ?* ]C/G* ]C/]}ZG +_P +_PEV>CQ ?4 ?5Gթ*PTp<5=uM<5=uMwQj_ʃ?* ]C/G* ]C/]}ZG +_P +_PEV>CQ ?4 ?5Gթ*PTp<5=uM<5=uMwQj_ʃ?* ]C/G* ]C/]}ZG +_P +_PEV>CQ ?4 ?5Gթ*PTp<5=uM<5=uMwQj_ʃ?* ]C/G* ]C/]}ZG +_P +_PEV>CQ ?4 ?5Gթ*PTp<5=uM<5=uMwQj_ʃ?* ]C/G* ]C/]}ZG +_P +_PEV>CQ ?4 ?5Gթ*PTp<5=uM<5=uMwQj_ʃ?* ]C/G* ]C/]}ZG +_P +_PEV>CQ ?4 ?5Gթ*PTx|?vI87-l~U}ż7v[D"tq5<7jR7L$ {zay=lyX=#+((((((((o,hB$Qo,hB$W>|ij![zmB^V[ɡFE?7WE{Ɯyb}%*QXQVhQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEtx:Fnt^I_Ō#()ygHzU*+2̑Og|Niv^_ܕމJ(9B(+FQ6}.svAggK(T(pX*X:J%z +( + +:W}G +ɭo ӥ^|H(\ֱHܟhTY[>uN傻=yIE]S^X_Gc"i},Z&Y@q#zxG{d#{89Te溪+Ư׭켎a1PjZ(p(((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ/q\W@~EX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEx=DV;.>sGS?TNii3:aJ|ij![zz z\'/=sM.EWzEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPQ\[wo%K,2)WG cR@ᛃ{f.#|O𷷡xy-"YaJ8`{oxo 5itnb6<,n ߑEyEPEPEPEPEPEPN7E4gw!UTdz(7E4gw!UTdz+~|>M +45DWe-ٽOnBUedta+-УMSTE}MQ"+htN<>(ҏ,B(4 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +o}#_7MOw$/}QE{QEQE̼$c=*tygHzWgy'' y/nJmDEggK(TׁtoF ;fyTWh]/log8ʃ?> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((._1\u2Oa$q.$`~5}>@9?Y=Γ&/3h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((縆縕"1G57:Iϗ@?JxRUY[ȱSP="cI[vrbqu>3-癧}}0$I9'WV;էZ\aEVfAE +j~(lbJ{p$c>œb슌e7va]<wQ25֞+Mч`OC}xs.Y-GR˖j(((()ȱƌ*O@ȱƌ*O@{ɡFE?7QhQ"(n{t5p= 7Q^Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Eqo ݼ,ȥ]d0=KEx<7n 횴TS ?އkxn䷸eE*!ky93polեҤoI?ׯ{/g{~GEW Q@Q@Q@Q@:8Y8ѝ܅UQI8Y8ѝ܅UQIq}4(T_SqCȷf= +څ UчʼB5MQ7D 85Yʹ6Ȑ39took&}?Ʒd8] hQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEG=6<P7;`(&$_:eާЮr?W%?ryݡw~JI$z^v#ovy8/rEOToPy~ǠN+mvxͶŠ(AEMiiqu/4 kKK$cx߭mFD衆wh\Pq:I0{]igen[04WF)-7>h܊y-"YaJ8`{oxo 5itnż7v[D"tq4Ѝh,N5gF|Ev<7jR7L$ {z׉p%#*ҕ)8jQEIQEQE:8Y8ѝ܅UQI8Y8ѝ܅UQIq}4(T_SqCȷf= +>|>M +45DWe-ٽOn\.ߞ繂r~`+=@(((((((((((((((((((((((((((((((((((((((((((((((-ỷ%hVJVa'[^M}_qo ݼ,ȥ]d0=x7<7n 횴TS ?އ1X^O~7yOoh<((G"32I=G"32I=?&j+n2yާA[P*:0yWhQ"(n{t4Q^:qXIJiG!EUQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|7??ξ]'׻o?qc>(((((((()@,TI%jcF+ЅD.JƮZ6,Bs1w?K$ћ2/O5_+_1[Ky0T* ;REpQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEZZ<ʡHe /Z:6imJY>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W/^geST#㊉ԍ5&gR)Gn|AM7V&Pi9^^Cg/NVV,T;T<}X"u=VY{BU:Uhov:D(8B(7]OMXOn{s]'>]]N?2I&ރl48m x`Ͻvn~GJSEv[]]8ķ.>w~EzъVF *((-ỷ%VJVa'[^Q\[wo%K,2)WG cXWѳ^6{gWmᛃ{f.#|O𷷡x B\>r)REydXFwrUFI'#cUU$ +B5MQ7D 84[~fnMݢLxZ+ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫩/Z:/ǜ +֬ǜ +֠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((xm`y%HnwvQMfĚoM֡>yyҼ#Ş7ԼU9Y[ȱSPcG毉%mɉB✷fhw~JI$zIExjʣ^u6QEfdQ[~",D =ϰb슌e7veZZ\_]Gmk 6k |=穹b( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y-"YaJ8`{xo 5itn"32I=mż7v[D"tq5wޓbQ[d'ͫ xNoɡFE?7WEwӧqRQQEfEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_7MOkIuXϲ2(| +( +( +( +( +( +( +( +:W}G +ɭo ӥ^|H( B(((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +WS._1\t^9?Y>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ts dGkj4'U'E 4۹x3޻jt*L=^aivQۤ* zE{hBs0hPVŠ(΀(((((/Jݬ/JĮAqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU{]:o'HaN}?JxRTdcob1ڡj<՛NF.UtZ#c[ݎ +(( WSEc"S߄{_at iwwڠ{]8ʸēoAz׶Xi]vv6c +8zG Oz1-3¶mͺqn\|=khv,UQEEQ@Q@Q@Q@Q@Q@ftvҢ9G_ +ݶkLA(I-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU5=.ѮonW>w>šNN\NNM{xL~g\WHZƻk^}#"}5EF1劲8m݅QT ((((((((o ӥ:W}G +ʷʇď~+d(((((((((((((((((((((Cy$D1a{Iemy$eTVQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEFkYbRu* /G_ +訠 /Nť2:61=ZTQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@R6U!|JEsX3al֖i YItVh(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((([X8#X?7(􋩮mqZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETs?JRT$&NcCՏ+&4g&' + +۾S?r]ݢG?=+ ,I$y$Q^=Z#WisMQYV߆-ȱF=ϯb슌e7veZ\_]Gmk iT`+((~ u86_,?+u #( jrp[MEVQ@Q@Q@Q@Q@Q@Q@kxcF+Ѕdַ?iҿ?VU/FT>${Q_{!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEsWw2>Q5.}RH +19@@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ܍!*s7({a38ֵh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((G|3 hQ\ +g%98zEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((xy"wlx5lGaҹ?S<u:3^^IbI$&F6?qY^/z}_=p©EymQE(mn/nC#Aƽ |C]T2[#~uh%φz}ӏ*ēoAz׶ueAo¢՚+٣B + ߸QEQEQEQEQEQEQEQEQEQEoo[oo@X>> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+?V֬4KSq:ƿ½YϠ'v&Wfq~%eoӶ]ݎ Ϲ}\g|yﷶibxاqJ&SqUtsR/u{y= tQ@*W-6ՅQT <5KseK3G<}k*J޽C_ml6]j.G"i+4K [@s9'hWIiGYjϟxm'KLO_aVp$ס⥺9A<5@Q'設>_ Z_ OUtTQ *A<5@WEEYa Z_ OUtTQ *A<5@WEEYa Z_ OUtTQ *A<5@WEEYa Z_ OUtTQ *obNT&9&h5oaQXQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]?*o~ַk ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֬ǜkѿտZAq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|E{;=zM9TN`U8M=7vQ.ƼG>-ƥHMl?V&_kW{\k]N<${zsz׶iueAo¢zG Oz1-3¶O6%q7khv#dQEQAEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((($I8fkZyӅ$|.AzWZ&Gӥvp5qEƭhs/[]?}pe}?JBSki1WtZfߞkWP=.^TՅQ]QEQEQEQEQEQEQEQEQEQEQEQEoo[JNKeٞր9J,?o\V#wjAP4%Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@VFM7e߼#) +rv&Wf2f +dpĿ kn7~2Լ@7żg/\{LG߯g \Sz@nys;+I%drQLAEMvwyl7ZDxĎ>>cZ:1\!)D崭Z+=I^.o6ގA#;sWKzUY[1/eO=ϹUΥovG;a ^(((((((((((((((((((((((((((((((((((:ISjˡE,!f-];[ef+؏jӢ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*봞!<8r+/B"߸/ڥa%r3oQWh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֪K}T+nȠFAq}[_!Z6aV,<OEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLhy#w8 +=I/>WwX?$G;~✗>fhyћA^\If,Ēy$;O-ԼC!Yʵ+oGW~/h# +ONc_)]?FaG^kqs=q++5|-,?ȯou/Lcrm;d<}Xbj~;n=Ub1r+:tQEpQ@mxs~aȧ >kg[{˾Էiē}+t:I |>nODz8\{~f7|xVݰķN>fߞkhv#dQEQAEPEPEPEPEPEPEPEPEPEPEPEPEPEPXDyr:d6v[Uoo@_k]]JIqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQX!vu[xtUӧ:傻͹y8eĿCtAʹ fԻ )p'-}*=ھ?qMM-4<9;}2+ +(FK;QMzKq[]E;{}:+ +t#Q +rNKDyVPS:׭xsZwf \}Go[Vok +C + * 5|/1_ݎ= +XxW +((((((((((((((((((((((((((((((((((((((䮮`'}jm.wԡWFRNAbGCU.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@^[I! W)5_>>7$w\nbqֶ ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((rG3ʜv5Y> 845iif$NOZkѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫩/Z:/ǜ +֬ǜ +֠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((4[O"G pzY Fp/!QW:16 +rx>cI[vrbqpu>3%ϙy8~tfs{WY1$OzJ+ǫVU]xδŠ(B+gÞO{{~E?HǹN1rvEF.O*˶;kh^i;R4\?J_|.N uR{%X?xZ+3¶طO:%q7]z|=Yrz(=0((((((((((((((((/Jݬ/JĮAqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEvqs2E + ?V/qڼ\ 2o݃8D_sz8Lyc"0jλĿd}n|yW##I#1'Ԛm0G<ԔQEn@QE>(U(IQFI> :giA"=ϰ_ lmP#ν"! $$TAҼ|^k{u}:a[f|yƞ}>k?# +(Ru%7vw**(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Ua ʸ߸/߸/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(M4VHĀ;K Zl,/w#uW'?oqiv/}1^ZY1$Oz{f){.j~;wn=TQ^[mmvQE +*[ki.cC#Ec+< ?5I̖c}kZ4'U&0ӯ+G9/|6K}y^1${½Nl(- xʈ?S}ZE{4p >p+s(((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W/Oih#"q!GӭiJ˖ +IE] j7s0Ws^a_tmt7+uC^/m}+?zpUĹiY,NI'i(c(`T]N[ +2IWkᲦ˭pnj~lF*7u4NSvG +j^!x`p}=O+?]7\e{ֶb8bXEHaUFSy\FG*B(p((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ/q\W@~EX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((9#(zcX#}ECmk v9<皚((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ej.p7Sޞp Uo +/L:׌1-ӏG袽hEZ+C݄#YQTPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU{(.ʙޜV( +?fƃ +{S(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((_6]\ΐ¿ǯϰkľ=wmS!hAWjvn/F=^,[ޞNzE:Ew[mO^8Gӟz$h +tcMX9MAEVTֶ)ok 3* 4I];R |<]mZ4E^(UQ`^./6Qhjt3#B֛6ZEH~=(s'vw$ +(aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP,vvctH%Yc^q5r(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ln20GRƱG5~mec +גjPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPPv&]G8榢(cX#}D"aAԔPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE#0Q Rit_?T_+]\eX09ǜ +֠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((4[M"GpzYtXFp^C裿w/Lcbm9Kd<v?A\1mcG4;G{Όz~^ZY1%'%U*< +Z\aEVf!E j~'=?"L$cN'dTbb̻ki.cC#Ec+< ?5I̖R?Ou^[oubK3{o5׫{՞/PjåQ]QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEtLne\S ?~Ҁ6B# ⸊,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(3Ŀl~ۻ 3{aִhT.Zj0WZhnoLcRkʼKVm<$s{ݛ뇚C=z +_G)k/e=# +(C((VZYL}zX\ucO\N.^o^MiҕGxo:Vf˼>ץz֋;@an]t0Xu\Cv= +TcO(6 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(fXdR}B?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE 'w4:/Шq\W@>v=iՅq_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQER3 C@~t_?NV 2 q ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEɦi8gsԚ}q^2a{K]z1.JgQ4;G{Όz~^ZY1%';KݧN+1Kܥum^[{B晻==Wnm݅Q@{˘yHrX +?|-O yR{R?}}kZ4'U&0+D_1j;4L?3^ݧizMvvcASjAE{4p >p+s(((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@PH'@Pյ _,k+՜޹_Eӷ[.^ُӏzFTki1a+esT~'5\J՝/|{oidxڧqF+QY|);(ԐiXۼҞ8Ԟ}j\UJ"u~.l6'1OZ5Ls컻?ʻj1yfgiyg>( +R4ڒJ(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Ua ʸ߸/߸/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(/?<4ikS~X܏Q9 L#N.֥⩌lM)l?=[X/Pin碏@;j^F#*-bҭHQ\QEVχ|1WdF=]>^x{O#I0dv{vY1[~Ozz#%Wޞ1)3¶߸_:$qaJ(Z1PVa> 5Tb((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((FeE,$x=]m 5xZچyrDN`#u?A +O܍yw+|IC^-d؞<<htzP{iɨ+0m:Jz-QEEPE^f[X[܎G=zc칽wz93;sW+K_cZteSm/^6\ Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +Wl.P{Q}g<V5#H#E@yŒS((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((K4pBM"pzYtXFprE|]K36zcIwg&' + +WgQ4;$uz3=cyc3;bKIJ+ƫVU]xδŠ(B+cþM}}>Hǹi.NȨ]\Gom4jFW3l6^*OuתGOuV[/x]8]%z|=YrzEWyQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axV2HbdhAqUX>}}JBh(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((($m$2RhՓxN{7BI$aG^iss=\,rMzLu=.q*:GVoxz-{,gǿr+i҅(Y +($(tP. }<*R{TQ擲M#:o |<\{-!1O~=s0P?]]xXٿrGm,/Y42J[kt!G$ԟ[ܜjVQH(((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5$"$IAB!Xt!@4-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W](e*x m>2<=>kv1E.4Lڠf@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵ5IF$Ep9 ]N Y%| +c]TvEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES&8"2JPu5WZ~€.QAs 8'楠(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()Hƀ;; +m/w?ӯҹ?Ty?îR?}1ּ1,rI;KݧN+1Q)oܻk 4QaThwgn(TGom4jFWx3l6^OuתGOkFDކuh>{oO 0dnt-";; t:"Ԟհ00:Q^<)-7>( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(./ *&&c??VHXdjuQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ɦi8eĿ=?ta+_DF +; oԻ#)rגxڗd+36m?/x9gyI\I>_I˩笻U) +((IZz/~ʱ畸Dֽk~ +Ӵ07qkVzԨJk˭_}QGt~J + ]6-Ha^>ެQ_7;ۡӥk@+((((((((((((((((((((((((((((((((((((((((((((((((((mY#42j6ʱ0gn-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQMwXgsQ}]谆@zF*z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((d3Rp3KERֱ|P "mz}Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEx7, , >W$~8kG[ QJR V?ee7q&~Fd`/s .?=ⷃ!͑[h*+!Gw:^G_9Z}ösL @F^AeMJMcʉzf-Vh+kdê4EPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((q%t7L>c<+$呤ݎYM{8LShu9*ƿK3f]-OZ(~Nk?# ^lw;aRd66ok +C + * 5Wn +(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Ua ʸ߸/߸/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZִiSz[ZB2ߠ'j +IeXC$9U$¾?ǚ-?ч8$kǿuK-zO L=YAI+$rM5Ρw2K3@Zo~ +Oij>J'(8!Gk_ٳA_*c͔W뿳~o KkPȂ?)`H'^9ږɧsZ]Gpq;8|CcyPҁ'rvfWھ4ɩdg6oC5tEXxܜ,?Zii(q QZQEQEQEQEQEQEE.3U.3U<-VnTb@IeAkOЩo&9+*k.OЩo&9+*k.OЩo&9_U?j + k1_i4C@--)Mqg$h Z((C/KkVWMs~TO^_Y +wۯ@{byqfi6e|X@gFiv\!mǨj֟_i7y]krvX\T7ggp92$zQ*} ع-+#vǩ"RuxVWPA {߉fr|71hCq(((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]N ~rx<Vd<VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEeYX@YRk;]w#^(^>)I-scIwg&' + +WgQ4H z}zcy[3;bY$IExjʫy֗4QEQElx{:ͧÕ&n1ON1rvEF.O*̷;{xY;R4\>½ a }kR?}}k𧂴 +XbK1_o5׫5g=J(L((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@嵅̐ƒw8>%=]t7o?_tᰕqZwgRiN~2|>7/1żg^KxRǙy7B"}fv,Y$I_KR굗sϫ^U=((JD$p$@+gԼC(<~]8{}=O+?M7orFAyžMP3 U궪y??:-ᵁ "`(b%yCЧN0VAEW9QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEѿORF:ISutQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}vm }Zݬ/}Zݠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|AqOkZ|AqOhF\_VfjtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEɥdW jY @Bѭ,'e.${ҧ?"~$d|[^-G-fRҦ,1/±hH!x6Y""bp~3>7Qq1h{>Ǒ]_3QyAv +_OPEP\ xC{+Xkv煿(gH5+Qwk!EG#CTk_/J^* Qs{_F|-y/-dxIG?5|a}qjcefS1_sh::Z߈ Ivd9hEQEQEQEQEQEE.3U.3U?Jo צWWg_f2 +( +( +( +( +( +'^|Q_ѴHݰ|6,DžS_[Tq%Q"{P774~-TVf~c;P{3Oױ<9mhec 7VIZ(((#^ +>/G#"2:pA@l|=7%ug`n?.үv3"zٯSitmwKf`;S^@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫪 PIq\ϓ/OkVVR1VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLXE4(ɠvWw㈁cs::'?/u'{`=>}1ּ3f9$kcRi瓊T}[.~M3tEvF+mvxͶŠ(AEKoo5v> M }+eO|߸/ѧܬ cֶ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֬y# +grAq}[漙&mJ鱆4z(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((tOeAip?i]HǣhZXn'@9E>xe`=I8m h tSlۯ$>WUm>=;M]) +}?Y(( /?jIMql1Mt|=}4i9,a! d+@5/CٓNdQ/WUퟳna>,zC@IEQEQEQEQEQEE.3U.3U?Jo צWWg_f2 +( +( +( +( +( +( +( +( +( +(څ:nup`*O(}fu xW2"1Է3Է}\}Iɨfzm?]־t[/jL,C7f׽PEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq1a{[}z8?w?ӯӭD.i2*T8M ;öQF/!Qׄze1di~Kd?{sְ}f]{FᦙgEP#M#<V:U+ +( +?_ m>f#Nx3Lw4la{5negan@GSOskOzZ#%Wޞ1|)3¶|}]-WF +Z!G*((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((jZE\\$1cRkK +Umo<s{κ:;T{|yaow|8اC(յn_7EAjϢ ^ԭ*QEvQ@Mkkq{r9¢ [VA;ִOieG+r?ӥyʝv:襇z#h]k{fS_Oz"ƊQFE||EJBhQXQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|H]35\Kr?"k*w&wyֺbAկatFH!n%cw% c~>,nY-MuiP} WTPzfV1iڿݖ >ڮWL^m$y71L=Q^G76-{h(((((("$ ^ ?ޕ^!<1]j]n8粨IW,=IwI3a#"$u@Q^wG=[8$?Č`}E} mᏇZmRM=C pG]PEPEPEPEPEs2m>ȱnH_F|E^5 !k_]F|E^5 !k_]F|E^1_jC?^U¬]:+qߚ Z뤿)ZmKC*&@OH-甿֢ RChyK j+' o/?ƏH-甿֢bI 2PEEs:[ UZyK j+' o/?ƏH-甿֢ RChyK j+)5wuQ'֭QUoR%EffyK o/?ƀ5H-甿? RChZyKm.n@МcQ@JRdGb#n*$_kQY?[)!4Am< G$_kQT8ehGRw͊@V}֯ BYq(ByK o/?ƀ5H-甿? RChZyKW#4j TQEV\Rf)IV*qߍ7 o/?ƀ5H-甿? RChZyK o/?ƀ5mnVf@Bx=jj(vǠH-甿֢ RChyK j+' o/?ƏH-甿֢ RCkR7Ē@e 3@uy- G$_kQY?[)!4Am< J\hV({zQ,+0-_[)!4EdAm< @VO$_[)!4Eg[k0\$)8(^QXXdm] RChyK j+' o/?ƏH-甿֢ RCj͖hB@h(^K㐲㑌T?[)!4EdAm< @VO$_[)!4EUVPuZ+.Mr)^38oƀ5(H-甿? RChZyK o/?ƀ5H-甿е[u + "3fyK o/?ƀ5H-甿? RChZyK o/?ƀ5X@ }QQ\ζ3Uzֳ RChZyK o/?ƀ5H-甿? RChZMzTE.IA5@UkԲdYm-Y RChyK j+' o/?ƏH-甿֢ RCj[mf #3t'tEPERԢuYذۊ @VO$_[)!4EdAm< @U+-N+Z8ԅbEuipмr\r1Т RChyK j+' o/?ƏH-甿֢ RCjw8;Q@&oRUcMyK j+' o/?ƏH-甿֢ RChyK j*Z +)#1k+ o/?ƀ5H-甿? RChZyK o/?ƀ5H-甿ԍı$C mgKEdAm< @VO$_[)!4EdAm<Ҧn"$բ(^ޥK$ mj$_kQY?[)!4Am< G$_kQY7 +G fN1F +(WV.";q@hH-甿? RChZyK o/?ƀ5H-甿e{+G:lP( ++>Wx,c$_kQY?[)!4Am< G$_kQUlFhՔ)V˓\W)*N1 J+' o/?ƏH-甿֢ RChyK j+' o/?ƴ-nVf@Bx=hj(vǠ RChyK j+' o/?ƏH-甿֢ RChyK j)$(azuTW3^uH-甿к[Kv*uH-甿kPObrH_`?Y^M$jms:F !%=hAm<\kV +(׷e"~ZEdAm< @VO$_[)!4EdAm<Զ7 +G fN1F({Eb#a[ o/?ƀ5H-甿? RChZyK o/?ƀ5VZWq ]+>Wx,cEdAm< @VO$_[)!4EdAm<+5e +pwP( ++.Mr)^38oƛ @VO$_[)!4EdAm< @T6+wn ![<5R;Fc W$_kQY?[)!4Am< G$_kQY?[)!5bI 2QEEs:[ UZyK o/?ƀ5H-甿? RChZyKMzTE.IA4EPEVK(I/H-甿֢ RChyK j+' o/?ƏH-甿֢.n@Мc֍QTu(]VDv,26.Y?[)!4Am< G$_kQY?[)!5fSV4u!w|ؠ QEV}֯ BYq*H-甿֢ RChyK j+' o/?ƏH-甿֢_G|ѫ(SPE&oRUc@VO$_[)!4EdAm< @VO$_hZܭݺ̀lzQH@3@ EdAm< @VO$_[)!4EdAm< @Scq,I P>(g[kw*@Y[)!4EdAm< @VO$_[)!4Ee&n"$ՠ*YDHߖ,Y?[)!4Am< G$_kQY?[)!5-B:Ѣ(^QXXdmVyK j+' o/?ƏH-甿֢ RChyK j*hBWhϺᴸh^9 .9hQY?[)!4Am< G$_kQY?[)!5r;fYBj(˓\W)*N1Am< G$_kQY?[)!4Am< ۬VM@5 @VO$_[)!4EdAm< @VO$_jFX@ }QQ\ζ3Uzր% RChyK j+' o/?ƏH-甿֢ RCiS^wUKqjEQUoR%EfK o/?ƀ5H-甿? RChZyK o/?ƀ5mf #3t'u@U+J+U VO$_[)!4EdAm< @VO$_Y⽕H]6(Q@uipмr\r1 o/?ƀ5H-甿? RChZyK o/?ƀ5W#4jTQEeɮ[+bb G$_kS%8"yeu4(&Oƺ^jn/<_Pg>gxQLm8{A=|Li/3Kir^'O/Zfw,YrIjeUGZKl((4ZG>Ai.NȨ+Rw!ڈ +/|-5I~ZuH/ +i:'m ga.F?(]7$_z|SV{x\C߫kyK o/?ƻL֢bI 2PEEs:[ UZyK j+' o/?ƏH-甿֢ RChyK j+)5wuQ'֭QUoR%EffyK o/?ƀ5H-甿? RChZyKm.n@МcQ@JRdGb#n*$_kQY?[)!4Am< G$_kQT8ehGRw͊@V}֯ BYq(ByK o/?ƀ5H-甿? RChZyKW#4j TQEV\Rf)IV*qߍ7 o/?ƀ5H-甿? RChZyK o/?ƀ5mnVf@Bx=jj(vǠH-甿֢ RChyK j+' o/?ƏH-甿֢ RCkR7Ē@e 3@uy- G$_kQY?[)!4Am< J\hV(1ؔ#n;SoR%EfWM Dq _H-甿ӆQ4)*` pjOtvvRU@VO$_[)!4Eg[k0\$)8(^QXXdm] RChyK j+' o/?ƏH-甿֢ RCj͖hB@h(^K㐲㑌T?[)!4EdAm< @VO$_[)!4EUVPuZ+.Mr)^38oƀ5(H-甿? RChZyK o/?ƀ5H-甿е[u + "3fyK o/?ƀ5H-甿? RChZyK o/?ƀ5X@ }QQ\ζ3Uzֳ RChZyK o/?ƀ5H-甿? RChZMzTE.IA5@UkԲdYm-Y RChyK j+' o/?ƏH-甿֢ RCj[mf #3t'tEPERԢuYذۊ @VO$_[)!4EdAm< @U+-N+Z8ԅbEuipмr\r1Т RChyK j+' o/?ƏH-甿֢ RCjw8;Q@&oRUcMyK j+' o/?ƏH-甿֢ RChyK j*Z +)#1k+ o/?ƀ5H-甿? RChZyK o/?ƀ5H-甿ԍı$C mgKEdAm< @VO$_[)!4EdAm<Ҧn"$բ(^ޥK$ mj$_kQY?[)!4Am< G$_kQY7 +G fN1F +(WV.";q@hH-甿? RChZyK o/?ƀ5H-甿e{+G:lP( ++>Wx,c$_kQY?[)!4Am< G$_kQUlFhՔ)V˓\W)*N1 J+' o/?ƏH-甿֢ RChyK j+' o/?ƴ-nVf@Bx=hj(vǠ RChyK j+' o/?ƏH-甿֢ RCj>6E8}i.NWbm%vo_ZFk wAg>ǷkM֖G~w?Zke?ng\WHu=VX77 4z(J+܌TU8oVQEP+sE_nY ?YU +Q曲*1rvF]֣tpEm,q8,Ԛy_K bBjZ*YDHߖEdAm< @VO$_[)!4EdAm<Զ7 +G fN1F({Eb#a[ o/?ƀ5H-甿? RChZyK o/?ƀ5VZWq ]+>Wx,cEdAm< @VO$_[)!4EdAm<+5e +pwP( ++.Mr)^38oƛ @VO$_[)!4EdAm< @T6+wn ![<5R;Fc W$_kQY?[)!4Am< G$_kQY?[)!5bI 2QEEs:[ UZyK o/?ƀ5H-甿? RChZyKMzTE.IA4EPEVK(I/H-甿֢ RChyK j+' o/?ƏH-甿֢.n@Мc֍QTu(]VDv,26.Y?[)!4Am< G$_kQY?[)!5fSV4u!w|ؠ QEV}֯ BYq*H-甿֢ RChyK j+' o/?ƏH-甿֢_G|ѫ(SPE&oRUc@VO$_[)!4EdAm< @VO$_hZܭݺ̀lzQH@3@ EdAm< @VO$_[)!4EdAm< @Scq,I P>(g[kw*@Y[)!4EdAm< @VO$_[)!4Ee&n"$ՠ*YDHߖ,Y?[)!4Am< G$_kQY?[)!5-B:Ѣ(.Mr)^38oƟmsprnιDw ̍FH)=>QY?[)!4Am< G$_kQT8ehGRw͊@V}֯ BYq(ByK o/?ƀ5H-甿? RChZyKW#4j TQEV\Rf)IV*qߍ7 o/?ƀ5H-甿? RChZyK o/?ƀ5mnVf@Bx=jj(vǠH-甿֢ RChyK j+' o/?ƏH-甿֢ RCkR7Ē@e 3@uy- G$_kQY?[)!4Am< J\hV({zQ,+0-_[)!4EdAm< @VO$_[)!4Eg[k0\$)8(^QXXdm] RChyK j+' o/?ƏH-甿֢ RCj͖hB@h(^K㐲㑌T?[)!4EdAm< @VO$_[)!4EUVPuZ+.Mr)^38oƀ5(H-甿? RChZyK o/?ƀ5H-甿е[u + "3fyK o/?ƀ5H-甿? RChZyK o/?ƀ5X@ }QQ\ζ3Uzֳ RChZyK o/?ƀ5H-甿? RChZMzTE.IA5@UkԲdYm-Y RChyK j+' o/?ƏH-甿֢ RCj[mf #3t'tEPERԢuYذۊ @VO$_[)!4EdAm< @U+-N+Z8ԅbEuipмr\r1Т RChyK j+' o/?ƏH-甿֢ RCjw8;Q@&oRUcMyK j+' o/?ƏH-甿֢ RChyK j*Z +)#1k+ o/?ƀ5H-甿? RChZyK o/?ƀ5H-甿ԍı$C mgKEdAm< @VO$_[)!4EdAm<Ҧn"$բ(^ޥK$ mj$_kQY?[)!4Am< G$_kQY7 +G fN1F +(WV.";q@hH-甿? RChZyK o/?ƀ5H-甿e{+G:lP( ++>Wx,c$_kQY?[)!4Am< G$_kQUlFhՔ)V˓\W)*N1 J+' o/?ƏH-甿֢ RChyK j+' o/?ƴ-nVf@Bx=hj(vǠ RChyK j+' o/?ƏH-甿֢ RChyK j)$(azuTW3^uH-甿֢ RChyK j+' o/?ƏH-甿֢^wUKqjEZ,Y$V`[o@hH-甿? RChZyK o/?ƀ5H-甿Y!H ?hEQTu(]VDv,26Am< G$_kQY?[)!4Am<JSV4u!w|ثQEgj\4/b4(H-甿? RChZyK o/?ƀ5H-甿e}3FNEPEeɮ[+bb RChZyK o/?ƀ5H-甿? RChZnd+g֦G`zyK j+' o/?ƏH-甿֢ RChyK j+' o/?Ƶ#q,I P>(g[kw*@@Y?[)!4Am< G$_kQY?[)!4[8?ƀ5h(׷e"~Z @VO$_[)!4EdAm< @VuB:Ѡ*ȎņFP+' o/?ƏH-甿֢ RChyK j+' o/?Ƭjq^Ǝ.jiD0  Wq\W@eq:wc\WJԢa";dzyK j+' o/?ƏH-甿֢ RChyK j*w8;QYrkJ%X;~4EdAm< @VO$_[)!4EdAm<օ۬VME4VO$_[)!4EdAm< @VO$_[)!4E67Ē@e 3Nuy @VO$_[)!4EdAm< @VRk)rN:Z(^ޥK$ mh G$_kQY?[)!4Am< Rk0\$)8 ( +*ȎņFUoH-甿֢ RChyK j+' o/?ƏH-甿֢Yjq^Ǝ.v +(^K㐲㑌P G$_kQY?[)!4Am< W,FhՔ)@(5xxRTo$_kQY?[)!4Am< G$_kQPܭݺ̀lzQH@3Y_[)!4EdAm< @VO$_[)!4EdAm<֤n%$gހEmn8%WhZ+' o/?ƏH-甿֢ RChyK j+' o/?ƕ5wuQ'Q@Z,Y$V`[oT RChZyK o/?ƀ5H-甿? RChZζ`HR97BqZ4QERԢuYذۊEdAm< @VO$_[)!4EdAm<՛-N+Z8ԅb.EQYZ6 !e# RChZyK o/?ƀ5H-甿? RChZe}3FN@V\Rf)IV*qߍjQY?[)!4Am< G$_kQY?[)!5krv2@QE#Df=- G$_kQY?[)!4Am< G$_kQMı$C ӨmggAm< G$_kQY?[)!4Am<\kV +(׷e"~ZEdAm< @VO$_[)!4EdAm<Զ7 +G fN1F({Eb#a[ o/?ƀ5H-甿? RChZyK o/?ƀ5VZWq ]+>Wx,cEdAm< @VO$_[)!4EdAm<+5e +pwP( ++.Mr)^38oƛ @VO$_[)!4EdAm< @T6+wn ![<5R;Fc W$_kQY?[)!4Am< G$_kQY?[)!5bI 2QEEs:[ UZyK o/?ƀ5H-甿? RChZyKMzTE.IA4EPEVK(I/H-甿֢ RChyK j+' o/?ƏH-甿֢.n@Мc֍QTu(]VDv,26.Y?[)!4Am< G$_kQY?[)!5fSV4u!w|ؠ QEV}֯ BYq*H-甿֢ RChyK j+' o/?ƏH-甿֢_G|ѫ(SPE&oRUc@VO$_[)!4EdAm< @VO$_hZܭݺ̀lzQH@3@ EdAm< @VO$_[)!4EdAm< @Scq,I P>(g[kw*@Y[)!4EdAm< @VO$_[)!4Ee&n"$ՠ*YDHߖ,Y?[)!4Am< G$_kQY?[)!5-B:Ѣ(^QXXdmVyK j+' o/?ƏH-甿֢ RChyK j*hBWhϺᴸh^9 .9hQY?[)!4Am< G$_kUkԲdYm-RyK񪺝w +ѫ(Y@;-Am<օ۬Vq +.Mr)^38oƛ @׌w%qyK񯋼Z_@mB}j Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((EH +GJ?ywWw{{Y\ЏS (*( +( +( +_Ykl@ӗKCemQ⹚.0h(((((Hg_&H+\~,d kOٲ `|tP`vN??!J݇߃ \'?۳G`KEs3|:e• iZ"t +uѾgqJv#?b2_?C褼dŒ 6΃wI>¼#joX5;6=Z%2\AQ㯿N+g&<# mcMlП eC7z̓f m'nµkO-}yW*n=$\? +. +( +( +( +( + +InHmBH +9$t/4,qF(Oa_-]'_Eѥds;=&o" FxKF"3zð&ccu_Cees;(YgB/GZ:l&[ڃb{2Iw%e hXb|cic|,gmM+A&P}aȍzi{C(((((/$Bi-k=:A#'#*ACgT-(χ&dU|E}u +3ɿ?F|?<7@"_]Œ@y2o*X%w5{+d)oo{41)$U'6FߓE}5_7!.>*hqH2dgk@cX#}?rWSc.bJf'e*5?٠Z?f9j+ƱG4cX#}_iTWGV "9#5z +y]?j 2Pr94]O5?٣y-Eu??fk@])#[?fi,q&.QEcW_scov!b*k@cX#}?rWSce#DƱG4Q]O5?٣y-Eu??fk@ _;hQ 37??ʸC)SЌc.bJf'e*5?٠Z?f9j+ƱG4cX#}_iTWGV "9#5z +y]?j 2Pr94]O5?٣y-Eu??fk@])#[?fi,q&.QEcW_scov!b*k@cX#}?rWSce#DƱG4Q]O5?٣y-Eu??fk@ _;hQ 37??ʸC)SЌc.bJf'e*5?٠FIu]:|wZZm_Emgx´sP봪++@d<ֵCsk w(9hyc 85esk w(9㚭c 85esk w(9㚭ccWǜ֨nma@.#s@mcX#}?rWScݡЍ'Ҁ9ڿS>Z),v( sWScꥫ.b&'e(kG5?٠Z?f9j?t?ft{%`#r>c@y]?v+Xn$˹Aok@cX#}?rWScƱG4tH%Yc^q4r( {V PcX#}娮ycƱG4tH%Yc^q4r(UoU\{ņxΟ.:C@]O5?٣y-Eu??fk@?Ukk {G/ +b0~bx4W-R_!]MTM,dw@cX#}?rWSc:]CC@`x|?[Z핦BF$P!Eu??fk@cX#}?rխQZ?frV#'EP-R_!T+M,dwQcX#}娮yccWǜ֨nma@.#s@mcX#}?rWSc:]CC@`x|?[Z핦BF$P!Eu??fk@cX#}?rխQZ?frV#'EP-R_!T+M,dwQcX#}娮yccWǜ֨nma@.#s@mcX#}?rWSc:]CC@`x|?[Z핦BF$P!Eu??fk@cX#}?rխQZ?frV#'[6Ua ʸ%ih6RNfB$zֿ5?٠Z?f9j+ƱG4cX#}?lT֐+,+1䚞 +nλ*Er~cր9Z+ƱG4cX#}娮yc.bJf'e*5?٠Z?f9j+ƱG4cX#}_iTWGV "9#5z +y]?j 2Pr94]O5?٣y-Eu??fk@])#[?fi,q&.QEcW_scov!b*k@cX#}?rWSce#DƱG4Q]O5?٣y-Eu??fk@ _;hQ 37??ʸC)SЌc.bJf'e*5?٠Z?f9j+ƱG4cX#}_iTWGV "9#5z +y]?j 2Pr94]O5?٣y-Eu??fk@])#[?fi,q&.QEcW_scov!b*k@cX#}?rWSce#DƱG4Q]O5?٣y-Eu??fk@ _;hQ 37??ʸC)SЌc.bJf'e*5?٠Z?f9j+ƱG4cX#}_iTWGV "9#5z +y]?j 2Pr94]O5?٣y-Eu??fk@])#[?fi,q&.QEcW_scov!b*k@cX#}?rWScG8__WW_źE8şRg&AON3rSV_\enx2XxAcP 袊((+a/ĤLʰ>3+wbƳbk4|(f-_S:D^M_W%fNQjWQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((B=n :*Ԟn*GJ=bO:omD} It>?]5WF +Z!G*(Š((((((((((((((((((((((((((((((((((C+vC( 5Uaa ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEek~"Ӵ 2l9HSBS,U؛I]T$Ŀn'g<ƟO\gi-f!ʹJ_W*bP{ijE8 +(+SeΥ{Ujǚpf[X۴wEclwz9ieh6 C'Ԟj|/3[݆NXhYjŠ(, +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((+i-0S ]<$ ??ֽߊ!׾VŎ;=~49]H ƛE}j hxwoFP֮ך WXkinϺ}:Fpzm`?^@Q@Q@|3Lk>0u r7ȇoo*[pc + +/ٯL2kW-wmEμ6/^HRy"tzQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@%I̫~gg!Bm{7l4hrL*Ţzk(ku?NA=ـQEQER3*#;UQC2b@$_4`NFmnOTsBuom4Sc݈UU$ +Xy(i$v +%;h)oIJkrc-Aܘ~$O Bȹst`((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( IK`dϹWEgh[[:L@l +Ѣ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()14h 3QMgknirExWyVm[{nzZrqp:Ti^TřI'$J+ƫZU]|j.i+3/ m>c̕Hǫ֜b슌\3 t'iD\>W3dV~^Y>ZuD{ֺۧ #M_>$qQ#}ꚳ]_`Q]QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEZOtИc/8ZP)}>]-4vp2zTPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMwHFTEfcdk'|=wNFR$/I_ɴ巌?k k{ZS/ĘkbY:*;OZ;ngg9gsj*+pZXx UGQEfQJ$2O@(+CH/˯@d#9Pzں |9uﵶHRijYhs^\\m>T?yWYEkNEZ!EVeQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ɨz2JGLjm;N)$)99((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((i,DfB8k&}?ƺ(#Eզ3FSpsֵ袀 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +mD7|5Er75$*pNGW((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((e X`ޖǾ S + r'M~Ϗmk@v1nTŽ^NOе|@+ 6]:XI'ݟ%CҾA*A9W_-[x [X$rH`t w;QEQ\Ŀwtׂ[qjvgN h%姅-%qyd|IxzW:<3YMA@]*]촫E +zN2}S: #ImWm) c^=x!x,"0z<AV((OJ)9'x?Xt5er7HN;Gh+|7AgSTZ}&X,$#_ƽ7J״r7J/S&e|}@<~4EPEʊY*IOO'omM'eg?/ሤumD , +)jN2}Xڎ>XN#=3V.ZS̺U:)UY*N$ρ^mk4i8AU"A_.n|DY, +( +BBII4_o}-υ?3%1x2O~:AZ v8WhE??tQ@ +K3I5k 8ol"ӛ?kE=dnPy?^ ߃kc@w?Q ߃kc@w?Q ߃kc@w?Q ߃kc@x@MiKVqGS$ZQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUkih*+ֲ!x'h~޵ # RWh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((lG M,p&\o~ xe ZBNNx?uʯݒd{)wiس1brI;KݧV+1Q)oܽkZ~M+p3G¨QEym'vQE +*H t'iD\>W3dV~^Y8dOkJDކuh~^M3lap4-,t:R{sW’s0XPZo( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(OQ{Xշ ++~f3G).(Z( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(/MdNm[x~ӧ*傻ͩfYXAw8{J}2z5ӏ*j^!&M-8Q>+0TaV૊oHO<3<,rI5W@)QJK3I5k[.C[)÷G_a_Ny2NSvhu&+p?ӭz׆hfp.oGqŸGoZm,mTA*j^eR#nzVQEy@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQXsk Ry@^|J=1SϷzGGѴKMca#AԓܞMMccmXAce +mo(pQ@Q@Q@k0/k>5u?C5@:Fd2:\]2_}G@Q@|Jޯ%+?x 㶻c0IWj*==h)HF쎧!Ƶ5 t{0?hYT?,~ xNm|K*,?$V D_Hqx[pPu7? +UG(DTj'׵̍SY\d >NeQ@ֻ |'7ѿhPI<;~Ka4'%K{HzO=:|V^EɄLWPEPEP_ +xF_f}_ +xF_feEQEQEQEQE?/=|<JI_SEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((cO5;n"8?w=~j'8sIRiǚn; yӢ>;QL&NS>XZƵky4ҷ<*EP#Ov:#c[ݎ +((oR-݌y c:C߇7")y{LQ= 3JѬROH N'5هʧ-apOEFXD{?E?ɮ+ׄ#hv#dQEQaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*+m y%HAw8Vcy n}>[x##$|Kx}b r'ske+H# +E:Iy7yDL9?SW##I+,rI&E}% 5:<ԔQEtSccU$H־K쳇D{a]<.̢u[U<zM6$$Q ¢ +汧륆rz^v"$G޺*(Ru%7vwF**(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +մ#]մKAb\ٓ-ɷYGrql[ϋׯQ@ce[[v6o[Am4;3 u?z(((((((((  x =xz&úlzUs\ֺ*(.x +=?O˓uk޳Gc5tPךqVZi4HO(H4K,-d8((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMD&WTff8zY޽xz5tUExW{VIӁmw=ϷA=|Li-w9q8PZW*4U^잟~^.#f9,NI>WVZ\aEVf!E ^%|V#Zqb]NA,j".K@+<+O/P,Ou>FXD{?E?ɮ\> Gީr~t+((((((((((((((((((((((((((((((((((((((((C+vC( 5Uaa ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEs$񶝠(xSZR:傻&RQWgCwyoclS$0;^c_]owACr~k^ u:r׭fW2S' \K +݋3NI4Q^QE0 +*H dY\QI>½_ @ujB#ιxxo)ӔݑԼC/4{-H0}z'z0`O65ă?OAkj(c%8aQŸ_5*b=ݣB]QEnQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]?*o~ַk ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֬ǜkѿտZAq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZfxPG'Z~z 9?T'㑕m/ҮEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPGZ?SB-7wpoA۩.|=zm$gr%&'זxp#8cBc(!U2:k +( +( +( +( +("CI+F3=IW:u*~XuuS y\^W^P;;gcf9$םƥ+_5C^kFᦔPz(+>+mvx;(QRASD!ڈ +|,<@,y,Zң:7iZ''߇7#)y{LQ=^V:5Yi W'5l-{4p > +(:B(((((((((((((((((((((((((((((((((((((((((C+vuM:[s5X>_G_ +ݶkLA(I-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@VmZtA}/}ۻ?*+}n\E!*@;WjV"0jίĿmcď~’I$ԚJ+Џ-5cϜ7yQ[QRZ{pм9¢ Iȫ5/xɴ渐qkhuNOʿAֽ#EHQaUFbhݣ륅oY4C-v+f+9sIݝ**(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O jij  *K-{ky#* Ҁ6(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸb3Z PMa?s=bPEY^-Jdtmcn{f((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֪Zʤ6@u:75?[6ifGNf(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+Ͼ AM +7War-ٽn?SB-7wpoA۩GFGgw%zk}nyxo' $ydi$vwrYI'&ExǓxfY^3KH20K?_y;yVXdPrP~<7]*F_oQzaq\=<7ߑTVqo* CTQEQEQEq0aZ@uu&EJi#{[״X5p"Vs裹 +u)6p?-[s~kz~ךM)GaYb1rDx8t{!EW!QExsR-- c:C߇7#)yyL뼏Q=^V:-Yi +ԟRzkOzZ#%Wޞ1<'}7°E It㟢OEahѩZ\WdqQ촛FHb۩>u'^W_Wm7}x_Tկs}p=z +_Ek/e-# +(S((vWZ[YLOX{קkŽ˭cmD}kW׷SZtQq^Yv<;*úvoC#3?qZT*vczFQElQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMJy-^X?._1\uEv68 +y]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+Ͼ AM +7War-ٽn?SB-7wpoA۩GFGgw%zk}nyxo' $ydi$vwrYI'&EQEQExǓxfY^3KH20K?_y;yVXdPrP~<7]*F_oQzaq\=<7ߑTVqo* CTSd!#@Y~kFEW9Qׅxڏ$h6p?-_s~_K]\N.W??î@^W^R;;gcf9$mU*>~y֗4QEQEkhԼI|-t cdF=XN\'hL tY\DEcz>Gk E}Q?^|+xa.\sQ#}ꛞ/PP+(((((((((((((((((((((((((((((((((((((((((((( xҵk ?~Ҁ)lQ|F'޸,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +yImƥݽ&z+!7es3 Q?4w +'&6?j8>>/N5ADO ߆((ơ #ܿ;?G'~ߧkh?sr_OMk~ jϲ= Q?4w +'&6?3?>>/N5ADO ߆((ơ #ܿ;?G'~ߧkh?sr_OMk~ jϲ= Q?4w +'&6?3?>>蚥ZY_JF=[u,I#1xNMjinƬ?L#?CjW\<ҷv=^Miv|Kg}K#a?Z(TaFVE3+ۓ +($Ks:Ao,v cz>Gk!Eo}U?iQWhδoëiuG(`班{)eۤ'R}IO)k١%a𰠴߸QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[oo@X>> 5Tb((((((((((((((((((((((((((((((((((((((((((((((((k/_/jP_Կ_ר>z+O(((((((((((f}]kvCz +_ |?6\G>ù?4(K_Sqqȷf> AM +7War-ٽn:IYIܖfcII?!qW$呤ff9$mWxaEPEPEPEPEPEPEPZ5/_ ]:Hǫkgû-kgf>y}z{>:^cإn@>'f *GJ=#>X Ir㟢QEaӏ,UQEEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX((((((((((((((((((((((((((((((((((((((((((((((((zT5/@5t5)lϞ +( +( +( +( +( +( +( +( +( 'E #tTW4mxkQify +G$ð?v~m{#ҺyءK e=7K-!uRzW(9Iv$(C +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( v 1P}k;B( +6KcFX3nɫTQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@y)F^;E?7 +hQn;u5HH3ORMy_/ /=$,$K31$$h +( +( +( +( +( +( +( +(;oo +it^}G6qo* CWxǓxfY^3KH20K?^.+ܞǧ?=x-YaC#`{s +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +%B2AWh G +Ԃ! 9rjJ(((((((((((((((((((((((((((((((((((((((((((((((((zT5/@5t5)lϞ +( +( +( +( +( +( +( +(6|+a}Ŷ'{iZ +T~χ:Y'yT/0rQExXQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE.g0;thnReb=N(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((xQE'QEQEQEQEQEQEQEQEutvO+eWW g>aEWuQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@]]\-O(]B4Ď:z( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +* +c;) $ۊ>s?f;*+AIZ2G|'kj +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(rG3ʜv4Eqk]&&;bO$ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫩/Z:/ǜ +֬ǜ +֠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((({m2O4qF:~f$ᕇs#؉T>'c6EupGyYc\\em!^!v~,e<„z:}j}mmTs,bDbp+ĒI'5,}W؏nxJ&}SuHbI#EǑ9sIX(DQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@^{wR$Gv'h=Eaa iࣻ +^ .dpG.}t;0IWM_G +-:9䘂]݉ch=mQE{q>1QvAES((((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@R3R@4VEߊ4;TuT}~ X7H2-㺹=UNJO,UwgkEye[ȳӠ߈2)T&?3d2D+/XkmOowHлh9[|6乯 }73N޲c ?nq=v↏Ev;B)IX5 2-,-1Jheh}Q: !)#S#ZĞ{q!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ/q\W@~EX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPENVtvWMKV\>K. DbJ~OKtXJ;27z2x{QXXBdC(𗄬) K3˟Aa]8|;&Uw%eM4A\\@; +(Erc*1ZQTPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( ++:_,2.+X n5w'Q`حSdJ#:+̮+r,_FBߠ /]d-[c9?v)t#)b=I:0@k®KMHX~R!?X+ D)`wZ,ȣi/ :+^KQ:kx#? a^a]jy5Wd(ӧE/ +($(((((((((((((>eWW=?l?G |Š($ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]GsQ=FqU?AAZ 6Rڤjj((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((p2hWizl:3#&ȵKR=Z~&c{QXXBdC(Gu(,!2M!wb{_CxKV^D%̀Ϡ>~Gf *C^ .dpG.}tQ^bcPa(((((((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷj͔eL[oNH> 5U5?٫ƱF¨( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +*ޫXgwIBʰn!v!.daNZ…Z[); --M&?@?`HDRAlkV&[zbi٪޵gz$ ׄ뺭~ըJoҳ/FRvG]FDsMrGhb?ͱX"K4@?y _Q]_d%V{CmX7zƥ𼤏˥R!O_#)NR݅Q[QEQEQEQEQW4MVeӮe#S)F*vMPO!(-.kzBouB}V+y4*>Q^iö/m-JM#N,-#q:sI|o5OvxMm6E=!3oZ|50f[{Q̓'{%0ouIa/sJz_L,H$A +H8vC]RY\^T44GTQE}qQ@Q@Q@Q@Q@Q@Q@Q@G,ݓ@j?:Y'9Y>QEAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>}"Gghf9?1NKU8uw@((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸeqa=5?٠ +>EU,aBMX((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|AqOkZLqq cEuq`斀 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +*93$H:P?\/K#2ȩ؉T>'c6EupGyYcҹV{~$yc(ǭYGrwo6W>"Բ.SQ?V#1f,Ēy$yf j~K. DfJ {qkyc9gזO^dEqB?d3}꺙?nn,**Y֩?MQPdQEQEQEQETw7yvN݉ WGa7+x UJ_ +p9*-Ez{0u V`3{^7wI.KeާVjxwpGWѶtM&6 ɭz_:X Sy%ɮC kީo'W]RT2\>xZ^\J[tZ^.+kaLbTB]*T)S’ +((((*+xn䷸eE*!jZ(|y93polեҤoI?ׯ_W[wo%K,2)WG c^ ᛃ{f.#|O𷷡|V߆Dž{?S8(O0((((*뺔V& +;=GuJ+ LH؞W𕗅4Is {9s=+u_لJ𗄬) K3˟Aa]WX}!EF+@* +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(cs*E3΋z)2A(h(((((((((((((((((((((((((((((.o,u0/uy3 ~?ZjT".q(=hzl'3X7u-v*$~ >2&{VllFn-@μ&~Ѫ\=U\C,I$z]_۟c,blLxӰc-ְn+@ZdHuWl23-㸭O6ml?3q9m$M#R,.gq?>iWX/oJ?ɯiRMcݞii7 YIi2E=%uW LݧmBc}D7~}jW,'sD(Q@Q@P_Կ_ȿ׬QKf|EWܞ(QEQEQEQEQEQEQEQE|=?l{# ^_3/O՞Q^IQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES "K,O4( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +) Nit_?@CuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQHΨ2{PL} +ra Phh+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +WS._1\t^9?Y>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@U;WNWuҪ3Iij˔WCY {%ӏ᷈~_iAv>q.??c,M(#x_ẗ SGl/WS'ڍ?$GW</\iM|)hfEޯi% ɮf--blA+hyc?XiU)#4_ɑV;637 +Q?3-EsV[.&̺wXfnEPEPEPEPEcڞ>æ\Q~x 7M#>>x[x-a&{ь63zXlj?ʷ y*UVv +$V <-cOt%'tZV.kaLbUB#NT2GV mݕ=D-]=z wsih?1׸]S[P)/y&FhƧֺk_OGF>eв+#u F Q0Eo4?RQElnQEQEQEQEQEQEQEQEQEż7v[D"tq5-><7jR7L$ {z׉-ỷ%VJVa'[^F+ cཟ)MQ\'QEQE{GuJ+ LH؞Q&I?O`+o xJšh$=vӇúa%^WxKV^D%̀Ϡ+ڌTW,v>"QEEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX((((((((((((((((((((((((xm|y(kƞ}N'aɟ"?6K[~)dZXGw"0+⎯6E]~ ?oS)b)7Vx_HG^w^M\{D|ⱤI\ǫ15 _nq=mE%a/ ~wV<=>c++F?c,UGmw?Z"Bo̜~wz>~sQqXWd0)0FR9nggbŘ$J(Š(EPEPEPE5춷f ғijCEtVӚ%?3NJ޴U|7Hq\M~hԖ+>h`Kurpַ<-XydSfMxUmsenx Wx?aTW*(UTtc<"FG> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((._1\u:PEAZՓAZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW?xSM3D2 >šir$<>w5α^뺔& +;(+Imy8U6u8vqpiǑ73+((((((((((((((((((((ȿNd]hfFMs|9klw؃VrN?1">)#nE~oӹCms|Sڬu?sIm<ʌv>xm2O*D;5~D03/_:I]\K;zW,3P< }e"{Mm*,:2Ƨҹ:V{~$<勭.$n_zEαvTT-OY1$I'%)9niNRNER$((((TPI<ZJ+r#԰m{:yjq^vkXЩ-m =Y1gQ^agJR#Jg>b O,Cei|VGζ֗7yv݉ WGa7+I +a?sW b8"HtTP~LU|Pm2-nZ$ؿZ郞(ǡ }tM"6 ɭ~Q[GLcEX(eQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Eqo ݼ,ȥ]d0=KEx<7n 횴TS ?އkxn䷸eE*!ky93polեҤoI?ׯ{/g{~GEW ^{wR$Gv'h=Eaa iࣻ +^ .dpG.}t;0IW𕗅4Is {9s=+#hQEQAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@((((((((((((((((((((jY*h69[ly\œq9%6h"↍EW 9+⦡&Eou-Xk%/,: +!)#S#ZÞO$k,$5#c#wg b;DL`Rbȵa݀E?'%!Џ2.ocˑiem=ܙC"MRd8A`]Чʬ$ynҼؓtQ]QE((((2"sQI4eiťΠ,VV\kp{.]sB4iS(Y[EuyspGe)gOz=.#ٓBq78Y<2 y_d+v5,J۴OpSL5="<~( i)y5wRc$GeNJ*K;bc~Ak-I?`*WnwaS\i]LnGS5l$>?-UgͶN%]y}Gj+;ˍ>+Imy8U6u8vq }_EzAEPEPEPEPEPEPEPEPEPEPEPEPEPEPE2i4zӲ% O;S)?|NIEym&:y +Ƨҹ:V{~$yc(ǭiGq.kaMTfr,b걿\ +fgbK1rMs0_f'$U#A_OB޽ӏ᷈~iet%:uTW<^km⯊/2" E=6ɮf\յ{QXXBdC(K{XdR2Ʋ=]+ S3yb3vN𕗅4Is {9s=+TW,v=8B0VEUQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU p~/k:OѯCo0_ٴ}#E|I=4yGvb??s4WtG'\w'I=4b???}#X^!F~tHdv?؏!]*{}:_6O؏!H_7yGtG#}s4WtG'\w'I=4b???}#E|I=5>va'k:CNS_o%G${UQ^1QEQEQEQEQEQEQEQEQEPNOJ̻asڣ$ ߐ0&Ӣۿz Di=q?`Vl-2(i κbgm롔]OPf +RkĮ+z S0֡{|ٻsMd-5G/D{ߊ4;TuU}?ɬ$ܞP*?x ~&ٌs{wV,"2߈2ЩP&?39EvCfRR[{˫us4+?AEԒZ#0)((((U%@Z@%imvFrAΛ[>sKklrְ*?h4-Q^i0o5> A< <,?f/~<5C7Fz&-<%cҮ=_,~mK{KkDmo+M\sΥ!G>`Zۯq?1½:<wW!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq_>>6=>kv=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP]EOb2*?[ϼ_ih8QuPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\|[eM49\\@;<[/ +iyȒ@D:Ʊ{RdC(vXIrsTW,~/5b]ԥ4Q@Qmݟ>n(QE=Ɵyݤ 6u8`1$H:*(P?RQElnQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP_Կ_U."^z~ QEaEPEPEPEPEPEPEP]G,ݓ@j{# \ؿy?җƽOl+\(((((:e~ר[BG˭8+/Q\o[dG<$v#o>+Z_Ѧk Lʽ5+""9Sl5;`$~]+5W/XךauZLwְn$~"'?,{TWd2j+mRG)Ȳ}i ΰn!x!nOhc9?rWd0hm1zv[5 ~{q?Q]J**Ͷ +(AEPEPEPEPEiZxWٴ۩a +zᮿq2ڏk.O;x4)$\i[#:L#TvXc *޴}L{49xw8Z}2MjZxoZSьeW8֚eť0ʭW!ݞ=i][܏ַ>ڮ 4 a?S:+y&{;zG Mt9Oxv>s~?Jݵ]@="/WTɳUdQEdPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEbI"O$-ՇBR@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@J=/[ϼ_G Qgˍ=vEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׍% 3N!%| +c]TvEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP&8"2JPu5WZ~›._1\vp\r} 9k''t((((((((((((((((((((((ž-g.dAn.}O-m4v˶i??ߊu Ҥ\09+mᶌG1ăơG*J_θeP_xՇBLVaC!vMaö7OwxɱOֻ+8J1uCBf=4 3HF[``tQQ#1UQE2(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +z꾅_Կ_U9/?S +((((((((+{# \utvO?GRשQU+ @ξ5&ݑb]öak⵺YiM _gT08~fRN;h\dBmGo.=`YȹOU_q]?e,\kWOi% +*\hc'8xSEvC&97.˿--Ѧ ď\E$D dz\ e*SB]կFPv]+>+1Ud{QT ((((Zi:>cs8=㈑ÿ]`V{(C&zT9%.0G+EzE†87 YIi2=唏q\sp Q1W4MRee#^iV6uD7~}jq:H}8>O!-4.kzBouB}V+h9渙lcR߇mp^[%M#M,-#q>v"OMͣdQEbPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEMK$vFS6:-FyV8 `/wFu>!H>袊((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((k;*U?'*[6Ucoya Tq_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETSl}Nyk't,kXOUfx6= qU ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\|[eM49\\@;<[/ +iyȒ@D:Ʊ{RdC(vXIrsTW,~/5b]ԥ4Q@Qmݟ>n(QEQEQEQEQE=Ɵyݤ 6uU]6o^iKV3Z; +t>X->٬ +iO[ +g87i[8UWlDp}]e?LwiMFoZTW5|Rl4QEaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq_>>6=>kv=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫩/Z:/ǜ +֬ǜ +֠((((((((((((((((((((šir$<>w4xŶ^L%̀-ϩub]ԥ4Q@qJ3X_kK1iࣲ +E6ۻ>}QE((((((((((((X躦@Ӯ3((ImhgopdO{G\Һ{Æ5}R/[ V[Dy%(O@+ {InĤWMeihōrT`WDrWQM#;xROGx)[k ]ihr?k讈)Ψe<Ι upGhc]5 13.$~Q]Ҏ:( xmQ(:(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +z꾅_Կ_U9/?S +(((((((((((!A QKҶ<+%Oy`s|m"e-Ew +)0nﭠ`Go|.!o@B)\sW5yMoisv-噿?{t ,y:U#{5H4TQT` +u87՞io^`))&?sV«m)sRoey Mo|0`廂W?oZxWBǑ:3?ɭ+x>)h҄vB*(UP:0-W9aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq_>>6=>kv=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPaKi2'MvPVR1VPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\|[eM49\\@;۹iVDy;mVlp 3_2U׮ַm yxvzWt]{VAk-I?`*WnwaEP ((((((((((H-纔Eo Hz$jXWGa: +i2§]jO`%8{w`Lw4Yu kY5X#h9ݽ B澇~ +_C,> j2`i붺k>񻇓b@?z F=Z71<%7HF5` +(:cZ*ES(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ȿ׬]wEKe |_C81+8Š((((((( f9fCwcfWQGK/dMŒeI&v6 4n.g#3|=e lfh2Ol#J @Ƒ訠ҟEhQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQErPn"7#o>6BZ6'=u4PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{M }+eO|( M}ːF=kn(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((y# +gZ(eO|u+rx#((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +*iZyK j*^F6ߚEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\<o?:q/{W_ELǖ[RjEKC+;>[KZm9|q{YSu/gooCڼOxkAy9ʄ2 +(9B(((((((((o,hB$Qo,hB$W>|ij![zmB^V[ɡFE?7WE{Ɯyb}%*QXQVhQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP_Կ_U^.״/FhH^X׆ђ&m9$QE{' QEQEQEQEQEQEQEWQGK/dz>eW6/~4S( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( ++.Mr)^38oƟmsprn΀4h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((M(!? RChZe|\F1W((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((({zQ,+0- 4VO$_hZܭݺ̀lzQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫩/Z:/ǜ +֬ǜ +֠((((((((((((((((((((xV~t;a_K[3,"8ԋWw}䶗p3]r A_AV%Z;mB IYG;\{YJ1SG^"+t>o (`(((((((G"32I=G"32I=?&j+n2yާA[P*:0yWhQ"(n{t4Q^:qXIJiG!EUQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W#/i6{\^^6~*3.X+e8^GQuwoclS$0w8_}4n\|!\fj:ϝp_v1'Y\꺿 Wt4L##'(m@)QEQEQEQEQEQEQEWQGK/dz>eW6/~4S( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]N ~rx<Vd<VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECWl4+nWzQ7|qxVE lϵx>GwQtD$cGjbKE8qXc5;t~XOw=Z袼yS|gRKn(((((((o,hB$Qo,hB$W>|ij![zmB^V[ɡFE?7WE{Ɯyb}%*QXQVhQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQQ4Vмȑă,p4nvo\$|.AzW/h5 ԋuO_./ngg9gv5rur(N^=u[gfx؇qA%E”y` NRwQE!EPEPEPEPEPEPEPEPEP]G,ݓ@j{# \ؿy?җƽOl+\((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((._1\u2Oa$q.$`~5}>@9?Y=Γ&/3h((((((((((((((((((}kYw{:Ao;jJ^e_1Xyv5{x-OWZaOI~~יݧ>/1K"IwWiw9,}I袼 +( +% 7YD,}_=:#w<$cՏa^iH\j 1%GiU}׆N˹ݥŅܶp3^7 5/<o?:q/{WYi]mta4yQXYPtdQE`rQ@Q@Q@:8Y8ѝ܅UQI8Y8ѝ܅UQIq}4(T_SqCȷf= +څ UчʼB5MQ7DÿUljïy֝T3:O8bi|7uX56ˡwUTdT +F5߆ +ҨiZ%u2hoF5߆ +?}~+SerKEk17Qƻ@{GIv2hoF5߆ +?}~(}.Mƻ@{Iƻ@{GIv2_F5߆ +?}~(}.Uƻ@{G#ڟ/9%ɢ}~(c]=oSe$4V#k {j̾c&:Y'՛ƻ@{]=ZŶiP«&^H#1UiJKgҔeδzQ_zEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>K{]`%Y#~6]BUC@ Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]4s" !zW5}>@=>kv4[IZc4e7G=k^ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?jmD7|4WS./3X75$*pNG@(+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ěMIcԺ1ꐟSTTq3V6t&fk/:M0պC?u?yl5]ꗲ^^Hr$1R+:HQ\QE*v +'4;(n$kNG/샿נ+WƗ|ET O?JHcXEHUQaN^M/rإ Yi K,ՏsW袽DVG +R%&Ðj +Uu8Rq=o,4m.hg0yQ,Kˣ +()ȱƌ*O@ȱƌ*O@{ɡFE?7V(J>Ue|>|ij![zz WNiǖ'RQQEfEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEBI]c巌]:s.X+JJ*wXѝ*(f8W/6֛e[Z?-@gʵo>V {\1j5qMw53ug==Z+I%dr7}Š( 5?8xcms\H0#T8M;# uDVgc2Iÿ .\,һZg4y8\H2>n׃ͥ/vS-fV4UH!^>ެExͶĬQE +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ɴyCY?<5._1\uzm_@2*p>v|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +yⶁT(w8 +=I4FqDGs^>*s_K918PV:_QӴxm}Oe1rhjeQG֭: +(2 +(¾ ԼUuul[*o'hT!)˖*4f;->*6yyS||{ =+{|3b-!y7/!'tEOޖ +((xV~t;a_K[3,"8ԋWw}䶗p3]r A_B*^?އx Ɵy-- 6F^#*2>s ytdydXFwrUFI'ydXFwrUFI'УMSTE}MQ")P*'yYl&j+n2yާA^ESqFybQEYQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE 'PUo=.ծon-L yt8/ݡחjztn/gEtar}9c#;|Hm7\H݋3NI4WӡZjJn +( ( z +*Նy]-+ +:Զ\jeO!1O* 3IEC|ucORkf{4Җ~ +N9kxBWWT.j|!+D(İ(((((OQ{Xշ +߷7C/Oռ{h#6qX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEaͮF!B',.ㅢU A[7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPW- R5 ?3ZmL^5]}kB=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +^ "bͷWk't+C/OֵɻIB\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((._1\u:PEAZՓAZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE#2bI +Zk-m-mc!1#AME{4hBOB6Š(((((CUu8Rq=p-N5"%z."L ޭ۵zRN4RQQEfEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPECuwocnS$0;^m/rICSt7.>c?>! ΥXjvúlFR=yGkk3,#?x{/jf[Yy$sw9$e}.CzૈZ +9Š(-ay2MzO~G˝m[!GǿqkWu4JSzNONW{Zf]ig}롊b54TAbդ{RŠ(<(((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Ua ʸ߸/߸/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +(s~3|+kf+T?3{52qy}OUѬd.7ss+|gČvtX>!6ksM^1Xb1nHaEWQ@lwaʸf~1Zgë2^^o3pνL{-}I}va-pOHfG|Vmn1-ˏ]WEh{aX * +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(g_Ӵ+6!#ywҪ0,U؛I]uv~D?7p"o؛;3?;ֹ*0GگWj:ǝp_pmW *mvQEP+OF5zʱ,n>u'd4vFeulgfyqSui.qe+ff[y6]Ң)MIݝ$(QEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+_5ݛ„b9=:7#?/tTP-2xeb[wQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ݽWs$0F7M/QEP@ ;REzQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦy8exLCBWX~h~:牵?MlDR}z8\yc +E;o|KDmvn^zO^ouuq{pS<9;Ihiaՠ}O>YMQEtQ@I ̐+*"+5=x̿e?AGJ}ZggH~=;RentRzw>˝qQkra?:{k[{+t!pME|#W7wӥ-(s@((((((((((SN1.s=ZTP;?[mb%)" +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(0f%IXdRYh^G3U' g=>EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEEsX]Jk º*(7KӥiL ml֕PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPT;'#Hm7Ү@#?/l[5BRy:՚((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +*  +(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((;TQp_m7hʷ3t3{}kjzM\ԌvaZ?_/=hk;S`x'}]wMs{pYOa=Vt{pUZGD+9(r#ꈬTd]~\]Y _VGp)D㴽Y+*Rz +/;\j;o.!Ha*tM2mWO5f{T_K j`J(((((((((((((( xҀ5h[fztv4, >5Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@\jʋ( +@GLԺ~w=QI (mtQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET7r4VH H>lQ|gihZՠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+?Wx4Er7+{MKS$Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t(((((((((u?@kFbpVs裹JMG M,pבxMivKoduc>yװ>Uuz# gwN <>#v]j]W'SWyESk(R(QVhQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQUoM.ծonmvܵX v)4u>[x[MmZvXO?pn#f9,NI5rKޭq% ڟyVm8_V WN)ǖ +├QEdU :T[k+wV==&UҾ[ ~M~kWq߆{.u3kxBhݣu·=Zg48\H2߇~Eԩ*曻;dQE@Š(((((((((((((C+vC( 5Uaa ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEѿORF:ISutQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}vm }Zݬ/}Zݠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|AqOkZ|AqOhF\_VfjtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t((((((((@'ƿ4qd>>Z#*աFdz/S=|&]~e{]6;K( x`V(4=Q@Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((@'V>m339v;s^Q/jzhw}ڻ +VJw>"cB] ?_?:OWnQ_GRïukVMŠ( (HdճxcSشNWxwZf]ig}ӡ)7~^[.52v㏧?z!:'5vN6!N}:1QEjQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[oo@X>> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +Wcwl.bw#w;'tѫ ۲jQEQEQEQEQEQEQE[P-4)// xYڲ|O3¶~eqd?;?x7|Wν)պ1;s\Tihg+ +*Y>$]coz78y^+ǩRU%&xj܊(3 +(Ns>]0f#OJBS|Eӧ*傻0^$tn1Ƿx4 +ۆ bK&tCK->a}:'a𱥫՞>QEwQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W%/i6{R//Po?J֕՗,2b#{Pe7ķ}qA?/X׵vξ.#"}5^*?zp9i44HH,rI4(_c(`Q]w|;..gfyqSUkBy슌%7h[L +2MzO~G˝m[!Gǿ~f=AӴ+o&&~"Y{_GYjC V,PƑƃ +0(#s(((((((((((((((((+ ?~ҷj H˳=rX>G +Ԃ! 9rhJ( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A?֬RbOѣIVb :( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>>IW"{(/}ZݪVrX+#6uv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?j}d,lBkѿտE=il--bsQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE6\\JC퀣Ԛƿt?2J)spV+ 3N]9WjJq߳O<^corEJK{YU袼ۻ +(*;"f8 j敤kWe۴e={~ee֦G2V0ag]sW^(>vG~(kj0ANTcIZ'P +1 +(6 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(M4VHă,p4n7X +ξH#^]/_=nEF.ysw9&|.U:]nZ#Ǻ؛;3?;ֹ*(FdpJr(I +(![#y%sD$ +MOF5zʱ.n>uÿ \QzXۓAף[) (0+f륅rZχ|h'sȇ+֝YsMݝфb+2((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((GX8=k]K}_+C崐>2=jVOOkPEPEPEPEPEx #kh6jdq?,~{}::Nq"Hӏ4ݑxM݁g:$k}wU-⫂l?V6_{\47sGQ#]1XVcB(C(+🂵/\|$8=t +a>gK~(ۭ{5v[BڑQ+s2?~ X ]>Y+rV?Ӡj(Z1QVGEhQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@GT4kSqp`~@:|D顬O㏯uUqZw2Z4;xLCBWXF~h~:牵?MlDR}cI_GR}>yT +(B(зy_TzWwݎQyt9 +Gʹ18Xu={ӣ*7|fe-?+? im9<˷{ +x}\FE)Ѝ?P+((((((((((((((((((((+^H.GL#=+jC(+w?/kb03I@I=: 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Jny@֦'}Jye$$t5R?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEBrk]U?*{AIZ2G|'kj=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +$x#1!/cZC@k]&&;bO$VAq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((()*$T]ZD{Ba;V>w>~2}g{[mֺ`m_c) Y.;yosUj(i$ +(+@ɵq ?JΥHS4ݑQ0GTE,pFI5xw˝eX_?wh#neAkzVm){t]k2iZA +T}ϩ5f+mvv%`)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]N ~rx<Vd<VQEQExƺom3y3Gk> 36IU:G~773\qs+4s% F1C݆癋=zG$ԼK~n c^15EJNN''y=B( RO2E m$B b{^௅m>!En;>}z浥Fu]oC:ҴN[o QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]?*o~ַk ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֬ǜkѿտZAq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEG<beQUOkWmaB''SQEQX$N{_K~>ߥ)IE])(i;#NOt^G8Sƿ.u3O iy:I0W۩\|ax}vs=ϩ?s1~4GǺ=QEphQEVj [=:!团cV߃xa1Ͷaw>^ZӠF9f}X5ׇJ-߅ʷ-#hD:A{?uQ^!.Xz8ӏ,UQEEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ݽ]Lƒ,py%5( ԋuOOtaq_>u* Si{.u?QlAba]M)ҔއxcSشNWwZf]iAO#bb44TAbդ{RŠ(<(((((((((((((((((((((((((*͔eL[oNHPkWcbcAQ=PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP,vvctH%Yc^q5r(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ln20GRƱG5~mec +גjPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPPv&]G8榢(cX#}D"aAԔPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE#0Q Rit_?T_+]\eX09mXgi8ы3PoR{3Np/:3'ʭhRW|D(:|G{+ ZB3}Ӵm^^6!~ڎԛ;3?;ֹ*0GگWj:ǝ}p\F8Dk6+܌#dq6ۻ +(AEhqXۗ7S:q擲M#2Qv\]gfyqSsi.@q!e+ff[y663ukxPm?xA\W9oOSRU%'vQEIE^ +gsyzO?2GIʾOoZtR\Fά`wԼUw;[8#H` +Xv} + +˸QEvQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@2iD$gsw^64ІM=yFmOn8E;s^._zG®"0j_=nAuO_y]LL,rMCE} Ky*oP+()- ¢ }t~Nl}մ? m9<˷{ +Y*_E,<O~;'>HK{XRPaQb]tQEhQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[oo@X>> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*Y62^_$ +Mi+!A$$RKo3N$ܬ_d>=3\>#^xeaLW8y^pb1i獋oR|<,49,%M2+<(miԍKaZ>ޥ[kû2J$cՏk|'7¶م|}tPJ`]e 35I̖R#Z(f(ӏ,OFQEhjQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQER;hTd8W/6{u[Z? =J妮DF +;SWѭMB_/=hk;Spx?\w53v«Wart8*e-#I9'$EEPE9uDRTd]~\Y _VGp)D"Y+*Rz +;6\jEo.!Ha_SWYcimenB_s}Yf+{WwF:XҊ(, +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷7߷7 J,?o\W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq_>>6=>kv=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE5m~RP+8OJ#N0|+i˗{ּĞ)ԼQ}vP' k2Pwy^G9&&Ut?NQEsaEGEHՙUFI>]~xu2KO௅yzᣲ?O'XUTEDPz|~Op{Wn=+IlOX NԟR{sWhDVGJ(c +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(j7 +NzS)۲YxLO6-g-t}ZE&}mC;oҸ7v݋3cM{8\RhuqIis.@fʵo??_ҰhtN_sfah<>ͺA=(Iԗ4 *QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[!\yWaa ʝKo*U +8v(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISt݉& 85MxQ\p4S./3V~m>DXj(UQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ess73$07}O6x,U:ۭLf#oSҶtmJY"c̕yUk +H=.4/ȻEE7(^ޠc@((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((($}sgy6e#)rv漧^6І-?=wapqsO|ELoh~~uڦTzU+*Xu{}JҩQEdQEI&4/ ~ m8dv~Ê}Дÿ-k;SL~ʽGL,t{Qoanr:'Wbqqzv= +tcO`+((((((((((((((((((((((((((((((((((Ԩ@pNhz*[GY#WCa}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU6,pNzTIX3A@((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*e=@?^cߍg~#u%ʴr>{|A}gj/qU=GO TO_i@xtxtiYWQg2{כ?sןsҾ5;^ӣ4dF{cxx%\;֝T/QE0((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((({m<ϱI84-KZ~­C4s$!hQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEt6FTEfcW/V>Gu@{~o3NG~^ YrI;KݧV/0Q)oܹ<ݺa*Wn[m݅Q@ecu^Gieq!ƃ$Z|5T%֢>eN}[НWeчNvr +_6:<y-z<t~ڽKxHmDEQIE{4hBO% gArW嫩/Z7:/ǜ +֬ǜ +֠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+t}~D?7kJ˖ +N1W][ (2W[ɾCRHTWkq\Azm{\꺾?5qNZGAM-4<;}2+ +(W]:ˋl;|?_ZʭhR4ݑQK{X^iQIHDeθߨCv>hVMBG!ȭ*Vk:-聾QZXa#`)Q^FPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((("EI#F3&s}fIOL)5OdOӃcOijq/iȴLkfAx9Z$ZFSDQE{FaEPEPEPEP]'|o'T^.\>#Ȯn3hGgTt?ٚ?-nz-K[\.=R;r |;_cxQ\Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((<[}7¶d"{?V??ȩ'ai;#gW,4;.W׫@;|@$7zDxHǢβbSݎXUa0+Š(<5MO7M{aSۇ$cWA࿆~ 1j;tޫaϠ>K aQ}s=&U=/DŽt +Vqqۗ;oQEzъv=B0\VAEUP/ZgArWy]?jy]?j(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((4[M"G Ѹc^Ӵ+:!#rW/im CCtS{뇸YT{t_)GHu"ﷵ&F+)Q(Y +RB)- ¢ }-eihyV6?<'Nxwɲ\bZܟtν"-aHaADVk +~-_~NXW-exwZv "WҺ(i՗4F* +((((((((((((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^{wl۪j ܏J.&~u׆U?uiʥh|Em3A aWk&A6ɱ9H_ù5I'$+ +X}Vԯ*EWqQEQW"Y3#'Qû3eƥrݡW&'KcZteScu=x~f弃G^gL;l̤a~]V }\FE)Ѝ?P+((((((((((((((((((((((((((((((((((((((+ ?~ҷk_Gvj`7AJ®Ar~L]e"Fp~b(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O52OME"Pc@MQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@o=tީs츝> sH  {o\Ǟ +*CޡEW@QEQEQEQEQEQEQE쟳޺m|GH:5'Z'\}T澌dxCݵVϢ9ߣ6k6YIuFzQ^YaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPETdpĿ%tڝawOy~A6z|]4K/UFB\>:]EMKkwG䘬y|GNťu{'drjjHhh!6l۠5(.S)M`b ԣ,ْh(tOW*֕mxcpr^៊9HwmٯqvWl zZ:yjRgmEW!AEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85YZ3FK3c@u:75y2'Mt:c 9<hQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV|WxZνt?un;zi"K;e֥ѹB>ߝx]ꗲ^_\<=Pa<^>4j#W.UyI'EJNN<)S|waER$(U,TIz4^G<A__Jҕ)Uv.X#uʳm4vߠ+ݴmO,NX՜jq KH0WCKMϠa!AiQEtAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPELO6-g-t}ZtR\WbUٺ;UQ\$Y.@fɵo??Z{ >m_c) Zo5KyocUZ(i$ +(+{@ᡏʵq ?OҳR7dTb4FK3QMwmswXf7]LJ#x}AuA?>oWͥ/vK ++XieY[}O4Q^3m+lQE +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(>g|Z.b3e˟3+aa-Š(B(((((((F"2ee q#5}#῎:} 팑D?2>y +T\ -_xo]4nۤbP8oҷ+EJơETQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEy//3E]%}/whѝiAj&u7"̟jԙs-BG|G)/6$vXǦ{\O{u-M<^I$b$}6JF2aEWq!EPEPEP}ߋ~"EnCL\kpĕ?Ur=D񥏟3Zı}Gq2+:jImu Hke.h/r6*I-cZ/vljZ.NNOZ(,(*ޙX[EQz{u/]m_*%q>ߞ+|;7?fly?/!'t>Uuz# oy8y{Swފ+؅8\GN)ǖ +(@((((iZyK_+/bi#VPoVk''t(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Phl!0X N1ri-؛.Q\_, xߥUu}GSvW ?B7?g_/Gq?SvW ?B7?g_/Gq?SvW ?B7?g_/Gq?SvW ?B7?g_/Gq?SvW ?B7?g_/Gq?SvW ?B7?g_/Gq?SvW ?B7?g_/Gq?SvW ?B7?g_/Gq?SvW?MIpG|c v'ֺ@< +Nt5fi)+څj7 +՜W'/:f}4-?C?:SWn +.WR?u~'=\La՝$ѕgoW;;gcrI_CCNyi)(܀$ @YӮ;yoAܞ[߇wڞˍH!qQ[[)܎}Ikf{tJZDqmmgXeկ]"ƊUF-+˚ +qB(K +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +{bPHW+ ?~Ҁ'yK8eB :]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\Rf)IV*qߍ>Y!H ?s?toS?(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((($I8 ++7 k|_mл^<,>}ڼoMoLSNHsv+.$_%vS ~OLCy-Iqq==M31fcIu):TcQEl ((((((((#(ж;]fR? +B2V~>&ںm047WRmd|Eqp6)M#v;]ۤfP +~'^$ж3[EW7ZRH-j(:'_H;wu=>V\Lovje}^#Ǿ6?^ۤo'?t}kPPQE QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQY>%|/b󘭣nܒ8ɤ`q?#46@uHxϿP?>Hij3ORM^ukwz&.ފ;(}+>%++(((((ō֛} 9@6ص;`ud9*|⻯VFe ͈W;Tef}EWԴ{I%# ՊF7 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +{zQ,+0-5C@$_hZܭݺ̀lz]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +)f 2I^W_kxz@r^B'kgVi+ƵxQ4hmΤGa:ηk{4=vFI$VWgff9$kƯWqsv +(P;kX^i;R4$ _b_|2CYW?2CIʿ]O>^*\_ '~a_j{L̆;[HR#R4TQ^ǰAEPEPEPEPEPEP gArW嫩/Z:/ǜ +֬ǜ +֠(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ȗE\KO k|/2*|(Š((((((((퟇˻MDD.۔~G7^6І-1?=s4W?i:իOi.^UQEfQETֶ ok 3* 5h;uxAba]M)ҔއgSl ~Ww:fbiAO#ba44TAդB0Š(8(((((((((((((((((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE|(=:}NT!)E]ΚZZ5ޥ{iS^oTlR#ĒpumSXԵu_\^Ni 3{ +(e5%Ge&4x~MFal7/_j:ٿŏBfj+ءGX{ +( +( +( +( +( +( +( +( +( +( [6YX""bph:+ҵ/4I [yeOk:#4>qeH+uT$h͢+aQ@Q@Q@l>-i/Hc<ʱTi??:ֺ|9&L +"c4s-AQ^iaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((((((ghjzP|DTw?@rHFHꈣ,p&_< ԚRC ?&~{7.]07ac>@+voӼ9o7 !?uhL6yRFWQ@eJ{4G ]ׇ>xCWt37M> +N;I RX2pjj<׼|'Үf̶K^`՞I76Gɼsf허U=u; ??v`>u; ??v`>u; ??v`>u f|Cj\̮FcҾEH%_MS趠袊(((+_4Gw'Vg xHFWc裫` yVF~=#LH$ C-oS/kٮp=P\^ v?d4ȗ!ji2,rцr KPU%OU/CktTxc5r诗pt a|I,Q¬Mn=s͕e m2X*zhz( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((jzc%Auf=OϰxMnf+d?3{Af^&ԼO|noʮ|Wzz.#Z-YŊ?$gkg3qQ^f>y}>P)XJtR\Wf3x[XC&n1O^Oiź׎1-ӏG4-;-> :*>>WƖV{\(YQ]gpQEQEQEQEQEQEQECY\Ubju_+'t''t(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((w%?W;SCZ xz̊<6(hVMBG!ȭ*(R4ؒJ(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((s'cRR29oW74.xP$}+o?'$pxy"Y݂ROJo|q𾉾9W^1nq>/Q7js܌b'lkA?*įbQW$fv;|agėٶǓe${?Y1$OzJ+էJՠCw +(QEQEt|Vt2Vne"#2jg8^Njevuw 8#.\tMkl-^hfh-t {8Bs}O.mNSW|A42[$3Fta#WП>5ܛs"hø9~{6"8|՘QE (((((hCW-V%_载ݮ'׀oվC[ot 2HSsd?p\m+Use 2?y |WD3+o-/e"?S\&MB'SGQ-$뺞&OIF=Q[(((+OJ0:^ygv3*YRqRVhM~;xOڷoi:c''ںwh ۺ̿\~S/xB>~&x7Z-uT;al|]R:Hedar |#Z:f诿L/,r|pkMw/SΓznչQvɷwzOKu/m }pv L +SG\Gշ׭;s"9Y"dUƸNpvw((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((#Xul<bKW }x2e_6[rڨWL9h_1EW@QEQEQEQEQEQEQEW|!%=ŜNw/sH'-3J~WB.Ҟ}EWΚQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((( +zgiWZ+[h̒9s_9d\x?OOsz&{o ZK-ՏC7⾕V~$"t9.8Տ@=W.uMF&E$^W?aO +_J^]c_:&<ß}%&+FM +} 9~x Gݱ||_Mf99h}>cmW_|dNs.,uR<$;}+Z(((((("B?տbB?տ? _})5=HM*$+O?vWWg_f2>@%’BN?vQ +K ;o+(R_^9]>0+-SWer_¹=O}EQEQEQP]Ceg5̂8 ۢ@}{ F-]oC!IyF,%{.` Uѫ? CSxJ.h|hl'>Vok +C + * 5xU\CˡS-(s@((((((((((((((((((((((((((((((((((((((((((((((j{}Jע9O?lѣa#⦢ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(9.eug$vw RI TRrr= t4PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEWPԬtF.൷^M En TWoASp&|?ߐ׍xW|U;Ioux r"kСWD9}ok٬#Nvs^5o#ä$zEt<F+m +ZwD9Muws}rwN/$]ɨh@QEQEQZ'Gn/1~Uy SɲB%mlf#\Thr1C-ĩ19¢)%#? +@U-T:w-$( '|-ƞvQ[Ng.JuSk_+hsXo"_ׯjſ%IaAm_׶io1 j#BW#GW0Rд-;zD:fn[D8ǹ>E6B(EPEPEPA=(9_7ݺ~S`j߇69诉~_)Sd.v[OQARO)jz-/YS/_j]z.> mwqt+)]ȱs\7\&>nsi׺{HpwSM~$:l_=Ӯ9/=\&h[@O(kk&OIF Q[(((*j>+x+XڰA! a#-]|3s,mʺ0`~WusOյ-&_7N.?4_/S%ƺ^Ֆ]-~fjexlR=Ɗt~ 6zVS?Mw +m?\*1'9~]0)H9cWD0uTW:͑}򗕇rzjYᶍb?uC)-G.v +I>;𦕑y9uE]rJVԵ7ݨjwm745N/? ȷEQOQO+xw7*^EuC+GuV.vzfƷYX>|rz|U^xQOT!\ 5|1_q7b3fby$IE((((((((VV5SkFa[+ݨ%e袊`((((((((((((((((((((fkdHS{Z4P)}>[\2Aar~5r(+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k{}:Am$p=MX?סb:[kdIap؎ M_ ~'5sڝ͛)k<1F]òip ՗R~~ExoǞbZ f#&GOdWG@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ayw 6FU'=yd F-%X +򮿬O_$sg;AuojXuoj}gI]|M?Jo צPEPEPEPEPEP^UgFt/UC_FU?hmdx 5[1֪}$g@GE|9G>!sI*`~Hh>_Ohʿh8$k((##(O_ xg9V 2џ%}qf\n\xm$|[jm\~+{+/-l򬱷)?=.WP(#( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+K/ /?$^GnJԌ4Ji#{>&|3bnop/!W/]fἛD9ʾdjz}%pY@;aTbWE<V6uդB(S(dP]O| q"oė,8>;WK௅z Gݿ=+ؠ+h#HmDA +ܽ/s4/[=:uw<ՏsZtQ^I+#یTUESQEQEQEQEQEQEQEQEQEQUM̪8?Z_ *z4J](((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ȗE\KO k|/2*|(Š((((((((_5Y&W#z kksoO 0+:(((((((((((((((((((((((((((((((((((((((((((((((+?S^5m}(B_yLF l +(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Û])B+OcRY2]] D<@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQESd8bieuHeלxgtJڵyҕ]&RI2}|3¾%ݯ]~L+ϯЧ}e6|ៅ^,F`ͥsƤz Wxg7tɫ\v7rjz+ǯW|PH-(P"*z(=QEQEQEQER`ޖO.%0[I((k~fq[_٣[o>;=e$m]?x }y! ?1f@ѪCZ2뽬٣t?)&uu:|7=^i:vheYP}:zEpU$EV# +( +( +( +( +( +( +( +( +( +(0og]u-wnyA_oָ=[Ӯ=87=^EoOZ&gzKMͦ_Yj:)&?jN:HdX%}O7&K诵oxw]u=۬}Z5o^|׺sy?ǫoF_k!g̔W߳׈-w6Y_f?#VqoQ&G]Tj|2DstPA`] +( +( +( +csy}ͤ߂V`Z)4@~4xJگ}Akht_Yl 6?*:+Sx:]am$?x,gkyk}I"p_ +Ջ=BNOcw=ZA!F<+z>WɚGOi;T13nHʚ΃r$o*jeXlR=~ նؤ?yVZ,Wp\zI :5)qh,QEŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((}bo^cWQ}7"Mz 4T֐R [^=#Oҵ  bS\Dkdi==gT~ /oQsFeE,G$+G5$F?rƧ6CQnfTȟhWJȼ'Vq\ҹ=G㷂-潾#}ZnOE|M{F{ΣFWLeQk~Zʊ O3:G~+r/@(jk[w?4Ik>!v2QzPCmPƱ`*(((> iJ٨ډ}# Vm"ۯ:Z⾤`O25_<⽛pL1p6^`1;Wס64e&bb?P(( +( +( +( +( +(>uojXuoj}gI]|M [MӿP?wm4Tu}= 0 `rswif'$hM'o$.Oş +=U'BsH4V5`#YO* Z$$-P=J ~/^| +#F}O#٭((+o~";5>b+ybcPXa_WS\?ߕNh*N>+oZ3i67D_ +9ቭ϶e}E:]@O6D?̚( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((($ m$pɪ:Ƶa=pļGs^_Fu<NzZrqp:Si|;òO%d{*f,Řy&ՕWy?ZKl((1-O7U{ Cۇ$}8Jo*ʰKy$8TA{׷x/ᵦ#Ԃ]j]Tc) >tk/&=0ÏC5zz`#Oީ( +( +( +( +( +( +( +( +( +( +( +((k? W-]N ~rx<Vd<VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEDGֺ*|w"^k[US~EQEQEQEQEQEQEQEQEw +`Szy7¿.k^_+Dzx_Q^iQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[oo@X>> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|R𧅷s-[LHp~& S|,1VJ˻%#MkZ?m~ӫ6q_ V"7 m<5۠ʧ $}+/ifr~PiCZno/xRI9% X4Q^c+EYQEPQ@ydXFwcU$^ែ+Mu6ϙvr=⳩Z%y &<x~+p4.ib Í/ +?)\۶v`>~h*F +0&o%6ZO vV'.OZe#?1׮hOi:}]HorzkFbjhEV +( +( +( +( +( +( +( +(+>> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPF]]SGcrB?:5o-{9"OQ^EmOV&gZnm+UAfVW |:~zLWu<ڼ~+2\)V*=+WZjM5+Tڲ_a! J˕v~ju޷d*jSI\+!Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@U[NMM֩Tz -Q\^gnD0ei#OQ;VK.t2mOJ1s#(5'\#NѬ-Afwh+~0xQmm I?7~ -쿯"y0U,9$GҲ/|ADê}YI+kU[:yvzN3Tk2s>Q,.//{r?W\Fc7TZZ+^;;=;Q;̋g}erz|[]Qe=Q'1sWT0a}ݎwy3K14(QEQEQEQEQET[s(%HԱ?Nm=SfOHCvZ];nsK<~ +kӿg;$Aq/@bʹga3+;0daW7 E?J +x{IM>هnfgR_ [ +lNֻc;GCn?01]f[-⹝_XQ\*)~#hN)0u-~Qm Kk۽F"Ƈ?z<?oBi <c훑L&ׂzep[]G +U(R^T}*\.]Fcw=N&8|9Em7֏z26c~GjįvfEUQEQEQEQEQEQEu<7Q b[G~>~'EIƜ\W=?H{nu2+7ßxLzTf_zc԰,k# o6_Om,q'q#>'IF^su0J 2ogOaNGE7du9VS4(<1 궋Ǖ{p=ߞG{7>;O]hM۞b'Ak(.!'9q6 =AjJo./?9hճ*^5d'҃ǃ1D}(*+þ4 j/sU~8oPEPEPEPEPEPEPEPEPEP_&{tsk*ŭXz$ yv"+h 3\Ew (( +( +( +knMk/<}7"@;]w|qSK?D((((("B?տ7[mV!юﭵ'M=UI5IGP+ ij4#L kv[{u F=T-֖*V{xeS:s:?khöJZ[}r'(w=R]RBkî.,n嵻H."bE"e#YѵKڜZw-G*Ўkly`mv d_{zߑ:Lap> }Es +U+gaZE<@ʔ}޺ +(gΫ0!5}# >mm_ _K~ͱc޿FfkſO QPEQEQE^}H1eub(o. ^\U/WV.";qWk?t: G$_sPE G$_sPE Vl8ehGRw͊+['s:*(3xm.BˎF1PAm袊{Eb#a[ o/?ƫx|?XAm< \Am< \jq^Ǝ.v^K㐲㑌Vr%/ G$_sPE G$_sPE W,FhՔ)\tQ7PQ@rkJ%X;~4H-甿û::/H-甿? RCk:/H-甿? RCk;+[YZh G`zyK9IUPE G$_sPE G$_sPE Z$(azk8?*mgKToPoH-甿? RCk:/H-甿? RCk:/H-甿T׭DRt\I΀;J(+^ޥK$ mj$_ 85E G$_sPE G$_sPOmsprnδk)#]]JRdGb#n*s!_H-甿}7BbyH ¸_x-LMѧWx,c$_fk?U + RChyKv RChyKv묯FhՔ)V&x*ؠ-1JJSvkRۿ7 H-甿? RCk:/H-甿? RCk:/H-甿е[u +6Aq}[H@3KLD@[)!4Am<;Et_[)!4Am<;Et_[)!4Am<;EvѸ$(azuCip5U5Es:[ UZyK:+ o/?ƏH-甿h o/?ƏH-甿h5wuQ'֭qp봠^ޥK$ mjd< G$_sPE G$_sPE Rk0\$)8b?( +WV.";qU RCju@$_[)!5@$_[)!5@]hBWk~I\ +Ϻᴸh^9 .9hW-R_!@[)!4Am<;Et_[)!4Am<;Et_[)!5r;fYBA?lQE&oRUcMyK;7hyK o/?ƹ(yK o/?ƹ([u + _vǠH-甿ӛD\Ut_[)!4Am<;Et_[)!4Am<;Et_[)!5bI 2&+O +pJP:ԵKV\AVyK o/?ƹ(yK o/?ƹ(yKMzTE.IA5T(YDHߖcT(6իC\UhjOtvvRU\_R(yK o/?ƹ(`HR97BqZ5i? +{Eb#avWx,c$_fk?U + RChyKv RChyKv묯FhՔ)V&x*ؠ-1JJSvkRۿ7 H-甿? RCk:/H-甿? RCk:/H-甿е[u +6Aq}[H@3KLD@[)!4Am<;Et_[)!4Am<;Et_[)!4Am<;EvѸ$(azuCip5U5Es:[ UZyK:+ o/?ƏH-甿h o/?ƏH-甿h5wuQ'֭qp봠^ޥK$ mjd< G$_sPE G$_sPE Rk0\$)8b?( +WV.";qU RCju@$_[)!5@$_[)!5@]hBWk~I\ +Ϻᴸh^9 .9hW-R_!@[)!4Am<;Et_[)!4Am<;Et_[)!5r;fYBA?lQE&oRUcMyK;7hyK o/?ƹ(yK o/?ƹ([u + _vǠH-甿ӛD\Ut_[)!4Am<;Et_[)!4Am<;Et_[)!5bI 2&+O +pJP:ԵKV\AVyK o/?ƹ(yK o/?ƹ(yKMzTE.IA5T(YDHߖAm<C\t_[)!4Am<;Et_[)!4Am<;Et7 +G fN1FM'B}O5Tu(]VDv,26tg o/?ƏH-甿h o/?ƏH-甿h o/?Ƭjq^Ǝ.VOEtTQEgj\4/byKgB +@$_[)!5@$_[)!5@uw8;c{D[V\Rf)IV*qߍjWwFt G$_sPE G$_sPE Z+wn ![<S./3@#1ii3 o/?ƏH-甿h o/?ƏH-甿h o/?ƏH-甿h7Ē@e 3Nm?ʦg[kw*@Y[)!5gV\ArAm< \Am< \Ѧn"$ծ.?vUkԲdYm-Yǜ? RChyKv RChyKv RCj[mf #3t'uU'B}O4EJRdGb#n*$_V?αyK o/?ƹ(yK o/?ƹ(⽕H]6*s?PYZ6 !e# +嵟 +K_(O o/?ƏH-甿h o/?ƏH-甿h o/?ƮY_G|ѫ(S<=o (2-1JJSvi[)!5wFu t_[)!4Am<;Et_[)!4Am<;EvV+wn ![<5Pѿտ5 Zs o/?ƏH-甿h o/?ƏH-甿h o/?Ƶ#q,I P>eip5T5Es:[ UZj ? +[)!4Am<;Et_[)!4Am<;Et_[)!4[8?ƹʒ?vQEVK(I/H-甿ΫAhyK o/?ƹ(yK o/?ƹ(⽕H]6*s?PYZ6 !e# +嵟 +K_(O o/?ƏH-甿h o/?ƏH-甿h o/?ƮY_G|ѫ(S<=o (2-1JJSvi[)!5wFu t_[)!4Am<;Et_[)!4Am<;EvV+wn ![<5Pѿտ5 Zs o/?ƏH-甿h o/?ƏH-甿h o/?Ƶ#q,I P>eip5T5Es:[ UZj ? +[)!4Am<;Et_[)!4Am<;Et_[)!4[8?ƹʒ?vQEVK(I/H-甿Wx,c\!I~iAm< \Am< \Am<+5e +pwW#]MTEP\Rf)IV*qߍ7 o/?ưΡ o/?ƏH-甿h o/?ƏH-甿hnd+g֦75~"3f RCkNoqTAm< \Am< \Am<֤n%$g޸?ʀ&g[kw*@R-[As[ o/?ƏH-甿h o/?ƏH-甿h o/?ƕ5wuQ'9RC?Ҋ( +׷e"~Z G?? sAm< \Am< \k0\$)84 +A?W@RԢuYذۊX!_H-甿? RCk:/H-甿? RCk:/H-甿e{+G:lW)Z?QEuipмr\r1 o/?Ƴ5 +K_*t_[)!4Am<;Et_[)!4Am<;EuW#4jU?lPYrkJ%X;~5\m~O]$_[)!5@$_[)!5@$_hZܭݺ̀lz]N _vǠMOO H-甿? RCk:/H-甿? RCk:/H-甿? RCk;hKH0Ͻ:8?*"mggAm<՝[AsPE G$_sPE G$_sPF\kVuPUoR%Eff|AqOhyK o/?ƹ(yK o/?ƹ(yKm.n@Мc1Wt +A?WEP+J+U [)!5[?t:Ơ o/?ƏH-甿h o/?ƏH-甿hSV4u!w|ث?$WE@gj\4/b+)/ ?H-甿? RCk:/H-甿? RCk:/H-甿e}3FNkʀ6(˓\W)*N1Am<~O]4Am< \c^)|>WDȈQvu PxNk!_$&]q.;! +(~$לjzΥy2v!~+ӡ՞*Hs]|EAhkY+q)?ǽx(;Zѿ1=9oĚhbRܛ +( +( +( ++мm{k&ݿLzŸ To+NqPdRg6Fqy/qd/=z +m}@[ĸ&!.~Q-RCEoW_6=)U(.-#ž #FˌNt[)!5^d)ݖt_[)!4Am<;EH$_*k)rN:r|@Q@oR%EfK o/?ƏǜhyK o/?ƹ(yK o/?ƹ(`HR97BqZ5i? +{Eb#av>/iZVRL$GlqZ[)!5̯> o/?ƏH-甿h o/?ƏH-甿h;fYBj=o+.Mr)^38oƵ+:yK o/?ƹ(yK o/?ƹ(yK [YZkѿտ 4ɿIT G$_sPE G$_sPE G$_sPmbI 2T6s_SPW3^uH-甿.bJ RChyKv RChyKv^wUKqjλJ*YDHߖO?? [)!4Am<;Et_[)!4Am<;Et_[)!5-B:*!H>/ȗftI 9Qת6I +( +( +( + 涙fH_R?Q@_ƺ>Ջ\1`Loy~wMcBaKILd[v1^!ErPE~E)4}I|uu]ٹԑWe=R}\2+5:9)#!ᩓJU$_[)!5Viȃ.1(|#5ZTsҸje5ٔ? RChyK%Ӿ,xb <9t*Iwַ+wn ![<5PѿտvǠH-甿ӛD\Ut_[)!4Am<;Et_[)!4Am<;Et_[)!5bI 2&+O +pJP:ԵKV\AVyK o/?ƹ(yK o/?ƹ(yKMzTE.IA5T(YDHߖAm<C\t_[)!4Am<;Et_[)!4Am<;Et7 +G fN1FM'B}O5Tu(]VDv,26tg o/?ƏH-甿h o/?ƏH-甿h o/?Ƭjq^Ǝ.VOEtTQEgj\4/byKgB +@$_[)!5@$_[)!5@uw8;c{D[V\Rf)IV*qߍjWwFt G$_sPE G$_sPE Z+wn ![<S./3@#1ii3 o/?ƏH-甿h o/?ƏH-甿h o/?ƏH-甿h7Ē@e 3Nm?ʦg[kw*@Y[)!5gV\ArAm< \Am< \Ѧn"$ծ.?vUkԲdYm-Yǜ? RChyKv RChyKv RCj[mf #3t'uU'B}O4EJRdGb#n*$_V?αyK o/?ƹ(yK o/?ƹ(⽕H]6*s?PYZ6 !e# +嵟 +K_(O o/?ƏH-甿h o/?ƏH-甿h o/?ƮY_G|ѫ(SK$uu d +?ZiC4 rr, +PGZBű]EyBr+a7l: $?N.F1]ٷkJ%X;~4` 1q57źϪCJ3js{us]gfȟh~$xcOȺa|-~?f|?I>-#c"㠖+{O'w&о 85$\D\^j׌: i r;/W(Y+vcib-QT[)!5\gOmsprnδk)#]]JRdGb#n*`x|?@ RChyKv RChyKv RCj͖hB\kx?$POχ9бHk`Zc}QOy׶W:uw<0I#qv5Myğ^7]K]j%sE|~^_?DN7(QWPu9N8dЃЃ؊_Fj(`QEQEQEQZ+e@]1ǰW4i:M淩Caa yNrO`=kG|=i )n +fa=XJˇ]?rWG_5{w~&э o/?ƴ-nVf@Bx=kF\_Vf4ɿIT G$_sPE G$_sPE G$_sPmbI 2T6s_SPW3^uH-甿.bJ RChyKv RChyKv^wUKqjλJ*YDHߖO?? [)!4Am<;Et_[)!4Am<;Et_[)!5-B:*!H>袊{Eb#a[ o/?ƫx|?XAm< \Am< \jq^Ǝ.v^K㐲㑌Vr%/ G$_sPE G$_sPE Uu;VPw} cՑ A4ZAq}[嫩ѿտ-1JJSvi[)!5wFu t_[)!5w\K=r@ \0ϼ_Wɾ&X3@/+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVn#6fkػ }iQ@!M?-$_@yGuxωxeTҥ/P,z?Vzm,.۟X2Oi^3ĺNib;Ss8?ϵy%bM{[YnE4e}AH%YbU zG>8!]Zx2dA~4>? k!e}cݶץC4WJ*#| [|+7j9hnr >n^{P6otq6 ?*ܢ(((((((:&ߋPWi|%h.>.h' *~N-(yn@((+9O_M.?-}?_*~s~&lMH}f٨r$l&>n>*x}. ((( +( +( +( +( +( +( +( +( +o mkIlAǞY=kh)9ԕeaר|wh_[8U^̑)=&A>?bt_8;{~#"( o'uVӮCjfՠ7Z52Șe(¾c?fxs[<>?LQEQEQE =|ss_y곋m"rp"G'tWBbon? _"ޗ%bݧgW($dtH5Œ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU|K84jVRhbRI«O^}_ xG}W1w )qSCAg#8O_\cX#}'KŠ +?fkW +?fkWQF@NdФ4R uSƱG5~ckq)Xs"@??f@??f@?XYa]O$PEP,vvc?f@??f@??f@vAg5%P2R5Gy(5?٣y(5?٣y(5?٫4TQPS4)'nk?6MպORQW3`[BKt1w<ϵxg K9͵5w{oұX1%ˎ~?>QEz`b=B4dTM,dwQcX#}EQekG5?٫PkG5?٫P֐+,+1䚞(/YH,'=jCyc(M +OE 7QU?kW =SKO2\]]ټ(@f#ӭc?s=bPm4CV5?٧iOe#+۾_] +++ET76ݠIr9 +?fkW +?fkW +?fi,q&Q@Q@lmZd,T`rECckq)Xs"@??f@??f@?XYa]O$PEP,vvc?f@??f@??f@vAg5%P2R5Gy(5?٣y(5?٣y(5?٫4TQPS4)Z),v( S~zh6D@?f@ e2z(\ݲX䊳EPƱG4cX#}EPƱG4cX#}EPƱG55 +?1kq)Xs"ƱG5~ccW + 2Pr955Cyckq)Xs"ƱG5~ccW + 2Pr955Cycc{o'fI. VX!סM\ +(+\ݲX䊇y(5?٣y(5?٣y(&%-mH? [= |& -~@WZӯR&gxFav"9po]k61_]]Z"\C$2TJ G_rz~]ˈA\FW:OF;9㭕+qMqk%g4Wmz7"AWEm#s6%cKJd"\Z8z*kK)7V*IP5{QEQEQEvãa ma*r/HˏL881]D]_F^ݡoJz+O(jMQi_<K9`K/q]fs}mCiz7!}@9|cJ9\52zOm~%yccW(nma@.#sU_(cX#}?_(cX#}?_)åA*d:;Q@VeiQfc(M +OE 7QU?kW +?fkW +?fkW +++ET76ݠIr9 +?fkW +?fkW +?fi,q&Q@Q@lmZd,T`rECc,^R*%8v zw/>bija #N i=R&?LOYho/RY4WZwXeszý$?J4xoIдtu]3,Ke{6|w{Zձ] vq]^k: ⹙oҾEr8>xӿgMZ\K]żM)vYϞ__7:Z+y&_jޅr#M yZ Gy٥MooHepcGZW,NlvEkG5?٫T cvV!IѶS:z?C%ΜVN?N+Z+ ..)U jJ/~ϊڦxrK gu$ޢ\F2!NƊ)??f\?[D0jJ(e OB0ih +?fkW +?fkW +?fkWQF@NdФ4R uSƱG5~c'4kR{)"2G >e] 'u&?awڇ׏Bgh@3ߊ|&YM*an"?!ZoI -a-[#+وb0?y4<41grYOS@ (![yh%xCtbң=;<[dWsv^O^)H&:UqO2}WPߠ<)ko|R7"7:x<\q }%_:[m50{n(z8svQEQEQEQEQEw'dc.}&hsjW5~n<#J66Yh|[wtKp_#}ұA*ArjkoLԃX8e֕QEQEk{_[e9X8G5$*b$/jr.} vF╴-ev5V[P׵f^#;d>fW袊(((((((((V_Do1s$@2WU)p؟KeLWW|ML5H@袊+jbF ̐鵈|qL:W-n=I*}| h xĞdt?N ?t[imch(( ^ !'i*JԊ ?͸l=V?~mw #k9&{ W5Ý0 &]i#?c@=Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE>L(#zF)6)(^<9=."/-#z(jΙj|W3,}K[jyxQ0b_A{z5y0z}<^{4ٯw:jv5*B=*z U4QEQEQEQETsCknJCG555h.uw߯ұZa_ +Ɵt/2K)upV+į;.gy$9gs^WWb13-QXEsKүyߢ@=I= 6솓nȨUK3I5 +X_|E Gdzy?Һ|<ҥ˭ObAz+SS=&^߰HXEDP=QEz'QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\]#C,!9 zWNK +IE]stK'T' Oy_[[SǓ GM/jdj/9*b@uȵ?GsQ^:pX+#RrwaEVQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@¿.k^^MF ?׬/aEWtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@T7wsyq2~BWj+|MÚN4ծGp?ǽx߉+x7fjG9߉ǵz2ujsH3<+]K5˭$ϡ "kuK|z\5,}HڿבQ^ =e??!Ͳ{]֡w=fj(A$DQL(蚦v-t ɻ([o=5^5, w2c#19_һ+JuS$КL][sqmyOb\&{N:I3_WִWu<IpGv7v/-guh0 A_tj/m`hé qzۛ$YC>JAqoU:3݊,nMpi[i{;9CpߥwSam/B\Z8*{ZdoȊ]I$(`QEQE A)(Ih/H5_ Wwt+Z"asW=L% +PԚ>~>xJjߥ穒/1?wzO?]1q7+~U=ȮE)| ĵQxQ_i>>^Xkר7A|һ' 4+Y3 dS(R)~?xVj^zGWv'>v3[v W L5jZ)4ͺ(QEQEQEQEQEQEQEQEQEQYƻ~jY8 +cq>¼-4>h&4|}Jpk|B@|^X{8HDч/5+BC%˞4&(d$!GO鑱Y5Ea4`8cL z3Zc/?xQ_i+G~[10_s]ևŚn'&=p?0kQV?O)TGWc_u]Mqiueu Xdr6Ri-QY((((((((((((((wvp[G?3\O:fD!kmg@E\)N +lWGaEyBxf+ca0JhI+h^\7Cč16T2LͽEΏ('&L~2PL~8-'kάO}w3ȚOQRK"}>|c'"]Ӡaw OQ.oXvoE|EuC')6/h~hu&?*OQ UW?$~W\246ߩ<03jOUS0+ig4#I?Q]1aUQE`QEQEQEQEQO)'Go#$+ӾxT|;=XJN ^YQ%͞]E{9[S 'WY| E wW;7M'oer3j cV#;Jx-+M;plt:mԿFZY+Ccgzw?fCW3"cҺ;u%Ե+a[m}Er6Kk/̮Dy=j }j7l:e?uzw¿i0zVwM\ן6W*+XYvV[Gc? *W;waEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE 'PEp~' v}};Gj%շãCnxܿG}!Hu}F.i-죫a^E/M罐p.n_Pym|}y=WB~z|M>,,)ouqch-EQEw>G8Z7?iJG߀ǽpթxoZ%ٴ}6L&Un_Gx_ޑ}jiu{ Op}+lm4T(cs,KOqi%}?@Gy<o k387k>ڤeWB# +?#@ix܉U'׃x|]yCQulW>m&Wh:IeaЂ:+6uwQ[&c?_ [cY1J$8 ;# MU5 Vou +MV@(((+|=ִM5 :C@]M|Oue^8ݳ>3BAk,&y'[+ٿh97[iSNF1}Yj+oѾM"mQ=pp?|&kls,v/VoA?}ik #XAUFMEPEPEpsfĶke:s*?]?a+7@ErOjO蚯ڮ#3GyS+((9ր +( +( +( +(3? /;2IΥltw~~!MWiph6>q+Pk*k'FYNI?C@~[X6ɺWݕ դ6TFMq*"(v3ѧ4Mi)N7_D?žt}kQ|FW@Vi4iڴ@I +Ƴ>w ȲF)5-y?Ss}F}Z((:]yv$n'=M|Gsiz Mi\L7A +W֧˟Y]w1nstU? +ˠ +h/izBEFA?}̪T`W?ֵ}i͚krGYX|}}@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE>L(#zF)6)(_|7QF>TW%-5Fl(T/=/oQ5aG§}Xq.f1|0+:oz5y0z}>5;M_OeQat ߄ ˺kHavaqNߑ`GQU4NW⾱feX#G[a4連 +(Š(7zF9yu}ׅj~M3tE; +bOݎXa#gž8|UpQɷScGv^+Ȝ7'Nr.i;*H +(HW O/P $ntJbiQYr߅<x ١ķN>Q?}-{40Ѥ> }p+ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(*jSmbpg`lQ|gArW.w0|1hVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEIT"Gop*傻6\񆑡InGoǰk5߈:+Sc؛aI$䜓^'oެH㩋|{kjx?1E{t”y`9JRw +($((Mú.fd +|S:ץh_ ?lړ}q1W_3SHPH:MipZ[H"BQEy +(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ZM"2 9}=G?º6UGv 61X^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@[^axT) qd/]*Ξm տgHsA\WVM>+8oҾi昈nK> *o'P4g"Ww]BC7TC) qokMi?1]?6%|E}~Ζmvh#8?%?#\&Kƺ^ B1V k?Si}TUGG|KO~n!d'JM]QE0 +( +( +(: '>(ж;]fR? +h/]JPAՀ0FW$SmKi?/6i}D?4xc]4rwn_l7_\522_J>,]Gr/:Qwzu[?:=g5]pɿr'U?cᶷoG\FڮWLz=LT^EuC*tS~>"=>{.rG\:~+ R0+ᅣ(f>i4$;'4(QEQEQEQEQESIČz*WE|>vi@BcSl +N0NcCN Xi0ֺ;ra?;z_yU< jW+<Nnw#M;~Ұlt :[$wânxGy]yݽWB@C-w:K1 }v׌7X]5=V_7T}MrPEPEu~q}3K/S,z?{^I?%{|-@vJ>* aG`N{ׅW>'Y𶫦ȡH{85 Ij{Wܓ+Wȵžރ:ߨ](((((7xUQſSHb4$v w:ӂ*kI_v|7]OD^s%pa#I6$,$K31$$hMOzjZOnXzsпg5//=yVJÕ?3{C^L(!8B(P8Ÿ@Q@Q@k0/k>5u?C5@:Fd2:\]2_}G@Q@|;2.5+n^0s>_PȟAR; U!.Ct76' ccO(x/\U',o! PߑK"$CёחVoh9SV~2L K J?jz֗j޸S?Lk≼a{+?yT}#իI$C$f9'|cA|R[xbU)\3~޾xֵKZږw%ܧw=`@kGh2)m-./⵴I%`f'}=IS[$w!HGS۠HYqsmkOx@guQ@Q@Q@'l3x_ŏE/Ss*G/WOn~aqڼ¾?h:>&0Ѱ{k3UFv(r +>Iv +>}rW%m#<ø#_]6=^UQEW?¤kY{yh6*}A J.%Yo#Q.Y1M^+䏿$DҀ>5+-&[B+[X^YX*ξZUmr4/|Z0죰O<]Fi֩szVG/+" +iwz֫kXBeGԞ«E̐I+TD,O@k_ #Sܦ3Pǹ ߃3m Xa~Ljܢ(((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(_ޖaG 7eQIv)IE]c-ﯤŽ1nʢx/oQ5aG§}G|K}Q/ +8?,K=OzƯu]c1Q\QEQEx7W~7.e#Ϸ_чj|W3,}o'n]XGo/קӳ t,Ct$:jv5*B=)c=p@Is+_s+s_B2f +2I8WxO3N쀷+%=/ZR,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((RFo]Ck +IJ0+ju~?yO c"8"XcF`)Q^aicZѮ41Lv0+BJKt&Vg§<Uz=v<<U8K .ǜ§<Uz=ib_WTaT§G,W q +? ?*TaUQ}^c?SAqQ +? ?*?_/y*x0??SAqWG+Az]8OG*x0?z(?>K8O^EXv9O )<5KtpdbێAS]]W-Zӫ.yHEZ!EVeQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((W/@HK.>"ox~=6\I1~CZZwd$}:fhnK{8 \S+ɼMAiJ8!7㶼Q/ԯgnO!sPiZ!:ox+f+[Ŵ_G_ɮf+Ԅ#h#0*((I]~ě%k?FϽ=zΥXSWҹց{Z>= ]~uG~cD6Wmh_5PA IH0ơUGyUx)+>xgzE?-ǩ} ^xcDտFrOkZbVF)Q\ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP&+)IcnC [_6oZZf eE\*Nvx:nm\F$M˷VM7s[[j1ⵘgfi昈nK>Դ=[Fۻ6L29t4m0UA+վ3Znth?N}~L滩1t_Cj65c%k*26 | 񖝹ac`Gfy+zKGQZZ]3<, ?fbiB(EPEPEP֓h[F^"&;?]ޑv;V+-EVx?`TV0j|qLi}!~оں{bFD?]ޓZaY3H)kJ+QF_ hQxE|M^Ј/mTs0C^I |,LlkQV?O)TGWi?>su]*ɏVd_C]ޓenK¸ja+RL+i%Mc;oCy?ߎ>G{YB6|_裟KHŝYkoOeAQE}QEQEQEQEQEU?Pҵ/gx.pȇ"QI՘`;ͷ|:`,Wb;8a?ں0~*PZ]?"yuؐOռWHC*GSFA|aOw{etIEWAECsykews ~W +?3\CZf|Yɛ@?6:+ɵ [+=FChsW'znimuC.Ԟt} E|hơZ!hR ~>$5lh` ' OGغ<;_}%†sȎ{mnm讨d&{F}іix~y}q? ~?x+idpa#+ᡴ~y?#XdAS,,ʼnMGEuF!p*(((((4gsU&Etzw<[x{Pe=16uwo^`ܭ'Gч% ++1Dǘ]^/6X3_6,LJӾQ+[+R<~+ӿgmnlGZb?=Y؉meyȏ ӿgA BOZ4pb-aW,gbG]rk|/9D'>d=Md#'^ǠWBŷvjFr󟙿@8x_5j=b=?Dj vJ,o_bLeg޻(-PEPEPEPEPEP_7Ҿ[|E'T?]7@}?9=**A<_B/h4S;Z&*bd :( +( +( +( +( +FPU*F= -~=g.Y"lI.#nJ]{z'0:U͡e) }M46TWFeaG/Sb>ӷB"eKnys_sth m'Np GΧjV0>DI/,j>((OPw./VIB6^g=+hu8K \.H@>SC !R?_}TVvyWvGc?#@_k8]&o iy=Lv?+2O?9o?ݹtWicwè޺֥ذh<3n @iz?XMxFK?/OwG HVG cF@K@>xwĶx^O1h +( +( +( +/qnܮxhzZP˞2 Isu= +o}yMե͕o24rF_<5KQ^/+Rӭ/c6&شRC6?W+D6:dڷ[cPO-}NE"۩q#?oP|>Emj9p"o_q^EQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQYzc-ﯤŽ1nʢj*R5~z[_I$cHݕE|_xTkŽ!OSޏ^^6q *~X{^.'-cg +(N((((%v%[l̀DZ^!&[uM q/ *y/7KQEAQE>(T$i$rQFK +ew sy2tΡf|-K/Q j*}zz@W}ǭUt=";+ t1(I}[IYI+ )((((((((((((((((((._1\u:PEAZՓAZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ?FNY;E]eյ7D̿H2裚wmtxO:@ ?_¸I&啎Y݉'5aެu9jb:.t:Td /YdViII>(rjjJnaEVQ@jNEqOakд/ +g֦z jT]M!JSiWڵIpS~5">7~!GպYZoipDթ?u~'u<,c!`8b^MEۻ:B(EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(m{z uN \3ec +qU5vqs4pƒ/$Tzx&Otau{W*> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP]D(X` \wZ,Ku0}r]]p8;,xέ;m'XcKY?Zo051D[_QQ]so AMٖZ`X#i'#&BhWCMV~?+idD]ďҹ=GWLw#LW+ED0!3%{LI4ʼnMEE (((((8DRx +$AxŚ SMqv;N;q5uzw6"}R\᡼JgQ_R|e<Mi𶕃e:6۫?rZqE|)><ѵMUmxO+ӾxQ]̉?w~U +JZqQK!4|~:ajhU#?Z4`ꚅOZ ++y&_jޅr#ӾxMAfr.$~iz~,,mS!TtW,ԟ&d(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +*/z+Eyݼov\bA|*:)gcU$W_EiFhW#?{Ҟ$#J)qS<<''.םCnKHa"B@J}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQYzc-ﯤŽ1nʢj*R5~z[_I$cHݕE|_xTkŽ!OSޏ^^6q *~X{^.'-cg +(N((((((|>W\Co(z~ZuK)EAǰv D&m: 샰Jk@Ci ]۾wjݯg 5ga0Pޯ(=(((((((((((((((((((( awlг Gֳ{+bcd14j6욵EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVlcq{ssS)۲f:ngn7~պ5_JFi +rŽP[{;y'*.OB`Ͷ}jm<?: ;Jm6}bsji{;ibk:LVϹ=֬Ey-ΤQE((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((* H˳=]1{+R$@"ɩ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( t(38,űޟkGkr,{ZtPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPESԵ]?GkJ Ku$Nzj~=mH&jyt{F:d odByp>Gzha^vF)0@)h +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(#!<8r+/B( +VrX+#6uv((((((((((((((((((((((((((((((((((((((((((((( 2 sZ kdd0W7yO9=>Va)P^׿Sue=QEfQESIXd+о_^mU쐞|E~lE:*9M( e'V8TE$Ww|26/٣As=^ZnajdaԞkFgW}j&t9ģd <$jk[{;t( A$ +=TWVJw-$ +(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQP^[I! W)4QX J;.718[TQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW54`&˲ R0G^exghZ~TycB?]d&{EWQ@Q@Q@Q@Q@Q@Q@Q@o{=V]V1$`+I S8w:wÃjL:Dֽ+6.ֆagzَ!ɥ+#eqw/);⹑N?Jt3K]~ih1o +?AW()թ?Md(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQYzf7d%8hR~s?fM!M66v,ĞI@+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(ީ_yg'1@Ox}#÷qCofЬܐq^> ^}}y>q{r縕vc3PPxgďxFn q՘O_O*  `}.6j>(>s;RGN?WEPEPEPEPX,]h^=8U3%cWG;0F9܊ڢ>I?<~ SN4 H/dž~!]쳿lN0n=>> B}2IY e@op8N NYe7mQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@UcTE.uI#Mc]ϯjMJ_|7QF>TW%-5Fl(T/=/oQ5aG§}Xq.f1|0+ +( +( +( +( +( +( +( +( +( +(:oz5y0z}>5;M_OeQat ߄ ˺kHavaqNߑ`GQQ[NV\F$CV Ե@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((,K,j2s@hZiHAw`MqĻ=QaǚߧּVu-no2S/+euj?u~?qSgkmmCzy#A:k3O3 +_*th/qkߩRQEdQER` bpt/ZksfFя5Gb M(GTYݎ&] ᾣmIaʽEΕq43ǷbE[진KYz? +-6ʎFVJԢ9MIݝi$(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+7ŏ c|Rߋ۵x';W9Nuݎ޲uhJʬ9oW^&=_|:DqǍɈ|^auws}r7wN/,]ɯVQ9kU!{hX|L}BMk#9X`ʱ(bkߩaEWH()C,PH +> +e~#wdѦjh?O vK-ן: 'OpWhR~E(6|lK%h _!=~&?k߽죓mmž~kU* +Z敪iu~?yE +E4+AkX[? s}_mݖQE +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^qJmKȻx@qr +zCWzu7P/`AuΤgى*ޫhޛvn-fhdqǵTM5tsQL((((((9>]3KE-8쥆O2k2oP|ԉ6"WG;15})OWgҠtQE|iQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +z~l.c. ~5?LJ?_>5s.乽73@axCm$vh3k(((((+Cs.s3J_65_> +)$Q7ꢾ(44LVH:9u4-?SvCc/WNxHOwQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET{@)ҚMcGwM(e*#)4x't(Q?_NV/ o~.;z֝QQEyQEQEQEQEQEQEQEQEQEQE>Vvסߓkz?\}Ga;}zzzxL'ۙp6JQ^Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(f +'-5#FweTQp?]雡N|n^kxUלYȂ?s^,[Y{zCE=]iW7{y-S]u2~T_ˢ> b=Š( (/jeOڞ|ɇG?eV)GnȨRv9P 8$]|>u]wJ;eW~4 m|vo׉h;):<)* y~[tQ^4JdQE@Š((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((C+vC( 5Uaa ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEѿORF:ISutQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW9OoˆHc xOr>sߴ<7`q'/_uuP֭;%#/+*Ѯ -m׬HGkMCӷɩ8>bo}k_\uu^M٦r}(eWȇQ:|KO}_xkW#"ͅ%rzqk:3lO31鹬P+4 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|HL[ƚT=Ne+?9Hݎ_"ⶀ2lҸ~J!8̒/@bEQEQEQEQEQE^s]@+,.}AM}y(y6b}03__T~s~e*f=I1~^(((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()C)V 3YkVT}Ģ6 R= +(B(+мd"yé8T8M;#B>-Θc#zF]#E+Gϛ0?S]=x_7Ge<'Y#C"E- :]WRKnTUQEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVW쩙 maa ʠƱG5v8(4UڀEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>}"Gghf9?1NKU8uw@((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((5N|3XӦ,pꑨ3=I7 m<5۠ʧ $}+|EORھ<"vĿD~=kҡVW6xWA ]-O|7x|0\.ѸG{<} +Zͱ]Ggv,rXi( +( +( ++GI,0潋?ݕK56֙H_Fԥ5;P]+3^ԶO\G۞|&#}Iٴ>.$ѯoRZRVTS +Wdzrvu33@Š+˝I|wfX( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>>i#YcheX`jc:ӡ`nq¯WՏoί|=[xnfgy}~a4e!Ž{=/Fp"6Hm [t k}ժ(mvlQE +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?j 2Pr94S./3G5?٫pAB(tIEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWMoAK`z2sҍ׃4I-eyH}*~t%mxGS]:6^E#C ߦk>xf5rG0б- +GVps#wY*4nۢ%sҶk EJ +(Q@Q@Q@Q@Q@^M{mK3Q|{4hI+|3[ž5ͻjkϙv@}^ExtCQ(8QaUFSJ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +) Nit_?@CuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE? +ӍfGUn[S]ւUXtNs^Wqo=2C2ĴWZg <ؙ7=\:ƛ:v3uC2O[ԎFxƨzc%\1Tֿ]:VyeZwt6c1 7GKL9y&W\/ aS4gA3牮|M Dy5 cW&/SNֽ-`a#`8-yXҭ_vKPHlq1$Q"h(P:)Q^aaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE,G-:/Ч+R(?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((h# մpY'<o@:2;#VS7~5P~Zx,3T? ~ lHwJ9N}9dE*yQc4Qd p̖S=W VY&xNK"f(*}uSy(((+%Ӽ%\ja|>z" +fMN5.bON;s_*xǺ5o߰,kH{2MYlr/EQdEox3@KI[JGhUTPP0xW涴exkmĀֽڀ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((2` +zZ(>!<:SIhbNQ<ھe X`޼Wå4Ə6$=?-c`yoRӪ<ڊ(;|o[==}oOUO s=֩Qz +=p(((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEck^)Ҵ"3÷Mwn{oۆVV]ٍJxIA[ˁg}?Mw(Vu\%$O$Jm:yS9QEz'8QEQEiɶXZ8iS:q擲M#2o 옲cp?ʋA^|5vͩgcߏ]qQq(ª=x؜1h:[g|8tj1{?vj*WYTw;aZ((Ƞ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/Jݬ/JĮAqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@2iT$݂ROJcm#:_)s3[!v?!_0>{/%=c[WvSL,i'U^ ۶@տ=5~0 Vg@=8\mУ̜bKOzJ(B( /8,5 + ͏[81\3f%p?h ǎĶ_a|Y_麽RyRX\2+z|)]oin2E/0}0GGۡs+č'6{a"Ss5HiO/=x5)ʜfQE +(hd(W?~&|6.hl'#C嶻ek/2\>|;Xj0I+}s7 u6<5-tWxgğx<4;3}IױC*OY3sl|C:qy/o5YQ^ (`QETvWZ[Y[Ms;,Pvoרg7u]3G۞v7&#p?XկN݆{O]~x[$Ӛ F=Fyo3? +)}yM$p}@5W_8I|*}$=L>q&p9c9?ǵzjۧ݊(XZIlQEb0(((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(9xB.HI-LRN_k:=z ݳA }^}?፧4=K}jqq ohZvk%'=AGPjEw|nt#^~њ͢,Zo(΁>`>h^S_7>p?t|ZOZMBQ_Q@i }7Tn1x"ϤP&5Ex^Xi:UbCO;^mO+UDEq\z}@{Iy$bԓɨ +>x~$a ypOA?3_?z/a_]xSºg(t.-$~ǹ?JԲӬ`a5(ע(((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +$j> ؖjk~1ji4o?2@?UϊIWoE2QEQEQE>Vvסߓkz?\}Ga;}zzzxL'ۙp6JQ^Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( ++7WIry*t:Z}ǘy俇]x|j +ӿC* E|IQDŸ3O}KQ>nxܧ20?:d摤ݎYia4LL +݋3NI4Q^QE0 +(n\yLʎzƦRQWMUh?aj~f'^|1lh!?]彴,1(¢(~No{~U<+zCоmVR|Ȍ}{bb45TE>b*wvœ`QEbXQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((=.@|yv>;¶AxkBmn us('}kPv>d8bA~'z9~¿"%+sQ6\2I裲gQE}:J*(`QEQEQEQEXoH.a`)~Kd:պfXez[xzPza#Q?Wtjڅ=gIƽz[y@${!lszFTkB{!v?*QRZv-]|7cm w \e#1v׎x^#[mRi!'"ȇp~&+סGZCaEWQ!EPET1d@ Ez~ x;%ivϛyb=~x#m dѶv1k)i{">v> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((4?X }V, bW;33o +4SM^EŪ?N2=(bO %y5-[?u&}I\ns^e~͖Y]~Xh!?[ƶ׃pT +ƛ .!o]GqU['r3yC]B?M٠?O|UpA-8D?f&j,:`A-0m,oR[(1^Q;Hl-~𳍁=~g^_CNYf>vy߉z~ŧvZD00>ɫQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP%!呂)fc˺ι{sq38 ½n໔Fׄ['tuf/%*JQEHQ@Mw~)oy趺B4h|sº:߸ΥXvz,mD^@95˭}#ǜ2迭p3JܳOj*U*ZS)i44,Ē}ɦQEziX +(U+ J[QEsQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[oo@X>> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((#a#))?*)(GW +z\iO?q-^GOi.'i1wv9,I&_cBMAt9ۻQE((((((((+odkjs N`k_tMS]U-rzk 4RjsL1(G7>~c-g/+˯ӎ"7/ ϚI~QM$[ẽ~ׅNēs )G`WIEx|ONŨQErQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}vm }Zݬ/}Zݠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|AqOkZ|AqOhF\_VfjtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEG<[<8л45LFvQnq!3^sWu}FM_X%ZL0*|iI+^(|l]|S~񯣙C)V .5yVڼLߙ#RgOCRwOkZD-^Ԯ ē8ګWiS֧*R:\\5M+uy&RIYESQEKom=/4¢)$ijESY\-M+tH& gf^Eak h徧k洩OO )k->оHg֦ׯ9ot^ZUd}O֭^#Vޝl(c@((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((I R̍7(8@}JBh(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Ly$mF Ƭ:((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+hläi:$mĭq.? +Ա?wΠn#~[+XǹC,ψWzcEWԘQ@Q@Q@Q@Q@Q@Q@V߃-_:F C s"RQM[,Gf>rkӼ3'ĚɵgH\h@>(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((i(Ĉ8au-/TE +((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(ٞ lMz<kiَ,0mO鶹u9)?=Lu_gEyEW|R` $ޒGnj쑗t6}mT"%Ժps{nN!c[&h)EYY(c +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(4Vڃ??gArW/ PpN1KY>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@4$Q(;~&=wuѡD?ކwjjN`wwW6=y w|QEnha}+u-^X ,0F +}Bk}mQG_H4 3Cea<}O_^f'4KH{ΚxiKW Z뤿)ZKŠ(((((((((((((((((((((((((((((((+'^%|)]F:zPb.SvdFA?9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@$Hi$uDQf8{u߉Z}tl0V?:ڎgjjNq4VHƣ,=ɮ]gi&?J8_"1ߧּWMA8Eֳ+eYq7445]oQ֧oRʽ~p+>+،ch#QEB +(IHUgp$/kcda콿WҴ<3Ƿ9:G~_tSzÍKQ6~ny20v*z^,I4;~?qZWVdwSlQEqQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((w`%@s⿃t6,ls"\ndG5?], z ~ rHWÛR֭RU mIW$~5ι ~"ܺrзXbo*c\MRХԇ&<,$rYI?ZmWY!EPEPEPEPEPEPEPEP]_;~%h˵#\z5ߋuf_XlS܇W|\ KqWgTQE|qQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}vm }Zݬ/}Zݠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|AqOkZ|AqOhF\_VfjtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP?k):n%$=9fۈѶy>V%>c?P#E}A~^[W&!ɏ <5d@lM|eEmx /,Vj7 UXQ_B| +|A۽_GMIY&q +#?zL +| 2p2"(*+G/oT {1Wqԭѥ5xoAtS ~hè-k/g8貮U={EfEu> ._?e7H7<}:HSt-.N.TVA>SO~x~2xzzKFXRAPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEA{wAH ݵg[⥱FV1#? +*캎s{9̷'5^vJ=G>ETo}#_Ɩ0ONJthwZO.25U`ҿs\SQEwQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +) + $9$!CҴٟ\15*5+K2b&uʈY*Iw>nOnnS5wpD9Ȃ?cWH⩋oHω5MvLܱ9XSE?ɬ(b,Un(Q@kм [exjyf$O=4/i"ϹnXa~ןh;ޞsdyƅ [W,+SGzxK# 5e<3n^'ZvGu:QElQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[oo@X>> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((kzVj6q3?L)۲Zǿ iۣ"% +/JkuϏ,Gm.Mcݛ#ie-\4.-l-xWI3Q'uύ $rS6Y 5Zǟ_K.G=*zTx-jJ::nFtI$^p5׊m[Vcv~J/6!Š(QEQEQWtSn<3Or>Ix/mkOkTչ;IpkgQE@QEQEQEQEQEQEw im֢~&z#?Ս|//:cts'}UF +3|FfQhMB(((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((+߈jMCjWE^1Gj:^20X~nYسNI'$J(w|y?*mVUz"k M. x`P¨SWž=w(.p Wi@Q@J+uZmUΘg?zh֯#vQEpQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@bkmVl3[tP<5X, `V((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((BMFy'֦Ңu(KFdG(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((]sG|=ovzn|ϡ ~8%7huTWkTk=Ef=|O+5ϊ>1-γ4䏩5K*=eh[|8[Xp33e^k~к5M2YȆ?@I,ŘI'%zT1n=\=krG~t-,Sa[";'igyW,MEEz4Ӧb[l(AEPEPEhY-&4GP͌y;^-v}kF;d5z¯;^ +[^~i} PloE'I.y>~Q{.ɬ6|gCΓz(}B )k֖ͫVKTS4? ѶRjS}\}Am-ⷅ~q E@8:j)$xZ.Aq_k:=z&wzBpG h|oMkVD2cc5ߗc}'TW:uw<0I"aƠN)QEQEQEQETEkm<8d"<,q; +$_J|#[IkQʟe>q\جTp{EF7gQx# m VԮq-䃜ez}r{eEU*J7JETQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^a8$xJ&J(@GFr/QZۢ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((++^F{H©cvkV&mJ鱆5z(+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߯hVUk$y+b|{/a!(kgZ`ּ_鮻7L5w?WQ@Gbs(Z( +(>!/VFsxv|D c\};8|!E5⟳l/R_@?Z((>Mg(iR ձɍWNCk*V+gU`,_ 6}+T-[mŬ4mAʾu]&QSwNξ > PW9x7/;;( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +څZns{1V45Է׳s,4}I955Y,-Ha~fvƼ.}KCoQAt +(,+۾dƦ/e#B- +X!("RJGrN:='Gx<9?滰7.ǧRht(((((((((((((((((((((((((((((nVݦpJ8k? o/?ƀ5W{I~j@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@V #B ܏aߏaӧ:傻5_]a ?jwǺ(v.O\{XlV%gL_H._[[SǓ GM/j樢tJVpgA ץh_3lb5>CI;ڝm8<'kܤy~T= + ~r9(/P@ +kUhgm<zl֥ 2I3~=Nii E V^u\ޔtRϗ4?~3vzKY@O +wl-u0 ~$WQ^m\Ҽv-A#omm3EU3'#𮎊+SXQE QEQEQEp>~92kz+_v?1xzτugY,s9QWڵKU4ruK8nퟬrF}Gף'Cݖ"P,Iw<{+F ūw6t?~.e={u2qhȢ+AEPEJ]r[z}[SsI+CEе?jI6r\G{ +qk`bu : XG#FYϫ1ּNiN%=KSud>3gkK굧V\wfX(aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE2iD0  @U;-F;4uٌz@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@UkԲdYm-Y RCkBnd+gր&(c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((+B2ҦxOG?5}/^KYȻ|{+PWunAŝd8Zk{x,>"xz_Ĭ}0R#@lEQE;|O xnOW|{6ngہym 4_M[ؓ?.%|+X]+m.cKROL2~5QEQEGpʖһBN}1__5d_mdtb+Z+OS'Ë=#ԥQ|F|_R~ܱjR#Ҁ=j(((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((_ǥWw#8zRnM ixKdlb?5T7]Ms3ngiXzJIET#OPl6zn/sWtxf]E_K?&@wWWIy}%QEvQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(kV#D1SBS|Wbm%vk&'AR.ώ sWku=Kt6?6猡̌=۷Y1%$kd~go$rTť]껢?aWK/7ԇ67ڍpn5 ˋY'~fQEv$)QEQEQ['I2JѮ#n_ֽ+Cu[ku1[)f5'@ټ+M|1 =_Qh<msBe/]Cm +IH0P=6q8ԵO^چ5[].#Ky +zV+:V/RTsڙUIN깎"ڷ$T?Iu# tQ\M +(Q@Q@Q@Q@Q@Q@Q@6Hh9Q]aAEqj>m; ϮW-u>xRbLTegY!l\gM?sJm=x^<GU #@Z+GĿ.Tqg?ieY48ӴWemmogkPBv8*-:ƒAEVc +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((+4}*n㘟E9?*Jn um'{WH?(᪒ xlu>cAԔj'O(#պOz~ڻdkgC. +(<љ5_Y%oΟW/,.n1>e6&+e(X9=nm}j.-YoFS1_nxOĶ~-՞dd1H>p_ cu& E@f\'>/7P5X.H5CY\ x/-CdX~,X<=Fj:݅%?EO+Ƽ{Nz]VeMG3S}@?h/y<>:[,I>w&$,$#rXZm5߅z:o+-"_ltQX;ry' lӴkuK kb(((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((9rCwH'VhsÙw/T?t +BۺGl!?Əg>9rCwH'VhsÙw/T?t +BۺGl!?Əg>9rCwH'VhsÙw/T?t +BۺGl!?Əg>9rCwH'ՋkK w l}qII]dQEHŠ+;Vt2"ʧWojI]٣YzLjt +-*FV%?Jw]t l_\<<,41;}{lr;.NZk5(̌>~u;#3cM6(ЧEZ9naEVQ@sNүkh~kt/0E}fo9"Bu??c(^׷SXRGz6ZL~FоZmX2c$F>+`8b^M^'5WH{;ieCm +IH0(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[oo@X>> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((( H{夑¨@^|gfYئ}/MyB[4k< g&g쥀T6З$ +'rhYiX~Ԋk[񇈼F[XBs3AbWK'[ԗC]s@UGi'SW|]{\,-,mϔ!q5Q^, +_ Irl($((( fXmyesHԳGEw{\Oy-WhΕoMsU~+e'Г W\~򿦥(|$2Mu/kZh k=F>Ժ7Z5]-ys8}g_& ?Zᗄv@?@+~)~(QEPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq_>>6=>kv=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|U?Zmi~lWֿ>㲹F/! }W5j2Z3THq;ՔCJ2c?Y~+/ٿTd/ۤdu`TA5}d1ۥ-Ƣi#]H=z( +s㗀_!oX5) Iq ٹaWuKVҬ*L`Y.qGP{@Q^N{.`I/4Fo*ǟߡ<=((+پ֦Z5kW:~t_|72!ޓ=+ݩƑFƊ*@: +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +Zƣ^jmM&r8Iq<Ť䜓^W/l=仜E#^%^F>:@+& +%=/ʿ׈ZK}og̳ȱ'Nӭ%~b7>ǩҼBQ^Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+TI$%ư?oChW't;Gd{`VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEqVAj+E_Ix}FSg QEEPEPEPEPEPEPEP^N_ɫ̫~j:M=pG,n< O\\Ik*ꎧ5trMy:iwACOJc^p7WW =M+uyke'Uv_Su;wmtxO:@ ?Z'fWV9gv$tWC J5cu%70+r(gcu\-&B`Ͷ}jm<?:篊A^o!JSQiךȷyO==zWlۏ_x7~uze}ϩ5fNmR𱎲ԂO[{H#%舸=Wn +(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVdkV4&<:P=]*?oCkFqTC((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|Qxj5+{E#*wuG'e Ԣ}~W|s2<jE7nO{C+}/㏍tQ=յṀm5 ^:Eix3B|ǹ ?kY_Х4di:ޗ * DZA5~iٔQE +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A?ԗ]*H93:zh(((((((((((((((((((((((((((((((((((((((((((((((((((((5h>BڶihqH7bp5?h=tz6u:I'c?5>6xXܐ]Ŧ0|"ez=_Y=kώ7GTtSdyf |wyup3\LzI<R)Z.z:"= +/'~J+uMsUMFNyKO¨Q^,=*_R! +(QEQEQEj:~5[RQKy1 +z>i>V٦0|+ͫWeQEŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mK9Y=N+ɾs} EY-12#@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵgk6\"B>Hl+ѿտ?? v'# QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ 4&TWVV PEyo~c]K1@'zީ=xɱOLm~~xCxvcO&h`5|?"Y."P?6GNIETw 1Xd~U|'?".q-^z*Пwua)R^zI/=B((((((((((((((((((((((((((((((((((((((((((((((((((((('ȭ}'VAj7@+9(((((((((( yXmyecDRIwz+k>Ld?S~a_JGbNS~8k[[ۅ&$jI5h_ flJuG-=OW(IݽNQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEwMRCm䞬{*SInOx]K+UyG+2J35=>NҎZJov* C)ObR[^Y7ԚEmQE((Z|U֗ ldzЏc{ǁ>;[4zv/}Ja)WV׿Q4},k$n+) ӫ埆/> SûQ֭e MɟB?WkM{ti&=}\?^Ez4Z\-{rMk !䏦GGԚGgv,rYI4+х8SV-(Q@Q@&-O---?rQ:7asCl&}IEz^~~l&^Ll #ysZ:ϖt?x{[LnL}6+?]kVf鹰 }EysjCG k/>i?Wmikh0aN՝GyAET ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +cB3Ybǿy +kF䷋\0(?z ף管zJ4,h 3rh/ x0tĸ#F<{ ԁg[U/xkM!-DH&o5@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^iW>iF=Ԟdq;|ץ^lkh?{-\ڜ*Qk'EW|U>]KRf[V%^Hw^1XX_q*Cj=h;gk AƃSQE}եm(((((((((((((((((((((((((((((( +&U WdC/Oֆ ~r鷭}HmUy]?j((((((((((((((((((((('ȭ}'VAj7@+9((((((((r#ꑫ;U$k|7oͩ7ؠ<#20V5Ӣ;JnGRO* m$p$a]ƅlڬd. /E=hQmTr0ҷ.S:Vxxrh.NxTZnajdaՏ5ER擻:IYQR0(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((OQ{Xշ +߷7C/Oռ{h#6qX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEAyyoMyw2o$$|stJ%m 'xs|yI:FLFee?y C^_C#rQE{aEPEPEPEPEP^KKSV):-X{Ƿ>eEeZkA{1c`H*FA -y?yakwc̐txB= z|z2Q] ӺQEŠ((((((((((((((((((((( 9bH(B\5%%pJ>ՋwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((W]t8|WRLd +OO^s||Ɲ=. RQѕ|5,=Z[inzAy{i۵6/ޒi(O.ź y L{gWj:}R\ףK'-j;~$:>䷺Sq2}1yAk-tI ++ҥaKfw.[VծrI^EEX)QEQEQWT֧4>NEOƽC Kl\G1j)Roc*k[K녷fą澘xSL&:ï\yU&M4k8뎵UJjj|񖳵沏M8pe/C;MkZΡ c1^Eys 84[~fnMݢLxZ+ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|GG;6K'u+`ELJ8d>*@ [^nm[˨ۡEZ[?hNp!>E?Ҁ>碊(((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((('#0DY3(IHK3z^Wt-"6 ^?R9r<ί5U(<Я}Wf:;\M|cz(U]iaˉV0}2qí}Imo6ЮءE@C/y9=\>QEzQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((('ȭ}'VAj7@+9(((((((O xNO1Jo_0,s?\zo:& +]T ~5^#Dk7Jb|k?¼(>Ė?գI\[ۍJC-č,5^+ +(Q@Q@Q@Q@Q@Q@׮|1Kbԟ2@̹єA"ӲPq$%a#_ WuӪ ٌ<|׍ѼUCJo[EWϚQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE@#y[,m!stzOϏqO]Tu1%#ݫ[<8il(?~ֹ? ܷZB)C>"IbI$&Y;ޤ]N: [nD/\p%a}@_{uogbY[`0u!ɲI'Isy5Wa!EPEPEPEu:ßkXh"4LzvɯJ6)m5WB"[<._L])8p4?6 -|p +UU* ڹڜ~>Κ]mZԭcy}E5Zh^Kfz05TWWj)[ZZݎ$ +-WAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Ua ʸ߸/߸/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE־MnNnѕ+I [yC*) -*V Aׅ.<"`$mi5P֣4^6Vό0V|>8__˴Jkcw(((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|M W@xb>^{R)IJJ)<';C}/p6I,I$y$'Rnrr}B( OG'ȭ}'O͞n+EWsQ@Q@Q@Q@Q@Q@Q@zo:&2MOUz/~h Dz=Q_&zEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ZAnKD?G_W~3g5ING8+zdgSc(2 +( +( +( +( +( +( +( +S? 9 wgWF*_zweԖQX V^ڔvw>㢾Kl5GimonZ׶qåz0? +eW[4}>z5Eڼ?g/;' Zߴmc^ʹWjJ?:=o S`Mi{~ҵ5xw‘YKpW-m#XK.? me4ʹFF)xFR (((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(nn5 {HGPi7z?[Tqh}ٱk5Ϗ%mkz6<o;]EOo] sHRiT%gv +&ms4=YX ˺uzo7U9iKdZԕu;Ӯ~-匯`youn_Ұ(J/$96QEt(((is8#.KVj+t?0նiw]I'>zjZW0WԥϛIXPd+]([Z7~@tK1 &+ͫIN6-Sx;]&nEq#Z<1ͭ趱J&e$'jUZAEW8Š((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((:a%uX4W$}q>A,;"խAkI}Q?]COү籾)$R 5w,ѥJp g_2oiVkoc \g_v=r3Io4sC#G,l +{cƻ-rtD|,W=q_9Y5->gxgKPG#@5B>9şxI]اG_8Xѿi uTtkI:e>;HhۨGoc]R?kQ>%&Alj:ꨮc?hҿ%ƏX Jc?hҿ%ƏX Jc?hҿ%ƏX Jc?hҿ%ƏX Jvzdq–v'I&*(((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +ߌea4g$5Uuέȋjq5ǍJ Ư%^7EW|UNWlU#' ^{HW.uG\[P!:Ҍ=MS#C vGJ8"((>(((((((((((((((((((((((((((((((lvo +XX3Q@'㑕m/ҮEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEqVAj+E_Ix}FSg QEEPEPEPEPEPEPEP^N_ɫ̫~ދ5y_7EWɞQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVnK|`9ݞ*(~zh6DR@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|?dxS_^?Dž.@||[>#YY ܞʡEWfQEQEQEQEQEQEQEQEQEQEQEQEMͩͽПXܯ{oxGdE¢P@vuk/3?q){o6dW $WQX B[}g[~> L}G%~b65mG$zW +Zj+)eg1ooZG+^㟁Ǚwwo]mX|Ec,_|V5<Z窼׶o1Ro#'|SEe,I1F}  }QҤQ6 UB i[x^uJ te>?nQ_[|M<_?5mpc~ v? +Y=e_~V_4~О*{ &a:VvWvSeV0G^/mE폵hWzR#=m]Jۃx1#hpWm].=!Upmט-L[kqQH(((((( ;gA$@3'TZ<בFUIOmQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@$Hci%uDQf8{uO~ +Y}~G^6[fcL#9 Šk g#"?P +TĿGQ^GmB^L ;Up?Jtϋ +k[ha72;z*+k{{Yd)R0Š((((((((+/x]܍-,G ~K+=ZiQ$t[TYeO+ö;,9G#Ɍ'-$ҴH,rI4e]Gs㇌5mk<d'vϸy{\=dBUF +tCmQEj ((_:VuʸkЬ4*[VEZUI$QEd0((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ֲĤTX_X3Q@^-Jdtmcn{f +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( += lCnv~g+f٭, ֬@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\$:DuInQ|EPEPEPEPEPEPEPEPAO(^Zz!'/ VF}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP75? "DV/_Ԋɯ^ͫOn\Gʯ!S/c̪U](# +ᦑVuׄܿѾ:^iZrg7*;/dQƐđFQ*+ݹWJuMQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQU5)䶱yb8pF3ްoPSEgS];ۘ>(((((((((((((((((((((("_ Wװ|OZ/O2o¾rǏj& c̗5w\]Ou;}fשG(-j;."tKVSjR~/?1ּ__Mͩ˽b\z>c\UХߙM$EWa!EPEPEPEPEPEPEPEPE% +/.D*?'OQD(GcI uؽ<ؑȹo?e$zy?ekcg^s>x,ot`&u?c~;;4WQVqym4.Vy\4| .|9YZ.:VN[I?YR1VR:1IZ((((((((((*嶭Y캅LSIGmc.=Ӹ׶l;Ko~s Ee,=)o!ݞmPcM2[XVŷ>ՠJWQYKCgߴuc^?_*?QZߴ%V&$a>JY^;>IU{Kk'ʦ&x*_,?O/B|uEe,ٿ巉4+}ZӧO*WWP W,736'&ʟұLO>'Ce5m_6ErJk)d:I#+o7e՝uQmDx1'K1"Սc,HQ_=C>v,~?j~zwc!FVR˱+CG^km3̸k|Y-<ۮrG(e#g{}ZT?sZ]].{oY8J;QE QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\?_ Dޭ"+EnW=Eӧ*傻v:WWӴ;/!NJs^'{o Y)Q.ׯoʼ,|]ba.!qE^&+0U8{uk~(5c;EWXQEQEQEQQ\[@OޒW +Ok<nHQoD֔Ԩq6TʊY +I'_:k.u=MCcI~ ך^.[WRs崘}aG^,K5ϊ~7-Ʊ,m?|Ԋ]sGhϸ 5tWK* eluψ-֮D-=\grQ]`b.QEXQ@Q@%S64pc׌z,-Vu*Ӧ7aRX$t?H&\^n$?+ҴOsÀd8Bnl^u\ڌtR>ZxZF[[]~q7rGuQMZ'ئ?-{kHZ9=ᯄ|=[w>qb``QEpN'r`*((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nh&P}پ@Mv 61@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@V~u5<-0hB忶oV<6),.I;( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((O>O5=Msy~km_TcS]]34 ?M7$5]34 ?M7$5]34 ?M7$5]34 ?M7$5]34 ?M7$5]34 ?M7$5]34 ?M7$5]34 ?M7$5]WxHn\_A^\Í##va]fOBY^%$tRQ]PQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t((((((((((((((((((((("_ Wװ|OZ/O2oҖ%./NNOҼ4I$+գQmZJ_Xnnr#fkAbEz1bd@QE@QEQZ'5Mh] F"X4%y; 2hE~ x\{g088 ~*B{yۢNQف\'5|ۮ瓼 +ȹ^[+8^EkUx7=s;um_TC%s8u6&,_?xc_k">pD6] E.](9!og">BO\l'I?5scL~x}EmX{4|)=ųmXD*ZeWRfsCڴ]:|mQc ٟQ_c\5]| i.~ |ҥ]IX9a9ra`=~ֱg6|I<~mµi{|ϟieu)}<؝?ȹ3ɦ\;84+<~ $fE⸉M+"-3kTRٜ~j kE)m%YvH: u`ebV(EPEPEPEPEPEPEPEPEPJU) RQ@V"]gP<_k^O-qPlY| 5QYʕ9oC=_Vp;KkPk^dXYSG^OEe,[3=\}ÖzWLZh)/_*e綾y[gcgӶ><صKnAcZ<s1-_%YK(m3o>Ǖ],Ir+^X1]J|VFMcW6ڕ>{s:yR#ZU(ԒVDQL((Ѽ/:M >~&#CuͲktgi_q4i|rHi6y\ӴGW>csy7 ?^ŬÝkh a~jZSTS]OuM_m.|UHK_N&5֩(5WW2ToO$gZZmcARR9?hQEpۻ((@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}vm }Zݬ/}Zݠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|AqOkZ|AqOhF\_VfjtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWfF޷2Wf+֫۞,/UDd)G5ŎOUy(0ϟ +߈lt, fW N%W$~8"|>Җ%./NNOҺVcr\=I#6WTFYMy3xCAWܯ]55[DEƿDQV%zrxj:TǏjңI<%0?yy5Sޖi MWJT)VlCmQEl ((0o=$/7Lz zׇg&d %Q \(Rײ)E[K넷wc }#ÿKQ:&mB9;>އ9Xv3Y^L$ALT[uBnMRKBK_;}U*Эx;QEj ((((f5ɵKM[D۬qdtv>ÓFZ4-  <ODq1qhP:+3I՚BX(P(((((((((((((:^yXOl*U)s>| iDmQOm#>O*c h#^vdy}?O,VJk"tћ?eocG[k譣Girng|K [Bɍc~*& &aȧL~sLJ.D|sGPgf ?ȹck\l$$ؔV+-a%φ5npCkf-PҲ.gm}3]gL )˿>*c sq `$Ǡ1c-rn|LՐ~xdY]Z\M 2ζ-( +( +( +( +( +( +( +( +( +( +($y`}1[of@?,5.1⧎-q=BZs<[j?VRЖ_p^L:^(a$C׶^Vh1?μ*Y~|6jѵ(|2mS̖nYVu;>Kl*RG({oVG4'~?9he&?hϺm.mz oSr m{Xuk1ʹuFLO?h}E|mmvKY̟kbG-(-G + c,I/=>e|]Txk~Ѻ^ʸda)ex|;o7Ml}qzW +-k~[}Rex1#h?0ac[iGl[|Em<?cбYKZ;wGM_-|iNv +~ch{׹zfKS;;eus7ʧ؜|If,ĒNI=p%QEQ@Q@Q@Q@Q@Q@\յ(tC2l+&ppyNM'Yܻf'$M%S((r#Hꈥ&EvkZ-"KX[[^$}p~c^ֱ^d6HrUPKԥϟ{[Mn&4Ǐ]̀ +C}Om;EYү&}C6H1]5ys_jsvl+fl^&nReק?\~WmEyqR)E!*FT`N((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ/q\W@~EX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( B[l?|^W> 72s_w^S^6:5Kv>1[QEy_F|=?c.٧_K~GG^$%ӰJK(1~Ӡ+=|+=(((((((((((((((((((((((((((((((( ~r flr>_!@y]?jcd14j6욵@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Vf[LGy߰=9(v&Wg#KSmuJ&*?@#?,7חOi[s=J_a^SɫS\EWQVZ&le1\ +zrMUQ2JUG^1C,߹jՆ +>|K>)h{_O^Ey?3)k(c~?T|K>)h{_O^E0<{_OG+ϊ(v_!x+ϊ?^|S׶QG#>3^|S +Ŀ?ƽ?1aHy' +Ŀ?ƻԴQDf1ëg(kUt䕟ܸa s +7 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷7ڥ%B2A@vk?B ADB(\((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((l$1(3=p" |q^6ryV@:I)ҝGh+A:hTO \ >¾rǟjңI<̗0>wڅt7sNzY.5Q*KZ:Gh |:ڔ,!$ŏ|rMgl1.= hV-Tnrl $NIMQ]Q@Q@5[[q;,q!vo V]Abm9;DzVUkӤ7aǘֶosZ>svsѧȿV<^#-dpI܎w]>ю1z$[1 Ut.q%R>6M-N;T<{A5zׇ~xWOҢkɟPO1]U׭KNŨQErQEQEQE#(e*#?4eŧ^6Y~C폸~íz(˚i=ωu >6Ɵ5YQՇ ɯo,u gh@Px6~SUg:\|yu"9U 7~Ozfӵ; ?Z~$M"\DgB>l[ȹ/xoJbzE?Ǭ?{3+뛟>$>M"&.~x.|k[+oAE]롶~˭1zyE8ɵ4o%+?ʶgkbg^s<<}KJz4!k"`ϗ+qym4+]{\l $Eυ|Eg:8%m崓Ȣ$RB%`+AQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@U/Cu/N"J +WQ}N[].#;y+½/C=3luI_9Ge\~ \O?5Mq3}ጻ}񖱵紋MpeӴ;G>amg ?\uU&zgMgPdc18W|z7Q ѿO9^GEz4WFy?^1=tPEx|oQ ѿO9^GEz4WFy?^1=tPEx|oQ ѿO9^GEz4WFy?^1=tPEx|oQ ѿO9^GEz4WFy?^1=tPEx|o' +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((p2hoǺ/V4E2 +F.O3\C/Ԛٿ兖b\zWG,SVȇ4|C \05h#˼g̗\Wx)c~'^I$rORi+գQmzAi k""c_ (+ьch"((<3'G.o8-|iJJ* +;=_l:vy6̓XWxwDž|14g8:iBO~xKfGQX z߇g*d %Q }mf٥zG^_ZFnFYnj*0 z֕Wۓ,(@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2H6KH˹o3K=䳍+^)Gf!sY<9f[H>]Ϳrs^EkMh7+dZ'ў7kiKf?{s J뮮~˭iyVEoA-4s@WTVq v\sh1{x>we G#sbƟ{fqsi<2Uzè:yivS篛nm?gWW?u3Z`XVEdǼW2v?J9{6|E}9s?>l-mǹ|Cw+[G4=_!r3+ng-As_Z2"Ցs?x`8?Z+<~ x%ttGx?`k"njsxkR8P?Q_zZ7:gi7clgA ֩)QEQEQEQEQEQEQEQECToi,i$f *x#-`8a^8*Oa7>+_%(>_kL( (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((O|K`TWV^Miuoe4(e4(+/V^cM"V^cM">-e4(e4(+/V^cM"V^cM">-e4(? <F4,PŴWؗ<v7⌞ &?&qܣ>^YK'd  +Qyl͊/q@PEtCgAc1'7u |5>Z]Ŵ =Շb=( +?V^cM"(((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +ߌ}a,*g7 Bb@Ojڱ?5b(qݏ`=x6\z'{ +<vQfgrřI'$J(<e8!BQW' +jÕO,}+존$1(UQY>^VO ރ[3-mgB$n +(p((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((]zi"h<2;X߷7 ĿٮɋXI%$,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( ++<3pUՠa.2_rGW(F: ӓ"ğt֭GNrH$Hi$uDQf8{"O|ׯx'\r"-1AbWG'֬fv=W_|KI&dy3/u;v$cEzR؆(AEPEPEucl{=*Hm^nu=Fya5^]xQN G-ᶹ+cQdRgϖ oio,fɯGk;%Xcn11FY0|ZuVZo𖉲[dnG;f xm`H-PacB`:TWRJw-$ +(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE]]\-O(]B4Ď]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +bu='`>X@-kov̩PFP??y} Dhm#I^mkiqR~HWu +OJ($(((((((>RDyy`Q_`WοΈnO_EW9 @+,((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((H! vOĿٮAͿq$?#sX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@eKo.DtûF;{>E|]o<{\[bJBʿчc 㟁׉SX&b0L>pzWP6c0ЃGb*|ϦkZq9= }@(((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((!j [l xq+:Yi1nipWWVݏjַm(C+Oi؞vnH?LWx7Hfd˺# _Mkz{{]/ +(3 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]N ~rx<Vd<VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEikϾ"жg'_STzQB$Ty^ԾlIֹJ(J4NN(ԐRuoB#ֹ\ڗp3-ֽxy3{o5Z(| +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷7߷7 J,?o\W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE6I(IQe|d8NryV@8ϻȓZS:WiTMcMmMΩog9 +S+/|z.-&(4޼Q.Pv$c(%GbE'_ hvjsQC^K/^/ԍ ,1[;q\=PߙMIbI$&+((K{X%g8XBMz?~Y-EsrwHGVUkӤ7aǙ֮os:Fsxh_?_IxwMC&r9twhlעiAm pƒ jT{ҼKT?xwz.6MN;D<{QI,~P~ּ;žTOrq3 +)iQEPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEѿORF:ISutQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEazq ?to<̅%:0R5m|H +,Yj'G ?s ^Q哤gQu<(2 +( +( +( +( +( +( +('O|aD[L"{G?*~$~@ujFW=G 2ۻC8G6GRnovn(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq_>>6=>kv=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@/ uφzm̶ȏ|w_yvyZGR?|@a{崆9YcqYNA}ϡjKtPqtk}OF9kYem€=(((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((wXѝ*'G<xU5-}t5L'ЊPxWuVC}8bɞG(mv|aER_t5 fEL/^X^?)2F_]Ȝ~^}FQ[EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫩/Z:/ǜ +֬ǜ +֠(((((((((((((((((* 49ndv>mE%ZL}^sjpگ!D^}RUg` 18 kNOdNqck N^i{I[iv> 82zOQ_#)96稕QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[oo@X>> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*i-<}4v@]_?|:%ڜÁ+~/n?גߋG95el1 {wj՗|w swCS\8"msJ: ӓ"ğxa%$O$QʨẎ6>!<}V3m (+ьch"((|5x'H.o8&4W?JRQWneQ^Q7u(my'бAnZo +xcciQ=dϨ'^ul҅=#?/-A2g=$V/7_<tz]ɼA{ m6״Q^UlҽM#/-A#3F#Hm>Ru?:(9ݖQE +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?(((((((((((((((((((((()Ou:bHcT=}r;V-}V>:~)(އO|hz5iR٠FOp}kX!g-QEWq!EPEPEPEPEbR 'Gc,ƓvՁ.^뚭]\8Hz@: +_m6.flvVx&^lZLK Bv/=uy7K +MjQEyeQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]?*o~ַk ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֬ǜkѿտZAq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^m4뫗8Xay &(?RO¹o7ʾ=w}<kK!q{,6@EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW|cѭZiQk ~UHQ1ksS}g]_9{`W>-5盙夠QEy#H~j˺%͗bAƹ:F5 bEȶ 3~*OGFEW}@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGsQ=FqU?_! +BTsMEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW|AO͝~#?]GSci&/ne<ĞS~'Ҽܫ/3[ +8B+#`V4=;(?YԩpsȨ/ß y"daOEpBā#E +SXb*9zq +(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((AvT̅䊱EPƱG5v8(4UڝEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW;xkUՠ`?!).H +o~6|9O']4pu|Ӹ="FYkOhKө\U3w$WzCy jg"-cD_Ұ֣kVW3u;/^$7ŤC2\3oK/'<&^,=*JЍmŠ(QEQEW]߆~,6DzҤٿQAZZL߻[mrVУK^ȥϟ-n/. g81^߁+vK|i6ǝ'2c?_HѼ=oimcĀ3OkNޔKTk߂vK{uyA=5Z@[C0Up*Z+˩ZWy[QY ((((((((((((((((((((((((((((((((((((((((((((((Er~c֝i,q&Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s1Nm/요X0\'#]P%(0>>ÍwElG{%7O B!xg%GPЃּşM]BW-ɇn:ǵ{l/ݭd~0IcB=x\s)V*xTEx;Մ*QEWQ|:_ r!oo:Qsc?k+?Yw>%t"ϻ}M[F-{"[TG+U}WBmfD9>XuG9>C = ivKH[Wo熢+Z;h?t==djHw~|OYZDZл ‘I=O+~ +Yag +(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()ʹ8V~ѿmyT8FA=qX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES]4gQFY\1CK\U3w'ڴJu&;njnu;{8G @}za_9߉5Mix  י_Wڭ]jdB%GoćQt>Oi>0Hߺ#qּ__-lmXYf!vW Ezp)m2Y${QEvQEQET ok HYɯF[%-&L{ b+*Woc+SE޵)#Ll_M}#߁vK{u` ͚k{h,H-Pac`8 Zÿ֣soQk>uzׇ~SJKɟPO +ʭ[▝j)Q\Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ 3D ,lp)>!wFu>!H>袊((((((((((((((((((((((((+3R扬gKH'\ddVԜ]%]N"c+WݏҨŠFskϧZ*b뭦r/;|4;s)WKxKú1Shν-ED՟&adQEd0(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( Nit_?Q_>>;et|elzӫ ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((gTf +=)k't4BeH#+ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s;{_]覮=/SP4QEQEQEQEQEQEQEoL/uF ?OvQ?ںo27Fh,O޽"c3W^k6FE=7*?}2hk+xlZenq%68Q=]PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETscK RWCWlbk@GQRjr} Tj2j.w\J`?Tum݅RY$z{#˱$_fDOWzdgI4w{ +{;H,,⵶G JvfeeQ|bj(hB((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((C+vC( 5Uaa ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQER};F7: >=O4v@]_ ?|Z%Á#~/̍Z_|\ډoab cw+ի/?!#_^VSOrG^M/|>B^Y1$OzJTaCf/x[D;>0aQEz1bd@QE@QEQZ/5\y:Fsx1!*7AR`e^R7u(`B麽kÿ <'ፏcG%dϨ'?^ul҅=#?/-A4g=$v/7?X zׇg6d!ԥr`Bx+ʭW}e$eѼ;oeb@n5EJNNQE +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((++|6o.g-s2{ բ>U~񿦛'~񿦛'?៼oIh~񿦛'?៼oIh~񿦛'?៼oIh~񿦛'?៼oIh~񿦛'{um-~'-^3t6}/^oHtZE$OWR OGN=:(xp((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPET$ +zmi_]6#pV=5ھsjs_]6d𣢎=m_w?`$F?{{}kp~ydQEz0TKuqdF +I5zï }֯#>lV&8znoiJ+#𷇢 s&y7^(>ITg *QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[oo@X>> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((C x]Xjڴ;?O"ÚHQ\6+o:wG;hd+/x|k|uʱ}WZEw'Wծ.wm}aJ¯VOY_zLj=STqϽy_jMu^Ow;uy jҤ؆(AEPEPEuk{*X^nu=A<tZmɼCIy ?c\(Rײ)E{i. h$g8XBMz7~Z-q6ǝ'2샜6GEދ'H-Ԍ|u?JgzRV-Sy~SE-rj#'lף[[[ۥA + ,q UQUwi%QEŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((#⦯-5F:WWsWwR1Xoh+S}_iYhQEsB4YԚRӔ Wv$G,.a̟+{Y]+E~EWzEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫶tYke=Ȩm>3?rO+ZCWqOShTnEWQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn$)qFP]*w-/TT*ڀ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((kƌUFK1?|bƷQ^<$ڴJu&;ꧩjvjnu;{8 @}zj_GG *qqku NVkFv$oקG(-j;~$:W?xNk>0HuF~5"ocl=;jhZ-R!ɱY1f$9$4Q]Q@Q@-s4pƥ_f[أm;d#9lVUkS7aǚ֦g7F88&$%W?_Hxww4]$u` Mz=[Up+˭AiI_ԵOgNd!b`Bt36=+/7_>uW[^-;"R +( + +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A?Lmmؒ`% o0d5aЅQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}v졔Aޢ%| +߸/dp|3j}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZ׍% 3@Mu:75g*DEvQ +uQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE|SI[Y"1MnXc!q q_~ n?i7.g b7½F +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((({"6ϰ5=p54lK} `!U$֩QN}*+*1Sm**#HꈥM{o2LNL}?\ß oe/cAEFOwҽ6w5s?c ws+;((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((* -J 'kXOUu5t9VڀEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEORմW@3SId+pLHJ~&`fQ^S75<-y'з2v=+/7_><)t +f)yj 4w᷊OtRٿQAZ[l:96X}6׵Q^UlҽM#/-A#+E֋<#L\`oMjEyғw,(@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU6,pNzTIX3A@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((q¨>SZ~€.P[AtXC }x#=QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQQOs )8%kXOUfx6= >(?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((˳yڤW>jNi-PߎF\h۹/.\41&c3PQE}9x`vĎr?џc^\瀴1^ݲEl(?<ƺ:(((((?!]!p @vWWӟN/|g"]>kg' _1{stgoz~7|mšWd&+"0ea5f.9(l~~(((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((hxhي11Co/bӴ"on忾Yi^~>JAEWxa]=#WƖlxW^{H/57\=PoWF=T/iY.ڞEW}0QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t((((((((((((/%?݊<>P%J x.rb~vSh=Ȫ{ ٮd/4Y<,pVO*GRW +(̂/iEpE8iw{m>T7+mQ}ZEtmv#cԟҼ!gFd!Ԥqɷ\B#鶹+chQdRgΐ[C$9f>uEk{%=&h9lW:/OAecOcMjו[8Ғjs;7š6o]Zs0}q15ֶVokPB HT{h.j]ZIlQEd0((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ/q\W@~EX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((?OX+q +5{|HJ[ƚ\=N eW񎍧KcqqcWq~?md ]ٿ}EPEPEPEPEPEP1NïZM(dQ_W:Y"t#h :+3eY!om0+zD?T7@EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|[TFķ҅#?>*^0{dlb?5ׇUh|:-(cd0DQܓ+=NH%#υG0)o  +\VQ^Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +(#xyR(ԳMxgE/f+gsEOfmO]Oa?A^{_G}{y/'EWrWwCW67U8kBʎ^ưux^sv_ڻ(ZU-B +AEVEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX((((((((((((((((((((((((((((((((((((((((((((((((((GtWȎ%IOAF.O* |Qsži {}z{<9ћ>7xI-}7K9S^a՟Z>?zM|pZll?=j8 +J̇&fgbK19$i( +( +( +*K{yH-icK3`:עw5Clytyh9lVU+S7aǛVc7F>p|%W?_Hxwo4m߬7lyA{[[{+tacW[8ҒjszɼAco>7Wxwᗄ3_yOW_EyU|RӲ-E +(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ/q\W@~EX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((ch?)ertm +kZ 8XWsvQō2HN?pճ-Mt_Gmya}EPEPEPEPEPEP,n&cl`f"ꋣ; ol_Յ|Q@}A9>_g&?U}] +/R0..{h(((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +ťwW#8jy_^NFė?ֳ>H9WViC +'Чv +(5 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]VNG{|&7?rO+Zd2>gqµh(((((((((((S([}"<5cVtɯGWn=x6M%9e?m>y+g6""ݔ,I$y$QE}AT]ooiX*(Ijik@ZZV+ݭma11(TQ +𿇡ˆy7[U3-mgBQ^yQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn&fn>]*&E(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@V|Qcj+@ᥐ U5O.˶}B`Eٿ午1<{Vr5j$S fgbŘNI4ʨY!ͳ5kND!D? 5EFUEUQEQEihdzgg?^ul҅=#?/-A7W=*[7~22O k5 F3Ǔբ''vXQE(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#QC)܏1TR. h H4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq_l'd\/n&>e^@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵekiU,|=s 5<5hWM0 G QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@xXjHk+}ԃc# մ|6"i̇>UԐF>'O^ZMv-nA<@OmoƻZG%9o1vv@=W''ھxn㸷%U!ʲA(J( +( +( +( +(_xN5}JLEF+俴g6I]\z" ?Vֵ|IM^ ²igFs2qh:3~lkx}Q-/GU%.'n;F>g?5U +h((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +⎯)F6J-pRG^1=.6` p?_.O47O+F.{rMyKECfmMu#+<@^]s zn9^H^JX_qk OEW}(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQER3*)f!T ORם|FOIJu=?Z z"#_ƾ'oj\ ~nH|s5QE}*Q&RrwaEVzÿ }k7LVq}O/O njkL[0,GN^J\e5Š( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +KŞ*\z{4PNv]bGС$UA7+ ]"?%\`>&dz*Z}doo+ ր;+O3vL5 C XP9'6'Ǐj<:E bfR?}T +Ɵ4ڳj7"Kҹ #_*zj.#<{X +zynfywbԓ֣+o;-T Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((8ëb6]?N"fKF6`['~ ~r^M$jmd<VQEQEQEQEQEQEQEQEQEQU.d1.?{Id w#dRy6V>Y'YI' [iog8'a{e}nyuIyQ]Z:&qX\"cTY8Գ +I'{w|2҇NLQ?pkN{Q%luejbp=IOV袾I'wmQE(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*A";o6\/J o/?ƴM +J\UvkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@4>+m%1ipI$;|ikZ ea`1 XUXj~ΌasvQEn ((((((( H-Y\cK3`:עxwulyv~|{F9J+i7WǑ7gʌ<;3º>u.r9}&&"--ⷁ8"+˭iI\O߇gVd "`B~7Wxwᇄ34_yg?]VWKNȵ(B((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( 5xxRT}B:Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ Q /+B)bfAm<6UYe|\F1W+ ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((׷e"~ZY> 84Am<օ۬Vq ( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((( {b)mۮ-H]AA蘒5Q6Zmw F #T+C]^2 >M,[{W3+_ q6DL?ۏq@kE)E%QEQEQEU+F-lm" }潣{MP28QPxQoc2>xD?z/^ 'Jd)˻rwcܟU/Jt2+[H(<@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY榚6{1o8c +Я5ǫDґ{<|U*{*RJŝس1IiQ_>|QEYuk(Feb_8+4pOgK편C'g H"5=}(rAGti:j(4 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]N ~rx<Vd<VQEQEQEQEQEQEQEQEQE>O}nX%_?]G/f*L]οe<ƇWW`_p}QE{QEt~Uh"vQgViA["'dt|-uQWSc"cB0DzF(,((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Cw86s Տ}JN_^ڇT(Mĩdj3brI4Q_nsQ@Q@Q@Q@Q@Q@Q@Q@?y_m>EPuu'TdtWu9h#hlQEyQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Ua ʸ߸/߸/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEr"w_T{qϩe?kٶRϣkzGwKt>Z|clIL^\eY +|@u __@?'MݿF8GqF&>eg/NAD=B?Z4OvLj3-WQ@z/_[>mdafykR((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+/ +aŴv'#0DYA~$_/YԚ +JUU56(,BGۼT"*\{½#7ܺk3G3>zSKV^ZQ^aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫩/Z:/ǜ +֬ǜ +֠((((((((!Z\yH#?¾?ja" ++qs&{nd2M+v=CE$0(ZnqZlAO^Q|rݍ`ؚ.+#Ӳ{u3O_=,=EaEWtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((^Zeuy/MpZ; )m#К֝>&=ZɣivHxNg~FZ񿉼CjX\/^,6K~5UzyUrG^s~|;4i[k2HE|Ezsg|e񦳹WQ[[Yا\5=ijzI\5 SNDQE((((((((_- 3Ԯa)Bθ5_uW\}bB{c~2M QEPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEѿORF:ISutQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}vm }Zݬ/}Zݠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|AqOkZ|AqOhF\_VfjtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?5#JcoC4uz';Cn~8?-^&=VϙUAEV)oLTml!Yq*N3WԖYCm +X} +?:G|K6bOo?Mߥ{z +vs)rs}B( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +()=ĻMutPvm5ɱ ((((((((+ϊ}X׻A֭(ҕiGvL䢮c/~9lM~?I$+p#BO&Š( +~[#X6зq?ҹ x~ojlXA+'W[Cgmb8bP|{# G=h +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +֭'hL1ytz(ɾs};8QP=*j((((((((((((((((((((((((((((((((((((((((((+xWI+Q&5 ѷ*-L7Zkf/A-ә[`e,"%#ZxcۆC">?~Ş ܺt7Xbo*2= +kBM?%_.ck&]^I;S: +ko}:l',͖:X ==]Hrl{^W{Y'z(QE0 +( +( +*k[; Ky&o(]9[kdxHY= +`QEQEQEQEQEQEFK;*O6+௄[^2MFt͎Vw$p5eZM]ݏ<3/H `y?q_I 'пcamj1ǖ>rk|A_%̶1` < M#|EGŶ\jMY[>;+kƞ&oab,`%a_~f-s*-QESZ{ufI`5 z }juʰV/\^&8zno~g@úBZf+f+'9NNRݞJ*(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@V~,jP ?3[VP-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m K<J25k_nVՖevK>_ִ)vHhֿhܚCײ?ѯ:־%^ܷD)Bs]%Uk>/,\s崀 ʼZ?g4>Qtw1_7XI$IFQF?o!g_anKImȏ/vlcj:W7~Vr?3TB +tKmQZ((( fX`啎#R~PtWu 񦵵J6Po+Whm}s[S4??J==jRgx?^!+^\"Dξ~C@zJ&s? WV0@+ΫwO~={_W-4=R< E~?Kpjrss.>ʸ9K"򷦅$T?IӬm"*Wv.Ӣ( ~:'?uKsUцCw*5UE6|%Ez7O7Sk;|?ͽq+kiUX)QE(((()ȍ#"v *'P}֩[YB\H#5k?xJ~ҡt +3VkZ#f0~̇ǿO\|eUeśB6( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( ++mvX1 +W9=Iguw-llQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQQ\J`P2QK`/$2oYf@ѪCZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERԯZP1fۃ V$2kXܛD)l>f(?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((:'#mHw0UX~5[IaU_ (/i$.јυÝ̦٤\O‘T*PjZ(((((;AFJGR2_zp)iVeەRծ1N?€,XM^۶٭YcoFR?tص-6naI*G~u r`>[EvQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|_gWn'"ڜq9?{? lIDEp!99=k*h<ҮB(0\jnK8m?ߘ8>^ w\MxMƺtsOaEW}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t((((((7❊1SvOkSúQh7e`Cc?¼>Ii^YK31$&[z\mQ_FyEh](OS)(E[!۲7oCi fį~ײU];OlSd1.ϩ>Zb"7NFQ\EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((#<2Y+־*3BܳPL>_~$Wk_WM Cvk?E⫪ +O?.IYZ=7jڭ ,1/S +[Z-wrϭMo +O܌zey#Mq#3;cMz4y=jK%}+|͆9F kϋ5ɧb̓WK.7Cfn]^>r+$!ES((o,hpFI?J_>36:4з ԅ5y +]:/+?ކ?mgt-o<-n|p?+ϫЇéJ [Gƹ]'Ix%պס迳uiFz:A/WҨE +0Fe$4yvZn׿7Z&ϲMzZ$>V٦0D*g@WSV&I +Q@Q@Q@mu+`IRE `k毉|.*y̠nUkSՅ۱2gWӾ7%I/gM/PlU_J}}?#^_s2lWa񴫯u2qh稢$((("4Y*k<#WĞ"dQ' YUN曰ocϬ4R++ inne;R(s1!𯕫A.uesսv= .ҭ|K_=tc3)U\c nQEyEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Ua ʸ߸/߸/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW#9ovK Ԍ?ZVbO=F@=]KqsS|7.N#.?}EPEPEPEPEPEPMV]h$*E|_|ܸYEBO+j+fʟ_*?/AI1~^(((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ھ}?Grn%*ʼj~/.By1zl^\=^"=FϘ +u-93 M}Ei IjBcnU~KX}WׯM˹ei9EWqQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +_v^>b]}}=*x|SI3cnAWA~'uSS*8u{UwxE=k6+dyMŠ(yHR*O@+<ٰӸ<3B뗱vWWfwa0lQEaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((($($\3-U6|㊸SݢQ^~Vɹ4=Iid +?^u|^񦷹[Vk8[Y/Z凌'hTt/7Tԭ,|ǯ ۓO[NQ}ٰ kIfy^Yر'ܚezQ.zƵK#=/ [k5zu[rYIQ^Ezԩ|H +(QEQEQE(*I8wᗌ5i\G[=F>FgYkF;e}1|嫌KRgVj^]6p|#/?Y4yO +a+x(cHQDPWW8ҜoRE Gk/iDz̓\̊m,6qw:7ǫ:eޟPH<7h1ҴK>0Zcn5EAER(((((((i,m0 B)P|f]ΙZطpZym/ Guo)khxE=#/ԗϙ.gJv; Ƥ`:+f؏/\x$>תip)뱤ֺ+wm_U//1HQaS"y&Zs[|| Ec۾O߭oQEqJRAETQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEѿORF:ISutQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}vm }Zݬ/}Zݠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|AqOkZ|AqOhF\_VfjtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_7vruTaY̽#jPӴW_w^ CjO$wKL?&OzSN5{5ӯ n u?tQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE _šDe"}U[~46~j7X*{:nG>*)KEW|QEi{Jmo:r +XM&ݐ&=Ƒ0ˉs' kDXQ*PTWC)B ++QEEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+ٮ 3ֱ~g(OkU-2xeb[wQEQEQEQEQEcx_úC>faj NJ1݉vsSjt91u:S[ Jŝrj &8zj ~V+Q]FA]/<2!HLn5mFT,r}{΋[z\66Alrݍy3C?<Ό=.ww/",haT =)Q_,zaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FY-Dct]v{9,?o\V/#?/nDa& P((((((((((((((((((((((((((((u^5UzyUrG^u~t;4i[k2HEtWʼn#ꞣiD~mgPZok;uogd_!ͳkYw|BOyt-"?~UE*V$( +( +( +(Eymk &|Ǩf?jg8^NcE vɭ0[SmׂmipU0еϖ#R'4 L}p8@~xSiIsW?"`(!_HG +G+~%*k:/=_]2-W +G`1$`[4WWZ&I +Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O jij  *K-{ky#* Ҁ6(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸb3Z PMa?s=bPEY^-Jdtmcn{f((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֪Zʤ6@u:75?[6ifGNf(?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((SN|KXӣM>t u2!utP4Wuk-]{l/ p+l=kY? koSEcna~kݾk[`ׅ߃u/6&ncNGp(σyx&O]͙m$%꽏<Inly/{xk[^#|)d;O*~w@tX=7iG2'-`((((((((+Ǿ;x EoNe<-gڽ#~%\]{WZ{-rW$..QE9$"  @}KIoQ%|__CI@EPEPE S]J[K,UFIfxWtiuM^E +p9y[O\W˞:-2\Fӧz[Y"Rܞ#ԏJ +)-O,0T1=bu^& |ɈTWV_炭 Σv̷*̿"aln?KM|E}~ͶFϠwbPO׉oŦdϕ2=UQPmĚdž/Faa\z2{_L|3e#vZ>P#s=gT hdh千#R9ƀ>ύ2cqa{yϸ> +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((hB[tFC^3׻WvS +¦>iWᦽB(4½;ޑj!7R>5g#1}O?%? +S~~]KMN(h((((((((((((((((((((((((((((((((((((((((((((((+m-G JYWxxW{,_=OZO)mѬͼ-S?p5^w]~VæL6?\/m}gTqɎ'"xZF {i[H$^'oַ袸e9INQREPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP,~:Du+\g!(O>=˛ie')$n0=k G +%]aҏq@0QO) 6Tb0T(_-WY7޼H5]"ǯiw622ۑ,g0s_6Q@ii|6$Ry<>+Vnuk0eok(<*aTAn{ p:(TPگ*n\tKEi3^mO=^ i20.oHF~TPMcY&ʃTp +ʢ+s>񏈭}=Ne1~W?kzMOs!8T^ǰ߇O@Da@eHkkDϫrrO((((((((* ˸l,n/.d7?O#x5E|1^Ow5u8,yVcOV@,>|͔_|dNs.,uR<$;}+Z 嶸x\,LzG_qS\OSLc]_lQEQEQEQEQEQEQEQEyG1]>maO*?ڀ!D .}V7ǼG?a>\5cEDP: +( +hZm0#ve=z֥<1u^gy3ʰv*WI@$@'μ;!|I-_s Cm+[k3E}$\t`QEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQGJ/ھ6A{ߝyEmxWN~to)X_@X{JGZQEkxgI:,4JZ|-K +(OD((((((((((((((((((((((((((((((((((((((((O%Â0q}=G?¶_+Hf8Y>9?@Q@Q@Q@r;G&KWH<Ɲ{[--*[ "gn+-FU&}>vW`[rP(B*kKI⵶4w4I]𷇥+ny¾SmⴷqFQW7";Hҟi?V|?4Vzt){8QEnQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^hЈ\.s>X^!FOfztv4, >aa ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQXϋ=u;Vo 2 ε{Hd g9otVժlMzCswmeOwqޒW +M|í|t񆩹,"3#a^ ~\.}qDZpw-A [K Kyn&oH]k~ xX罹 K+M?JӴ<6/A\>q78ԥO/öMoXn+T/q#F~xS[OU4?M? +h>._L(aQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ư{̨tKwsENF;Vm~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ICT$z?oWC ʸ{a38ֵk ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((^kKdx[k<`օd<g +g%98z䫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@y &kȈ+.: ר? ݘu2q42}jnax$x@ЃGZGPP]th8u>C\.f?FB1O?D/§\E?w/ߪL޵kjLvec퓴ր<>|EhLۓup3}x>C̓[97J}%Z_شmfc(((((((((<۬#~edCZJhb$[UК>y "ƿRp(/Z(h-_k&OgT~VCmPƱ`* +( +(2M}OIp%f#?+gFe8 5|INW-~FKnӟo<};eAٿg DOO' se}3EPEPEPEPEPEPEP_/ hƠmqG8_x7) 注>g}A㗏$tizs짉O^@Oq^K@t SQb5N}O'¶DZP<˙[)=+@0aǧOǕZWƕ_ů%~ q|i@}KIoQ%|__CI@EPEP_3~65ҮHdӄ`O++K j,t%hʣ@3WQEOBK?S\Oew-[ʲ}NG(+;Am|Cl VU;sO9VQEQEx'" h׬$Z4kyǥ|k(Ođ^=@6T]UPy +n#Z- 3 `?R(((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +yb:[l'#2 ++Ǿ3je톏|)U&%&l]_gFR<(?O+^[bEF.RQ]Ovv*y~y ºZQ}d ((((((((((((((((((((((((((((((((((((((((( +WS._1\t^9?Y>9?@Q@Q@5";ӫ~#xhvR{:?k "HQB7g3/?uS10X\WRPPe''vQEhHW|=uկ#ah{Ok/wlmۀGu?b5ˈ|Ql(Nࢊ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/Jݬ/JĮAqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQYZtM7j ,1/S +q@j^O|ņ9F k׋5ɧb̓K-To_乤}74[*E{\Nwz&mYo&_gdi?!Ʃjn]>r +YoJ?o-S}O4_4-e Kߥz6:ڦ5e=@l4WW4OgoBh |!mk=٥_mp<Ϩ-~`R\)ܻX( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((f +dڸ?bwڈ.XX)ϻgh@_~?4K { 6$+p?(((((((+/:>9[ZG};_&{tsh̫>!v2QzW9]LFPQEQEQE?K_WԜ _ݿ禛@K^BXW8Yh@ ?.՚K\c 4}GcW5_qxGvux7ފTH[{|ioľITHBYGi~zx*cjd$*2z Ej̈́wm7v `}|Z:F?hu+)OSw}@4uUǏZ Y/{T;KAxD6#9Xu_2iN'[`W(CGl}X,?㿀kc(-G^h!B=@3Jknn%ig#brI>K0U8u5gZ=Ѵ% c_=ُ +>kV²ū4QVg7n޴o~_PuT?^EQEQEQEQEQ\[g@,e [Ry4tWHx_G4tWHx_G4t׌w%q5/.uׯ|C0$WwrΊxrw:_V/z5G:|RpJɐ:z o/?ƀ5H-甿? RChZyK o/?ƀ5X@ }QQ\ζ3Uzֳ RChZyK o/?ƀ5H-甿? RChZMzTE.IA5@UkԲdYm-Y RChyK j+' o/?ƏH-甿֢ RCj[mf #3t'tEPERԢuYذۊ @VO$_[)!4EdAm< @U+-N+Z8ԅbEuipмr\r1Т RChyK j+' o/?ƏH-甿֢ RCjw8;Q@&oRUcMyK j+' o/?ƏH-甿֢ RChyK j*Z +)#1k+ o/?ƀ5H-甿? RChZyK o/?ƀ5H-甿ԍı$C mgKEdAm< @VO$_[)!4EdAm<Ҧn"$բ(^ޥK$ mj$_kQY?[)!4Am< G$_kQY7 +G fN1F +(WV.";q@hH-甿? RChZyK o/?ƀ5H-甿e{+G:lP( ++>Wx,c$_kQY?[)!4Am< G$_kQUlFhՔ)V˓\W)*N1 J+' o/?ƏH-甿֢ RChyK j+' o/?ƴ-nVf@Bx=hj(vǠ RChyK j+' o/?ƏH-甿֢ RChyK j)$(azuTW3^uH-甿֢ RChyK j+' o/?ƏH-甿֢^wUKqjEZ,Y$V`[o@hH-甿? RChZyK o/?ƀ5H-甿Y!H ?hEk/\-RYO4_ ]aŸ?O_%OG +}GFF,K31$&ƻ}rpX<"QY"ӳZQEbhI&8DOYȍ#"f8u&6v-Z|I¸q3zO,!MĻTSz՚(mvzX(WV.";qU RCiEdAm< @VO$_[)!4ER⽕H]6*QYZ6 !e# ++' o/?ƏH-甿֢ RChyK j+' o/?ƮY_G|ѫ(S-QEQYrkJ%X;~4H-甿֢ RChyK j+' o/?ƏH-甿֢[u +"3f RChZyK o/?ƀ5H-甿? RChZyKHKH0Ͻ:*+pJP:VO$_[)!4EdAm< @VO$_*k)rN: Z( +*YDHߖAm< G$_kQY?[)!4Am<msprnδh{Eb#avyK o/?ƀ5H-甿? RChZyK6ZWq ](xm.BˎF1PAm< G$_kQY?[)!4Am<V;fYBj +(5xxRTԢ RChyK j+' o/?ƏH-甿֢ RCkBnd+gր&G`zZ+' o/?ƏH-甿֢ RChyK j+' o/?ƏH-甿֢bI 2PEEs:[ UZyK j+' o/?ƏH-甿֢ RChyK j+)5wuQ'֭QUoR%EffyK o/?ƀ5H-甿? RChZyKm.n@МcQ@JRdGb#n*$_kQY?[)!4Am< G$_kQT8ehGRw͊@V}֯ BYq(ByK o/?ƀ5H-甿? RChZyKW#4j TQEV\Rf)IV*qߍ7 o/?ƀ5H-甿? RChZyK o/?ƀ5mnVf@Bx=jj(vǠH-甿֢ RChyK j+' o/?ƏH-甿֢ RCkR7Ē@e 3@uy- G$_kQY?[)!4Am< J\hV({zQ,+0-_[)!4EdAm< @VO$_[)!4Eg[k0\$)8(^QXXdm] RChyK j+' o/?ƏH-甿֢ RCj͖hB@h(^K㐲㑌T?[)!4EdAm< @VO$_[)!4EUVPuZ+.Mr)^38oƀ5(H-甿? RChZyK o/?ƀ5H-甿е[u + "3fyK o/?ƀ5H-甿? RChZyK o/?ƀ5X@ }QQ\ζ3Uzֳ RChZyK o/?ƀ5H-甿? RChZMzTE.IA5@UkԲdYm-Y RChyK j+' o/?ƏH-甿֢ RCj[mf #3t'tEPERԢuYذۊ @VO$_[)!4EdAm< @U+-N+Z8ԅbEuipмr\r1Т RChyK j+' o/?ƏH-甿֢ RCjw8;Q@&oRUcMyK j+' o/?ƏH-甿֢ RChyK j*Z +)#1k+ o/?ƀ5H-甿? RChZyK o/?ƀ5H-甿ԍı$C mgKEdAm< @VO$_[)!4EdAm<Ҧn"$բ(/JԽK(I;j]4%zڀ)Waa ʸ'Z;Mr;HP)*q +' o/?ƏH-甿֢.n@Мc֍QTu(]VDv,26.Y?[)!4Am< G$_kQY?[)!5fSV4u!w|ؠ QEV}֯ BYq*H-甿֢ RChyK j+' o/?ƏH-甿֢_G|ѫ(SPE&oRUc@VO$_[)!4EdAm< @W;mJ̿Keȫ'uoB,b&#Ms[SիE6tݕQFK1j־?riv֚dg|yޯms_rڶwwB)*>~ +YEY|m/ėQT_<nYn&_eiϦW^s~_y4-ٯ +YU|ZZ=srϭMo +?܌ze~c\s3;f9$hBMZ +ķp*QEQEQWt#Qd`>tJ +TWi?|AzU >#{y|Z/m}M NAKc?qUp?FȱƌTd]zևFzc_JhxsC gtPcn񮦼Ğ<#EG61ע +mh4Xn&_kwϮ]VK(IןW^/Х4TE +0FyK o/?ƹJ5H-甿? RChZyKm.n@МcQ@JRdGb#n*$_kQY?[)!4Am< G$_kQT8ehGRw͊@V}֯ BYq(ByK o/?ƀ5H-甿? RChZyKW#4j TQEV\Rf)IV*qߍ7 o/?ƀ5H-甿? RChZyK o/?ƀ5mnVf@Bx=jj(vǠH-甿֢ RChyK j+' o/?ƏH-甿֢ RCkR7Ē@e 3@uy- G$_kQY?[)!4Am< J\hV({zQ,+0-_[)!4EdAm< @VO$_[)!4Eg[k0\$)8(^QXXdm] RChyK j+' o/?ƏH-甿֢ RCj͖hB@h(^K㐲㑌T?[)!4EdAm< @VO$_[)!4EUVPuZ+.Mr)^38oƀ5(H-甿? RChZyK o/?ƀ5H-甿е[u + "3fyK o/?ƀ5H-甿? RChZyK o/?ƀ5X@ }QQ\ζ3Uzֳ RChZyK o/?ƀ5H-甿? RChZMzTE.IA5@UkԲdYm-Y RChyK j+' o/?ƏH-甿֢ RCj[mf #3t'tEPERԢuYذۊ @VO$_[)!4EdAm< @U+-N+Z8ԅbEuipмr\r1Т RChyK j+' o/?ƏH-甿֢ RCjw8;Q@&oRUcMyK j+' o/?ƏH-甿֢ RChyK j*Z +)#1k+ o/?ƀ5H-甿? RChZyK o/?ƀ5H-甿ԍı$C mgKEdAm< @VO$_[)!4EdAm<Ҧn"$բ(^ޥK$ mj$_kQY?[)!4Am< G$_kQY7 +G fN1F +(WV.";q@hH-甿? RChZyK o/?ƀ5H-甿e{+G:lP( ++>Wx,c$_kQY?[)!4Am< G$_kQUlFhՔ)V˓\W)*N1 J+' o/?ƏH-甿֢ RChyK j+' o/?ƴ-nVf@Bx=hj(vǠ RChyK j+' o/?ƏH-甿֢ RChyK j)$(azuTW3^uH-甿֢ RChyK j+' o/?ƏH-甿֢^wUKqjEZ,Y$V`[o@hH-甿? RChZyK o/?ƀ5H-甿Y!H ?hEѿORF_#NdnZ4ྊFV!IڊyK o/?ƀ5H-甿? RChZe{+G:lU(xm.BˎF1@VO$_[)!4EdAm< @VO$_\VPuZ(-1JJSvi[)!4EdAm< @VO$_[)!4ECkrv2SPE#Df=eAm< G$_kQY?[)!4Am< Z$(azuTW3^u hH-甿? RChZyK o/?ƀ5H-甿T׭DRt@QEUkԲdYm-RyK j+' o/?ƏH-甿֢ RChyK j+:Y!H ?hEJRdGb#n( G$_kQY?[)!4Am< Vl8ehGRw͊EPEgj\4/byK j+' o/?ƏH-甿֢ RChyK j*w8;QYrkJ%X;~4EdAm< @VO$_[)!4EdAm<օ۬VME4VO$_[)!4EdAm< @VO$_[)!4E67Ē@e 3Nuy @VO$_[)!4EdAm< @VRk)rN:Z(^ޥK$ mh G$_kQY?[)!4Am< Rk0\$)8 ( +*ȎņFUoH-甿֢ RChyK j+' o/?ƏH-甿֢Yjq^Ǝ.v +(^K㐲㑌P G$_kQY?[)!4Am< W,FhՔ)@(5xxRTo$_kQY?[)!4Am< G$_kQPܭݺ̀lzQH@3Y_[)!4EdAm< @VO$_[)!4EdAm<֤n%$gހEmn8%WhZ+' o/?ƏH-甿֢ RChyK j+' o/?ƕ5wuQ'Q@Z,Y$V`[oT RChZyK o/?ƀ5H-甿? RChZζ`HR97BqZ4QERԢuYذۊEdAm< @VO$_[)!4EdAm<՛-N+Z8ԅb.EQYZ6 !e# RChZyK o/?ƀ5H-甿? RChZe}3FN@V\Rf)IV*qߍjQY?[)!4Am< G$_kQY?[)!5krv2@QE#Df=- G$_kQY?[)!4Am< G$_kQMı$C ӨmggAm< G$_kQY?[)!4Am<\kV +(׷e"~ZEdAm< @VO$_[)!4EdAm<Զ7 +G fN1F({Eb#a[ o/?ƀ5H-甿? RChZyK o/?ƀ5VZWq ]+>Wx,cEdAm< @VO$_[)!4EdAm<+5e +pwP( ++.Mr)^38oƛ @VO$_[)!4EdAm< @T6+wn ![<5R;Fc W$_kQY?[)!4Am< G$_kQY?[)!5bI 2QEEs:[ UZyK o/?ƀ5H-甿? RChZyKMzTE.IA4EPEVK(I/H-甿֢ RChyK j+' o/?ƏH-甿֢.n@Мc֍QTu(]VDv,26.Y?[)!4Am< G$_kQY?[)!5fSV4u!w|ؠ oq\W]?*o~ַkҵ(H޵? RChZyK o/?ƀ5H-甿? RChZe}3FN@V\Rf)IV*qߍjQY?[)!4Am< G$_kQY?[)!5krv2@QE#Df=- G$_kQY?[)!4Am< G$_kQMı$C ӨmggAm< G$_kQY?[)!4Am<\kV +(׷e"~ZEdAm< @VO$_[)!4EdAm<Զ7 +G fN1F({Eb#a[ o/?ƀ5H-甿? RChZyK o/?ƀ5VZWq ]+>Wx,cEdAm< @VO$_[)!4EdAm<+5e +pwP( ++.Mr)^38oƛ @VO$_[)!4EdAm< @T6+wn ![<5R;Fc W$_kQY?[)!4Am< G$_kQY?[)!5bI 2QEEs:[ UZyK o/?ƀ5H-甿? RChZyKMzTE.IA4EPEVK(I/H-甿֢ RChyK j+' o/?ƏH-甿֢.n@Мc֍QTu(]VDv,26.Y?[)!4Am< G$_kQY?[)!5fSV4u!w|ؠ QEV}֯ BYq*H-甿֢ RChyK j+' o/?ƏH-甿֢_G|ѫ(SPE&oRUc@VO$_[)!4EdAm< @VO$_hZܭݺ̀lzQH@3@ EdAm< @VO$_[)!4EdAm< @Scq,I P>(g[kw*@Y[)!4EdAm< @VO$_[)!4Ee&n"$ՠ*YDHߖ,Y?[)!4Am< G$_kQY?[)!5-B:Ѣ(^QXXdmVyK j+' o/?ƏH-甿֢ RChyK j*hBWhϺᴸh^9 .9hQY?[)!4Am< G$_kQY?[)!5r;fYBj(˓\W)*N1Am< G$_kQY?[)!4Am< ۬VM@5 @VO$_[)!4EdAm< @VO$_jFX@ }QQ\ζ3Uzր% RChyK j+' o/?ƏH-甿֢ RCiS^wUKqjEQUoR%EfK o/?ƀ5H-甿? RChZyK o/?ƀ5mf #3t'u@U+J+U VO$_[)!4EdAm< @VO$_Y⽕H]6(Q@uipмr\r1 o/?ƀ5H-甿? RChZyK o/?ƀ5W#4jTQEeɮ[+bb G$_kQY?[)!4Am< Z+wn ![<5R;Fc Y?[)!4Am< G$_kQY?[)!4Am<KH0Ͻ: +*+pJP:w$_kQY?[)!4Am< G$_kQYI[8?Ƶh{zQ,+0- 4VO$_[)!4EdAm< @VO$_Kmsprn΀4h(WV.";qU RChZyK o/?ƀ5H-甿? RChZe{+G:lU(xm.BˎF1@VO$_[)!4EdAm< @ՓCG$_UVYB4]N r +.Mr)^38oƛ @׌w%qyK񯋼Z_@mB}j Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((* ]>ona9ifpRx */ǿ +hG׏5[.jyv@Cg鏥}3x{ukkSٷHXU^%MkIi[;WE9?JYViI$RM2:_+f<|p5E|+¿*}@Q@Q@Q@Q@Q@Q@Q@|֬=R:&ߋPPW}Pny@~ ϋ ja ((+/<}7"_Nsg\6Z~|GWO7IL }EPEPEPEPEPE|<fP5{b)? G(c:lX>nYO8z}s+ƩY1f$9$xV^(ѭ2F4Ȋ!OR@@?o>-a͵V<}SҴMJ,"ZF#`=}Or{@Q@_ů%~ q|i_eZWƔW_W/$:DQEQEQQ]\ek5̩ IU@$P3U,N/ +I-4hX^ `S;#>-x]7LKm8'_Ϟc@?s+qya[ͭ9s⹊ךVZ}7RJY+|39Q%lj55kjb麀<6'-P,֗dL 6ՙ~|>H]HlhJ鬮Hᑣ9 4K"b5v8hwhڵ휽B>#52q/KN=6Լz {f=iaZ/M-{?}+ݼ?m:xo⻇m8d>?ZZ|==Wڴzv *Xt#TW ?F9OF_U<ʀ +( +( +( +(<k +^U[Q/MPȴW_>_ gT-(χ&dU|E}u +3ɿcĖpi(쭐ĤW +c%G~O| 3ɑ'rWScꥫ.b&'e(kG5?٠Z?f9j?t?ft{%`#r>c@y]?v+Xn$˹Aok@cX#}?rWScꥫ.b&'e(kG5?٠Z?f9j?t?ft{%`#r>c@y]?v+Xn$˹Aok@cX#}?rWScѶn?T +t +A?,B8`NJ. VX!סM|v'*zT\+{V PcX#}娮ycƱG4tH%Yc^q4r( {V PcX#}娮ycƱG4tH%Yc^q4r( {V PcX#}娮yc>3]@FH=s58JV*&!H>:]CCRX!_VeiQQ]O5?٣y-Eu??fk@kx?$V5?٩-(U,Ek?U +gmn%2.zT?f9j+ƱG4cX#}娮yc$xTܭXZ/k +X==KcIi%v䳜( +( +( +( +*杤jZFasy/-g#z/׼L7>=s+*Rl:P 0O>xzkz'c?½F𗇼<VgjcHssμ깽 M(|[C\opRn _ڦ}6?f'e*5?ٯ>k^#Ҷs ;g?/]DqG kHUyc!=k_R@ :%MwNAQ}BvW_h_u p+/Qww{ ˵ǡ,?&z|;Ea\\Y~~;uk"F\ɞ< YPEPE[ӴCWmpF]!^uimP͗Vsē:>uxh%W?_Owt-\Z>r;>0 xm`H-PacB`:P|9h"fI歬_v8ŽWEQEQEQEQEQEQEQEi|%k1EY9q(kU8' }ָӼc^ $=Q@Q@Q@|A%61!fόׂ⾶rp j pu|%|T\QW^|R%l>(((((h]Υ03${Ϡ_ŷ~4MֱuG;-'"(_}I5u-b <>$_3P_Z!mMs ~ާ㰯 h7u?Z68-W/ 2Jh7\ ++᣼@sChu`; ??vh7\>-+{ kJ|qωhV:w7qFHޕW_W5o>t;-VK_7{e] ;PWGx?υnJ{Xb +Hs@EP^CxH6RO|T5uQrtYj@ {m-bin'u8rNC^>x}5OϪLޙ%M{go6PIyd{(z( +( +Q-RE"V=ŏmO+Zo}"/jɌ><^_c]xᶫ@o!84`|q@YuZjh."lG/WPwm Y#qѕA| _[| [VciK Вy/@EPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW)W]VX ]]x=_ͦ|@Sg.2J(#B+N>їtK'/8J+PWSaOOe(I/~EQQ]T"QTPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQTuwh9sk@Hdvrcµ(_ri3M֥6VH#%,{^m~ojtXW3 'C/b½_g72nfC$ұgcԓQQE}ZI+# +( +b-ZeαCcjS;+tm&Dᱶ$ccۻsX~tߴ\}5[2{iC_=,=.Ew +(ä(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+Gtډu{F>id/8>4G^+Ar}7=BT[NV,~2U\4_=OMB4S$}Oʿ,oKqy=笓]3Uzh+6EV +( ++K_ڋ)O+-u H"nIbp؊Zx\U癧\ofrc}?^rޣOEx/ZGϴyw1I"?}ׁ8Jq5( +( +( +( +*eۛ-ad@?\FmFaqgDִԩE6WΚ \MJCv3?A:ּqw4m # W},6K>5Ezy?kӡ\A-ӈdWTWK)6zƚMEt[Y&}\-=ķ7ޒW.O5 SNDQE((*͖{ { ;H~@Rm-XF~VCL6?\/[m}gTqɎ'"z{t/xkiD&|_Uχ/EE)Mmk~~}Ϟ_Pl޳1Z?E~ x/Fͧ62K3_һ+ϫT_v(Cmkoekoݎ$ +MEPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\ϭMN*HI,Hh(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((b3BASw?/ht$w\nbqֶ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((($x#1!/c@W5iif$NOZEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEs#<(0|#p(K,pD" ԚĿt i"1\58?Jx>)\.r"-5>0Km/] /k:=?<{~W@_]7Os{s5!vo<Q@W[ῆ~-NٿQchx"ZŮyw Z-4*B]h'3+}/d㪹s}@4+OEcog_U((((((((((c DŽtIW&"g[>|EZӑ7LX]W|SJ R8#E%o5|7jjA]szGkJݳ>3BA&u<]03?C_^|Qßfm<}-WW~ZamC^ՙx(%A_μᝤ&ٵ +EQEQEQEQE?Z'~7_7W_<xHӭ48dst젂j5>0TW8ZQ  ho5@?E{3?%>0TW8ZQ  ho5@?Ezgx:{}ImhaBdtQEzG +x,/tnI8 FGU=w%#C8ZV>xBn_sȱM)bր>(s*䉘}@&Oo$D:+ychexaъ"_E~0 +ֽi_t?9gA>eo(((·e2B~Hk߮mZY$&cr~UFR?Wl Z/O@EPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE$Hby$`Yu5/JΠ_ud.Q5oU.4y*kEWy!^gHȼao"k ~ +D4ߩ5ہS崹>Q^Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Ǟ)ŰzIݾVhʴ#&sP\!GH67O8+#BO&ss3 +( +~x[S.ycotavW7O-Y`mc 쾃pAp@8PWc=}7{/'^3{QEgQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?>+=EXWI+Q&Uŧg5k_|nUԛP坊y/^u~ۣ4h-̍0Mub*mB\> kkVHbOrߥ||Cg7.]4MLz\3^,~KB]Nz [nMKqvu'Z-[rAw Hy,W^,OhR,y MVI-!ES((`fą滭ύ5r}oҳZ5yg_B迳5b庘PDM$ʽE}Om?CYWү >#>mB? J SE?C%ѷIJll/^:u[[$<)t +h>`X*?5yz% +Q٫( +( +( +( +( +( +( +( +( +( +( +(>0s/6 Y_q9$9_ q7*5z`iTs,_ƞ猏 +/2Ox!w&;P~G?C5|_B|"l,9⋑vH{1@=Eeu 2A" +($v w:ӂ*kI_v@8ikxnMi/pTӑGVaڼf$,$K31$$h[ ljM.X ^߂ +(--$FF +_avUb"׸PEPEP?o[\Ko6X8 u#_rfo|F5'MWWI<rV˟kK#((((($?5+쿋_JA^CZҀ + ?J%$B(=((+\)3r;l\}c+?ho兯^mdAxzPu-b;vw)>>oo¸(uу+  ZZGƅm"Պ("FUF>(((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((dGoJcK @-WVme,A כcQWo5 3V' ¨V{Zp+3 v]|S~+> i]"Ұ[$5uҿsr\yP+ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]N ~r3U$4SY|=u}ps]u Rkۧ4aWufMVj'odWe?ai|O*-tHk2p>α袾1QJ+dsQTEPEPEPEPEPEPOA7it'Rkki$2")#i 8+Q-^?RP7$cQEb +( +( +(!["yecDRECMok.Po+~/l_\W%\v)E+kF|BGVyt1c"?~uVֳU| +:^}\˸*}ϛ__W-4TL 5/{^+NQndgWz]U174-A"DFamg PU(6weQH((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(>a_ }hk0/k> +(Vs-Xu:}?Йz 8k_d[[7^1_Pxs|*"QK$~xovlM G&sП~Z}GϤiQw'֕QEQEQE% +Q٫+h(V +F^A@}_QEQEQEQEQEQEQEQEQEQEQEW_IOmܶ)/wov=\wZFPU*F= |E}'߀Vz>+=B>׼'bs\;Qq|DgXtj+u1V֯qtm,W@Sƞ"Kvl*G#ؓ\mht-:\!_ ߄ n]/=;?~ό TtG>VYEmm p8*P8!HbE4P0EQEQE|!éܿ뵯x]wP? ns#+.)8 ?xMs4~οQ/>xg_{ss蚕O6D@3ھ(((((/׸־4*- z(cy$hTE$z_ ak +w +ϯ !пJ$?_;}gf E$R$R?!((*+h/-e%d1) LTP~Q{4} +gS?לW6^[Ims sA*92=Amw$[G<LdE|Zz?f5;'?{Ȕoxvw/ #\\z]ǏZY/n{T;AxD6#9Xו@n;zmu(1 +BrTU:Sws;~@PjچCv\pIrx^memdhy>ff">/؛}lCYoOa@ ~A2wk:ȿד;Z((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((3↯F׬-yotg^Wg!Q_0mO|UNJOCWoE4 I<)+{l6]h蜏Ͷƪr]89Eu=H5a`!cIj(QVGF*)Et +(Š(((((((((((((((((((((((((((((((((((((((((( +,ֲNn?^ Fь# wqIVbY,NI=ʰ|Oex\J( +(Ow գ*LpLE[!۲:x[ZF<[ʬ8>=k*c %ګ{Պf*XnJQ\EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_'g[W~Ǚ +sYmS\宮d^O Ԕ/ΣХEWЙQ@Q@Q@Q@Q@Q@Q@Q@G#Vwc2IEU=wkAo [܌zcQ:7aE{Ƌ:ugo&EW kAq2[6}p +૚ЇéJ [Hι]+JV?^5.m4U-H?U#EDUTQ0WW7/%t_ӶZO.<*dסizCizmcA?R9?hQ^}LEZ)$(FQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?,vvctH%Yc^q4r((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mHX7V#کcX#}q_[^ B+$Պ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'tXn$˹A]N ?fvAg4%Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP::}ϯl}/  J9i|̣q''i}+u]Sͮasg8 (OQ(*V A()7־f>u+^N^ݠ6=:cZUy]-Յ eB?zw>Hj.\{: }OEy>8;]7-фϴO =,N2F#IEPEPw+Gf _X*?5y|_PEPEPEPEPEPEPEPEPEPEPEPEPM46TWFeaGQ@_lZZvբDO☬Wm..(]}=A#o ma8b_ U@*Z((((((((((((((((((=CIk铹jf(o?!riP~*5-GW7,&ŃC8̈́Kf[[;[D6:$H!SQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPW7Zs3m$2;z(&[/u[ĭ!9ҽ⦯-ѱ5F:WWT;&iVT@+{L?bӵx Dòdc$kQ ;8~U٫'iq+H։&+J?VZQ_QE +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +)hxP%E'}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ 'w4:/РMWGVǡ: +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(gTf +=(hyT9X0ʐG4QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@U4Zѭu;{vSEyg jѧH<I%5oi6ϝbL{7+#e*pA W۞#'|V[) +6J?k+K8ȻάuGQ|AxZRΓsj*: 4/kѵ[3FyXPxo-C=.;C*~R~k|7;>(ؖQܷ\Lxc5'xWKekǏ@*?"{nqrZ?Cqh|Oеr?w+Gf M 'ľ1 +_мy[͔8#+̨ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*˨lm#@MvۼRي 3~G^Vu u-JcۉZV_;V|r|jңp* ƑK0˘mss'kOG[VE'ԏ|ץ׵JϢrQOEWYQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQX) ^$A&>éӄIB;JJ*"xvFC)ּK2K#vn ߩըJ(3 +|ჯ~mŸ[e?=_oa:]γcjC=w'WUCcj1{5fXaHO:pȺB@-WQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEd&Ѽ1gcP3C*['h5I.]K@Ywۿ2ciO* +񫻻n{f'&,գyOKNICEWfQEQEQEQEQEQEQEퟳ_Y">X]hK|.%gi|?Uu90wи-ON+卂((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +($QE*+ 2"Ŀ fUsYOgףQ@,xt}iml9k/,n맵>SFQ5f>Ckm_M0=Ag]"|%<{7_ux~Ҥ@uQ@Q@}nj.tk(p=:j:XjW]i X$(LJ>?xIj㯚[Ԟt_{?\,]>r>WjxW/1MV8jTUop+qQ@Q@Q@Q@Q@Q@Q@Q@M&^,Q빖%8ܞI'42O],1T`*?> *'eX ;nA*j*{53h++Q^QaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq_>>6=>kv=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~G;cRgԑ/oúWE"㶾>|;xzse'o:2z0+{+]Bm~):+|Kºt6ry>@+Q^_>07ohYg?Zb Z)chCG @ (SFۏ?H&B^U_c̿R>+Ũ<-_^-+[+MO<>]|cJ#_gPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^-;O+xVj[eFϹ95xUlQ-1bxMy8c*j QEya^{H/uG\=PE*XaxKI#E8OmX;9?ɮ;˱唹9(s +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +<}{ZII=k}I~Hc<x=Ƨ}5Vaҽ\'Ŝ؊܋nQE}9U)lPҶQzRm%v=.tR-L?^ikja@k[px¿b VLr՗_%żEM> +^>gEAZՓAZlQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQYֿvjZ@:>:IY߈tY^H{>>O~KZV^mP[}[?A^3꺆zw/IA+U']C{'h _ +y * uNsZ^y5&rAU(rh#&(AEPEKom=[C$Hvqfc׬G6yw^!2&v?jƶ"zI& 'C$,}IH'6(ᕇz;^ <%mh|pyy:{WkP"Ihq"P:WO6:Yw)t2r$JR:)QEQEQEQEQE|?Eߎi+Uqk+;}: +HxGkT SE|w՛Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Ua ʸ߸/߸/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEx{1tkvȿGa%b}xgV1d~(A׏^'1ahA#\85#*` + +ĿM?>q>덧Ͻxgi{n ՠI}W%C?χ]o@l-.f9(c_aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU7qI+6<7⮯F6(! knef,9brj*盗s+Tu&QPfv O+aSp  y #~Ruėҽ>JKS(P+ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +dO,4RpIטFOI)Ju=Od;^хQB?3:#vs>.$"Ջ"};?\WSpP''vQEhHW6_Wq~UaI=/Z[RjwݾEaĎ?=kq?;~.P{Q}MEx'hԍ" +1N((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((sK,V@:9n +u+FVѥl>:5.Y_ +m>tU?~Uky^wp^W'zaz|ć4=ߴ ZV>t?UNWj޽{=ug,q=Q^ -* +_dEW@(& 'W;R8Գ1uVoW?>VN}W4-溝 IHRɯX}gVA/]i}:'^x0l4R0V<ںqo>sςzFRi_ǟq]W)oN(<'m;jF;d~IwhsA[Xjr[L9RyYB>P]3^k-Vv W8>s^2vZĉA3+޼Q=i.<1iy{,גk / WF50Mkkޣ[8`QE (2O* o$pI' +={6tckDz}c޳V48*|'ּḓas"f>+<#Oþdt$>½,j9h̯kJ,0,^F{8j(Rrw{QH(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Ly$mF Ƭ:(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((FPU AQ}}ME28b>\h@>(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((i(Ĉ8au-/TE +((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((kK{緊W΁7C*j((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((=1iؒ\0a0O붽 +⎯)F6J \tտS¹q9)?=,}^J/C+>p*[ky.wK3hNE]½#K1:3Gsy4MԚ{aZXC%\ gV袾++#IYQLaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEOU}6kQ ucsN1rv[+ƾ'_{ aV!ӷ^&噋3NI5{XծuRkxQaT+8Ens˭WJ(oSV,}dNYC- +F +I={<;tkp;\Z{ +^ZkYYEim*袾Ml2i#$SU')R/ PpN1KY>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@UWYt;&/`^+=OM /U [Z4o_㕱R}5.Tyz}xVusTV@:8ST=ǴxYk[Oo/[յO^kV{9[8tqT(r/S'& +(QESIHD,}k#/]ּml;nڲ^zI,n&HaDRֽW?uc˹dɳxy9QzJmt;51o^Š(EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP6,pNzTIX3A\~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((lp2OTֱ|oq\W@E2ׂ1SnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPQOs )8楬ǜc??V9Dې5WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +ZjeM&=H_.O<73W.{rM{W _%q`E#^#^F>:@+ =%?/ʿ׈}{tȱ$WԺ}ZnmcV,k߀y=L9(c +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(@Mxt/S>OZo^^{C#pGE +0UJWC[4-|+im\Sl}+wUկ缜i[!G=g^ -* _>NMQ] +( +)ȱƌ +2IG?|Aw:Ȳƽ¾v+aoo\Fo'o3EOx[^|@iV +.1癿]ںZ(s4٠QE QEQEQEQEQEQEoo[oo@X>> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*^2c3{p?I؛I]7W#f0->NIETw +4 \cyT~kkMgK편C'g%>JKS0QEvQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axQxwIiV+gzazֵ}w2K;JkV\v5e?TW-y'#vnyaEAf'M]kS~y,z"c+t2Ga\GOV=5 /2uo; w+̱|Wzxz\vQEy@QECY\Ubju_+'t''t(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((v:Ej7p'ޖg +M&ݐXhOy^CilzI(sW̵d˕*Sq5Z^cP_*{*{^*SZHsKc<]@[ZV~mR{u?SCj](U(VePRů~NMQ]" +( +)QQ1P2INk]Ψ?,O?\;5Z.i &<uDR +2I{˹տQdyī{'o>Ÿ7VlC݁)(W>/_|jtkao~]EW9oN +(((((((((C+vC( 5Uaa ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEѿORF:ISutQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}vm }Zݬ/}Zݠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|AqOkZ|AqOhF\_VfjtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWb͡H=ܛ'zU|#W6ɍIaW]9*(SBXY˨P q*ĿRqUI}M|똬b.mt5iJncAOEKCҶ((((((((((((((((((((((((((((((((((((((((&:L^/zOAJօV3yAO͝~#?\EWУ4#g79s0+bυ]r?O*0{ߞ¹nOj6lNӲs51EQ"hUT`: +Lg$}7{:n(p(( +:–d + 9+eO|( -$ OcZ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*gٽ6񌴳8Uz ,]CQҬP>8Uw+O2lX~5}X&}ʣzx|Mgć4=-_ ZNlRuNkuk&^Mw/?*{*}eQ^ %* ZdQE (TPI'^)?yw:dط;?ُƲZ%7aǚUI5%/yw:ȱns:fcv =U,syq=qzQVfsß =!%7yO_QEy-`*((((((((((+_Gvj`7AJۢ8&_ɮa#F8?JEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQErPn"7#o>6BZ6'=u4PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{M }+eO|( M}ːF=kn(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((y# +gZ(eO|u+rx#((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(3|A.E!,n?@I݋;Xײ|d&Ik ԟvf|}Nj3UAt +(4+>iپK\M|cz(UekaˉV5k[[h!v +,h= +2wc^nKEW{aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEɦgT5,Ѹ -?{6y߰j{ۍFk˧/4Oj(%m"?XyvezQ^fR7+mQOVa.sz}OS +b7^h%e 4c~:(-ꤒ +(aEPEPECur3UqY[)!4EVKؚHՔU((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ӭ$1g +&z}iIw}s c/,Gk<]N-|3mjOxwccv/ x<$vho.pgc^.#7oJ+>!?zVb{9ɟn_EΤ>iDQE@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@U;F;DvߜmjEdAm<֜2ITChQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV\Rf)IV*qߍ>Y!H ?hEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLQ /+B)bfAm<NQvc;ޮPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEZ,Y$V`[o@hH-甿е[u + +JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((++ĺ7C)xQJM%v)IE9>Ciu\cT^\_#3뉯X7?va)R^zK=B(((((((((((((((((((((((((((((((((((((((+#xϕK)?v%]?N4 3ʷqDCҼUbKOS^U~{-ַ+Nރ?uh#>iNaQ9ri6쎋ƫym oݫ$qk;H,,⵶G Jv5|/,ENwC֥MS(S@((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE ݵ7[2UG< +T}W[2UG5~.eniOs^/k+B[Y}zק~HsH|}l<_ [h\>0+ +a7=xo|YxΡ-)8?Tp+0:4>~nMQ]DQ@WG|O\E`Jwe:޳V4ݐoc^^%7quUs\޽_ 3[Z}y]dt_gi^.#7oJ+Sqa7s]WR>iDQE@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ/q\W@~EX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((.˫V:DmLy@'Q<}lumD^S>',︕cϠ'jz7#~!sXC!1ZQX~=}j?u~?qizVZr+$#˯;X%׭a^Fµɰ+(#)$7On~tS{u*’曲W8 +7<̰n|!O^>Uw~UsTx^jQEy_A2?lL}g\ӣn%T$v\WQD‘FcE +;e'3^N(S +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(x?-(*r`Catʤ#o7|D?]OSS^]Oi.'yrŝIi\4pjTu%vQEtuuܧ#v_ "c^F %ǻ,g$>'#G=p`QE|Q@Q@Q@Q@Q@5_+TI$%ư?oChW't;Gd{`VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQQ<6< (7<0UQI@TwZ[ cs#UyG׍Q_7Fs O˝-ݨ/?jW?zhjgQMݖ(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿnFi=BassX>s&}?ƺ[4hGe@8 ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#R\iws+9 t֦ӴoHJh(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*벼FdAd S濲oChnFi=Lf1kEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Yʹ6Ȑ39took&}?Ʒd8] hQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEaW|U_ʿ9)JJ)L'^0.Bxƹ('9 +('|>Ӯ]j%{#' +^\}##v]fOB[^%$RtRQEuQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@`Ӭ$1.czׄx\eWxD?޺Z6L[x~\U}6YQ;[򭂊(X +TFK3$J>ˮ^FOwҹ8Ц#Jpsx/+/t 4GQE|}Z79nV1QVAEVeQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@S%+x^iHAԓҀLhy"w`ԓҼt-̶Zq)ǽxW + bܛ +( +( +(? +|M.x` ?^qQR)i!s? M.u ?^#>$KP^~t?EOwb3~Wjs? W˜/?iPvTNzhjgQMݚ%`+1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW|f~72Wf+k۞-/Eyqzl_kS/s̪Q]L(c´? 9s +v^ zG^/m2HVa*(a{Z숋*"U:Nꂊ((((((((((((((((((((((((((((((((((((()˳:e_j|E&Kpb?}xEw2V,}k0~^ +YˉʹVQE}1U>T7+mQ}ZMƕ6|PqvQƽ8($ht-AҢ̏]zV|;.QQEpQ@Q@Q@Q@Q@Q@M̪8?Z_ gArWoZ)VہAZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE6II]R5fc4dM,,qG5.h~e?Gl@Ǹ OE O}9[X~HWr}嵪/u]sHO|tt_2D_km){<{ׄǞ"g+k +G_np*45ܛ +( +( +(_ |M[}](:1**T57d4quxG_]hm~`R?[WG熼1\E~J +)e:'޽lFoҊ-Sy~xg]i .StOz WRiDQEf0((((((((((((((((((((((OQ{Xշ +߷7C/Oռ{h#6qX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEaͮF!B',.ㅢU A[7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPW- R5 ?3ZmL^5]}kB=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +^ "bͷWk't+C/OֵɻIB\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((B[l?*/]#Uzm_t~p=UoWWRݏ̪](3 +/$e5LVG^$$Ӏ%fd }<Bjrz_+?Ahd((((((((((((((((((((((((((((((((((((*9 'Evn-⟴%~Һpib*(/Znk~"ZM-yH#=*(N4JNN(B^ưux^sv_.<#ͬ aĎ;3\eqj?mQ^QEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((;TQf8zm$2Rk|]mq*}߿?Q^⯈^#5+[\m "}X^-WY{sH_|q[i^q+ QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]?*o~ַk ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֬ǜkѿտZAq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\__+mD"d}OS9(&sPxGuFWk+e'&>NRrQE"OR5yڼ‚rߐbk:G7l e40? +kS䤑J^ΌPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQTuZD&o1Žݔ{qQM/xh:on,׻Ҽ\ĒI'M\u;cR$8죰©Wఫ N^Z+ +( B<5M-]-S+ +H?mo5v&_ ~ lk?Ňe=ޅ/i-v5-ma11(TQ ++mݞQE(((((((._1\u:PEAZՓAZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE#2bI +ZFeD.Tdp4wx{̶ӛ^xb%>t?,O;&zb';|C:0mjڽ.a׾^1 b>__xu▄m-V&J+h+ɰ+('ľ0e{ # <\e"VH\vCF 4/$0YR<{wo½?<9.P_k}O1W*P`ڼ|FnW͖ooZЧ*({Z08QE}!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP3*)f!T N~5;xSc rDC统ooƺ);)>vN^c_C`Wo815 +8Š+'5&l-,GNYV0sȨEGÿ }k7e°ֻ;^U9򠢊+Š(((((((( +wfON?]KL{(9X*PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE $:@ HHU,I=<]~-Zxyjړ¼ſKxo Dgmwoğ½ >]ZED{5xsþek_/-Jړ¼ş|KhL6Dgo߉5^F]fNMQ]Q@WUO~$i%- ]ϔ}}0\vAkuqO:dc'ˌCzo^sN,zj*"U +fiE_͚*}3?x{˹ԗ^y:%>?,銪@U-խR曹IlQEd0((((((((((((((((((((((((((((SN1.s=ZTP;?[mb%)" +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(0f%IXdRYh^G3U' g=>EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEEsX]Jk º*(7KӥiL ml֕PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPT;'#Hm7Ү@#?/l[5BRy:՚((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(97/V4xq+*Xy}xڜmƯ=kv +(bxCOe3'/? +۞+YwD҇}1^_Oyc+T~EW{EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\It"kɲ!k[3^]8Hb]5q?,qNG.b|WcW6[>YdgW/#ff9$EGQNDydXR*$D5V+a˜^k4:IᲵMD'oe<=4}8 3wGuWf8o>X+=<=.Ew +(Ӡ(((((((((([X8#X?7(􋩮mqZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEdA +]^-տ^b,vN=qWQW}ٓaEWi!EPEWa ˱am5$K53`+E:e-ps/_E׺Gw/.W?HO #WGE*"* +VU٢7q +dW",haUFExkTh[QY ((((((((((((((((((((((((((((((( xҀ5h[fztv4, >5Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@\jʋ( +@GLԺ~w=QI (mtQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET7r4VH H>lQ|gihZՠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+?Wx4Er7+{MKS$Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQER3*!f *{ +Z>#j em\GnjB.O&'꭭Q$yILA +ˢwgNM(B=gΑ5-?7׭4? Le}wG~^%50( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(mg&._޲cCO+jeZz9GS}i&lmۖ_:E(ƌ#<\(؀Jso^j?7ҹxiE4e ;z(?ʽ8(8*( +ڼ\Ƚ7{j7|uQ_:wQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( ++ϼ]>-OP^>j2}]S. _cn>jJ]|mmeݒ. yM~y +i'ڼſM]}%*zǰ*0 +4uJ2rl($((O ^0 * ᮥ!OAS9 Nn_ x^0 *pS| dWG^w:k^v0ǵzQGIQqڨG3x(*}.Du׼u +}\{ +(HcXEHaUFSzh[QY ((((((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Ua ʸ߸/߸/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@x=_͞|}WI"EI#D@|jkڋ"feQ +s:S:( B~.wD$eؼ~\z#lZ"[D}_z|:0hz(((((((((((((((((((((((((((((((((((*;m丞AQgf+&.J~Xc~߇s^ww=ܷW2&;浼S|EG3+}S֬:̿zw#̯WKM(@ + nVWe'4]&/WG1e?j7WN{} Jd(˾9vƴhFRrgJ(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( ++w S̀\h ٭X迩wşx́~e%C/jkk.4ww [̷IS_Wx⿉[A%lZMտ=>_F̜ +( +( +(٤i$@>xOL.i; 9/_`M d"OA^&kjݎ|Oӫ~<{WCVФ0DDj"(UQ^F#6th o.\kϖFտ=a+xRcHAQQOJVwh[QY ((((((((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Ua ʸ߸/߸/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ĭ_'wA]?_{ _=W|aկihK8mBuc*sk^zv(8Bm>$HK|? +i^1e o9ƾO/GUQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWEO:-Oq?ABӾl +BckݿWI$^UljoqQ_@pV׆A6v[[#% +:*Z^&XonJQ\ƁEPEPEPEPEPEPEPEPEPEPEP gArW嫱v 1P}k;BAZVlbhm5j +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( ++wŏ Ó~ݨ/e!?jo|]7=5X[݇V].I^~}Ԇnjo|[7>fb7G~jwѣ'6Š(B(+{^ [sh| 8y>x:Tq擲 +.>Icp,Ic2}ܼ#GҼt9+zͽom pڑơUG^F#6t4TQ6kj]|Oӫ8[kAopڑơUGIExԬQ$ +(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn+9/fzZ+}s_YE=B rBQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?Yt(38,űޟkGkr,{@tQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}v''ԮEe=P^ET4.VFm=*QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZVoXʅmS./3U{+FZ[,*ł 袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((4$ҰXRǰ$e2$lMz~AEIE35NozΤƵyɝ=<`~F+[mݟ(n( '=Α/+ x2WS #CՆ(Rk^?gMD5/eJ1 +(7 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +ֵ{mK0.ݔUu݂' +/Cm"s}|]SRt}vU:(TUǖQEB&+kx̓JQGrk|3C!-S 3|?t|<-Fy._ܫh{O+LggʹEWuQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@x⟆|#~}Ԇ`=׃xQ[7]qZ  j+V+.$ww_ K̂[߯d!Eywx̷==XO^E{|mwݙ9QEwQEQ[˯#Gy֦RUí ;^eϓΠ?,Iӯ{~iZou9G?g+sƽr;kH"(*p+fЎ~%]'LE?镁Owp=1#@J؊;$EV# +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((Điَ/'׵\Gkm-Ͷ($˚&]%it }KAGfuyi.:( +i>3t07%'#mb֑ڼNHj|R:pthQE{ӅQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W;tѐoffxcg|dZ+D(((((((((((((GX8=k]K}_+C崐>2=jVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEr~.#&w+gSGǶk|OxtM"t{z@>}RrHSSִ;S-lʩO5j?<x[[u=3rJIէ_uC#êRA ??h4;^] bvvEϧ>x6κz|3Һ#~םSNlLJƊyE3 ++|FOE+ۯ\6"=0~~k-uƕvxd ~S޼ejZ^_ZgMD%'Wee9 B :Š((|[;^ok'>ƼK_2OʶcRu?vꕗvKGx⏆| _cø?|d/{i&َId>]F]9h$((|=MsWgѴnH8yiL'd5mxwZO&6xN>yw^&|㟲J§c^gekkeoc HT{^N#6t4Py~u[ ٢%aS~~ׯZYXZkgoc HT{"gz%QEŠ((((((((((((((((((((((((((((((((((((((((u餉tlb3Ҷ ?~Ҁ2s?f&-c1$ߊ㫰}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((䮮`'}jm.wԡWFRNAbGCU.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@^[I! W)5_>>7$w\nbqֶ ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((rG3ʜv5Y> 845iif$NOZkѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPOWtؚvc k>.jnDzz6b) 6¼LeNzC1}gQEq +pkKxvNf|ws̚:G,՗t62}iGYfbzOSLŠ((((N+(,nP q_Og:Ott,gCa>ٯ+w^-Gif2wV׵yܾ544\ec:+e|9o5˽ɟD7L8!{29wƯx̷e5Ru׍G/U^fi߉xx/gm?v_ďƼˣ]8?3('x)([⛿h|,'xo?.?msKrV!pca-#1 +3hCJJ4Py~^]׉~8)nA_ӭ#1 +Q^%lEZw4I-(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[oo@X>> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((({lPF9dW"ֈؖA]?*䃗c::noڍs}1ĭ#{sESm݅ScK;'G|>ϣ^j/u'?^}X2-14]NL¨wo?ɭ +0tOT+S`((((((((((((((((((((((((((((((((Ng&._2cCWEm~ti3m +[ Jŝrk~^{/ŜܫnCEWҞpQE[4ۍ[Q7K+`zܟaS)(F׃<2!LXCLQ_{j"ƊQF@ҨEcl>Tg#nkBKx_ +(q +((((((((((((((( +WS._1\t^9?Y>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@x-[+϶3{"cObOֽC^!𯆯(X_đ_:Ϋ\nndids݉ɯW+ª~dNVЭEWQ@Q@Q@Q@Q@Q@Q@Q@VcķG滗=ُ +>ݐUgY5t}>k?§1^]׊n'_1Xdz?Sck6IK=>BT~FmiI]ekxr{3p[^aviiak c (G*Vլ6h[QX ((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Ua ʸ߸/߸/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@xGŝ_Cł1X#3oO/g8Gj[eFϹ95Z +/4h(.QEyG4?ijιx\{g#Ψ뇼j]Z|R:TdjzEQ^EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPQ\gm%Ă8bRǠ(⟶ܝL߿e?}WN ,EES:8ݜ Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((֯ +-6%&;_] ⶯F61F:o<@ ^.=Wxҳ(8  JZI"IǤhztxoǑ܁NMxg #Sv%7 /vUJa{Uj(2 +𷇥+ny¾S*{븭m2M+E{<=GiSM&>a^~a;G{ +^ZiioB@IEmVzEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP3b&E=SOY\UbjUcZy]?j(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+;_:g5MANYPZ5|IoSlut8ǻɢ+p((((((((_<  rş S22~F((((((((((((((((((((((((((((((((((((((((((((((((()ʹ8V~ѿmyT8FA=qX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE082 ? +Ȥ\~O]O h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( Nit_?Q_>>;et|elzӫ ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((gTf +=)k't4BeH#+ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPUu+2ov4Uߋؼ1/. vug#*=7>lj\yy5ͺYi95 W(Š*[ky.wK+}X@Hԝq%)a2DVXE-Xu4St;QZQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ wHi$`18>23U>Sc+ +?ʺo)NOkk責"pbk] +8Š+/wlmۀGu?kV9d\ .Tu?|-h5kw:XsSh>iW.(GQXQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((u~~Zq?;%p5!?h/nGԤsN[2Hl9beziMo!<My'o~𾧢i\]BbY!ld}o/v$cjzt2ANWh6Š(X((((((((ڦ?01M}^3;i jE=.fe͉Q\%Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ/q\W@~EX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((ih 7uosյ"P[O]\q3nW.{rMyKECfmMu#+<@fs zn9^HuķҖ~]J|W^=(tP(((((((((((((((((((((((((((((((o>%OiG +}KQҴnl1.O5wU&xE좽,/~>G>""ݔ$wFF,K3IiQ_RyEyR(UTdz@qYA?4cNx,!MĻTSz?<7t^Mǯekq|Ws(󎀢((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE#:v +2I8W|Vn&"卟>(?R*Nu&vW럴MAR!kѯ4>![P֮L-[ʏW9BU^zB\. xsrZլrXco2OrG^k~QnB坺 "vIhJSFRgI5g啐@&$ydi$vwcf9$mB)AXQEh (((((((((<_4,04e^[1"sP?W\M,_h=wHw`‘T*PԵu&77ZQPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((<;/e#^!]_Ww1f0-9oxW^*=V5+7@+& Htȱ$WԺuZnmcռK1^HpuV1Nzo<(I׽Wh=̮>EWzEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPGAEp_z=<$ǻ7Zk7~sy/LFQRZvHuCs_tm 䚔,rg 5 ]FӭIO'tQ+ҥaKfƵN[V9B}|EEX*(((nkFasy/ \tDS&mO_91쫑XկJ${]RZ^NZ,7 HY +_C m7kR]jFƽK4'Kӭl &~םW7)oczג4[Z^| qynIM6ltaه#~74twjHC"gÒ=rGce:d8it84WfQEQEQEQEQEQEÏES 9H+}鶼?}}JBh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#]1bI"O$-ՇB@EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq۲Rz(#~ַiYD]iQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kS^4bDW0q5 ՟[ϼ_5ڊG`0(QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPT5I4}QƯכ|b͡ZH=ܛD~Ui:nF8ʔyeyybHřry&EʅU 9uBn%XN(J +#i7C'Wf?wVp Ek`0*zP䂏ct;QZQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@T7WPZsq 4v@ewH{N,oO^*k˙nn$2M+v=I5m~ojtXW3 'j']zZlQEzW42Xԡ\){(O I<+<qhAL{/+Xj|^i:CsGmM.aF>f=]5~+%'&-$ +(Š((((((((((((((((((dGFI[jkXOP*(.aBԴQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\^ܷձz_>.q\b]+95 K^9${b~/T[W`3CA?||S񎿹n5卧W/$}I=bKOS^,R_qcsmwG78LD1GV?Ə[;ӡoM9oȊ+ҥ7ԇ&nn/'iyI+c&ؐ(((}E&|v}kq&}MsUPHš.݂q$g`GkMGt-A]"ƁB"O>k{du m>38' +?3^n泓R\0^Eys EMoM QHm~pE@8r((Kvܱl{g HEx5}^IůUgZX\_[ߡM{x˕*uPꏚjXjvF~h\TM5tdQE0 +( +( +( + GZ0M c~&_|tWշ| 1iAԟ15 +| :0&ǣ]6?Jס_1{6|SZ\\-7ݎ$.5Xh=n?综v"-6MʰD? +)0__clßY ڞu?\W?'&R(;O ~zh6a^vE$QEpQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[oo@X>> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((2ɫE|2yԟvbǍ/][t6=+^&=VϙUQX6]OSeīd5%Vvp»b5^'HosY*>绕Q]QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\TKVk3qÉ6ۏcWNB +)(M#;@k73?Rz=#;@hGn+?a]GM#;@h'>KW؏MٸW)w=[ 4؏70.^q b?&[ 4f⿓_Xzu}Jo+Mr)EljRWɷb8wnǩ'5+*ګGELL}ש׷Oi[saҪE}2I+#nQLDvsZ[FdV +=k;A&;8}~W%I Ƭu„ ǹ^_5cG J˝Š( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]N ~rx<Vd<VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQX3Um`z|JRv~]s`vL"OQG뛓O_+.[Y^"{zAu;[5@P+ϏܚM֧(c? |4J##$LJQJ:%}L>9U\'[Gǻ6y=ԯKq^\]z<5ViЧKD6QE((+wDgItUfd`F#P>TUH+~%*k: i{d[RajgW&OҴ&[6֐ ^mJ*rl(aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((++Ě9C)xQZu+O#ow3W't܌15})HbY,NI=(|`jڽwJ4%wd4vG-?< ힻz/3kQVX@TTҦAt +(((((((((((((((((((((((+>,ҿޗ-z=yŏ:W%?ɘ?2+(((((((((+K_Ov0Z_k Q\EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫪 PIq\ϓ/OkVVR1VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETWZ@1(I#Q&]s74]Țj3/O0g ֔Tq6HrIW!KpW5ߌ|G2Ws񞷵Λ[Z_7ߥgR)i6pTI\ծ.ߩDI$z^ xp)ҴkX$^'oּ깵|36q--GzV:MZO^EysZ:GCckM f_mt<Ϩݐ +@-Τ7r`*((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷk_Gvj`7AJ®Ar~L]e"Fp~b(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O52OME"Pc@MQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]&pI>2'Mk{}bhV\1[tQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVVR39]N s^L]6tO{EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE_L[q9?{uacPa㈈gU4רQE0W|>+M1E?@C~b澃eex2G\MxM 窟mNܾ=djv4QE{gхQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@yŏ:W%G8Jz_ݖC3GTQE}qQ@Q@Q@Q@Q@Q@Q@Q@EiҸ+K_Ovᠢ+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((g:ZZd$ 裓 +mslGX]j2IoK ZGU=GVӴjWp~yB\cr[EBxfl9b ۭB/nfH]yJO7IXQt>>;OK&!6Gvl~`Ms5ɦCkz_6OW^,O١뚶?j7W<V}WrI+"B(EPEPEjA&'J_tHgmWc=Q} *iRocȪՆ }:c,~@W^mNa>\"cM6Z#0?^u\Ҝo̚jdK}.nsW?"+C?l֩(1~ozfjXmZFnBҴ[5RS5En젢)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@UWkaQ8_w^A]u_ܫnɋjq9?sbjsl]_iZR +(9&ƷeGLH3O_QEA +E*W>ӮjKH!?ν|;A˹eiEWqQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@yŏ:W%G8Jz_ݖC3GTQE}qQ@Q@Q@Q@Q@Q@Q@Q@EiҸ+K_Ovᠢ+((((((((((((((((((((m-gֳ RCj}gArWKؚHՔUy]?j((((((((((((((((((((((((((((((((((((((((((((((((;(f8P+\rKu2!G?+5&M:4p^>], z ~ rHs|9uj&^dU+sEujnTx*s5ԗ~5&=:4kؿ]sό.Hd|&+ҥKߩMwyFgv9,$mWY!EPEPET&?~1< /CMk{dG\q)|R)Em3E&356~-&yg3g+:qҜ~-S|m]!^E27q5z/h[]4IQ^m\uzХpƱĊ +0(B(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((1ؔ#n;U߷7 RCkNDФ5Waa ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE&oRUcO`HR97Bq\~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((J!`HE,@H-甿 ʸ,f3ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEZ,Y$V`[oVk'tH-甿е[u +6Aq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE_ºmE"}U[u|&FI~j7X*{:nG>*)GEW|QEih[kZXՏ4m)ɤumd.zkܿ k,qhQ@ +@:P}e8(AAt +((((((((((((((((((((((((8Jz_?_K|&c<ʊ(<((((((((>ȭ/}?WEiҾ;?S֣4QErQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(hyڦkg2 4v@_\};tzd7ZEMyŚ>ͥzy)L{gWu,S\^\m +&"IhSxR&\'1EzVºn5&Dǟe^2kcՊPluYoHYk xYGe0+3F4X<3OLq֯WW8ҜmZ{-6ɭjW791<WhT 'H`1$y\kfjUrR +(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +ƚߋu my\^}qƽƚ' mwg?|^faSh|4^EWx^oHkZE-'ԏy}H]2}OtvS~v]K}:(肊((((((((((((((((((((((((+ףל|XS/Zޡ#L*(((((((((`a" +i\_VJwOZQEjQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((((((((((((((((((((((((rğ{rV2s}\\)nW ?h4Rޓ_>f5>(x_ܷ:+O>},9Mo>mbϔ_t ͵G޸K9X WΤbI$I=+ҥюwsgkgnDN坊l?~FKifi夑1QQ^:4AX +(QEQEQEuïxkXh>KtqGP͌y;^=vɯkI n?tMz^փGeןlP~W\ք43^ wJN<ď(MzV=w{dֵ+k<tCGkUE +@` +Zj+~%ko^[)5)޾| / w֖P,A +@>qSQ^uJ*;ܤ +(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(<646A{~b]nxP '_/ʿXb*{JGZQEjoJ:4 Y, kP@ +~ in}ȿ,( 7,^^->n翖RQ]QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?_K+v[qgQEǔQEQEQEQEQEQEQEQE{VJȭ/}?Wcgz(CP(((((((((((((((((((( IK`dϹWEgh[[:L@l +Ѣ(((((((((((((((((((((((((((((((((((((((nn5 {HGY'"f\ 'tvrϪL8ŴxL`cfB_-KM4V4Hƣ,=ɯ5Ϗ$kkFz><o;^qYץ5mN&tz4n߉.}E|`f/_ebn\/^i~-W錯 +0hJW9t\x]5--oߐKg{vɮ\7S ++ͫWеwC9)WξddEE)nw,( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +֭'hL1ytz(ɾs};8QP=*j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((^WX VrA韭Mip$E''#CEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECx%ȃ,@dϹWEdhڴhnzֽPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPYʹ6Ȑ3hS&}?Ʒd8] jQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s:|rgO&/]Gd׏fh{:Sg6.)WEW|QElx[H:1 eEWPQEQEQEQEQEQEQEQE ?VAZ+a" +i_yQ +( B((((((((((((((((((((}rm-ePqO$2oT־d +U}*QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQER3R@P2I+@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@U-J`Ym?JE`C/OֵɻIB@h+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((($I8SsrD镶2/ +Ƽ¦3*k( +~ o[}ߦμ6 f]:y~p~>jwԹs>EEW}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW|XS/ZztK]o>1 eEWPQEQEQEQEQEQEQEQE ?VAZ+a" +i_yQ +( B(((((((((((((((((((( +WS._1\t^9?Y>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@gZޝ*mKTK{Xu$ +U,M.R'Xmmм݇'ɯ|CZR-msV=],22o_5_%Ic[ 0k袾(R,w +(QEQEQEWcoς.[ntle#|ԯ[~ EEJqYc_ xI񆐺>$MamŞnn=KMcLՇ= xOnoiϘxq~8 ˚:śFW6h +(nmiWW +MKEy.M8_ȚMsnG(xL}@G vRb*mzKGlT$?\r02O6}>^_-~/؝[XRs1AbWK'[ԗC]sGhϓ|/k5ω-֮-!q5^, +_ Irl($(((kxdW8TK1@]ozm8io,^:M5V&+u'Г W\~򿦥(|$2O@+ZE([[]%17`<-tf?~^m\N?yjs4?|k ?Zោ> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((() { +ό/O[I+<{ Geש*9-jAEVF߄4i,iCƾ$3e fEhu`i}[K3QEvQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW|XS/Zz͵m۶F9סżLZҦ(<((((((((>ȭ/}?WEiҾ;?S֣4QErQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( ߌ/ۨ_؃|Ԋҕ9Twbnǐ|htM>lVC> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((+c.r>պ㻫ǫŞ|z59)6r*:2#袊 +(i~.wD$eؿ1~4)(B.rQ]Owf->͗l_/?L(TR}d"(((((((((((((((((((((((((+'Z ,5P%XI]8Xl~jBuq,^2Y1%'חRVaUxH{Uj(2 +W:ΥI$QݏE$Q#Gh (((((((((pMvzk^"KX[[^%~?1@j'R4qtWm^d6O+Ҵ?[a2edϨf+ΫPԥ|>#nu$Miˏ6+?]kP/S o }Eysj#CK kǤ-oOOE*"*S:ugQn%`*QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[i4F7Ewg(Ab?s=bVFXb E +H h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#Wf%IXdRYh^G3U' g=>EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6UgsX]Jk €%߸/lZS#os5@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵR6U!|J+ѿտG_ +ٰkK4,:u 4QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPdu6*(,z+{Tmk^_?3(=+~%j> ؚj漼¥ځo%Mt($+> Pd^Xh /k~ +" /7qWf5NnǡtQE{'Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@PH'@^^Aws s+ME̙XW,޶|wí^}O:ky؊ϕlQEz(QEvocAUaĮ;}ֱZ4`=pQd5 GSGנE|"sӂyPQEaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPb~벩<+F5}O1}gWBƦEW@QEQEQEQEQEQEQETֶwW ogm5c C_D~΄; sb +N8w񖱵泏Ml2^Ϛ5BPu!8W_?W3TA#E 6 oHsW'rŠ(EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLT&f=&<_zKFYǽo6֤Ƶyɝ{x*|iJG*{Zp+3. v]tSk:FKbEFa~d^^ +-+>.G +(((((((((((((((((((((((((;!D1s"?=n;RӼX/]zƼRIYI,$Ԛr;Z-LMk{EWўxQEZӴV+D4;R}&UҾg딷 QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEsWw2>Q5.}RH +19@Y?toS?(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nh&P}پ] ?*gihZլ/}Zݠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((({-m_ZC@7+{MKS$뒮F\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\FX[#ʼCf;(?ֹU9)7CWoQE4@$Gόbe -NGvƪr]89Eu=H3a@Rk^+袔RHE(ES((((((((((((((((((((((((+7\֭.Kۓ"˷`*6\\Hwn +o_-"=O g·#}|SS5nt(tQ_Y--**;"f8 k|U,<Pxp_`<К16++sLo;4ޝQ +;(((((((((((((((((((((((((((((( +WS._1\t^9?Y>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@##eaB+hzK[ ʟpJN;{htUG5oOh+񜚎 byceP18^NI%3QE&AEPEPEPEPEPEPEP]kgXGv'~ftȴ]L] +] 8|;[Ԧuq$pe< 9o }E_=暦Z\(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((C+vC( 5Uaa ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEѿORF:ISutQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}vm }Zݬ/}Zݠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|AqOkZ|AqOhF\_VfjtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEKq3m$.5ޭIjz~VLҽ▯`F׮ \uտAƼ¥3JQ^y{'#ӯy1đ|׎*U8w54<;aAyc]|9YK;jQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEp_|YH*UV[P*"Df`xşڗ'K6pO?pQ_aBhB9˙Q[x‡]]Z~zqU-!>i_A^acogkjg޼c?|bpU0KEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((+_yfH2KvNJ>!|k3Í2s}A=+mGR.e呲O[ڽ\Y*]Ȕxײ6Hن"|?oscrtQ_CFybQEb +( +( +( +( +( +( +|0q`~]eWTI[hQE@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ/q\W@~EX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((((++9mCH@7cľ.mDzz6c?lmϪ֥}._MV9U>yw>ROiQϸQE|:?_![P[%W,dժ(((((((((((((((((((+Ľ9X]jl6 ]:r.X+nO:v˨jq>g>u's_7Bɨto2I9V9ķ>?zWk>2ԍrYT*8k(W|>*n GllF*7װ[9__ %\h!q'?ӚEcEDPUz +P:K_1O>i|(aQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@RӒivgP?#wjAP5%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE.g0;thnReb=N(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((xX^^g;w $Hi$uDQf8z^s/ ]MRx)b _?x~㛗Kv0َsǠ_ҷi{B:?wqh} kMےT_ =|E}_ Oy~gq2.X+_Ht/x҉(((((& +:ffnK{8 @OS+Ⱦ"|wJr^ GG~ZXM~uk.[|za}+~О٣ӡthʌ-;\m+;v-xm'n4Lrz0^;x(]/n]OF'uG;O]+"*~jfnL.OW tPWΗw7> +R{eXF$rSڽ +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((oڿwH"r]xGŭ_,Hي0fG\غ:8*(3o,)gbTu$kkkxкLܿj9(Ӄ5]K]Aӓ۫֍W$>)E$(0((((((((((((((((((((((h:^#-KeD({}+w>3h2J<׶yϒ;Q^Q]G,!<ԋ2M}EgViA{"'dn<9?>÷^MDHXPUV&Xr:jl(s@((((((((((((((((((((((((((((((((21VrZs?f;*+/C崐>2=jPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMy(IQfcIHU|ڿ${HKX4C{. +!LBn'Y%dHʯsh鞵]Iqs34Y䑋3Ԓz\>QE 4Ozzvi% +zڊ8Hd~jV⅒ᣲ?^!yw9=OGLWׅ(kw+QYom(*b+n@cCAbZ7vp}A(N 7 ֤bn#^W6~Xhw-&=rh᤽Cg UԫjY '7ßN۟Zh?@~KsO>6mX2kN$~ 5chc FH)9Hl FuN$C-]<k<5=\HVoku5`~kߨ:itc{º'lͣ[);<آ%''y;Š(EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEM$M#CgkEqk]]JIOEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPErWWW w0v>6q;P#)' #(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((H! vOĿ٠ʊfV̑qZڠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+/\ⴌ섾2jQ\o_I;IŘ9=hQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP=WT4NafIyk]J[RWZ#lnxݾ+(g xY-Z~;%dGךx?[nfr[Ө}X(ƙ +}'T<2 u= |3ZMvW&1BySd^ø?w<9{?hy|)X{@rO>/ݦ`qˇN>p1޶寀2mŧB: +qO -QEQEQEQEQEQEQEQEcxĶ^޳|w+ܟ˯j]|E]eԅ=»^?ğٖn4*OKџ'y}9$"  ^աx |ICCQ_!XsԏŸ?L{׊__CI_ W_PQEQEQEW_~-}5Dž;pV 3Ǽj؞:u~8|Ao hKilu;O= {Q >%ߋ,\MnA(|=7IO}3^^%E{ON)iX}pkx-ᵁ 8amHP(+xA~SdS?L݄мȵ}E|֒G}{)JpNkkYg_aިj&ڛ]WOl{>dwג<#rrk-j`Fķ}7?q/5LJU@+½mTuK ['hKI#U8t[=:vɕ#M}xm׷RHdV,z^Y^N\EnUʷ!+8(;kxI`ԓI˺sj[ g$#^׻mehb`zO +nibO(}\¿3ҡG]QEy@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t((((((((((((((([%$0UQIp&:oJrcgYkvz.ъAEWAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((/.ᰱ}[ފ$B<۬#~edCZ>UA ^6vh'VmP~ξ[bK!{lj#.#4?Z|͕Wt/.]Ĺ|8?|,ѻ#ƀ\G<.c&U#)'|)k1}]ч¾?gMdx.JvYQ#@EPEPEPEPEPEPEP^Qx{On!z3{ʏCeXmn us('}k>!u/h<"U`PMz/^2t%$q!9ڸm>Tm,i$Xz_ix6 𭮑֔2`?~};`(; _Unε}kI_?k_P__CI_ W_PQEQETi7RiesUFIO^SGH>YG)~gvP>.ϋDc{}k&-̫UT~N`+2+*1Z#mvQEPw>ʶxv9?oZ}?LѷWWcooQr +(#((((((((((((((((((((((((((((((((((._1\u:PEAZՓAZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEy?/t} ٛ͜p;խ.X+;_E^Rm2}bmkgR}OF6Q7Ⱦ7oToB[J[N^IIÁT0|({Y[JMQ^EP[~LXV2JGf`k{SaP #N?hODдiMv(9cǩ>fe +>=e" r_&ՙpr/?{>ʕ'R\wfX(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ/q\W@~EX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((Jhb$[UКb:aӕ|Pֶwy~i5PG _|CeN0?m㳴cAU-PEPEP_|@ӆ _QFAۇE}_#t?}I(ej-y{7ᨘy=y-7T9l~lbc>}sڀ=cxQ>i?T{gWTVmo(#4 +`튖8_JA^CZҾ$?5( !пJ$+_Ht/x҉(((+#W75.c6zb0\~\ezh'wpË}>FS4ohқQn"^VR|W/ bY-M@ ;vǚEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW|]xlI}('?Ze0ؠqwVN?5ˌIqc:/C+>p*Kx$,ԓ*:i~1w\bvM~g?p皏sJTI.iZ|zVi-X=jWХed}ZI+ )(((((((((((((((((((((hv_cq:G_}}?>խ25nɜكŞc>a'.Sp_ּ┒ĒI'M%}~"yU*9(3 +!sqXڮ],z"c+ݴ}&D"\"Wn}y7C<Μ=wwrc!"Bt(((((((((((((((((((((((((((((((((((( +Wi<beQUOk@x<VCmk v9<皚 +( +( +( +( +( +( +( +( +( +( +( +( +( +&-uC/$=O5㟈/H.&ϡc+k/xZRjOmD= &_:?Ji/#tc˜M8#=(Q,op+QWQk^6tvZbkA>qysbVQ)fc>|S %ފ#۠]ςcx뉯%̓u}uuU=Z.Yam` +(Š(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((C+vAvT̅배}s_PcX#}kk *@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISne#DCA*d:; QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}vFѸʰKy}ZݪPZ0]y&PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Pv&]G88toohƱG5n#E9 (+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +7ܾg+VЧ;_YWȿ~-j (ΫA[@_I(J+(7|]Ї I@`EQEQEW_L^_{vlM?}K_1~+9tZKOGF_6%}EPEPEPEPEPEP oXwjv@=I8z'nӇyȊ1P}r{ץ|xֱƝ6l,7,gc>TyQF +%=kES\k?>8@}q^K?o>-a͵V<}QEq}kI_?k_P__CI_ W_PQEQEWu rfLXƾv,ǩ9Q9?MoP;H pHXڼ__rꚬn#~)TvϩJ{˘yG 18澗w7Lѭ|O wh`#x'7iZ5t > +Gݛvk섍"cFT`)ƭOhKUozM*XXȌ +"/]P1iB|펈ބq;Ouk {H^ \Z.e>LXiu q 7eaT47Mx@wC(!8;׎_>.]N co$8> + +( +( +( +(9x^}b dX@lN +i #X"Wk +kC??袊{Eb#a[ o/?ƫx|?XAm< \Am< \jq^Ǝ.v^K㐲㑌Vr%/ G$_sPE G$_sPE W,FhՔ)\tQ7PQ@rkJ%X;~4H-甿û::/H-甿? RCk:/H-甿? RCk;+[YZh G`zyK9IUPE G$_sPE G$_sPE Z$(azk8?*mgKToPoH-甿? RCk:/H-甿? RCk:/H-甿T׭DRt\I΀;J(+^ޥK$ mj$_ 85E G$_sPE G$_sPOmsprnδk)#]]JRdGb#n*`x|?@ RChyKv RChyKv RCj͖hB\kx?$PEEP}֯ BYq*H-甿)/Am< \xNx1Zy.eK+v$Zx/?Uc^j= 3QAt +(O0+4u,Nf9}w^Eim-.fcAIs=:%]+Nszy].joAm< \Am< \Am<օ۬Vq G`zZd$t*yK o/?ƹ(yK o/?ƹ(yK o/?ƹ(ı$C ӪO+pJP:w$_Yտ?1\t_[)!4Am<;Et_[)!4Am<;Eti[8?Ƶk|]Z,Y$V`[oVk'tH-甿? RCk:/H-甿? RCk:/H-甿Y!H ?swISutQERԢuYذۊ UCOj RChyKv RChyKv8ehGRw͊\OEtTV}֯ BYq+B\Eiyq<4PI4vAcX񝞕`iHHp77ҼfQC$ҶczT.z>B#Ox yu{GEW`adgF +$S+>xq!Wծ7!R>#/sb1#JTIY<148V;aEE*J=XEYrkJ%X;~4H-甿û:yK o/?ƹ(yK o/?ƹ([u + _vǠH-甿ӛD\Ut_[)!4Am<;Et_[)!4Am<;Et_[)!5bI 2&+O +pJP:ԵKV\AVyK o/?ƹ(yK o/?ƹ(yKMzTE.IA5T(YDHߖAm<C\t_[)!4Am<;Et_[)!4Am<;Et7 +G fN1FM'B}O5Tu(]VDv,26tg o/?ƏH-甿h o/?ƏH-甿h o/?Ƭjq^Ǝ.VOEtTQEgj\4/byKgB +@$_[)!5@$_[)!5@uw8;c{D[V\Rf)IV*qߍjWwFt G$_sPE G$_sPE Z+wn ![<S./3@#1ii3 o/?ƏH-甿h o/?ƏH-甿h o/?ƏH-甿h7Ē@e 3Nm?ʦg[kw*@Y[)!5gV\ArAm< \q֓r΀:?H-甿? RCk^wUKqjλJ*YDHߖO?? [)!4Am<;Et_[)!4Am<;Et_[)!5-B:*!H>袊{Eb#a[ o/?ƫx|?XAm< \Am< \jq^Ǝ.v^K㐲㑌Vr%/ G$_sz~`ך9Qӌ\v-UR@'y7>:riU3]C4SH=\N^׽}3)O5ԗWS=ĬZIdbԓ֡3 +( +*晥eۼEQz{|3rbq߱J->$Z{}?[dY_u+JZ6Qα诚b%y;(t_[)!4Am<;Es nVf@Bx=jj./3W#1k+ o/?ƴQ'W@$_[)!5@$_[)!5@$_jFX@ }뉮<kjuy-Rտ?1@ RChyKv RChyKv RCiS^wUKqs$?x:({zQ,+0-_[)!4x<;@$_[)!5@$_[)!5@=B:ѮSISutU+J+U YyK o/?ƹ(yK o/?ƹ(yK6ZWq rQ@Q@Z6 !e# RCk3YEBPE G$_sPE G$_sP]e}3FNXQ7V&oRUcZѿnAm< \Am< \Am<օ۬Vq G`zZd$t*yK o/?ƹ(yK o/?ƹ(yK o/?ƹ(ı$C ӪO+pJP:w$_Yտ?1\t_[)!4Am<;Et_[)!4Am<;Eti[8?Ƶk|]Z,Y$V`[oVk'tH-甿? RCk:/H-甿? RCk:/H-甿Y!H ?swISutQERԢuYذۊ UCOj RChyKv RChyKv8ehGRw͊\OEtTV}֯ BYq+BmgB +yK o/?ƹ(yK o/?ƹ(yKW#4jFb( 5xxRTo$_aѿC@$_[)!5@$_[)!5@۬VMT4ooj#Df=eAm<֜$t*yK o/?ƹ(yK o/?ƹ(yKHKH0Ͻq5ZǜMQ\ζ3Uz֥Z($_[)!5@$_[)!5@$_*k)rN:r|@Q@oR%EfK o/?ƏǜhyK o/?ƹ(yK o/?ƹ(`HR97BqZ5i? +{Eb#avWx,c$_fk?U + RChyKv RChyKv묯FhՔ)V&x*ؠ-1JJSvkRۿ7 H-甿? RCk:/H-甿? RCk:/H-甿е[u +6Aq}[H@3KLD@[)!4Am<;Et_[)!4Am<;Et_[)!4Am<;EvѸ$(azuCip5U5Es:[ UZyK:+ o/?ƏH-甿h o/?ƏH-甿h5wuQ'֭qp봠^ޥK$ mjd< G$_sPE G$_sPE Rk0\$)8b?( +WV.";qU RCju@$_[)!5@$_[)!5@]hBWk~I\ +Ϻᴸh^9 .9hW-R_!@[)!4Am<;Et_[)!4Am<;Et_[)!5r;fYBA?lQE&oRUcMyK;7hyK o/?ƹ(yK o/?ƹ([u + _vǠH-甿ӛD\Ut_[)!4Am<;Et_[)!4Am<;Et_[)!5bI 2&+O +pJP:ԵKV\AVyK o/?ƹ(yK o/?ƹ(yKMzTE.IA5T(YDHߖAm<C\ u4Am< \-t_[)!4Am<;Et7 +G fN1FM'B}O5Tu(]VDv,26tg o/?ƏH-甿h o/?ƏH-甿h o/?Ƭjq^Ǝ.VOEtTQEgj\4/byKgB +@$_[)!5@$_[)!5@uw8;c{D[V\Rf)IV*qߍjWwFt G$_sPE G$_sPE Z+wn ![<S./3@#1ii3 o/?ƏH-甿h o/?ƏH-甿h o/?ƏH-甿h7Ē@e 3Nm?ʦg[kw*@Y[)!5gV\ArAm< \Am< \Ѧn"$ծ.?vUkԲdYm-Yǜ? RChyKv RChyKv RCj[mf #3t'uU'B}O4EJRdGb#n*$_V?αyK o/?ƹ(yK o/?ƹ(⽕H]6*s?PYZ6 !e# +嵟 +K_(O o/?ƏH-甿h o/?ƏH-甿h o/?ƮY_G|ѫ(S<=o (2-1JJSvi[)!5wFu t_[)!4Am<;Et_[)!4Am<;EvV+wn ![<5Pѿտ5 Zs o/?ƏH-甿h o/?ƏH-甿h o/?Ƶ#q,I P>eip5T5Es:[ UZj ? +[)!4Am<;Et_[)!4Am<;Et_[)!4[8?ƹʒ?vQEVK(I/H-甿Wx,c\!I~iAm< \Am< \Am<+5e +pwW#]MTEP\Rf)IV*qߍ7 o/?ưΡ o/?ƏH-甿h o/?ƏH-甿hnd+g֦75~"3f RCkNoqTAm< \Am< \Am<֤n%$g޸?ʀ&g[kw*@R-[As[ o/?ƏH-甿h o/?ƏH-甿h o/?ƕ5wuQ'9RC?Ҋ( +׷e"~Z G?? sAm< \Am< \k0\$)84 +A?W@RԢuYذۊX!_H-甿? RCk:/H-甿? RCk:/H-甿e{+G:lW)Z?QEuipмr\r1 o/?Ƴ5 +K_*t_[)!4Am<;Et_[)!4Am<;EuW#4jU?lPYrkJ%X;~5\m~O]$_[)!5@$_[)!5@$_hZܭݺ̀lz]N _vǠMOO H-甿? RCk:/H-甿? RCk:/H-甿? RCk;hKH0Ͻ:8?*"mggAm<՝[AsPE G$_sPE G$_sPF\kVuPUoR%Eff|AqOhyK o/?ƹ(yK o/?ƹ(yKm.n@Мc1Wt +A?WEP+J+U [)!5S,2)>{ RChyKv RChyKv8ehGRw͊\OEtTV}֯ BYq+BmgB +yK o/?ƹ(yK o/?ƹ(yKW#4jFb( 5xxRTo$_aѿC@$_[)!5@$_[)!5@۬VMT4ooj#Df=eAm<֜$t*yK o/?ƹ(yK o/?ƹ(yKHKH0Ͻq5ZǜMQ\ζ3Uz֥Z($_[)!5@$_[)!5@$_*k)rN:r|@Q@oR%EfK o/?ƏǜhyK o/?ƹ(yK o/?ƹ(`HR97BqZ5i? +{Eb#avWx,c$_fk?U + RChyKv RChyKv묯FhՔ)V&x*ؠ-1JJSvkRۿ7 H-甿? RCk:/H-甿? RCk:/H-甿е[u +6Aq}[H@3KLD@[)!4Am<;Et_[)!4Am<;Et_[)!4Am<;EvѸ$(azuCip5U5Es:[ UZyK:+ o/?ƏH-甿h o/?ƏH-甿h5wuQ'֭qp봠^ޥK$ mjd< G$_sPE G$_sPE Rk0\$)8b?( +WV.";qU RCju@$_[)!5@$_[)!5@]hBWk~I\ +Ϻᴸh^9 .9hW-R_!@[)!4Am<;Et_[)!4Am<;Et_[)!5r;fYBA?lQE&oRUcMyK;7hyK o/?ƹ(yK o/?ƹ([u + _vǠH-甿ӛD\Ut_[)!4Am<;Et_[)!4Am<;Et_[)!5bI 2&+O +pJP:ԵKV\AVyK o/?ƹ(yK o/?ƹ(yKMzTE.IA5T(YDHߖAm<C\t_[)!4Am<;Et_[)!4Am<;Et7 +G fN1FM'B}O5Tu(]VDv,26tg o/?ƏH-甿h o/?ƏH-甿h o/?Ƭjq^Ǝ.VOEtTQEgj\4/byKgB +@$_[)!5@$_[)!5@uw8;c{D[V\Rf)IV*qߍjWwFt G$_sPE G$_sPE Z+wn ![<S./3@#1ii3 o/?ƏH-甿h o/?ƏH-甿h o/?ƏH-甿h7Ē@e 3Nm?ʦg[kw*@Y[)!5gV\ArAm< \Am< \Ѧn"$ծ.?vUkԲdYm-Yǜ? RChyKv RChyKv RCj[mf #3t'uU'B}O4EJRdGb#n*$_V?αyK o/?ƹ(yK o/?ƹ(⽕H]6*s?PYZ6 !e# +嵟 +K_(O o/?ƏH-甿h o/?ƏH-甿h o/?ƮY_G|ѫ(S<=o (2-1JJSvi[)!5wFu t_[)!4Am<;Et_[)!4Am<;EvV+wn ![<5Pѿտ5 Zs o/?ƏH-甿h o/?ƏH-甿h o/?Ƶ#q,I P>eip5T5Es:[ UZj ? +[)!4Am<;Et_[)!4Am<;Et_[)!4[8?ƹʒ?vQEVK(I/H-甿Wx,c\!I~iAm< \Am< \Am<+5e +pwW#]MTEP\Rf)IV*qߍ7 o/?ưΡ o/?ƏH-甿h o/?ƏH-甿hnd+g֦75~"3f RCkNoqTAm< \Am< \Am<֤n%$g޸?ʀ&g[kw*@R-[As[ o/?ƏH-甿h o/?ƏH-甿h o/?ƕ5wuQ'9RC?Ҋ( +׷e"~Z G?? sAm< \Am< \k0\$)84 +A?W@RԢuYذۊX!_H-甿? RCk:/H-甿? RCk:/H-甿e{+G:lW)Z?QEuipмr\r1 o/?Ƴ5 +K_*t_[)!4Am<;Et_[)!4Am<;EuW#4jU?lPYrkJ%X;~5\m~O]$_[)!5@$_[)!5@$_hZܭݺ̀lz]N _vǠMOO H-甿? RCk:/H-甿? RCk:/H-甿? RCk;hKH0Ͻ:8?*"mggAm<՝[AsPE G$_sPE G$_sPF\kVuPUoR%Eff|AqOhyK o/?ƹ(yK o/?ƹ(yKm.n@Мc1Wt +A?WEP+J+U [)!5[?t:Ơ o/?ƏH-甿h o/?ƏH-甿hSV4u!w|ث?$WE@gj\4/b+)/ ?H-甿? RCk:/H-甿? RCk:/H-甿e}3FNkʀ6(˓\W)*N1Am<~O]4Am< \Am< \Zܭݺ̀lzCF\_Vf;Fc W$_iOO*:/H-甿? RCk:/H-甿? RCk:/H-甿ԍı$C ]y\Pmn8%WjZ.b+Am< \Am< \Am<Ҧn"$*HtQEZ,Y$V`[oT RChy]?v:/H-甿? RCk:/H-甿? RCk:{mf #3t'u\!H>WV.";qWk?t: G$_sPE G$_sPE Vl8ehGRw͊+['s:*(3xm.BˎF1PAm袊{Eb#a[ o/?ƫx|?XAm< \Am< \jq^Ǝ.v^K㐲㑌Vr%/ G$_sPE G$_sPE W,FhՔ)\oho1f +7jgOS z@kJ%X;~4H-甿û::/H-甿Ů% .gF׬Ků Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((+Ʀ!(|A@a_묢 Z~ ϋ ja +S>rq+h( +( +( +lAKF_Oʟ_ScnYj>0ɁbO@33J.(((((,ZJ~ Vc'=5jWmm2Jo[wOkYTsr"}ԓ@1f,Ė'$ +5THۦD>H5/C.//b۫*$p$Oa@hUa1h;{((/׸־4-+{ kJ+_Ht/x҉+ + ?J +( +( +dUb?Zנ6"TϢ(߿gG"20A}Xї4P˟ʼn?mEPEPо(Ȭ_xCWҾ||Q<-i.\b>S¾ A#47W>Ȝv}#&w +?RE:( +( +( +(2|E/ZKiŻOhήPHʐkdUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿcĖpi(쭐ĤW +?cPR⦇(&Fq,ƱG5O+ZtE=}@??f@??f@ D*ҝEɡIhF3ccW + 2Pr955Cycc]|5JH< 27!}cdC>OZ[׵ {d?uz,cGaY#v$1'kp*xuQEHQE:8i8G!UTd= Y,jm4lIy"}B?ky5_!DӁy+`X#$*GUt3Era<;cO}LLV?ӠkWR4٩Cycckq)Xs"@??f@??f@?XYa]O$PEP,vvc?f@??f@??f@vAg5%P2R5Gy(5?٣y(5?٣y(5?٫4TQPS4). VX!סM\ +(+\ݲX䊇y(5?٣y(5?٣y( +?1(M +OE 7QS +?fkW +?fkW +?ft{%`#r>cW(nma@.#sU_(cX#}?_(cX#}?_)åA*d:;Q@VeiQfc(M +OE 7QU?kW +?fkW +?fkW +++ET76ݠIr9 +?fkW +?fkW +?fi,q&Q@Q@Uj:~g HJr2} ?toS? kG5?٫PkG5?٫Pkk {G/ +b0~bx4Q@TM,dwV +?fkW +?fkW +?f[ZCh'jz((R;;DK1ZOkW +?fkW +?fkW;hQ 3(C)SЌc. VX!סM\ +(+\ݲX䊇y(5?٣y(5?٣y( +?1(M +OE 7QS +?fkW +?fkW +?ft{%`#r>cW(nma@.#sU_(cX#}?_(cX#}?_)åA*d:;Q@VeiQfc(M +OE 7QU?kW +?fkW +?fkW +++ET76ݠIr9 +?fkW +?fkW +?fi,q&Q@Q@lmZd,T`rECcE@??f@??f@[ZCh'jz(e#DPkG5?٫PkG5?٫PkV;hQ 3)C)SЌZ(5?٣y(5?٣y(5?٣y(4TQPS4). VX!סM\ +(+\ݲX䊇y(5?٣y(5?٣y( +?1(M +OE 7QS +?fkW +?fkW +?ft{%`#r>cW(nma@.#sU_(cX#}?_(cX#}?_)åA*d:;Q@VeiQfc(M +OE 7QU?kW +?fkW +?fkW +++ET76ݠIr9 +?fkW +?fkW +?fi,q&Q@Q@lmZd,T`rECc&u<]03?C@+i[M1k?f0j̼Gv}w@CEQEQEQEQE?u-b <>$_3W?Z'~7_7PKMK@ѼUkmyݹm:WGx?Pn~!Gx?Pn~!Gx?P㏆|MSF㹻"4D+>k߄| wZVn(һ =v>u/ǟ kݖka$3 !8ҾQ F P4QE_#a3Pׯ(w|Af0 _G&V\@QW8_meeаB|?0&;,wq9?G>((((֦ d(*( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((mKFI WI~%j4نjTs0EQ^)V,l5 {8eE>{H b{ooMy5OTP{}Z}Aƃ +EIX +(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@r5JOmBpDc=n@佸9#0y^j7:5S`=zn ˞ +NlEnEʷ+;YؒNI>(<Тr#I"ƊY؀I'Y4۝[P7K)>½B- .;+as$rܚ_:N+̱\WzXz9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@s,7z`|tIOx|B˧gt_.VVl+sy_8jơRܗWRI@=`Uiő)cĭg%'ي&}ov(N4ddŠ(QEz?z;19a=Ml4VN "_3v϶k+<]HW#u?Q}WW{KΘ~h9ӯf3Hf(4(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/Jݬ/JĮAqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]?*o~ַk ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֬ǜkѿտZAq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW-C>"{ițks,@u.z+ƺ( ++s/6 Y_q9$9_ qg-}u_f}.fyzՇNB9$rlӵ- 3M[_vrnI{c84W43|3D6#ݶzWP ljM.X ^߂ +(--$FF +(( kmuT~Wn=9ž,ԟO5_]$Ff (XWS@Q@usZ:JKiW7N+6s^K  ho5_O@08ZQ  ho5_O@08ZQ  ho5_O@08ZQ  ho5_O@&xw3^k7D։.F@^g_eZWƔWx[৉<]MrJ~ĞYrduS޼޾%$B(<j):tVGx,EiKVEQEWњ𮟭F{ v@O T+/Ě$$ޡ\`GwGoo($AƗ]cfS}Y5 險Eݴrv%FGr? +ԯe֑?.дրpğ{WPEPEP~Gh)--'1_ ;3,I$5 (t(-k(7WeT־k֏J׵2>YOXůk߅o |;즏eԨnnlp6@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPv.j/xYGp+$ydi;ǩ&hzLm?RG^/^F>5N^ǃ檠Q\' +t-Ӯ%s`GO +;MSlaYq*ƾ8}IimءcA`Wy9=L>QEzQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE6vH#%,z*ZZRfO]XL,9VLTs>#z->Z袾8ӊV''vQEY!^~R&6Ѱ+:n%7 VdU)zۆ~AEWϝEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫩/Z:/ǜ +֬ǜ +֠(((((((+=yϾu6QW9T,7cԵ;-[F+kX^Y_;|B{ygLZiʽݚq/S+񏎵_`BL6GϹ⹪Y^]_e;QEzQ@Migs]igJc5,}^5>ϦA:N#{s|;|iH\M{*?&qxxumʌ[8O+TR%Ga?}}kBU0KE||EJ6I-(FQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[oo@X>> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(|dvEȉ;K$=G^y?=@++e!A?"x:VqLK+Wi:i?6?(O_7i>Gs8(ҡ nuߊ4M2[`!R= ĚhHH3ORM6߄ n]/== ~3Xi-ݧd9X?5ȢRc*")QEQE#_rfC]S3Y럳kK#J5%ёtQEQEQEQEQEZWƕ_ů%~ q|i@}KIoQ%|__CI@EPEPEPblWEF^_|^j6SB[N9cqF5G7dD1?iz[jZ|ݳEGq_W;+[#]XkJPH :@Q_|oDkK +#UA mqgf9Ш_oo Db;DlϬ}}gߍȚvhaa<}T?)bI'$sWկZSgi\Ϡp`*x3:5bkqrp/>t?| +/lw70t\8~#'Q_]V/|/xC@H# |ޕWct@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE=UtO$Jg~dRm%v)IE6W+n?ǷW+JŘWNrr}O79>ETz-#(Puv1m?Mߕ{q? tE;&s;gދ 5WIy}. +(N((((((((((((((((((-=%8i4=+1 G{ +>~N11.QzՊ(mvzQH((((((((((((((((((((((((((((((((((((((,2dTdxSQ@ H!Pp(((((((@Oj|AkLQծ8usIWK 1hGoG.!.I }~xoVKn#ϿO|yys^Kwyq%ĭIdbܚ\>66QEt(:Fj1ieWR,qRm%v*+SL8d8{zנ=3kԵ0ȘVa޽VV袼FwfER(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((I R̍7(8@}JBh(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Ly$mF Ƭ:(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((FPU AQ}}ME28b>\h@>(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((i(Ĉ8au-/TE +((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((()C)V 4P,de'`}}+u ìW68o\|556Hh9Q]aA>ֿkM\kNzQS~ +=-}գht-:\!_,xO`xf!C&{h- XmHG +_~ό TtG>VYEmm p8*TPEPEPEPׂ<[.IGO vAҽaAO<bJ= }Ϗ>>v"M;x}g$|3`d2dOkgkcxD(|V$:өa_BhZ.=7H?AV=I5EQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@y]_Ӭtē|רW_5L[}N6-+w83m( +jڽ߸c'jz/#~#RuvQaOo?ߘ(Þj&)Jk;[h]DG`(((((((((((((((((((dGo3Evch +zίmi]6GWn=5}ZZ徺l{(I=L[(IX#??s9v C_<3[lQEzg8RYxwGy=5Qͬl:W>'iNxPhV?kA:%]uWV*sadQEdPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦMUֱ|? W-@0ܡx_zqjZy]?j(((((xyHK}=-% +ơU@Rb1GF)Q\EQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@AqyQ47too@??md]UA& 5Tb((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mY#42j6ʱ0gn{7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP]8Tdjc??R>>;{.db/}Zݠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((d3Rp3KY> 84gZ~­C4s$!kF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@(ՆC8x"? _1I$ԚھK 6F7ad^?^>:5N^ǁUʺQ\G#+:k7 +=(((((((((((((((((((Ϸ=7O?J?펗c&/f_:bCO9#w+ +((4 _cLq53a)=m xP>}(*"U *[iZ|6Vj|7,MK[Jm(5 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]N ~rx<Vd<VQEQEQEQ^a _7N|`eX??+ZTgZ\Wbm->/ѼZ&sB)U;ǟл=)[1B; +5oR&uu'WszagP/C)M+ (+[ռS&Z<XXm[O <2ҏHҾ iioo3u&fc +>5\asIb%c2HtBʵgV\wfX(aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((<]aWP D_ʿJRQMe%>Wʶc&/MG5QE|''9NOQE='vTuZGokGᮑB뉮r/->JIMP+ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +_!e^\ +5+m#Nϻ{wZ׵I/nN7pG/}b|Ws׭Ȭ)\ws%č$1gvI+h4(b&+kh̓JQGs^)`\=̘iރv/'j5Ӧ_XsS־g3Y{(?u~'ʹEWuQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +YV2mmyel*i^emۮa$쯹2xgkn7jl$GMAw01#;_n7KIgfqSҼ{J4)я,mQEl |%kzt|Ƥy2qC953`ö;kXdyX*Gf'{߁ZyZ&O(dq랕xᾋ{`Iʿ1 +?}MvUS(5-*"U +Q^AQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +ھ#hۖ&Qʯ +ƺߋ m <6/?qrӷs̪Q]L +(c´t -zNLLv^ ߃Gj/m?n}ǫZ0MXXbcE +(>((((((((((((((((()HFHQAff8^_Şsa'E?xp{tapTPΥEN7fR!| /M统?(•(҂6G)9;+BB*73?x^OjY2A{~E$Q"hUT`:^6ik:y<EWQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGXRlA'#=s>L]%;vEQEgZ2MGU>}On @< +߈_m47KGw~2yJ_u/t/̰T8q#&ʽWo~fRbާ{-̷2%3W(`U3Ku4Ynn8H'W~ X@"! fos\]<jX]LCjQEPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV&fn>Eq~L]e"Fp~b(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((.DnG}jm*)RlO${h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( + &3W'<5Q@:4!zzPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPYZ3FK3cZP<5hWM0 GPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE`Wx_/ˋ{|sW5|F~j7^O^6:5N^UyrEW}H]}Otv MNPrUTPP0+z]+T~EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEcxxwJk07 YT!)F+V&Uُ 6o:=:I9'$HdV}j +8j|~V+Q]fAZ.sjqXگ,pݍS ngQF +Oj xf/i+^MA+Xjz|Ocj4IyzFmX.#rOV=ERr{I+ ) (((((((((((((((((((((((((((((((((((((((((((nVݦpJ8k? o/?ƀ5vrw Oa^+ _7Jj$q"B?c[+˖M~ZUevq.~ӽ|k0td#"(WOrkiGYfbzOSL`iֲc)6QEvQJY%]G{lM{*oa]߁V{{S;d#ۯҾ෉vjTz+fqRi_s|L38uԜ)=J(9sIݚQREPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPENQĠqڀ.QY?[)!5 hRUP}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@&oRUcO`HR97Bq@4QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES&C XY[)!4ESc.#G]wQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVK(I+' o/?ƴ-nVf@Bx=hj( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((|sb>[lΞL^*e%>jr}~B6R*`gJ(l9NOQE=C֑7ڼrO+cx6]Lhg6ºj)$}>QEntQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@R3R@dڀ+[3^]Hs=¼E\xU{(/ֿ[1y؊lQEz(QEw>o͜-aĮ?OXׯspQ.}._ܣcSA+וzr=XAB<(İ((((((((((((((((((((((((((((((((((((((((((( ~pZtXJF(QLxrm&W' s?GG>um^[{F睻EtWg[ߞY:?|EռPd֚V}:ָ(JddŠ(Q]>j5. c]:'w+:aJ QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]?*o~ַk ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֬ǜkѿտZAq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE}62 vg-v.%rkψ_uO7Kkdr^ewA\/~!k^8{/dl'Os?:W'_A#O߫JwRI$I=IŠ( #F +ƥMmxWόu!g 6w87{ +s o[cQw2KOs\Xu<:Tb|=ZP<4zp9Uutq랕1ƑFƊ +Nj"ysM$EV +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷7߷7 J,?o\W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq_>>6=>kv=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP3_+me<^>'k~2ncF,(g7 q9۱ٍ^zQEr_HH}.ٝ<}w?8?AWGHVbWtm(i_AƾK/G?@+=(((((((((((((((kҤoyF*6\#%,{ +pKt?u}~Z7 ++qs;Q.u[n|ҶI=V+QVGaESydXR*O@+<te 8VvA +y?ƚqh}?}ooz|i~EaߐQEaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEQ5;@e5Kmc3}OoQ?ersnD}d~$6!w%#~!|k3Í2s}AҾvu+^[B[NF?ojE}6 OG~NMQ]$U?NկH\zM^+R< #?z}཮ST4)s)+bCE~߭{x# EӴ 6-?K>'>皿Eۻ5 +(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVdkV4&<:P=]*?oCkFqTC(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5%Ɨz2JGLjm;N)$)99:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>>+i,DfB8k&}?ƀ/x{}dhڴhnzֽQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZ՝Msl +o`#=hF\_VfoCkKH,#Uƀ.QEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@#0E,$ԵDzffƦrPEIA<+ĚGJ))8QYTQ_:n9Iɹ>ERtɨk2/ +G߆o5땁#Z}.|2_]~[SH-/gF1 +(:((((((((((((((W|Bgb}O߸HOS#zQB$Tyl]>O`xWE(ƌ!<\(؀:࿼HZA zjlH <'{qZF#%ڊ; +sg8( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +("EI#"pI4w/F=Vz.cobG{\/Q~u^VMD0z^ qq5ė2HŞI1=I'c~mnrco~2|eZ䲩>T qE_y>E1劲2 +($I^֫j(Y-l;/,=+Џ4ocWk,blѱ5i?Z{|aq'{>߱l%Q(UQ*|/S{bQEPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@xM_䶏͐@~m#TPK_/kZŔGÏOuyi(.mQ^Aox/Hnf˺/3̗b1 z# k2/R-?7OGFEW}@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEgZŶ}t~UP](\wbm%vex 7lEZpD)V>?x<ҼS2JTS*;PKxPh6iA:?Zu{QJ hVҒ 3d.ҵhFs'=DVAET(((((((((((((((((((((((((((((((((((((((((Ž+%gHO#Zҕ)՗,؛G4ƿ^FsN+Vi#BZGF2N߭rz_ojoq;p3 ꎀ}+.B=eJw +("(tMSIsr£zkc- ȿF?}7 j"S$̒Vnvfc +u\as{LPԼ`r`Ϧ+袾ni՗4٪IlV62bk'~f5_+uzm_@2*p>v|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +1[~zJЬ/Jo$2m[gR0]C`W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPO$b!Xr{Y8Z%PjŻ:ISutQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEEq)I@E-X<5 ʸ4ÉUִَ+ ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ZX*,p~v|AqOh$2kXܛD)l>WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((GN໽l/k~1jimtl{b^m^&65V;Um(S+i~Yvʱ8+< mxٗt(tSk*{{9]/ +(# +( +( +( +( +( +( +( +( +( +( +( +( +( +(#xmy8Rxwoe\n[8F}?}m@gi62f&W?A\%}&Ykj> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((()ʐBJcK3rM>ڿW.cFׄ[#5>U7oR}c[dn%g~Q_:n6waEI ځgHkH#9o+H1a@Rkb5pԽ(((((((((((((((+?mI]O1!?+oŞ%ÚYmkrF{a^qÚR&wO.>[U5'h+УEWnQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQT]ZDӥe}i6쀹^O E3@1_j*g0fy/#ta˜M8#=+nfrb橪ZԷWR=E{i$(EXbVQ)fc>|S Gg=6'Oj-99q=GLz&xsLNm#OAV=I5` ++Xʘm1H((((._1\u:PEAZՓAZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +Eo#f;(?_׵O6آBǰ$z&}ĭ&=2x1-癙妠袊O++YwC }_S~f֑iڼN$5=T/iZ((Š(((((((((((((j}vctXչ$HbyeuHfcMxP"ԶYl $B7}?a&-kUTezλK}r~f{((Tbۻ +(@N{<'h/#OxR?!=*{?HCh}}oz|i)_;m(Т(((((((((((((((((((((((((((((((((((((((Q U$+>!|q&=+&FQ?#xmCR`[ߎ~#"Ө+(>]mkƚڵKݩ>M|Eúy'I,Yz5L <:F2aEWq!EP]G|xӡjGs]߂wוd-~/}~gXeamCjE^N33?rE|EE\My(d?kS4ٲV +(((( +wfON?]KL{(9X*PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY-Dct]v{⴨w·m0J(REKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE`͡K< "=Ҥ綼g2N@z}+j(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((#5)#?/tTPnKbҙx۞٭*(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((jvO{G*۾o]9G_ +ٰkK4,:u4PEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq_6&qޭ ~5_u-=1ł?lm=S}^z@+TPKs_OoJ,4hb,2k~4F]^_EWVR(H((((((((((((+?g'|Vhʴ!&sP\ϴ-C=yMzMB'Rnr +( +oZ-? +4kwTrܻ/v5Vm&أOV=58aH|O:pyŨHbH@*@)Q_.zAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY^ }- ^-^ZCIO#1Ų7ө_3ڷF5{c/DkӭOHdJv:߈_4V4|@=d#Z(JddŠ(Q]>k>7eM/$^AGEJi!sѴ]Gz~i%ԝAO@=߃wGWq\d]|x;MzML͝S:·q{c nQEyeQ@Q@Q@Q@Q@SRKk#`=fzu4V~u5ݳ͹q0+B +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(b{FBw Z+پ]-292OMEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEsWw2>Q5.}RH +19@@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ܍!*s7({a38ֵh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((G|3 hQ\ +g%98zEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE Vvs]Lb6ϢSW [Wڣbk#vX*O]TT鹾jWz.%i'8Q_:g6ۻ +("4,hU&oH4ZEd'ԏ?zmghZAXՏI5_AFΚXz~ʔ`QEjlQEQEQEQEQEQEQEQEQEQEQEQUuBK@ĹcsM&ݐ7mYA)pX"owws]us!iXj5۟j^O݊<YU {׫%EWyT\Gom$0TEI?uoaH\Tp iSu%dmxOQxsKw.ys=oE|J'9=Y**(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W? ~תfɷNd(UJo* ,8`K<0UP:OJO_dt ;E+&Fkĭg%'ي6}ovy\ae)a#v$1'h0(G*3*'7m_Śi4sDf?l>Wx*4-Gt~1{>+Zp>V(4zp8'B:9J ෉"5 +ơU@IE|#R͒H(QEQEQEQEQEQECY\Ubju_+'t''t((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/Jݬ/JĮAqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]?*o~ַk ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֬ǜkѿտZAq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?lQa1{|m{}VEm#`2ku Bsg9 }KACmԯEWxa]wm#[Ɩ0f?w+\{_#֨뇻bʺ0u`{Jv(邊((((((((((((fTRUFI' +1| Fz̗$Ԋ/ZjʽEO815D(0<%|G`gyGT89芌\}$MaO׬pA,qFQpRWb2T{t=ZT8Q\ƁEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPETԵ;-[F+kX^Y_;|B{ygLZiʽݚq/S+ q9$z/|7EafbGoa󆭬j.]uu)tqTha)׻s&Š(B*{;;B+K8$VQfcz?z;1+ɇ3GLנ|=oZ.n; 3#^ЪBj1^#n/:biM[[$/,zkN+”ER((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>> 6U߇nnEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((,HؖAexEw_56bD1yZu9-UEW1>(y0UQܞ]54}NPƼ/᎑;ys 7/jo)9b:ּmS 0qasTQ_AF劲2 +(+־O"[04d_sYV +1曰ocg Gu'=s9u>Ť~}&F_a]|VuVֱ $Qy5nkuimQEpQEQEQEQEQEQEQEQEQEP/Zawlг Gֳ{(9?Ull&\fݓV((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/JݪWr_-#.Waa ʳ{+R$@"ɠ (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#ZQK+fpYc>F&YY#ڀ4袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ'ON\z/=>kvXi`\zU((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'tD +۲(F\_Vf=VXU'@EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Votۛi[U|/o +G vƳ>H9v2SsxԷۥFϩ'&E%]\o +W;p{_#SuėO ?ߐEzNZi}x0}p9?Wч$OOPQEhjQEQEQEQEQEQEQEQEQEQE}w2w;§$ߋy 9? nZv&*۩Zncx3Uk2Y'cQE}t!qQT +(A^d5 GSG't5aoXq+A_ 4߯ۆQExpQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEp^>x*'B-7 d?=ִJuev&uZ4 ijv-Tu'W_~./i,,7hǏ(N?zWnM'"8 U?S5_EaGߞ}(L(NkZ~i%ԧ c'{xᶵ㋐m5[ʿ( +?WӾ^;Ue>W!Cݎ.1l5jZVdLfsosӰ^EuNRK`+!Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWSc-6aAMXg=WPJn4ztzWw]]Kq3nW.I5-畚U5Ԋ((_G0!wEN +ibĺ$ ]J|W^=(tP((((((((((a'\bE?t翷ּ$,$]ܖfcIM6 ~gR+++ozۮR<4_A{;Nu[l|Ҷ=Im*;;qIdn(Gwz HmEMEL(@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEm*E jYv +RI+>/ѼZ&sB)U;ǟлM)[1B; +`jb֑L|ByW\j$r}D`xxd4,H;''_KC Ny`[op+qV|5xTM?Hy<葯JRQWo@2GTE,p$A^t^Vh`ÿt??zO/.v_FO'ۥzx8ܣ5;[[Agm1J#BҥM(((((((((((( +:zlUֹĿٮY\Ubj49[I C,sVd<VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEM$M#CgkX^!F51k$$W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP%uups<`sSiw +2r :wFu>!H>袊((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((H! vOĿٮAͿq$?#sX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@e9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ/q\W@~EX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((:Υj2cmM&r8z]KFK WOr1TT>NjM44ZI1I4(>T(PfYX{BW=. +5%{_]ŧP Ek}XH(>?gMCQEQEQEQEQEQEQEQEQEQEWşڗ'K6pO?oAg m"L]Ju<Ƨ^Q^Wʼn"QE{QEkwAc4__I膓n?}?7o=P`ڠlbG KT3V+qbjst[*Jm(5 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +($Ht 4ww*z(O?o{ЩZ\Bm-ƞ?|e_ݺ82I'~>ּo}yvن"Dq__w\Iqs+nY[s1zL&].c)6QEwQEKZ׌VHd(Grk{gP'K (^V32/rq9|7|l>ө:[W>GIʊ+TIsMݛ%`*((((((((((((((._1\u:PEAZՓAZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +mAͿqq_[q_[QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +VKmONj~U.{?gP{WHHŝfcԓםTP<ҭ+>´}VEelGGWn=xF뚜M¨GzYv Ϛ_ +||EnEeRyIvYOSQE}JV<$I)=V&ҽ^aoiq˷Տ_  סK߯]|ep~OGGs=Š(( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +ֵ7údw}Y,}O[ǟB.cs#>OxXou{!ļGU{^/zZG"SH~!|aԼVeӴ2G9RYdtĚ*(FddŠ(DQ]>k^8DؚU"Hӏ4ݐҹ]Easu)E?={ZV03 fos]<+O>o:L%>WI_=Wܧk[p+,((((((((((((((((x#(8?f@Zh!]NO9榢((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*͔eL[oNHPkWcbcAQ=PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP,vvctH%Yc^q5r(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ln20GRƱG5~mec +גjPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPPv&]G8榢(cX#}D"aAԔPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEy=_5|Ryԑ|׋WW+fch-\x8[>gWVoQE`rtu-JkIk[KXvk@x=#(PuV1W׭h9=ܮ-77(=0((((((((K,pBꑢfcM>>3h2J᥈Zn/xOj_,0!CA\WҧPP''vQEhHW<9?>÷X^ PgR, 7Hkjڼ\Ƚ7Q!QE|QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\o%h~s'ڵ&\e |бy9T,7cwTFw`$y~3xK塆;˲(>,j|G)/6$vXǦ{׷:^h?ݱ]&O>f8_v5\$L$~I(NJ4;YdcNn\ԢoTOk*ے=s)M`b ԣD{riV׉Kv1? 4V0t*|QCRh?'rC~,ۏ^6'o9ھE&:*?~{W:'fs*+4OX]5Kw"xz?t}c%>;wJj|ױw[m_c9OgyYdbřI=M2+3 +( +URA,NMi Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((GD"%3 +?2+R.:DmNiO;YWbj*RY,$QE|EsJukKī>=%wd4vG|,?<î&s;gފ?!vv[»b"0K_ENQ}]*j@*(((((((+>#Ú[N{2DO׫NU$_&RL;)$?+jkn4Y&acʷyUj:QEdh:yB8EMR;kxI`ԓ^_ ,B6ԘiϠ,<4oBiF m!ǹ>E|=4 +(Š((((((((((((((((((((((((((+-G_iٚlWi.7~~}ҍ)U7bn_^fKm_۠_7\O{u-M<^I$b$wFFgv%zi\,0we&Š(B(((( VjPmԖPyQ5Szy% +=EO,yQTE$]\Goo4#K3:|*k"]JHuOQ=W}jCj-Ey8hr]=+c"cUU +񱙢GW#O/xOL[ "ao3w?˶+b+B(EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫩/Z:/ǜ +֬ǜ +֠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((C+vC( 5Uaa ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEѿORF:ISutQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}vm }Zݬ/}Zݠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|AqOkZ|AqOhF\_VfjtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW_uJ}׻xVoD| _1I$IMyM>gU4רQEy4x}I1E ~J ᆑy]q55ՃUyjv'S+>((((((((;TQbp +ږm^ݾb>ׄο{ppy5kxM Cɷb4 Z-{IOPqu"^v?'^KﯧZlĒI'M{y^ zNqk[܈QE} QW}&[Ⱶ\XETJ)[!۲4!𢱼%lCGKn{8{F5_( +(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+d]#"%| +y]?jjF FPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FLǙ>:nPq@UvkdxRPjZ( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A?Lmmؒ`% o0d5aЅQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}v졔Aޢ%| +߸/dp|3j}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZ׍% 3@Mu:75g*DEvQ +uQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV/u? jȑW9+j6-?Fbne*7+EOgMUT#Ȩ +(K}k^ӓ?*dId8&=ᮑR뉮r/ikjUAB*+At +(((((((Ҟ\4,~NA1.czׅ_Rb_/סD/oF{5}ƣ{-ԆImQ_VJQE>d!䑂$~0Z` ;=X'(WX&E0VZ_-PR}Ԋ/?hk0 +-袊((((((((/?hYr?GEw +?6?:Zy;Q\ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +)M%m:c??@h sREPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEDӂs@T'*: @(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((dӀpFEO* EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE5cFI??v (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((({m<ϱI84-KZ~­C4s$!hQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_5xWvv!'A\gw-B[l_A3¾i30>gUiP+jwe'S+>(((((() Hu&<}O.Sp_ַa^H5ݘ9Y/~h/#ZrQ_aFhB#ɜQE!]|'r5;e |É\A_ +ro Z_0# C1]fxsMΗ8[sZuuRRж +(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/Jݬ/JĮAqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]?*o~ַk ~ַh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֬ǜkѿտZAq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEy'm_-ѷL?5_&j۞+/DҔ*`g:1=G#U}iH(5<96+ 8D샖?5P5yڕ" 2ܓWWO唹isEWqQ@Q@Q@Q@Q@Vfh\$qyFT!)F+V&WfO|TvP|Owiس%}jΥڄ׷oiNORXjv<]I_QEboLnumB+D, +Hv *I^ '6uP+u??W7mF+t5-@㲶2HG.ɭ*('=DVAET((((((((((((((((((((((((((((()FDHԫ)A)P(%"PAI$ lZV@x?\^_aQS璳 +(DQEQEQEQEQEQE|+? +nOO9ض_K|i]mΦGa^r~k_ovzQ_$nQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Ua ʸ߸/߸/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s9|]+mɋsq?tU}69ZO~/O_ʖז6'Y{=3^[tr=8-QE!EPEPEPEPEPEz425̀;({mE]SxYa% +g{W +,qF`*s u|=h~{0fvkbSOloQ\%Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+XRlA'#=s>L@9?YZ +2ZHJ3aZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn&fn>]*&E(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j;e7s7ZJEԡ-ƀ:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+>> M }+eO|߸/ѧܬ cֶ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ǜ֬y# +grAq}[漙&mJ鱆4z(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((( d +Z53K$<һ<řz2~kEɉʹ#(Š*ōƥ}fImjMƕ ~ZZŕ~i{WYY[QZZ#%ڪ?ZRZCK]ҵLjRk]Š(p((((((((((((((((((((((((((((((((f ($~-_%,V &~O=&6/.S7?nZڽe3)ˠQE홅Q@Q@Q@Q@adY\Q1uYocWhBͦY s;DykWE^nI=Džuojɧi6I2H$K={f3Ynp=z~uxJ֚Ev +9cǫsZuXv:G5lQEyŅQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE#0U,I=~2m|P?/˫Wĺ[WՔ( i۞) + /71U_t̋m8f3^^->ne)s>EWiQ@Q@Q@Q@Pu{mL鰈0:vQW&;xiR(ԳS^!I=L[(IX#??vpS_ncZ3/WծuN[˹GD^=QE(dymŠ(`$| AX,__`|<(6O+kLo34ޝQ +;((((((((((((((((((((((((((((((((oPkH Y&;:"+}:{˹h$xU$?|iqK|ے,i z˰5VLds:ד43I19&E}JVR4Y($S_gmt͗H>`?>zo tȷ"ܧ1=ز$r9U>|>1z };z |;*-M#hSb&^ǻ\5_| 񽣑*?==1 +q o?NS÷fo_٣?7},lWqWm~t%dO_*K,rO+(*fxl-i@#}\5E)JNweQREPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP7W+in8%W S? W-@}^F6ߚOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPTuJ ~qaxP[)!5 hRUP⫰}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((˓\W)*N1k0\$)8z?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɥ$" Vg$_^}so\}uZwhݎr=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +{zQ,+0-5C@$_hZܭݺ̀lz]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +! um\Gn;׌dZI[h̲zˌ1+>d(nxOeK~b?c5ԨEJ+ +?<#2뽹 3·袾1Q}d"((((+?펗c&/f_:bCO9Qi@B<ϷN=7O?JਢB4)Dg79s0+rUAy +F~FZ4;U`I1k׻iueh!p=O>漬c?|b"ƊUF +Z(= ((((((((((((((((((((((((((((((((ߋ>>_r)nX:)RYGv&y?oo +ifݳ}"ҼV˻f9$i+#BLQEo]/58smc 'zp<qGdIy0A?׶vv}v6 8`*y3CwHFEEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫩/Z:/ǜ +֬ǜ +֠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((C+vC( 5Uaa ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEѿORF:ISutQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW}so\}vm }Zݬ/}Zݠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((|AqOkZ|AqOhF\_VfjtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEu݂I=A6 E,^?udx.kbk[Gj⼼¥ځo%MzQ^qz# k2/\[D&o$<aSOe*_oȜ~فSe>Q^EPEPEPEOTԭ:k۷c>{i.Nq7mYC,ԹX#=ϩ73]qq#I4Yݺj\ڤ'{Y_GZQE`5Q[[FdV +;^ȵ/ʬ9oz&/=>gCZTIX`攰.L4oA;n+jNU$'=XEYQP0((((((((((((((((((((((((((((((( d(3헆;[Pen usG8׊9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ/q\W@~EX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((d00XK3rMx-_:宔ZG@?~u[Y/u3Y=<`~BzG#q=YL( mxOe +?/@}%^UgHmH#>fvUҿsr\yP+ +( +( +($m$fck0W@O2zO-FWԮ5 k ;w'{W`_"rZ((|7kֺFX5iJJ*`;~>0׾}:=#o@ +Texo>-t=1 |7v>ֵ|7/loQ\Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@HdH]Hk&}?ƺ(;Gd{`VPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPYդM 2A#Er75٣Gg +8*GMEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEs]*H93:zh(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((oe⹯? {VMcZע((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+;YF{`֍dϹ XG9\ +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((;n˔Fׄ['tc^#W_mle\?_>*%&ھ΋}<(Nɢo>2t0/矩j)(rQ]Ov4? iy\I@Rkb+袔RHF*+QE +( +( +wY^Y/[%ҚL4~^{y>y-ԆImֽl&ܫn@I'$(*H xId`9$݆\tsS~g9f#^kݴ*Eb\G䞬{5/ 0#kɰ==t5َ7ϖ? +|KG]QEy@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETWW0YZus*(dG8 +dR׀|sZ\ߺ"Ñu>taQA|ݑo?v_j_58sejFK(??}^i0#( ((((((((((((((((((((((((((((((}rm-ePqO$2oT־d +U}*QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQY0oS@V$2m[gR0]C`PQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVO$b!Xr{Y8Z%Pjآ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((m$d_He ߢÉUִَ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((^ "bͷ@hHe ֱ7v3(R}hQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEmo,XBǰ$˚&^j}ĭ&=<q^GWlУbk/~|^VaRPx[S](<򂽏֑X_j/3"'~duTPI'rN &p4sv=5^wբ+=((eחR%zK1Ojxes|裏^xIbjr[ULk!^lc,5EЄa6ۻ +(A^.}._ܣcSAxONj0W~[4ˊoQr +((((((((((((((((((((((((((((((((((j5֫K[!v=Ϡi۲WJ:Z^=d#v8drYKԓ[>-=Esޜ4lQc~ޱ+XUgR +(I +<ۯx:-jqz`k&w bp~x*m{%+~'pW2-t>qƽEYV7 +(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷7߷7 J,?o\W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq_>>6=>kv=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEVv]LbG>M_-91ņ 6מխN]STeĭ#{dVz|zңp+3#wlxwCn~'yu_#Iդ_Adqz'MkOER䢟}B(((Oxt 0:<{+JTVjݓ)( 6$u"zיҳ3wb$M%}=5UJr +( ·)|Gd <42XbMzQܟa^yw#nkqW,~'y(󻽋Z[okQTE(UL(((((((((((((((((((((((((((((((((+'ֿ鳤ع9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ʸ/q\W@~EX^E@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((⮯F!뷫'ޯ-6b&?oMl]NJOCW~z Q^aNDi$TE,@P:MᾑKM˘mss'j9(ӃS|?9qB۫ĒkJ+IYYAESQECwwW2K;šM (\%s}أ27a^:׷oi[${ +?L__֬JezlQEz'8ScK2I=ר>緷ֹXiN+#wOiPenGdN𮚊+*ՕYvz +((((((((((((((((((((((((((((((((((+,ọV !kry⶷yXKU$_$|MԾ7#K2v3Gw#ձ ہ¼EM~2ڭ淫\wnd2HzU*(I%d`QGZ`ih5]'O}裻`2OҾ𷆬%m"wFW?yϹ?\_߇hښ8 9.=vM̱|W͡jQEyQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+ٮ 3ֱ~g(OkU-2xeb[wQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿnnK|`9ݞf 5U?[mb%)"%(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:IS]Cy$D1a{Iemy$eTPQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@q\W]FkYbRu* /G_ +~ַk7KӥiL ml֕QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZKS{8T}(F\_Vf?~g+f٭, ր,EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@^acqy9PF9&ZQ.og9Vί/b[~Ƽ}KCo5(O`ָ?Jϲ-q"G,+[8b!EWqV׆|=?UL \}ڢs8I;#c:࿼HZAbAgiVшv§bz*qQEjQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\G t vp{Uӧ*PMߎr[:\pڄSQ^Oin'yi%f'$LaBLQE{LxR:u&wUN= pߍ.6ي17Xk.sYirjjϞn]ϘSTsQEA2?|gl y#q%CdE!^^%$G䢟}B(+ún؊S}ֵm K 9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ek4" j~ѿSپ]-292OqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEsWw2>Q5.}RH +19@Y?toS?(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*7XPUcZ7J{* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OP* +?OPr4VH H>lQ|Y,Dd JvJ{a38ֵk."iϷpZV'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(SJ{V'(Tj6[ԋunvhPP# (((((+?Wx5Y> 84}=G?·乱Ie9rNN1޹*toohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEyWOOh~󔹺C}QOZiׯ +0|D&79K?w^AE֭*uδ:9)HݑІVSATqx? "$s\QS +i=ɅY5QEaRA7A +W;pG]#OPl黢?]8sEu4MԚ{G|XoǟR'<(JVAQ>(N4t_{:P +3Lo*4޽Q!h(((((((((((((((((((((((((((((((((+>3|AgFӦƭ|s)^ίzr#b82~f֫K]\w= =znO_"r +((=ZZ|^e˄Az'Rm%vWrxcI"K0}N?j($$T*_x^,>X,CncORecdQEqQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE^-"ܱ@4p*UƲ+`y³M6OaTT,3Va?*$PEJӰ!ic& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'hj=ҭ;4d&+#9 ?K;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|w?O;'h +* ?G焟ɠ(s<$Mc& 4}xI|\K|ᔃ($G1)8jq(/k:!_ݷOQS$á"yrJ:@QEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((+ʾ"|D|D}}OoLՍ(HƽxQ4'O'4Iy\! +(iU4^u +#((rC}2.\a2뺼J[˸ma]"ƃՉt.v,k~\BV½tRJZܔUىf۶c&/%_޺bCAWԗuq$K#wn "ߩUJ(2 +q U,ʧޖLpQ+[h̓JQGs^A)m;᧗}v?XxY|Oo7K=v4t }.;HCG5f+mݞV(@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE$HbyeuHK31P:i 17txBD?uz%^Dݕ< QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ E6w8U5=#~V> 7ӵcPSZKtp:)-mux$ +b!GŠoOOʮ" "@1N +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(騪V4((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()`G-Vm:l086[`]~xGQ20hV*E^셴~އҨPKct.Üo05is7Oݓ?^EPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((('O'4Iy\!έXҏ4kׅsH>"|D|D}}OoO VYsHZ| +(1 +( +( +($nC+)t ׸>iꎩ9\zExe:9)HݑІVSAW)]|DJc]WTѴolq{oYuIo"/euko \ C*~ӥ*>.GW/w`+1 +"kWma"hSst+#{ƴμ)vtQ_ZM{քQEAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPESSԭ4}2Qa#3;Id3#Or[Qvq݈?_"yu-̭,9y$sNI?o~4,[@OF:r}MsuX"{vQEw +^xĖMUXldE$V0q_![P[%W,dժ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((_~P3z(B ADB(\(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ɗBY^C3[4v)2WէEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQA84ҞUvǹ%nhiHVCh,_D5QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEdbzUKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE"{Y#N2>W]\l{80J`pAȮ'’PkM}@GhQ@Q@Q@U[6r[vEZ1{+FZ[,*ł(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((m>INX/s=kdR4-ҹ_>dHx]>7"8bP0@zTDsVAEV +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +*##`G ow?/h9[I C,sVQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQXDyr:d6v@TW51k$$PQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW%uups<`sSiw +2r :袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*9->IQ\Ǭ7Z)Wu`: +Z(((((((((((((((((((((((((((((F h!O(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((LcP?WB} +uoh(B(((+/\ⴌ섾2jQ\o_I;IŘ9=hQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEyWOOh~󔹺C}QOZiׯ +0摙_za'օү q܌s^gEWT;l5^MAEV&AEPEPEPEPEPEPEP #^_ӂO϶=JWގ@(>z*tru''g Vg=CտW W 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((('O'4Iy\!έXҏ4kׅsH>"|D|D}}OoO VYsHZ| +(1 +( +( +( +( +( +( +( +( +($nC+)t ׸>iꎩ9\zExe:9)HݑІVSAW)]|DJc*+Ͼ|AMv4GTa.ٽG~u#R<>XՏ4B(4 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(Km/[kM?O;ӄIB;nح[zd7)[u5ơ{5ܭ5dF9,PapP_3N(W} FÝ&É޸ xb",CYHȊ1?R@_bz-[]+O˶M;V>/2{({8OE7Т+捂(((((((((((((((((((((((((((((((((((((( +WS._1\t^9?Y>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*+U-Esʀ9jUIJx}h(((((((((((((((((((((((((((((oj*|}M>SO(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((WB}򮊹WB} +uǓѿɿ?PQ@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((c>]Y[^Ii4ѕY_4k=KaxóJzip#>ɊUu8qOohƏ{jR_c30׊NvaEP (((((((((׆Q-G3L}ON1rvEF.O;𷇵k1\r#?{>ൊ)&y+Jd @ޖ61G/!7vcZ:Ϣ}u݅Q]'`QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^K/fXm$Tu{+xmF]jq +~8|AԾo ifxxQE0~>{}(X)ȱƌ9 +$Mp/uHuaÃ't=a4z¿':=u;Fs]Wթ*s+QY((((((((((((((((((((((((((((((((((((((._1\vF)FPTƱG4OkT6ְ!HWjy((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/Jݪ6P]3!m9"8,?o\T?fƃ +{P((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#[YH,'=ivJhQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@EsʥoP-Jx}i)WuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE#}QTǑM(#i@K@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@U+gK$]VvvuOh7?4U>|/1^$>}٨nw[\:SPEPEPEPEPEPEPEPEPEPEPEPEPEV]\ʱA +$$-~;x_DŦD YIy5  ?%o+~ x1a-N(QEQEQEQEQEQEQEQ[>5E\(i|/.NȨp׆Q-G3L}O_C +9yޑ4 zZXDžHٍjW*JspEA]AEWQQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?<~<P5+0C'װ|I  7ZQn=9'/Q]ji!Ac^=K.{i_"rIf,Ēy$sZo]\H#?ޓi+:o%KR41%S?ھ(!AqU + _xj 2 9?AAWx|+o7l((((((((((((((((((((((((((((((((((((((((F`,@|BE"ʰasK@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@SY1sq@E=SA QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES "K,O4( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +=fqKQ\Ǭ7Z~RZh(((((((((((((((((((((((((((((Z((((((((((((((((((((*<5-Xtlg) W+?^{SI@(CI[?vC$y~!Vn]a+7^Ez.߈0䕿o?Jן@  ?%oTݬYWQ@iB<贻̷`Oº/RʺH^Z\d,?j&XVC|<`k0A_g%d\/޲%=?h+'}ǖEg_q]QEQEr_uCmWK=bbȊx`Amu$䯏(?vC$~!Vn]a+7G.߈0䕿?=o?J>6C%oG㧏 g?ֳ]W)1:7yVJXHuKIkҼ9#~))A[N|s|W@89W~4²Go}+`092 a#r>υ[I]CGH!o?ܢ((((Q2(3=IK??YϾs Dy|O"̗&9KrV1黻s@⟎<R>vm#C󺼓]<_&]*ɌI&=? +h O~!I:]21_sXQ@Q@Y!I8pG]6#Z)_x*i<ȮZ~ڥ$^ `Rr*O^_iz 2m'~I]9dNU }E|/XxԴ\!}y=+'W6GKa3>E](((((((((( s[(#c.&kS<`=k0TW^~6-0.H'UyƯzX3ܯ>\ɴ=G(Vc\-$\eIdn#'5PW,5]GJӯwџEz>&\m#IiK=Ҽj=G?|a36ǀL{d^yZ!RԮ9'5F(PH :]& že:vz"O6??J樠~:j8thA+tmsKE7vlc|![~nUu ~c~(J+{Ld }͛%?SOn:(((+k_b4dev}s__B4CI[?vC$y~!Vn]a+7^Ez.߈0䕿o?Jן@  ?%ouPCI[?vC$y~!Vn}ΩPͺisNχN5`EQEQE we-ږlX梾CKW"r~dWE\! >P:ѿɿ?V oh(B((()YsZ)t_?NV 2 -Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE6I(IQeל㇃txaT^ +XdBDQ_;_ҷi{B:?wqh}>|}ũPDuKmkHkX.22;P( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((1kQ*?^9$mq+ھ,ҿޗ-yeź& :JGZZTWGks|NQWd5`*@((((((MJtVjWli6y6}+%tۛWy01A> ?VAZC瞳v_IBw{Q\'QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE{R׍|pb&fG> +QB"n|\+IX8ր:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +($($ڀ?|lYzk꺁ӭHlsjWsHPִ%7jZ9cfkb#$UHkeyZYy$cwbI>+цMM|ro2=>o񇨵jm6$V(_!{F}ھfuW?V9}o~6/ ++Y5 } +M>w>Ѣ' fpPx7v}F?{>iW۷#>ǚj~-I=QEs((((F[SOG((((((((((((((((((({EO% hV~"^>(> +BV~wI˂?霱%c_dQ@jzMSKbp ~}}<@\E8G"V8wM+Q"_@.WP5YRmpj\KSQӮ^yt"iǾjvKu{:NGlƵ|>| +}f'ʻ,FpGȥxRX^7PrA(3$׿܇G%|y_agIJ +iZmE\ȱC໙ }jt?oPb6I|C{'m!нr>@%㔇0?^9_`Q@&ݒWl+)o2"o>V KB^[~#}joXγF$EhQ@Q@Q@Q@Q@Q@Q@Q@Vnxwͤ-+ {>ߴ?~ӨZNOb|~susVu^S}7RrsǵS '3$ȱF3~¾[|+}.ߋkOǍML~bpfl((((7J&D7`.|?fSC] t+ >nmdta0 >_BѾkxx$rP?_=P_i|4'%^}+s>b|?ğgu/ KU'ׇܮ>(((((((((((((((((( W|sxoƒIn*y؜S@QSXm#LbY9As꣢}(4]SKwt1zsK_^\62~/vc}i^N4eS=o̐$ߺ$ĺ#M/F_ƻ>ɥp-܀^Ey/]V {&]3c^iYҢk¼w_.`=~WTPsC- R]Jze}ac]5=2^28@|kRZLc\_(((((((+_:'#I|O".d׺)ySV𧃍5-Ot1<>w vj. +(-n/!渙qƃ%(- QK3: +Ϻ\17""d{ /s^],#HuS#=Oӊj?}U(н~[h?߇4gjZ(u÷1iZKd^;?>&ZݺiYs_dS]HU 24>G$tٺQ䟾gkڇum[Kud;xjW³|ÜdT0{+O8o8neۥj%`O}袊((+\Vf/!s][R[ws2M<8Rx'ңo NF +OЩo&A𗍵= )G.r{2}p>5@U| $ɹu<'^_0ao}sǔdN𯳁@Q@Q@Q@Q@Q@Q@Q@s$]s$@{F&|!X5Ǔ +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axO4Y5=Zm>X^^g;wWT4NafIyk]J[RWZ#lnxݾ(+wp煟Bծ'#X϶@}y W_am L*=U:P^MJo!2HKE/{q_Vx$& ͛^#=T?_ַGS]ɌwT0>颱|'{nY8eNZ'y?[TQEQEQEQEQEQEQEQEW|vޝ65A?~y[ϵzGKe/ 7p/82=nZޯI]]H]a (:r#HEf 8M6 + ?J%$B(=(((((Gٿy jUlz%'vR8A +R,՘@*;,@ d$ƛ@}I?+__>PQEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?_Kʽ7+יWel?d7p<0}+"H'(VCqn Ҹ38ZZT_KUE>H'(S+P8QE QEQEQEQRA&O]:s5+4vA ) a}OԕQCy7T^Ei`a" +_Q_.zAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE徟e5ܫ dG8 +dBW|ᙵvHGĊT./fin$՘n`?ýd*URM}[ 1| SǍ,=;{ݝ/ VN{t ry:(ER(((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +=fqKQ\Ǭ7Z~RZh((((((((((((((((([;(T?eUF.mF+V#.]&MKVXa^zTw?_2Ƶ&k hF\|]xY}GS=D0)!OgL] ++z1QEzdQ@Q@Q@jĚ%/$prF^}k*RZWÿ:wl/Dv:w|z^_#*IH2#KTx#u@Ցq9\`~}kwN-ƱgEQ@Q@Q@tU+}QPi}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEȽפ +׿^_QE͟x5U5}g6MEPEPEPc3%#gOC$,Prџ^{M|_ş$MkO@'aP8 P'EP_u|4F->f. +㌣EfAi)΃/_APEPI&?9+?M{rWǔWKJ?%+ J PTQEQEQE?~5&l!g_#ҽڪVje֟thd_Ua*Σc.]MgV P7WF*r>OZFei1?k|᩶fدeGQEUmBKӮ/%[[碨&׆/6mmdėx`'=h|sW,1m ?u~Ϲ5QE5{w{æ[.@Gx/COcy?U= +( +( +( +( +( +( +( +3M1Oڮ@?lt>"xzo'ʸ4Ekx_ExL?w)*OPԿ<8"Omqq]v_ Mbm'Weĝ$~5E}ocM|QEP~ξ)6g7n-=%Q^|)f_xMKJ̿kf"F# 袊((((((k:%im$>|mu~! WKV/$]$LxZM%ϋobϔ0,|?}Z} |7'HT$Ũv((( [{XeB# R0A~!MK$6m]&\rM}^Hk.ȟú,?|EPm)O \ꚍM-̋HY~xK8$2dtMxU/Mqdg>b=(+<_OꐇAq~Χc(xr~#ѯdSʰ#+|*`y. }lZ &Zt+qc 't_RO-s9b`X?šxšf~ (b(((((((+>7bmu$ <FobyQ g?,&ݤiU +&?Oz+оx Jq-#ϰ>h^jPmV#nWŐNokZ+_Ht/x҉+ + ?J +( +( +( +( +l$1<:h 31P:i<%M zy#>~*qⷖoPQEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?_Kʽ7+יWel?aEW`Cqn Ҳ$r0En7p<0}+rh#iiQ~?{3[S䍢r0E2?% 8YQREPE$JO>_xxi ׽R㩉{~O#v9fcOk+s?m=g9t(|( 񿉢Mg$zA5i[ Zo_pc$uWc+ #5**zV"XotEYQ\ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]N ~rx<Vd<VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[oo@X>> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((oTz*W%*(((((((((((((((((/o-nXmC$7EP2M|~8HZ;(IK;rx3zˠdTA;)q'{uD?ׂxUine9t +(0(((((-;y)`ȇ A֣>]7\2.iq@=ڻ+,c,` ƿ#uW]Eso" 7SFA|a/V7( +( +(騪V4(((((((((((((((((((+?^{SIZȽפ(+?kjb9Ǹ?5|8ǻ̱(3$׿܇G%|y_agIJ +~GsU< Aj(((()ۭƣݴ!]y◈]N@?ʸ+٪Rt-z,1>G٪u࿴">h}Y?"Q@8x{xjg%Qwn +O7l{\rf#~M}@Q@Q@Q@Q@Q@Q@Q@ |sֱzwy'W/'m4$w*oWTW'ۼquf=:>Iw}y}A;ic-֤ˇm( +( +( +( +( +( +?J=1x]ynͥilyQ@ğ>lU9!((6#Fj]FpRE}_W~ N^{([@o4EPEP__B5|! z>F`nOQ7a;(( +( +( +( +( +( +( +( +( +F=oOT2@@+j>+VUڴ,Gv@)WmNm[-&&Nz Th,,mmt,?ξk_ ,t9_q~QEQEQEQEQEQEW;BOUW;BOTNoo[7y7 +Т(((ǜ֬ǜkѿտZAq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW|mNQTm޲Z!x^^ Kj%l 1OI-ÏBM@(((((((/Z4 cP}ɸ@ܜKY3ܾT{^k:|۴9vS'/ ~'% :}֩YB]\HEf''m|[]" (evW oj0PcՇ^'ʏl-+{ kJ/׸־4%$B(@ !пJ$@(((F`Y {P?oZx/ZlpekSSuKJc-̆I\'Aڻ>>5KEi):E1Zx8מP+z>n裩cIW|=gX.!MF}ɯ5- PVQ޽<Ce}gI]|C2 +__>W&|?((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((>,ҿޗ-yzoŏ:W%2cŠ(@(ndID`ݨn-0xaWGҢf5is1hD`e~8JqGV +( j'ҝ:s5+4vA ) a}OԕQCy7TEWjQE ?VAZ+K_Oyy8_Q_.zAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPYeV$on:ܜZ]+忌??+?X9 +T< ]x<+Tԙ;#O/|Y^y3a#+j(TRvFEUbRwf'We<3׻]1~}I w%V.SHØ=_ݽ3KCe#mB($(((((((((((((((((((((((((((((((((((((((((("u -/TPR4b4T(:(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((I R̍7(8@}JBh(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Ly$mF Ƭ:((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*+U-Esʀ9jUIJx}h((((cg"),>6/Q)ف-m_أ6/QfT_ibxEQ}{}>o=`KEE(MY-m_أ6/QfT_ibxEQ}{}>o=`KEE(MY-m_أ6/QfT_ibxE]J +L.mM4?ʥM@ ˨ΐ|?U +NHûvGޭqks43<T($QE0 +( +( +( +( +( +( +sGLϛ- LM>Wu5쏈p[`"{w67)*(\;*6/Q+lho=ib0%M}{},TibxET_ibxEQ}{}>o=`KEE(MY-m_أ6/QfT_ibxEQ}{}>o=`KEE(MY-m_أ6/QfQE +( +( +( +( +( +( +( +( +( +( +( +׿^_օg/j/h +( +,KM֮bm(#=S⏎!G9NlA|pIf,ĒNI=(٦Ś_"oRŘt~u=y] ]JRy_sO(?M{rWǕ$䯏( J W5]/(((*+fC +41IK^;1h>CQ_߅<|1@8k: !dسF(?g{w=. UUjn:`ҏIq}1(3m06>v#\9_6׵~WOY.=삼V +sǺtrݡzrGgvL?#( +( +( +( +( +( +-i#XaC}?#֫jiVR}ˈ^&0 :&sF0pG6W5#WIԉ]Y3 s_ +_ dd`?LP{EPEPEPEPEPEPEPuoO7譺;(Ow7<^sZ~#N}WR~w,H fP_k|6?>vV'V5}^AmߚE~#(`PQEQEQEQEQEQEq_|Ynm5!2P+Z_>,Mb Z(+Oğl|a''Y?P>]v +?xzqL)2TQEQEQEQEQEQEd>kȣ$G *1UV'tx+[QdA÷|7EPA[g\1¦{0WR$ѶF ЎE}ݢqk:}g㗎5fa Zt'Y[=}ԩvׯWbj? |A3̓Q@5jغtvoF%X_BWaN2pKna((((((wUAwUAoh+ooEPEPEPMxQ\p4([ϼ_5ڊG`0)PEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW_uїZ}?,:rд +vM/J?畴)WG _|CeN0?ry(((+g8 We+&//=M6&Ҁ<ѵp,7^y]w|qSQ@Q@Q@Q@Q@Q@y!ᯰX˷WTEO0Ѥ==/z/kk۹ԓ]{Y8yǜu~g'bW_SxŰieAjIHaFY*"'?xJ+YNsdQ'vmo(#4 +`튖($?5+쿋_JA^CZҀ + ?J%$B(=(((oǏtFt~e<V}3+|[{/xjY9HWǜd?uC'|U7 ֮mB_2C#@(W!񧊖K,ćcHjt>Um(Zk(^W^+k[iTy3S{@@ԴQ@gI]|C2$!|@}I?+__>PQEPEPEPEPEPEs2m>ȱnH_F|E^5 !k_]F|E^5 !k_]F|E^1_jC?^U¬]:+qߚ Z뤿)ZmKC*&@OH-甿֢ RChyK j+' o/?ƏH-甿֢bI 2PEEs:[ UZyK j+' o/?ƏH-甿֢ RChyK j+)5wuQ'֭QUoR%EffyK o/?ƀ5H-甿? RChZyKm.n@МcQ@JRdGb#n*$_kQY?[)!4Am< G$_kQT8ehGRw͊@V}֯ BYq(ByK o/?ƀ5H-甿? RChZyKW#4j TQEV\Rf)IV*qߍ7 o/?ƀ5H-甿? RChZyK o/?ƀ8tK^e^:ntpz y}fW/VQEzEPEP7p<0}+"H'(VCqn Ҽ &2>֖٘գϪɂMJ؆0>ֈaHc}jJ(!&ơxa=AQ_6սOR5;FfC${`;UJ&8zj+~waEWI!^:b'G`q3}G׵{}:s,͌AݏWIkXA(F?y=I +s_$~'ݝbU + RChyK65H-甿? RChZe{+G:lU(xm.BˎF1@VO$_[)!4EdAm< @VO$_\VPuZ(-1JJSvi[)!4EdAm< @VO$_[)!4ECkrv2SPE#Df=eAm< G$_kQY?[)!4Am< Z$(azuTW3^u hH-甿? RChZyK o/?ƀ5H-甿T׭DRt@QEUkԲdYm-RyK j+' o/?ƏH-甿֢ RChyK j+:Y!H ?hEJRdGb#n( G$_kQY?[)!4Am< Vl8ehGRw͊EPEgj\4/byK j+' o/?ƏH-甿֢ RChyK j*w8;QYrkJ%X;~4EdAm< @VO$_[)!4EdAm<օ۬VME4VO$_[)!4EdAm< @VO$_[)!4E67Ē@e 3Nuy @sM%m:c??Yz/ $ړ@0ܡx_zqjZt^kgGBKz +yK j+)5wuQ'֭QUoR%EffyK o/?ƀ5H-甿? RChZyKm.n@МcQ@JRdGb#n*$_kQY?[)!4Am< G$_kQT8ehGRw͊@V}֯ BYq(ByK o/?ƀ5H-甿? RChZyKW#4j TQEV\Rf)IV*qߍ7 o/?ƀ5H-甿? RChZyK o/?ƀ5mnVf@Bx=jj(vǠH-甿֢ RChyK j+' o/?ƏH-甿֢ RCkR7Ē@e 3@uy- G$_kQY?[)!4Am< J\hV({zQ,+0-_[)!4EdAm< @VO$_[)!4Eg[k0\$)8(^QXXdm] RChyK j+' o/?ƏH-甿֢ RCj͖hB@h(^K㐲㑌T?[)!4EdAm< @VO$_[)!4EUVPuZ+.Mr)^38oƀ5(H-甿? RChZyK o/?ƀ5H-甿е[u + "3fyK o/?ƀ5H-甿? RChZyK o/?ƀ5X@ }QQ\ζ3Uzֳ RChZyK o/?ƀ5H-甿? RChZMzTE.IA5@UkԲdYm-Y RChyK j+' o/?ƏH-甿֢ RCj[mf #3t'tEPERԢuYذۊ @VO$_[)!4EdAm< @U+-N+Z8ԅbEuipмr\r1Т RChyK j+' o/?ƏH-甿֢ RCjw8;Q@&oRUcMyK j+' o/?ƏH-甿֢ RChyK j*Z +)#1k+ o/?ƀ5H-甿? RChZyK o/?ƀ5H-甿ԍı$C mgKEdAm< @VO$_[)!4EdAm<Ҧn"$բ(^ޥK$ mj$_kQY?[)!4Am< G$_kQY7 +G fN1F +(WV.";q@hH-甿? RChZyK o/?ƀ5H-甿e{+G:lP( ++>Wx,c$_kQY?[)!4Am< G$_kQUlFhՔ)V˓\W)*N1 J+' o/?ƏH-甿֢ RChyK j+' o/?ƴ-nVf@Bx=hj(vǠ RChyK j+' o/?ƏH-甿֢ RChyK j)$(azuTW3^uH-甿֢ RChyK j+' o/?ƏH-甿֢^wUKqjEZ,Y$V`[o@hH-甿? RChZyK o/?ƀ5H-甿Y!H ?hEQTu(]VDv,26Am< G$_kQY?[)!4Am<JSV4u!w|ثQEgj\4/b4(H-甿? RChZyK o/?ƀ5H-甿e}3FNEPEeɮ[+bb RChZyK o/?ƀ5H-甿? RChZnd+g֦G`zyK j+' o/?ƏH-甿֢ RChyK j+' o/?Ƶ#q,I P>(g[kw*@@Y?[)!4Am< G$_kQY?[)!4[8?ƀ5h* -J {zQ,+0-wX"hJ#ǵokXOUu5t9Vڸ/'Z;Mr;HP)*q +' o/?ƏH-甿֢.n@Мc֍QTu(]VDv,26.Y?[)!4Am< G$_kQY?[)!5fSV4u!w|ؠ QEV}֯ BYq*H-甿֢ RChyK j+' o/?ƏH-甿֢_G|ѫ(SPE&oRUc@VO$_[)!4EdAm< @VO$_hZܭݺ̀lzQH@3@ EdAm< @VO$_[)!4EdAm< @Scq,I P>(g[kw*@Y[)!4EdAm< @VO$_[)!4Ee&n"$ՠ*YDHߖ,Y?[)!4Am< G$_kQY?[)!5-B:Ѣ(^QXXdmVyK j+' o/?ƏH-甿֢ RChyK j*hBWhϺᴸh^9 .9hQY?[)!4Am< G$_kQY?[)!5r;fYBj(˓\W)*N1Am< G$_kQY?[)!4Am< ۬VM@5 @VO$_[)!4EdAm< @VO$_jFX@ }QQ\ζ3Uzր% RChyK j+' o/?ƏH-甿֢ RCiS^wUKqjEQUoR%EfK o/?ƀ5H-甿? RChZyK o/?ƀ5mf #3t'u@U+J+U VO$_[)!4EdAm< @VO$_Y⽕H]6(Q@uipмr\r1 o/?ƀ5H-甿? RChZyK o/?ƀ5W#4jTQEeɮ[+bb G$_kQY?[)!4Am< Z+wn ![<5R;Fc Y?[)!4Am< G$_kQY?[)!4Am<KH0Ͻ: +*+pJP:w$_kQY?[)!4Am< G$_kQYI[8?Ƶh{zQ,+0- 4VO$_[)!4EdAm< @VO$_Kmsprn΀4h(WV.";qU RChZyK o/?ƀ5H-甿? RChZe{+G:lU(xm.BˎF1@VO$_[)!4EdAm< @VO$_\VPuZ(-1JJSvi[)!4EdAm< @VO$_[)!4ECkrv2SPE#Df=eAm< G$_kQY?[)!4Am< Z$(azuTW3^u hH-甿? RChZyK o/?ƀ5H-甿T׭DRt@QEUkԲdYm-RyK j+' o/?ƏH-甿֢ RChyK j+:Y!H ?hEJRdGb#n( G$_kQY?[)!4Am< Vl8ehGRw͊EPEgj\4/byK j+' o/?ƏH-甿֢ RChyK j*w8;QYrkJ%X;~4EdAm< @VO$_[)!4EdAm<օ۬VME4VO$_[)!4EdAm< @VO$_[)!4E67Ē@e 3Nuy @VO$_[)!4EdAm< @VRk)rN:Z(^ޥK$ mh G$_kQY?[)!4Am< Rk0\$)8 ()dӀpFEO* '27O}p_E#+PmEdAm< @VO$_[)!4ER⽕H]6*QYZ6 !e# ++' o/?ƏH-甿֢ RChyK j+' o/?ƮY_G|ѫ(S-QEQYrkJ%X;~4H-甿֢ RChyK j+' o/?ƏH-甿֢[u +"3f RChZyK o/?ƀ5H-甿? RChZyKHKH0Ͻ:*+pJP:VO$_[)!4EdAm< @VO$_*k)rN: Z( +*YDHߖAm< G$_kQY?[)!4Am<msprnδh{Eb#avyK o/?ƀ5H-甿? RChZyK6ZWq ](xm.BˎF1PAm< G$_kQY?[)!4Am<V;fYBj +(5xxRTԢ RChyK j+' o/?ƏH-甿֢ RCkBnd+gր&G`zZ+' o/?ƏH-甿֢ RChyK j+' o/?ƏH-甿֢bI 2PEEs:[ UZyK j+' o/?ƏH-甿֢ RChyK j+)5wuQ'֭QUoR%EffyK o/?ƀ5H-甿? RChZyKm.n@МcQ@JRdGb#n*$_kQY?[)!4Am< G$_kQT8ehGRw͊@V}֯ BYq(ByK o/?ƀ5H-甿? RChZyKW#4j TQEV\Rf)IV*qߍ7 o/?ƀ5H-甿? RChZyK o/?ƀ5mnVf@Bx=jj(vǠH-甿֢ RChyK j+' o/?ƏH-甿֢ RCkR7Ē@e 3@uy- G$_kQY?[)!4Am< J\hV({zQ,+0-_[)!4EdAm< @VO$_[)!4Eg[k0\$)8(^QXXdm] RChyK j+' o/?ƏH-甿֢ RCj͖hB@h(^K㐲㑌T?[)!4EdAm< @VO$_[)!4EUVPuZ+.Mr)^38oƀ5(H-甿? RChZyK o/?ƀ5H-甿е[u + "3fyK o/?ƀ5H-甿? RChZyK o/?ƀ5X@ }QQ\ζ3Uzֳ RChZyK o/?ƀ5H-甿? RChZMzTE.IA5@UkԲdYm-Y RChyK j+' o/?ƏH-甿֢ RCj[mf #3t'tQ\Ǭ7j+TRZilU?0]E7xxQM=(=(Rɥ)8W̟;G_L/P^UdOc袊s((((((((((((((((((((((((((((((((oU-Emʥ{!E7xxo)ǥǥ::( o)ǥǥ:nF@zSBq@ E7xxQM=(=(՟Ƚפǥg1t@4Q@}g6| ^HNf {Z; vh7C~; v\~5qZT;v's@TW>d2BnT enn?_jZ-};~"#Є#o^*|c˪oTxH?SXQ@mGw^-Ejr~?zdžng#ye""嘞u5KTy#׹>z5}b;{x(tUQ?!SwJ7JuҔ6>3$׿܇G%|y_agIJ +~GsU{FgV#yIYA*YNF@ ZƊ; vh7C~; v0?/)f 2I_*]>7R"m:ԞdqHϾkg_ oYuG\M8/İGNw!~4QE}ğx Kԝ\^Mng.][xp=? +'xQM=)QE!8zQzP wFO}ۼzWϾMC[4#,NN?w@.Q_N:x?:P?g?wƨ*+gK\?|A-sƨ ++9=#'3#|E}; 5G3#|E}; 5G3#|E},kJGoq$o)ǥǥ:nF@(Ro)ǥǥ:nF@xB>񶯤+-f2W?^ExUk:/%]gOlM|~~7ڀ>碰|)/:Z&n$ Vϭno)ǥǥ:nJ&FG&@:j!EzOxcMAg \z{G#?-PEP_I~͒gyߚk٭k"M{ҍҀE mԴW}_;h^#Ԗ'[Za ~U?@5x__0tOṇ^ F uC|2 >G3?@I+^/rZGٮ$k-ҍҀ>\vjJ.aj_|yvZʒߥ}zR&M6֓: +nF@('4ǥ:nF@Z jddOg4XyzRFAn.y/qQPC;ç9MBКz[)Eq@ E7xxQM=(=(SwJquQ@o)ǥǥ:WB}x{T9$>PJѿɿ?Vyo(B+>Wx,cEdAm< @VO$_[)!4QOs )8泿 RCj}jP ?k + &܇*Aq}[Eeɮ[+bb RChZ?cW[)!5w\K=r@ \0ϼ@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWȿ~-j +mEJ?yw +l2 + +(((bWszh?,|G6~ e @?\tSğ AOQEQEQEQEQEQ^y{^h%W+P1z??Ӧͅ,}>jbKOzgneM*$mKy$?|FZKa{_G=+Kt]2!b8v'QEZWƕ_ů%~ q|i@}KIoQ%|__CI@EPEPE|ށͷTԐe<B}r{ +?Ŀ3n4)Sti=az*+ms,e^J?0z{P|?N'{gWv[EmoH8`*I@Q@gI]|C2$!|@}I?+__>PQEPEPEPEPEP~_?}|_tz_5vѝ\ӕ ! +3ɿgTŒ@y2o*>EdU>_ hF|?<7_,x ;pׁ@_ hھ—48Fy23d5?٠Z?f9j+ƱG4cX#}ip5U55F0JuRտ?1\vBH2gOy-Eu??fk@cX#}?sP봪++@d<ֵCsk w(9hyc8zkWQh +K .ǝ§/>Gkj Yn81ޯNM +OE 7QQ}^cǿOoף_z_kG5?٣K .ǕG! ?~?fkG+Az]*!?^GWAH?ft{%`#r>cG+Az]<Uuz[Y-ɸ )yM@OlYWZ0QC\vW6ݠIr9?fMZ?f9j+ƱG4cX#})#]]SKU8uwW(~\ݲX(yc2="?f9j+ƱG4cX#}娮ycdUv}:|Ƽb+rGOw}(`)@$I%{ڀ>lmÉe_5zѣMCJO/_ǍZ=9;'׹uݲX䊇yV*s+cX#}?f3kG5?٠ 誵 +?1ꥫ.b&'e(kG5?٠Z?f9j?t?ft{%`#r>c@y]?v+Xn$˹Aok@cX#}?rWScꥫ.b&'e(kG5?٠Z?f9j?t?ft{%`#r>c@y]?v+Xn$˹Aok@cX#}?rWScꥫ.b&'e(kG5?٠Z?f9j?t?ft{%`#r>c@y]?R5v&]G8oOh|#p9v~ϳֺ{="K(]%~c@cX#}?a?åA*d:;VuUlmZd,T`rErWSc.bJf'e*5?٠Z?f9j+ƱG4cX#}_iTWGV "9#5z +y]?j 2Pr94]O5?٣y-Eu??fk@])#[?fi,q&.QEcW_scov!b*k@cX#}?rWSce#DƱG4Q]O5?٣y-Eu??fk@ _;hQ 37??ʸC)SЌc.bJf'e*5?٠Z?f9j+ƱG4cX#}_iTWGV "9#5z +y]?j 2Pr94]O5?٣y-Eu??fk@])#[?fi,q&.QEcW_scov!b*k@cX#}?rWSce#DƱG4Q]O5?٣y-Eu??fk@ _;hQ 37??ʸC)SЌc.bJf'e*5?٠Z?f9j+ƱG4cX#}_iTWGV "9#5z +y]?j 2Pr94]O5?٣y-Eu??fk@])#[?fi,q&.QE/떴/cW8e"GRTh+ƱG4cX#}娮yc2="?f9j+ƱG4cX#}娮yc. VX!סM\(?t:Ʈ핦BF$T??f9j+ƱG4cX#}娮yc2="?f9j+ƱG4cX#}娮yc. VX!סM\oTz* +z 0OEIQPtT5:Ԕ@K@FxԔA9描P`|_2pcrW|(((((((((((((((((((((((((((((((((=!qJzTVZwCEIQR:*M#((GAKEMESn@Rll&F@57`PM~H@=h**M#((:RIZ{PTjg% |#EPEs(eAi 5M'?T?]7@ 5MԉRzEb9+?xvtG?nN}XҸ=@?[>gXKr $c՘+ϞefʋS͈QlD(P"P|8Ex(&|}$#G55&F@Rll>>`|gIJ$^rQROys2O<8Rz$PTWA'?T?]7G 0S\tMsWA'?T?]7G 0?*k/~uIH mXg֎V^AxTi g +'p׮6' +?ץxs_2][˪ܯ;( {6ho<nB鶅-AėebOɯ<GKEP./d;+ߞk("Xc`(PtTGR`Pɿ)N鿿m Ue|iϸwy߳tky季l}xzr"u'ӤP=X: };EIQPt&F@(Tu)(:*M#((KH +$€>|_g#V5Oypn.OYdisPP_P1speor1+UO"h6 +6 +i(P:PEMJsIPtTGEIQPG |$׈?A]t REh>`QEDzJ``f]ȇX֙W~ϯj0c]ԉTh7s־ ~o(ONҡGEIQPtTy7~ Cs+wG>14?O_Swŝ ug?=NFݱ*gv]&F@RllIQPkJ@=i6 +``6 +6 +մ=wI-n1Ƚ{B:+/J~%/TtchaGbs\xB6WX,\MT +7oiC29IW!?zNj5jP2$^_A[Hv94d#zTPܶ%еTa\ʸF?5}`w<ѪWtPښ hq_xYG?yh9bvl67WQ@O<35xMחg5w(g֗Njy1f_z9MrrZ%?M91Y +tPTGEIQPt?` +-Q@ TAIPtTGX:?* +@'*>WAǓ sѿɿ?Pr%/I[LKqQ]O5?٣y-Eu??fk@Y o?]5?٪:6(y' JtookF\_Vf9˿7k}"Gghf9?1Icrq+k ;:%8X/@O@sEQEQEWʟ_ScnYj5qy{_QQ$ۇ1'}; +xSͥc5rs(:tzu`; ??vh7\ ++᣼@sChu׸־4 zecswDi ; ^@}KIoQ%|^_#M7CdwFP`õ}Ex4w߈_~<[]촫[ a' d >4QEd6^注> MAۢ'*{}~Xu tA(}+ik˅_X-xvO3~f~ G (K#DQĜ}QZȪu+M{ +>=揆~ ߅L5Z]5;hne:uWGx?Q^? ;G4w߈{n~!Gx?ǯ%w+<=?hu̒"S +t a,R(b*YF ~4WGx?Dž6xoŞ#,Xny څH{PQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|R~ ;կ:A޺kXuv]s'S_x0ίzpd;b9F>$G.{yK_ՈYei^Y]GbrXZmWT֖^CikKq3K18Q<uoæù-S1=]+NaAq@s_<3ė|}{]_+z¶3x((((((((((((((((((((((((((((((((((((((((((((((._1\u:PEAZՓAZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((YoRW?7_>ր:( +( +( +( +-kWBSѬo' +I< +d:r:עd?_?'(4O𮎊mS+#4OX?º:(?dsBƓ¿ O'WGEڧ?,sX?WcID +Tg¿ O'Q +,i?]{j9WcID +?_?'+mSG9 +,i?G+б"ttQ3?_?'(4O𮎊=OxY+б"BƓG #4OX?º:(?dsBƓ¿ O'WGEڧ?,sX?¼G4{/ SFl峸FT-|skk?\`t+*㈮hw#=hbgNd۲`h~\izՅl}N]ES((((((!/`I쭣{] AiJCѰֽ:b]FMHHEq{*}^E]+б"BƓ_-3ͬsX?WcID +Tg¿ O'Q +,i?]{j94O :O'WNtT{j9s')BƓG?dsBƓ¿ O'WGEڧ?,sX?WcID +Tg¿ O'Q +,i?]{j9WcID +?_?'+mSG9 +,i?G+б"ttQ3?_?'(4O𮎊=OxY+б"BƓG ! +@ +Z(QEQEQEQEQEQEQEQEQEQEQEȽפ +׿^_QE͟x5U5}g6MEPEPEPEPEPEPEPI&?9+?M{rWǔWKJ?%+ J PTQEQEQEQEQEQEQEx-Ԕp 9YjSȻ;\gc~O_%]Hi)Ys)A\EMgu-p6٠eCr?Q@|TJ cG`&O\(((((CH|[kGc(CR] y ҕ.rqﭟ|EP_l|:Ηanќo#c_zdֿqg}p;n`3f4$5 +UG`:P(((((+ ?һ:񥡾6jZ]>uQ~(~ K[Ўxf8\WUWK|Ko;}@Q@Q@Q@Q@Vo6PGmmK+z*VkſhogzvbP>m + :h&&gͻɷ9ؽ~? +ʢk˨mmi'8zkxn xKObZ<~d lxMv Z'g`=Њ>8X\SyMy7럵(_GR+((((w?cү.ǓɟL)?Ҁ>e;2go͉Q@3,`h+ }:%3_@+z((((((+!'*諝!'*[7y7 +<hQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((+?h0xGKԕrm/ m):z#g_u9tneP>q4 9RQ@v{S]gzf1ǫ($~f>k<]=3s4$;?5tQEQER@dھmWSEܳ1#5}|9X ia6s>PG߅|a@{զ5YYoѾM"mQ=pp?zMQ@Q@Q@Q@Q@#Iȵu}usZ:JKiW7N+6s^K  ho5@?E{3?%>0TW8ZQ  ho5@?E{3?%>0TWxw3^k7D։.F@^g@Wx[৉<]MrJ~ĞYrduSހ<޺oR<7a?1]3?%kS7t/:Y<Җ* 1=h(>y?^ _V|_i@dҮl!i*s1[j<~gKC?|aA-ƨ`q?7j<~gKC?|aA-ƨCw3@Yo4muBϖ82מPE:'kk+4k,҆ +# FF +]о+q?7?xOZn{Imjd.K!s6Qc4QEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Wi͍R?zy>܁2}+ZeZj&yo?k?غtl\eWkjvUa! B((((((((((((((((((((((((((((((((((((((((((((( +:–d + 9+eO|( -$ OcZ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((5wh66t(eO|,A0DcPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP!u b#r<SiQH%`2y#SEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEz*Yo@*_>EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE=RZEEwp }W޼Zt={G-nc(zAW^/Cq_);ehFWexR[gs +(T(((((P $_\ĶZ=!$ør~?ʾӴm+M[FF^y{Zj:;u{Շ0E'=O;WWfXmS;#hF(K +( +(騰}*j(ޟEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~"^+?^{SI@QEW6o\W͟x5T5Q@Q@Q@Q@Q@Q@Q@$䯏+?I5!_P]/(j_Q7a(?1@mQEQEQEQEQEQEQEOUӡ6f2|-XOjwZ}}IW޵Sx-zk',?>uyQ@PϾ(]Ws?N&B?=+׫⯇~/>1cj߹AQ1Fq_hCwmż,2xCFA%Q@Q@Q@Q@Q@| Zt*`\ﯗ_AM~ u:o١!{9_41gbYI'E<>u_I0iprzyA?Oڥ!_矫z(((((()FѸ8*uNfvwe'߷oUj.igIE ;KmL#?B|@*;E,p$W$~:=:PdpgkDž@+]V.袺((f<5Zk!Ԣ)Z5\$#MV~9܀]([u'|3{2@0?Яimďqi+((+ wFO}_5j_׋o5[˨$ӼirbFw@+E{3?%>0TW8ZQ  ho5@?E{3?%>0TW8ZQ  ho5@?E{3?%>0TW8ZQ  ho5@?E{3?%>0TW8ZQ  ho5@?E{3?%>0T~?PIb|&׼⫭STf['UكF܊1=+(((?SJ1Z&lv(ۇ?xe}eC:[ttt09[g_&^5j/"1*~U&ׇ$72>'p6}?}EPEPEPEGY 4KRHgPN>|U-a-lP[.濾m\Hެ$f;ᅬ^[ ?|]\Eo +W:+JCEv@'@4QEQEQEQEQEQEQEQEQEQEQEQE|YX>ٮ",^N=–?vw⵽l3m&c}kp?:(:m̦Rqq6zl p_hׂ>1j~&<O-0~^@Q@Q@Q@Q@Q@Q@Q@ywa$Dsy C%J[#6LszP}pxEQ@ }%wcv=|>i;]l?6ɏ_TPEPEPEP\{ѧ7 `Za5먠( +(;zy>*苷) }6#įf,[T+67_JEPEPEPEPEPEP\! >WE\! >P:ѿɿ?V oh(B(((g*>gaƵh/ɗy?kԮ`AsW(?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((((((>`쵕kS@C_Wn3x£Q~G2ix޾PB9$rlӵ- Gs8(ҡ n|fmO 9qfiHH3ORM651x~m2`('-aAkh:* |,liY+V, = {QEQEpsfĶke:s*?]?a+7_(k0/k>>o +xR}?D~t?ʘ@@',ua]M|:Fd2: +( +( +( +( +(8_JA^CZҾ$?5( !пJ$+_Ht/x҉(((((((?_J? Wɕǯ%w++M|9`_W s":( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()MO4Qwv8 +d}(^+o5k3(9CT3}Z]ծ=BS-˗;]W4.jLv2;`W_Q=9?3QEh#t>=7}wc?Jί~|>[DaƯ|au Orc1+OBžm"B0es`v(fETQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQP\L\p:$_kQUR&5ef +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(wv%8ێryK8eB :袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((5xxRT}B:Ѣ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((oTz*W%*(((((((((((((((((?Zoa&6>{]epJ.W>=Cúfn]BpT#ƳxHmB?.0~wG?^u^yzVlCy&9?_OºzKQEHQEQEQEQEY5Kج-HRI`Vz? ={Hҵ>DhW:ᢴh>ٛUc%$~c( ((( 7xQHu-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEȽפ +׿^_QE͟x5U5}g6MEPEPEPEPEPEPEPI&?9+?M{rWǔWKJ?%+ J PTQEQEQEQEQEQEQEPCY-og*~~D57WFzhQEQEQEWRԬ}6P. #ӽV׼CxgKQ#NysX +S_+^},-mH&:A{ ߈9߉mØcO; +( +~%k!2t2'nA>xdCNӮmFO纸qQ=k쟇 /c+%ܟOGA&:h +( +( +( +( +( +( +(>rcH- m!៨s|׆?wnOuO1+j+~Al[/aq-\x+?ٷZucDvT;[P((((,S7m omy߂\PοV'kgyWڟe]'ԍh( +( +( +( +( +( +( +( +( +( +( +( +( +( +(+j0jzmՅ}U5λ\ht15cv{Ŗ`-0:8#+@J pGB)(x)Kc_b;9y'3Eqs"IU=>((_bռ: g?0ɯR/ +hW:(Gޑ"+ž#on*FA z(=#Dͮ>!|DwQ52.frݡbƽ" +( +( +("x_[O^:WҢ 6h?; z f51(zσ5 MFdKV p qxW((+:^o+:Pնly}׮=PQ@Q@Q@W1?MƧpᔘ-#9c;=񥗁3>pUX'd:T./%inn$ievNIT@`CBv +wZޯiX]]JF>é>J>/ԡӡKa~.>Э3 ~!c{uf>Ԣ((()>;h:֕]3+9XIǽz\Cqo K Vphj( +( +( +(xIy~g?QՏx^΅u2qcG'_x^?K!EQWĻjABnٶ$O @UH׵=*=7R=ϰ'P~uS 8"{yVf4[o:=Ť+`X~@Q@Q@Q@|JhZ:*]H>*'Pṋ{l7>^8(̐ĥ䑂g?Qy Cu5<=3HH|9?jEPEPEPEPEPEP\! >WE\! >P:ѿɿ?V oh(B(((*YDHߖ,Y?[)!5krv2@QEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWoi7SA-K?ݏWtV2` +C@_I,de'`}}+u ìW68o\|4{k-]$ۣ˧A;j 0S\tMwkK#z&cA-ͤ)b2 x((((($?5+q^II'^W?Z€3_Ht/x҉+-cW_Yko$7IIy;( +( +( +( +( +(<Ce}q{q[$HHԱ㰯_;g s"8?}WȤׇ$[+ v((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((#j!D_W|L^K+jY3=܏Ep;-ē#I4]K19$\ױ߶oS9ˡQ_BdQ]|%wOVHq62"uo`=HKduO!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETW?7Z=fqrԫ֒~[EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPP^YjZ^[qo(J5='`_zWx_ZLZE# Ip4}[ j(+_I=;"R +( + +( +( +( +(騪V4(((((((((((((((((((+?^{SIZȽפ(+?kjh]Ȏ=U/d/(_ +ѕ׈][?gyhU iL]_pE<$}+(W_.@k7]wGET\mm <8RzSZ>֯M4K-aPys_R|6M){ +OaSI? WTD]LOs9>EQEQEQEQEQEQEQEQEմ7Z xfFR0Gkhx{z>wdF_vWͿ_~ǯy?ᶽ-PgE1=<l@\ÏQ'Rg9EpsϘ+#?u4QEQEWɿ|Y 䲂MZP6d5O_/jڃV~徊kv݋3'$J(῅>7IVGZ>/F {oR.dc%F2UQBU )h(((Ś ^'𦧣K]@Ȍz+FWó-ĶIbrXLsěmuDR`pP߄5?Z+IפPEPEPEPEPEPEPEPEPEPEPEPEPEPEPT5-ޓGZFcqz>@x%֏~G1JXqCڰ쿈l}V J#ު{uzuiV8dav ^M7PGs`R=>cE}xop6Wꇟǥt5$A{x[xUEEd\/>-S‘H~YvL8_w!K^OQ=˸MgPW<Π+X=gV'W)EW|/WF4Ic `x`[ګCa^2Aǰim2 Qݏv''hJ(((,%7_ξӯ>'M~N(fu? ooS(((~)M-ōzhdxKT+?(Si[׏.w?7MzVH*^ZBγ/i|E}cWmג=V#Wl WZ0ױ5%$]+tuOӐ7?ݿ|E{Ohf$zlmeǨu&/5K//3~&Q@W3=xX=UdIs잋|$c75Uu4+W>YHbHEHUQtT~iiXX[ok(@Q@Q@Q@ xF]W&?D.Trr)Vyz7)!Uɿ3Y+ }`H㢻3Q~$ONJv"Gn4o?| |Uc_kJ(~!2%S?x-Go;uvq;y!q*4>9\_6D^ߠY +~ +5k+}H{m=f{wQEQEQEQEjhz ><;w]~=+[o.溝4${9'5 TGo{`+~ w6 "ny/|y}C>xg+SNjR\# +d/ۏzQ@Q@Q@Q@Q@Q@Q@s$]s$@{F&|!X5Ǔ +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@6Hh9Q]aAEr |k iۏV!?b_<蘒Fw lr2k~DT}h(((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((zgiW:+[d/#OAO@;W+柍_S6lOS?^WV 9VI8_x~$n~KxscSI~+ad`QEP[wsm,ҸHAN5_C $mJ^J9 >}r{מ }T`F?Wfy{l5zQ^9QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/Jݬ/JĮAqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@EsʥoP-Jx}i)WuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE#}QTME@#iQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~"^((+?kj(((((((($^r}E|]/((((((((((0ߍ6adه":( ^.6?3X&CT*jjm.!W#>RM@OŏSkpm~U]~͚#M{PvcI? fd'cjSaň_h+/zpGedO:O]n;+àA<٦į@%ּEqh]*7A/ ~ηS4w>+6vϳ?Ag+X (#P%fh~|5-c X,}XXӢ(((((((((+q:R7%&ӵ|d*7F_I}c{oX[Z$e+ EPEPMS\%ccy-hb3 -^A*+(-cW_J|s>XԛY !FL(((((/g~k K{J&EE4mo z@ XUWP̿o5MƲv7Yp,șd$}5EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW5/h8ӾͪdɺX=@"x׉(O jr.mPQu_#޼}\ν~&fTeΊcw\WӺ{-ejv dG'oz5o(+h?fUognk?gY2jVi)˖ַ ok!Gf>M{ꚤNeB C}ZE·|Ja1n5@tOtt.;[H8$'W +( +( +( +w:NٿD]Omd((+|YO^-a c=;f> 4CI6͜YDѷET.o0^[Cs uhéj| ϡEm!+GhqS?g IuKr{9IAk&Oٞuz5o(+8fhA݇6kSS#U5??|]'oȣHҦylg>VZ+hJ$_ +B(U(!?]BxA"jˆXv3<^BjZ(((((_Po,Ts7ZLq}f .?# 4Dn(f@~1~?_T#Z(F=u>(UIQO4WW;\M'Ú.4*c +o'<-G"dig-!g^BKkۀ ]>oEQEQEQEQEQ\<ۀX`{/O4WƟG"u>;Xg +Vfw.YrI _ W%%jw0v3z}[XZ %%FxWx?[<٫h(((((((wUAwUAoh+ooEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((((((((((<[{/xvW9XآYQ'TbcNYO0Dx-O ~'|Z{jU%.n_{@_[,=>^L$Š(B#UXiVIvޑ}Ѵ{XW.> }} +x;ÖM Pn\`!Wb9c?7fQG) (DQp(6 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((k? W-]f IK`dϹOkVvm5ɱ ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷk#Z0_h9qҀ9,?o\W9}>]-4vp2zPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.4׹Ur:gSiu7I$%QI4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETW?7Z=fqrԫ֒~[EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP75JziGiQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|MzWV7͏P~_ F쎥]I 0A5|>$  Qsa]Un\ɛ4'ď-|] Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((("C#F3RM|Oǯ_vM)j7{z {ע|sx[Z\߽">|_AWo2Q^ɘQEzۚ9\lFO0u^ eZh]ݏF1sR Ø!EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV77g ^h'&2cqʸ޶h@֮B?.C} P'ҴLHx/$*$T_:?l?€<}|){.n,б'_ ?npi:uk}>GGR?*QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|۾%_˺Kb%*x~|뺼mIv,]19$ۡ$T:?l?€>=q๼q}; QQ1\ᴶ5PG(U`*;[ ;-d~7yQݎQEQEQEQEQEQEQEQEW;BOUW;BOTNoo[7y7 +Т((((((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +#iW.3'޺mKQ4ۍBe3$݀|aw_ϩϹ "tSwOoRVLdsW3Mus+K!EO'$S\G Ϊu[$s0}?_0y_͡ +,(((((((((((((((((((((((((((((((((((((((((((((((((}rm-ePqO$2hk? W-@^z4J]ǜ +֠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((=E acVߞҴ+ ?~Ҁ ?3[VPWaa ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE6,SV+ƤdT6yڱnΧ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@EsʥoP-Jx}i)WuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE!8> S4(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+!'*諝!'*[7y7 +<hQEQEQEU-J`Ym?JY> 84[~fnMݢLxZ+ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE>  hٶXB=J4Vj݉jy?:֙6l,)4}WNNOZ+Qj0nEV +_TRFW447*A e-%䣏'}soo VPā#D +`=1^>i䏱CHG%Q_D{u||2?,VC!S^{_Oa=9?rQEsJ.RMus 4=uOZX5+0Of0;VߡQWgu Zx/PiVyq60eo`=+799KvnQEHQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷7߷7 J,?o\W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETW?7Z=fqrԫ֒~[EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP75JtT}2>@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s$]s$@{F&|!X5Ǔ +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^+-šdغ\H=#ow|io |^\i 91:˸oo.5nigs$1嘜^Ymg9[B +(()xHyNdyϰNzIE9Kdks%:t'Op8'дK/薺NmlWՏv>o]OJ:'{+ "N|;]BMicqG\WTc9۸QE`9cY݈UU$ +W~]"^nXw9~}|[X}>+*6[#(((((((((((((((((((((((((((((((((((((((((((((((((((((O%Â0q}=G?€:+?Hf8@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@VV{=B!pPlQ|F'ހ&(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((^;QeU(隗O羊)$v((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((YoRW?7_>ր:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +)7IE5 9: +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +u_Iʺ*u_Iʀ)MBk{F&|!@QEQEQEQY֖/x ++پ[l\ؤ''@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((+/z4_P}[vݔ{8no,XRc)UbKOSZ% u^4ƣk&Xzv0Š(B^ & bKɇ~?n=ӴWQGkԓ_`־ :l;^yu8d={\aeF7gAik6,V8`*ME򻛅Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷7߷7 J,?o\W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETW?7Z=fqrԫ֒~[EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP75JtT}2>@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s$]s$@{F&|!X5Ǔ +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP$M|{~ sرxNOaz_tƙ6/7n?o{^fS@+3 +(IC]}YXM'QӹY֫Psi\_t}N_]"0(}[}M{t +ZҲQEŠ((((((((((((((((((((((((((((((((((((((((((((((((((((( +WS._1\t^9?Y>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*+U-Esʀ9jUIJx}h(((((((((((((((((((((((((((((oj*|}M>SO(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((WB}򮊹WB} +uǓѿɿ?PQ@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((cǞ1OԦ-X Y!z] s]J†I$sI5_OIy%)Gja" +kP.]Ff̒HXEI$)UKU8I|;}~H\;|G_bw@ƅki tOWn}>{=aN1ϿWWf8m>H+6lQEyQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+]4,CcG +wOkU[%W,dժ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷj H˳=rX>G +Ԃ! 9rhJ( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A?֬RbOѣIVb :( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +=fqKQ\Ǭ7Z~RZh((((((((((((((((((((((((((((F3`>H +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +u_Iʺ*u_Iʀ)MBk{F&|!@QEQEQECZVoXʅmS./3U{+FZ[,*ł 袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((+_LV{Rzc iJB;7c9|A]xOL7)9SڼJHHĖf9$k#BLQEwVm-QIW/op^eύM䴏]~}l,XmAqEP0y3Cw#}KQE|QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETW?7Z=fqrԫ֒~[EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPET417/]̱;uCd|O?甞oh 4=C%-'?)|e)!Ҁ;+@.z+\1] SEq $mё( +( +( +( +( +( +( +( +( +( +( +( +(iWZ+[h̲9=h~(xZ5 }sTBb4 +0 =MfwPW.zud $r{WPEPEPEp/4υ݅( nGkӭ_*>ᢾ:rkcUgS6 _1݄>Ϣh?hz=sO!)!̿^~Zx62iAmfeǸ((((((((((((((((((((((((((((((((((((*9&yR(זw`}I (ZO+qm7p"JGo?U|D$⭾.x +KU'z(MtawiY1Т(((((z*ιYJLPJ r  ׮o*>ߢAOoh>*uKPӉ`yFՔ1?0>_][ռWHC*2AIEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\! >WE\! >P:ѿɿ?V oh(B((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((((׵/hZ&ktެ{($|uW:|G9 =r{i%ZV6t 2'p9=k'c9_@+ *{++F +8ZkGj9f'T?N]\&,caqnZb#C; GbMy.$?WES')n΄QE@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@uwh9sk] ~rhr<X簭Jy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+^H.GL#=+jC(+w?/kb03I@I=: 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Jny@֦'}Jye$$t5R?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETW?7Z=fqrԫ֒~[EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP75OHtT=i}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGZе #vGKiYN!N5z?@4'~0\Us3U@'~0\Us3U@'~0\Us3U@'~0\UJg|S$ok;O= p;MrgS]NEՔj6}csG;^=E}K º,ZW:DǼ͋Q@RiRX\:Њ"5s7Fݳǜ e<@rQ^muK Kl`6:GZ((-_] ncXMs* | ߌ?k?c7_QgIJ:NaC^?; z f⫟:NaC^?; z f⫟:NaC^`z %⫟:x#x" +V8ӷ5gLךeVx#pk=I5v h7pz_>9x;^dM*xB}\}q_%Q@~"M*r_77pvd'2YNKD޸}?4oK'/Pn,?<~?t((((jZc%y zY* /+ +6/qnCd#~&v@k7\0'ˏqEQghݼSEilAqg/a^IZ'浅南TLk,O#I4$gbIM2((~iynug']4g5N|yȗë[r_θ9 ׳xGg|N\tCvcEp}(A+?|_׼k3m?Ní}Coh1WQ$&c٠ ( +( +( +( +( +( +( +( +( +( +ǟq,eEf*zT1+^??—˜2HxUd׷ܭ-č,YZ^.IKDjqŽ}>³kO e3#?/&iIM֑>sW袀 +( +(^klnsE>²m̙[[U8i({}H7]xW}GW2?"8_/~mkU.<_w^Ekھqڕ3[@xgQ@Q@:9HYN>ƛEz~3xÎS`&Cgǵ{~.x-C?U# Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((# K>fƣzu< gWuoZx/S8y~9C};`kSSuKJc5̆I'½\ egY*QE!EǺ`9)(>xeFX4שUQBU +'t+94~rõkqORQEPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/Jݬ/JĮAqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@EsʥoP-Jx}i)WuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEh:si1)&ۜ=0}k# ^[Bz5տ9B؏Myeq}fslG@w b?&ʊ?zo-??lG@wיQG^aMG-?*(/>W#;@h^eEx__j=7M#;@k̨/ 0^؏MyeY[ 4؏2//5{ b?&[ 5TQ_}fsA6 Y68S E7b_JM#Z*FQE#}QTME@#iQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~"^+?^{SI@QEW:xXEt<:^ʼʀ>fq?7j>`q?7׍a\&9ǔWPz?h_b% 8Z+oþ3I۠k@[~*n]+Vd#)*ve=k$yn#&#a :ąw[QcN@?B;ks%,uRs@Fxe?Q}EAgwcoyk 5'XdQEgIJ$^r{Fҧ5*I'H#iI +HJ]/(jgKC~j>0t3mUu&$Ӯ xRymf r}HJHhCF1Ŧj-&>q_1zm揩\iڅ۹I"qʟ=JuCڽܵ {;ЊϢ>luᘵ;p#_[瘤=A_~9Iۧj$[\x=} WQEQEW|^<:%VXm^E??_^#ONzCNB={$v,%IhY&I3bz{mPV.XK=6{Bv]K2-=͎?>2nOjFAXQ@vcx_21m+mpv(~$U_Mx{2ES}seemYCggp[B#5ªP?<D)[$(E#bMu;dI|-՚1tP|!.,G- ?1^M?OK ]J 9&,0~o34oWGRH= 2/=]j7J?Cߧ>\ȯ GoiD&ݫؠ+#n!a>Zf<9^xc6Z͋b{Y^،:.khzeC:q@Q@Q@s9~/v_6X@e^Pcؚ訠H&xB#eaLLၠ|AIH>Ut ]͖OA0W:ř,3uSFA5[kMhY?Ͻ[(((((((((((((((((wUAwUAoh+ooEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((*;m-b$/$p@$bv7ȤBD=OQ6U(DM}+3xį:]61x{0;WEƜT#0nEU$ _S| ~<%hōb0Ͼj?5mNZ?*0iG} }^i#( ((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +WS._1\t^9?Y>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*+U-Esʀ9jUIJx}h((((((((((((((((# ^^' GKcl~3+8((((((((BMXWꆅ"^TߩGdQE@Š(oj*騨4d}M> +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +׿^_օg/j/h +( +& CN_|s^Q\yk5OFR0G@W9}sP$$̐{bҨ_nx\oxF]K5Ys})O~[3dȊ=[[(sYy_kHGS{=hWߴ_I{/ +[I.0zDjV'Ey߶f|Dk(=(''GƬ׷ɢYD`Q\O+G\]HpcIW,|1ht{-h'}4~ ;hH`BGjUG: +((((oƾ ?*1= _"ү<7ѫ(((((((~NKNe+?ҽcFw`$|AO?.WqHU +h(((((3Z4>"c˼t~𯆯-&BHYN}_){/mcb?PVϠ2}({ 5=:ijFު^Oğm*WqKO>Se{EzQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEr?&($5M|Q@nx/GNFazjtQEQEQEQEQEQEQEQEQEQEfxZþ5iv8|7{q7r..eiesL$fe77ǃ+Z*H ;xWY>xk7[鑛M]w>' o,Qw?夭WIEQEQEWɟ]EOg?ѱھ7|7Ds8qI"(g?+Pe6fl{|e^>3i~7>^} mQEQEQEygǿgj*Q8 sVue]X\.bhd_U`A |)ip15U?ʀ)ljΡዿ&fӤ!brN?+zk6p?€>Ȣ(((((((((((((((((wUAwUAoh+ooEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((((((((((((:j+[d.IId)CǑ'Ì`e:1!oz.z.Ydggi%;by$Zo|c;Zvr"}ԒkXzvR +(I +|  2 u?S{skmK<#4,_]9DZO/&uz~-a=̨:ImVqTQ_*n(@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEG<beQUOkWmaB''SQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ d-$U(5?٫ƱF¨((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((R;;DK1Zt:]CCEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEz*Yo@*_>EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWBl# ^M?TrEǜQEQEQEQEQEQEQEQE} ȿ׬_CBMXW|o +(aEPy݂E P:REQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEȽפ +׿^_QE͟x5U5}g6MEPEPEP_.p,QM܉$ +[noѩQF/#&QE{&߈7ٴ?1,_z~b"-F\pcc_NEPI&?9+?M{rWǔWKJ?%+ J PTQEQEQEQE|e^Qnw,6w uC2)m)UP_F~2gEM|_G~QㆹsR{Q@ Xi\$qwc2M|7v_xSengPztUWտu|0F- HÆw~UQJTпv)攛[BGE.p?&|!'#6ys'(((((FA_|O"OIU$}'_x+Y>񮏪ږHd?̝_pEPEPEPEPEPEPEP ^ᦫ*>Y88 {)f}BFO%xZîRFy_X~5?_2ܒտ:( +( +( +( +( +( +FO_iR.EyH$^H$W?AGx5I X?'1ch5? >AG$,Ƨ9֢'1chAŏ_W<{VO$,?4{sZAŏ_}?ƏcS_kQY??4Obj+=j?_:^?5~9eG4,`^QNqܕQ͊p9(Š((((((((t/@~z$:Hѫ+Ldj$,|UJ59ߺ{l5I X?'1cj=Op֢'1chAŏ_W<{dzCxBqej?I? =OpsǹEc'!_Ɵ >AGx5I X?'1ch5? >AG$,Ƨ9֢'1chAŏ_W<{VO$,?4{sZAŏ_}?ƏcS_kQY??4Obj+=j+'}?ƏI X=OpsǹE YQEQEQEQEQEQEQEQEQEQEQEȽפ +׿^_QE͟x5U5}g6MEPEPEP_KS5F'ʅ` #_E|c^ĖA pbCH};5UQE{ӧ Ie* YI"Pvp}?SףPEPI&?9+?M{rWǔWKJ?%+ J PTQEQEQEWRJ. ok M#z*V~?x(lӦ q1Wd?q+Ԝ|˩ww?ΫQEOSrme>C_+4Y2I ?I7*Ɏys}@tQExg)] K \0qBk:oBM.?,:xZFEx6җZ:Cvyr?%5WϖBgF~c,U?((((((R 5b2jӧx1|񮺡K9h6`S卡~e'#x/D=ŔNwn%vnZ,G@EPEPEPEPEPEPE 'u4ƍWW▭v-Sbj*6jZIb֨_nxMGds~Ś}_Vk̑ zޑƀ*( +vEPEPEPEPEPEPgg" 6jY\+5on3k~-EyQEGO6S@ka\}Fw׉?早WSO9@kQGZ((((%|%gy=v^6+ X$~ڽja_ n~!Gx?Pn~!Gx?Pn~!Gx?Pn~!Gx?Pn~!Gx?Pn~!Gx?Pn~!Gx?Pn~!Gx?Pn~!Gx?P~ +YK5(gݮERp6oZ+J`?lUQEQEQEQEQEr?&($5M|Q@nx/GNFazjtQEQEQEQEQEQEQEQEQEmm,cBjJtz81iFƀ>Wy&b}I9QE_>m" yPŏP_ A(Wp8BU` +Z( +( +( +(>XĘ>l"Reߴ|IOf_?5xwxCV'>MtQgۓ3Q@Q@Q@ptѩ,T %M wWyY!K3IaGUGf/$7ýD_|?w{l}4QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW;BOUW;BOTNoo[7y7 +Т(((gTf +=)k't4BeH#+ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX>1U7q^b @ &8RpI'ҾJր:( +( +( +( +5E^5{xTК(($^r}I&?9++y%CU;Pu+mB_*E6r @{Q_ CI[?vC$}E|  ?%oψdVn>a5֣yoine@?_Yꕗķj  +oN?Pz\J7M{?[Ew, +"aSsDZ[yYb#YI'+ož;_ =R,S =xvGnR>id?yڷ((y&L?By}zOl3<`W͐6?%8?-x{O"M@DEQEQEQEQEQEQE!-`_? VMoxsՃ@}Q=M|53P??־W?g,»d=~((((((:ԴЭ6xZm̏~q;Wikg_}ķ'Z$"(((a_ g7MnW.I9'(I|<{'n?нr>@%’yBNvQ +K ;q( ++R_?^ۏ9G)//(I|<{'n?нr>@%’yBNvQ +K ;q( ++R_?^ۏ9G)//(I|<{'n?нr"čLkSo?׌ʀ>+(g4Cq_xW~H1_vPEPEPEPEPbRz^ ^Mu ++fƽXc5ퟳgקؗCQ@Q@Q@Q@k6]-H鵈F?|D$``i\=Z(Ky+'Vx#>}|_sJsutw54EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\! >WE\! >P:ѿɿ?V oh(B(((|AqOkZ|AqOhF\_VfjtoohQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEqs<4ڝcwr=98ӕI(Gv v+xGK`"zׂTuq-č,ҹyK19$\ulEQEQEQEWO/O +'z??&sbqtQE}IQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@H?G!QSQE +( +( +( +( +( +( +( +( +( +( +׿^_օg/j/h +( +(> +BV~8+?I|C{'m!нr<R_^9R'߈~m4zƀ<{OƗyivÿpʚt٨nVEewTk+6'潸b}}_I:$ZR/IϜ6BjE-:Q +Ě쨢 +( +(8?I5!_WkC<*Νjڕeus" {f8$9 +W’BN?I|C{'my!нrR__9@Ez4!ckȸֽ}JNݿ hȨtٮ6 xq;HD+Ҽ9^)&nSs?d~ xrGqyZa3!5ׅdfW~Ξ^>ml;z=Jmm&LMֱ,1sUoVzjnx/GNF}EPEPEPEPEPEPEPEPEP\tcIs|;͝6~xaz{¼,{(Ic9_@+ *H ;x#i&" f'뚎g|]C} sqMCJ~XeUmN^H9 >֊+jTI9vn(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\UbjEOb2*?[ϼ_ ǜ +֦ih8QuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[!\yWaa ʝKo*U +8v(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISt݉&.gOQ<(L_?GOSy14EL_?O +(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@g/j/kB?@4Q@}g6| _|Ǎs_@QEQEQEQEQEQEQEgIJ$^r< A櫥y%CQ@Q@Q@Q@Q@Q@Q@ KiŬ MWYkύ9,[&K1:+W;@vڍs1c> [1Y#`ñ ߔVoA;W/-\$r?VQEQEQEQEQE|EGuEwa]=x4Toy3,(&t6L^;G*Rk i KT.K ?}Uڀ((((((}wP Կv5Cx7\-=c`((;3y?'yS+7BGe'B'٘/(((((wX}^6 ny8N5^Eɳ𭴟<]]8E?R McTR\]{d{QEZ4_TӬ}ԫ kp+ V再h?uiv1rI?x/kw^'0XGf1ǥ}%@Q@__۟俉7\Ox}1Wʹ7Z FR0Gksxk6KZNц?ĽU 4^;ğ?-}Gy36yI[\G<.RX:8Ao šf?ҠWp:+uVQEQE'%(ЕemB AAza_ ?0Tw?WP?0Tw?WP?0Tw?WP?0Tw?WP?0Tw?WP?0Tw?WP?0Tw?WP?0Tw?WP?0Tw?WPzotfoMPGkt\3+R` +F_OEPEPEPEPEP/#I7k_G_>oVzjnx/GNF}EPEPEPEPEPEPEPEPEPP[+fFџb>thݑN4]<~9l`E`_wW_nvDK_W +oƥg;-Dٓ@Q@Q@Q@Q@-7BЃ|jGwoEy%w_ơW[u9HHU?5_I͖ Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((0m'NO0Eп<^ί|r G82~2{WZ{-jV$.n_sz(>Om?i/~,QE}1QE]wWW.5OJᇁ$&V]*Љ.dv@}[ɯ;x#8P0@zV|)g 63(R6tZ nzΝvl5KKmIF?`}莲"U | _: rYDPh(((( ˸4˩v񴲹誣$B ggWu j!,OA/ +gW2b+h#i&qf'ƣ\/sm428iC-v~ ^Gg)N=]PEP_9~Ѿ>x]'ٮyR}+%xkr&m>j| +(>|I麟|} {u_o+/Rwm7?3_jPEPEP_k0/k{ٿ%{㢊((((((((((ZIӾ'\\_p1 l?g1?i h:Ve&kyH㌂}\+V~ %`=@ǃU<@4+T2x_0P4QEQEQEGocK RW@i}e/|kWwq$Vb֩QE7t?a]mgr߮k/:N)#p%vlB񯵨(((zilmBhW RgiۨO:Z>:(}Sizum+iK;~UUQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?tU?S<`MB4((((d3Rp3KERֱ|P "mz}Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES](IQfcIW|rXZd߾AOCȏzlЕzvW<⯏_ƞ"1ڻ "Ȕ^a!=Mp4Q_]JiAB;#QEh ~ |>wHԡƩ|F fn 93]coQ:UÉQ?kLgaEWhQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPQ\Ǭ7j+TRZJU@mQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@x//ݏ@Z?_:^dG./Q_LyEPEPEPEPEPEPEPEPкoz +T4/@~Oj; *QE#}QTME@#iQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~"^+?^{SI@QEW6o\W͟x5T5Q@Q@Q@Q@Q@Q@Q@$䯏+?I5!_P]/(j_Q7a(?1@mQEQEQEQEQEQEQEV/|7k _hx qLda8UE|iWzub"Qz*wf &mR<\Dq;_1P^WrxffmMm!FykAESxn8t_Ra4ЎGl+-;Rլbe%) TQEQEQE/.5mRq#;vUx\4L7 胻1𭏃|5mXct,9ڀ7h(((((((v/i+z`O *ZTDMفyN[.? +}վL>u$@p6oʾVj5Sѝd4Q@Q@Q@#3U$)k8IeouRmG7B|M6ۼP{D/<ՍrQ@ +Y%rM}ƒ]ݺgVa5 K㸯'u̙4cwM}i@Q@Q@Q@V"+He}ߎ6>NmW_J^oC +f]>O*bs?F +/O?'w]Hm8+ҽt'E}_@ (J( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(9M|G`_W?&(<#ׇ'mVs=x{v5h:( +( +( +( +( +(>'M~诀(E&*:J((>Wn+=A5mq$#G,LQч*_}t?z,Xꤳp?_{$fmh;iVXve9^¾!Wl5B<2g>[OЂ+bT1%|6KFpK=dEt`!#ր((\<[k&M$r ;}]$A %W.Ћx>P<XzާIYIܖfcIIE[Ҵ˭gUlc2]]JFs=M{?O<|;bG^!~x[6- v-onߋנ(((GռBsrӰݍq'^_)|}ֿ$=6bӭ @[EP_~jˮ`B#\ {ms~&m+ph3G]%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?tU?S<`MB4(((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@UmGPtBe3$7@4v@s?o<3%Uvp|}?O;ȗWS]wu+Kq3$K19$AxijjSnKuݬtSLW3_U,==~'JWaEWq![H(T$g*"'x?p}`Iv㝾3W;'Q=Z|B;[d'ԓOQ_(n(@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPQ\Ǭ7j+TRZJU@mQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@x//ݏ@Zu:ޥ%ԗBiF =W9o0M6G^ +B?Xh_^9>P+?Xh_G+ {_hyZ^ +B?Xh_G<~V +B?p}VW°п_&V=4°п_&l7Ux4/}W=4kaC`akM4/}W[ j?E{+ {_hakMo?>Pt/@~K;8m$ k03RMJET(F[SOG((((((((((((((((((({EO% hV~"^>(l򯁫?kj( +( +( +( +( +( +(8?I5!_WkC<_Q7a(?1\t?oPb>ڢ((((((((1| x?Dْ1ʞDqZ( ++韉_כWRlscnM|iw5:ַQ~=xNV5֣ kv?W?,ט׵$x4+8t96=W?Z({FKۙnd9yfrܚ(FieR4}ϠV>8imU-䠈{a< FbO:UA?)3og )>pW p?OE((((((((lhdcco +~f[<_E|Wg">MC춸<`r_E|%%Pp\FAO^Yğ^tJ9ptCI[(?vC$~!Vn/9۝:\m.c1K ]F@G\MPS^O_[ʳDk8<@PQ@  ?%ouPCI[?vC$yOo66k4u p|!æ_((>'M~ωS|E_(ٿD]OmdE&*:J((+žkᄙsd >nK_Я5]i&;wތ;0=ͯ'|4"Ų\[}{}A/W TM-dqP{ +5>3j =7PxXbH {x"Ɗ;AĦ[f\O]dwV&ROxj(c+ɼgBi֐iH>:=O,~ZŠwΣ6sw;nYI?{tR(|;m6xUm1zn~YǦ)mi =dо~(ڀ((((o.Am,2O+MkT[/I,+O"u=oT[(yo +Md)>qZ|>UW? }9ė[?b(ۨ((((((((((((((((+!'*諝!'*[7y7 +<hQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +w}A1MGJu7[={ +ڊKhXG P0JGzl+ +aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP gArW嫪 PIq\ϓ/OkVVR1VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoo[AYϥaWaa ʹ?&_ɮa#F8?JEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>MFy'֦Ңu(KFdG((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((YoRW?7_>ր:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(騪Vޟ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q֣yt-B8ѝEUQIS^> *k.OЩo&ߢ> *k.m +#PAMEQEQEQEQEQEQEQEqn/եW2,[!2ؕ ŽO¾T*k.? + k'|SgkXy%UTP$޾ +( +( +( +( +( +( +( +( +( +/4/Y}Z +'ݒ?Xr?nQ@8xtmYΠuDG( [^Mx[^5}&Ϝ" }H!GPH">Ծx7W%<7n^SL殾x巴WL-m~~c}//>/ֱ''A@-P$2Ojlf$a{uW׳xKzt֎ėgSsh~~J(KKk Xlⷷm(*p*j((((((((((|iȼY KEhk$3[P\mqG4.c8 5zi[G=W08I;hg_ /vy1~tj>|:e6.-&YАsz}ǣjgٶ{VT@(^/x}7BJlR*H.ßOy*г}|?U} _x?/.nao'FѢ"h(((('w6g*l2~WQ@« 7?U}E|cÞ1h7i3621ck(((((((((((((((_V7u[;yn.%+Pws]U 0S\tMxMs5 0S\tMxMs5 0S\tMxMs5 0S\tMxMs5 0S\tMxMs5 0S\tMxMs5vŮI}m.cff$PEPEP_#|Dw~!V-vXetq\_\@ 5M'?T?]7_o@QHojju݌Ϩ3wP4LWˌd ^EQEQEQEW5h^7e@D7Q|>"Z(|G^I莱`9[/T_?y "2WߵxcBexqBGhj+k>b ū)g?3d_kj=X+o002NzKr? l˯GS; €>P߁|IUt*y'ȗs_@xN"5TW mG~<{w\UTPT QEQEQEQEQEapOz6 _ň(>&N t!K,..%y LIOQJ5=.7\]̱F;N2}S+=It;-&b HV$㓁^ ;<}u˨wok 85YZ3FK3c@u:75y2'Mt:c 9<hQ@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVGEc_j툠_sT{=YQK1@$|k> -Ŋįa^"-ɔ?Zۭ_P}>p:"QE(`[4۽gSӬ!idƃ?w'Oj ./߹e?Nz\'?ؚ`5GF ze졲Y#mB((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((oTz*W%*((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((o~~ڲ﷐9W?Nؚ{+nch9#aʰ8 5|@:~,dExp=+OԟͦOX}}+ZLj.-KjPsєHh*ZMe'mu{}E\(((((((((((((((((((((((((((((((((((((((((((((((((r<^.;O +ɘ1qwB>E) |3}]meLQ$ +SԮRR̹X€*UI׵=*7J"v}S*}>xȶ~`؆~Qր=z <;cYD60]rI?jQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?tU?S<`MB4((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((+Koxf[f;HIY&:GSu"7c:ͼ+My3>_;Ջ۝J{ɚk$՘U밸x/'vQEt+~?[!Α`a q~|CmX%9yȉs?S޾4;/ 薺Nkt=XcNIיc==~'"it+M(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nVݦpJ8k? o/?Ƨ/Z:+ԽY@m5Yǜ +֠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((1ؔ#n;U߷7 RCkNDФ5Waa ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE&oRUcO`HR97Bq\~O]O h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((oTz*W%*((((((((((((((((((((((((((((( wJV CnG(((((((((((((((((((((((((((((((((((((((((((((((((((((((((oFwQw{=hQ@燵*]>so!U(EJ?}}>eS"6}Y>{ڰW +nrWv=GW]?@{;F>OWQE|Z79nҰQEŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +WS._1\t^9?Y>9?@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVaxP%vkAX(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((:ISAwFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*+U-Esʀ9jUIJx}h(((((((((((((((((((((((((((((oj*|}M>SO(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((WB}򮊹WB} +uǓѿɿ?PQ@Q@Q@d<ֵd<;]N r ( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((('Au߶eTAK.{i_fv,ijI&+B*ΟaujP7#5i6w;!,aėL7A6v,6 8`*sm|3׹]N_tO_+b + +(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +=fqKQ\Ǭ7Z~RZh((((((((((((((((((((((((((((F[SOG(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((wUAwUAoh+ooEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((((($I82l_ݧS+jeZDݕ:]ΰ:=St2};lQ__FiAB;#QEh >|>ʰ_jp1f9#V_S^u~X4LDNێ@@ +3L]!EQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@HdH]Hk&}?ƺ(;Gd{`VPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPYդM 2A#Er75٣Gg +8*GMEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEs]*H93:zh((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((YoRW?7_>ր:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(5R@ @FsO(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+!'*諝!'*[7y7 +<hQEQEQEVvm5Ͳ$)(ɾs}. 9Wkr?EQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE V]]JA +$$Ѹ:񅯂5>>׸?:aFVԮ5 k H=+yqY.dvpOڹ + )_e++ +[~Nki陧l#f +NꟄ~>}#S Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((9AL-.oȧ8GOc^Sǩu:)j|B=oSz:IYIܖfcIIg+s?m=g9tEWWQKT5a)ljwi/u8sglFK(?WU^LqƽGJ_%KQ芲 +(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPQ\Ǭ7j+TRZJU@mQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@tU+}QPi}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?tU?S<`MB4(((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@g՗t[WP˶M{ԓ>_/d FM"ܧ?޺xgө2vG^W:Jq`E>XQ_[({;;B ;HZkGj9f'W׿|o b^\Iy07A?7mWŚ?31}[׵xi/e +(@((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +=fqKQ\Ǭ7Z~RZh((((((((((((((((((((((((((((F[SOG(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((wUAwUAoh+ooEPEPEPY> 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((((((((((((n!NU9F;8_t6ljWC?ndWUsU/5VRus!G>uL2[0 +( +oOyDz`F> B.k︸}=wcI-/ zH_¿<|ҹ}q~\#vk,hT`(RE|QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\UbjB1k€.x<VR,FV%|J@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@axVftvk}s_XX3m(QB(Z( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A?ٴ;gA$@3'TZ<בFUIOmQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETW?7Z=fqrԫ֒~[EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP75JFA͇P骻iQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW;BOUW;BOTNoo[7y7 +Т(((ǜ֪Zʤ6@u:75?[6ifGNf(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((y⵷y(bR;P2I>&x_tlgz?ڽ a =D_Wx>Hi2Q^Q ++ |>ԇu8sٿ20iu_CX׭44z/zX/ 9>=|Q_!Z[tQEŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((YoRW?7_>ր:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +u_Iʺ*u_Iʀ)MBk{F&|!@QEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\? ڭ1Fyz.]VYZE֩J"BRN<񏊯mX°#`?\ %}F^J;e~'v5ن/Դ~6AEWPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQESRKk#`=fzmk? W-@Fu5ݳ͹q0+B|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +/ghD.p9Jլ/J}=G?º;I[Hdsdzk}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((5{eEW |j]?S(br6ڳnΧ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@EsʥoP-Jx}i)WuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\ %b:@u7?< ǼV?,U-iY(h"O/y֓ݠIW>xr<˫|Վ?Q\}Oj$25ݕ9-\Zl\>4Q__BhB= QEg"%n$XF=y|F 0l{0}OAj8(R4P0 +Lg*0iEWϚQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷7߷7 J,?o\W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETW?7Z=fqrԫ֒~[EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPExa6*.?ރLG[RiO@ǎ-+gömNU]yzˍB[imy&ˍB[imy&iy9J +ΔĤؓ?/OjV d޾LIy MJM;act0{8[SkX2R +GzZOh(((((F[SOG(((((((((((((((((((((  ҍrNd{z`o%r6i r7Vp=g<0[u[hAE?I~>>! e; !mE]c<+˨ zjɏJ7MT((*{[˫3[:I a GBu_¿|zS^zRii 6/x~( '[5!y_[`Cj|kz|Mw p\C؏c{π>>m'6O3Q[/ oN_PEQEQE'($5IJ7?'q stQEQESY#:)P캽\#][:a_'ė}\mz'[:^н0+ּ+s^,d ^lNvWTPWʟ>5j+ iԴlRzOE}AZ֛\ͤ9PG=(Q@Q@Q@r?&$5M|QEPEPEPSGws;P\۳񏉬O]q]^Zc3R1,VǗk~4P낐I͏*p}7W+!yaOGD׵_j)_MirчFNJφ?c:gqw8=N +( +( +( +()M.ﵑ'1[ӿ{Ě?, Ci?3EQ`+UFNV$і>~$+ŵwT&wr^CzG⳨w]Ju}fO>SI1AaQEQEQEx?|44n_w鵳@FOhQc)krnh+-Z;>YRX\2WUOƺu4j2ۿїW ~O.EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEr8ſlvͩʿ7S9Tqr? ZϺOKD\$WeEy6=x:e.`s  kg=~46iG 0H}I_̊bW[ֵở#Y.l)Vu7k*-^y):~ϺN]boۮfϱ€>hO դ?x:DžuleWÆJoj? PtQEQEQE|IJ7?'q su|AO \^  w5I>f~lò0gx}kI.\ѯ@s SwSm̿77P̿77r>Wc=_kJ(Ove3tEs0^sxW^-kJ$ZD? +]FKKhm^)P2> ;i\Y)GW|'ӯ%e xA:y9(9)/xd(8U5QEQEW/#I7k_G_>oQEY>ߩZ̑ov g׻2^#4Cu| SwSm̿77P̿77[٧PE?d-Kjяњ>E>D]>=F/a'١gh9Pdu!zWߕƃ6[u."@ly}Ꮄu~ ץҵ8E2ɓ)@Y &FT`pTAEAkK6 +秜z>P+|y b&o.)"H# +z 9pHף)TQEQEy?hNӥZC>'s/6fׇ.1}zĒY${;;fcI@W0=w,@~\q%;/=@xgYE]:kɸݰ|=Y +>ÿ|"M=dEM#'^o&+KXG'ԞjyOzrw ;݉ V_| +|-ݔmtP1?ß)Wv y6㵸o^E|_WGڌZEE/?KKѯԬ洺E2aozҰS:ilP^$vt=h'MS:2uطU'?n(ō֙} ĖP0x印Gpk_`͇oCۦep5vW5sJ/t]RRh.U@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s$]s$@{F&|!X5Ǔ +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^xGKp"};>9{*ڕcuszknn%ig#brI>c+OeЊ(2 +(-L<Ȋ1!H"-_j_ԡΙbFO0}UzS_LU-#Jm3OEkl#Q}I<ܚ_%ļENgCx +((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( awlг Gֳ{+bcd14j6욵EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU+9/fzZEc=V HE RQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@2QK+fpYc>F&YY#ڴ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((YoRW?7_>ր:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(C8𭟓ٵ9WQvAg8<؊#N.RzE]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W kŇ>M趤C09aPo^:oIwiZc4Qz>j^ ^KГ&3%Ǯ8Ӵu(((> F'?anO?QIa;k5$Arׯ__It/z((l"H#g㏃fⶃ'g?8}@Q@Q@r?&$5M|QEPd/ Wd/ WQEQEQEYT~1emNZ̀O+ sNv۴j;#|?&QE}miKeϲ+^^5^ѵCq1^@Q@5^@o5kmisܜko^"o/ȍz*`0+?h¶c~.{Dj[_>PEĚb.}>€;σ 4՛QԣaY8OIFBWEpBDhQ`(aYl3|{- +9sݏ9'ZtQEQEQEQEKW,u*Lԭ6Iwu~!x&O2C_i3qxJ3YHx+ w>8?@N7WTd+ #"@¿|a FvD)2AC^_=c9߱sXGQEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@GWvM#pz74QYz-Gg!9+R +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(]zi"h<2;X +]K}옵 ĒPO~(z( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( ++[P9R^iI9 tQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEz*Yo@*_>EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEr8ſlvͩʿ7S9Tqr +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( + |goLzɆ?־f +'|-m]j~u$X(*(G%q?6=1~&G/M}q^Cl[Moh((((((Q6jnQă!Ug uOO~`@c>0?N +߁>!:/X,oFm둷^eVttJkihϣ)~>"YPGjz((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+!'*諝!'*[7y7 +<hQEQEQEQEe~5Ke/\D0+'`˒ڕs]+O"_؞@Ojvrz֭IE{>_W¬=>^L$Š(Bo^$XV].^H8?\^kaF9'<'g Vg_y,=aXOpٹ[AFDAҤc`((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ~r? W-@OkVOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX^!FX^!F]*배}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((nΧ)#P]ѿORF:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +=fqKQ\Ǭ7Z~RZh((((kƚRhd;|9Qy;#Z>#*<V*UQXEPEPEPEPEPEPEPEP1/4Z>Gv4W G_"'Gu_h/24}cEq|%Ay??hK/4{z_̾_y\w- EO&Z>Gv4W G_"'Gu_h/24}cEq|%Ay??hK/4{z_̾_yHCdR֦EPEPEPEPEPEPEPEPEPEPEP;D^ׯUv2>TWU+mT@pg")hlzi1PFn֎"]]5cQ@S((((((((((O?QIa;koNF~ %뜿5]^;( +( +(f +dPҾ7wnel",=#؊ϋ~w}BHrz鎞>PE1d@8uKYuVVJ=$=*ߝ}-\_t }9Mߨ ֻJ((+$A5W/#I7h(4|?#&_b|?#&_b(((/.n/.碪 +_]d 85Y> 84S./3\u:74~(?cWܵ׌w%q:_V/z:5%kA觯h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+-|5 \ƠKů Z뤿)Z((((((((((((((((((((((((((Ɵj:vֱ I4mz?=%F.AH[!i^K&K v)ēG4o _39Oxⷋ|LY&Z˽b\{o⸢I$I=ItMZ +m(Q@GE'du9VSMScmgj7ZaYvzy=;Y4TQTE_Ol0IpByG!}w5jѣ9lݏE+$k8HØ!<7S0=khBiVe`+!Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷7߷7 J,?o\W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETW?7Z=fqrԫ֒~[EPEPEPEP^G(?'t #?;GeQExQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@XA?IQ?I_J[Q@Š((((((((((&¿Q?ҾY?h¼c_|!ƺ $d>n+ X>O[_Q@Q@Q@Q@tMDU4$nR"#"w?W~ҟ2hx} ߃kcG'~C?U|AE} ߃kcG'~C?U|AE} ߃kcG'~C?U|AE}ߦk6eVa~bǘ-nR]3g +fm寡(((O?QIa;koNF{ xWf}cIsj2.0L#x%4w߈n~!4w߈G/!`ҵ=d=S.V.2?B2OxGRhۭ#Ё>(9`>qpؗ9 + +kk#L=7iXvGsa?4)"?q۽{ QEQEQEHk?+$A4EQ@>Kȿ1_wWQʒ! HAk{׮o*>ߢ 51׮o*>ߢ 51>(ꕺu94~n6}_X*3崀~2;&];QIm0Ą5rrh;43;,$ԓM+~ x%OLHHIz~c'{'6M"Œ4 >Hk_ +cO}51C.|ҹA@4QE.iv]1Ok/?m3@%"(gXcea#־g }o};@Q@Q@Q@Q@Q@Q@|W6!(F}_|W R:}eE.|1EoῳV5O*((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+!'*諝!'*[7y7 +<hQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +((z@rOz/>|u- "zV=+w^eѬ\mZ +(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@OCE|5P־X~7ZQ($PBk*+cs s"ǩ-kkOPs@}LT99I:PFE> +( +( +(>n?d?:' O^Z2[FcAk"( |A-sƨ ++gK\?|A-sƨ ++gK\4]iQiW-H}ш*Wګh(ٛ>$%ğц> F'?an +(>KZM̉!yݱ++>S*h.OЩ&> >ySC4ϼWk+/lT#@Q_KtЮy4-BOcn>?J^U-6#"_[P8 #^_ׇ-wv.q!oW@wޝ-*OJKIUױ hWƟ>!_x \!y \÷JMԭ56QgA$R/F@((+$A5W/#I7h( +*{;Wy5-8gj<~gKC?|aA-ƨ`q?7cNH5}!G}+삀`j$4?Zz&!'W8HRֽg5nH@[Ic87= j/DḼJ`Qn5@^m&=7GK{tvzkV((?iL>I'u/hV÷p>(GhhaĉОeӥA}-}K_  81?P+((((((+⯉S %/O|% ѩxUS`}w9?ր3hSlo5gu_塶he#>o~SdU((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((WB}򮊹WB} +uǓѿɿ?PQ@Q@Q@d<ֵCsk w(9kѿտyո !C: $(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +O^1>eۨj +R/oȅ\K~+x#?dڄ~W~[Փ{-I8((((((()u )Sh~x|c[qvG x>4m&WŶA*FrKCq[=Q]QEPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQHeԚoOPWWV =ih((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((k:&72}N(S<B# (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((a pd@ ccIEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPQ\Ǭ7j+TRZJU@mQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@TM_OQSǡnM&j^ 𞡵Mc)>E:ތ?^NfM_OQSǡ猼w=CknR|ue~~>+ +h7>x|?EyEPEPEPEPEPEPEPE=ơy-4EFAggq^Eii M<G$׿x6*^?ާ=lͩʿ]}z\/'=#`? +(H((Z((((((((((((((((((((uv +{)U{I_}_xF>񞱥mږNfNP$PQ@k9@ݹFՐloMu.)h>eP V{EQEQEQEQEQE/!)W/!)PQE7|xo-} _=_-%QEQE|IJ7?'q su|AO \/$sF|u_bK9kuEPEPY֋IL-e#v #E|_wYHZ[w$OC޹ +_ nteYzc_Yi]\#E,mX #Vf@|3"ѿ,zTvъZ~xxs8:=\ڻj((+$A5W/#I7h(4|?#&_b|?#&_b((((((M׀rw˸#_c&|A[ӕwH$J;|?5>'([ڠ+NGW_QVآ@ RPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\! >WE\! >P:ѿɿ?V oh(B((()YsZ)t_?NV 2 -Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE`յU8?Lj$I$&|֟ dN>w'2%|_EԜʣ(Š((((((( ZeViۜMk2LU _pYG{e'1OȇنGkͨ2gcOc^.sv3Sg_EWjQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPQ\Ǭ7j+TRZJU@mQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@TM_OQSǡnM&j^ 𞡵Mc)>E:ތ?^NfM_OQSǡ猼w=CknR|ue~~>+ +h7>x|?EyEPEPEPEPEPE=ơy-4EFAggq^Eii M<G$׿x6*^?ާ=lͩʿ]}z\/'=#`? +(H((F[SOG(((((((((((((((((((hOx$^Lh kJ$xPxZ(7j,ѻ#WSR0AuK?<,.I<b0O5-|_Y|^M_MA2d>M(((((iwOҾiwOҀ<"({Ŀ[9kJfm寡(((O?QIa;koNF~ %뜿5]^;( +( +( +`ԭWg!" ͣ|Z6|O[xW-v7UaZsjZuf;YZ)WєV=׌1INԱmq’~G }u}?vckX qϨ4EQEW/#I7k_G_>oQEhFM/"}_FM/"}@Q@Q@Q@Q@Q@Q@Q@|D],&c-yO.> r#{Zxj 0>ڵj7ZFkJbef#h^,`4Y)GS=~ +( +( +( +( +(=omVP<{@ c? 7YiϢ ɢ +çVj&mLkT~[=#?[-{/ڮ`6.8&;( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +u_Iʺ*u_Iʀ)MBk{F&|!@QEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((a",zXpS_:WѿL%))|PY즾rݗ{Q^EPEPEPEPEPEPEP_T af(o'_L_ \i}7k̺{EWQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷7߷7 J,?o\W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETW?7Z=fqrԫ֒~[EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPU5=2W屾fa1G[I14>qn'mmXOq췣ׯәu=2W屾fa1G|/OPۦ"oF_ºo;~G:Os4QEqxQEQEQEQEOggq^Eii M<G$Ѹ%}YjZZBO+mDQ5=lͩʿGo[?:mjre{_^ X/e( +( +( +(騪V4((((((((((((((((((((ǀC$%()?]XFҵD(Q׸#Ѓ|uC!MlY# kWÞ!<-jd] XwVUuD[ ՛煿=@+- _5ũir[]Gїá>k zN}Cn=zIcY#utae9zN(((w#?JL{mmӖi(M|/94Yd+vMGԁ@WEP_-%|3ljܶrДQEQE'($5IJ7?'q stWؿ?_}kI.\ѯ@Q@Q@Q@Q@9.kHuu{1z׆W(|5GuP>W:swZuf;iZ)WєZ/1O-ětG<)'^{E}Ep?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((._1\u:PEAZՓAZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~ѿn~ѿbWaa ʸ,?o\P( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(8ۿ7 +A??toS?((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((YoRW?7_>ր:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +閚-+5 B=jMYՙ󏌼w=CknR|ue~~}S閚-+5 B=kx6z5z0z<|V|< n |#+Š(*{;;B+KHZim9&+Py[j"I~?+gMmNU콐u}Oz<{ +mS{/d_oS޺^O~{G{/~QEwQEQEQEQEMER5>>LEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPX/MM/T ̿~zߢ>&ujRtI@|>`ftM7:dniդCPGp}[Dyo7jz,m񛈇}۽xGFEdu8ea|;xU>qor`'|G3^: +h`pd\P6?W]Yj1#?lE-Pk,*ǿBn#3~ (*֥:֟yVT=N U@=Dsnb'5|__%nt[\#+ +( +$5MuHk?( ɥ_ɥ_((((((((~-|&6ED2[=v?GwVWRC$71I#J=+!|+w8qk(+g}Xd"O)op} nf%2b9T)V }^t(גQ@Oi_T ?ReA[|q}"嵩#>g7C_"Q@\))M1Q(sT4bAcW4Px㟋x-gIn6ق$#CY$ydi$vwcf9$M +( 8(zk >}/zTp<9b;J((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+!'*諝!'*[7y7 +<hQEQEQEVO?? kVO?? s -]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +G/&MH},'¾ǃ*ER2wecY7ѓ5t|EH#uW՘Q@Q@Q@Q@Q@Q@Tֶ]ikKq3FK18Q?&L&ȉ\._HW; 12︐WE_#9-YQ\Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ tYke=Ȩm>C*UP@pKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEDmmؒ`% o0d5aЅԴPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPQ\Ǭ7j+TRZJU@mQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@TM_OQSǡnM&j^ 𞡵Mc)>E:ތ?^NfM_OQSǡ猼w=CknR|ue~~>+ +h7>x|?EOggq^Eii M<G$瞕Aggq^Eii M<G$׿x6*^?ާ=lͩʿ]}z\/'=#`? +(H((((()0=-cQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEr*umWMOw!^5Sgڬ7].@= >X{?I6ARA_hzN .?n0h+9:z$*z'ë]N?ǴWI[zsޯ[-5? 6??"hҼ}lvNA_hX6A B:}#BhxMWծRt_UE&MZyxs>ю1k(C V0FD +UG>((((!֫]oP[馆Op\X!нr>@%M4+T=H%zr uPEPEPEPEPEPdOxĐk~[.#y#.9qzoR_^9__@ ’BNx'|cɥݯyhꯀ;O8& +( +w#ZӬbnl(pI~5E| +K ;o(%ng݅آݾ†(((((((((Qy):_Ή3xz>D}ܿWQ@|m-l|Oo= 2C*IeWM/^eƚ(D_+5 |=uGS$~Drs37K?^ /p[~-NXY]JzGL^4֙=.A + HV cF@K@[?>Gso.TGDר",haUFEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?tU?S<`MB4((()J1"+fECKo""ƻQB:(+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((>6|<}#Rd?/|"2u~z껴d1SXWyf>3~^qiR[yN=QQE{aEPEPEPEPEP^;ڪUl.,"qʩ)'sGyB(U(2+:4߯B=XQEx&EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP&8"2JPu5WZ~›._1\vp\r} 9k''t((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((./ *&&C(CZ~­ʰ>aa ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEMK$vFS6:-FyV8 `/wFu>!H>袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*+U-Esʀ9jUIJx}h((((((((((((((((((((iB[0#֭I՘MYYyc#>¶~tf_W楄9/c +)QEvQ@Q@Q@Q@Q@Q@JMC}QPҖSO(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((WB}򮊹WB} +uǓѿɿ?PQ@Q@Q@E=6gؤg|AqOhZhInC]N _(c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( + i-ah%RG"V h> y? +#\raǷ_xãF쎥]I 0A5ur.kI}i^Odz>دg ZڮLWxGt/l:w(NOҼLҮ eqi0sQ"+ڥ^UxJm5V(QEVjN^>pDGP oP)>u%_*gXUҢXi7䶶QA$Ԋ5,}k~|EI=8ʧC8'zzMadA]xU--~ # n"E +Q^AQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECY\Ubju_+'t''t((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((/Jݬ/JĮAqX> QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEq?toS?.Χ)#@]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@EsʥoP-Jx}i)WuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE#}QTME@#iQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW;BOUW;BOTNoo[7y7 +Т(((ǜ֬ǜkѿտZAq}[EP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEaxO4Y5=Zm>X^^g;w $Hi$uDQf8z^s/ ]MRx)b _?x~㛗Kv0َsǠ_ҷi{B:?wqh} kMےT_ =|E}_ Oy~gq2.X+_Ht/x҉((((w_hEV囅Mn^>چa[FKU&[$[\\ŕqgQu bjWO)vTuiMAOaf?\ǿbhT^eEz6Nz8?дklg+^[E}҃r/yl8Uz>#[cҵH,˗S9U2VSA>fwPML_i +gv^7v=9cl)A (((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( + ݼ7*_Q{_|.F嚓<7CX > 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((oTz*W%*(((((((((((((((((((((((((((((oj*騨4d}M> +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +u_Iʺ*u_Iʀ)MBk{F&|!@QEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +()꺥]jwm2H|g_rWEr>=ϰGm%i.0OV?q|ߊWZ:TM,人 V=5_O5k 8[(z_d><>p*I}( yueAԚ?~Ě)6 *. 1cv^Ex8hϡjV,g >ׅ߃u/6&ncNGp+*G4S:!e}蟳GXh׈ +k1ʟ"F<ӼQ Fη|O*؏z~'5\  ]Z߈t}.b_M}%?' kJ6BHvvokp@ HTz88ϱڹPӬk u hmf]E*XW>IMY.lˢݱ17S C@u^OD#>t6x#X}|>xWNBqmrǩ8#k~5EPEPEPEPEPEPEP_ xG}W1Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGXRlA'#=s>L]%;vEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV&fn>Eq~L]e"Fp~b(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((.DnG}jm*)RlO${h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((YoRW?7_>ր:( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(騰}*j(ޟEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW;BOUW;BOTNoo[7y7 +Т(((y# +gZ(eO|u+rx#((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((* ˸l,n/.d7?>6'H_6oY-rVubxW'ͻ#9 ~`~EVX5a}#Z EᖏMrd%G]QEQExU-uki,rCp85o^#,wZ2 +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((m-gֳ RChZez4( 4QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQESc($Gmv VO$_i(A0EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEeɮ[+bb.n@МcQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@EsʥoP-Jx}i)WuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEPNiǥ:@۩h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((wUAwUAoh+ooEPEPEPEZ,Y$V`[o@hH-甿е[u + +JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +o[Q+eixInWBj2ONV@;SZ۽XNC]-~ð: >׵hF"5TQ@Q@Q@|INW-~FKn|'x!߳`񎧧dqڼfѵp,7@^QEQEQEQEQEQEQEy!ᯰX˷WTEO0Ѥ==ɾ9xMOv9x~W_SxŰieAj>D FJ zzѤyQQ^Q[[gkK8`**Z-+{ kJ/׸־4%$B(@ !пJ$@((((((:֧j"op~zKYhV_&~ ?E>󄲼<Y!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETW?7Z=fp*W%(@mQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@tU+}QPi}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?tUB)MBk{F#B4(((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEoǹ|ϊWI(((h=4؛JbWszh?,|.?﬏\t>#lJj(((((( +ޱeV%mc2;w>zp5WO{73b8cJc:lX>nYO8z}s+ƨE$$0I,FKz %Rײ~|p(޼~~|[ÛkV)b8y{zk(-+{ kJ/׸־4%$B(@ !пJ$@(((((j:qW oRzo[a j1QAM!_k[Q̺@"xǾ kwEcR؞#OSrW| #xģ\:fpY?\|+xV>8?* -vqgjտ?1\mB?XP$->Q ϰՉEn"ـnuPTc +#߹8W+'t j?!oZ( H[}֣a}jZ7WI .8\])#@]Q@l$E3T!oZcP$->Q ϰՉEmB?XPMjfj*|??+uitЈm;Zk?PH[}֣a}j?!oZ( H[}֭ :cٴk&x*آ(myH+p~H[}֬7hoa}jĢ6!oZH[}֬J(7v1]sެU Aq}[@ v63MbB?mMOO*6!oZH[}֬J(oa}jĢ6!oZ͆91Weip5T5Ayq[W.85=Rտ?1@G$->V% ϰB?bQ@NM}E_VI΀;J()7Gsmqڳ!oZy]?v6!oZH[}֬J(oa}jĢ:Mh]$&㏥k)RF+?Q̈́ ~+BQ ϰՉEmB?[ӵC}3Fb wgv{3Z?QE{K@n9ݎJ ϰOYEBP$->Q ϰՉEmB?XPW_݌{6u]b +ś^h?\mWwFt ϰB?bQ@G$->V% ϰիernVbwgq kٱiɿIT ϰB?bQ@G$->V% ϰB?bQ@2y&1Cc"PǜM@^\} n83dB?hj ?R6!oZH[}֬J(oa}jĢ7S_gWdշ\\?x:(z鱅dqvC@B?XP$->Q ϰՉEmB?Mivyݜqz?( GS6"ت_M?αoa}jĢ6!oZH[}֬J(ӵC}3Fb wgv{֕s?PYWhDZ嵟 +K_($->Q ϰՉEmB?XP$->V~ov1q5WA?lQE6M$gk?Jg$->VU~O]4 ϰB?bQ@G$->V%Y\U9V* _l&?!oZQ'W@G$->V% ϰB?bQ@[P L⫲8?*-vqgj ? H[}֣a}j?!oZ( H[}֧&"ـ +|@Q@c +#߹8YS<;@G$->V% ϰB?bQ@ n]vqҵ)#]]fDQ}?{X!_!oZH[}֬J(oa}jĢ6!oZڡ1ڻ=뙭o訢ʽ B oWjR_!T(oa}jĢ6!oZH[}֬J(ӯn=N:?MU@bͯ4SIsҶ:j?!oZ( H[}֣a}jղ7v1]s޸tooh5dl4d$t*j?!oZ( H[}֣a}j?!oZ(jݷg!oZ5oW)@:o$sXj?jK&Als{a}V~=n"ـnuPTc +#߹8W+'t j?!oZ( H[}֣a}jZ7WI .8\])#@]Q@l$E3T!oZcP$->Q ϰՉEmB?XPMjfj*|??+uitЈm;Zk?PH[}֣a}j?!oZ( H[}֭ :cٴk&x*آ(myH+p~H[}֬7hoa}jĢ6!oZH[}֬J(7v1]sެU Aq}[@ v63MbB?mMOO*6!oZH[}֬J(oa}jĢ6!oZ͆91Weip5T5Ayq[W.85=Rտ?1@G$->V% ϰB?bQ@NM}E_VI΀;J()7Gsmqڳ!oZy]?v6!oZH[}֬J(oa}jĢ:Mh]$&㏥k)RF+?Q̈́ ~+BQ ϰՉEmB?[ӵC}3Fb wgv{3Z?QE{K@n9ݎJ ϰOYEBP$->Q ϰՉEmB?XPW_݌{6u]b +ś^h?\mWwFt ϰB?bQ@G$->V% ϰիernVbwgq kٱiɿIT ϰB?bQ@G$->V% ϰB?bQ@2y&1Cc"PǜM@^\} n83dB?hj ?R6!oZH[}֬J(oa}jĢ7S_gWdշ\\?x:(z鱅dqvC@B?XP$->Q ϰՉEmB?Mivyݜqz?( GS6"ت_M?αoa}jĢ6!oZH[}֬J(ӵC}3Fb wgv{֕s?PYWhDZ嵟 +K_($->Q ϰՉEmB?XP$->V~ov1q5WA?lQE6M$gk?Jg$->VU~O]4 ϰB?bQ@G$->V%Y\U9V* _l&?!oZQ'W@G$->V% ϰB?bQ@[P L⫲8?*-vqgj ? H[}֣a}j?!oZ( H[}֧&"ـ +|@Q@c +#߹8YS<;@G$->V% ϰB?bQ@ n]vqҵ)#]]fDQ}?{X!_!oZH[}֬J(oa}jĢ6!oZڡ1ڻ=뙭o訢ʽ B oWjR_!T(oa}jĢ6!oZH[}֬J(ӯn=N:?MU@bͯ4SIsҶ:j?!oZ( H[}֣a}jղ7v1]s޸tooh5dl4d$t*j?!oZ( H[}֣a}j?!oZ(jݷg!oZ5oW)@G$->V% ϰB?bQ@ȫ`2@jۮ.?vU=F²m;Uy]??!oZH[}֬J(oa}jĢ6!oZ֍B` <8W=Wt +A?WEP~ DA U/H[}֦|?X ϰB?bQ@G$->V%iڡ1ڻ=J`]4"qvVr%/sa}jĢ6!oZH[}֬J(oa}CN7m8+ʀ6(ś^h?\3a}*?'j?!oZ( H[}֣a},MݪWnCF\_Vf]F͌X[S H[}֣a}j?!oZ( H[}֭daLcrǦEqUZǜMP^\} n83OToP$->Q ϰՉEmB?XP$->S_gWdՅRC?Ҋ( +z鱅dqvoUMDL!vYǜ.@ڏ?Z߶ך+X8;T W1WTJj?!oZ(Z7WI .8Zi? +u3a"(>៽ЬG$->V% ϰB?bQ@VPLјm]ݞַOEtTQEe^ێwcҫB?S)/ ϰB?bQ@G$->V%7cͧsWk&x*ؠfך)b[UѿjB?XP$->Q ϰՉEmB?j\U9\}u:74~6lgu2obB?XP$->Q ϰՉEmB?XPk l1ɌnPȧ6s_SPeyێ3Y?Z+ H[}֣a}j?!oZ( U0 }mλJ*zlaY{6gd<G$->V% ϰB?bQ@SZkF!0ݞwg}+O h(?Q̈́ ~*$->S|COjj?!oZ( H[}֣a}PLјm]ݞ\OEtTVUm.mv;}+VmgB + ϰB?bQ@G$->V% ϰա_݌{6urx{D@QEbͯ4SIsҙ ϰՕwFu mB?XP$->Q ϰՉEvW&f+vx{Պ./3W#fp OH[}֭IUP$->Q ϰՉEmB?XP$->V2y&1Cc"?ʀ&/.>jݷg槪Z(?a}jĢ6!oZH[}֬J(oa}ɯȫ`2@j©!_iEP=F²m;Vw$->T 85$->Q ϰՉEmB?XPCivyݜqz4 +A?W@g:DphVtH[}֣a}j?!oZ( H[}֫zvohA6zk['s:*(2uitЈm;U!oZ?U +j?!oZ( H[}֣a}fӎ?lPXkGpv\n΀5!oZH[}֬J(oa}jĢ6!oZlMݪWn>Aq}[Mv63M:7??ʀ1!oZH[}֬J(oa}jĢ6!oZH[}֬J(O67(lzdSO ˏڼwmyH[}֭ [AsP$->Q ϰՉEmB?XPk* >Z닇|]OQ60=n3r|AqOhH[}֣a}j?!oZ( H[}֩5ut;>U'B}O4EfDQ}?{Ka}!_5mB?XP$->Q ϰՉEtvohA6zҮw's*+*X6M6s\!I~\j?!oZ( H[}֣a}jӯn=N:J<=o (1fך)bLjʻ:6!oZH[}֬J(oa}jĢ; +wjۻV$t*oa}jĢ6!oZH[}֬J(oa}jV% ϰU0 }aT(zlaY{6g;a}ǜhoa}jĢ6!oZH[}֬J(֍B` <8VrO kLH"gb+?t:w$->Q ϰՉEmB?XP$->U;T74f Wvwgs5Q@Q@WhDT +K_*mB?XP$->Q ϰՉEuzudzi\ʶ(Yi#8;XwVq?to@G$->V% ϰB?bQ@ZW&f+vx{]N _l&LD@G$->V% ϰB?bQ@G$->V%' rc6=2) y\Tm^`V (oa}jĢ6!oZH[}֬J(u5y~H[u?Ҁ +ޛVAͷjY> 84$->Q ϰՉEmB?XP$->T֚ѺHLwgJ!H>袊5 نۿ6yX;I>W?}VrQ ϰB?bQ@G$->V%iڡ1ڻ=J`]4"qvVr%/sa}jĢ6!oZH[}֬J(oa}CN7m8+ʀ6(ś^h?\3a}*?'j?!oZ( H[}֣a},MݪWnCF\_Vf]F͌X[S H[}֣a}j?!oZ( H[}֭daLcrǦEqUZǜMP^\} n83OToP$->Q ϰՉEmB?XP$->S_gWdՅRC?Ҋ( +z鱅dqvH[}֩AqOk H[}֣a}j?!oZ(Z7WI .8Zi? +u3a"(>៽ЬG$->V% ϰB?bQ@VPLјm]ݞַOEtTQEe^ێwcҫB?S)/ ϰB?bQ@G$->V%7cͧsWk&x*ؠfך)b[UѿjB?XP$->Q ϰՉEmB?j\U9\}u:74~6lgu2obB?XP$->Q ϰՉEmB?XPk l1ɌnPȧ6s_SPeyێ3Y?Z+ H[}֣a}j?!oZ( U0 }mλJ*zlaY{6gd<G$->V% ϰB?bQ@SZkF!0ݞwg}+O h(?Q̈́ ~*$->S|COjj?!oZ( H[}֣a}PLјm]ݞ\OEtTVUm.mv;}+VmgB + ϰB?bQ@G$->V% ϰա_݌{6urx{D@QEbͯ4SIsҙ ϰՕwFu mB?XP$->Q ϰՉEvW&f+vx{Պ./3W#fp OH[}֭IUP$->Q ϰՉEmB?XP$->V2y&1Cc"?ʀ&/.>jݷg槪Z(?a}jĢ6!oZH[}֬J(oa}ɯȫ`2@j©!_iEP=F²m;Vw$->T 85$->Q ϰՉEmB?XPCivyݜqz4 +A?W@g:DphVtH[}֣a}j?!oZ( H[}֫zvohA6zk['s:*(2uitЈm;U!oZ?U +j?!oZ( H[}֣a}fӎ?lPXkGpv\n΀5!oZH[}֬J(oa}jĢ6!oZlMݪWn>Aq}[Mv63M:7??ʀ1!oZH[}֬J(oa}jĢ6!oZH[}֬J(O67(lzdSO ˏڼwmyH[}֭ [AsP$->Q ϰՉEmB?XPk* >Z닇|]OQ60=n3r|AqOhH[}֣a}j?!oZ( H[}֩5ut;>U'B}O4%]:(fڗ4IGMui.ձN=K(Ϡ +@==P=)u()@ {Q{S(y(g9[uEOE{Q{S(y(U9ݧPL=C@==Pj:(=(gg2GL{Q{S( "ARoNoj*GL{Q{S(#M@#'GL{Q{S()KEPYyIS(gg2GL$VNӭI@41N_3ڏ3ڙE?Q@=۪*|} >(g443ڏ3ڙE?Q@-5>: +gO=*GL{Q{S(ȨjQPZF{Q{S(y(g5Q@hԯTt3ڏ3ڙE?Q@S%¥ͶLQ@==PjUl9:QE41I{R?4GL{Q{S( UR#iS ҟQ{Q{S(y(g9NFj*>:(=(gg2GL{Q{S( "ARoNoj*GL{Q{S(#M@#'GL{Q{S()KEPYyIS(gg2GL$VNӭI@41N_3ڏ3ڙE?Q@=۪*|} >(g443ڏ3ڙE?Q@-5>: +gO=*GL{Q{S(ȨjQPZF{Q{S(y(g5Q@hԯTt3ڏ3ڙE?Q@S%¥ͶLQ@==PjUl9:QE41I{R?4GL{Q{S( UR#iS ҟQ{Q{S(y(g9NFj*>:(=(gg2GL{Q{S( "ARoNoj*GL{Q{S(#M@#'GL{Q{S()KEPYyIS(gg2\>+|'fG%w@ "%q`Չq~6X?,VUm.mv;}+VmgB + ϰB?bQ@G$->V% ϰ mk*7v + -]N T^h?\3a}*?'jry1$7j=3#Wok?o KkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?DcS?ފJT0M/Q?-y]wg0W]©ſ98OuQ@Q@Q@|G6~ eOq/̀,5y]tSğ AO1]X O}EPEPEPEPEP^y{^h%W+P1z5MNFu+6љ%s}z-n9o 9D>SIybKOzgneM*$mKy$_Z!mMs ~ާ㰠J4]*LEkm4=jPEPkI_?k_W/$:D}KIoQ%zQ@Q@Q@Q@U{]2k XpuM'O-`B@~(|L ݏO1=a7?7^: x4;wQ ?9t- Q&oiv=QO`:L4{U4wmƿԞ¾o:>Ѳ}VGڮQ=:!iokk9k(((((iZ~fm5;(/-1Oupk?V ?ºZ(yO?V ?ºZ(yO?V ?ºZ(yOi>Q@BjZ($Q2P}X+}`hV( +`hG-?/U(o#V( +d25p@a}_(E| +EWE| +>i>Q@i>vѸt5aЅ5QEA$r:n}}X+}`hV( +`hG-?/U((E!#⥢*--rA1Jjj(-?/Q Ob O}}X+}I@5@z((՘[I9$*_(E| +EWE| +>i>Q@ 4FTt`SAd*_(E| +EWE| +>i>Q@i>U +T-S]D(OPFAQ@i>Zϴ_PZϴ_*_(6-*QEae ,j5-?/U(-?/Q Ob O}}X!K;h:AB(r #pKEWE| +>i>Q@i>Zϴ_PZϴ_m,Z( %W-QE y %A4߰Zϴ_PZϴ_*_(E| +EG@5@z( +Y5DJjz(-?/Q Ob O}}X+}MiBQ@!4PZϴ_*_(E| +EWE| +>i>Q@BjZ($Q2P}X+}`hV( +`hG-?/U(o#V( +d25p@a}_(E| +EWE| +>i>Q@i>vѸt5aЅ5QEA$r:n}}X+}`hV( +`hG-?/U((E!#⥢*--rA1Jjj(-?/Q Ob O}}X+}I@5@z((՘[I9$*_(E| +EWE| +>i>Q@ 4FTt`SAd*_(E| +EWE| +>i>Q@i>U +T-S]D(OPFAQ@i>Zϴ_PZϴ_*_(6-*QEae ,j5-?/U(-?/Q Ob O}}X!K;h:AB(r #pKEWE| +>i>Q@i>Zϴ_PZϴ_m,Z( %W-QE y %A4߰Zϴ_PZϴ_*_(E| +EG@5@z( +Y5DJjz(-?/Q Ob O}}X+}MiBQ@!4PZϴ_*_(E| +EWE| +>i>Q@BjZ($Q2P}X2u{;h XQ\ߔ_ʺR'8s0?ɾs} 6;>i>h[[:L@l +Ѡ +E@EX)X9iPZϴ_*_(E| +EWE| +rYFՇBdTPEPR9Xf Ob O}}X+}`hV(-H(dlǩ* +`hG-?/U(-?/Q Ob O$PE"(b +( k+Vbo$䒣OZϴ_PZϴ_*_(E| +E68$ QNBjZϴ_PZϴ_*_(E| +EWE| +T*PԴPMtIe=AEWE| +>i>Q@i>Zϴ_PZϴ_XȫPEP%9,r _`hV( +`hG-?/U(-?/Q Ob,pjá +2*j(2ĎGM5-_(E| +EWE| +>i>Q@i>hD$`\TPEP2Z[6cԕ~i>Q@i>Zϴ_PZϴ_*PE"(b*f,NI*9 +`hG-?/U(-?/Q Ob O4qH5 +E# @i>Zϴ_PZϴ_*_(E| +E"U +h!GPz2 C Ob O}}X+}`hV( +E@EX)X9iPZϴ_*_(E| +EWE| +rYFՇBdTPEPR9Xf Ob O}}X+}`hV(-H(dlǩ* +`hG-?/U(-?/Q Ob O$PE"(b +( k+Vbo$䒣OZϴ_PZϴ_*_(E| +E68$ QNBjZϴ_PZϴ_*_(E| +EWE| +T*PԴPMtIe=AEWE| +>i>Q@i>Zϴ_PZϴ_XȫPEP%9,r _`hV( +`hG-?/U(-?/Q Ob,pjá +2*j(2ĎGM5-_(E| +EWE| +>i>Q@i>hD$`\TPEP2Z[6cԕ~i>Q@i>Zϴ_PZϴ_*PE"(b*f,NI*9 +`hG-?/U(-?/Q Ob O4qH5 +E# @i>Zϴ_PZϴ_*_(E| +E"U +h!GPz2 C Ob O}}X+}`hV( +E@EX)X9iPZϴ_*_(E| +EWE| +rYFՇBdTPEPR9Xf Ob O}}X+}`hV(-H(dlǩ* +`hG-?/U(-?/Q Ob O$PE"(b +( k+Vbo$䒣OZϴ_PZϴ_*_(E| +E68$ QNBjZϴ_PZϴ_*_(E| +EWE| +T*PԴPMtIe=AEWE| +>i>Q@i>Zϴ_PZϴ_XȫPEP%9,r mM +.Cg J#Z0_h9qҀ9)?uVVVc5D%GbdϹKf( ߰Zϴ_* +YFՇBdTQ@E-3ejZ(-?/Q Ob O}}X+}>+h!bDH*h(dlǩ* }X+}`hV( +`hG-?/U(8DQhIET ejY$TsS@i>Zϴ_PZϴ_*_*hH$jG@:)FA+}`hV( +`hG-?/U(-?/Q ObEP@ ;RE5$Bd*_(E| +EWE| +>i>Q@ō x슱ES%9,r +`hG-?/U(-?/Q Ob O䳶ä(ȩ(r #p3*_(E| +EWE| +>i>Q@Em,Z( %W-PPio+ُRTSQ@i>Zϴ_PZϴ_*_*HDQhIEQE@VŚ"I%G4`hV( +`hG-?/U(-?/Q OblqH5 +E# `hV( +`hG-?/U(-?/Q Ob O:U +h!GPz2 : O}}X+}`hV( +`h@o#V((K s(YcWi>Q@i>Zϴ_PZϴ_* +YFՇBdTQ@E-3ejZ(-?/Q Ob O}}X+}>+h!bDH*h(dlǩ* }X+}`hV( +`hG-?/U(8DQhIET ejY$TsS@i>Zϴ_PZϴ_*_*hH$jG@:)FA+}`hV( +`hG-?/U(-?/Q ObEP@ ;RE5$Bd*_(E| +EWE| +>i>Q@ō x슱ES%9,r +`hG-?/U(-?/Q Ob O䳶ä(ȩ(r #p3*_(E| +EWE| +>i>Q@Em,Z( %W-PPio+ُRTSQ@i>Zϴ_PZϴ_*_*HDQhIEQE@VŚ"I%G4`hV( +`hG-?/U(-?/Q OblqH5 +E# `hV( +`hG-?/U(-?/Q Ob O:U +h!GPz2 : O}}X+}`hV( +`h@o#V((K s(YcWi>Q@i>Zϴ_PZϴ_* +YFՇBdTQ@E-3ejZ(-?/Q Ob O}}X+}>+h!bDH*h(dlǩ* }X+}`hV( +`hG-?/U(8DQhIET ejY$TsS@i>Zϴ_PZϴ_*_*hH$jG@:)FA+}`hV( +`hG-?/U(-?/Q ObEP@ ;RE5$Bd*_(E| +EWE| +>i>Q@ō x슱ES%9,r +`hG-?/U(-?/Q Ob O䳶ä(ȩ(.&ʃt"}Jhԩ' cV.4׹Ur:gSiu7I$%QI4 O}}X+}`hV(-H(dlǩ* +`hG-?/U(-?/Q Ob O$PE"(b +( k+Vbo$䒣OZϴ_PZϴ_*_(E| +E68$ QNBjZϴ_PZϴ_*_(E| +EWE| +T*PԴPMtIe=AEWE| +>i>Q@i>Zϴ_PZϴ_XȫPEP%9,r _`hV( +`hG-?/U(-?/Q Ob,pjá +2*j(2ĎGM5-_(E| +EWE| +>i>Q@i>hD$`\TPEP2Z[6cԕ~i>Q@i>Zϴ_PZϴ_*PE"(b*f,NI*9 +`hG-?/U(-?/Q Ob O4qH5 +E# @i>Zϴ_PZϴ_*_(E| +E"U +h!GPz2 C Ob O}}X+}`hV( +E@EX)X9iPZϴ_*_(E| +EWE| +rYFՇBdTPEPR9Xf Ob O}}X+}`hV(-H(dlǩ* +`hG-?/U(-?/Q Ob O$PE"(b +( k+Vbo$䒣OZϴ_PZϴ_*_(E| +E68$ QNBjZϴ_PZϴ_*_(E| +EWE| +T*PԴPMtIe=AEWE| +>i>Q@i>Zϴ_PZϴ_XȫPEP%9,r _`hV( +`hG-?/U(-?/Q Ob,pjá +2*j(2ĎGM5-_(E| +EWE| +>i>Q@i>hD$`\TPEP2Z[6cԕ~i>Q@i>Zϴ_PZϴ_*PE"(b*f,NI*9 +`hG-?/U(-?/Q Ob O4qH5 +E# @i>Zϴ_PZϴ_*_(E| +E"U +h!GPz2 C Ob O}}X+}`hV( +E@EX)X9iPZϴ_*_(E| +EWE| +rYFՇBdTPEP?8qƨWCyeӑ\jh@kghMXSAX rvPͣҍҖ@)h +LږMҍҖMҍҖMҔ:QEQE&FKE&FKE&FKEQ@&KE&FKE&FKE&KEQ֊(6J6JZ(6J6JZ(6J6JZ(( G-GG-GG-Q@!PmmPmmPmAKE#}QTJT"zSP6J6JZ(6J6JZ(QEG-GG-GG-G.1EQEGG-GG-GG-QEu=)h=(=)h=(=)h=)h +PmmPmmPm`zR@Q@@=EG-GG-GG-RE-GG-GG-G(t(MҍҖMҍҖMҍҖ1( +MҖMҍҖMҍҖMҖ(PmmPmmPmmPEP@=i6JZ(6J6JZ(6J6JZ(0=)h +B)h=(=)h=(=)h=((LڍҖMҍҖMҍҖQ@&KE&FKE&FKE&KQEQE&FKE&FKE&FKEQEi6JZ(6J6JZ(6J6JZ(6JZ(EGG-GG-GPEPQFKE&FKE&FKE tQ@&KE&FKE&FKE&J( +(hhhhhh b(hhhhhh(EGG-GG-GG-QEZMҖMҍҖMҍҖLJZ(zZ(6J6JZ(6J6JZ(6J +(hhhhhEPIzR@ zQzR@ zQzR@ zRQ@Q@ zQzR@ zQzR@ zQzR@Q@ZMҖMҍҖMҍҖMҖ(zE&FKE&FKE&F-QEQzR@ zQzR77QZǺCeMV'XmJ oX-d~EΑte*--rA1Jjj(-?/Q Ob O}}X+}fpETNvv5Yʹ6Ȑ39took&}?Ʒd8] hVf,NI*9E| +EWE| + F;~Zk?;э@+ZtE=}_|ISشQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWߴĺ-8͡_H׌~a*^dSt=lxNi1/IJǥ">|=3SRcՔ?3ZTQEQEWǟ}mcxY {Wž#Կ|MyȻaf$~3+ӾVc?dcט׼~ZamC^ՙx(%A_΀>(((((hˈ<Z3$7@x}H<Ҿfi?OonxSͥc5rs(:tzu(᣼@sChu(᣼@sChu( zecswDi ; ^EW|;MY.|Q;w&@z0^E}? ;W_>u-*XI'H#ia(f8"Bqϥ|]7ÿ)h((漼 ,UI4^iS^^OСy%UGRM|Sώ/<<4?.|oz~xkދ۩秚PV2Yԭ:.dq ;ڛz]N"K_Z|/ciM7!.5i{ ~|4M܁ŽGy=h +( +( +( +( +( +( +( +( +( +k?;э_r^1_j> Z뤿)ZKŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((u+X5HJ4QVw#/ABb$_uu5Hu>5EtKZ̄}TiYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:?+??iYa|rOQg=¹(ҳ?G +(J{V'+:3ُm +u#~*(Jmfgȉ{9gb{M +/7-4llVD#`w=:8(4U(((((((?cWܵ׌w%q:_V/z:5%kA觯h((((((((((((((((((((((((((((((((((((((((((((((([>|EZӑ7LX]Wu4PWa?^=l=-xrHrπZOv\ ? z|sID.٧j[\xBO ƾ((?⎾u^4h9|(# o¾0f|fmO 9qfhhgFgi4mFGl¯:54Oѭ]ؽY66PZ[ H bEU5Q@Q@ͯ'(98#v<$?zxs7jjHL P: +(<瀵Oiuqg ӴnWmV漗j>`q?7j>`q?7j>`q?7j>Lxg@oo-{3H\1ּξ$?5(HOxÖ<]ꧽy}KIoQ%y3?%kS7t/:Y<Җ* 1=k(( ;inneH`K#TrI=%ݽws$6y$&SVƷ0ʽ_OiZS: /faMϢ'UJ+({$qF2ǰZ\_Cii q3(,z+_ -b5 ARmvtrq_ | Г eTS^EQEQEQEQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV62bk'~f5_+MkF@[nҮOOkPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY0oSZoo@ _yLF l ++}s_@(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Û])B+OcRY2]] Ds<$Mc&z(4}xI|cw?O;'k9 ?G焟ɮ>s<$Mc&z(4}xI|cw?O;'k9 ?G焟ɮ>s<$Mc&z(4}xI|cw?O;'k9 ?G焟ɮ>s<$Mc&z(4}xI|cw?O;'k9 ?G焟ɮ>s<$Mc&z(4}xI|cw?O;'k9 ?G焟ɮ>s<$Mc&z(4}xI|cw?O;'k9 ?G焟ɮ2ISUߥuWm pg]57焟ɫ^E@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP1;'h5@焟ɣw?OOEsc& ?]=}xI|>s<$MtP0,SKoeEtTP,z,EQ5z 2PEPEPEPEPEPT+ֱdT Y*d<oHe ֱ7v3(R}kF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEy7*5z`iTs,_ƞ猏 +jM&h6I{x{pN+_B|"l,9⋑vH{1~{>VWPC))k|DgXtj+u1V֯qtm,Pu1Yxn}#AZpQB-}I= ď R:v}Fe1TAWU_,~?R|WQEQEQEQEQEQEQEW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEP/ZgArWy]?jy]?j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ?~ҷk ?~Ҁ1+}s_\}vkQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@m~O]O j 7 +A?WEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{6Ua ʸ߸/߸/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+'t't9tookF\_Vf/EW^1_j?cPAkJփ]%O_b_h?_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETzZ({ +U]G²Ectg\G>> NatCt7>S$i4m0 q@Q_k_5^Ů|5n=Z(D)?~4 __Ns{.yX/_ h<3`t]M,6G KR$ +x/gYb@ :룏俟jkh,8`BGjUG@*Z((((k-]$ۣ˧A;j 0S\tM}E|:ۛODԬ`:|%%,^2X}PEPEPEPEPEPVn>kC#@)$ + XUWPZ¾3 Hn")Wܒ)V wPEPEP_>,Ěx_Z7R8 WPxMs4 5MPxMs4 5MPxMs4 5MPxMs4 5MPxMs4 5MPͿ1$=NȞmͤɁg_IQEQEQEQEQEQEQEQE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5_+Y\Ubj?rO+Z|?rO+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +߷7߷7 J,?o\W]*EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPwFu>!H>?'}'B}O4EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^AͿq_>>6=>kv=>kv +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +y]?jy]?vAq}[嫩ѿտ QE׌w%q密c#a+|ISص+ZtE=}@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@|5 \ƯkJF5th?_-|ukJփ]%O_bEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPkfxPG'Z~z𮊊Y=Kn~v(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((SN1.s=ZTP;?[mb%)" +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(0f%IXdRYh^G3U' g=>EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEEsX]Jk º*(7KӥiL ml֕PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPT;'#Hm7Ү@#?/l[5BRy:՚((c#a+-|5 \ƠKů Z뤿)Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +*> 5Tb(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6?'}'B}O5~O]O h(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?*밿}so\}m{}ax{}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECZՓC@u:75WS./3@袊+JF5}_ xG}W15%kA觯k㯃_V/z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +g$j"5}_ xFkэ@|o +xM"[{VrQ:Zi #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(#Wvo +iZf# @n|W@F韴'xҵV%|wC?kC??5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e=oy$n1azk}3T*=?߯5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"5/.e>5/.i #X"Z(i #X"ꖧBxn=+URw̱_9Q@ @n|V͇K4XHkC??,hY6E%[@ھɠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ﯮ/' EӀYO5tP/ = ܟRŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h}i:ky ̎OM|_]|sKH?jWȴxc>+ +2؇R;^ +3ɿf5O 7<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7^=.4TЬnc.MJcisq;_z.{I%ՔSJU̠'lgTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&h:dU>_ E<gTŒ@y2o*Q/MQ +3ɿZ(οF|?<7G(χ&hIg^ +[ JI8Ur- :N Hʓه 9c#a+|IS>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ex~#H^iRGuke,9 5}Ilj??kZ_ ?ğ_BŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&dUz-_>_ gUPŒ@y2o*Q/MW@u +3ɿ?F|?<7^Ey(χ&~4:ǃ/c{X=ķf+0?H$.JW'}ajky3̈G|_]| KIk +3ɿ?F|?<7^Ey(χ&3#Dp='פ@.mm:tbѳ\H#7\?u-|L߆<y$ @-}Idž((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((JF5th?_G}W15%kA觠h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((!8'g |K_m|CqO=g;%} _=~Oo䯡h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?H$.JZCD/Kk믁It?z$JנE((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ξ9%5+Z]WAREf5O 7ko#Th((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((isqе1~w:Zk 6Wĵ'l(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((c#a+|IS? \ƮK>Ţ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((($ğ @5-}Ilj??kZٟ>I\-|3߉?띿󒾅((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((k#K+kƿi4 />e%ҿ5Zg]+O^=((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?uxG6($}XWP|n Xk +O5Rov(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((($^ƌ,p8Yl11Mz(Ͻ|#hѴ˰(e +r*p{QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQExR6oi-rHu{Şj0-9clE}EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEbM|閁Mݜe d@}(}_Ey'o5֣"O+袀 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +~ k !y8Mn~W@(P +<+ SXFaЊ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((O_ ꍦ:ٯ+z_.߇0%FoJ ?%q +(]?a+7G.߇0(v<$?~Wn@>tyCI\(((+񯎴?lԤ-4Lހw' +2b@$\.:Ry:|}k?~6i,m؈s\e}yJ(^{H2o _QdkN5poJ?ā%Qҽ:NJ4}bR3R_Jhs략,3Gq +M $R(dt9VAE>(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+xm⸅E*F2<ԕȽפ_ +((((*9yR(e䑂ROJ!|M|d_RUh8_|Y˫;B1}}O}-n>2jT!OkcO J+J(8i~Ž꺀'E?h +]:bOW( Th'ɢטd=+fy`3%ʲPG"ǩ+$X du}sր>KWS (((* M:Ai*IW;j.D!C!~#fwjܶrU +gY)8.nu),*.?i{%co \Ha覾w>+"/_?b-+}^Ũiz~(I+(Gm~ӤjVױxu֕|jwEwu֗1X\v|uSōMP,rIE>㏥{Q@Q@Q@Q@Sm;FkNuy=OyύV]A^j땖V+cq۠_6Z+缸o╲z(`Pz5õ3r5L[+Zi!4P~5cTiv׺k3q ~WtPzfk6w_[[A q["{;(=E}%UdHDVzabx {zPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE!;TۚZ+OVw.٤p?θO W=o@VV^] EOX#gToȜTNJuP27Xʟ+>C+F"BéKY~a4]?a+7_ Q@e_|nח(2>d~&J_FϠ(((uLΓ&"yl,p8POSZUj_coJ ?%q +(]?a+7G.߇0(v<$?~Wn@>tyCI\oJMh/B\;OE|5_K&i@EPEPEPEdׅHͤxEuKF:1hZkZ7mѬjVQHoGSWj7,CP#Ҿd5+ZKBkZYZ_b߹𬎾~fjkvUZފFY9t/!,Ez%j6W0۸K Vo^.|#|.mB[rN^,9=OPܔW61crc|գ'ykѨ(((4M"GjY@OA_=|Dq@ݯx~[YeQ.XS+j:bƇ'?|ss=ėS<$Yy5}'3oM}[PV-im9}wQ/s UZҊD}i3>+tK} Mz3Eq +M,N2Xz:uxK!]ГIan[2ZKO>ހ>٢X#Ss=HiO/nEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEj/zX'+8ZV1f4cBI&c'XZDpiPy0?yjѹon.=dRXm$GMHVl) qZ-%t ;stU?ξ|=oG4REHx:;Ux-|5wYw뎑6t/%GE|E}K $n7+z: |@U>rп{q_P|=xˋUwMd퓏!%Gq Q@Q@Q@U-[Vд-N;kHt9{{ɠ |,:%UrGuK-zW+'z=My9%I9$Cð[ #QHR ~+() 1_SBѤ`/ Tt^ Vv [>59(<c^ 8VvY\1 '|cxG]GIpY~$=~(((+#Ğ%Ҽ'Kj"t#vU#b,|?}:3̑-IixMC'EϴP:-g* ^RBiͼ_O_R28tb }E|㦭]KLDs<#?=>}-vZƝ\si:XC@袊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((3?}|{-Ħ(PpNX4M@i,Gq{ڀ>tyCI\oJ ?%q +(]?a+7G.߇0(t +k}/LּۂV(2 ydpS]|qJ]_E}@Q@Q@Q@2Y'i8eԓҸ4?ie\#a?¾5ߋ xƷL mَV>&>>5DvjMLR?0G +:nim5wrc5@~1WuO~uK FȞdAҾ`><_GEխ1bEp_[OipI ѝ$lU9=\K35<=>+# RXdP"0*yTQEQEQET7wsyq2G< +~$|X< VZu[bHGOS9|MwY$);cTp>}I5]Rx"?1PkU|3q*2ݪZv>|)"/_?,WAuK5 <$BDnE;o?Gc{ɐ/UEjW6yu5g),.U+wäxVEXH:/ÏP:@ A= QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE*3פ?חר|~?zCy}]tmSYҴw:Zҕ2BZxMs5gZy WҔ 0S\tMxMs5 0S\tMxMs5 0S\tMxMs5QEQEQEX?×Zq G8id?uOj&Լ[ϫjoSQbNȣ~~4oisiLboo,4j'ԖFBz{<9}hz{scQ1+CJ^`7ُ@-͗RDkp9 ^f?lG??fLjE_Y(M>Ht{uPdƋM)$^I42,lUԫ)A+/|.Śdƕnۦ ڔ lt?>TNC2_33hWo`>dA0GPi(eu 2A"/^WҀX^6׮PEPE89?~8'de -䟻'd.W:}jpwIt⯍ƞ4) iք٨<~|1wEy̔vcu=^e|OnLp]O=>M֏[,:{ht٨+82 ?ȭ)f"_#4?{uxu`c-u+03I- A#>6|-ZKA:S3r}{Gh[X6J='#5t9h1T_j~`E'sA@((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((>%w]#k_[oz֓\Mm#Cv+mP3#J+t[[PӬPP+?ٻBiDր>k>xJclgbG\i lcՏ%AnPQE}ߠȽפ_ +^?/VQEQEQE|Fշ2[SW\HU,I=_39 ɂ{y`!ڀ9}STֵ;GQ{/$y'vN&^'Lv<˹U<_`hxh/6<ɛ,y:O՘B>h<"CдiizU[0{&hn?f"_LpD3u,%ݏY,mTzM}_E|FZ+ύ `fn#/`Jé@Cte>g&ve+'zzI At"G3/C%̛+"-yb!@Q@Q@yůmCf+l){Ga]徝aq{u 6W=TdWľ3E׌|U{ܖW1!W}I'b\Mws-į,y$v3I'_)%d(}7w>^V uOJZۅ +bs ++ M.xaPTU٫Ixȳ O +H?!?Q$Q%-2JWC_^PFF |E{S[mXQIĎǏ>N9i_;]@TO=+[[ẶG"`rk_/:X]v_.%^}QEtQEQE~&7MWL*m=ǣރJ떾xsi= ~5^xZկ.293`0DY$IIEzkEmV6ų|l:t ~ƪ.,m8e)- z^c5i̲w< l׹C V0ƑDETS¯f=?"Nhd+^W/~&R5/1kdGӣ45cQ@T|+¿*}@Q@Q@Q@y_%uF-zEy_%uF-|@=$ 0S\tMxMs5 0S\tMxMs5 0S\tMxMs5 0S\tM} Go pu匯}Rv( GtPEPEPE|Cl~ e78QVP9c즀<-_hr'CYߗ|R\\Mus-č,ҹyK19$\tW;׊<[w4t[r~]Gl:OK4+iVVwPx<:kR0/%ŬXr)Gb+㯈 +/'-%2r?O"0ZBm=6|r/c}AGq_c|<ů3Xݸ?oOQu,W~4Y +d[)<'~z(r QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW'?I묮O/דŔWw(KmEV/V8v &>ю1G޷ <#J b,n@gkDo־mHmHAH*I@%$|gk-Vz*p']GΝi:[@3YiY9cq5}ǰxKvBEۑ +xV?ڻJ?wm KOX[lg־Š((+h$y8bRp@$bDZEnjZ=<sN 𵔻n/ͺ*yXADO|@Kmm=vְ'm5:M)gO +NcF|F R;xIـ-}9@Q@Q@5MNFu+Kh̒=k:vq$zKh^9q!g~Q|ߊWPV2XNS%,I]j-5Ă8^ + ?z*Ċj(7wxTAwh|?8y=P~l|nj[vǏֽe ͡j;A>D}R~ku :IP#U*~#GëhZ&9Nz~~ [˧NB[ïC޹[+6{+Zy9cn>uM>e1$R/FR2*|<ы\xB\5ŎӻЇ +(( ~u.B#O~,V~}[S. +vE]ǟ6Ysa1W߮ZJ+KD5_jI2ܷ;#tz<(iﹹ}=u,}?J' ҼǧiтqrI4Oٶh]s\ُ& H>HlЌx]UY׶Q@0z hאjɈ/7ऐ^Mٙ< +:? +!Pi%># JN|Wro0i~Kַ#+Ƨl A_A@8_~zhM,?-^s* >>d_զ,aA>-m.@#?ע4d[ڄrc4q _OC%֜:_,?O}WE|AV*8 >5|-SNnPL0'A}G_> NC"α9:]{HOLF?繯 +ߍ Hߩi[yuJ( +( +*|C͹GKH;}da?Sz.n!EP#EP2I+ƞ-,!f'\C}ɠ ɮy&rI!3?Ǿ#$/k/&^6{b3%এdZ8Sϻw>'ڽ{L+j"#'?qt-NOӭvcVf!"?c4) ^o(^GzZk@K"쇑((xfn#voTQgϭx=}3tI5q:y<"Wp- tu8*}s_h|8rxvzZ&Gʽ~0j((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Ck>?Q!F=lY!Rk?jb(((((xW:C X3VS 7֌:6#sq3 b\4HřKO%-p4_V'~f>$w%cZ$r< +GF!tK. +g^((~8I|7㖼%,Ċ?^e_UƧ +MIv1S(cSoe>i$=)l\7 q!-'\?ym98ϰ+W|Jt/v>-uE+x3}i_Zey h$Y#oFS1_vzcC'_(aQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@x$O*Z +;IaXTQ@w?/i+B@@Q@Q@Q@}ħßo|u~EDFw7>W5njUdu0uj +(<)Ҽ Uk& ~d_.ר|֎&[5lŧ[.PI<;|(MP-/vaQ좾^QVk"n)~(=67sH(((aqcwmqE,mє_x[Z9%f*(ߊo41oZiwA)ތCc@!^:x?o:\-:mkt0T@r@ h(Jb<5 MFUН+~,G\NtPMX8c@,,k Tqs*5aZY$ƾf [DWR&[?€ +( +(2GZ÷5 E3n¾Դ+SӮeŬ H?ʾ>cKױص+t#7 +<#xQ|YxVpBq-a[h‹mp:ȣ*R^_V$ ]_+TA:_uxkQ:DžI-wg͏V@OkJKcåڀ:( +FeDgv +2I<K\gmh_ 5m٣̄' +O"Sy~Tk~]s2kQTHf P+jɶ}BG\ ^@Q@Q@DIn4OF֬-z6?#qh jzD*=#dب*AWzb X^i* ?ʭט|z֎kTlIΖv|j{]당g,s:U(u|$7׾)2ZdB2>@*?zíȦZO0O~PEPEP?OTEacG2*WW17mBn( > 4f!m'Y@7y_}ewco{lฉeUA|_\֎7mH}_u~QE}J~b>1ntindw r֝QEQE|KxuKXYf,`rc^U_YwƭSttru۝a(yFtPXQǡV@:k։~Sl"/(I@UQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@I$r}EPEP_ xG-s1zcş9kэ@$rusua9\tQEQEQEQEQEQEp}kh \oK3%B? єTez?-Sd8-+\8ta09>hzփces;nPq(򯏞%:/ƛ ex%(q[2']|]FOmE|a?ZkOS⎁ \}52Eqՠ$g,((( oiWvqe*/m;Of0kZ:\I?b?S?gH=͛-ezX+Ե|^4]#' G@@EW#S$ݔUQBξǯEvuj^M.}w9?ր3kӾⅼdY[KqF?ey{hZ1VEُ@FQEQEQE|\F]h +}<E?|k_wÚK_P_`|ԎH̷ْomvkkp2+S'&@ U4QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEw?±k+h'cRQE}ߠȽפ_ +^?/VQEQEQE|ikR:zmX>=U5jzNM̒sjz߉r"Y8g5m|4Z|CxG1@\WQEQEW Mm15S鱃sY~&,ȞhhJ(>7K^xcǿg+71ȇ^@Ufx j(ojGX~ȸEtXQ@6ioZ5@?ٲ's-ş +( +( + M Տ)sB?7zqmFvڙe(ڑ _3nylb}\( [_n1 ɷhf +Z*Xi7}xV($*\īeSld>.Kn%mJrj:(f4&s,۩إ?*Z6|2) WPEPEP^JiMC 'k=Z r\C(lʒy-nbCAȨnO]K*?X[پkى1Og]MQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|GC~*?-xv +x{5}|aJ#_gEPEPEP^oIF]`ы^^oIF]`ы@$T_QңuaNE}E|u|aƴ[#+7k5wupǼ3ޔW<+ekxM`Z;%Ӂg>墾P>=Ke[ɭHGU+cٓװxG㟆n]L }>6ԯi;@ѯ1WBJ7<#% L7M}_T_zi_nҬ /ZEPjԎVؒ˷_j~ +-9 V-74i 4DhᏮ,?B_~(R(((h 4Y|M{0/"Fcym{/hR B?3^@H97a&zR#/ݝ?M86˟\_vEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPѺ[x/OC6>TNVJ /~;ZO` ոpy/4|X:\ȟ|6*旦-o扮=I6~ԊV +( +OKR0_GC`ݴzA^_7~җeKYg\(iUK0U$I[1-Ȟ2(t]=t OSm-c *PEPEP_|DF_Q[¾ٯ< [/ W~Z񮣧]Ց?Fj ]O)S,M6(xu"چ8a븅_:R.951}3kCBAE0_Y%((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?h}Q/~ Ac,lz;)_J:^jyvd=;rxs zW?arxQ@|;TU]E#PoMs5?׾ a\}?Р(+BF5}_ xG-s1N_|]n+.wNӴi !Al0Ͻ}E|1x:3_뚍z.\8e<ߔWֺޭbsi۟X?I!קA;& -~F>Ǣ?tAm+$Ye}Q@i/ }AylgЎhB(((>2GRl=6 \kxY'>}gMzW4_RV n־o\1Z$Y}WQEQEW[M~ dlnD-v5OW-@QEH? +f%?Z:oٺ^̜7@=7 +(/nEt&@R:5ۖ[vһĖcOsI@8i:"b3V٦&cn"?Ҁ +( +( +/Zh]s>270żI^\ċA{qXK @QEÝHt ۘ$l}Y55י|7? mb'?f/[^@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@(|~?zCy}{7 &<.sx5~:ʤod $Af@!XHAG#o(+ xl|b2c>WPEP_ xox\5 ?Yn۵ASs!ǍRm"ϊ5,spZ*o٥i5}EPEPEP_/#jwF"ޯ%߉~#)hg-Z ~}$AWWmKH*("ȵoߐ| I$rM}᭶QaZ_P_D~cL@?5|_I~͋δ޷?@EPEPEPFF | su4_v_ۮ s ǍQfy,^{$_X'QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEw?±k+h'cRQE}ߠȽפ_ +^?/VQEQE^oS.jfgVaY@ QEg^~%I٫ſfGWo[5i((:20aKE|"d=TikR]N5V>&ݧ -{|37|N + +!M|9#:W#I0PQE}Q=E5w[A+̾.>ڟ[=^@Q@Q@bx/? ߦ/VfwxgU_[98h*(>f2|:BjR(yq^^377Q:j$4 +j+6M$ְp_A̙3^^kz|EP؟~+e%oW?ֻ~.߅xe@Q@Q@qkoE?һz~("PQE}No;&rg +_ퟅVy>kҨ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((;J`lw=?QkW%C?T<=_c> +( +( +( +J5/Zq#yey +:ȔWsguInmҭ׍#Nzv9xzUmRAb +ÓW6_`Gi;Ep<+#TWW zeƞ+׿g _#ywM*E7P4W_?#DQ-8K|G}=\zofRyo?zOoONYm>.-.ݫOd𮼚67I +K-<{PtQEQEx6χ̚g#`i&KG^_5P_rx6/#86(־|<|5/#EPEPEP~бy Q&\Z^[r}.a?|@}IÒe~Z ~6?uTQEx11<3\A|y7kGpX¼%HV`_~*EU +0|.V}gA +ր +( +( +(<3:&6>īu$H ~GCj ʹ}SD ۴9{h:(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@y?ψ-6lj̧xO{ +~!Z]Ͷ[[K\#zEǚ{j:;Owr䑻o@: +E7j0[.$>=oۨj ++c}ҽnQ@Q@|CMJ3O?o~=~)KhG;@e]oLg?ҹ*P4QEQEQEH&~I?|I/UCzP&_?MpWa*? ;5`~-㹸s) PȴW0:\ GvYx2u*?ܳD?>%վxSFt:ۗ' wEK +q($d=~>k>F{yxޝRQ^Ȓ7FDdt%YX`:)Gß:o(TGm g.=|#֭um6cջSهu##+x>leıg&)S? ( +l#PI)WSmM?I嘒~(?fxkIs^^5/Hu㦽ƀ +( +( +(> "5+q.g\} ZB|M5@3M#,}_:-W+'o񯢨?Lm M6Fչ\VĄ:a(?g8|=ɩϰ15_>kh((_W,\}PӪүopw(I7^^#5|5s^@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@r~<bOٯ~xOq5Q@k%u'Rʻ};/si>'0&ŭ#d?FWΔ|6KC:~\?t3 ?Nꢾӯ+폇Z>hWŤ{EItjh(ٮ*z̃5|5>]z17 H€1kfO<^^6zC?jR((()۾%jZ"H>cb0+׿g%K.Cb!i`^|p3ZZ( +:еZA:!4Dz:?YJ9V`pE%}#5SZ^!?u}4Lpg8h(((+ekz_xRp5,$v-g\xd +Zg'%g$?5{Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@x$O*Z +;IaXTQ@w?/i+B@@Q@Q@fwkUQլ*A=#d(z(phfKX_K{Ux_0m#gXQEQEQE6I(F8TR(Ejm3xjVbzI@3/vѵ xO/3㇞fv+ᇈ6? u|<`d6#$*(~~K=^^MT?ֽf +( +( +mƬޖsp֕axao?N6i}|hko\x#TnRaF^^K;bq;QeZS~<"kҫ.A d'|}EPٿ wvƻ* &KʇwQEQEW#I0 6W a}yb?PZ(.߅6N!ҽ&y t0F 39+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((?h(zѲ׏װ~PGe_Fϯ>P}k((((((( Ymnx%RE"V //.uM)YKi; lSueB7okg€>N.lnWdҴ2/) TY;S?d$O5Wnb׵츶[Q}Cʾ(>|_Pѐ>1jQ1?++ -g |%_qx*aqOLwր7h((#W70)KUÀτGkAoxz0SMhz(i۱~F?i Yn|p\!?QkRѽ&C +־F(㪜9XE9WPhQEQEQEx$Ih|OCo񯚫Z`G/<Ϗ٫Z+vhzzmE|]Te +0G~EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\ߍkxA}KP}6VO;A{~@~ Ф9?ن?Okꚜc +?sE~/gյI'DG`?XWYj^<1ZDC]]ĿՏa4?ï>Mwuu}XkG4m/MX--dh>IMCi`t6Џ;wf=J((+'k"+DtOJj~6ߊ?݇\Uu |L듌FhJ( +( +( +oDo𥾆2a'+(WF!X qG}RU~@3;}EP_|W]BPkLGŭpch\~0y +Gc|ca˫"&q:&?Ҁ>(((~=~)KhG;_YWZ9 PZ :SDZo~,oQ2Q@|-iOUFkm!x,` J scM/|x{0_0#܉#r(((1۾)x?%u|Oa?ď9ƣ2,Gb[{]vS5?{M#\~&HQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ^mS╷ $"?wP?~*A&4IuEa?_.&WyX;e$4˝Fk{rǩ&fx^&6mn>w#g5>|'wzL$M<wqE1$Q"(UE +@a@(((((((ʾ,(eƑE»Av^=Y:e8 kOυ|r5 hZgPq \}XW~^)m7SzgFԐ@dkKڣ~#uD$KVdPݴR+PAR2K@Uԗ~x@5j:2F4 hf&Oe}57H+ܫfyİgH?|(((|@ۼI75Sϙ+>~5{йwj6Zg+п%n[Ք# ת~Ϸbh}X +^W]o Li?po$U\ Qh+oY?ź͑/G"鯏3L{@O=8ٮ'u,-K=x}zOLic[b;PQEQEQEei \JRǩ3fmz`;;>aq0ꨃk_ah獮[{Z(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+h'cRװWO4 +(A{LHZȽפ_ +(((K6gN.dF ck+6Za>)I [(߂VfFXa2U 0 Ѵ]oe8h(涨g%s(}WԪkiFc6`TX_Y1-A@UbᐄmeLRjZSQAU((/v-8M1|%zxG+4(eK@Q@;EOei%#2J btû3aaNв?h#5 + +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(>` +F^?^GC~;T<=_c>0W%C?((((((((㟌6Ka[] $7I |/ŭ`)"I5_.OyeQ_ZŽ,ˏ_^PEPr7_ +u7&HeTkja<i껞k)Dc|=@}^,mfO4?gL]=ȟX-PEQEQEOhvY[&?z½-Ҵ9fC1Eȍ$2@w5W?|_ %e +ۛݠ(lQ+#b~1iTY^}0fCWTW/ϟa@kྦ5/zFNdl\+@Q@Q@Q@9a(\V+qo?*<[Y>p+Ƙu?@+ܿ8Ƕ4QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV_/BT%,0~ʣothRꚤQ]kTQOtSހ>1Y-#wv=3žCip9FvcܟӠ(((+V̦^m?0?=}^3Gin]NOթ᫱G'IJˢ><9 g:^~i kN +( +( +#غEP|CLk݋/>n`\}\үK,uοU`Ҁ>4I,lC+EPEP_|N|E09'_g]ovqwu=Ƒ Ac4svTQEQEQEv5w\](>_lxS7}K86rȿ8+z+޿f2מ!#T\W_m<u|ˆrUG뺀=v(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+(P.mmLwa[Ե$xtnrz9mVZ#5ª!$"FU*J((((((((cY|`y_`+׳ב~s,-#$nRC@.EO:-HOMkVOFzlK[QE׋ΟMr΃Z/a~*j.#ܧh?f˰)lK(8=}'_"ƝONF8KُI}u@Q@Q@gcOzN \GLi usl`$Q@M~f/w`~P{Ekk13^q%{;*+kw!h )B84!Hګ{#W;a\}4݆ӼCec@x0E{|:jbW pMz0#-_OPEPEP\eROW~fqC`L@|EPֿ,ͯ«i%zUs +ŗkeq컛&*((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((([!BHUMyǽu42X +yؤ; +Q◎^,{ .j 6hyr=Xv" +w­pFp̿ZG5jK\w2Bg3k>7M`!z*(Q@x ik1H@?UU?OSdT Ǣ`@ %ȌXut4y.4.c8 5}f/kM#mݺJ@#+R+wO]xR\MnMŘc }JZ((]]?i(Rq_/W} \=kb }[<\ (*I8w=#I D\D<2|MOu}!GG5%QE'u_HVBz~{򯡫⿇I5ML܌ +>1 TDV,p}?bna*{ějr]2p=_ƾ5 /jϠMգk; ky⺶te# U%}U# x1t{s,B~>=hh(+i-u|K^̾OWCgk-ċI*O_xj!Md@\t}bMt8uNi5S6T{#+?@-b H=F*j((h=#ԕql[dO5w w-nҟAa5u_ -Q@'L{pQ_j7o' i,,YG 9ϥw4QEQE74h)[zI&?CZ֯ih-mb2H{vk {Y}ݟҰ `0Ҁ3&|EK۹&S(_kw|2eԼM:~%##6((.tO +]_I~7L`EY9I7:='(}mlǕG_\O-W;G4NzG_mx0xV:%|mg({@ Q@Q@|]]gU>tqp?<kon +1 gZJxE{Wė73^]uq!y۫19$&"ֈuX++2o$Te+gO -S$&ܑ,}[{eQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@0~PGe` +F^?@¿*}_|+QEQEQEQEQEQEQESd!FY4񯎿4i|-LQL]?a=AiϨ|YCWWwt =BgV=P{\@+K;Tw_QW~m;VMN|G(X+(kXvK{fNHk?7&UK +~>p@"?UPW~ΚxF𚍸x$y8Y^3Z:s~W?eQ>d}EQu{M{El$ku3GQEQEp|`5ܱKPfdču|G Yc}4(Ob)PkD7;sl6:I'?}E^g3'@}T6G")!ͪl8D~W;o SU6b?55W/'nR¾v$}ִQEQE]u|5[W-??+rrz׿~>0G6%Hq?b?ݯCx]JEĚ:u>AM3NKM:7Jƾ44- +JSgBvd_(9g숻/c1+ѪXo@OE"V#45] xPѮsZLц#/UoH?eP? u5_d4(vƻj|i^ ܻm,=Ou?KTwh((U>ٮq{8?WU_X,u1W?tC|1lׁ$+~oMa&`0.߂kaEE(QE㿴Voe"9A+ث/Ě,>#ޣπ4[+~)Ue$rS^ϧ_Y]FcUe8#} q8hP?$SQ._wGWaL82a["1PY[iP[B#1U=PEPEPEPEPEPEPEPEP_;~:Mh Onu0|>V?!^i.5}N]0+EWŞ"o[+{Tı=PEPϿD.W1d/~>,ƛc'_r?JBqz |&Ĺ@O/?)@EPEP^Hh4UAUԳ5r:jYݎ$WşGTu @EPEP_6K|8Zy@`p}jv6u_J"`_]7u f"Kv/E_@dׄ4V$)eD9s(&kg? rē':#:EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^Eυm [Iʸڼ2}kkioh/?hRm7V_2r~+4?[a9n6I|6h识4xIU]?]ԭQz$WNg['.t7ДWǯְ䕋xڲ$mgdSU4!xc195HŽ-a>d>޾lkU(PiHd=NIɢ +(Ha{|[hQ7& պv_灝dDGhlLJ{VjKK{ 8m-!HmAqU + +( +(>d|@& QmG_Z-֓EܦǡQ_uTַAp'o {W47v7>DҼy,jQM7̇5Og{u]wes-GrK e>PW/6%;-M挤?1[r~Һxr_Z~X΀>n> wwQ6D Тz˼M>'KGh,Tz$gEɭ^mjܮnA. G϶h~ +!'wyOS41Ǐ>$vj(((~3!'/-ƗOOb=+ͫxR~O)@C ? ޾7?5?:&99WrT{<_ +x"4'?,~78=?xH񶎗\xOl7zZߥ{5}!r}G>_hYDj6v†'?]o䵥?+d[v91I;8Bf 2I_:gԜ^Fxu=t|_YPl߭qc݇&)E$Q# _2E_Ms޻(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((jZƙBjNXb2xO?w?Q ߃kc_Q@ow?W}.KS;[Rdq_:Q@Q@h7Z(5emB A +2W; z a +(NC^?; z a +(fD)::0*FAuX7C}Zؠ(De-^Z{r "~4w eta nxG7^#H}@=/kS>b#"u=u@oGZGtt4?=gRЯJ:I czD%Q LN]o䢀>fTRB$++WVhȶoI~\(񵾡Vm|ϱhfb)<12weg +{zQ@n'ci%"(f'_g|5r'klaV#>{ך|[%EvܤnrVy((Ms$3"R)WF /OҬlr㈞9+_qZ{P5|>F +ZJwv=A:\_hƛ[= Hr=S?-/LZvwyuakR|Kb.5~WPkt;v4>&?^Hj+--丹8`K<0UP:OA_9ҚEa iyB7N_Rw+mrhLxh<4[wr>Ga߯,7[hd =Gq}p6]Kku 5KgNPnwG,munߌA6Kl^cHFEXLg-@J]KRa]K+`(=ηߴ,eltM>ݏJ.?Vľ3ޥ-S>0@'_2YXwţZ1Fda{khmyX$qƹfc|9yYh@|dFs}i.iY&kX( s\/_moU[QBDjR{`+Ѩ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+Q>\mO\, +n㍶ Aw?W7'~C?U?0Uum7YՍƗZ_@dhZ̲o6STq+袀:v+ˈ $8DA'_Zw?WP?0Tw?WPܖ2v־$縕GW3;&⏇R|9a!_kEPMQ4V*Ai%Ě/m@zoV5{2>ƟkʪڗlW_ֻ{.YhnOЊj7lmŬ߂VC@{Q_|PŒ{Iy F[ Tu; "Ѯ{Ku$_Ƿ>עo5 gJWRIqM?Kۥa> 2z[G?y۲IxoN+H9'G?@+#^&{k:tS!Pz*{+* +x2_xO*a$~ Ǘe;\=eu #  v^D~ٯKK#úe">͢quU I&9hdfߴOo"h+ ?#`C+q<_-#Z;ICnT3w<[XV(E$:k}yrdzA84WCx1\ŝ/LebGQ?2}?]CP&ȓXrkRV?YHM!~v ( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +t +W:Ƨ!Kh$(;'կ3$!|~;vmmUc/E{G[؋KA+a.Xw,qu=i46-A'J(NC^?; z a +(NC^?; z a +(NC^?; z a +(NC^װlKE--[ʲ! #|_[ +QYcPQEQE< kQnԳ}7Wu~KMFMoIreAO?(|[,=\h l 3zdG>CƯxrdz ,w\pC~dWԄx ,@E ^=1|wīf#Qs5X/iq-&?bq ˙.ny;Y\1$hMGPյBfC$7VcUoxHkpǰz +O q/b;l!w|R}+誫i>mXBF#5>QEQExG 1eQQ3?N}sm 嬶1,L9#qF#'^Z[tytK&~_-cs GCA~|UKK OUʲD! 7e\MoB%}H'ٮ[Qݮ_?-ր>0Zd>*USj迉㯍x㧌^. `AHU}#긯6wydi$fwbK3}IY'I;by$Ez7Ÿw87BpgYg"=+}Cid*lYV c{׷!;x#8P0@v((CXk/[# +>pFּN4-wHD֗1C=<؊|=ʴr֗@|aB(5+Sl&hnE"#nÿ:g4oD6e'ӡڦym#;X)r(+m~|z/猬yH&_ԌxÖr~X΀>nHDsqql +?g^S_2$/lױ0XpbK~>QEzx/0t1Ӻ@; R-B9؜?P;WEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEp>#ZxEV'n Ksӎ쌏sԏu]V[.5-J.|9@; +[C:{-xexg5ַaipӽq<~@tPںo|ii?oi$!G_?0U'~C?U?0U'~C?U?0U'~C?U?0U򲺆R +AZa oU(_x'Um Ls1P}<5CPT^Ke@fּ/>kRVd`XǞ-@[OjG(+㨾2|@@_@-UE(P؄ 'w?/ +V)#K[[7 O|:5B3,bqV=t4ֳW횤b">#A`W3EW_< 𡾾Eac!<};W {\[ĶQ%稑P; 4d*C aڜt<P$2O@(ΟasjP7,QFYx<;L %<~}=:+=[n2bۡO:EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^k:>="Ka5#$Wx`TPï^kX͌ W0A0Gj? hZ{ {tv|)E}{[7Є.{q"~V4߳ς9IuX}OC@,Q_Pro3@Gu#A>P"D4m"s(]~uƗ;+r:י<B5Ԫ(UPP'|;% ,`$Dmo ෉"5 +ơU@IEQEQEQE? i^+$5{UFݙOb?E|o!ܒ]i1 Юfs̬Qԫ)`_V -wR5ğ~u\1Ehhn TsrM?H깦i:xzew 8#,~tv;z{}.[ ð"7IӴ{amX[YBxJI&ݵ=4dT$m:ב^{_7~"vTЬ敾ʞ\?|IE}Wu>x"ቋJ܂Utr6ZZqǏ1@.֞_wGӮ/&=DIz($W՚g_Ru3??wV6zuXkؠ"P|;kٯ GՏn߭{MPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^/HțCi{E?t?赭(((s^Ѽq}UL.cH[O<ʾcFI&KfԴȻBp?Nzk[}/;I6rzdO.Ct?q_nl="Z>Utr6ZZqǏ1[go鎮4oH?g9Pz5^ MNx_vn=/ïVj&hoІys;+M>ma~PG*z((((yF[6K/b_= xS$xjIm@_W,'Br/+xgڴgA[v|eВwq4~-,Rk߅./ &>WG< 3d}}5i:vZxV1W(🂴/eѭegYH+(((+~#Ӽ[$|ϑu=kըE{—fZg9Fc\p:į-ẁฆ9qE =\FwGm!+Gh@PtWrξ zC.#mg@&p=%P?v[I5"Y]]ru +\O{(u}袀 +( +( +( +omue|.brZK6aW@ ^9zm5:aJ pMfW6z[_Zu}觌:ŲG4i]! վzgD:&Y*ٙ<,?:(oBI 3\?2Lެ +訢 +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +?_J? WQ@Q_@Q_@Q_@Q_@Q_@WiPEPEPQ\[wm%)4I#C+)=EKE|,Ȗm:G'sc{}x{ݽ E4e~kFZn"W=? +>PK-=fp?&g?ȿŏ@/SIXFG8UQOm/ڰ3[^cD|mE84{;6 7?<'\ץ_Y4;ca +~չ5ҡ4T|rORO((((ew6"dQVwTҥ۵Xړsz׎[Oip0 pȥYO_}VV1}*f3/Ѻ´Ww| xŢk{#Y^ݟxtMkiq}r֖O!Ef>rk`]^?-6qxwF!1i]" +[zƀ>-CP+nad=?_Z*O!QEY +( +( +( +=HLRNpx*{2QZtP7xzI.DWy Fz2_Wk&/ a~ 3ŏ@/U;LNPF]+?g;^0nnHi6}Kl*iQTDP@>(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((΁^K^_@Q_@Q_@Q_@Q_@Q_@?m\ +EQE>~&:挶"6]esv׆[WEQ-$?F: jٜۨ ] %4m ԟȒ(j+IgoHrZ~p 5?gO/[iޞ?|E}ki#v4k"#^И>X[Ƚ%XAq9?|ៅ-SF:Tڿ]@zya5%RH&]WTB^DQS?4PEPEPEPEP?h5MonL3BުC޾exNI'M4dd%W2=(Wۚ߀)7i5] +y[Lː]p߭q_.jhnAV(tr6ZZqǏ1[oOH:5SPz6xZi}ę Ǣs_@;mK'gnZK+ =6m- ~PFG8tQEQEQEQEr^:yO_ D?c?5>I%ś]/"K?SК&WZk}MC+reL.O(A?rW?ׂbcT\^/ZYz=x# :Țw2⻑NҀ>T]}M鳆u\F9~&qSOjǨj농@6AwS8*REPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEvqu"xRKxWۯ4+Z)٪.W ceo,2Os_3o ʀ;tbzY'FGbrX@RY$zJ+~xZU{/ޔnUA + t߳'m4W9n~ߢgϗ; q? (hQY,1*6'5Oo5 2E*I袊9=M%5nKy] n|OJO?!+((>'x¾51[ D>iOBk_9^I&9+J_9^g?Վ'i|9Exõ^lu1>FDu(3#0=+kh"PƋUaREPEPT-L`5=>/\D#EyW~KV &"sdyF?"<]oywWtP_bThMF Ndj]NS`EdVSH0VNQyh)FҾtjD\iiZ)"4)0PwB +ٯFsC x]%HJI>u8诐?vC$~!Vn>@tCI[o?J׾.>^IDB +hШ((uJ6RX(d+s;t:}e8?J-sƞ%#1յ˔n + ʀ>ѼGxvOwVO&B^~ +ijɌ{濕}EWԬe0eaEX((( Ky..f#R$TWKO Z-nXAexf^]H%ukOagD?9u.#7tboa yQj5u>-OZ'A$#'+(x1xc#e_梴~!x:OE{B"%>̵tN~bmn-%O$2#|ok?'zeGE}Ex?h$#рX7f+ߨ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6ƴ1bOb\{Iwskf~94W8C(I呀VЪUkcw8ܫ}PW+ை'tNRW3Ḧ8+((((((+5|_px/Jk՗u*W8唌s^} k5@0Q^෇o[>g X"5/nʌ9Ѯᇂ-l~ӘXh+~2e*<|gO5Hsq_#|Ezw±I}bFKI +,cՓ=>1 =uX-"cՇB~|KTPnmsOUGC؟GB/9[jd+wܧԎ{^,-uL!qxs)ck((>#I&Ѝr|G?MH?/|s]?S[[OO`:{b`FW9\lb&+8OFR?OPWQYTծ ?{*McQ^_ q޶4)S&Ap[p=(O +ңSwm>0Ԥ.}01u|uip\.q;x#|^s+x?_v1-q : =f}eEdt +( +k,%*I)<_ ZHB7O'!}=Ҁ8/5jo =1>OEVxP6z-LWlvf>O`k4L4R0ف鸂X~ @8_cY|R?yLLEj0<+?PĔW8\Cx_IU_c| ?$;E|E}ͺTͣv%k*2HkͼCKƚycMNy,[y @{xWߕ(HnRG"8 0AB+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((($xHxWZZkFnүA푕WC%C4mGF*=k e3yh4s +)H*XA%MkwqcsͥĶrYO#^Ϗ*!#Wx̿A5P7 {H~/5ЦO:+q]ghAL?=UWPdQ_ +&tR?50? U@85i|uߠu?m?}mExJDJ:KlU~Y+[~7pMv4QEQEQEQEy$䯑+뿎?I5_"P^5îעu_:z'@HQEQEQEQE6V]\ȱA +4HDžP2I|[77eΩ)e˴qܚ -F M&"o̕u|@W *xį_NʰFYf<v_ > ooQl$p$r ފzw移c(((\xö7/"\+/yu#ϾR2R`ހ>>_=}MX>=CwWǁ ( +(>(%'B5QJO!7k+/4h,R>>Okn#[g\0Ҽu5@Mү U= u˭#S˺m;2E}^?Idx!0~O?; +(>67m>7C߈~6ߟ3Oy}@Q@|?]kZ1"k6d;P WۗuD- +I$䞦4-_lt@<%'O?gפ9*3LPL]"h xkNoi!>>i_O[(((({ľcƯ,\ *}sjh +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(<O4idLhs_BO+wo5Jh( +(;O TW#k%wd=E}?|FoX6Nzutb*@Q^3AOZ_HyG?n=}ր +( +(/ :aIEo__MZ]x3P]l7(H}+ƾdpx\ڤqQEQE|QJO!7k?Bo/@}7yb5_JAi ȸfDZ%־S 'ᆁ2[ 2'?*h((*+ho-&Iȇ)#5-y*@čAbP?m;w<54fL!l -V@}Cwmͼ,xCe# RW~ŔjNsY[<~#g5*!Ԇra|??}(E,sD$l2 cO(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((wo*7TQmX7H0}~BpZߤNMfTJLν|auyh"dP=Jpz+_?4_C-q \G1G?^U{X/ZLԭݶ~z94A:_[|x]ڶ9<ʟ'3޾H/[?4ًqip c?F +"((;$W~%}wI&9+J+fuOBk\D +( +( +( +Ѳ'.TӮOkv/SᏈ6mQ@FHԭ|iI6 +uPCI[?vC$y~!Vn]a+7^Ez.߈0䕿o?Jן@  ?%ouPi|Z񾵥iZ\X +S!.(\gk(ȑ^G^<JI@SEQEG)>#^R|Ga #\l,[P0 0=6ҾwH{+(((( xv CׄWпƒg$_=P_M~%eF?_2߳S]F5?@EP\_/3ۅ]V̙- 2}@[K^\ȸeaP_~h;ܱsQھiox6W:=8[|,=9:(4kZV$A3 ?P]ޓvչPq8Ɗ#I,j>Y-&gq uҩ ,-ފdEt`!N=OVP6slɇv**֗VC/m1rW3TTVVJ6 =AjZ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((j^O[DBN@c}vZe|ESNuZK?R+*)A*A#%o izwi u\w™ |,MzQ@Q@#(e*#f c~*-$nUyXys30}(.-紸!6*ȥYH= G@oڏ5$FE-s4onb>4{){[E"OC_Wпd +HXB'QqTQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEEs*k4@HљkZ7⦾qܗ4Xr }-(τ~x}OSn[f?ֻ:t s =10iP浨(>8$=}?]yGP?2_P^5N׈W~#^ +.X- f]:y-IާOYk +#(xG TrO齃#UQǨ#a88%v &(h2`Kqv@S?qu)>䢊(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((wcZ@cBn5$Tcڻ^DpۏEoߞ}>:XԿ)k(+O |TwEgŢ`z +׼?Gi!b):ԃ+}=|/nc+HQaJEPEu U, +u2iI#5,P9$W_:@qobD>ʿϵ|ZwZqa"&t27}8,`7ROvƱ$BzyzGayP]o? i67@=ip\}I'MCSPQXsT}XmzQ@Q@-zWsa6I_ + 0 A_B UH[kX3H4]n=v$ ֒0A*A#}E|(,ae$j_ۀǫ}+Ӭ+E[4iBGvTW:<}3 VT;O|CVUvjntkp ҬuRFyn(O?Wƞ +/y֌{J#+jXgdh半0R8 ZxḓLC}=pwGկt-^T0H$ǯpGpj|yB[VX#n eo꧱+- ^7ũ7omuF^w :} }௏&v#Uү7&C랩@ECmuo{n<2Dᕇ +( +(f +dڀ~ u-兡>.@?R+|MF\+1m.}Bj[Yt+o^LA>j|%毨\^Nz4GE¾((>#I&Ѝr|G?M4<.GSARu'k[)sVƀ>cxf9u[`#qvp?ϱ]|/tS)d^ø?qȯ g@@%FfLۯwQEQU5-RGR1g +@NM|x_]7M~yz3~'kQ mM$cݐUTuT=a|b +( EiyW.aO$A@:Pꗾ(OڃmjH#?uedxc֞ݖd?umRrrk^ +(+^! Tu'Y_ZjVso K VW?#I7kx]ןs19dSO(j+ ~*Am''?o½cB];]i[7&}6 3@EQ@Q@V'<_J:6H$u'PG%cRP襯8<_M6qeHJ"mG׾E.YGd6~S] o{k59(<V=sIiơhAˠ(P~%lUI? j.X$'+;K^<I[ szk:}{_'&(d{- k~6֛= +ιGu Ǡ +]9+Ssɟ?v?<{dVGAql0?yiExF o'BťD}RݸהQ@Ư^_!h-OnZOzΩ^{O;8@NfQ@U7IumXN坼E@Z^]P璇G~'> QEQE|QJO!7k?Bo/@A?}y/Ѡ,0$Ġ{־~>"|: |GJ$iּ!!y +Iwx)cbU[|Tg<*0" Eu~30Dy?j(o=x +ugg [_u{(<xVuQEihME4"[ +=XQx +E$$0JKw5gCaHw/_`<}풟 Yx0&4w+3cQEQEr?&(e\^ t0sui$Qlp2{WǺ|QV.z|Z稢Ҽ]= 5B9]]/(WբQ{X5TPDkS&i*!b>n';OTd_ڢG @oָyfi夑3rztPEpIP7-EwNp\M aOq KZiJRk>XSܞÿ$}^ѭ4:/*0r}I9$ÞҼ)GirOV+Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(* B,"Y"m[u]̺SHg3&>rz:b:g"[u?U^~^*&RҮѝяᴏ־>JGb8M:oxX?l]}}E|~m&/Ƶm?goNAJ^v?}GEx4mWlüvǘශ6Y?K@ 1[E *"U(((((( MCYe÷W{T-}c57ȟ +xN%P’yBN;#šiӴKO ?1 rе(((/,u W):+߀ ٤KI>LO>rԿfR6'K㰺?n$Gkeqҏ  # q{SE/6 ^wc_\Q@.Y0qw[/};.?Z٦!#I&Ѝr|G?MH?/H?/g׌_L?UC]556 Wr>MqulEmetxng_XQ@ c?԰|ktKqTPj.O|G& uSNK^OlEgn:KՏV>&h((((gYy|j>FƞS&\&:x^siYeA=^E|5 oD-s0#+3}_WQ@!7JxЕW3G?v1g\0EΗj%R?Ztٮ2ycG1lBފ|7žeK![, b(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((>#I&Ѝr|G?MH?/H?/(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((⏈R|Ga #\uFz((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((({ƿsZlt?6Ibp.,H8.k?vWPq|#(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( +endstream +endobj +2174 0 obj +<< /Author () /Comments () /Company () /CreationDate (D:20250212180444+08'00') /Creator /Keywords () /ModDate (D:20250212181507+08'00') /Producer /SourceModified (D:20250212180444+08'00') /Subject () /Title () /Trapped /False >> +endobj +2175 0 obj +<< /AIS false /BM /Normal /CA 1 /Type /ExtGState /ca 1 >> +endobj +2176 0 obj +<< /BaseFont /TUTFAU+TimesNewRomanPS-BoldMT /DescendantFonts [ 2514 0 R ] /Encoding /Identity-H /Subtype /Type0 /ToUnicode 2515 0 R /Type /Font >> +endobj +2177 0 obj +<< /Ascent 600 /CapHeight 600 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/a/asciicircum/asterisk/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedbl/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /Descent -222 /Flags 4 /FontBBox [ -451 -318 734 1016 ] /FontFile 2516 0 R /FontName /OZPIUC+LMMono9-Regular /ItalicAngle 0 /StemV 74 /Type /FontDescriptor /XHeight 431 >> +endobj +2178 0 obj +[ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] +endobj +2179 0 obj +<< /CreationDate (D:20250325170920+08'00') /Creator (Matplotlib v3.5.2, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.5.2) >> +endobj +2180 0 obj +<< /BaseFont /BMQQDV+DejaVuSans /CharProcs 2517 0 R /Encoding << /Differences [ 32 /space 46 /period 48 /zero /one /two /three /four /five /six /seven /eight /nine 64 /at 80 /P 82 /R /S /T 97 /a 99 /c /d /e /f 109 /m /n /o /p 114 /r /s /t 119 /w ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1021 -463 1794 1233 ] /FontDescriptor 2518 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BMQQDV+DejaVuSans /Subtype /Type3 /Type /Font /Widths 2519 0 R >> +endobj +2181 0 obj +<< /BBox [ -8.5 -8.5 8.5 8.5 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 133 >> +stream +xm; D"X63޿TP&}ody;Y3:u"B8Qv&Ġ10mbfTVVKx_w'9.VBg]hC0Vo_:V}Jt +endstream +endobj +2182 0 obj +<< /BBox [ -9.949747 -9.949747 9.949747 9.949747 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 49 >> +stream +x3P2P5P5ѳ4471W3 rpn.Tj +endstream +endobj +2183 0 obj +<< /CreationDate (D:20250318095314+08'00') /Creator (Matplotlib v3.5.1, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.5.1) >> +endobj +2184 0 obj +<< /BaseFont /BMQQDV+DejaVuSans /CharProcs 2520 0 R /Encoding << /Differences [ 32 /space 46 /period /slash /zero /one /two /three /four /five /six /seven /eight /nine 64 /at /A /B /C 69 /E 73 /I 76 /L /M 80 /P 82 /R /S 97 /a 99 /c /d /e 104 /h /i 110 /n /o /p 114 /r /s /t /u /v /w 121 /y ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1021 -463 1794 1233 ] /FontDescriptor 2521 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BMQQDV+DejaVuSans /Subtype /Type3 /Type /Font /Widths 2522 0 R >> +endobj +2185 0 obj +<< /BBox [ -8 -8 8 8 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 131 >> +stream +xmA E=E/IKEekLq@L4о<~QN$ KNzӐҺLղ(ǠQ-u8pctx6ޓ?Y!F?{C&\)1 /^~cZC +endstream +endobj +2186 0 obj +<< /BBox [ -8 -8 8 8 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 131 >> +stream +xmA E=E/IKEekLq@L4о<~QN$ KNzӐҺLղ(ǠQ-u8pctx6ޓ?Y!F?{C&\)1 /^~cZC +endstream +endobj +2187 0 obj +<< /BBox [ -8 -8 8 8 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 131 >> +stream +xmA E=E/IKEekLq@L4о<~QN$ KNzӐҺLղ(ǠQ-u8pctx6ޓ?Y!F?{C&\)1 /^~cZC +endstream +endobj +2188 0 obj +<< /BBox [ -8 -8 8 8 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 131 >> +stream +xmA E=E/IKEekLq@L4о<~QN$ KNzӐҺLղ(ǠQ-u8pctx6ޓ?Y!F?{C&\)1 /^~cZC +endstream +endobj +2189 0 obj +<< /BBox [ -8 -8 8 8 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 131 >> +stream +xmA E=E/IKEekLq@L4о<~QN$ KNzӐҺLղ(ǠQ-u8pctx6ޓ?Y!F?{C&\)1 /^~cZC +endstream +endobj +2190 0 obj +<< /BBox [ -8 -8 8 8 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 131 >> +stream +xmA E=E/IKEekLq@L4о<~QN$ KNzӐҺLղ(ǠQ-u8pctx6ޓ?Y!F?{C&\)1 /^~cZC +endstream +endobj +2191 0 obj +<< /CreationDate (D:20250701155138+08'00') /Creator (Matplotlib v3.7.2, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.7.2) >> +endobj +2192 0 obj +<< /BaseFont /BMQQDV+DejaVuSans /CharProcs 2523 0 R /Encoding << /Differences [ 32 /space 46 /period 48 /zero /one /two /three /four /five /six /seven /eight /nine /colon 65 /A 68 /D 76 /L 83 /S 97 /a 99 /c 101 /e /f 105 /i 108 /l 112 /p 114 /r /s /t /u /v 121 /y ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1021 -463 1794 1233 ] /FontDescriptor 2524 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BMQQDV+DejaVuSans /Subtype /Type3 /Type /Font /Widths 2525 0 R >> +endobj +2193 0 obj +<< /BBox [ -8.5 -8.5 8.5 8.5 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 133 >> +stream +xm; D"X63޿TP&}ody;Y3:u"B8Qv&Ġ10mbfTVVKx_w'9.VBg]hC0Vo_:V}Jt +endstream +endobj +2194 0 obj +<< /BBox [ -8.5 -8.5 8.5 8.5 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 38 >> +stream +x3P2P53U\pf a"\\N\0 +n +endstream +endobj +2195 0 obj +<< /BBox [ -8.5 -8.5 8.5 8.5 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 35 >> +stream +x3P2Pbc=S\.]&r\\N\] +endstream +endobj +2196 0 obj +<< /BBox [ -9.949747 -9.949747 9.949747 9.949747 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 49 >> +stream +x3P2P5P5ѳ4471W3 rpn.Tj +endstream +endobj +2197 0 obj +<< /BBox [ -8.5 -8.5 8.5 8.5 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 39 >> +stream +x3P2P5P53U å`fpq9q% +endstream +endobj +2198 0 obj +<< /CreationDate (D:20250701155737+08'00') /Creator (Matplotlib v3.9.2, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.9.2) >> +endobj +2199 0 obj +<< /BaseFont /BMQQDV+DejaVuSans /CharProcs 2526 0 R /Encoding << /Differences [ 32 /space 48 /zero /one /two 52 /four 54 /six 56 /eight 70 /F 82 /R /S /T 87 /W 99 /c /d /e /f 104 /h /i 108 /l 110 /n /o /p /q /r /s /t /u 121 /y ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1021 -463 1794 1233 ] /FontDescriptor 2527 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BMQQDV+DejaVuSans /Subtype /Type3 /Type /Font /Widths 2528 0 R >> +endobj +2200 0 obj +<< /BBox [ -8 -8 8 8 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 131 >> +stream +xmA E=E/IKEekLq@L4о<~QN$ KNzӐҺLղ(ǠQ-u8pctx6ޓ?Y!F?{C&\)1 /^~cZC +endstream +endobj +2201 0 obj +<< /CreationDate (D:20250701155743+08'00') /Creator (Matplotlib v3.9.2, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.9.2) >> +endobj +2202 0 obj +<< /BaseFont /BMQQDV+DejaVuSans /CharProcs 2529 0 R /Encoding << /Differences [ 32 /space 39 /quotesingle 48 /zero /one /two 52 /four 54 /six 56 /eight 70 /F 83 /S /T 87 /W 97 /a 99 /c /d /e /f 104 /h /i 110 /n /o /p /q /r /s /t /u 121 /y ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1021 -463 1794 1233 ] /FontDescriptor 2530 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BMQQDV+DejaVuSans /Subtype /Type3 /Type /Font /Widths 2531 0 R >> +endobj +2203 0 obj +<< /BBox [ -8 -8 8 8 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 131 >> +stream +xmA E=E/IKEekLq@L4о<~QN$ KNzӐҺLղ(ǠQ-u8pctx6ޓ?Y!F?{C&\)1 /^~cZC +endstream +endobj +2204 0 obj +<< /CreationDate (D:20250213103230+08'00') /Creator (Matplotlib v3.5.2, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.5.2) >> +endobj +2205 0 obj +<< /BaseFont /ECACOO+DejaVuSerif-Bold /CharProcs 2532 0 R /Encoding << /Differences [ 32 /space 37 /percent 40 /parenleft /parenright 45 /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine 65 /A 67 /C /D /E 71 /G /H /I 77 /M 80 /P /Q /R /S 90 /Z 97 /a 99 /c /d /e /f 105 /i 107 /k /l /m /n /o /p 114 /r /s /t /u 120 /x /y ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -836 -390 1796 1146 ] /FontDescriptor 2533 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /ECACOO+DejaVuSerif-Bold /Subtype /Type3 /Type /Font /Widths 2534 0 R >> +endobj +2206 0 obj +<< /BaseFont /BMQQDV+DejaVuSans /CharProcs 2535 0 R /Encoding << /Differences [ 40 /parenleft /parenright 49 /one 64 /at ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1021 -463 1794 1233 ] /FontDescriptor 2536 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BMQQDV+DejaVuSans /Subtype /Type3 /Type /Font /Widths 2537 0 R >> +endobj +2207 0 obj +<< /BaseFont /GCWXDV+DejaVuSans-Oblique /CharProcs 2538 0 R /Encoding << /Differences [ 80 /P 97 /a 99 /c 101 /e 105 /i 108 /l 110 /n 114 /r /s /t ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1016 -351 1660 1068 ] /FontDescriptor 2539 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /GCWXDV+DejaVuSans-Oblique /Subtype /Type3 /Type /Font /Widths 2540 0 R >> +endobj +2208 0 obj +<< /BaseFont /BXGEVL+DejaVuSerif /CharProcs 2541 0 R /Encoding << /Differences [ 46 /period 48 /zero /one /two /three /four /five /six /seven /eight /nine ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -770 -347 2106 1110 ] /FontDescriptor 2542 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BXGEVL+DejaVuSerif /Subtype /Type3 /Type /Font /Widths 2543 0 R >> +endobj +2209 0 obj +<< /BBox [ 0 0 72 72 ] /Filter /FlateDecode /Matrix [ 1 0 0 1 0 456.46934 ] /PaintType 1 /PatternType 1 /Resources << /Procsets [ /PDF /Text /ImageB /ImageC /ImageI ] >> /TilingType 1 /Type /Pattern /XStep 72 /YStep 72 /Length 169 >> +stream +x5 Cw~!kKdWCEEz͗uOFtsmMxYǬuuZ4:MN PtQF##d$&&}X7)lfgFtxW81_0d2Otaf_P7 +endstream +endobj +2210 0 obj +<< /CreationDate (D:20250701034612Z) /ModDate (D:20250701034612Z) >> +endobj +2211 0 obj +<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter /DCTDecode /Height 1272 /Subtype /Image /Type /XObject /Width 2527 /Length 245856 >> +stream +JFIF,,C  +   $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222 " + }!1AQa"q2#BR$3br +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz + w!1AQaq"2B #3Rbr +$4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(!dMPDz~?Φ()$c, +g)`88_n¦|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|_ jDur"U_)0?zE 9($p*/n?ߠ) N>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|>('|ɇX?JoFi$\c@˦)h(, p*:~j7S(!Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ(Lڍ()PTjpjJC +(!dMPDz~?Φ(8zC~8b(((((((((((((((((((((((((((((((((((((((((70?LL@ )%GtTPzQHzP6jzۤQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|\;qz?oTQELje1Q@Q@Q@Q@Q@Q@R3*hhsǭ +t4QEQEQEQEQERo]w f +( +( +)4QEQEQEQEQE!u>((B''-Q@ʿyZ(((((z۸g4QEQEQEQEQEQEQEQEQEPNOY[~(((((( ɤ X(((@Ro]w f +( +(HB(h(E `?CK@2HޔFAȠ((((ZC +(!dMPDz~?Φ(P߅OP]o€'(nmd35q:c>>Jl!"xw8}֍݀ҋ~B/;ʧ#ƺ5eu # wVFkh؍YQoJQ}3NAiX6t'h-M + HL3G K`?\߈[_QX6D5Q!0 3xsʟkSi׺mI-0 Ұ\ۢ(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES&S'S RJ*J)JZCҀ!'t5=AmOjz(;kin%84.@]_Xm%nQ\chחS[֞-u?hmA$_)}8kѯ.ϥyidSz!'vZx[ho-ӐssZ~څl r>ۃEC^P4;LI?:G+ 8pxcK6i R)xdے}  κWD?&;cֶ+*^֦{ZeQqhfm_Srļ֦Z=Hdm4t?QZqk8\3m }3ڗK}|SyyZiZ3^Cm ipa]GWau<ペ|q{7233tV-5]=R̨W\峞+5GN9f϶85^g΀3DnPz:?O@Q@ ~{SeHbyepfcMxŞ3פClu齙A8>z ,DpO: {n<뛦 ̷N*o앺ƣ}K,C0,ь e}kռ_I[*<PkcQRnl43ѺW ƿiwA-_R1լyC߆*j^H~k:}W?mn&4*WI&.Y Nz+mn']T ddךx[oN겠^Ckߞ$+~HY5nW(#q''p1-}W)5]SZ\\iR; +me䌐F}~kwV%.B*`sۭ/&Fqi d +/>uaLr62qc?c[g?'hE2*z,׌|~W}guS<''-$vmlms^zVZCZškJ?*.?]v$ "_c@]eu!|0^E/k_m4;m@$yHr.3Oz_O1rYTQ\gĿ y~tTBqR%s4Wi?o|IG7qS+8l)5]WZ\\iR; +me䌐F}~|:סꔀ2Ey_Vy&yI3ml/_F:gqpW^%񵠱Ս՜^TS:g :zQW9;\6O>*o +xJk|XCodlG~i-[\ .]#`q%A ^ĺT_ZP>5Yj `ۜ4MF?_t$=GيBm3K^.> ɥ鿷Hs|gil'?WGw!9Zk= :6q SCǢMPI/D6oA.ItyCؒG=Z += Rtv{p9J/rIG-H?{X 57ß >)5cXt{j^*|=|$l53Tyv WG\Ak;6gc 78H}m"23?y~s]ෑ?0 䀫Ң_"{;WMse$LHBd'Gls9׈|HluLPH,;m$ +٠Ot#8"|7F݇`u6O!#ֽg'/)q`44[]ΪA_4x2okoody1Dגq-?ֵ/BbY0cwPF㑖$҆߭x7O-zG֟Tǁ5qϯ:Ա#9Hݓg#@UVvjZMԵ6^3wy~f@91}ɔcZ(%ks+A'd0'ΣIEpZ6D6($p* 7֞ t]FYY涎1#>\؞m{Uy~*]io HEܘ{ְ5+||yE uW!Hw*ww0|G#XUzݨ/줻MRMGݤA %Kq3YQ{ s l +ʸzsϭs5>I$1XJKI1/˯詪 R;!,xJPI▉X@4CO$?W~U}gu |/tXu=c_T05Cc8?/zEx~v4;XE>_8`=}kh's˾$|Cb v0u)`rʪ99aKD^H`:RSƵ/<Ⱦ\q _?\֟>8{ ׭SG܏֜>7 o{=OTռ5k}ح܋Ryϧ5|9CV H+ cJOh|CYr׺{_tlqAR3o8џA&B:_׶:#M0O0E[ԜbnIX݀sOsU> Z Oźu!F9o{URM`;S [^V gy 9dn^T淉U-cSE5+V4S{z`o5 WU{m>¢eV>/2HD X)ep;O[u6=/Go<o"[,pU<B]Wún:umΨPYA8a $8i%uv @ kf־/xL{=T 8 'i ƹ{]cE$IHv$+H`@<Ж CVrt+A[7q2EyAx#AkXs*1RnUڇv`VJ= Rׅxts-]76{L.A 0zr29@®_"V 4cُ`[44t +ڒS+|9[|xZo PxM ]j{6p[8RA*T qޟ/Gg+n|Cmi"y6,&;a ϵNȮ=3Ŝ;[?pכ|~]bMTn~cVK]"X,#9^ o)%/mH#gQ~'zmh֛Å8,-Z_j? +ů4 by"V)ux$nS0G~7K&d<3jq*4",,qXQ{ s l +ʸzsϭr?47mY-VI'$GSc=+yĺ*jxk䩷HK9:ҜV4}IN22+DŽC{Ht},[ ؀-$?<(FyR)9#cޥ[O +&XVFBת1^}ޥSPԡ'O-#vlSt$,uI'%.?ך| =IJx74DS+k?qp)kݫu8?hVt[VYfႨ(=ޔGo}gK^%| B_?f^rSH}aVy|DMN3"l? +y"UmU|}p~kRVH5c~w8UI'oO{:)5P= y˪|F[b*2;tWս4Ҿp .pr3`'H5qHzG+:eY[| =3E,N-zk,"D2PEUCqk[Iq`v>*x BB069A|ki-h0B`f$w+q5މg56@Ю1۟nlhޭ^DW2nE_a¨+?TԴ]463-Kαf|Hfi>&0$8B#u+WYx.85BN8%U-7JtvzbyXq#('$Ҿc!$2k y+4jGM⹟ Os~u{ XC ):UT|܎\~bEob[z!-1O-_O{ m6;KHP0?&h%b֖+ rq!2͆ +%xtώo5!!X!#f'6藱M- (j/iMn9TiA ?,PtQE!Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@2o2>7??ʀ)*8?ԧ=(nCS$]ȚX@/[tu{[_Z){<lF3P37& !lpdB*̽[-FWMfIT>i(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE@7z?oTQELje15|+gtj:) F?$÷2,W&c< +2qWכx 5 >۹tc]IA)ٿ0^GWZx_÷W˰d$+iy"(;:[Kx!%DC05ngiX@[BR5'任#~-Zip ˎ?4Ҟ7k l%Q! +Vyg;y$sy{0=q {OEgmC܅Q!أ$sʈ;oa_n/i4A04, xsយjV&Պ,(>>eWMϧj]חOL>/2;QoRh$ftkO\Tnx&=H9g<~?wDx(x> ڥK 'y?ڻ#?~LoIw}xYoxcPR1#DY-g$Wx?ּMc$9״j:}]{r.qμඣcs4v>.2/a>;Twr+ivOҘ5Pa\/Nτ/5;Q8m&H 1煭x9xټ`TC{y ++lv$ "_c@ksi^ڭjȯ|ch=9`'|C%zёO͌_旙6|=ş_?-{y~YIϲ}~6wOJ-L g,VxaH܎ŀ#A5SL!+ѴY[" /3Mb Mp>gxZbD *J0zv9xSᶝ-jmZ Ffa6ԂO9i~ jzȩA}ݕ~B?x)|mR{3–NysT2R &m[ou{-"o$ p:?J]Zc#;DZ6Pw+~ JڗA.m< +ڒuլ5ˁx18mryDN,ov?ㅴ3O) `Q?t oi^C0EȠ5MO_Lzb=<yiu(S50}>)'Ľ+9!$OF2#*vG}"MK+ru\|0O;axNմNDk4Ža3{WiO i*_Nԣ-;ņ֋FwpV tB_j́ux/V K;ˋͷ۞w[4rI5t]<-t_n.6>vqd<7yGŸ+:s^ת&?5S#,~|۽}8:Wmum&v1 +nqkoN}v2<7XۛM+LY\v@yU~իZMMep +һ:Տ|Z]S]T:Pf Io~r*Lwoc-:nB9vo|> *{F]U핶e5+5RHۣ^QqRg|Mqeo7 +nǡea}E.k>-s0cC4<Mt?2*o8+Rgc ^s9P!-c)"ꕊo|omYU ,ߥp^?)6i)QmQv~A$!qk.i~1꾛үRSlick7I&agu}ӡjԙj.'W-Jn2$>|~?i$lV -Zj<=xe^<?)e+2'2RLGiu +@yg?@P֗~ AW:C"[]j{Hqig3,OG#?h_2wL>ڿ|GIwD'G, Y~ NK<47$O@zÏJMcj쨉}~[91(M) i˻/|N8p?kX_F4[7Oku }SNMr/#ට]Im?0HXx lTvQT~?>:}EAxx9TY}[oCw߭uVcwbXcqK4Y&xo_?z  f;zW{U'{ݳ!Q&0.7͂sw|uK_|7sGX;"i,!w:6Nn/wsK%i-RN=[5)]vcnȱR{<#A!f_b0k75 n";E@-?: B;ǹ5]Qe⏍h'Tc{ܽMݏSaax7M܏~GG^syYuUT`ڼĿ i;IW}>Կyv+{9_vG}"MK+ru\|0.Ywk^[y!ËxͻJ*9F'WC\M,q‹vTz֓ Lk"KI/ 6rm SҾk6? ykbr  su wQsϜSFUjG]|-OI~l'tHr7LW|]]/,cU$)=v0 kv CG!"K꼕ߴ(Һ6l)mF)DWu/ǽ6I,} ?.O>ɽ+ӞΓ).ZﱓIFyݿ[^-]_j7ٻs铎\ |ſ̦O6~ǥ]״E%? ;k?2$Й0 ## -𽧋4˷hFLn:wA +/<7Z\%ȱG w\*]9|뵯אŌI(>W|8?|!}vnһV9}Gx? jU"0[6;qkߨAl])D;W$Ӡjߌ>XR:zfr;AV?y/U/Gͪ EHߎ=i+\_ vX,:N +2=?T "_c@d|4M *N+O;K=#[EwtO+Z+ϊt5Fu;#.\g}ׯ5ѷI?jfv7gzt޽*+2i1o2yq}OdT:χ4YFɘ_\@qT_]#P Y"'3<~[1~?UߊdMqa4HCĹu ϿTִ=톫}5W,&@ur{@c_4!f-ԀGT +>M/ƑFDcq;߭S}%+s|6Y|EdrE ʓ>MޕK-v ύw=T? +xQ)}56Zl6Z<c3A" φgP1qǵ)mwӼYsxK{ʊq(~m VkEVI<&ލH砬g3gwH.% ?t[=)-soW;7zc[QM^_3k}_iC;ٝ[y{qߵ"߳{pIZݻ?{q>kA~To33#=ia/O|8y׿5Ȼ׬ 7?-'Gcٻ8۴M<=܂3Ʃ2Rj8οepݽ30jkeӬ`DG8݌#WrAf>ϫ"c* +>\~kAu.ّI$Z +s|c΍*rc|_n ඐbHa0 Yd-s O$sK0]"ty `r dxC^1˨ eQҹh;zC(֌9OwQzIU*;IZ/!M̲H<dU|>oΡct7LۜYzU~" yj/~sI${V UUܵbV7E+ԳZ[A"Ճioeǿ#xUˣ\iRJ=>NR]V3#KU MKqNj9 PrOZkȮ{*)^ZaK/sW_E `jQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ލmirX]n*Xt"oxKoc9]:[T gS.x2U#q۷vQSR;Ɏ(^ +(4 +i (=u5Ck: +( +C~=Aw +(* eb\gLΫDW/qyy+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?GOT>Jp~Ty+Pt?N H?CUW# tT0X?QSPLLOMOOJ*J)(=)iJۤI?롩&%b*zPIE-4RQ@ E%RQ@ E%RQ@ E%RQ@ E%RQ@ E%RQ@ E%RQ@ tY 2%J7SR1̿ 袊((((((((((((((((((((((?oT߇(ڙO~b +*x4:񐸂&8q\g--8jLeʭnr[&BM`gR)NyEpīMOPK;&ij?wz+$b1 +*QN\ZhTW'BgzD@dyv}~uxsz!o1 q=꧅J: M)˕=M+?,7"[^p[hԞq˰%b4k6$h8f7??ʀ)*8?ԧ=(nCS$?ZUhj(1S4) $Hg=3~0 L~R}W[ZW@z+|=)QsTOCO]{Z?ҧ5pZ2=n\ȚiZVVq4p?xš<1rrUP3\}W8qM9`.wgO&!-0 y$zWq^1F +s*P`c9Nr +|O7P,m8ܳBFr^3)Ͱqy`ݎ?Z^մխkW56+;Q}yH|ʸSﱿEr$񽾇Yjߌ/ +:<3qjS`IdG77cO𮭧I$%Nv I{4.tBk>46A78$z3\Pz uy|#>}Đy{\xpp}+5\o<={$Q)Yn"N%upn#?V&wj;IkUIp1[ 6zN9=9c +ùV6kKI]J"qF#kO[>#Юt;fU)OCGj#W'RBj(¡>?MP2ʀ,QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE߇SEP_2eESdMq +m`k[@B9 ESdMyo|U'. | ќlltG O 8}?(ƼiW}jYQqMKQ_ +h@Q,(YWG[46#Ryb}O]Ǎ<2LJc-0Ч0WU4i{(T^]ʤ_ockG +!f$yE~,,6`$O:2>?Z'65->v_-9HNڄF8C#sޔa:NlSHBEmr]M#ٯ[ܴ)vT^EjWzgzjEz8Lh^R|}YZV]/W?WW(ЮaY6)"a1 #k+YX8EƊ8O|<$7WV&{پ]:ŕʳAˠxtp$?+[< :w5oj-K5+u?:qOh +WA?Auu-چxofg@8?6ִ}r@(LֲYbr@$=8늮"zi܏]OF(i>I3xENxhOGl՟h7.V`m +80۷߯Vt @̜F?IlS+<_[Eh?d ۰Wki?"Ԃ 6%6KpW).GbKV;{p6?Uq+o^ +mOX]9tj$F$ISzbk5}o1(O<~8"◂r3*D{ջxS_:&+,|+w1z^i?k&+Ӝc#ҎzM&X!]ݧx\zľ]&@2Q6>qT|-xGZRHPE1,I9ѡvg;f(z;Rlr@ :M,t34v1mݓ ~'5x7¿w_m_r/>j1uBW%Q+Ȑ>WOߥ1tETNxKȍ{=? x 0#w)Z/uMOzjfaUJ 2{-DXi|^b玣𦴷la56`1uHTQ̿j(_P2Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@'}M*OU=QE5S)ڙLF_|3, GT`:dC-z+rҕ;nc:<#;5#Hj"0)QXH$f ($TQEd#"u #"Qĸ5A +1OTi1hEcԪMIE2 jd>(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((j*Š(m?ST6쟏(.7S 袊*Xtb(=r@~c9N^T}&\uDӮSЃ؃h٦Euу+ AN5V+lw`v`kV-*?G+s٤DrsǶv~\sw9̓7'~Jܗ{XQYpAGXm>o6y^#sڵ4 6ZT - {;d4Ϟ{Uͼe'Fmk^n f2N=+)BMcUIZmby{V;ˏ\I+^bNfxDx8MhM^';ˏפvKֵY1cy3`"Euld`3[K?p) (((((((((((((((((((((((((/ $Oz.^1oCߡGTxⳍsi*iE_}°T* *FQEQEWE^PLLOMOOJ*J)(=)iJۤI?롩>֬i~IC(AT.tM*S-֙g<ȫU)5Os+wSÚl4m=Xt"iU'݋=QEAAER(Cg]{!5bުtQO<Š(EPEPEPEPEPEPEPEPQ2ʞNM2/'JEP0((((((((((((((((((((((S S~ʧ(je=S)((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*Z0(_O {'j(* T(z( +kV*H4b(((((((((((((((((((((((((((((((((((((( +b̑S&S'S RJ*J)JZCҀ!'t5=AmOjz) u @޿$IzP<9?*<?O@Q@ ~{SQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETKHaEP6쟏_OQET PQE]q)f}XZjar) LK'}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PT?gT}}PuA8鬿*NX6 da8POES&S'S RJ*J)JZCҀ!'t5=AmOjz(,4SZq o_ΣX7Ӱ<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还Ώz/(i +<~B:?还#R}'OR"a%\#,Z#=Vu(((((((((((((((((((>?OP'}M* +(L ((,@#\. +kO{Rg;t|":P Z+j=M1vDOJ辰QL:\ui`vķōa%;V5NB}X|Eh{3 {NcgZՍ76d)E-l70@zY"[5N:z.a]z+ EVi(1E S}ԓxڧֽ#:J_kj&wvW-'UmBK翼Em`*y_-Bko +Y&Ԯm?H7gizèiyֳ &ҹV-/Ko53,,h=V5d!{OK ^gY[ iWM-NYI? c?xjS :u8eA>bG8&'us c6լpG48`_W605L2֟f +9/'ZmY\Exng߈\].{%1J# qGz{o9}Jv[))=f_9O(o~%[կm%᳓awcVÝcR^%^IzkqOH1BWzE>"v3 id]D3ҽJ].>2ĚJx4QfUz3gjוaM:7,ۻ wS϶A#^ũiqʇنGWf(EPE6I$/#(pyIyo"MIm(B@3慫=D|]$]мĪNp:Wge:eu4c/8; +* M>ٮonqY'$El6W0۾v :=w? XݛKv9g\oOƵโ.-XnY#`y-^.=Hmxz1^f$:vix#βmL' ;ipo[hWZ"9%kO5koiא]Üo@N;ROQմ"O_[DN @OSUtZ܆=7VǮ޸ j*9 Ui K\sޤa_zkxL;靠>cބ^yמ*u6dW2F WjI(α}x/:uԶ r$?ʸ#ÿ5"RdI BTYnd gGI+{ex[J5J;IN3 Wo +ӶWSCPWϏ0L̑JLԞ5#O<1\ w0qsExgt/#O]u6#ԥՐE5M1h9.:I=)۸_kEa/cT~%\nYsHh_e}׉5@<z sǥծ}u׶mrB9QEZN&A<)t`F*Us&x:w%-izj\(Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@KQTQECk:dM@Q@CrȠFqNnH1۵L'DPS<B:?РL} +<BE3Ώz'(} +}:?УΏz'(S<B:?РL} +<BE3Ώz'(} +}:?УΏz'(S<B:?РL} +<BE3Ώz'(} +}:?УΏz'(S<B:?РL} +<BE3Ώz'(} +}:?УΏz'(S<B:?РL} +<BE3Ώz'(} +}:?УΏz'(S<B:?РL} +<BE3Ώz'(} +}:?УΏz'(S<B:?РL} +<BE3Ώz'(} +}:?УΏz'(S<B:?РL} +<BE3Ώz'(} +}:?УΏz'(S<B:?РL} +<BE3Ώz'(} +}:?УΏz'(S<B:?РL} +<BE3Ώz'(} +}:?УΏz'(m(k}~ctt4C( +CҖmI] OP[t +kꞫ?Z(B@;SFOTLES_?h/x.)EE2)Rh۔((((((((((((((((CSTvͺ'-Ci(((((((((((((((((((>?OP'}M* +(L ((񆙠B"۫(PG#<^7 xNh [ +>Q<+>$h:^KF&w Wm +MZ@ЊO? h0r+M@'U,G)8q7DƝSH[٭"D?3F⿎]zi:e[C"j6Q٤$Xr+?8?5>L]ܫOGt>I3^o&EMێC{ t ?Zoo5MFNdǕ;㎼zRxWM?zyE#-ya*xumcIw& ]0mG*/š.$LڇAĂS +тd,.y|йr1<{-dKVRKn^]_Bk[-  $׌t57,o[ͻc$f'܂RAiW#UlRFty+woP2Zrmh?K,V9?>9feP9_6B2rG VwY`R>0>Lc4mb,cyݍ޲,xJtҮ>ЖQQ,8Sߧ^$m?fW/%|) pU`' ~&Ogv{Y)b ,l(bb:({+ۢ-ќXJZP8F-?:½c@P-w7.$e ֢;1O_TO[}݌bfOY~? FV弼pCyI==k[}7엳%ms:>8ɒ_.|kitE؛avvݷ#? |J:}Z(_sz:9,{}k #Z v[%'f<+wץxߎ|;wMF阱X0'?)'_<xOLFgg*<tn4/ ey AàZ/JQk,@'ohꖛ)C0AKT L^;<4O/Z˻}>kDVy*7'4_)]42Hd\u=QHo ȯל?ק{z_]ZM6zIQx=>fifgC5Z hT3۵OuKvM%\ƹzG<QVr#g 3 A.-4]2"x亻@6$]xSCRT1RT>J:}1ZɎF(^c~0XY@ઃs{jw ')*TPν+޿h?QEKgא{>_"b +Id +$sT ^:'4.-'QEK)O4o@I7?]Q۟h?JH4]Jo5h;TN5x4uadS6=iMzkN/"}DVc-pWW2~b ǖO"f?Vſi4/ +:q^yۓMt+a7:¿^h;Eo$5ᾎcr;vٿiB浾xEj麦oeq`oBKy#=+*-x8P1 rF]5omNŽ/Vî,iX˩>ޠ-ͻkp<3~\~K=+)l^uc SѴ'ݒS*V-f%x/JӴ;h]IM?H7:dtF񅯆_7ZZ?)鎃sY3uҾ3xcUaa«|'eV )9ػ c֚wΟ❸q2QASR|1s3'~|Z[O' jËG{ `9l[) (2"XU\^H!}Exǃ%V-Z޴Vjכ?v 95~%t iF[Fq +NTk%}QoQ\IY@T^>kI/οQ^`>\ߚ4+QYmǡYAWCZLFOGYy,jCYf:cok!.hu7:ved^/ +?oҟ|6=:C(iP.AI?]~!`ԂcpT?t_\XJZU ~ΥX~ȩ/:߄nux)%)@ k>#^6vg`Gv m8-.m XVQYxZ x!yw0T)#؏SŞtZnk ĖD2Nsץz֓|1bS$. ju햯? /+jRgI& 4%X-`w*t'n*~4W;ڽα]b%lC5!ʹ}ử;?ޠ.]@dI7{aT>C;IZ3JN<vE4o硂I'w}[Pyǭy6ms^Fn&Q*f@;֦SD-_7temՑʁ>a}9 +494i<ʨ8wƟKi մ3\"ڀO=WOa{[_[`eG6ܱ\'feR2nXp r}2xDſLeWtkH Q@~  0f9+ȼ pkRx:r!xah #14o<=H.sܱ 3^ⷆ|ADﵤK|#⮋63X& 38nWOD{zuNiF߉~ /k+ .Wbܮspu#4"'nFVŏHuUd1ך~/ZˋhMUYQRN(zŷ[IXcL ѵkye5F`A= +{ ۫噚ٺN7{צOd5,U\Dh_mq\Oh.|YT񌰴vnj =j+ĵh^{J>\eѫ^@nTᵝ8G%I#<c^%:NZQh #eOᷚ>3uPᅜ־Zj1^γJ3цq+76f^K9SOfTwG5jayo"y]%)?5̑铻fXf\GoQZ"UprW8CcdF08 <+cx?Ҽ~!t{}6S}˙ #q^-oi-{w@~wF}JJK܏~Ʊ6Ҷ$c;6ߴ7ȁ65=S;z[9$cfx(~2j$6řg}H*7?P~Ih>`WueꥆvD}|ŮƻO,a*t|P0ߍiX{iZ:bt9`֡صfvxv֑6F9. zM׼{i־Ӡ\A- +I|yz_i4-ı~sZKjxn8l&gX} 6z]w:éN0ЁOw|Ro'kCX9$R^h1ˌ[^ +>/U9lcլtj6m5̏p6ҋP֠[< SP7+WA\4lh + |;T{`j^{O¨EO.G#-NEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@KQTQECk:dM@Q@Q@Th~ΟgOʦ!:t~T}??*Qtj(GG򩨠~ΟgOʦ!:t~T}??*Qtj(GG򩨠~ΟgOʦ!:t~T}??*Qtj(GG򩨠~ΟgOʦ!:t~T}??*Qtj(GG򩨠~ΟgOʦ!:t~T}??*Qtj(GG򩨠~ΟgOʦ!:t~T}??*Qtj(GG򩨠~ΟgOʦ!:t~T}??*Qtj(GG򩨠~ΟgOʦ!:t~T}??*Qtj(GG򩨠~ΟgOʦ!:t~T}??*Qtj(GG򩨠~ΟgOʦ!:t~T}??*Qtj(GG򩨠^¤ +Z((=)iJۤI?롩bsQEU 0ƙIOҤX*+[Q3e!JE<{*S?5\K*A #m1Z?8rj>,!H_Q2& l~&xc Wtr)F+o3I-m4:xA99'(['qK_ cunDɺ)ܜN a|5o M۹:Em:(A['Nđ&v=2?~_j7IǫM3r@}y?]W:O +K;AAo^=R'u=ҫ~c-kh,җMɾ cӌ5cV.:?ME{xv-Q4ԋ=H#1DO34n= +rž?!+um]MLK+9yyuoʃ%CXw=:9twI5((dgyCFzb};ۇcӐh{\#Ѩ># U^\]ROЌۿUvm,qGe c1Ish4fkxU5-;A{k = NKx{,^fK->9Y"q$ϱ`VдK2R)c $k|P+Iiv7&x5%.i.P22 q߽-wB m!\8 xnW?҅끞A,1%J\!x(ehèߏ#/yk݊ϕ՗*kߠ{X+ƴۿUvm,qGe c1jv5/ iz:-够hy!Z=ߍ+IR_v:rN,LiH|ooL9\ɥGrX$*~G>F;۫_{Do7R38ց'TQEIAQZ_ƥ?/@EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE߇SEP_2QEQEUԴ][N/6u"n+zdESΏ}+=dj `.6kQ@ $5(UtX<l6:CݷnG[xkH5Vŧa_1 3 &XG@8q;T ɫQ÷VgJtg=սk@ҼEgMZ+Aʆ*}U#5Eqoiww$SϕU?h,r k}{r/$24{ϩ|f/ï Mckd4B V/IN㌒cOJ([Et(Hd\e]4YaOH OmMcmlfy'5>޻ Rěϗtɿ2Zw{x7&*ڮҨ Iܤ=CFm]/lnc9I&}@'5QI;l \t[Ek,-6W*O\{VakXB!G׭Y+jvG[N9Sq¹/T'MkEsZ/<1Eo3JC? T OP&$Е## +(nkށ? j:nsy;H{'+~ y-ahd^92 h%c铒q _<~i:6Xg1ԟs^Yy-{]zLnWFOBk)FȊ+ PE/46{cpZە=uu`V/*_&DXQ*USВt5$43Ⱥ@UdDF tmgCڴ9VH#(x+=w0|EFݵ{?9ϖ#!dq[VZ[Eok1 DE%ysJ5Zji9G \-iI.$e]ad0o +CiQTDP@eO0i.`f,젳˷54;T Ⱶw׉wi8j|8°I>mQCndxLJt3[偷74YVy?txq^xGA2à Grqҵ`8aOhG +H][8/tĻKL(g +}vҺ$"V %J'?rf:SNLkq _wu6evv60ƸQN,s9[,b0|0sY|@O֊IM/LѴt|XǸќ$FAKE]hy'_ĭ_³mo,q}R{^5w:ƟO-Α00=koȋ6z>%;՜W*_&4 LN`-"c$zޯQEYšޠzf.$9}Hk{G4ltHjd}IxSDKM37ѴҴ>k=w +<=x+xu(X`L*æ:բ +'/tHs#G+3ֺ(2y4 xvYR$P3RkCOugn$[ z{S!+x(cHADPSOV։) (((((((((((*Z0(_O {'j((((((((((((((((((((((((((((((((((((((((((((()JZCҀ!'t5=AmOjz*?X-P"݀)5mzTrƳFcq5\%CjI\HzU<ӷ=Gyq3E T>unbX1SP"i5qGS#f?i-Ŵ}돥w RHʜeq8ּu[M&5]r11뚗W|x:Z)Vjm u)an]?:Jv %+бu-l^F,ju'P60| + ^>2mD-=gpRr?L#T)"+2(xf:wO#򤺆W m`d}+mso4fg{K4s<O㎢eT*Ps.cW^aE hp׉n|.Hd3Y5 k>(UuPA8WQ$qʅ$Eu=UE9T*P{BGY9QljK5ᦴ13$ѷ}3Tv էVY>o,SP[Pyۓ}+d9@F 3NV vJ*F-Gi}2B4 (((((((((((((((((((>?OP'}M* +(L ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((j*Š(m?ST6쟏(((((((((((((((((((((((((((((((((((((((((((((=)iJۤI?롩q՚t' yy)"8:Z)(Z)(Z)(Z)(Z)(Z)(Z)(Z)(Z)(Rp Z@-sYEڠ uQH((((((((((((((((((>?OP'}M* +(L ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((j*Š(m?ST6쟏(((((((((((((((((((((((((((((((((((((((((((((=)h=( nCS*wݻEA%9ϳQ@~OꏳTP_=$W=$;I?蝹EU;I?>OQ@~OꏳTP_=$W=$;I?蝹EU;I?>OQ@~OꏳTP_=$W=$;I?蝹EU;I?>OQ@~OꏳTP_=$W=$;I?蝹EU;I?>OQ@~OꏳTP_=$W=$9?ysV0b(((((((((((((((((((?oT^i\t'X(je= +e1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@KQ-!Q@Dz~?Φm?SPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPyQĉ)spcz5LFEF+uDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGDt?L:t~T}??*OQG=ϳGGhB>HV??*P-6$(Ȩ""`z +b#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAKCM:((_O {'j(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((=u5Ck: +( +( +*&D#c?@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QU|/͗7}z_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&Ef᳟Ҥ?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M?6 ~M Xل~X%V2˒i_ꏳi_ꏳi_ꏳi_ꏳi_ꏳi_ꏳi_ꏳi_ꏳi_ꏳi_ꏳi_ꏳi_ꏳi_HM"e7Z?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&M_Im/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QPK}Qm/@QUa +\F>Mj*i>Mj*i>Mj*i>Mj*i>Mj*i>Mj*i>Mj*i>Mj*i>Mj*i>Mj*i>Mj*i>Mj*i>Mj*i>Mj*i>Mj*ikV6a,@( hՌ~;_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&?6_&^}Z笟_|Oꜯ"r}EG@F0è((_O {'j()ș=td`wO>(((((((((((((((((}֦Z +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(!>`*>`* +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +ddt*}2o2T((((((((((((* ((((((((((((YAST7 + +( +( +( +( +( +( +( +( +( +( +( +( +(!dMPDz~?Φ((((((((((((((7??ʟLL@?ct*}21?> +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( Ơ?M/44f4%[݌p~XFz]FC[ypÇT\ ?JY5@Q@Dz~?Φm?SPEPPdzΦn@QEQ^]JwU#?鵨:*(gLΙPAva3pCҐΚ((((((((((Zgjj((((((((((((((((OjOj(((((((((((((((((((((((((((((((((((((((()ɿTC?G!SS|C.CRc[܁_+èhxQ$~FnTTP\GqimA"\{|[:S$EMsW>mn5 V8R1,#c2T+cPk%;!'ր,\QS^}k Ln="9Ibdet9 p{`Esv>?-vڴd١Ʊ8$P:Ӵ_xc7Llow;0QUo4G1W +5ES2܋ubNܴ2*Ev4cE2)c$)HWC EPEPEPEPEPP3MP3MEPEPEPEPEPEPEPEPEPEPEPEPEP7 +_TQEQEQEQEQEQEQEQEQEQEQEQEQE {'j=u5QEQEQEQEQEQEQEQEQEQEQEQEQEQEɿTddt*!SSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE5RX"MHPFPm\zYvܗ@?l?/TZ[[xm⍈(~OnCh۶俐ГY +Ƃ;gpU@Q@Dz~?Φm?SPEPPdzΦn@QEzT'2[DѦ F `ry~ m~6ma=XFF xl}kO- AZk"YV,z[M:_7.-%F A~I -]\kv#= cεnǿ /~ՍJ@7_k^Oq}4hk4r +󞃚C/|0yoLͤ,1 rWt0n^|Z]GVѥ [A88AOT/j}E&7ҭmv:Oa\ղ Z?L#B{([_k?5H.?y'qsOz2B<~u7[)^wۓ (3}Os?SL 7ʲpeU] +' mEݴ[Hzm?vA:7XU=tBGuVcilOGhI$d0lwA 9,;,"I}HPӞ3ٮ7Y7>F#~8m{2zc/=&6xQ[]IZFRuʐn:t'uCDREW)u f~Q@Š((((((((Zgjj((((((((((((((((OjOj(((((((((((((((((((((((((((((((((((((((()ɿTC?G!SS̾7a\vؒuR?_:kw4 +RY5KBygfBN?Z➏cˍ= WqyX%bhG'f;[Y$N叅ZtھvZ6.Y%k{t܀3I/SkKkBY@Sє?iVuR[NAXЗ]᷇uOԵI/o'k"UBֹ|;g*>g*(((((((((((((n?t5Cq,렩(((((((((((((_O {'j(((((((QK3U$(hvZ,gky@'r +( +( +( +( +*jRKiu$',xQES&S'SLOC?GEPE ݵEo E_< +P[+n`,2S# +( +( +( +( +( +( +( +( +( +( +( +( +( +(35r (([FWsW/Z((_O {'j(* {?j( +( +( +( +( +( +( +( +( +( +( +( +( +( +($VP[8x8#ڰY}ZDؚq;'ϧY>xloN~LS;(Zgjj䕵AH#_7F~54DmvF:vq.oʼW}ީl{]x-kITK#CW;^{%^kuo.}69J#m71i1+n3?: xWޝ{+{G9>['؃RkAs~iu=Ȥ$!O<wMuыG&wƣ싩jʱj:..6#Ghm}g}N<;{;3FZ7"asaX <)xZŖe{t&$]6ǭ +{f$:niz#sm:ɷ=3RfڎifM~>d4k/︌OWڧk7ׂ,zA=ih3u; R6{mw8/o*j|[M7=B9뗉]`Y s⾉w +(Š((((((dFb*uO56')?¹jNԀq7&{(\W=(  T  T 9v:,!|!upAjdh Q9ҷbziQ1µ'رnm<3Z' 6#\cϋ:̲=*=98_)x_CӓHg-iZDĐHM+17t{/?T?SGkgN[Fp^2%ׇ>Mc! tN +X| ~5zBz3Mʛe19Wiǩi[\Y]CR29WxfuG%ő<ʹ3=kξR7]a^k9#X zzשDof 1~^^MESEY-lQE!Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@S]8G`'pCs gb⧯3iocxɱ?ƻ+PMOOp?QM 22o2>7??ʐ1?>ʟ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@2i^iX*"b{ +}r^00N8iqSJΪxRh2:R;}r^2Nh[CV +?j? |Y-᫽^T<#78Qڮ;↉uxKΑ%sMn M*o+wmaj\J.^9[5_xMw9;!,X}aОsbx֟ ǣjnSۅ9 F$m{ύuY+?9ROGjN-V nbzI|R"Jkrb 4gO]O~aci55>o<Ɨ6C88qYOŞP%ƱiIMÕ.= +R~[]J|QrU6= +5a|G 5K۱X]Nanq8Ɖ?V_"lݿ jL1xC|icu-ƲC!GU1~5+..wquuq\Jc2Nx6#:|9 ';4.kOOӺ"pc@cƋhu׈;myMtߑ9tedae9W7?jMs{{| ({g|0n;Srܼ*d9#֋I3Zl^ G^b* +揜n#B4Y}cykO7;7nlZ~*xZn5];M/M/#} ~s? '#Mu 'κ'%\tVK [ \@A"K2=#!tۏk}|Q'5xV> +y'P--y$^oj3\jn[O=9愺hH^6VSG4ˋ,igPe¨^^Ot/4;1Y+8 c# 2@-p +$m,{/~#:Νu1HZu? GAj^n"1{-Yl#H<]$O&QEQEQEQEAqwHp~#N~<>x{TTfx{jkQE#!dMPDz~?Φ<˟ izfѩd <IϽq3xsⵖk Ȟ{Z gQݑ5Ŧi>+ib;ps^2E# ~["wgx@*0;g>ⷛGd +pA=j%3np3R`_=[_z#>Uᘁȡ{=[ҭ,존NF \@*K$F B+V1ޏz;x-b@$Oqڬ|Z 42YܼvI1F:fusYVmwMY"_jB$msXxUOӭ(Jb{Gmj_avn.1Ʒ~ KI$sh;s;SW4VuK0tL鸊uaBfmY?PMyC+Sz5n= 㞵|#{MOPm:WX.Br8+_~ +ͨ[Y͵^eI桸kKX.u{mY.QRAꤜ¼:t?:<jK3_ho`y0d|hViڵ䪻-B +O6k GZ%xʴs]$n'5[@G|1w%֏}iv|s3ڠ_})@+KAr hmbS En,[k6zx^^-?ȃ +(y@+ *yuq" ꛲IItW"4돳k}{F_XeHeYNAבo[j3^^)guْqܓk?τ~(_06k.9 +olk/*aݷqϦ3֭y? >m IxVb_Ԧv=Z-|"M}=O2|BvAN=ii {_Mҕ[Qm,վ鸙c鸊QWP\xA u?suCP> ry, mt#gn4=$w00'0`( Ejvu/ ,}pM\,ׄ| u=_F$1<[.lm,4+kw91^9>ml.c]oMk|t9jW6_{h5YDGeَsI ]q_Kwz^gDr9)>›ZgE# +( +( +( +( +( + 3ɐ?!?4(؞\~ާ +|9;RF,{Tuq\J(ff ?RwA1\QEkh?ֺow?]EQECk:dM@Q@Cu:g?MEPE:׎HYm+ Bl:+4jSi!-эld0c?"|M{^7 vѫjPqw4[K_?tkd`7|w~&Γۆ)]N;Q=~mK|-n٫m[d ^+ŦyM(+$y >҆ WG{?'i$546`C޽SM-m2Pm\F!#44-QEQEQEQEQEQEQEQEQErn5.eP\YGa֫ʤ(#Dgֻ +)1X`E `늒) _}֦oʾnc37P].2+cilsQ_J@ AX_bi&;;)a-p%#Y=WU×W6vgo%):݄ AֽVNAci#_qV) +G[t-=/6eƔz۷v/-uOJV#L+̣q|k6ۼijJMGM5M_WpO%@{|4}v^7+cs9U#^ùw$('|` rvլ+3h~47ȝ 3AkJ;N'4}>`1\[$LI1V|Y+/~`96}3ҼÏ`Ek?y7ݳv_F>Mӭ,.-XcvesMܪ0$$aM;W>q֏hi=%yKO1-:W7֒y'F# ?G5xtK#nf!8-HaBqUP:Rn(C +( +( +( +( +( +(9c×靯U ?:D]V('JGjEC'|U5C'|U52_O%eic^FFJaiPiuA±#h}c;0W;; 8v\keWz Mam FP wf~M jVp#d\3SA6GI 1T5 +@ +w c>M4W[,,F>Vn;Yk/Ȱ|b=1RZ ٺDe'&i-Q\*_XGŝGb)UPF\qJ{zw4=9,q\kB~ $OVƱ6*`S5՜6E2[#$>nxw^#C-f[Kx.5.x`=sW??8O Ah|b)|0Hf#O|׶pDC(TD +@aY~ q{i3Mjߙ9_j7zgx[eVU$d?žr{uJ~rvw]QGKQq¢ =f\[׷2\hZdri3RHɥ}Bǎ|"񷇼/k٦Ed|3SWYe崞dƲF#rpyo[/&!+x#HB"Ut7pJ袊C +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +ͨh?;G_8B$_z9yd?kYbr1cַ(v`MOO&S'RC?G!SS_^?oX[g sj7y؊1 rzWƁl5?;||덃Zi +Q\]ւ/~4M4]<wnsZ聾mO3;^-:94#&V=T>B:_~@_N|1sZu蹼O)pTIc۷Zbx)I#qGPCB gsCŖ[N:I #~`fh,;r4Syjs2[qQH'}+"ZiU5psq1 e;/OaXukȕ*\B}@`yJT* :G0X>#|A~ѥ#xX1R`O}nI!˪[hzE^iv0]>wO+IAT]>=WH8K^&>Rǃ<[?½_S5>w 7PH 1{VݧG㯈6xe4g* ?{ꨩ*}7O< ;{Xs..~bߋ!> +ԭe{.+<']7B 3HL{_F:>^: #\ۤG*!oGHaoYxGӰ(<Əm¨lg#VӬvdoƹ=NjIAEPEPϬKZcٞ{D]Euq0C0\`zU(2e]MP/*j+99>bÚɹѴ닃YmQ#5*(ª(X~0OuȌHp;(nOď tCVnFGy[=UHkYC)V0AX 3oiM|㴯|iO绪]Ap>O>z+h0jvGMpO$'=qҽb!4(*"(UP:AT/?syFw.1{d"#އɣBbQ8R@OqGuX M;hhHRqs[kCo pă +UQ270u?>s|=<0ϒm>odv9 *ŏ]2o:G%7l>V  +(Š((_5ՔA(wfˍ&NFMntTSbQECk:dM@=÷5#g6cdJw+ +㵌8t˥՞6%\nݜg<O 4=5nCnag5W+K:VwI~TB0|͏r =kuɑ6,M{b0]931&2Ih icW_ +EG}W_gfv||[ƛiqj"0mg$9A#+^diQGK() pkUm(4c) t ۟x-"]'GeA WvaT(<>|8-Vo~N>nl~|=xE+I,N$"]|lҾt}NuIFۤ?)>o{Z\܎h{p|kԼ^I[tFHܦ6 +/SA{IKyPIn`mR08㊵mo pHP7öLj?܏Bj|KjZEީ$MEyN!qwEҴ2vc/]fLJ^B..$9yeُ#&0|-mV1%pT㨯R񏎠<aV̕!I`Hfj7-Wn4]*+2k8qi#iL?ڿuMo՞BD#>txƞDCji dLp>!oGzFnef0mnh`uoOIͷoLVw`63Ǧ1tn$_0:zjYop8Mi a6i%m¦1R1U+ uk-oH4YG&\׈k?)fĆ6l_^igk%6靱CE\p4]+V(u-270,~Jch {x? śÚA$c?$S:/CSo|ב#}8)i~6h.K8Zd.+lG_e]<9+)"0Akk;pɡ#ж6=Һ*uYdnyrx ܯm4x?Y񭞕X[`0A +;1N^*i:m "rR%sb?|_Mҽ;?N/5hVc:gzcsɷ=qtR[5[K o.Ɖ+`jW(? vS{ ϼofr,zn~i14Zunۙ-XRi.mGL*0MӾc縭t{zJmpv`x]izK H!kԬt .#cmi9)oZQX|ouBfZiH_wmaTԭ5o4AB> H+q1Shzaݻ6Ϯq֠t(0(((((<9q^QډI?~Om> lyDۼ dv4QHff ?RwA1\QEkh?ֺow?]EQECk:dM@Q@Cu:g?MEP'/Mny$V>SVtsl#Y=8k#Gq=˫|~]$])?r_I˩CWKM5;Ӂ^;Ǻ'3[ԙ@pxl''kEoHn._nqHMAk㏎ipvFxDz4"[1CGd~ buKp҅PTW|<ҬX[X_G}!rq鎜5xW5j6m"Yuc\ou'pn٠ p*Oaq?Xi! +H? ~s$KNf5QJVu+ ~dW=kMO})Vw>QEQEQEQEQEQEQEQEQEQEQEC/?SPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP2/ST2/SPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPLLOMOO1?>ʟ@S:[s%dH!w<=WNTִ<+;BR/»|F> +y紜 tv,:q=r3)<|)EX^=Y +C7PzZݷº,:ӡm l(˷̣$x;fj^, vP#<m<#6k~AMݹs)47V$^@m*'wWm/|AhŰIl5ƝjFdў9!}1f#ep,40[}j6>xzM݆3Ow`W1./+&v,SrO_-~x2}d}c8/QNVC&+^I"pU`zQ\ <-Ѹm ,m+Aggmkgoc JT{SEQEQEQEQEQE ?T ?PQEQEQEQEQEQEQEQEQEQEQEQEQECq,렩e]M@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Dz~?Φm?SPEPEPEPEPEPEPEPEPEPEPEPEPEPEPLLOMOO1?>ʟ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@_bJrQEZ+ѿuQE {'j=u5QE {?j=t5Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5C/QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE  T  TQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES&S'SLOC?GEPEPEPEPEPEPEPEPEPEPEPEPP3MP3MEPEPEPEPEPEPEPEPEPEPEPEPEP7 +_TQEQEQEQEQEQEQEQEQEQEQEQEQE {'j=u5QEQEQEQEQEQEQEQEQEQEQEQEQEQEɿTddt*!SSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE5+]kW)@Q@7}]Q@Q@Dz~?Φm?SPEPPdzΦn@ 1g(>g(>g(>g(>g(>g(>g(>g(>g(>g(>g(>g(>ou/)u-3yBE3yBE3yBE3yBE3yBE3yBE3yBE3yBE3yBE3yBE3yBE3yBE3yBE3yBE3"Sjjl@O,NyB(SyB(SyB(SyB(SyB(SyB(SyB(SyB(SyB(SyB(SyB(SyB(SyB(SyB(SyB(SyB(SyB(S aBc+ֿ'rԆQEkh?ֺow?]EQECk:dM@Q@Cu:g?-QLAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_-E/_REPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPO/TU-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE??MShR)'@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@D?KQ'@EQEQEQEQY[ӆ4OgQ0HF8L$5@Q@Q@Q@Q@Q@Q@Q@Q@M,-E7|TQEQEQEQEQEQEQEQEQEQEQEQEQEKQ[_ԴQEQEQEQEQEQEQEQEQEQEQEQEQEQESdTu6OO?IScTuQEQEQEQEQEQEQLhy#gw`@I=>Q[+.`b@ \O@Q@Q@Q@Q@Q@Q@Q@Q@Q@d?ZV'w9qW?{<4Se^xW@ow?]Esm&q>EP6쟏_OQET7_Ep1=(QKi4I&yi:Oim*&vjSC&rlF_67Wq\uGC_?S_)"^J)c?VT*JR"4f5P_G@ĚZ-}cz +wt [S.If<9:F-T^}F%RS KrPQLտU.fi,BDf\c'xw$)_4$t Ţc\?U^hukm{$\r;W4*37_h\fYamϮ?5#YQҮK3 | 㩯@F$?DWmTG=H8ɾu3p#*zNEY51ȆѼ8$ M$ fcJu\QZyIݽRϋtKB[ ̓s=uWbGƄiZh)1?Dy*tGc\(c8c׵CR_þ #/O}wOn#*n%gy]Ɗ\'}Gts*6Z?_ʃ3q|cݝ +ծm>"XΡ&cҥ`l>OVQM=V(QEQEQEQEQEQETI_TT-U=R/Mw~Pȴ̕ʹmsNС]JIX#;;t(>zVx?ki\xbu取w+ˉ8Yqҝrxx_F5 Y>d?ꏄtη'1#c-j6D- "Lz1}gc>x\PLUHd]gZ`z 5cFw!UFI=`+g^^1 +J:{gJ%j-~ Ҷ(;F/Lu {AS.YiB@'&X4/~{{YEJ8r3I/Q\l_R?CZ ͦ` ?7JN:/>Y׵-cOLVc:DaXw& J=CL '%l0xf#ah?{M&}>7p̓w,G-#.{t}Oj^񾛣_KvwM -ߒ?>=6(QEQEQEQEQERS?K@yG/O6W:C~ ę #8<}:s^^g-_jzŎqک. 4J_;lsxEv帳KŗA<'xzf_av᏷o_ַ4ψ&,7c*G@"s(2`D\'kGiLZSPK$\EvRRgm)#4^ /7}2:慰#{{ד^["Ov =~Ы@ia)0AERQEQEQEQEQEQEKQ[_ԴEKд;\y"u|naj'MhZKP2;8TisY;18h\fmQYH:s|e8#<h^3fxtR+dU${<cm?įM,j",3#K-;ľ-A`yP`2`%yäjģ"߮׳W5-K8h`m"ÍM^ңIdY/# 7+Nr04 y㺶&HȮ+6jiy09׶1R'?f̛ٚgw"/ȫלξ|>7T.ZOJ!^8/?m+Ʈ҇ ) ((((()M:'ttSOE:<6iL^m"n+gEn|&𐵕lf +LW0K6FXҰ#}gw?ŷ}+ze]b9FƞgiCqPc;_ sKe#$]TpUo^ g|8 8%=k[žl BZIX`oCm5Y6}Z5TyJZ6GC𦕨 b% 8M`R5wymci%p[7DgA)x2+h5L4_2 +f*ZzX//-tY.."e䕂Ifw.n=v!8HD̡ZMwXA*˙؛LϦ;/><5{eS,1 Ip۴ $` " ^ }gdй08#!=i +s]<`\*MыE|/mՉ p7~7Å<R/5^ +,1oL[oYv=NsaQH((QT (lhV|hPEP6쟏_OQET7_Es=ᛸuCHb#sTzO7m_[֦Զ63ydm SLFVM'֒]ii7ټL6ЊբC +( +( +( +( +( +( +( +( +( +( +( +( +( +("j/zZ [lHJCvȯ+ψ)$Z%,+=y`_LWYNʥ9IfxA|D<dmڥvgQJ>KݰKl((((((((((((((*~?ʥ V[\?ܜ=VU_ݟ:f.ukn`V1r h~J-KiiƪmF'=kL5׃bVx@du 6y=su.¯ gq/dS63 tFcenNbD,[g9<24]o:~? $N+Y22A\g5rt%N7z]?"?s~F}g>\o+#o_M3׎ϵr?5FyuN&Fv\M2$ ~o+#o\ٻ#w^:g5wo FθcRGF}]~H6k켼ksIYmh_ӵ_ VQdP0]'y^4ҟ_ّ$xvǧw6myKXn݌t϶kN5ȼ$- + J ^x1 ^kcG:.`ŧ9ܮڝ=>u7gp>|B,|9h~; =k_S,4յߘDDTLc t뎽{ec㨯,NtEŢZܝ'OL4h#L^E(0((((((|j$_/Z(8.TZuԢ@Wj Gv4Q@4?i28 6EC/|gOviunMVhq[k (c,X^E;5/Y $N@v9 }8bT~`} ğ?Q]`v8o^tubR{"$$ E騢C +kE ~PMMimKF;{hYw>®Q@o|@%+i- ݦ0ӿa~OQO xfU{ gp2}+NjxO~ox"_q1KE G'<5=C:NMDd:(lG u z\:~;Q .+di 0*Xkc?ƷiX]۟s?Ľ7I`RZfl)!*1 +?ֽ.;{+{ƚ/泶xE Cr;gOQE&EPEPEPEPEPEPEPVu-EoRCM/^-ơy,|nQj'hV;uR0h;O]׺&su(MKSkߩkn^[l|ˈc2y$3\k+^$vwGq&Q"~Ttⱍmr6sح{|bd5cۨ۽[FjU][N<ͽS>,xm {MD 6%ho1VMSXSΝV"v>aK)UE<_?g,τ,WE73^ީg9Z _G4(kn.;aO |PDVJ +;ш֟"xV;X$1~!Hv|(y/ï>wzGy[#wև#4QC +(Q@Q@Q@Q@Q@6OOSdT#Tu6?IPxJ?ν6)M*A JcK1pɯ ڗ]J9ċS(s^E 9m+/5J;O|멉yW8JΗ}i m!x[9*;ǽwQp8+Ŕyjc@5OivG%f8v`Qpaa= erjؽXy~ +;q׾q] O-+Nu Sɼxx+c.H)]7[u&iuu3=vQ}Dpdž;X C6ryn5jz4wz}ČJ p#ˠעZS58eR\c9 o^ g|8 8%=k뫈t;OF'0}3V&މWO{hR5rfPG(_5KCdЌHnm6Sd8#:ާ-KF|@Ja$^VA+0{׭EX_O]_7,}ZHEekwzyz}9##xEپDүu~~k^舱ƱEUG@p/.,k0\cu,NZ ) ((^K/jŠ(օgօQECk:dM@Q@Cu:g?-QLAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_-E/_REPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPO/TU-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE??MShR)'@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@D?KQ'@EQEQEQEQEQEQEQEQEQEQEQEQERS?K@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@[_ԵK@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@6OOSdT#Tu6?IPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPrY{TTQE6Of+>Of((_O {'j(* {?h0=0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF +-&:?Rz +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +KI i*PtTA@R`z +0=GEI(&PtTA@R`z +0=GEI(&PtTA@R`z +0=GEI(&PtTA@R`z +0=GEI(&PtTA@R`z +0=GEI(&PtTA@R`z +0=GEI(&PtTA@R`z +0=GEI(&PtTA@R`z +0=GEI(&PtTA@R`z +0=GEI(&PtTA@R`z +0=GEI(&Pt??@_4'KJq"(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:?**(LwPR`z +0=GEI(&PtTA@R`z +0=GEI(&PtTA@R`z +0=GEI(&PtTA@R`z +0=VY*ZK?u.0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=+[_ԴP>̜z:PtTA@R`z +0=GEI(&PtTA@R`z +0=GEI(&PtTA@R`z +0=GEI(&PtTA@R`z +0=GMSjlAL%@ R)Ա)#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +Q(:*LAF0=#`z +/jQE6Of+>Of((_O {'j(* {?j( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(!gjj_((((((((((((((((??((((((((((((((((((((((((((((((((((((((((MOO&S'PʟLLO((((((((((((>g*>g*(((((((((((((n?t5Cq,렩(((((((((((((_O {'j(((((((((((((()ɿTC?G!SS((((((((((((((((( j + +('Z'ZQE {'j=u5QE {?j=t5Q@xˠ4ZVAwZ';so?; g-K@%+NUq+ERQEQEQEQEQEQEQEQEQEQEQEQEQEQE?ST?lM@t:ONxwPGѬ0-[ q +Jm aGUR1(6y+dzPPQFq\?6>#ғۍ!;)5k+MQYQ\׎[^XM+6l"7Rj vL'h6Je兽&7??ʀTd?ct*}W7xJE77󝖖q7AkuK|C}lOg 7wW=Z+: -l2͏9;q>3ľ ,3ioԛ=B(,?qǨc%Դ(,m4kjzLE>T~G{SutW^it>MF/ +H>c>x;x6Ge&9ϧƋ+usx*T i/uV]!=oP-uRo$lT @@(\袊C +( +( +( +( +( +( +?j?j( +( +(˻^-cpM/K`1ݏgԞN0_Q^3|֧6>נ((/%n5og[Z2Ed2xCl(aj̊|r0ya\袊C +( +( +( +( +(!_T +S^>hKhn-f=+pG_9wWjz犼}c6sdZ1dںoWZvv@NxAܚv+tڍ_M:U4ӑ;.r߮=C- +j~oMܬYܐgCM WOEfg oxe:z:e6'2 +\Q`T}^B&5!fOa^AƲKIF]$rLXgR%pl)A_xš3>) ۢ ?_,f~b!@ߏ((((((=u5Ck: ++υtZܢ߳}} +:?qhoGM7ggy{+;_wt7:2aԦzq]!Q@Q@V'<]x[ϟ,ynׅPXA٭umJ]q`Ԏ$gYwޏ5;I&xZP[ õ4s袊C +( +( +( +( +( +( +( +ddt*}2o2T(9ַOf((_O {'j(* {?j(*ejSoϳ9k.%(uuoה:hL(Š((((((((((((((ZgjjJhZpm#) +My|D'o '+;_fI+n{gFџ>M}wKXM2E0:9==i1#'WOuԶ{iedY8c׸+ׁx𵋬غ|pO+h{ +(Š(((((((((((((d?_ʦd?_ʦ= p? Iu˧I/NS]<|xz։x O7l\H<e hԊO童H7n #b>!jŦxf}^,H d61\F/ c5̤"UCXSV6][$N:PThӵ9nD(4uO5҉@iV yB4>ܗR1yf>ު_ 4KyƯr@F96}J'PO3̎Y#<>Iֺ[EۮpZ /i;8M;b=29U]Bo^g-$ 8yJpF%[^hUsBw\jZ;Z܏%Xh9÷7:~r|']寜ʑ.8 +'94x:{3ڷ -SU8sʺ ȥײ*4+z{'JyOZס<<[:}gzNiNv~~J~,=,qnN3$פFK^Qg.b[[bj.;k3vvс\pqOW_w{6]{}6ϕ{/끜gֱ'ȕq]cЅv8%\X!]8W*eZW"ei6p9 6B,[6$y`aOhZ*GMJ|iܙ! +v_3юҲ;k-D- ?QZ<]/==c_7Q>U d뚒r^|yvz6iTv6kAK3٭ہlVl  LIMrim*ڙWdzhjI-SJ> b<iz\w7qhYF{s{ע*C !"cMp>_Wt;IjHs寿?zSwNS}GIIGcO +RO2 Wr>2>R<66UN4Ǜ ^_3\W~Ou\W)B5чmө~F5l w=2iⷂIuHRk{]=Igl=V4ݽݚԨV6*5[PN'#ߧ?ŬdՋL$k/ch T-g gHbS&3pqf&[9/ONdI|O +`{k>6󷍸%^Q@ѕ}1#SJo%9_:[վ%^=|Xmz4~Á.?OYGy_@0?u;XI \ҵ|ZZVYt\1bH=Yʬ)6DF:[[-b*F-cZm;u"hO83د:QKc Š(((((((((((((((((((()ɿTC?G!SS]ukA+.Zs0&9^#8]*|ySۧ.i[clp93zתזxxu$I5Ki\G&8 Gv^-u^{[H^gϿsS^#χ.o&`fu1[B9id#@~՝÷MꕺT?[SVׅ I 6f_@'k5$:S) ((((((* kgyfpRx5Cuim}lז\@[<⇈=CJYӮZ=VaG*9c@GR]..$8Hُ&⇇4=?JFӭMVݡD,9S@nRB-#9IbO"9ZեskWo&bO`g=ZkfZyf.6>ׅ֭|g5Co1 gS\M{}=`wЙ1OEs;{Idmd~L^o _gvW/?>% +֚ZhݎۺFi-xKOHjFc#rߩ+^Nkۨm@32GgodoG͵6*=+y῍:,6m'Yhd9Z8oW}NEKrcuc96˪`@8#],:k-F+8_^SD:/U渋Fmt%i#wA=+7ot}"KEj+i Yߑ?IbG𭔋.s|hZLv>Һ6m(j}nl +oG6'p ak_%UeԯH$cz)o{s]5R+E=N}+I6 +F9vA=U/ ˠy.֓YE +JHi?94]B4Э#8 +p1}8[~tKC>4 ,HԬHO=y#u.|=z5yα%gF/O~.Ώ<;eBNw3.+t_bOGM&ŤD.> . X)$ϩ" +J(O5z׃>hA}]JEW3Iv=! 8b]ơTg8`P) ((((()ɿTC?G!SS~$^fNnnv-c+W믈W۩XcGێfxJν>Jox7;R +7Nܢ +XcnG!x+CׇՂMN4wc@潪ʿ5O]DTsf~nUVT*u;h/$}H71H9 +{ϵw6ۢ|HljnM5CM13[|ߡ[SI6׺~Z+._O\ZI?!>4˯|{ l杤wWp]_x_R{bO]Ɵo>3t +?xb~ԓU[$9$f圩`gy/菣:zfB˟}x>KVT3 H"' +2=FGOqO x~E up#9Qp~oCOZv #f_g~nq=Z?f;xFY4K{+y^P7wmsOg9u# ?[ OZYѬ>$>t 15OV$szKpeL0[8ݎ+;.j/i\,s i?F57.YGzDgu!gaN70~M4i~.ixW yK#lnW$rE>onkp25Avvqڟ]ZOWPu..m%{ _9zg####Ҡq?ah|^]Zz<~ ;Hs!)>΀8^·yko=GQwV +iu 6ɡuS09k/’`OZZv jcxH4ceMoL¿;GJ?)>? ?hwwG,u[hZhcYA51o]\'c^æi6˶x$`SzԳET((Ơ(օgօQECk:dM@Q@Cu:g?MEP?x#þ'XӾ4iy&9Y? @?ڊwboHŜ=٠_1-3$hŠ((((((((((((((Zgjj+ ]oJ&q* rܤ=[PF}Q ˖v,I$~5EQEQEQEQEQEQEQEQEQEQEQEQEQEQE  T  TKWnn,muf8ss|"CmK`}jhaS-oD͹E8 3'o&s{-O@[nX̯m/ 򊥈_2z MY^g))_iv{^ո"{ͣ~89uQ}7~w^mv9 KM‘jp*iRxSx`}2gw8ڽEZ.ېFN?b'廰>ͨm2$0qVIOɦog`N0q׵mQYʯ3nK[߯ZʬoxSu?)XuJ;w2u'o gںz(Ul 7oiRS`3}2'w8h{GMrjZٵZۈ''8ڻ:+IbM5'u{T#trpZKutOc@7d zgjMGG y,Ē7NZ6zoJH$r5lf$g;fVoiK mKFNU^6tfa>iJ۶.myt<.՚'?gĂp2ĐkZRզ𩿟L128zۢurWw>UdK-KV¦}3aiep=YjZ7^; L,3LǽmR濗<7on֚?gMr`7U;iSTx`ǩeghg=(.Vizs7wg#oxM,RXyI,2Y6> +ҧ𱿸Ǘ݅egh^E%ow}kGi^ӇSU uh2I^p85WIQ|>lZޢxMZF iy[ Ygh[7փ߬njp0zp;~VO Gon13+?:QqZ&^7w^_jvclӞ#էEmj(0((((((((((((((((((MOO&S'PʟLLO _xODJ@͗ږLctN3HAX @?ڊwb>iF) +%gy:WV{Mr_g*>g*( 7P֖(o@vZI4El#'Z:/4۴F 7(2cMjQE((((((YAST7 + +^u t6w/+UǾ? +h'suy]P:՗R5ߘ}kf. +ɹ I~rPǿϑS3WIE;Xu_9GJ '%\8VOsuQEX[Eoīn#~}X? @?ڊW z&i^M$D t&5mMlͦe lPz*\g37??ʀTd?ct*}ewJu-Z̾lϰ8?5EɢK$EUqF q @?ڊ.+|8𞉩èWw &9>+c 1 K[x-xP>x6]áA惑;ȠW(ȾxwHum^+SSz0C|#dIlpϖw#sqѲӬtؚ+ ;{X݋A,zVi$OxGCOl~}W]63uOT~MmEac7Cti`mm1=NXڰ~x7PG.'#a8]};R$:arG\]v2A4ƒB뵑aA*J(]়Qa7n$&ݷupA $QFR4Pvt( +:|\> GQЂ9W9mvPl#}c ࿭v4Qp*:ee%kͳ\=#t+yhGp>!_qWMEbhм={uyik=v }~ }|9S 9'k:_.F4.$FT AZM?Jfofگq2ƤsV갬:Jە.!YPhϼ7*x Xѭɂ>fu'B+*ktc*T +(Š((.?*{j +(lhV|hPEP6쟏_OQET7_QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEC/?SPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP2/ST2/SPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPLLOMOO1?>ʟ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@C|U5C|T5Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@/*jYASPEPEPEPEPEPEPEPEPEPEPEPEPEP6쟏_OQEQEQEQEQEQEQEQEQEQEQEQEQEQES&S'SLOC?GEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP=5QE6Of+>Of((_O {'j(* {?ۏ%.FIE.FIE.FIE.FIE.FIE.FIE.FIE.FIE.FIE.FIE.FIE.FIE.FIE.FIE.FIE.FIEG?ZqjZ]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒F>|_wZ*qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq~dTXIvLR)%%%%%%%%%%%%E>oTT6FIE.FIE.FIE.FIE.FIE.FIE.FIE.FIE.FIE.FIE.FIE.FIE.FIEG;*]֡Y*Z]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒]֍֒و_ԻCoR>n>P>n>P>n>P>n>P>n>P>n>P>n>P>n>P>n>P>n>P>n>P>n>P>n>P>n>P>XOZl@ )9N}iOE:qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq#5K/jŠ(օgօQECk:dM@Q@Cu:g?-QLAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_-E/_REPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPO/TU-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE??MShR)'@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@D?KQ'@EQEQEQEQEQEQEQEQEQEQEQEQERS?K@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@[_ԵK@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@6OOSdT#Tu6?IPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPrY{TTQE6Of+>Of((_O {'j(* {?hb +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +("j/zZ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +("~?ʥ|_hs7pAm-0[C{ +ޮC~$e%?¹#變ԧ-jͦv_rOJD:̪8f={yk $n#;I՛]Jo!Y|nFpsY 8<% +,q@SsSh^߈58wq/cyy'q* tVpcE[Ƅ#}L$NwRmrъKu$ TVZѽ;+N%QX⭼%,1\L~XG:}LPjQ@7Mo%^k*t9$O.Uyz=ڱ|Q7-پљV=fι8>j:WvѹP2G|i妇 M&@AZahFu*;k5Ú(mȭ#4ˋm丝qF?BMLIU0V0RNT*AɫXjZ//, O%ÿȭ/x^ie8a_q+ONMBQ*1j2F.P6>bj':M4n*z6OF]/ݩ(>#8 ֡Ğ$ + P2k+móO*EY݂&khJڽRv:&tS/uəs)^V_ WSѭ䇅im<'EcZewьgE@ddK$J|?jxDOR GM^F>iʗ=RG⻶F1}t3\Oeve/a85Z۬+)Y֒*w +(5 +QbeIlTs?tV5_Om=xB"M|NK9 }BiW~.":nz9P}E-3z;؀$^ l\WizdncSI';.ҨegkEqk:Zzwup:•JNR +(,Դ~'ح`I~brj5]GU:eW8vP+\OuP%V6{*Uw0 gڹ(-|gSFR%[,a +|ڶ˲\uI˿B'A"O8;Ehfwv$ӼAvbKsU*.3Kϧ%S7Bo_'3;<[u~uql@m;9I<|ܞ;=k4{Re[ٖwk\USQ馽?S:e8Ԣ-W]|@t ʎh}ܫB@sҫj7&k^Ŭiလ}a0N2x?^8i;+RdQU~?[>p#?ʹ&+mJVJwe$Yq-*!E97d*4#ֺȩeA>:~_j~kW-n@$㟘IJK_wt o$/p߻ Vygtn<@ln:D{`|cҽ HԬ5-WBFlb1 ֶЅ:FK_LT✑EW!Mqt%By;x!+^Q+I~b{xm햿qY57fχt+36y5(i H(x@Kswpq #, +۪RR[+^BcҌQi2QvtBUŵF飹IJR ~5]iմHePø]AimFK@v#~fx <iCyBI$~ζ!:>+;"2jr7} 5?yҴ:mNdH"F?s4OȺZvKO, #sqk˦ia8Nz_k~:Tthv^GZAT\m}w9o#5 m.k۹pDjk7;—RY.R6a5"0 $9=EiC +HpVq7jRwNV6DaGl?t^*׆"'>UC}PeNmNdx z&Vy򶉤tfzוB:-%rW?xtN.{X3RE5th#@YkJ.LI8.]۾i>xA6QOq4Pbly K 6b;0⻰p9(]JSq##"헟rKC}k%,q9B8⹩{>k65ҧ[>\ifkd r{b|-%Ŀ0h++'BR=Q+(((()M:'ttSOE: +( +( +( +( +( +( +( +( +( +( +( +( +?*Oʀ%((((((((((((()⥨ +( +( +( +( +( +( +( +( +( +( +( +( +("Pj+ : +( +( +( +( +( +( +( +( +( +( +( +( +( +( +lN4G?lN(((((((((((((((((QT (lhV|hPEP6쟏_OQET7_EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEE/_R_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEDKQ?R\IKRI<+UvsZ曥j֐ Md7GM;=+FQ{UZ-_Z鶏uy2csA-Fh]d$eu9 +Anm 5=>-S_KL@J@tzu焮$[ȡ*.ʢq? +=`ӻ;Ç;wB?J?Ѝc)+sCk u沂-j۴0$}q;# Z1c5*K^׹|M0kvwv  #Đz[X?`wtݜhOҵ:^]Le!;UK[=c6Bǃ'nKq{Rc5-?ș'$Z 7K???|=}.L `#\@x']szY%8q^urڽ^7T'< $Ap6=9SZ j(jmŀ@o]?^)4"?u ՌӾ/9?i%ӼM[-BEI@WprzOilpGhra j:,>o4k$P,TuNOa֧дxum& .OlVqRm4V{'mWV]7_;QI2^VplҲ5{; CLdqYYG;7 tW=ifUXKzc9W=ifʬ e)VlqY{W<W5,MC-ؒQcZǷЯ|9I}#/=x]J.ZOvRM7Lu,FNq\+6kiO V.8Һˬ1\IY.Yje=tY-\鵏{ +TTTZWѵu=~Ci+n">p,񑁴q^ڸKJ0xodLAe!9 r=Ϸ`=+լ,t.nKROFLcib_qu[Ut +>i +xWu\=z֝uoYeuBs[W2l爣aSnnwg"DUI{Hy[ +-r50Y?ٳ6) $cwLd~uxk^ӦPG\HOF>>&^:i';!Y+xK,` +’g+94_ m?S/gx:jZ ,t-#.ڹ5<= $;EDs\h7Bd~R8ޕO74uxm;LlY[sڹJmfUt=~FtVɬsGMwL7gvhzW!oi=oZ{ʅP7M3뢽լ4+f 9uܴoȪM|1f_wUh/.KkDnoF<+r)~;Ȥu0,@8.s뚼LUI{h˒<[U+ZM[ۻbNALcڽdQlZP˹v˔7{9dCG+լ4%+v ,:?t mOL!\A1{+|?+KE$ѕmVNŖb^@;Cm2;sF~l:xC5`*D$!bIpsJ(4JCo|ewDiq6Ku$@cT/5p۱ +t$ l[?ָ@#s洬պ%i]59YZ˺e&8t窟ʥ͕SX@"IE0I%d~"l,-Ѯ&!uQ$sdqp?L%ۛ}o_ f1JǐBrx}TNwkK|NXhְD*05]מ1Jݡ1tO'OƱxpu. m.3X>Ҡư?ǂO>9h6ooK'r7~U;-/KѴ c''5ݷu=WvImj]3p?mCAsboIrAr} +5m?JK*t$*c)BM{>4ǝxں0c֛nyjpw?+h>^eC;R;|excG[wڭiQ щJ3F:.5%)=4)5uyu{zv]B{:ɕc7표>oQ4t1Fi6q}u;Vc&RwgSnZiirp__?t~%[M-XkQM$p Ar#Ak>8Q  sӿтHԓ茱n.)~GW(|]lm ι`p +G֑+鶞CJs;dxL1u #R穣Qլ48GS\vۖ|\EV&EPEPEPMSi??'MR)QEQEQEQEQEQEQEQEQEQEQEQETI_TT-Q@Q@Q@Q@\Yص[s +x/\{Պ((((((((ogj)⥠(((((((((((((/ZB?Υ(((((((((((((('tөMOE:tS(((((((((((((((((9{TU,*C +('Z'ZQE {'j=u5QE {?j=tQE1O|WA ۴n223d?? [MHٹwu8P|݋mۿ>?ה:hL(Š((((((((((((((jZ^֥&[kig`̱bdù'>:N:}-*2WU=GQ쥽!yf=XSYT6Ƭ9vG#7g۠QEtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@?RO/T ݥQ,H67B*쿲-uo Rm/mcHeGLc]&Uk Rm/mceGLb&T[KX2]Õv)_6Z4t(4 R-omc`ʌ01E +rV9WbXjk{k#Ta#1FXjm}k#Ta#1WhNJaʟBXjm}kУTa#1FXjm}kУTa#1WhNKgr-CHm9F ÀGNjElֱ +0eF:U(SOKQ,5ktx*FXjo}k#Ua"B*Rt Z xFXj$0uVP%k=>-GHՠH/c8:QkXt"B*} +ZaC7lUCFXj sUq(SʟBjsnCGIբ+XH: ]9+Y>TQR0(((4l@N?U;c*AN¹ԳR@P2I+¼g]wXKz펋ov6o3F.O%8##]w_5[<ICTX[#SK~iulzܟs֚zg1!=vq =iOEs4ob~vERd#2 ?OA6D$G5G iqG?V?& MQ-c <‚zl ԍilp qVTҤQYw`>7$+k/krOuOj.da ?[> +&xsGSd3YNr}t_ռCD?d:j.?Z(|4Lj|=O#ӨQ@Q@Q@Q@Q@M,-E7|TW)|G,/Fc:{f#+n1㲬nR+Iӹа|J{~ڌ:i7 }JA+rw+֯/0Ǭi,ɓv?> 5:6k#+n1gXir\,7Vڔf*t?:סWiz_`sqy{{][J$0tP3|EnH{aFrO|w\N+Fk^0a]`J*T0%'r})\O~!g 듭e]hBGO:^&imn'5OTt/uoꐵα&`ap^,i_muy) \iXr>fqdq_P$h7u{iS\$8I~~^p W#TMiJ(0(((((4l@N?}q:Damx}'qKZ.O)h}Ǹtܸ{oHcD~aMǁ[:T6rȥVmV)<UxoD_jIPAֵo"SQoc%&x+‰_ 3IJ3Ir]=kd~}MT["s;@)hyhuȷլ-8sܢ1 _,$I5i[Ffgu>w ,?RŘykr4XnS*($&GcXggm춺Ɵ=O*+giW);%Z=DD`8;'RsUZ2]HNKOtke%&&$6#zu; R.}mw8/o*&?t[F.u;H|(izOY=gkM3MgY\̯ :Ɲh^iiw^v}nzp8+˼ K,3߂*bfmܣ>€=BZҵVtNd+N+Zu'Pѧ>e,Ѵlz?vsJE )rQoc%&,?yڬQ"oSN#ڻ%eIb! Qt F]*b{Vl#ЮMrN1#9?@sPA+,$U|E|5wxz c FWwpsOn^)|A$Y0Tk/ᮩsL+F%PIp`V4k_j7E7fH,2 g-5'NHTYFciQ=m5 }B~ُfeGOZϤZj}}<(Ou +s`.P8zzO:gDV%@@oa@VPy.`ǝ +JMGYV^(T~$v |+ n27:kSӓ!'hu?E((^K/jŠ(օgօQECk:dM@Q@Cu:g?-QLF}RZcg#.Ky / WK9m#Xnp UWʲ:U䊻U-B,W й _M4#BSXZm:%mBTjU4*Ns%K'ԅHaEPEPEPEPEPEPEPEPEPEPEPEPEPEP_-E/_R7{RBk¯M5KaݵӒ?]X9] g#4OkSfsץ*>%cNMQbL|kPGB3Yc:9&JjK.g$Š( B(((((((((((((|_j'_Z(_!QG !9fǮѓRv5(}+:&)PYAF?@V%faE`m[]jqpʈϴ֦Yj9I4nIRCdPx\^ӾЈLc8 ǝl˛բ* + +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +lN4G?lN +zi!Y2α\n#54Y>55v p.Pƭ[8קFix#Asɷ=qUC1B14Йj\5(m2PhWs%#wqW=Iu8PGKk [;WG^d:ngfdmǻ3 _zNev0qnF<74o.1cr?ֽ+Pմ)Bd$!c G\n#5-hGH"qQjN&^,dI⋁:׈4Y~2~=^ⴑd[1[8פ^iӪ|fd);IV;.iW4JYN,@x2t3EymoOAqAtt5N0/ĽwMVi-ORG_(XuWiZv/*}2 %ihɧjx[±_X4VF͹@(Š((((((Oʥ| h'iz:ZZpɪ"U8=빢.s-i|W_>5VӒb1 ӎW%?F-!UgEgG Nxj׺} O:֚b?Wu}sU܃ 0s:T4YhQ}qpp0:\& +03\;2Q5DZv̛ն.p$p=]ERTic=vܼH\C7z4/:v,ַ6F[m*Cc5 a'v7~BM_RGl}HZ@[A0QKERQEQEQEQEQERS?K@r|DS>["k +t#fF#,mS,~Ozޝ6z Zsrea"ģ9bÁwڶ?5%YOkPsOӹ?JaiZ2ijܲ±nrwO +:j^mYrLȇNOoH"M1:_wЮMΉ992jHi(TP +.#=*h¶4 /*N ~'@&kgth<7\Cwwc[F9,Xd&*M_[]B\D~mJ˧ijx[±]CT#Oj-$i +#li>ЯqxwXi-{fpO-=VPkkXn`lnhé# Yxc#bhL E7"YӮ H@9>56Z^H?wU-+l;"Fӭg,6װ4vO }@~OlxZS.x!L08\zhoԭFYѺ,qZ^tټ "\c|~`VQE(((((B?Υ/Zv76'm yΏq4c cy#N- #[6nO1<9yѴݻ>Ӹ"I5L7Z]yl9T9̟۟W?mvFRmaQ!.%;bRz׭י|:^9(92z_a|)Ǩ\]$In(9%OkOeдkO&gn6!LcaPqi֖{X}vJcϭ/whn4+%+(Fl&Ht#VJQm/hY9\]]:[rf{TgϮ3Z`t\:9?? '}vpwM$qiO2zN1;{ \ԗVvx?VO軈M?]dm7s[sYu* a4׎|I5ۆvI?!=xet).fޚBXtm#n9[M: ۂ>R}7c8s[S41gK8٘䑒hwv^-.: [Wz_xeX2wH,Lh(((((()M:'ttSOE:<ƟW|uVm6쭥LDd~j`5cFw`,p50XOf((_O {'j(* {?hb +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +("j/zZ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +("~?ʥ|_hM𥽖}Mm* =Ϡjb_^}kJraԉ.2`u+e %Ҭr' F ǿ V猵Y]\;EHꥸfim犵5Z#ٷS<};udM'&*2X3]sFZg~YisKz5T$ώ]ְ qseV"a>dKjީQ'EuX!VSpl`֩2|7 +l'4R+Rm;+Z;eDG"jse\_Q&v#m''O}";J(((((((((((((((((((((((((((((((((((('tөMOE:tS((((((((((((|j$_/Z( +( +( +( +( +( +( +( +( +( +( +( +("Y*Zogh(((((((((((((+ :Ph((((((((((((((4l@N?(((((((((((((((((^K/jŠ(օgօQECk:dM@Q@Cu:g?-QLAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_-E/_REPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPO/TU-6I(IQe7"WїTOE*᱓0yC}[N1eNjzZ*1`̓ן^keI7UbG?/ #FCR>^"4T$rfԶ:c®m +:͖!KVZ6jm%uOx+4VOi;t9oh"[=ǵ[ޑuu-Z{ioy1n:{Omz H"i {n$7Bmd ,co}=1'RѾ߿]>DƓM_djF=k[?k(3a~9=]fk}1P1$*͍eK*Xq]z|\$KeH6YE?t7ET(((((((((((((((((((((((((((((((((()M:'ttSOE: +( +( +( +( +( +( +( +( +( +( +( +( +?*Oʀ%((((((((((((()⥨ +( +( +( +( +( +( +( +( +( +( +( +( +("Pj+ : +( +( +( +( +( +( +( +( +( +( +( +( +( +( +lN4G?lN(((((((((((((((((QT (lhV|hPEP6쟏_OQ^xv1jqHW:U/NOAy +x'kAO1g?x'~'#xĬ61 +_]bլO/h:7W(_vg#+NMAy +?:7W(;e '^&x+}vY2^oNMAy +>~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e '^&x+}vY2^oNMAy +>~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#?jZ6qK ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e '^&x+}vY2^oNMAy +>~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e '^&x+}vY2^oNMAy +>~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/|~?ʥO~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e '^&x+}vY2^oNMAy +>~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e '^&x+}vY2^oNMAy +>~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e '^&x+}vY2^oNMAy +>~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e '^&x+}vY2^oNMAy +>~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e 6OO_Ĥui_'G?xĠ5i?_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e '^&x+}vY2^oNMAy +>~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e D?x'^& ljA'Zl*]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e '^&x+}vY2^oNMAy +>~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e?K_>xZnGʿK ω/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e '^&x+}vY2^oNMAy +>~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e '^&x+}vY2^oNMAy +>~?{K_>~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e '^&x+}vY2^oNMAy +>~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4??^oƒAզeð8_tSզeNMAy +>~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e '^&x+}vY2^oNMAy +>~?}E| ׉/7G'^&]`Vq?̿>~_^oð8_@_?uo |Q ׉/7Ga?՜O/h:7W(_'G4Wx+uo |Qvg#+NMAy +?:7W(;e '^&x+}vY2^oNMAy +>~?}Exf?\k|jR\ƎWX:W*<~_S%؎^K/j8B(օgօQECk:dM@4k1j/i. Wy xũܿ_50S%{Xn(²? w}Oe-O>w}Oe-O>w}Oe-O>w}Oe-O>w}Oe-O>w}Oe-O>w}Oe-O>w}Oe-O>w}Oe-O>w}Oe-O>w}Oe-O>w}Oe-O>w}Oe-O>w}Oe-O>w}Oe-O>w}Oe-O>w}Oim>grӿYx}"^/}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}Nxx1i`ʦ,O-;/2/SQ:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>? LIgr׼S&S'}O + Lgr²?E/1)}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_he-{}NxxG+/Ϥ_iᧉ2X|5 ?Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ O>/Q:a;/ ˌӿYx}"^q,렩0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XeigPk-;/6쟏0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H +Zz(0XV^'H~&U$E3k)Gnj'~&eZE3iYx}"^>L?L?L?L?L?L?L?L?L?L?L?L?L?L?L?L?7??ʀTd?ct*}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEj5޽WV6/L3W~CPt_eҿ W҃_ ;8!Ơ?+(5Y5@Q@Dz~?Φm?SPZ}u^CZ5?C5#1a"C* {???&( + $9$ wG&xtVT-FQ$k_kx~6$FGo zU^ӴD6XF$$vW=^(0((((((((((((((}֦Z +yiMofS?LSn>Z-2}3^]:Ե\\E)|(Գ{ʳeRrUNͳ8n$mt1>^'|B.\huઓoOƮ4&F Z亱rZٸ״I7:2$~ո. Mo4r6 +<%;CitDK#$Yh| w^OOҜI]&eQٵQTu]^D7z c_rOl8[RNA5RjEʤ"LX%pYNA5xMүEKdY8ZRvo gUDҧnRG ,`9 q=j;Wk 3kW">BEXjhT\QoX^Gi+dP@#<Պ۬~*dp*=֚6\k]&>sJSwqۢ+3@''ezv?ƴR󏆺>hWR֗2 PB@+(ʜIosz;{msy2VͼsxnHt{h#"TqSen -n UK E.,%UKTi>Gy7ԭp_%P=5zY巇u G43]︸#nOӓ^ڕz0(;v*jJ +(((((((((((((((((((((((((7??ʟLL@?ct*}21?> +΃^Ѯö́mFmRͺ#]Ga |dsܴDf>Bl*izPSVva'XE]>Ƈjql_eײF8L +C:;=F\Xu I#^OUFKHxͷm =vOcXV%\#8?+k4լ$K2dusѯ͇>/x[NRGie~^W"LJ$($ڪXjv6Z,gky@W;xOX\Io٨}Z#rzD}9t.FӭacAs֋tQE!Q@Q@Q@Q@Q@Q@C|U5C|T5Q@/f{اnnR* 9#+f@MPt}RgOlnA$e2@&_%6saOrO9ms_ݑE!cCVٽ5? |;kCGf[$Haqg@0^[qk(C +( +( +( +( +( +(!dMPDz~?Φ +i1$nU&X@Xjky.9zݗ-mx"H.%CI8?xJN4>Xc̒wo}g?D57WFVSGW9oYJK́㵑G<OLӼEM#sirgf++88 #8gCEr7_T\^tvK<[A$ȑCwsu$W 4w&mbZRXp>:Ei)qm'uʟ@4k'm"]Ϋ#fyᶂI%HK<0UP:OA^#:b`n촱{I16?,O wzfg mcFOUXW=RmMՕ͸$a]y d:/*Oѯ T:*ŏ ZoNe `D` i[[Z)mi$Q]E׊+mOɁ퐤y;T½;O4%m7Kim2t3C@QE!Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@xſ7j#Uy͋=><=#._b|tC+<&<=n?*{j +>d(lhV|hPEP6쟏_OF#_rf4]סֹ {F-OuhCy4~ȭ/=u5Cu:ɨ+4.%(uk*]w3Ny ;5/Z E.` .r3|BgYZg%^l}^op@jԌ((((((((((((((_}֦xo~O'z$-6Ku-:D$w&G6u;wg+(>tj:#YB+s5/kZRHcaHvS*Oxr τUzQIymd~[Y EV@QEQEQEQEQEQEQEQEQEQEQEQEQE  T  TWsJk+aо Z.so8 ڗ8.ݜ_|g(]±oY4hդqiiWzn6;/+Դ[mC䁢?teP'~4JRk?|3!G[W[>5_FMc궟a([vl9:ίq=/~nNgs7zخlm R?1ykx+'^)Pa&ѯ|CF^[m=y5 1Ԧem[0hdJ}KPڜi-{YVqC|u OI/l"I(1k?]WgSsxGPL 뉵{_o LʻcK1@))ڥ(+>|y}xIh.|9osp攀zWiVl?/{ֳ2+k$rD۱(5_v}<w(E:h5 9[ӿR$տ~p6cC ϟon۞qdt%RχffwŹGGtWMq 4-vf 4e ^p{WU +'׿s3⻅B{>RdtTHt$OnG|WWXwPu%pF_i?Z}[&' 8qKZ.ABMKtr>=¿%w|MZ΋yoq#̐IdA#*x>һ]'Ŀڷf>Reݷvzӯi'״EWQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɿTddt*!SSWj_tOԮ"HWԼF4o81k/량wS>(V֍[,wt>aީ X 5GFo\y>OIXm_K%T07|=+ot!%3j.HLxʂ6ߟoU`34՛muK[1Zk9!g?Ǫיɧ>=vi:&hy ={v~ PIj^kۧ[y1݆F ]5^R)+ҘBq ׍zĭ#qGMo0>aWxNz֛wj6H|ik?Yf/ܽr4Bg!R < [F ;_Գؽy`3"7s[5_Z-歠_Nnbk5U)ڢa>%_i^MADsLGD ry !0Fih((((((((* s{i>a˶^g?<9*u^iR^DԢxJ)aG+PAx+6q%RcvK MG \k}`4xQU; wQޛ:E'#ڼLo%j#>(6whky1{IԮ}2+Ҿ0hpzέ $.F$j7'lWIsJMRcuKS-+/,&on$-ޓ9x$6-@̰]Mjѱgw8zyޕj)տ}=v60\xZn<;=?M#c#rߩ5Csƹ-JH4iZ(nq?+ *=sQl{#f+5.OLwkwM018([:O?O4?Q^eϢcK.!=B'tNK½4r(`(0((e]MP/*j(MSz_ yn@'Bkvk+O?{3t\y>}hut7sžk~7 ZA=.m὏ue㝹OrVV F b[Uz :qӵM=vš\ڥ?Kr=:uV>m- [>!z +a4,}C8/Z.eYgn[Y ltǹ;TYe$iF!w[9Џ>tI2OOnGuxGB<+Y|XD󁓻OizZ6Z52F=k׼;F YF#|ggYrsfv_. :H &><}:~ qB!? 2[ a-&ziz 孍Ƨyt,̺t.-77GGzp~ +űǧ 1gfu J\n<;wUA&c~UQnSdn Yԍux~srCvg:zS/뗾!H|#k}OOYRiQIWo}Q?t}nx?am7o imfQ<;GB#7V)L=SɼOS5OAK|zv ++u5[Z/$hk OnOڍ7(SIM*yOVJ?XDRT}Q" >6+\ite5ޱUcXP.o Ul#Et[Jz,>Ǒ%ల-P""XVwa}HSE;fk nsV:֬mW^.kH}C?+w³xP[ڙmi >q|mK= O␅ I֗Q}$tK~>=t45m5QnLM8 g/|9Am ͬY`M`EH +wT@UZZ4 AsI#=%Q@Q@Q@2o2>7??ʀTd?ct*}y҆j2ߖ<ໝź[O;Pwt7-3]18vǞoS|em{]a/‹+'}eso0b(qs?%犼%qC1#M!p {zQ]P a^"iScĖmqsa!zһ:4yȿK=}o_ŷYEk:E0I0v?z6(C +( +( +( +( +( +( +( +( +( +( +_5[ךo^^+oF_ &{Y}x{F]+!}(: +2_+AVx/MxzPT|QE?՚Ь?՚Р(m?ST6쟏{F-OuhCrZ}u^CZi0[_ {?j=uQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?ST?lM@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@0MP0M@}?WIMd}V7wxK ??\]nQWI>%-ݘwiÿhоpcNr)YCÿjp#Nri~E~e>pcD@9s}sܢZk[0=}m_\Oÿ>MlDOm޹5E +լwUȵϕ̠nfL)_׮~ +چ]pާxv#]mFG8:i߇t8ϷA>rmsF-;[yrʹc__+nY{3a}ŷ",s?P(,qmHFyl s[tP68"oY7yl s4xZ[ɔI#ckni{{1|E-cuŧ(0G|=k_$籭(Y{{15nteK:iunMa'ۮ-~/kjYY3]֝7ۧf؏Μ˯=}{oKl'N*VN.bk^tۿ[O3dg9X^2oUߨ:qw1uojje rF-kM~q؛w(Ufg:qf.wNq>JQx{ _\E@GE +յ@tK}v:ۮ"*ׯϮ_OPד[tPuo{8 +(,(((((((((((((((((((((((()ɿTC?G!SS((((((((((((c?ʦc?ʀ&(((({>Teqy>[<9t4PEPEPEPEPEPEPEPEP7 +_TQEQEQEQEQEQEQEQEQEQEQEQEQE {'j=u5QEQEQEQEp +ŗ־UlbIG\WqE7p +( +( +( +( +( +( +( +( +( +ddt*}2o2T(((((((((((((((+~-o^k{Uxſ7l_dg)tC+˥?AYvq7Cq?ASPWi!EPdVkBVkB +(!dMPDz~?Φ5?C5#k1j/kcY"xͱPҸ@N&_?A',~7_J?A?Sj+ izksOqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b%?ƏJ?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b%?ƏJ?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j+/}֦/JtnJzj_J?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b%?ƏJ?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b%?ƏJ?A?Sh]WR/SV@3Z3ԿZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b%?ƏJ?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b%?ƏJ?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b%?ƏJ?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b%?ƏJ?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b%?ƏJ?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻6)+kOl*ִ?G4{5SS?x|DZ~ByOW iKw6(J?A?Sh%?Ɵ2?cS_lQXZ _5J˸{b%?ƏJ?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b%?ƏJ?A?Sh]WV?%~֟)4W iG2Ƨبc?ʳ+ O:V:֟֎hcS_nXZ _5J˸{b%?ƏJ?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b%?ƏJ?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻4?t5aMkZyÂSj_J?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b%?ƏJ?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++_OՅo`UmkOg^SRW iG2Ƨآ+ OkO9p5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b%?ƏJ?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b7??ʲ+ O kOS/)4sG{^1?>cWH(w%~֟)4q{b%?ƏJ?A?Si.5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b%?ƏJ?A?Sh]WV?%~֟)4W iG2Ƨآ+ OkO9p5? _5JZ̻6(J?A?Sh%?Ǝe=OqEcW iG%~֟)4s.j++kO?+ OwcS_lQXZ _5J˸{b%?ƏJ?A?Sh]Wj5޽KkO_څH&1j^' d}Esbtd4l[OfsJ1_JkW~CPȨ|,oІ9|QE?՚Ь?՚Р(m?ST6쟏{F-Og׶|+ѯog^yF +XA +DC'^dlzP?x4O?hI}G*Â&?M4O?h@Xp^qW¤?P&?MT P?x4O?hI}G*Â>l]6NI}GÂ&?M4O?h@Xp^qW¤?P&?MT P?x4O?hI}G*Â&?M4O?h@Xp^qW¤?P&?MT P?x4O?hI}G*Â"/l4T'j4}N8/?+Rhi +DCO&T9E{*M5??RhiJ(cI}G*M5?>P?x4O?hI}G*Â&?M4O?h@Xp^qW¤?P&?MT P?x4O?hI}G*Â&?M4O?h@Xp^qW¤?P&?MT P?x4O?hI}G*Â&?M4O?h@Xp^qW¤?P&?MT P?x4O?hI}G*Â&?M4O?h@Xp^qW¤?P&?MT P?x4O?hI}G*Â&?M4O?h@Xp^qW¤?P&?MT P?x4O?hI}G*Â&?M4O?h@Xp^qW¤?P&?MT P?x4O?hI}G*Â&?M5~#\4}R8/?+Rhi +DCO&T9E{*M5??RhiJ(cI}G*M5?>P?x4O?hI}G*Â&?M4O?h@Xp^qW¤?P&?MT P?x4O?hI}G*Â&?M4O?h@Xp^qW}6}i4O?h@Xp^qW¤?P&?MT P?x4O?hI}G*Â&?M4O?h@Xp^qW¤?P&?MT 7wM;&?MS P?x4O?hI}G*Â&?M4O?h@Xp^qW¤?P&?MT P?x4O?hI}G*Â&?M#|&PgGÂ~h~٨r3I}G*Â&?M4O?h@Xp^qW¤?P&?MT P?x4O?hI}G*Â&?M4O?h@Xp^qW¤?P&?MT P?x4O?hI}GŃ-W~CDtY|.Ѭo㺾gUC:`9zq]vaJjGXXʑ.^K/j(lhV|hPEP6쟏_OQET7_EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEE/_R_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEDKQ?REPE +( +( +(K*A+1hVv2K 6)RЀkF%f$WAERQEeiGZ:8_eg1vTa)l'$5(Q@dz@Q@Q@Q@Q@fZEG4$Rq2k_ +伿Mi +U'Ee8v:)$jrS2((d0")f8UNWK|w$+++ +-EQEQFGp[d1!wl9'좼̷eiC>WkY) (,zl֝T(%$ +(aEAyywOv8sIc{oEyi'iC>WkA]^Ŋ(ŠˋZL+_&wEry kRQ~%a)'QE# +( +( +( +( +( +( +( +( +lN4G?lN((((((((((((Oʥ| h((((((((((((ogj)⥠(((((((((((((/ZB?Υ(((((((((((((('tөMOE:tS(((((((((((((((((9{TU,*C +('Z'ZQE {'j=u5QE {?j=tQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ե?K@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@?RO/TW'Ƹ_ x&V5Ûy 3;yU->$4XDl$@Mi,ĔZWBV#foK=^NO.sp>>ȵq_olxDSQN$>ͶBK^4p(3 Vz$7!}5h<)`R4 +1.H{VM76[(գYDk«|4mMF㭄MrlΣX_w^Gf1M*ωۧV*[~W0N ~5 )?)ae%t}K~UI^\u]O\|;A2"hAm)(j|P̺+š)}J/r3ޗHԵ˗MKAψ.VOz` +٪W4ݝkÝڏ}NzqQSkWD{˶9~/6`^K'-#vި3@m./5'8/kJTe**UMΞ(--f"B525}damh$e4º]Snsg5۟Gq;w6q]t'(6ҿcK5t'4gpktwo?3Rv_约eX6w@79]W1/\ `d_dV?wAKʤcY]lrSPn\ѾC]vvqyv"n-<3,q]cЅuvw٢Og33\Ŀ?l+oO,/򥻼k#%x[%U+]{( B erIԳ P*E M85XÓ^7U]e FA|[CEkƿf +/֗٤vFG,Wz}tU5FT>V6uMoMbY5 C}}|9\-HpEh}`+]ǿz=` Gy 1u7e[;`MqV5(<5sJuX KytRG\FJ濷|UBwT +gxQO-ʂɜ={Nɧ~ i7Ŧ8?B<1 ;;s@8k@Z{Iȗo]dЍv½_I;u9({dн6Z/;M>&o+SI&<5mCn|ift~%cTY?Y!29@$ԻʒjQnim>9 ^yCxKV#]y\6q\i-Goqj%hawq??{YU +s]SWԺsoo,YfնU g?,Q׏uUN6n-A;1NߤfɂOXmcLѥxD֧0i,gaVF?@ggvpO,jCp<;I-=Kh%wjb^'MkzNvKga"~^Q+D/SO{<_M'Ni-*wq<|gUP*~X7*:ϱkeέ&ϛẅGQ%4"RPJ- uD\i&\rjz]7\>g%\?VQYuBHp tt+y]jIYA/hQs,"[K˹c-f|Mɧ_$Σ%0UY& ^hYQgh$1)l;.|F Ts"xz^WKvޒ$\;սMV2Fe#?i7Q.vdn3G~o y16|9aJJ[i2R\7GݣKwu[ߵג?Z+pI5#Mkl}ާ86Y]v&hL_/=b'{щnH+]n:3n4W7m[žL,<NV3O4 +(((((4l@N?((((((((((((*$_/Z?*(((((((((((((Y*Z(((((((((((((B?Υ/Z(((((((((((((()M:'ttSOE: +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(#ERڢ0(5Y5@Q@Dz~?Φm?SPEPPdzΦn@ ESQX"fxc}NଓCj^IO*?SvQn16>g,;Z)2TREPEPEPEPEPEPEPEPEPEPEPEPEPEP_-E/_REPESR6a{m%vTc)/ <q߯?vwwV,2Yµ:E޶Xrz(9((((((((((((|_j'_Z+a }E q6IcJuoe\em3jO'fϵtЗ*iѫ&5UޛN?%\),֊ܴl>a$t#[$Z~-{` +?g}o]? REy?mO>իcYY} 5nZ:G,]:71Oayl/eRj!u)ZNxO`QoGq}{_~Iٿt3JGߒ}6o]? TӕJ}=WqRVWy?Whk+y?$lۧj#W?on}]n]A(k 7Wi7W:ˈGO&C "?7gڒ!+oM{tǶ}f9OhubctMCPekpSxҺ\y;|2Fۦ=K"?s8lUT U{09nSE=+W;YֿWC"?s8lQ"?ٿt=Pg7wN7Q]%Wבggٳg+z A6XJWGߔޛ71Kq+o7;zq٪*tӺzo*sj޻,iE$mϞ0W;pOVbo+#ooMv=Km);zq٬%M]/mCXTlD|5͙G' A9>Ty^Sc;s:c4Zo*~myM7d8lӄ#^Vi=JM-48km_Y~׬L>g6u~_M+yM>ΟimS$Kh5EEהw;s:c4Y{cmyOcfvtǵmYӨ{nc:jqsbF)RBx3:[[(5`T[$t?E|)8j,?j?Mۜq՜T# E*NNIV.fe%B#*4M}&cmv#fD'8ƺ{?Eڼ)fvz{Qe_>ޛ7s8=MPI95%9~ Ӆ O:KO=bo.~loٻXo.~loۜqRi(BmQX?<-7s88{gcfvzgk귷isYel?oy>[6nnqǦqF}n1w;s=3ڳ綫ݲ3o穭<$Rq2k(%"MJBE-y\I`1uzg#mk}ݎ=346g1ۻzg8S|jG|Q?!Mekpۦȣ琕DOЍicnqQo8Gُv+7/rPZ^j?Wtoҿo#[k;wcNi_c睻ǧJU:J}t6hm'{?v}v8o/#WkdSB޵ -CMs ?KFGOG#jamqV*w[{OȓĿ,j'j?J?ЍY?O#S۟ݎ?*4?f߻qvokYۡ')+ +|Q:,0BKx+gq}J諉5k:{vFNzӯzS{yx-߆+ +}5ғkRod}{y{1n3|so?k[olsb;_UjwQEfXQEQEQEQESdTu6OO?IScTuTW[Iqq*E jYsP:k>& ,2`)V)sڋQEr:]SMu{N&L3 ~D]EsKc-5^#>k~yⶂI"5,@I (+G G \Cp PI 8=W7xJӌw.@fR8&+\[M4IWw 2<`EQEQEQEQEQEQETI_TT-Q@Q@k>?@ 5ՈLVeO|n|IHbyeR4MP:wqNs<5+Oj13(Yʜ#k^j^>4kh:ns3tPsc۵tQEQ\}}"RO5&]2#> ~YIc-5^#=qGER((((()⥨ +(nm%!KI# /x=YKTl@v ++#Ğ$u @ɼFġF=FO~=t;"hΡ[#HEڢ?c2 FYHto="TLtٿéLC?:,:+$ڥSX nIjQEQEQEV^}Y$Fp\+CjۛN=|qKOk̚&7쫎EoEPEPEPEPEPEPEPEPMSi??'MR)Q\lj|qcJORRe +N1Y|LC-|Ogn~Nڈ=Iҋފ673.^OY((((+?\t;Kqh_)8-Es G%MW/g<}l ֺ((xÉbבN-cT3t'$qQEQEQEQEQEQEQEG/jEHaEPdVkBVkB +(!dMPDz~?Φ(g?MPdz΀("Ə]jVڔP{lv_\K }ir7ARn:W]}eoXewo:MnR0FG#>i tN&9V\ЙFMEVӧ[UnOSOfG,T`nGEnRc +( +( +( +( +( +( +( +( +( +( +( +( +( +("j/zZ +3Ep&߉-jK3V=*2&I+s|=(՟,䢻g^[Vk81m`O?CO h"ҵ ?BTCɆ +յk=eƽv>w5?+#x }9k@ۭ/_T۞vw'ztd2k?v gD.{MZnmiYZ Hb5OCQ5YsMKtQEzQEQEQEQEQEQEQEQEQEQEQEQEDKQ?REPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMSi??'MR)xSx )!"bV7\_4 kh"#$:U94&zMR;IG}6h/w1Wk_#f>F+s:=_64YgX8V#Qw'dRAFc3݆ǨVV.m4y$:.1[)-21pIz6$y~ioa¶6X:G Izs6sA&^I^2 VR?J#lFBhC-$c@3>*l4 tI547`su|8-5ڟ"I[mu =7Fg6VS|ؖ'8װ]VA,) ~43 1-IAEPEPEPEPEPEPQ'RI_PQTK{۽6h4]0]ϒ%O($͎=PH78I[9#su__[j^-GbH689O8]ޙxR{}dˊ/0cr9a\? +~>mϙh-t۳cXQh\XuHW{^_L. +';6D7sWԡ{F+hF#Hڭƍ(.Cc3/ҍ[ik+L׳?(eM4$5 +UG@JZiAj_lF˟!f?+pr89%+ʇБroƫ*4>ށdDŽnk6y~a q@W綴Tam\ĀGR1j)ÃJeˏ#S<5?D%VFITb @UA?4F~xGu[͌xV8я:&R*FQEQEQEQEQEE7|TR^YJ2&znuw&p+ʼ u'6W }ϭ4&u#b@chr@WNH@5|\<s ?|=cb(a1$cI:YQAŠIySG)Fht:ڤVP#u\3(O=y֋RGѬJͭrX{W}hzwt-jNGNT^uᭂ¥rw6HBz|ĐsH d٘9duæOq Xm,xQ) R4k p?5),<3`u,т2~`!Yk6sxS Jz zUSt4m"N\Cmƾr4QE +( +( +( +( +( +("Pj+ :+Oad] )q+ 5LFWد#}+q+ډs~uxoM͝jPy' tϭzT0o +CiQTDP@+>,eN `k2%ΝaYXǨ9\!ۜw+Rxj8^Rʴ=*no3WeٞǿJ5zUjWFwiYO-$NѵM{E,\r0A5_ۿ3Mp\fvxF00 310֬|O[[x f0GAqQ1"ƥa)!Of:+OIqGy>o6sj/Q5]M7N'/gvbN32szUyõݰ7} /IyGy?nswo:V>s +VF%Gc\q+;_sTI@k^%y1OrQ#I=joxº9GGq=V7&WэXF+r՟'mݎ*-m|HJMEkp7O3q[GG<,u= .v(YsPɚw jUN׷_hDf(po^|A>7#Xmiԣ8w5[T_jSǛ}~|Z8 DS9.ӐLMb_muK2EoPW|YcMդrXC&Ug2-gN9cR|^oZ:BH붐~Hє>~ENB8$9ĺυ4#P )ai-L hFsC@ +-(|EǯzK\P-'84 :\ m//)A W=1?5B95i櫣q0㑤{dһ),T4m#Leb8zպ(EPEPEPEPEPEPEPEPEPEPEPEPEPEP_-E/_REP\O|%xK)!F %vmEgVjǖ[lML5EV8cXF]O]wI{kǞms7ttW̫WQ]'QEQEQEQEQEQEQEQEQEQEQEQEDKQ?RE_xY񆱦bѲLsԨw]TPW-MB#|cqqڦpQI_Hq{+2Š(Ƞ(*7Lpvz>b[~,bf eZ)鸷 xR5SfO~u&NdںΞtҴ׬DoYuu t- vĊTptMNTN(c`(((((((((((((((((((((((((((4l@N?%#;|3v~=kZ*sc9z +),`TħI#49ݒ;cxcƞZYӯrū^Ex+`춖ӿIAW>f1nz[ |E$q4QǖAQ=?*'fvæ#M˭wS"E +¸|%q*_js[=y6Y;lڻ*) ((((((((B?Υ/Zm[9fkyq- RV= +hWO5;Lm{h:;p8xF@\^4lx,<{j kZVwxF;oySWmE M_[|]g7[}0_,}F.x]ʟz'V8T~$En,YО6 Oc~klI }=XmNct2>$׵ x]*k[82 1WG +iM}Z+P[Y:2znww\w!kvKꭌO=SYAo_^jVAh-drHqSz5 (w˜|8k+DVʜ#'z\0opB"B"@J㱋OH?}{F-Nxڄw +2\8O4RXᇆ[]bQ(Xt]PEPEPEPEPEPEPMSi??'MR)—ڷ?A-iۼ䑘;d]P&|o<78ۻS©[{i"{-JO61z+i[Vo}E%ՔRz + ;WWbmjԓNMhG; G+'|ѳB !zdN+<_xxPgid!`_.l>7^^܀1NPؒ1uIqGy>o6sjo B-V_ VGڢW"g<+睹8(p9MOkg% ܡf˿JOx^t{]1$R0Ws#LWiE =xZKY &$'~~^#Ş&I<7eZq(P\xF+N5->6lG)x? kEekizF:>pR_vڟ9ݙw\:/d轸+|۫@`psǽt4 +(Š((QT (lhV|hPEP6쟏_OQET7_EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEE/_R_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEDKQ?R^aj|C'}۶0=O#> G/ +҅KnO^"ʷlM:K[C:a<"*G#ƌUFI'+]8$<ҵ/z,_/T>]d`qGI?ۡ $XC'#]9\V"}ؿ#"fB- O)"818kTӍQ Piǽe)ԅ*\j0IZGKua1'%bOsjj(Ѵ)Rdw3;ZjFXnuPO?]+,JqVf\%&Z&{O)ׁג/R2j0~Y.0c]+KxVo! n::ц"-hAYIi&2t.ʀn@9>vA_œy?A֬ fypmAcOtĹu;R$DYzO[RyY;c)X>y~v>m.,??5\טV¶4ewՋD.Ů{T8_)ۃjW,Sש׺c>*ѵۗӯ/ߎ:[[܃b g=XYkq*Vݎ{I{$@('p9瞼Vy4I| VF]dFpr]U>ޅ{=<\6k&FDCӯLkxMY&4]ǣ(j>!v1+pΛtf&៰ȒEL2׽z}nME^{ k-w/XAڞc>Izh?i''卂(((((((((((((((((((((((((((()M:'ttSOE: +( +( +( +( +( +( +( +( +( +( +( +( +?*Oʀ%((((((((((((()⥨ +( +( +( +( +( +( +( +( +( +( +( +( +("Pj+ : +( +( +( +( +( +( +( +( +( +( +( +( +( +( +lN4G?lN(((((((((((((((((QT (lhV|hPEP6쟏_OQET7_EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEE/_R_-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEDKQ?REPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMSi??'MR)QEQEQEQEQEQEQEQEQEQEQEQETI_TT-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@M,-E7|TQEQEQEQEQEQEQEQEQEQEQEQEQEKQ[_ԴQEQEQEQEQEQEQEQEQEQEQEQEQEQESdTu6OO?IScTuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEG/jEHaEPdVkBVkB +(!dMPDz~?Φ(g?MPdz΀%=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h6cZhZhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh G!*h?_ʦ=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=)_5%2o2$J7T ?PGG-GG-GG-GG-GG-GG-GG-GG-GG-GG-GG-GG-GG-]MzTW +hhhhhhhhhhhhhhhhhhhhhhhhhh Pmu6QZDz~?Φ=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=(=)h=)_5%2o2$JOf((_O {'j(* {?j( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(!gjj_((((((((((((((((??((((((((((((((((((((((((((((((((((((((((MOO&S'PʟLLO((((((((((((>g*>g*(((((((((((((n?t5Cq,렩(((((((((((((_O {'j(((((((((((((()ɿTC?G!SS((((((((((((((((( j + +('Z'ZQE {'j=u5QE {?j=t5Q@yW(Nsggqcc"Auspl@z]W|K.%f٬w }POG,K+0Ztd"svwEo 4H 3w5jj +5[m^PGU1c,|I' + +ӎ4IFnd[Tq=Wɸ4kv`q.U+Gڽ +f $j#5Gb%Q`]~ ?ngV#:Nj.QQ\\Ais4pœ0U_5 >A;kE֢0t # :'Ƴ_Y ^ H0Y\acBRaZңΤk:+^^yëmCO.mdnߧn.㼺IBk&^ʔtm[ThQ^asK}FπmTqǭu~ gq*6捧'>=PPIn +M:*+N V3W`>Lc׃{{ jui%澉K캔qmɲEiJ*oqݴ~.ѵ[غؼ&Q2n鏺9<ZcVX]0S^i2GK{{z+GJҴZ nE7yMBEj7~ ֍8Dnn1'U/FL lr(1XVoaڻ+(;Qe>j2m9~br{W~"EA,nC}ܱ8OMm']%uuEyv KR@eW!Nz]4VPFrI5(j_qp\(M(((((((((((((((((((((((((7??ʟLL@?ct*}21?>2*ӭoͣ~܎wA"ƲQ_ .cY!CsLW3O'3H/apK)OcZ5[A\WoEE:fO񦯧xþ-m/6NOp܃G/xEPK}'b)q~8\\3ZEQHeV*9 wZhQ@Q@Q@Q@Q@Q@C|U5C|T5Q@Pi5XcvB*pyP^U?:\àXȐ]\+0?"aUˠmj/k(]Axqx[Ny乘Rs}HLD;X u2/) +#|Q=<(ȩ|C/5E0˒^z:gWs\׀t6<cm0?j~pOS#s~bAERMzZ ֫v~HWL#ܚM:kVvZC F `DZ?||$ z|#%EU&E%Q@Q@Q@Q@Q@/*jYASP\^KIt B_j2Px5Vni߫\xM[?z ('B_4ʟ@*t=-5U{rR0?Ksw:K-<1wC{AlӬPְ>$jVG jV+m-gMo]\l/*DV˺FT֪ĝKkڣF&913knOѼ ms{+׈0}>xJ<tK?%yx.unqx敵=㏃5-FD|YtNN@IIɦxkB!5F?.6;sz}Wu8ԸKلHG%|8nx3ģ~b)z,ǷC`Q^E^n-u;{Hd@M8^~׎(\+ֱ;u>8S^yCx@׷y* "Y ^wK +ggߌo׏ϊ `K;nkZۨ1T`c9/x-ŶGC [-GlJ@,.=(c_<Oj諐ayu|>.onf!vlHÒy4=5eee>N-wOW##ڇCڢƴu7yA/cw67- =ZGoC'rxqgoud#g$`:!8i'/^J8sy{yY$FٮK.]Kr6po YX.ʊ5uRp@-Q\-閗گ5?̉+]:q1K{qQ|BUм1jV|ͣNv&.1ǀNGsEETԭt4}HD*]:#kk[+wExҕwtQEQEQEAq?ASPPEPdVkBVkB +(!dMPDz~?Φ(g?MPdz΀&(˯|]īo{xӿa+duV'g-W_v6h>[ FylO^źZiGL(l֓QҶimPQEQEQEQEQEQEQEQEQEQEQEQEQEQE?ST?lM@㰱Uv.=gB0n'Tb<{Ooֺ37SeJTј关 ~{ʧp8]jI~cW?"Iի֭oQk /#Cl'Q:WU J/ii¯ĚjO&8qa:$H:+DB"Daf /NГWjqyG}1HNknVo<7p6ٗz*Ɣ{L_~o_ҿg\A~oޡ[B_t>sVa~ӚV +nH?.T*-t9AlT`ڸ/Kb.F<Q]yA .A-p>u.mOfk5˵.aLtjN=boi_=wsxnx}#yexbN!U9H>qҳ\m\v[J^0ֵl{`}?Oλz4|7m,n4$ǚŏ9 {AS &d+'n&\뎕5TkTڄ5sgWv: +K 4.Ip5- NFWg9;(?$7|Ayaߝr19ϧ5H)R6lI5i^o-1&kY|f ǷOm]: IeN^?-Mɧ <#Y sNՇ>`<* 4뛢G$ `sWwk{:ݕi.%^) +H\fӻ6(6SVMcHW cXzUt;Zj<+9sSNo|۷JUmy= L^:W wa`ͶnDi?؃2@^Fsz2ɒ:0\ k +M[K`ڕÿljoIΝs>8s/MA/(kb\2*ِ9<{Bg}$ O,pI5OJ4r^Q*:dT4 kJ 3~.>h[.V$U*`hR=3.4uX;LwIl9\>g(W#)K{N>~Uh>?x Ec,}O5=2X-aaKW6q=疡c8Dh>% -AnE,sCZ[K0`t]?8-!HmPƃ@@kMmKvg 0?QyTM/tXC 4D;uWAyEPN[fm.$>sC.ߝDH}c4'4+ :j(Š((((((>g*>g*Uͧjֳ$q\ r/iTn+m8B tWu+f0Vg4+]c~%]kkFX'''ӯұ>(>&1j˷qF98]3ϯ{ebx^-O8eCdgAixsP5 9XdBi\uʎ>*/_&Ѿ's$0fڈ$?(Σpah#c/0;h&HAx# ~C8&RX\:0e?j:l5<+JHB7 d),ye m*e:;7x/%{2.-?c_ a^Xzwltz25֢LQv@ɢⱶ2@$`RE!Q@Q@Q@Q@Q@/*jYASPYvjpX^q-\ա\EuF!L_iQ&9ߌ[ZhXuZMĭ+]civz6bMK0 >GԣԮ5{bS34A8WI,5+T#0z9"%$D'*2?W|8amikgC`"rr +_|Q ĐYtqBqQh:_tcZ%!rKRO$hJ/|3]]NkIKg|;.$]3Y6 t1?JaTհsB ~/^_Y|?{xʑpDdƺO iv>IhU#ܟZE t56yA's̏ed5vI5R1OG@1z_VBkqc_a!zENef1?vxmLs5Į^YO0)!hbMBwAq ?T(FѻëqR|?:$WJ(RCuEPi-7:FjdC5KQHaEPEPEPEPEP6쟏_Oi0;'~UMP4Hvrx +sJS,>[ B.-fxpUi1k&IƜq~4QK ]75Cj.1ͱᔱaxw[nyGⴴ!BG y?4=wĞ5[ԉS\9:{FyRo XQחѬ1ӑ:_hmlQn'JF:]HusꚂ Gq\y5[Kiw +Mo*7 cJ5>$̌+.A>Z4VF֮I˻uORy9B~hZu 0A8km?@cd.NOrIsE(;/_/ Gv:?,]cVyI,T@&/ +M9e\ Q lQ}BJKO>ܟjj:NOQT:u+X,#G15^׵+R~!QF͐rOAЊݢ0JeѮAw˧\1p +ȩהJKxK١d2N8g<3S}uu,(4qܳzR_&Oэ]p? tb>(#=@*sBb҇ ) ((((()ɿTC?G!SSo^ ķQ'ȼ"|>e35w4KT~v>ⅠonEcgwc5s*[˹gCVv"յB+ew~Z(8bXac4ڈ@( +KxwU:R +*_̷$~m@NPrU56z5 {;eT* u<==#ڌIy}H0חy4ތKc9u# ?WAkoA^Npsq5|(y|Q%m拁|YW0ףVO|=c]4Y_yE)a}D)Ea|>53_|˩nFm⎀Vg.\ڭطkK8ߧU5w>4CV;5F)އ3]<;xM6:daєl>i֗ykZDCEzeBGhXI1$Q~/YVIZO>a?"㎾1MIJٯD9J_[C a^"Q,P<N#K?ke<'|T +,Oǥvt;׾ k+й2>Wh\:.g[ckt6u=^8W"HYI#LQE# +( +( Ơ?((5Y5@Q@Dz~?Φm?SPEPPdzΦn@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?ST?lM@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@0MP0M@Q@Q@Q@Q@Pt6.k;oc؜_J&(C +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +ddt*}2o2T((((((((((((* ((((((((((((YAST7 + +( +( +( +( +( +( +( +( +( +( +( +( +(!dMPDz~?Φ(4z5Յ5myۓ@zb((((((((((((7??ʟLL@?ct*}21?> +( +( +( +PniJ<2fu9b}iQEQEQEQEQEQEQEQExkH=vŧ`_1 3 &h B<=`,8mݵ2I>}ɭ +((((.?*{j +(lhV|hPEP6쟏_OQET7_S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7jg?SU}y֥}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}/SUywj}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}2o2ϵ2V&'tSPD~@QPo>o>)ϵϵ>fF@QPo>o>)ϵϵ>fF@QPo>o>)ϵϵ>fF@c?ʟTQD@(o>o>)ϵϵ>fF@QPo>o>)ϵϵ>fF@QPo>o>)ϵϵ>fF@QPo>o>ˏe]MUb|KPo>o>)ϵϵ>fF@QPo>o>)ϵϵ>fF@QPo>o>)ϵϵ>fF@QPo>o>_O^وQu.@QPo>o>)ϵϵ>fF@QPo>o>)ϵϵ>fF@QPo>o>)ϵϵ>fF@QPo>o>ddt*7jdLO?E>?ڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yyL}}S7j7j}ڍڀE3yy?*iv4QE?՚Ь?՚Р(m?ST6쟏(nST7_)((((((((((((((((^֥jZ((((((((((((((((*~?ʥ(((((((((((((((((((((((((((((((((((((((('tөMOE:tS((((((((((((|j$_/Z( +( +( +( +( +( +( +( +( +( +( +( +("Y*Zogh(((((((((((((+ :Ph((((((((((((((4l@N?(((((((((((((((((^K/jŠ(օgօQECk:dM@Q@Cu:g?-QLAEs.]dž+Fc PCw?V +v Zk> ->rK0Iu8?QViQEQEQEQEQEQEQEQEQEQEQEQEQEQE?KQԴQEQEUu m.[˹C'zMʌ\we+͢$K|CpN3 YRNt5ѵ( +( +( +( +( +( +( +( +( +( +( +( +("~?ʥ|_huǧIML7y1W +rQ2:*+>4!_&#e3GJdr :NE[QYQEQPyd|v8BW`ɨw_MncfvEWRq `* + +(a+®VLm(((jڭK}{&c,{=i.Nq6.\~,.mk+,ܮ*?mh:lM͡u($AgBSXQEbhQ\0}Fk HT{sij}7 )TIΦttFm7QV Xpkti ԕQEj.1ӈG;w_'J/Rɻ+3/mgSERJ<# _(5xj?c*`3J'2OqΧ"涇QPڻIi 2)'⦬Zw +(Q@^WN3&e8@8owz/n3 16hK:((((=eͯ_iZomo,ye?Nʔ_] Qoe_dA3;"ynTLi3ޟ\EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMSi??'MR)QTMVEӦ5 !vCԟJ=6]wzSh{oq-m;O΋A%=sakmh'NB{f;z+ru}.G6H&q"J8?lxz48]+kQ\3xđCۏ&"qf#ZtxM:Q-J؊,Z?ɯ4Hѧ: 7Vڝ[_f[1!f>M;1\z(h0((((((|j$_/Z( +( ++w<76mgi]3b"@#QOS\h\iMyiK@[O-H4oQ~ \cE"X/.$xuQEQTmREҮu+on>ܞr /;)f$y`81QEQEQEQEQEQERS?K@W!xlӠUƳ\F:oiZ'.4Inmu'oBOϜWaywoag5ԫ(^I,W5R{.Le̷iHuB #g({EsŴH\vaNsnC~qk&inB_WsŠ<Ӯ>bqWB.! ze,;j*id;X{3ǰk޿[}G=Κ)4ב2 >'4{E`[ź,f{w-]Dބ~uem^wr7Cel>lyWXǺ$M \rAv)s~m۫+0eaA"QEQEQEQEQEQEEoRVu-VfXxoHRe)|,z*,|s5:xi<ힾN7g\(_.H^ 20 :VQEQEQEV^$;{ 6`9q'aoZOR}ː8Ϩ`=(EPEPEPEPEPEPEPMSi??'MR)Q\wzzdeLv$~>EPEs*?#)Դ[fzt +(((((((^K/jŠ(օgօQECk:dM@Q@Cu:g?-QLG k+xdgf< (Z|Olu+\흶݃G sWSs6jn{US"L;g[Zx[T)6aI֘8fE)2:\7'6h,@y{sI((((((((((((((^֥jZ) x&51Un:YN*цJV|vЃ\<3x;{j߾C1KO C>d{6;19]y u5;TV _>kl3|ii:ej"4w'$װJi?zT`%V^Gvg)O m?uQ]LjQEQEQEQEQEQEQEQEQEQEQEQEDKQ?Rڸ?ڎ34[FN?]\ï;LXm=HgC-Wg[-?LזN5K{x?p^>𾃦~QE{$23dN={VoD +k ?6UvnߗӒ I[ J-JN`mfeXOz~/"y :zUI·c5Dp4Ql=oGuMCI{ulBcb#[I/z2jȏ?'EHa{=|J6'8v[_R䚔?jĂ۩!l9NzR_Gײ$T>[v[|j7jv2Oua?*qX|G-ZJC`NMe;F6_OzRTzz/^YХn<6^Q{qxfO.x܏psxwWVǍM?B+m.(I [zhVZ^GEHeYSYt^ׯ/m]cв#2F0) +ȧײ*t+:{/Jv~--5Zyy:mbU5鏽u:m5 _-?gHZ+O,R׏Ta4g_VZ}NXMn]j6^tB]x޹`߼쿯Cys[6T=&X[{u%`I#wi>Ѵ+Ӭ]v3yZHƃs;=Iڌv-IH$QG\7:߈u({Dq$~~u$מ:MgѶ^c ?)}caamYEgiG]/4 |RMIl4QUu$wX WrYM_^{-PvSpq\ǃq s;3RK1b:I~֯{jь=N+u@&et,AV OPAֻ)r]m̯ngdv8#}xt˙'bxƟZVʃiV6N]mn5]oUI,6^lR*=GZt~3vm~kymG%O_Zm l#%ry'Zp䒌akkwo +\ɷ+j΋tdPmr߽p o'mo?Lg9|^PgDOЍL iTX[mK/u"`v ]Ϳz쯬)l vn##9-eQn]c#֊]W1/],Q$0Q"(UXA| Vi'#4-BO7Xis5MkN->P4ThÀs53NT +>u{#?+v\T<쿻(m\߅O4:LP??/c]`@ +$]͓N1Ԏ_J%8ս9* J;: 꺯[HL`3bH>櫥%[`𐸓 {Vu;S"j#hGakZj/OODLTn._X[U͐ +C? +𶾾"cs1 1Mp ՎK,bׁYRҺKn^{Q\g@QEQEQEQEQEQEQEQEQEQEQEQESdTu6OO?IScTus!u-:Qi-옷~V= oץr񡪀i?y^^mz?R=$AdGJѴHy =M^;3{;[N0R~Cq]𭝏sd{_ }Zwė[x.of\{'(;Wb]~ދ]gDӼA=lӐAA)EuD.y;'ݳc:l3x7AWm#-˫›njk{᷇<*vW mf迀:S_>tg+Kv@8Ҹ?c +>}7éZr@źxoȈs̊[>nA7ړپA9GyQHaEPEPEPEPEPEPQ'RI_PQTM?SMwvhϴ˕98oZv.qXsyzN>%.f] /:_1DAU<t쏄<]-۱%Y>g~%xP^k4V[\DE 94%Q@Q@Q@Q@Q@M,-E7|TU =M//-#q"?68Dmy\1r1gs_[3GJ / }>aV>/KoH7wQ@;ITV)u%$sNU_v?_rs2Z/R5,,+ +$!<9>]^m<ȑCG=9ƝSeGBh#MI-s\QCGa`Hàs?SR@3r,?cVGq킕^{X~jkrW2H_p#?h?na圾\=3?žmBš}7 W&w-˜zd|)#x/H{$il7 {K{cNx΁c튾Hb [tXդ``OT|/jSI5\M/ߖKd.cc?!>m-0,rFA'~}E㦾 O.BG5'.' kygmQeYy]O<x%rug叜}DA{X<Pnȁ{'$Y'p~3-,-CS5Iptg6p gVҴ贝"NU+1O`\) (((((B?Υ/ZO./aٮwCш#^^g /~ fN3IgszӴ?HӬᶍR}Mq۞"~e}/Le$L:SQ6,-06MxtmjSuIDz4`,6/k:}/mM._";A$R|~OhEy7A\1xwL(Ig4xԇjz.H? |D^,"#xS?2}{ַ|P%gUԬ6;c=k8v 5\ڽXt, gn{_' װih_I1ׯszx4t&^oTSjRRWXB}+JEԴ?:ׅZ0B`||oN9feʘ͝PY'#2Ndk?hgD;?hg\u@Ya{MU" =x׃xpi&Ȗ-EhMs Xe@]^&5PXѮ%sЕ^ +WYIi$m*(>~P`s^k q7`c40DQE!Q@Q@Q@Q@Q@6OOSdT#Tu6?IP⯃.#^Y\*ROG>Ӯ'm{M"r;q*Mr>={# T 3Ѓ/ +xr VX|?G"`@b9Oe\˺&h7.J)+`3Y^+Εus`Hdtc;zx^:_)Io#j r[p1Sxz3VoεHcIN?J_cx#f7 .<xzz {:SGUA!`>^wF@74 /^䝵k##_Y'*y}+\+??m+Ƭ?VoKoy!nbAWi*x=_J:_x>Ԉy+l dڲP{t2bzFdӥhi:L0\ x^|쏠$ר[5][# taCg>٤<3_YjFc `pF{ q7:%|ȣl̄mV|89j|!o/j>/7ߋF-ChcM>]D5hX0>w@\񾧯_AK{%ѮhC[;y?]f [AiW14mEW0jQȦA"x*FsW#=sT,ƭqq(tDj0ղNx}k7Z;\:~đNƺ&Mk;;XbKFA\MfvvnĖ O\_csҴ-].c.$X_޺+ ZTk+IVpps,4 2ͭ,c݉f O\-a5pij *#6ۿ BihVWI4 +Yנ#sFXjucuУgS#sFivkejYzz4iMj6 fEz5kXj)X +F`h>?Jӵk Z,nb֍?Iҭ^8!v,Ƚ =zѧi6M.ř']JE22Tt`7G(F\>6.X5>.4&I{{ Xػ*&;Im Xػ*&IO~I_!JSZQ[Hpû9wz{*Fۡi6LpF];Fi6];r_}>^W]cIӤokc b;1 M8c4}oș- +&'3:6_OwY>ɥ;y_}굦)jPɶHmXaG;Ic; XIMva"XZ if{m߸W5}.KMD|cQ\v}I6N1ֶiI* h )e[X>6k7RwOլ5O;7Q6h (L,mcL>Ol4;6>6h8˾c( ZT30>6hլ5Fl$~I8 M,4 -k+X36j)ss:x8eMY=Ǟ*Ōާ%Yx9JM?l4ǝc|?,t 2K}xkXֺ߮㡒ovS[:Ld#ɖcݱ#9U|miim]Mo&.=@ҵt 2K,c|G?΋&M[;X{)Q?:ԏ,NߏZt-6?7& ?<3soߋ|5o(&9$elezXl3Y /fQ?:x~TtBy&YlXj'ڶ%*経E|6{uapmYa w>ZD OrH<֌67qBqsΐu}a\\ik2ܶG.5sǕkƟ+.ElQEQEQEQEQEQEQEQEQEQEQEQE??MShR)'@j)ѵB|4njs#/ïOIڔ&1Nxۻ^E;=Kl>?a /$9?)<~Uh k$}HLr;vv'K1<7eu-JcB2=:e:KE 9~'RXʆ.?uP1m6mMqw qǭtʪ@ +-QEQEQEQEQEQEQETI_TT-Q@ƅk geïCExV^$7fè>5?5Z1iɎI#ڻ),AiimYEikmD^{dY~dON}N?ZUУea"h;b*PQE +( +洏 exYiGۏOA]-QEQEQEQEQEQERS?K@yÝXxZwħTq^E 5(?Ek];(ӵY>UčA7'hgtQp88|p-Ɨ:g;-I0{+>𽌐Z4M3..gmLۢMJ ۋ b#aB{2~5_xf93{WS{f:)ttJ#$*pã)Es0/pK/dj$1"Nk iqjOurnt7Mk^u-\Gop ,yO܌ub|1\7rjZ>}ˆ#2v{zMEQEQEQEQEQEQEKQ[_Դ?(ucp}kN"[]i@m6l֛%}EvQpx?1FF(hUa@rs^>[UCMKh:ƋNelwhۂ}뮢GKCǬìƵ[-H(ux [΍cS麌"[igU(*#Q[w~`F30OA6s|WO6cӴB%坏VcܚӢ+дKk:i3`ʙ]%MWP5$z\V4c^nSxG*\ǎHڹx\֥B3Sd6F=OQ^BjZW]L4?g?_Io9Ҩk MGV֕iMqYW WSE++B"Đ oaв.CQEQEQEQEQEQESdTu6OO?IScTusׄ?<_ns+w ~Fz(LȱIB3ノ皷keϟYĦ5XgxF崭 v32}[e>`r9+CĞFdo hp^ 6:n^#G_FHZ,-t6+(Vhdhj(;CuU Ʋѷ8<Mvz'^Q2K! VONym&>Ty-onybSQq,+?uo;m^8{T5 /?W[eDO]iNC:lȿ"ldX]h6>"$u(̐8daє"p8c?b_ ?vH}<Ͻt<5ǧiѕIff9if=ɭJ)\,`1xMܽŴqmpˑz=6þ3)' +g"ޠ3]\ xRvAq,%qV\ nq<[sXͪZrX{w]\,r߄kMy խ 9bI.[z|I;k+OM*?ʍ8w eOf((_O {'j(* {?>fFOQSl>l>(>fFOQSl>l>(>fFOQSl>l>(>fFOQSl>l>(>Ի3_>fFOQSl>l>(>fFOQSl>l>(>fFOQSl>l>(>fFOQSl>l>(~{T2OjfFOQSl>l>(>fFOQSl>l>(>fFOQSl>l>(>fFOQSl>l>(>fFOQSl>l>(>fFOQSl>l>(>fFOQSl>l>(>fFOQSl>l>(>fFOQSl>l>(>fFOQSl>l>(>fLH552o22%&$tSj"S@ }}P6j6j}͇ڍڟE3aa@ }}P6j6j}͇ڍڟE3aa@ }}P6j6j}͇ڍڟE3aa@ }(a ?Pj6j}͇ڍڟE3aa@ }}P6j6j}͇ڍڟE3aa@ }}P6j6j}͇ڍڟE3aa@ }}P6j6j}^u#|T2YASP6j6j}͇ڍڟE3aa@ }}P6j6j}͇ڍڟE3aa@ }}P6j6j}͇ڍڟE3aa@ }}P6j6j}^ISu.LdM@ }}P6j6j}͇ڍڟE3aa@ }}P6j6j}͇ڍڟE3aa@ }}P6j6j}͇ڍڟE3aa@ }}P6j6j}͇ڙ*jjddt*dJLI>E?E>QSl>l>(>fFOQSl>l>(>fFOQSl>l>(>fFOQSl>l>(>fFOQS +mj{j +(lhV|hPEP6쟏_OQET7_QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEC/?SPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP2/ST2/SPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPLLOMOO1?>ʟ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@C|U5C|T5Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@/*jYASPEPEPEPEPEPEPEPEPEPEPEPEPEP6쟏_OQEQEQEQEQEQEQEQEQEQEQEQEQEQES&S'SLOC?GEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP=5QE6Of+>Of((_O {'j(* {?j(1E'is\bC(KWx +iEL$z v?'ʼϒ7[/Z+)`Ң1V|XM/4g)G#9N-{QZQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@0MP0M@R}?F <p55ͽ}FR0&gx6~#)Pu_3իm +QB́)+)CϪq~3ִScaWz?$*k\?nRҮa8^[M˞Qn ++_ +o=9P$砨Ɨmmͱ.2RU}7נSrݑr_3GmR(XdZRЩTw:+CLPk7\z(u]~mgjG~R3?c5.Wi G:fa$a?be*yWu]vP4/-@ס>gHO,:zV36yQ"EW)UMOQt鯮d0=Ϡp5 sl^:֌ggRN1sk÷ڮhڄC1o;$'Zln/cA} + +í7֠2O->hMXob`U;1 +dt/XY\V.!P3 |AOS)n@ʬǒ?AVKB[k"#9)KxIJ8 }9f>FN*='.lz5xOėIpcϔt? +-ZxV+)T`^߭kz~ػwO${YNp̨P2I< +'0`pJF҂*Ϋ`|QWojqEzU7FҴİ1 +G%I"E{oso؞Q[;煺嫪Kr|gYtߊz4zB.V>NIN +ңQA;y%ԩ#&Af%>C*\Ak#Þ }WW mRt>kzEbw;7L9+*1S?27IlvQE`jQEQEɿTddt*!SSv\ʑAyRMq H<ɃXUX[wfmΟ1{8 z3yk?h0 +i!3+":e2cH#ұ;}3i\Lfm'!b۾c9^V{c}Ojًxn6JxʪfӰ^"M QX~yv{vz~i%Ŭ)"t?}6QSI{eb)^Wn{o ^NѼvwW-8#⎀vai[D2I>x{^_>T2}q}KY?u\f/py-Nma#v]u6\ʑCy(I5~i̍+K'y$8,1];C <2'VE`[ VBoN|AZ ]MWBdCD*UoFSȨ|%]xGNNk) 5%_M$?rb^W/駸f+;H8Eg|K俆RմYg;a:d>ԚXC)pU'=-'iNu+p/23*:iW= +E hz?(H/#VtgѬmn+g9`ָ+s ox~.V7]/zHw: +xdsYnUU@OUċ+MvGB׵ "eQxl`VG_? t?|[m<[|{'9 + L{v\]xOpA.Tz_V]ѭ5KT H(ZmNM#.Eƫ:??^egcogn!5v`POERQEQEQEQEQE {'j=u5ACY#E_(#ZmB-'H&84WՎ+w(_ΚWgQZGwi -)dB;2+iMc]asC,4iIbH +~Xw=_>(]caE3!Nx8[%i?#g|۳gǭɴZE:KL!Ƞ+r8ٯa'k;f^qׯ=+|a-( 9Ďz+3ƧGy_j1$ju%p{`\9wXC4uMBIwiY¯SeIӯj4]j_m[-o:n]pr(\Ѣ6g4˿3Lp\fvx@qWv(Ky6wLH7 }%o7v~9ϵqQj&\2Gf$0X.zeg뺧.{> K'کx6I?|';yJ.!}x\@HĢ1H8݁sS^)˪HlptU^7,uk}B9I=još9EooߚCE +m[LVrhz#[4i gT.]R;Q/ڋɼA[? ^E<-cT;t'$qx#5ş̿ÿw9WڡW"g޾ost.vTV7uJ:UƧu$PCX +/{|EѬdo&Q:S|٢shX[]V̷r7UA"o5i#Ԛ|2aVs)Vl.F@#<`W-vhZ2'ԞOߜrȩ\G4xZ𞕣3Ae,-2EW!7c-zڋΊj+2Er=5 jo&4[Ȋ+i (((Ơ(օgօQECk:dM@Q@Cu:g?MEPxşO^᭴~v#Q + GOzwVG]7Qy]$\2H#׊o\j:ݷt=G7ZO/{&OLR$jcwh}J=pb*IljU(o>l+ zUcY%;}Z((((((((((((((ZgjjN6p Gg'3/ x [uwpk6޽֓V3)II;T)IJ2_\x;qm7?mٳ΍dۜ#8qW klm%i +odm]*oF3 +(:(((((((((((((d?_ʦd?_ʦ#/-߉{nj$!FYkd?.@2x7@xWVYzs/挗CQQkEӛ=ѼYK +Yqrn٨0ĥ<ˀ`#qӜtyl*5y3at4$%׭.ÉosF&V߀un*a`P]P1}k'`UfT/i'h*H<:CV652Kx#x{tqPIk]~rnIƯ|xk_0?g/h)igoi tnPI珺:uۛ [Zm{_$I:Ŵx19Յ׽o}h]$@QNG_ ")!^'TCi r=/QIL+r;9=u~&m5 [\\G Nv#j9qiWwwsSN44Pt Wel5/:r[]Vw1DWP7{z`y?7^xUug. gҦ0qvZk.g -#_6f ]ۙD`-ҶSqo$x,J:\1RG{-5>˔fR!>ZߋĨl20oFsX:sF!dVյZq޽>5=#g@auh]_ +pz{溺jBQ]J@>㚽-@gh`vy*u*9w}iF QKq8˻/tNOv {SI'RzF,rOn7D=Px#Uu÷0[q6[ՑsIYzX E==V<5 }zᥐU5}g˹̬)A[P]Goj<1FA=: _i:ωoYlp:'Q\Х+n SI[s< +H gg':>s<0[p!fq?дot=QGC _26dcMA= YTkKɄ{O`Qk+,M.ER\^{(wU-|ߣZԹ>UUܛiC Φx*5N44~@_-RHׯO[Cx&6Դ̺X$[_$:t馣(]3Ao j+ԂW#4:.7&`u z\3ZGlvYCavnczTtCJc,|`b2}֔ԥ;pu11\'Xp|Gy!E3aU.dgr^ Ӯ|?;_ֹ5f~/ԂQ$r,WZ $U#GYGծU"aWF~P3{UKiq4ȩ5J&v~kԏZ?r4&O~T"kº,3c <43b?ZGmpTzsV^4mKmY '!NE9FTNɻ]?TMIJnYS񦓫>\/#r>'riSP.ӭPx'sk`(fFځ z''sZ)$~A?Wik +.Jovz.tVhqǥLl6I v#^..UH~[T֢5hij` Ah4hij` Ak%%ՓLLJӎλn If6@c=k2zom.t+pFqdѕmš$Q0TQf8Tv0Zso"O}oj>n [i'14NFUJJ|{rfuyy=vQZi0G; b85wJo܆/H>c[^y:m]$QʶQ*Tz3*n-~Llx Sҍ[.2WqRE_.mpDeے\>[mum簖aP;):NJ5;m>9<ŴB%Îc.h_i̹/MCTo{cht>7ev X`(9&ϋ'ԢээBv X@ZKnY/nI/QGakRpZjZvͻ6xQ*΋iӴֹd1<IBM[[ḩAF%$k:U`QuF) p wzvcC+{|+񿅬mtm2;0X(guV^R KIfUC!u]7o]o@:{I~ȓo]dЍ3SởgKGo ҖwLQ#>NNq(]^~buR?Ԉ4YzUx?cĶԤZҦw`烞35s]C.̎x:vK}W\qSi6wAvp/Q7:?1(F0i5} (%tA~2Ȋo +i.neHngss~[Jկ ZTlmQ*$=+Ŗz_iq[ Dyڶ[1BWGÖCpl;;UDTP=ʺe/$~BR-{1+YQtM}j%fu|L;aGZxvP|ZCy:~k .9GSj×/Z@ nfL˸Gn#qR1 +(Q@2o2>7??ʀTd?ct*}暷+$ o#vOccnǭps_\yeNy#{BgW3[xmb&n[Kw'oE:%g?p<79ݿ=<XՒ_ _j7LK]޽ȫBu^Ɲyq ve܁?{9xY:'.>Ⱥo܄ 1W# ~e?gy##vߴ{Oa?kwx#8 @?|Qv30\˗wjZ扩L:=.B2X FV$_f:R6">+c4Kq%ԆkW>݇^9hqjk&CL@Hy\J}+4Xuk{&aO[7~ִnVnmV2aQs]l/SEbeawff?q[!,H#&*J +( +( +( +( +( +( +?j?j^A|/O?Ex]znڗQ(4͊/-pS=:tŶ5udˊ/0cr9+G~=\H9wV+Y[V[Ά9q+|AG֏u`Kjv4ȳ4FJrVψ|)i~yOot s?#POhnht.9IWN~Gx;\Ği<U 푚>$HƋ.CcLm}2NM\\WfOm}O8(*"U*k{Ig].|o$}3PʒF`]Gz.|A=Jjdry[PǍ|Wm*Lb iQ^`pZNh>1LZҬFQ>vqy|?g~oMn~N^ceoXAek8vP0*vzWC+ι9kxv죩?^X#φlt*uyc[40AERQEQEQEQEQE {'j=u5yBh'h ])o9? IW]Xlc+ּ)@ufVfSqc;{Ɲ+7mY?)?hvoHïx_*I?|1ұ5_궞"-o.-ݥvsK>Wwhݻᚇ⯙ +sWCNZ%OӑO ǧ_,$hLt׼ \7??ʀTd?ct*}y/č6W->/6uu=w /Ut$, =Ĭ?\w<=A-ۼ䑘;d];!+x#HB"@+-(uN yDF7iٿ;wck|CᏈ%d7+u,<}1B5" ¾g>qҷOk>o78ۻV<[D5]e'gyɍ-ߗoi}+ξ *ﯓ|M?ջ.jmZZH%CpPH;WYh~-+onW'$rrh WE}Or+Go +x;_1\Jae;^x~9$G\6TS}8KnPggd!rO۞)>(-@ ^Q?y>o6sj_ |Dе-V_ tV*%ȷפ<7{{}sֹb-Ońn<d ?L%iOՅLj ̟j+Y|ܦyχ4mI<-%қ,I6)̏/ :tOɚ_/5inЉfQ ޽*#a0C!,mqOc>J5ۋ73ǩi g+C pӁwTHXo'2b'ᮝrƣ]Gb՟x{]ii6ALı'~~Q׵d?Fy'(ӉBerpFxPw:2Ph*hx÷T"o?wM=->6lG)x? mH#ŗۘ$k6ntyuOkn𞟦H 1s\ZU+'%7v+'ؼ<%dl<ֵ{YqrG'4|7VAes둚%7YdB5L \ֵ{Ypc&ilh, !l9Ȥs:,*H "Ͽ[Ò=i^QPa`}r(wФY0 +A?kG~${^<: TT]?~|< DD]?kB5d^xsOhv^sOh69+^I0c"Ú~fYh_ q +[i4 QSk.1ZPMZmGN?RcYj_ zsQsO(yAk.5E +լ":4SCHYal|2s9,zM-ckB5k=HN?WѣҮAmݛm(|909V*VN} cÚ~E,&V@6~ѬsO4뵐[AК֢Rj{ /sOtȴȉ#"Z柯iX^,DN&Tp߇4OdbpAM߇4~+Փɉæ?z(U&g8E25i dpr?\(moCNv>Ӑ1ֽ*V"usO 6!'i1)ui"d) ]ҵU{̝wÖ" 2]FAW!XdcV*VaEs'\퇈bd+bl}j5x;tYMCZPMZm}72uxmd"O16>}߇l5j/CiխE +լnwּ;aS|I&ϡQxv^kFY ̏cT{̝göozi'nχl5lY ̏kT{̝cöRެ#cöŔ׫!k9<ȶxp+ZIYw<9w67!{)<ȶx8>jŐd8>ZPZ`pѓxsO֯,nC%kg ZFȡXdiRsI7(veh Eg<f˭)=B=4,5Bd3Y>r?E?i>nk-2uOia}t|[_9ߐ(9ڕg}m| ߐ+ZIY} KÖa\{&AQF?T,uY6芾sE +լHN?Tlu+Y6芾##F?Sլu;Yŵ9Z֢Rj{$_C'P柩kZnlccEtGX.Csgkr2=kQB5H2o9Ֆ:nm?=FGÚ~Ӭb<>d{ZPMuH2o|9aYb<>4^xsOm5Cujc{#&MuH2n9֚!]4]r_fY ݪl8ɭj(dxsO*nba#Eχ4[krlM㞣kZ=${7CmȲ}6&=Gq>V'-ba\skQG/rG?,.g*>g*((( #dl`A*i~n-PT9$$((((((((((e]MP/*j(((((((((((((=u5Ck: +( +( +( +( +( +( +( +񗆿.?7(;YAmwc8*j((((((7??ʟLL@?ct*}21?> +( +( +( +B29xK.kZ]-PEPEPEPEPEPEPEPYZYdί*Op~\1>իEsxp^Mzmܑ.{=뢢(((Ơ(օgօQECk:dM@Q@Cu:( ((((((((((((((((_ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(!>`*(((((((((((((((((((((((((((((((((((((((((MOO!SS袀 +( +( +( +( +( +( +( +( +( +( +( +( +?&(((((((((((((e]MEQEQEQEQEQEQEQEQEQEQEQEQEQE {'j(((((((((((((((7??ʊ(LO(((((((((((((((((((5EQE {'j( +endstream +endobj +2212 0 obj +<< /CreationDate (D:20250701035132Z) /ModDate (D:20250701035132Z) >> +endobj +2213 0 obj +<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter /DCTDecode /Height 859 /Subtype /Image /Type /XObject /Width 3385 /Length 162795 >> +stream +JFIF,,C  +   $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222[ 9" + }!1AQa"q2#BR$3br +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz + w!1AQaq"2B #3Rbr +$4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( +( +( +( +( +( +( +( +( +( +( +( +($=j~io;O%3_GQ毣)P<j?ŸE3_GQ毣)P<j?ŸE3_GQ毣)P<j?ŸE3_GQ毣)P<j?ŸE3_GQ毣)P<j?ŸE3_GQrG}hQOOj +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +5lQw2K<dsieQO@=~<[G +:R}I}(Y'QFIj5%B*0V(m:dM֒0Urbcgn袱'|SgM @8jVL$#rbrUj +(tSTW7 knɝ2qR~ y? u+v=)0 m>`=;W\j!s H؀ bG#1ZۺP- +!voq<Y+40\5C.dP d秽jXkvyam3=x6RW#ҕsJ:ŃO ɾhh[匜gv0{g5[_ Fuydsqzp9H緩a/'[Ȱ;׾q[_VۿؾqF88sEsB̋\ B6 Bi!xSswgKcsiP^@/QE >~?EPEgiV6J@Xc''3*>Y5ƕ_:0϶(bZxmf`%e lz{՛+}Fζzg} Y(((&߉eU>隅ɴi^u)08'mC hGǨJI'ժ.k+%i 9NdW c.k~!W śQT/ּH/ A֧~{yU 11[ZՕD;ʣ,b❀Ѣ>dIxfͻ$Kq}olЬLcXEs틄yڄQ5g` ++Đl\#"w~٭kRO'ETԭuco&2C/HdzV&H4Xn# +_+1fV*QPEe5 a>TR[GoƮ[]Z S x:ҋb$ |N!zθ$y=r}@(-?MUZEgc+ K6=p(woPpxЃV(((g+[8{v)%Tp:L)lSJN_M9)0p[Ng[tQW ^gYW;9-fXOXn8צU&]Ǟ ++'X[{"QEdk`Ao5jM*k̻K*Ic6U z7R?H V}Ƶak46%P)$21RXꖚo!.yJ \r+--W+o4HxVqN*xvݙ I=i +%|G4| +N!BGVgu'ɞ{c`6w_ef(iܥyjtkI(H *+'AVV{YJcè55εch$a*BI##X +*ŝ3ai,߅IeZ +%FRPh#0f|D$ #^]E*pNuzPVH&d >v gf~`r2(Q@Q@Q@ D3$G$Y7!"6A#1ARx\V3|z}+6KIIKLeJF{zU*PӜVz#Ó\|f:9>,WI]d>XGf[H⢥8ۚ U&,)nR9Ctu#;'7(73 ngw3ՍiӶ +7o<(($ʂWF'kV +( +( +( ++Q:pʙx,wخy4X 6ŝ!e# b4yڎB4X J*֥ig*Gq0K 6zݍɷF!] +4X *gc(YF|R͏¦-LnPp} 4QY /:jעn'|YkMyjZ$b:PZ0H!r1؊$G>6C8ҋH=k:^nL+4!m\U/ ȒjFK);Ek7cRKi\C`Ңz^)-X=pfn]ۀE ~g=(z+ZKIme"YGa?.FO#=jiwo$Dqu*ErʏZl C+~h((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((6W-y:?j A5^}1 +#Y-nE;Fm%^1H'$(@$c +t/7w7 eU?Pg񫨋*"U (kG ַ+:F;qs C@xedXbyQK+/&iaţ}೰ WuB}}pJr}PGR3]ݵh (PM'psG=Z~!4̪h|åZDHM4J >*W/i+8gCeIrϐ9$"}G]Zo2g'=*=lFo4Ye6т.wm*@Avo bk/$ ;W>lY?7z,w7kfPaln%maq$7H[sg>4ow{De 6l̻HP41z 6qZicgD[g96&kᩭF"pw׌t}JӽƭXaq I"mD=׿jo @]m:F;& ]<%r$vZM}ExKx☄R}f 믲*ƌ!fӨe5Y/nn޿>R`QE!LOC?GYB*nZt2@ku-Zľg'Ŕ@Tc98hLZ(AuBqUɴ[9JHX#]36-J~緑kznn0nOH~"&=aqp:o.ZIRvQ۠"C(䪁Y|y?{U jeKAj\ 빊X&u ЃM[[X%RF! k(6{}$J㣅Bѻsc'r59uiR3o^iZ> nZ»R5'<> +&FcV*\d1拫r~'~ +oc!b88 VWWD=<+;6[!͇m?oso&aoUn4wq.XTO X?/ߔ!y8gUe?&mXO=N+Ѽ9i_jvNjWhHoE\ö~'ҎzĞbȒd$;ö?T:nV_";pvE=ݛrFY3;v>ƽJm"L[F#MHϹk;E𖙢q$ɿzܐŃp4l#axVM-|.ۈ1O6p61Sy=wZÇ6mrLMƴ-Gix_OVmQnཱƷ+=>+)nd M>+9fp`n(袊C +( +(3$v0oku?)&#'z\ַ៷Moo*QS^sYJޝMZ%+[_'Vh儉C)^AS4FjtYtqQs󮦅M&^EVGA:[IlEfL{VZtOLC!AiHmn-dc8]s{n-eZ@a@8OzbY٨(?56r*qwz*\;iv9StxIiE&{Ё{dbJI%,啲z}*1,i?܏A2P}qp[?ZՊ(o/8P),tbga,FA>t4:p1Qhe2?sğ(ll"IV&vd;v7-=+rcnY3x0úGLm:y<{~Fi("hWWxg>#&O("IMUXW֑*a0 O)su0Fq':4[@,:P^Al\&<+4xv6O}{< +F!_}jΒ8rRy93ѩOOޯ_`1!.X[k(Slxlkk|ٛ$ABbe+%SEDi +cƑ]Mq8UNyuD+$/p}EliT:{I"O/ߖVoZ_M{e|3pk k.]{TvZL6vYyb~Y9=n~X_LcXs4&wy9h/s'U6m\t;\kZ'622xpkb(S\sS>|Vw7*Xct} [yL] uMKg7u* $io#:42 AQDZ|P3+9e +N(I xn$+ǽ^?>uUK|Voob<|,6Nͣø2@t7hK3qQWYhwJ?ueGVƟæۘ!ge,_.A9?AQ[Ae=NϼϦ(lf>&wM4Zhc `stRNI?G!h ]Di8_Nܑڵm$jg DQE!Q@Q@3@ڭJUxfA3yゞg}]%keCb2>zV݅A0wR߁փz\smeX励%͝ҮF 3D +l?P.ﴊ0>Q]v C +(sZ_3Z)mpk"RBl m\sH58O7xP]E%Dʬٛ?ַ5=*V"B6Pz{VZ'6+ 5y@hG%u)lh!Ǩ%ˀ=_hj4L! oZw->"\ilҡ}qS?tH[..Ai;G:Fnu{RC mli]Pom̉@19K-n{1 +}#lVݖ֒4ysp0|ALѭoax‘4\6a8\ǓY:"+[qq4 N#]TⴹFv9r8@8Et1m&6an/cQ `Y{]4> * sj_=ΏDd#9GJ-t.n#g/p1ދFM[c*"pίXߦ-ٔI°9 NGXa.p ,-C*K+h]2@Ԟ3<' hHێ:j + M2%q8koNm~ ;&r *[X٬Iᕋ62 #[:ƅ,1C9KA'$3@a{ZEP!QE!Q@QnäLjxz_ij 9T1tnk]M|쌂@ڨ;- 'kF}:)I!@##Kqaݵ˳$R0sE RN$A|٦'h-ziC*=8:*Mzp\[I O%RX6tKtwol; [Syf"R[?]'LK׿n"Tv]EUϝ!>x5iAf}u 6el@'ud,lhPF{Yt4{.!3s* }}ZGe,%903 +Ѭ~Gw,I9 *g[X-d >7lqשl,bӬvD O'=6gIXǩ9{z eEO0\.yi?de98_V.Lrem1>\.&-Bم>3X:xԧt/L=[I-APq-_g3/n:w<~ʴ$ x;$?MMxrcHqR? [L$O'ʾQچ%GR.ȿ[A#GrDm2 hKͥ 9B?7֙i-q"f=$GE#(ʢ4OhgysR_Bv$חs[`Ll-QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE2Lb2$} z?€E3cWQC(S67z?€E3cWQC(S67z?€E3cWQC(S67z?€ axMH]AG1ƁsTz?=_@C(!Bv7z?€!M:9ۣ?UfcWPlo +67>fcWPʟHBb +( +( +( +( +( +( +( +( +( +( +(~?Ywc9Rlo +}͍=_FL!lo +}͍=_FL!lo +}͍=_FL!lo +}͍=_FL!lo +}͍=_FL!lo +}͍=_FL!lo +}͍=_FL!lo +}͍=_FL!lo +}͍=_FL!lo +}͍=_FL!lo +}͍=_F%)1H?Z67z?€#ًAm DLqS67z?€E3cWQC(S67z?€E3cWQC(S67z?€E3cWQC(S67z?€E3cWQC(S67z?€k#H#POz?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@C(!)z?=_@L((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((({}1CO.|oKm5IJV߮+FN4Bsg4^ͽ?oX|9cҶ7#5Bey#Cp:rh𐮗g@3s~Si\w"FwU8W[ԵZlN{{l>T681r8f|:2KVHq#w*/ZKiI ܳ +rG>x=*K}OzA=Lr(NA1Mթ"/jiy-7<ݷn}wq^)59oaOKUr@'{WZMY|3EbE%\4F{Pb:ƕhMmus)d2 "9dHsY~1|Diwwװ,% a|=9Q\^?E!ӼmMմH~s|I s^Ӽ-sW7Z\r +ߊSӵx]/DFDO;HzVV/xݵ}IH.EW Al dsJsiM3I* &Nf>!Լ[zp :8i/H264[D՝j-siv7:@3J3Qhȡ\A }wYɩP ύc$К8Y͍^> OyoQŝe 'Pt>:+hwVIcx7"C E'$׉k~ +[a{YACR,4 ׯN:V}Dk<%uz˘%*3ĩk-m5>wGf=+JĞ&H2};Zq;5bOs*MXi(C(jޙQ}\ +t+v.T c k֓#Pɧ4QMЩTg84㨞ǠZ]Euk2Mo*D9 =EM\]5I|D𝝂JWA0%җM.&xwP 6hYp /RDJuyw)b 4X.;huCO&a[}Y oQpB,J |i'?ycABUl qBW=fAjl4wy}#;THI4z]^1h .]˔e'$bKhKAX^ +]>ڴ$jFA r}kFxN-8+~2װ4+RHJꑠ3=I ѵY;VFY-BQxö'FYb880@56>vt%ۺ @%snqDuv5FYҴ/+;GqYXP ¼g?\4֬/,Ofx-љ\wvKgZ-N]y3U, WG5| { x^$#FH"t]?BFoK~v,NImiwk}m=y4R"d䃁Ca UkTdH@=+qEo]y +ȳ4R'8c5Bt?F? Gg nq=)sXW|=k:V"gh2<a5xWG˗⦓eqy`{3n/6zJخ=fY6uKAG moƯc $ErOO\otvsco~!"X$/ەbG_J|'eC֡qY ZW'}'i\އ^k 3ݪZYyo%C2B=95o|1[=MW}r:r9@+֗kZ.d@5f,@Oް۞ETʊY {R{ݕn7w7[IrU>5ݓF5nkk16RM#^JʑQNk\v-r76-+\gƾ/}&5GbCP8xkLUX2s<YǑ1ҟ_s o1NqyWZm[vu9ж7k[lbb۽¬)9]"p^𖗬|5_jr 27Q1ݏKkfx[d7c)֏ſ #ՔܤИrH ^(h/#@I6mv&&zPu+HYuw'XmMNRN$ 6Ba;{/-hA6 =A%В v ܦޛsW)X;%j.h>1zbbt[ iȂ+[h̢Vk$)Q&zCCtk<˨I9@'=0N(C +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(~?4+$[WUE&?[5q5f1ne +~8Y1|Iѣ۹kk:_wlێz57bߴn3io~d$մ[ +]j0]..k.s&%7Y +m2W9GOjb3M^m~Jǎ]0j٥Qq~]/N8~7\;IE7! }?wBU҂X1PHqҋBxGRcHpx24<+c[\;qDQs#WBvW8=yvUzAv2NI;Yk&sh B5OB,k_%6q^_Iiu"ep2 +C#4_vRJ|@;sΑx^C՚kmb}|i|MR`sG@S4}^%aks, |Y&ݰYq_M̘m>kƔ9ࡏy':bb7ڻ担=t 4" 97^5yneҵ!y7@ [[##8?(h7>i-tQH༌ gnjs^g xv$Q&?ߝl$jUG@.bp2{~mn-QHa\'xgwtSNG&~!S,iȊ[{Rct<{ +F_J>!ӖF,,\Yf۞LU`z:`PQSmnx\Ҽp33c+^xWL$GEݏإU,- @xZ*sҝ nyƣoM3\Xh$WG Mt |P0nV5y T*p}rqW(UPtbX  ҄ \Seh3֠QP7v7wLm"~xƟ +i͓Os۰? W`/ hwƞ,oQ&Fo* 8$j_xöZLjGusw]dmd\8ϾQD]m[HX?cyqI|F<= jCxЖlH]в$24ks<ϯI|]gi5,>LloIxmݟMKtp +n߿j7c.8O ïϮ3BT!TFv * p>恧NV0'+u {Խf.],axOIS%&HOszܤ’ #-IAUʬQIHʮYCw%++K&tE`lhKJr֥-b.4_]+p>)7F9ئF`THRKs|GyGo-yx1:v8Gk jzmw6*UEc﵋/ +Ze-ᔔ,ޢA5o0t-L O 3{ע2+2瑞iԐ5s< f.H`$zuT6yMƚp< )(Y +vȮ-uX&7:Q; xut_h|!kܛmţnc"*=~;PԴW:kKXs~]{Wl]q:cüPYD+i7:_I9;oUlbx‘7&4Lq ,Ag**J9 ϣckӭ[x\9Qn,O$Guo7V...eK -q߱^M~ݎiD8xċtsv"oeb7sc=Oސ=@=V(C +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(~?4(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((cL(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( TF{JO745>?ߧT?hoh@~@QPqOMEC?Ə745>?ߧT?hoh@~@QPqOMEC?Ə745>?ߧT?hoh@~@QPqOMEC?Ə745G>?ߧT?iohH~@QPqO#MEC?Ɠ#OEA?Ə74=G>?ߧTiohH~@P}qO#OEA?Ə74=G>?ߧTiohH~@P}qO#OEA?Ə74=G>?ߧTiohH~@P}qO#OEA?Ə74=G>?ߧTiohH~@P}qO#OEA?Ə74=G>?ߧTiohH~@P}qO#OEA?Ə+?Ə+?Ə/K?Ə/K?Ə/K?Ə/K?Ə/K?Ə/K?Ə/K?Ə/K?Ə/K?Ə/K?Ə/K?Ə/K?Ə/K?Ə/K?Ə/K?Ə/K?Ə/K?Ə/K?Ə/K?Ə/~GڗXߧ~@(j_74}ߧ*ڗj_74b~GڗXߧ~@(k_74}ߧ*k_74b~GXߧ~bjH : +( +),j?ߥMEC?Ə745>?ߧT?hoh@~@QPqOMEC?Ə745>?ߧT?hoh@~@QPqOMEC?Ə745>?ߧT?hoh@~@QPqOMEC?Ə745G>?ߧT?iohH~@QPqOH~@P}qO#OEA?Ə74=G>?ߧTiohH~@P}qO#OEA?Ə74=G>?ߧTiohH~@P}qO#OEA?Ə74=G>?ߧTiohH~@P}qO#OEA?Ə74=G>?ߧTiohH~@P}qO#OEA?Ə74=G>?ߧTiohH~@P}qO#OEA~GWOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~GڗOEA~I~@(j_74}ߧ*ڗj_74b~GڗXߧ~@(j_74}ߧ*k_74b~GXߧ~@(k_74}ߧ*rZ(cL((((λ K4";~sfsӞ@Q@Q@V|o.6cl$$I4EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPERT]F6m`@I)"+V A((((_\4 T/#+ɜ=^GI#WF 2A( +( +( +*l7PZ ,QI;MFnlnX$XͷuO}o9(3{wuEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPUlNMX?@ )((Q@ E%RQ@ E&hZ)(ZJ(()(h4RQ@ E%RQ@ )(Z)((((J(hJ(h4RQ@ E%Z)(QEQE0 +( +)(4PIE-PIE-PIE-PEPEPERQ@ E%RQ@ E%RfZ)(Z)((((J(sE%RQ@ E%Z)(ZJ(((J(hJ(7 ?hz^R7CH +sߧҊj}S((J(hJ(h4RQ@ E%RQ@Q@Q@Q@PњJ(hJ(hRQ@ E%RQ@ IEQEQE%-PJ(hJ(hJ)RQ@ IE(`QEQI@ E%Z)(IE-PIE-%PEPEPE%fZ)(Z)(Z)((((J(hJ(hL@ E%RQ@ E%QEQEQE%-PJ(jū=:S[Iv(1{}1CO((O~? ӣRMR(?+G@=~5A|xYbypGXЗ4-i Eo|G5o)ndVv ?*~M4qc wcWzczRr%GRhOR?눯l^2)xHQn$ϦĖngw<\A$c?j}?}bPO(EyҒ:Eեf4z I 8#ⷋo|1%/#6U]O>y-t-T_iw3$ '//aavf"Tr6.m=M'=7\\]E%.A.Pt5,VIK]_߆zEZ'"kƶYlnqCҖ-kq3H17 sUJ֛c$״x/Ewd@$ϦkżIWM/wc˨[Bfo8I6'_+7'NOA ~]wuzengi(OSO#2iqkyV@?Mx&|aw<:uȎ& pI85 ?^r!wLnN 嵯/e? +jw\GV;pzc⻿xYdK$$gh z#,}oS$Ciau zҰ4|v08K)YՎx_3HJ {xk_㞧$G]M/SXTߡȒx]FSjֿX [^[G?9=ޯ/χ:fIʂf^ +2=?k@c;+kJ1#컍DDi~¾2AL[^V&^? +ծxN{ug6@ +[o?t>{wZkj[I7t%9} u-Ze'R]9\hRʒ(8%W6 [kIv᱒:/sh$1vvȤSPz mse3J.g+lko5bT:3bIJf#UAAFDzhQK7dsx`PJp ee # ^ |=hs$v]ImO_]2X}P+J%h`4r0K^EK1ڞ g)>2OߥzVv?wih675x.ׯ%Q>,;< \3-"OA^Gو}2x{..Br3'H{MjŞ}W4_7 pr3/Tj\◩-{zoM?KI_[Z!,`$ucX^[EoUuG.W&1)1{<+;ve_{(|;6yc$*x$GJ+AS`Y +I=:Z%m>{ʊ5 }LK;_x @TrKH]qIk xYYU7}J*rv:όM?1i~7ߗF5Uh +'I%a*Ok=:$Yʧ c$tO-]zť xd3W)x'Dҵt4fH"(-gs$$񽾅ke>7 h;ssp)Hꨮ?@ZVFR!szR~>|C&yjL%Gf=.:c^gj^3xfg -)l9V>x};Od."r5$w׵ +/Q6wm׷o +v8AGzΟ[i3ʕ Pk/%jSƷ:G-ml|?{ o0MV4Bx#=(JǮQ\~9t y͹&N<+cJmOìx gpϱV; ݵcdpƱ'FF%MBSy|c'\~cF4Y=JAҹ*5' ^_[ $@C֗I5h5}Mn.L!uONQ&;j+$ue$Rj~ T}]Sd\R*nCAUMOS4o1[Eﴶ2@z\E!>g۝0 f4'8 $Ujj .Xg'\x>kPM7cԬa}Ll<Պ4Ycᶕyssn *p75Wd7WFYF ɼ퓁ڪJIRQR1sE%RQ@ E%Z)(ZJ(((J(h%RQ@ E%RfZ)(Z)((()(hJ(hJ(hRQ@ E%RQ@kMz += j/AIZFii$_-1 E&hZ)(((((4RQ@ E%RQZ)(`-f IEQE((QH`-PIE-PIE-PEPsCk Mq4pļT}IlM?Q lo"e|}pk̾ <ҬC;3~l|+< li#H[p5t؜؞gEs~(񍧆%Sknq{ ГYO55Gy`:ȓǺƓwuḒ.ύA=E-mtlw%Xby\K1ᗈoD_..<#zOw\_&PA;h G'3Bcf(ˆ8Vx|Uq~DnMɕvP2@X}uz V^uu1spv +s<(I\/RVM4[bk|&ڨ}3ӷZMmgd[kfqm/ލÃJ\/+-~)--PW#A^98JR\{;fH`)\騮'Q76g+vY@(VDž|Ui9`&4.rP{j,ڸ۳Te.6eq=‡М\ZxCSHrTdn# <BH%2 !pF1+Y:Vk]H֨\>HOA\=.I:QmlQ\޹;-Hj 6d!8yFk"A]B ]wB)f$>U>$خwyx K Ȯ(yD@c-篷JxMr|h6Tq4\ tq~AJ:+34i>l=ڱQR۞u&iP6L)?e#>pE%\IE-PIE-%PEPEPERQ@ )(Z)(-PIE-PIEQEQERQ@ Fi(Z)(4PIE-PIE555 (?ߏi > +( +( +mޅ];vda,g zz7[J6n2~&MusKRW2C4ʏ'hҼuk^F{xezo#׌㑻ɮK{B5xWzM׹HGp@=)>Ǔ'?HE$SÝ!k Q$zmOz|OϤ4vmа 6aAGKR56p o .fU=\ßi/-_W\y1\8 𽏆4%iAcU9 ¸y㻿q7RIR@毙s6M-?CF+tAnnz>Di%)>xFDO}_MlM?aHu#+RX_x~"٢c +_{Eݟ ȸnۜ~6e6VP$ЮA4^G|{V5G[[ʄB= j|smo+_]kK00OM׃U<9ÞK\wFnH* +jwRY3uMO7U>bßʓ}!w14Wn΅*\zy56Zmq QѺ2 y +<J(n+ _-zxWř?-#cڌq!=׺*P2N2{#iH7_%t1`G(<J2ln +6gqCzcͬ7R{ǚ.7 "z}T{q8&n"d 8 ssMI]㦇'?Hn,R5 Hk_J'H?댿5j?]M/z% ZƮ&s y[[լn/dY]gt*`(=GUwڀ'hW܌HMgBi5~M|^gV<#F6<%i$I$Hnh蕁o +ǣbkidef.heϽv6i#kB =p*Zʞ,ο]KKR+^C־(-1xsRA1=>xះYrn7?\gަ.%t3Ɵ4m/o[\_[x!;#\x-/Ъ %?L~tIoUN|U ෉"5 +Tši'ni\όv2h#м[l4rrcw7 /r70O#WFO^o EK x {tMgCzOlR]rڣMvZ$|y'F5-ΒC}EU@{1 79ǵ{ ݥPI#q5旟7=KoyZ>R$g&&%{3o 𮅩\h-q:)Jt< +]~^Yarei738=V_t∮o˂s֚"Zlu~1xC>_.L5{es.fK(-u'A'[0FH#T'fm]4yØ)x vX o$S?ǎ]eK^? iNi7;PUa}3ƱZǩOwfd3v3})z|UO| GR)o''᷄<'ʿtfB޹c}Znmaf% 3WέzVsvY=R?jjZ2y}?Eo+Đas#ṿYG8sš6$2Y\]h~7mu=Btt + }s[^&ՏY4AH]@u A;n4)-5]xֱq%,prMo!V{!܅s!Wy4Cs(p 6>!ק5眫:C"$:'z]^JlWl+?tE(T`ڝS'v⬬x1,]GQd x⽒{ʼno /Ąl!?elm967kQP}x'*Z?pF{t:U&'⹯9o~k?楩x[VSp9Cq֨x Əkkdq_395蚇 2\s}i .\ ~u +i6uj SX6JN}1VLoftMf#%c#cӼmjJf _gl>n=׭zPȷ`}(qK/^Yn//S)U[ؐ3ЦTnw|Q3&B7(5x[}ω|y'T۽3_9̄[RH v<5O h6RO$*Ӱ,wNHwnku&KW66~GOPIZm{ ZG֗7ַO1DČ0 8ns~G'4?[}_pBI {= vg݆,= PMnQ" ;SIqVIQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPU'\֭9 EU(J(h E%Z)(4PIE-PQEQEQEQERQ@ )(Z)(-PIE-f(((Z3IE-PIE-PIE-sڮ6y{a,qҺ +z׫9,loR<1GP9;;K|E4BK+Ҿl yPď21^ +Y[FAntþ9vo!3@+3֦4>lqp٢m{&ᘭpoD2mx#?MR(᦬D!oiX qVsZ\$d({\ׇgH]j:)NF@)'`m"V^Y%/RH걧dbxP]&Cw:}:p@`s\ +G8-hYBJ1.;#qIlC+Uɛ jpG͑Xso>#~ҷ+$FU֖_4#@[!ws}&4/XƏ<2覯G+tOA斺'thb,2k΍k+ľM_KqB 89㎊Ǚxonoo=(&^F*YSURB#Ar >uM.XҧӮԴ&ӎЏpyN|/]Of|m+_ר=M XIYp48jַ #-0(QG}~o'?t\vEڏvm B 0#90:c +Լ%axrCkє902H#ڵp[35\``iq-`1'7'D$alaXw)cc&խ}&Ֆb?ƒ9 دt;Iz0<f}Otq\w.4߈.t$@FP#$rLŅz€FvuGOSk_ %$ DAGR~5:GƗuiF⸣E[E`'&!"?JmjWI4ҬbV0P_J>j~ɵ#+ ϾykbG4mm-1C9zW4{FSxHjZk|=qt2}ns**zKF"}ᮁ~bMGF7H`P8rd1xVfHgXq *csڥZ=os' nڙw2AR+EV؀:(-co}[e'rm`<{`Gx2W:FcO!ՙNCsc cH9I̠ siFIo=e9x +qO6hd0Ŝq$ҩ~((((Q@ E%RQ@ E&hZ)(ZJ(()(h4RQ@ E%RQ@ E%RQ@ E%Q@Q@Q@RPIE.h]T= /E1CO?ߏiQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECV4v-K8IE"T`; +uQEQEQEQEVtkϫc wgQ9a^h@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@SqW*vM6g;!"J(h +( +( +)(Z)(Z)(-PIE-PEPEPEPE%fZ)(Z)3E-PIE-PQEQEQI@ E%Z)(Z)(Z)(+Yz +ˍKQ޵JLb7CKHzR=~RF*{RUZ)(Z)((((J(sE%RQ@ E%Z)(ZJ(((J(h%RQ@ E%RfZ)(Z)((()(hJ(iVDdu 0T(+Yir[Z9aJjZ)3E-PIE-PEPEPEPE%Z)(IE-PIFhi( +( +( +)(Z)(Z)(-PIE-PEPEPEPEfZ)(Z)3E-PIE- +ij +@]) cL(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((("EUkS-ǽ'ٟtQp*}?*O?W(S3x~T}?*EٟU(fʮQEg3x~Ur.?G_Qp)?*>\OQW\ +eʏW(S+x~T}?*E_U(eʮQEW+x~Ur.?G_Qp)?*>\OQW\ +eoʏW(S+x~T}?*E[U(eoʮQEV+x~Ur.?G[Qp)?*>\OQV\ +eoʏW(S#x~T}?*EU(doʮQEF>]KQF\ +_doʏ7WhR#x~T}?*EU(doʮEF#Qp)}QFWhR#x~T}?*EU(doʮEF#x~Uv./7Gߥ]Kҏ7JEߥdo~v./7J>*\ +_do}U((Qp)}Q6WhRmҮE6Gߥ]KmҏJEߥco~v./J>*\ +_co~}U(({Qp)}Q6WhRmҮE6G]GmҏJEcoz.J>*\ +?co}U(~(Qp(Q&WQMүQE&G؛^GMҏ7JE؛boz.7JQdsv.Q@:ԴQ@Q@K +}j7V +fʏ?VS3x~T}?*EٟU(fʮQEg3x~Ur.??G_Qp)?*>\OQW\ +eʏW(S+x~T}?*E_U(eʮQEW+x~Ur.?G_Qp)?*>\OQW\ +eʏW(S+x~T}?*E[U(eoʮQEV+x~Ur.?G[Qp)?*>\OQV\ +eoʏW(S+x~T}?*EU(doʮQEF>]KQF\ +_doʏ7WhR#x~T}?*EU(doʮEF#Qp)}QFWhR#x~T}?*EU(doʮEF#x~Uv./7GQp)}QFWhR#{ҮEFG]Kҏ7JEcov./J>*\ +_co}U(({Qp)}Q6WhR{mҮE6Gߥ]KmҏJEߥco~v./J>*\ +_co}U((Qp)}R}U(~(Qp(Q6WQmүQE6G^Gmҏ7JE؛boz.7J>*\ +?bo}U(~(Qp(Q&WS[.~f&KEQE1CO?ߏiQE5/z@;"-֣2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?)}2q?*5yd"#s'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +Bbq%Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}R+"IE32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€EGMv.H's'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@W0Ej\PfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPK RO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€E32q?fO'€EGMv.H's'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@? +3'?@/ *6/'{K? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}Q? +}2zԹ}L̟O}L̟O}L̟O}L̟O}L̟O}L̟O}L̟O}L̟O}L̟O}L̟O}L̟O}L̟O}L̟O}L̟O}Qq]oj\PfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒPfO'ŒP_jMqIE3{/sOȠ(?ߏi > +d|۟õ>ʀEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP"fL}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE >~?EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES!SSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE0_Oa\)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETd?ct*}QEQEQEQEQEQEQEQEQEQEQEQEQEQE1>AO'ߓ)QEQEQEQEQEQEQEQEQEQEQEQEQEQE?SrEPEPEPEPEPEPEPEPEPEPEPEPEPEP4c@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ }2/oiQEQEQEQEQEQEQEQEQEQEQEQEQEQEs?EPEPEPEPEPEPEPEPEPEPEPEPEPEP7Jm9W9b`/%xb{:#f/MHG 㸮_O%Q@ {}Td?ct*}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ }2/oiQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES4c\we. 7lxI=W^K7Җg!y@ݓfχ(Ez{8CrF{q^^Kyzta~glg mܞ۾'*DݫEykG O>Srr)|@4NZyѠ0ap{ +I^os ixKrX@ukRg /E4TYp=sOK}{/ +@׮5өF9u*rA$T`dWOlWǎu4-L)b?&R(R;tْ扅2Iv5Zv#^vq\ +WkgRWt{cI};,3<"Is2zX^#yIii؛ Chw1h1[jLȚQS=yDžOkZ#RJS޽gy4?qחC{z4QEIAEytό\Il"s +5yq6Ò?뤬BҺUpSRu}~5>cH$}GzӥþOC'gW5gѯGzNOBw~PW^gE8/MG[Ct[kR+|I~ "KO2KyԐ GP:E牼 mE5̠猏r=֧xGWnWoSؒ$uJ̙;3w>2t-;"F;g ݍw]M|_?K [U2Q˅?1mxbQ[ˈS˫ #?iYrwv5^ndEa E||x;k-:+=;[y;q^oñ'oK7Q9赿_4M^mn`̶ +6?A.|;GP;nUU#lgif hoL:z+樴Sq&oc|C$bdKLy`wk>^OPq[P4f6ʱ*zdn6BR7(((ʟLL@((((((((((((((((((((rt1OK[7tgy|HNzzgU-^+E|7<^88*bDs'mPݑks`ͪX^r^9٣P:V8עkv>)!, dqFT׊x; #hgU/cWhA]|,? d2̰%p33ZI$nj+|#|5m^[XIcp&t .`d9Ïv7P]#1e `jmv=f=6jThgwd3 i~-34Qfi@I: >[.c(ekRo#AQK3r1s]'R[-.lPޥdCG-x#V6l/7N:*c@? |mRF.; \nP r X^x)|m=[6yѬsdg~e7~ku~FvdB:s@{=X~3\v{nv9O{W1VνFyn 2j +MXi(/Z:վ2Z\pWrw0&='HQw`nm[+b@?nVDrxs~&^_OoFG:-]Ûw|85!gӹE_FqӵjQE ݂VAERQEQEQEQETd?ct*}QEQEQEQEQEQEQEQEQEQEQEQEQEQE1>AO'ߓ)QEQEQEQEQEQEQEQEQEQEQEQEQEQE?Sr#/YJKk5Pg&xc\zֹz.Z(nrDAOLqְѠOϗgݿuj[/E-.dCvsT{Te~բ3G9?%kHGe1s#]+h5o]wZC򻯒r4V۳_;]܏xW[E+[}HHp 'kU6k{7i12MNݣu̞:`p}hKKvg_>xOlWǎu4-L)b=:0_|+N.$WwiB9 9J-;x?9<&,Gm盟;6S_=CFDžc ڧcJ /n+ vw "dP?JVL.b 'wg^s9co밯 6 :kb+66]m omQcߥ Wrhghv\;vPy%Ļ۟ xod; w\ȁF-#=;'s֨WM妡ݤ%#;s #b*HQM+=GQE%Q@Q@Q@Q@Q@ {}s.+yk/,+}A;Qi_5]bɴ=ʒs<3rqb.;Jzo_mn)lz_⧅a6ȥVe)9#=.B?~)x}tJhu9\ ϖwo#('kEx)/[sIu"lPGO^0}JiY u'RCIk<Ԍ4m N= |;olxSu\ʱQ3`tEY<mxS-%#\;g=N3Iwk+ִAb"cۼ̒>ю }oƞ!ѮnoMl->bTӰ7n|yŊ"]|+nQCJɉ7R_Xhu91|ݞc>Wx#@ƽKHi-ʴ 69 Vō[QY/irYkSO!UGo'M.+[i@<pm.;`) ((((((((d_p}3OK6_4eyv7e6ww7$G?uI;I*J"IMTWc߇G}sPmRh]\mkg#R~!~5yY#'(j ;{]x%omZV{V[O\u\i4ϩ 2ɵ_k6zh'={%d{yLjAe}}WP `Af$ ?A֭CZ։*Are0 kؼ3ch?]i!(Hy8;G zW{8 E;-0r1'ڛ=F +K}C:O"@e7Uz9M[/WZ4)g(Tn( +@5eqwcG~,_k y6֮r͹NOo`=UvQSQEIAEPEPEPEPEPEPEPt3Of@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@+<>My+vtһM& IA|x?ZGt1KH?/(?ߏi > +d?ct*}21?CV=U^G[h&hzƍq߬J22rӞKwCMլm3bOا{7k3'GL1a0Vxu|ڇd[]E(ͅUqo5ޚl)&4>\|;Ns{ӵtlN6"eJQߠǩQE +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(W_ ۜ QF6D~ҸUGqMnGP}J@2/oiȾyOMx+XbGjuRF3I J$xCLknFʈ>H[k/-9w$ea^a^~[}[\^ Kg_mcҲs1i5k;z+d׍4%&?JxQ#=z>wCM|!}o\m +nsݨjn_ExDŽ*!xI`@61^G~ z'Vտ_ҖN/fF|Ν 5O jW0o/, Uc~$d;d O'_21Z_5=ֳ luoQLgZ~:?ZM!A)*J +( +( +( +( +( +( +( +( +( +( +*{c-̝p=OaX֞ζ`f dS ?ҝ){}1CH+-cH~eS0ʸ@8OcԂ9ފ<-'MgZHkh- ~UO IۼQ$-\z:WQE6$qlծ!/LBIdܱ޲E k|If=:BG:7ðעCnr^l"yhiǨ^E +X"KY[6!eQ#}|=#o Gdc|{=_[ũŬGqbybWl+B)0J.qk͡vQEqx?2uXt(OL :ۅ=|WQN-u^Y47-fa#'钿ktku K@Y[P(ǂ<]m [ž' o ܲʰ8q:o''UuSS#8gz)КB^yt ]CM= A񕌗m^6 }B#;ץuJ+W<+⏈ZUAq.J8qhKmIؑBsqfo xr- ed2<qWCMw1}Nkz%6rOASWwi[V]΋ o.n7+Mld#^A]e7u`<el<_jJ|?ު{|`>k]>鮦0;S! p3VhERQEQEQ\牼"f, ~GֺCAAڰ\Zd?ct*}21? us WPpdzU 'zV]yJX<_׆&[V9^#z7.ym%˴41Oq`J=,{~+Ķ-{]}\_d0J][4f7is+C `clL ZΫSúW$zEe2X,jLa?.z8rjJwW=nx×0j7p4o8ܨ n+ϼ1?z潢ŨϨH"3ĩg F@A.Wv\z/h3+ihq,^bNqڳ5"Gkks +m-A8 SBzn<ƛ[A4#O khZI%im`S?!uݴ;+nO?S<qgsp;w< [[V%tT6ȠHT}lzM6~;:O[H*` r9 +źNuo-hn`T% >Q3zn6'shu+wVc,m*=ωC㏇2i^ a |%U$tIŠRLE]:7[+TMjs:_=hkv17WN"| +<:W^~j:԰j:ŪnYxxֆv4W >(J#Gh 38A6$ls{fw$) ((((((uHizk[u *+*Va[=Y{[5`/}0_OEGVkUP%I?( +G~RZ(yV`7r+o!5{kOk'/Z\Qrʰ9 +; +m:H̛^^F +Lb2i \x.}3eYmʲdKw=k~>_I?+l1۠[#k`j'ß^ ž"oe%Icɒx +T[>>M{]D٤ 3T æ{yE \+?]Sa"sm$(\HnkBOQ +xR*H$$v-'#+__U..bԙG4*#9[{Ң?~$ޱi O/' 0twZ_mn%`d0:m`JKPi~"L0%`\z.O-5Fv;&O`U1:]s0GzYy`mWxl1ېp;X~0>Vc[y( 3dt=E{Me^xkI-5Mc=E ٠kF?.m}p&7r2^@'qwy<]yn =9j(nV|'|A5Ke5:I2npJx8K/ MjmCÞ*Hbmo?+Rk [CO^Ey]'BmFFOAwQCwEs +K}|14 ZeO6Vm7;QLVqG9}/Vn^{ĒP"zWo&6"]R V8+hrytQE +( +( +( +(JWUib|wS?#M+H` " LOC?G^˧x[Uh-%$~%s3S=PkjSDGi%Anc9nI#`^YQyiח7IYIzg#-쭾x +Quq} eDbU@N3׹i-)^65oX.a}Zsss'5+?XXqiPӹĿxn}_j6gsҴMPlݻnּ[CǶ[7vM^kv*#9BKm~ᾍۑ, +29VTZhFu? eMUYW(9k)ƯSßDI_|Sh^*՞.c2O#h˸_wj+?-m&ė6V:Z%eV:"wz_8׷љ ( zQm}UӬsaeW(''J^#j2|af-u]I-K{weC/5d;) ((((((kOc[01ďM+QU c{H'ߓ)){ +qh`a2/iZ}w]`M|\jźhOOO!?]MVI4\w~QtWROJw>yz6J֯xO\IoiW{7cyiM&L/4ݍij!m^x!~;צzX@ėP^ߝi!PlM + |.o[^ϤXI40+1t.x$qu9d~1nO6Fv7p}9]M6ݼ+671!SxY@ #ԟH%`) ((((j2f/=mrȧ?/tڰ {} 9|+Z, +dAn¼ß"xnY,&(Y.rLq.:cvW8?Py[-$fܓĊo<1k5[鲇efp?( +Aw")-- ^gxRP׉~m'@a>O?U?QY^7{{IkU9d1SNW9 vV2`:QxKM힪}nU#@Ik7w]'`jx'+;AZ{Ɓ6bYN`; V]e{Y}/i,5 +/Ar`zc$u^,ox"eQmq}܏]-X-ĸ'+~xcMI{2N2@J衶Ղc|+>2}٘<'q~MLGepOgOeYIgZsm r_ޓmJGJžY`zuF! X)S]XqUE0t$,@kX~E]}6ĐHPtВioa_mwmtճoi\(| nxF^iu;;Kyc+ĹUwLuŠ4yO| 2YY)o̥9<QCwQE!Q@Q@Q@Q@Q@VO?ʍ?7j´} t}@>`pW Fi +OmTg0ߏwޞi37li]V7tF@} Y\G&VP{oq;z~&Mh5~ >:mic;%~Z.P<Ԛ¾$յ/%n#9'&݌4*9n'd gzתWh +4I"fѮgPhȷAGOzrjGZP L^poZԯx~*n!kW8ǗŰVV.5}54%~L+W[7 eM?Ÿ&I.>lc']x\.o +`| v\[ (dv8P2N+ڱ-`3ɷSF|c P|LމZ6Р^Frr7!_ ODc4. A῰6BTup0W׽U7&~Ѯm#nDvrBn,8wWx>&P&Ԟ%U`z^Iw +(Š(*{c-̝p=Oa@hoy, }A9#'WIMҼڽ̚#$U8H'רGn0- ]^Xdco<698zשbwE_1B_O%Q@ {}Td?ct*մ~mieHRɪ #_ xn,- + Je  u('}ELm6y1K?C +&Fٍ6ǽdV<=0r0aqmܞ@9X;T|{ 5Qa JR +3ߊ]꺍| z{UD ܂ьzױO\Xi]S@L殗f݈qڍ>+Ͼj#13Ux=$k +$c=E{6QE!Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@0B#85I,#LijRUQM;MJ6sSnQօR}3T2=kC%mu D[֮E>W.!gאh1$H#'<=+a; xjD@yvq 5V{ǂj~iZɻHX|2;M~ IE^푑]u[[eqklPܖj"r8NͼzFWVO]d,@$tk;V<:ωiuh| ݋)s c9͆y&-ޥFXZ+Jr0oF22^E6>yÚh(| ue 3yf%}1Q^k66XxRSK6=r!fp@C:IVw n1=EiM׵ۛmK6>o 4 f< TP*Ǚ|3 OPuuRG `9zmQ'wpQEQEQEQEQEQEQEQEQEQEQEdZ3$Y$`vOQY֞{+aHx#=}tS~?4>+~"YI~y|܏nI1G[KEymxNDկ3-? e]i%vOy|+aպ)جTd?ct*C(x)'ާHH%q_ wW6%3D#^En[_ŕݎФa;wcZa}x ygI]]Lwcdʾ˩)YXΑv;-Vī7 rOCӭpּQ\?.&|*Tflg9ރ{sjrc%hz [,\.0RF8Gz/{¶ydJJIdm2`!Gr}G5RN!Rp@=^1.u_:i2inwkc$#qڽOt'yӴ;2,{@^`"kSrڍ +/V$`&;vxZkmP Qwp+ +@=ziXoo+ntϭzr};cq9W<%rYa+fpGQ*y'<+h[ Wm_dľc10G'ֺ ȼi-'KINѐDC![8Oweyhߌ;RnoxKxbMV %1On'tU$3] _xoiFb.O[ "Ig;yys'CT彉HEEzk{^HͰl%Ur`]ڮx` Fuem/Pc gzT}mn|x~X oEo)Ny@׊DЬ-of󮡷H9@'=U9iarp*J +( +( +( +( +( +|>8pS- >|1ߖ V7NE bL?> ++~&VzGQt/Wt ݱuWƚ&e4>0:# BrSJnǣ^;C\x{L}JUd sp۹tt^YhK:&Ur! 6 *+e>"Դ8O?Y@qn\1E; =gPK|yHTkvsӷ +Arľ-2RJDb{e#dtD-=:ɼ>tkxf s+ۢTJvn{ gmNK7wrF${XՑuf3]vi"#tˁ=g# }lhEaxxRVUW%n؅\dLf֞i|W -9 gnH+|A-aUGnUg:mXI訯;4NQ[F7jqېď:wA{/T9.-.xZ#G[/-]b|Kg[_z +[ݸ0#+1Ҩ&'}6{MAMRTq VVrz/ºT)>}i:"h#B##ZvwGqEqq|Oƻh nUmv]Cs3RO#tO=>ϵatξoTr#tk)Fx5S¾7|cLXde"G&t=L&yc1AB^L/u 2E/ҟIwW +(Q@Q@Q@Q@\$GS>3? e]mhV*iXm$w¹]vM[CʠԬc4 \>=OʟCWxx?G.5EYn4c=98|'Mo}.t|؄$PWM%g⋮x? Uѹ?؅>Vmq;{y}A~Xh'ԬeSƇݹW^E7 JLjxV<=0r0aqmܞ@u =ҧ+ / +c]Iji>7ռG&/m?*w+񕞧xZUđe 0FHs1\tR1*|vW[ᅝc9bҳ~/خ-#-^q+9(F{ +Uzv{>X$2)8I=avp>kx?W&o"+ $ g#&޼MS*궷 FA,NX*9s7:WӓLQM0*J +( +( +( +( +( +."r\ͨ6Oz{}覝tgĩ4O^ O'SCMO'S`yO Ԭ6xUcpDі۱#y:VG-%Da6 עQNݗb~ 59!uI%G'.jZ=ͺG;Ln# R6W<īk⼾$m=EcJ`s5 W +y%/,/F,YYl0h'?J6+9MlE{'ټ7dϵl4}[^[op +2 +%F.ETQEQEQEQEQEQEQE}Lq#9(Zi}..c-/}Wi^%HS4HL.2B)8T>%^Wp-ʆU0s&WW|^<;\7vz[0Wh\gC{ fT[WʍspXk޽KEPEMV; a]Yu{袊C +( +( +( +( +ִgI I^b/ew:d~篷ޮ)p >~?F6tB(o3FHx;H1~xejzWM+/<c"(]HG\HᏊUmc02vH3{ntW!tƟi1P]F=H8ses ͻl[pyIwcjVOM۴>PO$//&WѯBWMѣ?n^\-珇kї тx`x%IaC$#+ >!,wmJ">^n V7h<5I3V03K0giP߈, O H*H㾶:z+A,weu ST|7xtCZ1xmU?Lf +Nst¹sY\Aou{ml1*H}tU◞/?_֚^:GK18Ϧ zν[xwCծWC:b Hiev TW]f𵙴/"YX$J|܀7\sEv{]4Ʋ$21ԓ 5\Ԣ{\kGaӯS𯔉O\WT#HS9%»8gQgkv(0((((((((1FB8$gI<e}IؖbaO +)`iVݮ|ݔm:Т@2/oiȾyNO!qv> KEx&j?\qb_Q9 v.gЋy Eݟ@H*y9mshĞ}j퐸+2xsgua5L*$ZAs6Eu~nڄǮ3굿i)Ub1ϭ6/ݢ/.věfczo5 g!1 ?9X]+ŽcTǰ׵j\}*HW2gy&(QEQEQEQEQEQEW=aK繒xTzuz7Gi33sܢ >?7}y]: ݽi"cgaKc8SM^猈O폆5{MVB۹`. +Ofmķ,hPO)Lwga#3^E 9a9#ݓVZxE㹇Q!lE6WxFҼ5^?Cw| +!?Wӿ?Wb$({}1COʟLL@((((((((((((((((((((((((((((}3OE> +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +cL|{2?7^{E䴸8R7p:꣪vbzWVsAPz9hh$k^_>2.'zfVJfIrx޽BG7pNǚY`=bH*޹ĖoEtr}pti&M3u og\f{bJZ1IĒ Nn9ϑw g'7g|{Q:Ms偍s^ږMժ516`tcst5mmxA' =AimAZcMŶ$RŠ(aEPEPEPEPEPEPEPEPEPEPEPLLOC?GEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?SrxZh.fXnyA'ӜseCz ~ T'YWn0R-{vvo"_ ~7V5p=GUbds??7|k׈4[7O':"+gF~Pskjz]a%Ŭ=Xz7 xRMGK '%l0xf#(&5h|o4_ m/t'׎oM<_v\j-V[x_ XZA7@ PwwMtt}"N%}ZGv:>&kŢXp^=88}_5ּ4hnZDw;5v:=Yֱ[[ݎ%zkr[/ⵄýM-ԳbuUp[R ڳe#;g[5 vXvqsX5I|GGbKhp\0'ۿ?ɨ};vqv{;k7)-v4._Lt[i&*Q+>>-{axGLDn+;=r`qZ׆R,l?t޿)ދ\?-/@8db0P +{p8??5 i%u{O1kcHh\Zwk%I,GC)*^kL~xE_{j crf69eΝoy7ټ19ۜ^uo*FSC*}kCihe +dD°w&*>t7֕Xjtq΍ mq*s×~ -g{ Whχ5:ov)0GjxC@1F4Ȯ]L8lkfyցqi|xО9,Ћ`vc5gKlml+;o{ 3aXxGDSmXk̖cY˹ѷ37ڦbrN㩢jAk:^ ;R1 yM靤F? ?e7|޻ۜ}8zV'k YX(C +( +( +( +( +( +(ʟLLO(((((((((((((('ߓ)> +( +( +( +( +( +( +( +( +( +( +( +( +( +(/}0_O/EZbGg\YUxm@3Έݍ2;xQ.& FI+~PN= [OU _]ۻoOj&L۱|r4;ka+In)9G+=wVpiZ1[NPz 5|7𞵩MWw9I>* 0Z<;ዩ.t}?J[#saP4siRx'Pӣd6:FI3ZΗ{*Rb] +A㚋SkcQP|t}UqVs7]w٧GaRVQ+˘mg WN y[i-YN3A<~r\CLjBƏ)lOA+t]9bO@(aN״{>[=Z;{471>X5A4WᎹ.}my"= zR'?؟7?Z喅w[4<>|yd}a\⧳w}sުMok{h^ +熦y.+y`Y|zbHœ]~vl'Ԭ⽖O.Id|O=gKҴéYzsӞ+<_[MEA>DFHVt>8u7J.ϗ'%ldxf#=ViKgKjjVm~EQ:GΧg=9]5.š=g5Z|^dέ"a9"Z]f#?j>-g8Syym~w<:EFwu 'AZao)g0?L/kK[ 4C ~U7#,HǦ*֍mt~e{Yشn$ybO@;9ooRyv<{3orZibFX8_J>!jV:j}>KyVEzH4T~Mֽ=i ?frΐ<mK-W8<}eǸ\v͈[]7e, U yk[úSxwL^Gpvݝ߭r^&_ 隶oawot#$A`sT k7uTskx$ߞ +u_GkiZKoc<@>?k>);YTyZ7bvit>EY6]͋vp$}ÍճӊW3~ϺZ2 ݘ/]ot8~VU}N}`ʹd`ڧZZ'J=r2',ICi^GMNc`lNMzzrzN:w| eń`_HDQf$ub\u^`Kn»g V֥+Wѿ/l(!1 +AP60:Q)]mǞ-tVK6MpLIBNWC^lͫ!fQ2? +ɹ.whՀa,Lh8^Օ^5inxt Ρ:>ڿٯu:S{"PK?SH<?xlQAETQEQEQEQEQEQEQEQE0oG4`\iQEQEQEQEQEQEQEQEQEQEQEQEQEQEҼ5^?Wn0-Q=bx!;cЅ{\(J(~?4)T( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(?74dG?74ZW@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@ ?#֘hQFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@TZdG1(QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@0_Oa?_OztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdQt!SSztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztbOztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztEdztt1OtJ~G@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@1CO9{~G@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFG@QFE@2/oiȏoi]QFG]QFG]QFG]QFG]QFG]QFG]QFG]QFG]QFG]QFG]QFG]QFG]QFG]QFG]֟EdzёEdzёEdzёEdzёEdzёEdzёEdzёEdzёEdzёEdzёEdzёEdzёEdzёEdzёE+ tUgNџW3~i<s³0_D5x7اpax''X53]?t˵HA\M|]wEkF=p,a#cz;Twkm-Ͷ( xj?mVզ֢_ /ݹ;OB/+Q%Z G) RAF+Ϯuxz [kI rƮ6Ѩ(zWRiq|"'`I\Eτu}m^o eQj vqښ@z-^]{šn:=mRW9{T w<ƧrpdogS뭴~pE U|go4+ ZwR(IV3[(:aj:Edc62p8POS^?&M_5·pfp6qM+gQ\K^LzvHĤ{\<bcA<9GSmm<{ +,Lhy#'j7okm]UbϚ@uTs6%QE +( +( +( +( +( +( +( +( +( +( +( +( +(*o QY(((((((((((((^ƒ'QEf0(((((((((((((GCIJ:J{!.EVc +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(OZJS֒Ķ +(aEPEPEPEPEPEPEPEPEPEPEPEPEP%iSH(aEPEPEPEPEPEPEPEPEPEPEPEPEP{yv5^?rV:/BCr=bzDQE1CO?ߏiTOEOPG?^Oi?h#:4 q-,yi:=q'O5DGk +GwĖNy$>բY^u/ 2{I8"UD;;(=\ς|#-Ɵ*M$I4PFPn6;V1/fpp;R?#tM-$xRo |o%~y''9>5<X6q6 +X0$؊W "ZFPk2* C5tnmɩIo,ŵ wr/Oex_̈ɨ18>⎠uZzK ai7 : -h-?zA>m4MU/0io<2!N8u>ohU[HAb=~ ~~週;|= 75h6g,Åyo'}+ṵ?|S,6M@1eIN돗þ3{xy\"sy慢a=nrn?0t5Hbgbe`X\{eGh4;SGn׮ִuKhMWؐG\ ᵁ o1#Q += > ;Xv 4 +ilF4{n/JU +qPhW6od9oDQk{Yvp}qHeV\|<,b z+?Q6ou lGy9Nzg(u*!,.ю`]CZM4-ǜn3ƚbP<~C*d sTxwir'<ȃdB7.yZ-ᴶ5""Q +-_?]^jiYyyr9[zף>)l[N5]g!32K`a;ékUm'9/su5"F @o*Bٜ{P1t3sufcku\I y玵=~04;0 7>\IV#ycM׺C4F%K"P`} (MEHRuv ~5^F$ZօV~m%j9;$8ԧu~{wyltoVZtCsǽ0p8hL +o-WVx`50Ё{}|0a6ypyQ2= mk^=&7()PAj0j%Γ;Ȱ\BafH3Qp&B9seي*̓מk/[4dĞb]gֺ{;d28#XԷR`gߊ+sZ!]q?$׼A̦i z]Bѩ> ~T,Qqm4}"⁣q1\BA=ZmJyR `A(\%b$¹?,:"ц=SJx(ʸ#`8E]jx)HtPʃg QU5b2[=FG+;a XQZHZw}88GֺeJ4#'BA{Vz4]ʐLTB@a dzQp9_h̐]ې㻦k>BQ&W)Uc-ѕe猐~qi~;~͵ieW~^igjvwZtX^B_,MDEmTٱC>e9xcxY]K'mN1SZƌ4D$uQEdPQEQEQEQEQEQEQEQEQE +zJSUTؖET ((((((xÚc޹ݎ%nʣֳ|'⫏ ֔tlayF+UFn'^MEVEQ@Q@Q@Q@Q@Q@ +z +JSRV7(QEQEQEQEQEU{m6[ɖxsW<}{ cko4 qoq,lok +3\䓳;*((((((((^ƒ'QEf0(((((@\-ĨWZOŮѯ1i݁Q֝Կ*%-( +( +( +( +( +( +(t4'QEf0((((((((KR(bRpψck%Pr6µ9EhrKFvQEdPQEQEQEQEQEQEQEQEQE +zRU>6%QE +( +( +( +( +( +*YhtdԞW?O-^}K pI3+c 穭cFrZ"\v:((((((((^’*o QY((((((K,pDꑠ,@I**j>#ҥm>g hMµMlK[QYQEQEQEQEQEQEZ^ݯ:Wklןkμa#U@Z<%o{N!^?/Cw| +!?WdIEP4c@AtT@)(((((((((((((((((((((((((((˟{j:?Ɨ;𠢊+((((((((CZxGĒDpM,;nf$ðOșל{>8ѵ#G?ɒ+ȓgn:?>3N@[^O' ݷz:y'dT;( B((((((((/=ԷZnQEQQEQEQEQEQEQEQEQE9Z=WPiB$q Ɵ UQi+?If_iv1B=A':WuajZul]!cV=qZ{BҴ/1$۸(Ov$Vsi Lx/#vv=빥Q+ 5QEAEPEPEPEPEPEPEPEP4%i=P+1Q@Q@Q@Q@Q@Q@Q@Q@zr[7"iV_5#-1>aЏ\O!]KVZϖ8ƒks$_jͨ[%$m]xT%dڱSGQTRY⿰ζ;i\@=E\&vfER((((((()4-(QEQEQEQEQEy:[ծ2)XC6QI9ݷG skw\Nƅukϳ1v1~9凉|Iwsp^\#Dxp#wQYҖiIIECku 7VI`ER(((((OAIJz +JҦpQEŠ((((( k@AC `V#㞕HmU@U9kOl~۩yo0Í.\j?+ D>sӾ1]hԔ]S=Zk퀾g홊jq4ӳ5(@QEQEQEQEQE/cIKV u +(QEQEQEQEQE[QSӮ,g.!3m;eZilaXա +]V" `('xÚ'u7ڔSj ?Av`INc:%V6rLM t=>\ӌ+IXZQP0(((((GCIJ:J{!.EVc +( +( +( +( +( +( +( +(3]Bw9Q\Ωp|PQ"ig:(PWV4/ h 5溟|9qE"wY[ʒH6 mvcRWv4Vm{M ]w?h\[d0kQqvf( +( +( +( +( +( +( +( +(OZJS֒Ķ +(aEPEPEPEPEP^?[&r#B!8%}k?kWEKw#yllg(>>9?uMVMGSr|1+ +m[On)ըni_XJ GW88@=q4ӳ5 +(Q@Q@Q@Q@Q@ RRM +1Q@Q@Q@Q@Q@5"]ӯ|ϳˍ7*N=GҹOAeO[[DAΨ0WcjUײVЍ>@ 2|9{ [;? @3]Hԓ;kiEe"ҼG iW_h& +d +ԮIE٢ӾET(((((c^uע?םxFyoJGE_1B_O/BCr@Ȓ(?ߏi > +?I'EW/OӮdM+('WxG  W2i`6@ByJ{?)Dӽ]F/=@d=0kO> >wrs\J̻6JǺ~Xw=.Ӯ_Es^$[d$*IۓJ|;[ [[\51}}= >>XIok7ھVtY6u@H:ܚVo| gg +Co qQ ;(>_W/">+}SziS!Ec=ܢ+x#W~ kb:.0gھNknRXdhPB s^3YEZ3C$cqzJh ]ZGVyW;@Lg'=1\)uZi/$_=sF>UQֽJi[mK['S]4#oOfIoxGֿVQj|돽C^E %}ڮsf{>E((((((((((((((((((˟{j:?Ɨ;𠢊+((((((((((((((((((/=ԷZnQEQQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|5B|5wBQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE%/cIZOd%(aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPES@)i)OSIUSb[QP0(((((((((((((OAIJz +JҦpQEŠ(((((((((((((i){J{!.EVc +( +( +( +( +( +( +( +( +( +( +( +( +(t4'QEf0(((((((((((((((((()=i*|lK`*QEQEQEQEQEQEQEQEQEQEQEQEQE/aIKRV7(QEQEQEQEQEQEQEQEQEQEQEQEQEZ^ݯ:Wklןkμa#U@Z<%o{N!^?/Cw| +!?WdIEP4c@AtT J|E-OO1 E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@ E.F@SGRL'ƙ_%4Y E. 5BQKF %4`QKF %4`QKF %4`QKF %4`QKF %4`QKF %4`QKF %4`QKF %4`QKF %4`S%RIM`'kJ_u)QRywȓ]̈[_-dQjqhȣ"VW<{E&E}Z9Z)2(ȣտIFEVxL2(opsǸRdQGի+=Ţ">[_-dQjqhȣ"VW<{E&E}Z9Z)2(ȣտJQ8\l. E. 5BQKF %4`QKF %4`QKF %4`QKF %4`QKF %4`QKF %4`QKF F i=Q(Rу@ E. 4Rу@ E. 4Rу@ E. 4Rу@ E. 4Rу@ E. 4Rу@ E. 4Rу@ E. 4Rу@ E. 4Rу@ E. 4RуM0j|lKa(bQKF %4`QKF %4`QKF %4`QKF %4`QKF %4`QKF %4`QKF %.(*o E. 5ĢJ)phJ)phJ)phJ)phJ)phJ)phc^uע؃kμa#U@Z<%o{N!^?/Cw| +!?WdIEP4c@21?>ʀEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPLxu$xuxK՝PQEAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEVŠ(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEwQY(((((((((((((((((((;QGj+I섺QY(((((((((((((((((((hwĶ +(aEPEPEPEPEPEPEPEPEPEPEPEPEP$>|Gҙ_[ }?Q[QEQEQEQEQEQEQEQEQEQEQEQEQE>>Lf;(!EWjQEQEQEQEQEQEQEQEQEQEQEQEQEQEi=P+1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QMQEU>6%QE +( +( +( +( +( +( +( +( +( +( +( +( +(QڊҦpQEŠ((((((((((((( _>0-z5yό?j _Gt_i+؇t1^;{N!^?/ (cLC?G!SP$I8W"Դș^5Ed֝(Gڎj:c Ab2߽OU: :.--XxIƌ2֋ +qEsxѼw[;y%Kdbҟ-ᑸ;H?Z|u|ӤqNiCc#>E\k/U\[7yVUcqrp9~+MM=m'{i^@d^G8vڣz5olb+ko1Hyܠ) {}h\**u6f"fqh'Ҹ]vھ뫻7͞EELz9ù^-'F/ ЫQZ~Hg|j)Oq]RO"%n|dIQEshC +*,m&c2HT \X޷|IؼKiZIL[8=. +.^NУxJm7m*,Acmʜں-k1Q`(ָB-rl0mB(rŠ((((((((Q޴_P+1Q@Q@Q@Q@Q@Q@Q@Q@s%sw|@2XF +FKwyo1kdL ʷrDKC/tk+T` V'Kѿ/VgQ(ͤT]Š(QEQEQEQEQEQEQEQEvV u +(QEQEQEQEQEQEQEQEv\ʑCwsw5x{:g)mQ$ "nW[*ZAws2ZC7-,󑅧E5EHJUT`( 0P*nNIqEW)QEQEQEQEQEQEQEQEQEz(EUOlQE@Š((((( +zgi_̰2{ܟJϋ|T.my*nU?0$c { +]cֺa{4قVgw<c_Q& +n}W.e4 +( +( +( +( +( +('QS>7c L(ؐ(((((i6N2W4tѽΟ@KۛBz|<tZc7 UTpN?Cb|@m3]'XyLn5a3VWPAR2<KYúuF +3Z4QEQEQEQEQEQE>>Lf;(!EWjQEQEQEQEQE|Cl\fH[tV9+1a= tZi6\lFQf!#>>c+),7ޑ14){lz]Q\ƁER(((((+I섺QY((((((((FeE,$ro W +Q\Gs ;[9?jxD![N{a<ʟb?\ݍ+vp6Ψ8BNIwQErQ@Q@Q@Q@Q@Q@Q@Q@QMQEU>6%QE +( +( +( +( +(![("R#'6?7|WRp +O>Uxf(.&KKl ?M"4γjB0xNMvQErQ@Q@Q@Q@Q@Q@j(EiSH(aEPEPEPEPEPҹH>!h~$EKSܢ) 6{ +״k9o&VՇ9&ܖǡQEhQEQEQEQEQEQEX\ݯ9WkѬkWn5+XiY@68:~yo:ӿ?Wbox>QQUa;0n_OQE >~?LLOC?G0 XeHit~O i>|zo-Ա:f4m'&X`חޟi-#YbME pb$4&u>kkM#Gd7I#$u>Wxf@>=G{jU̓j%ׂsLfrD}Vj,֍;ppq[܋&u%Fi,yV|EsjWVעIڏ!Kqơ%?sֻy-^)vR daAkX= kOna F)px Լ\I fBI-dx ֭Wٖ UdFka3m)_1:sY_bhXMCT_ jiב-o2Ƞ<T~F[>keZ[[˟2(`TG*Ž[[A0 ڑFUG(ZʟtbTI<<ƬxA[e Ag62Bl21Fz8& z?}@Ѱ5H uA-YLyW//¿rhۥw.X먰,4 uEXԟ\9UC9:k$-;ۑ/V;ӓh'V6յ`Fr=<`^YElEyϞdϮ3M14e:K<ls]|C "ķh\?#մEm~׷G9a{k" )P2ND 8!vqc1ڋ{P_|9eY`ONC)C+7GYZY-p& =9EWVPd8-Uw0<d4 _ښMGhRGGzCG@2YMk %gi&XۂܕbW.R=VT AE7Wv6syq 3U9?kn@mR8'˫Oj'rFr^$q*+# " Wч!.i4ڲ-fκ~ivqo:ɷ=3qWji֖6,{85v-݊WET (((((({!.EVc +( +( +( +( +( +( +( +(!k˘m\ng< y|L.+iI +! z ՝[[Cqcts u8xD9BqtЩNrȚobeBf6JdfYiZl&;{Xn)JOVk Z/0*FQEQEQEQEQEQEQEQE4EUTؖET ((((({X鑬֑ڭ<'k>)k-1"LnP#0@l/t N55;gdEQOß/_WM{$ކս\Zݒ' #RVֶVokPBv8*K\а)QEQEQEQEQEvV7(QEQEQEQEQEEqs\+U+|K—CdK+*1ס\[Ayn0<.0ʁ<Oß/_WE ++4ވcjha}mvp SpxUVL0sVrإ~ET(((((eWꅗ_q_Or@Ȓ(?ߏi > +d?ct*}21?>(((((((((((((((((((((((((((( L^‚( + +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(&QEf0(((((((((((((((((((w( (,EQ` +(QEX(QE(QE(,EQ` +(QEX(QE(QE(,EQ` +(vUd%( (,EQ` +(QEX(QE(QE(,EQ` +(QEX(QE(QE(,EQ` +(;Gz*/}lQEEQE(QE(,EQ` +(QEX(QE(QE(,EQ`'QS>?c L(ؐ(((((((((((((4d} >s39G +(P(((((((((((((+IlQQaQE(,EQ` +(QEX(QE(QE(,EQ` +(QEX(QE(QE(,EPQUSb[QP0(((((((((((((E*o QY(((((((((((((eWꅗ_q_Or@Ȓ(?ߏi > +"|EOPG?SFO4dJ(r}M>\SFO'ѓi(4dJ(r}M>\SFO'ѓi(4dJ(r}M>\SFO'ѓi(4dJ(r}M>\SFO'ѓi(4dJ(r}M>\SFO'ѓi(4dJ(r}M>\SFO'ѓi(4dJ(r}M>\SFO0ܠ1޵~u-~KA_1_=zir!ѽߝ6o΍Q`ߝhd;{}:7Ev~toMoΛE !ѽߝ6,C{}:mX,oF~t(Yo΍Q`ߝhd;{}:7Ev~toMoΛE !ѽߝ6,C{}:mX,oF~t(Yo΍Q`ߝhd;{}:ݘj +֪+FD,dѓEb>dE>dE>dE>dE>dE>dE>dE>dE>dE>dE>dE>dE>dE>dE>dE>dE>dE>dE>dE5qԔ\v֏R+ʢua<T_ʟEzyQq*<>=; c<T_ʟEs1T_ʏ*?/Oe9*?/GGdgʏSCf3ʏQGQ3GT(P샙TyQq*}{(vAyQq*<>=; c<T_ʟEs1T_ʏ*?/Oe9*?/GGdgʏSCf3ʏQGQ3GT(P샙TyQq*}{(vAyQq*<>=; c<T_ʟEs1T_ʏ*?/Oe9<=*?/J֯S(v T_ʏ*?/OdgʏSCf3ʏQGQ3GT(P샙TyQq*}{(vAyQq*<>=; c<T_ʟEs1T_ʏ*?/Oe9*?/GGdgʏSCf3ʏQGQ3GT(P샙TyQq*}{(vAyQq*<>=; c<T_ʟEs1T_ʏ*?/Oe9*?/GGdgʏSCf3ʏQGQ3GT(Pf;'&? ֒eާszΒ^s1w7ާ󤢏e9tnoSQGd]:77(Cf.?tQ3sz΍:J(P샙OF?%{(vAާszΒ=; boSѹOIEs1w7ާ󤢏e9tnoSQGd]:77(Cf.?tQ3sz΍:J(P샙Vh]O$fy1$EAa#VD&/ȣɋy')SL_?GOSy1$EL_?O<y1$E>gOQ<(L_?GOSy1$EL_?O<y1$E>gOQ<(L_?GOSy1$EL_?O<y1$E>gOQ<(L_?GOS +Wbz ULZ}?_9O>Q^qdѓEdѓEdѓEdѓEdѓEdѓEdѓEdѓEdѓEdѓEdѓEdѓEdѓE5 :j6heЌ&Y!T_ʏ*?/O;#.f3ʏQGQ3GT(P샙TyQq*}{(vAyQq*<>=; c<T_ʟEs1T_ʏ*?/Oe9*?/GGdgʏSCf3ʏQGQ3GT(P샙TyQq*}{(vAyQq*<>=; c<T_ʟEs1T_ʏ*?/Oe9*?/GGdgʏSCf3ʏQGQ3GT(P샙TyQq*}{(vfeQԓG_+4YO>QX>dE>dE>dE>dE>dE>dE>dE>dE>dE>dE>dE>dE>dE.x>%iSH2}haFOPFOPFOPFOPFOPFOPFOPFOPFOPFOPFOPFOPFOPЬЯrV_Or@Ȓ(?ߏi > +?I'EB\4 Rgc 1訧oIY[ j;h\kIq9 /y1#r{Q`;)(e wk<7]Z/ kgns@T7wsys rq< +wu+YCdi@MA ~QU -NP䯙E23TM,wSĥA& 5hmQkz|׭lQaqާ:%@k|kpg@%PZP~{yomo<٥TLtx_:pa>^%S;8s-;e@qTQEyY[xrmcY/LK&]  \Iv 5b}IT:kyoyۜ4((Ze?3˕pA[13öWZ/ě$Zk]pLqt +(5[3]A;guA 4(Bj7q3mWcH OWS!̸0b1gZY7,aFkmILmQ#fhf XPAE> ++Jt[y< @R=\u?X[kQȂ,;F^I`=<[9t= laIfKk8S#-s\9޹kŵ3q#ދC{YԗAhe&8|EZ> Yu}fJull( X.z5@߉6`iRwBmАEs.3v,/\gnpǰO_j^#zF;l぀EFu,@*8dQa\(w&lNXmKr\|Cw-p0ˆΥ@' J,;j []Kyw/.=#_x:}ޫiW)m:5/є_ CkRXiLqIsvvF;c.(umW[ZKư<*\ BX2SFAEP~KAST|((((((((((bVƩsw {mp.=}?&=W@m2RhG/1 Oot*Qqn/TeӳGoEW9QEQEQEQEQEQEQEQET} MoU b(c((((((((M޵oGi^\"m}?ϡGVvW7(1ނ->%'#I7^W^N⌮ +((((((((((+Z?I謚֏R+>tEWsQ@Q@Q@Q@Q@Q@Q@Q@W/M^Fқ&`#Y'}~Q^uKEU0]ĊX䟐䟩V)QEQEQEQEQEQEQEQE?ҝM?W)QEQEQEQEQEQEQEQEQEQ\W$7g72ጷ8,N RaE2c%jFs>Š((((((((( 6IJ|i)QEQEQEQEQEQEQ\MC]K߳i ^,NVY}>5xB?v-LΓg ')QE((((((ӰoUV=FS(((((('yv+ - \+2$({}1COR*z?Ih,s$lz3^ ߄bm:Ri%1#X)?t;bjz|K˗KK)bY1Ĭ{:d砬 ?Z PmDZ;!6QXSMZOl6Ŷ3}STu jW>!}kD i73@N \ +IxH Ү-4{k{ZEW#6~Ft/TIFY<zlR k`IK۳8P w Ym 4iXdݚ`Č gҚvzM¥}=6@J>`~Q&%mu5Ţ&I#}/&xK࿎8o:4i١nG%>ǯLPtF淅nPH +#|3TitM6H 7ZX򄝣@Э<9AYo1E]Y؜'ԚԼ7/5m ĭ꠹%rǎ;RX,4eء"pK #/)o;7vqWEZ_7JN!a*08 '5mKL\6c46_hɧ:mvV׉dq +c <<VJ\hlIJZjWv h\F7Hph``~x7[W/4 |6cqҒ?ɣxLxDVcʩ.zg޹{W;X*&!UKy^q.ᓣaf9H8?smv^m'ZDa~9u-+\6i5$q\\t_im%ՈbXas^z1 ݲPN"mCw5M_@:n$$,I= 4&I _W7R8qփyi5։c#C-6aFGzWYYgl 55EBм^uܛvӣk-1) ;46GXԁӧjlaEǼygGtqO \}t@M'rG=qSt6yUS^{,/cFO L>r?29oߠ񗆮|U&ohyC g#pY0Sv0#*"htgM U|1z+zA Q[h>0Vmfa# p=º=Ok]'WbDo/P8SqҹyVn=*6 ?$FL .=s֚`nP?ijqc(3zW7s$5mh-k8k7ΧAz xGNJH()\Fppr8YxWƐđE4UD4gZi6z<5&+5Fc + szg5x-~eomQJg2k-c+HcϙP %{`p3Y ֑7ڼźǗ#oQy44t=bQq5 +x+/i _P=[ɕ_//}돻9J^)/58+~}/N:؇dK` pr9"_(h`΄|S> OEcPbeo _&-niSKm(A< ZAQZ],s,7PE(H ZOk b '~=NGLOoQE# +(0/_ +?%z^KAEV&EPEPEPEPEPEPEPES+YFj6^Q967^nq\x{w^b ,l8"CGޮI K5, Ԩof="{ɯ+[8ª8Q]Jq7k-;Xݢ+((((((((*kZ_FEOEW1QEQEQEQEQEQEQEQEQEg6z퐋L?g 6Gvs?Y+lkgo\s97c|f&OHuGBZX 6WF#+[/v(S@((((((((h'kZ?Ik(#uQ^QEQEQEQEQEQEQEQE5"3E?A뚇Sɾ-62FXpkר@5jћ1ߗyzays<^1CQE +( +( +( +( +( +( +( +(֯Sj: +( +( +( +( +( +( +( +( +(21j&A̒Cާr4W#v=keqgO WQt#퟉ivD%xl8}kzƩ14AkXR XzB:^/.7ZHǫuz2c8aEHP0C +( +( +( +( +( +( +( +( +(0%+}EPEPEPEPEPEP]CQҬeaeRŶUyonҸ?ɹ ]x_bЖXL2=Ij#B#|cqqڟR0((((((N=FU[L((((((;yaeiRUK7*F@xbkk̊f`bJzWQ/Jk ]&8{$G-͍fXlx9Y= 'q4j]'u+QrB]{5UM3M}>!95nQEQEQEQEQEQER~5JtOƩWf;(!EWjQEQEQEQEQEEsZnYm YIvǥqG}3~2J]:gx7*4b'{Y#=7Zckڊic4[QP0((((({O_ƴk:>Lo( ((((((((3W|=)qiu E*HO| @xCLJt=K{)1U,CI%@ײ?4/I|9y}iP<ݛ鑞Bd~-%eҮАCmm G^EQgv c8) (((((((((˟{j:?Ɨ;𠢊+(((((3J`t:ݎ}oiZdy>̳nZ/x^}V?xRḲ~AAF\Jw;*owm nTP? +\Y(@QEQEQEQEQE/aIKRV7(QEQEQEQEQExGY]^̈́^}#6#" `97"|ҕ؉H(UUuIG*cjWQ\EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPZOEdִ^QG>#((((((((((((((((((((iZN((((((((((((((((((((o~֒Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@v5jǷժ`QEQEQEQEQEQEQEQEQEQEQEQEQEQET蟍RU?QEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5Y֟he8|AEWdQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEe5I?xuXK՝PQEAEPEPEPEPEPEPEPEPEPEPEPEPEP%iSH(aEPEPEPEPEPEPEPEPEPEPEPEPEPЬЯrV_Or@Ȓ(?ߏi > +$)ʀg=Pv{ѳޝE7g=Pv{ѳޝE7g=Pv{ѳޝE7g=Pv{ѳޝE7g=Pv{ѳޝE7g=Pv{ѳޝE7g=Pv{ѳޝE7g=Pv{ѳޝE7g=Pv{ѳޝE7g=Pv{ѳޝE7g=Pv{ѳޝE7g=Pv{ѳޝE7g=Pv{ѳޝE7g=Pv{ѳޝEs2_ UꂾgYz/ 1KEbh&(-PbR@ 1KE&(-PbR@ 1KE&(-PbR@ 1KE&(-PbR@ 1KE&(-Pb9TU5_FDz6\"mo-}KE&z6@ ލPmo-}KE&z6@ ލPmo-}KE&z6@ ލPmo-}KE&z6@ ލPmo-}KE&z6@ ޭ- 8U]4kԣD-}RCߑ>mmT G~AaطggJ(7mmT G~AaطggJ(7mmT G~AaطggJ(7mmT G~AaطggJ(7mmT G~AaطggJ(7mmT G~AaطggJ(7mmT G~AaطggJ(7mmT G~AaطggJ(7mmT G~AaطggJ(7mmT G~Aaس6΀mUE\ +;LZ>LZEG# 0[o3ho3jhb?cſ?֏?֪QG# 0[o3ho3jhb?cſ?֏?֪QG# 0[o3ho3jhb?cſ?֏?֪QG# 0[o3ho3jhb?cſ?֏?֪QG# 0[o3ho3jhb?cſ?֏?֪QG# 0[o3ho3jhb?cſ?֏?֪QG# 0[o3ho3jhb?cſ?֏?֪QG# 0[o3ho3jhb?cſ?֏?֪QG# 0[o3ho3jhb?cſ?֏?֪QG# 0[o3ho3j1a<9I{!E9 +M) lG{y^IEO# 0G{y^IEñQ{%hb?c~WGTQo=;^WRQG# 0G{y^IEñQ{%hb?c~WGTQo=;^WRQG# 0G{y^IEñQ{%hb?c~WGTQo=;^WRQG# 0G{y^IEñ4ۻ8~LZE\*P[o3ho3jñoQo=;LZ>LZEñoQo=;LZ>LZEñoQo=;LZ>LZEñoQo=;LZ>LZEñoQo=;LZ>LZEñoQo=;LZ>LZEñoQo=;7ۏzo-zԥQZ!6ѷޖ6ѷޖMmo}hFzZ(6ѷޖMmo}hFzZ(6ѷޖMmo}hFzZ(6ѷޖt-HjgJ+dfNggJ)hb?bGU(Cߐ{v-}R?1bGU(Cߐ{v-}R?1bGU(Cߐ{v-}R?1bGU(Cߐ{v-}R?1bGU(Cߐ{v-}R?1bGU(Cߐ{v-}R?1bGU(Cߐ{v-}R?1bGU(Cߐ{v-}R?1bGU(Cߐ{v-}R?1bGU(o=;<2sIޖۛlFzZ+2FzZ(6ѷޖMmo}hFzZ(6ѷޖMmo}hFzZ(6ѷޖMmo}hFzZ(6Fz^V7FzZ+1ލPmo-}KE&z6@ ލPmo-}KE&z6@ ލPmo-}KE&z6@ ލP#kBY?<o)t1KH?/ (cLC?G!SP袊(? +x}mĐ7ÌnPEPEPEPEPEPET/t/4/.ݴPh5O'\+/v܎@TQEQER3*)f!T Ni?]oăEFm]זlm'(((((((((((((((((v?ez_ +GezԾQEbhQEQEQEQEQEQEQEQEW/yxT4Xa!ZR.Sy#ޤ;WSPhCKGQrE{%QXQ@Q@Q@Q@Q@Q@Q@Q@Mm*aUG" f(c((((((((uir_˲%TrݕGsU;!7mYEpnikg f7 +~+JT(I]QYQEQEQEQEQEQEQEQEwQY(((((((((Oxv^KaM}<1B2ߏƴJIw;+;@U:sn@BFN2OQ(ӾET((((((((;QGj+I섺QY(((((((((xzc^9veQ\S~%Llm-IA ĜgҶ kdKNmEV%Q@Q@Q@Q@Q@Q@Q@Q@QMwUTؖET ((((((xÖms\[ST<gXլ{8nlle$Xղ7MO:(J +( +( +( +( +( +( +($QEf0(((((jd(?eQܚ<9{S\Zv[Y\5r.N3ߧ[B5%'c+((((((vKQEŠ(((((iE(Գ&&qZOX[{[|OzԨNIw=&(J +( +( +( +( +( +( +(KQEŠ((((((((jz65 C,ǿ>5u/Zm j8-~vBs擱QEbPQEQEQEQEQEQEQEQEQEQUSb[QP0(((((|E+ iyxı;a9y_ +x^EyvV,pޡbIVѡ9AϢ%'c+((((((v$QEf0(((((_[iR^LĻpv;ֵiQ6EtiD\cНD)QEbPQEQEQEQEQEQEbqv /ڿ_G \)it1^%Q@ {}Td?ct*QM.mJu!Fqλgc3CIgWgihs6uû73\G|Ae|% t@8V2u)2OIg !L?ZȶN[Q|}hI&Z52^Vf1yjvKs=ʺHHHx5i־5j7K-6;'ri5X?j@Mic6;7(3u#}k6& úCJZ4Im<pEq%%Jt'r]MZ6D%`9CQ@Ο¾(<-u{yjQy`$+j#MZ4%ry|Y׏t~ +m\}q5[4Dw腀>'oz>cYګF{G@A:֑i5t[웶w<ןZ-ST?7"DB꣨Wp=:WC j/MWs2ƪKw1\Ո4tSlz"tإrqz :/0]\ġQS"aO8^?kv]+CF{wn]Sƍ6c]^Bۭ:z R,lcH#/cwz:@(_{b6uWU`#мV%_Be̒aަvէ]˺>ENOn~G{=_mn~>e< 1FzmwiC ](F*<2~*-nMֿza_}֭uh_}M\8T" ww nqϔ%z<഻k>w,C"_Kb! H~tf=nϑk+*5*񾱭?T+׵hRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET=~A_3,OZ(M((((((((VX'J}a ?|O_{ +,mdɴCl-1rYǖev%c+ +( +( +( +( +( +( +( +( +aT55_FDQ\!EPEPEPEPEPEPEPEPU/I9ͼXaޭvc O*585mNgk?v_'>m~3~5Nد,<ȼ9\IEΛZ5 +( +( +( +( +( +( +( +( +;Gz| ]B(QEQEQEQEQEQEQEQExKp MkŞ%Lմh<7e) I-0<+DKS{%+nX'D°YJ$<=+Gp +(,((((((((;QGj+I섺QY((((((((wk=ݬsKjd,%>YaԿ+[T7Q<<^ q\ .!mwc<'(˵h*wKO3?ˑpqN(@QEQEQEQEQEQEQEQE4ފ;USb[QP0(((((]ڜ:(cb>eS<#?Fdjڇ ͅ܌g5> Ao4Z$A4Y@|#k'*RZ}RiIECiq8n5qm B(EPEPEPEPEPEV7(QEQEQEQEQETu1qX:&m`ѕ=ھ}{$28=Ouo}, Oql?Fm>fUV=Fj7YbM^\_9'fhŠ(0(((((E'QEf0((((( K{9m.Y`JHс+[x^$hv3}Y%пvk̼Yk?eweW9]HΣV=JC$y@yANkfYQE +( +( +( +( +( +(KQEŠ(((((((( +e۬Dd )|W>?5꺏V%6M{$^q/j\m4B(EPEPEPEPEPڊ;QZT +(QEQEQEQEQEWPӬ[6Kw n8$\SǞ DPN F>k\C>M{~z*5߈./>"ç*C0emH,dkTh+/D_J`on:Z(3DQEHŠ((((( _~Y?<o)t1KH?/ (cLC?G!SP袊((vSnqsG펓eGۻ8R((((((((((((((((((((((((o_ +?ez^KAEV&EPEPEPEPEPEPEPEPES)QEQEQEQEQEQEQEQETҡTz2'h1 +( +( +( +( +( +( +( +( +( +(QH((((((((Q޴_P+1Q@Q@Q@Q@Q@Q@Q@Q@QL((EPEPEPEPEPEPEPEPڊ;QZOd%(aEPEPEPEPEPEPEPEPES)QEQEQEQEQEQEQEQEQEz(EUOlQE@Š((((((ER((((((+JAEVc +( +( +( +( +( +(QH((((((vKQEŠ((((((ER((((((+I섺QY(((((((((`QE +( +( +( +( +( +( +( +( +(*|lK`*QEQEQEQEQEQE0 +(Q@Q@Q@Q@Q@Q@j(EiSH(aEPEPEPEPEPES)QEQEQEQEQEQEbqv /ڿ_G \)it1^%Q@ {}Dy)R(lQFG"LQFG 2=E$dz#Q*:(LQFG 2=E$dz#Q*:(LQFG 2=E$dz#Q*:(LQFG 2=E$dz#Q*:(LQFG 2=E$dz#Q*:(LQFG 2=E$dz#Q*:(LQFG 2=E$dzŻW7 +MCy生ɭx:uyˣ99_s8E%cToʏ*O7ZtQ>g'ʓVdI~UE0`fyRq*Toʏ*O7ZtQ>g'ʓVdI~UE0`fyRq*Toʏ*O7ZtQ>g'ʓVdI~UE0`fyRq*Toʏ*O7ZtQ>g'ʓVdI~UE0`fyRq*Toʏ*O7ZtQ>g'ʓVdO4dzOSI^5_~G+1#֙E?#֌ZeZ2=iP=hQ@#֙E?#֌ZeZ2=iP=hQ@#֙E?#֌ZeZ2=iP=hQ@#֙EJeT(~UnAzW 5 γNg'ʓV_0`fyRq*Toʏ*O7ZtQ>g'ʓVdI~UE0`fyRq*Toʏ*O7ZtQ>g'ʓVdI~UE0`fyRq*Toʏ*O7ZtQ>g'ʓVdI~UE0`fyRq*lR>#֭_tOƩWϑt6.eqdz(BzёLFG2~G(dz(zёLFG2~G(dz(zёLFG2~G(dz(zёL$Qy>ʓS?ѯ[ zJMu\]*O7G':+1?X}*O7G':(ɇc3ʓQIN?a~TyRq*Ӣ0}a3Gdz5xRK苺C=hQY ~G(dz(zёLFG2~G(dz(zёLFG2~G(dz(zёLFG2~G(ŕ@ib}:~?ҫ\!ur_Ώ1?Pf_'Q̿'OT(=OG_ΨQG {2_Ώ1?P@e1?b}:Eb}:%pr,cRܲwgf^a]den`זVĺfg(u}-&m5'XKF1'㊤g_[Y4m{W*9}zs#JhcR)-ݍ#[#j]#÷~u6[m3ncOZo KmYYOu c +2qr|MҗO-3Z1$Ag-4lsMtzK +)k!PU9: MFP#lEcڸkh!=zO|W~8?4:(3ohgE6iMK +2s63cJL(2.vK5uín6nygw\c>+Ю. es#`(ɮH"ʪD>VQǷU?ɡ3^w3I$n zn@[ȢRR4P0VcxGO.ר5FMktz8i mj_?Qm #8v!A s-ҥҖk?0j4K ޵>%T/$j0cPEod]Hy!q#1Ml#CZƽ+ v21RI\g9mjҫFO%ؕ0ixʹI.[pRʜ(5?6K߱^ yQyN8\ד\T=ޥj$ic>N- 5[h42 -_qج,{Hn>@ֹO>,vvd\,k!c5Wg%SD_0Ѐt fXmRHQ>&xE֝L") +Wz^Ρ-V1 z +|y?Mj+a*imHY l=CQgXma]!uP|LT 4_[X~6 ´|Cm_x%5Գ9 mw:~XѾjT.GX:R +GzZ"G,!$̱| @2cX> _xpUƣ7fy#:K].k hWt7@+fF:vec#P)nwg"^)L1G}.4ڳu[Óͪ|K:DΓCCd9ڜ7Gm9E?A#V>6tȖpB lO—qgkf-ċ$d5.m:W "MkY8 M٨_Nf:)^p85]}go m[n8犮=V(QEQEQEQEQEQEQEQES_'өhQEQEQEQEQEQEQEQEQETu_]UhPp2.kUҴ}8\k,h,yx˨bxзVa"-ΟAablބ7R? +좖9IuxC#`zk5)灭&uC!*v91Mͯhn,n VI ~DSb:J(Š((((((((nV})QEQEQEQEQEQEQEQEVF*?2kLM1 t (z}vU$|4j=vX5VmP]llkA--1'|91kR(@QEQEQEQEQEQEQEQE\ӿֿYwviQEQEQEQEQEQEQEQEQER4)3E-;1QOO^kryvn#d|!8?J׵}#G]eKyfXѤr= 8Me|@bsBOl,|}Npx4#GY]2 KX~ fap t?Jܤ0((((((((( 4SЎEVc +( +( +( +( +(9fojQ^ѡh3w>-lQ"isP]q^k*2DS9$EhQEQEQEQEQEQEhY?UeV+8'0+bB(((((;━>*HCd2-E'čNO#]I[GڦfXe[2^2p20p=SFGB¶VL_Rx)pM$R(tu9  RW/eݵRIQ]E!Q@Q@Q@Q@Q@Q@/'TDj|gsQEyơEPEPEPEPEP]F;ۘ'H.2!pVmw670==zq?\?ֻ0*΢VQE4 +(Q@Q@Q@Q@Q@5Y֟he8|AEWdQEQEQEQEQEQEQEQEG<[A$:j]ݎ&ĐI;1FU%L坸~|v.yWg[Դ[{#Okf}%HY njֹOk'w~ +uκR0FO@*vIX? _jJf:XK7G͕ʖ0(((((((((.I׿ƣ^‚( + +( +( +( +( +(0ky$%$:Bz+_JʧQYQEQEQEQEQE^?Vb?+j' Rb_OsQE >~?PG?=AtP7"Ȩ/~>\8Ѵ|Aė:ɺhrye)"bKGLӢԌwZ~,7rB xڗ }{B w3{ +@']=\v3Gњ5Ӟ?,ǔ]n1RɢWod}+ ;H +VM^ k yk:=w ¥G?no.J(.x{N[ .łog5 xkG.HuEMst:gkZ`+}G͡[n1]U* RES4=kMO!fIPA+K]vQp1q{UUqG͝}/? suQN,PMMMto#iA&\l9&4ȴѡ_b{}]5]t;D5ay3"NNwOzƇᏃ IBd 3b+GT,52M7PKi&7FpArI{Z:lu^eј=ezc Q@Vآ@' +椢dq 4i$N]d0=As i t8 !%JꨢPմk r-u<E.ʥd7cK~5lڱJA~z<\xf{Ei*=O5i~xQuA[~nٝ+(@QEQEQEQEQEQEQE6??ΝMPEPEPEPEPEPEPEPEPEPTl{ :.{ z((((((((()i4( +( +( +( +( +( +( +( +( + i-h$]XzzԴP+i7yNVbuTQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@a?Zܬ6@ ER((((((((^ׅ.J4]9'.=Ú-_iwr>FF((((((((((ݭӿֿL(((((((((.d9xPl>GL[]gw) +@?u4Qp +( +( +( +( +( +( +( +( +( +(2SIJzJ=QEf0(((((\6k?nqGV?L]Ek"4qբl!M‚8$@>E2'v %QE# +( +( +( +( +('kF?ѯ?q(@((((((((*Zl~k0HzQW(Ƌk *zN(((((((((˟{j:?Ɨ;𠢊+((((( o_m~odcHOV?L]Ek 4qt6Hⱱʶ2sԒ{ժ(mݔQE +( +( +( +( +(!蟏b~?ҫL|!ETQ@Q@Q@Q@Q@ (HmdaЊWVG~w`stUƤcEDPT`KE%QH((((( O}ڬ]'>mWq? +A?RbrJ(~?4*'Q((6J6Jb#=(=(:*MҍҀ#=(=(:*MҍҀ#=(=(:*MҍҀ#=(=(:*MҍҀ#=(=(:*MҍҀ#=(=(:*MҍҀ#=(=(:*MҍҀ#=(=(:*MҍҀ#=(=(:*MҍҀ#=(=(:*MҍҀ#=(=(:*MҍҀ#=(=(:*MҍҀ#=(=(:*MҍҀ#=(=(x:u,j6?&F@Rmm&F@Rmm&F@Rmm&F@Rmm&F@Rmm&F@Rmm&F@Rmm&F@Rmm&F@Rmm&F@_'GW&8B.Oһ% +>7A^HТ7AGf(գهEgoQGa#BLiVfF +>7AG= ++?3}oZ={ Vf(Lڴ{04(Q +?ha$hQYi3jHТ7AGf(գهEgoQGa#BLiVfF +>7AG= ++?3}oZ={ Vf(Lڴ{04(Q +?ha$hQYi3jHТ7AGf(գهEgoQGa#BLiVfFa?Z +N)jR$CEM}(ؾ?ڴ{1 Sl_J6/ڴ{0!ؾl_J?ha$CEM}(ؾjHbQ}(գه 6bQGa"*mFVfD4TҍG=h/ҏZ={ Sl_J6/ڴ{0!ؾl_J?ha$CEM}(ؾjHbQ}(գه 6bQGa"*mFVfD4TҍG=h/ҏZ={ Sl_J6/ڴ{0!ؾl_J?ha$CEM}(ؾjHNZ֍e"JI +RIh$hQYi3hc4(Q +?ha$hQYi3jHТ7AGf(գهEgoQGa#BLiVfF +>7AG= ++?3}oZ={ Vf(Lڴ{04(Q +?ha$hQYi3jHТ7AGf(գهEgoQGa#BLiVfF +>7AG= ++?3}oZ={ Vf(Lڴ{04(Q +?ha$hQYi3jHТ7AGf)jH4i0+ë; Ff1S(NE; +m +0(S(NE; +m +0(S(NE; +m +0(S( _bRWv`uNL{T4Htd ++?3}oVf/a#BLiVfF +>7AG= ++?3}oZ={ Vf(Lڴ{04(Q +?ha$hQYi3jHТ7AGf(գهEgoQGa#BLiVfF +>7AG= ++?3}oZ={ Vf(Lڴ{04(Q +?ha$K}?W`I0#XMsK=r5OfU(?>?SXeV2_A(??wAeQZbPs4eVʢ~?SGؠhʭEj~A[o*Mb*t&U(?>?SGUn=L+WPs4}~{xTVؠhMU2_A(??wAeQZbPs4eVʢ~?SGؠhʭEj~A[o*Mb*t%O_ƴj)nH3W]:ERB]G̍ ++?3}oVf/a#BLiVfF +>7AG= ++?3}oZ={ Vf(Lڴ{04(Q +?ha$hQYi3jHТ7AGf(գهEgoQGa#BLiVfF +>7AG= ++?3}oZ={ Vf(Lڴ{04(Q +?ha$hQYi3jHТ7AGf(գهEgoQGa#BLiVfF +>7AG= ++?3}oZ={ 5=f,zM&xu5Y5銲Ch`QY m +0(S(NE; +m +0(S(NE; +m +0(S(NE; +m +0(DW7 a?emOE; +AS(NE; +m +0(S(NE; +m +0(S(NE; +m +0(S( O}ڬm(7ٯ{/ rwQE1CO?ߏiS!SSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2/oiȾyEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPUVP?ެq*3#((((((((((((((((((((EE1u +(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEvV u +(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEz(EUOlQE@Š((((((((((((((*o QY(((((((((((((aYZ_Q]aEPEPEPEPEPEPEPEPEPEPEPEPEPkέίQEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QMQEU>6%QE +( +( +( +( +( +( +( +( +( +( +( +( +( 蟍W=.#ZQE&EPEPEPEPEPES)QEQEQEQEQEQE{Jp1[n'H?/ZA?WqIEP4c@21?>ʀESN__myBRqW>(}ܛCBRSGxyHK;P:k%k6iZu֡]\'s swsZ.r}Yf1w>|mmEZպ$h0p++_$+𧘠H\T/nⰱrDPF>ѓ2p; <}iZ~GZ\'ڤ9($r3],m,~\nӎF{15&u"t?C*=Be#V:SgtKK*&==An>>լFhBiG  wekyWs2:U[Exd?£?@o=VVHSvkߍ ͷnm U\) dGG3iQ \tszrއi[A뚂M nHX|(KP֝mp%v $X 6:h7K)%W +FT}_.]#rOF:KR4H-]#۽p:?WźTiv&f6Uo2"y8?3vVڕ4)=k K# :gUD;ePeW/> A.9#ΓBv;H5j]&Ro-fG#9 v砯Bƌ|AM1s / vʧT gOGÚ} P\B$8 + ';֥ @`RQEQEQEQEQEQEQEQEQEQEQEQEQEQEȾy"f@Q@Q@Q@Q@Q@Q@Q@Q@R3Rp4x]FRj kd?}rk -/麆yq33{U-Ě⋿ޛn-Dh搩9Rx\^,U,^_mL*(((((((((f_V8ѕQE|QEQEQEQEQEQEQEQErDc62_\ TGV=[U\M]o7 ]fM̱Ēӧ^\GJ|SQEhQEQEQEQEQEQEQEQEwQY((((((((+̼G VH4LrL󞞛X~1/Y9]ihD'&ZLfbTdzج?ȗל_ί +((((((((((;QGj+I섺QY((((((((W^pCwۀ"63Z%xLAV1;W"/,:ЅvQtt23+(((((((((hwĶ +(aEPEPEPEPEP-_VCЭOڝwo==>LjRPsEIs+988ɮA5NiєR~M{ɝQ\fEPEPEPEPEPEPEV7(QEQEQEQEQEbx\BK;oogAo) Xz=wMIq=O_U:W7[o7<$nkTڊ(3P((((((ՇwօgohWeU~6QEvQ@Q@Q@Q@Q@ D&/-u{x)KK}HA=^Ü{W=];Zz9[Εb ڧ9B+L>]f9F ֊(3P(((((( zs?]25QRhQEQEQEQEQEVqC䙳7l+ +ki_75ODq(wrXX52pʧv5BVvFU-^mwZE!0 Gixb{+ak +"2gַ+*j*QYQEQEQEQEQE^ҿ?Vc_+b' Rb_OsQE >~?LLOC?GmeQ \-qahz6I|z(;]\ /xoB J<3.7%q\u']%^S\ x+(qX$TdcoӥlQE!u4KM6Hh@|pOWh^$xR[qwp/4́ ^E;g:՗My']?c#=J歼=&hf>ˆ'TQ:f.9> Xʹ6Iv9\ψ>U_ S k|;xHp:H>Z7S힕Ҧ!Ñ\3һ)\fvhdV*0㩭( +7۶;mJFfY<,.t U66c'"2iV9 }τJן+ g#g\΅6xDmM#\9IJ_5?>ac?74(((((((()  x 1? z??<gxW&ܬ\#uTl9vtQqX(QEQEQEQEQEQEQEQEZ@zkz2#:(;Š((((((((ퟱ?}x۷sET]<ǟo_پͳ3ۜOrw}wV+"cP+Š((((((((Q޴_P+1Q@Q@Q@Q@Q@Q@Q@Q@qX5 ˧ܫĆC0!7cʊҝGM"erh- &c1P01=+*TuEVeQ@Q@Q@Q@Q@Q@Q@Q@j(Ei=P+1Q@Q@Q@Q@Q@Q@Q@Q@S;oٷsWȼK>xlMd-> c9ktՒDJ)?k}d銹Eww,(@QEQEQEQEQEQEQEQE4ފ;USb[QP0(((((\t?;p|۳\K+$KHJUHp:z+G$Cm>H~}`|ݎvg֦XQE((((((ҦpQEŠ((((( +In62kO -@gٴJ+zu5dGk_ls-^;}sW袲H(Q@Q@Q@Q@Q@?7ִ+>skB/w񰢊+(((((qm,%HwYr:  H?Nִ{5bcwQp0<'ƛ,MrwRwN0e8=~(((((((gVgW^U( Š(((((((( +Z|dnFϵs&A߈l$عUCuZ:+zU5DowyywsjV-ܰ)QEQEQEQEQEDjX蟍WtB(4 +( +( +( +( +((k:sj\iw= +AQ\XX z:FxIovVDӭ"n֕TJNN줒VAET(((((ҿ?V{O7@- \+$({}1COʟQDBnF@{Ѽ{o)ǽǽ:nF@{Ѽ{o)ǽǽ:nF@{Ѽ{o)ǽǽ:nF@{Ѽ{o)ǽǽ:nF@{Ѽ{o)ǽǽ:nF@{Ѽ{o)ǽǽ:nF@{Ѽ{o)ǽǽ$_p(m?74ހE7xxQM==Swz7zuލހE7xxQM==Swz7zuލހE7xxQM==Swz7zuލހE7xxQM==Swz7zuލހE7xxQM==Swz7zuUP?ޫǽAt<nCYW)%qv3c:>'uRgrcrzG_ΏWPW}OU*U꿝c:>_CC^9=WrzGԫ({Hw+V>'t}OUiz*_Ώ꿝R!ܯEX9=WU=;c:>'t}J򇴇rcrzG_ΏWPW}OU*U꿝c:>_CC^9=WrzGԫ({Hw+V>'t}OUiz*_Ώ꿝R!ܯEX9=WU=;c:>'t}J򇴇rcrzG_ΏWPW}OU*U꿝c:>_CC^crzUL9X:rE3_CGu~=L/u={/_CG({HE3_CGP>g1} S#}1} b>_CG)b<4}N򇴏qS<4yhiyh:=L/u={/_CG({HE3_CGP>g1} S#}1} b>_CG)b<4}N򇴏qS<4yhiyh:=L/u={/_CG({HE3_CGP?0`i<5rײDG)b<5S>g1} S#}1} b>_CG)b<4}N򇴏qS<4yhiyh:=L/u={/_CG({HE3_CGP>g1} S#}1} b>_CG)b<4}N򇴏qS<4yhiyh:=L/u={/_CG({HE3_CGP>g1} S#}1} b>_CG)b<4}NGRaSeppRnnRnnRnnRnnRnnRnnRnnRnnRnnRnnRnnRnnRnnRgiSHZ)7 +7 +bIQPIQPIQPIQPIQPIQPIQPIQPIQPIQPIQPIQPIQP +αa7xu8luލ޻LQM==Swz7zuލހE7xxQM==Swz7zuލހE7xxQM==Swz7zuލހE7xxQM== έƨKw9=W1ԩU8+tQTu+V>'t}OU5W}OU*U꿝c:>_CC^9=WrzGԫ({Hw+V>'t}OUiz*_Ώ꿝R!ܯEX9=WU=;c:>'t}J򇴇rcrzG_ΏWPW}OU*U꿝c:>_CC^9=WrzGԫ({Hw+V>'t}OUiz*_Ώ꿝R!ܯEX9=WU=;c:>'t}J򇴇rcrzG_ΏWPW}OU*U꿝c:>_CC^9=WrzG({Hw+SWaW:OU꧃ڈ*z*_Ώ꿝Oԫ({Hw+V>'t}OUiz*_Ώ꿝R!ܯEX9=WU=;c:>'t}J򇴇rcrzG_ΏWPW}OU*U꿝c:>_CC^9=WrzGԫ({Hw+V>'t}OUiz*_Ώ꿝R!ܯEX9=WU=;c:>'t}J򇴇rcrzG_ΏWPP蟍We2}U\ޏ?[%o5h(TU—+)~ޟrw.G.Gꕿ=>**\ޏ?G\ޏ?G+({z}TUVPsz?sz?T)QW +? +>[CRe3e3}R򇷧ܥE]˟g(˟g(ooOJ?Q?QJޟrw.G.Gꕿ=>**\ޏ?G\ޏ?G+({z}TUVPsz?sz?T)QW +? +>[C.Mb+>KyR6Z`(R^JS +A?RbI(cL#TR(QE1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ScQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES_'өhQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|kr%QH(((((((((((((((((((~ +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +(&=M%)i+*o#QEŠ(((((((((((((=%))+JAEVc +( +( +( +( +( +( +( +( +( +( +( +( +(-XojQZ|?SŠ(0(((((((((((((i4((((((((((((((((((((lt:?N((((((((((((((hZN((((((((((((((iiZZC +A?Rb$({}1COR*z?IQQ4vO+5.{2Mp֞ l5]K!&ϝF~UlӰ|e;\EԑuU Tw9c P@'܊f?7q5}:Lңaʹlz +Z^7]I9$zM!E7;o;>,lU#VR: EVt(!iPVt\Nkt7EE-O i8Qnn}4/\[m$Sb:s³/-ƃYhc}H[n]8,=ӯ5?HS` m?# J{ڦh[mp >6 A:-mMĀ RuGt"+Ԙ-yE4յ_ [Q[E\e0#\nI?=;:6Ǡ.1uڅviGyESյ;mIԮجљN;sҹ> l5X]lbڙ:p"wTW#}-_WaEWiQEQEQEQEQEW7xůǡiR@p<.+d=p} 5!WˏR Wx>?'P,tIͺv ¨2yi&Uw(ϴk=Bcݱ9*C +( +( +( +( +( +(y?MCN(((((((((x<& ڍȈ)qzsԕ^A?QEQEQEQEQEQEQEQEQE6??ΝMPEPEPEPEPEPEPd"ff8=xo^%FMBYvuWEbRdM3Ma],?},=9o5xON[=+els<:;:*xHHȫQEQEQEQEQEQE4oGSGtZuQEQEQEQEQEQEx8HlPty Ӛm+NGooF=8SFSP,˽"hei}h%ٻ;wqjexcE]#j((((((GZZA֖_Or (cL#TR(du-6qвָ/xILJ4-y.u[; +{r+hLG;K;E5]F -{5 =p3i ڴkSWʻ#\?Az\V1(yt{ϴ C:m'=)fn'y4e;lORIע:,z"Ep ^_.oiŰqأ`^}]i6@ybdR2At/ i]B#vdS#2=KY#{(93 s Ⱦ"xU~%ϫSŷY~/2 6|bn.9-|k{Ѥ\ a8e* r:0r=+ˬm>ZѾ^I+ONGZ:(L,`x7O5nZDLR)FwB}I$yMo^|:\E}-Lٷ$*G^E $66o+FYڪ=*"xV7YK3\?&ryz&3֦SM\ lQs Ƽ~fhk*_N?jZLtm +(LV8MSGEwkeIZC#D$IȬ!y6RA^E x'OtQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPcx:uQEQEQEQEQEQEQEQEQEq ?boo8kl k e K`1V(((((((((y?MC@((((((((([ŞwegIH,2q]M?4Oxr95}w +" [ܧcAɮg(f^kWe6|=?)^SO2e##yQH((((((((( SIJzJ +=QEf0(((((\Nƅukϳ1v1~9凉|Iwsp^\#Dxp#zN8E{C{i ջdF#*FA榢~EQH(((((=%))+JAEVc +( +( +( +( +((k֟S-߱aA=%χ\:WN0|8}6|bZVN(GH,5}3׆(%kZ +(Q@Q@Q@Q@Q@ַzoj}>_WaEWiQEQEQEQEQEYn DZ#ָ +F +]iK[`2q^E4޽}k%j^tV:F2NzWkEQ@Q@Q@Q@Q@Q@ CNOPEPEPEPEPEPEPEPEPEP7 x+mW=nM]rpy5B])Q|o츢#k(u[%WU?´oU]R(((((((((tlt: +( +( +( +( +( +(8M]M"Β!xm8-F]jF[gS\_Hc3úchӴpkn3ZtQHaEPEPEPEPEPEPGtZu4oGPEPEPEPEPEPEP= O;u/&g0 C +T>+o]m V[};g2[eEwSL,rm<9j*.߻ݹ>E +( +( +( +( +( +(uii )t1KH?/(?ߏi > +?I'ESQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEx:u6??Ν@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5 :y?EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPXmַ+ QE(((((((((((((((((((_?QIK)(((((((((((((((((((((cRF|#QEŠ(((((((((((((=%))*'H(1QEQEQEQEQEQEQEQEQEQEQEQEQEַzoj}6_WaEWiQEQEQEQEQEQEQEQEQEQEQEQEQE4k{uQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE6??ΝMPEPEPEPEPEPEPEPEPEPEPEPEPEPEPGtZu4oGPEPEPEPEPEPEPEPEPEPEPEPEPEPEP-! \)it1@QE >~?LLOC?GEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEȾy"f@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@1CO?ߏhQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETd?ct*}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ?>/}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2!Jd?ct*}+ J0=( J0=( J0=( J0=( J0=( J0=( J0=( J0=( J0=( J0=( J0=( J0=( J0=( J0=( )> J0=( J0=( J0=( J0=( J0=( J0=( J0=( J0=( J0=( J0=( J0=( J0=( J0=( J0=( /}0_O`QEQEQEQEQEQEQEQEQEQEQEQEQEQE1CO?ߏiQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEȾy"f@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ >?7}QEQEQEQEQEQEQEQEQEQEQEQEQEQE#tӛ6 +A?Rb$( +endstream +endobj +2214 0 obj +<< /Ascent 0 /CapHeight 777 /CharSet (/uniFF08/uniFF09/uniFF0C/uniFF0E/uniFF1A/uniFF1B/uniFF1F) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2544 0 R /FontName /PIBJCZ+gbsnuff /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +2215 0 obj +<< /Filter /FlateDecode /Length 203 >> +stream +x]1o! !ݒ( M^+u%`NH9|ܐ_@ ~:ChGWMqx 6olTǒiGh U%o}# v/Fk UloWMLU鹐Stjs +endstream +endobj +2216 0 obj +[ 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 ] +endobj +2217 0 obj +<< /CreationDate (D:20250328085854+00'00') /Creator (Mozilla/5.0 \(Windows NT 10.0; Win64; x64\) AppleWebKit/537.36 \(KHTML, like Gecko\) HeadlessChrome/127.0.0.0 Safari/537.36) /ModDate (D:20250328085854Z) /Producer /Subject /Title >> +endobj +2218 0 obj +<< /BM /Normal /CA 1 /LC 0 /LJ 0 /LW 1 /ML 10 /SA true /ca 1 >> +endobj +2219 0 obj +<< /BM /Normal /ca 1 >> +endobj +2220 0 obj +<< /BM /Normal /CA 1 /LC 0 /LJ 0 /LW 1 /ML 4 /SA true /ca 1 >> +endobj +2221 0 obj +<< /BaseFont /AAAAAA+TimesNewRomanPS-BoldMT /DescendantFonts [ 2545 0 R ] /Encoding /Identity-H /Subtype /Type0 /ToUnicode 2546 0 R /Type /Font >> +endobj +2222 0 obj +<< /BaseFont /BAAAAA+TimesNewRomanPSMT /DescendantFonts [ 2547 0 R ] /Encoding /Identity-H /Subtype /Type0 /ToUnicode 2548 0 R /Type /Font >> +endobj +2223 0 obj +<< /CreationDate (D:20250401140530+08'00') /Creator (Matplotlib v3.7.1, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.7.1) >> +endobj +2224 0 obj +<< /BaseFont /KVPIPT+SimHei /CharProcs 2549 0 R /Encoding << /Differences [ 32 /uni00000003 45 /uni00000010 /uni00000011 48 /uni00000013 /uni00000014 /uni00000015 /uni00000016 /uni00000017 /uni00000018 /uni00000019 /uni0000001a /uni0000001b /uni0000001c 61 /uni00000020 65 /uni00000024 /uni00000025 /uni00000026 /uni00000027 70 /uni00000029 /uni0000002a /uni0000002b /uni0000002c /uni0000002d /uni0000002e /uni0000002f /uni00000030 /uni00000031 80 /uni00000033 82 /uni00000035 /uni00000036 /uni00000037 /uni00000038 /uni00000039 97 /uni00000044 /uni00000045 /uni00000046 /uni00000047 /uni00000048 103 /uni0000004a /uni0000004b /uni0000004c /uni0000004d /uni0000004e /uni0000004f /uni00000050 /uni00000051 /uni00000052 /uni00000053 114 /uni00000055 /uni00000056 /uni00000057 /uni00000058 /uni00000059 /uni0000005a 121 /uni0000005c /uni0000005d ] /Type /Encoding >> /FirstChar 0 /FontBBox [ 0 -141 997 856 ] /FontDescriptor 2550 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /KVPIPT+SimHei /Subtype /Type3 /Type /Font /Widths 2551 0 R >> +endobj +2225 0 obj +<< /CreationDate (D:20250313101904+08'00') /Creator (Matplotlib v3.5.2, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.5.2) >> +endobj +2226 0 obj +<< /BaseFont /EVICAO+DejaVuSans-Bold /CharProcs 2552 0 R /Encoding << /Differences [ 32 /space 46 /period 48 /zero /one /two /three /four /five /six /seven /eight /nine 65 /A 67 /C 69 /E 72 /H 77 /M 79 /O /P 83 /S /T 97 /a /b /c 101 /e /f /g /h /i 108 /l /m /n /o /p 114 /r /s /t /u 121 /y ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1070 -416 1976 1175 ] /FontDescriptor 2553 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /EVICAO+DejaVuSans-Bold /Subtype /Type3 /Type /Font /Widths 2554 0 R >> +endobj +2227 0 obj +<< /BaseFont /BMQQDV+DejaVuSans /CharProcs 2555 0 R /Encoding << /Differences [ 45 /hyphen /period 48 /zero /one /two /three 53 /five 55 /seven /eight /nine 68 /D 82 /R /S 86 /V 101 /e 107 /k 112 /p ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1021 -463 1794 1233 ] /FontDescriptor 2556 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BMQQDV+DejaVuSans /Subtype /Type3 /Type /Font /Widths 2557 0 R >> +endobj +2228 0 obj +<< /BBox [ 0 0 72 72 ] /Filter /FlateDecode /Matrix [ 1 0 0 1 0 568.10128 ] /PaintType 1 /PatternType 1 /Resources << /Procsets [ /PDF /Text /ImageB /ImageC /ImageI ] >> /TilingType 1 /Type /Pattern /XStep 72 /YStep 72 /Length 212 >> +stream +x5n0 Dw~Jiz풽d,ޱ|0x}o3'/x?X5[p:!g(:A Pt +g.%c'΅)l:13P C@e?C|I +CK&7byFc]@=Ӈo0DFAKaѻҢ6qJ +endstream +endobj +2229 0 obj +<< /CreationDate (D:20250313100912+08'00') /Creator (Matplotlib v3.5.2, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.5.2) >> +endobj +2230 0 obj +<< /BaseFont /EVICAO+DejaVuSans-Bold /CharProcs 2558 0 R /Encoding << /Differences [ 32 /space 46 /period 48 /zero /one /two /three /four /five /six /seven /eight /nine 65 /A /B /C 69 /E 72 /H 76 /L /M 79 /O /P 83 /S 97 /a 99 /c 101 /e /f /g /h /i 108 /l /m /n /o /p 114 /r /s /t /u 119 /w 121 /y ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1070 -416 1976 1175 ] /FontDescriptor 2559 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /EVICAO+DejaVuSans-Bold /Subtype /Type3 /Type /Font /Widths 2560 0 R >> +endobj +2231 0 obj +<< /BaseFont /BMQQDV+DejaVuSans /CharProcs 2561 0 R /Encoding << /Differences [ 45 /hyphen 48 /zero /one 51 /three 53 /five /six /seven /eight /nine 68 /D 82 /R /S 86 /V 101 /e 107 /k 112 /p ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1021 -463 1794 1233 ] /FontDescriptor 2562 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BMQQDV+DejaVuSans /Subtype /Type3 /Type /Font /Widths 2563 0 R >> +endobj +2232 0 obj +<< /BBox [ 0 0 72 72 ] /Filter /FlateDecode /Matrix [ 1 0 0 1 0 712.5409 ] /PaintType 1 /PatternType 1 /Resources << /Procsets [ /PDF /Text /ImageB /ImageC /ImageI ] >> /TilingType 1 /Type /Pattern /XStep 72 /YStep 72 /Length 212 >> +stream +x5n0 Dw~Jiz풽d,ޱ|0x}o3'/x?X5[p:!g(:A Pt +g.%c'΅)l:13P C@e?C|I +CK&7byFc]@=Ӈo0DFAKaѻҢ6qJ +endstream +endobj +2233 0 obj +<< /CreationDate (D:20250701115712+08'00') /Creator (Matplotlib v3.8.1, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.8.1) >> +endobj +2234 0 obj +<< /BaseFont /EVICAO+DejaVuSans-Bold /CharProcs 2564 0 R /Encoding << /Differences [ 32 /space 46 /period 48 /zero /one /two /three /four /five /six /seven /eight /nine 64 /at /A /B /C 69 /E /F /G 73 /I 77 /M /N 80 /P 84 /T 97 /a /b /c /d /e /f /g /h /i 107 /k /l /m /n /o 113 /q /r /s /t /u 119 /w 121 /y ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1070 -416 1976 1175 ] /FontDescriptor 2565 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /EVICAO+DejaVuSans-Bold /Subtype /Type3 /Type /Font /Widths 2566 0 R >> +endobj +2235 0 obj +<< /BaseFont /BMQQDV+DejaVuSans /CharProcs 2567 0 R /Encoding << /Differences [ 32 /space 45 /hyphen 48 /zero /one /two /three /four /five /six 56 /eight 68 /D 71 /G 80 /P 82 /R /S /T 101 /e 107 /k 111 /o /p ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1021 -463 1794 1233 ] /FontDescriptor 2568 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BMQQDV+DejaVuSans /Subtype /Type3 /Type /Font /Widths 2569 0 R >> +endobj +2236 0 obj +<< /BBox [ 0 0 72 72 ] /Filter /FlateDecode /Matrix [ 1 0 0 1 0 559.03567 ] /PaintType 1 /PatternType 1 /Resources << /Procsets [ /PDF /Text /ImageB /ImageC /ImageI ] >> /TilingType 1 /Type /Pattern /XStep 72 /YStep 72 /Length 173 >> +stream +x%1C! C"+kCtkSa!pw[L3mQk&c|FuwCwԗT3Zp1q: +:F +-iӶ#MGH%4S;?"*InFgtxi^vL d"~{pXJ7 +endstream +endobj +2237 0 obj +<< /CreationDate (D:20250701115946+08'00') /Creator (Matplotlib v3.9.2, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.9.2) >> +endobj +2238 0 obj +<< /BaseFont /EVICAO+DejaVuSans-Bold /CharProcs 2570 0 R /Encoding << /Differences [ 32 /space 40 /parenleft /parenright 44 /comma /hyphen /period 48 /zero /one /two 52 /four 54 /six 56 /eight 64 /at /A 67 /C /D /E 77 /M 80 /P 83 /S /T 97 /a /b /c /d /e /f /g /h /i 107 /k /l /m /n /o /p 114 /r /s /t /u /v /w 121 /y ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1070 -416 1976 1175 ] /FontDescriptor 2571 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /EVICAO+DejaVuSans-Bold /Subtype /Type3 /Type /Font /Widths 2572 0 R >> +endobj +2239 0 obj +<< /BBox [ -1070 -416 1976 1175 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 75 >> +stream +xE 0;S0BϰPCAmۓ !Ւ'ŃK!~(份Şp;A7]l +endstream +endobj +2240 0 obj +<< /Ascent 599 /CapHeight 599 /CharSet (/C/D/F/G/H/I/P/R/S/U/V/a/b/c/d/e/eight/f/g/h/hyphen/i/k/l/m/n/numbersign/o/one/p/parenleft/parenright/r/s/six/t/three/u/v/w/y/zero) /Descent -222 /Flags 4 /FontBBox [ -491 -316 834 1016 ] /FontFile 2573 0 R /FontName /IUCHJS+LMMono10-Italic /ItalicAngle -14 /StemV 69 /Type /FontDescriptor /XHeight 431 >> +endobj +2241 0 obj +[ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] +endobj +2242 0 obj +<< /Ascent 440 /CapHeight 670 /CharSet (/greaterorequalslant/lessorequalslant) /Descent 0 /Flags 4 /FontBBox [ -53 -275 2238 861 ] /FontFile 2574 0 R /FontName /WOTSKV+txsym /ItalicAngle 0 /StemV 74 /Type /FontDescriptor /XHeight 451 >> +endobj +2243 0 obj +<< /Filter /FlateDecode /Length 1230 >> +stream +xmVn8+C&i@3Ikb3Yll~U]t&Y䐠UGUw?j׺~E.O<ʫ÷~߆q}29ߎ˗*>wz:}j<{x\=/xU~}|>}_M`$诼?㷪Zq8̮ Li=OvFUXr3wc܎ObQ]^Wevc\]~6;v/4zvsSӔqaO5ܿr!ve?yj,Ӗ!O}fTL059@ЋG7РJ* r4 -h, C  9*&0U@/ +1xȑ,POhPbYt}Z6u}^?i3ZMc} +5g qЩ9 `'(Ӗ[#6[iNHS[f2­^wb+vF=a]~?Z7jbqjc;Ldz D-CoڐdόЃPP-?X=aQ/^IB\u1lI^efܗ]s6-!,!ܬpkffy2H9%XoXC\{k9?Ζ<Ŀ4Zփ#π]t){8W 9OywhgE{J,w׀79>CVs9RˣEu;6gd{E;=M~< g:=miw帓Mُw,#m6.z¡ҁ\r9E7x(A(9O)P7R|eAc/U,l\EbKsܩGC7b3T-28CJ+G.&Rv[r&7?sᶵp!JVyG~ ( +endstream +endobj +2244 0 obj +[ 666 666 347 288 666 666 666 666 666 ] +endobj +2245 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni8BA1/uni8BA4/uni8BA8/uni8BA9/uni8BAD/uni8BAE/uni8BB8/uni8BBA/uni8BC4/uni8BC6/uni8BCD/uni8BD5/uni8BDD/uni8BE5/uni8BEF/uni8BF4/uni8BF7) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2575 0 R /FontName /ZADGTD+gbsnu8b /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2246 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o !yiCҪnR|3 ͐{w;wԧS -aKhi{hg2?DscP_Y\<=ԇ8v?OC4'4h[8s73T5T h,በ\Zm#5UrĿV2ȳ]E:m5U> +endobj +2249 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1o !I yiCڪnR|3 ɐ{w'o "p3v{8oN&Beω~8'cKoP_H<\_bDРmhȅ&~2ۦJ_p4GcI 4-Ԃؽh+q^SPxh.> +endobj +2252 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o! !tʀni醶Qr!2`ϟlֿ2Y(c 셖#\i ++|py{f +<ܗLsc1P".Y} ԗxv? kJ734RæO;T-utEOKD0Zw0Sbmu|N5G]*\ywHq֦mXHR?iG +endstream +endobj +2253 0 obj +[ 1000 0 1000 1000 1000 1000 0 0 0 0 1000 1000 1000 0 0 1000 0 1000 0 1000 1000 1000 1000 1000 1000 0 0 1000 0 0 0 1000 0 1000 0 0 1000 1000 1000 1000 1000 1000 0 0 0 0 0 0 1000 0 1000 0 1000 1000 1000 1000 0 0 1000 0 1000 0 1000 0 0 1000 1000 0 0 1000 0 0 0 1000 1000 1000 1000 0 0 0 0 1000 0 1000 0 0 0 1000 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 1000 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 1000 0 0 1000 1000 0 1000 1000 0 1000 0 1000 1000 0 0 0 0 0 0 1000 0 0 1000 0 1000 0 1000 1000 1000 1000 0 1000 1000 1000 1000 0 1000 1000 0 0 0 1000 1000 1000 0 1000 1000 1000 0 1000 1000 0 1000 0 0 1000 0 0 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 1000 0 0 0 0 0 1000 1000 1000 0 0 0 0 0 0 0 1000 1000 0 1000 1000 1000 1000 1000 1000 0 0 1000 0 0 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 0 1000 0 1000 0 1000 0 1000 1000 ] +endobj +2254 0 obj +<< /Ascent 849 /CapHeight 849 /CharSet (/uni793A/uni79CD/uni79D1/uni79F0) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2578 0 R /FontName /JRIDWR+gbsnu79 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2255 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1k0!KKCR7UFY+ 'C}wNw-0xvBsX4znmZ_5D 95O$wl~ K 1K7- O3Tƶ5uTi h,ᑠ>Zm%k>=eg{dgujxLυ U?4i_ +endstream +endobj +2256 0 obj +[ 1000 1000 1000 0 1000 0 1000 1000 0 0 0 0 1000 0 1000 1000 0 0 0 0 0 0 0 0 0 1000 0 0 1000 1000 0 0 1000 1000 1000 1000 1000 1000 1000 0 1000 0 0 1000 0 1000 1000 0 0 0 0 1000 0 1000 0 0 0 0 0 0 0 1000 1000 0 1000 0 0 0 0 0 1000 1000 0 0 1000 1000 0 0 0 0 1000 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 1000 1000 1000 0 1000 1000 0 1000 1000 0 1000 0 0 1000 0 0 1000 0 1000 0 1000 0 0 0 1000 1000 0 0 1000 0 0 1000 0 0 0 0 0 0 1000 0 0 0 1000 1000 0 1000 1000 0 1000 0 1000 0 1000 0 1000 1000 ] +endobj +2257 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni4F1A/uni4F20/uni4F2F/uni4F30/uni4F34/uni4F3C/uni4F4D/uni4F53/uni4F55/uni4F60/uni4F7F/uni4F8B/uni4FE1/uni4FEE/uni4FFA) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2579 0 R /FontName /EQCFJX+gbsnu4f /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2258 0 obj +<< /Filter /FlateDecode /Length 204 >> +stream +x]1o! !ReDtC(J] R 75C,ކC:K#eNhX•8Wv6 }4#qr~_đpg\SLѡȗB&} +oI_t$cI Ou=ԃ=iqϩZ v)ڴT I1U?-i +endstream +endobj +2259 0 obj +[ 1000 1000 0 0 1000 1000 1000 0 1000 0 1000 1000 1000 1000 0 0 1000 1000 0 0 0 1000 1000 0 1000 0 1000 0 1000 0 1000 0 1000 0 1000 1000 0 0 0 0 0 1000 0 0 1000 0 0 0 0 0 0 1000 1000 1000 1000 1000 0 1000 0 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 0 1000 1000 1000 0 1000 0 1000 0 0 1000 0 0 1000 1000 0 0 1000 1000 0 1000 0 0 0 0 1000 1000 0 1000 1000 0 0 0 1000 1000 0 0 0 1000 1000 0 1000 0 1000 0 1000 0 1000 0 0 1000 0 0 1000 0 0 0 1000 0 1000 0 0 1000 0 0 1000 0 1000 1000 1000 1000 1000 1000 0 1000 0 1000 1000 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 1000 0 0 0 1000 1000 1000 0 0 0 0 1000 0 0 0 1000 1000 1000 1000 0 0 0 0 0 1000 1000 0 1000 0 1000 1000 1000 1000 0 1000 0 1000 0 0 1000 0 1000 1000 1000 0 0 1000 1000 1000 0 1000 0 1000 0 0 0 0 1000 0 1000 ] +endobj +2260 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni767D/uni7684/uni76AE/uni76C8/uni76D6/uni76EE/uni76F8) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2580 0 R /FontName /TBEMLG+gbsnu76 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2261 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1o !ɐ,KHVu#u%p_@N wݻSG>A}K=% +yWv2*}N4u<h 9_{Gyx?&m GC.t6LmM6Uڭ9Kbx$iOE[𚪏rC+p."Y*> +endobj +2264 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1o !e@^ZE򐶪+茇r2dޝz>: [)a氈%\i۴jPs!@k,Iԗ8#6co4'4h[8rf"mk궩nX#A7M }: v/J\T}8{&Z vT !iY +endstream +endobj +2265 0 obj +[ 1000 1000 1000 1000 1000 1000 0 1000 1000 0 1000 0 1000 0 0 1000 1000 0 0 0 0 0 1000 0 0 0 1000 0 0 0 0 0 0 0 1000 1000 0 0 0 0 0 0 0 1000 1000 0 0 0 1000 1000 1000 0 0 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 0 1000 ] +endobj +2266 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni5F02/uni5F0F/uni5F15/uni5F1F/uni5F20/uni5F39/uni5F53/uni5F62/uni5F85/uni5F88/uni5F8B/uni5F97/uni5FC3/uni5FC5/uni5FD9) /Descent -88 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2582 0 R /FontName /JBKBDB+gbsnu5f /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2267 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o! !R)UFVJr!2`ϟl62Y)vBK\4.ؼZIPKy`5ԥK;v%$/?ҍf}G0U}KwM:l%Kbx"OIۈNG_*\yHq֦mXHR/Ri +endstream +endobj +2268 0 obj +[ 1000 1000 1000 0 0 0 1000 0 1000 1000 0 0 0 1000 0 1000 0 1000 0 1000 0 1000 1000 0 0 1000 0 0 0 1000 1000 0 0 0 0 1000 1000 1000 0 1000 1000 0 0 1000 0 1000 0 1000 0 0 0 0 0 0 0 1000 1000 0 1000 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 1000 1000 0 1000 1000 1000 1000 0 0 0 0 1000 0 0 0 1000 1000 0 1000 0 1000 0 0 1000 1000 0 1000 1000 0 0 1000 1000 0 1000 0 0 0 1000 0 1000 0 1000 1000 0 0 0 1000 1000 1000 0 1000 1000 0 1000 1000 1000 1000 1000 1000 0 0 0 1000 0 1000 0 0 1000 0 1000 1000 1000 0 0 1000 0 0 0 0 1000 0 0 0 0 0 0 1000 0 1000 0 0 1000 1000 0 0 0 0 0 0 1000 0 1000 0 0 0 0 1000 1000 0 0 0 0 0 1000 1000 1000 1000 0 0 1000 0 0 1000 1000 0 1000 1000 1000 1000 0 0 0 1000 1000 1000 1000 ] +endobj +2269 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni5B50/uni5B57/uni5B58/uni5B59/uni5B5D/uni5B66/uni5B69/uni5B83/uni5B89/uni5B8B/uni5B8C/uni5B9A/uni5BA2/uni5BA4/uni5BB6/uni5BBE/uni5BCC/uni5BF9/uni5BFC) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2583 0 R /FontName /ADGMOQ+gbsnu5b /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2270 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1k0!)d^t6$_I2{w;wԧS -aKhi{hg2?DscP_Y\<=ԇ8v?OC4'4h[8s73T5T h,በ\Zm#5UrĿV2ȳ]E:m5U> +endobj +2273 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]? ſ{CErJ.t+'B䐡߾lԏ;P -aK۴jPnK1@k,.In؝ [ c5tЧ_f&k꾩a-XA7M}:u v/F\T}l=eg{dgujxLυ U9iG +endstream +endobj +2274 0 obj +[ 1000 1000 1000 0 0 1000 1000 1000 1000 0 1000 1000 0 0 0 1000 0 1000 1000 0 1000 1000 0 0 0 0 1000 0 1000 0 1000 0 0 0 0 1000 1000 0 0 1000 0 0 0 0 0 1000 1000 1000 1000 1000 0 1000 0 0 0 1000 1000 1000 0 1000 1000 1000 1000 0 0 1000 1000 1000 1000 0 0 0 1000 0 0 1000 0 0 0 0 0 0 0 1000 0 0 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 0 0 1000 0 0 1000 0 0 1000 0 0 1000 0 1000 1000 1000 0 0 0 1000 0 0 0 0 1000 1000 0 0 0 0 0 0 1000 1000 1000 0 1000 1000 1000 1000 0 1000 1000 0 0 0 1000 1000 1000 1000 0 1000 1000 0 0 1000 0 0 1000 1000 0 0 0 0 1000 0 0 0 1000 0 0 0 1000 0 1000 1000 1000 0 1000 0 0 1000 0 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 0 1000 0 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 0 0 1000 0 0 1000 1000 0 1000 1000 1000 1000 1000 0 0 1000 1000 1000 1000 0 1000 0 1000 1000 0 1000 1000 0 0 0 0 1000 1000 1000 1000 ] +endobj +2275 0 obj +<< /Ascent 846 /CapHeight 846 /CharSet (/uni6700/uni6708/uni6709/uni670D/uni671D/uni672A/uni672C/uni6740/uni6750/uni675F/uni6761/uni6765/uni6784/uni679C/uni67D0) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2585 0 R /FontName /HDMTOF+gbsnu67 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2276 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1o !ɐ,KHVu#u%p_@N wݻSG>A}K=% +yWv2*}N4u<h 9_{Gyp?&m GC.t6LmM6Uڭ9Kbx$iOE[rC+p."Y*> +endobj +2279 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1o !‰ yiCڪnR|3 ɐ{w'o "p3v{8oN&Beω~8'cKoP_H<\_bDРmhȅ&~2ۦJ_p4GcI 4-Ԃؽh+q^SPxh.> +endobj +2282 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1 {CEzC'N2W5WV +N䐡:`ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{%;M \hLmM6Uڭ9Kbx$iM[3 +\yHvVZH P-i +endstream +endobj +2283 0 obj +[ 1000 1000 1000 1000 0 0 1000 0 1000 0 1000 1000 1000 1000 0 1000 1000 0 1000 1000 1000 0 1000 1000 1000 1000 0 0 0 0 1000 1000 0 1000 0 1000 0 1000 0 0 1000 0 0 1000 0 0 1000 1000 0 0 0 1000 1000 0 0 0 0 1000 0 0 1000 1000 0 0 0 1000 0 0 0 0 0 1000 0 0 1000 0 0 1000 1000 0 0 1000 0 1000 0 0 1000 0 1000 1000 1000 0 0 0 0 0 1000 0 1000 1000 1000 1000 1000 0 1000 1000 0 1000 1000 1000 1000 1000 1000 0 0 1000 1000 0 0 1000 0 0 1000 0 0 1000 0 0 0 0 0 0 1000 1000 0 0 0 1000 1000 1000 1000 0 0 0 1000 1000 0 0 0 0 1000 0 0 0 0 1000 0 1000 1000 0 0 0 1000 1000 0 1000 1000 0 0 1000 0 1000 0 0 0 0 1000 1000 0 1000 0 0 1000 0 1000 0 0 0 1000 0 1000 0 1000 ] +endobj +2284 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni9879/uni987B/uni9884/uni9898/uni989D/uni98D8/uni98DE/uni98DF) /Descent -80 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2588 0 R /FontName /OSLXRH+gbsnu98 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2285 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1k0!ɔ tU'qJɐAwݻSG>A}K=% +yWv2*}N4u<h 9_{Gyx?&m GC.t6LmM6Uڭ9Kbx$iOE[𚪏rC+p."Y*> +endobj +2288 0 obj +<< /Filter /FlateDecode /Length 204 >> +stream +x]1o! !4+UFVJwBfȀ<[sPgn1Z*p)0բm*p_2=@]dcM/P_IOp83)h&:xK>LP۷Խna=-:hN9u_pޭ"Yc!)Jui8 +endstream +endobj +2289 0 obj +[ 1000 1000 1000 0 1000 0 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 ] +endobj +2290 0 obj +<< /Ascent 0 /CapHeight 842 /CharSet (/uni4E00/uni4E07/uni4E09/uni4E0A/uni4E0B/uni4E0D/uni4E0E/uni4E16/uni4E24/uni4E27/uni4E2A/uni4E2D/uni4E3A/uni4E3B/uni4E3D/uni4E3E/uni4E48/uni4E49/uni4E4B/uni4E4E/uni4E58/uni4E5F/uni4E71/uni4E86/uni4E8B/uni4E8C/uni4E8E/uni4E91/uni4E9A/uni4E9B/uni4EA1/uni4EAE/uni4EB2/uni4EBA/uni4EC0/uni4EC5/uni4ECA/uni4ED6/uni4EE5/uni4EEC/uni4EFB) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2590 0 R /FontName /IRWFYG+gbsnu4e /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2291 0 obj +<< /Filter /FlateDecode /Length 204 >> +stream +x]10 .wB!DM%Qa`}:K=% 6d"Tǜhx9_Gy~O_bDРmhȅ&DPmS/8$GnphA޴ zO垉V2ȫ]D:m5U> +endobj +2294 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1k0!KKCR7UFY+ 'C}wNw-0xvBsX4znmZ_5D 95O$wl~ K !K7- O3Tƶ5uTi h,ᑠ>Zm%k>=eg{dgujxLυ U?:i_ +endstream +endobj +2295 0 obj +[ 1000 1000 0 0 1000 0 1000 1000 1000 1000 0 0 0 1000 1000 1000 0 0 0 1000 0 0 1000 0 0 0 0 0 1000 0 1000 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 1000 0 0 1000 0 1000 0 0 0 0 0 1000 1000 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 1000 0 0 1000 0 0 1000 0 1000 0 0 1000 0 1000 1000 1000 0 0 1000 0 0 0 1000 0 0 0 0 0 0 0 0 0 1000 1000 0 1000 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 1000 0 1000 0 0 0 1000 1000 0 1000 0 0 0 1000 0 0 0 0 0 0 0 1000 0 0 1000 0 0 0 0 0 0 0 1000 0 1000 0 1000 0 0 1000 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 1000 0 1000 1000 1000 1000 1000 0 0 0 0 0 1000 ] +endobj +2296 0 obj +<< /Ascent 831 /CapHeight 0 /CharSet (/uni662F/uni663E/uni664B/uni6668/uni6682/uni66F4/uni66FE) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2592 0 R /FontName /DQEEXO+gbsnu66 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2297 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o ! yiCҪnR|3 ͐{w?ԧ;P -aK78o&Bexx,$y`M{q$'~طm4'4:8sW3T5T h,በ>;m#nknrĿV2ȳ]E:m5U> +endobj +2300 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]? ſ{CE rJ.t+'B䐡߾lԏ;P -aK۴jPnK1@k,.In؝ [ c5tЧ_f&k꾩a-XA7M}:u v/F\T}l=eg{dgujxLυ UiJ +endstream +endobj +2301 0 obj +[ 1000 0 0 0 1000 1000 1000 1000 1000 0 1000 0 1000 0 1000 0 0 0 0 0 0 0 1000 1000 0 0 0 1000 1000 0 0 0 0 1000 0 0 0 1000 0 0 1000 0 1000 0 1000 0 1000 0 1000 1000 0 0 0 1000 1000 0 1000 0 0 0 0 1000 1000 0 0 1000 0 0 1000 0 0 0 1000 1000 0 0 0 1000 1000 1000 1000 0 0 1000 0 0 0 0 0 1000 1000 0 1000 0 1000 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 1000 1000 0 1000 1000 0 0 0 1000 0 1000 1000 1000 1000 0 0 0 0 0 0 0 1000 1000 1000 1000 0 0 0 1000 0 0 0 0 1000 1000 0 1000 0 1000 0 0 0 0 1000 0 1000 0 0 0 0 1000 0 1000 1000 0 0 0 0 0 0 1000 1000 0 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 0 1000 1000 0 1000 1000 1000 ] +endobj +2302 0 obj +<< /Ascent 846 /CapHeight 0 /CharSet (/uni8F7B/uni8F91/uni8F93/uni8FB9/uni8FBE/uni8FC7/uni8FCE/uni8FD4/uni8FD8/uni8FD9/uni8FDB/uni8FDE/uni8FF0/uni8FFD) /Descent -85 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2594 0 R /FontName /CGAWZC+gbsnu8f /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2303 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o! !)UFVJr!2`ϟl62Y)vBK\4.ؼZIPKy`5ԥK;v%$/?ҍf}G0U}KwM:l%Kbx"OIۈNG_*\yHq֦mXHR4i +endstream +endobj +2304 0 obj +[ 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 0 0 0 1000 0 0 0 0 1000 1000 0 1000 0 0 0 0 1000 1000 0 0 0 0 1000 0 0 1000 0 0 0 1000 1000 0 0 1000 1000 0 1000 1000 0 1000 1000 0 0 0 0 0 1000 0 1000 1000 0 1000 1000 1000 0 0 1000 1000 0 1000 1000 1000 1000 1000 0 0 1000 0 1000 1000 1000 0 1000 1000 1000 1000 0 1000 1000 0 1000 0 0 1000 0 0 0 1000 1000 1000 0 0 0 1000 ] +endobj +2305 0 obj +<< /Ascent 0 /CapHeight 843 /CharSet (/uni5904/uni5907/uni590D/uni5916/uni591A/uni5927/uni5929/uni592A/uni592B/uni5934/uni5965/uni5973/uni5979/uni597D/uni5982/uni5987/uni59BB/uni59D3) /Descent -86 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2595 0 R /FontName /EJBYAZ+gbsnu59 /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +2306 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1k0! d/-iK@WE:A|gyȿ$ tHzݽ;}tԷS aK=i}h'2DSCP?Yܱ7/q$Gl./1h"Nhжp4Bg?DPmS/8$GntjA^p,L<A"i3=C,T=iY +endstream +endobj +2307 0 obj +[ 1000 0 0 1000 0 0 0 0 0 1000 0 1000 0 0 0 0 1000 1000 1000 0 0 1000 1000 0 1000 0 0 1000 0 0 0 0 1000 1000 0 1000 0 1000 1000 1000 0 1000 1000 1000 0 1000 0 0 1000 0 0 1000 1000 1000 1000 0 1000 0 0 0 0 1000 1000 0 1000 0 0 1000 1000 1000 0 1000 0 0 1000 1000 0 1000 0 0 1000 1000 1000 1000 1000 0 1000 0 0 0 0 0 1000 0 1000 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 1000 0 1000 0 1000 1000 0 0 0 1000 0 0 0 1000 1000 1000 1000 0 1000 1000 1000 0 1000 0 0 1000 0 0 0 0 1000 1000 0 0 1000 1000 0 1000 0 0 0 0 1000 0 0 0 0 1000 1000 1000 0 0 1000 1000 1000 1000 0 0 1000 1000 0 0 1000 0 0 0 0 0 0 1000 0 1000 0 0 1000 0 0 0 0 0 0 0 1000 0 0 0 1000 1000 0 0 0 0 1000 1000 1000 1000 ] +endobj +2308 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni5546/uni55B7) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2596 0 R /FontName /XMSPND+gbsnu55 /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +2309 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1k0!)x^t6$_I2{w?ԧ;P -aK78o&Bexx,$y`M{q$'~طm4'4:8sW3T5T h,በ>;m#nknrĿV2ȳ]E:m5U> +endobj +2312 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1 {CEzSN2W5WV +N䐡:`ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{%;M \hLmM6Uڭ9Kbx$iM[3 +\yHvVZH P1i +endstream +endobj +2313 0 obj +[ 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 0 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 0 1000 1000 0 0 0 1000 0 1000 0 0 1000 0 0 1000 1000 1000 1000 1000 0 0 0 0 0 0 0 0 0 1000 0 0 1000 1000 0 0 0 0 1000 ] +endobj +2314 0 obj +<< /Ascent 838 /CapHeight 0 /CharSet (/uni7F18/uni7F20/uni7F55/uni7F6E/uni7F8A/uni7F8E/uni7FA4/uni7FC1) /Descent -86 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2598 0 R /FontName /YOFPCH+gbsnu7f /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +2315 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o! !% UFVJr!2`ϟl62Y)vBK\4.ؼZIPKy`5ԥK;v%$/?ҍf}G0U}KwM:l%Kbx"OIۈNG_*\yHq֦mXHR2i +endstream +endobj +2316 0 obj +[ 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 1000 0 1000 0 0 0 0 0 0 0 1000 0 1000 1000 0 0 0 0 0 0 0 0 0 0 1000 1000 0 0 1000 1000 0 1000 1000 0 1000 0 0 0 0 1000 0 1000 1000 0 0 0 0 0 1000 1000 1000 0 0 0 1000 0 0 1000 1000 0 1000 0 0 0 0 1000 0 0 0 0 1000 0 0 1000 0 0 0 0 0 0 0 0 1000 0 1000 0 1000 0 0 0 0 0 1000 0 0 0 0 0 1000 0 0 1000 1000 1000 0 1000 0 0 1000 0 0 1000 0 0 0 0 0 0 0 1000 1000 0 1000 0 0 0 0 0 1000 1000 0 0 1000 1000 0 1000 0 1000 ] +endobj +2317 0 obj +<< /Ascent 839 /CapHeight 0 /CharSet (/uni771F/uni7740/uni775B/uni77E5) /Descent -95 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2599 0 R /FontName /KAIQOE+gbsnu77 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2318 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o !yiCҪnR|3 ͐{w?ԧ;P -aK78o&Bexx,$y`M{q$'~طm4'4:8sW3T5T h,በ>;m#nknrĿV2ȳ]E:m5U> +endobj +2321 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1k0! YKKCR7UFY+ 'C}wNw-0xvBsX4znmZ_5D 95O$wl~ K !K7- O3Tƶ5uTi h,ᑠ>Zm%k>=eg{dgujxLυ U?iV +endstream +endobj +2322 0 obj +[ 1000 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 0 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 ] +endobj +2323 0 obj +<< /Ascent 843 /CapHeight 0 /CharSet (/uni6015/uni601D/uni6025/uni6027/uni6089/uni60A8/uni60C5/uni60F3) /Descent -86 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2601 0 R /FontName /NTBPNH+gbsnu60 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2324 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o! !tȄni醶Qr!2`ϟlֿ2Y(c 셖#\i ++|py{f +<ܗLsc1P".Y} ԗxv? kJ734RæO;T-utEOKD0Zw0Sbmu|N5G]*\ywHq֦mXHRһiA +endstream +endobj +2325 0 obj +[ 1000 1000 0 0 1000 0 1000 1000 1000 0 0 1000 1000 0 0 0 1000 1000 1000 1000 1000 1000 1000 0 0 0 1000 0 0 0 0 0 1000 0 0 0 0 0 1000 1000 0 0 1000 0 1000 1000 1000 0 0 0 0 0 0 0 1000 0 1000 0 0 1000 0 1000 0 0 1000 0 0 0 1000 1000 0 0 1000 0 0 0 0 1000 1000 1000 0 0 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 0 0 1000 0 0 1000 0 1000 1000 1000 1000 1000 1000 0 1000 0 0 0 1000 1000 0 0 0 0 1000 0 0 1000 1000 0 0 0 0 1000 0 1000 0 1000 0 0 0 1000 1000 0 1000 0 1000 1000 0 0 1000 0 0 1000 0 1000 0 0 1000 1000 1000 0 1000 0 1000 1000 0 1000 0 0 0 1000 0 0 1000 1000 0 0 0 0 0 0 0 0 1000 1000 0 0 0 1000 1000 0 0 0 0 0 1000 0 0 0 1000 0 0 1000 0 1000 0 1000 1000 0 1000 1000 0 0 0 0 0 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 0 0 1000 ] +endobj +2326 0 obj +<< /Ascent 0 /CapHeight 816 /CharSet (/uni5C04/uni5C06/uni5C0F/uni5C11/uni5C1D/uni5C31/uni5C3D/uni5C42/uni5C48/uni5C71/uni5C9B/uni5CE6/uni5CFB) /Descent -56 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2602 0 R /FontName /DCHGGY+gbsnu5c /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2327 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]10 uR8D֐U$Dn:/ +C$ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{%;M \hLmM6Uڭ9Kbx$iM[3 +\yHvVZH P*i +endstream +endobj +2328 0 obj +[ 1000 0 1000 0 0 1000 1000 0 0 0 0 1000 0 1000 0 0 1000 1000 1000 0 1000 0 1000 0 1000 1000 0 0 0 0 1000 0 1000 1000 0 1000 0 0 0 0 1000 0 0 0 0 1000 0 0 1000 0 0 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 0 1000 0 0 1000 1000 1000 1000 0 0 1000 1000 1000 1000 0 0 0 1000 0 0 0 1000 0 0 0 0 1000 0 1000 1000 0 1000 0 1000 1000 0 0 0 0 0 0 0 1000 1000 0 1000 0 0 0 0 0 0 0 1000 1000 0 0 0 0 1000 0 1000 1000 0 0 0 0 0 1000 0 0 0 1000 1000 0 0 1000 1000 0 0 1000 0 1000 1000 1000 1000 1000 1000 1000 0 0 0 0 0 1000 1000 0 0 0 0 0 1000 0 1000 1000 1000 0 0 0 1000 0 1000 0 1000 0 1000 1000 0 0 0 0 1000 0 1000 0 1000 0 0 1000 0 0 0 0 0 0 1000 0 0 0 0 0 0 1000 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 1000 0 0 1000 1000 1000 0 1000 0 1000 0 0 1000 0 0 1000 0 0 0 0 0 0 0 0 0 0 1000 ] +endobj +2329 0 obj +<< /Ascent 844 /CapHeight 833 /CharSet (/uni513F/uni5145/uni5148/uni5149/uni514B/uni514D/uni5165/uni5168/uni516C/uni5173/uni5176/uni5185/uni518D/uni519B/uni51B2/uni51B5/uni51C6/uni51CF/uni51DB/uni51E0/uni51FA/uni51FB) /Descent -71 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2603 0 R /FontName /MKIIUU+gbsnu51 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2330 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1k0!.d^t6$_I2{w?ԧ;P -aKi{hg2<> +endobj +2333 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1k0!f^t6$_I2{w?ԧ;P -aK78o&Bexx,$y`M{q$'~طm4'4:8sW3T5T h,በ>;m#nknrĿV2ȳ]E:m5U> +endobj +2336 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1k0!^t6$_I2{w?ԧ;P -aKi{hg2<> +endobj +2339 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1k0! d/-iK@WE:A|gyȿ$ tHzݽ;}tԷS aK=i}h'2DSCP?Yܱ7/q$Gl.쏇/1h"Nhжp4Bg?DPmS/8$GntjA^x(L<A"i3=C,T=iY +endstream +endobj +2340 0 obj +[ 1000 1000 1000 0 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 0 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 0 0 1000 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 ] +endobj +2341 0 obj +<< /Ascent 0 /CapHeight 846 /CharSet (/uni6536/uni6539/uni653E/uni6548/uni6587/uni65A9/uni65AD/uni65B0/uni65B9/uni65E0/uni65E2/uni65E5/uni65E9/uni65F6) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2607 0 R /FontName /CPUEBF+gbsnu65 /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +2342 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1k0! $ tU'qJɐAwݻSG>A}K=% +yWv2*}N4u<h 9_{Gyx?&m GC.t6LmM6Uڭ9Kbx$iOE[𚪏rC+p."Y*> +endobj +2345 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1k0!ɔ tU'qJɐAwݻSG>A}K=% +yWv2*}N4u<h 9_{Gyp?&m GC.t6LmM6Uڭ9Kbx$iOE[rC+p."Y*> +endobj +2348 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]?0 ſ{CqfQppk+p Mڡ$ԏ;P -aK۴jPnK1@k,.In؝ [ c5tЧ_f&k꾩a-XA7M}:u v/F\T}l=eg{dgujxLυ UwiD +endstream +endobj +2349 0 obj +[ 1000 1000 1000 1000 0 0 1000 1000 1000 0 1000 0 0 1000 1000 0 0 1000 1000 0 0 0 1000 1000 1000 1000 1000 1000 0 1000 0 0 1000 0 0 0 1000 0 0 0 1000 1000 0 1000 0 1000 1000 0 1000 0 0 1000 0 0 1000 1000 1000 1000 1000 1000 0 1000 0 1000 1000 1000 1000 1000 0 0 0 0 0 0 1000 0 1000 1000 0 0 1000 1000 0 0 1000 0 1000 0 0 0 0 0 1000 0 1000 0 0 1000 0 0 0 1000 0 1000 0 1000 1000 0 0 0 0 1000 0 0 1000 0 0 0 0 0 0 0 0 0 0 1000 0 1000 0 1000 1000 0 0 0 0 0 1000 0 0 0 0 0 0 0 1000 0 0 1000 0 0 0 0 0 0 0 1000 0 1000 1000 1000 1000 1000 1000 1000 0 0 0 0 1000 1000 1000 1000 1000 1000 0 0 0 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 1000 1000 0 0 0 1000 0 0 0 1000 ] +endobj +2350 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni5E01/uni5E03/uni5E08/uni5E38/uni5E72/uni5E73/uni5E74/uni5E76/uni5E7F/uni5E94/uni5E95/uni5EA6/uni5EB7) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2610 0 R /FontName /UIFGUN+gbsnu5e /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +2351 0 obj +<< /Filter /FlateDecode /Length 204 >> +stream +x]10 uR8D֐U$Dn:/ +C$ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{?&m GC.t4d&ضn*~%1<tӴЇC bmxO{*L<A^"i3C,T=-i +endstream +endobj +2352 0 obj +[ 1000 1000 1000 0 1000 1000 0 1000 0 0 0 1000 0 0 1000 1000 1000 0 0 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 0 0 0 0 0 0 0 0 1000 1000 0 0 0 0 0 1000 1000 0 0 1000 0 0 0 0 0 1000 1000 0 0 1000 1000 1000 0 0 0 0 1000 0 1000 1000 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 1000 1000 0 0 0 0 0 1000 0 0 1000 0 0 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 1000 1000 0 1000 0 1000 0 1000 1000 1000 1000 0 1000 1000 0 0 0 1000 0 1000 1000 0 0 1000 1000 0 0 0 1000 1000 1000 0 1000 1000 1000 1000 1000 0 1000 1000 0 1000 0 1000 1000 1000 0 0 0 0 1000 1000 1000 0 0 0 0 0 1000 0 0 0 0 0 1000 0 1000 1000 1000 ] +endobj +2353 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni706B/uni706D/uni708E/uni70B9) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2611 0 R /FontName /HYJUHA+gbsnu70 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2354 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o! !tɂni醶Qr!2`ϟlֿ2Y(c 셖#\i ++|py{f +<ܗLsc1P".Y} ԗxv? kJ734RæO;T-utEOKD0Zw0Sbmu|N5G]*\ywHq֦mXHR}iD +endstream +endobj +2355 0 obj +[ 1000 1000 1000 0 1000 1000 0 0 0 0 1000 1000 0 1000 0 0 0 1000 0 1000 1000 1000 0 0 0 0 1000 0 0 0 1000 1000 0 0 0 1000 0 0 0 1000 0 1000 1000 1000 0 0 1000 0 0 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 1000 1000 1000 1000 0 1000 0 1000 0 0 0 1000 1000 1000 ] +endobj +2356 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni7387/uni739B/uni73A9/uni73B0/uni73CA/uni73CD) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2612 0 R /FontName /BOVEKN+gbsnu73 /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +2357 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1o !I,KHVu#u%p_@N wݻSG>A}K=% +yWv2*}N4u<h 9_{Gyx?&m GC.t6LmM6Uڭ9Kbx$iOE[𚪏rC+p."Y*> +endobj +2360 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]? ſ{CErJ.t+'B䐡߾lԏ;P -aK۴jPnK1@k,.In؝ [ c5tЧ_f&k꾩a-XA7M}:u v/F\T}l=eg{dgujxLυ UٽiM +endstream +endobj +2361 0 obj +[ 1000 1000 1000 1000 0 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 0 1000 0 0 1000 0 0 0 0 0 1000 0 0 1000 0 1000 0 1000 0 0 0 1000 0 0 0 0 0 0 0 0 1000 0 1000 0 0 0 0 1000 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 1000 1000 1000 0 1000 1000 1000 0 0 0 0 1000 1000 0 0 1000 1000 1000 0 0 1000 0 1000 0 0 0 1000 0 1000 1000 0 1000 1000 1000 0 1000 1000 0 0 0 0 1000 1000 1000 0 0 1000 1000 0 1000 0 1000 0 0 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 0 0 1000 1000 1000 0 0 0 1000 1000 0 0 1000 0 0 1000 0 0 1000 1000 0 1000 1000 1000 1000 1000 1000 ] +endobj +2362 0 obj +<< /Ascent 837 /CapHeight 0 /CharSet (/uni9002/uni9009/uni9014/uni901A/uni9020/uni903B/uni9053/uni9063/uni907F/uni90A3/uni90E8/uni90FD) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2614 0 R /FontName /SAVLRX+gbsnu90 /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +2363 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o! !tni醶Qr!2`ϟlֿ2Y(c 셖#\i ++|py{f +<ܗLsc1P".Y} ԗxv? kJ734RæO;T-utEOKD0Zw0Sbmu|N5G]*\ywHq֦mXHRiJ +endstream +endobj +2364 0 obj +[ 1000 1000 1000 1000 1000 0 0 1000 1000 1000 0 1000 0 1000 1000 1000 1000 0 1000 0 1000 1000 0 0 1000 1000 0 1000 1000 1000 1000 1000 1000 0 0 0 1000 0 0 0 0 0 0 1000 1000 1000 0 0 0 0 0 1000 1000 0 1000 0 0 1000 1000 0 1000 0 0 1000 1000 0 1000 0 0 1000 0 0 0 0 0 1000 0 1000 1000 1000 1000 1000 0 0 0 1000 1000 0 0 1000 0 0 0 0 0 0 1000 1000 0 1000 0 0 1000 0 0 0 0 1000 1000 0 0 0 0 0 1000 1000 0 0 0 0 0 0 0 1000 0 1000 1000 0 1000 1000 0 0 0 0 1000 0 0 1000 0 0 0 0 0 1000 0 1000 0 1000 0 1000 0 1000 0 1000 0 1000 0 0 0 1000 1000 1000 0 0 1000 0 0 0 1000 0 1000 0 1000 1000 1000 1000 0 1000 1000 1000 1000 0 1000 1000 1000 1000 0 0 1000 0 0 1000 0 0 1000 1000 0 1000 0 0 1000 0 0 0 1000 1000 1000 1000 0 1000 0 0 0 1000 0 0 0 1000 1000 1000 0 0 0 1000 1000 0 0 0 1000 1000 1000 0 0 1000 0 1000 0 1000 0 0 0 0 1000 0 0 0 1000 0 0 0 0 1000 ] +endobj +2365 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni6301/uni6307/uni6311/uni6321/uni6355/uni636E/uni63A5/uni63D0) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2615 0 R /FontName /VHMMXQ+gbsnu63 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2366 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1k0!I  tU'qJɐAwݻSG>A}K=% +yWv2*}N4u<h 9_{Gyx?&m GC.t6LmM6Uڭ9Kbx$iOE[𚪏rC+p."Y*> +endobj +2369 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1k0!/-iK@WE:A|gyȿ$ tHzݽ;}tԷS aK=i}h'2DSCP?Yܱ7/q$Gl.쏇/1h"Nhжp4Bg?DPmS/8$GntjA^x(L<A"i3=C,T={i\ +endstream +endobj +2370 0 obj +[ 1000 1000 1000 1000 0 1000 1000 0 1000 1000 0 1000 0 1000 1000 0 0 0 0 0 0 0 1000 0 0 0 1000 0 0 1000 1000 1000 1000 1000 1000 0 0 0 0 1000 1000 1000 0 1000 1000 0 1000 0 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 0 0 1000 0 0 0 1000 1000 0 0 0 0 0 1000 0 0 0 1000 0 1000 1000 0 1000 0 0 1000 1000 1000 1000 0 1000 0 0 0 0 0 1000 0 1000 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 1000 0 1000 0 0 1000 0 1000 0 1000 1000 0 0 0 1000 0 0 1000 1000 1000 0 0 1000 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 1000 0 0 1000 0 0 1000 0 0 1000 0 0 1000 1000 1000 0 1000 1000 0 0 1000 1000 1000 1000 0 1000 0 0 1000 1000 1000 1000 0 0 1000 0 0 1000 ] +endobj +2371 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni58EB/uni58F0) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2617 0 R /FontName /PPORZP+gbsnu58 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2372 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1k0! 2/-iK@WE:A|gyȿ$ tHzݽ;}tԷS aK=i}h'2DSCP?Yܱ7/q$Gl./1h"Nhжp4Bg?DPmS/8$GntjA^p,L<A"i3=C,T=iV +endstream +endobj +2373 0 obj +[ 1000 1000 0 1000 0 1000 ] +endobj +2374 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni8C08/uni8C61) /Descent -92 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2618 0 R /FontName /NGTSDE+gbsnu8c /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +2375 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1 {CEzSN2W5WV +N䐡:`ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{%;M \hLmM6Uڭ9Kbx$iM[3 +\yHvVZH P/[i +endstream +endobj +2376 0 obj +[ 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 1000 1000 0 1000 0 0 1000 0 0 0 0 0 0 0 0 1000 0 0 0 0 1000 0 0 0 0 0 0 1000 ] +endobj +2377 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni864E) /Descent -47 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2619 0 R /FontName /MPSIAH+gbsnu86 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2378 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1o !e@^ZE򐶪+茇r2dޝz>: [)a氈%\i۴jPs!@k,Iԗ8#6Co4'4h[8rf"mk궩nX#A7M }: v/J\T}<{&Z vT !iY +endstream +endobj +2379 0 obj +[ 1000 ] +endobj +2380 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni7C7B/uni7C98) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2620 0 R /FontName /TTNTQK+gbsnu7c /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2381 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1 {CEzKN2W5WV +N䐡:`ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{%;M \hLmM6Uڭ9Kbx$iM[3 +\yHvVZH P-i +endstream +endobj +2382 0 obj +[ 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 1000 1000 0 0 1000 0 1000 1000 ] +endobj +2383 0 obj +<< /Ascent 846 /CapHeight 0 /CharSet (/uni5728/uni5730/uni573A/uni574F/uni5766/uni578B/uni57CE) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2621 0 R /FontName /ZKNANI+gbsnu57 /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +2384 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1k0! ,KKCR7UFY+ 'C}wNw-0xvBsX4znmZ_5D 95O$wl~ K 1K7- O3Tƶ5uTi h,ᑠ>Zm%k>=eg{dgujxLυ U?2iS +endstream +endobj +2385 0 obj +[ 1000 1000 1000 0 1000 1000 1000 1000 1000 0 0 1000 0 0 0 0 0 1000 1000 1000 0 0 1000 0 1000 0 1000 0 0 0 0 1000 0 0 1000 0 1000 1000 1000 1000 1000 1000 0 0 0 0 0 1000 0 0 1000 1000 1000 1000 1000 1000 1000 1000 0 0 1000 0 1000 0 1000 1000 1000 1000 0 1000 0 1000 0 0 0 1000 0 0 1000 1000 0 0 0 1000 1000 0 0 0 0 0 1000 1000 1000 1000 1000 0 0 0 0 1000 1000 0 0 0 0 0 1000 1000 0 0 0 0 0 0 0 1000 0 0 0 0 1000 1000 1000 1000 1000 0 1000 1000 0 1000 0 1000 0 1000 1000 0 0 0 1000 0 1000 0 0 0 1000 0 0 0 0 0 0 0 0 0 1000 1000 0 0 0 0 0 0 0 1000 0 0 1000 ] +endobj +2386 0 obj +<< /Ascent 832 /CapHeight 0 /CharSet (/uni5668/uni56DE/uni56E0/uni56F4/uni56FD/uni56FE) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2622 0 R /FontName /WRZZJK+gbsnu56 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2387 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1k0! $ tU'qJɐAwݻSG>A}K=% +yWv2*}N4u<h 9_{Gyp?&m GC.t6LmM6Uڭ9Kbx$iOE[rC+p."Y*> +endobj +2390 0 obj +<< /Filter /FlateDecode /Length 204 >> +stream +x]1 {CEzKN2W5WV +N䐡:`ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{?&m GC.t4d&ضn*~%1<tӴЇC bmxO{*L<A^"i3C,T=1i +endstream +endobj +2391 0 obj +[ 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 0 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 ] +endobj +2392 0 obj +<< /Ascent 834 /CapHeight 0 /CharSet (/uni7136/uni7167/uni719F) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2624 0 R /FontName /IIIBRD+gbsnu71 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2393 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o !yiCҪnR|3 ͐{w?ԧ;P -aKi{hg2<> +endobj +2396 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1 {CEzKN2W5WV +N䐡:`ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{%;M \hLmM6Uڭ9Kbx$iM[3 +\yHvVZH P*i +endstream +endobj +2397 0 obj +[ 1000 0 1000 1000 0 0 0 0 0 1000 0 0 1000 0 0 1000 0 0 0 1000 0 1000 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 1000 0 1000 0 1000 1000 1000 0 1000 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 1000 0 1000 1000 1000 1000 1000 0 0 0 0 1000 1000 1000 0 1000 1000 0 1000 0 1000 0 0 0 0 1000 0 0 0 1000 1000 0 0 1000 1000 1000 1000 0 0 0 1000 1000 0 1000 1000 0 0 0 0 1000 1000 0 1000 0 0 0 1000 1000 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 1000 0 0 1000 0 0 0 0 1000 1000 1000 0 0 1000 0 1000 1000 0 0 0 0 0 0 1000 0 1000 ] +endobj +2398 0 obj +<< /Ascent 836 /CapHeight 0 /CharSet (/uni6C14/uni6C27/uni6C49/uni6C99/uni6CA1/uni6CB3/uni6CBB/uni6CE2) /Descent -72 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2626 0 R /FontName /JNQJXU+gbsnu6c /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +2399 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1 {CEzC'N2W5WV +N䐡:`ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{%;M \hLmM6Uڭ9Kbx$iM[3 +\yHvVZH P+i +endstream +endobj +2400 0 obj +[ 1000 1000 1000 0 1000 1000 1000 1000 0 0 0 1000 0 1000 1000 0 1000 0 1000 1000 1000 1000 1000 0 0 0 1000 1000 1000 0 1000 0 1000 1000 0 0 1000 0 0 0 0 1000 0 0 1000 1000 1000 0 0 0 1000 1000 0 1000 1000 0 0 0 0 0 1000 0 0 0 1000 1000 0 1000 0 0 0 1000 1000 1000 1000 1000 1000 1000 0 0 1000 0 0 0 1000 1000 1000 0 0 0 0 0 1000 0 1000 0 1000 0 1000 0 0 1000 0 0 0 1000 1000 0 0 1000 1000 1000 0 1000 1000 0 1000 1000 0 0 1000 0 0 1000 1000 0 0 1000 1000 0 0 0 0 1000 0 1000 0 0 0 1000 0 1000 0 1000 1000 1000 1000 1000 0 1000 1000 1000 0 1000 1000 0 0 1000 1000 1000 0 0 0 0 1000 1000 0 1000 1000 1000 1000 1000 0 0 0 0 1000 1000 0 0 0 1000 1000 0 1000 0 0 0 1000 0 0 1000 1000 1000 1000 1000 0 0 0 1000 0 0 1000 0 1000 1000 1000 ] +endobj +2401 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni6B21/uni6B49/uni6B62/uni6B63/uni6B64/uni6BB5/uni6BCD/uni6BCF/uni6BD4/uni6BEB/uni6BEF) /Descent -87 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2627 0 R /FontName /TKPNYZ+gbsnu6b /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2402 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o ! yiCҪnR|3 ͐{w;wԧS -aKhi{hg2?DscP_Y\<=ԇ8v?OC4'4h[8s73T5T h,በ\Zm#5UrĿV2ȳ]E:m5U> +endobj +2405 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1k0! ,KKCR7UFY+ 'C}wNw-0xvBsX4znmZ_5D 95O$wl~ K !K7- O3Tƶ5uTi h,ᑠ>Zm%k>=eg{dgujxLυ U?8iS +endstream +endobj +2406 0 obj +[ 1000 1000 0 1000 1000 1000 0 1000 1000 1000 1000 1000 0 1000 0 1000 1000 0 1000 1000 0 0 1000 0 1000 0 0 0 0 1000 0 0 1000 0 0 1000 1000 0 1000 1000 0 0 0 0 1000 0 0 0 0 1000 1000 1000 1000 0 0 0 0 0 0 0 0 1000 1000 0 0 0 1000 0 0 0 0 0 0 0 1000 0 1000 0 0 0 1000 1000 0 0 0 0 0 1000 0 0 0 1000 0 0 1000 0 0 0 0 1000 0 0 0 1000 0 1000 1000 0 1000 0 1000 1000 0 1000 1000 0 0 1000 0 1000 1000 1000 0 1000 1000 1000 0 0 0 0 0 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 0 0 1000 ] +endobj +2407 0 obj +<< /Ascent 846 /CapHeight 0 /CharSet (/uni8822/uni884C/uni8868/uni88AB/uni88AD) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2629 0 R /FontName /FNYBNB+gbsnu88 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2408 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o !yiCҪnR|3 ͐{w?ԧ;P -aK78o&Bexx,$y`M{q$'~طm4'4:8sW3T5T h,በ>;m#nknrĿV2ȳ]E:m5U> +endobj +2411 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o! !-UFVJr!2`ϟl62Y)vBK\4.ؼZIPKy`5ԥK;v%$/?ҍf}G0U}KwM:l%Kbx"OIۈNG_*\yHq֦mXHR6Zi +endstream +endobj +2412 0 obj +[ 1000 ] +endobj +2413 0 obj +<< /Ascent 0 /CapHeight 846 /CharSet (/uni5012/uni5019/uni5065/uni5076/uni50A8/uni50CF) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2631 0 R /FontName /SIVFNP+gbsnu50 /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +2414 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o! !Tʆni醶Qr!2`ϟlֿ2Y(c 셖#\i ++|py{f +<ܗLsc1P".Y} ԗxv? kJ734RæO;T-utEOKD0Zw0Sbmu|N5G]*\ywHq֦mXHRi> +endstream +endobj +2415 0 obj +[ 1000 0 1000 0 0 0 1000 1000 1000 0 1000 0 0 1000 0 1000 0 0 0 1000 1000 0 1000 1000 1000 0 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 1000 0 1000 0 1000 0 0 0 0 1000 0 0 0 1000 1000 0 0 0 1000 0 1000 1000 0 0 0 0 0 1000 0 0 0 0 1000 0 1000 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 1000 1000 0 0 0 1000 0 0 1000 1000 1000 0 0 0 0 1000 0 0 1000 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 1000 0 1000 1000 1000 0 0 1000 0 0 0 0 0 1000 0 0 0 0 0 0 0 1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 ] +endobj +2416 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni7B49/uni7B54/uni7B97/uni7BA1/uni7BAD) /Descent -88 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2632 0 R /FontName /APNQEV+gbsnu7b /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +2417 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o !yiCҪnR|3 ͐{w;wԧS -aKhi{hg2?DscP_Y\<=ԇ8v?OC4'4h[8s73T5T h,በ\Zm#5UrĿV2ȳ]E:m5U> +endobj +2420 0 obj +<< /Filter /FlateDecode /Length 204 >> +stream +x]1 {CEzSN2W5WV +N䐡:`ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{?&m GC.t4d&ضn*~%1<tӴЇC bmxO{*L<A^"i3C,T=2i +endstream +endobj +2421 0 obj +[ 1000 0 1000 0 1000 1000 0 1000 0 0 0 1000 0 0 0 1000 1000 0 0 1000 0 0 1000 1000 1000 0 1000 0 0 1000 1000 1000 1000 1000 0 0 0 0 0 1000 1000 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 1000 0 0 1000 1000 0 1000 1000 0 1000 0 1000 0 1000 0 0 0 0 0 1000 0 0 1000 0 1000 0 0 0 1000 0 1000 0 0 0 0 0 0 0 1000 1000 0 0 0 1000 0 0 0 0 0 0 0 1000 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 1000 ] +endobj +2422 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni9A6C/uni9AD8) /Descent -82 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2634 0 R /FontName /GBJZOW+gbsnu9a /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2423 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]10 ܆uR8D֐U$Dn:/ +C$ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{%;M \hLmM6Uڭ9Kbx$iM[3 +\yHvVZH P-i +endstream +endobj +2424 0 obj +[ 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 1000 1000 1000 0 1000 1000 1000 0 0 1000 1000 1000 1000 1000 0 0 1000 1000 1000 0 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 0 1000 1000 0 0 0 0 0 0 0 1000 1000 0 0 0 0 1000 1000 1000 0 1000 0 1000 0 0 0 1000 1000 1000 0 0 1000 0 0 0 0 0 1000 1000 0 0 0 0 1000 0 1000 0 0 0 0 1000 ] +endobj +2425 0 obj +<< /Ascent 843 /CapHeight 0 /CharSet (/uni8303/uni8336/uni8349/uni838E/uni83DC/uni83F2) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2635 0 R /FontName /SPRSMS+gbsnu83 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2426 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1o !I KHVu#u%p_@N wݻSG>A}K=% +yWv2*}N4u<h 9_{Gyx?&m GC.t6LmM6Uڭ9Kbx$iOE[𚪏rC+p."Y*> +endobj +2429 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o !yiCҪnR|3 ͐{w?ԧ;P -aKi{hg2<> +endobj +2432 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]10 uR8D֐U$Dn:/ +C$ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{%;M \hLmM6Uڭ9Kbx$iM[3 +\yHvVZH P&i +endstream +endobj +2433 0 obj +[ 1000 0 0 0 1000 0 0 1000 1000 0 0 1000 0 1000 0 0 0 1000 0 0 0 0 0 0 0 1000 1000 0 1000 0 1000 0 0 0 0 0 1000 0 0 0 1000 0 0 0 0 0 1000 0 0 1000 1000 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 1000 ] +endobj +2434 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni6F02) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2638 0 R /FontName /AWJOSW+gbsnu6f /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2435 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o! !!UFVJr!2`ϟl62Y)vBK\4.ؼZIPKy`5ԥK;v%$/?ҍf}G0U}KwM:l%Kbx"OIۈNG_*\yHq֦mXHR1i +endstream +endobj +2436 0 obj +[ 1000 ] +endobj +2437 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni9C9C) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2639 0 R /FontName /AJRGYC+gbsnu9c /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2438 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]10 ܆uR8D֐U$Dn:/ +C$ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{%;M \hLmM6Uڭ9Kbx$iM[3 +\yHvVZH P1i +endstream +endobj +2439 0 obj +[ 1000 ] +endobj +2440 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni6E29/uni6E38) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2640 0 R /FontName /IBJFSI+gbsnu6e /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2441 0 obj +<< /Filter /FlateDecode /Length 204 >> +stream +x]1 {CEzC'N2W5WV +N䐡:`ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{?&m GC.t4d&ضn*~%1<tӴЇC bmxO{*L<A^"i3C,T=/Ui +endstream +endobj +2442 0 obj +[ 1000 0 1000 0 1000 0 1000 0 0 1000 0 1000 0 0 0 1000 ] +endobj +2443 0 obj +<< /Ascent 0 /CapHeight 835 /CharSet (/uni8A00) /Descent -95 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2641 0 R /FontName /VWRYPE+gbsnu8a /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2444 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1 {CEzSN2W5WV +N䐡:`ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{%;M \hLmM6Uڭ9Kbx$iM[3 +\yHvVZH P+i +endstream +endobj +2445 0 obj +[ 1000 ] +endobj +2446 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni5D29/uni5D82/uni5DE5/uni5DF1/uni5DF2/uni5DF4) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2642 0 R /FontName /XGCRDY+gbsnu5d /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +2447 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]10 uR8D֐U$Dn:/ +C$ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{%;M \hLmM6Uڭ9Kbx$iM[3 +\yHvVZH P+i +endstream +endobj +2448 0 obj +[ 1000 0 0 0 1000 1000 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 1000 1000 0 0 0 0 0 0 0 0 1000 0 0 1000 1000 1000 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 1000 0 1000 0 0 0 0 0 0 0 0 0 0 0 1000 0 1000 1000 0 0 1000 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 1000 1000 0 0 1000 1000 0 0 1000 1000 1000 1000 1000 0 1000 0 0 1000 1000 0 1000 1000 1000 1000 ] +endobj +2449 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni7403/uni7434) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2643 0 R /FontName /UHICLH+gbsnu74 /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +2450 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1k0! ,KKCR7UFY+ 'C}wNw-0xvBsX4znmZ_5D 95O$wl~ K !K7- O3Tƶ5uTi h,ᑠ>Zm%k>=eg{dgujxLυ U?yiP +endstream +endobj +2451 0 obj +[ 1000 0 1000 1000 0 0 1000 1000 0 0 0 0 1000 1000 0 0 0 0 0 0 0 0 0 1000 1000 0 0 0 0 0 0 1000 0 0 1000 1000 0 1000 0 1000 0 1000 0 1000 0 1000 0 0 1000 1000 ] +endobj +2452 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni8428/uni848B) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2644 0 R /FontName /YDLOZJ+gbsnu84 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2453 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1o !‰2d@^ZE򐶪+茇r2dޝz>: [)a氈%\i۴jPs!@k,Iԗ8#6Co4'4h[8rf"mk궩nX#A7M }: v/J\T}<{&Z vT !;iS +endstream +endobj +2454 0 obj +[ 1000 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 1000 0 0 0 1000 1000 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 1000 0 1000 1000 1000 1000 0 0 0 0 1000 0 1000 0 0 0 0 0 1000 0 1000 1000 1000 0 0 0 1000 0 1000 0 1000 1000 0 1000 0 1000 0 0 0 0 0 0 0 1000 0 0 0 0 1000 1000 1000 0 1000 ] +endobj +2455 0 obj +<< /Ascent 843 /CapHeight 852 /CharSet (/uni611A) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2645 0 R /FontName /RWUNPI+gbsnu61 /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2456 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1o ! yiCҪnR|3 ͐{w?ԧ;P -aKi{hg2<> +endobj +2459 0 obj +<< /Filter /FlateDecode /Length 206 >> +stream +x]1o !ɒ KHVu#u%p_@N wݻSG>A}K=% +yWv2*}N4u<h 9_{Gyp?&m GC.t6LmM6Uڭ9Kbx$iOE[rC+p."Y*> +endobj +2462 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1 {CEzKN2W5WV +N䐡:`ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{%;M \hLmM6Uڭ9Kbx$iM[3 +\yHvVZH P/Xi +endstream +endobj +2463 0 obj +[ 1000 ] +endobj +2464 0 obj +<< /Ascent 844 /CapHeight 851 /CharSet (/uni9EC4) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2648 0 R /FontName /DALVAY+gbsnu9e /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2465 0 obj +<< /Filter /FlateDecode /Length 204 >> +stream +x]10 ܆uR8D֐U$Dn:/ +C$ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{?&m GC.t4d&ضn*~%1<tӴЇC bmxO{*L<A^"i3C,T=4i +endstream +endobj +2466 0 obj +[ 1000 ] +endobj +2467 0 obj +<< /Ascent 0 /CapHeight 0 /CharSet (/uni6A21) /Descent -89 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 2649 0 R /FontName /NRRGBL+gbsnu6a /ItalicAngle 0 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2468 0 obj +<< /Filter /FlateDecode /Length 205 >> +stream +x]1 {CEzC'N2W5WV +N䐡:`ϟl}wY)a氈%h'i}h'2?DSCP,Iԏ8#6W{%;M \hLmM6Uڭ9Kbx$iM[3 +\yHvVZH P(Yi +endstream +endobj +2469 0 obj +[ 1000 ] +endobj +2470 0 obj +<< /Ascent 722 /CapHeight 693 /CharSet (/a/e/f/hyphen/i/l/t/u) /Descent -261 /Flags 4 /FontBBox [ -170 -305 1010 941 ] /FontFile 2650 0 R /FontName /DOODEA+URWPalladioL-Ital /ItalicAngle -9 /StemV 78 /Type /FontDescriptor /XHeight 482 >> +endobj +2471 0 obj +<< /Filter /FlateDecode /Length 699 >> +stream +xmTn0CƆ@LE"j.RC~8M])A̼7W?^$PIsWWEW]}~{SCWmݨMi7mv9I+ڴg{oCc 4S 8M)s&`ywc0jzoz &TuS~@x~a`P'zywvL M/ޞh A`TS7~wpjmS!詺]]ꂅK(ew&97\=̒5⒁yAa>:M1ȈK,x΍t,@F*&" C,zdWXPv-hakH/]d"btv"gg?|2JB^G5kdwt,uVT Jb9;kBX!00a0bw3W M";\88̿9Earʱs +ށ?c>+q p~PrL +  +hi˜c>:q-+01~k2#Ϡ3\OLqRυ>¹M \)s9O +\Y!O>\\/Au*[ӺkzT%Ct +endstream +endobj +2472 0 obj +[ 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 500 747 722 611 667 778 611 556 722 778 333 333 667 556 944 778 778 611 778 667 556 611 778 722 944 722 667 667 333 606 333 606 500 278 444 463 407 500 389 278 500 500 278 278 444 278 778 556 444 500 463 389 389 333 556 ] +endobj +2473 0 obj +<< /Filter /FlateDecode /Length1 2785 /Length2 29791 /Length3 0 /Length 31344 >> +stream +xڴuX>LH7H!ݠtwC! 4]!J~߭{sZ} &H!PRVvtp`Y.6T::Igb k9 +DȂ@P <@F?@jtAV6 &h5w nVߕ~gKv.v6@M 5f k h 554jLlšNNERSK[ %% d5~9@[T}ӕĵުIs^rvCPZ:;h 8 Y@؜Ӳq;: 0a\,rBA*{SJ6 $9RBvȿA W86@rԔ@` !.loÿο{(m#te`o_/ms.6.U,m]~?6eqyiM-V%9*;Bq`x@]O\J :...tH,$]P'e -m,,+oĮ`$/?P@3-͜P|@ }AvgWߎD stСL?#AeR G'dʮ?zɸ*@{Kq@{DW.7WFGg{ |6.26 5?*,BG_ + ?&ߧ [ _>D9\\|@P/Tl +jR&`ha`9xsBGϠ!+`{3xMB|v?. إ A?]A\v?. (?ErQ\T (#(?Er\4 (?Er\t (? AMr BsE=ЮA^8C+y?~jo8\ qvX@ +QBm< 87%NG?ӿ%$=YyRrC}|#_'ſ uqumZCh2:Ar=DR~PD  䄌ROkMWb@?e?RLi<6,vj}x)#1\8Ԇe+E__:q=IH&`!Ϸ/㢁3# +N] +:?QFfs)8!-2$/1RiK4UZb>]F\O^AnzI/f!HЖʞpM/cFG{̡nP[|<υA$yDdiNѬ4aUij*Aw2@@2'`C@m =A : +&0?9X<72}˕EjkZ̖nzMVYGTQa$1w$o{Aj)g˻w;^9-D sDVO:A^%½:{zD *TBrݨ`&Ը݋tD -0,$%[n8\"?cEῨ/r^ ^ O)\{]v&3PzlhVmtQun  PYw-e.tRgJ6Ua6^.fCGmF>=*t^[IYEFP2&󵜙u /I,<-tE>,fYK8O5_HȰ?8HDj5,]%;4 ]5?CMtYce}/Nn@l#%i5ژxa*aVoV3Ǽ nry jϲNX@]slmG( -#|\bd~eLrN[=OjAwikh|&j eӃ2}f2;vq.Ec $|i^@,mKŽ,B.)h$<{#mm1E*/[,}CA&4kyAO;$.vlb'~ӂ,gq(ﹻ@GrK~7rk?I=ޝA|ʺ֙`xpc.MS,)K r05{eϔ最3w fQ߽Si2 7ğn~S_o?|Wπ]Cnj-PiW=?N~N5/kX}SNhkx>v +) z!HQCRf}cc- 8`{Ƕ&\BqѠRP\swB`՛KDʈ.UTZ䍯M)*Yp镑FTx$T rrjgNtO1\PkX{5iX:C`B63ɶ&tӢR5^zs w m2:p1q~Fd\3lo3 }Z;AzIOl7o㲊m^3)t2옝-$k|mywTSi>9~䧹kyV#a+թF_-nglEGN5f%0@ Flݤ>Id,.,Mno91`#fۖAt?Pcd|c~ݤڱ6^n*FqiZþf2`p8K5:nq/g~ɯRY;l|NyyrEF i (z%ɓZY+_?vf}ψ#`JI+i 8V{!IH2SQL|7\j PiG3 H2d,#: ULj@9 c 2{ww)3/3 ͂_3t4 +W, 5 Vt_cpt@N&t団s$N3r,[n01z8F^Yfs\vyWgƝւ#H =C-Ԋ`]<٭I52 qOr|WTj![W'ѧjiR(9CYbV:DHEI敲Na?𴝘'+H(رnaI/¿xo+O4bcD4c㉮H ?' j 63N +v9av^eYr19=`vr}.xdMxyDWx3)8Q ZK^M)QТz#7׮;aeb:Yyi\X:s^Cz4Æg~E K \.KM:4MÉt>Qh(tJlf=D)wJdc U +ٚӔ âhLznXw>j9jw]Q:* $D;dGZb+3^q:ODyEYTݎ~7?Gޅh+A.ăO:mkKH‡è/C*y!++FIί7l@VfM })aVP[fiJidk]a>LֳpzG/'Ћ؍Լ5ZT-p=fk)^%?w?3}-aAs&Ym KW^ ^bB"AW_4mM#Yh5 *uݹ)@}2m@R1CGSL %3 +t+8z27tHxf̰&αLy+:o3p)Mvsr ~4,)c'mZRT3;*n޽4675A޻ͅQ{7Cʕ豿{0g-DTJ.͔+!fsAvEo@KH!Jnkj`BВW8kQ}%EE2~na zGx(nn װܩ䳻=fx~tk2lA>t:xyd<:-b't-O/7~(iӫ@yu=VJ6DP5=JozFW-~+OdH2z|;_Zuid]}Kְ|~F),/Y~2z(?x;}RYYELמHS8-Af}K1sW +Y2HZzOXIşX8Cwni?S6f1KBZdd>?ϜP' ?jm8.ͧM_]8X`&ᆴAjXؾsQ|~+.0N<4aGP14PrS8 kDe=isycnl.dXL#MZ)WWVHu;DG3fpwO'tx`>doߌ#k'~#IzH(E^О擘b񾨟ދ8bv@cyi֦\ 0}u=m[%= +Zڻ[m-`&k!^l/:FߦX:qZV߲uW ~bCe{zSo)=XwXq^(e\d Fb,v>fT,,>,i k-9k6aR&Lfb8ckx<y'nӫ{Ilh'_1hqZtjB=y8\/Uͻʰ(${ڗ3/2p.EXV韣s%.E+fy.Uf?jpfmHi>90pl f6ϖ_}_kRj7pv"*KT* +(s^Vv"CI؇(ĨPEtÏ*!Q']$飄VwdEu^š^6,|6L>y0p}{ƀ*sD69/ S`2R[~W3Tz!zr")OMȕ^`qg X?/yx7`c 2^TZ:}!yg,`ވi倛g<5hcp;p}P%]tH9,ڡ2C=| Ma83"+.1>cr"jםf3úK{&-!+W^up= uNO1-J$1lwQ}s5DKh[} 䲵;R4RdV۲%w/T}%*Ca<1z$|.jfmHJ\%DEɻ |^ؘ::JAlnKh8IPx-]}zTZݲS 3gN6\xB[Ï&2 3Dl&54ȕDn2qxMI~N_l>"-7Ed`f"AY>-|8i(˝8$;@/V߄r%GRLxN\e}Ήt%d"jG3H-jRͅ N.gN-p[ZKoxw*i]L&qF{bS\H +_y6\<85eq]3SՉX@nUz9D}%c&|Lt)Fs AMh<ۂ q$bzOeL1i65G1i|uM lN5let;--"KyLbFMr</ }r7dyΓW:4~TEGD"{S]"%.(iрat Pa+_FU\&i+LY#*ҼW :ÞpT&C1I'@{Dl׿dy]nvd8"H򓖍N~ h\jU 2u}U$#+d YwGL<6q9; +`M&]z i=r [։eϡs;iȸ^lVOqdiH,$iIo\ƕhqRΪ#ޱd%st)-qo{/ד{2Z̼hq sXX.rpũxF"Y}DH&ǃ\/ٽ'ED.LrzԣlLڪ~"8>\KuD94.oʏC(ֺ+ٯk*l$5W$_'є{KS[_ + ["1,e(#~ͬaVMbe俸x㿗 +Lk" hg_\3k7|@@ )ߢpH73A=%$.oeħNF\V~?e4AF$]%H$HM +›L2jr:QL-JcA~-TI0C0iKX&o +ECրLhoFEP#IlSb*lvn22f?DƆ +[v+M+D KfJ 5,^D99[)sԑNxyTpi[#Zͩ)2g]]~jʧ=n \t# mt C A6Q! +hdat`֊V=j'L kU+v~eiD̂>_mAa'^< dµK[w})G,Dyދ)rZ$=hFh9V*^N! +~ =?>iMb24.jK4X.k Te UySUӔJ;ps%&&d/b# q 0 t ]qa=*٪m'wXI oTКoQG-4ٯ^f7F}܉F"oDs[$)c3g +%ϧ9UE ɦ]Ws^iJ]t$ш[ <bQęWf2ƸƌΦ*dj9aLv!@X= cAOAӓAN'|4{:g+x9~9Qdoy}6);\)d:x `O|LOW40$$)G&LPvUZt/1>ԾJlWG>EgSs2SyzHo+-I>NqX3ءf_D?^5 3\u3c Xyg +{ML01%+!r`BI_0>`:ӀtO[XKY7!k~ɛ Bm9.^7+1eNKBoG\.tNZ' rFp\vAeN?)D 暑j\eS+0F^ͅ0{]Y-@h~St<"f]v!YD>>R!7( Vin N@NNY +1)fiUJ:v 4' +ΠBlyI#uMHh8)sMW HsU)2:e\as{Q<s<颂KV +#+'+]yf5o争&gTb_JE'H ކVeXJN|q_`t>z6ömE/T/]2c),KOi? WԋHVvyUHB4,8e]-@"EIYc:9xi! ƎoGvDvP%"m?gT?n592w iSjqIV4~I"1 p(5'Ǖ;( C '.m7!!=b9fnWGqEa W86ܥ~MZ'QIRluaX*B.̎pV9`Em[w!]9@HŘT&;qN C U-xe0DTfU+S-gE&1{ FvٚU%-,5]K?pc o±m'et?'[Ҭ$P~RӊO;@$q `!=`!/)wu2IDBn׫U`kQ?j$|⽨(aeا1lH&IWZ!7oK˱ni.ΐ,5iKS63UVy4Gt + +c >:W|֯ +M?`@Ϳh7LZvj)'SLNˏ5I_RR2ӵ +;F>ATUngokQI3ʰ ?RWߥcb +- cd)yqLi1DE.XEXdK> e,279ª61&EOhs5"AcQ.u&~MMV71+C(:pdh2Ʋ0 ?V.#jOSfF6Fb'ZAPm.e;2>"SQ0>Y3Q&NdR_Kt%7/D9.D_xJ +J };tp>xc:yl?7%vu*TԜe;$֓Kx?4I?J_Sq#q`Y]v|DdydGNT/WxZB+uB +1* 0ۖ +.qq6,$r,!dU!3tVrEWطʩ\jx9|xj\?GQ󃣹 ѐ3i4^,}H.wGX\y 7Y^LSv$oP.g>t`)GD)anRI-:>e]ޣY#,VҺ i1p1O~JOH7X Z1Mܤȉ8aXz?O +H Ltđ3& |PI +&[NPՙ˱iuWx%/#zƤz-Hߦcȁ*QYzxf&8>$YA3@qݙ9`#<ۦ7˾[neiA[^h#+1V{3=ۯkoF" Vm`LTOSnE[7_:y,n/O8셃$ .CJtmxMvhZ7]ůq6*&^Sto* "$e`m3W!%^40:75\W7l~'C6-鳜bq#?lO7l@,iMX?|Yhv^` kSˀggf/Kq3QRh8)d6^sWJƽz~cA)*?"& yX -ٛᷳ&|gޓ*`fH-q)&r*[*@rge*$X47v=fRH>+#q!O*thŴP5S. j>ƔVaH~6ԫH[HגX;d`WIA-bw&,oT]b&NG+޻1n(9|m٢K(F$rBצZZ1X9JuU+Lo.|ZdCj$H_=;;U9EH}ً*KRi'm\ d!uE*”6rauSB/ILSkRb2r*,`f٫J8Z&;E4m:TXsDkm~l?h.<@>,X#OCͺveLj`.n;gZK2.4Er] Lx +Z:"t9.l$Iܨh,Qײ+ia\S][yFLlO;w#եŁ9GںǾ^/|nZADߎRnSVƾk. -vw3/շ_H;!g%@BJF!,d|q600u"h_OMr`y,8? g7l_UCgWKv1T'e(ubI~B2}V3`(RK'ik(3r55Cu7VrCB:8[w᥇GF]G-FLpJM6Cwhnsc^]_RƹUd'#+{Os*&&h ?.u,ph%NfІ.̠3WznjЛU{DGy1OLP~(,/i] r/R>iYI鈴ΙQ,q!1yWڣ7WWVv^sKda⾔yrXZ1fɶF( +On:/ +x8`fy8%2!^8qˣ|aE1ϕ grƖk(ң*n,O0>Xl65y!(bڡcA22@_q lOjF h_sG;ϤuЙeJTigX+$,S>!SYHMk9Xl;0lkm8Sw#I++1ڽܟf2.oq~N:K8ԫ,f3P <l% -8&3m]۽G~WєLvqIվ;$w$}iqC 1(Mו.G,$`iТ5WdN[^14(XR""ͩ!)ӻt kcS@tNRh&_fZ fۢ%{޾~sk5ܮtS̓$'% $Gm7khT@a1k]i3Ўx3j=.*-8D֡/ɔ &Yɂ;QNf +\9 +&$/>!ѐV|LZpA+A3_7R +視 |;/5h;aGz:6 vGz梢I0X?e2H!OԽhsNV/F0RqXK})ԯ›0=>=clS^3M}\A94p s̵Qf M}[v)VA{A8s7oUL+׽b=8P"'Ip{Jcr{5|xH.3ZQ哟R t_cJuЪ>eXܣ󢥻mL|`7 7eK+OKĝpS7&;~|~eGWWɊ"Wxg&zљӻL!EO/oOs.8jTyG%tUv'|?(x]8K3L<~οĄ{hIS|''\=Fʩox#7qmڶm۶m۶m۶mۚfqT +N^#e.eFd{S5֡7 fT>~0K?/ʭYa76]A~K&1JmqM5UT@(j "MaMLb-a4p7Cϯ6W~Vm@IBc.״P#buU ,^*0[ ]l2Elae]-D D#f#D}td4H+)A[K`) ٤7͸OPqa'+QliеvD;79-.B*-6.y+S26y=lhT ͜*>cps +MZu&_~HQ򳊑iq& bHPBB@Ji]f)+Eʖջzfǯh\;r*-al]2:||չ'G7_1/dl\Yy$MQ·XYf<"n7dhe[!~\`v>5{2qurշ,͒Œw|9jXv۷]!ڎ&p(!Ť +,7sI(-1.9삂 ׼W;dÂrs;V=!j t,*·%/]uE̫d_*)ٯ‘ܲMN0 +'+\SUQEV3C-»W! ~dG\yԸV>Y<}{kg3 nQ`ݻ@(O xc6"B#wnP#C;=}Vr-qH P*1D3V!AdOPiuP=ndP^iyGa82/n 28i3 :VޟZzLɱǵË%lI 8RT^h{$pKNAeԡ~UM]zh[M.r8܂_<[WrѠ3rBlfILJ8Cl3:o67Z(0~wImAE{;r1SXqOSܦ݉ɔ&VޜIznNUР TRq ODxmӃA_9 ]Qnd:-0yC"a +Fl;<%4M8}:Tt7楓kvÚ-AᤝI!lp9veg򪜆"_#&0G7cܯjٔvj7x@7NS )SwQcEg`d!r(l`Hȩ(3S9'q 8zWƅ k];+Jߔ贿"sw33MŨX|dx|2>dUS*k7t.|s$wj(!Y*rWVgM^kcݯb21MrEǦSzn`sJ !;"A9B#/2ʡAW8I-(ʊ%N+8ȍ+yuF`r,n2K&?s1^EK\VКE(~IH%'Ф *U"t 8 ʪ;" j>Z}Z:mIz)"Mf.r` fM"ߪ^{{xIݕ7*S\Æ8*5& gHbԣّn뤇‹l QoGk~-"fI| ^eA.jw) =T~m V*P;}Ѐwh%XATܒ2)AA"khr6ď\,UvZ O +kmc6kRkO@# l^6 yM/ƭ܁Nri6tt7U"y/b]TbU [ ):`/іc&B؀CX}O0NH}RP\)-z :!fP*P$Ȋ쬏P%ƾE "תHlu{+ +=4tf}o.XݒO0&l3$0][$vPHΐ'4F91ϕm VJ̓cûCy8WWe۳/טM8OR&A*J?FT +OcC!WzT~D}Z㨊\z2$qja.1xee!ʧ Q:71$m`AH28 ̢loee̕>} rY3tiaD +zL"5|f@0l[>VtIxcL׳Eh3祴lO%8a$a4ϢR [V&*'?&O`}1oPId컘`s ;-0mjh'qPDzP~Svủ<ӇC" RRe$ + ;z?!˾gT*soqY1 CȪq7ew[U*@7>g<{Z*H6ܢE*XUC/;*`|DtIM$\9Iup`ə(>B ^LBtIARkkHwsW; [|Q͊({K,;!*A,ˡii|cg+xIYA,kEN :E:J5Ni|/4(y`?~f8ؽ{G%Tά8%퓉]Ιy+r)=iU}o 9ϵҌ_*Mcp㪗;zO.Y\ $ށ~'W2|g#y{}F]vRU2'י6v;!Z+͞GyzˋoӀaEX)d;aQ|*/,]Ý{r \'I.>=X̳jt\׿~P`@KޔQu 6SuoD4kkySs!hޔTIC8 eaOUW'ZYGU\d~bǰMK8p?l]$,\`%}l1P?Jg[!thbG5DQ"8^a Mz8<,h9}7KX JW4J09=x#ðPq$|ѿb Fqxhql/֙dڰ2נQ="l[@(rnKW[4y"h +ޯVl6Yw+2-Ēҋ)7d0p}lhx{,Ij\kaXE Na9*( +܎M +kGI,w'H:. ypn4?`+|dI"fmNSi[{m>A +ZN%hx#(pM\V nl3d/$/UoKgʾx9{mvʢXo8pNK  0v9qfxbwjLR;O+i0w9 +MNBPEm'MͧV5 {Vgx-,V2f eb_JvqTW,#/v҅Թ]:ǮovuoJf (ʤPUY棂KGMlƜ۷l &er#h.N1G$*ǢzyIA|0 +JZ)=}ň ^T%YN"IN6yge<3HjeB\*:"Ժ,GAncvC*3a$¥_8~ƆO?V#r][ -4rƇ:vAV/ez-Q؏AJqrnQGP䌟;\PNر&^= Z'I5LI +sdeǎNmbmbRyT NJ)*M"S̵IFXn_"uL|ҤCť~~/֙u^F[\l,-*w +_U<5)M&K_IQj53Cݾe엑(/S&,+|! + h B,j븚n +JZ#(vt,MF[q ^yMWR$4_ 4A4 ^"\'1V1[ug"nAf'ԵKH*^9#|,yK)C+jփJާG +]*Xze^B@*gib[PAfUEϟ{2fWJ vfNfj~ <zqzj59{!CzT<+[D &O&I@PsiPzdf6;Gtp?z&ع df[vbd&Ͻ|&IP!; +Juܼb˜8oD&`ip=TӰp*vqE A9).)D+{{b ,hS]E0'>*k,?Jv YCƠ]ϒC(`ԝRX ; :o)eQ7kEܸS땄ZxOst $B ֥<_W6(Mt3\4 PH1R ?]N๬)1xIATᛱ\!EUӞvJze@ŝ7]lX +{`h~ MFPp@cT' r~쉊Ql;0#?1h_1VyK[z13d+ąћ;^| Ym^WNпhAx{PRH#GG\rj!VLh-ҩ! 2P(*"Ĥ#Fp`Dd?Ub·͂k=@f 'I+%`4|jl_dç\U )`xsN<^YFU1`\-^;!iH;M{1Jjo̲2mIhڥ mLSM,gO i7UI pd<"GSϜ! H)x6䢯w] >а͇z#UNH8i˳==R~S`e% ƇˡxfJ|K=mAJy71 T#^@IzK ts k#W)tsHx6E&k++uD6rnO_vW]^- ɽ:# cGr `+'_ێX?nY]0՗a#D1W&:?HBB_5\L0D2[X_+Im8aBSXmym{0KrAQ&Dp{%>o t)Eg8lxDlLXv)$'q֐<]L$<3sGMC(Il]dhjCac(`4UYU꺵Y6ÿ}0PvIT 3; ]gI3U'k̹>~jֹ֭B,󼦭AզĞ` M9Ty#Ҳ3MĴG' 3K,w ֍$zdX9{SqzQK~t+uʏt{Seub; :]J4y)rmZ4+eN1ޤ IM+chu`\7r^Hk DD\@TٟZgmw'.QɤDp ie/h9YF,Ofx*p&#ui%jw/ҦJyVeͧ#Zi,hŠe/( 3|q }C5 #zDG$D),g(@&R脽˕I]e#P8(U`sTD;yͧ9^ፓ0Oqj]ԱDkT]X/84[;269a1\`enrľr}ДT j_c*(9kkv]ϐ; '*(Y}rAWb!,=>usUƊ\A:*+%q)a 9f4$6>"`]UeȍJt`eUh9iGfgU+hy}4*Bs!W0Lv6O_/I_#mdGR-"=_䢓aq*Dn'/gȦ@2nysT3)jՊS> W͹Z{c#بxa@ +3Z_`"ǎy-ٴ==;3c,B,A n޻HY3) xI'+^EǦ}RJcWUeо1\"m16. Z_EJl;DB|$YhһRx8PWW6 {N>wg?Qb VW2>t@zv9շ/7{PKo1!Lkuncz,B$d:|Mv_[sN'Rv&owI[I95J뱄t5:$vw)#A9:q#v.#i"$YK``^QV+ FSYeooGIĔwA.!VƇ@/nᷴv#p=ݪ!RO!uU #W(ۣ(9ѳmJF8nPx+xM,Ӏ!^BDihIq]ejiTS}!r5om ḁ)Y3ю 73[}HTd=;Cyc>E Yr^$`+2 IlBŊ7DdnFj蛺;G쀪S{!? 懣C' n +ϳW@%"qH5t6`2R-Cˆ[m=+=RO`h==%"IE)7);m܀PCNҐk}z4ക}9 +Ce_q*j{{F#Q呀H9[J5"fqBlqi=6 䍎!gu;dۚ. h:=/dO.O2~ FC +۬'nbQ9.1%XDȮTWgSK}VGjY)(|8sO^P۷4huԲht rVh?D"Tm4w\L>Nc,b/?gx[X[:wŔki/)?O(CXr?GMhgk҄ϻA-"vp [fLq=! Jn0!YP[ssy H l]0Ե pX[vYցvx};Y/=>Dz^ d\q$ h`PJ"7-:=b4 jG6ZEw7{A:pـTe_e,mRE\[h.nTj8^P9Qds0˿{r ~Z I !E#hZ f>t &[l0 TE 4b +DNc-:ڿ48fT rxIeMKf qи3-m-̌J/RNg~"tן-/HMUC^q`L5i#ǟx*Ptx8/ +ZXXeBDkym=]u.Ԉ^O}_DS_ 싉-@@ &@rE+ gre}FI{,HUUq4jDC߅oBב~zJ7 F4M +KX&JK>bGA}-'+@X*J'Z=e/!e$3_Ir@pݏВT',tRyOH6? <q@Veu'1ys0b3ۑO@DM51pHxp.hViG6oxr )@Wx2Ў<&՟f?H[YI_Ӛj$Uͯ 9 Z׌z@Ek^%TsF/+)._Y4 vjR\ +PR,yF5Q + +_؂TmIBVqA!WjVj.R]Hէp3Zs~GB6 l!ٶk ~O΢h!PğU%#woKY9ǎْ KD.h땠,$CnFWFpPb |/JіX ˰v8* G蝾JL$Ӷ0ß`#\B%Wjt?X~4|:OQe)+$!A280Rf?cNQo7&1MedsQ*ZDɛIZ@Ow*6Ju"do6SzXpOUw^ +bNī8vnCHCvo ϐ銝NC)Z@l]lǽW G`OXզ@)E,6 D+n_f7G,ijDށxs'ZWs`k,GfS.aa*׌WR5HK]\`,bz@rsyLA`HRq^3|8JH@C}ƺ^]Z3L.fŊ09 0a|0kj&K&SX|x[lamQL% Wz**ؑPE ?Δ?/ QMUbfi{$6jji( ϷK%rn 'T2;(\7p4 +eqt&"yyscTTcc/.50桐w9k%}k W (I QjG̒~7oK.o n=v,CĢ7o9Ϭʣ&N?IPo'H'POx)Z7">Y֩o_/u懤x!?xNAi'5C UdUDjq1FKbBLv-VY ,c~# +dWi|0+D^0&2҉a!6z5/YvO.3g#^:z[Fliu .FQ +endstream +endobj +2474 0 obj +<< /Filter /FlateDecode /Length1 1222 /Length2 2345 /Length3 0 /Length 3177 >> +stream +x}TXSFb + 2 +!9$GIHNkDDRCDL12ժxO}͍$WTfhd z8 v@"3&S0lX,HkjZA21Vdذ!pہ#x,&~ihu`H*DA1{LgOlhT&T0PZߒ!):ҘK#oπ]c^D +hW~†H *:: da&(ڔAC_?44Ccp1L6MB` Oc$ 9@ +( KL6  12 RA,6A\)lL6@!XMF +A@4ʤp@B1Ny(.ڊņGr +6U,B58BwB,[e.f!pa؉2)" #UX(!A0k?o7r86PH%AatEa/nؿ C̅! UPn'y8{tB.&[3(LZvfy=C-#  +E1 &,.[Z|ͶVbз^: cIxEF'dCa7bv--,a@|$ꯩ.eӀ(n )]O!* +۬;" OgM] lN=ִgӧVO=".^pM=d?bf;it*?B)\ ],wlsl5? P%PQPbN_eu_٪5~Kx|ғEv$n$Ld4%[Dž:45"Ăk xdk}W{IgڦMP; :m~{T_Yw7R]w5{~fzc@jyyMJh:Uj6fU6BG*M^z\ +FtsU`5oג\昖gtZ/Pe;\U6a?-9]b9IGg[M;|=i{joiMwLɴ+ -iKE7VӌfۍYMn =KI_^0P~Rl\ q2Qf|MyөYVOY}z]hCQ@nˊ{3vRKO҉w>vP_|wF*BGv,ֈuqm̃Teס܋Fw3ܕ'+T|gV뎵KNK}k_ndbx:0E? u +[_~ѫ[}}dk??6ǷKN/ xQiA"YV {;Y=\f1>?cmZ'-`xK;h>d܁n|v[\jY'iKdi>ֱ +=P_wu-(udGB֞ow4ӷhŬ>\m,rZ#\w:`QyϏaۃUv $8שUꉑ};kuUv5wDb"l$BaPkրBđwB4hgVe61-F˄$Od?X"gV֯_cMJƗ'%ښU +#|]nɤ?ΛI?7yyse`&zw/4Fn@Հ >H1O'fzYȀe<:&uUj9 )=~r)(ct͏'<_z*a/Mث!\{.)<#נxVWנ7]S&Ew.8nP|#$nɇ&n]s5%WտY&L=S&g ?i^yڗ['^+O+0gz 򞼊G6xS41uͲ1{7=4=R),qoYh·//_ag{k[%U<42ͰK|OsWՃLC^@RG#-ĺt˾]) %BY{G~ʾ~T>3I>:t:S vWF ё.HS~MPAIYbad 6Mg!"ݔ+U`:m&pdiaNsԓC<[uZb,譯McO׿eJ&QF+xޜ/Zg|*\yY7c֘K@\ܭ4&ye#M:3TKk=(3k*89Ň+J$[\{?.B*aYH)aɮLP˽OsaOljϤDCMJ\x'+ +ϱ njL%q5߽U˞Y_d_\ޟq?[Ch :ŒvfoY6}, >x2井&Qr9i(ڇYr ʫ/~- +endstream +endobj +2475 0 obj +<< /Filter /FlateDecode /Length1 2113 /Length2 10122 /Length3 0 /Length 11212 >> +stream +xڵP\`q`;4ܭ$xp@gjgtߦ$URe136ufda,Af + gKB@DJJ5G0stO#@/LfPsXXxYxٹ@9& 3kKn{3DJ1;{G3/@\N3 rl..`'K3S +vvr~lydlM"ր];͜]Lc$4&ir1/rŒ,,,/l vfKgg{^ffbazy}25sWċ +o̙l͜_)%lMlllYS3lW*5{3 9Iu" &"A_߃DE^l,FVV6nnS_celxBLh 6yV?da}Mo_f/J/y/!zFOu w%A6`ki*f. %տ6!Infv6궦f`[3%;'_U{ 랚% -3[R53ZX98 GG"e۳rpXL3l_B.>ӄצc0[:u0[5 7sۙ]X_ #%^?o|E+X_HAO*?/_Ջ9^8Ջό^? ~E^oNj՞T^?esl?Jp|UesQ|mUJpSU\\W ?<k._-㤙8:sm~9fff&K v&|?켩!pc%0~ěI6br.O.c)XG4`*_}ͯcHrzxAGIqs[͘FUcЛUKwvzڪp0C,J)_gO'"uĹ+lXk=o(guB'ۃasF@8%aC?5QKZSmjn-asjMYi 4V +ߏ&5` -և{mɴ%1P(6w|XV22A"vϰն=BӁg(n''d́<*S;7Ѣ]8_u7F67&\_ +ˇGYADg#RĔO3e]_ے1a?v~5^KDbnI)=&Ccke8m}L<xx%9*D@/вFsܭsx-Rww _XV^zE }B?N 0j4[h\r>}oOa%aBB&SEf9m!y\ ˕(y@)n1_4{MW'P]ʓ۫h^IKDzX-fs:mWkJeޮP~ǔp]6>K"@V@vw¡=#x1,FE+LGdEME$oG=^YQ#mϞ@{_),$RÞʗ;u1eg: O3L KϺ vsyA(FO;G?Iaޔ~e'4&i˳C'T CM Il9 o[ةE3G +`Pm:CBUn+H59-O XC|/EN >wN>'?z( +t{%ESڌo2ܞb?lZ)_BTR͛zb^) +V B-$ݮۏɯOPxuN +u[j+A0 Y pЦL +?ll;g}7c*ɨFwX +(o|p>OfBٓF&$Z!kdʦ)ϣ+zH.Rv?Ӷo+z>fMâApQL9fݙ~wה%U!;δ}L,iȦnjo&u.XnLEntv(ɩG!HZrz2b) e +fݸ̉)88})T7p)9,I-(ϋ7?l֟\dyEiz41|Nk{9&Pcr pT QEG8opL9e !Xxt8@'V#N۵J}!cazGx{i=MPι`w0,!f'uV{!k" }4:Z!nfxj4Gs0p\(~}:<40wY(.YLX\&j7A eui&kvܐ.A-zjHR-ɑ/4sSgbcRdb( &wyt8al'Aֆb*r.{%U^Q$UJ0dsc^BBN + qX[Ҏ.Z@ mlsq*&g6KoXndT`0T\ kNh#;ࡹ>ZE<7‚_b*͘w&J-Ѥnem~ØR['GkK4j'칊 cC-gElwlp=m=\/m?om̥/ItLa7P[!.'//j-VMfh:_?#ZL"=6Q"ދ<t78 +N P_$j[H:Bʢ$-W޼{X f~2baw"`9]4L@wM11nϴW $J0 9|2+SSNv -A8Wv[@ц::qν3OhMDX"}krJlƩ)+zjZleAD$R,C+L7xD=<Ύ<-y+f,xoށf;3K.EA8 +-9޽CV3ӊA wf͌D8*FJ NX6rcnK0MP_Bb-CPEos'g1Rґ"ʉU|`!G֎_'i he+t>tΞ֓OFcu@O%d_Fioo=hۻ4P @Qo6H185)}ɡe>2clbQa{ d9t%PwKC>_3˳V@D(Ѵic@BcW72LRfyhZq3D_ڭSp +2&]dc"Ųw oS|dg["~6Ȳ(>A ^c)}7?J Vw#QWv,"4oig-E|73`BosVX[{euXxm*nhD; A{ErnwjLt舄9[(k)f-ggi緎 heE +=2:j*\TD(gB [i߫|w]|My(;<}?sYe<`nGīȯBCz.hy{8]ʁ!8 0Lxz`,*BOtXEг!ǨR-b EpjP"it\uxmSPX ؝Qxu'A!:BX ^\:2k4b$]k5]ޢ1UW}Z%mouUn)m(9I?S -NKXfGͩ5H.׬j(m '%A7oOljwMfe(phGϽ,_ڴ?].t#{^" ~"]ڍ0;F>rRWBT$֕k-F+EnsRTW9PԙJ5xDi$9za̚c0t\$B͇6ar韻veW;bq/ԸR#E'sҾtlT |Jzڝ$;3Y2mepG"cfN\WLg^ߥ(C`fCE<=Nd/7q.iOwߨSF** n%R5R#*9 8\\,F؂H·'͚jv˞{Aņ}fA + 8i+ cH m1 ⟸YПȇ%{#."'Y0bGE+;sU<=$^#f:ᷥiLo @6Ʋ'HIy&E(/xa?Ձ<(=ϪtDk-^R\qCEhVJA~e/_!^3zj2.jIa= 5|iP 4 )` OhmX"`DI.A*Cd.E +{Je\Xkuo;1ɓgcDYm $Q0?l ;oBZ9r]BtūL +qa4g9&,h| q>Kau-b" +=OIZ+u4ɐ0?Y 2[3u(<~F"h)F֏x23c(s ־vcˈetX4UwC/^_I{Z@ +ٚW͝~㫫Pw2iXefcx\"SێCpwy-^̶q JoĦ}\n +98;T/2UϼE6b&Zx3'0aɄsuEKQLɦ_C`yrX@,cm h4𖦩J;f'G[+q k?/LSP.:UM +Q|mtt~=ebI"g̕[]O2Ш ?BWRĐx-$VqaL3 P5}br`ĩ$Ly>)N ٛ}h3+lXmHΜ:\ .%ɱQTqOբjdRaZ޸&FǨ֡8BlO3)#MQD&B q$K9U ?$QKzkdPM% !zN %;q;xz5% +6OX^u;Z%"'Lf;>ߑ!@f% +\0E-YS!/W)sFUF1pAgNL;u*lN h\#Ozk.)2苟OTݮn1R\fk:vy`~$@(.m|yx$|F+4ϺC]nÞkf)*\<ܯ& W CH8Zey.n9"c9o`Pߥ]*iǏ늫FੜYA?ħ)%υ<{N923!}jo9xwfPri4h Ca>uy9FY67o#d?ر3!l}`H7 vsA ^̈t]5%,~c2J!rTMg4iuܓ"̏(PwԨ6jk]֥ѼHKԥ[rgۇ jZqb'_iv:iTvUʽMS;nĄl͗/MA:DHZ>pҳ7"7 MAk! YV•[|iߜ2.`߰V=}AHs^úFG7DZ^c{TE3tnyσ \׻ņ!W_2,}2FLkPkeᘉ׎nRX~YA|~ n;U7뢩R3Ɂ Ds$oڰdH8S?V}0RħDRnNH฼W'/޷ %5+--0 ?0yӊ4e-/PARiA%#]hYμ!k#"W:NxѾ[q^O,LHXсNg+beΰ6ij⪃N> X|ikJzgTq`9]6 yQ +`B큪~蹒BuQc%,v|YT-EI Dȴ(+7i\(}|{oOO[cxT b\ߵƲ)~)Vj^/cW?T/,"7k2A\EE.ؓٴwȹmL>F ,XRr?dux c,:,r"7_@CX"]u5PҷF!8?3vGvƢVw3RşA"Z"g#Tv:kԋSq>ߚ#46Gc + D„ ] 6Di)d"gf$eyfOIPmzM= j;0@lsry3FT?uS珚~\>y"_ZU#\ӕD9Ie/\͜tU6Ȕ$L,ogj S Xo-i)0W&XUi+PG=RW-:p܊? G*gsRo},Ҷq>' 4,!W5W{:e]-0&`Jp*8"28Y`@/j$+mzߋ*%Az~$ +qƉա/oCL'z:-0uO*t 0b&PG\Lؿrjw0iY<6M-`c^f/.ob{f$D-!dJRf4,:k@%٠6¤QTݘFdp[aT4WfpTNo2Homzqo~{` +䞯w_??\{E?]%qO$GTv8l2CGƊU^V4UHXKt+O +M&$ݨDr5fы1-(^e^y/_UaqQ'Cڪ"A9AH(/_ѽ#V-ZQٹ.>I[jWBJ'{]}~#Gs|"oS-Ys*P +BTE-|djoG+W̧m2 Ԯ,U[}Lg5jnfN)RN YNXP$+`QT +|ͱ 2 '+I' MņM'340&CJ@L uz$jǞf¼ޏeIwoVFz#-兮 >qs4+k}.l +QX*3IV&y[Z^t6xS _~< -oD ref"mݑ7{|wv4 )4 *tD(}|Yulz4KFӞn|ADoq(̧|(H9Ҭ6(xIZ#xsʥs?~康Kuʈ*(|Ӓf48@];cn L6ٔBR6Z_M%*czO#+ *8hI2ӂaaJ#sj/C%Upn6>:0 l0:F̢mÒ513ŌkUoCOSE,Ӟ㚐 2R [ O]7ɐSw DUE~0QZmPjSJtw{]#d/~Z?MO9tI_?vĠA͐F?*nDYh9lWR|"Jduj+0t@#wj.BsEkrck jJ45,{yLƖ (̎zJKB6ƒ}?z{9 +65o؃n#NHOkHr)V r#jc~#XQ$`nZj#xLj;Svoj1|̱{>sZu7E$VTB7zf~5mVNe>4}&.Vy;5F?TЏq 4_[7d ēݏuS QԶB9M#{3ct!_(h +endstream +endobj +2476 0 obj +<< /Filter /FlateDecode /Length1 1169 /Length2 10088 /Length3 0 /Length 10877 >> +stream +x}eT][5w wwwww9AKKp=tc|ckVլgDYA$io ppt12SP[؀)4ANVvŜ@@8#G qXXxٹx8̬Jw(XZA65KB҅7_)eyx +m0O)3 3 Ł#dWٜDSLd 02u,RtXf .NV=fFf濞|7O"`RTSUa{ع <V#ٸM [jek/nCa ࿉]LAu$]ml0'A פ + 3+W\~ TߐL`qװ39Xف흭Z' 3-L@@vf#@c98@'''<DŽY98,&7G 8` ljanfbwdt?4ـossw7]` +l]?>_83?Ç'09@vӍo}L?n!ӎ壡cW6lJ[_C2uuVkyL~ۛ| iwg؛EF L33h^$yuuGNx&5QQ^B8u}WG@k.Y\GWnd|G~){*?92|Ո1Gg5C +@K~2ww =gX6+[&뷧y +uVn\r\]B;JoYKX"w^zj1f/8e.G7l>($шgMXm^^z ~2=1U7ɆK(9y*;Ԅԯ)>% +>q Ȉ%ccXH +_J;d\8&4Lr[$xmI&֮EWPR"٨pX4^l EW^͂~,ܦĺ@\jx$ӄ2(7^w΢b8/_JNBp"9^x!ڃN<uENO*J= 2Kk4Zቀ4Dٰm52RƣطwB&8!szs4_LE @ l@vt%p +mFw}xF\gXy8)}.gNΗ&oS2irWG賵OhP|m xnidjV"t61fi_/}_t 2PNzÝTaW_01NLQy%Du;TWzdL7X3ֿ~Qä}997ϴϊOFܜk[.v%ňCa50pl|.4yw_^R!`BNf&oRM6X 6ỊT/1k(yXT;J j=8d i-KD2 FYDaӵ#y}h h ©0o!0GOK?D ,}~5<5 >{58z.#([=IJ^m6XGrl΁Qm0#r >,l* pW;WYχmnY2Dձ7 kM\d '~B;bQԨtv\ntԾ#sCsZ] $sea(>A +^-0$=.8/.l伻-["(g})z;{=!1Frkム|m)7bp~c͖BrQ51J*wV.B@O 04q^_FI Nhz< EmƿUs@sY]$LQ[?&SG<i$f@o <[, !R.dv9*FUAV s!&KꋎÆ9-DbhƉ[Gh@?tp+RuG@"yO ;i0SCFW9wB=o59]xĊ߶4%I6Fپ\Z'B[lT 4Z`m>Y#~pZNP.=+5A-c$vaqsR[.Pٰnf9j2-_ͻO#k:NCjR' +R% e !YTDe +{ xh/jw_9TOe:&,EeLvE&k%$NJ(f4`뷰{1zW¾S'Ñ;#_.Y=}V +AO*xbagha%$s)Ebtu/"=&һй$86:ir+OaewW M⺷w@Qļ3.G\e#c&=>g*\;5 +5| /d~AwNr}&Y+pxJ3C/h.F&WǏ(Bm*HaƑȉzy ;j . /ȫae,g7D8I?3}@j^$Q +7, +̵ B:R4vq̄=F V_@pO8Mle7hcF3y|F 'Gc^^F*F!Ny8nSh+.tY^<,f8&5HSLn%t<0\"xNNYN坢8W<(F]! "h7Qx_oG/'厌jScw) "Tb?haATAN+DjJfKF(3\ +53zEQ5G"t dg`kiHìW?s"TO:ﲬSbO)%5 Kt7_g_7d΋2TÓ83ӷɭtVn% ߾7e4 +WH' ^{~ˉ٧H"}CE}9iRu˟by eg$W QFR-,`pW2RF{ q +b(^?Zţh-ʒ@y9M@1U^aȱrG8ό&%LfE?'|u9@1~0P|};&,H?BR=9 --|v3L{YCU;RP [.ωDh + + +c.$_h)pSA^Yۖl21bٟEx,E .+iť=R\A()|IwT@ߦcR6%31.xzgγ$iNkˏ)od+&O{=ܴB$ԣY fȅz~+w#ytDj_m@6aJµ[~I5?B~;*QE1CF-Ol]]])a0rԥ;O67[bV8\xt?gk/3 +3!ҫÏZr"D0J<ثy&G_MxJUTڅM2afڲcM<`ľlG%u7n,W`'O=Q1xNKշ`_lztu+UgE؂}[<{S\:dș1E̔PG@ϭbGw;<hX1Qb=TzgOC8ÞWj lˇ[8}({p,Η@ +rZ?ŝd. E"CU O5}^ϙ;s8;4V̍߾*kㆠal:Hil[RHPpN .fwTQjAz)^DAʺxZ9avͼОi*N!R ۛsDSTeg'F(6 w _??T/dۂ3o'kVǚ]/iKblwQ }`sMO6LH]F[Q5"7kt.a$fcRH݊a\ĥ5P7Mu'ޒ KPIvnYj_*ޱ8# g + |&쑀{alPZw.TDE$8tkC+i/WT*]l鉌x@(wy+@гmyhC&ˢ|.UZ&̻L}d~J^"%0{Yʺl֗l;eތ=T3bz]'е7oMk@2ƗjFi>v }j*8uEG X*1&Io٪i>ɯ ">OsB/5Nl6+*ZF|Bte ߌO;uv%IO2p5X"C +n(K(6 Do_*s#fmlCR'`+\;Q,yԺZh)j9j}<6Ι5dNDd[!- Ĥ}i(IddU@_J[ !~>ep1կ1=rsı eJ;*()՝ŀ`W2YYCAϯi2hN䘀slך˝r3Z;s_yϮv HfKa_TXW +-Ub<ا[m9P#~"d񖑤i:۶\t +0HC^8?:¯oM~sUʷB봭AT>& JғwP`;T5u,cs?]z966w,^{R:ҖrE +@5ObXTiX?]֘"98CO94Mʟy>ٺj1>j 0|.x;i(Vf6:J;="̏.zH D+|k_7CW Ȟֲ.0$pu&ِF +!3]WF $#frtܗқs}MaXSR>z EU'%BRCHTlZ_^Kef5C1EР<a5@ga4|<$J*_ij˜j.|nq72TM`Ke3UAݛv`7oFmW:24 y&%7o Y](1V\s*B,WU3yu$̞㶡'GMQa Nt",W򑯮j.YcU+3"Er* +@0VBX"j!qllW +!ͷsIٴYhbqJ|v'#/ܛ NCҨ[yhl25Z =(XG̦] l^lS^K]v("}bc ++Ğ&RǷ~e6}[ nh۪HEuix}*@~Q,Cs` 1lY(J|#D ֙P ~(ѡ^ŘNǬ1Jb}ÙE,y}\ WP2!^ _{=켤>]b)社ZIBXSoRO8凌¯ -4GR[snh \C9bRoʆ:&ran@|J2ߍᕻ;AVH-oQ?kE)ù@tR(e~ţ14J> U8"ߢ2y{oֵbx$x;YuRAj.XyD +T/syM̟#Gb~'BV]Y  EPg*ٷ5!%u(wOډ |'#OTR/]A8=be nI^/ Q]4ef[h +ݝJ泬ubW%Amj"=O $~ҺAder=K1Fӏ+qٮ%,ixXyU#&xPumuhʿ;ۗD{7gՉ 4p^ 25>o?ϟu;m'g{|}= +E (.%B6VJ .1~b}P"ƋO!YK_O<DH,RËjOyȣf`1Lbsqf=g^7SmS~_Wp]kLP*mm!LY7r 1E.un$NHőSݥfQagU[C)zjӺ4\๫ìȥIY3ϔ>. +|U9DZ`u2_7/oMVHx&Z!k7;fr#[bլ`hԺ]'q_k%*T "P +C421 9rLyM݌f@!; bGH䱗n: v6؜" 4P 46N[ +f3 KIsی >qf rIŤp|ѐ$sl!of%)"ex@1ԟӶ-NyNpINEpٌV䬯qFp%NgF^cELj\G#>[5#4%Y]\İk^7#3<[̾F؂Y !g ȴ>C5yh*My̾6#QX n?V)zTSrbV5دpتidLI߰YiZ78XŸAJfdbX4Ieڄtk[+o˽iM>ɭMՔȴYQӛhPdaS|XFl(q}Wݡ\'nXӔq!~AiRCѩ˗$w9tۑ QK m`_澃(E⸖3_ TnOu'mCQUSR] oѾvd!b%~I6<MniNZiUݷr`Gdx1̀sZ892aBzQ+k"Bր[3ٲK+} PH\|eOx0-P޻C!+A +{HcޅsAڋH3= +VU9[s*D. Y%1uPi)VAԹ/KOڌ|Xwa +R/ƛ,鬒|jBsPYR\RNjTI)W%-S34`[ + 5/RefD̈$pKמԷ0f59xU2SlHۜ< ]p%1p3r@5M1/Fy.k=ȷW4=Lyװ3:OgSnh=ųى)gUn" +qpWHgdp7bCEKtT]b>VO((!yAIrf@/{^a+#o!1y3_(z`/R' bel" W1KsZu9;WJa:=ZjQ(C~L <`D˃3 +v&U(]\[ˍ\OjZ+0{h3xo픹mO5SY8U/Ig~*t@ܟ-Z:Kg 'AН{iMb1d<9x/8f n.F&} ,ĢFCBh%`/zFM&d,!FǷTkC8GFmhBDSE!D 4߈GG?crFj[ [h^^R҈Cg!%,Vk /ƙUX73>)RQecTN?%}Ha>i㗣m?eVĚ.cKk]_m߷XX!9<ͫ +kY9~^I@Ar`]Mqr"i+O)"=W';>C.{0klvjt',M7` ''H[-oo'TJZCm#!|zC ƚV^}^\I:S +'plN1{ëGoTﯯQl0hIBlƞöHEHɆOa41TN XOi1%8)r?5--Xp|EH/k+7i4"f[7:HXԮ!e^;HbdE݀c p&XLbEen[%1{:Yuyy?]+yp|\\.:iލmOKqzɌ7aPύ/(,yj?1uCpš`̯tN6=v )4`gpJ@F Y◻A5g !)KV>]! z+ fa`\e!.GڿH] +Zu.<95VO% R[Vlĵ(#pZ9d&yO}B_ ҷ7ӡHك"ES+88Toڕlw$RUA3*H!5b>M$.> +stream +x}veT]-Bq .Ah Kݝ[wf]ϩuv~.?VrANf+wc*;}@[^p +鸯'sgݟ8K t}DNf ڄފ'aJ3ވPx5"OToy6טoG[A84]x"0HJΪ%vhۭ@ʏw> 0X:~Pë\5F;(d.hOjOK54q›mOӆ.̨Kև:BnAz3$ ,>E@}?mhX˸*w]4a_ M? ݝkS42(&o֌Qa[.sZ ܅2 BZtl w^"?2[r=)WELd2jl$\t Լlx@;ݰo+PJ"7 xոoJ}1[acu*M?C&X t-AK/BKjOᷨV-Y򊮴v{ԍBB=t1QwOz=W ءzhF"R2$"Ǫ-rvP?ZBG RPG7(喙Pȝ̵DJMn 9S]$J%kMs7P%:F́jh#snDc QX*\BB 3Qi=UĘ=G<؁U9il6kxŵ |nS1v cN'#fu^0fWph:i +na 4=s!Vt +"Mj-)_e..DM·;j&Tv_HVM UȺ2U;V}]B/fzJyS45D[굷N D~q%-55!TͥN/˜މ,ˊQoB{)܆HVA @@!#P}l̨9H"2=bp[P>w⿰g|"yGc~jq|{1hܞʀ^57~@dJ/.F+ U eO&*i\cf'6$Yy@jtTP0:CQ$&r# r%<`BYKHБs.!V5T:?&bcSn2dI &gu^sD%}^sTc`ʘI^^$8ZPpe"-W~aRk^)8'W](-h• 75?n?=y2Gq80bOQ(]fㄕ;%. E{bfPʶ[(f\#зfG[;he4?K֩S0ҳ5Ȝ=vx]kt*닮-unb%oPg(+Lu]+Og4>#s*-8Fh25i,3j*}ímEcݮ6Nǐ=ɨ.`j SH̓rХ2IL9O)B:V *,-`bR4ˇ.ca9kQD"HON[^Z 42At5ڢ׳9vB jw t}`yѴw hjo>U)'8-ϭ{l;37O6w 0oI(Tae!(Qd[%GB(e6ZbaKN'j;6TF; +*V@kI9ϼO<gɩҕd)Xh;dj\楜&ݤtK;h܏xgXLX630+*0Sa7߇,nT֭p+BYܖIY7hIf#z@Ԋ \DIrx7JĤ;oT7zLZ;䍭̊Ȕd1ϒ41ĆﵦH%>mI#t/Msa +2=OKJzyp +L?ۊMԚ>@I .Q +DmifZTI/?~)0!Nd 9m 8Ϳ<Lk8 k0״+tY+5&/$ƶsxF;YL}W#vJC5q2K!i7HB b͊;d XI>}%~dNI9pqNqgiRW8%6!YD7?+S@f&%lRL~U-| +A1+yG5mXĈTє/(= G2\-bFdI{TW1fU1/-1V*|ÑBII-KqXq=pq*V q({\i'1~/%X4DyzfƊU`=r RZr0t=]d#+qnAI`25>&wt 8gr!ڲ]E6y~M1+ooڳ.j a>7.o ($hE}j}8 ?t/L7/|Hf@nvy~D\#q F3[52Kv8}?Snsw`.<D[VK4^o>U8d5{.YvAOO-p2upX5@zGN٩[ҔC^kXb~Ņ30SġI8'5;Ű!}b{_VzNӥ0%?Nb*j?ck`6P:f!~owRte<G5gڐ۶$~23^qFx +ق N*/Ղ92 !?jct=ۙ~S +}%S$Ed|єdAhA7ꓟq nTudffG1z4+NRp?ho T55-]IT[m1zӉ\2t.ߊL9ck@k9q*D^f6{N:2/(Lj zg4_層taiH Qc˾~!D]8 el_PXQZrH|*=q&!Yt!~1uZṈo[3 +^C֎ a E7]+?pIF'V!l*r %LW/! D9] 4rqNHCkF(ʔė뮵;]9|+K2Aߧx+ Xɠ?z2(^ޱh1#VagIRV˧M_gS3Yzyܩz\!Qmf1އ5^NF$]t17 BܵLn +"1 nI[Z{' lOH- +raP5rm"Į-'ut˱P;P_c'C! MT,Gѽ.:e HځpQf쇘|%7 gBbt<z+u<UPǯ`y`0kr95𸛢Ο#Xvy}S5#ޭ"&J1Fb!;9|{;VI(W&u'u?(shPkFq|Vh@Vm5X_N3t2a޵6/f$?Sֺch&R8B.V7T"%_[xq^f|uvn6ӵeRTŽB e XŨ8T"%b|6h.޸W f,^415BU!"u\j+\]R7Q%G Mcmt]%sPvHr0W)61&SR^CHhN$#J^mkTLSF(Вpʛ9;WخO;m;h \7".IĀ /bYes.柍 c9q!em[|W8nV4&;XM.sAaDvJWip .^/^96[1n3[pɳ v[yEf#I*4d3![q(S ,wȷݧ8=dlK--iE!x({㲅`.7锁Ao߀&=xb i9HQTYy),a08I4a7$w)r# +k26'TE,fHb&QR%onapF}/@_kWkucҽ)9nӤlZ0gjc1s|V#y윧$gg\홲_i#IeV0-dI(5<] +endstream +endobj +2478 0 obj +<< /Filter /FlateDecode /Length1 1031 /Length2 1803 /Length3 0 /Length 2477 >> +stream +x}{|jʆ%E$@<Db.0"X'}d!+v YR X<@ ~n=0À! dATr$`Oۆ0!>$Th)0*B3 X@` +ĞAh͇Ę3)|YA|Ăb̌4 b\;3B8 A 3ϗ] +,+݅0[[A2P8+ YDّ$=}Dzk!fBɷ~GpMf3x0W<L!,goq30ӆRET8b`1\N !C4'o;f!0 >>S` )BbebX@!1h@Hbr3Ac-LC[l YΩ̩c-sZع+1o!C1 -8,$Fdi 7dݽȱ꯺z!Sõe҉AWnvjb;/SN%Ǎ~,nn]hIf_ Kp[K.>gʰ㇝%#k 1GgsYԣGq65?D򵫆B2H/ûb;ݟۍG6rNvgiQа[]޴e+}'b2/67䚾/ёFvz}O|\)3 5S +^\QtJt +8w2.KLa]u#oGwgniAzA CP?C#{  % lxV=26 P;lF| +Llזrj8!g`Ё~<|JN^̘!tNt9"nhC~|ןӯSmЅIdI] GmHŌ_ͅDaGλb?# ,Q]GcɛL! O-S'Իy|sd5d\ƇsٰLZUoRNd)߁JvLEEŲ"fr jm_Eu)시iA(t +jraZ3' 3r9'.Ťwض PWAĸhI;,/\ˬe ҫ !U +e#AQ=Wcdo,0j472rX%V4׭c1ŗXqz{6Rb%q%M9yS{>^gSmaar~ +endstream +endobj +2487 0 obj +<< /D (section.6) /S /GoTo >> +endobj +2488 0 obj +<< /A 2723 0 R /Next 2724 0 R /Parent 6 0 R /Prev 2143 0 R /Title 2725 0 R >> +endobj +2489 0 obj + +endobj +2490 0 obj +<< /D (subsection.F.1) /S /GoTo >> +endobj +2491 0 obj + +endobj +2492 0 obj +<< /D (appendix.E) /S /GoTo >> +endobj +2493 0 obj +<< /A 2726 0 R /Next 2727 0 R /Parent 2153 0 R /Title 2728 0 R >> +endobj +2494 0 obj +<< /A 2729 0 R /Parent 2153 0 R /Prev 2730 0 R /Title 2731 0 R >> +endobj +2495 0 obj +<< /A 2732 0 R /Count -3 /First 2733 0 R /Last 2734 0 R /Next 2153 0 R /Parent 6 0 R /Prev 2735 0 R /Title 2736 0 R >> +endobj +2496 0 obj + +endobj +2497 0 obj +<< /Filter /FlateDecode /Length1 1327 /Length2 1122 /Length3 0 /Length 1864 >> +stream +xڵS PW"Gq>WCe{KaCzz86!Q1P(DI\!d BX(W"V AIjk}{?憠[71 Y{H$BJ F!d +P +C3)G +)Rt@D8vvA<;'`y"AT$"eARH4VJ@A5`gg@.S`\AAƁRrV_㋋X ZHDZd7fa[rA@UE>A"ZJQ2- +a:r6vWB%,t0 {N0Ĩ1H,3*)A 0#5"M@_[LX=PoOK5ݝHN\`p3pWX.HbZ%-V'Melb@BEtIIH,FB%Θb/ƐW`lˬ{TD_ZC0RU쥼0d.k0odB~T_J"7<{ r>PJ$!&G]!1G9*odO EEq8"-/11#0#qp0@id$ӹ, SPJ@$j`V(dlE +ot҉>$#"Fhk+_NW&r'>'}ڠ'a̎ +ǯ {W }N6u)3q@񶮉-L_غ|gǙs"wGeY6LAWkB9m>d¯=mh@mc/q&t3--yk8Z>^?i5{]|ԥ3F=Z&w3*> +ZB_pnwx; !Ee?{gt#l_mjRRHj '5{fup0C`ED?iW=]Zu I⩺ɛG%VzRb՟:tFz6J:E}OӲHuݠQPseD$^CρoJXEi7]ω+H;Wv'J@An`kW,ʚjnɛ >r٦z脸JMi3;|vbAIRK'V/-W#{FzT +sb:Վg7 M-'P'ȱp?ViY1ok(]>~s}ݚ{WB\; +7y<:7.Œ?}Q򘊱l`i|~v?ˣՅ6/џZ~:u>k~bO[\e60^쯖Pv I㢕]֥]M>viaVeQsYCe᧍ JaI 27(J}#zk;g>SpOV9!i8@L7d#=棜i,ƀo\aӷ?R8®=[-kJi]/7d%r]R0JY'swT%8vk%6p0O)wz]~-nTpf} JlUVhW,?L +endstream +endobj +2498 0 obj +<< /Filter /FlateDecode /Length1 1630 /Length2 17028 /Length3 0 /Length 17854 >> +stream +xڬce]%vDFdyöm۶m۶m۶m۶W]=_q{5b|9Ej~#[c['jz:/ CL,`dnk#dP560A[;wsS3'_rJJ`_OGsSc+[;kc׎'3c1@PVN]\F@&* 51v!@ј`b`hkcdOj4G;cCnnv@T;cksGǿsG8m nb/AvwX::9:9FN'3}b;&w:ҿ4Q'}sG? FvVc%s0 gGsT@p06w02vtKg#{};;+yk`hleBC7ئ60-v#g\U f}#[+w ߐ.5# i[skCz+q\4ns_w[?d77ߞPӰj(bfl$gdh0ѷ[ٕmmv_PL3216_id)_{N1 *mk0 غ"GoФ&=]6SnM]"'CHr@3M.D9%YgfGɽ&B ؃DCA\̯RR_. ]ؕ<6r8Yֆ* if!ԓWޯƚ|g 9ʫINB;a6/w#jٱrEJl;b|\&LQE'Cv}8Ӓ>?7#sUjj}N1(Lϔz5Z׷}rV-ljl4K,K$]_T2]xw z5kOgx.|HC|u@A93aU9̯y{YUد.0yN||ث$1]k}( șxí!ê}x /!ON{!IJ8MwjKN\jU4MbBրeؤA=fJB%1͑y zDh߉<cԌwFU.R +GvE5x9ѧ\ +HLD?O#υ騩?xF msC+fhWd,3K!݌(;i[lή) +b';(;3YQX6~f|Rޘ)@lp _VT zb>Dpe8,>MSܚ}8"Y [*jr iϠ߱äQskL4klN3y8$$); !]( `|>I .̨Qa@yP@i^saϚG_a+ +9SvQBFKzsJ 1`a-VfX(oN[21eX*3k}|t?1\QGrxQPM=yIl̹C?]Y1\}ZRpw؀gwgGV 0z6(QwS4H#GcB+ƂǴkh.`yk6}ԑ¡Yi4 Py+ ڽL8t] #<7M>WtY>'k,aIg6ROm5=Hvь`W+H!c1 Uf3WU+껩.Fhtۮ`4BILH&q&Ya8UZD;+q鬃Ef +Jٯ4d)D6CreoW>f}T\%nA|:LDkMľ!Z|6^ {L0M}Owgeth9fu8e#)uo. w qr9h*R05cfjӘIӥPU}I!/ι0cb)c-j "vc=}(nINnRօ뾴O6K,y󽰪5sJ,W' +A,FƜbU1ˢTLiNh-Mhqۀ0BYIdm$Z~~b_׏- XM*c `G Lm;,x4Z;{k"nm*]k.9P}œQʒ 7.ڇ +뉩Ύ,(,غi|_&̆Taǵ,\M7˴ZlޏB 79F6`'Ro17l1NvDo[)䓕޵BVMm31 +Bb|; +6vU!~[n~"f$fƎ13g!sddex$<\YdGɘ u|!"(04ؒst Z1{(g<]:wR%ӏݴ NhL|DG/5\ۮwQ0>.b9(gkE^Ɋ}gb|q@駬YSd@\SJx\Qِ *?`Xx &=@Sm;7y/$e[sfB95Y2dmS1'Cb醼 G&]m,:_@CE֗ჷl*6=\SAgD`g,X^7_%SSځ7طK?F"A8 +avApu*ۙ +`?YKP(P@6.z/js_VRN;85sVpV%H5 FM4~"c$iWrumhbL]C`+χυ?7uċ* jf~yjFUP<:"(+c҈s ݜ{9\`r5?,Ә-lLj bQ}j p,KC`T/{Qlsп H^G7I3 HB0 ~U4[ C#LQbQx|@@E PhmHa#?Fgjv3w ?lQ]+y@*\|pD;gm=j|#̓cqctI4VOv^bߝ/K;ːk}2&eY}Nꬓp@OV4tZU;CɵܱRf{Tc*!K6~hsi=-6W@PI5wa᳅H,H?9?]1P^ r =v[|6DN#w#oWhhPӝG>ELk'P07n2J^TJqCi13r1(rj9DM>QB#Y3 +qJ}/01@3i'kЗ)i}$9Ͻ>ۈx0DieF\gJ0$>b<JE"'b=1=I&Xn*^z-Ё4/\\;G !s@-sgv䔝JImtW$rO^k~A(N)Lr:8 ::8UeI5=6P7IsK֌h$ + 28z"fv!2|gΑ_MśK=@ .,I_%2 /y'?C\{CAot&dCbpXga`h@~Qhq ?[{P7<4%%|2vŎ8{y+*it&(}w41Y[#!.R  +X#1cC(N8H$vQR")OJ2 q3Bz ,"t!U6ߵR6?ֻ?YCyLneWÔDmU*x6r9)k{|"OF㝔Ff˲x溥gABQ:k@- wQz8ȨȄQ @sޞE([u{;S0P(`VJ?PA๫# AmD3KDl`J6,:>f,Dk>*H*D[7J1\uyTFDE8w#I|$jb +8Ȃ2B<\EF״H['RHΖ>_o#l1Wy@. `1L4Z|^' gp{A2@:v +螪Րe1ܙke 8ORkdY$;$.GACA-+ob'Jt3uݗ#o|9S=`5f>i>f,"q &y49'lq;̱W'#wbt.x7},rtޖ$1-lMlMXZY?~ctI%5M`'V.Ͱhi/ @qG+dp +2]AgTMxA44G5&`@<&dk}/ Z OFDStyHK<:2v/и +'KT\={:+CВ=%<9i>o0$jER)]P˾QF$}gϮ$qh\%$&*:1Elђ +UOOy"1rκɄT~^$5,r|/~gyz[[\@uY-U]@W-v7)kP~zUbMX rPm~˷)f 2.21R\I_E⡥Ǵ;R0+-K~m/ZfƮg7<`@ +dYiSrf@l@+ҽ>2a UeGclȒUv:` Én]}b!'mcXŤ$|>_XstG146w4y@m 1eب 8ByJkSħ82tQ~a/Y +Qʧ3 *z|kE4P5\R)3zUN&nhd(gCKjqLo(_2NHhGj/t;X$|6 \jriEHykz"Bk-F扽7RdxvI4EfV#,BٞzO[I>74:VG̪![%5@b$/ʈТܰ: 6`S +R&F& MvKw_ +9iz} +PYxÒqPL 6uk4dop8eTsK\Z@ +94.P&¶ @yYt1BW ۔k2Nl%ČP{m+ +uR91|5s4CO~5ɸ;o,c*:~&2vu,e7B!rD[nO-z8Xʞ+\9W"ɊS {b` Hyq1O-Rrʑ0W];p($a. m<jƎ,X[= '/M]`WV7{CY,ݼ*1-|y-9v|'8f;?^ 7Ʃe7T/q{YXgU];julկeӰ)MGU)/ҕf]8faͦ,=P)ۨx23 +}*x M1;91 \<#VFi+r Z<^\OMޡp~LΥ0P}fTjV A5&$ʼ̏ R?81hfLr-vt;Ic>ew_g~Oj&͊1-Et[ƽT0\G#>dY7aUZn`ۀ%Y Νu\Np%9-_ȍ/-llѢ⫱'鴧HҢ 1G +iX!֨۟b/fr>5Ո{`T4}pҮ>!j>ITWj=zZ8`H!4td$e<I?+0&n8pEl|o=<+T"d(ƦQ@ӅWSk;n`&ϸY,x-RܼA1(g=:U0B]uBYSPc $ɰ/h +WR>a X 3i'bet2OtIGsx_M@!_8c3^\J]Վ <%ԓ"wz`;ՙaLj3tC|Cykc#]r?^`N/"3}$Fg˧ԕe7fndS~t).h.b.f B>;5<-uɅ&}.xUrԁ'n( ¼rr;E*\! +\P^Hۏ<ƁylNϔI#KyF"n|)6P&3Xeed _9i,D*CHYE2c?B!K۸wߤӦJ@jrڈDeyZG|U3gL`.qnwQaoWc]\% DZJ'4\I \U Y h~zw9Y>(T)-c ᗞi!Ub6blR&Pgӷ{UZy6 !GWOiD,F'.#(25tUGE>: AK{g3`Q,QkH\ev1'7wOǸ;ɦjB\47SڭPw*{S;I%s!pMEgˎ(@IJ[jRq=þE}!$%%tSbPUm1d b%Dw"̎UKv˛pzLswb,r\?:VQ4M~syu*ޫïڳ7^jމ Ԣiɦ Ś0pAOQ|=e%fT ǐ:EXJx XT\(*X˾nH`3kʥU?U4'mZLYiXbIז[gTGP=ˎ#Gܩp~X6ޟ#IT%ʍ^!I,ahy<ٴE^ZtJ! +0=`(&c6IJRm%YWo +^5+,{_ֵ?P4oȼ uiO&r6A_Hy@:Ap6ۑ -p49hD}4q8zY(4g  ^c?G2QjFR]Xm9*ލiR~qӛÂCY +W۝#NCf&yv>:V?ɬ_ZuPfɒ=t?ʤTGOuQK>ns4ŸhŤKIPIσ\qj)VMf4΄Tx#gؚAdpLӇMe,Kc@,%)}@jq?@w(ɦE[G*4ϑ.aa?v5/W m෯ʊ {INserj}9~SǟM$)@Ya+)uYRg#=Gv}lN]/<$r"Xh- MR5'ȝQ%^ꌿݜΫ:)&#{/(Ϩmb7AN5HN)" &UNydHʒ\¢uQQ+P\r ά+08_w3Elp{Yפhuf!.7//@e GySۉ|{c i\I=2]5P )^2Ǵ DDظgTg ~nTۄuvqk)M&JwJ1->тH­dؗE0˻%WIdPF=JB"o )%y\¯T-DnWMj1Ͱb?11cXUww(wlq/FVV{@cYOq+U'{0c4;@2K`ӒyyQJDm53@gI5Tbh&]7۸l^t&Im8^ } KcKݤ֍_D7i.uXAFsû7S|4`лI$ďދyۼq"v+իXBIǸJ +R04]BK!VI 60(մ&9f/b{\8P@VP ' R2na (h dJӝ-jqDx6 +ۂJvc4V-?ל2h'LI^4ijsYOy? mMpa1 /T 78WY[ܸk3G ˶E/Jk(&+ޓ,}=31T9dVF0y55U2ȌbnڤۚJP5o(bowҋG֠PݧeTB;] Kk8oMa#Hte+I3%!c6A#_S4.;^1v:S^~C +j4)jia7LJJ\Pb4*o#+qhpptzҍ5q%<)j ^cZHT30Eb5H纗^ex(lMrMXb7 +$Ct9ǁk2 XZ⢒-l73,SfmYAa+hg~[ (j= qŠi#cɲδT DS?ƹ҉Y> 'ZБ#Ef.Ͼ.=FRL{-egOb2VOf7b/{ f~j 2[1Ր{`b`tR!r~8:$CT_gV#Ayę62Jn |UKK0%ئΰ,p38d)畴t.ѥ<͐:&!%־#3iަF:LܘBGcAps2%vy\I*_"zI-)xvGVH*$fϬ7gߡaU mwŐ9^,$?gӄp$+#ʩ`y'l*e4%YUw9]9I}Ѵ6FRmȵT3B [qW=)D +n384Qe鴍;J=uE,Q_U$~|RWan)팤߯K93bXj%&7@|Hʑ^Y^?yA9`qhpP䔤lEArb%!OP&ըMފr:|H%3½!~Eĥ ҄ ߷R$͑6W+'.X5݃ +pvJjqV9ؙċPG q-R]ѺciݛD*u^bdgg)Rt4[ǟilLxZEV@`6{rD+Zi[fgLB/ZlF|QWb*u +eĔjB&_D]HwU~RsܠHb`F֊B }(ik9.3jKv,•ou4,L9POwI1\W01 ITErGu0U蚙8Hx_PFJljlA[rQ$bȜ`N6Bi Otc1;'~n."4QY[l?X㘋Y64B LXzp6 ͌FC!0Mnj4|sӳaS7hen oYi6)/QR|& ?÷/TA$r9!ܺA`P5EiB5_F*WsڹGbI졤Oi>=Hωj }*}ffK|ҥ"5utOr6F6Ht-zK}FHJlTL*"N6_A, 5/c'=>~ a[\dk$je8mk ?{r]յT7Y8+g= ՙQd RG9pA=j~@N`NF!R!t 2܁>VX$tBJԦjvʇcjn%Z'[k$+q:}-0J7< mS@RV{A"/mұ82qϼ4xC!/$P)x5bz; CC"5W#e6׭hl+y^_fvSL%Q>oD!.sqAد6"܏&h)K9y0yB|$ST :2w3/$^e a#< +K5T3=H~{2 Q4WZ#9Gmn  0q0 /Tw 4QGf8x .N ͪԴF2j;{*Bٟ.z:$ ًQ %5r& +44E9 Bv5 6qrf'~۫;Dw5!$XNv<_jO/n)ң56+fhpS-i@ ]ކۚi')J~NBN&TjNEB~o0n8 L)gZj~Qڷ +;H\ԹN$HltFy[U}M!_ Xs + E e%',x%$tV,ќd~۫Q1i@9Uڤ?݃ ۆj6 r +6 +(KJE a4/тPN4N'f7-jg4G\^7 :١d9gv{3?&% K (.BJ騧9ti&7 +h|P!)и-sgx5cXV.T +)[vk^r3.Ka :ɹ:CkL;B=@<鍔59?ns bXE젼X?Z֑}Ad;fjo)#P@­^V)u_-720Ǖ}kף\D!qnRF *b YtuC.BޚSlt?og_:2l}y%! XbBW:!-^m_`Th0jƅ蛑[ v^MAR&2( X '\ /㢗bBAaC(8RQ H4*? &ܣ:{Fگ)vm>Pk]p?ahF- Y /!NJbEG26^1M/ճ|LTThݺE^vY>*rm^*O b`YwOƪJ'&}L +Wɾ?[di\%T/buW@ %dw{)9 +5lC Zόj,L$d5,BֿJZeuJ<$/6qudVG9oيCZLC^Քc_QqxBǝA#j[ +Pg+L5L$D/KWai5f_=ƲԚٹؾ14ncg{h*eQg$Q`@96tZC]niǻc';տWH'jCІCP`MJ.<\RϱcO7j`<7ImGSԺޔu6 W9 i={n_kl73JGȢH qfgxt :C:;ZL!K,r١MTK7!O4pC+:GbSeN# 5!1'j萟EZW<ƥ]R&ʡ{UEl<٢rC4"#fcPeDO/5%?kfMȜ‹6S@ px+m gsj-?g -Lb 8HQ AOlz.̭>-UCT +#18pDI!Atش59t"-%ɢU\%MW-KnZͽ#kdRD1Sg~b +\ѐE1FSxuut'ص|k/sT#Tw*fƳlwU|(3у2ӭkR%+1 ;Z9n wF% +"}f k,N9u̱%H?|Ǽa0n~K\1Ѯ +ViM}D{p}и\n` 4*CZ[WZI*P$|}E/yř.5rSAY:KhViS4nĞ u_bP[[i>D'*6= +grJ4(bQPRI.!= r:qy`ZdVk4:4ꍃ kYH,Sx]4 "Ƥo'rEx~ @Q+2! Y݄>&nk8@r5UgDUX?fI\\f>ZUoQb~EqeNlPj+wat:tq':xDKyн#w+2?=BM}>wa +SEB;;1w#˜g3XQaAmh|"b.?S¯ր\b$SHb?$@3@yǘ&-U>I/jM1&τI! rJ{[1[H?I6k8|`έCn/nx^M#BN"YŻ⥼Y6( 6;1>9%)nʮ;ôRg)΋֎#R;+kBg\S} +Kl)Ú7-8 /nN ݻcUD^R7d쾘K3 vF@LWᇗ!I&Rd*&q`ѻ\oUS aJ %p@uۜ.";=xY@9 + b9(la"v׋ɷ7.۸vlё6*vd^lڔmIzSԵ6 ɢ{0{SyZ{A,Z"= +{ w]ΰz[mqkN0!vo+yC +endstream +endobj +2499 0 obj +<< /Filter /FlateDecode /N 3 /Length 2574 >> +stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km +endstream +endobj +2500 0 obj +[ 2737 0 R ] +endobj +2501 0 obj +<< /Filter /FlateDecode /Length 265 >> +stream +H\j0y9DXtr>rJjZl|ue\V7.$mՅ\vr_u!F^UC^^Ja[;{cKmCm +endstream +endobj +2502 0 obj +[ 2738 0 R ] +endobj +2503 0 obj +<< /Filter /FlateDecode /Length 236 >> +stream +H\Pj0+lj %CԒX}RH  `vK ?(L[5ldFLEG!Qy|0:`rt +endstream +endobj +2504 0 obj +[ 2739 0 R ] +endobj +2505 0 obj +<< /Filter /FlateDecode /Length 326 >> +stream +H\͊0O1P4#[k[`+1D{7_I2Ey,M;RzUHMk㡿9tkk"n8+UW(4ܕ,OhqQ4\iUTK?ܱ)<'͍_襶uU|;N+9Y4X0> +stream +H\j0 ~ +CqN!PZ +9F6sOB O|ז|v`簰Eq +im'[SKCPu S9 + =~gi;8!%(i ^M|3ةus|}s4Ј.oRBr{7ݥz}{ efɓwl> +stream +H\j >w&M%˖}ThT9;e P1}1=w&֙_FpU5Ӎg'q- ΍-j.)np8?h0Z7k?8K @J08ы +jFYv mNB*a71*7!kJ%:0otEB4O2S]Z!ӣ(a@{|Hr=ux?hH?+Yw +endstream +endobj +2510 0 obj +[ 2742 0 R ] +endobj +2511 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +HlPj0+b@ |胺YZZ|w-).H0;^5ucMj1Bo89(cY&@o(jqqllXQ#raYvU64Ig9"$;4xi~+ ζe8y0H; +%W|Su!UgT-LHS]嗟1 MZg%p?D! ɷx;Z`_z +endstream +endobj +2512 0 obj +<< /Ascent 1271 /CapHeight 662 /Descent -428 /Flags 32 /FontBBox [ -203 -428 1700 1271 ] /FontFile2 2743 0 R /FontName /PMYFND+Times-Roman /FontStretch /Normal /FontWeight 400 /ItalicAngle 0 /StemV 102 /Type /FontDescriptor /XHeight 454 >> +endobj +2513 0 obj +<< /Ascent 1271 /CapHeight 662 /Descent -428 /Flags 32 /FontBBox [ -203 -428 1700 1271 ] /FontFile2 2744 0 R /FontName /PMYFND+Times-Roman /FontStretch /Normal /FontWeight 400 /ItalicAngle 0 /StemV 102 /Type /FontDescriptor /XHeight 454 >> +endobj +2514 0 obj +<< /BaseFont /TUTFAU+TimesNewRomanPS-BoldMT /CIDSystemInfo 2745 0 R /CIDToGIDMap /Identity /DW 777 /FontDescriptor 2746 0 R /Subtype /CIDFontType2 /Type /Font /W [ 3 [ 250 ] 9 [ 833 ] 11 16 333 17 [ 250 277 ] 36 [ 722 ] 38 39 722 40 [ 666 610 777 ] 44 [ 389 ] 47 [ 666 943 ] 50 [ 777 610 ] 53 [ 722 556 666 ] 56 57 722 58 [ 1000 ] 68 [ 500 556 443 556 443 333 ] 74 [ 500 556 277 ] 78 [ 556 277 833 ] 81 [ 556 500 ] 83 [ 556 ] 85 [ 443 389 333 556 500 722 500 500 ] ] >> +endobj +2515 0 obj +<< /Filter /FlateDecode /Length 435 >> +stream +x]j0y +-EtM[ba>c+D6ۏ/t` 6|H+byلaV8v[?O9v^aV7N"o/7a?ժNs~{U|!zx{?ìʦQߧhU6}ZC*2yUgҍ?Mmc~*Ө[zQwۘ봽,ɴ, =Bkh*^zTL,!// $LLgg//BZ-P Lpq&88i 4gA`P(, +A8˩:ay!bK_%K.9$dpd282 BG!#A SߓѝcLC0Ou'u'_3 +endstream +endobj +2516 0 obj +<< /Filter /FlateDecode /Length1 3124 /Length2 30070 /Length3 0 /Length 31784 >> +stream +xڴuTj +HwHצ;{nF:%% ns~s.lyg7XPj0Ỳ W&6fV~Ǥr3u3r"RQI8M]m@@~5@lʇH:J @ jdКTA.Lf.`5H^"rrv僃闧_ř [@Y m huZRu-U :fc 7GGqԒaH)kJڌ- _?5`VeMWJRbRl,r܁.6575RKg_֮,,Vn. g+fGiZ۸<@ζ3Wa,tWO6@EҠRO.@XVQUU`oj +t0u0L4$ܜP0.gf`gߎ:xQmrpqqu#`icWl))IKih2)ρI _ֿI*G`W$mur9{wm@>/寺[9h98$,B-X@'ܚWf嗘\?G#gc  n@??Fl< sW𘃷 +_,A`&SM{`Z"(\@.O,i7;;eS{ *_3S{;? c)2?:iO_5[,j +{1+; #~$;Ȃ_:4:]\<.XTT$;/YI9,l\SggS/DVsq|lkJ, W\_7E7HF߈"aHFl߈"qX~#No(F`.JosQ\~#0E7s\~#0o8?rN_rWoc[lb.v.H9S2s65ꖮOV+b[8g8;9`aS? 8Vߜ3Ak5/Ϳ3D|x곂z6 + O&Np8i ~ZjW:@s/ sз-f*`W'Bɚ"ē"fSe SJuB^S,DM Q>i3kg+-V|$;+-ݑAt$s>"ܠkG<[kg;LetnnHןŚ}3) $׃ǐ^sv^9F2ahxmMoo[Jw2.TU>(p2k %, 7[Wc8߇}(q Qo{:IMJN5_JT0aar'ra7I7`֢7·Da0⧚nÚREe}%%˔qte覙?ID@ PyդݎM{tݲ5,$XNH&uHTw7_~"YVP"ΟY}+ͪ ɴS#Wu:K[`2(;v >Y5ăQOѵQF^9I_?pvol2GS)ilntNNNLX_^2.i|ݤt 7-ӻn|}_n)`b!.e=zl= 2pe&y6a6K_BB k6hK欤E{2")̣ɜ_꾵};oG%X +*&f4R_qs ˬn:?_ͺ_XLJoT/G$7@[G(DWTq!e[}E@x-ف@ +ظ03NN ^3nu8Y>^{dw +(mLҧ$Tؕ%:L߰wGpWiqYgW:\ȶ.> z&o=0R@V~?Jܡ rlqB#mKФ +oq0dJKg +FUHcL@4#e|gx ~W\RF*AR@kɜu*S1GY7*|"ɞu7#/]KJW=a&rSXR0E +v1s"w|@lY &{3e?Lט`;h*60h?|b#x8;/XDjrg_>-tSݐpnir4s }'Ko{:φ'+2oF;%=gq]\&(P:R0<|{i^F3Rk|bذFoݜM*bs'O+2R`fjzJќ{يNQǭeB.+DP\8^ۻ@.Hkz3VN0ZUu!G:OBcV +'woCew +otv}ur%q2*36qg.wI3z &7%;dΚLDӏf~e ̭{@G~,5 8;H|9%gYP5} +DhCv"$T +zWyml«m5Lu>9O:-F;+Y:І8c0oɠc"nZ&B" V|_CU4^ٌ)^o& !T[/{I\*< D"hԸYu,4>T-I!xr au*Yx8($pt|ƕF6"~a)FwJS*Jm +H=Hl {3o'k[lS ?ofj$y,^H#nX @h(XI;صeZS86D'7V\ >N,.]VvKl(-׀O}omg[* +mϙdA#uG/^7LD7vCU,LU襬dڠ9afB +6>Z@ %ttodWëg` h2AVhIDdPv||4.Rf1 ynӕ M_ŋvWQmKz7En-yp|2QStnU*A׾:z{]inqzDo}AFEm270S|Ek޲ ʤ/3()vbi${f/ʼn@W+OR$pء] 8Ҕ*ӟ}ЙԎ5k5) +zumkN^ENrշ~tOmVDcf\EYn0|}NFu4CtW~ pqu$jL:]:6%Zt.u +mսe&t^vjV51Aul%O|~8|D3#. >'; g%[zY ҈Ntrj- wXBŻ0\<ɿgĈgʿnFfX/nU bYi3]mvP:NYwiAǼ4Y~+rWvsDveFz1.Ƽ'BG*[,*>]S4l9S=iqpa1#]`UnT cվIU=ƀ)6ت@};˜dޭ%6 EpFńEښj|>DŽ0["7FNI)+HA uƵ̂Iw򄯃;df-cY烻= nq٨\="?5DKSkQ}4iq<=V9G)86M >Q\:M'WnwTgJrC3~66Y%bm2c*q^9?3SH;A#%A݈ ѝj};TI[IxtTp3lX^ϟQЏ9na)7_}0,!aўam%ضKsp4 c p$L| v@V#KS}W($I.ʖsB|w'(/E×wWacf$wcrs'rmŇx+e⹮Ւ sp FHcrf+ӊj:жq ˆƎbLyS=28aa#؄'>1‡;X._;m"΋) +0\{)UTdF&I)lg +ΰ`>`tQ4}s>4sÁ@{BWǮyMFQ@5%tF/9zW+Y65ŵt"dxk 6tzl!D;o B+Ӑ0A<KAqOR=>XZ[(bk}cqA7;S;/7Li] bF&8*lUZ=oi]]>hY&'?H`d yjЃݾ֫D6xMhG黙:e+2uXHk')rb:# n iyHE ւ"况IՒ룁Iǻ,IiSq8d}OS+ahmI;^=a;в%2ˢŲ~n83ݥNXi{Ğ} m0KXocJi#"ZE n3&=Q8L?@ڤn!`%a,pGB_=iMz~-FӕB&G蒽/97xHg3spfèO-s񮲦\jA/J7YLw})XJUD*F:4x{%^h40PQ\bUmB1"]90@CUf靚Gd@׃UԸF3ǃ0*ȣt]9ڷi\{NGi1I/A;؜ef5%z'|ڌDg[7 +v O|zH:|F leNS[( +KhzaQl˳}sɘ]udb𓕥 @QҎnHb-3aj'+˘;K|unEH$ړqDᢒ[bw~I%B^K|7X"tc%}t1fdA!Ġԏ?$4}fDeM + +ee_#hDG7@9.d|iO"W !ȩ$=atN×gʞ鳾*3 +i]TaĚ\Z$ n~NfMh+ +8YIOi2ܩjwJ{Pg;dc_Q^*"ʘg0 NɝZI#K3Z0%v=,P7 T)@Er$vR&jh!,1]:yKdqU:Ŝ4p:~zs٬oB]aPI IN4Kr"aI4[$@Dhw~mw>:AgZCq{G)$]6>z?cfL5;{Cs! ȿ\(Qэ18hߢ]/t:^}V,ߒkit=l 6~ ']+)wL +o xqe`e1zЁ;DŽb "_bAApx@{Bd槵Y)b\ 9 +襆M?h=P*㯬V71n OL7^qP4Ðw13x>'UƯf}^/4a+(ntz\ZXjRU$8*}c Yu=J-ҩgaMZl[V>^>"Yv,7ѪxJ<Ӄp\d^.uo8kņ x0nTSܚ_V- Ԑl8LW7~fsfgNJreDXo4SjaT S%i"6`-*q[;&/'D^K6ݓA4-'56/%U}ԋ3x *w2,}Mp;h貰W20 BϢK1mlc)ZïJLd6( YP> 1)i wl4wamt&en{Uap@/=v,-mFI%wTW3kWĹM9zs]iO?OS`N z!0C2ϵO4i uߗ4:O882AA- qzއ$48fBt(8Gd#͍'+E[ Qyڊo$ | xa#(83X!Yw!jrsQǎwOB^0~\v+o ^?Q{^IGߗAhK5Rr'Xo [Grn5Ckߖ{e<BvS~TB9n^ *hb 0[70C\63,ȕ +~Ndy 퍏u ,C9!ҩߟQ3"y1^H! z{= ̻Kehm.D*Fe׸c+ -P쟌2,J R"aw Tt,K?THk|~T2U @rk-Y6jx#`;#׀{o~vI(HHE{A@rI`i>WDhɝvݫ;PGàlFv_Y! >E t:^o025 'q=E֕==ʧsg<7Y-Ue~“VYN6=M6Lń\+*+' K%'KX(v\g! v +bF缀 fW]jj˼甦!(ZL2,]ɘ?>kϗ2j۱8In޴ V)BQ~^Xp;{E3lԩ-żX +j!~fL܅Fo V?"&i'P-]}Xg9Ou6.N +h@a} 8SWkSɸд4Vp +`dyo9Kά&׽x)`Zڳ8$ ZvpVL9;R!L03XT\:c` %5#nh&}J/^bbVp.\N- WI4MGNeUxhs5ˁO,7dȼ*Uybgh,|)췤[k缒4M:Wg AqJvhy,>sf Ȃ 㙲d25bsBc-1rcjٮMN@mK,b/9^©%nn[ wOxWg[Q^5<@=Y|ڣuY9i`7qܶ[ nx[hJ{ŒAU7~iŌL]W;PUfսr^5fX_FP>~HRU\٩4y+hNHر`_Q; rY "66#U-وÉQJ{v>җBOFMb_>t𐼼\V(=zÑ=`1/D:+ +d>3I]MK{D6 E>ܞl?^%uPI7G"8u3 T+vk@rӄ|hҿ~߆quUSГyྤU0ٙϤ"{]SxCk$ar->xt~Bob +M{oXs}zE"0.c$k8d2U-C(.嘄 xl$$zt47đs$؏l1%M3i4r hezyQHRq:s:h L,Rs(x|)bZa."CJE1A}:\վI\h] y85`hq"eS ]/5KqRbD=TgG-oh()m6ާ.|VTI^=v򨄪-:+4_7rQ,iL;0j}N|icUs]P2\-n?jY h (}iܣSؒUDZy5 ѧϖQ%\,m$Վブ[_"@3g̊]P<,%2X6 nndu{ߌ.٥E$0 m9jK0uO'i'̸08[9D9}]JYg-cӤ7 Is D'G#6Uv ,G>m֕B!1GyxL:0:,yOpuR_ 4 sɪ jP8?sk[ArNe-MK\sz*XL`nFXޢ8'7G. Ndf܌6^-kN +,A`K;k8]Wc2&Kt_/7O)gP[^} +| +Y#AUJ?vޑx_:N)(>cEsPFT@y:BKD 3 \y +C)&݉>_1Yv+3M $]’1#)݁Vj'巡Κ$=0}DO"^b?rs}B* +4b1ȻeYQvH|RQI'FQta/}0#*UTrLP>&^hYﻗ ' hcDlZgN$ߍ/-qkHiY|Ňƒ#Y^2C:=#~ n~x*d\SRea45he3z𔒔OwBRS$V'&> ky>nyvhct-PV\/ji| 30!;QCںdՄ"O7G8M_tнHaa)ybVeW/[ځ:p5oBvkM9vQTS0@{AZw)f)zé(-ʺEFCL9+]6_χ`L   +CcLqOA +;9W9fZ!cO`Óq,1#X[C|MY7yedBn%d1|y\-kuBة3e C ("ŦOHH -s(׫鹖6#>ESnQZ@"GT^~7rŖdn\]RgY'>ɓ4_-L+&J^jAG`JIٵ#uO@Ku\Q̆%uA}s4Ӧ~z\VG +F|k#MeX.u6[pK_p~{]5v"UyP-ScShwfun +f֛N=ȵPt;&#) x-Hb1kr( +x j胲VsnjD@*q+ɖꟽvO97*s CZl*%QEfGC*-Dijҥ{%yv[~p{o&}Njg]D#9GMmh.ؼ7 OotGL-:DФ*1W}`WgCN#&9e05d6qk +Ot {tK Ifz-~tYQ +ز3ޑF|iY +;S:RD8KuְWƇXᕭl_:s {mY^4lk="Y&vOYGN!,5# Er5c4](lA;}*~|Tb_x4|y7,džsi*hH;~5Ask ^UcQP{ι#y1GqW/i +,ΏT4<6/rqk^bwG Vbd1.֪PH%*ϝөЦeЗJfi,=^>3 @<:%}TC6 gߠGʨ]:z]V_B4vdc>S%J PmVyiÜYe_^ 4ǁ5hB,h[ +=cNQ,Fc|cʞJn*Z[X{Ajp̝(o2Xﴆv>Uխ 泍5E/Fh`?1r&Fl۞dx;WtoY2躄Zs[~ J _ uvJ kH$#"4`,opOz@EzftWTLn(pR^ߓOA6I}e?jl%܎ƇzEIľ2^heIn #hE?noKrPZ.REgmMoА2I+Te #]I^,6PՈ7gu'}4I!P%gzX'.t䀹E%&s[5y0Un3p28~C GMq}w&Kdnh w +Q}A{c^(CUc"{7*7!B4M|VONcF(O9ʸi5A]pC\Z=V;WNN)|c^UqJTuo7WӿkB +PML5٤i~;4wd@p{2!4@ǢI+|1p~ :CdU#NJdÅPH+j`N6,L:旦GGmi_Ԟ#ajX#Hwt)/HG)(pKn/9^LɠZ̓vcn ӣG&rBBřSzhW"<,jDN?B|etJh ` $vvu~hCž G$87ڑZpmpa:$O;(--DJ3ؼ7 2AQnJK@[AIsn|Fc;QE+AƏT9ЉP!S@_5Xxirާ!غv4 ^k`XR12< S8-HЯ?mj o,2pz8y y=\Lmn9MbŖP0Uc+-ʹ4>|o&ȋa*#L5>ɾhZ8 @^iv&>U`q?d?y/wE^37!*lfo!hJp\IWfXԳ7|FU"z$V|H@J*C1-n$=)>tHOn'=8wuy1ˋ"(r } &BњNJ cj׽;`A(i暐Lߢլ79k3NrmNKKVp'Ö1;1V2+c 0&؛ZwkXC nTV?u;s8J8|IQ}iDZW&}; eAeXOzϥ"$ ;DP}h, (I"q LVnbd+c}w@?$ܙ]h +Q&tJ$uiW'$-SUYwej`GtXlopYz]Xu͂F0Tzl4y^kdʳ +} H$F +fEx)NŎt]`ڛ-rkcYL*f0?%'a:ŌTeeLg6Z=S8 HX>0Q3gHF{р̲Yy481XC5ðcYc@! 0&f@gmWF:v5;{I[ +Ecp֣$+*F1B "<k:9^ JuyQg^u2.1tږ96R ZRf4VHe*n ^6և+{wv7s.xox,Fz Yl`)?V.d胀f m+nfS^ 2]tpwJY<oqC0CIs}rCM?teXu?N\БIYf|ccWjOȾЧDCUduݯbX +ܵ6uuAѷߪV*]5۾/pza l Ma7Z@rΕ}zscIV\V%B?s4m%^irw!h&7,:ܘ mo y1"0wV6j sZlt܋,yo/?GaVCw>Fp(uK).V91"I&LOmxWOgy>s[;R}KEKqy4GEû?j;O9Ɓmfе`}o>,$Ds6 D;w ͧd +)* \ytLq9//\N򬛟i^! [/Ϧ%Zey^ero:9 AGj{Ĕ݈TLwjhqӞy"𯖌~S؉ v+V:C)kyA 8ǖ!qZd@`Ä0jA5ti!|zҊA 4|/߷G^+0} dGf4ٱVF7ZZY~dէ?eNТhnä9276€LKHɨM)=(F5I 3KFm|ǟa<=9}RbJʈB}9Tݞ {eOaFʖTq)_|33G>!0e˭['}nw5=cQJ\#hQR,ROD8|7dny{w1QV``}T!Y~"N>/(NAQ 2M^omfteeo/ˎh@>]O`#n)#<՟gZH\)KvR' I.u;ԑUz(TmBR)P˗=v=ol8~S:C;='Th? KT }X!_—zkV#j9JH44%Ns/"3k_Ɖ-2~T;tO.ݦR@VfhD&K%( ^*S&d8;R1Px}~bJOի~cE#K TwDrĺx^`sa80K|H*~|tAO+v|`>ߥ>EzlMT a>*3eCmpa0 < +1iR7=4ɦJ~hA[)U=:1/vsի}]Q޿֢\Q mU0/o^CY9"&ٯ&>&4ܳUO6إ"+]޺Pl/եp|$M͏NA]( buACBFDe'S wG`- .;kW+M +dr$t14>^TA64y ˟ ډ+w-XS-?S0_bDjNc͹Ptyu? 7DI^9S&^dQkPK[g!C +{ W-V$sCU1 w|?!|!*71w!!;G/D.6+\uPf*H'9}AN$5vAtD{YS<˗&2[F`F, +sMUBC,Qk!8KitR&fZh"=K9KS w&< + +<#I`!TSTS?پRa^RR-~c0 ţ\ÌoeӥpYcPci63vc}X`$X<}3uzz72LIW +9w(d,Kopd EFSbI ]r nNys34}Q8~{}1C =ApgRdv{smΟm^k-z58ְSk3ΰk$0C"бJ5e GR%Ld|r +[qt]!=*GPG0NlnIps4/V-s>/IOSp?LO؃ 7V #YטƴHoE9襭X{[!{3W<>LlbPG0\QMB3ݸ Խ%f&=;,2A65bA-T!ʖAW:l)wJ,gtK%C6N@X#-?$ă7(]ܳ|$ccWZT'lI_xpF3EEt,p2*OWS"z8yA$4v He +ӭ?>mb`*"G^a^bg4!d0@*,ùuc|{hﴼss61*26ݳ_v&:ޞG4PEXMv|dz"P~gY1[̵hBOמ,d@I/KƇ3*q[FQGM}W[R2YỏH86ңk*7[K50b&;谠{ .Cs3-3W$I`!PEqa Z!)'3h|o`ӕT̚/rr;}d330:}bScBMNӓ S֎ D<,XNyӏ_sax?yj_{&p藯1&< of'>GJawop3HIP)ԝgK#gtBUTwQLmbL][6U Y2" @e ȯ}ā1U۳^52e{t%-T 0F5^9bHR3=7\!3Ac+yKXZ`Nftm70ŠtZ{B[X#+h ")TVxO9;9XIOv\;L><-|e+utvD:Vo>;o("(xBjD{ I6BC}@|0$Ln.tڕ1{dW4tI,p pD?ICFL9>iQ6岄󨅐nEJ_!}t+:?UqS%Ϗ^F[h|0#&8|a;to¡o2>S&)shvPk9 ^ jpcU+buL(Roʩ(ykvISf졬HIZ&Om~mbO NdKSuUH%HhX;4(&CE^LL%iĕ7>am[',^X1I]tT|P6InD:7Gc#jH.mUZY\lSENW2a 1o]kߥꃼumz7 5ʀZL$r(ץhGKXr՚ ~-}l +,aFkE:J|룣 cP~ǭ!¤:uk`6` Jz9^ + +w}>"bq&hl,2M^ogZddJq>]RqÏk#Bepcw4-bxAᛐ jOCк^s&ax'ح,!k;k'Vy}AH 7yb6kR)o LMܶpƓgE5&fH?' +հuo @e/V&( 6n2B Wo[xKK.Cߗˇp9m?\!ZeuNؐ _8355|2*%ngRd/d1ίB)5E2緙9jwd>BI@ƻqGa߈6=g@Srd FI͜较(-t|uHr7-HS[K4:D/$ Xda-ħ ZJ"˄ + f:-FI?CzY[ꨆ%ڽ<: IRi =꣼mֈ@} +swmnLI˶nW +}A.SV ^1⠁FFqĎ!|6@W4\c L^Ĉ4ʺ|p%ӮR)}{-{7QNwϵU"732;bQg>I/J* b7܈=*tēRJ΅AUS` +a Dv3`twqNA&Բ$_;`.rKMP{,"iAKo +&cE'p +LNZ.aJ>QH`?@ST ո(,i JF9 G$|X+oQhg0nHz4h|x;'P`xX_e*xb ĺc pJ{+NzF3{%tN/.Gܳ,0cJ#Yr(}<A,,w\.;J8LZ塕mɱQqCҝ=m}<Ưi![rrőssAUV +GU&"q+-G#w.\Cx%c템o)rodx`ߜTm&)eU}53MIuۤ90oYfX4ݺd3`_:}Ƈ[/"j7im1͋_e:&,2w,g4&S#^"Iy;E#@Unl*([dWŖ5er=(oގ*:=Th7g *iuɘ?KF$0BSosyo9<L)Twǟ5t(H*Z+(忂ѷ\,> pqtC +@\ 6:Ra6 Gdwv*&9mdމ1`>OP/VFKi]:HdMD@W"lN,C IV}MfX鉫Y(8TX/0_ z߬T}nE^(k%Ё'8bDL M(As((.K;*3J# +QyX{H,1˅ mi;oa3a:%k`kq9DX2ך3ן9*= +Y08Bhy*a3Cf`o >+:ٺꃴy%c템H8t.2=woJSk1E[7Rýa +{8MsAO?12עLx- 0Y(kބF1JY6))|ta (%P-:A!\zSV7G_<|`pӦdtʚ5NARDp4k(6j%; +4HvzGY 0˃TI*E$ҫ`ZmcLeNCr H\[{r 'b26Ɂ:?H- ZT0YZ.o٬׳c\hh,NnOﯕR|kIm`9Cimm*Q6<ΈIPe=0ӛCR/xNE 3rpx]!X R8σ𵍘0^u%viN)>$~Ȯo 9a-:1FYAopTF[,|'`Y:&ڡB5[-K7Ŷ I(M/ŞZ8.fc'nex N2iSߥ14x߮ k0<iLȟ얐h/|q{RpԚ?2pwt땑 =^V0YB*Іu]9~ЦSf&^R:ͅ.^Oxz]zte1D@֡VPs$h'~sMϬTa!D 9[lL-5nϘXZ[COrI}$qR}1'.aZsN=QyƆfPpXK/e|`G7ۚ۝i>S^KCkMBBl!iߛ=T{XL~ܔuZS3HtuVnpf$)LE*>jn݃6arA*Ƴi@oH .|fC1bj;}()R".I Dk 5zOvY.@]#Erl'sDwsL?}9}oty 7s|lVFzvο\FTq"ŁcZRtp 0Ɂg`?X}jvl*kC_d/JsҶuby"Tk}2DFlzia\u7{丩XFn;ҚuH&ڤVTXqYgG|RqFRĀJ{Eޙo;e +ۖꈹ +箰 f$1#5qϊ14.u[+<}+%G2$(Zhc n +<4^ɶ WYYl@ ljUT_2.:S8 G'/QmOA2 UJ9!)>";_o^8EUw,Q]cTB6[nt*piI"f:%TYBRq 馧.h$yM$<)7<6xe䈔0qp: Pյm.3MqZaQB2A_cz@ӰAOxk' ga,a#v70ҦfW<3=W4-dá}2ʂ-P>'L +VkJ#΋ .w"Ӿ/E(RecDp7Zl8yW8+`-<)K֎P\C+xn55[_fGh%AD+bu["!R(Q`hsеh:r2u`"b̪h#R{|zKhfO#ء(R {y`ӀƑtz}}fJgc>7Zvd\Qlx *lT35kbb#6ybG-[GfG0ttB{ſQ'{l2AeY=# VR~]3n8aR~Fj+FDRmn ԛ+vAm <L*Dګ(_ G'^PPr;ZM´2w 쬈D}!lҠ6.`Y = I5VZ&V,FJM',>ˁ7tW\osY:y>+=ǐ o?f7tyI sW%EMMR)o[itźچ? y<f#bن:cO_˩)iOnvD,;/q!ߧoɯhh4P Um^*5}r9YձH \{CWChb$mt8eS =ADqꋠ`ڍ-1/.o3?Xdžj'Nr3Q=! ֤9_OήS5 +IwYnq8áĉ ?ǒg\`ͼqBQ6Ӳ) C{6PDz)R]i7(0]K My)~TY?8dIU"AU* 9 6SFٌ4Vy˝zMݑ^ioruiT1Ae +\t0#jD45giJxN&TC"ɟ}\~K.i|G =VñsP'pMZ<͞w +s' 0R dD񸅆[ +ܡP.es[TMG҂2w?R_P+@4H2p\*!CE)UUiI +"g/딈p:|當3_"n0gQCg-$zP{ +I P(Em_b}!9OjCp5٬V Nq(1yYB/>lhH3#a_Ջnm ڰFD$GNZ<`'kT/Qs0iW׸ #(qͿx`OF pgk QHTv te>&I_׳%qބL!TTc YB- + +UDI-&ƓyiISe#Ƚ#2Sar_1ƾ9S˻ xrm/q]2"r‰?d:hP2tLtjst><` #L.Shr?#!,azzEx"Ċ +oNupbi H7= +ǬT%zB?, +DfGW5n'z|Myn셃3V݌gsJ^f7$C~>\ƌ4h9 zq11!#肂h^D*x}]a/wT#?jx:o er(+h0a dck=Z]}ۈV.HeS(B$+p@#GaҲhM<7I3v$'0.SuT)klK&3&!<|qC>.# | i TDW`ˡӋnYQ+ߥ{`+iը\փI9vՁ( b\ .ETJw: rmpA bg焺9cy9I4Ma-'ɂj $)Ƶ>zZ.]=Q+[HBAFj7$NC̛Ȓ?XY - y'ud k m>j3 դ[-cbn6#?i(Hjýݤgx9M#svk&l?w6&\xװX`NsAWD* >e&=fkhLdxY҉et) i!DWJGTG u]Y߭vm1xг%5)N׾lٝ:\flpGbn$/Ceč84o&nphiWS{_I*(RGJ푞5^[x]|ytYscI{~ʏ3?%Z#jAJK?a.\/GglP66C`eރ[t Kظ +i' +2=K"u̩+Qi/-sbLG8&d9u,x5FTMVd?O|)DTp.J?d9tdž1 |UX"FxZݷ$ҏ\E΁C^R&`U]"(QՀw#rʃIzWA' 9;k{2CrxSy;/8>4?/X {3 +h'Xjk?(b#֨]gD 4Ĭ#ސZplE +@ŘHƙt@XR#4[hH 2wq1L0?PEoVۦwBpHD +.We+: `]dCzO6'‰tt +[~az\*[mv70;Tc9Q>Xg{R_s4 HƊ Wm '} YZҸdaR~-w݂w+jul"/`gXyð@)<CMHmX/.ˢ{K!`H&`[ɏ8LW D!;,gƨq3TI#h(ֲ̓hST[yPpQPD=$x-aMYp( `1}م;I1)k˂~Px 6$4Yۏ>]pq\1l}Fml2fQlENw|AwFi*`rCWFV-\s95RGfUi,kQ2ƥGe֌f(=V̱Y_RjVd5cCIKX2>g-)Ɂq!i :Imp>3 j}?` +nm$sW)Π?fP tYcF,~1 +Y3LYI[ ' 1܉afDFQD0Զb!y$( rž$DŽ.4N.V +QZ/Ѣ-ʖ4ćBZ3r]F@ԧ\(ߪ=2(iz~T*NQI +ςMË[I5tQJ.x!gHLhW1w:ȰW}}__`m`--qORZBdl aWPI >a^tFdXqGM亏o*a\UșL {DfΝ.oiWϗu[t~钵uWW3[7DVNED=181HcQjڡ/aX #y) s@R@L*jR}͵SR97銴7 RQMoo;H,Wu{,١<bpt7Jxv҂F$%w^T✊RN8VnwPG4v=@ֳ >۟W<heo=[ QZu%s(C:WG x&z1y+k!G?wRLu /8=CȟWH6aJ Ѿx6K,]jF迪tc&ߎ0~we48OȜI'eG&.EFi2f{]Dizô߅|wLE>l !w95$A?|Q%b7ꫥ8OǧPr/;<ʮ_M+R)FH-B!tC^&\ goxX<Q腦yi$YzdEN;If_V/3K +k9Y.jR8hLh8F6Xϟ\ "_klcJ豳#rܦ;N>1DfrhC-Sf 1J7W毒+T @^iMi7lXmUjY|ivD}>t*4x"mA4Lx-W;Vu`ׯ:rEn.AYn$(7:{BE +endstream +endobj +2517 0 obj +<< /P 2747 0 R /R 2748 0 R /S 2749 0 R /T 2750 0 R /a 2751 0 R /at 2752 0 R /c 2753 0 R /d 2754 0 R /e 2755 0 R /eight 2756 0 R /f 2757 0 R /five 2758 0 R /four 2759 0 R /m 2760 0 R /n 2761 0 R /nine 2762 0 R /o 2763 0 R /one 2764 0 R /p 2765 0 R /period 2766 0 R /r 2767 0 R /s 2768 0 R /seven 2769 0 R /six 2770 0 R /space 2771 0 R /t 2772 0 R /three 2773 0 R /two 2774 0 R /w 2775 0 R /zero 2776 0 R >> +endobj +2518 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1021 -463 1794 1233 ] /FontName /BMQQDV+DejaVuSans /ItalicAngle 0 /MaxWidth 1342 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2519 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 352 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 318 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] +endobj +2520 0 obj +<< /A 2777 0 R /B 2778 0 R /C 2779 0 R /E 2780 0 R /I 2781 0 R /L 2782 0 R /M 2783 0 R /P 2784 0 R /R 2785 0 R /S 2786 0 R /a 2787 0 R /at 2788 0 R /c 2789 0 R /d 2790 0 R /e 2791 0 R /eight 2792 0 R /five 2793 0 R /four 2794 0 R /h 2795 0 R /i 2796 0 R /n 2797 0 R /nine 2798 0 R /o 2799 0 R /one 2800 0 R /p 2801 0 R /period 2802 0 R /r 2803 0 R /s 2804 0 R /seven 2805 0 R /six 2806 0 R /slash 2807 0 R /space 2808 0 R /t 2809 0 R /three 2810 0 R /two 2811 0 R /u 2812 0 R /v 2813 0 R /w 2814 0 R /y 2815 0 R /zero 2816 0 R >> +endobj +2521 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1021 -463 1794 1233 ] /FontName /BMQQDV+DejaVuSans /ItalicAngle 0 /MaxWidth 1342 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2522 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 352 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 318 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] +endobj +2523 0 obj +<< /A 2817 0 R /D 2818 0 R /L 2819 0 R /S 2820 0 R /a 2821 0 R /c 2822 0 R /colon 2823 0 R /e 2824 0 R /eight 2825 0 R /f 2826 0 R /five 2827 0 R /four 2828 0 R /i 2829 0 R /l 2830 0 R /nine 2831 0 R /one 2832 0 R /p 2833 0 R /period 2834 0 R /r 2835 0 R /s 2836 0 R /seven 2837 0 R /six 2838 0 R /space 2839 0 R /t 2840 0 R /three 2841 0 R /two 2842 0 R /u 2843 0 R /v 2844 0 R /y 2845 0 R /zero 2846 0 R >> +endobj +2524 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1021 -463 1794 1233 ] /FontName /BMQQDV+DejaVuSans /ItalicAngle 0 /MaxWidth 1342 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2525 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 352 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 318 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] +endobj +2526 0 obj +<< /F 2847 0 R /R 2848 0 R /S 2849 0 R /T 2850 0 R /W 2851 0 R /c 2852 0 R /d 2853 0 R /e 2854 0 R /eight 2855 0 R /f 2856 0 R /four 2857 0 R /h 2858 0 R /i 2859 0 R /l 2860 0 R /n 2861 0 R /o 2862 0 R /one 2863 0 R /p 2864 0 R /q 2865 0 R /r 2866 0 R /s 2867 0 R /six 2868 0 R /space 2869 0 R /t 2870 0 R /two 2871 0 R /u 2872 0 R /y 2873 0 R /zero 2874 0 R >> +endobj +2527 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1021 -463 1794 1233 ] /FontName /BMQQDV+DejaVuSans /ItalicAngle 0 /MaxWidth 1342 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2528 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 352 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 318 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] +endobj +2529 0 obj +<< /F 2875 0 R /S 2876 0 R /T 2877 0 R /W 2878 0 R /a 2879 0 R /c 2880 0 R /d 2881 0 R /e 2882 0 R /eight 2883 0 R /f 2884 0 R /four 2885 0 R /h 2886 0 R /i 2887 0 R /n 2888 0 R /o 2889 0 R /one 2890 0 R /p 2891 0 R /q 2892 0 R /quotesingle 2893 0 R /r 2894 0 R /s 2895 0 R /six 2896 0 R /space 2897 0 R /t 2898 0 R /two 2899 0 R /u 2900 0 R /y 2901 0 R /zero 2902 0 R >> +endobj +2530 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1021 -463 1794 1233 ] /FontName /BMQQDV+DejaVuSans /ItalicAngle 0 /MaxWidth 1342 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2531 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 352 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 318 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] +endobj +2532 0 obj +<< /A 2903 0 R /C 2904 0 R /D 2905 0 R /E 2906 0 R /G 2907 0 R /H 2908 0 R /I 2909 0 R /M 2910 0 R /P 2911 0 R /Q 2912 0 R /R 2913 0 R /S 2914 0 R /Z 2915 0 R /a 2916 0 R /c 2917 0 R /d 2918 0 R /e 2919 0 R /eight 2920 0 R /f 2921 0 R /five 2922 0 R /four 2923 0 R /hyphen 2924 0 R /i 2925 0 R /k 2926 0 R /l 2927 0 R /m 2928 0 R /n 2929 0 R /nine 2930 0 R /o 2931 0 R /one 2932 0 R /p 2933 0 R /parenleft 2934 0 R /parenright 2935 0 R /percent 2936 0 R /period 2937 0 R /r 2938 0 R /s 2939 0 R /seven 2940 0 R /six 2941 0 R /slash 2942 0 R /space 2943 0 R /t 2944 0 R /three 2945 0 R /two 2946 0 R /u 2947 0 R /x 2948 0 R /y 2949 0 R /zero 2950 0 R >> +endobj +2533 0 obj +<< /Ascent 939 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -836 -390 1796 1146 ] /FontName /ECACOO+DejaVuSerif-Bold /ItalicAngle 0 /MaxWidth 1385 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2534 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 348 439 521 838 696 950 903 306 473 473 523 838 348 415 348 365 696 696 696 696 696 696 696 696 696 696 369 369 838 838 838 586 1000 776 845 796 867 762 710 854 945 468 473 869 703 1107 914 871 752 871 831 722 744 872 776 1123 776 714 730 473 365 473 838 500 500 648 699 609 699 636 430 699 727 380 362 693 380 1058 727 667 699 699 527 563 462 727 581 861 596 581 568 643 364 643 838 600 696 600 348 430 575 1000 523 523 500 1385 722 400 1180 600 730 600 600 348 348 575 575 639 500 1000 500 1000 563 400 1028 600 568 714 348 439 696 696 636 696 364 523 500 1000 487 625 838 415 1000 500 500 838 438 438 500 732 636 348 500 438 500 625 1043 1043 1043 586 776 776 776 776 776 776 1034 796 762 762 762 762 468 468 468 468 874 914 871 871 871 871 871 838 871 872 872 872 872 714 757 760 648 648 648 648 648 648 975 609 636 636 636 636 380 380 380 380 667 727 667 667 667 667 667 838 667 727 727 727 727 581 699 581 ] +endobj +2535 0 obj +<< /at 2951 0 R /one 2952 0 R /parenleft 2953 0 R /parenright 2954 0 R >> +endobj +2536 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1021 -463 1794 1233 ] /FontName /BMQQDV+DejaVuSans /ItalicAngle 0 /MaxWidth 1342 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2537 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 352 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 318 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] +endobj +2538 0 obj +<< /P 2955 0 R /a 2956 0 R /c 2957 0 R /e 2958 0 R /i 2959 0 R /l 2960 0 R /n 2961 0 R /r 2962 0 R /s 2963 0 R /t 2964 0 R >> +endobj +2539 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 96 /FontBBox [ -1016 -351 1660 1068 ] /FontName /GCWXDV+DejaVuSans-Oblique /ItalicAngle 0 /MaxWidth 1350 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2540 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 352 518 1000 500 500 500 1350 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1028 600 525 611 318 401 636 636 636 636 337 500 500 1000 471 617 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 617 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 608 630 613 613 613 613 613 613 995 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] +endobj +2541 0 obj +<< /eight 2965 0 R /five 2966 0 R /four 2967 0 R /nine 2968 0 R /one 2969 0 R /period 2970 0 R /seven 2971 0 R /six 2972 0 R /three 2973 0 R /two 2974 0 R /zero 2975 0 R >> +endobj +2542 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -770 -347 2106 1110 ] /FontName /BXGEVL+DejaVuSerif /ItalicAngle 0 /MaxWidth 1342 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2543 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 402 460 838 636 950 890 275 390 390 500 838 318 338 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 536 1000 722 735 765 802 730 694 799 872 395 401 747 664 1024 875 820 673 820 753 685 667 843 722 1028 712 660 695 390 337 390 838 500 500 596 640 560 640 592 370 640 644 320 310 606 320 948 644 602 640 640 478 513 402 644 565 856 564 565 527 636 337 636 838 600 636 600 318 370 518 1000 500 500 500 1342 685 400 1137 600 695 600 600 318 318 511 511 590 500 1000 500 1000 513 400 989 600 527 660 318 402 636 636 636 636 337 500 500 1000 475 612 838 338 1000 500 500 838 401 401 500 650 636 318 500 401 470 612 969 969 969 536 722 722 722 722 722 722 1001 765 730 730 730 730 395 395 395 395 807 875 820 820 820 820 820 838 820 843 843 843 843 660 676 668 596 596 596 596 596 596 940 560 592 592 592 592 320 320 320 320 602 644 602 602 602 602 602 838 602 644 644 644 644 565 640 565 ] +endobj +2544 0 obj +<< /Filter /FlateDecode /Length1 1484 /Length2 1495 /Length3 0 /Length 2381 >> +stream +xڝT XL2&*F\Q!R$1ͬcYC]BF.6!Br$ךn9E((gM)s<<̚{ȓ !4<@e20j1J(~bQPJDL iވk3LLp%pE J9J*Qy T4c8(Q XH1\CIR |WS #E Aa%׀ٲx!#=$؀HA|C[BMU2:igL*׬A0BEѮuB; e(&iFbxahqqJ"!7Lń! `H-!=IX 1iDxdb +@eC W"P'(0HQ 9QU ń  :~-')1E7x "}x f ry 2>^e0DRLLmKǖŁLd{"1a. 0+<>q}çj: |NP 6$!l>?fj6?MN.'C3jg T r%ɘ@]\G (\(^*B;G7'WGϞ9z#B@%\?T%DC%$=셽0)T"Uh<q/&d5TeKe~X%!A Ɯ1 .E19i+P +Dfp ZAp\D /:Ek[PcPj!}0V܏19_1p&$Q+zbJ6 ʃ*\23zUVՎ hw2KMۥv=iY4KE̳ycRqKR[a{l{V{(SLN(HX;}ۃc_ڸҴBљ͋FS8S5#S&4IoWN3 ̴S ]NTһ/%h rJaNޅ/yrZξ6D3uI'cS&qa+N=fav+EUfk)eܱ>e:/􃳪XuU9V6&X$",ܵ٘)mQ,lfEUe뷋w/ڼw{4W&V NS4wNλ,}*dx%żz\yƁ{6Ŕ-mZ|it%NMʿ: wq7w#48O9k>]w7< 7x +endstream +endobj +2545 0 obj +<< /BaseFont /AAAAAA+TimesNewRomanPS-BoldMT /CIDSystemInfo << /Ordering (Identity) /Registry (Adobe) /Supplement 0 >> /CIDToGIDMap /Identity /DW 500 /FontDescriptor 2976 0 R /Subtype /CIDFontType2 /Type /Font /W [ 0 [ 777.83206 0 0 250 ] 37 [ 666.9922 722.16799 722.16799 666.9922 0 0 777.83206 389.16017 0 0 0 943.84768 0 0 610.83987 ] 70 [ 443.84767 556.15237 443.84767 333.0078 ] 75 [ 556.15237 277.83204 333.0078 0 277.83204 833.0078 556.15237 ] 85 [ 443.84767 389.16017 333.0078 556.15237 ] ] >> +endobj +2546 0 obj +<< /Filter /FlateDecode /Length 297 >> +stream +x]QMk0 W]7Z%>XJfX㸇`ۼ''Y>Fa F34{V:PzU}j)PndE?S 3x5`Y5kƛ?8 XYqv@I h9/k2-uGo5 +!(*:/6] R ډ!˲{s~2'9ɤ/D*"dK;"+)T3?I:'e<&!icij˼Rr~BD +endstream +endobj +2547 0 obj +<< /BaseFont /BAAAAA+TimesNewRomanPSMT /CIDSystemInfo << /Ordering (Identity) /Registry (Adobe) /Supplement 0 >> /CIDToGIDMap /Identity /DW 500 /FontDescriptor 2977 0 R /Subtype /CIDFontType2 /Type /Font /W [ 0 [ 777.83206 ] 3 15 250 16 [ 333.0078 ] 36 [ 722.16799 666.9922 666.9922 722.16799 610.83987 556.15237 722.16799 722.16799 333.0078 0 0 610.83987 889.16018 722.16799 722.16799 556.15237 0 666.9922 556.15237 610.83987 0 722.16799 ] 68 [ 443.84767 ] 70 [ 443.84767 ] 72 [ 443.84767 333.0078 ] 76 79 277.83204 80 [ 777.83206 ] 85 [ 333.0078 389.16017 277.83204 ] ] >> +endobj +2548 0 obj +<< /Filter /FlateDecode /Length 306 >> +stream +x]j0EY6 ` >p+e!+ }&Bf4YvaF9\拓gaI +JKUSoc. 3+K^[Eg0:mFx:݆b/Nh<VUp`~{?!m[knOup|!:npDכY)M4CDӻ*(HETUu1M%:i~S! %əQYA=Kc2ov//=+% ¾C80Rmw;@Š[ +endstream +endobj +2549 0 obj +<< /uni00000003 2978 0 R /uni00000010 2979 0 R /uni00000011 2980 0 R /uni00000013 2981 0 R /uni00000014 2982 0 R /uni00000015 2983 0 R /uni00000016 2984 0 R /uni00000017 2985 0 R /uni00000018 2986 0 R /uni00000019 2987 0 R /uni0000001a 2988 0 R /uni0000001b 2989 0 R /uni0000001c 2990 0 R /uni00000020 2991 0 R /uni00000024 2992 0 R /uni00000025 2993 0 R /uni00000026 2994 0 R /uni00000027 2995 0 R /uni00000029 2996 0 R /uni0000002a 2997 0 R /uni0000002b 2998 0 R /uni0000002c 2999 0 R /uni0000002d 3000 0 R /uni0000002e 3001 0 R /uni0000002f 3002 0 R /uni00000030 3003 0 R /uni00000031 3004 0 R /uni00000033 3005 0 R /uni00000035 3006 0 R /uni00000036 3007 0 R /uni00000037 3008 0 R /uni00000038 3009 0 R /uni00000039 3010 0 R /uni00000044 3011 0 R /uni00000045 3012 0 R /uni00000046 3013 0 R /uni00000047 3014 0 R /uni00000048 3015 0 R /uni0000004a 3016 0 R /uni0000004b 3017 0 R /uni0000004c 3018 0 R /uni0000004d 3019 0 R /uni0000004e 3020 0 R /uni0000004f 3021 0 R /uni00000050 3022 0 R /uni00000051 3023 0 R /uni00000052 3024 0 R /uni00000053 3025 0 R /uni00000055 3026 0 R /uni00000056 3027 0 R /uni00000057 3028 0 R /uni00000058 3029 0 R /uni00000059 3030 0 R /uni0000005a 3031 0 R /uni0000005c 3032 0 R /uni0000005d 3033 0 R >> +endobj +2550 0 obj +<< /Ascent 860 /CapHeight 0 /Descent -141 /Flags 32 /FontBBox [ 0 -141 997 856 ] /FontName /KVPIPT+SimHei /ItalicAngle 0 /MaxWidth 1000 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2551 0 obj +[ 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 500 1000 1000 1000 1000 1000 1000 500 500 500 1000 500 500 1000 1000 1000 1000 500 500 1000 1000 1000 1000 1000 500 500 1000 500 1000 1000 1000 ] +endobj +2552 0 obj +<< /A 3034 0 R /C 3035 0 R /E 3036 0 R /H 3037 0 R /M 3038 0 R /O 3039 0 R /P 3040 0 R /S 3041 0 R /T 3042 0 R /a 3043 0 R /b 3044 0 R /c 3045 0 R /e 3046 0 R /eight 3047 0 R /f 3048 0 R /five 3049 0 R /four 3050 0 R /g 3051 0 R /h 3052 0 R /i 3053 0 R /l 3054 0 R /m 3055 0 R /n 3056 0 R /nine 3057 0 R /o 3058 0 R /one 3059 0 R /p 3060 0 R /period 3061 0 R /r 3062 0 R /s 3063 0 R /seven 3064 0 R /six 3065 0 R /space 3066 0 R /t 3067 0 R /three 3068 0 R /two 3069 0 R /u 3070 0 R /y 3071 0 R /zero 3072 0 R >> +endobj +2553 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1070 -416 1976 1175 ] /FontName /EVICAO+DejaVuSans-Bold /ItalicAngle 0 /MaxWidth 1440 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2554 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 348 456 521 838 696 1002 872 306 457 457 523 838 380 415 380 365 696 696 696 696 696 696 696 696 696 696 400 400 838 838 838 580 1000 774 762 734 830 683 683 821 837 372 372 775 637 995 837 850 733 850 770 720 682 812 774 1103 771 724 725 457 365 457 838 500 500 675 716 593 716 678 435 716 712 343 343 665 343 1042 712 687 716 716 493 595 478 712 652 924 645 652 582 712 365 712 838 600 696 600 380 435 657 1000 500 500 500 1440 720 412 1167 600 725 600 600 380 380 657 657 639 500 1000 500 1000 595 412 1094 600 582 724 348 456 696 696 636 696 365 500 500 1000 564 646 838 415 1000 500 500 838 438 438 500 736 636 380 500 438 564 646 1035 1035 1035 580 774 774 774 774 774 774 1085 734 683 683 683 683 372 372 372 372 838 837 850 850 850 850 850 838 850 812 812 812 812 724 738 719 675 675 675 675 675 675 1048 593 678 678 678 678 343 343 343 343 687 712 687 687 687 687 687 838 687 712 712 712 712 652 716 652 ] +endobj +2555 0 obj +<< /D 3073 0 R /R 3074 0 R /S 3075 0 R /V 3076 0 R /e 3077 0 R /eight 3078 0 R /five 3079 0 R /hyphen 3080 0 R /k 3081 0 R /nine 3082 0 R /one 3083 0 R /p 3084 0 R /period 3085 0 R /seven 3086 0 R /three 3087 0 R /two 3088 0 R /zero 3089 0 R >> +endobj +2556 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1021 -463 1794 1233 ] /FontName /BMQQDV+DejaVuSans /ItalicAngle 0 /MaxWidth 1342 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2557 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 352 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 318 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] +endobj +2558 0 obj +<< /A 3090 0 R /B 3091 0 R /C 3092 0 R /E 3093 0 R /H 3094 0 R /L 3095 0 R /M 3096 0 R /O 3097 0 R /P 3098 0 R /S 3099 0 R /a 3100 0 R /c 3101 0 R /e 3102 0 R /eight 3103 0 R /f 3104 0 R /five 3105 0 R /four 3106 0 R /g 3107 0 R /h 3108 0 R /i 3109 0 R /l 3110 0 R /m 3111 0 R /n 3112 0 R /nine 3113 0 R /o 3114 0 R /one 3115 0 R /p 3116 0 R /period 3117 0 R /r 3118 0 R /s 3119 0 R /seven 3120 0 R /six 3121 0 R /space 3122 0 R /t 3123 0 R /three 3124 0 R /two 3125 0 R /u 3126 0 R /w 3127 0 R /y 3128 0 R /zero 3129 0 R >> +endobj +2559 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1070 -416 1976 1175 ] /FontName /EVICAO+DejaVuSans-Bold /ItalicAngle 0 /MaxWidth 1440 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2560 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 348 456 521 838 696 1002 872 306 457 457 523 838 380 415 380 365 696 696 696 696 696 696 696 696 696 696 400 400 838 838 838 580 1000 774 762 734 830 683 683 821 837 372 372 775 637 995 837 850 733 850 770 720 682 812 774 1103 771 724 725 457 365 457 838 500 500 675 716 593 716 678 435 716 712 343 343 665 343 1042 712 687 716 716 493 595 478 712 652 924 645 652 582 712 365 712 838 600 696 600 380 435 657 1000 500 500 500 1440 720 412 1167 600 725 600 600 380 380 657 657 639 500 1000 500 1000 595 412 1094 600 582 724 348 456 696 696 636 696 365 500 500 1000 564 646 838 415 1000 500 500 838 438 438 500 736 636 380 500 438 564 646 1035 1035 1035 580 774 774 774 774 774 774 1085 734 683 683 683 683 372 372 372 372 838 837 850 850 850 850 850 838 850 812 812 812 812 724 738 719 675 675 675 675 675 675 1048 593 678 678 678 678 343 343 343 343 687 712 687 687 687 687 687 838 687 712 712 712 712 652 716 652 ] +endobj +2561 0 obj +<< /D 3130 0 R /R 3131 0 R /S 3132 0 R /V 3133 0 R /e 3134 0 R /eight 3135 0 R /five 3136 0 R /hyphen 3137 0 R /k 3138 0 R /nine 3139 0 R /one 3140 0 R /p 3141 0 R /seven 3142 0 R /six 3143 0 R /three 3144 0 R /zero 3145 0 R >> +endobj +2562 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1021 -463 1794 1233 ] /FontName /BMQQDV+DejaVuSans /ItalicAngle 0 /MaxWidth 1342 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2563 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 352 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 318 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] +endobj +2564 0 obj +<< /A 3146 0 R /B 3147 0 R /C 3148 0 R /E 3149 0 R /F 3150 0 R /G 3151 0 R /I 3152 0 R /M 3153 0 R /N 3154 0 R /P 3155 0 R /T 3156 0 R /a 3157 0 R /at 3158 0 R /b 3159 0 R /c 3160 0 R /d 3161 0 R /e 3162 0 R /eight 3163 0 R /f 3164 0 R /five 3165 0 R /four 3166 0 R /g 3167 0 R /h 3168 0 R /i 3169 0 R /k 3170 0 R /l 3171 0 R /m 3172 0 R /n 3173 0 R /nine 3174 0 R /o 3175 0 R /one 3176 0 R /period 3177 0 R /q 3178 0 R /r 3179 0 R /s 3180 0 R /seven 3181 0 R /six 3182 0 R /space 3183 0 R /t 3184 0 R /three 3185 0 R /two 3186 0 R /u 3187 0 R /w 3188 0 R /y 3189 0 R /zero 3190 0 R >> +endobj +2565 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1070 -416 1976 1175 ] /FontName /EVICAO+DejaVuSans-Bold /ItalicAngle 0 /MaxWidth 1440 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2566 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 348 456 521 838 696 1002 872 306 457 457 523 838 380 415 380 365 696 696 696 696 696 696 696 696 696 696 400 400 838 838 838 580 1000 774 762 734 830 683 683 821 837 372 372 775 637 995 837 850 733 850 770 720 682 812 774 1103 771 724 725 457 365 457 838 500 500 675 716 593 716 678 435 716 712 343 343 665 343 1042 712 687 716 716 493 595 478 712 652 924 645 652 582 712 365 712 838 600 696 600 380 435 657 1000 500 500 500 1440 720 412 1167 600 725 600 600 380 380 657 657 639 500 1000 500 1000 595 412 1094 600 582 724 348 456 696 696 636 696 365 500 500 1000 564 646 838 415 1000 500 500 838 438 438 500 736 636 380 500 438 564 646 1035 1035 1035 580 774 774 774 774 774 774 1085 734 683 683 683 683 372 372 372 372 838 837 850 850 850 850 850 838 850 812 812 812 812 724 738 719 675 675 675 675 675 675 1048 593 678 678 678 678 343 343 343 343 687 712 687 687 687 687 687 838 687 712 712 712 712 652 716 652 ] +endobj +2567 0 obj +<< /D 3191 0 R /G 3192 0 R /P 3193 0 R /R 3194 0 R /S 3195 0 R /T 3196 0 R /e 3197 0 R /eight 3198 0 R /five 3199 0 R /four 3200 0 R /hyphen 3201 0 R /k 3202 0 R /o 3203 0 R /one 3204 0 R /p 3205 0 R /six 3206 0 R /space 3207 0 R /three 3208 0 R /two 3209 0 R /zero 3210 0 R >> +endobj +2568 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1021 -463 1794 1233 ] /FontName /BMQQDV+DejaVuSans /ItalicAngle 0 /MaxWidth 1342 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2569 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 352 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 318 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] +endobj +2570 0 obj +<< /A 3211 0 R /C 3212 0 R /D 3213 0 R /E 3214 0 R /M 3215 0 R /P 3216 0 R /S 3217 0 R /T 3218 0 R /a 3219 0 R /at 3220 0 R /b 3221 0 R /c 3222 0 R /comma 3223 0 R /d 3224 0 R /e 3225 0 R /eight 3226 0 R /f 3227 0 R /four 3228 0 R /g 3229 0 R /h 3230 0 R /hyphen 3231 0 R /i 3232 0 R /k 3233 0 R /l 3234 0 R /m 3235 0 R /n 3236 0 R /o 3237 0 R /one 3238 0 R /p 3239 0 R /parenleft 3240 0 R /parenright 3241 0 R /period 3242 0 R /r 3243 0 R /s 3244 0 R /six 3245 0 R /space 3246 0 R /t 3247 0 R /two 3248 0 R /u 3249 0 R /v 3250 0 R /w 3251 0 R /y 3252 0 R /zero 3253 0 R >> +endobj +2571 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1070 -416 1976 1175 ] /FontName /EVICAO+DejaVuSans-Bold /ItalicAngle 0 /MaxWidth 1440 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +2572 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 348 456 521 838 696 1002 872 306 457 457 523 838 380 415 380 365 696 696 696 696 696 696 696 696 696 696 400 400 838 838 838 580 1000 774 762 734 830 683 683 821 837 372 372 775 637 995 837 850 733 850 770 720 682 812 774 1103 771 724 725 457 365 457 838 500 500 675 716 593 716 678 435 716 712 343 343 665 343 1042 712 687 716 716 493 595 478 712 652 924 645 652 582 712 365 712 838 600 696 600 380 435 657 1000 500 500 500 1440 720 412 1167 600 725 600 600 380 380 657 657 639 500 1000 500 1000 595 412 1094 600 582 724 348 456 696 696 636 696 365 500 500 1000 564 646 838 415 1000 500 500 838 438 438 500 736 636 380 500 438 564 646 1035 1035 1035 580 774 774 774 774 774 774 1085 734 683 683 683 683 372 372 372 372 838 837 850 850 850 850 850 838 850 812 812 812 812 724 738 719 675 675 675 675 675 675 1048 593 678 678 678 678 343 343 343 343 687 712 687 687 687 687 687 838 687 712 712 712 712 652 716 652 ] +endobj +2573 0 obj +<< /Filter /FlateDecode /Length1 2274 /Length2 17013 /Length3 0 /Length 18404 >> +stream +xڴeTk6w $K@ҸKNG;{ϜgjJzBYY(ig ffga+(ڱ1ˀA&66N$jj1Gdg+nx%# :)M H3 (9@[s-Edn=3HEYF&VvNV )@Eh&l@ #k3@ PPUH*i(ѳVss715u )&PS}oPTf]AB]D]GYO v 'pycڛ_ t`=?++ќ/~ 'h 1ζo[ϙA&@[''I)mZ&[#bZW #|啕6F [0lvv%{{MiEsvtCTIE*ӷ6r3uvGol;['_35{?gK (#),6x +voݱeOD\myx!5yc}⠷>Ywl\m=?b3ٟ:۳j؂26~!-3lfb'_GGoO{;{d|Bt2r@o*!LA&1*HE5KT)5v͐Xo@-\֊F6@ـ,)9Y$ r*&5_e59YssKFY^oznѽM- +֋vHXe4Ĥewn53ٚ8FFHlodjS_`e3;G?'FU_*`XFV7Ao~7Kտћ߈ 7j1313XM1%7NV@7@X@oLߨZqq;H6.?2`7v +[mmZR.<7N7Mr{;s[8Ix]ߘ 9fftW=__X hg'oPS-*j`~V8{?_&zB.?4AZ^3d\# OH[6f9{1x;p_:M4'D"m \뗍քʩkSF> +>h"cٚ, +K~e]et9gbc'b|闵ºα78Zc-au/}DG,3eLS>(RaG64a]?_'޵M5:+tI +ےԐٟ*ST1N#a&,q~w\D.6\yiHkPn[.aЇ,qaJ}ﵖ|QENA58- y12>H7Y\HV̗1Lt<7Uo+u~j8ykhz8v D;D=eqp]<׸!6 COzbwΙr{8{KSDr+͟Lߞ(6*HmW6mbkҕV3ɩ*Fq_=RRܺF~6L|]3SϏ98 lm, Ec!o]58<΃s޻,m)T.|F* +g |iCv} Μ8H~֭ P59sLl8QA$e 5狒jt)V\n:zJhHTgbo%6\E8uTuTbetQ eLj/oXqh:wG4qq/BVܰ.$[>.^*&+{١c*D_ :Vi[Sd5SfZr|D{}^Ғ.7 -BBnP~WZ=3jIjk# vwv~(,^A֊![^ +ōQ;4¢IzܡĦ>}J0=:$pՊ6f AnuIK /T J҅= 遽&4@`ΠdJEXbzCQHJ#$%[.SxIv[X®qę2s4noU7} Vhp1.m?Q_cڒ/ mxd;A0.eS\(- +^>6.3\5-Y*l$iiS ћz/ A6iE]xEV @wPK :yRT5'0^MK)Z> 3ly3"d•<7D wk ϏzN&ѣx M a6NS gٱ`$5 +6-{A5K#33bcaŕ U{Ӓ'Zu7pdc\QO2'Q wɇ mZ|ꨂڦUU3*_ Y]D:P~c3W8??6V+Iْpa#Gfw–e^H,Ś[HєToQ 6GcEr .MEy(Y N;P᧮c4O*h:uA,Er/kpƳ/ͯ?w;[&-=0TE>;_^y&@q-Ղ.Q9qGoߝ9Ař5P^\Z8 ?w+@2O|p0._ l!ӅL_4Ð҄[&8wԅ&$IE1GQ(t^bqi$'q>jCy;V!`M#mr +Axǘ$!^_#CG0<ߟv 5~j7ꎽj?z/Ƥkq?=` nkcjXVR`Y7Z$[8U0NMO/*L!Gs&p6qyțVB]hM89 kiH Ә2 8wqSH59"<\~yu(UkyRdʏfth!Du]%Z.ʅr (+ T/{ϔZg{|~y8r$2:c>,ޞIudk-)Ұ(YR'1`C0vqۥqdcZtg&h0{ʼniFr,dǷiȑj}Y1'54jo 7M/G%8D+VOzc4vAyNJZ\(b `ǯED˱M 廷PnO,&^( +9 z2"j#á6h6Qu@,]>~6wc$ڨRb +IH[G{d觰OY;knXZåDEN%gf cVXeu~1- yd +cx{2`Ton.7GWjktbn=me{ 3iVܖrSxr_ 5iכ#Q^Gjc|#*IazFT!C'A ?U@T n}Io|II7 ָ@ AP+,V4D2)`u!<]=N3iVԧ:Y{g̹"bx2n \ _7-&~ɤq?z֗an!K (a-m )e߳HJKKGXx"G?bQU !"?y\Lݟ.wN4rԲyg+LK x-0BU7ԠP Md~紷~qmOj?Q RmN +ߡЌD$VB!ݳC̀[ɢI//ŅdGuC&,= iђ?TsaPis{]=v@z xKb$R&s%]!>L&MaBa"=8YE(1hz"0\J'bV{ Ĥ7P7a +˽ O2+n?nt(a!5*yH#BTd1 Q |IڈqLͳa1 +[;g }V "8 +H:]6>EWHFy0ș0`sa`p8(?v@6g?|xz#D- +EH1nrq3cwhǭxM~_l$XPFx̦2Yv"[,yRLUx)=>"H?s>Db%303AX=#UH/ 7]d1l0HA7{6}JQaCF%>Wd )dbpΧ/E4pr(k. mX$LЊ^*?S͖eu$؃nY/̧QV "P %Y DL28rdFK$Y;[*(%zYY-XA%砖qiђ0؝/)=GљS[jɣGFH!;(پɲ;˞%Wn,muŃܸ !MˣJa8gÝ 'i7?DGtŚ ?]E%p'o i:ރiU9;j2k72r~M(#7)v*ۯJ|>5!d\pB'2>mE(tJa!ʋHoߋ捪V ~ +C4 % :%uģcE#u͈d2 f:ʙ}ƙ}5i&_b#_a73xY{E*@=uPR~ONj3Q6ivm$o7wڔ {EF +|RCr^W{,=֩%>tuE~5C^d:qWJ!ZҁSKq%P|cUۯIDV n?{_T>Acƻ_{;P;sy?BlKhʬFU@' iÇd'@!$hWQ?S8$ 4Y2']$'_ _-q~=XX]Ʋ]T. ex!Y5RK9^ hB~V@k/tDxٗ\6#h#iFRk#VԬ4&)}Z/d&}ҧdT 9W-bLV/hcux?|Uǂ^8>Nmߑ6b7יԠ$EHϤd6;mi7)Jnš\z{zhrUJM=&0LoW- +e`1nlC??sn@703TiVl! 蜓8Y!u9Oͫ5He%I}'/0M4ں{i%f_It^ riD Z"DIg?hjFŃdNآ,~,~cg.uW#rhi(4 &w!JjIQ9"A9fDI16E6+7VQdl^idⷌ64sEV1o@ 9r KKkW& dzeY/[S^/] +-:`Hr],Lq+&ӕOMSXV\1oυ`or~բLEG*i)N__ =®q$IcV)TfE gN72iQqdx0%>W)Asz Wq=pb7{.Q70G+Bp{:ƴ+xt`.& PS +O78ΤdN>K<\3  @H܂-dBA65h*YmMOJc1Ss!ZޖhEY|!t0K|S6":m٘Xx}&].N.,~ +m1Z ʷe55Pf$|SK"r0jZ[뾦vW&'c ؊<@t)eLWY +шYofxyunI3jdMK:mb4iMx1d\oHCq +gYEjbYd}lo6Z)kzz{Xhn-c2 bS?⺂l0?h,}>j!@֍"JC-ئˋTZކ%EBZ`XuO N#>A̓LpZ1f2: =Ն#(HiOթj!]$%~`g_EϺP2*wd?S򳨲-q)G!k +:x0 |AG_yU%pQ,sI7ԬR|};z\]Os V+ؐ{_~x _;xѣW] z[A$3]<@~]i|x>MSɩޡLl 4fkr.G#)-;I:bf6If1irfW2^R04Pl5'V-5dRʋC;P~@B/FzCN-n:湤ױ~o{#t|pȹcz8Z7`(n:MhBKo1`& +ފZgp-4X2]LB"nX#_P~󹥥 I]>NhmdaQA-K,nm@+Q-YUW +ar^Hp@mشգ9v˜Z˙ĸԒVϯ %uG,'VdQ'}lxFdHݶa xݸ\ %p_:S,,;)39@6K>ʑdlK.s~Q@`QTV;@L-ot;.m&vrHj?9 i$)RokM!tǛ̟4mOq=ZYջ+jMx|lNәmE\Ư٫ڛ0[#[]!ɐ[1|fq+ߧbk\*6?Zŏv8jc$B>l i(ێ=a%r2EmWh5: 4J ^Dh˪t(d%A'OH;sDz؃*-'ϻ#ʎ8G*JGc))#6ƽJJBC)Drї)ձ>,uvG4pQ`8`1I胗ոko[*\s nv;nهĠMOm15'~gQm"|81 +Y3Ą~K:vfTn,cܽ;=F&Nn*M/06Qߠ3T;1=FtC7|cY<*ka;kh`;4&Q/00S?;y +>*Is@n^nr[ +ObHlSw9\K_>gblV\wo /IThèxypd! Q¯Dzc{W=Nט U"TF oRREELJ/HU.++1A_isf!iTevpJObTj*2Oܫ{ 79N7߆ $ٵmБJ,l˜3y)e𨪷4(9->L;Dxd/0>ZRQ^deNUȪ[}{z*%_0y϶ϑԠnC.И$csZXY:dU{)2ǎalhm$ l ѥ7o)]~Af㔵20UPjυi~+p<>4ّ ;b:˸Ա`45Uy pPE8\*;=BKu=".v#76'_AлGFL=oE#pFx6r½%Yo!ʼz4fb4d1 ^1'u;DD7zGL6Ķͫ>b-cIwBgNA{as$e' {%HvsZ5 m( {U]HPsM!~;"tQY5ᇇxu+"LΏѵF u|E7 f]՟'Ȝ\z/k~‘`O}b>,c' k<'qZIJdfǴޚRƆ諩jxEy|DM7Vh}4DZ2B^{ÏM0,gvRݚ]x/AӶ<h|°GTNKkJ 'z)V@Y& +~?gOw> "M Qh}evhyRwY)TKDC[ ~9c-hdދL9FKgy,!qfim;33mR)ILC[d +2M{2YݻА 'o4H-v8a^ՙ}2L)Ѫ0hwVa!oqO_er-ι/ĉ em"l |wE$,n|Ieelљحs!};+Mma<)I0&n +CKP_-)!#MǘahS jϢJI5m{GhxdE*ԟ)??# FibQ⧵&^TD'D.` +8<Pэ{R*p#r"b*26P5~{+1eIc63+2k@-xj혩!lm(r[ռK%^*kЍ_'z=~?.Z:,d`hwݫ^G2oG3Z߲EJyzT-"AIm%bln5<\%ɍtzQT2Vm}O +^/lq0 /vKǘ7 05'fxWE}tRQårU% iW~<OxZMU';C_G>S tf S6f=) Li9p@6CFd邓 k4_zi/=L dWٴ'fKýi,6N;GUED!@@ϴ2tT7VIL@S' ώMm!D`[SŢEggjv6ZRDtS+|B.ȆJ0٪#XXS.c]ĩh&E"C\)&fQVSe dA2JAuKO|O 'S#fFi`|fWcėt43iC2i .l/cs`FS_ 7~|+S&8KmH|T{`U'+]Qj]J7S^<##qNXF2䂲Մl'H|Px8.TmF9{=^v("aCQ#e)4k;Eg5~7VzF\ 9by\y.B :%/tsff"F6;?[ᄚեwSpD|irʩ6%N>]>, Wh;+c,cNh?vc| S?b\nu~ +~D5n*ܓYeyhFRb/ -҉89tE.JB$W=IwTqt"~# lM/w>;V^̾ H}sxziKTZf1ή- eΜCN-GU(9zfF<*&;2'R/]*/V'B0}An#Ld_Bӱ`WA5֙xD <zg R_RɬfS >fպ|-oX!aEXNUs>ke[9ɰ8"ɰƧVwwD+F,Gs=| +7 +$^Z(H 纖;Ry`f;&`oIh +,soUԒV@#;Mώݐx\A>66)UTk7):Q*>/m'->n-$3jEa6)3o\lL&4"=,؆(w/XK6\Bg$}Adށ]^\(_cտ X\X֪!ښ3!gl'5V U6-g:?auEk ;?/3IFd>Xªeiq6<xN~pXe/Jp4QjV7G\w: MBDJTIqySo#[Ԝ!G,f? ú7"}Pt4Юp9cs' +AmjlVEHbϟ*թi5iP "V8#+U]TQFuUimSy4)* +jXWaen^J5bRJ-"}!JC`{\P吲RVT!TqH# +>IJyYT@c0,fH$ia}[+f:"g7GY6?w< _# ^tTW = c.!N4D ʫ =u/Z̯c0YV,cKFT ]`sEwle<6ˡPp8Z^A +}(3_RGvEgtwp GSN~e>Gғ=!]ר$!Sa<3m=%b֮;դXd4z=zJ?"HfJ g*l@v{P_NeX[kdf o;x%O/Jr,P%TY1m9K2UA +t蛒Q[():q\OH?EX,mD9ʬ́LVBdZ8Sb[iC0#Rj$$=^g̢jyA #{LW+*XJULFsC kՅ a(Y{Xh gPIۄuԷ03Y'dNRyAŒN]eC>}tZED2#V!nx=s[ʒ#msa2nz06ǁ}.2HWeu5-2-f`5 Gr/]`U0TJ!<բ97cwY٠$ +AS{fj a +Qٙl@SXT#GIw/<'m/X^|,(sxN4hKs'GZ)$OxY2%q}_'W+MI dZEEW&.b?{Tpb#ܪ`ê^RJ!etZ\\ZqY!Q jBw`Av"gԼxhTQr2̟FbzOg5 .P\0IoL p q +N%%CӹK :H;JI(3drh=bgA<[ARO7œ.hmgKere6r`svkָP!֓ϛ=~JS/hJi{4]*5")An~BSeK.vÎMȼ=Aېo0(a $4 nD'WJS l͸mڰ8 ~]ӀO ;"FUQg n- QqpB)Vt~&XW WeoVסfm'c~ / Q\ #Ɠ_&=w)ێ:ăPـlZR-2. x`Ʉ̋?:EX 䕽V狀Y, qkV5 +lhT 4 + eQYfK +,s(C%;A2Y:TIJgO(CO1ܷ:\yy] jT=)SeY VQPDP:V?3L{04?_Z*Ȭ̒Q! ɒo5vs?ȬMj p O'\Ԧ.@_w_ͥd]t=s`plKгCu@G @f}ĸGp?я{l)UF vQSėkFWb !2WL$}"-AmӃNCM ;=^UN ~4є> +stream +xweT˶- ]i\! 4XC B4N[`!d}y{;ޏ~Zf5kGm`V O$@z" \ Pt 4P_AE8+w= @e K B !ap)& qك\" GJM P~򷠾=` s@]lYl0o zA]F으\;`qC!6?XlaNN0;H8l6a`A"`A "]4PANk?T!.n߸7AAN{$UJ@wC[~RNmeE3N\A]Ȼ$.@lkp' c~=S3 `aUSPy|D|B!!a 4`_iWW6(/8;Sj}?c[kkv0^~^:@@8?/^ u v}jHZKP +b EZlNȟ.wu;) C@| ?bw`x'> gr'PvNb!Q1{zRHT#x' ;[pE!5%A!n w~ !-k~z ƝYK;TUym ˌ7R|fP*2?ה9O2]6>mNihB3R+_O_ﵛa#zӽvu`JP;̣[ճ۹ obxWo^DO&Y| ܤD?IsFnxp^ . EOz/ !:hhLOIG}թ}J"DdF_Zצ.p4[ , VK~B]y. U~IKWvmUX)򙮈5gl`K)j褖p idxsw6b*tVǻ1ac-(!\%Oq^ +8/ 'x6NQFCɄ),Smל$3BL +w~buG ƏUO +?~\QHJ'o`lNM^ſӵM.q964fᎂv<^N[cHLaYvLU +X6]8O[Fp/.oX ɅrI m]G?r{F)1#@sY _63NdHՈnhEtŤ =퓃&EIjdXtm9"*3~=J$hz'ǰgarFsLr".(\ߋ]QEÞ.`'M/ .EKMě inl.QZ|xo>/ eK ??K ]l3nЯÈTyۭ% +k֝媤朝Q7 +Y@;w}rmRvWQ\96Z~Ra2\(0|6PqG?\8UDܗFm\{ɝoܶkQIBHQ&M_7sU+kxU1t2ꃱcݩO-hp?dXYxT3ϝjOBJSiF*edP'FugųK=(4# gzT풸K&DPh+TN9^1 +-k[ijn!%,Dה#m;W\\s1^ட,d-MĽ*q\>"S,&A//L&jtsn7^eޛ쐡)i[v |u,u&ՐI1B'n.$sK`b-P.lB'x + ^"feX$Ǐ-@;ACZϗ.!Ic-f:T)<--ăgC73^|T9cQ8 +T+6 6"mjA? +Sh eMUTGe1 (!T`wޱ&A,/HRNWa)mk7nAA7KO[I%1)8 ~<7|-7:EsaEt&{ Hf5J詊ÏnO뤥7)RKoCJ( +(}4-?xnoUwfCaGy\me,}&=L W~Hy@QYn\|wY1B# +{=ChEZ/LP~|譝 r]ݱʬTT~x~gR2FOlgTPjHO{e%~S>L<GT)f[#?ׁN1?czפ|ܯULWOԇbM,^K5oՇ=DU]?ĬbߞAӊ,׏9FXQqI%5_+1tFޓecEw[!jXtK<}CX$m4#4d1uIr:"e +WLe-W&sÐs` ߭ +&Gs"gf$@IULswΐ3RΝT =O&4SY{:(M^ٝ?WB9e?8 wxUAp7.ESv\Sy!ymAZa[#Έ6gj_r>΢Y[L܁ț%/ 3&IUĵ׆=8GkG}PGK '_lw!ʋ="VZ@^`pܒ}CiGxuEXį)v._.qn3~%Ǫmugb~"5/pfZ:nO22y%XHiu^Av`=|LphͤKft.=RhTrhT*$?n})Sye Hi΃956XN\fY\(>l,qY%j CC!;V@+#@12m8 =Ɒ7‚{hϳ+ %- RhK}zݮ`fh.^J/ l☵v?y~|azD>ƹhړd@:J[AFj}:,cA+s9iy=fWbRL{T!-އe۔wD {u\S\\]YdxW;Z7&}T_v"AV/K7M_YţϞqۑ=xqtX创5w9:dhV+{`DeHb"H&r',9wg*38S x/?/|&& Bۓ3S'Ƈ%͗tUVkꜱ)QJ 3σK[ŞG䷺Nl ooր-Eg,]TynſtZKVL1e~'gr> 5KӃIj n27ceMuЦa[ꠠq5#Sd,qئ܅j%1.֣7!t ]CNJᡶznE!|f(nQ\ =:MfSěKkХ#FO c:{EV9鳽ju7YzԡlCQ+SB'@i&"^QD~s^%LIF25!@e,ӷ?J.+ ϐ)ζSӬ"2 cl/S>`,Wt-?.,PcX7 }wy-g= 9?!ԃ'J nm{^a` @/O2j]%\vGRNj$Y\ _{pd vl[]ǟ?q˪װ?NbvӧXELD̮?"Wy[7b:]>r'/A[!Xr۶_M3 zBwÿrZv]}mK{HK~GևGm 3yP{?cMۼ3Yd;O?C\3N]q@ZpaQQ[xDW/_:HF@*69彾7rJYq$Ply乞u oP؜˞@(3Z<.ܪ#L E,|ᶷy=# +iY±R\N6Ub1kꭧ\.B}d{si{esr[Ѫ+}T9 ʌ$=@[2Z[e>,Dü?A7t/QR2"֯I\?^W75ȷBGgb>;X 1XIS`X[bNaԷ ӪEJk?',弯{Bv+J[~۠T9p3e~gӥ qל:,ѝBgr+/>CMƎZs;Ӵ9^! G 'G-GfuWzD>[|"pDrvF% Y0V^jUrC_@N. >n`L-E T>26nU8  13ͶPIXY2`~hCF[T˦ןR|z$MZg>D-o=_[7='x; acq"}\F*5!˂7I'cڱ肰}$ޤ }r /u-t }]T"2#1 +AcXBk?ް^TSj.3㋅Ÿsᡄr+$Ñ-lgS\ &)1't~O7 -1g_ bw7u'ĵX(-$Uܸ_?0Xt5{9a)?;2I#b!wy{ǵTՑ#bzc`J5fyBi .lXࠡ oY#LG66|AVW +\ɾ(Pٌ{:$7*atEIaWv]~>tȊ_@pV^`3ZgzlqbBm* +endstream +endobj +2575 0 obj +<< /Filter /FlateDecode /Length1 1703 /Length2 8424 /Length3 0 /Length 9440 >> +stream +xڝT[)R!ain`gT;)))Fs_5kb~b? #n@NnaY b32jCv(6. + 8B@ Ӄjp +xHaG +QnA-Y-@rZ!60APA9?i9[X=pWrp >(@xH pQ<0 \\d Xjeo@`'?B!Źq><[-㯥3= Qaͬ! ZpB6<+s;' +d !^4 +C- 5w ZuqsrseH0f\ e(%-濬pW7B y( < ~!~A, )5̡N0+8Wa'gcZYS ZBܖ3_f2mlKʃfB]]Z=ȟy2K?"j)5P'y+EX9:00 +h<< NAٵqr q +{D͝,0YP5_`h0< 2B\Z.N`<\t?(p9àBR?,|!?o( ACAP/rCP>~C!7GJ)yiGNIov(y~W$%_Po;yy@POݲtvt|hWVЇ9@\!سSpKן/+(rltW dtPkodo|DyQi50rLφ +T _/0\I]y:Cݫ?GXӨ h!O!Qf~4)b+3v;8pf~)獺ǒEw"5Q%:$lR=X"I諽׭;|>g +C$o$$~NrW 8g^' #1~)[^wmkȕf"6M^(|i4S0D^i+xނJ#?9tkk~s@>7 U9C(y!/E}8ej₻dNff^Ǐ;xRkifN_ݾt=낶s5ܧiޙ j#V @^)T%v]D\!>d@spG>ɲҗ(#ǖ6'XnV]%J$] VavܴTQ J4Ã>`9`=|GqS%Nu޾v)jAעkg£ĝwYŰfkWA}"nD;s >,I`'HO_m>O$d\LJ wqDg74ǷQQ9Ǔ)1$hs$bKBi\#"΁E H'4\<۰==A`Ǥj $PLGH@# Yp8"2P 彃|,KFۈμ5'AxRl8:_@CT7:Kj3fEł6}_mt,t*=vXK_z{,2̙(l6-!ss+8.vL-zFSDU[2hDLrGQ-1fa}X/᱕Ɠ }nvM}持nAM̡zD8!gNc*$$%M7x C tEGc~˞]2g;%yޚ a|lV;O2 b'ybW<.Hp"k#Jb3MЏJɬJJibӓ9$6W'?IsTN8XSȎ/@cRRit+@y(_@(ed?{6(#tn&s|_KPdk]`̼&8:fza[:[ b;vhÇn=ZBѫ/ʾBa]yWqH|R?:};wn= hn+DR|~y_6ԑ;:q>B7W \2HgVfJl1Ґq]@3f/S;V*4%n/`;/)9,\V Ʌ2~6ӁYa*q'\ZBdMZxOɖ;RZv fdSy(qڬVIj6l)G kmEU XFZ+5o?P(NaBJ١[ڕOľ},g;,g!/Mf/ ^ZK;Aݘp_";'3 h8T'f 2GYE ̈yFK>[cx7 .M3٘8mƓl:+ր1JYd@"5|cNB: /zOZR9WLsP0AvZåF"yr7yf$&v~8%o:/Mx 58Sm',m]dLz)ɬȺr1Ӿin\=cp4DbKщ"|XCnX_?_xʸCQ= +Wx Ll\khaP3hs"sf͋!2!l_{<7-=]xcؑ_Vt/*r -u!DN'9`_I%'+A2a{w۸O<v5/ nu6Y}U!ۈ m48{BcZ\nC#6ieVjh.Sd'CL8ACc1j@Sr-gfY3O \$(X+03JVDTzɑ7Fg_{}VgLW )gc}*}y\E&)ʪ:~yƻ++Ak+e]t0Pص,4=pm,- _*zr:#p2JK[5A( J HBVY\w +e=F4d2ޕ+)丆aH>hwehm䘡PTnOr{#/~j+excT7`VKN-!&\TfـՈt12! }|Ơ41)o3~[!rhoŪrql:PYYݿ K) 9m,,U6r߉̖^U&HnwJ}xKS(FSc*舱XTXjn5 Q=jخwrdI)uXaTzbCzY#=!>_ޛ'S!hrWwW\I +GDV_Mī(ƑH.@vq+5x 6,޸0 CJMfT̶A~U>0+O<>ݺ϶75v'<);\MSd {5!FܩȞopẙ2ߺ[-[f{ jcX"QaЋ3Or-TUx~veĦ>w/̰hgxﻱ\z}sP6#87p"}hˆsZQٮeHpkj5?tp3[ۏd%\呗ѯ%w=) J.웧=)ӳ֔=ils..S 0eg|*x/ģ^ga3-ڏ#T]8pj;=dT8 1r38}j7PXt;9^3;ӖNF|9E%P}4[rڂw}(Z_ |s3dPgZYt^N]% _] )f8g()}{ 3OΎ~pI&FR(jûZ4O"0tkJÏw~WJ +oA>F/7- shjsR!qs_>:!m5B<`\^j~Z^"+߿vtuՅXF!=梷FX`UEk@b]!hBl 9|mnUl@RHGڑΖՃ#k@鬏Ft,.K Ld Q#u/I\YIΏH6 +~ 姷Kgm-:cxY|~<'-fojEcGR,0ζjw +rV}8e\Fb>/m"³ƽNn喪"أc$-]aDےH1%.r}INJ֞3 T-⚺xGؑRpH}*"[e g6qU)rξFJdxe>|__׃)S`DiJ?gEܴfztCcɎ?[4m\G,\릃%E^ +[< SݷKo~aj F=կ +.T@+5BsiU +MdE#&SxbB߶.E*xC£xͣhf\汙JoKר~~mGI)"yުV8q0ol&Ge _iaj +H$^&~.v ̸?f+L^Ygջny̪+2$s%YuøOԒ&HS&0su8JTqK|j5fCjGQA "##&4 >{8FsC؟)`EWV} ,!ؗ#Od.nŤ{v{{u93X)ζM%8po gpٷkđ@E!KUV E3EbjgU}>켠8,CthpOY\줨1SEnyMzOnɞYk\])z1F/(s[@сqү"IG+a-UkmĮjoZZ 僥5ʓ}I8#V{s8d`pѺXdbTw5q^eiR*'9'x/-_˞  3 [vک9Z>dl~RJ^cTϱ$kzhӛ  #6p[|KF-3ĺ9&MT>i7ަ OzWg7a./DxKYdĴ" ^~YDƛj\( +|*L_ hI JJl$`7Ij$F-G"<$r;00!W{zO::jn f0˚yvT$jd'nD4ӏ*߶=j^h Ct(rBkJqs-#v~٫&)/uk+q=l ?n芨Pټ Z}d[{$VO8|Li7\{Z,Dn3Th N3eqY14'Pg,FMNSe#'ܨ(wEPEf3?x ʷ_<HLjm)R5˃#t{S-9+J'Nl4'ihur'aʃ$F=xD&xˌ/s9 HUaeFA$:O>&k@m$A%7o6a!"ZJ +ۙ)w~G]@`_rFFԧЃ!rD#{ |fS}/F7(_+?-bu +K&onC!@;L0I3nR3?TBhMqg20[-=#r 2b"sR+|/_%%ڬ+}Klf<$IҊݗ|6TN{.Dr;ўhDΈlEC֑ 3K3_ǔ厨3Ȫ 7Dy﹪(~W@K))dq9/iWg xV̭1ZxU5 O.f2{[?زuE۰ݐM(_˟`a+웠p&`|G%xRO\ LP ^dR* h>S2o"M8ruʻ\ʵRv @X3tLphkq>Ujg?Ww%+s?zP;ӑ uRkU59> _.u7wCXYoѯBt& T{R+c ꎋ{r:ͳ(QT+5;':bkm$K/H yz+hvWX>)@I񤟊+˶a=M2|:=nG*bz~"i*_ŘrN9h7$V|xi"zk0-,k=AEY+wC>)lYٸ5)nF0!k.qO/g* ѸUh4shxk㘃zN_Eq#+7Ȋf!N'oj[ _PAHl/J~iv`MS12̯_,,ƫ[!T pwƒ`'K2xLdj&TqaC;>SV["/fNl;O,wAuHٹ*g"i?;cYk8TJO>!5 3SІJ-hb,cznJ"4ЖdC-E ˴M!bDjHChOA +$)zDvD<4v)X/2>#Ʊ1e-JCL\Yh*?giPLVjSd +``,1$3K*ε4MzP}se0p࠶>y#eU`w_H%Nit(QvڿKͨm2늜{5tڽ, [EEV(iyRs#q㯕%WvpqjaUl!"+Qڽ u<D'i+u +.OGNV1iUK3-(L6rHKŒ'uʰv&(5: g$;2}RusgZy8=B&V{wdzpy2YXBu ׯԹ KMgΉOjHXrq*Th5Ң(Ԋ +ꈙSfFl*xv{~M6r5̊?.@v相vԠ;a`Dp}ݒZNSR2̔gӁdL' _àwk;@KF?fu*i|XycM.Q?Q 4h-nRF"M4Ot'T<k;v[͚¢sU0c3n<'ME$<脯TS.f tعjhKÏs+"$Pkh p)f*T=+D)@ ZBBk퇵e7zMlnƄ&<40۲`%D}> p"{(0PKvX=FD4]һʒZw/&($|@INВޙeX' 6nR%=!Kb/t ,!ɐ'V&'Lrƃ'?^ L-} ˂pʻQ]^CzM "CuJ~¡2ʩd ͏ +ԙ[rPW$Tn^﷩YbR\Fstn=qQ!ܖz-:ǾtغE}Ά+|Ix5剠1i;760Kcko'KgLj4nrvLP-/ yކ0\p0IǸ_*GNoЫNJgNN_9Hi gHԵvx,{rq/bj~bzc6òOdߛGמ[%xxgZz-46UjNs>ss \X !|O4;7ueE~y7%5'(Vy ]jZ#) 1>_{.*-i~zݗ5{hfShXroX3f{)ojV&IMqqƨ򚂤\%O択l{jEiu$H,89ҼNVP%m˩x3L9f~quբSQ*4t%_CΥ +#pj|$i}tga¼W32nL<"sgؾޓn-xDݕ̏^z^ڌI|^gsi(hSMB [V+v-> +stream +xڝP %ww . 4Ҹ]Cpww r33'3s{uޫ%Z{j2"e:AckC5؁`jhvdc031!,SD25={_h 82S䬝&nf.nfN3##o;k?L@; hgH&lmj25sPQ^X~pl@F=-@+ɯN S#/8_?3i4spf`#[&`կZDVV@=" ;ѯ\~7l v{i)цA uJB,,-bdG +WL`wk=  ps~q #!F':hZbgdd0ί4[c.g`0j(k]!!k;# |0bbe`gbfbdp3q08Yt2T0G/?)$&&ߵ>{? +)@F@6#ѯϳ2jr3埧@)Pe 6uąl,[mՁQXZI:X ^ 4V99aU1*XۃqӳspqϾʯXVNzNfLѯb+ l?DF )``ggkL_w0Ѓ~l~s?0c8fla,3v0Vo/o/o;|97bջ?Llp rb9rf9 s nzEKG<3D":"ῲ3ve](˿l:%wvQ'3%_Ckhgk5ѿ&_ t!.YWU +:Wad;GOKrm+86}#lhghLBH$?6Pd"0d3U?[Ԓ͊ )r6?@0Ցe=y%N7ye  k7OwnrR[uu4Un,.D=~o>WJnW_mCa"u1RhIx|E`?j*0#Ύa0楑{!*0)kbU_Rśe 9zΩe_l])`$*t }gǵo)eB'b/ }HF*Sa(m@KDHo/o`ӠIKyd +a V?c={' x0Q!'n~ʏeZUίCX-q'&Xa|T#Hu脴 5fC8u}XcV$" 4DaYXb{Sf +SzD9hQӽfjud( aQSZpQ:CrrCXup(_ jK O.J?Xo ޯhh׵m[u!>ѻ|/P%^sȬjYPJX&bHNnБ XbJQ.礼ߕdM%UHFs֨8=^9`a,wA\E@UV(ϗڌs+Yep=i蘻8 {wACyH>qEn1L1}^ēxvmW5Aq_ >K:;DrrR:'U#Jy0$&?Ks1EFe~ZޓGڠwkb)$Eک<'@x%]ig&kbfnƈ>/,{v c^Oi:$pW~#OU17\cojaz61q1q{CgI8v&_:$JAjW@ۣ1#hY`3-"i`(TL!LYu\h9 -͊g n9#v>Xu{';VHa޼_]}vl?T1Y^|$| vz. +1%jo{@k#2_*L.pD-bV\sq88XbJkF'BHO'P((-DOpJvP+@u'ڼa8Ik5Tf(VˋwJ^>](lF 6C&"G#hxmf4zێPNwn@v:Q=um7AR^C)PR̹ϧPhn Whdb?NWuW8^n% +w +.u=9L Gb4sW +9,A4< +^˻aO03%غ+k"xi8ÕzTF!%eCm웸,NJ6>$ f*pR+P٣8#7tf^;wF_'=! 䕍[ՅQHܫİ +̨ (8:0Җɏ[Uh PգcWiFm) ;WGԉaEx@7)[ۜ~k3KX,]uS =R{E!BF9)dbǔ…#;j'E;؋ ݟܾHڿefV`uQ0sCֵRu6wՊBI( aG(P.4?%L!DEFe5`wW|Iq(2b"=Y 1@jvGlσ\Yѯ8;W1+5j~ey)fE\Ѽ{KyKÑUP)ૼ'irg ކ[5{)i9rک>:kc wmJn YӸ7=P 9>`Ȗ2BdQH}Go$I[)Rٿ@/Κt/D9sDX`6Fˍ{!0صq8'w5leڮ ܃hNhjueD'Ŀ7Rj|χ{ ++ &O+ + "Nm1FrɞnVՊCyҪbV(I;8F#I$d~;v@ k/׈'m*u\Sݹ06\'z_dt_G3M>}b{6 +FY弤lw*nr5.M|Lp%[F- ZBצWrطL-׹lGD1%14%ɍNkhZ>`.(4ձ _B\ FSn~72I픂n W@H# .ߪyE@jUJBL+C@.L='g48Jx,C.ٰ{mLŗqE{洴<<EDmq3*:@͖̾D+Ƨ*С +zvQovT +!SMVgkdKF/aS~dFZڬ4$e3_iTNRIn̎l|2F8|f+k,A*[^wTZrC?8;f4irj3hdlF5ucIN1wn7֩1lV)GX/7O\=[$@fzs.LώO[h 8:aY\ Jt\sN^81%BRb즧R]u!p\Y]&7C<<' W(]mYkGO'Du9 "DJa]7a47NG$(gR/ s}mA z,-q2k{άQU4 p,IV[6uY8~vU[D)9MZz`L%H}IB3&N#LbVSDnE԰%-{b0J"ȱ,RI*qX/*S4#]7F,\Vu,Vx+ayq=e:>G35 + $Q&#S +}Hl+ +' !|2aQ `sp gB ?s:Cmq|7#-> 1DiIYWT`|TXRC&1+M9%0Vqª>Fd'(q|3j*I!tﶝԝ0foT dOo[V+U!)XHkn[:hNq!&a l=BCmZdu3`lZ/EA&c`Rg;p 4L^α!Ye)w9;C|kNO[#a0FںfWm!7 +է(*-9}'ǐi?xugij! + "d@hovzhu();HB)=l$!lэkw}oj~>a1k#+dpk^)2<א|7e'myk??Ø1<<v#pZȄ5wO%|MCd3-S(Ԏ*7|sn.<眬onYtVz@` pșG (uAi'>SYaspa=JEm|a^iRQoGw|X08+륖*#wJٺOH>p\6'6,'J; .(PuNL!S ׭ᷭ߆1(ܶW`~?W2N]_p8|끃":[_ڊ[w9գ9/}dMT*QFz@Hj.# 'mEx +wk"Sk.Uy{94 `Hr.yHH9~W׎#gG5Ei8gui193WKc1m]/m ~#c>#.g&(Uٖ> +reDD_!/[3KS IA[yMC2Ys5;^n +X+%%uffipB'A&MJ}Sˁ08v=gB:h׷UU!* |]ZeI1eCv}$B&Iiin9wᐎHLΉ5 j^e BbP(b3E+̉fX-(GzT:k=5+&U \i 6 \y?R~Z G4;#LGt aԥ3];,r3G=Pj}ѬC4oTxXI{dwzG}h`vZZcKfRZ7!wbػo:]2JX,͜@IS3|H&([$0Qz4Mstf_>H_/8ycI>]۴k*$:i|딂 +CIAYGNg9jp*h9(!nڡӝm^hG-h9^%I2a519^ڔ;+׫ '={P"{#|,H%Ve_cĶ暘Ѵ`___K[U>Ɯl- &S{P'&SE ?lrngoᗛ/QA1p]LN5ͩXelVJg^L*Oti^L!1B>`H+ @!,3ޏHp@RL^S_የ48kA[6؝G?mIC T%R͇(炛۟@r=-dfדpz`DfG/tb ojpsF/хr{8R.ߢ4يG̫\i$Zm"Cn?鋸Rp74TO~[|&L%hb&p/>/ڳ1J{x "{?=ɌOla򒔃yC[\d;3=oCYCswek.6)}'Y@ݲ_zNse'=KƞtDKqwiy//0f}ʺ*W cvÄ6Kf׹M2%@MJ}r.~Iv>8zeԚn>Ah*TSY_WQ,6bddzZ\'_BmVʼnϹwsA);,$|>\Y;PGpu9ܤYžWbM;A}$L-Áy>irIѯRO?F%cĉ k}| J;-Gǣk{S!&x8;o0M鐼{bOA_|6F% +{p,Ma Ō\kU6gE yˬ31=.|<oX +]ltd0vЇ =;5RM!K3Po@Vq%vǛ/ +;y]0 sCxbi?Iq|ѣ x$ {3]w=ǮQ1L?n7B­㠘7L*$|Գ^"DO"8D޽=o]mLGbgH1R@S fGtDfTb|G&|}ܾ'\ +ܖ KM$ : Ṛ::G!F$EI EϘqUub;XHoQ +3W/>Sǣj1W:lcE]|އ2@Rx-_^aC +܎}7w "˵e=s-R=/+~.N3+רކn#(̳ wb$mFi= MyuzyxyU5ݲ8VӁ5y{Fh(,%ӗ_$VG6HVJz68L?2/W=cq`SĖေT|ߥ \ȷ U" 1;RQJKzW(3ػE;*1ba܎X޷w:@UPB㕛\BIN ^o G^F[A|Nxew%ذr^~9-ҩlxt`{x֬`ٳSB}c&pM~{zH18unbqʏ +hWjӳE'ѹn"B,5@8_aW d$擬_W+ehJ5G.刋R->X +|lqTEv4\tt3킞AJUЬSeB^ZHd!r3l^ҡ\XvMՄMj;6\ 5iacL,td;٨,\+ egDyg_Y[ZIU~-PBЬ_jD3aّա3_fɔ8x VL(& mB>2SIuS'/t2`ĥrE,3k>>ᄐ}V/LG S ¶ w Wb9M窱{cVBUG*Aay$/ +D{1NQq5O v]K缬zN4JQfYj:Lo0Wydɬsf؊Om= SǬ17"n Iy?p̓w/P[# -ז|.VP9]A4E V!^߮y` i~3Jq <׺ 7|p , W~6Ts=O)+R<ήx\\^QϬ +'Q0DÑ5!1>yiZ:y];x6LQ 瞚7 +Q +W+pw⭬{2vLXkSϺ54\Ǭ_-J٭kmɗVBC_z?sfQFHxlx4r8ˋ[Dgͺ,HQg֠dR=!H6L>HIݫˉh?&"E ř8ɄfdRBbm +f +J1vgXr=b6xjdHmY3mǛDsɼU޶jUeInz\PMH˹eXUYC^EPmfOL/o-Ҵmǹ4/%@1 R_OUz:0;ش]Ի-kJAU4®/pkA\˪(lDӴXfWǼK+.$lD(s+m,Bg^7dGLzt;"#Q ~W>^' κi:+>9=6+̊XoTT"58cPADŽNӄ߉aSj4ݓ˼7|az}Mnq W.y ,eWp]ma)He?B4.$zQSj,yI`sA<#|<@wdI@Ђ6is+bۓ3JX7l'_2=(|m;E.AA OWدa ՠ&0+^D=S7$&c,˱ȴӧd..ɓ"3lW#zћB٩VќN5:~ 4b2W2}tq'ǃlh#lʼ418Ck3^-USn +<O`uz2W`o](=(*n\&p Zvbe2]{Ut' tN]-!|"!l{s4`b}H.*uDOCjy;nӱD +1OxopHvRۛ%k1gȬ;>R];(d2?wQ4AP~ бqZ|$Fl5xFmbe0\}7C_38>=t0"܌Ha>8 YK ġ_y(Jc'7Lxr^Eof{!2uX6b=8fZْl}/ ihD[-iFq ,'ѲdB34&v΅)%HW~庝$&YuKKyH\l<Ooϴry>p!:QZl\1zb+?gp+cMg_,Nܢ?Fa9rN󟇭Z{~Ed(w2rvm<555Hb2☍\mWᒊHoh8d*ޜa0E=:y- ~;ZJ"Iwq:>=wr3߂pə5=. ˃xl!h`DRzm,"bE^]{GnؗsǢ)xRmYJnId%q(./2/1}k.je#ҋem4FXiD9=z&лRŕPϡu,:ErTJ䘗#5|gb|6Q*FZ"B9<}B9pxfS[0<BU U)>5ˋQf$R'ˊۜJCDBCTW̜TafdP9 ]W!@_Wh{c2%`7^6TXU|u8N~a\pGt}$s&b}ݭ٢<ǵuw}%Pgx*郡G.ɱ~ЮcTq ))A?;I·NnQE#^ kKm4f5;TQ$> +stream +xڝT 8ZdKZ?00ce_"똅helIQ(BTd Id)$X}]Tdə}\ιs?<41ih]<Ȁgo"@EE/a?(hh#%}8WSR90'ph`tF\E^$ŕ H OBQJҀ.8ޅDHFDG13g Eks NY)CPFF$x]<a+,+GJ#CeOSPZxOO4c6FRđdo; b8aP>^8e_$ +7&P0(/hH^ICz Š)?_4@$3ψ"H"vPh̯:svk1e:t~횝Hׅ;#gY'|Lof2h|*1ppRZD *}>nNbȋ~1}Q"A8?a~~Qx@eD}T$-]`Z*pUF˛j>zcV]~NWaff'1L5xo@N U/kyuvv;mf,Tg +T; , %[4}z惽2CQRmIeő7O1h"-%Y<(/0TN8W8IW&gJhO?$_-B]4J;ɢn!r` !^2单yޙ>)wl7~]Zxqiv{KEk6jYoX.Pv~h/s%)Y3 :9j.mrwL>/O޵ڨQl"_'.nbU\ǜ8x-2眯@c~|QJ5 U +5مsvps xSDlguQ}a +ԬFM _>uJ_RV?2\ i2s2),հɦo疎zdXή?O/̽y=hqt"M70|քd^?Uũ &' +𦮋C*KRMUSf3im@.Ot6G0N<3™zB˸{}Z] Bɘ)s˷Eho ͵aM_dhKN"GtW70!bM?o>Il'2 F3;U)GBnI|wd7j!jiHIWPK֙s%ER8/6 N]>@v+(c*)/J*}bq)^zcrhN>dW{ۺfuIg#^kV=*fYBo5 kWIB`tjϏuHvCS!k x|Kt(d"ÃF~d0#qﳆm+H# Z7A:_܅˯T[7}J쏐9IbS$\#yL"IyX:aZRsU 1\_`6+MX&S*fyw3-P{'}U\nҹ]ڕf̒hFr=;JV=CQyz0׬h?i!ʧSZ`s)p%a^ΗZ%Qcf88HY~j?N7CkI I:}}*I3b}~wsRd8:qI38cdD`#|'3N+q: Ew)*dd˄N}[_pt6sTyXd^@Iаԣ$eKp^L{L+ZVAd9*j:y͵qˆ05 +T|E<.[=sXi6ļN' JZCV(y]7CiT[b + +E YR5Ե>ΒL kM}&Ώ#kľ4FWnuA8D}%F #^B254'ēU<ʦ{w]wfY3,dL7 +Vc$YO|m*dQ tg[iԪ'ԋ׿T?qQsNxhԞ3Iza:BF_Y;%fubyki$G9QBgӺ,6dşmleB>p!BiY+ u Hi>6z~k!ej1̩D+3If2ō)9 lO[_*b38DjIR GpmslfYumn yq6`^\]*qkq H(mۡ>dZѣ}Nm]DROser6KOb} w$>Qk]gluKH0՜҇%}JȒN~ jZ`Qft۷o-Zeaag7  1[ yssd&g~~OH y)acz!Ƽ7 Mro'%)= +4~r1dFTuke K21(;NA^_xT獕Ծ64 }Sl绪Umڿ ֬ +endstream +endobj +2578 0 obj +<< /Filter /FlateDecode /Length1 1429 /Length2 2667 /Length3 0 /Length 3565 >> +stream +xڝT 8N)"B2f1b[U< dgEH$dIl)!iQFTz?}kss9G~'#A# G"OwЪ(-I AQ  ݘ\H,hGMjcW(t*HA_w) o@ =4sXG"[EQhA\ +`$;olXܦꀣPp&70"I{Ҽ P(:b2+.U*d"RI4__dtm.|jOӃL%!vT? 4'q!_'0(HB W؍J + nF?! ;~PhD&2wГL@o7&F"(w$n ֦xk=$GQ +DZ\wiF!4 hXu-uM@ D#ߘ7w_5L4D4cmU~iAc sB#|NHz_v폢%F(1pKz2怱>q#7_2%uWui4fuo)ӍB&⨞!3ȁ @fVlG%t + +h c5T54mC n "X2 0C*F"S=F VWBP2W @RiLnb܋.(Y@cky +) ~pWRm>;ng+lv@G^u1 y̹&=h!#)c:U׼̊*8Fdf[id=*Ġ׆*C-3DqF5$ڟ=75ʫ~(#wͻ.p3&(vm}RҊv!I4|? q20 +w`mn5]bz"w8Q")1rI?7lNJ4EkwX+κLDacjFֈ>{=s9 +zsHOK\"RtS2Ut+\L$}E[-ggΧ&JQ $F6ӛ7ڵ{>=xai6u +F 1P#;<3hZn~BXބ L_ h9`x)5h#ܲ"1x~1q1 Z n;>Q?6 Ip\@oRL)$֋\ֆU4zL؛e /[5Rfw L}}ޖL{#H1{XFۥW;-,A\-5ՍNTn̮pD?eVN[5&kc-G .>)l͚zc~Px`GRXݝF(U]ׄN F{҇񄢉jz~kԵdܶIArKb2^isMA孚( R0: ğos.;Pw2nȼ#l;1"̚[|ǫ5UJG'Z,?ϟK]D\'IK~ KiWt7o:xxػY +[F9>ǴSMmGpS8-8+pݤ89t3T~AH8/mz5sY^zl?/"ו5[e:Rik)iغĴuRD l3u۱MҊ)]lxnFPY{Jʌ&_N8¤X[_~#6P y;hZ["\`[tVtsG*>4wt[ߛb1Fӝ~\ZA{]c /gr R]#sqy Ľ;kU)gxǭ!chAشkjIE [O +s_&s!WͯÏJIZV65]\WϿ7r㾞lѸ.4A[aXa~}jz}Eg/錮[{DK+#ouOq m!;>Qjq%r osRE3ukayk9چeҼP '>rpt4oUt®ƫ78$q0~dzؤ<Ŏ=At9!qmŔ2вoI+f FS:%'1vʙP$bKS Ǐ^ +׵F27TM^,>mŒ '#=U=Z?' 3g˙e<;nsS+Jl2#iO nm>i>}y:q탬kǑׄ>]6h^MRY{L'|_mloU^ ;CooTߐ+{!S,̱mx`]I>\/a1ȶƐvx qם||.o;|Mkpo)7F/S]C. 8R]0c'lg{VV7]4]#~COeVXae6/5;'s%Í +[j+3E . 8Y+ }TqoxBwQ+2_L2yI*M<aR,JlsMY/B ˺ڇykh#g鲼zk´CCwikW +endstream +endobj +2579 0 obj +<< /Filter /FlateDecode /Length1 1650 /Length2 7735 /Length3 0 /Length 8744 >> +stream +xڝ4k DfF{%cQ3z]D=:ItB.DrI}]w{׬<}vy~~txeJNW^P `cB `>UCX H !.ZK[c5@  E0([%A"H +cwrBml]N%$**{"m>bprp4\pf- +w EnIܦl *^ iKb\~P0>ԕE#WBn}x'ϟ% +k7g~ lAC$[_!A%t@A0 +pEA|?Wx 0qXAmPkMKW$` +AϟfvB8x+ײtuԌ*' xo@ ࡈ(?o +J`Q0,,*PHPP$-Ա/]sVNrrC'@! '@2jso7_.p>h܊6p @߅+Y:>'G>RutCd6ZG)=:pW_s76@XCpT  + ]@P + !?j^=(0P%8Y60ގ7XHE_7 χprpvss_swC@ 1? E~3:{0ao&'= ˄~3?Lw;7A?v +EQ_(;q?ND޶kxۖkv&PO(of "jWzV-Kf<#5*'ɳjr-Jl#٨cM:3z.7N 3TY[i=a=vocM8HA+z5Ex`WOm=;ձ8]YՌEɁyd$s)#@`yng]FRJL'Y*E.BzzTNӇ]aHޡ?ۨKHZ2nt-*' paFKIT|G_i?V7|8iOȜ:xy.2,"9TUX񑒆9  m>wFB`qYřhm:R՘#C֊Ok]2lc}Kr,{@Jlt{!%z0Yvʾ+6}FnZi[N)bF3+Jqva;Ba ]D]T #bʐl 4>껹~`gSD7"R.<-;X&Ґ3hRLuCb5u7C})JCQs`C: 4ʢE~I~K6kGe[.ψx9MZ}O &cƸkNb#AwKZ2Fh[9<N"RM)>wŦ_4rO?VshM+6^6=[EP.>K.:-IzC\J gI5a'C{ +nZwRa++0[К ̯wKJ1몌s6"ZқF!ÕM0H´/胜wO5%{TY+62&o&^8; s\#?|7sahzjRhuJb&Eʡky2K:MQ+gh՜kwVd <?ȊZlS{}Ѯ)ȕH#[/L¡~1Xwkkkgh=yOĔk.rYfxlʔP_o'a8Jw#hq밬0^(}JFrk_eiXp:Ȋcdyά%ШƱSKtB;1﹇$m/MLٖbv%M66: &Q+ۃMOd {_žH3`f:|i˂oz?4|C1f"!5?dfu, <Ǚb +̝W™!MP4|9K9/ŷ0zž2ʰZ'RZX>J\徒T֖e=y~4C9CPD.оJ8S.jOI5S!ƌs_0q@Í|- O#s.Bɾ*z9rL4. +ViEkI|@巉-:~{ÓITA۪_]{+Rd޸ ;>Jͣ#:wϧ56,zVWgj]?<-Og_0H89^;q k^96l .``]>M~nLhHqƲ*2vdT u+}1.xtLa? #Zad%*)k՞V?{]Uc%rD[._˕ n{oL %_%{B +R mɈSֺFxXd]V=>B\bvq#(HqW#oVTծ$+hYw1mK&wRW! -[7v#t-ykqWCs Xz, +̦elV$pL/9z{;.oR&m2 \ՠt'g9J{5 5Ew4M=?r)t(߇Q#-^(>IWz:ĬKyZWLB#+:1pw M/Jc9a$f=@4eoBRMSgWHè񓀈%3g hw2]\?גx^],{$3txk\ݏ5xfO +ގ٤5B+ }͸3F:O-{kłT*)b J'jÖ3*Σu~$ge;' a8b~mLCsŧ?ɏUb^SpITo=qDp8|<J%k {+uadj9|c2R~AK +ݓ H2gj׈t] +Hc/:% w}R8>-+:' +߸ /L/l&2NYH-qqIH;I7+eBG +AsG+sXh,~gxmoJqEaY ~5 檸6Yp~bƒֽ @RtӨ)!e@-^NtZ&gd;[ұM&vɊB5d#;Fp( *&~F0Nnd9bM{kY>R1ygTXR;#3blC+9F mϛԳ 9},Qf* +u\Ɗy.2,Ld=G|{`A*lЈnOm%B$͆Ф+t /)ט*D5qxdwMMWR_~S>֝="l@݋TfqhA,.L?ag aWo/ 5|xjb{ +˘ ru+.Aϙ| - +zAz3f&zҤ!1~*z)~{Azٱ&56I{>W\6C2(:-K +»3U|˭R_P>f> Dw1oX3kEr\GiIv5Y:!5g"ۻx?t ˏʞ4,c~iB6t2ssI3ݹ5rΚ'&2E:s +w.un< +DIjPPXw rvh +3}hj>Hϗϋ x~$S>4=TZrJ=%]o=}^e +s8}Ep͞ݮ]Cs!TT4ja`7g#,R\Qr3/_)dkIk*>>K虳'Zazl< ٽ-tυe{ԖIYfuG#l"Qn\, +<XK%L ϠGAas~SAN,Rd *:g/Rd ĭ +6bAixVt= L_8u/WԹЪ]Mۉ7%_l<BM 1e>9p#yNF^dd?_S V_9pRl^TCYAQփS oS('}OXFR3zYOLr۫,K!$O9yaFZ_26Uqv*g_D3{Udg8QQ?'UDswV-.e)?.Q4bYcȁ @y1]Ƒ2#Ǔw|lk%tC=JnrHA aN?VT̢pD_w`=<Rd8"Pv$}ʁ%TvGB_fۇ +ɇC[d4&NT6*&TrgX y2hc +J) ޽KNԋoWcׁ_Ugf"UVOH\8s<[]0/* =8]|ml{%0SNvĘ=v:PފQv*{=z*e8Gh +,Kd\&<~P,0=2{#PfKjO ./=O79Y$egYYVR("*^7D}4wT`q'/`K; +2d>U+;j]<P@3MXMR^Yq=< Ho38I ,2+fņʡ㾦6д+>KS +׎fiOXSuaʭ}0P|t?Ͻh1ChYu?RN!Nysabtq Ah,+NlT 9Q~k`~H5\ջtm~!!Y2>t]{yp +5MaW^Ab>%V! 5zDoy:z,/eEtm + l jUL 7~lt]ɹCv#&֛\y{lW.rpz&~AcG_P=5#f.ئcd>dݞ Sl"//jRs =$87OIgJ]jGG͝tҚEX0ShE7?_`np)'?.̬CF~z$x@JHUɣ~.7/a;ƭJ;͘35U[ ؄2rڗΧӄm d )Ir8 ?'#*AȽcJUi{&Hcer`7fPDU 0| qqgg%:y1CʲР>uǻuVBn2D]P$ >%+NDr-+хi9VAhX˫ZźzzeP"M#YL0{+y:jm, q}ѝ͹ao3Ro蜨[h#g xgmg=; +tϽЩ)b5`OGӇnia.$_N}cWpnt Oept`̳/ў zE=xAo+ JnuR0fSٰ*ޔ#eO H`%N`]0Jzn~m=s?)/lbdO.4]XT}y3hD2kcAJUSPob‹ͅ$q}5B`7x9^8}.S@SeEWLVѶFu|^&ٖXjˀ4g5?.[{?X:9sz]g4JzYɑثו NFE QbGOi}SޅUwy~zJ*ER:tm䥞PYEẙi_~ 5> +stream +xڝT 8"}̌ױlga,3̌e5KTdI$lD,!I$-δ\9\d͝!Ł?&QTISR&,Hw F@R! Hf犡6iD@&-W2].A@r;$#= DĀph8U {{q$"X,#>Gcb8ԏfP~>2gqX_?/bI *@/D|/aIApB.8T`\,Ma] +Hvf(4mB"`s` ?9P.h@R ad'[>i@`0WPB,U9JByT^Q.a(~2M]aੜ¨'[}Vq5$, كH^>{0ڿ?-׏1iT2΍5 uzg}i-ŏ9~Z$/,Rg4X.62Œ?'|B8)A + +[R& I{"g48$ŹP9y@p!3 (zс? IǏP/:@?VA^A'( aA/P B~3u_ ?aAݟІ#,:Uo:F2=#<nWh^B2P|e*pB~=t}L@} !|VIƫ` %ƾ{Ŷ).YqNC췗̀f%{5>~x9^>UfKmlKޘ M\/&A%*gkj%5TNbm Z凭NuKwhb7džnJ~+G٢C>E $GnNf.-΄~ej)1}IS)^9B H`iͮ8[^;#if.2L%E;..Ns ߏ*ӱ%w +c< +c[j^hKi|>[(u7OZk=DuX;L Ɇ̚of_z%,.ҨuCLϜRnVbޗ )* 3+ɺ#LZNŃ +U +~ÇVFŭ+75UЉrE!/XM~9U_h 164t+SXSo`.1W`Ui0hg_uuX=^F UO*ѧ X1XÛcO8(Yrp)2ՄesVOnbU ho`rْ,>*gi'9& Y-)SyݗiGŸ_">>r.0t/sВ#zΐG +sp2Kk 0]d#CljQ\È "OkEj/&Zoluh;B=&nۅ eP^1n{i⻾®34ҍz ˂CuiQ-JF1L;&?څruUr ފ -MQ/[{?5(h|fPxIzIG3iv<*v<&Ϊ, _ϘƳVLsac;!D+B\~@BŤ*m`D~{Kv4tw_8_|XdmLFG\;OtEA;˛#MAn2\sXۮ;+wva(P"1{[_EO3bX|NdU;\H0Y2ytח4E+xOS >x\ iwfgފQ"ZI]B BmF)}˛,R0TR5ci{ߞ%fQG{2i@=m3gQw*v߲v ]ݣk$ ?;-r<:5/eDkN.<~EizIŏe/G\`ifF_/R7EzX=qBa߻|NXv)0 cH d#9IyI*[YS0COPdWe~QYVXylgW2gW﵏qa)u˷b'ڈl$KL֥-%`H4|+*u|̋nfygE;~(R pcѨ>qeΔ~C3>:Kw5 ^SYZԽ5nz-˘p 4h,&q鞝?0 㑖 U2mɫ3vjML$ږ1scޛ΂vt9,Pn3"se>Evqтt-q?Ol?$ƳjE=6q%a#;N$L'E`꿚 +E7Zb1>5~؝0*pYq6?'Yt*seۼWt헧Ϧ;}Q71VR&)kdob|ms b"7Ȋ/K>ٔArW𓝖uh:S;$t]kw/>~ \J{k:%p|Z"W/ٛG4OLM-]jK.s/"?ϐ[[-LkqWbƊG2AqrYxCW$\tq8vh!=FXa=y$s +a}T<5\ #B pÙ ArU}Bb8EV4ս%9X8ڕZjzfjicl*QxMd=Z[ẌʿbQ<.3G$dbuvEN"&@0`4|?$CTKZW]+H;r"*ۨո囓}=Ln|8^l@blpP;s|`pl蒔{:ܕàB찄݂Dskދ`>>hRvbþyv/H&&}ܪ6]MJw"͠bW4Vv͹:C +_|G85ekop`Sq;z}Kh&dTUDW,S̲{{<]4|H) +s~?h e,aAO/^#:1 Z¡u>O›_Xy'8R2Ы2+Ģ{%ijAt]Z) =]kYDvi5hXZk:g+37$zl/d&ꖚ(T{pru! ܡe~a5mLNx=umEIKEg= )߲l:L;tOH153'zlw DrժȢ0;t.&(bM_ +2d4Kr |1tJ~1s.&wa}Q| +Up1QDD)(%LVGV Js6F ua3g-xT)#ai*RS +endstream +endobj +2581 0 obj +<< /Filter /FlateDecode /Length1 1445 /Length2 3656 /Length3 0 /Length 4568 >> +stream +xڝT 8mFd,G%d[ֱgƄf:Y"d-eM.%D"}Kd)KEMz]9晹뼮:1Qs+M,DT,DR>p%@^ +;MzQ1L!ʿdM:h*v$_@ +p@A?(d"HAOW&y x72 ~T?Ҁ&ˍN7"Ƀdc*V Gxg(Tz }X5!E" +nT܏)Y +NR$ZtXm'HR8~ ..@I~DG bwxY >Ο$:"DA 7c~,q: Ih"6Eph +D TD{T0TuX36AS,D%==A@FDY--?@2Py(@  5]Y(NGp< S!%E8!OSt4GD B +/q_[%iJ0 A0l>Tx_?MN/oCxx%`nL'T1-$xsπ;sJhH9( hF}4 +b Tێ1D,H As piA +PTUWӢh +~$2 t@08&a0߹Z,D^> ~9~ p%+b +~18'cVLc\_1@E1#$sekh +6v]4@XI\Ff3_mʵwWN=xS-rjpsQo>hu{ʳpm>o-'Ui|m^],CbʮNyǜߘS_Ph9d0fo?<2ˆ‰SUC֕RϫUR?kjYVFv' 6NrVM~ܩ/C/rd +v=>LV#w%\965?c9>O|dsJhC -1WTU6ƆA"5q$p!oӱ! lBvKs՗-TCd)QMEyI}`VV 75R>)6j +x>Nhΰr~&NFB%Ʃ6#Ҕ3m[kWQ/ڨ d,9yhIieVmr1ͭ%5)6'\\NF~:Cmz d_WOHV!q؆r"˛Do`(^7=L#{4oܺKD]WA=s3da Of|׻$p1^iy\(Q~M¤Li]@Nzz+Z=U&mᳫSA~^#=s8bggL>kD6'?S?Mn.lz^?fv&#yCٜcsPlC.jJV#?DLiKvWvG|Wfs3o +C6p[J]qsu 3 +3ړw1/~s vBHT39xm7 T"'6CvWuk[L'wnʷkBpE=(I2]{C2qfGJvAnM^^ä\SP쫣;2'Vs`E 2k&>2a]Fe}-m"GBÿ}^ ՋQ^ u?NoGKqU/ է22>絩I5x %7,'j gB^!,>tR9II)SCȩ=ڽ(Ugos}Hm,gw Ï"#/Z;tw +P|%3K2VCEJSko[`%g*+>MBx}x$=NG|m}wOQ5tO+ut>;9;EgQPR8 7oUk.ޛYJ"hA'Gm8g4EK)쯑9$`SP쪭.:P8lm])dl>5. .3_ y.˗̇V;c-m1MM[vsZ=z!^&ҰJοvYx' MQx +]r"&zpQlrx>7!q2_+k$]mZ'N;Ewxv3vJI +}{>\c]W9`s9[vPK$)pWtxbTbfSQ[YXk)cM$pмi_ύ +SE_)F>oՍa{T5LxVsxV]z 3e7VI=1}%%Bg<ߐIgȽPy"gHm3CQg:e arX% =㇜n=8NE;)d Øeqf&1JWGݛӇU+{x+g۟ LJ +L/R +( +;) I8Un,#_ f % Z z +]65b=ku7Gp>-p +NJsƼq3y-`\,FC!MtK?V t$"l6x`m0!a{[.eUE̍faMLbێTmXm$';}&7޴A-F!,O#ynD ;r8oX\cu^>VPiUsy˖|xt+z /j_ +sha8gNÉWq1'8< MҜLr64As/,]ib]f"'ɮ +lqXrSCi8^X ÃV[w>喕:`NAe@`{ S%ny6k3zsS\I-6i<$.q{S[@]"C}ۓg9* =Q7Wҗn&73.Ȩ޼z. =$Sad~}Tuju>g85 wkYڸ}kJFzb3w,>sVxlXNiJH^>MWC?+aPH*Ӣnu!Ϝ G #]LLT<燇NN}uj3@QuK}>tWŨJLF۬gm9^WK{I5P QyYƕ㋷z.fJ|/kr +n =|Osk8V^`/^I 76eAiOg +&-IB΋4c`nF* 9X6=2{&3@uos|41=heRr=I2di!G2k(;,-1 |`+shslb_rgʝVb0\غE>u~{ԭ܎ +CϪ@w qL}Y/}rG`\9[|(0')~N(}Zx\MXշ]3 Uv4fvvy&ՔRW` ȀsK[v +~1^ϨۊㇾP)'%qaJF5 :/ߝՙq6#N^6=~z +=Ir o6ơs4Ο!i<,nb?Wu,NwF=>HR1le>2H;z[PnOvG}\u^5_[~6ƾ=49k?n"*4"2;^WEOs^;X+V92_hFz* 1wkSdzEjrFfRwAM +endstream +endobj +2582 0 obj +<< /Filter /FlateDecode /Length1 1651 /Length2 7641 /Length3 0 /Length 8647 >> +stream +xڝT"H M$t7U@z/ +H;( Ut қ +H}{׷ֽ++O߳g<\lHk +A{k4]D\\gJeCHo" +\%(Zf Fz`!I!Q$( ЄXPD\HWo# Yyf@:#eM-ÙuR+0X$vpvuȶkoU({_"0$q`\%eF:e"~U`6y <'giG!SS0a8Dsl CHW |Pr+"0` apѿ0ZP +0A 0u!mg˵.0X^_@   .&O7ƆɛAD +JąEbB](_} B<Gj#1p $~{ /_rUܝ>@WZ5"v +!8yHÏ_u{:mJG`p_}76DPpLzw$Dbbep}!N CաP$@CW`-a$z""gd$z s_#"* /f*uͮoov3!?L\_LDG,B"?oT~x}G(CCqGk^~0̆hnis/̱6ZS`mUgz"LMb@ZtG5lmXJ''LբGH?5>:o(7ఙoxlYСIޘA=Z?s6vyof2xڂ1v >ARφT}7a),w l +~?(0z/;|I#7l'{<3^$P~UeȖ_kNBpQB'wݟGD%J+ոj1}Zqc YKŋ(PZ&^榰Rc@PԪ3~r.ұ9GQ9Y׼[?;kZ<$b`@=zұ-t( o,`oɨoiY10a/[\6 X硆EMà'?0O.Fk85h,$ (QFy ̚מӌnOu߅>ﲋ+z6+S0E`YCԅ Rw_$NQ\9B^k\oc>{?U!>X=]GDV$@Dy^pzm-,GJ1[r1G>4èEÉlzByOB[zPj_o璁{9|.>%࿯9$6>\|߭Gj P]T,3 +1|'|DB)1uK1STLcyTp%;9ڣ|z|6 +ƛ"x \җU٩O<}>AiKEu:IAHüb,u{׃.Oq u-Е"ԖԖ5o³.2!% npEop~跼N]f|:4@ȎSk jUBDJO>?ēSG]!$)Jٻ5 dU15gT<=Ԧ53q5 =QA=44&ZREoy; GoSlg@NZVQ OT/i/28E;{yu=n/psK3,h. 3 +2U_EkԱ* +{fhIrʐ|%KÉO/}yJϧ.[)7*kˊT!JI>O(*']w/'e{-J1AJΘh`uS_FƈI d<؇Ӈ^?Ÿ'>6~S}E}SW2B!T$T6=Yi\_!K]? 7/Yz@2<\{tJJ cݣ,@]ϳHrN>ͤg,@uYpzJC&h[͙<\nM2tQVIBzREߖj%W+3TzX/Wщj9r OKy.SeZS \K]k&xK!N*j\f/\Nkrp_hfn<:e%4-Uf$.KA٧gLis2 Í-}ÖſKF?YV:C7^͏ꖋ-sBWW/zz$UsL9gץ[\pu8('-!ƈ0ho+Q8F fl8UvA|?W_̈́[K 0dZ +-d!i yV\0ړVpI~F)Ü9i=qRsM9 X&z#!HW ! Ѐ៩,L`a4F,).R2?ȼdci{©lWz*5>Q|hҘFA5KGطn66ظjY7]oys|93 c4r];A[$̌YW [$}Q?~: K?Q~7㡫Q6Nb܌C b*e~ZMfj0[귚ofq[ѕWvr9HޏP3s9/rzEj/܈W$Wg'yjl#c2s%uReF3"88(s˝"4җO: 4~&SCía[$S^1@O7|%g# +5l(||E^Ei{KXsryburбX5%Є%guӫxNtӂZC~t wg'Jаi`] ]tPhOÈSWn{\D:)^ߣʞ:>\kFGɞX[juJEY6#KmGrDV0M9:Z<hC'#/2.w濬6Zx}䓖x7VfY|WIЮ-/Y%r|򐯼K7ANwZ>i5m:)'%Q^:,h,fg< \@ZFYRG)JbN4?4.-|-kzxYJV*$kC.Y7QzRV˙|eБ+=% -ȤM 2^$0F;^3Q!,wW<{ I- zIui'c \M8[,UܹalKcۉ;a:Y9@)=)\}{zj)qԩ1Z5 u(\Ev=Ʋ/.6P׊ɳi㓈Rp$8*{w'D +:~Kjҗfs7 GDI4ΐ:lEtӤtύ>^R6Ǯ46c׆t,Y4Q+U$ <)': 2[t0q37_Y] SN4kMckHz]Vh ]N~-R9Py#Xאf5z"h!R?j4Up]3?@>;/wT58QV ++*)C$:B 4vea '~j?c4x+k4k+]Sn"iwaiJXjIOT.'V9X_{&-24GA{qG1>ޝqÒOﭾ-S|n9쒅{~KHcmdx^l;ѢG|J `,+ +`|6s@MdrܡP5 i;Pރ, |^6+غ8I-S\Bf8%ܠه VCG)d+z}zR4&ez1j}C7Db bU?V|xʏF03/^z~~srh^6M wySIGUo!_F Gu8SבI~U""-3balA:}e6ϕd+my<8WVA uYrMOP$BgSLDa,E$hU7iܠ +82*?z^Aݻ`$䌽pM.ʝe9qr$eOjH1'`jaRF,`.rH3WkE?,nqQZ6q/U쐒O&*S?ctqTQp̡3b|؇cϨTy X-^,Ӟׂ|hʢ꿍â2כg}S +l~vGz1:FQ #81WF*S؉Y>u S~튖~}ǃ\'[ITwuBoLiѦV{=D+$ )͇ ؘ9( p6} j!)y;~ixs 0ڋC'w,aY|?XŖ˻J7x=y2K ~ 8qY3$2SF~,:jbi9+|lqu +k9b} +*l4l,Zᩡp%**4Bsϐ2ݱeklkÛuC3Gˮ[B7۳Y]xG- 7(?|uUE>t.'1vg_M`lք~B ]gWn+ai>RK Y| ݃╰:vz&xe+ާ絾: H1T~q5]?7ĐCcsdntv5yPڻncnѕ0xﺨk;sOc&N_RvkM#ĭQwH.wf&o(|TPtvORcvaAdx<3̶v?9j-}„tu_F9.RSdHj$z +G9! #QXQKAXJSQ? gp_ĵ(1>3 rIQ#|N.>sIh%[5M!ab9#F1ۥ{!pYb 4 (Md >&e>7>zq=}lק7MYY& +_ +r?L;K1멸x\~W#`D@.z|RY^!rW@:S-zUJZb4ҿ$G!Ϫ+ HV^m$GX?@1]5Ė}KU⠼ɧOt;tnK<66ܸq-F964^d6[jķFC9ӗ>R͝r-EFf02]X |F޻oӾu.%:1,-0w띐5XRII zze,5:{<5-k\sڑzefT£]0VADc9``ּ4{[$v_hYȉ0U;}}t0Kj;8x ~Vٜ: ;n|Ҹm秙v.8VBRt-DkNeG\E#OrgU.5nTV ,P),%7b3AQOӧ==I,GǖN5y@_Xq59 c],be(Ō<pF)/4J<Wkbe||Fn=I;&ƒ[JγZ:yzi"pҷY,(XAP7oetJa]C.WK5/G.I,μu?2x)6T2~ +u]j:|JxU~%u8~5j 68!@;v{4Q}tb@rx9~둁2?x*JHޔ u#Eu^e_!p̝/VH'T(/@* +"na7xj{\$4C/9%CHP5R'KԩdG\ ,r.TFRʸ*Xa;:yX'/:k4ȑA(@_yb8fE)Gp,V b :\QN-c$ F9<сۇRĔŜW73Y_U8 -y7-G$WĢ34/\P=R7&7trrU4rKLr,Jgh4 $j) ßٚj' % }=CVKaaaWMgWѹ$Kj'U-*[n +OU +C ){ hz-iBoTJyA% M3|1 {q֠DS4ˈ-'}Brb{g)^kv`b;[]3TFA˜(}^K vɏ%VCX2T[|2}_/˱!Kic)9S"&;fQלg>]e߫Iĭ='#[yڤBui2EK !KӉN&cI5Đd̖ KTwSy4,GFo>@[+Z Â2l3S7-Ŧބ*Ŧ{rz<*,y0OtM~Kp2mmT6.O.\?`ȔDnm<\ btla LB+F>g 2`3(^R\``ƚLr]V}Ҭ nÁX.o,*H()iTz9%Xws7x癢ZH'mI#Uqtai7fҮͺƘ"dW^ +j)`֦ +endstream +endobj +2583 0 obj +<< /Filter /FlateDecode /Length1 1739 /Length2 9043 /Length3 0 /Length 10088 >> +stream +xڝT֮qm-hp/PݒA"ŋK"[RZܡ(VbEާ{s|z滦|sH) q*8\<"+7ˋȨC8@8zPW7\]jxr>PsxD >^G+ +P:ZA]mpe]a6  s><@iWg[ld\3mw+뇢%gqq6|Cǎƫ5<"Pd2^6Kg0tIЮCАA2X 6>U/H/مu%51en=q=toh: ju@'^)aq~[R!kβ*!_$̄aT=eYB֊YN{95jT%3XѠ>f|XȝYϮߧO_ UR\CȨ̶g?a% c ֑vM>Z bԁ\nuM[ݕhY'&YSQ hk9 "w k%.!kΨkҼ3O`FC(C^U{Se/DTMݣErle/>ȘG$*˺VẊ~Viy𜮇i36RiWU:!QZ92DX 7 WI[y'2;]FK> ș+!O t2UqCs 2sIxNvn)|FF[RQm(AYN]{2^SNxL Ô,_ +}2錚.Oa h~M`J.جS,{/^c ›YsC9eխi{94w?ßh>̵]ݠ(v{Q) TP:sdꈣw?ɟ׵N5?Wxȴܷ>G_6>w57.| NWЬFje@6:O7EnȐ/y(g- "^К騲Fxyjx:gwHܼ44a?Bm |]^4ןj[9רșꆖt*EQUy|M75VG^m)>K|Jr~T1F>>o[-&IϥP?8_C9QLQY{6[:kik3j1kI9+30"PE=0S5.wr$+Ԟ8Hp(yi%Yn?F"-x.ɮ1z|kC{/VDTyld _/q(N47M'(\{rk LNDu-|9o+PDhG~M^q%yّ]$13F^_+ +N3 G=!4E$ƖRO.3{7݂֔4{6v&!s$哸o0ґ( +@ũyTw_oÜf. (|V; mi̠r\)rc&70?:gxJ#Iei cm Rg %hf!!=@%GKn-P=Rؠ_ +Y:}$j]r bZ ژ ]}陓##pOflލdV%Q /۾`Kf>#0_(Ag<]jY&6ͤ> ɮi-.xR 7.NC=dk +շUy:YƓ~JE5Ͳ* wlA^{ɕ.2wtC[I.N(k=hy +E6&V۳78& ҨhtPoRDĎ碩kzSކs[I\t +qMت%* ܠ!YUQ,rU><3ՈnȻθG{SSTzA{Vi=}^_ ¯LJS\7үz?N&_qcV)j?;lNH3BEve[䳓xn¸0 ؋cW<:o1җ_EWWȈ1yXvzw.y`}<;^GBzyKg\| ӑ['5"X i۟:g]W8l?V/JEVf{4,Cμp g8=YH/#5ˣ"Iɯ̰[?W0aS6{!7w }z>Rd& *#hp}(-#5V6q]:MED-߾ -7B>8>F 2ZH_LsanĸS ƕ&xҞߢkb+n\ve0/%LWuWL[ns|JmSM!ͣ`Dr`A-1 xΞ^ʨ`N%Xdt[=MXsT]: 9/ac*th FhHi/꼫^#{v1!hfLf̄??vuoܞE<0uU)lXȵ.ˉmϘVSLTipbV{]y,訛ʃ+Aď4BK8kҢ˄ѷǗc\ȺX5Xb&aʆ*8;3u[))n/u3gAӧ֭.lˋ9oyQ)XRHfb?/'Ki|ַofMΕvW9L(T;ӺD5PEfgM>jw~]|zYgHՠ}5_v/P4>[҈Jojqކݱ2E m>//Y4|)MXb@9 J\3?/P bPtLJoOAZgKLR*'}TT}hBZG֪Zt Mȧs"G8gcV3_x@o6 ?,e2&p-d|YFjTd0ttSPZ6l~F9)d-)}߮`*!sT}87{T7%i^%~x[*P)&s(vcD>&U;@jW|ȑJ/"e+qߥGbtP2fF MkeƸU_kZr/GYPYqc\$^PiO" +tÉ2x\\AiT9kx%Ѩ}Bz@H°\j`={k@>hE76ȳJA?$SҕCq9.YUye颡.OӼz8ݻHM[!TrIwF~'Aqv V\9 j%q8l'C~]L%* +:Fmӎ,e?(l(}}+̾*lK@n5~{-o_v(-2G1>+8&Wn*cc[tZeg (I&EPq5wĎF&hb4:­pr>VR#'bڛl;R`~c/ 9ȘDQi_&m?@w#<`J)av&AhjL,Qeq8蝪O;T$ y j@8/X=EI'0VjȒ2wAT)K5B|%ҴdB%a*޴r\__*h>1 +v"TTu`N/rlR UJMW_f{mAWʳ iχ-ǀ s7K `tdr"! `}GeSŮ)]%ԩԣ[h0?[iы4nhV|TvNaXuCVdMfPf`;w?v0觇5è]#M02N{AدȢ|ӦF}12}Tv,!*2Վ"sJbEeY <_x;!+;Qf*ǛUj#Qa w٭>Z3g^B޼WC fV:sYkL\| Qyre`Lb b%k<a/g1 \夓.x/p1D +y6 H"GWM\T{OURQ5{Z}kDYЪNktd2|r gSc +)npgUkupz}SQt!_v;0w B$+Z~ArF#؆}FM#6AsA:@g`aӷ7^\;w3m#M{:0u,~BعZ/B3'jRXvJB2y.|nMb-@B(XGdtznUhګՍ,VFpze=.|=EAL(4"t6$/'.jS6aJz9h.luӛig (a9Z[?;}?3J+9zb1ܘ4RL&F%=Npͭj]AAPk'ƾ$n ofTm'庋cRDt½EPƼ tK܅)mB0~ >Uʛ1$ΊP;}[z;U\KEwU_[oe̐d (k( 3fu ~JES>'d/jB +ت^ӽ@|[u=a]~,?Rud"#gn+EƷp`g2oMς3h( +i0i~$,Z|7 b/jqD< k!">VР ;j9%),b5b윮ʨ[h%k[d2ʎXnB!. u^͖ӿ&|;|JƚBZΓ gj1>'OEn>!z-D }' Rd\pp{ nw2FDžk % *ثatLB +oϯGnQ IHE ;Ojn|::\azOVvXGO}M >9 1'mVz͆ٞEC|n}yea~L5I=<9GR}ze#<-|$a0,ৈ^q~>fb܆s,8"^hQQwXzIk=۳4V֓K- +dziV.`2ћbf} MexyF|hٟa_/- di߾0X{+;f8m)]YOM3'/CӦYIM + Na-vi]p3Ҭw k.1ϛ5݂&*ژ77wl>lbw9ms~&"эWFo.ܺL}vr 1s{77|xIQEH3p@M nA$^c$Pv-Xx2u ;xi(P93+b SE]00{8oe(C{D}HgE@͍G 2AKZij6={*VtI_g4r{(\-Wy$[AEb"lsֆ+_C}Kdc,_Vl @KP_ZH/ CpN/|z έj+&F|u +˃Ţ'{o,nLTֺ},̑FԛR̴M棖0ixfqNְ(^2 4k&NV/NK,LB檰(Þt.y_W |-8 ]+UNMWbMWf.wOVSD*}EQR:|X̪p+Rg\ʇg<$_ѣ}l jcnJC1L +O"u+ļ<fӘg'00;;uv%z7SAO>NnS~4*jI{e=+s 9W~EBR/DtD^<ZE\|a-q5f_e*s)m EҢz5F3b(GM+C57؛ߠBޏIs9RkM,W8vˆr}BSցk?k+*KC&2y㱺hQDDŽߥ0gha $<pŭReQ$)&} Sv#.HIoAV,AWQ5%KT}amx~K~@֣O45WbB/NK '!^o^OrԪT*aazB@,g(_]741=f)%B9 +ҮqC#u mPn8RdU(ٹ n%7svgϳ僣eI_}oRU $xf/jY;JF|ez0%Htu0S8$!8vT=a={&#$WQ9/pNsV} nq(K4@:1L+4﬙g3Rl.7«[+*HYhɋS.Eu{;]= ]*GwXeR;i|Mw__AGMj_gO=Ϥ,r`֭fk9s$TK.Wҫ'|N'B9wgQ1A~gElإ 3!cC`{E#2^ً9 +Vg[j`ǠN>Z/8znRI}fr͗e#:P˨1??RK +dJsց WmemͅFE?7i,7JyOJ~| ";whgeP]cbX0ie=xUTgwV + 4O'P%oܴh%iL0`ۭ_L)!HkTϥVP)( i&RZ,x[|6k22,h2L_u c4R`=NB3 >d-F"S +SBY.N{^d φ@yo ݔ@(o#G! 72[LJwbAj +wk~uQF>?x0cy>(+o>FUi! qS}}Y X8js^4]e +v4Z +endstream +endobj +2584 0 obj +<< /Filter /FlateDecode /Length1 1570 /Length2 6341 /Length3 0 /Length 7318 >> +stream +xڝWTT&Dtf`IFJAzai. )ii$z}o[~sXUr"aH !07¢G[BY`(;8D#5Mf +PF: ^(X!Q?)( PYP,Hg  !!>'@ec7hL,H+56O0:) >]q)3yi$@lh i짊ΌCٯsBJ"aϳO(urųD fp`Lm=Lɟkoy -dbBK !L]m63#+;; vjgQ0wTSp4fGm0!+Qp'.7݋F"VӕassK+!t@`ӌu k +,  ?H |Qg<C! y]wn{sXtDM`6===9emVV&PU&#pEĥV3\mد8$Hf>!ɡ&sZ;LUh_s0*%/ $/uA,0;; X 53^=n`&0A0`B9\7׻sY 7>G@{ _o ,'=oLoߎy?@IA^?A!IKQ){꺔溌e3ua0' (ړ"qzG^t0!9姏9WRV2dC+`:j&t⇷y8@ronv T<{=i2-b=i޺cSzAz"KLfއ3"S`̚ߒ|1&7||j6\E$#o+WYXCjG g ].\|32]\/.zD3 +M+1D8LJ\!YsW jU T?{^P?n'łp;#.+KLDJ˒9w (_ T>!_peW wjg)@$R rXeİ6'qQ ґ(Lr'sB"IG,4[Q?Wk)hI{btTkl2vu8g4&}ESf|Y8ݙ@ +i!|Pb2QkR{Å *Pz4^m:ǭ 2)t]xgdc?%7RMtTVi(/ɑ:X sƎgkΦ?sYe W~}xU*q(yLiCuO.;"xQT!4@V#CZ2;_M$;=Y>Scm61=Y(ʙǜsْU1s\iSҫgC>ɦ F[>&2$69Q 2D+A>zJﵞ 0g?) kyU,Xv͹?^QZa_.T'?׷xgdl?<5SPA[Ԉi~CYߌۜ]N>b2&o ZE:P3EFM|}ƚcVV"LlyԂiTf#i0bT8Qbd^YFE"ٚ)4gݣ{4Qy8D;gӭAyM5 fLlmP'!|,GT﨨/8Ǐ@f bWd-~=9Ar|ɅhCۼV ([߬nz@[]pUDkiQE~wԌwM^_'ƹ~u-,k:#9 <zmN;T~nɤq@ߏ%.u<ص})@ 9v'WǚFہ_`~ARpWTVhpz}Z2NmʐKu:eEݜIv;rQȪޤDAfEy7"ٻvz_X+>@-x+nR``* +j/06}ZtnDeS`|epN*(幠d+|`ɥYl cIxS<#6_qZ&D]XCq񌙗rN=<*f>f# +?y^E25c +DPRtt *hX 3erOB?#պ{<{?1~FLL/`{e]<.~.\J'u-(SO4'*XSKlV22Rh$ K*5:yݒH- ~)H"pdxj7xBB 2Y'>9A2u4H\(#cTL0,9N0II$6y,h:ENSJ<.;R}!sO'^CmeAYT֪D-:)bHv5?l0MZcè1ͪq/إ<Dc3HReW +WZx_k#-\bn\0$Μm=xzxjx;Iak:1oVw_1ߦ,6(|NW3UR=ײ/PF&H7 Xĭ]y',%Ӵ tP}'ɦT"{S 8=],7' z̗z[#nBEn&vj: O 0cP? M j¾kͻ@w\|&6رFi&]%S+B*} + 2]pw $H9$V5XV˹w]8- #]D94ehgΔS&{ !f҈hok&Xf̋G)Tk &TԎNWe^Dugz$BW"Sʙuy Zg@Vls%2([.XmeSkCqZgcwj'͵?ZFTP|UBөiE -2T觮엚r7NXr_| 2T(VK>>Bʒ>kO1gmpKYL'o-G Y{I: "ciLI댧,W_ 'NZX71&\cFts5Ś3VOul5\L݈yA.KZ[Iyo89C5$JƂLs=NڙbWFIW!=?">1O beTd9aa 2%#K$OuM%T)g1,Q0>`UVc-tNy2ío\+WgMNsA 16XQxL:;KdP7 MBwfl 1c[]ZpZqp={FeWL@˼1Vw$YVɷҤxby :RxW ߫1Sw϶ND#&Z`RH#JpPq|`[tǾyaH't|<@Jwݲn +gHp( :J:5X=+/Qa>FpVqwM.ؑF5Rdt͌Ѓ)ēGԫTK߻gK\@X:Fh@x11?9M}Jn&ۜ'%Jܿn'@_|2l\پ@Ah5 +endstream +endobj +2585 0 obj +<< /Filter /FlateDecode /Length1 1647 /Length2 7254 /Length3 0 /Length 8255 >> +stream +xڝTYPEZ XqHpBq H!xqw("Jqw+^\ +H)|tf:{ֺwe埜y>>{FM]fA  {A wB`3=1Ct+?-%(`_8 (pkli;bm0Y0@<A6$b[@a0k{@ aL>)? b߯ȁM[~%/ [@@^ (+կ)g+(|s4 E8cZ+-s}xvP+jKGNm(,/aì[;n6rw1 ͠ޞ0G3bt6{ .`oX `k %ϱqr oFA9/dTeY @ FO> ངKqT3eP+33VfT! `!hq?7!m u L5{1QI;qY3]Z]>`0#us$0XHB. YT ,lh?6 @j0gȯ  k E͜-@6`{YB.^>n o.^^'pn\-'_ptAx/:8]>$ #7qցa<\1.o&7xow0ALyo7< +c d_nߗ+x_c+}?n` pmM`eWO$9Γ򂛚l[f[y(/zM>wt9x @|8 +c~ŒDn'9>v]ƴG/TW!#h!r5Qk_O"wwtB:oo/R6|S y%1ScV!"9:ꚷTJgf(LtzʫI +; iFYBDےVv~kR>7,V&R9r6RUԾNBeArqG$kdXHL˜=h8pQ*J):#EVEHmcjbUE#CD+,UJ^GIp)!rouȴOV<r+E}$4qIuVvo'jjl>^vDIݖ&5vS[,dO^Dd-[8}uGc24AMMlPx`%vU(eēu+4ZcOeıVb2ufWۆgY긗XUK +,91MYcQ& 6}&~&/p(y)l|bx5օ `TC,yG}TՊ:O"ݟau0xE= E%qf*DHxmK@0{-dN|T YRz%ttuIwvdKPm^GZᄊTގ$&*[J"))w]S>̕ B.5yMu^]NcAi>l(`5_rPtd4B%ʇb.^dњ;.T ]UtZB+pܰyգzT̾NzABˢu}z:L> ዟvB=;6:A/4KT"-u񎬌~Y:O^fZ#F<C(R@&m6ؘ W{l gmʗSUk/UO-Q-5oXl牴6̲( ԬRiHT1 o[mV .'u*y v +:}z3ڙq8xnA^~JbeY(,) xl;%=C +]Epjt=) 6aلv8KR4+ N݋ъ[3w&_XtgxP3wDA$EuIcHkXR텇G3AILOsK{c s + +kTXBb3+h,6ڏxǒ\/g}lZ-) '?#_ 젅~RPA+S[g~~9гUlX׷n>Pg A]-Wc6R# Lfl=1jB;A9%hя3Ȣ|S%P(%aF5?JaSȠ1o\Tl9>XDj{~w^1?eY ?|kM%]H Ef``Lȋ,y`e[}"%$5K0}'n/o=tmGSlчRvNF=Yvxq3d^j=)MXppU"y r FQBF9x-y$-fx{R=QK +7~ +u@8σ;ʼn- մgtc=QSDCS*Tn5cq7\P& bF0,ح@0ky^Ab*ܰm8TJcbjBs}!dq6dkd4[)|6p{;إ'4Hc k0~n) +qf؝[="bŒC+˥Hcn7L=FT:y5Rwhqj9݉0({#ۏW~Sg [B}3 ŧ覲vI&"Df+Ø#0Ө:GHq(Hk>D5Q*X nZox~6G+X!l+ O_9;0ׄEc(ޯ.zqdg}NU艒76;`4ԄvV[ xgdݵѕ#ԗ΋<8@Gu4㩿 + ;SuR|na*QsGҼon5ŏɻGh#j 8fx) pv̞DeK.Ri/"!,G(9sh9'ϖȉrrJcl;QڠͿ[H )Ĭ#-w"IW8{a_[(;5P{q-0YFQ_7VsB"NJ7P$Kq=lbX&uڥz}îHx6#1cG'zhV Knô1rpxfU+UcmyS-YNZL#K"zI[vΔk܆rև-'ѓRa!j],{_h{>uiLѕsJUozU3BA(ZJ%R&?T#_/2ȏ>'!Ͼ/@SPk|5ՈaW9V!${I)" Q}wAdS|98 e[Qt2'3l⫣Ul!o, tF>bVygC"R5wIKr_§$ +ܮ<(.RrNFg}|] CI?"WCZCnpB L_GX<'md3J&ɽߔs_@)?ސ32jFwJ1$ ii%"6b"Dz:e[>,dEN-PsbU[R]<"ՅL,,r1u'PT׈z}܋XJM*&WR|ΟDmoȊP2gqd)&&Z|ŢCKB*{4٩a`wG<An'$t,ԘfsӃ7ϩQRIgr%J"l´x?-2X˺OByZ6p*~fb\kI_ts)TmrmFwEH8q񪶍qߗzM8%'.1 BtHEMA)'"]7q 2qUt&) jIOelF8eڇ12: +/m_b>ʢ@{#=%1J`\- UbvLyv %j  YOV/2]m`H$p>F;N瑬s߅QlY6Aw;TNp);8*LMCI'߽)>:8CD:Z> ֈ-q]+mc V~u_IG>GN鉹R ־eM=y]SҖ4 @&zߍnؐmQ(ƶHn +b:iԈ1Kdg +wH_k%~bR]x7 -MI}gT>ܷfݱV 4,0ѕ}n]T UQ\IsR^ˇ)o".UT*ٶ0 ?y|OS%%6q%@PJ!oB3Osxy,%lj% ^p3īhP.ddw=Kr]l¬wVi"֖4r˩ײ,e-cPNC6P=ʦZr=uPL#-vkdZA6wk6qK'ۦC،w@? +Yt ;υ7:~{M#eIj%Y*M-gGt3NsX* +LPZܶqh4^yCHe^X7AUGs B؝+2 J>n젌8F"áEOKj>m!,m%.*& &#DrքmKBo}/Ui& L>ڲiX lgO H +F +ѣ}^rLASl,bARSr,)H==X1qv/0 gC¥r@i4pĊ}Ɂ0Kpw爵wy.ڨ6Hw$P>/GKt;PBvFkI oV:OĔ8i#m*!4 !9m:P_3Q$j>,[5=8!$T5&!*1e8A57ƫsz[IXU4CN`Q/rڦ} 9,!}fg3r|]NzYӧrԪyU$>D`eˏ/t]ߞ:&zkof/{ L (3z)N+5 )GDXΪFiP *Y:d|F)j3M|ҟ?si|;fS){@2PmAY:5j2&'۴%?~%4Lws;o61[Y{*/@. +߲_ĐoicJFDoZVUZjՖd]zɧUHv6gѮ~UtgḾeYJ&R xCʶ>CuqE2fu20oT2+B=4~)o% *Ş6mheh9eh.vv| maNf:i::Q &@oL Z=iU_OC|wOilb$|vkI ~dY6yd; [{)8g\}WmB!KɃ Nf(>XnM 28P[F]cP/׳һB\x^GX])`q g> +stream +xڝT[ӯq+RZ$C)P\ Hk"Kmi)^ܥ@ŝK9=u׺we%g~{̞0Шkr+,` pC0?AKk3Wg' _=#W5sTTU~UR 8@`t! | 0 /?@~x-T7/ +0+8; 3jV +wZ@/@sVC?{ad3 f +UIxy;qY3YZ]_q2KvͿO\`" XC]-l˿6lA._A>N>~Ak=\  ӡf.} f_,P50sv6>7<"pq[n~9< n ef2?~˸a`?L73?w,`?w,`C3?{3f?BCC~?[/?wC'5C?7S_?fPؿVЇ@qb*ʶ-[E2S{jjܣiNؙ0 [^\ he7~~̀nVM\DJ=/ 5]%훺L/w/oE# Y*I$MYkP9lTn𜩃n=2Rm*,X- +K A@̋]*\]ԭT'J&@G|lnUA.B?'dw^VۭLoIe{:#rPwvwڑN;A QδXZ~CZ!8~7Tqߘ-?`4f$ޔsdᝫP!<;o^?Qrsc}wBц?+g^KsgּD?QzcI_Jŋ;R=bVLzB$kձinJ0Psڎ*|߂\bLUѤ卽̗j 8 7$|\;LWZϤ'IrTIi7s~ޞتLYRԾ£ +v>gLȪ3R 㯕1+z$[C$E|/qGp=pmctyX^VrW{DҵJA19f,p`BET Jb5$4[TX (J+ +$$v8v >n3#w J0_ i,o3ߐi^bM& qY7oq5kd"zAiX2L~eIU ɴc[wGE B7/dZutx&_ +cb;yX5Ln,gxv#1BJ8Xq_ܮ 5tfcEJE;ۣmm!xJ8%>CH(otJM}NugqΦ'ؔj-!OD)*Pn~,TfO@N̼>YWQ9i>!SzzN2-^J^Cs`U}?vkf!u(>Հ\ڂ*n/;jJgsTdʽ7wXNJU5_ʠ [4WFj3ty < +^1p>αUU@-ZƸ'СxMC)0cG o"XUfkbId%$jPjVa?c,eV]BXI tRBtY7^E^pEU"vK 5&Fh|+\.I ʴ;G@OEIRƕ}?3<ʐ)n}hzfq^?Э{K4 51*:x(ﲡ1GxM*a@QnSk6A;)jp7!rC,: .+[gM$e RTh + xwȃC%s"]V|xkm9 .jfK|@̑o-ٲy-Jzm36C魆ϥ?!0猶} $P:0c(b_K)fyޭqWڿ֓o(E >䜮4Q +ɀ*7ŚsHxU&kL2S28z؆&<>|*%OOUӈc67"X9;oqV<)NL }W" j r4Vv[c0<U,vr^k*g ybBfhGSG]V f(|tqg gb j;o47xw'"Wx.: l76Rw@#Gv;yc_q^1#qqP/P1_ѪY{rZc>}+7U_jJ&)t )earP¼d5|MiߔUS6R!1y +x溫v,t-(Oydc[ϮoGkOy+91Q}) ^( ܑ̒MtG7nnZœtb8HP!Ns/Sȴc*E~y^"ɾh3zKM-4n\b.4rZiCs}ϳ ,w.UmPBwq#/RHen?Y# [ڕޝE4Y+S&to]kyF|w~cذ֐n>p~vf,rf Θ$Cc oR:=yĖAmN.vL0s|x$%ySPO%1a}۵C읆O<--WЖ=nW]B>*ub70z=Xנ1L#O´bl0u +6:+9BeyH &tG6h,:~T7|wab$CIO6-6謣)_]l/[bGSȵ$.ԔOns@<.72`~ƬIL{)A5q`F)T#cjaL'Ub,iY A팵f i}fKv`Zos&%JGY>/H$eD fG3-CT3"ֆ?)@-V/"?ζ50>LoD5` (Tƒa*(}{_N +#{3<%dH:6nڑaÈyMp}:iw+Pee>:y/vj\i;apPM?ׯt$OM:>̅Ѣ DqHOMZd ͻ|H;68T_\%ka;bu٪ࠓYJIݧLԅ_yN +Px&oWAl/EX sb$e׵Yʕ/ j﨩B!D˙hf] }{"ݭarY'՞a;ўQt"{t7r!tiMNM"3_@I7 +,IZHkI;ķw"Q>Sv0VA&&>,}~7yҍ2u|/cZQx-YWGP1E(j*УXQ$gOU2'_DFY \2yz{uC /ly騵g޷ϷɊ&̪a +.C0M押z92{X};<2 @E:,S v$joB pl3Y؃pC`8RCN~ KYǠA&58 WU9!Ӊ!$.'Rג9%rn23MT2M)~YNia1+Dۣ7e6-sNNSK`[ixZ\o(RU<ʮke5B-μPrX_.sӒ6-BĹ&eٻg_VsJN;拁@J/*n|ghZ>S!{yNݲT@3OʾG!|+E_Mv^jܠ/]t_bUb2>QLq)fcJ4KLjՊG>jgoM :rJ1QR!9;,,+O޳9ݾ0+#n*Ǩ~Ej+/}k #f`Jw|=`. 5\Řјؠj6;IN:|2`QH'&t!&dd>kB܇gш#%lń}~5KQsrue{нTA)䒊4lo5Y~)%dSW*0sx߼q bLy 7l#,H2pq^ON#Nhi+NTĴ-~oػ{L?wz&7!cA{޳4]^I=]ʀÑUXszU:"%]fk3jMٱmEF +>(M#4[0M>˰ݯc!43:JGPW~%V:qQtkb)"si$VE יhI@LٟȩBY_Ƒ,'u$͗`Df^bSOT~FqHTOHNmBE&cV&vyafpFzI>+ [ ҽ{ms^y .^2Noٹd.l\"8LiT.ѝE^s,SO8K9&/r^$-l`t|Hl EyIc_Ώe]=o_9ǫJVN^YPay.?J/\I +N Mˆu!d]Sk O/90դ~_găI鮸`1Hwӥ 3_g-Pum(a6}h'xQL^ c*=w'ޠ,%H#1%&5obw)"x0QNVF",(eh, XɤI0 _VtCU؊t7SME56y%/KfP+5+By6ڿhkxfmX}#|7J}ѡ:vի} [cdoޝqD +On):B0"ޣ<z?G +]kg|eMCxj̏wmU٦"NH儉kQf 7(n!^Eocך$YYRxXs`|Z˿\%WH/(E}E3Q:Tgz&ELL&0UA Q7'5K}T†}ZDGb!dupADwVIC&1rr0 i:63"{oO|Gr;ʱIr>ߣB'3]n7r#xѯqiY?L#R/f"ٵp~K%/ iNQ~SF1!23̷Rtl{ht| hUȇ ~-ODzD(0sǝ]?D v?WK7((o?Ǵ>)!N&v†oOqarg?]gUΧ>)ϫ]Eb zZ8=_BT#|llv'&|Ju1F{P3s%&;E(?GIz֙^4aȠ'{~C՘'wG55#jق~u+q4h|y4Eih݋]n1ӭİBDވZgjz6|J(,J6wwFrxDM$Zy79b+ZEꊇpş]4s {~jM(c1ǂ}tWAXgXg,k*XRsk5Ҏ?#^$߃^_վx||C_;g>Ψ&!@ɨvge |uϔ +,+ [:보3\,O|bhI> +stream +xڝWTTm&A 348() Ht)twwtt+t^O]w{׬9s߽ga斴BX@pgn0H @]>0Yl1A(./;_2W4}p0 !?(H8 @,H +f X@m`p+/[ sA< 3n7] +JkqWJ +xn0@ @DXgݫ+ +( D|Wq氿 +">\S l& A h_2?E~ W$ +2KBVn\f?ՇM +oyAln %sZi-m + "apExE׹;8DxDD9_@V*Lnm>A!4]OPWh/r^"pBM)ZcYm4iYĈA+ , Y.H~JYq昡5ITQhDT|_Zq6=!_jpRҙ^kT:8ohf~)RyVѢ_Dn i dO#Dk_}nR?(8`-lQf 夼|'66Hl7ގܙg|~7ZANv%3U 6x +Xo%ȝi)u`U)"~T{jW|AǪo@q'v+c,4O.>be4e5K9#qwz,̝g[wT]L^<("Vr?VwNDdUU08onu [!FߔM^]f.0@ rS2}[nBh|=6FNh\+e=*0֞Q+*(y/Y[8=h%I<k 'LJKj+'.'+t7a ϴ:P C .\Q\X#Bú1n`ZcǏkq)T昑.Nc 8oS-[=9dh4f^CŢǒ^ +yJ8nq^qU^1Lkcv&qa!e' ̇ +>gӡ}$\UAjǓY-{6`?dHs`8;j@Tm8/]_ϫp&*?9ƍq sZr!9ճb t?l;sդ`TI9gFCdVG8zod Z<~UPy]@OGZJ2> ㆤx`vb.$Dl# h$7&Ya.w] /oZdeHԳyl弐Mi %bRIn\ohqK,+qz½1W '_0g.^Y4!QdeaVQ& g?-YmBs4( 0CD,PJ󌬸5ivee׻#NTʁ4 E:]jך9FIxX"l?%ۼ&Գi&hؑ›Zb5Jug.+b9دjjBg IkxrrZءNS0oㄬڎ:oϟuu?ۂ=YE\Ώ=|Z2KHh' 3_V>1׼dsMb4=$Vm# {Ьhq' +!nur WMFƊOD,%]^+o%z],":m21&Ȭq`-۝8% G=kPy5-Eۺ*0rS^,o}obl<.R=8 ;MFJƳmTw:Kov[jUvYܓkyZOY +k<[UѴQ PbnblH`uft0-ؕ_3wYuz-Ƨe6uf>\]mxqGS(ZN@Y>iM:y)=,|ztz#;@5ivfY@ĂgezVZsqD kt + +jM={L%sr;1r/5ڏqm`Z\5rj0E5Y$7džT>>x9.ݖEr«˾hxZ,jws)/-Ƞ@ZԢS;ׁnǙ z񻈴Q6'yz: É3Wףi_#4)[ +D`gsd`UɢYR;Qv, }L& 8Αaq.#!#_:|[5R]ݧ)rϙLgE, 5a$SœԾX|ώ;i< + ? Nr2OI+ z͔OFԃjL)W>#ak~htD 1OnՋǥ`QUPМtH +#Ecd GE s i2#&A"2sJC~sKIQH~]2_rG̰)[[cl^>vJuk4S75/Xp0Gu4t<=q3<[~ir=L~,PgbL^EzI e2*Dsض=18e>%߻Rtѽ~Vqw?lcʈ LZi9>I75wqR}GQcQw04#^).&Ie 8qTئ*o vj(*GmMWaY׶#`V:Rn?X ⽁&ؕBu[Nk{u"!|,a ko!"x&{05ؓەԔ3!7w3NE_*byiaڶѢ7:J%_|:NnmAa=ߐ l96-+6B5m /~(S}ѳ~P11&RleSؓjE^ +?l+Tz`r0mg.oTcBoyATe2$+C]eWH!RqZ"{SgRdv|k)Z;.Ԣ]˚>{kklEyR×y!i-C̴>1Q}q-= (y  P?^B9@1P- pE9x= +sQکIzΚp9htEC"(Z wtxywK5tcX^,M\zd(HM@t ew;eaZ}췈f'g#;+.$hjTUW!y'h"_s g┩8Ll^XK&i߻PXik{p%^NZ5/Y;IDHnE}f$nH0cjU8ShȌ`g:;5mN +̒-3oĦv7"1uMFfp o9'nK2;&'0@$ܛ7(p~t(AkW Az$q4E=+zgZɠr#֡DgGBͱ:䳆(Ⱥptl> +stream +xڝT8UVJBQ[b7$DVJZ)JUm՞sɓ_~ h NX"L87_( "(~e wipPHJAEH7Iqp)=|1H'g %%E@E34AQh79MH g3rps%?`SqCh,(()&$&.)/X,PTBH"DJH@U* +#QN@T h@@@0|>V (,BΏ=pEO +{?z * @%D5 Bb*3!UT]Ea^Rm@ |08&RtPx[Uϐ Ӕ\2gns 5b/ 6ޝ?KAMOk>$G='^_`6㼚>7ּxآJ[ثBc9@2qzû6y4wYbdɄ9A?mrKfd LkjɥS..=n*(K=+؏a9(?`YNn9rw/k: O<ephW1X$$ҴH:+@Bх2Jq.v$oF' s#:vyy˰"s`p +2ȮcK^}?z !e,yrbI πPcc&tN[݉KVdW$\D* en?&+ X6Qr+{!/93*|7J7$Jk(c*H6(0f*Yt#:`B cg_h2$-*ZGy2Zj`d%PW{7C(-MDOrϧb"5w@߱5z5oas/䲴Zk1ZB nzm'R @+X4s$xkU庯ꐪ‹Ɵ4޷QN괐>|-s6b,MVvVi_pZ#Q:U6tsv ANME%2beΧZ7JSIf> 2ۧ#Kn@钑FVb3%1Ᶎe-1OS|.zĖPu[sRJQ/{ya3YQ$ބ Wd,bc'RtgG]+ +vsZke6ң)+* -b3! ۾/5eV)5yqlK=Pg^-Џ3H.ه ٛ4'$cI)$ q=cܸiKP $ma9{E&~t:? +M%4Pg)EYΖZ6-($T mQ2"*ClySOa$gA+$\Bwg#9 uKe+ү~Sk.}YAYȮb?>jAїA~_'bFft6X)6\mpIzSl'X.bY+$MQ#yg7{èĊ1]njYeMemf=dWVlHMndRI~RX^WC:O,8ѓGlk& 1p11rmeS8Cٳ>Txb9lI7;bLl~\&>Eڎ npH iva&xp(K5Lno': |s=>ۜȩ8 8)',M5`~#NAXpĐ1&ySuL԰2X_j#']aH䫬$b:m– FƖ%ИL 'uG(,ȧYE5 S{hu R4OSfp8%%4H$O^e_{s~5&gi^3@\vjd?_dN9Y04/FU2OːLV](]}<{;`2쵘%:P͊bH@wb&{YtxCnʵ_Hwv'rYS]lZĻсsI'3rr?ݗj+0}8Nȝ ֪Ԧ:JĘmSK 볫r=ۿy~gN&6o-zp"A} L,G?'yHkBY3ǫ#F1qgĽM5w[%Tjh[tm~U07^t;k`{ɋp>ؼZj)ΐXcROhoWC3]0tvJUχ7&Id \pFWO1%VZsU"壬=´# q ?&?n8#-&I:uD6j1#+owx(&ݜqYsSCi`HUGmeM~.Ҹ \KZs NjRΛR%cҷ.ŵ=W&)MԂ?鳫0j/4,c^8BDt~6H!w?@a];hCI+֛@܀tJ]v1d'-c 5mJ 3).ʭ >L2]8|p9n`º洎&4{1E +M9](]8x~Ol}iuDzr,¹$dO[HM"}LzJ]N}.ƯaDyEufQ)RD:DZOw0nu!7I;z JNw{znl{BXlċ;?H[Q-'S:|P?Mokh%7 r!@M݉9}bGMcԉmɳwUH|f8|CV=j{/J}zC$m8>wul>C*.ǨjQZWad +,ٗau䯚GĴ4XWFrV0cb֮ 5~Hp3 +5W\!B}hHlY~WՀH½@D\V;o&ג/# +҅ [̍5r7(,4 fNLjn9qͪkkJĠ!T ,Փ&hu?#8&#gedɥJh~qKf w$JM1a!O/ ?ٹ' +}dq(VuH)6_Y}.sKW&~~rZy6IKjM cjdcFRk5/ɧK$`y:"/D,7W_ʌ?-JXy?^XD e/B(v{k[U²+]/u:"݀Po6߯?U5qXsn RF`yVoJ7uǃ4E{ajB{r2$>.xv6=պaUO:U>3m&^ӻ7,E摡i{;oGe)Y%xa{Gm3C)ׂhOۀU;oSL5c4u]õ1sSjYFO̮&(q*ǹ7ܑYm?3Yv$*EXd#BA^nxgHCc;Eɿӱg[W\\Bcd>kKSH⾝`Mr- UɆdۓhBKﰯ5%ؕjht;4ݔtz٧/Uj:^:qsw2szVT2ESd|N$񦫀OoM۠.f>㶹xv|F'9g?r[8B˭7xoE[=5opbNjPD ڣgQ=Ug)Ɨ]^L1_ *[D)xz`k$I4$da/پ)y{yQR ،YӻՄ&1Rx +YhLhguR$G=6txQj3MȈGyK~:=dCU4u1GK1JxOFe7ۯ!N048ޒ;F=B]m0-pFB[$%<1s;xhUɩE(̽bW}cAV~p+xg+HY4*{ȩ,31Bz,.CЯ!oe˯`)a[=XKLjqfxija]dk*vB3tuhen5Ʒ >+?4{*h; ?=~ul)MU91Myr;LDh ykĚqAWq~nm~}lh0tvE9kVO Ty[X7}Of E]iF IW}9?Swif %z\xiܖ??f5+*Lv]!?J)y|~E^SK7) +.2L7_+NR-N=c[f2Sdq";ZHE%uÛ1CIɻzgZa>7\Мrj5();9`RCɸRGCCVő3gV3Ȼr_꽷AEa +endstream +endobj +2589 0 obj +<< /Filter /FlateDecode /Length1 1423 /Length2 1149 /Length3 0 /Length 2009 >> +stream +xڝT TWnWثH jXKxB* X $03BQA @< +J"UPVڭ.XDvsvON&wlnR<1 g 18,fCkDqy4N b<M F vp9< (' CDE a+*L!Xe$*$\MXˀ/%e]`\Un +lla&ħ׀-,j`h '䈑ERҙ6R,RmOI(HaJ 95{6ax  e(&5 V!>I4x +p!.,yH$m"PDI1iF+L xT? )ތP!#RTBDb7a Ed#gb@cA(Ă @ؿu 8Pw .y,+@&́ Ap @2!At0DS8p90NF"1Z[[`2H_6:{;Y-p + . A `'VqzR(Ss[ D4S/X)ƽQBQ7G#%V7L JzTRH/G L +CD8)pd9 @@6aIg9q^;TLJ6& R Bf@9<Hf6 )z Px@s<0`0`x7BQ31zGdITA6z<P$0~%.)ϤT5xuᘽzs{MT !YʄlL[,-}ҦXWM)ɥȾw謚BZg:W9U^w.6Ǝ+V<}6mׇ' +ꎡuq~>]!&;cu`~b?O9/urKɀмemsB\{8ff+KVy\x~jdtt?g2a +w;*ѫ\FQI;>w$7i2#fƛrKL5זZy-z^@||_Vol њbEUeM5_?yIY%t7Ng'54} ꫼2woXbSS׹ \r'NM~߯L8'7Cq(Χh\2\(e݄o_s֚mms+v8߽Е;|.Dߺ];aNײLy8 \R;yG5zϑ_y׳sJߓ+KZ hQ)L/[seOjMܪyw:ee6glpoYBڇ gu#C:n27`[.R'u;Q-1WhNpbNx:瀚Um6K]}G^nIZ=Y!s?Ժ K؎ZS;O"TRSSzL*~hM3 ˠnw#R߷D?\?썮-EoLNv̎~wP>*əVS \95:oKzh@o%s.z(xeM7Z5nfݓ{{Nc0/Mhl ߵ<0#ETf +endstream +endobj +2590 0 obj +<< /Filter /FlateDecode /Length1 2181 /Length2 13889 /Length3 0 /Length 15078 >> +stream +xڝPٺwh484=6. NpwwwwgfL{믺Zֳ^)IUL@v @Ff "PRZ8[ G' ;[" C_@ o +YyXyX8,̜q9dA6F G3J;{G 3sg1 #냛 hona PYۙyc:00bd+); @+_!<%/nh[dfP;;01e+F'SF[3ͯ\lMDll@NZ8%xVvn^M-lMŞI$%__39XXYXـnl U{ߗcC[o/{;{ pvty{, cgu d;@`/_4#.oh0I)kkJ[aa;w3\iگ䵁̿DXX@nv.vNɥAECDžO^ +;߽kXiӥ1@lyt,/R_yfw BE_¶f a'.nhca.e5@I-lggwsr6055N E gc?Xhma Rs``_ +be rrq1rpwB ?n@&+01[c; [3 ;x_r{LvοT.ހ_{0\l-~F?7Àal? c/ca~'<ߺ,bace/c#럘9~G?1sfl\|Ԋw,l|p=ߌ=ߺo'wU8ȿd{#ߎz$B +KпSa?ww"VD1#Gؿ>?Ubahk[~2gS_ d`gdYP%Dư?P=i6H{O~?p?B2򱉑itg-<.(n|eH3pxMp(mfvh8ң%@ѻT:y- Ű(mkHo]]]/RݵV7b~<+=䕭{Ic ~zLpZ(#Ewog̴Nes/r"9|@z{?>.l3S0Q~x<hz%4ORx.G.:\^%YBCe¾+1);v5Ķ&#[FL"\ƭynCɻȜw>ElA:h9-8f#_|MT?̞z˧ 7$XFj8/OdH8%j+:au Xڴ ǦJij,­o K߂|m?Z;}G-iRu + C[W-&T(LqǠLƳIRfLr'6Sy|cz|\@1= +pjD/ \}SE1+Lb Jc b߮7T3o mb좼NudYu-`/R BOB1\PoX7H/x3gKm4]]35eT6,*ny0L24݇,b,!XY0y#hwu]kxZ[ڭ\Ӡv@z:d}"/"$ycxS]R=ZLX?E.$8bp)_'chsu׷Eq8[sO;&%G'g!2 +":h4bE_E`@݆^s3b>N`:Qօ J|byTKu*ImԵlX-TT*wRL{[eth9) }!d+}b8gJ(wSɉ͕ϹVsǙJ YerŮOǒ6?m&_F$ZSma?HiLϋ t]K|r&Ĥ;lKΨB?dݱ楂A{69k8R^hޫ$^ߝW:~d0P!,t4Hm}M:c.L#M;щ Ĥ}|!!Lr5^>#S|xcDTn wn*(M[A fW NR~W\8:@M ޖZP-a +sA+%,RLW%:g i&KZ +PV"Re3P>8V\OSm;ɱ>cEO|(UfJk)*>E̦6PmAYkQmɌ%<`x}\i@Y+%,Vj):xH;KG{;EyRS[0onD=OkrF}H?M>^UNʣOɋQJu}J>\n0Ϗ{Ƈ!pluA`z\"dyj3TZy4ОS|Q iEE?ID1L0}'S!1X@w@cR~+ up@ +ƢУ)8DE{9Z\v<}Q5ΉV0y ;*Bhhi2o59_@n Y0* h2J9H">nΤծN%:xso 1ćra񀊭SeI0@ORn/W^So 0 +?%~j$4AbW>3}S?}h;FohPpÈ2hK@lfdzϞܷ(E\ W7ϳtV;bmJE% 3r*k#,8!HX>#gLb8*Ȳx{5. +# .Ƥy,=7|yk ʛ {ev+TƐXQJ?O8톬h0M +&B %P,mĄᣬ+:*U:^{QwA 0W\!6Xpn sD&qGE"/X3μna0p`:1o,+;0 euéq#6g5a414O +g8d3pMմ:i-iNяkL3\BGJKr0Q Jrv4&ZRb3C:!V!5trg4n9ÏiH-,~ގ`r7JBnTȵ5@Y"u>pjA2Bυz Q\Lwobc ay>}<$ӈsR}.ԣZd4S7A݁(vx I1$`}ءJ8MهD {? +MW:t&NcQչkCD^a;*xÌX<~gX` #C)1`ӏy 76R'>F|_B*5otl"2m]ŀԵhbF +y?=|1E &;9x#syȯXR80f#!9 T| #OXZjтe8r9x +`gR"#ENOL4$cwHT{t.vUm"|6(J c`s׬fyQG:M\-ZTUM/1(i\A xz'K#36pͯg"Nd@O0>: 'v7,wj%:pWPn~t>..YSAӌ4C-}ذ)mYӥYkEɮtʣ;D}% EqI}Id#[_Pv IwNՍdQ֭ѕdgݫ~_*Q$$`؊u~KSxFQ%⻬=1y |)79 oDlxAY#cW/rt m>G`n fSu_* y4'xCz|&͓Hi!g#ې4GiR/F5竢GpqQHrD99a`Uφ'2ԅN#X?!Vwz.~6! n0/{Q&oÆͅ4_DI#]*[.a 3$&cCyfYM#(.۾uZ߸/kA=>idA_W}c=s8OtG,JR[[(Z1o厤 X(<܏āYWd;{BO'MeL+ݸ˾`vQ||Y8ނrhVS%uY@ :fg"biv!|m`?Lf=M .'ON~wk1 <HZw,y^&4/\G 3:#ى`22&3Wc$<,Cchi<?c)^?^t h1@{ɨM~=.{n*b^O{M=&m^e9tK=s0̃ŋƬ8 Jѕ;IFҋKOg$B3KR^"KŒ61T@?|tUN-b[1p 2#2h[a_NNqiFyA V\8Erʊ> +@8ηO''G$YN]irq\c1j@BGSKR6lK]52ZoA+YZHҐu.^rBFy=¤mmws-Qe%# ʳMV 4J} xX߭2f(Gײepi#-8L ,] 7>#<^wHU!H! MN< e}w (d89}""ɒw6=P=lRm]&59;tLDdM +]#Qp1k|DGSjp2DE +aKGF>o?{`aA,|,v0{l`Lx;sI +Ӏ]yi/lO$K9w_PƸ8Ùp7WZ((`M4̤3%~šy> kc֠z?6;諭$V OZw2/i3kɵ|v۴~QscqioM<>.a'&3תWwQA05e5|Foz 7jXm /Z@5U3.BD4H@1g>.Z(qD+Kӎ-{}N)}CU<Yw2]Rhw5{bv]h+>eV3##>$We(QR84j?<= f+M BG`ڏr2z˵(zo!Y:/Y`V7HBq0r-}:QzVx 4Iɭz3()5i }k). R5X+P7ZZИpX:~Z +s(鲁:v2\UMv7b-ғa:I/yfU!lZ[yi'N_ jOp&1]-ʳJkB Z'T{ιym} C\uIZ8J#_".c&ŢqP=PpXyE5Rhʼ_^+3=G;bDq;3}xQ' ; `{^՚R!ji-g?gi6=,a|])ع<9{t6tDhJG֝FdW|v@3Ʀ >v(ľ:sku/;& ^l%¸y1\jKnJY;5U(}+X^a+W{ `Xg@7f8܆;Vke:o';liP#np0A=}{V1*1$"rZǡ=>D`of&(1HhbŴbo{ %n[XU@ܷ-\VBYs %_Pp4y7@hGVJ -2^qv +X ~=T.fq"}( 谣a12|7 dӂfEs~.6^''WߣPßze>h/nHR;hCLX7uOY{:}qedY4b=0 &魼@-y~Q&Dak-ۯs^8vm.y.:ְԲ>No@~1d/_[ֹ ػ +1jܕ[aWB-3ه bƒ3'ȊnG'v\-aDQ- X/)'4YBȖ6 mlG9SRRi1sT\~OWhQ}հ޼F788 qdjHHID2fԆHC4"[Ŏb9g8${T)PߌfXL_5lOeNvq&O'SHG{~U2}<%WNN( +̊@۩jRR Z:*.yQ5Rkp9*+ӷ3- akYR$nhX\-{c8U#S@╨qUٞ|ELi$$~~Ѕ|CԐKĈ7.RڄLG>?o3Ή+b2hj ^/N$H_Qnf:*ؿ0 Κ +&f1'J%m9\_ǝƈ6d{ˇLckTzkƲPi_ JEZЂN:4 ggيI\TZ.ڼֺ&#;4im{A 4Onxsed?ޗSHmMw55UTш!Da܍ +O` 23iPqSޮj?Cafe[9:3~eMM[6ƅW&CfR&cyW)YQ1`"+ʖ"jIp}wQ2˾a3cė%x0[M/T(8DC s: ^pEuHcALntˋӑ>[(Tk$#u$2"^m * '%Xp--9Țp3|ұy&\ >$nET+[뜑bf[g9S)f™{HOrXpAtsefUy*m~;'xokj^}V-6[0Da3tEDJ)rp#P1n2 .dޅGqIѩs#3QfdLrFjcB*/W+bAM s/1g%"38nMrH-,XڗȀIr,\nCGÈ'4G4RagX0co7qbjck8qp4Kh @:fkx8| ^!<7` WCj(D]N!KDG#XQIƶr2_+WSݐI),m⚝SN + +/wx7 +zaC@nDAwK}>Fג>WݜZ15+ +3QL` Ozg؉T,1kq~)lt ++FOwlK*ܞΜjJ|5悉J +4 C),uǿrL5ف[ҬLF钙s`I.KɁǴM$>R'7MPx엓Lw ly[0w=Vb-1yr'Y0W[y=sS[`CjD!_A #!EIO:}AN s\ +ʄR_`sGgG_CX\u3]e.ꅺ#L2'%6v 9P!`~b!*ӡ@\c>nX dLCQ|T>BFE1j{8хqi1ǽ}^wk~{r"90օO>BBʉY7f6=7]q|M!Zio8l ,$j*c.t賷8* ]LJolt@w<Q~s4X `,;uF o=0>l^,wФ[@Y2҉ɸ w1`sUY8+$0/}cLNf-`дfDn(Њ:ws{m42B!j[%'|g +QQy+O6v]d_&d]T[0,Oۧ3R\մXT[Π ϓ-pAgMT" $;$NqosΪY0?̌lVP0^i!h`}1ʓ.3|&t\F=*ĺ`xL9 `mL}zK">4ρoH^ipPsQ'p>p7d9} *=])狔9c Tެƕm/`_Ôl#^QX.<"pI &^wDayidczk,{\o3O Qly#1gr eQZGdeuj hU٣?AQn>BFyf"Mj*;;تa>0\Bu~ʡf] ʐZT؊<ƼE.nk(PDzZ0n8o&q䢙т^` HE5`7x,ES T{Sf fws@wadPrcɱhj1Sy]Jg^)6a^dy[8|R5*fQr)_ F.|yI0PƒsX#Ok}sf;?M n֠pb!sZrnMZ/CbPGİ>a_4Cyd6 +Ak[5G]ngsjUI3-G͋F2QqHY ܈(<m^*Λ[JאQ"hu)0͍#r=mTNyۂv-B›HM)Qa &iTqDO2əݿjA36Q)V+%[jI3`T~ Ljؘg9s&ڦ.*;Z֒Ac]61 F<$~$c.c/}e>h7W}{ڕL醰-_e/O"|*|pv,rPK}! ng4 +ҋ ڍm2k9Ncl2$ n +cՙ&լ |FN%cֆ-BbA4Leg}M4ŸJQDJdκfNHp)N N{k+'CGU{_k_1k#>&m1~QmU :ֽ)!9MKA]M Vf9glXjPҗz +endstream +endobj +2591 0 obj +<< /Filter /FlateDecode /Length1 1509 /Length2 6530 /Length3 0 /Length 7483 >> +stream +xڝwTT6))!H%03tw 1303 %ݠ !HwHI4*4H|{|so_{=s_׳lL:RK<((tahG(!>!b2H@ u Eń` @ P$@d E =0[;ӊ +/rsOufpV7L m)]SJzCۢai( p9z5ΓSp?_f%u{40<j C[_t+*' 7 qCQ(X_@Yݜ=(mpJLnm`!aiA7XHF#7KήhA'% ĿCB0ߘ0&7&*/LHbr +Eio4m"DXW7I=]*~ V#`w,ŘZhap l$ 7H)dRojNn#}ɩ{~mw Z ڗwԝ`CS +1ˎQ;r[[Z=/f 1O.ĝ\h{?Tիn Oj! Ǚ/WH}\53 [d5`a+Gx%5` .ce1KSMFQ#);Y`9OKXGXmۿmԮ}xߏOEZհY#q0=ml &@  vš 07iк2oǭIa6rH@EYgIh>e[F|`@<ϭ +){lYrD=w4no^%1/Ԋ~sEG-ǯtʓLitI`x2*M 6qwОX],&g;rkDuLv L6ID)BSVAWd| +M|e?>DE3{~SaRg k c~Ew,;e %+tDY&̖r (:|G3m|K>rI7Myb řdɹlkK|&`ؤ|a8aDe#'Ψӣz Q뚻3EɣYIG ynNj7/K~h{0__gb!1GC&bȽB|PhH",3܋9AX}15,G\pqqRpY+kE6t~M]o&91UON*~dx8wfWU]}ymͣ,>y,4.#aH>F]`Ĥ}A-9e̓"PjL/ `9{ u,E']ݫzqZGDiG&|KvP"I]і4q`B~MIYPӗT/ yM v 5ɫFτ:wI=oߋ5{=:@枷nCΉC[H\Hc52U8 W9?s*Ȥ{EH efeoE@"䎲6ջ +n1WهYzby((Żdkq۰{zQ_:T-K8'BmvVNx=)juظ0R*~΍9IԂ i?k^&%Q0q?mz,FsDd+d+%nM[U^;=3IOC n xqa/d1Igq )صE_+RI؎ŶpfŽmq3f_R|H,`c⭭Y QiZs%7s8K;kᵬEWCFݽԅW=X#h&{ӏJ Z։=|.IfјlOҐ [y݉JKq=Mwg4no-{E,ڸZѧ)6Zo& ?Wcx5~$.]h˩_ f]1Y: +y#!*+fFMJpWkUGA~rUEǾ@{,i&rL:rPySڎ+}"Q@dI8?}ԙElgn}C7Ml?ix =V,{mgw.ۈou4|: +XY`>@]X!#܂GSLs\IQD{mc'oe8YYN}nmρh]gޕ%O 0.{ݝT3V_u8Č">o#)**F97?U9c?fFAlи/h3']︛c#jStx鴲y?V~;HC[D^vy#L}*MʸYDҜc!k^bs7`/g4fcAOjY<-cY5G\s1A:G6:̈nNF +D=g%ABҝj8e5~[ f[WEHN]S<Ï&%WgS.w7j0y8z}HA8ޗFpJVۂHsNj+C<];yy*K4Pŷ(@OW7ZZycg 5}8{DK\κ~N|lU':YF]kIӨ +9|b̳mbxO Ei*?M N!')aiuZjNpDyԭ H!u5NJfe.5=!ݑ(W;ͼOP}>'Kܬj垂 sXȞxfHvOƘYRH8X2?(}ym=^ 2(_RE֊߲*n{(}Q|ڃႰ-] a +e}Waȴd*MHkjD߱M?$Vm SW_VyhmJ,dj [{ϑ-܈pZ)s9uRjDڿ^vBZtծr~$:]Bw\p 3_7b7mT?]&iH$= +bz2{J>1n>|`ףt!߿PuE`hQv=hKy!@Ш{ D;2,/s%yEWTWEQ>O #u8hNyk9^뚍!AG-g'HLi7lTO`!K _-XbG&x&_rReM y ^>WZR2nE D&9_elV50E5䪬k0kC)y?_13XD2>HcCUn e.j-zQ1&u+$π+5|ᖁ P{~=B(M{ C/\TA|‘D֪|s*ΏrΉ[=.$*r:7"jw~}\7@T"[5yRyd2ǰȢ"ƁvO2KXcΪ4]Pr#?bI^Pk<!QjkE;U̵=9~e㙂nbLtU6M\N @u,:ۯu(!n?+];'Qb>g I.Pqr[{*>:.XnS{{(nc}>xOeS [b([bτƌg3py!Sq1'N(u:9X2Μ)j]l2V(Osr\>Ic{KxY]2e=/.hҰ&(6ƲLcpvt$4PTdοs&Sy@-UUZ7fK"{Q#X'yVMx$"K՛ꟙ.,U|BS4Ɔ*+TBgc f6f/F']#5M-BGf[1P3^ iN+nz*^ȟgM.ҢU&\F& +9sߪ(X$υo~v!Hb̐b˳uY@0I-@SY % 6hh$|~2;p3m5m:@ "TYM׸#co"H +_dl=hs:TZcR VW!n]x0H2&v M#݈TF.`Iiaz4Ut2d)Uh.Ff\4&ZmOTe4}HQ!P3Nxwx%N$[ɱ-s_$%ǒ"먴]3<:Llrj{|,ǚDG ŵѕ"wn[UВOiXVؤҝ|.ӱϓ*e%8UUikHЭzRI)`50{Y4My$gPȃ-=+rINn"oIfJn }mxۻ߷ЎZ +endstream +endobj +2592 0 obj +<< /Filter /FlateDecode /Length1 1490 /Length2 4576 /Length3 0 /Length 5514 >> +stream +xڝV 4D~ٲ403Ddl`,3ž![d-EDȒ5]]5[SsϹ̙y>>w^[a,4K684D!j^[(JͫPo"i'Jx"ihbq"&)`oE#:U8aQ6xIRc +">Wy-Ec06nD@o% L`aM8jg '*HbĖ 7xe a-$)"#0Zċ\C[)bh4>Ma,3;dnn'~,C7ec.4]XGXwtI\rŤI3bytu1ujqb[O +f,Ɗ㤛G9-Q͂!t$2޶/L4C n}Ϗ3m> ^zycX KCE +QMطK4XiEyq6vjiI'*:e2][|r 4PI'پH1GK ޾N4Y3+ =G /c6ZfM_U?K +™U/bR0V$U(DS9 _ /$}+@n)ÞeS\nնqos!]>x:fIƵfyC1_j~VpoLMLD|>޲K%/k7"ľ=/exD?;9Z1UN5KgvB%ƛQ*ou4C{F~$iЛw9ZuhOTk)#R!S&̜!S̝Vh򑗯ԇAt/W77 +~Ǯ eɫBu[^6DP' E(t~)ѴHsVMGiMLXGLuk%fJ _E7S-G6O +:mt}7JE4mSOĐug<{}g%g_';]i['}ߒ$ V{)aIu@sHuL1e~{s+ /UN6H'մF7먧kN&˔3+ӚaG#'j:1?1 LG>,g;">bi\5)(0tcsG^aDH@]ʈK?]QQu4|z'&mAf1# x~fU#*ԍ&L4,ݑkm`?G(YW̝}*ΪVsr{pv~DGc vƙv7ފEf-OD:{} y?!087}iy.Z\CWm2wL)23id5([3vS/E_i?F^=VN=ǧ(pdWH?¬t@@?n InBVˢVk(\li9H/WAa%.d谓;MrMzhj2g#~56ޜo8OfW<6$vzVމqBjXłaeU>6.T&@r^i}킕s`R4yP\k|NsPfs!Qڽp3#x#UDѩ+fd^ eV7Ѝ~qg@`~ڱ*mKSb} +evDf\<7{`fz4˚oH$_o+/^6=ZVtgZFf:ryť.NecF cɩ \wGgIߵw3FQ} ju +a:OI +ޖT( FI"i9ԾOwDD款UY~4_+6d%\Uop,GQ 7{Af3uloaaJ6kYSםKFt6hMXj8ŋٍZZ:R9ܕbsՍ_WFH^*uf=lq6 k3:tdt-!(\Pa$~CaQo,vz~N6}5tS&WwҤ7, ^b㧲rgex|baiikODW{R.1@ny I-n!'=Ɯ\3ywEl(ڭ6xq&g]Rh%Ҋ4t|GV@xfO{By~ԛ@#3/Dz(O%[|A2L[gY<ɧY<|p4ِ!53k.RZ' f~-[+E_6N_ʝW!0`w>@w[V:CX7Cyӳ{9r==R`k?8FQmq5Գ>_ܓ +_ )hy/;xϼnI+ur{w*sԾذ',4 UlSl6Q QBoȘD +Kk~0~y"Z'԰ ~*WZVb|C\ ?F~`bR/ef]zŒ}s0U 2uھזu#ժJťgcX}Y$Bm5468%J@S6(Kk#,3u[ge. u{ϣ:RH-(hf'ߝwsu6)й7PeHc(/==*}-vKߧc@6ioU Q!{e# +3WeA62)=*6Q%jJ9U&JQpܛ~>w6| ŧA dZAkdC3jj컜xv=^Rod%N:iL-Ύϙ8.'g,eFEV!p6tx:ģ<Ƣ6Zj,AZc'A{33ԷlֵнVԴG Ua7c*19l8҅tnHy\mOn"O}՛(VJwt/bMtїa)r*Ldw%Tˌ^o`[,qPF̶69-6(Og0 +(T^zsޒn_8ڒWsqKaoc;!9}ڏB^F~C!WqRBHN ޢ\lp>|,K*MҚ{k8\lbEE,XM)=tɌ o[|5' 2isJ K*EP.x# B@N3|(zfu 2=3e&yD~p[x`z~PpQ[1Ү,"l 4F4&C Ao[Gew]9b`D 5zJe sgiݽt@ˋkO{elϚd֖r+(îl>t0;Eŀ^W鳓s]?5j LQr&dlO?{{2ϛհs;S4T'dYY4vu=fdNϺwE,xH(FrR }ܰZLJ *pg8YеtuQ` +Hl$ߑA$Km6$^Pe竸1>~UĢel<~eq.PbG[zVZqeDjٳ l$M{i24.T|*"^"ɚ@?_??cuCeHL +endstream +endobj +2593 0 obj +<< /Filter /FlateDecode /Length1 1449 /Length2 3296 /Length3 0 /Length 4207 >> +stream +xڝTTSY(^GC + ^@n $$KQAHEM:Hf(?zkr쳿sBq$kPDAbpi֚JtDH1]PЈ@s삗A +@"J+R@,(ai tH$FbQp K( +Z5HeT$=([;4 b# +23PTʡah;R316hƏnˊR@nϗLzm}g~7Δˢ~ڝ ~5M^Qvex3ey˷,ʯH{Yu)]+tujjh?oi`)CHNZ`O^_1E—Sn5d*>Zx,:А6\di_G_A5*aigb *~<ߺj1d =t1C&c] BDx#/įek7ZHF!!@']>_ Ÿ9']Zgz"%g~\^rFlo7RkwSxw1U4խ7lqD+!2pR#|bOcu0Kmiӟ_{q-n|NH'Zk1Y">YV혂V2]m2+5G*^^^@@zeNg`]d#RpLu}>utTgUs;bKꏷ2sue "uu{hI +b!FYw XjԨ+=A1߬yIg1SĤ[B.jkTL<|gӪE7 .mƺ]D-3-"m/=ޯqsf/6[!69L@ +iCfv5eQAp!'`?ZvNӠUEsлZlZ٩*|%oJWȝ(bb 3h2k>9+qv+ G@Tr끓"KMd7twoibQؐGާ\dvrydoͮcrvfyvN9K^.wpRwAAhB7N?O_93#LKvw,RxUfP'avDK@Naƣؙm葆Ox*iTN&dFo4 + <${sHGBs>.q ̺m()bgwvO&pbdP=Mqֵ)p0GچuIirZOI~}mNZX5}D7˜5*_\t7Ȉ{spVlFnqϬF}R&O -g;DNFX2;.Z^nIM!2:&4 v^ɡ07l\^uPv]s$y њ|tLP odw􈝻c(u^3z6n\Dt"<6]&AOHCSUcgt+S}̲K\V |M[,\5SStxZpKU{g >;kf~֐lC=9G SK&^̺eQ$]xyt28HǼΔqSDh\:zUz:dBP[m8hfm臝{/R,D +[u y[CA^y#"*= }i&5V|S \ +endstream +endobj +2594 0 obj +<< /Filter /FlateDecode /Length1 1640 /Length2 7683 /Length3 0 /Length 8682 >> +stream +xڝP֮q -:]@k!w'8n xp~23sjz慚&9H.69Y8X@ -oAP#2s~,*o 7[%:%9jA#qm ???3@ +[@6v2Vf%3MsǢoL㏻؋k+ @n G 5U⤮,۟Gr\c`S[Yfyrэf&VfT*,&DvF|*oc~Œ؀^g9~8%{=4A:xy64J&z='r7+f0{qj|WW"]OP$׌..1•{,;2 #g)}Է|r|zL5<{1m{gE<PJm +Q$JЯ3ɦk* +0ɯ~g`I) J@LhLj)X+62Nm9CQܗUY׼I2dnU\aҔ&ciW'p1[1˖ {!AFM,xR}Amu_+u\̱%)FR}b pxIh%*rG):р.tq5*$"a< +KW!Jo)F#&:yΔ%4AX8UO݊o`ٔx=_e/qXmV5 Vx}G$(΃<5MNmuYk"{MfP"zJ0@Vv-G4nI}>P ]q!ϔTuCtvb'.gE=F :?t4UcVf'onb3LJTaɢm?@밉EVFT +)Nte⛖lt&K:)aahq^n5ߠYZuscfBg61T KOM!0dk(.~cYɄ wO[MP, +BzEce̝V&1:FDB:+FzOPWXdvQbP;):3r s)_EV87?TnoAFOE O@=ngu;hrG!Sk m7iR*܎Z2c}#CI ǽ*8޼3fJ|t:::r0*}aqF +Y" ~%+^Jh|O]s]fEs=n$/^G1fmmGڊ;ų~Vos8->!M8f.o{ +SMH#^BUR[39EOLL_MjjjɈ9^~َC?2T,E)Q! G'T+?FtYw)nKF$Q]KLA#Bj)w'-SR<˞ mUxy+4ms@NLw;9)mϏha q.8aE8[cؽB.-SX{гHnzeRƥc0Dˆ64Ih0؊9Ak`a>cs8kl8荚h5joXG J sROyjp6p +Q>fc T7/&kVٻR" +=/ BjGwI4vS z{~3xPjI[.-ؠPԭ1Ƨ +YL2sPMSekƩ"1֪+u.!F;ːM*?ڏE枢'O @PXwN]q< 9k7XYs*$#6OS{H׮' +ڻH̜iGm)6gpf)_~"!2~g,E3σ5V͋G^4u/3VLTt9YEʗ:WĻ:A) /wLYfXJ-vC#BTJ-Ek_7[a6n:_rxqD)SZ{hSH\1jõ%YA!w˶ݷ:~"3Y)/2q̸PKݘ[O)TwĵJPqs<:mO\@ǝ$`Z* y6N^X+%1U:'Rfށ"fpe37a)5=!N&FѰu·Ҍ4dd;uo:x^ߴ"#˵?3uNqX 8Ў3 :Z~/:}Tb{4;'zm<6QnLGEo?h]DN+[1 VqYG=$ +KWR]/n"x-W>a]U2WL\m?@>b[K[$2σy6}o;^MH~WX9NDk3\īk1cZ (Fqi]Z>T%`hbDyk=*M.u4gd0sƢT璙DqR?=g 8p^FM[H;ȕjAx-xU r4xh,i.!!ć(X̛0`(KF땥y=; ]F QV*tɖFzi?D6iU>h:n3:fmc iCu!<+A4.ݓ + Pl@s[ {}YEjPO7sU6gO$[k~Bb$ t0np?+q}-&,$a= +kQ8%Z䬣XxfRikd_D㗔dMFUWCҤ/ ܘX5?Z c];\/z +H ?'kGxUk 7ШTVᮥ<mI;$ym$Eb' }V]]-4 +{ fЪhx> L\)q&хĨKP8ezq_dHŪD:kZ9>9F5UXr&+(H; 1#HōPs<.`+OEÔ;(&C}*/*]wn/c%>kq=*z"MI[?|on*RNTjͬ`"qMiNƥʰIrMtMa`d_Cİ26|06Y ;{ Ͳv`!ϪE7닔TisF~قL8یO}oe'yO {g=9+TMeƮZH-gcJkZ80j[d@8=*EIձ'y^x2NF[ iDitFU? "X' +ΦW܃(խ~Cs`gJ/qTo>ᎮPQwz:'m  2$rҗX#m) +H3QhL櫯]|/)Q5Bmw{n>YMug}|';w>K<\5ϖί0NeX&c`8OWjʻmzb9rӀL,kxϛq*w'DV%X\1ִJX|uyrqIcd`-lHo-oƎ/>;|i^C$B!7ݵvi&O݌$7vH$ǔVsw̥z4|=s u6P""s.@R`U*9BSy]6MzEIujq/!B5u [clebߟwx +9TwTwSe$sy fBN s@Xx\M|yXA^HlVz1ӗ-Sx++Ae"$,5G +Bibo=TQӣϟNG/gr~ = +W_|0tiۂMB.M&#kqJz!n~rԌ"[ʈɯ\.>6cOIY1 +۱yrYdЙ;7r [Vsz(^Ǿ@iS$PnãB ѿixF1cϛgǮ[yld5&`d*!iл}uf%ؾ0 +Ɓ`O$'@2d aPݪҘh·-d,Al7dYI]sO_^;U02YP?ryrHU}`A 59 GД8bO]pN<9Z+nܵ3U1}Ҹs$R`~0U^LZCv'~`nh$$5:#Ȍ䛈|UQ"!A~D[\4HcpfVd/@"!)4nK}: +7w2bbciQ9d2Vd[hijtͱt,9$oMRr^ Enϳڵ꫊gҕR֍c)u%'G[|7 +w \z 줍V^Cal#xDЄ.NSJ:e6JwUsC1QvrcLg> +GBBBJA߃a[u(B|eq@ +endstream +endobj +2595 0 obj +<< /Filter /FlateDecode /Length1 1711 /Length2 8099 /Length3 0 /Length 9123 >> +stream +xڝTkD$``AJn))T C@^Q(~_$A-!H[<9jk* +`bDD"\ +#`[;@՚Ù]Q?#n(tK.ekW-ٹ:rabբC8:B.xCx{i[.QKtaW?HD_Dq@`NPCc#%*ZHR-z~!ؒ1PwAF_[^Wy4%I9iTY}XDžJ yE2Pɮfv$t(vEfS?=/.2Sn9}`iH]~U$u^cmvnlwuȟ ʑXn.@<oY$s1ÛdzS1T }\sgӌbp)=V2УJSem%}Nנ2Z:{A2'k-B-28ӎkomf7.CYVif~uw4zӨc18bE%/OARV% m̮CsL{ U|ۤƲK[}rLaZ 2FIv{&`Vh?zOft\"w^0Yܭ29/ŝFVQ=lw~:-x^bNѳَO+lZXzMdveۆa~.f_hw}Ӛ [)~Žqø\X˭$,F_S' #2T̜ GbʛdrN ϫ'[xoWK^QCq5S^N ~RJ٪ +{6l O#b޾]zL?{V5L,elg NX-D?W#%jk֣*C7 O/cXikY[J&ߩ31$ +9;(:_~"'L-O*_0&w_$u_Y0~\}1VXw݅pK0GXaЪ#+4+Ġ*"j%类c9xW5#1C&4,Kk5b^SCt"qUZ7rOrttU!ZED=]ӍuYK('0؂gԛ>n%5 SzXv[dHy.󻯋daUIF@n1Ic~q\xW>+~s$_]rA:Lj@AY*%tyY\Z&|▧5i֋99fk9s wglRPg`&ٷt=2Vh;lxKeǾK&TNru}IN"a!(L L>XQXVª(ٙ!771 u.o>鑿:gr[8{lX2`G=ţz($ (>>DR|?~bRvph~H4C [-2x%ɃU`I*V V)[xJ[ɫϭ82٫ڿ9V4.ҧ)>ᖷC1xVE\kBqr쾳]==sRdNeU:<0j]3`ﷀVl<=\V| J,V'.[/FZ*Gz +:O~K+!VxPQar7GXN[o&8iukuwj.TLNImpx~!1٦r ITj}r Hga3-!YY{]9 9|g +5 JEk\\jT u6-L|Q}MLڏ^IqO wes"#P׌ѷdrT+$!vkfq#*qy:0Α<ː>4ʹ%[pͷMq Y=F*i6QF<! Nvļر_wj 6Q(pVP:خ]}Ol6QЕ 3`"iҿV75T%fgۍxpx` +u/_n]݈Q) D(( wHH# ѱ ɥ'T2bQ@Ѐw*h@yI} +¨8`v+:ݘ9"}g +襧U= WA|޹/d=;]Zl,C껴~, +bz޺)AP;q2.t$Z#96\2F4,Mυ;0,e;^E7QUW׿^M=A]Ytw#s)g~hGI'I7w9Ovlѵ+?bJaxA N銉N]est% NNk@;m6M Œ-˨zЧDt;{_t$u Qu!XE1I  {=fM.yu +?HڌR Epti´F W{Ud=Y.cI6u>/iy]1B |ո$6_a%!Ơu +|?Wktl/] \#%hۓ{=U~2ϳ&$6usj73VjuG}e*&N~6۰ +OQ 'Z:J^^PyvboQyt5̛zfɀ?HA]NPPǛb~M+m}sg3{L ] ayR٦D#|ƙ$G +|ƛxߵ'^a*`\Me8pqxl_E.[ުڤP$n+Rf*bBc2_&9_f/1)G}\1%\if \Qmj>?LיY +> +g\EK-ջ3]~kaIR[ 1&{7MYv$315k]XXt>~ cĽ?ЍIJAd7I'f)Un12M^Vv+b +o=ȕ0iSJt;ĴVe|J(t$o$s/;0l&.Y~\hX>e2VO^a7 nĶ]!^췈mli:gI~gBr=/ $Up[)P& +ޣ6Waw+&QjJgyeXCvZ~S@ )6GZ +U,n:ĸdx4 u/HJyD ^ /wmLÙ Ofʾ=Trb2Mڒ*Y|MiNDbp}Z{;!W)خ^|[N IMd+,#@-u@J_:I^u(Ҝ\#y +僈XƢEnPo$x7uπ +@߄ >RM8'#0]~6Sp&nY#Jֻ{ oa t處-Նnz6w\/!HQGTU[}Ûw3i +4AuzS;qK$\q"m>J>[݌gG!黬f$=LZrDoʧ,Fj%HYP.by"$zӪb*,pD{}B{Ͷߒ5G2[cQfF7UJT a"-RP2/slD;7le|[03Dl:z_}8$RFE'3߆#oLS!&dvx&-h"2p&]XuL8#nsaxګ:BσW$ӼSƃv, +~/.Ć8˜D1CKp"G6l?Mբ򯊮k ;޹?zf,t$e3VA\g%d;)>>*@1}aH:C[ vW~fd188+zґj,±i + +)yvج8J&)-[ R`d +*]NTÑ?l׮qMp 8IV3?a + d aLo@>8j{&1X%IAe@sr>OV4.S<}ڀ!x¦ďQ A0TU,1{q4)'ιkE>Äb cPbMpclSǺϪX4lfDÙa;zzE♓Pś<[_^?[xf0(2_|o8e^N{pM(991K9STό PtbD;%g#1mSD4QCJW{J@ +@ +endstream +endobj +2596 0 obj +<< /Filter /FlateDecode /Length1 1386 /Length2 2215 /Length3 0 /Length 3086 >> +stream +xڝT 8T{onEr&dkJWh"5Nƙ1,Mn%IQ &K,Q(Q*Ii![oh}}{9}}br gx@TulWAw[܆R-M 9ALLp(<g MAx!o:Pеpy cM$q=a1</a {?% +,iS< ƙH!) )e&@'qx4q@S aS)XS! A V_:i_aj-̃6 A,aNa +ح#l.>Hx"@>NpBApMC@. hl>$YȧB'Dl)x 3A ؛h08~vH lp2ΛG9~@ @xq8`jBD?q*mI!xhA1`J0LA<`JH_~CX%o}ޔXK9zn8!p ~Rq3$dgK[¯h0:A<9CN@c +ă}40AL +,`xN{+„xl(><Dc 䗸tCL1xӯ +ңq_@b #` x<N*oT =#.Bs) #4]im2"CI)MOJ͂{A~Ca3:twvhH=ʬ{B/k ҺRd6D^o`}O'h bp+A#r'&\B1[V{=\٪Q\;O%'(!\?[͆2)\'rNv_|+en÷ȟ[ڜQuD ovI,&o?ߚ NӨAٝUc%5zFAJkе{k5>/Z;Ҙ4yT6o޿o\.'"!eb­ g̙v;. +,PufFʡJ3] mF/4lQ_qn_Pݢq#T SĻ2t7>(`us _VN~wY6n.6]BR9Kö~]_5`Tcj +TM;L"qYIuD eqj]/Ne5ÑI9?ʶ]}^ӶL'|g0VwUR:c("?/\M]l"C@ $aJJKxm٧zi\ќͽa6L,{ndɼ]Džxi\`E#nD%ɻS c O<@deʖrÅtMd?$O~YS/aǧڑPz/jz{C"ٔb>(2xwN)U=-l_џ@W?rS~jW[ 6 UwU1[e' z›ׅΌxRgi*XL[46 &\GBzڹϢ0b!jΛuw{['֧4[.tu;jEG)L@YöL?SqN٬j`|#5eai$BZٶ*bN)vֱO> xghbңlR%nlY; IS9!phQ%O_>ob103ݩcmw:y/Lj0P9, +]i;TGZrpo0̮odTOUZ6af~.0|Xr%Z*/\k)ӔA2f(ux甜YPF/TYI]CFs +Sց%^Dh-],>n.*P/||PK6%k`爑N)ҝOr^wAZ"Η97W=X1ϑI.)BE :Izxa:}q[k6Րwv 4mAw#߷{GlllUr8o5I(5(~0xbgkaǽqC8uE|P~o'{ +V:W`:([oS7Л{NzwyCUK1>9>ͨ63(-ֳrީINүf-kp]DupRi4sfh`aJ'T4Eqbs(Z֋2[R#OeȰZ> +stream +xڝTXA@PDBB@E#6]ҍ !HIMF:EC84=G{<>{m&kbly QelF^01%BlX/4 =d`gH0(DD + / qCsHcph( CYc$h܀-?ÙYQ ̃  gIaq(O V||?\Pژb|wj H [4 ?+ΉW1XoALagC*E:PH[@,Hk7ⱓan.VX+fatC ~]l`HgtsO?%r0@ᶀ1Ɛ &0[@` Xt%Sy CB"?h?9+^ :@ " "( +`!TJw  ,쬣5|zgL-8@P?/ _v_A9K~f-41pJijJgd <|#]m?}',9?%[.AY FDm?O Y1H5 YC1H@@W"׊lg ,E1(`8̉t(pgLjtyZ/k{fXٺgNcyP010o ~a¿1_T7  + +!A_L?Q?;kc8k/}6$ 'K1:}xM!̦GAdV>\l.H>Y][|45Y.X!Py(|\t)qa6noԁ: W;KT&=$C/ ܺru}t˜6a᱉U 38{䪈)BfҖrIV]GTQ]s%W_vt>J3_2'vScU|:0GNd'>KFmN=6hj7")|(aCQVG 63bR4͛ km'WCgc7 4ˬ +p(cv當P_RRH,5<$oԤÆ qجɆ[/ꄒI'O#:jSNuU>zmS۠%tqw2w +ё?0 .+"YJ+3+՜y"E}n0 {HOMO|'ۡ{!BVRԢ=+$Q.ym"J{XX$lu9٤9_n8[^L{ZR5Sk +=vOV"ǶSw٫nŜm7Vѐҏ}terM"Nv-P=]QU=U|gȁbw? G{6)jٍ9k2KvJpf(Kr?xıHz8JIWC8B[omC/e}97&8Ul/֬>:P aslk[ƕ:$+ڌnI]*tvrUV a9+{!Pe#=i[hcwm#hj]ǰaX̔$RcZϑJs򻠤k+̉?+j&Q0i* Vfs˹(Y'/S;h;7(ەT4;vi ތ8'0T5ҹ9OMgd*ZЙhTf筛u5EMelQɛg8*)=&^&ΰ %}u2s&p{>fuzחgzO rS{/뽩Q)"I\uL4xJ@(>T9ISh~g;83A}k1A=Eg%Ih&:Xk@O8=Չ=Ix~`{u8hkd!`Lқiv + [o1: +S547hQ@Df4CJ++aqKȆ>?4ELڢ)}h/E֝wqIb~nSYm{!QKrT̈Zo%S׃rh*=":S%<9 2!|3<)7H5EQo9Y% R+q9  i"pfo6ɸBv#Kܐ9ShӔߠ!9%>>ncclYN^RMƏ}eJĩ~Ƙneu[:&atO'uע0bUO>wBzJ]6U!K)LkKD͈uqw\s# ~`p"wAPtj!2G֮uu,pN%[ڈ~CռF*֪lݺF-!-yOFEjϥ7cyv]Vb-wj7<`7=l4,k#\rt7X I% Ғ"_FH^Hz}W#)e0I3Y#xVqlJo]q\ʫpSeevqNӠV5Y:ț~7+(H 2?[4⊯&)M!=WHq|+sd{ML gT# qYF>D^^q!T5<_g^|;5(z/6Vrtݜt]reixx+D^4ˠ%%xG,qf!1h* kfj9T4d59*͒m5Q M z-+cz]c˲qxZSxY\kMƩr+0nvhCj:e}N:.[{?~N5h&,%D=+'R+!!9®ee~8p[Z#@ t$q$UA\rl/g)TmѤ Ov?_J=l3'\LkgLap Tp^# R.K1Z؀^/Ju@5rݒ"U7QFs.RE ލ'طX!6.oNK ߻X&)Yse( %$'qXx];Ke,Ӈ4uDOA2yz#dRŢdXET\Qg{npgm YJex$Osm)y?{c"P@֖^0NP/ K@-<+ )Q%5e&sLn']pr{ z,qŚ٬3~3=`ex]-?Iim&qo^%v>-Dt"͵?FȰBm,}mQUoB9yj{V%#"iE"kùףSZAw[Cd }EWN;hVÕH[ ? taek; J|nS7OX?L:to3:{aC͕l59gsSy("wjaّC8*cQ+RtͮFm݊nFZso;Y<\> ?D[7S]h 뉳rw.=`ߏ+лW2[@}9.| S8.j^vMaϙmBf]{r& R;]Gk7D al oJqߒDr%Sa5|PO%o}bRqH'vsz>\V|Nt<KU = a]60oO!?H4 ‹=M4B=SlxmJZPH Y1P}-Vrm~#F{mr껵m)Lw]c3>Ώ}f@ҪV{g?6r߻lGF`r4#YNSѳ:KX&IM~S!?cg0!,8v5fvţ2ŷ?G]l2Q5~rsηZ+6=\[.M\U̾E?8dv>\3ˮѐu+ Ia&9wd,DDQf? =۔Mi8K:V+,u%8 o'%GFX`[W<ކEw M`=?B*9_4_ +endstream +endobj +2598 0 obj +<< /Filter /FlateDecode /Length1 1511 /Length2 5822 /Length3 0 /Length 6776 >> +stream +xڝTTkD!A!Ab&hii钒n$PZCJPQAxνu5̳>ߏYGOi SB"0| ~A(A  Ph8G0f j!݁b@* +~󐨟j\a({< w@6\L |@x(W f@:#.i@ -G0}eS@? +U'(vy ,d[gJH= r:`0P!~vFE<?*Q0~ @eź +"nXŸK7fA ܀0O) \a+hg匆=.>h+w$`0{8wtfiA=f __.pe +j+ȫ/# AAAaL /7 ^R @Q(DD\D (., +ԱY9TvH GcsT+9 i.("hsg._lO_-uvNY=%akbvn\?5StoqAKc E;8Z Ձcl~ a C90$䃈A7FŅ!!lU"i GDDV(@RB""@2<]-?<tb//:xX\L $  ]]=E¿CSwnYAOP G6Xr9߶r0'~i#"[,zouX*dM_w=sj9JL=ɤ_`po"70AE84H(V_h|u*e#hxٔ nمߞ{kI Q5I~{O83ټk!Իg42oO^Tښc??ΒhfqI 0Uq(iyWlʗCҒ>*&7ӒG=d8H]gsx׿rhQo6ydy"ά%yz_!*{P6&"M@c_A-*. /4grC9q :in&]f'&cRP~EkEx$؈SkJ'N%^Qm<]"&:m~tZkir^H60 |9{dPcFKE}gv!PW\srsJbT!Seɠ8+?~Q#ㄈNP.ں?\P<i~ ܸYAe殰':MW[98=sxkg] 8-;8Dp^Oܣ(CL_b(h`ܒB={[4ROw%?>"{ʓ4a }4U=hoG?K;i&jT"D$`f([Lݮ0hawuS:'Cew6HѯWSQɘ>xY3E3,b2B bmL4tW%ez ixw.~;r1V@DWH_>;=hÓ +j(j{AĴԵ'YˀbXM2 ]K;;j72^,9˵FQL:&rZg˱P60{Kh 䀮NmـPe]mAz*pMXԶ)@:}N3Ӕi!Mr( R,?` |og;ZjA\il`:dlXlDּ}}vr ۾~iTW󈆫%O@6j-Òz߶}} ^]Ua]=e{Okl,eb!e0^5N֥z3x=9pvuڵl`Gr t>0/aӌcf3&SM_>Z^ :dsy4}ᣚʗTɲK" 3Eqp{!*5/Qu.}ka*y*[롷Cُ~Mz,85o.%q54}rwt1 Иg 8%mn#ϗ1N..+Lj H׷87)!,e5[K+'n3mg4XeA%7*?j֜?UݱB?GKc +-/^U2)S K,/Jx-gce?qιLS&' ʟLgeUTtKFoR̲=O玟N s?_N4d:أG>+v +/jQɢ`*rknOɀ+!}5q/Rt9 TA jfWJfb7F:Vg[&}bZ0cbZHydh-5UKCT&F!5śᑈv*ή(,g_IV%a~j/U*+U-Od=(/C-78}u%kyGx02Թdl^ZaF)ʳiahbN.%VyeOZ..o єMAžyvHy ʷUgHmu7VFĆopP3oٹFI7"n5yJP? + c:XN +HuܘfwmoO.t_odC|k((D5Jf 盍RL±q=3W3]؜uX)y؋2xT7fKpgꨌ:-h(\<aĈ/ƨ0u2=\(f#6#q+tyiOЏZ/=)_Y3#[s +ZzRq;i9}Ja{SnwvOsj6 Y59nߗyzN/XeXF`.Wɨ%ߣޭs©][POif?;FmA5gUs:mL%DimۯD7,yJ=3b rOE/{{ђn15OGDD5v+= izl"=\>^!xR%5wU?yhK]hGO^xJ~OL؝MgCVNi PD?lZTt]{Dԭw @ N#ȡrA7Ǒ֦0qet +9qty7 Iptr;`4%L3y@$qٲy Nx'(Cl_H%y([myhyOIv0`O%E|'ylV<8MR߶PPAݫ򹾩ryZ݈ 7bH_&>deoM/sқKŻ?r$mpD&a$݉8A]eDIN'KcДvTU}zOcՕ[x\֦#d^U!REVYFҾ٣?!kj=6(z{Z.-NV(d)\wR>+",LFѠ +<}̤>6u⬿׃Xo;1yC{:~LTGɞf`aϚ^$Z5ּ2j{dB mJMb χMdW6%#K5}$8\ZKUV m_DZ*]q~TT 2Nw0B6G;gGby RJaɎˡ17{+PZh:&~=w_Migbl%9',}oX_YOi luU y۩_(Dþy^.-W9wzVB2Ch\G@tYy_UtB nBe~N{JSF.8F0Q +endstream +endobj +2599 0 obj +<< /Filter /FlateDecode /Length1 1427 /Length2 2943 /Length3 0 /Length 3840 >> +stream +xڝV 8}B+ќ̤4rƘ 3I(JRDD9(")RNGxGO=o{]{o?{?|wMi ^Ð DX@@kPp%%DJ@&1~䍙 LHl> 6PPzh H\0 Lo1¤yY(<Cf 8dDC4MuM<@7}C@k3//'@LopB!‡Z*A]Ji ŔA1A_ZkBcd~s!Z?Ϗ3BT,Ƞ -L&!?70H +AA}p %Ġ@Dga4*HA fa5Ff@oOu@ckInHM$ ^?yI6$в4kkY##" H$aqv7B)h4AuX],ph"ߙDo`P!>{c܏#ܪ ĦA"6;^zhrdh-B <@l`fp7N !?waA~0# 6N#2?GCchB>;2( NcDE[4::8<@ `t5uѺ["G~dP~f C@cuI +#Fc@( +_F|-M/a×̣4EXJ,c:1F?%~M/ȁL&_MT@/: Hȇw 7k ҃O#-w\@<,q.zRryEXH +Re+TWjoTꝛ֊) Fċ.lh0/ xCkꌉ7OOL)TgTTܦUpm;-a'8]={$F߱PPqT،p_\ya&=|ZYF¼F?34(.Ձa֓QZl}a`PoX qa + -J;Tև)]w7AVvw3G +;wo:T UT(rҮgynK|ֺzFI ׮H_!\Ә%ZQP2]+h6f~LCX{{(k2no5K{SK{$%BAŴ 9OTc``} (['KoT# _O^V@abn}Incfj}WUzȯorVsDf%TFZEG]wU2%s)NV线mkN9ڑE| 6FNqVDij᫷mKA*_`7U&wx}@u=(gbC(}+-.ɋo7o}fY +hYZ{~gdhnѰ0}B/;CcPXhI(feD3/AUS#&~e)(13fq72d-v$;+3e_rHO|[ H-=p,Ca b~o'V`^Vb Qa5EUħ,UHZi#ٍ%ke.ȁ/z[m0yުVKlWΙς kQ.0% Ss7*)F*kz'6V>AUx&Y'Y?o47CT桛n˭ܼpzGM +JI}g$iо Q@OŃ~34rljzUk34b|+"Qb!@7/\Am\aZvCT\ǭNM3_]]S^* +1p8y>B;b5YR3i p,1b=RNV?wԋv뼮rNU9>wnC_UCmDkvћ5[H_|JdzĹ)_"D۸ߍITْH~}rso CiMO/m n3( O{FqtJ$V*< mb.jp<:k:rȨ9y>OoGyQXoxJLH:e\g}IqBkn?0!3m; +䰋-)1BrW+X) {V>rA:'4f(UelҴ~z)Y(\G%kB8ntڅz49P;s.C[@0Tlփ>} *޷a09ic t YDpi0hA;=fMuzRdžW ."vig϶Ty/2 E}mU6#+_8"p@JO4? +#CKlXSN[lJD WMr[{!{x$ۅʼnijNFü +Qn"1if m,{a)]nȣՃQ+=yzhd,MGإP^AuR_W*?l-;>"f$iONv>mjʝ163(PLXWYj%;fzJ֛WLꎉ$ tǘϻ[qеŝISaJ'~vmlvޞGz.YzADh{a,WVdvotۀCnEw͝Y=1ޫ+N\%;E7HvY6=6Z}L(b#x\s/z+lYÂ32]:%/8YNHe2|y$7L+kZN>׳&ڞ{^rZ@]@ O諾Zgo+3hdz>\0;WVBs,}lZ\mr=wZ|Ŀ-|,V50_⴮ƚzFKQ`JvR"=8Y_(LwDSNJpލ??5aIyZ*$6+NE B/~gWP )N7={|h"~zߒߡ$3Eh1d3/g <5eX:k tH頧qi/l +R}~)>VHsGM)FdwOVUMdB~Z^wiƏڣ_=1Ed+W;YW^} .nQl6/!ن +endstream +endobj +2600 0 obj +<< /Filter /FlateDecode /Length1 1409 /Length2 2588 /Length3 0 /Length 3473 >> +stream +xڝT 4}UBQzDEj#}!;g%[PREɐ%Y"iD Y&YZY||ߙ3}ᆵ{=[v + 4e@l^,H e=M-{A&ƀt~ Il֌`:1K&22-F `&*O0}hd$@ :̣!xy| 8 I^R &\&a0hM@هABx/,o$Q*ZL ,Yc$ Fh~4ieY rh;~aT h`1Zh j)}?,$ItFy?P0,[0 l دzwLZFϝ7H +[@ʖ`m^CCF,h@~+QXGjH UUCe͋hM+bN?Y}rk^͕{rhB,:wZZbq(*Q5x\zG٪!CbfFs:xO],8SD8aD)=?>ya@|7C\H2&/<#64xFa0uj_Y %*]b$|cp[bܭ(DW:LՊ=erF+{/d-<+9&M;;8dXu5,qpWr ŵwSm< ߙ[4_qrQS0{i!ˠxbըvg)foQg,X1*{Pp9i**VSjWR}FY(r-|1GBb_b:M#+ޝmUd+- G/[< ̲?< ܲ`:R{j(H+$4v#bU#qNge>iO\UIlb8{&rrWp2yNl3.Y24&Ԣoz}yV,$΅g^t7Nt=su +n&<iʶR-?^ F~iiRWA+C= =+4~AjOV\ +R͒Pw +%mUlr*^{,.wxK\vq/@t}6aTnǵ'a[\"RYֿqj31/^Pb[uM oɅ|w8_h-cL\g.lx_Dz,\%;'f 2w.6cyj=8X'frf;戄9f|jH9[+w#5ǜ_ "g/f%Hp?: )=a.8R+DQ!qef(縫WEztכ>%JF p5-mlkh!2OV\:*uCINmݓoIIY)k%'^JifBĜmNWXnTs)h/#<%H$콊bHx}O!@1uXQqXjlʏ|K >A͜ BߕR䇏EkSs맊;ZH+M?#P0+^Pn^FƐ߶G ;Xg[52B³.TT :fuYq6ciDg8IlCw_Z_)|jR78YnuNKVP)|Լx}ywic?8l +d +Fm;Jz 0"OdZH189gJ9'ρ3׼Fܪn7LÈ]ə[!y,o8o%? 3on6MKFIpUNC,׷hlԇ.iUc]1 + +Mk|K#r[dG֚΍<۔T۷N 4أpRtR()5\y4r=xQ=C#|k狂&̓]_6d:&X2J]Vjd`1NDZfKLwmXʘDZNv`tNGR$fybӋI_ViXs2X! eF-$o}?rJ=r%Xp(Su\˺"$>[=4{Z@]QɎC/7J蟉8S}Bdw5B#QgRYqrU?g8/W.'3.cZ&Äͦr[P)y6nKQziRFcCj +endstream +endobj +2601 0 obj +<< /Filter /FlateDecode /Length1 1509 /Length2 5240 /Length3 0 /Length 6188 >> +stream +xڝwTTk6)Ia`NiDBBQ@RJJP@@sk뾞;zZY׀O+>,8z =E!fgFpW@m0 f (/@ @0X7IA#h@j G;+|G8i1*wyrh7GpnD|/i ^@g3𴵿l +_uA |`5 +˒a/yeNG Mg.= s])\]Hϵ49_ߛDy#$W10O7~C$7"sc!* +#w|࿜ rm\<{ `О@t"0; D0_  0$=*xR-.l@#H |B{Uc2g4C2|U0S^NۈNjh~\*B~>qgGj\V$B3[q rod4L!1vO<@2af|Qn<@[?cK~;f9OI1AY߼ O!wgf"W$c=A0OqCpOF_NҒ]vwnU9h:mO-]!Y DXqȫzģ#rܬ_iRU_HRFՌ8Lvx /O*-jՕ*~3D dm9wzT&zT3GZcCP(%[P3Szϴ%>wDs'ȅV(3 "8|7 B֣,24 kKq]Rq en0絫g"`jK_v$E'dŭj^˖UEљ d\^O?,[ t@9?ѷ2!e%{IbA1YL:Vh͛4Im8)! + ekIXB!5BtIJlvO܏p\6B['F#bsLn;)1|=4M17m4s?6~Wr0$߼|!nnPM:G%7ǿegg 6zKq7I47qu̜bk}W{ĒuLfJ֔K;d-zro3L)CvWbyv?\TrGM 䍗piOܺ[{# YVT/u?wu}鮰ɹA'45HrvU*~Ӥ#'nT7/@o2СCɩDJo[vd|~We"#WȬYٲ8$GGW7v8 Y +'@+_\=UCډgk/+f:P3оIF :w4Z; Jx_9DOOhڞ{dguE0a3} /ز2v>N߅[wHͲ|ϙ)g%^qQ`~rE?!;W+af}s0Q#wp O@Xj8Q5rB귔xٯ?>Φ U$p+Fvf?zG$*r~KJ>@G~{ +_ o3ڤ%]3| g|ķ|ƔkP {{/"Z ~^"eX+lyZ%̘$>-2h1^䧺3!tvw]i:nVOogYZ]Cm,|"vU3|O|;ա~~0㪞ͷ葺~ZP~r;BuۋԅTwg2*4F 'I.(Sx{`W۬lmSCXDː\N:@fWvȧ.<2sanF嗻o67wHyܾ}ckZQ=2?(d_"p[)Q8ĻzC3xV$} 9Zs,1'M~ǮD̡@1iAϜݘ( q"Q6gڻo}lroy6-Qs5hq4gzmpݧdO[)*.w ؚ+y,(.1Iٟ'C: %-p~"-q'gڊO9$IC] 53mMٶsA:H:QF[58k̭L*Q\@f~[+GcR}|8EyX}B;3 3y|чu]kh+vo#sA\/Un%I*}1Kj [>u]r3?JU%pfl?cMm3ibf2C=5@?&SJ)McP+(> %f Y˲hמEcx͋~e'S~ܮvbY1A4D\Eus=Xa˃E/RCxg>2:OV͙y[]^dpm18zS4٧=$Ȕ qӱt7 Zz$*)}5.? +[1M)otT eo246vK^O(*d:KW_[6!aU]qQeڲɳ2XuWT,C%5EU3ꔈ ҺFqq(`ց3vwӚלq`싱DѠ)Hݲ*/{5pWkt Զm)rN}_]=y$O_z䀅v$O3KxX/P͉yU_c=6{M?D|p3+Wcn)858##{슲\z'k<"p-OX giRz6j{VmIUc조޽F6+ևj`) +s?ȋ<ҍĩHɨ˯5? +GgUg~V1k{A1N hU!gԆjEB6+^]QQ.ĄF +⻚)N+xZb+xƇos~5t=pԭ9R:ՏɺZҬhO.+TK(>ZF^*NlC%W{:#;0c&AH +'Ӈ +IPXCHHܕ1#37@M+¤ $G |Sgm-btQ[ԶrO?[a.6ؤ,]{M6dSqo*,v(KUQu8& +Ѿ15T{=؃}=3xFps^Z+B'B7U%> +stream +xڝwPk.IG(tPC/Ҕ&UNPitEP{Qzo")H珞;߽w2%>nfƤ+ EZ/(pA,`>M]Ho3u 7G]aP:)@C@0(tIqF0 5<nmpXr1 D:;-:0Ki~M|_VE%^(r}q- +p,^l EBQg.>+> y]*tp!P.D?އ;,s}yv+ +E;"NhI"fi3#6G@<+s{ +vAb@9a^EpKf G@aVj(g ?_|3n$wCW7w++)p  DE y{]C 0DHTH *(  `㿈PAX! _u]_~rR[F@!<{F@J9yWD@SFUJr!.\n7WK'i,=RamOk.p7T5(i"]?;a>au/sqEPs@!%La0ܝx=`!!'p0_C QGhzω~   ߐ?H74 ~cx¿ +oLO^ߠ?VF7܊1uhg[w۶_7sY}GZؖ4v]Xw35e$@-ɳv|rD5q @ktRn8 H%A_Wl).9\ Hɫ+Je{am*ӏ1C 'g5LUx^ԭY-P<PocW0n>!.[2VGy󯊡/@#_eկ^hT %*&>-6d^X%-)%wϲ}*̂&xg;H/7;X&jr|r͊XFYBl3=%ɻ6Wԭƽ(‘Oٛ4JQΊqzvGH[6Eqa"p @ßK\T*ѥia~L76KRL| 祉>mݗ?"NPi ٲ\,NWərzĨt;~,VU p9Qzɥ?*}Jv2ƇAMl^EP wI9y3QVUz8OP.2n zS^*n!6XkivE\Wlm&EHN24}id,P u[)=~HOY8WwR#E ydikNx٫۶KO:F?l.#IG }p _ɢSV.ۣU:!\yCc>,AD){]gVlg 9}̝Cr>PTb\0NN#Is(P +6||IKɬ%cæmq@M /Ftbx/PjIl:aMӎ=>Ww"u۩fĭ~Iȕ.d+껣•F&h:'qۓnoU28`l۳Idwlub}_N`xf9L-h7LUGgS8.ՔnAOE dqޛy] i۟r,$S đ Hf*W/A{a, +8Xe#M4)38ѯC]o /fDRT +Ն7JGk;?Nh2 &~/k:Rci]6A1lt s$,9qtsO;j8Z8T)PlNӁ3TF́\O4NȪec. `%s;Id0ە=<DzU$.~`0yͮL^8y +jb_뷼=j~ n]\*uq~՝99Ii\oohrwsUM`^nz4vUa9gVqKkY֞Ǿ. V%6t.7-UZj;NsqސtO"r%4aU^j.z͡3n@pS"Ӯz&̠^H+X]uKpվicd!vnj |?CbqTտ,Y{]eH/=zߔr=QêhV86?貍6t;ϼY0+)Z0l))UCUT*j\^ jI zKt$r*MQʩaEN99D+>km5C5Mu+xӒ|o*jL N +j*P ⚏yӦ2ocmFrNjFؾ:$C4k|Qfi>)>sglFD +GJܧ8zc8kP]Ax_Nlے`u3K-]Pl$sZZ7lvgj3G>pM\˼{$Ǘ3UK"hX`QrcC#AYVtfv#zفʄOd NXl_f:HZ'Qb{s sH|u~AWlEhW"1l'Uc mVkI}Gc,~砋T򜝂fٿ\x}["KbFC(&Ea )*h,;t!,t6AэDBs g75q%4NB-S9rI=v&B$7⾛'=`Q'$~_hDQHoLÙ}+rˈPgtE}ftޘ%@}i7p{`0pZw!WWd^:&e.m\B Eaq[IvWG &Vvz?35kV楑Ɲɽ w&ls :i\iɄRޗќ+cd &gLג5bϭ#<ijiyijKWCv$uִۖ~PYN[bO訿J+GgU.^?Sob6$%$(QyRd}fLm$6޳#!֏5XqsG"*ìqѳZ)Kp0Q /ktC}Z^X)v _6"Rc4QyVh>U-V,2.Rlcˊ/f<0 |Kg}.2L 77|Oo[V njF&ufQSSr]NǡF(1Ōu_}T_'=wT+\3+4Ѧ/An΍O3> F "ǡLbSMWq'W8mg\lTYnU +O1Z)ħfz{@߹6U3(6-oмkTj 2mq! +ƃ>' /ݻ8* ()O0q/SH)a6jqzag:Tn,=@fom }_r}PK34pL0>!ƴjǦ~b'&S64u2RT!]טK1kJscZ)5$cKGJHkug~1)0;ruoN˼WzАStOi~fOf"í4>ZqI-;l7 };3.\OO/?1IᩢU9ĺ.in)h$fpf:>A236QlGq|zռ9K0D2t +nD;F_>; +'OpM Ѫg2]C`\r +b }E>Z&)c/]-7B&zs1> nE?R>'h`7 lWT):;K-*(Px$S\>8Lh-V-oG$Cb]6AL|Úg;cL +X!7iJݺt^ +3I9M)rҢ]##AcGOpj.+9߉;S{s6ŪrD$$zAs"]Pǐ=χH iܺ"~1ڳ_+:*tK-h/1s$! ^{sX[Gbmjs j0o͸2cN:KeֻfJvWi5}:Fȹ.ŗ<)б̜q*.0Gn7,a*5d1i^EcְWrXN632{FEHW\ N$aH%ǔ汅G#':j)~F&n!QgO>IMԵmXûxj&eQ +tT=[y5ܛw7I 4~kSo 3͗v<x}yKO} 4nLouۢQvSvhzrIMz ԛե5aJ j[ZsúIǶJe`Cn9S}~\F-Qh_ĔA΢g_՗QWtoOKw_~h+QT5"ń=g]_]oe9ǫW Vӱ1{!/`|O9IKzIJLnw6x-,#xwr`Dm)c+~ .3IUPͭ5_Z;pz?H Ʈ{Ms.iM"-;cZ;]ds<[.{Tmф6;D +ƶguj$ ITW)I):-*/Ig$5a_ Z{FnC!j6e|bΆ+MEwy)º*G9Zxl "4-/f_I%:ЭЇ.NL/$a؄br% ++Ӊ +endstream +endobj +2603 0 obj +<< /Filter /FlateDecode /Length1 1801 /Length2 9068 /Length3 0 /Length 10126 >> +stream +xڝT]IKRjbhN 隁AjF$D$[JS$A~g}kf=W79DqEVpbbzCBXL:'g=\] b2f{7]%@  + +x@_~N8!Ne9 +I feZY@\aN5ba w(#,?iC}p@\@3}-[= /gd  +X?R@0q;C,pKi{;;G bq?ϯ{ w{6c 9@dvGX`qsȟF n`:C|`P+prx+,/fC`pAK 0r ?n]QQRP5?V)){w@@  $( 4z.0,, $ yB ` ]B@ufu %U0 (g__E?5~GS`+;í0e3)\fwo_]ȟ}Jۿy<V +3[$9!0 k-!N08Dǻ%  + CBBB-1Y% n̜<xwp!c!0a a fb3_L7da BBoU羉 7եп +.~;HWN)PWԿr +]kv 2 ] +rpqrW̟o{ZCaR@!XSA6UAMn\ݕCYn1A +kZsP z<# w Yx@vk%s_Yo/uP m5hZHUaaQϪWl0#K;sڊ`m7 +z3gj9 b55= )ȧRVzZ}=Ns 9=飾!}:}r6%%ˉQ!Z|i|:撏i&V[7 +Tc(Q^$F|h 4WyI5SpćV_ɨ77?3LSS`9ep aub~Θm ФKw"9n$t; k&)$oLm{qkR:ϮYX|xy}]{3UJXiWh K$3^Oک}I\}mr}VÁИܷHͣhlnÃD~eoiDwп':zM9';pMS>t/\rΤ <df*TTL" ~Վ޺ v2Ru85_XD}IӰnMg,/驃C|UI(ŧU'4ˣpu0-r-џUWXa%BLw8)F˰οE PՔ7tT֦͛byrF|ηְېIM<ʵOUq;NxvN'32BD"z[9Kn ηU=DQۗ yO\guH7畷?TYVJ(~%{stĹIS!ԻIu|bX,ZZtUhGnx7l{yItelV8A(J)ktkZR5ی0zd%-hjۯrыQ˄aQ֎2?uy*VL gKq&kO6)їrU\•_mdI)! ˹?*~EVA㠫(~ +RڗCCoWB!%jΕ!9EF%|\~D2y#-e+)-.^} ))rHSGB olL0s98AfpE4oL|-v +j5?S{;Zb}n9qdɏvԨفKm1ݕ(*oƖᱲɲIP-A #di @"jVjJ ƂO8_o#N%ތ`ݖzƏ^NoLN,"JB"%]IZ(Do6G`vZ?3o +$hziF$\pGǽI%1;K˺ RŻ6HLC߫Hѫڱ =C +KWI2?ϐVtz"[=T QY_hYuV |7 _ӨOXlOi4e~1;"IIh/{V$=Znhx@N=q-^.`A6Z\CeP=UFGJZ[5]~U.w,☦:iEQ[ݫ_ DԌ2%G-T5$GE# |)CtS-^)Xיz<~|If*ҥLO]zWbݑT#/{pqXeI}e-ՑNQ0gϽ4ȩď<׃Ywj긠ͯޕ.[XʐƷk*¢tiY"̽3׎D8؞y4VI2L:pʟ{XbLs7X`|_8K!C s~bn~[^^똆Ma:Z/TLBE"bv-*0Ea~^/v_"]]ښ> 9LKb\R_ړ2q(诃ي`;s{ b ,Tc"Hd9kk_%Eu +L܃S!GiJi]P|3Yg +[heOGBjRۣrT5zGVͨK/jTqF>z ^Q&-dcS |РѳgGsxsdU7uıO|TQ%R|6!ie@UiLNw ý-^!D&R1u54!ƙ> 9ְ6I.wZǵPDc/#VH(&Ni <8KEEzcX'BqӜ듨b=ޒQ׭+|)_mg!;~/m* FůG\<8Ϳa׏KVW}t?;S#NH`K5?lǰi m6hI \ +5A)'"y2#/ t]rkZϮ-)QY_Zrh.|reViՓ[yQRg` DDKr:~@*$;=îՆq"Ł^d_߷O,b 0-$evM Ζ,YG<Ow*C5: +_\7.:ne`9 4z5fQ-CvX@/H-[G\O>t+ Q0F9:Z$Hg.0wIG&ľj&ˆeݺn4!JU>8+G4«͸lNM=<`M<&iy懳O/~BW^$^"pR0,e5Cb1}瘧d%WԶIX#w ubě=6 G\bJeX*w7ꞜǢeOƤu~~Lފ2r;h/P%rd#nfT! +9zsOys9 -¬g<ȗ3v);lEm}kM暓ҝQ±Q$;z hkXsѻl^;6DY<]5%YUQC_Y2!'{UiGJC{AY|}3ʲRjy{ؖ]{r@9%4 0%l9Jݨ{E?Kļ.+@(@=/+6M'f.@mP/=c,|LX):ᘐ:#ʩR$Y7<1X=~.e(#NJY4m(19u V |BÑf.El;砍s0RcV Nj +)oHi\6E^)r`3VULܙ4:OlI!-ƩCQx6wi WHZn_`Hp8d?OO3.Z$(eRT a4d戴H︰mUDJqQA#FBAЈ"q\k:fns^\&p,|п682csv3 e^2-Y$nviPkunc&~1{{1͖燓:ʋ@Me䟮#k>>q>*.檮ԝUHٜ;.Q-r`gwh(z68@VWdv"n*br=XN;载Yl%^Q*"0\P9EDĖH*`ta?u'(ސd[f?ɜ*iɡQ & z54$=MzηJ91,3~]vIozc wʺ:~,]LY)4݂3M2&MV xo*4MzdG1 ". Z¢ GŲc/-?%Tv"sj,ǑQF\_܍ЮG-GMM"o{e {($~ݥx;hTptipP K|&yXÅ `USHFgc ghOllcTՁEwMU9vWGrTt(4{=d +vq-X:nד.>+RG(ċY5nj7[([P:ϛ v]E)_ÞIܸxeVpsO2iEޚ-^]ͪgR,g̯>Qt/8A/N/Tml +M|z>W6ۨHѹ4! ~:P(P y!cF +F@9s9b 8i:FZJw +βI^濡$tğ ~M>kx-6?KVFjhghO|=@ѦuNxǜ yJhvn}(.PyݺbW%}Z Us;KkkG]WgpU +W٢$]j6?py Ost(p;ٯyދPB0>Y#ԕ[]M ypE1ZPVed6 #T<#@VŶKsbg)DՒ9DfE KAht\ >Kp\7* OT[ 3RV_;Y~ OOȫ6JWGm o&5q` @_F=[U] +Vlq=N\wl(7L>*vEK\؉ZRZ% +yv0zg ؞ԔY%tɚzz&}.bJ#|vCj M4(;dFGTI!XNI&3JUkҺh ^49ϴHhT 'S4"NnB )>a,xj‰'.\.b]t 'O!֧s:3VGI7v5fZ=ȸ{kvWӡb[DkL QzrAxFk%Ԓj~@ rNyk^ZSW\>gޮ%)wM4&HYmZIb7ˊ'ـ}.B~IռIWgᱢWb&(;љtUw^[,b}>?!RŷIq.2Xwm.P:@#a4TW*MmzϹn], +endstream +endobj +2604 0 obj +<< /Filter /FlateDecode /Length1 1409 /Length2 2511 /Length3 0 /Length 3395 >> +stream +xڝT 89ْԉ1;0h,c1w,DZHȒdRCe"P-8$:_]s;ss?ϫO{@&th9xI>Эrq0@[߳  @ h4!?q5D( ^S[S @- jj~ei FD5m*+nU~ӊΦ @&|.h/^iSy Q&16<2Le,Sq/'uVu_#C#TLhن&y+l! l,@qH^Aށx`-Jdxwn䟄$:S& 2@4MM x +XZ + ټ%x]d<@q`[|5@* ]5%O䷘B@$$HH|Qp]aqH~nwfeP]$QyEtq5$.pFY_,)w_ߺ]r %GU&e~m2+b N5-0-0:VdEq +py?,+%K˅u/2ذX4(gڄhevm[ڲwq"g9D| >:k=7|&R}_Yݰ ɞBB|S -J+yoޮkTyosB,G F{bvEJAezrǑ,IjNwwJ;&ig'E鞹vCGl-R +%)_qr9f]vkψol?^p{vtbuGEFr'{JD ܢU| QCir\^ QV"2S2R3/lSV5h[<)uGd%1W}.iX[Y׶OK>HZ6ϥZi ]ڢkO&VWYuѺ_N51:HC;ts6Y> ^MxrݦƩs\]|_67;rJ;_y2C +ڬD?.$ ?y+Q~ B:O8grMۉ1Rv|*5O,c]8UK|'cr +3,Kwz}$5$~$dUߵpV8-G ;s@jHا39!5yȐq?Tt"v ⪡)u.ކ;&."BAcjy%ՏT;ں;\ M|E BQĨܦyb=U1t#]L!!r%}^Ĺ1YFۿ_(λl|J(\ r]k#ʉɛv(/BߝPZp;H$v}z4VD\h;u|w=#HeoM۾i|fo5՚r̫L?5ͩ9wAPu~cLDg 5,}N5rDL̕a)761@oag>'E6pۨ`U˓m)Q^zoHӤ atpB+$ڂ9KKbrDxL#W>7yߝ(6QB0|sqs4<::_ko'>Hs5[]-Jjџy=_,㩳NY GnqOxkwuuOf3D|uhp>O!w|vwh9m}~]W>і$jf$CqfYx]P u/k&`+X1_Bϛ"&67E85o ]\v,^ht 8?lgoY_\)Tᓵ>Qp$r 1&ۿLAuY rz%:R掴LÞf͋e.c=J՟"&z0~ +#g {sF*LU+|RƵʆ2^OVd(@UW-|FS8=6Fv=xoH6hRRŭ7'5lH~c.+n5ez? +endstream +endobj +2605 0 obj +<< /Filter /FlateDecode /Length1 1472 /Length2 4532 /Length3 0 /Length 5447 >> +stream +xڝTT]PZ{N[@:Ł!f`iTDZCB@$TRDEF_Zf3sܳ44Uc4N +h/Y( ByyMP8Wğ(9 ~U Ph8YD7AX@f:b}(G' PYY ѳuwB9&'4{Fz88Qy& +>DPQ@qYp!^uD$AI@ s@H< 4<Ӣbh'j(,L/Ṡ17H;BhA:8@BL\F\V@x'-L|?0 wǸH'"D{¼{9T p=&:#0XC@lp /> u4Lk3!(T +@! #- xk("&& HAŤd%e$ )4hh$B ;;~_[ DpgkS7C5\]A@0;#q(=@S07N7O ?įHsE9(] S僀pN? 6EXWaDxyR )iYM$d@2b2 +pvYȯmhSG;`(# &)X/9b?8W  ]t`/4J#(T(T(T(( C{4F |G1/+Yn~zSCsP삱ȧ ا<:sz]4n*a$T;մt]e؄ä[7Bl=4W_5Vh黴jgPDcQ [dq|[ZZǴ?XGXx)}ygtτ;ɧv6wJRMiv`e;fPF^:6/Zzn agC'/ÓG-js累v?pzA@ 1[@ߚY~X (WPL3T0Ȋ4E=V^bJnTAF;<3S` z<_Jl T*|0qUؘ7atD;\rEzMgiw]BƄTKvA uMR̓_u|K>ATV.]PHb#藨Vhh][ɦrHgoXQ+N~fQ^cJB*6z)ةz׈uFO*k/{dIRK/կlUUR] Q|^!*8+iHZΆIBo荢6xżQX^ ߫$Ẓ +cvlEMqq ʆKn5i +7O( t/!l&weu,cy/2hQUR|&4Mq\$\啱2%=ewԂj`\0*[ 7FFbO"BOOY,^DM.JRmAw14.?^Ue' +\T2.EU371,EWK}CϚijMrHP_ͩhvi6ޚ`/OBMÖ&Z@;SsƁL!܅wֵ mv-;@[PNٌ[*ͷt:P+1Tx=+P0N:!@?!N+ǖ_:*g``ɸt|m}nf\95M{ m 1 I=DG7w*oT2m(B:,DOˬO֬0Z!gQݾ|lޡ K}FhX[_\UtmۅOL*:@1"!ᶔ\h+ef4F4ŏ[ y+ yI.E5#y|c<Ϗ3U+Iv5"[n +CnqI] +S8M쿐rf”)z抦玤T,x?+t|Bw8߄cҜ-)1tR.N=4|5^,Ě arr;loYHɰB!/gS!4⳪iY]O:CS;Q _-9e'ShuI `ǢV/ +\I\X|IlY;nukKB[7aC3MWIM*[4yl9h +/+s: f:#ὭqCB2cBRx*ڻڒNA~%oN>yp +Q2?FM3(2z3CɖXsPw,| Rl7^!lqmI 8 7^Si3F5Y(3ca'~uK0L*^NX_0=$X|0wվ21[T,6F]^ hE mDe淿nBuJJ4>`duNKO?% +-m cNlo\J{"{@@b|/_oƚTe{$vmX;QzwUjLNJNRӹo7Q"R^;[Hq++moPe71D`\QoEM)a c JՍ~ + a4nvH3ϞΤQ/ީ;%ZIDr d8ΓovqH3S 2w(Nz#)UdRIk)2 y+4<ɑڝ6yH>S)M#//˪Sd=4m'i!Qz+gBw'qAJ7)gR7$ T'=֎dTRhVmO?[!-ҾLs2IEÓTr]d{C<;sh'~E!HJ*D5ql;ᡫDBVW=jՋCԛelHl:DAsi-L{?<1 h&(~2cyx/hǯٽүu)ŇiF]$aَU. x!l(<`Jl*1HF2Tv6Zt)j4lHf xc6L>GIS,R\7좍+ \hnti7>NWl4tbAW^ ge^l^[aN:ӖoTCD 9Nv@gȤ%4fiX H<;}tahT&@6?z-p*I[{՝gFWnpH{_ 3 YRxee̪ =%)OeTm'x^uJN]A-DٜdmQmrKՈ{tK@&nQ:j4ܚ A>=,'ꠐ1*=}""\~ ~ɼ }枱z FzY"h=iC>Ļ%9wF<6-%GF=~;KS9[|VIQy)${bkF;Q_W=V(d4Jo2J'Wc/c@Gs3<}Dž!e!m@bߥ-S^㦗~=zJ@CjYPv,] /&@> +stream +xڝT 4۶lYzY2f:".d!bbFcYJITHdɚ-Sv!K![e Y|}gμ3u_s_+%fm&cHD<)D_ +A lRRvx*er)xQw^ARiJ1h% (LCE jy$.LĐ ;&O$=pT @%  @{doaP8"@@G *(f뎥~6DF[chMZFx#Uꭡ[Q "(KbHD듼0D*mwA*>3D?1O?Az+>S_$恡PD +0>&S.# مDth7" L(S~Jń=ψ xpxlUh g|I%S` ?\hDH/ h6ttOVO@`0BYaO +QP +TUueU(\~2_ Ô%Oa-ev* sOK2`0 @wkTirfhE#_dtmk A[zL^xBN7ѧtԱ1埑)It?S50O؞Ɛ x"ƚD<*HU @1 +R(= WcD 'zPUI&#4CUT`@W PITۗ +.:ۮy*/Sv?0Tf*Aʿ@#?F4E?KS;iG`Pl$ԱG5kźB +Kf_tE>jȘGNe0T#@-gGwR%8YrK,m-#jޡtp7G^4"8LWj+xM,G}їŏYWW_dg: p|uu49lܬF~$ŧӊ^뼧SvD]=,ap P_lu9Ō]/ {ʠynY!XĢV9aGO-Bs{7鞾>^$V6t[heܛ/C^Q~6AHS-M|>YM˅mO#5Vno3zLAE:sa_ϧt?ؠ48gn|RZa!@~g-Q2!rmé7H+5k|sQK[0FtQk4V^"&LPZĵUT=JT)kt\ugdPlO{FdhaTn$c腧7_|sMG~+Fz'ZoBYq:\"u Yy2${LcCG4lPބ[g4g!=-GE ;_-Wy}YذnA!͔ozobDu!2!gyMƠgN$4̍gV-=T}%έ3o%9őN$Dٞs/Vs2c6<-Kc:_sL{m?48[~`j x/;QLUjmF=Yc"W[ +:ã=/M  `ުcLȕ)|,!=R3L$ ^K$GwTut}7*{U$A4 IzVI+@{_(вkS=1j? G, .Cd=H28CMu7\v2|NtQf{ .Փ4}M5y/WX58R֫H%#ZeIʙ͔i<ՠwirLl6r`M.eGx\wc;ɪMP՜Ēmc` +9j`j EۺOyM&. +`[|5|>"[->XEXCfGwݐ+,Qx")ꊌ{Q Q# 7j#uj"?a9-+R|-vG +eMĻn݀uQPB3F#yajen\ yn:qpm޵7ZPȕ=fjukڍm8h fxNb#$t`3B뗫%;e $/OlJ}pNe)9.Q nT6CS7-ָa4)톟JX .L#zk*I;1hCkVjbo2g5i+Q *0FT7M0Vϓ~wL4+ :?|BK{jf4Նgoؐ_wPcǓmr}j-jV+GȨҤilߗ7:S_egP Ý(2FѫS?nt>X;R皊#Tӧ{AXRma q=rq,:rD,}k0;vsNNq=4[:ĜEU' )e9`#~OMGCjRIN&[Hz.w{gY17R9uF3o*iϰ_/ :z$~6sКjCquOE>T!n0v"cIHO`X؇(%~=uA3٘$jP6>QEi%n:15k' +5|%\ cK:tQF`RLMC!ϗﻗ6%>Q $Hѱ|}'F|7ȉzg%WxH-wZZPqPĕͅ8q gv+qvQG72f +e;40S@X橉ko9 e:[8ǦS%^_+ + +췙 g=K:Σ.Y gD sQdPɺ׫XxKh/Ar(_(6 4'i +endstream +endobj +2607 0 obj +<< /Filter /FlateDecode /Length1 1636 /Length2 6595 /Length3 0 /Length 7595 >> +stream +xڝtT ."t3 Cwҡ03 R" +H#! "-%C RҢ 9sݻ]~vr} h!hAP +`oBx"B  ' %4Ho;} Xi0[6DD$Dp{ [$%EwW8`: H{k@m+o쁇uQ?#AHîN`U <h/vTB(;! -{]*VCQ$lU0uq>¿@z!?p6D<`*!0{ b u F"]v(XvC⇲+S"lP4fG)kYs}gy=H[$ k濵JJHo @@  Ak$@$". Cb ȵO5@! П]wwqk[ySCa ~_vr.jGQyMFأu%8 Wv;5'y4p"Qjpo. uc1 0wg8D<BI ℀P1 ! V=$00%"m{X`nCo0\# !k:p}$=pq/ş7&7&.S$@ׯ?A ?_?Aߠʿ@@%?oJ\/𷹪ȿU˧os?z_⏻o~07 J23J9V5Td\};D5!@V`-Z.:XIHcU*;v9?K H#hh4t:a3}ɥodEfMm.n|L*v8+}ј3~m6=\ܒ"m{"+545S),l :&_PrrA0h',5%8: щ-k.mƧoY$oTt?cWj<|L:/ѡfre,vGFok6yDwPzfÍv K}X 8[dUbrc~c~ K2q哞rAѶD9ks +ފxap>]k{m&sȐ:PxI}Ψ!fd1K[k> *)ӄ8SN{Co N3T^F']q\63z1k`:ԝ?єKA~9۳ Lìjy6SYEov6qqx l8ܚgv|ՈO}C60mEPͤxgf jnL<Z(dy3 !pr0oL9\ەE}\N'[+vCaN+o#_ZŬhϖ--{;YHb7gzy/;7C<%-4utƒR +1\a'ydi)X]Q6=xmBxNPs+ػi$gu^?4ہI,zb#HשRoY&4~3|Zv 07OG2?0d{;2ZX ']eƩ^}AV.m /+G{|b3*z: 3iFm o6HGs5DPkm6oJ-"hU)Ľ;_gfr2պ!%(95T3T?HXx2cԪD?f?N7 ׻ jv=zTldzҰK¤.w}2@BEz%ED}字<xt5v˩ qd/48c8-##Y~P*u2fޘ/'v,Y>0BW=:f8ұ#EG@p S7? zj~QtV>r|{Y+as^h:̧3ё+G7;*?K1(;,+ q+#=o.7a G&k7{5Vr8kPP +OL! YI+W;LN~Tw5xy-ZlEė&"kڅ3RE3n6݁/O3m kӋ=|Gr8YʐH/`sl_(g=WɌo?w)ҳҪi.WRm>3⾸c6Wp?BFTmNS;_i2H~zs,Q&nWvsW%qrQt>\LNL)#Q@npvݗ[rB(Ø^~V\ɨoq-N{$5m\9HԔ&}Xǁ7)bjE0yr'L%8U<']'xR(,$w;bk1ӻo䁢S;/M>MT +|=11)}Nk\Uo)?pTF75ryל+ZYwrt[lӛao *vTo~M$W{BYm4 pT/j߿*VQ +?rkgN.:Me,voRQ +ܩ{+yq؝[Q_=6nYyᨾre8kєwhsUEց!ؔqJr tz ?w8~HY~#(Dґt}G{ \?st;+_]vnߡY2kcJrs;t}|| +}ait nz)50EYLpi255 I EB9rkBUfٺٞ?.S;#4'2/$ fmkQS6$_XW S/Od.cl{"%/Yi#g w>!>YJfl"">/vg˭dONϰAKwN (*+iMpJ광u>x@""ucu ]O-7YtM)&lιj]؂o򌔶72iή87:{3ηG ;SX(4B?S6'|<߲|rWM5+H>LΒ0g^:]sЊ. ,/β@{/_Rsr'I[AݍixDQb WB|%Jqwk5jc՟dX/wl+=DSAiY3A#G}RyoWֳޯ5\_7h-+pEL(v7nYKɞݪ*D+yWUaKfwt);FQk@2"HG͋M +JWvs%T?)J )ũ 'bʎ:5YGV$nT1/z/nvE8Pq$>s6N%鿈$'JQd~/+Y%x^ [mE hL3&=v2Jr?}v ${ٜ_ T kDb)xFdчT4>`g͏-ƇDLɪU+}wÀ.̺ 4GHiR=Aʇ隦 Ƴ}E<TKsDBԻ$M( QZeQs +iKio +.<+;L_,޷7w&2k+Dz&{0R}|v/֝;Il2{м5Og՜-[ח*vAaf}k2ԦO҂HZ=MWɧ")/.sYVٱ`zoxyJdy#xńz`۵Jɀ<ǒ;с83?F%Y+$<,KZ<*jچ ]# tL2()eV>U:85@MmΦ$>MnyA'x8G \h[L9ĎtcY3aõ՛ѫF6bcd9 $)T\៹ʿnuymn'b_$>F N u{]NC*uxY +D/i;E [_P~Yu1%nGSe'͘xSzE3-S +Z ʹ}+O'-f%[P'^z˲)i)k屩K[mdd6x-cπͦgvэ&羖)նATA@Τ G=E˛ sRvjao53_~ 1fdóEW Ty7ѓ虋ni_JU'*QN +.z-f']%3'-EwѱiX 6v=$Lp-v<} ;ҁ| >PTYNxCdކ8D q4:=XZ|c΁jU ]q^G6FnTz]!ڄPT L@Z܈WCwl?m|D"*+Of9#6bוD^rC{\x'm+ZUh $XէI^ N/ oOƖQCqbRD(~oc"!]x+C; Q<\̀ƢtxYЊ{Xxxqla|7-pz :tթ$_w)P~_tKL ȴ:o24q+Byݕ 8R$1u3US[[s|TW)3YyYr(."4^!a2L^MpQ.X4~{'?tw 37r2qb9-ēeL}\WZmx*?W3OW)׻DV!kNbMu? !{Bͯ+2 &L_/Y;C  p1(E*$D_ 5t֡ꉌ h7Jg< oS9z 5Ep` !mI +@) 2WvVf=S&KE]jNS?b\yXc y7U|3H2&6 5ܰL~γ%JOt#<.GMbr{ĭO3YS=jMQչ5{Lb˔f{ױ1ɀg/|ok4=^ucX ~gz8̞RjiX"^iSbb%9=PnϞ{?R2]|؆)iʙ3h,vɛPc +rlTԉS:O|{UVK\b͹1fnDɵHQ>mƓ ,:+`a"[cN"IlnOuJywOAZoIi>"eM_Nj{jGUp%򕍀𞆋ݻ"Sfz/8i_d+" V^]#MebS&bF#\C-H$y* An=hڂCGRo녎#:/^6t.1^B#FueSbj}ZJ{@Hin[q]T$Lhn@O)+\L|T\GV /u9 +endstream +endobj +2608 0 obj +<< /Filter /FlateDecode /Length1 1430 /Length2 3064 /Length3 0 /Length 3961 >> +stream +xڝT 8ǡD!Iul ɖ-1#f̐%[,Q!SQ,He ?t,w杹<畕Y@TGPJaBP8prdP<0@ZG Hg.3YɢYD 2XupwMS@:`9t'Y]*͛Nvrfb9<# +z`m:͙L,A3JufѠJ {p$< A p4k `D$Go`{x}* !!p@ΙɤaaAR@&L5I +QR zd:H` y)K!L!!z`Vh'9LGpt@/3l7 I"a $L1V"Hw%S@A~y*TA+oڐPjP5ڟ3`ڀ⿄D2 @x:g"evRLXg<aՑbu*?@$;xRy8RT16 pGr_4>a1lQK p{WjMgtu&^?p4wg~Y!bFv& IB%'pc7HMl%NAn d5kr~㺵׮aWm#3yK9x˄Bm1Mvw+)Nι]̱w% SvzoCZ[M܊Gp# AR7BMb/ ֛+5h2#yqQ $.!>5c +ηZ*;HrY֭wnW813Ca#O\SzYW&I;V0}cF+c[ZAՒ) +>##&{C-_Fiw-/ +8'{Jxi:M0Kp,ر\.Ak8/kezKVWsq1w;%W 7U\רGG <4F( +&WTϧrxOl^_NWqsgDFٿztUyt }2s[-5&O},W<*;#Vnv0S]{EmSGO$0s{ +G#5)?ʋ~^%}$XU_Xx#JZ85̳\Q'X["א1qqz-,91ܗzʃt7 ZN"{ +󦀩/_\HAۃo[w1nz +4/\Պ_amMnWў)=1S_FH>W?xrBhDM:r\}a3ѷ w>>xXJl/yE1}8/:-l֙{CZ8˹Aǡ'Eijt`/HP6czh_Pn%E/4-mbiGMbRG+,|b ClqLzF ҒхW(j+/4D׵WF4 +C-E&C cP=ڨ]v,zY Zw+LYǍXfSlGTƌ^O}o!0F*&<3!) R핺?T]Qh.vtc;C|F\zoRܜXQXXM86]|,u%pb#:*0)3F鳚fr)_M*"˽ +V">h:;zH 6Iwj5g@{aHQRĚj"Sjul] jH{Q@AzoO5U6GGg&Ƴ1Kp?^}Zj3\P*$ySy 6=Pvrͻr~W?r  !#F4@fį5sKxO挊 >x_?YBg +endstream +endobj +2609 0 obj +<< /Filter /FlateDecode /Length1 1627 /Length2 6762 /Length3 0 /Length 7751 >> +stream +xڝTk%EiK`f薐F`!J$%S:$.Q$sw}kݻffv?{?VMC*cGp8BKSg /0`[Q K9A!{ AܛB*~[,(@vNLP'd(eBXX C)@ +fЂYm-=84]L-Yup@@{,_;YB0+AW_*Ng N8zsp+ s7lnpϿE b]0G_Ff Ex`A~nu7B C^ 3 ftB')as` +1C-!'; _=s\EEVUwk%%@ @ @_a7M`A'+A` '<Y~-++?S#`fP!hv?!_V2\2.LEBto D^7.zVG,6G?$$,sfVXnujΰ_A>N>~Ak   g +7žapKqrx` "#]./=<@ {7F#0_  +~3o_?L/O%H@|K "RB_P7 J o[ +ua.ڛ XW4WHPqlVeE9O ~},YmԫktLˎdɇa }hlj']/|#Pƺ˙BU).MָtH7vM5 IX|ti}}]5x{yxu]{=,Q%F_+S-X)r],'QTJtZδ9a!A˸X*>e u-]S +~G9[L9cgm +a­+L=W珻oe}*5[ Gސt#r cn6)D|UgKcNmG}qIl= EYwSud""'˙,22pG0KiײbhJؤ4Q=ё݁⣯TRTn+?Y[yK iCÖ$Web);[AȚ(Ad,\lT?2Vhu^ɜ6Z3b$̛٤kryޭg*W$oDEZ]hc߽|Wa|H,?q)- x%|*x +׭XU?!Yr# @{B#Lr,ђ3w~@qJ&Yu곌 +vzzߔl./Qw.0F}~m$tQ'8pygC'>v"!k'Ĉo]qaW}.WH;'Ҭ q%CN@kdV(/"\TGA[N^yl5pb c|ojE!I %xA .ru7XgRÀdDk +%8*+⁥H'M=/xW=<6}9773tYHTG&cm :]W +uN1QS?DrSHs{?3(6VW[}2%:J6X6ncq~p9A7 ̐ͨ+7=%"VP"} Y[o7nQƈF׷̾U%R?g^8f86[, /1 @n@υذ/ϓ~c\u9öI_2ZӦ_J0m;9nE3'5m|ejgLJNeNz:V9dyS#a63$Qi]6k #c>R?+ŴfӳHgxִCsg[tG~1j i.N3DJ(vzbQ5xB/ +LO.K[8QZ%ڋy-;j_Vd &4X<< +θ3\F_%eg?v܃ˡDMWNzL0e&{o:F.cD]x Cf-6r(z g SdQJS}u^~ǚ$i?|y;랿Y|vjɖ1o G k#Nd1"rRъi[Z8 +mΠɣVw=|I.lk?J]5Z+'{0%͗{< 4b~ʒX&9.:4aѝ@f$k6K~4Qmg`ƒH|":nškH7ΆTZIo+`Gqe@b8u!B?o|*څjHl<q:Ky_Nd#w<9t E; u KXmm4U|(>`'֋ɘˋUW/m>QP#;d~=Yz  j"VɄ#_?tU1r~.nvkXi#+ ibQ҇zNvO swT΀~uj+\U<¬W !]qmxCe6??InB1d벚J5Y yЎ|i"ŏ4d,\bjhxբO\R\.]8UnrL}o?9Dmd??͓s gocՁfbĥX=rT ]qh˪-BMe;fxbI_c΀4"/DacnnRje()SguR r-vP5?T}O'bs +6ѻҷuNψBUFl6l nsd8~E'U-piE"]w{.μn7EQ팙߶+r4]q%nt45΃%1K1P#lKį5곯Q-#j]EUJ7_ApϩpCAZ5] YW2'#eS j_JW#9ăz@TK]RE #Wݖ,H- _nkEsvE2yGnQŶ~@)~FgA"1%~@ٳ>-12{h%ݡ2Cݷ8<"ۥaKՋVᴃ KTRXyKJ0d׭Zg؂M12%;eǏGn>[K }ʯj|{=YV`2| ס$'BaQW*PIcmx{6!5iRh 6"Aa]j B+z |**TZcI6jJ)a*\w=b.%fE18wz2o>ggt%Dd/jԈk4W2GWjț~ ߞ7Qρ.048?Is6unzT]q$ 'Ӱ0~R>׵Z v9NU{ z[-NWebkca'`8٩ǃRݠ7 R\A yʡK,pCxVkCyYzC3ٱ9鵬5De;u!&һ1}%y,i *G(.lo y<xgQ+ɶ(A£ D0xN|̥ԣ]%ɗ;#{4dP} + +S-,]ٺ̓QԨ+k[j>*=569*J{ncvgTGW1< VQQn-\ZPf6-jYwHEz9OPЩl{<&k4T/<2PCM2r+6|Hg\-:M/?ʜ Q-hX?>CA92Ӂ@OU2J7Pk#n{g]">ƽ"-OX~</!.ҬAVvݮ0zc# Ӣ%U艫 07,};\p$G|) ,{rbLc/# r:rBaIUVʟצ5xTdex̌hd.ђ[7B)vzr9JF+%W@VS;!˰yTS˃j* `gI6ϭEعkbl¡q`e&0\!uvQZacF"%JX),k@;󜠳#'[`3›)*(ͱ`5\ӏ>(/ڗnHqb]X4ksfTQDzOa{T}~A2-!qY|+haD8,&8Y|Q7=P坯8P<]Yz0OBfr5F732w~u5GrZ6RZQP'u5Zs ia7x*b0kr܎gVR/nTt8eGַy[|O]6m[Ƣ.ze f9;B͈24C:?x )]2pG;޲VFǂ2XڔXZdwB:;&KOg䩀sDd<~.jf*T䯨XWÎ?cٶ%O7U#}zL{+o@٠[M0-K3G!wJ 3dTv^rcw |b~]v4ĵnIuw'/\ɂEAmKkC~B&\j tE9ZWɓe#p% i9X ZCijŸg6PDxu!aAyn3l=D&lFya.j49ВRCY)^r%Bd7=</8K!Ee&qw,7]f;3|eq%eLK.i1 ]OqkMTu[K(WMI5cOSANM&Woqrm)ˣe/:w@̐yf@jގUN7E +qoy*hqָ-iX"5xBf2L˶6n'݊Lu)J})[ϮNeA|)zb79Z~5ޮ C1:ǾGć_W<寍tTu䔑#@9Y%Qy\KQL*+1)+Jw*7:UܙiFdM6Av&KFKՇELD +endstream +endobj +2610 0 obj +<< /Filter /FlateDecode /Length1 1611 /Length2 5772 /Length3 0 /Length 6753 >> +stream +xڝTT] ABiC#9CwtH ( 0Ā0tIw)"!!)! HRw|u׺wu~j?ur@,`$$ +XY8#\`/7̬ Gx0'gBH4\!'+" @BuN?%N9Y198z8>s"5 ;+PCBnXX\W\`0HP@ ,<+:8Y~`fD:4asْCG墀9HgkN0*9ųE8!Z_@]y.0eP/fC`A!T)sXt5 #^3n Cy9 y(,`Vp_fXwA 0yP_r s{;?gee/` 4cJ`^Aa!@_, !2'^_.bBwngR 6zϽgVSgọbgkdt-5aJ߉+\1_x]3YNcDCb+G , +@{7_.wOt&*ج7j^}PĚ|TlRܖ\oԸT5Ds7]=4;.{!»WEV!U+~,}`^kiDthWu r~l4szEox͹ZK1Gt{%Yzc/F㠷Ҟ&UM oΩ%91S;}2O8ISKg{)v|2msOq_n9gʺ/oȥLM?M{ZCrȩÖ`K6g#x#9;ݍW {ވ @,/F_k]^FGg^T³n ɔ˳3n V>#T$Y]JրS``^eLNzKa-I|CLB Rf/h Dbm$>('qNsΰ{!rn57a3+ŭb˻b0}S4--M_mG.1)فի', 87pps"ΥoY>knc`VW\/G7Aƙ! (|9břӖWNk/FXF/0YJ85k$rjt[iXa;eQ'<^'ȽYɑ.uca^~O.e_{E}wļ=%] +Zs* +7vUWxE0 %:`޺)Ir]gCUMsMt;ᮙ13z~ !=?O7/jz7/?bzJtLM솇o cp2<8e&{QtIEfML b}legn>sUeѷΫ}r qiن=T1tѻ/<#SY`o4nم}%Z\AmoKw>Y.dp^A,׿='Ǘuo'-smY2EAu݅']T֨g@ƨ ߚ +22I^tjY_Hn9Zxvۖ \P3G.C6έ4-=~_zn鋿cXA{/q*G] I1|қrދ[řJ`&)/@oM],2[ a~ȡXm#U 4Fȟ='no>DT7J> X*3=Y{E\/.i{ķ96 ʎb5%;&GAKi(-˘4>^zFܳ8+޽x4GU|Y + A^OO]ODJ^pLP$&)d|"q%dN 壝Qܸ~΀߄Ӿ]A뢦q oFLdh󓔮 +HS\:U'3Pbi +Jl3k78_nVQ`YTv/Ͳ:婗MO3 *RpBJguҰ _s^F=8?5גx/.,J}*6qŖ.= ӏ&(Gl [7$i=R?]''̵Hh|+S4z5:EIt١EC_dނISLsnm!Jiy+BJ8rv0޺j)!iQN;S& ūZ(ӌIV*jw O0?"\/3Cs??vRTRw ݥzOCs:RWKof %2?^ؤ7 %PW蟾3$ˍ-rl|nYbq)әw^w,:1.^`~-!澡BjKWHZn=}VߗB֕ФQoQySiK~~O%u3LřSK'Ri:+71ȁMdbo8UEמk^ZP)62\l{QИahYmJe.:%XLW +R&I'3)gQPVgѭ'y@UmjtaCFe ;{liu3׬~CϜ35ǔ6vzKHh)`N}6 WD +U#R~GA E +LY*&:w9P©eIh UU۔i3nG3"7^7mT2WFI cX!U5ZoWwݽA㙞`Sh[SX j Ok(z̭]3DG$G +cl[[x+w슦m%QHy+O0+9E)ޅ߼B<]J3dV!3ӄ<ʝ̃*н12IWTu Lj.mVUB`0[j!>!N,2^΋ymVOkK+Y7b +?o\bjx[3`- iq|}vMfXkd>C1MI3 {ZUhZJE}*Aڙ隊dM=qbGRB2WZЅhN4 CB?`ն<L9sO D!H#v~guSI{.>ߝM &U>}J2Hra) =[͔O۫mg"tW U9J4v.Ŀ}yYv!1B#e-`ic.q=Bq/ǚF{QB݈"{.zh;D19\sR,ϒٸC51BX,)PykpI +Z'\*kj:Ƹ{[m=g/sbgbks8#U[ZS|̋曷W4.!dh Bg'KEВ 6B Φ7s +F{: +xN#KN2k.K-{5N/NjPJUK#g3!c\}IYZ@yYNR#ghW^Hi-P$6#j24>j>}"LMT*nvo.jxGlH92 RGG0^w`;pTSvYn)p N6I+irE2r83#bUy%]? Wcčr-+eUSZ.0wCڡutL1,DJQGU[!тL z M)&;VjT3Ĉ܂4UDB_D1= t ui #yf{]ZvɶD2ƣ'>@ZpyQm曆OR":UBHv6_cTn$pxQ34Kk<VAjXl%-)p3ZQ$̹v7Fc/'U7 +#"Eϝe°ʞ.S(T\,FVN|`ܣ c!y=;%㑱B$̠*D,V Q-Og,'٫؊$×tGmyFjE_Ȭ5=Zb|@.WgV̬=3z6IEVOd;T08]sښ+~zM.}b 2cW҉1|VN?6L5s7߷_u=PMe8旕u$$o|-U }*ԧLO1Tc};v%PW׬1#P*31?m!QnS0&+ +H` +(rUσhzfܥ`Ơ*[RM;{m->FK]\#3LVʜ{ƫjǁ4%Y2G+lwm7}QAP'k&ɊA_^e3}DPK +Uۮs +*pwRTKW|UM1,>6j>m]GgЖ'I)ֹVSqν]R=1-4|Vl[ɕ/q`e]\>:JoT0걇I}xv 4:8胮qJRj +\ R>F`6a2xlx߭|,3XIlړAĕKe}w ZV~6&_9=25Ö~džJRO91X{a&)0OQf(=9p mA[U`t>2CXۍѥ#kSĞ >x L1,56|d6T_"Fts+0!N>,ݞ0rIi[9/?V9.mJܹ>=-W O;5jwH]4Z{0<Ѫ@@hz+`+l\}1%]xk8$6" ?+mLC)@wQ[ίubqJBu nuy~̕+k+UA;λ_+ܾ%Kv,A|?O٪tj!D۬u,JFI`\A~> +stream +xڝT 8T{0+%IY.e91FI"ef0KYdHJ"\,YJFIDq-͵\W m} +^Ё ,Hl`d:ob $ h?gޅP+ +[Lr0g-6Ly(k?AP:/PEx'||a.`'pS ۨ\6 q ?w ,@e€]l>kn +@ !A0"oø" +O !!`D FHE> [;ԇ%|,L}t`q  M B?wI%ַ1 c!;"2Es~_50B;{.^ЩcbG9|TB#/A8H0LwD4t@PؑA_d3$w``3}ZQ*&{ F Bi,:x!@e!PxeCY\ D3<Hy(B =@g+hY}@s8_T϶"j 4Lw鑛oɪC%'pGHϜMҟSrmOTUqMU|8!%A* \I=h VzL7YKRKU;Qۖ9>AZ$:cmJO 2>}N@p :vݺzON&/4a]ʕ7UIoJ|`ûCGYSr}6fWli1|-PDMMo޹z]rϐ2qXjFHgll:mu1kkZk_&WNodH]W)%\I[%. d1NIj'`?{(kvlxS6@WGRR֫h95?7.<'64n5ߞ{ɱPM{+%x7,z‘v1T{7דkNc\ǽF/Z>5I:$Ua@Y+1 +p"]-S+?@vO^Ɂ^uEBA&Q5nV9?OVZ>كkRpN{:W x}wîyZӣ ;<߰k0$yJ,m2]!0=4يy-GlْII&x#J(b sp{NDlNOVW]Llo"R?gxuN,\iqI_F˛.D@Oĵx߳]##B+K}aEHb}Bn~~Kɇ+KyGrKև cv򵓥N=$1eG؝&{pcyo@M*o\SD$g-ŕ$&ȀPrM~4sw1!APtаK3M:ڡ+Ca 8w+{fB|Z=lX̭*<X=_Id,_eRze<xus`+t!v?n uVj<،o/3WS.yM,+g+w/Ɯ[LZ^%6QayO+tuA'ޙR9;Z 1g% |OP55kX1qB&D Z&U2sPN%*gu=]3'o\/͐oNlbHg)?'v ?E5~jQeǝs 4׽hq6LS4S.-.)`"wrS5ulKL܋HRy [:>0OʹGQzZ/`}]0WJhFmWeXmK}$/x",ƯbEVfv>iѶ z`%A{{|ձk_?ָY@3G(9Т<\NYX_VqW6\DV{TP>hI`ћOK^"g(/WRW++Y,"0޷dk> +stream +xڝT 8۷F=E섙alwwe  3cl#*)%k'E%K%N9w}}\ܿ{ + [Ii"qnKIC a05 F!¶ a+)4; & WRp(TNcA<` xDXǠDe@]0%%9)C EckyP(fAlGR0T)MPZFnwz8< +A@ M$*|/=%MƂDq],Rb:oO1-ձ1!㮉Ey ;16X$`AsH)K+()+oM9/,H rҊpſ,Jp=@ sWcXwEp<ǻC P.#j2X'n,bdg~_ߠ_ߠ_75US[xy)^M@2kC&gA/vz+ъwx(7f +KnaHvnfpjcx܊t}3 źQ17v曜0sm@o\FHXQ/i?қG~&ZX)PK,PU6̑uosvAۮ8\&hu|/P# >.Kk]"F޿o +#ކDݫT7FO~]E߽iV)d*N=oa(亞 +é KD$ztYbv9Re"hϳףj oeouPL O,-kdLd+=pݟ-}~/^۵jj0M?I;.lW BG'@m +^$đ +\nȶ>3[ĺ-.:0J +٢K;Ob @KFp>wu°7 "C/? iU*59уO;’zU]!*B +Ѐr ^]Ӣ^yTE5C_?V^\{_lbm|aq]L8SOQYvfhJ-@JAчP&|⏺ddnZJf7I26NnR*Kgu^ t)1$q€ldX_rlf˜UmtGv?]< ID.<щmm?lUhŤ[NNc枯?Jd$2WWE_P~hjW]G֡Wۊd.T(xU3B0-;x]@rv'UaQtq&sfX!>)p7u97WL=߳|FBꋠaG7+;^ۅijr-P . Wl2eS+in4IPh$yt+i41Mڬ_}L-D&7ϯahX%'/G;k'{'LP{;XJQێ-xANG\;w5]= +K84-8U,$yMⅺ\[=,D}M vvTD~[l\T̝djZJj l ȿ8-23 j ynK>$w!Kgc~M,8]TמFvd(,;wtkO(^aZ>}d ?UmԄR;]ULJ9qɺwJ=}> ْQQm/HBbYߕ5uO޲+HпJrBd0ب[sȠ%AEh@ X1>A ] +!zg>; +UY^/YeA71e\s[{7[Li[fEjޜLEb ^_Md%7uK>za{&۫?ҧc?NWˬ'(qdAG*2z;)zWj*3Z'Hyf2{=Q.Hx7qW8GfkTZl/z*6GIH`1N8uKuZdQSaVO]-ʒǓシ1ɠ>W<t1ݯ bzʲzq7#s1[y>IRS |B\x̹C 62GOաgcXv L7}YUYHy4Y&7$!O<}Ƣ'jMO)4'*93N֎e'*Sx38-r&c_kdߡ="+~Ds[ ' 33Y~ +KrH`DU +μ0~s9h% +c+-^ipXd/Zſw#_~`A1eͲW>xɉ*j?z0MQB3+Cec/]s?,'bluxZT/UlNz e^zۡRot65)_VkdL=saOVtbF;|EŎDمd[-h{tHQlΗD,c]ɣFY1H`,D?m3=գsNj.= r-LJ鏿0 Vkbp{}:LAWydA)Ym`qae[T:\-9PcvxW: +endstream +endobj +2613 0 obj +<< /Filter /FlateDecode /Length1 1450 /Length2 3011 /Length3 0 /Length 3917 >> +stream +xڝT 8mΖLxCB=d cf ]Hc1FfYYdY'EْUHɒ%RPɒ}C˻s3sy]uy?"rX+h@"RP*si*9mTO7!~$S$꯼.DSJفX(pUJUQ @`ʿx$6Lɀ)Hp8q]?sRiwQ(E9% hĸI$?LX5Ս. +1rpL^!#cW`[wHp8 HS^-ܶSPRZX]Z=<ڼD/1w'bwҼmxohD8p P+#`(@?6^N ؠ@/Ax7HALgGX< +8;#2=m")x?kbw%bA'Z( R*)oY"H*PO)PˀD'bHX< JLFsF @ _FojP"J/h ~9ͣiD +tw * "~+U)uc` L+q/]ͯ OJ1/Hp ڂrS+SQoNeϣjz:|# ydQq4[wd\0fT}&sp}7'zK` +oQebמ _c$[ 6GF^%^/ -5S?xc[ZF]-aYg9ż%Șa\7f7͕re[=_"Ğ_>3rejxbs9HbKZhs{`}A+*V7 +GMSG. NOOtdP.M痞)W-ʣbUpTTU?&n֗!,>sBHkk~RbsG+EaI>|)+U,7]ʻ.wf0hcx 73]L mz)w +mQzG̩s\lܡK2|dnMisIV\#Bq[|AVqž=OxBnb"LFAT{fY'{PjCٞWP_NQrT Xi]xi}ux̟aq|j-r.!fHsY~mS[O4-2] +[`؟z7뽞VHWό߫F^(~ + +"ݧ7yDJWRQNh(k +7H);"VΔNm=,ԉv'^f{ 73"5+*,R@.H>&mX?CǴK'=Auzg섴Bܝ^Ę3yaFJ_vߜfWߒhc=Ti3b"}C\:xd +OU6fItR K̜dɼ+NzpɷY%# ?zf"˾1/-$R(-ᘧ_AN;:?5{yĦ`6BmAS4 vFfOB\ܼ9se߸ʗbbr,UL@Um'""ym Xmi.iI^ ,#AH[XKKdVNr0z'M{N7ndx$̜92Hh|ǭW!1+1)KbJ~E(O|?nԽܚaeZ.L9/ bycnwIQ;\U =?<?{M= FբQұeee}p`x ,`_|M[i[ B &.& |3f@8,`jNL;aQp>&9#ta44R{%JemDݹ _}>5CbRfډUg]9-y4X.3n14(zqu H0Ě`>&vg?^͸>R1ҫOQS@Cb5=M}< ֛+hmSAbXLͬ- +d:_[!s;;=_'B6G\?^y8ż;¿/\[{Gj17%.E$0ʞCMp$ B^ז}54t]N +iu9Kzx5.T4"xP'=&"Ɏ\yH ڜ%Y~I->g]6ȉ`%yO=wH³ y<1F\6urfxmP"Cu}4d.h2/;{?{K=km](I",W-V $d"cfz"ZW}8 _Ϣ{p5%bC _CvTRײQO$4^hOPTVov}w,U":!&dIWh{ϵkhiyC 0{Sߖ<"&8i}K07Gگ X@U?V]͍|itɝ=Um>}ko, +-y" k"o%_){-iǧ8UH2YӮVi:yReOyZ>Gs8%hB?ti> +stream +xڝtT6HH 3 C0Hw Hw҂ttJw9zν׷Yg?~驕a`i +,MN@IOA؂F15pG *[/ IM lP@܂\ ACp< Ĥٻ!VA3oaxV3: + +Y>8swԜL-+?`؁6C)L]/ [$@@^a/ ?TP0) E8ba+ s<(h=#< n>..v1#=O%jnX:=!LwGw`twJ .9 0[Bx +&8A< uhbpiʫjo8@xm@ +'T6+! @ +{~megLEb0yfA\|]K`-4c`S(?<@F ¥M ws$~_,b&{4Gi \0s15`- +V9Bxy8K(%=W0!PK/7q>7//x8F˟&{''1X.OH7$7qv`%0^KwhҒ:3'8C_.`303ʀbkDYюcjLrPDՁpp~nZOEeEd.Ϙ͉Ym,uLQjo5Z뒉T+/AODTF-cD0u䶶CZo'egC]tfޟR2)w)R~SUC(Lmm'w^}]DtB|r49өq>ݰRYlƢYfk +gTYCH!^xx(<˟БR?ɏE䕶iQ 76扺h')i|!9EtG,BBT)9$1Z6₻IOM駾ɏsUS{:i T%p>4=,"\trgTM+EQ8.OC %-9_Z>wQW_Րl9JIݗ0ō˜be$b_if~o|rqȿ":7 iDGCRZ ^ +<ތspQBMǞ#6[Qxh1j_p풰hNz{3hduK"$̇ˎf]o^ +8O%#:>ٛq3)d벦s|bYYXt0@ϧK>yM/ljӴMG7Nw٥k^cjHåi-mO'[fI)U:i.7 +Kt18mR|KzѴ2]:; 4* myc :ҊIWtPV]fɄq^rz¨:]':9 ?[:5])^Ok"}}XJ{e2b3@oQ eW8;*& +x+A%n Y\sbdgx}m:2?h r?ҾLK*ʜt'MR>pa0=3B3hѸ]vWq]WS >AYVQge[Q{KxA7B2%Gx tR^דҍDC`R8$.AP?累dt; RyB~=U#gqi=]0=1&,rr~(+rxM)เq+jha^dւw,y}ak䛜 Vi* Q,oP9Ά."s󃐒iHA(\SՀ͖*`z{/qʿ{]>gHwmɔV|gX0<,&>&<4Ff0-=:Tˠ%8tMwixTC֗De̪<&ï1Zc#;+ׯ( $D֟^%?g(BB!χK,"]i()Vby眙bu>᨟΄IR1y++\: J9ĝ4 hp`ޢ;;{Xʈ? SdrK'Qh}ȷ&,޻tP&9;{~+U-S7~^tch{mJ*|pYlc$V^:Rmb2DaRH]klEX +$YiM$ ǂ7eG{->{GFZoXbmd]]#S -<Wʝ֠/)- a@owva"6i"vuſ&}ts~v (3Eq7-ȝ>wx#OR˨ ^yeRwv:n;^2ئVFc}wꤟZ>bIdvĀf۷^MOjIl<1Uxq>zoHUyG7~ ĉq)=v6Kk Ew*unnBJ~ ԿBT,nQ`g-_Dׇ +/|϶,a;RoFMn錔Dxy +zC݃bŒn E|6uoN 44*sI꜑'1@}坧g]}L 쌔x^,I?(Fz`]'b_-=>=ՕԦ-ε7Lq_:3^#x~^Ǜf5u4:>VTbķN'MfVcNɌgqHF0W]/rΉ8v82O?Kۗ(K~\UA͊k""ɬ$q9/,y+/a^lf8xZȻ/x aP>èln ;}SZ#i aƑ4*3J.>}|Tө +m]2ڙ, #mʔ~ږAb$$1]1,:JB%H2U3VTJ]A,c;2\7ߧ_7s ~OI_p4"X5AMqcJ+O—'P4O)60 O9n,^L['e]0=aXQ~H6dv>¼,UnČN`D~=N&0A: XhGq#o?D3ᐽ݆ws2p?>po@85r ^~\":]gsmiW|Gٜ2}KP֐z}i"׉8b=DQ]S2G:Z ;Y|~|~4M#Bg]UO8GFtR2g 5ʏDT{= m$MBH/݋]$JL |kzPҋ8^3<v@5(+NZ $(0G%s 66h-D9=9b'.yٺd+¶8^o'̲"`6-iҿ#Sؾަssܾ"7SD*? +C2vgT4+"h̖^ݠCR!w/PY#oԻr$OSZȃʖo^03XS.V BQ,Bno!& P+^]!`v +HNtˡA-a}`W>HXƬ`~=LK[ܽ -/5{=t }xB͝8 ;\0Ծw/a]7xs*'vټ̕6@9ayto_bڰ%,$i+LMvxV:onnvqrXOi>)HūU7Se71=D~/I [vKրVju|0dʜlj}|*rb+ba51*/xu_=o_7w'F]FJAFAu'& t|VH$d^ѳs0$벱DMxX^ea@ڲ7zUH#iڸF^~}FBX"xX_{ R$f)]9Ym鲹P3vN dCTaVp̣h:#A09]ځݩNf#lc $g(f)ز9nDt>D[oLȞM*ڌ z*tDrcU|xIwLCg#׮82sMp&7IMRfP*VF<|Xjm/|ℤvHl :NzSS]Q>j=ϻv!W[yQCi6_Y{\˘0ٙΜ4}KfIDQÏ,"|<؉"&NUTqSD{^险xd=L X7e%7sB.h#;-Yw9DimoYpޏ܂PsaؙΣh.ivʄhlsrq;dW$>XT$ /Ǧ, 6S{xg>y'F2Ze`;a =%ۛA\AejWOբ5.ՑqCt+#UGϱFf$̴jv2ܟ/`w6^2P./CU{EHLNysW(܃QT<澫7NJj47RGU'Nc ʉ|(YV.Lm^BIPQ|CR,o 6[fk7.ڏ2wxOk7Frе5b"$9\ѝ^,cXg gk*#g(k/˽M,߂}GO4uA/E맰$[9vQ=8} Jӽ_n +V +2%s,_#7j6JlW iZۀ>g Td+b(Wt'=">3iVzHWuT Wrc;)xTOlwIVsl!MIԃkCgm:TQ@"5)[9"Ha`#N)ip8Wf*\ [tϛ"n'8֪W\5$" +k3VRW9.rmYkQyX,a26 )nD:M:ǔw]Vc:!mwN<] Ƈ*M;+d8a積31.qƻ?\,%TC;9^ A&7ua$?(z6ȟ&?6lyz5;+|oNLo ilf)dJ#[NLC9;"x8LGzZ:RS9δohd'eBq4Fjf2fS-FIyԩpܧn}'&mt0Na +_oax )CqiH;kNYo.,e̜H~ll 'ѓ}_g3=լzy0Mp"R >et>Tw(8[{"^hn89)w7 '$#Όye&2ӂ/ Bx1} c#Ԫɉ_@{*OTQs-z-WLt-q +XJE.$=Ʊ-gjduL[:Xa ;[N+ 'CUB'O$oj8y60b%{ +i3ֵyeF|dnf!/ki+Nkj.q|gc[xfsIknו5/S{ߺ#iv\~,T][Aٰb`1 mOi :d԰ֺD!>zTw? ? 2 3-:bL.a:͉ = hAO .`UB\( =rU uWE1АωR?1}4;rxʼn$Cnh 8,Y}|Sd(G_Ev 0b OНa Z:Ժfm^`ok4*)YHyUoU矒˩o +LTf,E0MT%BU$Bhj%{M >ʱ oT Q:e5~N +ώW +!{Zzbeu,w yEַyDp@ȹPig 6jůzm}_=6xh(HV#=P!S:snW!>S:QF@wX$fV:\V:̨jTVv[r%U2ex/mg7:Lb:(>.=/f +endstream +endobj +2615 0 obj +<< /Filter /FlateDecode /Length1 1506 /Length2 5581 /Length3 0 /Length 6527 >> +stream +xڝTTSi)HQHo -t]QHP K ]R +{"Enw8ϼZﭬO.> e WF!1|~`cF +q،.h +)ۯs1h(`o' w4pac8L"..w\lVr@xy ?#P Ccy-KO(/8m1' )H8F|%$LGbРprGzeZ#_\ gW⟤s7fQX;p+[% <࿜r-p5䍶pW:i a,6$ִ <S0? ??{pH +7]jj/<|ATgM!s8 +b¢ .~PCZ䏹lwS\?Kj0+8y,:@ڻ/RWQ7= (:8qNF`< *-3\c>9Q(G0+9_ApceKHЈO\_*@p4Sh(G՘ +C mAQ> "(y9x +!*t.s A 14!?111?BJr3b_?&ruq9?_??߶5|p +ae%خqR|βljyqQZ~Z߹dVlrx07D-d|Zwە9NIn++@ʕꔫZNs !*Q;"؋^67 N&ԦLC=MND6p?_KJ]pѰGd^_>l=i^ֲ^݅hݿ5ໟ9Xq95*,GJt{'QϗF෤8MGbr|Hpa1̖i:X'jIKnEejSW-ǯ\YH!mgr~jn¨#F}}:TnK]ZhO@'Ou.,MԼ8[(_P|/DᏲ$cè症>ɕ+rYzC7UQpy}aE(M)Fy$#b& 6˴TaR"<~*'S?nK ^Xw/dBǽwpH37$Qm?UU~uB+(z@'4BҴjOsj,ngy,SI 瘕v^MwR Q1O|X5uC QJfɻ}f(e^f'A1oJvqP q]ܫrWd-dgn dRy#S>}Z-|'/\,pEWY(*U[՝P)J^W΍h>b lf j)JdlM]΁)~+]"t|RzvFēu9*#4Պж[&^]\N3ʁɵSCɎ^ۻqmG V>yXaQ\q`.OiS*pwMCHrdrٷ7ÿ(5Kݠe-]4$:fYě_PfH|]Z)w@nRޢt!|(r_ u ,2hu5tO̎Ʝ~_ 45y̎^R2ȫ :Gn}(o{# +LrQkt`hmt sZdЍi^ie.,RUAz^cһKbbI{B4 +?8!H:NdwM$(n7捲Li(["Ky { m4t6,0ffˁnckDZd]ϮaF9| ZjuH!< zeX3rZ맶o e0"N5]#zH T}d pGu: +QjdsVSڿ"_m^CwH'MLMP'O$R{dhcx+f|ԍv8{˳iBfA9Kf?`:: \Wzm7QfUddj&GJ|B]'F7B +m` _ Ҍ柹MͻCx*sa#iQ=(PDO8h5y(J @2=57=g{0G~'\Z#]  +I@*>YZ/ZvM[٧&`e guyL+ф4" %!wB O+xҙgDU];o܃N4r_R%!ouV嬖{s$Vii {}m{ʊLP[L8CH=ކ&jGWIӻYah n|UF'E͵{ P4CJڱǾ^ gɧay\X![#5$=q4!2: +U_WZSօx-V)Ě +?NuKBy.J|29XxN{mr]k"k;w9|S\Qvp{+7FUv +8͇͢ꀗ^; *IL)Q.3y|` \HKseí֐8E)P/:W]K4ꓟbVf4N <,T~i\vx>t\{%eC,?_RNM&kIl6D3AD!' 7*V.g>~v-rŧ1G!.aj@+ꍊ 2ڝjHf fPN!,U[=/)/` xPj Cik_RO4*C Y.@$!x/-7On'ZA YDWc4ZuttE•)G=C!$YyGXwExpZ}LQLfǯ+W"DGP+ wy-y/+٨rw9LfgMČgkb-XlR4BM̹Zլzt73X %?Bbf2v?:8zZx: PKu;JH y"|V3Ms):6nO,Z?Lž,ۇh߉TnLȞ2aCc]VyL +[37l4۾JШwLZ ;Ox:?=+lI^)IV/1rzb +t#i,_  ɤ۴JޭtdiXeZ8}k3gLzYД2/ȣ>\3DX G{PKsSO;JsJ~i!k5w!vMYM;J[E'R2~-c&FF^%)Onj+M.}R#Dic6d:L? xWgMP,YDUV<6㒨R>:)СZ%* gn=OCJV{^s13՝2{ӫN> sj3 P3n.g-bs6}4?ƏlB}S Uѱ 'b:OU:<.qފz.x5괝2_YG,8NvUAM}]IR SFE)*i!ڛq +w`|[;;3/!?.M4A£w[,R跴ċ-?K0F$]W tLSQ蔯U5'Ғ=QѠUY꜅hiBRp`cws/ ӥT,e&Xa3F^qNiAH߸|>&6k:>xյpлZY.[9b@aWzzTC&ߧ1ƚf_AסxG6|x*ڱ**CDr̡8ma|<)6x?.#L^SFAҮ!C\(__w Zgۺ?Ήugдҋzrr]3`发˗G(d2,K t!g:~.>N MWrމ\F:. .~}@uqe3ocNMG~Zܸ<Jmze46XQO㛴D1cv=n=MIEty$o +:W)z/>:*ۙ(vlaZztM~$Y f6\0^?/oXL$DX3^qN:c;*[-f 6|?FNpv,8e"pf{cN[Nֹ͑_v/XUԪ1 e6ᰴc6#y]:( FbC̱AgxGg$ٝ)L ;Q +.U9ecpPh4Xbd̷$c @!_RbkvYcWwzZc p K%?둼4\2=/e|BƖ$/FKteo3e(ǵW$D9%D]Yq85>I߯i.C[)3#&x=8)qM3h*B6%,|)ɇ1R䅏(f既9J |<,!~˕<ѱϛv4 +6]hs *ëf@3O.]*o^Θ@4XnNGfc^detAAY,]-gE߰xdhi4[Y}8 񍻤&78bF12l#Rf.zڍn@Coi|wZ'|&"zӧg!))C"bB:Nhv|yTG)b +endstream +endobj +2616 0 obj +<< /Filter /FlateDecode /Length1 1509 /Length2 5448 /Length3 0 /Length 6393 >> +stream +xڝTTTkVRbˀ 0 !!-1330 "HwHwJJ *HyA)A.z{]5kmZ5RC &.PRNN=%4@b]Q/<i;p4C$THBP\&B x +jH'k$֖SE$.87q>@lzH㈱:5L)ςCDJ"KF^1X[O +\v86?\`W0>!qrBq?*Hys^x}~6(4g17g}4 "EaA!11tp;)?ql]~(;aݐ~>E +(8FڢФG͟L!` +@~|~3?_$vaUe54x+'| ?T +@! &*3yP9EPP +`TT 2P ; +@6v>_Z>r̩H  PEkJMn?%hѶ8$qE+'L7N.9 ?-# +.u"Bv?'F (4R E"tubbI~~qȟihĿ +c(- X+/Rȹa0 +_Fϫ _tnhT'v?1!1_oLT/LX7&+  @Oݰa ~6- H8d}mHQ5S!*[hQ9)Ũ ,|,KKၪD{n#}ɩˠ9UF6СA4vX^y 5J00Z6f.Iԍ'NoY9#pOWs q5嗽,ѐ+Nj@ d +ށ෎a ~܀}J# !/ldg'U!wC84dϥR-idv*hUܳ Ik(\CוQ01%WPA5U03cei +)1SP%q6-uJ]I:[*/gze\8 եD +ա>qC аehZT<7ѽI']&U5< 4T^b3|%G66/[*Sk'WVl]2ifQk;b@d;:\e$(Bt%"4;fajsY)$F?',N?&!³dk6۶ĸMSRb:Ig"TagD:ϋޞN0X8|iv $ ཝ-KfQ]Op588)mqAeҭۓƳxLɭ6py$Sl۪ۓrW4"Ԅ GٙO4M+dՇu3͊mޖ^fEOY$7!nXn0'n.0t\`jv4ˋ%Rv1\1@ENwqnm)<]u +ANGGXP6.qu]$.4P6-,9U`ov^;rz/oJv*.nd S(nz`u* mܾ*`kwu}N,~HρPx*M%Y<H9ߨBbNd"u"n^u.&R-NV:.cePHCad :(.m4! bzIUNXq!XBst^ڼg)pbXBw"=Yűm D0vR\2V 8V}oAT kB +R5`>"%z^X"&OlOEnCBjȣU%&a +bc ,<'bsK#mwӴ.7L$H!VrF3N(S;5l!um:3"\IPlP芄Rn<ޕufGXw2VZs2J]w("u[.:X✥ "h#zN)PuguOԪO 6a6j4wYBs^U,WW(@EHRBK_ѸѡyFP}8Yr_oG":W͇ߩ*s#b8&HaOmLrj;=78zYQX|kХ4Bw??H;MnN.-F!=]bC+Y}t5 +dal} +fӰߠkwc!!j.A-)l0!%8Mce7_6ueJz> R'L W@{Yqtkˊj5zg+. *NUe* [_7|,/FX]CWʪvxkJ4@{gA .ZywcB\/wεH1Xr(A9"$C0:býgE+݄QIGe=L7Ng A h9DIЈ bdC⋲#^d.vX/骇JojlMX}?6ꓥ/fMLn[:`5qǸQ*!Of}sҁyh`Vh U;6*XA5:8\>(}=q=j *&j67DU$po7G`F,rɏ(2k860n[]QC>jZEMHÂz˕2~~ uQuepד5ԝCjѽXܶ@> z:д<AQ(-/; 5(Zz/BJ3(M:w߫9k]׹ڛŘ;(]ΦYJ9/P6f%E~TD,5jݚ28)9#9PT4:s(@,'H8~%$,;=ƴ;d!eݵȣqu'dMVtKHƧOv~k)uj xm.WgмomMvamm{|]|q3`zsnE^l9cQIל:HP=/d3.dl׎_Ϭ-Hw]jMtFߍP{_"|}Fg Us EO1-$ i$ DLf0ܸVFHzeOZhΔD#pmo`͝|Idicl+ڢ O g>) +q$yxq#O\4#m0#7cdFdk}:^ahz 3P{T}!'_n󰴏es8exBbi8L^d&Z=]7dh !u#f{M@F#(fڟHW\ FyqiG`3笃x fDDs:=v9n钘^G\QD`C }m纆U!n̩^XH$ʣ`SJf`z1ꤩGl^c:eo^'1#kE9B2.r vxQ(|/.1%퀦>uF㭏ǽfbd.xPPK n'@:R#NTro +D9:} +.Ζld_z'C:n"qӦR$FM;akLnö9yJ #JӳnHha}ų^&tec\Mmgȕ\,;㢴9ɗ+?jǎq9Ю2toQǖKVedVI/DcL#LU<`AMJ}ju";=Xq>o=<4bfZ|aXNS6َ1pKzm|_;Xަ;Ƈqx*c=Ki)+͆)R&~ Φrvy "yD3_A+i9`-l67`dya LZcy>"RSZK~o>F23 r oNj0ݑsi$ 36뎫w/ npF)BLEHUG }ٛ5&ONYm}1DF}˒:f& S%gxNYS5FrޚB>GCu1ܰ{}ά> +stream +xڝT TDѨ? -L $EY [dPC2I L&B nEQD\ي, TEP)ZqV`s;9~c^ |#0ds4cc_#C^2P8f3w$!I9$G_ 8al,! 'C f숇T*#m ԃgp*Hr\` NOU2ej + σtCE,!*nRH2܆TC !$Ӕe1&vTgPQͩ[X̐)A1q?2釡J3rѾ `%@"%1%|UHV86&\Ģ(k@J$6-bTDDb/a F$$(b@ gJjb=a` +^=E(:̂ Arx 4~T+`X<` yl.V0ܕ@R:Mb5_IT ?k/Y?H훢Ʃg&_)o)0&%Qwo Pÿ#HI~Q|m J Av3.zrSٻBGO>Sqs+G k$AJ2u qi52]^9':.Ϊ >v'KA3Sj]=;- ;O&ޗz=3*+ў-m[돏^ޥދ񜿄drQ)oFܯPQnut]=Zu_ [tMO'āʞXכ6x%{{-ѸXaZe7awW$Ώղ_8R*pf̫3{2aQ&KF-n )hzꂹJf&D{?kQ1sϖKڎi[[\oF|?㣏jje%\3|jqM}uIf>u5r矨ּ_ {},J񏯮3=bؘ'̌rݺmiL\:'w&,;rp{9eV~cvdgFZF]ivd +ċk8[צ{"bs &*v.gZz^_yAqxsw_59IV !Wϖx-6uֆ*ݪkaeۅq?-<[-q{ͧjFGd9 7R@Τ#B孧oj7ajp~ak^oNY|l^]Sٱʪ91}dDu:Sg֌yı)u|oۼ˽(hݝ_lReF>YK0-i -'4\.N녀\}^K 3Hэ.< R}{Īe/ ]f˹?\aY7=a#y4a//'Te'V/yj"^zw:>*N-.%avy-5K2t*`VPoC̥ ] +| /)n\Є^FZ׌c-Kב$-[z4$o;ng=n^׸guL_Pצ۹zz$gޤN-x[7\$ƾ +cZ7;=HR9Ze *ʃ%}ύXwcbE:= +L[? NJ(Rā}y tpESs׿ehZ9[sssق }V/䇮-eY+ oiId7]'$[RIG˳_>97`٤ן/CiӪ3b J$SbJ.N%ѧ<X8*Wv^j8m)#:Z~ڦVV 0/6ʕEO8o^6&c-28U|e]t} +endstream +endobj +2618 0 obj +<< /Filter /FlateDecode /Length1 1385 /Length2 2165 /Length3 0 /Length 3037 >> +stream +xڝT 8kZ/ʉJE 5քEe|313d(%YK(٢XN"SiQ,NJsd:թu5|3aDgy@,18E|i a Emp8\|͛q *O Syb+DY~j:8}8q[0QX4 [D"-~ g扰X1 蘿C<E4qz56H,B,x[8Lh8@ݓc`%) A VC<B7cy{C]ks x;!AB}X +BV;ƄxM@4Ol 64ga*BbŅa$Aq~BAO@<@i<b{uC/ǁ=8 Ϸ{Ig!^Toosv2:󷬩)h @evRqb +OtA.QG_G'zx$~a:PB, &ѯ}=|Yj?g`tp4OM7&/'Cc-}A8؊L}σ[RaN +T7eGs |xT/FB^ߎZ< t# Ͼ<4QG),ސ}>^/R4/m 0 ƢT‰@@|!`1'^}yfͣ`}X ?Abi_0]p͗ 3Xטw!C|/ЃwZv"8i ^zC"I.*vm|aD ͠-wg +{B{j9}gsJΖF*vՖ#ʓW4Kٽp̣gGyXP)@GV;%"wwu?Mm7~%_kRPI3Lh*0Y8&["քntlmTV4ifl=|w,}Z!Ӻ:|LC ;K?cZysi$@&:y51!˺V3m"g}j־!T~;MoWcDȪ8XEƌ+'(J8qP,}W[*jb:NNJ5˧q*%l% USw/״I -[_K5]m(SEIuM3F❺~wt)8F3u 9F.*I.a5)هZ-NڞR]bJf8'aZyn|YiH(s+Y۞?wpA{|˗×JvcӊtIy%.YVkB{.iGOXo6' %^Ȇ8h;S1/,%8b>sw>}lAg=v1K_aZ6j5L%Y?8*y}LcaWb־!]a&'R0Ϛf#F +^!3=;;IG1'ط}]՞-FUyS 57&1> +stream +xڝT TYq[?*6Ibvp e_TB T +"B 6 +Ȩ, +2.S̜֙:/K oP#N8F`:$`qKKCz) +1@A (&H"nx$x AA.Hx0S,pFCX&||gRJ" 0\!ad`I +D7 i\ e)y'\)G@0 UA( .Ldt !$yG0BEѭuD$a l^(Gaگ Ť}H +/F| . DKB>un1&*pTH,*CEG"PX[ (߲@mW1DRA0tׯ@rR |p O5joG-h00A a239|6<2I9bKз"L'F[j V_3u_h퇢Ʌ%h:,o VB/B19g{HIi;Gק=G9-!C%BLu4 F(! f"0C䆄bJX<:"QJB= a\brdsXk(o& 0 #w(D, :E'.0KJ%YOid[$Pn6۵+N-P Ekp~|Nյ"CY3wFl}7CЃ{"L7+*f\ݤLw^\I6$Xh*]r9uL.MőjfP^#dsXq|G4Ef|keԊ$HyY#7>z`]/R Et(tlfgG{介pYOUgwCv6\# +h~ JY`ΛM Դ<"}cӓYa޾'yvW[ܭ)~U??RZ0N5sBfIJNF"<~ɎL} / mR=̽xqFgآ`k=H.a?o.MGN,po2{D-^᫘G-hJ.{16=g\&raב5svOLNvW8y;-:}h7{kEJſ‚ +endstream +endobj +2620 0 obj +<< /Filter /FlateDecode /Length1 1388 /Length2 1928 /Length3 0 /Length 2798 >> +stream +xڝV 4Tk&*]8j.{Rn1R3{fs#"%4Z.%r+^T%NrY׬||{ήX3&"B,#lo"0"14Xȁz1[!"F_|.Dt! +s#w@@}#"Ո ?#!>maa_MRIXt< pA( 2qO]2W7 m +3Gx +P(e&4o峡YȀP3gRfB8 @B.ڋ´CPk !\!@$ɂ,wCdg0|lH@dH( L Z κ34,:G,}`B= 䋠А0 ` ! a-;0!֜@a1#@0k':H&};!O9Ҷl^Qss!X @ )T 4nh;@ +!H4 dRH$C:τ j!,.s'/יQ.}MGf@'L` ?ϓgj"G7"gv :f.= +FB1(Ü1r#Hs΁fu4CLgX aB|@\<TJ!NCd3$~(]@@%̕Ĭ #lH6|>=C@M$@/#$Zp'Ë$xS,(39'I5u~W!QNC|Y0z$'\q\3@lOյe #\ׯ97HIg{*6}>}FSZ8hwXVR-iZs*V +JmJ*&.s=pYT]tx{kdz&vMIg9l"t_^iq? ~%S|jS?X>´]KS:V2}H40rSľ)=KzBEΟS0e/sevy1/skI;Wbڀ^lվn4N=I#'1<ʮrog ^-ෙ0^eH>O73jjGO.!ѤBXzq+yi~T6TcpCW. $^bxa&~U r22CV(IYq=E٧Pz S^&cYk-Nx(]_~nqXq.lQYbv +UΨ0O F z Tn?ԦHu|_mm;SD|^%{>y5.]}rWS5ڕ#񼾚)>s>w%Fiַ[g_~pY\5f{η*4*U`UxeE2nñf^ԵY>Z)&Ifˊ^XsiFS mޅ=lM],p¥<5y;Z5.SMK]T}x!Xd>4 .f{e<6!t^/VV{,-݇\IK.1ĀRcJFSUHwhN4sKS?Nqvgԩi֔wO +=:}hh08-dX]V{"+Q]+器Ȧj-sڞfԮ)TE]pܙ`s,KβE|oH*2!ΥG n^V#}:pVW.-*w?|6pޑ%pD斷 OsM9 w.|Zk[hŁQMm>Mw]SBؾSPrCPd>p}u׳O?UV?k/WcϿ}ޟT6L{jWcgg_sO{I4ȬX9Ωj2SuVHG-LvfBCCW6xDLݽ"fO-(&m)e!ɃgU)EiC7› +endstream +endobj +2621 0 obj +<< /Filter /FlateDecode /Length1 1488 /Length2 4216 /Length3 0 /Length 5151 >> +stream +xڝT 8&ؕ,a컔5!:345[YKB(], gs:k~3>OTBV wqdY :p" @dO$j!xDNd*Lހ"WC*C9(T7OA!0D!Du?"Ս H$?!C"d E$aQ9 ĻQi`g8PE޿ه, & U 0&-g?x}<AငLP@~p\8 "IբCོ082 c.AQA~ `q͠)%{1D@c2C(CEA~lqΏp8y0X @rd"F ƢȀ3]1.bc'2 BP( gG$n ΘhJ',LP(Y%U- J!L+Q() `r%vfNؿ!`tQ߳aVI[XCQ콋P܏bm*8ug>$fFT2Ε5 ⿅;ya=g֘}Jh9( NXh$}/m%~lCcX OxwHTW@RjzZezif4گڌӏv:?*sLi |좱1:|K|mf_yb5w"@\Pg;*:C{8G7Z8(LW3veU)RG.MUcxC=£Ma灐4lacH⋧".QE6 +uH,usɑ=:YkccN|~1>vKWY]$uldKFݣ,=IR1媕CK0S3߫ӬCmoa ؞֪ѕ.?4vO2!V2,լZӬ\G:HCWK\nedҴ=5S,z\ֻim:8"|򥀗B< A!pg roRe[<V_/޶:F]=u.KP ձ3]L#է/9}9̢W^OOrVd<򽓚-/Vqs?!TvRr5m#Po-anyU?Q]6EdU!c&e>d3hn +~% x6CA/[<&^=3 C~,imdkW9!t2#bMcϪ]cǤwcQG޺'$ʟo~:_4͟3<(t%<7Z.Nrlb4@{:Feug>Ix iSǓic 'dj^):$({Tc|̻B}q1u0ؘZr.Z#-*[_MifPhK7uu=DžBtM glT\ke^=rU#{R[v/R9QP*,%,.̰up}b*֜tÔ:zcI*/1`{Va]SZdN}\,z!5o;ļ7lcgqKl e8[ vDL]P\-(rT0ƊeS~Sz]V}iU&55/+iN$P" [K2'6>˯g'z{2r ~+{sf~ Rdb{qF JrV_oe3LCX9'lA@ŖC>|kshur[K}-ZUXcހD=gmkW-%Yw~ax|_YIRBs_YtKR fzd8[cub62ީ~IiK,ZKV3;3bʚR\#O|nZ?a_7ݶN=6ug$N909;xr$fO@˪0YW|wrsF*xRW1|mPdTx(bCޜЛaw9NZ3!kaFUj ywÔv>9Mĥ4s:('YaJu$@F1q5p;jS\4е?),ч9ݿz%N9owI8^qpl{\g1Ԛ}ĢݝkoqAy*Jt,@Vj-p ׹|;L\9 +/üx732/cgR"=G7Z$~8q[UƋIv? +bZWEcShlȈJvS`c#:(}J }D}=m~g$r]SR{k@{EbhM4VnDHg;;q&^;o^]1 ۴s"d =lF5BIo &69ZB=-rIu\Ӯ7 V{$9}Ҽ_%ߋn|L (QNO7%yĞDd<[k>p VSIP&eJ魱lɹx dǏg>*R3^Wl3ry-c%?bSEg?k.{oPӭWb{zc4O_X֡or ;aM2jZ䯌 F&bҷO'Q< +XVEHq׏;R=mqtP>3AR&)^4Ig&TՋ,ac0|;GI4佒 bu 뭢iH1\*=f$FY֠ȶUIC{^Έ9q GUc +Κ2}FE ts&mvC%P׮u0B_٩ 9k|JV0z8$9bxwhu - _{hΈxdwN]9Wȁ&|6[u#ǃ\ލf*$;TOpX[ظwRj)Sݠt,n&9ch +c&jޅ ̙ۛ;G. &=Qgp[Q|+ HnNm SHĖյa=1w;.h{B +{o 9PR`Vf^?>#IdC2=Ԑ+T +rMusfdɍ޲ؙM%#]ߚ(fY공~ t !pȂiREƲG|SB4N%U5X/!iϔi)8\1ۂNHYuk,Yօ&]ӌLw혭0K9aۮH~o0_Yr:Ts={mWbˬDc6=+Ag~]N/l--e5KV\.MpdiX K4;V{-w8,&qǧfHMS'y e'dcL9@DOц~i5w i]E9xn8qNٹ!_' +endstream +endobj +2622 0 obj +<< /Filter /FlateDecode /Length1 1471 /Length2 3953 /Length3 0 /Length 4868 >> +stream +xڝV 8Tێ_5$b6KB"*c`,3̌}ɚK5.[Rk)(!$[Q-w9g}s>nCce H"(\&\%$`Iog +XU'kkGЂ@HK/€2L@$Ӡ€ {3v!~6B.Ih&-ckO@` !pq@DrJD($ZqU#!cհM x8;wha~4qu]a]\Am?Idf 1!)@@0t$0 +v;6(G"苵77$+?# `h` bq# h3GXUFb8GϿ(']6rEG/Ϳ**xe8HIJ,cv,'SdH R⒀B HI\I4Da8<@E^_~YNi'a ` {p_I'o~i::e#PLْz + .o('N72O<1b?#mV:,Qb $_/0  DJHJK+oB^H$bRP)ԟEHN0jLc8[I!@@yBd{#o@>Ǐ8<<pv%s90.\qXq D T5Ej3 +@db,yADCFh`rew֊L@cyᙴ%L6Vt-XoVuM}w"7~U5t +1BL/6Xp"QK͚+G5v=cl9NyWD±@7 kavX{MatX uJ;^+ᰗ@"؂yc9XSnuGO rJ7^.H@XDΡ?g밲m18êCkN79,j03 ca1"!L-zlޙe{e?V[[@Fr(!)yԙlCiX<ٴ 7%)VԑΧ +|)l+&c3Xaű&lc]3s(vLb!PY )wC"iQl@xFͩrzմ||l +J׋Nd `n=&)Ebnx\2Bۓ%y6'۵+rPQ-qmCg,RЕ|9G;=Kj}|eFv3^r$TWG!xMHUM'<<+`D(/=ҕNZ̪%yX&>M Qb ch<ЛKlj5*]רKnhb1<Γ4'P=DƑjk^h,^K5rIj[:lŘᭅ[gh(eV3kQ-"q.sGcrWk->*%u& ۡVnOC18 OHИ ~K<3S44@}7ԷGo&y|qwmiSxzVخFzwSZM<##\\VO7?/1_`v[ATCe-LjKiC u5bGO. P8,дӝjdߗQE!⭕ ܏gcwecϩ=!ټ6l>!a |a{ uT׆vf ce÷Z{nؕ<]k!(nquD F'IexJ6}Pq=OdU,xXAE*ڗN6NX e_13g_2h7Q= 4QlyoWgsJ/ƃw]BK"А~ni?lg!iOT=Z[i~XY, +u<1WS]^sD̀\M*1 K'RPk44g܌D +-uUX;bKw|;0Sesp^ M v$먰b2fr<<1TFa.t#bzvHd+7&grqsrwO=]d|5x9B|R&jtE=z~ybmM U~ۻeQFt|EeSZM 2FYґ{*(g!+( +Li7};CafC5;~@T]##r%V'kMtBJU܎ ]$}t3, {v5~0<ԀE š%ÌOZL5cԎ}bgts(&$6&OFMF"7]%Welؾ_ j\qdNhͷ:zZ|_gieNONAd!=DEkfr5iM;ĺԕPsfYqǣE)EE]$fyg:KiJ?,:'﷥6D,ׂh9 +TWܼ#eUsFpLou[;KukA+kR=5Y>Ze-Mjƈ5;5pRKi2\Tԗg>h4ۏ|}]W+shZ!6FC R&:ȳ9]%zD"7ʴ]qTM͝k3Vjr(8ll5Jڎ;$!P cL| ]S[^供+ +|؞["*5;w1OŸ{'@Ysֻ sN=1{ʈFr~ t~*Z5SqtI؈(sFxTQ-o#h^sec\b,^kbMrۿ5qI-Vk=U޸ +"39p^Vl@ x=U{u`S y\W";S_q+dmʴGe_k$Τa4ꘑL#.W%L͂ӳ'LA ԟc,߯SP|i͑^YbI62|-Y5,9)RޡnE1Ωw +mhqĝ6Q:'SC-<),y_{4guq /1"?@$96C>߳h,DY6[&ehV_E2g?637VFHj%LlզPhp?^ՀxyeZ8s}^cPKX +|T ) ZP\˞=kT=F7+3bKD/Xr61qη:y[9 +s"ǜJu:b F3.ڇ"zRhܹXu3L`jcˠ;jd$C!!ٌ6!CNLBi/|J +endstream +endobj +2623 0 obj +<< /Filter /FlateDecode /Length1 1619 /Length2 7863 /Length3 0 /Length 8848 >> +stream +xڝtT .)%=H#3PCK H 0 1t7R4(  +ҝ4H?s<|߽_5kޙg/;Pi SD"P@,tCCa~ή G9Fanp$B^f-P45@ bb~0tEqE\j0'K->nkpYqQQAC l¬HG- PCY?[3?B @0M6ek7WHW[$,C~ـ0m- +k9 re+wYy'o#kwg>="`aAyY + C [ } G7?vf\aVXíPK-wf +A`0AZ#-`>m]c5k[++@?(?oRE~aQ!!(@DPʏdjZJO  YmG{\1Ց( e +[> g +/_A?[h>EwG?% T%#lQp5, +-ws `%D:~t +n%u{4p7EZc10WG8tzy a( q@" ~V? +i GB| ukpvGn@>w  пe + +B~b67S7(7?>fʋ͔Z޶3mo~;s f?; k9n֌P{>s S]בٳ(Po5l X=>n +;2D m,1 +Z\qo8BHRV ЦCҘA9\ŞS_u<8ċ*lo/_Ϩ?24pzavVj'L]!^E}x'wV/|vDJmL_6&p?tn6p;Ays^,Sۇ"k]!Zj*q r;)#XewclMDV|K i## ׆LC)ѻgۙ6bgW*+W,)jT0RLi]`ݧ͆{-oW47Azmi^ <yLh$-8D҅zZC%e1x%-"(͒ן 2ofV4ñPƿYK6Sj@ ¬:N<4<'O Xp|ND2y)z-2%Q㺪jPk-欞f<}*Jծs2S44qD&4{cj<"vIޓ_i#|-eir`xĊSjb,i*x\QNCt9Zllj{;U ,rA{r'T " KթkIKtH +ʒmHh #~i,]cϾwt\Qj$uZ2xVݠ>wD5cOa*HxdAvEbMa—M:#w +Ui0J1Ӆ6lPIUCc;|E@ }VDn#k䃽a9{cl/]%.!lv)4WO2a)u4 搢8ٗ +`ː+s3Zۇ~]( VywEMytotqO"+RIdq́:CED%۱#6c{SDy4au[;tV6,b5GvCTVtu! s:qػnΘt%6ط 1kGyj:T&A5p_טewMM>$|Tvq=ѥ 7~IÚm̽siVv9W씇yVxY7|UfB;AP8.|r y'۲0v*"a5}/ +/f?< h3CqA/v\W+'gF!l>gV=ClIZke^iˌVP<G(q3`R}6֏/{ }bUڜ 蚰PFO 5R|] h>~89ܶIE?}Fڥsv\RX>>VMQe ^|ȧ/x"?wON 1 >ˍ1 >#g/*A?"(N/`[yī%R||OЬ㱯ra'@~m<ۊ[6̈́b/$9xK;0,r\pqH@-JrBe>WlFc53)]b-=\zJFFGSҞ\ot +|&KqdEr-3:^Xۛ,V'I ۑT}S||Hwѡ, +] %-hR\.X)hu}9r:,֋Q*Jz­i}_TAi\ +/)VKǒkdq h\>đ +EȻex|~d Y{":)@eNs o?̸^nm_F-H"̓^ESp~v #Rְ t[珯&۶9@wӶ?\c^D/Z(ДG +-k3˼k`TJRXbnXԧ?ZeF fe&É[=Ý]R+|A#Eފ1BEdΐ9 /!_js2 Sr`BUji ̝i%C^sJV\JYv׉HM:牑jfUffs'n!*eC]qG*Ň}v}OT3$VݳlZ;-]_hx|Wbu%@)$I{O{֓3~6:&Sa%nTf,+Ilؑ&j:ࠍK}i 4!F&mH<0R^FwXO2ۓO@n;} PV|$Oזea2n,(ν|՗`A.Lw%'Ӈmlxhi^6mLߞ0oHO2m}]C@"K~S*~e҂|#=F"C䈘CV8479wp]EUd{8ϘӦ>Rݖbkg:增3Aqg,2\~{^Ki׵1s$̝Ug e!^2P=KR}UwÀc3Fʼaو"LI8M8gwz +/qzS +ܕ#tG/=]9`Ջ?>&#_%ezߓ4&OaI%)I^Oj$ HEhɍ1(7jd[c=8Q|YVE4([u$KE؛ľiC 5t咚#LV*ui׉h7iQ.Exѭy9nj _B2=-Y_,dn|0m.ڥ 6S(1;o{׭c7dt +ޟp'˝?t_;@_)8|JR]+TlKcr ǐsXW!~'h nţCO H-}}y4S-h*e=6r8RAR6„egI$Gqz"[nRM G8^N-z>2eҒBucsqL5 +BJہIGud>ZL<{lh_-}-t,UpTafҬ(pV\nft70C=voVyuJl@bׁBCt#fer j2HjA_|) ++a{aʆ&¯  !zն kGKqdžEn=>}c-1%f;%) +]kxV*б x_}cJ+lw:Ti+w@+$IG$phM[ٞnuey5d\.4SSz/zs!XO=>z->ZOޚ +``͑=G+*GcQl6}0_r4عhrf"e~މ:6 P{YrYdl+aldtT]m,#4^}pgI "zƩI{x2-zˆ&JItR7Di2gG2N˦4ukp6/o(6O"ouUC.\Iic*Q !w7qՒB rqLUʡ#1L9о|$5q(;<{p"OJ!NЋ7[6ܸ3 ׽mՏ WV0n (l|*ML@~<ߓ:B/#.Hеmv:_k6S>A;8qeˈ@3mk 1Σj_{gٶv1w?`,N7~)9 6ל\ ~]y"?}޺i"g% |2ه LiD iҘU92;i7Ȃ]O *X/ieP3sN?cc/+dE!`Qz S[Z) Gaq֕99=X \'It{+` <P"79hC&q1A*ld9oN>{+gt!LP.[N%kڵq'EWLůK(D\ذ1'[AMq{ԗVT;93AtV"YCxIp_x"}V ֖HA*}w3lH4Wc^R;+Oʥ_ɟ_Hr+E<d{he#Ǔe/%=F;{S `ɹUїB#<5 +DjsxQhu1k6fx,; 5>|m䵥`ыaWLp+׾nUoysD3=({LA3nӛ+賊HQ벑-,Ve0ģzSd)꬛Ԁm4, 6Մ$WÞ-]AjRhi&eЄ-n<: YY̎#~vL,6fl<ӱLbրz׾RsW_)̩DVO:޵msz'>/NjǝSGš&QN#pit6nWE.5S[Pz0~?J1 =sgu|.`VXӾHN@d2g:uwΰ +ue梔 +w9\s҉`NH%F[?dtm햘 #1׽_r[K1 S}ݣMGL 7` V:c&!U :w햫uO:Y<=^ʟSY"0?TD=>'dfC՞]t_s3Mܧo1K=Č=8ld7isO,'ranJ91Fۨ:9y W1Za> +stream +xڝT 8n +ٓ%q[f;Fɚc&cY RN(dK%r YէPZwy==ﳶCi)DH.0 F ?~̤@?Q~DgiTy#:grc_*>Ry:aGsVaGN]B" oEI-}%]xA8w^%61ru| xbxl"/م_WW0O/ rC{h[Ff؂Y;ؠMfuׯ$C}9qk}t.EҙO7ǮMzfY}ߘglV[^xӣ;[5^^5.祄W R7>HEJ(7$SU ܋zIrkV C1k>,2JvIޣig'I;?<msT C}A!NR@tkl܊:/q t^VGW:-^ʌX)'g <5,3V+<2=V)ɏuSdfD/rȨ,TNuD}K]~)r~@whX1嬣ŕYa?$ e$UV")-u: &7 "q`tMmZO+불 LDj"e"Xce[_leN8eL`֏]Q٭k 5(!=zpЪ E,hp^sS]o,KWSoR. \Y9#F+mG{@mGVH4+G F +*dmk=rstέ.l7擹:`D\O..8VMJjw}휅ЎFtM,#5Y/~P/^B V-Q#gvsC:7cU3-o +~IE%kD 1r"b=&;:0Q囿uO1R9,/p'Ph6aѝsz O;^4VoC.ݝCȅ޾Zr<[6eF@/?Jx=L8Ծ)&#=V<,xeGꥒ+SR1K|й+2H4lO-w//]m$=qMoߵ \g-o`;+4+Ȩ-r_5P=G/ +gEN+|\Xf8׆&x>YT&(,_ɵ~JHGݙyhgL%lt0"إ[O/ݱBٸB D +zvU;T#$.:σ`K0^U.g5wO֞E M 캓eߘk!eE wdDg$[ϓw4ӝ_yqU_:ytw.gP\' +I^f)-vGѧL?NkEC<<CR tB>UIj^/1N +>ƽK%GR$E Ww_oT>yVdMnDID)DR0ر{Pͫ-$]dYe &Rdm˿Xr0nh~>``-1+=PeX~vh+=!1ev|hb +Pw%Zve'sa'yUBVErB.Ne+k3DOUa7m YENV_4.)V¤NB1UF*3Zl;*c5P% s9xݯ9"2ɪP8ըhK 6;g)g(o|Ő1r_…º$ RyB;C WS[8w f5"v}ćθ-]~fɜ}0E#{jS<+z.=Sҕ ijE_J?bW`)=)3bpW~dZ',G®^Mo8T:e%]Ĝ? Xm/h5i3jﮧ*f7~*~vu/jz(󄪲"?6xy1t5V0TAssyU.Z&aEGs0z[sp= O umR:FxWԶY)oS -՞I%y9.?9g&iȐ #`܏G$X\օήhjlv?Ik^vYzF/% -ÏY寭 E̶ύRlk !W\3=w>x&vڿMbǑ)h-'/8pWSXH>SR\SrOSzL]9fP%-"iB6Ul/ɑK.Hfw ژ,3N6kxR}`;΄d7[!1e3_;5qOF?Κ/$ +endstream +endobj +2625 0 obj +<< /Filter /FlateDecode /Length1 1512 /Length2 5507 /Length3 0 /Length 6457 >> +stream +xڝTX a +"1i6FI0b1Cn$N %U@ss]\۞zI[- +h-Q.B@(`c#6=Fb @{AGXa@! O*"Byh +5MAZ`Ep.]A p(q ,=ю@+s{g7 +qt6b1.ot@@K$ @X#QC_9t> ?EZQa ,xedn@O0B0 z3 +*@E!(bj#jw eD{?gM#F`0? /ZWQ/7A*\6PS킌"Հ2@!`w#~)F<:?Rƚ#(k?A:+ H,0(KBh?^@ п.pv C3E PjLG["Q@ 1w/ zBjyyPhE  +)$ ) @!A(7(o?/ x/PD͔q.yY@ p.`[T+hlj3ee;+i+ٗ"j,DP~gsR6ɋ]z (^nk6(j)U!K;asZZ^"[<`gʳO f#N5Le+@?V]'Kݗ!\9igS `%{ήK<X޷$qV 4b҈~䳟>remE~:%WN=n)i_kg+ޗJ#p[SJOr&PE/0,i&kkvL2fŬcoYؾЮgu&n_ ,ƗMٝ2JQʍuѡAM}m ԦkzVn)>W*bKy`}SFrONc|y`"o +VNәDz|jq=%jZ,H?캘B[ %mH/{n9u6 O,dʫԷg=;;Ι$6wzu9?x[(̧>=HEuv]L +j>Jp``}~EwD =7T+(Oۘ)0_/sUߍw8 [rjAMӢ^e8 cm +I=:?2)ach cm>o;1ybH2R5bB|E~9OT^5Ɍ{]c-q e2;nfI[{hk{@!h$N8ICiW+U+Z8ΨwSK#?l&װZM}eնɽ&kH}"'KxX]fc*a" K{EkNӼ_)p,_{Oueɕ^Ҹ.+ ܧY2XviRzd 5yel| > +h0V>QvN3}(y_}ajFl-xro]*٭*QfڥJ91vΪ)}8m|;!^ {(1@B4@-&2~WZTeD^KUs)c뚁Xiy(;YTV1̛eoRla3 c$v"?n40o8<8ni=%V &>u/B575<+/ò%c +G_݉ʧ= [nmd9llljMH!M^&zt|>;S!<bKn  :W/^nSI]$=m)ѼdPz(0^/cE:(lDp"o +tGzX٦Me3s Z@[,3-tNXFN¾8;[Q؊s=ei}S-PspA{e]E2𝙧 C^]^M9Y'|HyáˊܜM>\&nRo*u@f ]&Qyׂ2 r> J#B>Ш}SG[zA㪼ö}3ERy]Oy;~{\19H_zd$r$FMMwC#ŝ;f=mz,KTBnBY8ƩMr> b1ֽ'o%HяFؒoͅ>\/ϫX?pK9,/a}9+/ ?"4DVEfqKs0> *q>mUgF/cj]PQ $üۑOow|cA=ah$la7BKfQ\RWo +BRY*3E.}egWg߾d;^nh(T!3sIuք:Ӎ[)BC4⸝_ȶOn(G~E%d޴N[ϓi` ؚwnxdP׀{Ǹ#JH*ľ񪱠aY1W.$  {%4,m}mZ10TqL a[9z +\zՖs5s=of<*~d\ЫCԌ4;;6|j[`Dw=OQ+˵` +XN>HPLj:l}'Opҋy访=ە(I@+Վ?)G+XЈMɟYrEhZUN'XThHzqZ%3c['d *agB2leI^y*b닫zy7K._g53tm+uWFk_kwËɹ{e䄫,TTHJǾJ\a?-b;YyU5Od0ZʍZFax!1J{bta_{py 9`C9nڤUR;b9gY+2 ΝTç22 sJ +$\ʤUI]{>=kCMus@CD>$*D| guRK+?D$MA(pn yRu/VzrIKxEgckvEsGk;-nWL`g~::Đ[scQ bnKV~5@ !@T@ʭ?0Y.=u@hҦy2jְau~MR-X3g1Tb'١aF7|Tɟ}Ĩ]=Pؗgؽ 0TPMOTv304S|2YϋZ;%q Tqwݲ2Ȫ^6ޤo ()y_2ɵ ye:Tg'DJ߰e"+*1l4cy~%xEyDGtOsJXmȃhς_>_%5dзXfJ҃Wb=ht&?|+hoǼ;/6ٻ%2E <#]Daثńf|V1VY++!#rl)lŷ9 čQ (+Q;/MhLkjlہ=#?{[ƻ/WBDZ3_Fٞ?xuiIP}im\gw DTj3Bd;bm"YcF+w^ǐE42e\ ?vڂOWƫ +H3f\ foRW-% 2wPmi : +=VˋC^qoۿb/U8[$4èj0S|ո +`,CI^f'4/W0􈔾۩n}^L/vnt%XNeezI7-u_jJPʋ0w5~㢔5;i +endstream +endobj +2626 0 obj +<< /Filter /FlateDecode /Length1 1511 /Length2 4810 /Length3 0 /Length 5753 >> +stream +xڝT4k&D "B035At#z2=z-JDN"({!sskݻf7nT䖶@QH 7$X΂ &uK FoR_ nb.hp @@0DX +@@ / wfp'+[(w'5F060?C. `0HsPXg$t6 +p}p E p~E;cxy'  /?\=^^jEX cBV*>yfa]Cr-Ong[f)bW1q9aSG8T|kLۧ"5!;̛ {>#&h!_+6oȱHDxԮ$Pkqnϝ/ٹ4nޤq#7kl7bYheq3^sw:%HbRƢVW*HR}7XzƗ xزQS5$ +w$ؼj^TŹ@nmk(/ArzҞMOmi|^{z\&$:z%>1@^<=6|1,IaZ["eKtň5=y&|j_gMQE(:[*O.9y2Doy= cj6;Pؓ|v~/EvL?@kPVsGcܡ"ٻ)&פUx)yOLv}m2/Pq/%f2f\,7Q;Ȱ}-_3!)&< yO72R7<^/n"F +duNN9d^2N[#X{cB"F֗Ss1Ky2?ГjO"J +s ++b}^!9aOqI,",5YDCd0e酈1b"L2uyUxMbX|;<*IY8D2mT7Ū9ŋotOF#9Jҽp0բ5ا%aq>Iw+%V/ee/+eqE}MzMe Cةtg94.$Qw`Xtj4KD,\YXmH_yM^ {=G{F~!whuЍmWM\q./-N3O)2It^6nSW9<ԍNr5ps7bLE?8%W`"^%8Oȏa-sO8Xۗrn<\ieW 2J9domauNd6;~Hu‚6X-7€NOI/\^9DYg[TB2ƃ{r;eI'hsygA&ǯZ. cE1O#cM +`Y)p4Gu&Nש_ {nwVScgaMlj*+Ur~w>#ÇwIpkh?(,GF25%EtDRMAfqe}CX=B&NPe^;q7J&]<}5w|_m@% }񧂧/p-5wOp.q6'U]Y6K!RTRSIŅ:oʞ֭4*sE>s=塢OWhLITb +6q*Nj)N,UJ,k6v2r@UVTwt\=&[ǝ"X!J ̚U}L%)yN4/;Dך9LzU>` :Aփ'ż2ϡiɓ)lqӃuQ߳$_S$ׁdLFG/zFCG45/{?vo~vHҍ\] qsCс#ӧ.|a.]gd[THzYJ2F4jU#Y%|1ѰrH S 4\`1c ++&7ޠc "c t &uxXS\JkգXXٖ}&=-i.|qy"Q_prhlYr IӦ\{*VDGheK~ZUtKW?Ur> !5ݪ3rU:]f9D9׀lx^;"\h7$ E(#<;ڱ1鼪 PEh8W +o]Q][w)ڛiL% ֟VҶ~0] +=Z0-? L ABȻJ_şM)܏Q aK|Cs'˙gδ]C^Ns0)LTK~3i4_nLW~@W;7DP#W`rm +P>/tgvl=pc\:1Z #]^a  -3"WJ)iV}6^MG1Yk bim8eE E娞Sj\RZ +endstream +endobj +2627 0 obj +<< /Filter /FlateDecode /Length1 1573 /Length2 5911 /Length3 0 /Length 6878 >> +stream +xڝtT .-"H0 ݡ 1HK +ݝt#|ܻ]~v㖱EXCp7( +v Zx@ } JbAp?z9$ +u [iF[&  @?<' gkҞE⍄CQ6v_"$""} ]0> +G8!콯i<\u-;3=wk7 (AN` Y"iE`r͎A_עC8;C(70$8o?s#<v0dl]x 0WwHߘ=BB+eBK [m}].;+'7?rCfVS"la6(5';` -kX0/??-7]W41S_ZYY Ӎuf 5O   !k;!Lm+Cn@ 網S@l@0^>I/,K~m-4ӯ1կp{L$ wV0';\#ȯ%&6=/ϖ;9黍nRhVBRI٫\ ĝS_q?U{aK Xʜ1c/ē ge >A| j(j8eo=<[[ /xA{9"CI%o'u25Z]Ė_ ܜyH+)88g.s%wbyU +lĂZ}S V*1[ ߋSj&ᨢ$cEHPj:ϟ(:߆ +J-_3'3=v(ѭsR]9%5`z\:GӣFN^: tSoȬ~sUQR/N 1dxJ/HHQP{i7TtE5,hh^JLmKx@Q4OJw)a[[Ax fv 0kKV?' |m`i>w@,:;Yv-& ȅ')_S߫t[Y׍F{-힐K*1Ŷ&A,07O<|>yӑu>TS=~镊[ď^̻gwy.#Lܪ[6|2N39X?G a: bCjOXȻ*y6=irVs౷Gp3eO EB+8"di ?֭yђqVRy+bIIF43M?DMNS8 vKڕZB]OH,dm/hx$09jD MWZܷ/ 5xK.[>xs22~:2aBkp}ht)ޣJ2L+'m(dn{[i={5z^.~##ٮT}0={/|L_q]"XC+Rݝ $kQ %xJ c1Si|͂b[ߎYl%Cnldj"7nXuxΘQVΉ>+s*ckn< +8 +ޠ6V@*gn:k!B(GDym +Xץ#Jş +a]hs,aʢc?r f"ue63.*?43J]fJ,(ivYD>lqleeB=-VÐ3u"-ړb+QDz|w᪉g"j_f?.m+vQP=Zkݢ{W|@m)Z t=l-hs^apyM +ډu>x>C-,D)W<'<)wPm]9 `FrX.VY-qwupxc\Bse*X'WR2=;qR:ߵ&򤓜 QrlœWeZyG?)'2H`b 'n pޥ|d:=4bYl5Z}V]^TF@txfk `-aZȏ|i1ϰrw4I.Tg +uv]|(Э&1Q1.m>V`ptBK*Tt(mNO8(n4:wLtk{Ac0{`+lo]q-@`>kV'F ڳ-RMeW,Yd<噼1O*syoHՀSkMA^LЃ4t2H.dXEkWd! xrNǢaݭ*ڌ*k`x4hjLh95<'?n 7Mv`AHvEk NfFQ+kS)MѰ<67O%YJB!i%0 `%+ɺyM+r?/IuF2GR񮬶~pUrdz/{@k62HǟWyE|eԋ{!ReB!PΠ֖U?ͮ%_52,_b6a6WȾqvT(4P֏6= e,-(?eb1sZ<]φ{{|>(ݖ\Ʃ*`z]oz-΅Aln-op=ڰ ߍsjfU嵫:[+yK<1kr#c#v zw2צke"gM5Z!J#MR (ѯ>nBkCCGBg,S.7suLy,2saq`x]3Ib_;L rPdLlQTvgfw%(Ԩߜ1R3k2T +X +‘!Ɍr,&1\wa2i0zQtIcTdW"2:X@!΃(;NFNw'i T\H[oAU;_8} fxٻY>j8Xߕ dOջ ,^%9jȋm։GxG1fܵN / t5brh,sXsk:&ZkO>M=o{ {t[&)pG󹵨f qVzxSc9b]O0h㹪ц!̯C"y*9\f  >b3tV8=a-jd_NMScs,E9*M|ً\ORpأ*xB)溧 d.̣mֽa^ ]K`cR߇{@=2^^4~_A4ZiQGOY/Wy'ݏ <&ŷh/t4Uշ[08lgB +y3U>>sysx/@؎-ƤY0΂ݪbNEMbmZ -$@С,a3ϗ'3^ҦJ+v:'ڡ+wT'LKG=vlm(5bN>>U,ۡHJMD6a_^4^=3Ej+xIxkzVx>PΦ-:qtW$ +v6‚2`Ƿ!6 j0$;).K5t S}5Ŋe4J3/O&A@攉oG'Wr/6*۷?Asq.'A02a*IĻj| >kc7UsJeÁ|0`b)Gd:l|Ʌy&TIC, z|euѿ-s5?l*ϡ[ȲȈ/ '\ؒH:Nf*"4;mܓqķCEfQijUjh}ﶸY(uۓy99O\bz}!b?fAĐq>}A;6^%%Wf%ҔL䦿'*L%5uƮA3{wJS +Jl/l=1Hk|zh ڎK妳3C"dP^d/` 3Ƶ.ox$z~cj*P+] R50qE#O)5`GBGx-fuJ}E nS6!ɶ㫊XԎ@\. 疘8Fr4x$#Zy-haG۰qkU + {Q +i^tb*SjUT=a g$ՋheLs-gX±QhЛGZib4sJ 2dW6I@͚.̨LkUz%k|7I:̸*, =7+e$rNFWau":;K\.zв'QX)Q$󖘌`q6s.]7iyӮ󊽇 K&n-r7]D8j.:B̠SꞦ[S}$h}>9$CA?⽊N0juB69}Ga6'%r'I , ^ +l'6f9:=><Jb ׊m86`lM +VQlڕwKz<#B!*͊7zu =;(5ZJ9]Vs߰g @oUlwsIf4tg;СٲH2iuo4:cIIGz;ɽp"ΩoD X檚moǕqr _Up\m%khCNY|<=ȗT<{Ck,w$Kxh]y)΁1[,ݥHMq')rI !A4Ҡrr+ñ84} kӍ, nڋ3,.*)3֪Bӯ }c)xNvJɳpd{3y״~m=zkz4 '_ȇ0wY Ču4ގpa$yje + |s w\6?7D=&%t8kB5Cψw.P-5\_c6-x]nv1%R.U)We4@XF<PGr\XP.>R$C6UC}oU `0ց2AQYwiWy3qRy-N:bZL[3>ʧh@Iܡڐŗ&+)Rʢg#e$9ď1V2|7J{pǩ3eR %|K܎b3HDȆ|S4uw*5dG=Do@ո vj-fWw.=;5qF՘C92jwhR o*Z~ ~7읝&~0geI|۵x[VvX+!U_D䑡_}Kh(V2cG !B^Dx;t?UŮ(^yܢBi7@Մj +endstream +endobj +2628 0 obj +<< /Filter /FlateDecode /Length1 1511 /Length2 5042 /Length3 0 /Length 5987 >> +stream +xڝTX$'RH6jt8:ـ#G"*!J#]"%e1 s:ڵw{~ܿn"8!51hD,:}e83E=P9 qHG< ',Iyyw +H/'$ħPnxy@Yc99)1CNPaP΀) ĸh⢀>! Ʌ4}A b`YR $5Aj8߇\?HXtS|wx !,h: ^@Τ%~&1]PhďfX 34sbH< BI= dX';F, A I? |!tA(4ov@ 8Tp ,CϟE"0htCG/$ fen%{?^55L@b(`&+3iK024LZI@d"k wDjCt|jYG9#A4ؙg@(SM? j Id+h\ ?͵@SP oyL~AꧥwD9]=壉 +@"(a$F1>/@LNF\FVN_~Sҁx>>L3rehĿ@;c(+q8@o4@ˈ q q4O +tA#$|(Yi('& %c0X(dRҿ@)!$ej?Ǵξ88~HtmiHd49qVv*^|dhE%ѥKI%C!gM Cth{feݵz<}m\/-{1-LNtibߠj=L %o/jm-ELY_ zwKaLPx.tVDE=B&ݖРU1-.^ܠJ'=.*;CEbe+Q߭e۷gC|۷Aw.ѱB!5 -;ch|qy p~'c<38D8T \q/ 2~&CZSQAM־1)mb†Ill̼#%Ձjb(a9אU0~Ej erbe;.E =LI_y{5iՇy@jBA:JwGqJyuI3i\G[|$e߽E4W~@)t׿%akcj |:J7a'64+%i(G (Y}@͵RlExgdIͧ2Lb=gh_K]g:-Jtd}p|]ԲƩ}1kM% 9at#ϯl,C#?X۝:1pJA: +AX Tk/k0 +IJ_XK;q(/@aϒsݧʌb'}Y}_AK0cUq ҅ O@RP9!(Rytщ6k؟sOX+1ٰ)Q?7:)*LN0lX27f5«)Rvy'sdYA:bNȳ^Cl +|Jh'U_o)rSt%9v\MQgZ*r e]8kTo2ZYpf+4].zH;Abv_>9I,+z+t D.۩Vz&uBJRF(Tgڭֻg V+B{s*[x ڭ "RA +~,߯rbqU 5i릺,!/] 7el}sMx왴.FN,yBnNxs{{EioK+׶ٗ۰[vQj.{csG2 bd%|ozWc*.LaMɽ@n4B}C藛!2Ī5oy1fՙ Q>Lt~S8e)1Ѥ/4yŠxMr{ 18i6Gદt^J1FY yBoG=5]0܉eLm\!OyՄytdLeꥧ;pnPWbL +xG.?n( -td?ns4]^Dƅs|/Wx^YY{NĘEkxV>Y,ridg5%hdnUD6*ǛJiDSS~7r1j·Zï`.D4ru,BdYpْ%ՏO9G;=ݜ:brC606AX7"&o!hK>E\( ىBV%Z(G;ںu^j2ED +K( ڮ=dR)$(xdݪqEzx5B߂c$<*kR+3- Ero"~[*-! 3 %<}do;gF5;/~_QpmI=+ynJS6 0WS˪oIQl0&^QTW*0<뻳gܰ/&e7Ƶ$}=c8#wyuV|`B93'(=<8Uj@])G9f&kyg9[Cܜ]b6OBM~,g!w7żc +ўr3FD_6~<4{!,FYfb\%.󰩵^"hC{{3@R:izbP gݿ|xmb#qNu;0=ňE:!3#~eEvrGaFvjOLO{K_;l"Ot6L&q*4_'t*/mOE+$B9_0yzwU&ۃ +*O9<)%_byãYJ2GI+1&v>I;Z*>2Zv0^~5h?ߧt]Ua23jEU/>sy%+3(LÍ0]>[BXѼmw8>VF=^o{KJ*#E +6-WWfx^.zQa@NZu*x}5ގJLNANULU#,1W0uh;U uҕO&iڙ=bs+psUPR |6(+ݶ]j+$PogЕٽJp"R7B`6lɆ筭 ApR([)ʉ'׶*r[3 'RfϜLP~vz" -[ H"gο.8)nAhs? >#VC{&k'i_3FB qnwpan&uER+"6*PVn dW hY5&i]!\%Sc+pjm{/_i?&O߸FRTWN -y kd +ɭ.|UN7ݙOCtGjzJ鳥8rŭܱڮ1RImm›]B=|'.}e;ʞZ$[9Q3$GD帾/ ^g/'wT\K^H4xIm/NUKs 5_`|Z7#qW}q Yh1Ƕ`fi?}-?ʺe4 @hg +#i9ɷg{w*޹}פ௧y/DS*M0ȨdB*dІjk^jHújzC6E|VVwm-MVMS?+R\F]l fthC]2ty\~8.xN6']o,#A?17!Hcfw>oಌ`\{Y[qOϱhaCaNbqG'9Ճ%B63#l>1ɌZ)ٞfl;}뛒ll!LVrSFyl9+ ְ5X[9;J'*k.ym讀:zv|zy˔g,xzo}5zfah/<-OkBir7v-  {}A+t:0|CM*f՝yo[rfPPT# +ău+`b683+PY#Kmal݊'8Sdm2phx0.dLf<*H4 }:"\Ex(j-=a}k|v)#Qc3 +Z3_Hfd?-*9ǣ( @Ch-fRHt8bV;4YE<.x #&Ɣin0g#5l {mU彻h4ĮB$n:;?(#ywHuUX>7UQi53G6ܕ*ݹ!bU+:mڪt&.w&ZKo  x}g9E0PPz,͉pinM2uK"%w5-.p)K29&U8w}`8x0thaIlA?^,MaSN@'Ihi@F %($A`U+hpX㖳!G!φ?NpԙeT³KW4|nQ}(6^LvwzT6fu18II-jJRjWޙ㰓pjk_&ȸ_~c]x %@ / -־N6.zgAb nl[m\2y%ڰhCM3 czyBaݓp_n6[WF;Jbꩻp fsxUAȪi97`[wquUTPoVM^ -9RiB"uzEP=뮏;< 0Np*(=iJ6 +=7Gs*֕ME x& +endstream +endobj +2629 0 obj +<< /Filter /FlateDecode /Length1 1449 /Length2 4095 /Length3 0 /Length 5012 >> +stream +xڝT 87*)zd7Kc "[/,M1bgIv,)[wR$"eo}\ιwݿ~sW)FNGI49J6/R^tK?ܵh hљS_5!Xӕ1SΟ9v䴶[}ƭ ^'7. ,4>xsZFCdMu[KϜ2+`u~A}B['džswpp\~F!6bLe'̾s7^l63_S lMtLj*a K ~J喴}iHz0nvvKtL. +E.pW>)!L y-*GkUlBX]fglRuG.V`ٻA="6OmI5۶/}`/a Q+>Qp2748e`GFZd*G/5*E 585#|(e, \U̚r!Fz[l'-ԇW9) MCjRxNلY&ޭ7ߧGy5Ǎ +gQ3|T<3>`r!Դ/(fkN{3ja5. ڸ~iZYVTn#};X#++pu&`ujaFϓ IHK%՝$ȼce As O<"{d\1ky;W0q=|3NQ۪w]HHc#z>Br6O҉̈́yuG({M1( 7ۋ1qT5לQS?QkaER!#\fN݊YUsֹv~*-Z*N$=̰܎e;4XaaG%ª[mDPUS˥B)3ś2-A,,1ӵV~Hx"pJNmǦ094idVbg*&!Otu*Tf Ǒk.dvB>|(rXv{:(-iy5u#693BwLp*[OI1,c#|ĤgOڦCP'NpW7v-&/ɜ?/<2v9؝u̸9K):ۺ|Ϩ^ '#,"]f $*a>P>W:;.)E &bոMu|nIO9.bN%1igBkx5rTeN~`wѕ{\WJ0d%قYՀfHb^N&{HJZrfwV/(&=򹜥*EV0>B[hߛ sP؞̹,yahYE2Iܗ7U;_NlPoV; $q + ru!H0tƏ0eum^(W6KN(Y- WgC9`ޮd¥)x[ĝ[lǎ7jLhbu=~c}>{Җ|iTBʋi)~f[Lae#ݠնVaIʗi1$>Q̕su6.g`Ah]Ҕ2ꎛ<6hE_1vgk̓i9S+\3PȒP~aXajrYK;x(ѓdx惪uÙZ/DW& i#'IED-M;I)U̅O[}?8yc}M.2gǰqdIЦd. 즜N+uXCXIƓ Lv<1jvƗgPW?dyTGK-vEz艍~@䧝W.7zW{WП_2m|&Y|jf'K Q9 +N4ĴMބ摜n/i=B?giP%].c[8c>}dY; +>T6T&sGv"ki{͛Y4 s>/n'#CrH1Vg_,'mKo'[m#6$->otԱw\.1sP-1x\'X,6J@6>&C$͉ 2]i*u;>i6E+X# {@b⾆z⻝f)"SONf%CB-z4x0ŢvLdӋ;Nz'$U^ż>ݿ7GG:yD{Q\ٲWXy3i|ݲC*ͼ*ٜҞ}FUAyWvVGԀ/ +2[eeBeض |g-6f&lmg^:̣9pbOM 뛻ԺVPpN]@nsACpiU|i7*U=8URYSMf&3.c.dtaO$-۲å fvwG$8ޭlÎ?;§if=,qDIC' ^~Oy%ZQWE \sw\Ƃ +j +$ I8xBaH"Hypb™ysԄbgo:>?Z6l (?lbWP݃sRdSyخzrSUq>'-OQ4\I5[& +Q]/>>T1G#kA ŠH_G2wOVKQ + +[K#$dˡU"_gP.̿e ^*Z4bAb+-Oo=Zn?ZE0ͦ(Ҧ_Frq,iUE+HbUN8u: i{È~7bas?SP_Fv1JFFѠnB m ҰAn< S9LTI^Rfh-r S"ԦXxcAs8S0%c38Gl,: >^K__u\e439ӟjp}*t2^3/ +ZO +.E,jĬ|Z-5Vn9-WPm%<!;5mCQBCGRgTHH q?G;j ?ë0 3 [Vt׾xˈ7/f>h|@TV~[=>w?*ۺ|aqexg)@ +C=uM&kدs>r(=Ud$_9ZZ<~J"ی09x෤ɧWTV$i O.*1sD y*U`aѝ=!:W7*L3q}r4#h gB]~I;/yۯbQ0p.KhmIG^5b|^`Q9ca3͙erQ̮.ac^\?&k56Sm-5[GF6&̗eGX6; ~ +Q;'OoB߹d^(C8x[pbhqr +endstream +endobj +2630 0 obj +<< /Filter /FlateDecode /Length1 1367 /Length2 1229 /Length3 0 /Length 2072 >> +stream +xڝT Tg.T`"+& KX ҢI 3a2Q"T`Ep*hCR[Q X힞{?6Db_#8F2`&jLÓ6i66(Dƽ4@P82$ I9$$ Bd@o\;y.' 'tCD#f㉫b TA[792o T +i+qE,c.>%k)ia} f@\j XPMP-@x,Б 0$rat)S-gbɲ,dxTjnJ R\,kl"1|3?nQLoFQ04Zރ(Of;8H4+BA[U +%J5EWK6!$4HB[4 dh@G@c7` e8J + X.^xx`lg.$|&8" Q6`gG'0~)>`r(1jGȍ VV;qM!NR؆@HJ=Y|!O"YR?[ D} +J[*c;Sl#G% %JTѠjo4PR;!Fu?91<'qjC"1DLg{JR4Zd42S6$Qfs8 aDbG NRKJC&t9P7>.U^/5-G)Hipks)寋g6QxnKzU{peE4xtkϻy&'gB`FnœkvG쉪ﰪ nfZ_*M/hXY"T͓ڷ^q.r`pJUUUq‘vAgurw룅KW7?tkѝ7 [y/Lnh`4j k^|QlX"a`jȂn:ԙKNЈU5( 5I[QFO0tS>@[<͉myti.,:b6yuե`+ZKǭ*驞RURڗ]MDܕ'ZxZsm#/k + Vw~oCh hOebpw`ߠf%U7}p zd.9/{¯;w^y{g&=6&_()2g~YnN>9{g7Dˊ'ڝ|,H< u1qi~4Aft|[<3 &+sk1oԇ>qڬz ro_DGp'SCl\aMk|it^9h^8s#\܊ME;pTJoս/?=~`A\[a& ^$h3vcLP3sE_UK/ۤ=ú2YvwW^*dyKj,f7Ϳ8Z%}h)(?eR_~AmRRTWwlpM;ӥOq?gGcGLYui44#n̿~yM~|K6CGbz4S< ]:{'ٟv>u}XTx]/sٕk[;՞~`??#gVNOuve?d"V7m@Ӈu4/JwUX|5㔧"1MS\'_䑚!`>0bj)KDQs:sp箹Ha|(aly,=1Z-xtNh H3Ojrbhzo6Z.8~$jr63S3" mYb{t oӿ>>ڷԭp˼#w ͕w# +endstream +endobj +2631 0 obj +<< /Filter /FlateDecode /Length1 1469 /Length2 4867 /Length3 0 /Length 5795 >> +stream +xڝT4kF"J]B33(AtD'3&z^"Z"D/{.DoEKծ$'99ֽk|3ϻy?vM>+\A‍3+  `01;.c߃(Ü09Mn\(C?(h$ ,hbv9;ac8-?!;2hG[% EQ64~^@cQLka}. +p>`>| ?oe+!^$ aqQGٚ pkQ@ZɡH34\óC\Bkg3VXG=$ #"c!DP +-t?0 irapo50h,? +a,6$Wàn1?LiBڻMW9;5y~kE  `B1;o S 1@ B"`("j[AZ09 ( pA{& 0ڿ6ez|gE)phd  +(  W9 g}rʢPv9``K np+M/zH+8k? BDr(b_VjLiB mCaĠs{CO0p~n?o DaΗX7p~ω, +`H ¿1?FE eD. )!FscknpK1D򀆯2 |+eo\;[֑]I߆zo9}v=uޡ{ )yzЬN^WBq1?T`Oq=%~2~g7hbj63~yT Kzԕ<2]uDɸd/-t5x e(Aa{)%DF|w%G|\-ţq{0O7j@S|Et viUAOi{p((o}rU6o"E19[2emJ!%n}tߜCԉ.b5S],c"f#˾x?QTߔiIA͆9٤/oTOZ6R\zc[毣hHu뮻—mM(ikV؉"4b]Eu< "n2-<)ed `3 +FGvUl aoq>VkݐH}-݀)nFVىM&+36.UɰZ&K{}(sZhT .ay(2.;<ҧ(FV/v 7r&eIrs6onʼnƖ EhmPN {Iȃe-j@mঢu}uoWGrMLҶn|Ң1eIvaPeƋ9Gl4y*C|j$GbCꍹ#=G'ºW6p =w˅,+I]-zQXj3K;.4Zf{W3{l ɪ\Z l.S]C1HKpa[R5ˡ2Q|SYF;GF寯 G+9T߈̨zuXVXH|I$`{WV|fpIꤋcT󴚔!+y!z2H$`g*-ȡ+bki|Yjo)Hז H=W<` E]q6ԥ 0*8Yut_Pyɨ[àfHvٯOM‘a!IUL SYg?'׮u[$;Gnk~B>=kBg~,J2;c#Ɯ G#r9#UEm f4q2H|3xKLgwYEΑG k%}of#XDI, E^Gͷ©4NՌ{0*eqq0[lTrq\w'y&ȹ7躇dNV}^O4`r8ןkc (6ϩ5I="c:%T\WYbgk 7>.Q%iݾGDjVURhU8̢G?4Aszs.u`KǙ7E$9S+C4pjt!ec[+xj#]ߠ%IDl- Tso1g,ڰ$6~4E]G]mL҅!9`0w`BóϹXQLG,t?Xx6PW>f]@Ƅ@:ZC8'ǩpdNĔ_TMZZQY%om +\NE{ym|}lk+][a<Yɒ8Ȕ (MP-J#mc!B+]ٶt:|[<}}]c/Dl78ld pB"D7^5εf?6~"\>{DU6'S4\&7Bql`cE nPlr Pe^!8+/Z1I^xx̓3Of<^K3I\%$2V?xϝv}vicfGY;E'`3aru^aJNP-zzR_fw.;dvz(Zh|~-+Ia-#(@ u ´H mܘBAEni+a2bJO)k$?}%st3٘9R~*Lڑpi&~F +HFy|u}y8^Ȗ|Y8M!014cyTf~|­NW@W61B47)'2+ğ)GMɴïcCz% +ːLr%N 8*'Rx7]mBe/^5mjPv—K"= +?Z6|ҙBVrc*ɦսf1=N=+f\g=_.$YfLy/Y'!q2~z`˛F'js^Bʬج2S `BUim/-|ڹN{1I4$@6#gov IyxORH+ld[ƻfZtK5lPkMy30YzarvΟ< 9QBwB UM&͔C?9 E r, 77 :ymfEI]̼.~0kR/N^/.Ո!{Cו5xs\6{xJʵ]q4xZi6{}U֭.tMS,Pp"yMOY;+ɦ&睓nGƮKS&S3r_BLC$/s]9 +{z6=!>ܫ60 S&<I%P$FY`Xh5z³X|Eqhl`g%%m^DAH_FzUՖj* "=ծK<,РsBg krv"R|k>>=ٲ M},0|NԦ*gJiG:kmXOV'թ[ +%( +9&Sq~(I0v,w߯?zyr%xJDm=%hЈ!E:7[0dZPP'jMQ"$ȤY@;Sœ)?N ~#ǗJ.I_zIZZ̴`4P`R+ _βoGfn=LC{\Zmzj 0a޺}PAV;Z8 ݛ44<ӏ,xӱn6-^W-w* /@6IW)q2Ucw|xa]" 帢h7Rqezz2jwCCIc*uNjpnTd&\(|u /\ހ}Kf- C2,߿KNab^fquz*ܐ]6 6i>b~$]iģNdԥ᭐$yVժ#4 c&8e+Dfp2l&x{s/*j<&E!ɔ{~W)j vwX$f/܂"ͰDa A)7ݒfcâW0kW{y=2N?8jMNid7\Z`i.="P#6L{G̣Wth>sUߏ>K.nYJFYϔNx6< ^o4̚i||ta9{LpڄAUC0"_:MixK@8U`WlG?AJZ8٬ 瞧F܌ ezY[QYiᓚw]exŊݘQ oDw5h֞|՚ɤ;zsIw<5L#HTZ8JϒhxL*\. *m~I Vf_j3z8G5S{u?>-ocٹ|m;PࣣN +H24Sz骐fM؛}l>/dž#ޢ+R%Z*CGEO 52U]s)Kڵ\}1$ɋ}E_ ffTd+6Ҏx*ƀvBC!1W~l+} _QG̍AԪ+AnTA +endstream +endobj +2632 0 obj +<< /Filter /FlateDecode /Length1 1449 /Length2 3945 /Length3 0 /Length 4859 >> +stream +xڝT 8R,"afae+awd05K%d+D6!d_Kd҂dMڤd;wukyg{=yeX*(ИB+A!C#31L +哕#IO҈DY!΢98 PUMR + < +uB%T€T;J$x5y'H$\@D,`b=),8,b % +>P%:k ``0xc +$A5@ރNTQ,L)dbDP@2Ʒ֐H,q*ϓL# D2g38= " 1H0(T +>P.nh2.8ț $Lă TF|P#b$|W8+>SI2 ?NI-^ omyA?YA%( +@!Yɞ%$¢`H!jjUP_Lk4!aFS(0։{nU%NĂ D e=g@m*49kfhcs 6L&Љ +P[1ڋH +:?GQ(9Eft4'HFCA5i_=RID2hM7_PG+o:O2Hp e _EӰ !ɸ5fDRpD2!4 SS2?LYKo=`]tM* 2QGn&~b05 ʲ/ԇ )oGXӼ,1c*}yÓߣ'MAS^fF4-E+CPcչ_a:)8=̰^z1 [V3W8dZ`vxɕ2=ރϳ-E)#[_HԄ9aĬ<"}OdOg3m%B h+E]2LsW~i`st MuJUMh8V1-GNvq'#;ůh77 v){Can-n`\cM$>Q4:sԛT':8>oj6pSCm#o9v{:8T[k~izE2Tֈvh! B>czh=o 4jC:nUPaAGrӕżژ\Ko2>Pw ٔqϼ͑j%ɚRH |>J26ϲ~+;;dX !sɹg1y+ĵ͋-y\ 3ZI➶FM@%f>7&Ye 2wn ULNN*ZT8K|Gm%G'$,uN/Hl;gfQXH>2#}{4\anji5[hhEZyýdXLlOZ_%d?zP$Gc:+v[L͉T{ezH(wl|V;Hc-XdMzz/V-wu f *qd59$&,V@JY0-C3!Fl:ݕ<[kn(R7ffl^qR@Pߥ r'8D<)L5i=F^v&;r᮵7)&L@:vzO@M[ob{#4~#lmH6-KPv1ظX r?}EW[՘v[d j-r5e]؂K^+i=\⍈kj!?⥰Bӑsm(|S Qː\UHk^0|.{HTw{c󾴇'{Bܤ^r#KAE+9٬7Y;LRb(Udq <[m^8q{}s{w(~֞Y WK.>X>HMPPko+?e/x"#0JDsKsũS9\w[{rr){33~8zFVQMO =_:!$}Wjys&] 0XE K\]>^T'מsϷ!?6i.i>p452&8AgPuiD34߲ʇM|)=8vo7Gih.ՇڣECwd׮b4Z஗\Yi88‹!zC&^]/rF;1oQ1r6RoYs˷ir[2b(8Jaq:~wפ!NAʺ i† o[uاfm/`w,ZhinKHRNBW(;]ﰞ޴ 'bSОmrWjϢNb<_U?V{yoO*=4~?X(V:sg?zv`cNT[ b0 +W* +hF%,T=3L_THQX},{1a6&pVf} +8P$˕͓PxZ(1(R#V pTˠ.;!?VOe%dOT/+>D \zdxzLߣ, 7(3ά8!y0Ym vH22̾VE_@rz=Hvy\*- +bߴYpl_9pvSGp=1.oZ>NC ׾B.I~'oZuCsˆGƇ{o֐pZ C +"nJFD6"kL]Q ߇^?Fq\wfN%6wT~tqW9~ջ$*%/g$fl]+/fLJg.%6R5*z"?Rc$H3gK͕͚]+ xѷ;iĴNOǗNL[ {8nMmiNbtC +endstream +endobj +2633 0 obj +<< /Filter /FlateDecode /Length1 1387 /Length2 1890 /Length3 0 /Length 2758 >> +stream +xڝU 8T{'Y+'dƜ1.)cƙ1\BT +eITHE]*KˤRwh}}{soT*C`Q Hiiy"6ŋ5t氥 07Μ0@̈HD"3ÛPhp?cl8 +.bԔ. Df6&`dB) <l 1e&S9<<  f)C~X/v(ӆ>nz-ƒXs7/lG#ʜ!r P$T;~a.W 2QLp8#`g Bn:Er9\@gac7\$O"A$D5;pG{]Cf"Hqi 6H&eG|;C``nciu瞿D9  H&S 6fAH$S` ML(l QH"|DґO_k8Avss3V]mMga@ǗhDd`/"MAk?E-'APlt܁+ ,Bq*=aGwXox5y LH&$J3L(;bv(DP :G1}@$-`@@9l +"tܴx$` D;t`QON+7B4#?g;a>a3+cb+s͋Nl?tR(s>trCR9\s`t"JRz^&>JMq0z5u4T0\*JiJHlǮ/%s*SUUTppsg7\,lDӫtQj9G_[ ԏW6FƓOD*7yw6M,Yw+`훎9©b&\h$Wˡ_^gu 'NUu}(-q<>25|,8IA:C|TjL}T{R^n-2NegǽjVv]ܙb"'Lnk [k{Z4?qJb6N SBYf:}D (bq9Tۤ_QF={Z<h\{}8w;Fۤw=J:opS2lxŲO,7fhWG7ʳ+-qdNF<[[gv޴#+KIJheQ1\B&;Tr+<h̬uǘmԿd}WX.\b&S_3Ve4YwV+VW+Xrv_;-P߾BLr(K4({A湢1\6fe9VixB]֨G!XY| 鵡>߲ ;w|ֻm H/.ʸ٠eòĄƠ?y[IMt6/p4@)/xknI.5&1gf)ߋj6}aBo<^ڶ*z͑4X{hTeȖ~yn]I9bw^HkԀ=%T8syȮ5\v:/hD3ґ$R7q|JEyքFо&zÈܜ=ɋ35{&/[j(u.&7kEv1A]3]\~Wsűqwnr|v.*~w{H$-*׺dSCH0J?s>9aBapUO^ 7 r{x{Gex%]`ۍӞ2z͸rฅR}ګ./4!9&MʿjS+$J-\NԻkTY ti>'@IWʜ/8[Bgnȳgv3XI%ɺ*WsE%N?'.NOT-ʭx{QruK`[1xݙ*Ňk~jY+kqG\Ń(\U'gI =5/.\|κͳJk)5otl)>mRc K`&<{o}Ϣ+}WdnkX7vבW&^hk9b)Nj/m8~狋U흂 G}9ǯsΩ/-#%gc<-ͻ44fuHaVZ8;niފ{^<"{ݾjʽ.ݞ?l*x(V m5r +eQg%ْ҆=.#c&*ǎ.UM\Rl:kosc9e}sSF3vz{hĊ5iU[۝Zڸ-l!5 ~t6=Q0"N -,&x?&nv8ns3khHU}Q55Ϲ(}}3So]F=v +endstream +endobj +2634 0 obj +<< /Filter /FlateDecode /Length1 1388 /Length2 1751 /Length3 0 /Length 2618 >> +stream +xڝT 8TyؘJ*dsɘ3̘THnK.Q̙ s)L.h*[[>!+,m+UʥZIln%wg=5[ P1'7PJL@CNO^X(B(m!n+bAg1.}@4"F""`g!B'xo ,laBӀ>|0Dc`- !,x/a0$fd@7Ox1̱5H` 0 6o'r9H@'LLfSpfCxb-(Vw/EٵtDL6/GLȰ%&("A Dž@1%p(g2[#, Bn&ʎ ^8b5𩅃 "(cvaμ P' @>|cd P~G s/ Lmz-!jc#R0SAħi=wB B$R"$ +PȐ9@$3y$'LX7Bs ןU@`G XGhzȱ'h; ?7}k7p(W8{@e~޸s/ϱ^O} ?lr3?!0Y9aλ=Q6,#(ٟ0dsgqlCPX$fYq„?GrmfU%*mC7]='&]wqF|yU2E326_< 46KS궯7nt[͍M-ƹ>쥒#~&?u@o13~WEg<)Xkq:i2|EÂOʭ8% uVۡYz8DA2r֝h͞eGJ,5"ŪSq7lSF:;Rf%XCrwW|9Z}˷{jEcf7 +5g*ޥl}+].^Ifce~zsW ciEȅewX us)]j8 “n +凗 +vh:]2ٱ{R|(}nQ]9͍*Qy-~q^NhCOOHsuTD'FFSgM]#9Siw_6ci%5 q;&* deYHfLRuP:&^czk?wl"P/dVΗRʶv>3m'F5ڔH.>nI-s+'K'fc?(nٜw>Z9@s4.~_Ok1 |Z'g(QyÞl<[u9X bWsW\,TnZS矠΁ID5N]ǪY[)Qsx{&C;NBrW签?y¥!mE/b쫓UL˾xM$)O~P)cU@0'e$<60FϪi~BZ!:yPۿhm`rWZ745Yq|)8DJL3 dP#Fg^{ j~{2ucȪe^[/liM* +9+dE'`^(G-9p ~uv4STm5ΨedYLz9tT[[ɜS14"hZﯟxYMq[Jz1dFtndKL).umr񔾙׮7¸. +WKڹ7 ?n +lAck<ͼH3lSַgtȖyҖ +\q-7ٯRRI=Viiо|F۶(V9)R̎5ܸcB+Uc+2mUo:Wpwfc7in-+e0n-ZX(q#VYDHj̘c2q?JJk> +stream +xڝV 8F=%f_gc',0fc#YBDI*k}',!K"[wukyw繟z.!p7P8,A +7ܱpBiL JwwG㰲x-4s(\&#+. <E] ށOG;8dA'22bċ(:) +ap>DH%؁?xܰ'<51(T "EhM[n?k$(":`?R w{E cTq..(,X54$^.&n+%W}96va7s&&;c[MO~wjqoCױ Yk^t?0:~c-lBHX,tj`~YypKѷ=BT #ID0O5 +vZ(!.US5:嬊2.W)47>O'4T,#e *Sv\7yoA[g1%zq3oH8Gd_D0B]/96&>{k=`qK`ھ4؂y^ӕFnTr@ 51${(3~TmkO9/m hY67iLم k>&'ت-'0t&ev!;̋дnpS1䤏V@ݧ-f!lNq %5}ӞSf! IFďr[3.n;k ݽ>!,~]2-{]ʒUT%*@vN}d1Q}dϼusU{sfNYf©6a;zx#{FAZ/{1tFKQPŶv#j/+ևW=SJʜqj{/P>o$I{@1sKkR gVz3qHTt 0TI :K{7Lo={+ZM:el` γ*s]Lհy+Sq*G|RgQu7&M0wǛHDCb-y$χiQXFM^cO&뻶&>:)meJԶ)u"n|ϮQ<^`.Ԥ5܏t!ɺy==Wn߰)f%uڂA_Ezw[\~zDo<ՀI˒aZ-gg+ Ёu +^}\BpqxPPt UQD(ˡ rAA'P?U앐d!0Ծ|0gmCʍ,3czL|WG{m&V{RY=%R +^ɨ;KDV}X ou8 rmс|ް>bi7%nC߭luw}ڣ0{{v}/2< ư6?ɭ +iޡ/A3S!d+% ]f_cOM}LJRЇjӡUGZ^»NLޣp/!|J6ܯ[AQ øΈ鷢 inm#(詨͐^4Acn?뱍otH@m('T偕Ű坣-|2ĝ?A(i U,`{s;إɮc6<VIJ1{!o\ fVRBN-nEdzo#T`,5ÞJ3d;n{8C\>Tװ14m?ΔѺzKR7'F=42 p +F:>X$ t;\(HeYŞghS"z^ܤC};_n Fgu'H +G[pQ!l@h謌JNKiXPKhI7Ƅ8'恦~GZ- U4+xz=D%g#kP1ULd6TK\p9yy1yYgH3o)C_v%aHߦӷF JmSQHXJ}:&w6~ +=z7ŗXxuQ|%fi#_"OGƀCɩ=/u5%}>gLGr=$=$%q7<ˊF4tIO+G{R2,Ҽul6ӧͨۡ$fE +q֟NN (ZFsxQwȗ7z} +3(#K.ê-bGQ)WjԥnW~Կym;_ǹ&EnLިNBg)jÜw7&w `j܏4 .! !5G#5uQ$L\L6Dc5M(J'w#"J$_:|yې\hśi~H틼0ewA#jh?3 /<϶Eu;Ҭ|@bCECSBgk`'&h$nGmxO}1L@X<{eOr^\yQؠ*98pE5mo]oZ{b! H5ɼTtWIK7,}c~cӼÛh⛛IۉI1,KWŁx6Xt8Ž92RfTDįl|x$F@INOi ,5zaa'%;o; }DYsmhxLІ?{b& /[ ;BVZB<1|bK^6}Wc\dCӟf]!G&0[aoMFG "1Zq$9wv|T>-o"\dQa*]Ayt39s5=_Ps/ =*V1lҢZx9H +{ad9{;.ߏ:^)ˇB8`<71 Ј ͋z%b +L k7nj# /6:B䙽ޏ 0cVϭU^e=t]RcG/JH]\(nB~Jie\܉TSUpW|[0h]Y)Z{%!>nZ@ȕ7><;A,%? 9ϰW?S^3~ 爵j0'v8K݅>Q +endstream +endobj +2636 0 obj +<< /Filter /FlateDecode /Length1 1448 /Length2 3842 /Length3 0 /Length 4739 >> +stream +xڝTT֕ (*) 5"{"͐@H)#]PK7A MEۋ::o/9{K*aɶ8u2* v.$W98,`Mptg^CSi*JⰀ> @pyi!Ȕo + Gtq8 XA!S"QWQ(iI%(Q  +cO"v4DХb!^oŌ]m4Qۏ! K5e,`|Nᾓp bO:BKA\ +iQ#aUȎ8ՅZU<$MׯO a7uu^%]qZh_ +H`r( 1o[\p}O¿hˉDxp#80TgG U`qJ!0 `>Y%ю8fe.S󯬲2p`0@|^*MF (@E 9iY8(LC4φaE“80ډs"* +}O}2"0g #})ireh+} "JF.Lt e@? DN'Oe21>M$`Hv_!qXCcݘ?$,B$pd· "Q HA?]vG15%,P,022]F@!$2pr<(J"aowV&% #H_ BJOPM/P'.[W +wiZ~x q8wK2F>ȡ,nDMɹ^Q.AZ7$/5#pfhw_~Y 6q8\so7*~؜ؘOh3 s626c`U0韧㑸R{a{tʇ^wl7tz.IJg}e \=uqmyd~1Gs% jXܱ)Wý4?T gJm":~]LהZ"G$†u)g g{E |ÃPO*~?Ɗڅ"F##:{sG4uhv*J =NOg4K̘bBt:WwJ7wGnRKߩ dW*S;[^nE7QXNJ &%uL\4ᣲSsR*0|WU 1M`;8gg]V>w'&K>m ~8Ş|Tۆ՟>=N/#I Wx:H/i@e8+LQ/N6Yg|+nc +}ъGC,[" .㽓TfWnNMƑZ>YP`FIkq!whkXNfWy纄|I*\cj+w{q[6с{6x] Yl>T]w#NRשJ\Rtγ W/?o`CSұ(UZh; G+\OmrR-mu?!xjEcJ%"dϊ3LB7'/z&hnqI`3MByX@lxZ!r\ N~kձ{v/M&9COX=\ƷAgwU[b! Br~?sXqT(*ɕr %{]RЌݑm hj0o~!xC+fuhwWW`m;dN!Wu6Ӈ?=;jX7'FNLp6th +H~;5Ep=mswPi:&8M:Ld`zNunvVzbCQQu*@ya Y>$ID6ɓ4EcRMQhXGweK@1q"OGsidT.eC1g0rudgYB¯Gf,;L&ܰw? +sxOw Z&^P +v7&GΗ8H:9/sk E{v\V, n{<X\:| }ufY cPXn:ʂC(zmMM).*2!viq|Xl˹ɪub;M̻V N\{q};u$7TTf!(2%b5eT9ǠSM'ŷܗ+Y/ Kis?j`>ka1q;ʐQ)r y)|_c- ;N@J,GNO]?H6n57,}8Z$TwE!o,mܛj+5Q޺Zwnre|\6h?HQsU#S%[9VKzF⣋vvY.3})R +\ݔ.̧ۙ4(Տ,kabjrϖFteZ\J/Yg΂OE̞w\|-7f=6Wψ.nj $¡;EMRSCw;aAbI!< Hh-a oQ樑'$YLDXiٮ1Eblh5,L3]\~oM;W.#kJ5spr +oˢs^򒢵cg|Lde%~\?ĕ{'pȅ)2@`(gWܽMJq='u7_'>E^<0DC%9-f*VFR)hPiY$[aeyޮ}"w7aZtOfBIBăM.~XTNAͬqGh=UuB^-ɀz-i6N[c[,sߴO/r}1$iܗK5 Al&(yZ.3,d_6yZg٭<.E| S z/(QQjCw9b +p{ 끋/ke)G\tأε|7%G.H@T;}`kBƤ rfN~U#TibDZ?N1Z-DƟ(b )抜K@7.,7Ы]CsN/t_ȳ+ռ:'K l::+trZQe(ȏHܒݣȸĚxvH0r'x9]î4=!\{ +| "鑱kRwm(|Id٬ އ9S"cG[R /Gw[ጫ!`N3!Gԋ j:Q7EBjLuu'sYk'}&eNQ×r<+[C:κF6H_~$<0}0#-Y[!p^[{TBn{FQϱU}:xq˧sO.5iRSf +wG.W=]TR}ehMw>kSubJD}p` LN +endstream +endobj +2637 0 obj +<< /Filter /FlateDecode /Length1 1385 /Length2 2072 /Length3 0 /Length 2943 >> +stream +xڝT 8T{J%+:uf03)ɒ1spg,K\RZE$[jeɒ+eI)K u+) m}yGy!1&l84aE);B,6@tƍY#rP8"Dltq$]-aį8kB `C,O1Ȃ=8 +Uf )z4C  a"ZOC2;)3y %搈2 p7cι)-Hd0 + )aq ?Z(`*p3;YR h v[R$ί1oa1У^j5KŏdX'8.omsle-U<16=)[*grtdT;\w`Y)2Zv[K5-}9 y.0هscr{;3ƒYw? c[5&4$wS4ZQe턤Ao[S% ט֟;E_Van'U-qF%*:{k$M9GͮILa+$튯ʬ@ШS?鰢Q`͞n-k;MW>Y |@HԩvAܞL[{M.3vL;[7dd*ގW@]Fa%Yzlmt28N>KR?qE聾Jc <žUc\ z,͇ώG3 M}`\!dQ^CF5}qXcOT}Gv=dS'w!^: +TڹUM۝fE.̱k~6뎵%#H+H}wzEl?yk:o 0LF'SnH̝ !~Z +'gM+gilRŝuj6]}fī7fYk#J m;+= QduYF)4"~ޙAYtqɝ|oRuT"둮O_KxM q&)z<ԛQWcRtV9:lZڦ\_@\ߛQ9zھڬ-1X+YO%RV0M &Wbg%l̫QN!`qڹ?jLkNV$*~ǨE[rx@H=ٶ +p)Wg* +n<_׽0wO5_ +endstream +endobj +2638 0 obj +<< /Filter /FlateDecode /Length1 1365 /Length2 1648 /Length3 0 /Length 2506 >> +stream +xڝT 8TyZ4%_ BruZ\Jcۘ93̘Kbs-$H+ +EivsII,[كD ck35a`OAD6"ߒDK l" +HM(ˁ"!nn#"Xһ͋Dy1h{fXb>"b/}q`0L-(fN+ˇМ<>`3B8a /d쀁H AB"s!;X0{  N& ]ᅡAx(7ܝ}7};< 'DD&9$|Ə1BfŌjjaj,L s + (h@j+ab؎#nsj5t& ɦd&g!Z)rl? $rǠo<00!n?%ĈB)oEG9,X"aڡ B'D<3|^ nʂ\=yBdT39!(, /2L*y >il(f!0bqdLSS0’HD'–X(bDqfаl6a 1#%׿S! ^;۱8&S(Mv>1,c ~#Q ]"nܪK|4{HGXiÒ\!Jk1l >(aF_*북Faê.N}2םi)ij:4ŹtI{j#7ݭ7S~լ`wNѪ@f^au=1n`R}vBkc̪/o7SBb_&l{#߉Tz |;y tgj9t &Kd 5N%EE6HK:{򂇆ӭq)$ ߔVfx[QZ/ΫZcAtn(7jb‰BykMx{^4Z>"4~iriP#㿸|Bklᶷ!gnг $c[a]9*3yзЦГZFv|rb٭~s:[F-]Tهe9G +l|_p2~QعYRXvdQmOe17*YSnMk*Yv*47:n6^s&1O,6vNܔN ify;5eǷN#OFs_&Q?PZԹYH>*'ʫљױL-7`;51OB<V_:(H1Xlfeop&Pr[{6IvPVy!=OK ݯ|/kF5rÝF.#-9)?Δvn&]+g=J$27N΢Qo`xhQIՠ?(Kv9ͭ;~G:[H=юVhХ4m`q\tٱ3Bg6hy.yYjUQNt%RpHmE{˃hۄI|T͗+'T \׷ݽ3sȥZMtAu} Q~٥g]䞦?6,( +:$^қ>8s'~#U΋1U*Ƿ)}FIޯ|~_ήZ;94loe(,~ P杓,?3XVpO#Ew՝B:sfa*n~QWj0F_􊡊#FphMN p+mi4ğx<^SZNm>j~. +ӟݜepǴs~M9:*%6S%+ڐWڏ-%uR>:]nΐ +oo`xxkqf=2@y)x4`qYz峰ӕMeG[Q3.qIn\S{/}ӬlƙGy/+Ġ{厓?LQY"}k+X7q_NXNDoO/??)Y9fڄS2[:fS)M*uQu_h.~r e/>}ڏ<R-Ęo$D+Z}q{58뙷YQR^Mb~iRr0lmbbo,Vy[RQu%UdǟZW70  k1O}޺ϭEc +endstream +endobj +2639 0 obj +<< /Filter /FlateDecode /Length1 1367 /Length2 1808 /Length3 0 /Length 2667 >> +stream +xڝT 8Ty7`j' 4"%՘939̈M"IIIR}EBLDZJ6l}>=9}}?zK]I\P1 "S/BC@#CQO ßDP`(S%ba0 m@&LiF4*NB(,p?,X@"Db&& S`k 7b_A%=W\Cy8)m>HDk70I)Q̀~X,`R()x!GFa1岰km!I(6/&ASpCw +]/>>,TA7Vs(%$x*M(W)R/b ba(,{kሁ?GP¼i{=[,D7LB:y}`#;6>q] + T@hT*0giT6y־)_O؆OAzpv(_8U-; wXxOUy\`:mً "Ea3"L sraa0ΘyN3̿"0 [,([`P(V|@@l-!Rq}@$O-@!_b):qR<%E,k2B*;'T(OI /!8o91β]F#\_tw=uq_ v_bԳLih.xDlxjUՠȼuϏvʴj=o}7RPa|^qڂ5niV[>CJ?~ R8fI%k혓hV^gDtZꗍo*-K%S>*94sǰr]=:qo"}ĝ:,]?보Q#TIC'F+slgm޷,62%ઊT޴'?IP!'%}T}bnŘ_znVɮ\Odn9֖=٥-vY"qg҇d259)wn_lKݠ:x]d2lZ/\M+-2\ǁzCי{ Vy =:'%'+DNm.1[7h^jsA:¬9Ok9S7*UbNWJ?}T*鰦F繫}<i+3f=;5~5Qrh9#8đ1At?-j_NQin纝IlF'oF7n,^8^wƾ +s&%܏Z*ˍu$5{ϥN}Ȍ,wJx`e{VRh{׬ <,ONr3Wglz{G{s J8фAaoCihp\Ũ3_n]vu V~PbFҹ/w0a[$~Bogǁ2ׁ(m镶 *hKPNU.➠W3,n؄RX1Od/UsNU :bgUV#ڢɹf; hv2-dK<=TZ:"4L4͍~ߗS3ӼB!mfѵLïRjݯg*{m_vۑEOrLw3o{Xh:xRvyx~ޗ)Wh&-7:egi׶/gZ,&ugho-n]qhk?'ڴ %*hty) {=orƭ//5Yx*3Mi4nlsmQA} )Isc?vzrb₢*5MkAǠ?֏]?;Io!'/gѴ+Tz> +stream +xڝT 8T}OL>DE6˝2l#eŘf,YzIJEl +6KR,mBJMߥzy]99?Pupƚ28> @|}xH>q Y/Fc3=n΅h|aA0Wq\C!)k "`Bl hsBhҵ&$, ?l~ Ea8]=/ɜ|hS@7s< %k+%Rf>lT A(xl +lcB{D6B@kd= +~Ħh.κi#"<0i,3! т! "€D #A1ٶ4><8׏ nGcClZ{?ff `A"04 qsA (H$ QggA"e7 0g kA1Cw{s߇9V-ךv>LMO>Y|8{~+]OSX1h:6(68ƆY;il}yeҽ[+39U™Ī_$奔,b6뙶ѻ;q{v_[3A/HU,n5QupHq1uѵ->~.;MXhm3|P cvغٜ/:泥6hvU:bj3ҲR]`\ M:2sWHP:FE_&wJ󎔖DFNN# Ψ +}wO@yy6yTk/rFԛ7%aś37+с,?y oI=m↑̴N N6[*Jzv C;osܶ(kl\bz͠Nٵ{U緌%V~>͠] +lro6(Xߥ.֞jɇu5U LC&˾ئ ӼAqh{3K¡`ƾ鹭0C65xso;J~ȘL]hy;> +stream +xڝT TJP +S dl$dRCq;=_Fa!b[,64q¸dlE8H&S0ibkaAx `HFY\dBʟ|]("H- A 2͊Xa e!j.@D&A2YJUC2)e *BCaT&%#8, ER'6/"IS±f0'ag E23˙tX!KxDcAHBetD|V""x-0rX !"@X! Ew|(/BA&6b$#moɨ-4@h4`Z4>y_F@t, `2,!+:!'q$|h3*#vtMj5b2D?M@(撘D㤶8^U ;wV_AU3AO=%ACNquNܰHӌ/$uI5}{teY2ݹGcbށ#Cwrk}hzCuf5VZ7ktAkysώ}'r5ـ6s#g:R$l㳥**NSymMA ###\c=Gl7b3M]eA#Nz3v/^ 8RǢY φHs#:Kr]I|f|Yib9ދ ׾R-|ޒ0&+)3vtYq),3*Ů~9mwnNTbvi#wgfef>X> +stream +xڝTTS۶DD\HH*)U9  xi+E@" R A^d$k^s﹏!k[  TL`=) a0>;Bd@2G$hA l#,g Gj8G$oP 'c@$qXo % +a?J@/oOiJ9hfKİEg 9@55 =2 6XpA7JRQhH)S0"bD@}}A·Qk#^lq*?7 Obp0hIŞf_jpU(B ~HVX.n&a0"I8 ΂Lgh8_a-PT2*C0ϕ}h" *N&' j'ҁ (a +H mOàl +apu$Bh4Rs^_K0D?<{ \ҒHy b?`g@aڿz]bL7OAN$`m&T9` nwrDv~DfTG bhk{ӗ?`{$qКHm;R]Y]{C@ +PTքkPŋ}$2 ^D4uE&l{ "H߼Y2He$5`s 0d`?AM/pé?@#_rc@Oojj?AM*hd2[榥{Az #|ET.Cf:D)fiۣJ3>f9M G*m]RYIPގ6q/Ft[i +N;w06@1s-INX{qx9@a'hᱫWܖ G߱e_!Zخʱ35$ Q +]5it{tZ$Vct><ρ;h .]V B2oΎӬז2j _qrjkJ~"̩6YQ^z{^~5fWoy2Y*\7hԀģ;NT\W1>H*Pז3f.5j08nw71fS]IUzZJL厰U6km +[p+0ŀ\~CR JvTm5:L|Nz~ږnc[;ۅC\.9_^9 M_P!aJ⃊$[ȅvY}kod+V[Vh?VʼnP.u^83$gN(7H s]#)`Tq|<&b@kAOwi۶*xd+}Mfbv{Gv]325e8o}3ښo+Kl [u!a=C}SfrQU7yV-C{wlSWtE&@4zNNpߤwyv /&$u'لGp'TLc$,s3^ X%hkqt ufNvE>+GZv g݁AK)Cm()o {#' GӲɋ轅ܤ6z5"_.>[? +/dTM֐u-)aĩVC7f> +Mne+L{t}bi}GKQwo]2-g0H bka}'?W;?T.?2͔oty8LJRvZǧx'L4ͫ' ڊY {,;ccw1SCa͠ٿ<kNo\cJ5MHk +YjzQKZca-j}#]IZ۶wwș+ǷOQd=#%ۂ&ulXSxZԔVhN0 +PZ -z DΌ W$ΐ>H"i )ӕ"4n7d~\@a#blder= ҧn~ <3/Pe48feLuߔ4?s$.r `VL` @Vfge>(v䊲ո_^{ CUL'>z\!)`}A8&S.xM XM@TD+r}SE3&+zE=InC1 >>7rTw{X*M1ޒX+z_vIބNS_Gku`2ow]n࿦*01~hQ +>{̶He湗<nOH8bK'4p[( ݽyln_ _w)}!Kk:/]q{Mqe[V!zPD'yE/UHOR YoU2@%$}9 )"_u"̠ך.9M9ݥ{H"f}aPSN8bcc%B}UT]7kKyakq3nᇓy ]:>m'څ+kta-Ňoۏjy5c>+Ċ̻+3ΩUcBZ6dX'T% UDU<N2->NjL<#+7yq^_mQou_PƑB6o 1pnQ +`{3GMx挦.\#ĭ}U"Fzi\}ي׏ Wĕ]j񹳜m:P?% m YTR-º19Du0qRq+Cpeև:.5Q.K>RwUYD-SKyA $.kB]i֥&ob64u&}cy=_3ǯL9 ݆S;}[E=JZ)H{oL;L#zArS.٭$;c`iudXl[.BC_|Bl杘?ؽw0[4?!ӑ +endstream +endobj +2643 0 obj +<< /Filter /FlateDecode /Length1 1385 /Length2 2182 /Length3 0 /Length 3055 >> +stream +xڝT 8kNX*!Kfb"0H$K3ߌ/|bl*q$Z$2!K*]R&KI$GSkf繟Os3Ҍ 衍70X= FZSs;Қ 1`oq 6HK2WDs#00X#cцx  ltiM φ>\c@|_##R0BflDǠE4=`ϥ=Oɜi/u 1$PE"D7k`y>\.KA qhz0Ez rZBl"jvx0#A0u^ 5r!VHJA?0:ph#4@(>Lp>8ajhhd? +@яt\v+i B. !XGv @i_[\6Bze9%N@%qPFb5fԼPuQ|߇Zy5r`NRaNaz} vhfu%RN_?U<ĥZ7 MN+mn~|t;[@A]0e$jFȰs)_> p?']eLpkw܆d qbթ#w܋+e[/'(0^UUTy08efHh{A;bɡm76YpLH +wd%GQppP2*[^4Z}ln 2b& 0[\>_9Q03?=r5(ciKYzXY|D= v%M UDOJ+9մ?. +,(hR(#jnϧZq?yqůX!k9NjE0RFySsk6C||uOJ+ de+*ctWEY溩i3M@M$dMpx<+ \lt0^o% H6H{I Kd?XJ1W2kO'rwn{?h.Jɘp1vI{ r#tpw[̙ݛǨ)Q|%*ݵvQcr.={zw$0=.12F"tt{VݫǛ]=YgP*y{^$W_{R[nBi%/so;_z[!}RL3 o=P5RS.UW)- GES.*%SQE'W+ rt'@}kyePm\!D +>>(M,]8 WrU6םNިh^'/t]}/C|2ۮP,2IqM<7lfL]P*s>Yux].1N>~E}ͺbULw:fٛ|y1)NvDt]ƴ~ vcsﯞ|zNǻ-?h\B3a[«#{TmxLWed[kut/5Q7}se඙vX=4&uR1@MXP3ZAX<-oʖ .ki0?,K@: Zeس~M !NKXv)5Aa`ݥ>dֺ[ w=D~HT)<-Xr,cلLD;T|YUF[[to"2l xπcmyi9hTDdĤY/82e>y|i2sDlYm _b+jxQћSm;2ɷWUD"쮕 zt<㼴,Ng6dh>PpǔĻ:[9yR<+B+*;k՝cLi܌ᩳ, ZNYlQfӪaRk[e%Q=IَYp17΅rɝ h{<ʧȟ0QQN9{tyb1|tɕyV;Mўtemzi[!qqȷK[OnOOw` GѶfV3j+`!HT?eU}qngei) Ge&w[qUo.\P/|3=/{s> +stream +xڝT 8yOe6d.13(%wr3cr)$Eؤ\lI.% X +Ul7E}Cgy99Kg!"Ă8  "* @ g/J `b)nɇBÊ!A, fB2ǟ8Bҳ䅉0#40L} 4 +{ :?3Ax\[, G! _$sɚv < XEvd$dY@kކgC $ G( 3Rͅp  ^%/4BY+1e͉g3FXdX0'AVA2/$fD&.`rs%E]yR]=.spKg"{$A?ջsJD+Po3R!p +o8h[vlJ174 N}rI>q{}Pdl-5r/,o}[/b+J_г+tǞ}$zu*a.猽/rƖG\޽E5Zʕ-?h*9ʹbo 6>Spn[냒 jDUcpņ#[Ḻ+k^ne{a:PO֏̰o䟗To:UUve}^p#1P~NQ.P9DzޙeO=K{v0Inm#x wo&ݑU=JZs~}i+MmUv~F'!s@]4sYYSOV +u7--KRE\]i^Y֞8=>#f"X:Mz-&lyzNي-?ό_?649!;:?A\TXOqNHǭINp,i̍gh̵'ѹEخNȮ>n.h?RV/}e@Yx цK +Q{ΐb`|*i)3' PP~_z?#p+ԓ[?b|77f u_r8loO[(=-b_M0StVWјR.$2zmѯ-Ly/;HQ^XIQmzʥ[&KhuԾ.kD?MZUѩ>pIJjvv<9CX|5NT1>uI~qBnj$eʁf^uoXw'`40i.X>8[zF\Q0O/7_@"i7I&E.Ԟ_ݼ^ o Y<{uÆqqur=uy˟.Z^~e$4ks}b; \9$$[c.qbAŊFX6jYTGQ2lSSo~C +endstream +endobj +2645 0 obj +<< /Filter /FlateDecode /Length1 1365 /Length2 1608 /Length3 0 /Length 2459 >> +stream +xڝT TqAklY&,(BdwI2d $M["*XlZAH-E"*G7Ny̙?y>TG 8&B4 d & (\RLBDܙ@r—Vkgm gj!@!:1*퀙7岨k *PR\ChVCd> +$7< !dd05yW#c b3\aGS!LD9ݜ +p(.(Ir1 (,)B1xXAHtQ>Ĉ .p h.!qx2$!'oEP q|lQ &Q1Q>du|9FM zD1i'?t?OQ''<1bBb0$q@?&ABL.`CL6ֆlYl\N8G;&"7tb5f6 !gmf@LRqr?JǦ` x$QDn]4? c}9xkrKߏCBɘ.~RCx U;˦9\'q_rC0D&,[-/QeB.c 4 +0ӆ 0Hy3ml@ȳD,@a\"x@sZ.O -I [N5;7kw/>˭z\ +oܪݷ3,u0, :39;W^}^of>LzpɵfyեЛ[w)JH|o+'jjΠ5#7u<v7r<|_`NY#Wd/XuyK3K.Z?썀C>Z{gh8,+L +X\F@W{rޖǧt,q0.X̶<Ӗ=汇ܯ;EM%/6@f"wIv39V.9kGlO^95#v7N~r$2~b}e#hǤ֞Mѧ{Ȳ ݎ}ϖQߞ/B]߱d35mzoy:\fhbB#0l^tg,n + 4C_hVhڰ㕭i[ƅH-~\ѐ4I?3LmO[tȚt܈O3,lYVi3k~c+USQd_Vl|dw=!ZjB\l_pܳɂuS&{ +Hb5r^1G5-p4ɑt~odSVԣg޶9Rr.>ɚXeN`*rҲ\=;S-< WH=uM+||57܃:*:ઞvRVYyީ܃N ++9X6*/:zkwIU-F +탷L v'O9T,+q8a_iwYҼw+f3LSeүN~,)R:Gϴ_+ ,8Jф+! *TT%t=ζa+O;֥υ)C-]>NeCEt=K -8ۘזDĿsv Sxf6ZIj{R(-3l8H[#rxjܔtM[\{c 7Fn)[>IJh2uyin;L;; 99'hm@ӛoz,K|b/zblmzYNvjK6ZFľC'l୼%-Ck)t->0?A@++–8w(_&}hAPLVӫmЏl#F4f?]WC? +{^4xe栓~tOD/5FC:!G/d!:jm/BQ |<8!kksp"{`SD2$?{U> +stream +xڝTT[D$$ @$M>H/Ҥ( "U"H HOߛYʗ}={DNI.h-, P$"b#{L"h" G+ʫd*LҬ(p (BA +@`/Bģ>M28+YEC@JQI@Ch+ASi I@g3qPE~6)D + &-x-A@r+ -{ +D€hU&ND$k5pD4*_ !Gh%myu5&Q!?Md!0<~HW[{$!ag<*(`=H Ma + 9_Bd:(? PC4gSИ3 0~sE{:{iMmsC 3_g~@@! pgk x;JB<*< PO3cSD5|n!CQ{I}@C߿ԅ|<<~AT0֧X2NV` rys?U#[s钝=pHUS]ϣCRewQ6(f ({aٓG^mf3iuHlU<M[f#xray )P KQ;@h.Sp3a5˦B@${ W;*33uR{33!Ď}j2uk'lv(Ϛ#"O۾B͜=VCU;et9|&G֡zUַHM~xaT!ic'\8ݦoF!=׿T(n ?A ~!m8Q Mၜ+vli|to͆ži_"_Q51Uܸf %>\lڔ <_SEAHzoZ +qų|[ Q bh4{a(VD ܑUڔ>&?a}K`A Nś~"ȁFA␥YQl +μlɎ~ۙ(2M%Q$ _R?gu2,q*'qfQh y%y/~I { F]/YPaߌ,l=xkY1`CqI{'lX~9ouD{Vp$aj +^W9|IUvT_nC:vR0mV5UtJ븝G]Mm&J9,(͸Ant+)a 8͛mvV]=bv[hi)i%w +kZ<jQNhǣGIJmJ쵱NWG:{ʣ$z9VqŬa$\xND5yGc^YL,NqK!71);.3L65;=.Zw:l 35x&ԺJ!RE.;9Zqo "#1OM'(%Dz7TMeD;ąE9pR <4-bCyKY:RФJLJ% ~FyYFgFGuݐ p?mmNP5D>6FU5[e=vag1 e 8kv0?K38`"9Ր3k>E:Dʟא=ZQ F@ Ӹ.qJWARSSr;ڎ_ʽqY21g`rȆ+V 7d-*6iv2q\:nv4{Ģf[0&l{ ς?_4K3]\0iӌ7ԽK+7ZU:wݮH+? 痴bçKcCw<reWOH0S RrzDDB;o3ym\_J>ޗgj u]$gyz0sn];r xW&n4c̏G)`QJG9\7A&y4PelR<ʲh?SަVu90a,'FcN n[Ѩ !=4'`,}pև鮔+eSS:tqб85 MJ>T${i!P[QWmz!iNʼn/Ffk#qF*[vs<9sD@ykU#gF+ S+W75o9]XثZLJتԃzaђBra峬8^N㙲MZﰒ_Tݠivus+eg|29c{GGE>as _5xb\*_nˬLB^ Em8ᡪ[OA +DGaBh +wkr4mA!匝NDPt`FOR䝝#jeGMsD|5C{ĭ +O=ƥݴ +P| tCxhм;% Yߧ*/Js"Yǀ œ-5O%(4?6?Űj3"鞶ͽe@=M՘N K%~P<Vp}Xw!3{' +endstream +endobj +2647 0 obj +<< /Filter /FlateDecode /Length1 1366 /Length2 1416 /Length3 0 /Length 2264 >> +stream +xڝT XL OsLT.MwRQ*2ͬYk֤)SS.ٵDIPRD ]*%)qppؕs<'(De is`A˅P-&} pDJ +tD!C1Wڟ,\!1DlK%D +!u,`s$űhoBa@F$xh&Ij +I5:M+60ʵg9jo AUPUym F{:2 'li[e'lEq;҅sтαHE Ny˞Օz'l/l^Z.<X6ox΂ȱS??qrs Ѱ+)'1?9sxqqZ䫳;xmcS>fhlΛ7F:#) 餳S8UЫߖMYZ%^qzfhhzś(ٵq?;Ҕ>ZZ {G:?lc)/4A=0;vNIRzL;];50n82it_9o:;{iBV3cs :~V.Mc_[Mxz?7$jľoBCfK7 V~x'b=ř6Y5:+`w{\؏d\ظfy˻-.ĹY#^6vLe>=JrHQdI' +X;֚*"> M3jxKh}Lž ya9#YЍ*8GqU]|rzv4{pYiGyDlk+9t&8DfCJN ??6fw&eƛͯ5-ܴi65=Mqsg\ٲ]pHZuVhݘ'B}/ع Hk~#}tppP|!ۦ, b8)u[뜡[sƚl\c/-1qn 6F8mWG݈/p<+t}p'˶f^+g=դy/}leާS,- rO<=)Qgϫ^w~TwdLobXMJb4t6V厄S+1eǮW侻d~q\׺nVլ>kɥ,ǽfcJYĄM={ej9-o|*QF{㬹=%VbۗFS;KAuK3x+K"+nK +j#c:N^VNT; jˉ U'hj>橌%Nc3>Ȗ^)snt6wXiRq_gTI]{!Ħ祗7O;ZgMz5 Y`}nZ^+\Ì +,cP2simRMMag&UM !N'qlMᮩ8>˿+rzyKywsEςi]ܾG-kM'cG-&]tqwٻkO m)LzE33V|,i1ɸ+uB^3L4oWWC?^9 +endstream +endobj +2648 0 obj +<< /Filter /FlateDecode /Length1 1367 /Length2 1407 /Length3 0 /Length 2258 >> +stream +xڝT 8TVI9Џ̬5 r7%Dn3kXK3klK-ՖN>ARyg]{{eCᡈ TA0p-JO^"8f3w!t8qln`0-&qHa#H@1t#cD F\c0eA%,3`/ C`- p!.!a43NhNE2I($& +TȊ\\ e +.H`b0)M̧aA7&8c, 5 "%D"AX`H<9B1Es@$H|ܟ_Zx((À'BJAD @zr<|{p"@ww4)KA00AڊLK!`%̰d1Vbi~A?6 }8 bNB˚8r` 1!.gC0Cq־*j\WH1{/w :5qN*xF8?bb!ʵOA.y7l\n_(xbTT%ҊeU|-!0D,4kGr\4Qx_5qq qD"N "`2A ÈHǏ0 H ȃNQfYCYΎ\HDYz$o"\k=l!hj՟4FlgؙutWvK@*.7oU&t(U7 7;*=>\q#`gUV >[\v];έ#mz/9յ,u%55'њX{um2ގx /iM,X9s*Um(q庄^-uQ:W󗿽w;Z2vț)_ݿ#x-̤7rgtK>9L)tR}ِj(vqVcY %!pav(8uy"mZxHOO{:⍧gmZ^P]Lg QZS^ٓiC +lA㣅m3^+6Viы5/_;Æқu&>*)Jߗ,;Rqwuޥ')Gzh_dbPuy-Æ=Ʊ3S_9/qDf>7]eq"9?=P)UM^T59w{ۈM㋩ϲ6ǵi?I{Ëlb4j_ّX%Ɲ^7ηugle&lGVMZ砤lY- 5'ߗۺ}RRօ v,h1T0UQgEz -}0c*+v\ou3"@ݿMZwAh-J=2WoBm[_*nxiM8uֺƍ51.RrlTgƄU(EZT'I湬u%j^WM-}7-Us6)r SltrM;K7cDGz}wKvX"&{Ӂn%}ַ\ns[ޞ}WjIov-{% Yp[ezOƔ +^uu@W{OY>Ԥnz/oˑ6wVx{'[FioY3@9R-;E+NmGDuc}Lk6 ^ҫt4]_<\‘ >5h /ɿP +gҝ_*01oX9lW5XPy39qLʆ5sN-|"N5I솔i*TpsB"|PIɬ w,7ϱ㏍mҘ.oY[=\##+w]{ cnׅ +<ڲ1k@cwX;ڸ?ym?)F;D[)5> +stream +xڝT 8V1,G̠l2Swk̼ë434VR)FUGhH*n*HK}jggyg99?벜 d"^$?l\wbssHa҇(O hvo8V#qM'ЛD%q?ϛgO"v| ;3A??ź}{#(sG8 ԟ~4\" +sraAa@̼<fF03w.d +ŀbA [)Q(ƶAI-p$Ld*D@[FX:ZH@Kd[t܌xLM1E`>4C00,9=p,cKb3Vn\q6=Ɓ3C,ŭ pObSkUz +gUMIƐC&~toj x$q-;j=WH2'E#}IBՈJp.w#RήGo +G;Y}C~ZQn¸YbyJafQϭ xFUscf"wIlAﵭ̤c]}jewcڜͬ^=fUw+"%LSP^DNJTTr\|cHW5:wQ|µ YaVR[V՟|3N9){}Euvw;sT`tҀh󗯹Zvf:}ǻo/6%6v,NUaCUQ˯ +=!6Kܢo=hdrnik7d^_-.kl=jh+*RuzWbmj,]-rxdzsԴ6fҼBn'&VPH@w(! ?ԉ6,g ,u@j!Vct”ݵfT`vtj-9u֡A#0MU1~XM TOKP +KYÇGJI5Wn4>Pq:n0zgbKO6?kW|8Oװ s%CfR#<$O6ak +־lߠU'>/E-槝T<4R7e(VN +>?-`Gʑ/'B:[ZFxY%+7H{RV{)`bfۖuB z23O`)kjanYuj1D䑼S+ +雯׫ zLW? Uy޽iUeZF諦= }YmTބ/5NQQw34LBײo_ ׅj)z͐toteԺ揧(սwYqg5V,t ©Ŝ啋Vrr=۪t|0MϡK& )oeZ֧yۮ4xNlTIyeڳek_@⚑!ftm>pY@eL?L(Qq|IJu€aUʗ9aqyhSǖ\Zy!5U;G{ź->1qq[?> +stream +xڭTgX[֥KHCoJwi"$@H M:"E:HDP*EHWΝ^  Ep2R@UM30 "ƒ807+P + +ja``` de2***-?wDY~DXhO +-`0pA afz=S+ 0vF" cD.h A_a\XA0 x0, @`p  P7Wx wA4XAxfںԉs~"0!޿Zi(@a8W.gz"x2O wX +W @0,O5S`OOhoԀaaH)JY|N@QJ*(4@'ȯ;#/ E(̅Rçg*KDH?"'5%oԺH);0zdq{ .6? {#kxE$U"? \H~ۭPP@'@Rf銀~ _|L־qC[GC_~fxq0'1ACqŢH(r@OE^&dM$ @) Po4:(X(( xc0xm=?Ͽ; PL!jny9zmnZ>F?Ɏ^Tv:/Fr|Ple7+Ry&l;_a^]I|-\C- $v@뵥w*x޴aȿ~ ) e8 d=Ibo$`%۱p{=\Ij`Mt)G iGkY\Ѧ]=k-:}z滺-[6&gۭ[NY#ZiDM0B-U3`!V`6fY*$^(MŶt'1mUɭN24bC[̡zWj7s.2:]$Rh\rO25ojAe-#_Nr{>ˢ2ڢwXCҝ#\m|yPOVPD "r㣷BP +̔!Xd@,ԬYi$xǢbx)zhV93>5^Ɗ&9= +^S' xoHIt uPXH_@7iuαhp".m6< -ȏEZ*#ҟ]Ks3Eo ke͛(F iX5M2n6psDdJ |-5J7 (:%|BǺ@s 䴷brg:dݲFH] C[i֜h?|O%2Zw]ff>)\*{rApۺxWdeEXmWtXRq"9Ou4qteK@ɫ??g&;-͚*tm\/EF־%CrFłT)3㣦 ڄ%22OΖ%8o{6p'*j~"lV/$wtߔ>r3trԭO1NbI>KWKG::n]ٽua1G⦡oxYs&Mr:BgyWC)3`Do1 ,zoxt+(q8 z׸rufkpa- ߜIȥ]L*SP:7Z +1:z0Ūw^d^On@oO~Tf_.IfgJ+#0VMT߱hnd5źع^vQ\FJ%픤cE*0Y]33ZW_Km#Y<ɮ(nb5Apip/bI"H '`8C[qvvO>f4߅sV&4d.a[WDK,&RXjaLH)␲invUu\ƐnCK+0ΠcTo|Lm)byշ+=]$vUSAXooN5;Hwk +Oz&[%7at.tcwe2Bw]Z~n SO 7jfTT=RE̵S~bF;L}><.cBdZA7N҅;d?}*$YsW.S~M]kL3Ɛ^+J=i9?sNFF˛=0 UJ~Hq0xEͮAUVZZQ~cˆVa)Eg Hl-Pݳ?A` IZ*x\t;>#CP)釾}pbAٸu.e!sơt3 +MfE=0SӺZ.EhMO9=8 Y$D/.7i$'[ w=X|@bWFK ,6]}EuOk>+W/)K^5%uv|/h +=C^2ܪ~Zc +G)e,XetMK|!"M_Rs~ZC܃Z}vUk6!ҟiar/#T2U%H~,ڤU"E=Ha/b6j@Fx/:_^m!^5Y~ȓMr%ӖyKP^grhNw0]>:B`d9+P]mkVB3{n[{e̚w6aO)t $KF8D6u81<ꔴIg8>.DeQ@ N2R6m+D {>٩؀Ts#{br1ά$vUn)RXZdwU纘5p4dcᚑfMg_ܡWӱD +ʈk46yY<⾔F4X>/t b-9M%ti71ZɏJN:w͚ĶZaˍ"J4(a4a3.eM?\8;.64!TY%CohcbjU#/ 0\WgNPS⦯ZZm]*|՗E䬤kȋԞa,'5+Г'_քj uJEm}V!>?p`KqYZ4J6mKr +=EhPV{b!kiea`d%H$T=]%mswl7sJ@lD\y(?skqD!{ew@G rlJ_8G 3UWsI%@$xFN%:b}EŸ*DVY4`_'憒1h9mMm;$Z?v(cK<,Z_7;-Q|B:>hUH="0gށ d$so.Ё +T4jRW[SEvV=,B /|!CbMe԰:݋5~H>u.O/pGѓܷJXwDᠰqd(H?RTc{ȫ1!g`Z-JDĻVK;2=d^]qO7ŽhW n$_Zwm-iYR,}3N[M/.dO{ޅ]{pـAdhR%8ZFotٵrHQL%z?[WAl]mGdsSu)ڋYx;%N6mtUDs{' njM"wA,xRg0-MΛNP_j~-ib UKG86+Sa̲tϭ233 y~|›3O,k &;r'{9F5_b~J3ԯ<4W +!㖢 ߽kujLQ{^*Uq܆*[X.\ILMR;͉9 +W_VԲy+R?BbF#_U?>KrSkx=lzpI_(AzR_+YK'.{$I]pJԠ]@]o)wr5x69ID@t܁TG%GIwx+jwS{?]Ё p&G] ݄ dB-7@A +B] 9P_F1!9b{c^ACUpr'IF.~9y{iՖ;E{:ݦhs3:Oq*]Ml8% +uӸ]h%JAwoسhDuҤ'rA]Cwmy];Y&k8~]+#l}N1(SIp0I1( HU?ݦy%jTMUs]mNܟ<K<* ׾ T +L9E!|AۑS<ŕ"]{ ͩ:7Bg4 ' +en8^K $u49F [(_vC +endstream +endobj +2651 0 obj +<< /Filter /FlateDecode /Length 91 >> +stream +x5 0D{8m-=l`d#pSLRNw j7;%4z.qQ$D˕g_|> ob +endstream +endobj +2652 0 obj +<< /Filter /FlateDecode /Length 164 >> +stream +x=C!DV%@=drk@\d`;Q3gɃӱ4pok#Mx ac.UU׽cAi5 mځ?5ޣB(tneZ X> +stream +xMͻ О)<>Q"ٿ t'` +nqX ;S}PsDX3%ڄ_0ØXȶ7Wr +endstream +endobj +2654 0 obj +<< /Filter /FlateDecode /Length 51 >> +stream +x34U0P +F +)\@> 4XiLEWW V +endstream +endobj +2655 0 obj +<< /Filter /FlateDecode /Length 90 >> +stream +x= 0CLSTU׆|z[ȸ  څo'u`]^Bd;Jf&$qD;MJ +endstream +endobj +2656 0 obj +<< /Filter /FlateDecode /Length 232 >> +stream +x=Kr! CBG> +stream +x5R;қASYyɤs6;,Bx!Q%O0^'w<ǻZT6mX& +F,Ǿ%xj=iŒLF$qz)߀4mN%I[Î/ 2HzRÒV scM$#V3\c$$ic%2OůZ1@6l'3E$7qMXsPR侻^+!Z1COYdA T3׾0NF wj+$vVJ9e9d;&l=7-+9dE)%C<(~# +endstream +endobj +2658 0 obj +<< /Filter /FlateDecode /Length 78 >> +stream +xM P;S0_1ƃ`b/$jpӹl ntN Z'>|0vt`(Νr> +stream +x=Kn1 C>.ٞ('%EjLYS4p;lffZb|F]Y'f:Q96M,.x&[?Р5. 7tWe)4c{2jL]lR{<^DUG"cA JhZwEA{ jȲ;)ftR.n!kB+%H؆3r'hލKh!n.`S:EbdNriUNPӹý lEC)s_ klxJ&KVۨN<Zt +endstream +endobj +2660 0 obj +<< /Filter /FlateDecode /Length 643 >> +stream +xMAe) Co [TZǹAHc VeH?͚8a(5ϲ,75f?o(uuG'*jbSFdخj m[]APoWF#"wϿt:+f+?v[mu7eymaIw+C3d NyZ^[ʈ3N7o]̷ѝJ jTY*0s #*4͑%H +H{QeNk{P=AN+ zWOZtQ^g|0%=qB> +xƉ)TG5XͻYK'`C:9;^ќp2 ڝ|Yô CׄLJl@ƹ߽;HY[DuL<зi+l?ЀP%9 + xPs}f~Pcl:!9R:vzN3`BS[̢9$|/IBgTU>ETM +`I> +stream +x5QIn0 'ŠR@%%bc#/195&~grW,OG­I^ve?3VΤƓ E6=<2%:0ufډ!#RF*Sms mNv{I疬eX=QK1}l'(l>jD(g(gU!h]ݧmcFJӿ MMD g4ϽN!T +endstream +endobj +2662 0 obj +<< /Filter /FlateDecode /Length 231 >> +stream +x5O9! y>0U@6N!x##fZd fSLſ" ap֬nvX6Y^LWg.ci9n]uSXG0 tÔ sTɎ28',v9~ 6!*z6yrA]E%  Qb_vt(sBA.!*PRQp>謟_\- +endstream +endobj +2663 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +x=P;D! 9/$#pF-f߮)PL~3$G 1%Bn CR zt6:3?a7cE1t=&9 +seVH'"3)*{x,6['= RRɥ?mʔ +:f,dM8˻IR2v"}<ȣ:dMά#Oۙp_dNt΃96Mi*/RZ~ugdZ" +endstream +endobj +2664 0 obj +<< /Filter /FlateDecode /Length 395 >> +stream +x=RKn@\yRUݼokCR*10}ʐK]qɷ^[<|.[Zy%>ܗ!]t.8G 2*DͪѡBN }9/װ =2A$)BnQAaPYQ2jo c BmH@DTg$gb`ѲTD{LjΨD>OM(L-VnS_|t*4U Xy9Hl!:n32`K9`GYutpL~OtZur@MAF2>)z,F3ar4k"X"bDls=L9l֡33*!ںj@vp?3m +endstream +endobj +2665 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +xMQI0 @!^CC9 X 1,=!s7~ٻYz"SQR.bB]ϡ=kY9,s3c}I2!N uZ¸kbZvBzM;" +2;-+{n?R\ +endstream +endobj +2666 0 obj +<< /Filter /FlateDecode /Length 94 >> +stream +xE TA + +O&2|` yF&^XJcP@r-p'TwiIU)ܤyg&yc c#< +endstream +endobj +2667 0 obj +<< /Filter /FlateDecode /Length 341 >> +stream +xERKnD1ۿSpHᗐ󴪺[L `lxSdʰ%#$הO}"C4r$"I vkK쑨FZѥ͢Q9{z\H!P,er +%A[w+ak.e2\}b.6)hUI£znvlU30r%[}]E+@QY@v1Hpp<řpK8@z%/W ud/žBw^dí> +stream +xEq1 C%0 +AzB bO°\WqatÏ-3 G2cX ' Ѥvb\/:"̒@#|:Ǔ3t^!**na.@RԏQꚡ*+kjW]J>.2NݽZὕ=?v: +endstream +endobj +2669 0 obj +<< /Filter /FlateDecode /Length 54 >> +stream +x363T0P0T026Q064bC.@rs`r22 +endstream +endobj +2670 0 obj +<< /Filter /FlateDecode /Length 72 >> +stream +x32P0P4& +f +)\@B.H  %g m DDJ% +endstream +endobj +2671 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +x=90ОS#"qxV0z!8`ʺtSƜ xJM zԴԾhKՉ? +endstream +endobj +2672 0 obj +<< /Filter /FlateDecode /Length 258 >> +stream +xEKr D#> +stream +xE;! C{N##>f2)6oclRX ڂ肇%gc6n5uVhR}ith6s+ fz:rCp_b9S6;ܬ~+UaiYK f@ S9ګ=? +: +endstream +endobj +2674 0 obj +<< /Filter /FlateDecode /Length 322 >> +stream +x5Qm0 50 ~% H;کHӼU^2\.u*YaCu|f!S֖{yJ,p 6s +QDnY@蚫Xb V)Xv$ r1YSE)|,ّZrY +n}a8쳋DyL$dl>[E6v8Ѐ$AS8>aj('89֯1 NKRWϠA3.IwcJd)6 +SbVofQlܠbod[7}_{d +endstream +endobj +2675 0 obj +<< /Filter /FlateDecode /Length 218 >> +stream +x=P1 ]XzgKH"ER*5)/u%YS:|ynd6%*E/% +}ՖC4h9~ 3*K6p*3 mtV[ Ф`׶ r " JMr^>C5Xs S'no^#]X.i5AMZ-^# @qRkp/'S +endstream +endobj +2676 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xE 0D{`~&>Q޿ %n'=\ )n3C ,]q0 \GPaվRBf +endstream +endobj +2677 0 obj +<< /Filter /FlateDecode /Length 239 >> +stream +xMPm1 +50<C hK[e#9oɺCNinͯ vPT%J\n4I/8k{Yx)=2f90=NƯ;$B +%+ۘRN-{|=ލF-j80SѕqCgGW4 zB59p`˳Re]:4J(^7 +endstream +endobj +2678 0 obj +<< /Filter /FlateDecode /Length 51 >> +stream +x36P0P040F@B!H Y@8&++ +endstream +endobj +2679 0 obj +<< /Filter /FlateDecode /Length 160 >> +stream +xE91s'H\˵G4Mzh>Fk,JDPc;(HLHcH#X]T*Ri¿ZDpTO\M1T;I^EZ1D0 oE&پ` +8 L7 +endstream +endobj +2680 0 obj +<< /Filter /FlateDecode /Length 334 >> +stream +x-RKr s +]3s--|FЀ_䟯imӮzL;lOs^&_Zg:R3s(VFv6Hj\loXJЅn\F#"<& +⏜r*aꚮtrUq53IfHy]8 Sfy'rԩgK9YhtNONW3!9 bZWib _SQSz;~,s|s +endstream +endobj +2681 0 obj +<< /Filter /FlateDecode /Length 70 >> +stream +x336S0P0 +F +)\@>,́,# .C c0mbl`fbdY 1 2 +endstream +endobj +2682 0 obj +<< /Filter /FlateDecode /Length 320 >> +stream +x5RKn1)@O󪪋okL0`)/YK%ۥ[%BޏR-G- +Q=X/":pJWIj3 P@ƻb2R$siqr&'=YߓKMNI]IJD}B<>G1ɀ6m&%:fU`)W l[00Sbbe5ˆQ]pwhcG i8^8^9c, ch&zОaZT| +endstream +endobj +2683 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4R +endstream +endobj +2684 0 obj +<< /Filter /FlateDecode /Length 133 >> +stream +xEK!Dq2s퀝nc=T=.k!񷩖EY>TzRV!ܠ,I*!P-en6 S0l_["u?*/ȥֻޢ1 +endstream +endobj +2685 0 obj +<< /Filter /FlateDecode /Length 340 >> +stream +x5R9n1 +} n H qtR;ZTvˇTt7we ɫRHV!25gRqɂ?å X#D2f[~ix+-XR8y- +V~AG}TX IpPvH 9{,vQ3(1EA%9źtб،7:*[ZYc>,2zXtǃ 4 4e9QVxC 1! J<% _6?m^JkL +endstream +endobj +2686 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x-QIrA+fc+ @tZ⠌ ,W呫h31~+mX@T IcP5vzq ְ̓ f)1ge]=Aɬ\%La#g?2.s=7 FXanV34H!AF6r/tU1s-m_M8kX]q.'/6Qi@HnsxK{T`śn@6߼_`[ +endstream +endobj +2687 0 obj +<< /Filter /FlateDecode /Length 174 >> +stream +xMIC! C31Aݢ-Xvs21F<\d "]VYϷ;ݏf_=ŰWǁK^*%c"R6;Trݛ+pC#< +endstream +endobj +2688 0 obj +<< /Filter /FlateDecode /Length 141 >> +stream +x=0C +@)|Oj#K zcÆ`%Tk@%7ș`Gzb8\f}B%h{Siܦq5)ꜣg44s {Sw. +endstream +endobj +2689 0 obj +<< /Filter /FlateDecode /Length 76 >> +stream +x=;0 CGh~$B)$`Z>r$;|!WZҚ M 8 +endstream +endobj +2690 0 obj +<< /Filter /FlateDecode /Length 215 >> +stream +x5Q9! @$/xO(͌V\!R!S>z.j4疴-s/fi<CѨQCԥS(>nc! b(,AͩEm'5^ޗSƖV8=O&t2ԫ5 E"<Z42j;0NqdJoWGT +endstream +endobj +2691 0 obj +<< /Filter /FlateDecode /Length 91 >> +stream +x5 0D{8m-=l`d#pSLRNw j7;%4z.qQ$D˕g_|> ob +endstream +endobj +2692 0 obj +<< /Filter /FlateDecode /Length 164 >> +stream +x=C!DV%@=drk@\d`;Q3gɃӱ4pok#Mx ac.UU׽cAi5 mځ?5ޣB(tneZ X> +stream +x=Kr! CBG> +stream +x5R;қASYyɤs6;,Bx!Q%O0^'w<ǻZT6mX& +F,Ǿ%xj=iŒLF$qz)߀4mN%I[Î/ 2HzRÒV scM$#V3\c$$ic%2OůZ1@6l'3E$7qMXsPR侻^+!Z1COYdA T3׾0NF wj+$vVJ9e9d;&l=7-+9dE)%C<(~# +endstream +endobj +2695 0 obj +<< /Filter /FlateDecode /Length 78 >> +stream +xM P;S0_1ƃ`b/$jpӹl ntN Z'>|0vt`(Νr> +stream +x=Kn1 C>.ٞ('%EjLYS4p;lffZb|F]Y'f:Q96M,.x&[?Р5. 7tWe)4c{2jL]lR{<^DUG"cA JhZwEA{ jȲ;)ftR.n!kB+%H؆3r'hލKh!n.`S:EbdNriUNPӹý lEC)s_ klxJ&KVۨN<Zt +endstream +endobj +2697 0 obj +<< /Filter /FlateDecode /Length 231 >> +stream +x5O9! y>0U@6N!x##fZd fSLſ" ap֬nvX6Y^LWg.ci9n]uSXG0 tÔ sTɎ28',v9~ 6!*z6yrA]E%  Qb_vt(sBA.!*PRQp>謟_\- +endstream +endobj +2698 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +x=P;D! 9/$#pF-f߮)PL~3$G 1%Bn CR zt6:3?a7cE1t=&9 +seVH'"3)*{x,6['= RRɥ?mʔ +:f,dM8˻IR2v"}<ȣ:dMά#Oۙp_dNt΃96Mi*/RZ~ugdZ" +endstream +endobj +2699 0 obj +<< /Filter /FlateDecode /Length 395 >> +stream +x=RKn@\yRUݼokCR*10}ʐK]qɷ^[<|.[Zy%>ܗ!]t.8G 2*DͪѡBN }9/װ =2A$)BnQAaPYQ2jo c BmH@DTg$gb`ѲTD{LjΨD>OM(L-VnS_|t*4U Xy9Hl!:n32`K9`GYutpL~OtZur@MAF2>)z,F3ar4k"X"bDls=L9l֡33*!ںj@vp?3m +endstream +endobj +2700 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +xMQI0 @!^CC9 X 1,=!s7~ٻYz"SQR.bB]ϡ=kY9,s3c}I2!N uZ¸kbZvBzM;" +2;-+{n?R\ +endstream +endobj +2701 0 obj +<< /Filter /FlateDecode /Length 94 >> +stream +xE TA + +O&2|` yF&^XJcP@r-p'TwiIU)ܤyg&yc c#< +endstream +endobj +2702 0 obj +<< /Filter /FlateDecode /Length 341 >> +stream +xERKnD1ۿSpHᗐ󴪺[L `lxSdʰ%#$הO}"C4r$"I vkK쑨FZѥ͢Q9{z\H!P,er +%A[w+ak.e2\}b.6)hUI£znvlU30r%[}]E+@QY@v1Hpp<řpK8@z%/W ud/žBw^dí> +stream +xEq1 C%0 +AzB bO°\WqatÏ-3 G2cX ' Ѥvb\/:"̒@#|:Ǔ3t^!**na.@RԏQꚡ*+kjW]J>.2NݽZὕ=?v: +endstream +endobj +2704 0 obj +<< /Filter /FlateDecode /Length 54 >> +stream +x363T0P0T026Q064bC.@rs`r22 +endstream +endobj +2705 0 obj +<< /Filter /FlateDecode /Length 72 >> +stream +x32P0P4& +f +)\@B.H  %g m DDJ% +endstream +endobj +2706 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +x=90ОS#"qxV0z!8`ʺtSƜ xJM zԴԾhKՉ? +endstream +endobj +2707 0 obj +<< /Filter /FlateDecode /Length 47 >> +stream +x32P0P4& +f +)\V.L,іp +"g ' +endstream +endobj +2708 0 obj +<< /Filter /FlateDecode /Length 163 >> +stream +xE;! C{N##>f2)6oclRX ڂ肇%gc6n5uVhR}ith6s+ fz:rCp_b9S6;ܬ~+UaiYK f@ S9ګ=? +: +endstream +endobj +2709 0 obj +<< /Filter /FlateDecode /Length 218 >> +stream +x=P1 ]XzgKH"ER*5)/u%YS:|ynd6%*E/% +}ՖC4h9~ 3*K6p*3 mtV[ Ф`׶ r " JMr^>C5Xs S'no^#]X.i5AMZ-^# @qRkp/'S +endstream +endobj +2710 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xE 0D{`~&>Q޿ %n'=\ )n3C ,]q0 \GPaվRBf +endstream +endobj +2711 0 obj +<< /Filter /FlateDecode /Length 239 >> +stream +xMPm1 +50<C hK[e#9oɺCNinͯ vPT%J\n4I/8k{Yx)=2f90=NƯ;$B +%+ۘRN-{|=ލF-j80SѕqCgGW4 zB59p`˳Re]:4J(^7 +endstream +endobj +2712 0 obj +<< /Filter /FlateDecode /Length 160 >> +stream +xE91s'H\˵G4Mzh>Fk,JDPc;(HLHcH#X]T*Ri¿ZDpTO\M1T;I^EZ1D0 oE&پ` +8 L7 +endstream +endobj +2713 0 obj +<< /Filter /FlateDecode /Length 334 >> +stream +x-RKr s +]3s--|FЀ_䟯imӮzL;lOs^&_Zg:R3s(VFv6Hj\loXJЅn\F#"<& +⏜r*aꚮtrUq53IfHy]8 Sfy'rԩgK9YhtNONW3!9 bZWib _SQSz;~,s|s +endstream +endobj +2714 0 obj +<< /Filter /FlateDecode /Length 70 >> +stream +x336S0P0 +F +)\@>,́,# .C c0mbl`fbdY 1 2 +endstream +endobj +2715 0 obj +<< /Filter /FlateDecode /Length 320 >> +stream +x5RKn1)@O󪪋okL0`)/YK%ۥ[%BޏR-G- +Q=X/":pJWIj3 P@ƻb2R$siqr&'=YߓKMNI]IJD}B<>G1ɀ6m&%:fU`)W l[00Sbbe5ˆQ]pwhcG i8^8^9c, ch&zОaZT| +endstream +endobj +2716 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4R +endstream +endobj +2717 0 obj +<< /Filter /FlateDecode /Length 133 >> +stream +xEK!Dq2s퀝nc=T=.k!񷩖EY>TzRV!ܠ,I*!P-en6 S0l_["u?*/ȥֻޢ1 +endstream +endobj +2718 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x-QIrA+fc+ @tZ⠌ ,W呫h31~+mX@T IcP5vzq ְ̓ f)1ge]=Aɬ\%La#g?2.s=7 FXanV34H!AF6r/tU1s-m_M8kX]q.'/6Qi@HnsxK{T`śn@6߼_`[ +endstream +endobj +2719 0 obj +<< /Filter /FlateDecode /Length 174 >> +stream +xMIC! C31Aݢ-Xvs21F<\d "]VYϷ;ݏf_=ŰWǁK^*%c"R6;Trݛ+pC#< +endstream +endobj +2720 0 obj +<< /Filter /FlateDecode /Length 75 >> +stream +x34R0P06fF +& +)\@>ehd +fpY)XX&fP!.cSs@EƦ`?++  +endstream +endobj +2721 0 obj +<< /Filter /FlateDecode /Length 215 >> +stream +x5Q9! @$/xO(͌V\!R!S>z.j4疴-s/fi<CѨQCԥS(>nc! b(,AͩEm'5^ޗSƖV8=O&t2ԫ5 E"<Z42j;0NqdJoWGT +endstream +endobj +2722 0 obj +<< /Ascent 966 /CapHeight 716 /Descent -286 /Flags 4 /FontBBox [ -978 -989 3284 1263 ] /FontFile2 3254 0 R /FontName /MUFUZY+GoogleSans-Regular /ItalicAngle 0 /StemV 80 /Type /FontDescriptor >> +endobj +2723 0 obj +<< /D (section.7) /S /GoTo >> +endobj +2724 0 obj +<< /A 3255 0 R /Count -3 /First 3256 0 R /Last 3257 0 R /Next 3258 0 R /Parent 6 0 R /Prev 2488 0 R /Title 3259 0 R >> +endobj +2725 0 obj + +endobj +2726 0 obj +<< /D (subsection.E.1) /S /GoTo >> +endobj +2727 0 obj +<< /A 3260 0 R /Next 3261 0 R /Parent 2153 0 R /Prev 2493 0 R /Title 3262 0 R >> +endobj +2728 0 obj + +endobj +2729 0 obj +<< /D (subsection.E.5) /S /GoTo >> +endobj +2730 0 obj +<< /A 3263 0 R /Next 2494 0 R /Parent 2153 0 R /Prev 3261 0 R /Title 3264 0 R >> +endobj +2731 0 obj + +endobj +2732 0 obj +<< /D (appendix.D) /S /GoTo >> +endobj +2733 0 obj +<< /A 3265 0 R /Next 3266 0 R /Parent 2495 0 R /Title 3267 0 R >> +endobj +2734 0 obj +<< /A 3268 0 R /Count -5 /First 3269 0 R /Last 3270 0 R /Parent 2495 0 R /Prev 3266 0 R /Title 3271 0 R >> +endobj +2735 0 obj +<< /A 3272 0 R /Count -2 /First 3273 0 R /Last 3274 0 R /Next 2495 0 R /Parent 6 0 R /Prev 3258 0 R /Title 3275 0 R >> +endobj +2736 0 obj + +endobj +2737 0 obj +<< /BaseFont /PMYFND+CambriaMath /CIDSystemInfo 3276 0 R /CIDToGIDMap /Identity /DW 1000 /FontDescriptor 3277 0 R /Subtype /CIDFontType2 /Type /Font /W [ 1 [ 633 533 539 476 544 ] ] >> +endobj +2738 0 obj +<< /BaseFont /PMYFND+CambriaMath /CIDSystemInfo 3278 0 R /CIDToGIDMap /Identity /DW 1000 /FontDescriptor 3279 0 R /Subtype /CIDFontType2 /Type /Font /W [ 1 2 579 3 [ 654 ] ] >> +endobj +2739 0 obj +<< /BaseFont /PMYFND+TimesNewRomanPSMT /CIDSystemInfo 3280 0 R /CIDToGIDMap /Identity /DW 1000 /FontDescriptor 3281 0 R /Subtype /CIDFontType2 /Type /Font /W [ 1 [ 250 556 889 556 667 611 722 ] 8 9 444 10 [ 500 444 333 ] 13 14 278 15 16 500 17 [ 333 389 500 722 500 444 ] ] >> +endobj +2740 0 obj +<< /BaseFont /PMYFND+TimesNewRomanPSMT /CIDSystemInfo 3282 0 R /CIDToGIDMap /Identity /DW 1000 /FontDescriptor 3283 0 R /Subtype /CIDFontType2 /Type /Font >> +endobj +2741 0 obj +<< /BaseFont /PMYFND+TimesNewRomanPS-BoldMT /CIDSystemInfo 3284 0 R /CIDToGIDMap /Identity /DW 1000 /FontDescriptor 3285 0 R /Subtype /CIDFontType2 /Type /Font /W [ 1 2 778 3 [ 611 722 ] ] >> +endobj +2742 0 obj +<< /BaseFont /PMYFND+CambriaMath /CIDSystemInfo 3286 0 R /CIDToGIDMap /Identity /DW 1000 /FontDescriptor 3287 0 R /Subtype /CIDFontType2 /Type /Font /W [ 1 [ 995 698 532 ] ] >> +endobj +2743 0 obj +<< /Filter /FlateDecode /Length1 5999 /Length 4132 >> +stream +HV}pT?vn"dw Hdc@]1i.cI DQSЌ@KX hm:UtN:: 3AiFNs=|}nϝnG­]n=*ZhDʸݫrE۶WD1=vnӚD"gyt׶&I]=o$O,9k{l>Cx g$9ȏq695DM"j3E]ty9\er&27P/톇^z*=<@']VQ=7RSu,'iEz+mU/XGAOS>%Y~z:J?1,M-8ejO᳓ZX[v [4Q":f̽L4A54qh9mL=OqYV'-CX՜\ȿck۠ZK1] 󼘗KCN +k`jajE%5z.V ^)>&ȫ:ߺYY.d= gA 1[ P:;~tzFC;y:B^}DCd/B1^keJWH٫֫[3OfX7zT Eh!-8۲aO0;Eo4D:g^'|E!W!DU< +)Y"J9E"ʧjzCs[5ӖY7ll=m&T`W҆,),!Cyd"w.}\Y@b2q\p7^Y1Nr'F{A11:/|OBNa ZJV!V.q?I_ $Y/ddAyJ*%JrKrFXTե2QXxqyYt5]!q6;ˇq 4[0h +(t0D*WZٸcJK~_QWz=#]yNH ͬHJXmFAeSKdʹ/[a+e%{ZD -+1y>dZLNhQa]G*[#l&Mv1QĈD̀hlYFJu=^4ynqIS5^tQ i6m{:L&l.ys̔ɸ)v*gDL߆-~E4EyC=h7Ą-%!5/VlL%=WE5NtsTgӢpIHF&P"F:? ȀR)򖖕jUJ訓uJ#TҖ/~e[w] +67y6y=r`{gwOm| μ<Yh+o]#G+$sKs8E0tO,JG@n;y$>Gº+Oj3fD>5bnD9R %!߀G(Vb3*+,ձmu_Sz_2U\j?9U{zCNoqߙ{o~h)TyǴu]{ \g< M`g Rw*b$.4@ISEMhU"PVQcͲjv>]ӥM?Viki]ZVع׌jT;{ϻ \׷ѿKFz/ wUUWyX놗oꎛpFȇ~-zJe`ͨ#r *'y.{ERbkbTeUduWU.Oz7z*C^c+*>>:ZԦE8% U9NWK)3}ճQ) 44bsErd׃_\!=QșSٹ^ aY`vG#f&-#TR9qp˶jYWW*7 =K?.nUMɤݫD?x+ƍsʛBV!,Ѽ +6tM-pˋO*U9mviySa\GreTUq(,JBUE>s~CsB1qLm ,롉hG|lk cj,Zg<_n]5&oH0Ak"!$ (G=#V" Qy5:ȪE-:bъ=Z@*©jMTR|lՠQ5tվ2[w^.0UjQ HU}=JvrCG~1,:D}d{`Hsho3 Vr?0k55<.|:Wwl,0)ȇϤ,%Xz֛X𒼎ftxFAwރ[l=3*I<3,3K3>3ф$3Ԅ $0Lg$Y8֧#;sISdj#`2ZoP>[fֿ]>=>b cc{iJwӧxz\;2ݳkг4H=n;! 0q|8?Vc _qlƚHA'(=Ac%h5!OXtoF|r0t +endstream +endobj +2744 0 obj +<< /Filter /FlateDecode /Length1 8591 /Length 6060 >> +stream +HVtSKZ(4)ڤIׄBڴGDp%Z]U t +26u#*'Uؘ9z*S;7y/pvxx EaTJ;fsF6S+ѓ#䄒+ +-B 4$w.?Vo'P.YD2"SLRf*_6&xo~'Q㩥C:Ijc2r7ngW5c!2ID:QFHl ׭|O٧`2C]6Óiףk_`hC?9K.Sz: Ǭab>؝Y۔x9qQYh9nQfLLST021WgV;͉p5ѝx$S+{AD# 5s o1+a}ZK rQo/)=b}081ww8'MSCDZvk [ən9NcW%\J[4UPj:oTqj!ٿDwcoߋ˥j9q7*h.l"j7>ǚZcbYKrąH,PYo~_4865 `td 0Nv)6[r,KR3@7fLcqRc`@,DA1 j҆8$`I_srO̪ADaxT9WC3? 8a2$6l> ++ +ȭY"ZZbrih5"?ժ9b&rirA۔i ç&E~br;ġ Z.'\BboğlKK)!SrۃrkǾ~7ˏ?nb'$! X +.` .{de*6?0&Q@Qѵ%Ѭ5lMUSM?:6Տcs>/YJt\:%AS7"!./q-pnW!8(&ҥU2[>A"x^$k A^ _xX- "tٜE۶~7_ȻRsg&}1O+`<ac9c`|V)֟_-;]"G fmߕ +N=Y<ɜ,cΙ{{7772WmLA,gx6Y,g 48s2Mz4DU֔iTl!qLc^ +-mÈzu ç KwuN:N7Ĉh\Uz,u2$Os{ +j0c +J5 ̦:*[Сi +R(H2oga/fԃj_]v3/L2/~dAjdq/o1%93=OVnirlpJ'^\ŭZyէ|6,n7v&15E4[f^$Q{Bl8c<-KQC0Ԡp bJ +< a5Sػ].I!NCPWl?^ i+_ xiVb)|EIKR3ӆW*:berO8 k|їppƂon ;&D˜U*M +O T#Xj8^,PM9/icMTLH~'EGHݓ+==UFIRÉk |,iZ:]1 \%x" +;gE!E8N,D[FtaJh 2NQ#{kksbIm+C\, ;о|09ѷ &$%z{[ŧGFR/r7?f⾒=8s{fqdpX?r3)?nyłs`sP#D >$& &+|IHVGɄ;H٭ѺGҹlH`to- P"9ȩ яyze3*p)f3 g̫7 +#+3Ab.'_CajGR~ʻ|p~Tv>'C+ ]?og^*Q:;!*L]QF xE#f/!%|Wuo61d\"h33"]QS.kZ +D14 XdBA'* +UX:zT<=l^)BDR-Tq Jzp,9ԩ7srwP{G8oꗟ9þZ;oDsk?]Z|k{n\;'.Mq"-cϋ?꿴45B,M.@) QNcjŪI  o:ʆ".Ia >p}>Xzh9" HXj݉ɥ68:׆X&$|J< n5sKqGU0!{yO@7)gc[w ][(2^Z2:0:Wk[xp$OҲMmƝx9L!f]4&d@ )߫Z]n֖2X^k%MDCi>gke)i\ccgp % }f 'I䭴fT-ɪ"Pš>G_䤟:U&u$dl{MZUjzw9y.om{M F݊ JH]wyۤOwMSeiw{m;zLtQ欪3Vz'Bv +g'c2U{<._ cSݳ=v:lرN$٩Ѧjw5؋1 jS^^{w{5aWkDQZV?F)`x, +oq;wE]DtY67[驦#ݻnI;߶|ny)=۲=*5m 74=au}ɮEIQ#{n]Լuf̽Q%gUǦ?R;@?\/8_j$l!reR'`q!W'lG;1yT*H[V'9~\ Wzja3vYF7;mD즽rЃOJ&`0-0S(Ãz$?1Yi""[ *VuЋA8PZ#ehhnoĝ'ݿ DKQ Z-(Weh'JKV4.^] 5?3PzGR0k(II\Is΢|S 2Le +-ShBPa15_hqԺQ Ml*jИD.OIfM؛$K(0j J +c?Y=o3xdh$GݓoVoh9D_ CDpv 2(O5_;Cd ^6dQm;J]yoZ:{5gv+V!WKJJ#EG ? OdaۉdMg)lVk<2^m\gAw.ȧi0 7Y77T&We& W`h58F~ a<>mbt9nk +7UZnW[i.Kp`Nb8NK*uǝ tI&K-Dկh +U<[1w}3 #˧W@H*gNWo:N/sgX|h,q:J#+[+ %XIJ+ZQ7Gtoمrkza` <45NsxJ\ikVwl1~љ 0+8 +endstream +endobj +2745 0 obj +<< /Ordering (Identity) /Registry (Adobe) /Supplement 0 >> +endobj +2746 0 obj +<< /Ascent 1025 /AvgWidth 426 /CapHeight 662 /Descent -306 /Flags 34 /FontBBox [ -558 -306 2000 1025 ] /FontFamily (Times New Roman) /FontFile2 3288 0 R /FontName /TUTFAU+TimesNewRomanPS-BoldMT /FontStretch /Normal /FontWeight 700 /ItalicAngle 0 /MaxWidth 2000 /MissingWidth 777 /StemV 60 /Type /FontDescriptor /XHeight 456 >> +endobj +2747 0 obj +<< /Filter /FlateDecode /Length 170 >> +stream +x=K CBG[˙tc/DWt앇ƔhcO-\tNSf]a2oTafU317`*wr8ےlWaН0̑=Sss#_rkaЙ-eLal- Awz0A>d +endstream +endobj +2748 0 obj +<< /Filter /FlateDecode /Length 232 >> +stream +x=Kr! CBG> +stream +x5R;қASYyɤs6;,Bx!Q%O0^'w<ǻZT6mX& +F,Ǿ%xj=iŒLF$qz)߀4mN%I[Î/ 2HzRÒV scM$#V3\c$$ic%2OůZ1@6l'3E$7qMXsPR侻^+!Z1COYdA T3׾0NF wj+$vVJ9e9d;&l=7-+9dE)%C<(~# +endstream +endobj +2750 0 obj +<< /Filter /FlateDecode /Length 66 >> +stream +x334T0P5f& +F +)\@>L̀,cSS$625pDWRk +endstream +endobj +2751 0 obj +<< /Filter /FlateDecode /Length 307 >> +stream +x=Kn1 C>.ٞ('%EjLYS4p;lffZb|F]Y'f:Q96M,.x&[?Р5. 7tWe)4c{2jL]lR{<^DUG"cA JhZwEA{ jȲ;)ftR.n!kB+%H؆3r'hލKh!n.`S:EbdNriUNPӹý lEC)s_ klxJ&KVۨN<Zt +endstream +endobj +2752 0 obj +<< /Filter /FlateDecode /Length 643 >> +stream +xMAe) Co [TZǹAHc VeH?͚8a(5ϲ,75f?o(uuG'*jbSFdخj m[]APoWF#"wϿt:+f+?v[mu7eymaIw+C3d NyZ^[ʈ3N7o]̷ѝJ jTY*0s #*4͑%H +H{QeNk{P=AN+ zWOZtQ^g|0%=qB> +xƉ)TG5XͻYK'`C:9;^ќp2 ڝ|Yô CׄLJl@ƹ߽;HY[DuL<зi+l?ЀP%9 + xPs}f~Pcl:!9R:vzN3`BS[̢9$|/IBgTU>ETM +`I> +stream +x5QIn0 'ŠR@%%bc#/195&~grW,OG­I^ve?3VΤƓ E6=<2%:0ufډ!#RF*Sms mNv{I疬eX=QK1}l'(l>jD(g(gU!h]ݧmcFJӿ MMD g4ϽN!T +endstream +endobj +2754 0 obj +<< /Filter /FlateDecode /Length 231 >> +stream +x5O9! y>0U@6N!x##fZd fSLſ" ap֬nvX6Y^LWg.ci9n]uSXG0 tÔ sTɎ28',v9~ 6!*z6yrA]E%  Qb_vt(sBA.!*PRQp>謟_\- +endstream +endobj +2755 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +x=P;D! 9/$#pF-f߮)PL~3$G 1%Bn CR zt6:3?a7cE1t=&9 +seVH'"3)*{x,6['= RRɥ?mʔ +:f,dM8˻IR2v"}<ȣ:dMά#Oۙp_dNt΃96Mi*/RZ~ugdZ" +endstream +endobj +2756 0 obj +<< /Filter /FlateDecode /Length 395 >> +stream +x=RKn@\yRUݼokCR*10}ʐK]qɷ^[<|.[Zy%>ܗ!]t.8G 2*DͪѡBN }9/װ =2A$)BnQAaPYQ2jo c BmH@DTg$gb`ѲTD{LjΨD>OM(L-VnS_|t*4U Xy9Hl!:n32`K9`GYutpL~OtZur@MAF2>)z,F3ar4k"X"bDls=L9l֡33*!ںj@vp?3m +endstream +endobj +2757 0 obj +<< /Filter /FlateDecode /Length 136 >> +stream +xMA1y@ @xVU_Kv ɀlQ%xE6g_R)b!Op0S)wcqj,hx^KM-w-oGm E- Bl2|Guill4I +endstream +endobj +2758 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +xMQI0 @!^CC9 X 1,=!s7~ٻYz"SQR.bB]ϡ=kY9,s3c}I2!N uZ¸kbZvBzM;" +2;-+{n?R\ +endstream +endobj +2759 0 obj +<< /Filter /FlateDecode /Length 94 >> +stream +xE TA + +O&2|` yF&^XJcP@r-p'TwiIU)ܤyg&yc c#< +endstream +endobj +2760 0 obj +<< /Filter /FlateDecode /Length 258 >> +stream +xEKr D#> +stream +xE;! C{N##>f2)6oclRX ڂ肇%gc6n5uVhR}ith6s+ fz:rCp_b9S6;ܬ~+UaiYK f@ S9ګ=? +: +endstream +endobj +2762 0 obj +<< /Filter /FlateDecode /Length 322 >> +stream +x5Qm0 50 ~% H;کHӼU^2\.u*YaCu|f!S֖{yJ,p 6s +QDnY@蚫Xb V)Xv$ r1YSE)|,ّZrY +n}a8쳋DyL$dl>[E6v8Ѐ$AS8>aj('89֯1 NKRWϠA3.IwcJd)6 +SbVofQlܠbod[7}_{d +endstream +endobj +2763 0 obj +<< /Filter /FlateDecode /Length 218 >> +stream +x=P1 ]XzgKH"ER*5)/u%YS:|ynd6%*E/% +}ՖC4h9~ 3*K6p*3 mtV[ Ф`׶ r " JMr^>C5Xs S'no^#]X.i5AMZ-^# @qRkp/'S +endstream +endobj +2764 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xE 0D{`~&>Q޿ %n'=\ )n3C ,]q0 \GPaվRBf +endstream +endobj +2765 0 obj +<< /Filter /FlateDecode /Length 239 >> +stream +xMPm1 +50<C hK[e#9oɺCNinͯ vPT%J\n4I/8k{Yx)=2f90=NƯ;$B +%+ۘRN-{|=ލF-j80SѕqCgGW4 zB59p`˳Re]:4J(^7 +endstream +endobj +2766 0 obj +<< /Filter /FlateDecode /Length 51 >> +stream +x36P0P040F@B!H Y@8&++ +endstream +endobj +2767 0 obj +<< /Filter /FlateDecode /Length 160 >> +stream +xE91s'H\˵G4Mzh>Fk,JDPc;(HLHcH#X]T*Ri¿ZDpTO\M1T;I^EZ1D0 oE&پ` +8 L7 +endstream +endobj +2768 0 obj +<< /Filter /FlateDecode /Length 334 >> +stream +x-RKr s +]3s--|FЀ_䟯imӮzL;lOs^&_Zg:R3s(VFv6Hj\loXJЅn\F#"<& +⏜r*aꚮtrUq53IfHy]8 Sfy'rԩgK9YhtNONW3!9 bZWib _SQSz;~,s|s +endstream +endobj +2769 0 obj +<< /Filter /FlateDecode /Length 70 >> +stream +x336S0P0 +F +)\@>,́,# .C c0mbl`fbdY 1 2 +endstream +endobj +2770 0 obj +<< /Filter /FlateDecode /Length 320 >> +stream +x5RKn1)@O󪪋okL0`)/YK%ۥ[%BޏR-G- +Q=X/":pJWIj3 P@ƻb2R$siqr&'=YߓKMNI]IJD}B<>G1ɀ6m&%:fU`)W l[00Sbbe5ˆQ]pwhcG i8^8^9c, ch&zОaZT| +endstream +endobj +2771 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4R +endstream +endobj +2772 0 obj +<< /Filter /FlateDecode /Length 133 >> +stream +xEK!Dq2s퀝nc=T=.k!񷩖EY>TzRV!ܠ,I*!P-en6 S0l_["u?*/ȥֻޢ1 +endstream +endobj +2773 0 obj +<< /Filter /FlateDecode /Length 340 >> +stream +x5R9n1 +} n H qtR;ZTvˇTt7we ɫRHV!25gRqɂ?å X#D2f[~ix+-XR8y- +V~AG}TX IpPvH 9{,vQ3(1EA%9źtб،7:*[ZYc>,2zXtǃ 4 4e9QVxC 1! J<% _6?m^JkL +endstream +endobj +2774 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x-QIrA+fc+ @tZ⠌ ,W呫h31~+mX@T IcP5vzq ְ̓ f)1ge]=Aɬ\%La#g?2.s=7 FXanV34H!AF6r/tU1s-m_M8kX]q.'/6Qi@HnsxK{T`śn@6߼_`[ +endstream +endobj +2775 0 obj +<< /Filter /FlateDecode /Length 89 >> +stream +x5 0 D{O! +ؿIpcݓ^R@:'A^ VEQIMESϦM'3uzZ(mp} +endstream +endobj +2776 0 obj +<< /Filter /FlateDecode /Length 215 >> +stream +x5Q9! @$/xO(͌V\!R!S>z.j4疴-s/fi<CѨQCԥS(>nc! b(,AͩEm'5^ޗSƖV8=O&t2ԫ5 E"<Z42j;0NqdJoWGT +endstream +endobj +2777 0 obj +<< /Filter /FlateDecode /Length 91 >> +stream +x5 0D{8m-=l`d#pSLRNw j7;%4z.qQ$D˕g_|> ob +endstream +endobj +2778 0 obj +<< /Filter /FlateDecode /Length 264 >> +stream +x=R1 ˷ +_R=q`=;11KAnQ9?m%ˏegIm sqb$-e&gq j3!IrR"_7tlPzKTþr;]샦3Ӯ쀥ԤN#,¤HE!,۹~]XO<iVzKLm;YcT !Z:4Uy"R=5\KImphg +endstream +endobj +2779 0 obj +<< /Filter /FlateDecode /Length 235 >> +stream +x5QIn1@'Q/$F$>Đ(W|4;YJ佈 +* +irV3 3Yf>;PMqv4Ai\G0< >qcYbHR*G,NJݢgI\v^Omi_u7;",.:n)!8-T&~f$xʞN4A{AGn&d*PF*4ƌh&CMT +endstream +endobj +2780 0 obj +<< /Filter /FlateDecode /Length 81 >> +stream +xMͻ О)<>Q"ٿ t'` +nqX ;S}PsDX3%ڄ_0ØXȶ7Wr +endstream +endobj +2781 0 obj +<< /Filter /FlateDecode /Length 51 >> +stream +x34U0P +F +)\@> 4XiLEWW V +endstream +endobj +2782 0 obj +<< /Filter /FlateDecode /Length 61 >> +stream +x355W0PF +F +)\@>ehifY@Has`zr2 +endstream +endobj +2783 0 obj +<< /Filter /FlateDecode /Length 90 >> +stream +x= 0CLSTU׆|z[ȸ  څo'u`]^Bd;Jf&$qD;MJ +endstream +endobj +2784 0 obj +<< /Filter /FlateDecode /Length 170 >> +stream +x=K CBG[˙tc/DWt앇ƔhcO-\tNSf]a2oTafU317`*wr8ےlWaН0̑=Sss#_rkaЙ-eLal- Awz0A>d +endstream +endobj +2785 0 obj +<< /Filter /FlateDecode /Length 232 >> +stream +x=Kr! CBG> +stream +x5R;қASYyɤs6;,Bx!Q%O0^'w<ǻZT6mX& +F,Ǿ%xj=iŒLF$qz)߀4mN%I[Î/ 2HzRÒV scM$#V3\c$$ic%2OůZ1@6l'3E$7qMXsPR侻^+!Z1COYdA T3׾0NF wj+$vVJ9e9d;&l=7-+9dE)%C<(~# +endstream +endobj +2787 0 obj +<< /Filter /FlateDecode /Length 307 >> +stream +x=Kn1 C>.ٞ('%EjLYS4p;lffZb|F]Y'f:Q96M,.x&[?Р5. 7tWe)4c{2jL]lR{<^DUG"cA JhZwEA{ jȲ;)ftR.n!kB+%H؆3r'hލKh!n.`S:EbdNriUNPӹý lEC)s_ klxJ&KVۨN<Zt +endstream +endobj +2788 0 obj +<< /Filter /FlateDecode /Length 643 >> +stream +xMAe) Co [TZǹAHc VeH?͚8a(5ϲ,75f?o(uuG'*jbSFdخj m[]APoWF#"wϿt:+f+?v[mu7eymaIw+C3d NyZ^[ʈ3N7o]̷ѝJ jTY*0s #*4͑%H +H{QeNk{P=AN+ zWOZtQ^g|0%=qB> +xƉ)TG5XͻYK'`C:9;^ќp2 ڝ|Yô CׄLJl@ƹ߽;HY[DuL<зi+l?ЀP%9 + xPs}f~Pcl:!9R:vzN3`BS[̢9$|/IBgTU>ETM +`I> +stream +x5QIn0 'ŠR@%%bc#/195&~grW,OG­I^ve?3VΤƓ E6=<2%:0ufډ!#RF*Sms mNv{I疬eX=QK1}l'(l>jD(g(gU!h]ݧmcFJӿ MMD g4ϽN!T +endstream +endobj +2790 0 obj +<< /Filter /FlateDecode /Length 231 >> +stream +x5O9! y>0U@6N!x##fZd fSLſ" ap֬nvX6Y^LWg.ci9n]uSXG0 tÔ sTɎ28',v9~ 6!*z6yrA]E%  Qb_vt(sBA.!*PRQp>謟_\- +endstream +endobj +2791 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +x=P;D! 9/$#pF-f߮)PL~3$G 1%Bn CR zt6:3?a7cE1t=&9 +seVH'"3)*{x,6['= RRɥ?mʔ +:f,dM8˻IR2v"}<ȣ:dMά#Oۙp_dNt΃96Mi*/RZ~ugdZ" +endstream +endobj +2792 0 obj +<< /Filter /FlateDecode /Length 395 >> +stream +x=RKn@\yRUݼokCR*10}ʐK]qɷ^[<|.[Zy%>ܗ!]t.8G 2*DͪѡBN }9/װ =2A$)BnQAaPYQ2jo c BmH@DTg$gb`ѲTD{LjΨD>OM(L-VnS_|t*4U Xy9Hl!:n32`K9`GYutpL~OtZur@MAF2>)z,F3ar4k"X"bDls=L9l֡33*!ںj@vp?3m +endstream +endobj +2793 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +xMQI0 @!^CC9 X 1,=!s7~ٻYz"SQR.bB]ϡ=kY9,s3c}I2!N uZ¸kbZvBzM;" +2;-+{n?R\ +endstream +endobj +2794 0 obj +<< /Filter /FlateDecode /Length 94 >> +stream +xE TA + +O&2|` yF&^XJcP@r-p'TwiIU)ܤyg&yc c#< +endstream +endobj +2795 0 obj +<< /Filter /FlateDecode /Length 164 >> +stream +xEq1 C%0 +AzB bO°\WqatÏ-3 G2cX ' Ѥvb\/:"̒@#|:Ǔ3t^!**na.@RԏQꚡ*+kjW]J>.2NݽZὕ=?v: +endstream +endobj +2796 0 obj +<< /Filter /FlateDecode /Length 72 >> +stream +x32P0P4& +f +)\@B.H  %g m DDJ% +endstream +endobj +2797 0 obj +<< /Filter /FlateDecode /Length 163 >> +stream +xE;! C{N##>f2)6oclRX ڂ肇%gc6n5uVhR}ith6s+ fz:rCp_b9S6;ܬ~+UaiYK f@ S9ګ=? +: +endstream +endobj +2798 0 obj +<< /Filter /FlateDecode /Length 322 >> +stream +x5Qm0 50 ~% H;کHӼU^2\.u*YaCu|f!S֖{yJ,p 6s +QDnY@蚫Xb V)Xv$ r1YSE)|,ّZrY +n}a8쳋DyL$dl>[E6v8Ѐ$AS8>aj('89֯1 NKRWϠA3.IwcJd)6 +SbVofQlܠbod[7}_{d +endstream +endobj +2799 0 obj +<< /Filter /FlateDecode /Length 218 >> +stream +x=P1 ]XzgKH"ER*5)/u%YS:|ynd6%*E/% +}ՖC4h9~ 3*K6p*3 mtV[ Ф`׶ r " JMr^>C5Xs S'no^#]X.i5AMZ-^# @qRkp/'S +endstream +endobj +2800 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xE 0D{`~&>Q޿ %n'=\ )n3C ,]q0 \GPaվRBf +endstream +endobj +2801 0 obj +<< /Filter /FlateDecode /Length 239 >> +stream +xMPm1 +50<C hK[e#9oɺCNinͯ vPT%J\n4I/8k{Yx)=2f90=NƯ;$B +%+ۘRN-{|=ލF-j80SѕqCgGW4 zB59p`˳Re]:4J(^7 +endstream +endobj +2802 0 obj +<< /Filter /FlateDecode /Length 51 >> +stream +x36P0P040F@B!H Y@8&++ +endstream +endobj +2803 0 obj +<< /Filter /FlateDecode /Length 160 >> +stream +xE91s'H\˵G4Mzh>Fk,JDPc;(HLHcH#X]T*Ri¿ZDpTO\M1T;I^EZ1D0 oE&پ` +8 L7 +endstream +endobj +2804 0 obj +<< /Filter /FlateDecode /Length 334 >> +stream +x-RKr s +]3s--|FЀ_䟯imӮzL;lOs^&_Zg:R3s(VFv6Hj\loXJЅn\F#"<& +⏜r*aꚮtrUq53IfHy]8 Sfy'rԩgK9YhtNONW3!9 bZWib _SQSz;~,s|s +endstream +endobj +2805 0 obj +<< /Filter /FlateDecode /Length 70 >> +stream +x336S0P0 +F +)\@>,́,# .C c0mbl`fbdY 1 2 +endstream +endobj +2806 0 obj +<< /Filter /FlateDecode /Length 320 >> +stream +x5RKn1)@O󪪋okL0`)/YK%ۥ[%BޏR-G- +Q=X/":pJWIj3 P@ƻb2R$siqr&'=YߓKMNI]IJD}B<>G1ɀ6m&%:fU`)W l[00Sbbe5ˆQ]pwhcG i8^8^9c, ch&zОaZT| +endstream +endobj +2807 0 obj +<< /Filter /FlateDecode /Length 54 >> +stream +x366W0B]K#c R!Ő pYUp@i 4 +endstream +endobj +2808 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4R +endstream +endobj +2809 0 obj +<< /Filter /FlateDecode /Length 133 >> +stream +xEK!Dq2s퀝nc=T=.k!񷩖EY>TzRV!ܠ,I*!P-en6 S0l_["u?*/ȥֻޢ1 +endstream +endobj +2810 0 obj +<< /Filter /FlateDecode /Length 340 >> +stream +x5R9n1 +} n H qtR;ZTvˇTt7we ɫRHV!25gRqɂ?å X#D2f[~ix+-XR8y- +V~AG}TX IpPvH 9{,vQ3(1EA%9źtб،7:*[ZYc>,2zXtǃ 4 4e9QVxC 1! J<% _6?m^JkL +endstream +endobj +2811 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x-QIrA+fc+ @tZ⠌ ,W呫h31~+mX@T IcP5vzq ְ̓ f)1ge]=Aɬ\%La#g?2.s=7 FXanV34H!AF6r/tU1s-m_M8kX]q.'/6Qi@HnsxK{T`śn@6߼_`[ +endstream +endobj +2812 0 obj +<< /Filter /FlateDecode /Length 174 >> +stream +xMIC! C31Aݢ-Xvs21F<\d "]VYϷ;ݏf_=ŰWǁK^*%c"R6;Trݛ+pC#< +endstream +endobj +2813 0 obj +<< /Filter /FlateDecode /Length 75 >> +stream +x34R0P06fF +& +)\@>ehd +fpY)XX&fP!.cSs@EƦ`?++  +endstream +endobj +2814 0 obj +<< /Filter /FlateDecode /Length 89 >> +stream +x5 0 D{O! +ؿIpcݓ^R@:'A^ VEQIMESϦM'3uzZ(mp} +endstream +endobj +2815 0 obj +<< /Filter /FlateDecode /Length 141 >> +stream +x=0C +@)|Oj#K zcÆ`%Tk@%7ș`Gzb8\f}B%h{Siܦq5)ꜣg44s {Sw. +endstream +endobj +2816 0 obj +<< /Filter /FlateDecode /Length 215 >> +stream +x5Q9! @$/xO(͌V\!R!S>z.j4疴-s/fi<CѨQCԥS(>nc! b(,AͩEm'5^ޗSƖV8=O&t2ԫ5 E"<Z42j;0NqdJoWGT +endstream +endobj +2817 0 obj +<< /Filter /FlateDecode /Length 91 >> +stream +x5 0D{8m-=l`d#pSLRNw j7;%4z.qQ$D˕g_|> ob +endstream +endobj +2818 0 obj +<< /Filter /FlateDecode /Length 164 >> +stream +x=C!DV%@=drk@\d`;Q3gɃӱ4pok#Mx ac.UU׽cAi5 mځ?5ޣB(tneZ X> +stream +x355W0PF +F +)\@>ehifY@Has`zr2 +endstream +endobj +2820 0 obj +<< /Filter /FlateDecode /Length 341 >> +stream +x5R;қASYyɤs6;,Bx!Q%O0^'w<ǻZT6mX& +F,Ǿ%xj=iŒLF$qz)߀4mN%I[Î/ 2HzRÒV scM$#V3\c$$ic%2OůZ1@6l'3E$7qMXsPR侻^+!Z1COYdA T3׾0NF wj+$vVJ9e9d;&l=7-+9dE)%C<(~# +endstream +endobj +2821 0 obj +<< /Filter /FlateDecode /Length 307 >> +stream +x=Kn1 C>.ٞ('%EjLYS4p;lffZb|F]Y'f:Q96M,.x&[?Р5. 7tWe)4c{2jL]lR{<^DUG"cA JhZwEA{ jȲ;)ftR.n!kB+%H؆3r'hލKh!n.`S:EbdNriUNPӹý lEC)s_ klxJ&KVۨN<Zt +endstream +endobj +2822 0 obj +<< /Filter /FlateDecode /Length 232 >> +stream +x5QIn0 'ŠR@%%bc#/195&~grW,OG­I^ve?3VΤƓ E6=<2%:0ufډ!#RF*Sms mNv{I疬eX=QK1}l'(l>jD(g(gU!h]ݧmcFJӿ MMD g4ϽN!T +endstream +endobj +2823 0 obj +<< /Filter /FlateDecode /Length 73 >> +stream +x366W0P04FF +@V!HD! $bY@8&+i -*,lW +endstream +endobj +2824 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +x=P;D! 9/$#pF-f߮)PL~3$G 1%Bn CR zt6:3?a7cE1t=&9 +seVH'"3)*{x,6['= RRɥ?mʔ +:f,dM8˻IR2v"}<ȣ:dMά#Oۙp_dNt΃96Mi*/RZ~ugdZ" +endstream +endobj +2825 0 obj +<< /Filter /FlateDecode /Length 395 >> +stream +x=RKn@\yRUݼokCR*10}ʐK]qɷ^[<|.[Zy%>ܗ!]t.8G 2*DͪѡBN }9/װ =2A$)BnQAaPYQ2jo c BmH@DTg$gb`ѲTD{LjΨD>OM(L-VnS_|t*4U Xy9Hl!:n32`K9`GYutpL~OtZur@MAF2>)z,F3ar4k"X"bDls=L9l֡33*!ںj@vp?3m +endstream +endobj +2826 0 obj +<< /Filter /FlateDecode /Length 136 >> +stream +xMA1y@ @xVU_Kv ɀlQ%xE6g_R)b!Op0S)wcqj,hx^KM-w-oGm E- Bl2|Guill4I +endstream +endobj +2827 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +xMQI0 @!^CC9 X 1,=!s7~ٻYz"SQR.bB]ϡ=kY9,s3c}I2!N uZ¸kbZvBzM;" +2;-+{n?R\ +endstream +endobj +2828 0 obj +<< /Filter /FlateDecode /Length 94 >> +stream +xE TA + +O&2|` yF&^XJcP@r-p'TwiIU)ܤyg&yc c#< +endstream +endobj +2829 0 obj +<< /Filter /FlateDecode /Length 72 >> +stream +x32P0P4& +f +)\@B.H  %g m DDJ% +endstream +endobj +2830 0 obj +<< /Filter /FlateDecode /Length 47 >> +stream +x32P0P4& +f +)\V.L,іp +"g ' +endstream +endobj +2831 0 obj +<< /Filter /FlateDecode /Length 322 >> +stream +x5Qm0 50 ~% H;کHӼU^2\.u*YaCu|f!S֖{yJ,p 6s +QDnY@蚫Xb V)Xv$ r1YSE)|,ّZrY +n}a8쳋DyL$dl>[E6v8Ѐ$AS8>aj('89֯1 NKRWϠA3.IwcJd)6 +SbVofQlܠbod[7}_{d +endstream +endobj +2832 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xE 0D{`~&>Q޿ %n'=\ )n3C ,]q0 \GPaվRBf +endstream +endobj +2833 0 obj +<< /Filter /FlateDecode /Length 239 >> +stream +xMPm1 +50<C hK[e#9oɺCNinͯ vPT%J\n4I/8k{Yx)=2f90=NƯ;$B +%+ۘRN-{|=ލF-j80SѕqCgGW4 zB59p`˳Re]:4J(^7 +endstream +endobj +2834 0 obj +<< /Filter /FlateDecode /Length 51 >> +stream +x36P0P040F@B!H Y@8&++ +endstream +endobj +2835 0 obj +<< /Filter /FlateDecode /Length 160 >> +stream +xE91s'H\˵G4Mzh>Fk,JDPc;(HLHcH#X]T*Ri¿ZDpTO\M1T;I^EZ1D0 oE&پ` +8 L7 +endstream +endobj +2836 0 obj +<< /Filter /FlateDecode /Length 334 >> +stream +x-RKr s +]3s--|FЀ_䟯imӮzL;lOs^&_Zg:R3s(VFv6Hj\loXJЅn\F#"<& +⏜r*aꚮtrUq53IfHy]8 Sfy'rԩgK9YhtNONW3!9 bZWib _SQSz;~,s|s +endstream +endobj +2837 0 obj +<< /Filter /FlateDecode /Length 70 >> +stream +x336S0P0 +F +)\@>,́,# .C c0mbl`fbdY 1 2 +endstream +endobj +2838 0 obj +<< /Filter /FlateDecode /Length 320 >> +stream +x5RKn1)@O󪪋okL0`)/YK%ۥ[%BޏR-G- +Q=X/":pJWIj3 P@ƻb2R$siqr&'=YߓKMNI]IJD}B<>G1ɀ6m&%:fU`)W l[00Sbbe5ˆQ]pwhcG i8^8^9c, ch&zОaZT| +endstream +endobj +2839 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4R +endstream +endobj +2840 0 obj +<< /Filter /FlateDecode /Length 133 >> +stream +xEK!Dq2s퀝nc=T=.k!񷩖EY>TzRV!ܠ,I*!P-en6 S0l_["u?*/ȥֻޢ1 +endstream +endobj +2841 0 obj +<< /Filter /FlateDecode /Length 340 >> +stream +x5R9n1 +} n H qtR;ZTvˇTt7we ɫRHV!25gRqɂ?å X#D2f[~ix+-XR8y- +V~AG}TX IpPvH 9{,vQ3(1EA%9źtб،7:*[ZYc>,2zXtǃ 4 4e9QVxC 1! J<% _6?m^JkL +endstream +endobj +2842 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x-QIrA+fc+ @tZ⠌ ,W呫h31~+mX@T IcP5vzq ְ̓ f)1ge]=Aɬ\%La#g?2.s=7 FXanV34H!AF6r/tU1s-m_M8kX]q.'/6Qi@HnsxK{T`śn@6߼_`[ +endstream +endobj +2843 0 obj +<< /Filter /FlateDecode /Length 174 >> +stream +xMIC! C31Aݢ-Xvs21F<\d "]VYϷ;ݏf_=ŰWǁK^*%c"R6;Trݛ+pC#< +endstream +endobj +2844 0 obj +<< /Filter /FlateDecode /Length 75 >> +stream +x34R0P06fF +& +)\@>ehd +fpY)XX&fP!.cSs@EƦ`?++  +endstream +endobj +2845 0 obj +<< /Filter /FlateDecode /Length 141 >> +stream +x=0C +@)|Oj#K zcÆ`%Tk@%7ș`Gzb8\f}B%h{Siܦq5)ꜣg44s {Sw. +endstream +endobj +2846 0 obj +<< /Filter /FlateDecode /Length 215 >> +stream +x5Q9! @$/xO(͌V\!R!S>z.j4疴-s/fi<CѨQCԥS(>nc! b(,AͩEm'5^ޗSƖV8=O&t2ԫ5 E"<Z42j;0NqdJoWGT +endstream +endobj +2847 0 obj +<< /Filter /FlateDecode /Length 76 >> +stream +x357U0P +F +)\@>L̀,CKd!eba26"X@lM 45 +endstream +endobj +2848 0 obj +<< /Filter /FlateDecode /Length 232 >> +stream +x=Kr! CBG> +stream +x5R;қASYyɤs6;,Bx!Q%O0^'w<ǻZT6mX& +F,Ǿ%xj=iŒLF$qz)߀4mN%I[Î/ 2HzRÒV scM$#V3\c$$ic%2OůZ1@6l'3E$7qMXsPR侻^+!Z1COYdA T3׾0NF wj+$vVJ9e9d;&l=7-+9dE)%C<(~# +endstream +endobj +2850 0 obj +<< /Filter /FlateDecode /Length 66 >> +stream +x334T0P5f& +F +)\@>L̀,cSS$625pDWRk +endstream +endobj +2851 0 obj +<< /Filter /FlateDecode /Length 92 >> +stream +x= 0LTU&`a57EVEPX]GLO;Rtp8M_J +endstream +endobj +2852 0 obj +<< /Filter /FlateDecode /Length 232 >> +stream +x5QIn0 'ŠR@%%bc#/195&~grW,OG­I^ve?3VΤƓ E6=<2%:0ufډ!#RF*Sms mNv{I疬eX=QK1}l'(l>jD(g(gU!h]ݧmcFJӿ MMD g4ϽN!T +endstream +endobj +2853 0 obj +<< /Filter /FlateDecode /Length 231 >> +stream +x5O9! y>0U@6N!x##fZd fSLſ" ap֬nvX6Y^LWg.ci9n]uSXG0 tÔ sTɎ28',v9~ 6!*z6yrA]E%  Qb_vt(sBA.!*PRQp>謟_\- +endstream +endobj +2854 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +x=P;D! 9/$#pF-f߮)PL~3$G 1%Bn CR zt6:3?a7cE1t=&9 +seVH'"3)*{x,6['= RRɥ?mʔ +:f,dM8˻IR2v"}<ȣ:dMά#Oۙp_dNt΃96Mi*/RZ~ugdZ" +endstream +endobj +2855 0 obj +<< /Filter /FlateDecode /Length 395 >> +stream +x=RKn@\yRUݼokCR*10}ʐK]qɷ^[<|.[Zy%>ܗ!]t.8G 2*DͪѡBN }9/װ =2A$)BnQAaPYQ2jo c BmH@DTg$gb`ѲTD{LjΨD>OM(L-VnS_|t*4U Xy9Hl!:n32`K9`GYutpL~OtZur@MAF2>)z,F3ar4k"X"bDls=L9l֡33*!ںj@vp?3m +endstream +endobj +2856 0 obj +<< /Filter /FlateDecode /Length 136 >> +stream +xMA1y@ @xVU_Kv ɀlQ%xE6g_R)b!Op0S)wcqj,hx^KM-w-oGm E- Bl2|Guill4I +endstream +endobj +2857 0 obj +<< /Filter /FlateDecode /Length 94 >> +stream +xE TA + +O&2|` yF&^XJcP@r-p'TwiIU)ܤyg&yc c#< +endstream +endobj +2858 0 obj +<< /Filter /FlateDecode /Length 164 >> +stream +xEq1 C%0 +AzB bO°\WqatÏ-3 G2cX ' Ѥvb\/:"̒@#|:Ǔ3t^!**na.@RԏQꚡ*+kjW]J>.2NݽZὕ=?v: +endstream +endobj +2859 0 obj +<< /Filter /FlateDecode /Length 72 >> +stream +x32P0P4& +f +)\@B.H  %g m DDJ% +endstream +endobj +2860 0 obj +<< /Filter /FlateDecode /Length 47 >> +stream +x32P0P4& +f +)\V.L,іp +"g ' +endstream +endobj +2861 0 obj +<< /Filter /FlateDecode /Length 163 >> +stream +xE;! C{N##>f2)6oclRX ڂ肇%gc6n5uVhR}ith6s+ fz:rCp_b9S6;ܬ~+UaiYK f@ S9ګ=? +: +endstream +endobj +2862 0 obj +<< /Filter /FlateDecode /Length 218 >> +stream +x=P1 ]XzgKH"ER*5)/u%YS:|ynd6%*E/% +}ՖC4h9~ 3*K6p*3 mtV[ Ф`׶ r " JMr^>C5Xs S'no^#]X.i5AMZ-^# @qRkp/'S +endstream +endobj +2863 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xE 0D{`~&>Q޿ %n'=\ )n3C ,]q0 \GPaվRBf +endstream +endobj +2864 0 obj +<< /Filter /FlateDecode /Length 239 >> +stream +xMPm1 +50<C hK[e#9oɺCNinͯ vPT%J\n4I/8k{Yx)=2f90=NƯ;$B +%+ۘRN-{|=ލF-j80SѕqCgGW4 zB59p`˳Re]:4J(^7 +endstream +endobj +2865 0 obj +<< /Filter /FlateDecode /Length 243 >> +stream +xMQ1 =8پy.xxe6DCISda}JFH.mKl<7BSkꔫS,MY{U7^QUa;`k&lQ "1P3i +s1g* N*W/e*x0"?h_x)Bܕz!Mc,\wLtX ! ^p֍ #^ӰwEu[Ɣ}Q}]'{]^ +endstream +endobj +2866 0 obj +<< /Filter /FlateDecode /Length 160 >> +stream +xE91s'H\˵G4Mzh>Fk,JDPc;(HLHcH#X]T*Ri¿ZDpTO\M1T;I^EZ1D0 oE&پ` +8 L7 +endstream +endobj +2867 0 obj +<< /Filter /FlateDecode /Length 334 >> +stream +x-RKr s +]3s--|FЀ_䟯imӮzL;lOs^&_Zg:R3s(VFv6Hj\loXJЅn\F#"<& +⏜r*aꚮtrUq53IfHy]8 Sfy'rԩgK9YhtNONW3!9 bZWib _SQSz;~,s|s +endstream +endobj +2868 0 obj +<< /Filter /FlateDecode /Length 320 >> +stream +x5RKn1)@O󪪋okL0`)/YK%ۥ[%BޏR-G- +Q=X/":pJWIj3 P@ƻb2R$siqr&'=YߓKMNI]IJD}B<>G1ɀ6m&%:fU`)W l[00Sbbe5ˆQ]pwhcG i8^8^9c, ch&zОaZT| +endstream +endobj +2869 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4R +endstream +endobj +2870 0 obj +<< /Filter /FlateDecode /Length 133 >> +stream +xEK!Dq2s퀝nc=T=.k!񷩖EY>TzRV!ܠ,I*!P-en6 S0l_["u?*/ȥֻޢ1 +endstream +endobj +2871 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x-QIrA+fc+ @tZ⠌ ,W呫h31~+mX@T IcP5vzq ְ̓ f)1ge]=Aɬ\%La#g?2.s=7 FXanV34H!AF6r/tU1s-m_M8kX]q.'/6Qi@HnsxK{T`śn@6߼_`[ +endstream +endobj +2872 0 obj +<< /Filter /FlateDecode /Length 174 >> +stream +xMIC! C31Aݢ-Xvs21F<\d "]VYϷ;ݏf_=ŰWǁK^*%c"R6;Trݛ+pC#< +endstream +endobj +2873 0 obj +<< /Filter /FlateDecode /Length 141 >> +stream +x=0C +@)|Oj#K zcÆ`%Tk@%7ș`Gzb8\f}B%h{Siܦq5)ꜣg44s {Sw. +endstream +endobj +2874 0 obj +<< /Filter /FlateDecode /Length 215 >> +stream +x5Q9! @$/xO(͌V\!R!S>z.j4疴-s/fi<CѨQCԥS(>nc! b(,AͩEm'5^ޗSƖV8=O&t2ԫ5 E"<Z42j;0NqdJoWGT +endstream +endobj +2875 0 obj +<< /Filter /FlateDecode /Length 76 >> +stream +x357U0P +F +)\@>L̀,CKd!eba26"X@lM 45 +endstream +endobj +2876 0 obj +<< /Filter /FlateDecode /Length 341 >> +stream +x5R;қASYyɤs6;,Bx!Q%O0^'w<ǻZT6mX& +F,Ǿ%xj=iŒLF$qz)߀4mN%I[Î/ 2HzRÒV scM$#V3\c$$ic%2OůZ1@6l'3E$7qMXsPR侻^+!Z1COYdA T3׾0NF wj+$vVJ9e9d;&l=7-+9dE)%C<(~# +endstream +endobj +2877 0 obj +<< /Filter /FlateDecode /Length 66 >> +stream +x334T0P5f& +F +)\@>L̀,cSS$625pDWRk +endstream +endobj +2878 0 obj +<< /Filter /FlateDecode /Length 92 >> +stream +x= 0LTU&`a57EVEPX]GLO;Rtp8M_J +endstream +endobj +2879 0 obj +<< /Filter /FlateDecode /Length 307 >> +stream +x=Kn1 C>.ٞ('%EjLYS4p;lffZb|F]Y'f:Q96M,.x&[?Р5. 7tWe)4c{2jL]lR{<^DUG"cA JhZwEA{ jȲ;)ftR.n!kB+%H؆3r'hލKh!n.`S:EbdNriUNPӹý lEC)s_ klxJ&KVۨN<Zt +endstream +endobj +2880 0 obj +<< /Filter /FlateDecode /Length 232 >> +stream +x5QIn0 'ŠR@%%bc#/195&~grW,OG­I^ve?3VΤƓ E6=<2%:0ufډ!#RF*Sms mNv{I疬eX=QK1}l'(l>jD(g(gU!h]ݧmcFJӿ MMD g4ϽN!T +endstream +endobj +2881 0 obj +<< /Filter /FlateDecode /Length 231 >> +stream +x5O9! y>0U@6N!x##fZd fSLſ" ap֬nvX6Y^LWg.ci9n]uSXG0 tÔ sTɎ28',v9~ 6!*z6yrA]E%  Qb_vt(sBA.!*PRQp>謟_\- +endstream +endobj +2882 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +x=P;D! 9/$#pF-f߮)PL~3$G 1%Bn CR zt6:3?a7cE1t=&9 +seVH'"3)*{x,6['= RRɥ?mʔ +:f,dM8˻IR2v"}<ȣ:dMά#Oۙp_dNt΃96Mi*/RZ~ugdZ" +endstream +endobj +2883 0 obj +<< /Filter /FlateDecode /Length 395 >> +stream +x=RKn@\yRUݼokCR*10}ʐK]qɷ^[<|.[Zy%>ܗ!]t.8G 2*DͪѡBN }9/װ =2A$)BnQAaPYQ2jo c BmH@DTg$gb`ѲTD{LjΨD>OM(L-VnS_|t*4U Xy9Hl!:n32`K9`GYutpL~OtZur@MAF2>)z,F3ar4k"X"bDls=L9l֡33*!ںj@vp?3m +endstream +endobj +2884 0 obj +<< /Filter /FlateDecode /Length 136 >> +stream +xMA1y@ @xVU_Kv ɀlQ%xE6g_R)b!Op0S)wcqj,hx^KM-w-oGm E- Bl2|Guill4I +endstream +endobj +2885 0 obj +<< /Filter /FlateDecode /Length 94 >> +stream +xE TA + +O&2|` yF&^XJcP@r-p'TwiIU)ܤyg&yc c#< +endstream +endobj +2886 0 obj +<< /Filter /FlateDecode /Length 164 >> +stream +xEq1 C%0 +AzB bO°\WqatÏ-3 G2cX ' Ѥvb\/:"̒@#|:Ǔ3t^!**na.@RԏQꚡ*+kjW]J>.2NݽZὕ=?v: +endstream +endobj +2887 0 obj +<< /Filter /FlateDecode /Length 72 >> +stream +x32P0P4& +f +)\@B.H  %g m DDJ% +endstream +endobj +2888 0 obj +<< /Filter /FlateDecode /Length 163 >> +stream +xE;! C{N##>f2)6oclRX ڂ肇%gc6n5uVhR}ith6s+ fz:rCp_b9S6;ܬ~+UaiYK f@ S9ګ=? +: +endstream +endobj +2889 0 obj +<< /Filter /FlateDecode /Length 218 >> +stream +x=P1 ]XzgKH"ER*5)/u%YS:|ynd6%*E/% +}ՖC4h9~ 3*K6p*3 mtV[ Ф`׶ r " JMr^>C5Xs S'no^#]X.i5AMZ-^# @qRkp/'S +endstream +endobj +2890 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xE 0D{`~&>Q޿ %n'=\ )n3C ,]q0 \GPaվRBf +endstream +endobj +2891 0 obj +<< /Filter /FlateDecode /Length 239 >> +stream +xMPm1 +50<C hK[e#9oɺCNinͯ vPT%J\n4I/8k{Yx)=2f90=NƯ;$B +%+ۘRN-{|=ލF-j80SѕqCgGW4 zB59p`˳Re]:4J(^7 +endstream +endobj +2892 0 obj +<< /Filter /FlateDecode /Length 243 >> +stream +xMQ1 =8پy.xxe6DCISda}JFH.mKl<7BSkꔫS,MY{U7^QUa;`k&lQ "1P3i +s1g* N*W/e*x0"?h_x)Bܕz!Mc,\wLtX ! ^p֍ #^ӰwEu[Ɣ}Q}]'{]^ +endstream +endobj +2893 0 obj +<< /Filter /FlateDecode /Length 54 >> +stream +x327U0P4S01P04T07TH11s,dTˁJ$W +endstream +endobj +2894 0 obj +<< /Filter /FlateDecode /Length 160 >> +stream +xE91s'H\˵G4Mzh>Fk,JDPc;(HLHcH#X]T*Ri¿ZDpTO\M1T;I^EZ1D0 oE&پ` +8 L7 +endstream +endobj +2895 0 obj +<< /Filter /FlateDecode /Length 334 >> +stream +x-RKr s +]3s--|FЀ_䟯imӮzL;lOs^&_Zg:R3s(VFv6Hj\loXJЅn\F#"<& +⏜r*aꚮtrUq53IfHy]8 Sfy'rԩgK9YhtNONW3!9 bZWib _SQSz;~,s|s +endstream +endobj +2896 0 obj +<< /Filter /FlateDecode /Length 320 >> +stream +x5RKn1)@O󪪋okL0`)/YK%ۥ[%BޏR-G- +Q=X/":pJWIj3 P@ƻb2R$siqr&'=YߓKMNI]IJD}B<>G1ɀ6m&%:fU`)W l[00Sbbe5ˆQ]pwhcG i8^8^9c, ch&zОaZT| +endstream +endobj +2897 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4R +endstream +endobj +2898 0 obj +<< /Filter /FlateDecode /Length 133 >> +stream +xEK!Dq2s퀝nc=T=.k!񷩖EY>TzRV!ܠ,I*!P-en6 S0l_["u?*/ȥֻޢ1 +endstream +endobj +2899 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x-QIrA+fc+ @tZ⠌ ,W呫h31~+mX@T IcP5vzq ְ̓ f)1ge]=Aɬ\%La#g?2.s=7 FXanV34H!AF6r/tU1s-m_M8kX]q.'/6Qi@HnsxK{T`śn@6߼_`[ +endstream +endobj +2900 0 obj +<< /Filter /FlateDecode /Length 174 >> +stream +xMIC! C31Aݢ-Xvs21F<\d "]VYϷ;ݏf_=ŰWǁK^*%c"R6;Trݛ+pC#< +endstream +endobj +2901 0 obj +<< /Filter /FlateDecode /Length 141 >> +stream +x=0C +@)|Oj#K zcÆ`%Tk@%7ș`Gzb8\f}B%h{Siܦq5)ꜣg44s {Sw. +endstream +endobj +2902 0 obj +<< /Filter /FlateDecode /Length 215 >> +stream +x5Q9! @$/xO(͌V\!R!S>z.j4疴-s/fi<CѨQCԥS(>nc! b(,AͩEm'5^ޗSƖV8=O&t2ԫ5 E"<Z42j;0NqdJoWGT +endstream +endobj +2903 0 obj +<< /Filter /FlateDecode /Length 113 >> +stream +xE VAPOd0j[ +E:`*0%7!T2=u6=!O:r XGHl?xnXTILu`) +endstream +endobj +2904 0 obj +<< /Filter /FlateDecode /Length 247 >> +stream +x=QKj1 @!;Rxr=bٖS'/1ŷ4 #B߳@vNnL" +?&ODL+` Tқɏ8D*/ +=(KɛTEI"Y6.Ls ZF)HǐVc-8E&>f$ls1{|h6"h.-G3H|2jDo5Va7:cc)3&9}X~V +endstream +endobj +2905 0 obj +<< /Filter /FlateDecode /Length 170 >> +stream +xEK0C>G`~IErmzc@N:hH1 +)zPI{h93`JJBJdrvn[W@3a3׌U`} <=׻ݐunA6yꭊQmuG LM&+ sC5?; +endstream +endobj +2906 0 obj +<< /Filter /FlateDecode /Length 112 >> +stream +xMK 9` |~70PԍqxlN O|eхHF|"6&U&Y&MkjRaMlMKRgH<\}x?np2Q +endstream +endobj +2907 0 obj +<< /Filter /FlateDecode /Length 255 >> +stream +xEm0 DbX8rpf >[pH RGw_jo~W#+PQ|-bj;{/T6\-|T濣S'$f(O\ j6j^R$d½b@!D!G'=ܐ`Ȁ5PL:`lI3y«jfcq"M>d,qnA[ icL+7~'؞[`mULPFg؋f58.kh5Icg?] +endstream +endobj +2908 0 obj +<< /Filter /FlateDecode /Length 112 >> +stream +xMϽ )Q'KEF=3 *GGJf3"6%S&)KSl [a`> +stream +x31P0P01FF +F +)\`~.2T241@0 ,d@CXIc# $)L΀2R: +endstream +endobj +2910 0 obj +<< /Filter /FlateDecode /Length 118 >> +stream +xUM ཧziQhm<ac_Nel1Uʂj)ƚihB>?Y3 +endstream +endobj +2911 0 obj +<< /Filter /FlateDecode /Length 184 >> +stream +xEu0 C廒%P$㼼9Lf96@Zi e %?s%/yZ +B(P)j +D{,u)},s+HA_gnq­&m7=:`D}85q*ބeS$j+%vH =aj4ܭ'h"T{> +stream +x=QmD1 =x HqRև*S޲lI#9T /sHY[^K4H2A5;]Rț\jG#OGC½HxUMUf(b> +stream +xEQ; 9yf߾)oWd)6-gڐ.^.-Hk L%JvZ*@ćxn]ҁDnU)n *!&֩mLtK⫙vmlz`/ɺSB i7;zDm֤pȲs4çjf14{Kg>^f`Ӷt3́my!Qn6 ߽k?Z&\TɀC<{<+x0?ykd +endstream +endobj +2914 0 obj +<< /Filter /FlateDecode /Length 352 >> +stream +x5Kn$ADy +.Ryjdb|G, m&S֒:d{|WyPQt=Ex]rRaGN*<#f!6|]ܢoΖRz)fJg K1r}i[Q/r-uwyś6TfY%U锭S-,ٸc$)361 +p-z I2TC,/1IpzPlPy_cYlYmYUk[Vlk1)\Ql6,Q|a?xziXJg ۳g +gc7$ʜӰ.KԹ9YށqvjP;Gr3{ +endstream +endobj +2915 0 obj +<< /Filter /FlateDecode /Length 90 >> +stream +xMν О)AA>>\ +F?6nbKi_O. H2Ӕa'C@KJ}[ս>0SJ +endstream +endobj +2916 0 obj +<< /Filter /FlateDecode /Length 313 >> +stream +x=Kn0 C>.0}.ߖT.2$HWl*/u)KIwґz]>fB}>E!ӤB^%KlV547**8#N*_摂OmsbZC +sd BBk݄p '&!!B#0SOqP/kh@y@ x +endstream +endobj +2917 0 obj +<< /Filter /FlateDecode /Length 241 >> +stream +x=QArE!{\3<D`̓ >,Ed>m4rLMGz!77b C}G#3> +stream +xMQ9n1 +~/Ql`pf HJsl-*iZ%TloH>n9%$-Vr>eH:sIu↋OINT>V9&@FnX0Y +G˛uPf2eB )V=^174*KbS4g$( +DXB6YJ1dOK܌C +f;^^h65%NN8/m9@6jpP*Ck<Nd +endstream +endobj +2919 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x=Q;n0 s +^u|%C "(h  o;r|~79tdL\GBv"r"牰^= xp]C9$ɣcًF6:k HTQQ[PZ R9 kkJjȼNMf2*Q~cWy18+!Hi5yPc6-aV*7Fo4Pc4sgw7i~^D\, +endstream +endobj +2920 0 obj +<< /Filter /FlateDecode /Length 394 >> +stream +x=RIn1+@$~OGQ.kpw ]dH|K[_K>W%YS> +stream +xMm1 DsU1%wYpp?Py/? M'&TX2&d43ֵE +;Lf"*pq49ʪ̰{+2YX +VcUO+:MI>O;lYf=pzU8vC(L %}Dҟ`Ebiy_g|L' +endstream +endobj +2922 0 obj +<< /Filter /FlateDecode /Length 260 >> +stream +xMMn! xpWU]L■Ԫ o 81D*^bX:CF,onZS ɽ<6T|O{'CsAO{\3+p5q=jU+" ֲu<&]J=/;.3r +(Dr&U2*CAli@Z暓99K4 lg1:󕅶DE6 + rn⋻ʛM` "ٕuH(ǒ=aH9}` +endstream +endobj +2923 0 obj +<< /Filter /FlateDecode /Length 107 >> +stream +xM TA O& DЮʄG-T#t²!w22ơRҏx̦Wdsir5S{}o7P) +endstream +endobj +2924 0 obj +<< /Filter /FlateDecode /Length 56 >> +stream +x314U0P05Q020R063T066QH1X\00 * <*++ ' +endstream +endobj +2925 0 obj +<< /Filter /FlateDecode /Length 166 >> +stream +xEO03#6`ϓ^/foMۇ- !>w~(m rґ[+2fӚ0[c)b۵k6DjMHf9zO!`sW&*GSi˥>栓l)CvQ +j" ]VY2nkϊ|? +endstream +endobj +2926 0 obj +<< /Filter /FlateDecode /Length 124 >> +stream +xM;! C{N#/>L&RH2#:50uxac+zLqYXiA4(H&4Rc~ItCe,C/`r MUMZf|sC4} +endstream +endobj +2927 0 obj +<< /Filter /FlateDecode /Length 73 >> +stream +x30P0P06 +f +)\F + +\ 1 #0&0 +,lh``B 3biXyWp +endstream +endobj +2928 0 obj +<< /Filter /FlateDecode /Length 283 >> +stream +xEKr GAXF$XkƃĂL,0=N%̓K]57&%F"A:=8]6:O{r8B<8 D.B|D |&:YҍcsTziyk^ /MYɓ—R&M~)Y6%MRؔ36eI% LɕcNi|% Tǟd)^*$P@Bb7%.j6նӿ܀; +endstream +endobj +2929 0 obj +<< /Filter /FlateDecode /Length 190 >> +stream +xMA! CG6p\u\@RRChH7hUR|˳.t? ;]L1u^bQ9)`­h>F9wg/^x +F=O`¹ _Sx +q3d m v4( ;WnKKOZQ-6_]q^me>h7uK +endstream +endobj +2930 0 obj +<< /Filter /FlateDecode /Length 326 >> +stream +x=Rm@ +5``tUAIߐM^GIdIRC/zR~._{=(KZ +E24⑬" *|x3⺅S}cbݼ3 3u!fV {7N![uEBEoh {vK,r|4ksD@{֚U]lI'4L6lt5)K76 5) Il˶Ts163@U2 X57>:yCv=*SǏ!X!ߗz4cXh_`> +stream +x5PK1)@̜U6aOT-Kam;^8"#Zv =me9ttZ ##ג$3G,4e4j!oጒƕ}79D62KF}> +stream +xE͹ 0)>Q޿ %nq 1gt(E@Y؝m=p-Ւ'Nɰ>@scuǨX +endstream +endobj +2933 0 obj +<< /Filter /FlateDecode /Length 275 >> +stream +xURIn0 @ߓb0)=$bLIĤFMaF_2tx}dNF2tNݤHXƋf6,W{8+$J:4@g@&ũ2l/M =HEW-SFm(u\YW<Ђ6C&*ayG -u4ͽL Cp%UD5AE\GǕm,Jm'ϳF/d[]}Ys<~CkG +endstream +endobj +2934 0 obj +<< /Filter /FlateDecode /Length 153 >> +stream +x= 1 C{O XkAm$_!R`!̠L_xhyv!Ԓ̉i +%*紳,u 8]qm)9Kqb!z" gPQx ~=VT}m4dFC)k .0 +endstream +endobj +2935 0 obj +<< /Filter /FlateDecode /Length 151 >> +stream +x5OI! +) =SzhSLČk|.=A4C"iRJrdc< C.v)JbV$҄ GƄD,ĩ YNo#]A-ƞ=`rWZ]0 +endstream +endobj +2936 0 obj +<< /Filter /FlateDecode /Length 408 >> +stream +x5RIn0 @[E_K!gLQC4ٚR=/)M\CrM5%c}%ש< .@GUmp}'ohhU3&A'9ިBT7}v6CjdR,X,TB𱞙DdBP'@ў@T7f‡LSR>\턏Gmw=3-8sJw,-<+v- +DH XM"[ +endstream +endobj +2937 0 obj +<< /Filter /FlateDecode /Length 132 >> +stream +x5 0 C dǟyRtkD?n}jk1e3Vv`\u| Rb';'w o9%c0 $I<Á-." 4 [=1?pOyɰ*! +endstream +endobj +2938 0 obj +<< /Filter /FlateDecode /Length 180 >> +stream +xEPI1<򞩪’ b_syVB| n{ :1M B@WU£bD>T4]|lE4/Th}6'qA?Hn=rY&L9s +tf9xQ_d}5VS Gr]hD7 +endstream +endobj +2939 0 obj +<< /Filter /FlateDecode /Length 350 >> +stream +x=I$A +>Pk,Vk5AEXD yYHKEȷ=JN\*sd|=kHHgh-4 _RtdoQ)N0η +C#kr/Ä'vcO{KooTٗJ΢ݦZ%霷]! ` +`(f$KvV̱ *XwLX6*"(rM9Y3/T +endstream +endobj +2940 0 obj +<< /Filter /FlateDecode /Length 79 >> +stream +xM̱ 0D`}(޿ HÉiE AK.Ahc+umd!%Ru:y I +endstream +endobj +2941 0 obj +<< /Filter /FlateDecode /Length 329 >> +stream +x5RKn@@?sTOo[ô`!y iC|ʣpS|?=O k}̍hÊ_6U%*'}R( D!e) ̇*9񥮋$!P%U`.ݾN!7Gw^W֦5}ЄtفsUe1%J3Q#QlTэ]?gD|Y+\m (qjQ2o}wO{of\BGnᚘ u:Kި6#>+zvSlÅnI3c7SS> +stream +x363U0B]K#c R!Ő pXp@i 4 +V +endstream +endobj +2943 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4U +endstream +endobj +2944 0 obj +<< /Filter /FlateDecode /Length 176 >> +stream +xMK0D>\󤪺H퐤yPM >3;ւώWT YJ_lJt.. ?׋քƠ4Yؚf ak}$? +endstream +endobj +2945 0 obj +<< /Filter /FlateDecode /Length 351 >> +stream +x5R9n1 +} nI rl-*[B:\v|:#ȶ+[܀Ȯ ++m˓i0[}ԥ V+nbA$}*RKRd=і@|!.%1ޙ+nސAikHEfܢ>& <*ąG "oƆɲ4`$L,0 +'0`2'x蔘> +stream +xEQKr0:yo+vA,$ȚN+d)?ņ! EiAZPf&jhMd-7r!&+Qh"Y5ȫXO%΂*LVYAPeP8=Ș + {)s',3lp`brT 9wKeN3oe_o$ w< +2x!wrObaMZ߿#R +endstream +endobj +2947 0 obj +<< /Filter /FlateDecode /Length 178 >> +stream +xMM! Db.`B<1.[y}%4Сf$&}(j >V.n&h$;޴ZD&'V&qA)Q={HEh!vM䞚ԙQANn!(`Zr2U˳ز?:&|g{|YCc +endstream +endobj +2948 0 obj +<< /Filter /FlateDecode /Length 129 >> +stream +xM 1DTA 0O_,Kwa鯈q/% e3܍7zFqAC ]¨=s ҃]0p5RrJߛu`咕=vi 8hh}߼ч_7D +endstream +endobj +2949 0 obj +<< /Filter /FlateDecode /Length 208 >> +stream +xMAv C{H&gH■> +stream +x5Pm0 g +.PIQTR y^ y-ϵv t$r0=W6D1bĉ>I2F$; Z4mͰԍqc0OVGHb(n:Z0 5-r_I5?Tf%4ǖf1`'zn2DQI["$[1B7J"5T4S +endstream +endobj +2951 0 obj +<< /Filter /FlateDecode /Length 643 >> +stream +xMAe) Co [TZǹAHc VeH?͚8a(5ϲ,75f?o(uuG'*jbSFdخj m[]APoWF#"wϿt:+f+?v[mu7eymaIw+C3d NyZ^[ʈ3N7o]̷ѝJ jTY*0s #*4͑%H +H{QeNk{P=AN+ zWOZtQ^g|0%=qB> +xƉ)TG5XͻYK'`C:9;^ќp2 ڝ|Yô CׄLJl@ƹ߽;HY[DuL<зi+l?ЀP%9 + xPs}f~Pcl:!9R:vzN3`BS[̢9$|/IBgTU>ETM +`I> +stream +xE 0D{`~&>Q޿ %n'=\ )n3C ,]q0 \GPaվRBf +endstream +endobj +2953 0 obj +<< /Filter /FlateDecode /Length 150 >> +stream +x=O90 +~ uXޓ"xȲc1I4@,#zB0,p6IAVIW>[L!^H<MdLjR[uU$] cp=a5z0cGUKnv}`0] +endstream +endobj +2954 0 obj +<< /Filter /FlateDecode /Length 151 >> +stream +x5 0 C ϲ$#I9P7OhL 3Ke> +stream +x=;D1s#h>>[&?]`4K`Cٷ&:|3~ CƠ`%!OgY* 퓆N<dRA)w%1,iMwxi5v+uk 9@UUCAjI&n[% ' #o?KOwP9z&O>_64> +endstream +endobj +2956 0 obj +<< /Filter /FlateDecode /Length 354 >> +stream +x=Kr1Ds +.*☋ҏ7fͨYEGYN@ud̤h|TlJA^gO?凕 +endstream +endobj +2957 0 obj +<< /Filter /FlateDecode /Length 290 >> +stream +x5m#A EO`VK<=0|>XߨgCzZʶ2cȃ|6H8 3 +GCQV9:t}tgI`aC7]Nks jC DN`|1> +stream +x=Kn@D>> +stream +x= @s rp?!v  _xP606BW?DSN)iFNxL~ +endstream +endobj +2960 0 obj +<< /Filter /FlateDecode /Length 54 >> +stream +x32P0P06F +f +)\f.L0(BpepЮ t +endstream +endobj +2961 0 obj +<< /Filter /FlateDecode /Length 216 >> +stream +x=P11 +`@bML +[ !MKc޴ev,1qu-OaZ.Z^[\fQN}NGI{+3\ey|Fӑ%S9 Sj eB2p4nœٻ]Rl5!SL3ds e4kbBJ5~; N +endstream +endobj +2962 0 obj +<< /Filter /FlateDecode /Length 166 >> +stream +x=K1C90s.dnbA#e-b`pt4q nEKFREz[kܰɘ#c9N~jڄ4!d}@j}G!,Q*}* KWuPAn8& +endstream +endobj +2963 0 obj +<< /Filter /FlateDecode /Length 328 >> +stream +x59nd1Cզ0#X +Q"GN~f;o٥)8墳Ͽ6z- +endstream +endobj +2964 0 obj +<< /Filter /FlateDecode /Length 181 >> +stream +x=K!D ?$brm'f +l):r5dW<'>gjjG +}S3yG1 jq2 ,&f`D.PQhfj}VE&,g+ 7˳< +t,{yE#~Zn`eh('{xw{}d|C +endstream +endobj +2965 0 obj +<< /Filter /FlateDecode /Length 386 >> +stream +x5RA$1+J@Hӫ^׵C Wljj Oe~ +EeMm3}n3͕y](f)#yk|_!VF(ۘcd m|E!4-])6Y@m{2/:ÚaaX?!Uֹzl@-3" x !VE)tS5tCYNF8NA|k,ro?m0=,Wgiw>㝍 &C5 D/zg}##wr_w9ACCjq1j;$$ϔA-Ñ `q!9Nr Ng +AX焏;q-ʭ@zeRD$fF|kleAFzeYtYf +endstream +endobj +2966 0 obj +<< /Filter /FlateDecode /Length 256 >> +stream +xMQIn0 @3ECk)3! cS)%1K"lCܹJ=ɤI䅛J`m掓0%X1A50)>ГυR\(Jݱ  ӛ/6ة +&c<"y5mŻwS3<и^*g;aak͌0KGEIF&tNރH ޟ1_ +endstream +endobj +2967 0 obj +<< /Filter /FlateDecode /Length 107 >> +stream +xE @DTA ,?c<`W^̌#,;nx=uç0`,6sX8{t7&e^`Ԗz> +{6S]/W) +endstream +endobj +2968 0 obj +<< /Filter /FlateDecode /Length 339 >> +stream +x5RIn1 @kߓPԤ%6CEKio'l+\78*e0c&|/UH +L._?Wi'ɶJjY6r()gT!&F/-2t;K"?+@#ze"9oi{˨+h~6NԝtD'ʮcsƢ㴆S=dd`W8X> +stream +xMA0; W]M5Ma{fyj"BrG"UB2W_t] +endstream +endobj +2970 0 obj +<< /Filter /FlateDecode /Length 127 >> +stream +x-N[ +0 )t$u}w;(eM`'"O}َ,.iJhuw5R|v'  +OTjaKB +< c2pPqWh( +endstream +endobj +2971 0 obj +<< /Filter /FlateDecode /Length 79 >> +stream +xM1 C= ܧ: o> +stream +x5Rˍ1 +5bIא`q-..&ߺZdaՈEv"mf)jT4Q.9YKGӔ@w ;m ~b{݃4ʳ^1α/D |2pcRܮ@]s¹2Ωgp_Zz#POGY~_7:F hώޞuV@Bv(@*N +'x8@- / j)P-h?~} +endstream +endobj +2973 0 obj +<< /Filter /FlateDecode /Length 347 >> +stream +x=R;nC1 } +^ ϓ-DK6%R/-Q"/YwJRRDԙ-WcsO^Jd%ȔVRubJ#u)s*WfT\_Xݬ'(5" (S?͌ +j_p$])lc;k Y gKޗHlFnp&~h +endstream +endobj +2974 0 obj +<< /Filter /FlateDecode /Length 225 >> +stream +xEQI0 |IQu(g9$$,"D./ Qv$WakIA״p CYAҥatSwb&28s>v*d #V cUiRΊTp6~T aD]Nf4`/7-. Wz{JFd4uZ`'|h\cw/$FjRM +endstream +endobj +2975 0 obj +<< /Filter /FlateDecode /Length 213 >> +stream +x5Pm0 { +.Pڞ'EZQNOf"D&kb[Ɇ9>ò@ +&DpH=4_K礐#b&E9Ie3!|%:Ȗv<1 6vk*(bҽ!> +endobj +2977 0 obj +<< /Ascent 891.1133 /CapHeight 662.1094 /Descent 216.3086 /Flags 6 /FontBBox [ -568.3594 -306.64064 2045.8984 1039.5508 ] /FontFile2 3290 0 R /FontName /BAAAAA+TimesNewRomanPSMT /ItalicAngle 0 /StemV 61.035158 /Type /FontDescriptor >> +endobj +2978 0 obj +<< /Filter /FlateDecode /Length 17 >> +stream +x350P@C4yK +endstream +endobj +2979 0 obj +<< /Filter /FlateDecode /Length 56 >> +stream +x350P0P02V06P01T04TH13B\P0(SWÕ +endstream +endobj +2980 0 obj +<< /Filter /FlateDecode /Length 53 >> +stream +x350P0P0R04S04RF +)\`B.D&Lr`r`jr2c +endstream +endobj +2981 0 obj +<< /Filter /FlateDecode /Length 210 >> +stream +x5P9! ydm, ͢EԊFLxEX[Y'8օY"5O<ɥ^nX 4$∥k{IKyD^Bֆ_ݚS> 2Br҉ c+'Z xRs#_SI*obSz[9 JCγ!JB%/b#R +endstream +endobj +2982 0 obj +<< /Filter /FlateDecode /Length 93 >> +stream +xE 0;S +uHx ! T +`Ry#4!QX>PpCf9vl֢@ +endstream +endobj +2983 0 obj +<< /Filter /FlateDecode /Length 254 >> +stream +x5QKn1>$yUF]DF )Alh!"QWCf~<ˠ&8U^g1*+>6cuQO!E]dj0LG͸!9 O4#bE醥 rś2Bcoh h+9B[\ܘXH!ޑ'k+ +-YqD\E +BMrn4Yv76/cBǎrm}<[J +endstream +endobj +2984 0 obj +<< /Filter /FlateDecode /Length 319 >> +stream +x-R;r! 9?pɤܿMbAJ4ke5wrK⤴gExߋNO #%TFF4^ ͲO5jơ2=rıIB +9GFpH`A7(6D ƟbUޜo">Y̪K;.xÕ-@cKN(u&W8nDpBKzE!jhkjɯBuDA7.,945Cֶ7BХ$pT )p{̕ӹh ^N E:yWY?{ +endstream +endobj +2985 0 obj +<< /Filter /FlateDecode /Length 89 >> +stream +xM ?Sx M*eoR ~'[䌌JPq@q19iթ'J-EK1s yn># +endstream +endobj +2986 0 obj +<< /Filter /FlateDecode /Length 257 >> +stream +xMQ1r1 +={.Iq"b$5'&8 y/ }^dG0;5l5J]aM'b Ln֭EECQpRwPj"9^÷\SReZlB<{&"VCĎ36\_Q,Vt(&%QB#S5}GIy|ʈhV/,G>:2?5Gd[[RTԞ:(?7?O83Lt]% +endstream +endobj +2987 0 obj +<< /Filter /FlateDecode /Length 314 >> +stream +x5Rq1 UK_I?5@%G̊C^)S2eKDJ/&Q5eMy61j =$Rx#uo"J WI$T֭дP͠:%/ԩ*_<.VmfO Ya~;OѼK"^tpkۆKD1dqcZ';p93~gjѹI{3 +Ͳtݡ[(YOܚ}`"=pFW# GRAeqv8K{2>OQ-ȥ~0?z +endstream +endobj +2988 0 obj +<< /Filter /FlateDecode /Length 73 >> +stream +xE 0 7ō4iTAGK@-,Yv0tspBQn+ +k!qܮ +endstream +endobj +2989 0 obj +<< /Filter /FlateDecode /Length 383 >> +stream +x5R1r1<l\&&o#Ms0ea2,:/<>6BÎ[YyL`( BOg5r¥i#av4×ÂXb^ gXQ/[VXs(-[p{[G5ݥqG{p[?^ +endstream +endobj +2990 0 obj +<< /Filter /FlateDecode /Length 317 >> +stream +x5Qɑ1 w AI> lYthԵ?P{[4_a'-kB05ec?gMgJb +4s\Cv:lA|_I '懪Y q`(~yY`fm[Ͷrdwe↖1ӕmAI*`|n),w!E}("w +,.E>ϣљΈXõQ[3eM-|5/ѥEeLҩh>Z9:hP7:oJ"jHm𰳇|w zG +endstream +endobj +2991 0 obj +<< /Filter /FlateDecode /Length 77 >> +stream +xM 0 {O#؎>po-@t'wU(@7aBXr;B(S,*eZޞG%. +endstream +endobj +2992 0 obj +<< /Filter /FlateDecode /Length 95 >> +stream +x= @ETA êc*8 bc@= u$82K~4b3DoCVURcZ6Ek"*c:s>ͨX +endstream +endobj +2993 0 obj +<< /Filter /FlateDecode /Length 267 >> +stream +x5Kn0 C>`}'EEے@2S-J4J$I^r)_Z=IgXίr=^!UK*)w.ن)od3U*p>U w NKŃt≽$k-Ml_f{ n$?GIpJr3OOa^P_V,$[9B4j6ۼh":ߠx=n#]oM w|> +stream +x5QmD1 A< +.|H%BE.3`#goW,X'zi&kj̃ +;m#)3,ehC&DmF׏KoJM.CK/$rUu-EJ;CR'5#F[/:>.xu^,m;LjnytW_c.-T;Mmv4"5>S=Iy=?UT' +endstream +endobj +2995 0 obj +<< /Filter /FlateDecode /Length 161 >> +stream +x5 1 C{O< e6/W)ډ@ X0" /j!MX=T VrRwYM2ZOhy4ᮧs~zU *ՖdsAiӺ> +stream +x350P0P05T04S013T00QH13 ,r M 020FfBe,0AY7?++ zh +endstream +endobj +2997 0 obj +<< /Filter /FlateDecode /Length 254 >> +stream +xEQ;0 s +!&>;;ݿ]) H%')޲%ZG{R)')#]LuU[Nܯ@T'oD"Q /dJ/Rў'A@06gK| 7铈G<1с>,'d`F’D_6)]D5L#M19Ә2(_pB7nA=yk3XcSHƚz[R4F[ 9(_?] +endstream +endobj +2998 0 obj +<< /Filter /FlateDecode /Length 82 >> +stream +x350P0P01W04S01T00QH11"\Ʀ`Faldd#&dD210`AdaVlJU~ +endstream +endobj +2999 0 obj +<< /Filter /FlateDecode /Length 56 >> +stream +x350P0P020V04S04V00QH11"\P0$SSÕE +endstream +endobj +3000 0 obj +<< /Filter /FlateDecode /Length 158 >> +stream +xEO;1 u +`$˟l&bs6ȓFB54dbwb0D^0E| Хz/㦐= 4̲`zGMhsۑ3/,*Po[d\E*(\zg唂=im_^,4 +endstream +endobj +3001 0 obj +<< /Filter /FlateDecode /Length 89 >> +stream +xEͻ Sx(JAomWL^A5=% znH¦bg̙֡?U +endstream +endobj +3002 0 obj +<< /Filter /FlateDecode /Length 61 >> +stream +x350P0P05T04S015W00QH11"\ 24AfY pXuW * +endstream +endobj +3003 0 obj +<< /Filter /FlateDecode /Length 98 >> +stream +xMλ 0S0?Opocl≓*" XS8)$'9t-nB&_ ΌiU7H X Xgg-Lra$ +endstream +endobj +3004 0 obj +<< /Filter /FlateDecode /Length 85 >> +stream +xMA0;'*1Rm KX+* +UG='Som ֏Sh|ObvEo:+c6t=E +endstream +endobj +3005 0 obj +<< /Filter /FlateDecode /Length 167 >> +stream +xE;C! {NG(Jr6^(Վwtc, ш:އƂY@#st +S!ۡ"9!*6̋|7'+߇8O⾨{[J$!5B{,ZeVy IP]h_$kڨs=Q> +endstream +endobj +3006 0 obj +<< /Filter /FlateDecode /Length 182 >> +stream +xMK!D|T3To2JSiB胧a,ǣ|y7lj &A6[ݮ_2" K-q47!T]RaɎb.m~G㳽K]PDж b-$ :L^fZjwљθi^o{-[d;QCp8D +endstream +endobj +3007 0 obj +<< /Filter /FlateDecode /Length 335 >> +stream +xEI@D:G(ƪ:w8hoDr-YWDnK\p ?rSZyL,U(GϢ]Ba=͠Syzl3/ +&NjՇm0kȱ9i,޷xQz L3Yg0tK^#l)(>>ɪRru"AUEgqخ7&n}8Zk]3g5wHD KO0,8P1SS#}X4mfϸ͞-$SՏQkNEOޟ %JJ~Gx'[$nqK>ϟ7=| +endstream +endobj +3008 0 obj +<< /Filter /FlateDecode /Length 72 >> +stream +x350P0P01W04S01T00QH13 ,r,0 +0@b@ @#r`Jv +endstream +endobj +3009 0 obj +<< /Filter /FlateDecode /Length 148 >> +stream +xM1C! CG 18ϯ?M:@؆V + +j@mJIkt +A+ᴖ%:rM6w%ٵDO)ROGHUivz" :#20O:o߯|'4 +endstream +endobj +3010 0 obj +<< /Filter /FlateDecode /Length 75 >> +stream +x5̱ 0Dў)n@Qٿ pœ 'A!18sR|+M1kB޲aа%g_My E +endstream +endobj +3011 0 obj +<< /Filter /FlateDecode /Length 372 >> +stream +x5Kv,1C +`~ :NU ya汲v珠o~r]7`Z 5,,c'"x:`ZLE͉ .WGWviqلEe{{v$|nAS!~EyRLtY#Z(7[sR +yb^s!IZ!4721;q̘R]Vΰ4/f85j[N+D($3f;$H""DwͤSNpF(R5+*ʹM:; #\ᅋh0+zFtrD4;r)k zt?J1s UO?I +endstream +endobj +3012 0 obj +<< /Filter /FlateDecode /Length 233 >> +stream +xEP9r1 |):Lƅ6q*B,ۄ=,{G/EZ$ 1y7`YbiU<%k6!ف%QʡIڌ*=Ҝ*''sں?';|#Hd:͜970ҍ&Go,$֮ u}q4atVYϔ% Ne."6Pd[ +endstream +endobj +3013 0 obj +<< /Filter /FlateDecode /Length 226 >> +stream +x5Q1 ˷ +OUonOЮ#@|@f0Fj/QߎDa rà3JSAkYȒfwٜv^(*F(&;rb"oT0r9>>ϕ$5T98q%kb@,j{ՐfdPKE[/]giq7Iwp1c#i6ZCxl}s]S +endstream +endobj +3014 0 obj +<< /Filter /FlateDecode /Length 238 >> +stream +x5Q0 UJ?=d;tXH&h-f +8D7x|uXٶ>~qb|v`$5a%i<&`5Ts! +grԡV"NYXɜQ5#.{^{rs,Gt\. +,(3?*f=l-dD3cmsJ@.X]FEp~+mZW +endstream +endobj +3015 0 obj +<< /Filter /FlateDecode /Length 239 >> +stream +x=Pq0 =FO4s/6)~ J,Tmt|gY½Q\>9 ,57c,`t%!H5XfV`7Q +$G8YDQO9<'ydhV&'-u“y{]> +stream +x5I1} +_> +stream +xEK! CGȗy[#u9>/m Y6`rL.Ox)Ns^⩨@5&IY:!'ΟVoR^<&6i]\.G7T&b C0dwrdi0; +endstream +endobj +3018 0 obj +<< /Filter /FlateDecode /Length 77 >> +stream +xE 0 {Mh'5PPocyH%ATvjfQ$PpA \F|Y kt?r,} +endstream +endobj +3019 0 obj +<< /Filter /FlateDecode /Length 173 >> +stream +xEMC! #>> +stream +xE͹ @ Ul "S;G/H$<9PlH%Ƨڟ/6a%7C`{> +endstream +endobj +3021 0 obj +<< /Filter /FlateDecode /Length 56 >> +stream +x350P0P024T04S0T00QH11"\P0$SSÕV +endstream +endobj +3022 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +xERAr0<{CF +`I&b*(+?Oy5q?K|o_Ǔ +91b.ձ=,V ''C3f0`7 (7>Xv3`ĩЭ2p3@Gg'7p6 à(贏/if'[Q yA;=a|U,U>{]*>GUO ETvԂn8Kf +endstream +endobj +3023 0 obj +<< /Filter /FlateDecode /Length 164 >> +stream +xEK! CGȗy[CFIrA;"/mY6>`k<6\d_𡸚w; ,OtR#h>J8] &I0I]f[ݳ^s)e1n"&B83:;j$G-Sۧߛ; +endstream +endobj +3024 0 obj +<< /Filter /FlateDecode /Length 207 >> +stream +x50 C{M?s4ٿ @)MAuwsۖ|^(*Q}֚T.nO}X,>i|?;XѪ8Ҿ5I,BXR N9 B*Nz)?_Oe[0&X+"ERO 찏]J +PLuXaRhy&<\T|e> +stream +xEPIR1 + Eq_ ZZf0cQ`d{7cXǕ] @ #p;G'?^68)u NMQB+{tffmY2|D[Ljk°'˝gA"F-{*}ssȘ̎:Iubn[ nrɖ@)8U_J@'@Z?\^ +endstream +endobj +3026 0 obj +<< /Filter /FlateDecode /Length 118 >> +stream +xEC1Ds|ǁj$_oXx +i8 7쉧0Ax`8+çF9*T%Тm(jvCjmꮟjߊׯᒇ_% +endstream +endobj +3027 0 obj +<< /Filter /FlateDecode /Length 318 >> +stream +x-q0 Cﮂ%z̓6)ޚ5ÖUpG紿nFZ.>|[#͜DWC+^O }|.[1lE_2I⤇T n 0_(frB0*V\ǵѩ$*2p:$lFXtHZx({m_Yn$ ob>j)c3>$^wNԤ(;nj~6ʢ\܈u?[A9> +stream +xM;0D{b >VosP3- ˄8f!y'0Fhx0+ Y8f $[q|AIgRoҒAG`<IOYfNdY`:ʊ^BCu}Z?3 +endstream +endobj +3029 0 obj +<< /Filter /FlateDecode /Length 163 >> +stream +xMAC!Db *iv??銇HH,+<:^*:>z WFk',-64`}QIhXu{zg/GmqG:!;ՂtLJY01~1d>fh3;)35!ݮγ#y7D +endstream +endobj +3030 0 obj +<< /Filter /FlateDecode /Length 73 >> +stream +x5 0 CB#tRzp1A + +\6Jx\"lUB6Ѷ~c +endstream +endobj +3031 0 obj +<< /Filter /FlateDecode /Length 94 >> +stream +x5A +PEѹp O}'oB &Ee&?ڿ$,z{B- + ٻvɁ6j䈩^(ȩ>"|Ԓ[}#, +endstream +endobj +3032 0 obj +<< /Filter /FlateDecode /Length 172 >> +stream +x5K0D>\ sTUHyaCtc^6t"!8BSٴo,ȲKBo8iZ#^]QRJ)R=#ۊ&)2:ĥ"q̨ܚKT.S)OȅCܤ>شVO"|>= +endstream +endobj +3033 0 obj +<< /Filter /FlateDecode /Length 79 >> +stream +xM 0LBSU} E'ZCMdJ2+sxtLjoT0.o^k +endstream +endobj +3034 0 obj +<< /Filter /FlateDecode /Length 91 >> +stream +x=A  +"i*5=23BƺUMFXJRMSHcJ`r(n7qc +endstream +endobj +3035 0 obj +<< /Filter /FlateDecode /Length 232 >> +stream +x-PmD1 =8\FKE¢Dex!k\%7~WZ@q/"xsLmjA7${ %>Eti(u:s1 EK2&(ITJ &,`9erɢ))->}\n[Vcsvnk]̮~OWrxOO/2mo*Tșk7҇ڙIDkM~nL}YUn +endstream +endobj +3036 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xUͻ 0О)x6%r;]q] L8`4> +stream +x06W0P4& +F +)\@>edafY&@9 " a@` $6f[WW` +endstream +endobj +3038 0 obj +<< /Filter /FlateDecode /Length 90 >> +stream +x= 0{`mcC"C5,42S g HFڟ 2s.5]űH]4)|ﻝn^2 +endstream +endobj +3039 0 obj +<< /Filter /FlateDecode /Length 214 >> +stream +x5P1 U0_z0.qqu US_/1*fڮ]{6S('AҸɤ~7M@HE@EJ +R@uҌ68$lPAZs醚,4Շ)]Ky> +stream +x=9C! C{N#7-/KlO\H d +uk%%AG`3InnMޡ^L> +endstream +endobj +3041 0 obj +<< /Filter /FlateDecode /Length 343 >> +stream +x5R;n%1 @gyb%5H%BHvB;,E?OQ/g8:>Ofb/CúS?OwCLΓ:'gu)XK'BعțJAv V!ٍN:Q.\DNmyغ%gM?ViPH/olšxz*2$g_n2nm80R2!Z&ݦ1I۾0 ,m؜"մJ~QRP7243Ӕq.// REF'C ]ws!>2!`$㧵ȡ[oTxtg}$fGZNJd=(\57]h(̼h/<?:o +endstream +endobj +3042 0 obj +<< /Filter /FlateDecode /Length 63 >> +stream +x30R0P0b3sss#KC.S0# &fZY&ƦH, mdb!2p;+ I +endstream +endobj +3043 0 obj +<< /Filter /FlateDecode /Length 316 >> +stream +x=K0 C9.ЀT1oљE@Aև3W۰Jz+c[ԴW8Q̲'uE||WEQ;u<7Kȃ+s>8dV>*{AME|޿|ןK29}vPr*mQp/yY_V[k;n `'9ԜFFckF({p|T(zIh3b| ݚL.p“r[ ګ-gu[t`pn)&h*ޗCӛ%n]-7+*ju ܫfJ>pyt +endstream +endobj +3044 0 obj +<< /Filter /FlateDecode /Length 245 >> +stream +xEQ9n1 +}` )6oCj'HE’(R^Z2e\RKeՔ/RO?#ԚELQ+ 4h#6V3嬀+zƏ#T w=e}*U=Ͱt™7-U/={*j!m:w|mɄipO{\ͲPߚ:T@xFjdC3U\Qzn|K%+ybK^}L2=Ϙ__T] +endstream +endobj +3045 0 obj +<< /Filter /FlateDecode /Length 237 >> +stream +x5QKn1'sW=u[CTi$<`!8x#%5lC#Ah"2xPV$_&w8'L`EX1? +o7nAhͩPEOUU9@p2{cP4+sP\KxD^ՍS#mtvp!rlȎw{:7\t}Sfhr{}UU +endstream +endobj +3046 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x=Q9n1 +~` oCiHH2Eѹ6&CDėia fBp =)+>w3,lvB tHVeII%i;[d#]SNҌn5ۜWAUAԴsEՅh^<'ϲ3R5~k0 ЎyudU]x i劖]JY]MCs}6 o[* +endstream +endobj +3047 0 obj +<< /Filter /FlateDecode /Length 400 >> +stream +x5SIn1 +j=Sג T%Ԓ%CJG]Cfĭ{Z{R\ak)eȱoc5ߐF:BC{_Ka멉FF=<1 *aF%*տex_M+|J,cN_&p +:0^֦z&S#$-x;#jrgF=4큷F\JJRy ^A>Cr6^N!_BLkNςb{PGO> +stream +xMA!"'Tj׌5{q/zpw*R3zpy٤"YOBkMJ ܍ ȃl$Hs5pܰA-~Tñ5֨0vp`> +stream +xMQKn1)|'_ꩋok 862֍—\sEڰϰ(!i ~z*b⾌~ +^ >x_n6,w"ƛ5LrP Dq~N=M_5_).AUt,fLS$ʶӞ/[q)0K׀qx'JMwk=8 Kf̻sU,UmimO-ZqvJt//!] +endstream +endobj +3050 0 obj +<< /Filter /FlateDecode /Length 95 >> +stream +xE TA +L&A5ńEFQIXzԂr 5:HѠ47Pf^꡴v2O9|h#8 +endstream +endobj +3051 0 obj +<< /Filter /FlateDecode /Length 343 >> +stream +xEMn0 >/`@d'EEzmxxK̐ej>me؜~UsIsg˭ƴEǕO/cq>b}8]tiyQ2 sO4E&/"WD1!IefA]o@{7(rpJw69 s RdW@7Eқԥ`2Ľa > >hWq\(ӹnf]1 +?w~Shɰ4rIʓ ZZ0(jl:E{A!/EҕPGvniUVF&Ao7 +endstream +endobj +3052 0 obj +<< /Filter /FlateDecode /Length 191 >> +stream +xEAr0 z@ %ǝN&=؋!dКæ^*-#G?L 0s#H-'@^^lj&AE,=svXux5r&:xi#gr:qZHwEԟYg#UIQ;ҺaM58J[x_=~gFc +endstream +endobj +3053 0 obj +<< /Filter /FlateDecode /Length 74 >> +stream +x361V0P0F +f +)\@B.H  4XiLEW Q bAC 4$ +endstream +endobj +3054 0 obj +<< /Filter /FlateDecode /Length 50 >> +stream +x361V0P0F +f +)\@>@4XiLEWWc % +endstream +endobj +3055 0 obj +<< /Filter /FlateDecode /Length 281 >> +stream +xERI1> +stream +xEK1C>AsNf162-Bn50ðkpȈ1חɷ̷ +s0>t\r1 Fˉ *@>tqL ~Y1GjUr:zkGxjrNۋ$ĩG> tGPTD xΎv&]&>+_?i Fh +endstream +endobj +3057 0 obj +<< /Filter /FlateDecode /Length 331 >> +stream +x-RKr0\3ou:][E uKɗt|ҽEKO*K7W^0jb}Ū'O^ LT Dx#]+b}$6*DhPb։P=<6\[\7* R@cY4ZHtKQfVX)L&a̐%yt싻'z;+N& + } >7L1b/֋) ++=ZI+&s08 ;lap-`:qȺ31`-; 1iDe|x&K%yj:?pg|j +endstream +endobj +3058 0 obj +<< /Filter /FlateDecode /Length 213 >> +stream +x5P 1 =`o 4ٿ('Ł> +stream +xMA ; ,ڵiz_^`eaiLzU/Pɴ)B4 Ě#(7O;_oY4^# ^> +endstream +endobj +3060 0 obj +<< /Filter /FlateDecode /Length 241 >> +stream +xE;n1 C{X>5"I䳗$&s! rK:[kNl ~lLfp ˍOzXȚ!g«镫l٪K9)'{"o2V!b`櫔-kh0VT ͽV3եwHY.Ϭ8N6dKHS(`z&mGfnx}{v٩Cfn77SHԦ÷n~^ +endstream +endobj +3061 0 obj +<< /Filter /FlateDecode /Length 52 >> +stream +x30P0P040F + +)\ 3 &fi 4m +endstream +endobj +3062 0 obj +<< /Filter /FlateDecode /Length 158 >> +stream +xEPA! +tzӃ&L@vt{4am2Au #U-Utఱi:cu ,J #;bnWM +(UŎesBɓFS^mQ +C%'3筬涿_ګ=?om8, +endstream +endobj +3063 0 obj +<< /Filter /FlateDecode /Length 346 >> +stream +x5InD1D>hLVo +lpQU8oʔ4yKƑ\StOψj%,$&g7y#Sܓ3:>b{ ת(=bΎ~*mzU,_Ʃ$oC.3{,aKd'ϩbzdڸ&mI^H4WcW;#3<8Y;3nbfޢ&1ZmDHWYꝹ\YUaj)~@؎Rَ6ٳaGcs#$&$biarú%Jm©k-[%XַbIk kU3ҁR[# &Ng|/֫~ +endstream +endobj +3064 0 obj +<< /Filter /FlateDecode /Length 71 >> +stream +x34S0P03f +F +)\@>̌,cc#.CK0mbh`jiRc`@tep +endstream +endobj +3065 0 obj +<< /Filter /FlateDecode /Length 330 >> +stream +x5RKnD1\R'jE{mm^0Iݒ-e.&*O^[~۝w;G܎: +2=EfόzBU U=ܜ,lOGAAe|L <܈BDz^k i6f)+8R{KFl""Az'11sl7nl'0S1q1G+*u .qPOʞ,'MTJ,p8GF L.nh +6h0 #dz1s<|,8}9>Oq{R`9#d`|^H7as)c6#4  ]} +endstream +endobj +3066 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4U +endstream +endobj +3067 0 obj +<< /Filter /FlateDecode /Length 132 >> +stream +xEAC!D#b4]o;߄8όN΅؋[H=񷩙*(C2M/c{yR- \5qm֦̒2.U~TL\\Xv`I,ֳ/}Y 2L +endstream +endobj +3068 0 obj +<< /Filter /FlateDecode /Length 351 >> +stream +x5Kd!D箂 T|ԋToA +Ib).%+L~tDq7RS|O4ܒkےb'oҩ?=,)JW"J#,ͺ|NC+> +stream +x=PKn1 !>ϫxxv3 3 Bvb4?_ +b5am{7رaٰvX%\x[ⵜ^{Sޣ 3oCлT,+L_K2eHAE0Pk +$͎#!Wɤz3qdZM +zQG5WB.lnČΗig/M' +endstream +endobj +3070 0 obj +<< /Filter /FlateDecode /Length 204 >> +stream +xMQAn! +`%!jCkmfF&& ix/k8+"*4EÖ@<8vǻ6Jn^7) V( NG♷+;`CN2zwmRI?,ǙOtMEIr0&vb(,&FCBQxM(VL! Z2\CU`>xoݾyL +endstream +endobj +3071 0 obj +<< /Filter /FlateDecode /Length 139 >> +stream +x= 1 C{O < Pw4%i&2&(}yќSowAM=*<h+K 3GS !fqŅ&6uQ ~:컽v. +endstream +endobj +3072 0 obj +<< /Filter /FlateDecode /Length 220 >> +stream +x=ˍ1 CB ,`zf_W&0Al+EiB<,&i82\Jg'vҵ(Hyn܌5E4sO)I%8pN) +|𙳎2vɠ-(hgg԰ J哼 &o=Puqi8\P5:ja spW¬J'ąw{U5 +endstream +endobj +3073 0 obj +<< /Filter /FlateDecode /Length 164 >> +stream +x=C!DV%@=drk@\d`;Q3gɃӱ4pok#Mx ac.UU׽cAi5 mځ?5ޣB(tneZ X> +stream +x=Kr! CBG> +stream +x5R;қASYyɤs6;,Bx!Q%O0^'w<ǻZT6mX& +F,Ǿ%xj=iŒLF$qz)߀4mN%I[Î/ 2HzRÒV scM$#V3\c$$ic%2OůZ1@6l'3E$7qMXsPR侻^+!Z1COYdA T3׾0NF wj+$vVJ9e9d;&l=7-+9dE)%C<(~# +endstream +endobj +3076 0 obj +<< /Filter /FlateDecode /Length 72 >> +stream +x30Q0Pb3s3s#KC.# 3@.X 261R044L͍b0@YKA9P9\\it2 +endstream +endobj +3077 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +x=P;D! 9/$#pF-f߮)PL~3$G 1%Bn CR zt6:3?a7cE1t=&9 +seVH'"3)*{x,6['= RRɥ?mʔ +:f,dM8˻IR2v"}<ȣ:dMά#Oۙp_dNt΃96Mi*/RZ~ugdZ" +endstream +endobj +3078 0 obj +<< /Filter /FlateDecode /Length 395 >> +stream +x=RKn@\yRUݼokCR*10}ʐK]qɷ^[<|.[Zy%>ܗ!]t.8G 2*DͪѡBN }9/װ =2A$)BnQAaPYQ2jo c BmH@DTg$gb`ѲTD{LjΨD>OM(L-VnS_|t*4U Xy9Hl!:n32`K9`GYutpL~OtZur@MAF2>)z,F3ar4k"X"bDls=L9l֡33*!ںj@vp?3m +endstream +endobj +3079 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +xMQI0 @!^CC9 X 1,=!s7~ٻYz"SQR.bB]ϡ=kY9,s3c}I2!N uZ¸kbZvBzM;" +2;-+{n?R\ +endstream +endobj +3080 0 obj +<< /Filter /FlateDecode /Length 54 >> +stream +x363T0P0T026Q064bC.@rs`r22 +endstream +endobj +3081 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +x=90ОS#"qxV0z!8`ʺtSƜ xJM zԴԾhKՉ? +endstream +endobj +3082 0 obj +<< /Filter /FlateDecode /Length 322 >> +stream +x5Qm0 50 ~% H;کHӼU^2\.u*YaCu|f!S֖{yJ,p 6s +QDnY@蚫Xb V)Xv$ r1YSE)|,ّZrY +n}a8쳋DyL$dl>[E6v8Ѐ$AS8>aj('89֯1 NKRWϠA3.IwcJd)6 +SbVofQlܠbod[7}_{d +endstream +endobj +3083 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xE 0D{`~&>Q޿ %n'=\ )n3C ,]q0 \GPaվRBf +endstream +endobj +3084 0 obj +<< /Filter /FlateDecode /Length 239 >> +stream +xMPm1 +50<C hK[e#9oɺCNinͯ vPT%J\n4I/8k{Yx)=2f90=NƯ;$B +%+ۘRN-{|=ލF-j80SѕqCgGW4 zB59p`˳Re]:4J(^7 +endstream +endobj +3085 0 obj +<< /Filter /FlateDecode /Length 51 >> +stream +x36P0P040F@B!H Y@8&++ +endstream +endobj +3086 0 obj +<< /Filter /FlateDecode /Length 70 >> +stream +x336S0P0 +F +)\@>,́,# .C c0mbl`fbdY 1 2 +endstream +endobj +3087 0 obj +<< /Filter /FlateDecode /Length 340 >> +stream +x5R9n1 +} n H qtR;ZTvˇTt7we ɫRHV!25gRqɂ?å X#D2f[~ix+-XR8y- +V~AG}TX IpPvH 9{,vQ3(1EA%9źtб،7:*[ZYc>,2zXtǃ 4 4e9QVxC 1! J<% _6?m^JkL +endstream +endobj +3088 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x-QIrA+fc+ @tZ⠌ ,W呫h31~+mX@T IcP5vzq ְ̓ f)1ge]=Aɬ\%La#g?2.s=7 FXanV34H!AF6r/tU1s-m_M8kX]q.'/6Qi@HnsxK{T`śn@6߼_`[ +endstream +endobj +3089 0 obj +<< /Filter /FlateDecode /Length 215 >> +stream +x5Q9! @$/xO(͌V\!R!S>z.j4疴-s/fi<CѨQCԥS(>nc! b(,AͩEm'5^ޗSƖV8=O&t2ԫ5 E"<Z42j;0NqdJoWGT +endstream +endobj +3090 0 obj +<< /Filter /FlateDecode /Length 91 >> +stream +x=A  +"i*5=23BƺUMFXJRMSHcJ`r(n7qc +endstream +endobj +3091 0 obj +<< /Filter /FlateDecode /Length 273 >> +stream +x=K0D:G#qRpn¢KFv.R<^%/v\ܷ|r ϔk][c,*΋<&\ל*xuf+?{ )pRy!DcΊz1 jV9dU \LMKX!zXQ(2:3rB# -ZtO\e=Z8NV=)tq>e~ +?1T7aXpNŵrѰ^o\P8I +cx?9h +endstream +endobj +3092 0 obj +<< /Filter /FlateDecode /Length 232 >> +stream +x-PmD1 =8\FKE¢Dex!k\%7~WZ@q/"xsLmjA7${ %>Eti(u:s1 EK2&(ITJ &,`9erɢ))->}\n[Vcsvnk]̮~OWrxOO/2mo*Tșk7҇ڙIDkM~nL}YUn +endstream +endobj +3093 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xUͻ 0О)x6%r;]q] L8`4> +stream +x06W0P4& +F +)\@>edafY&@9 " a@` $6f[WW` +endstream +endobj +3095 0 obj +<< /Filter /FlateDecode /Length 62 >> +stream +x336W0P4f +F +)\@>ed M,:HtpepC +endstream +endobj +3096 0 obj +<< /Filter /FlateDecode /Length 90 >> +stream +x= 0{`mcC"C5,42S g HFڟ 2s.5]űH]4)|ﻝn^2 +endstream +endobj +3097 0 obj +<< /Filter /FlateDecode /Length 214 >> +stream +x5P1 U0_z0.qqu US_/1*fڮ]{6S('AҸɤ~7M@HE@EJ +R@uҌ68$lPAZs醚,4Շ)]Ky> +stream +x=9C! C{N#7-/KlO\H d +uk%%AG`3InnMޡ^L> +endstream +endobj +3099 0 obj +<< /Filter /FlateDecode /Length 343 >> +stream +x5R;n%1 @gyb%5H%BHvB;,E?OQ/g8:>Ofb/CúS?OwCLΓ:'gu)XK'BعțJAv V!ٍN:Q.\DNmyغ%gM?ViPH/olšxz*2$g_n2nm80R2!Z&ݦ1I۾0 ,m؜"մJ~QRP7243Ӕq.// REF'C ]ws!>2!`$㧵ȡ[oTxtg}$fGZNJd=(\57]h(̼h/<?:o +endstream +endobj +3100 0 obj +<< /Filter /FlateDecode /Length 316 >> +stream +x=K0 C9.ЀT1oљE@Aև3W۰Jz+c[ԴW8Q̲'uE||WEQ;u<7Kȃ+s>8dV>*{AME|޿|ןK29}vPr*mQp/yY_V[k;n `'9ԜFFckF({p|T(zIh3b| ݚL.p“r[ ګ-gu[t`pn)&h*ޗCӛ%n]-7+*ju ܫfJ>pyt +endstream +endobj +3101 0 obj +<< /Filter /FlateDecode /Length 237 >> +stream +x5QKn1'sW=u[CTi$<`!8x#%5lC#Ah"2xPV$_&w8'L`EX1? +o7nAhͩPEOUU9@p2{cP4+sP\KxD^ՍS#mtvp!rlȎw{:7\t}Sfhr{}UU +endstream +endobj +3102 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x=Q9n1 +~` oCiHH2Eѹ6&CDėia fBp =)+>w3,lvB tHVeII%i;[d#]SNҌn5ۜWAUAԴsEՅh^<'ϲ3R5~k0 ЎyudU]x i劖]JY]MCs}6 o[* +endstream +endobj +3103 0 obj +<< /Filter /FlateDecode /Length 400 >> +stream +x5SIn1 +j=Sג T%Ԓ%CJG]Cfĭ{Z{R\ak)eȱoc5ߐF:BC{_Ka멉FF=<1 *aF%*տex_M+|J,cN_&p +:0^֦z&S#$-x;#jrgF=4큷F\JJRy ^A>Cr6^N!_BLkNςb{PGO> +stream +xMA!"'Tj׌5{q/zpw*R3zpy٤"YOBkMJ ܍ ȃl$Hs5pܰA-~Tñ5֨0vp`> +stream +xMQKn1)|'_ꩋok 862֍—\sEڰϰ(!i ~z*b⾌~ +^ >x_n6,w"ƛ5LrP Dq~N=M_5_).AUt,fLS$ʶӞ/[q)0K׀qx'JMwk=8 Kf̻sU,UmimO-ZqvJt//!] +endstream +endobj +3106 0 obj +<< /Filter /FlateDecode /Length 95 >> +stream +xE TA +L&A5ńEFQIXzԂr 5:HѠ47Pf^꡴v2O9|h#8 +endstream +endobj +3107 0 obj +<< /Filter /FlateDecode /Length 343 >> +stream +xEMn0 >/`@d'EEzmxxK̐ej>me؜~UsIsg˭ƴEǕO/cq>b}8]tiyQ2 sO4E&/"WD1!IefA]o@{7(rpJw69 s RdW@7Eқԥ`2Ľa > >hWq\(ӹnf]1 +?w~Shɰ4rIʓ ZZ0(jl:E{A!/EҕPGvniUVF&Ao7 +endstream +endobj +3108 0 obj +<< /Filter /FlateDecode /Length 191 >> +stream +xEAr0 z@ %ǝN&=؋!dКæ^*-#G?L 0s#H-'@^^lj&AE,=svXux5r&:xi#gr:qZHwEԟYg#UIQ;ҺaM58J[x_=~gFc +endstream +endobj +3109 0 obj +<< /Filter /FlateDecode /Length 74 >> +stream +x361V0P0F +f +)\@B.H  4XiLEW Q bAC 4$ +endstream +endobj +3110 0 obj +<< /Filter /FlateDecode /Length 50 >> +stream +x361V0P0F +f +)\@>@4XiLEWWc % +endstream +endobj +3111 0 obj +<< /Filter /FlateDecode /Length 281 >> +stream +xERI1> +stream +xEK1C>AsNf162-Bn50ðkpȈ1חɷ̷ +s0>t\r1 Fˉ *@>tqL ~Y1GjUr:zkGxjrNۋ$ĩG> tGPTD xΎv&]&>+_?i Fh +endstream +endobj +3113 0 obj +<< /Filter /FlateDecode /Length 331 >> +stream +x-RKr0\3ou:][E uKɗt|ҽEKO*K7W^0jb}Ū'O^ LT Dx#]+b}$6*DhPb։P=<6\[\7* R@cY4ZHtKQfVX)L&a̐%yt싻'z;+N& + } >7L1b/֋) ++=ZI+&s08 ;lap-`:qȺ31`-; 1iDe|x&K%yj:?pg|j +endstream +endobj +3114 0 obj +<< /Filter /FlateDecode /Length 213 >> +stream +x5P 1 =`o 4ٿ('Ł> +stream +xMA ; ,ڵiz_^`eaiLzU/Pɴ)B4 Ě#(7O;_oY4^# ^> +endstream +endobj +3116 0 obj +<< /Filter /FlateDecode /Length 241 >> +stream +xE;n1 C{X>5"I䳗$&s! rK:[kNl ~lLfp ˍOzXȚ!g«镫l٪K9)'{"o2V!b`櫔-kh0VT ͽV3եwHY.Ϭ8N6dKHS(`z&mGfnx}{v٩Cfn77SHԦ÷n~^ +endstream +endobj +3117 0 obj +<< /Filter /FlateDecode /Length 52 >> +stream +x30P0P040F + +)\ 3 &fi 4m +endstream +endobj +3118 0 obj +<< /Filter /FlateDecode /Length 158 >> +stream +xEPA! +tzӃ&L@vt{4am2Au #U-Utఱi:cu ,J #;bnWM +(UŎesBɓFS^mQ +C%'3筬涿_ګ=?om8, +endstream +endobj +3119 0 obj +<< /Filter /FlateDecode /Length 346 >> +stream +x5InD1D>hLVo +lpQU8oʔ4yKƑ\StOψj%,$&g7y#Sܓ3:>b{ ת(=bΎ~*mzU,_Ʃ$oC.3{,aKd'ϩbzdڸ&mI^H4WcW;#3<8Y;3nbfޢ&1ZmDHWYꝹ\YUaj)~@؎Rَ6ٳaGcs#$&$biarú%Jm©k-[%XַbIk kU3ҁR[# &Ng|/֫~ +endstream +endobj +3120 0 obj +<< /Filter /FlateDecode /Length 71 >> +stream +x34S0P03f +F +)\@>̌,cc#.CK0mbh`jiRc`@tep +endstream +endobj +3121 0 obj +<< /Filter /FlateDecode /Length 330 >> +stream +x5RKnD1\R'jE{mm^0Iݒ-e.&*O^[~۝w;G܎: +2=EfόzBU U=ܜ,lOGAAe|L <܈BDz^k i6f)+8R{KFl""Az'11sl7nl'0S1q1G+*u .qPOʞ,'MTJ,p8GF L.nh +6h0 #dz1s<|,8}9>Oq{R`9#d`|^H7as)c6#4  ]} +endstream +endobj +3122 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4U +endstream +endobj +3123 0 obj +<< /Filter /FlateDecode /Length 132 >> +stream +xEAC!D#b4]o;߄8όN΅؋[H=񷩙*(C2M/c{yR- \5qm֦̒2.U~TL\\Xv`I,ֳ/}Y 2L +endstream +endobj +3124 0 obj +<< /Filter /FlateDecode /Length 351 >> +stream +x5Kd!D箂 T|ԋToA +Ib).%+L~tDq7RS|O4ܒkےb'oҩ?=,)JW"J#,ͺ|NC+> +stream +x=PKn1 !>ϫxxv3 3 Bvb4?_ +b5am{7رaٰvX%\x[ⵜ^{Sޣ 3oCлT,+L_K2eHAE0Pk +$͎#!Wɤz3qdZM +zQG5WB.lnČΗig/M' +endstream +endobj +3126 0 obj +<< /Filter /FlateDecode /Length 204 >> +stream +xMQAn! +`%!jCkmfF&& ix/k8+"*4EÖ@<8vǻ6Jn^7) V( NG♷+;`CN2zwmRI?,ǙOtMEIr0&vb(,&FCBQxM(VL! Z2\CU`>xoݾyL +endstream +endobj +3127 0 obj +<< /Filter /FlateDecode /Length 93 >> +stream +x=0TA B?! +61FAw ^HޒM0iJ5i﹖?kkgJc}c_x +endstream +endobj +3128 0 obj +<< /Filter /FlateDecode /Length 139 >> +stream +x= 1 C{O < Pw4%i&2&(}yќSowAM=*<h+K 3GS !fqŅ&6uQ ~:컽v. +endstream +endobj +3129 0 obj +<< /Filter /FlateDecode /Length 220 >> +stream +x=ˍ1 CB ,`zf_W&0Al+EiB<,&i82\Jg'vҵ(Hyn܌5E4sO)I%8pN) +|𙳎2vɠ-(hgg԰ J哼 &o=Puqi8\P5:ja spW¬J'ąw{U5 +endstream +endobj +3130 0 obj +<< /Filter /FlateDecode /Length 164 >> +stream +x=C!DV%@=drk@\d`;Q3gɃӱ4pok#Mx ac.UU׽cAi5 mځ?5ޣB(tneZ X> +stream +x=Kr! CBG> +stream +x5R;қASYyɤs6;,Bx!Q%O0^'w<ǻZT6mX& +F,Ǿ%xj=iŒLF$qz)߀4mN%I[Î/ 2HzRÒV scM$#V3\c$$ic%2OůZ1@6l'3E$7qMXsPR侻^+!Z1COYdA T3׾0NF wj+$vVJ9e9d;&l=7-+9dE)%C<(~# +endstream +endobj +3133 0 obj +<< /Filter /FlateDecode /Length 72 >> +stream +x30Q0Pb3s3s#KC.# 3@.X 261R044L͍b0@YKA9P9\\it2 +endstream +endobj +3134 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +x=P;D! 9/$#pF-f߮)PL~3$G 1%Bn CR zt6:3?a7cE1t=&9 +seVH'"3)*{x,6['= RRɥ?mʔ +:f,dM8˻IR2v"}<ȣ:dMά#Oۙp_dNt΃96Mi*/RZ~ugdZ" +endstream +endobj +3135 0 obj +<< /Filter /FlateDecode /Length 395 >> +stream +x=RKn@\yRUݼokCR*10}ʐK]qɷ^[<|.[Zy%>ܗ!]t.8G 2*DͪѡBN }9/װ =2A$)BnQAaPYQ2jo c BmH@DTg$gb`ѲTD{LjΨD>OM(L-VnS_|t*4U Xy9Hl!:n32`K9`GYutpL~OtZur@MAF2>)z,F3ar4k"X"bDls=L9l֡33*!ںj@vp?3m +endstream +endobj +3136 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +xMQI0 @!^CC9 X 1,=!s7~ٻYz"SQR.bB]ϡ=kY9,s3c}I2!N uZ¸kbZvBzM;" +2;-+{n?R\ +endstream +endobj +3137 0 obj +<< /Filter /FlateDecode /Length 54 >> +stream +x363T0P0T026Q064bC.@rs`r22 +endstream +endobj +3138 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +x=90ОS#"qxV0z!8`ʺtSƜ xJM zԴԾhKՉ? +endstream +endobj +3139 0 obj +<< /Filter /FlateDecode /Length 322 >> +stream +x5Qm0 50 ~% H;کHӼU^2\.u*YaCu|f!S֖{yJ,p 6s +QDnY@蚫Xb V)Xv$ r1YSE)|,ّZrY +n}a8쳋DyL$dl>[E6v8Ѐ$AS8>aj('89֯1 NKRWϠA3.IwcJd)6 +SbVofQlܠbod[7}_{d +endstream +endobj +3140 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xE 0D{`~&>Q޿ %n'=\ )n3C ,]q0 \GPaվRBf +endstream +endobj +3141 0 obj +<< /Filter /FlateDecode /Length 239 >> +stream +xMPm1 +50<C hK[e#9oɺCNinͯ vPT%J\n4I/8k{Yx)=2f90=NƯ;$B +%+ۘRN-{|=ލF-j80SѕqCgGW4 zB59p`˳Re]:4J(^7 +endstream +endobj +3142 0 obj +<< /Filter /FlateDecode /Length 70 >> +stream +x336S0P0 +F +)\@>,́,# .C c0mbl`fbdY 1 2 +endstream +endobj +3143 0 obj +<< /Filter /FlateDecode /Length 320 >> +stream +x5RKn1)@O󪪋okL0`)/YK%ۥ[%BޏR-G- +Q=X/":pJWIj3 P@ƻb2R$siqr&'=YߓKMNI]IJD}B<>G1ɀ6m&%:fU`)W l[00Sbbe5ˆQ]pwhcG i8^8^9c, ch&zОaZT| +endstream +endobj +3144 0 obj +<< /Filter /FlateDecode /Length 340 >> +stream +x5R9n1 +} n H qtR;ZTvˇTt7we ɫRHV!25gRqɂ?å X#D2f[~ix+-XR8y- +V~AG}TX IpPvH 9{,vQ3(1EA%9źtб،7:*[ZYc>,2zXtǃ 4 4e9QVxC 1! J<% _6?m^JkL +endstream +endobj +3145 0 obj +<< /Filter /FlateDecode /Length 215 >> +stream +x5Q9! @$/xO(͌V\!R!S>z.j4疴-s/fi<CѨQCԥS(>nc! b(,AͩEm'5^ޗSƖV8=O&t2ԫ5 E"<Z42j;0NqdJoWGT +endstream +endobj +3146 0 obj +<< /Filter /FlateDecode /Length 91 >> +stream +x=A  +"i*5=23BƺUMFXJRMSHcJ`r(n7qc +endstream +endobj +3147 0 obj +<< /Filter /FlateDecode /Length 273 >> +stream +x=K0D:G#qRpn¢KFv.R<^%/v\ܷ|r ϔk][c,*΋<&\ל*xuf+?{ )pRy!DcΊz1 jV9dU \LMKX!zXQ(2:3rB# -ZtO\e=Z8NV=)tq>e~ +?1T7aXpNŵrѰ^o\P8I +cx?9h +endstream +endobj +3148 0 obj +<< /Filter /FlateDecode /Length 232 >> +stream +x-PmD1 =8\FKE¢Dex!k\%7~WZ@q/"xsLmjA7${ %>Eti(u:s1 EK2&(ITJ &,`9erɢ))->}\n[Vcsvnk]̮~OWrxOO/2mo*Tșk7҇ڙIDkM~nL}YUn +endstream +endobj +3149 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xUͻ 0О)x6%r;]q] L8`4> +stream +x30V0P4 +F +)\@>L-́,# $!Hel` E 4ؚ9\\i5 +endstream +endobj +3151 0 obj +<< /Filter /FlateDecode /Length 255 >> +stream +xEQmD1 =y.R\oCW$dSm +A +> +stream +x367R0PF +F +)\@> 4XiLEWW8 % +endstream +endobj +3153 0 obj +<< /Filter /FlateDecode /Length 90 >> +stream +x= 0{`mcC"C5,42S g HFڟ 2s.5]űH]4)|ﻝn^2 +endstream +endobj +3154 0 obj +<< /Filter /FlateDecode /Length 76 >> +stream +x=@TD~C?r1dk&)ᐟjE;-g7џ_ +endstream +endobj +3155 0 obj +<< /Filter /FlateDecode /Length 165 >> +stream +x=9C! C{N#7-/KlO\H d +uk%%AG`3InnMޡ^L> +endstream +endobj +3156 0 obj +<< /Filter /FlateDecode /Length 63 >> +stream +x30R0P0b3sss#KC.S0# &fZY&ƦH, mdb!2p;+ I +endstream +endobj +3157 0 obj +<< /Filter /FlateDecode /Length 316 >> +stream +x=K0 C9.ЀT1oљE@Aև3W۰Jz+c[ԴW8Q̲'uE||WEQ;u<7Kȃ+s>8dV>*{AME|޿|ןK29}vPr*mQp/yY_V[k;n `'9ԜFFckF({p|T(zIh3b| ݚL.p“r[ ګ-gu[t`pn)&h*ޗCӛ%n]-7+*ju ܫfJ>pyt +endstream +endobj +3158 0 obj +<< /Filter /FlateDecode /Length 644 >> +stream +xEA! D} +_%(brm^" ˮoY*{}m_d+f=,=ͷ[ײϓsXNDh7~21fʚtHVȢŽ8gbV@MiEPYh3b+O?SEo)MXeU0ʒzn-W(٧Xn Em3oMhvEt& $a~S\UoVyiku>In_Lh>-$gubN Fmx+\L6cJPWg뉭pԙp7%ͣ`Lm@8ALQ|<ƀ:9b텂 +{!.ٱNDhܧ;@J{;aʤiP ̦’f_ϫ5}U;OknŨBR:NzݷЙٲ͟A б™:U_}ȰvK3@zbbdksiڌy}YRN,?ȰBAkOK\[OD<9LE{;+G\qjQj-Xs~/(i +endstream +endobj +3159 0 obj +<< /Filter /FlateDecode /Length 245 >> +stream +xEQ9n1 +}` )6oCj'HE’(R^Z2e\RKeՔ/RO?#ԚELQ+ 4h#6V3嬀+zƏ#T w=e}*U=Ͱt™7-U/={*j!m:w|mɄipO{\ͲPߚ:T@xFjdC3U\Qzn|K%+ybK^}L2=Ϙ__T] +endstream +endobj +3160 0 obj +<< /Filter /FlateDecode /Length 237 >> +stream +x5QKn1'sW=u[CTi$<`!8x#%5lC#Ah"2xPV$_&w8'L`EX1? +o7nAhͩPEOUU9@p2{cP4+sP\KxD^ՍS#mtvp!rlȎw{:7\t}Sfhr{}UU +endstream +endobj +3161 0 obj +<< /Filter /FlateDecode /Length 238 >> +stream +x5Kn1 Cs +] LPtR%tʐHytCzENYߊͿy>oOM(b.^SܗJq1Yj?2'SҵX mG^òt.V$#DE/ ěYqjD\ 3]t 2[YeOXw<츲VHIsBZ|Y}\ +endstream +endobj +3162 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x=Q9n1 +~` oCiHH2Eѹ6&CDėia fBp =)+>w3,lvB tHVeII%i;[d#]SNҌn5ۜWAUAԴsEՅh^<'ϲ3R5~k0 ЎyudU]x i劖]JY]MCs}6 o[* +endstream +endobj +3163 0 obj +<< /Filter /FlateDecode /Length 400 >> +stream +x5SIn1 +j=Sג T%Ԓ%CJG]Cfĭ{Z{R\ak)eȱoc5ߐF:BC{_Ka멉FF=<1 *aF%*տex_M+|J,cN_&p +:0^֦z&S#$-x;#jrgF=4큷F\JJRy ^A>Cr6^N!_BLkNςb{PGO> +stream +xMA!"'Tj׌5{q/zpw*R3zpy٤"YOBkMJ ܍ ȃl$Hs5pܰA-~Tñ5֨0vp`> +stream +xMQKn1)|'_ꩋok 862֍—\sEڰϰ(!i ~z*b⾌~ +^ >x_n6,w"ƛ5LrP Dq~N=M_5_).AUt,fLS$ʶӞ/[q)0K׀qx'JMwk=8 Kf̻sU,UmimO-ZqvJt//!] +endstream +endobj +3166 0 obj +<< /Filter /FlateDecode /Length 95 >> +stream +xE TA +L&A5ńEFQIXzԂr 5:HѠ47Pf^꡴v2O9|h#8 +endstream +endobj +3167 0 obj +<< /Filter /FlateDecode /Length 343 >> +stream +xEMn0 >/`@d'EEzmxxK̐ej>me؜~UsIsg˭ƴEǕO/cq>b}8]tiyQ2 sO4E&/"WD1!IefA]o@{7(rpJw69 s RdW@7Eқԥ`2Ľa > >hWq\(ӹnf]1 +?w~Shɰ4rIʓ ZZ0(jl:E{A!/EҕPGvniUVF&Ao7 +endstream +endobj +3168 0 obj +<< /Filter /FlateDecode /Length 191 >> +stream +xEAr0 z@ %ǝN&=؋!dКæ^*-#G?L 0s#H-'@^^lj&AE,=svXux5r&:xi#gr:qZHwEԟYg#UIQ;ҺaM58J[x_=~gFc +endstream +endobj +3169 0 obj +<< /Filter /FlateDecode /Length 74 >> +stream +x361V0P0F +f +)\@B.H  4XiLEW Q bAC 4$ +endstream +endobj +3170 0 obj +<< /Filter /FlateDecode /Length 82 >> +stream +x5ͻ 0)m0" :@" }QiZ)5,n,tbʅ=Q:^z>® +endstream +endobj +3171 0 obj +<< /Filter /FlateDecode /Length 50 >> +stream +x361V0P0F +f +)\@>@4XiLEWWc % +endstream +endobj +3172 0 obj +<< /Filter /FlateDecode /Length 281 >> +stream +xERI1> +stream +xEK1C>AsNf162-Bn50ðkpȈ1חɷ̷ +s0>t\r1 Fˉ *@>tqL ~Y1GjUr:zkGxjrNۋ$ĩG> tGPTD xΎv&]&>+_?i Fh +endstream +endobj +3174 0 obj +<< /Filter /FlateDecode /Length 331 >> +stream +x-RKr0\3ou:][E uKɗt|ҽEKO*K7W^0jb}Ū'O^ LT Dx#]+b}$6*DhPb։P=<6\[\7* R@cY4ZHtKQfVX)L&a̐%yt싻'z;+N& + } >7L1b/֋) ++=ZI+&s08 ;lap-`:qȺ31`-; 1iDe|x&K%yj:?pg|j +endstream +endobj +3175 0 obj +<< /Filter /FlateDecode /Length 213 >> +stream +x5P 1 =`o 4ٿ('Ł> +stream +xMA ; ,ڵiz_^`eaiLzU/Pɴ)B4 Ě#(7O;_oY4^# ^> +endstream +endobj +3177 0 obj +<< /Filter /FlateDecode /Length 52 >> +stream +x30P0P040F + +)\ 3 &fi 4m +endstream +endobj +3178 0 obj +<< /Filter /FlateDecode /Length 243 >> +stream +xMQ9n! y?>l͌WRG`KKDesII*.ç7z2ŏ=́*Ĭ-r +;tkho uXk7YXLD5Kڵu:,tKVsZycAѲJB2 +HTB*uj R1Jvw,s}^ +endstream +endobj +3179 0 obj +<< /Filter /FlateDecode /Length 158 >> +stream +xEPA! +tzӃ&L@vt{4am2Au #U-Utఱi:cu ,J #;bnWM +(UŎesBɓFS^mQ +C%'3筬涿_ګ=?om8, +endstream +endobj +3180 0 obj +<< /Filter /FlateDecode /Length 346 >> +stream +x5InD1D>hLVo +lpQU8oʔ4yKƑ\StOψj%,$&g7y#Sܓ3:>b{ ת(=bΎ~*mzU,_Ʃ$oC.3{,aKd'ϩbzdڸ&mI^H4WcW;#3<8Y;3nbfޢ&1ZmDHWYꝹ\YUaj)~@؎Rَ6ٳaGcs#$&$biarú%Jm©k-[%XַbIk kU3ҁR[# &Ng|/֫~ +endstream +endobj +3181 0 obj +<< /Filter /FlateDecode /Length 71 >> +stream +x34S0P03f +F +)\@>̌,cc#.CK0mbh`jiRc`@tep +endstream +endobj +3182 0 obj +<< /Filter /FlateDecode /Length 330 >> +stream +x5RKnD1\R'jE{mm^0Iݒ-e.&*O^[~۝w;G܎: +2=EfόzBU U=ܜ,lOGAAe|L <܈BDz^k i6f)+8R{KFl""Az'11sl7nl'0S1q1G+*u .qPOʞ,'MTJ,p8GF L.nh +6h0 #dz1s<|,8}9>Oq{R`9#d`|^H7as)c6#4  ]} +endstream +endobj +3183 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4U +endstream +endobj +3184 0 obj +<< /Filter /FlateDecode /Length 132 >> +stream +xEAC!D#b4]o;߄8όN΅؋[H=񷩙*(C2M/c{yR- \5qm֦̒2.U~TL\\Xv`I,ֳ/}Y 2L +endstream +endobj +3185 0 obj +<< /Filter /FlateDecode /Length 351 >> +stream +x5Kd!D箂 T|ԋToA +Ib).%+L~tDq7RS|O4ܒkےb'oҩ?=,)JW"J#,ͺ|NC+> +stream +x=PKn1 !>ϫxxv3 3 Bvb4?_ +b5am{7رaٰvX%\x[ⵜ^{Sޣ 3oCлT,+L_K2eHAE0Pk +$͎#!Wɤz3qdZM +zQG5WB.lnČΗig/M' +endstream +endobj +3187 0 obj +<< /Filter /FlateDecode /Length 204 >> +stream +xMQAn! +`%!jCkmfF&& ix/k8+"*4EÖ@<8vǻ6Jn^7) V( NG♷+;`CN2zwmRI?,ǙOtMEIr0&vb(,&FCBQxM(VL! Z2\CU`>xoݾyL +endstream +endobj +3188 0 obj +<< /Filter /FlateDecode /Length 93 >> +stream +x=0TA B?! +61FAw ^HޒM0iJ5i﹖?kkgJc}c_x +endstream +endobj +3189 0 obj +<< /Filter /FlateDecode /Length 139 >> +stream +x= 1 C{O < Pw4%i&2&(}yќSowAM=*<h+K 3GS !fqŅ&6uQ ~:컽v. +endstream +endobj +3190 0 obj +<< /Filter /FlateDecode /Length 220 >> +stream +x=ˍ1 CB ,`zf_W&0Al+EiB<,&i82\Jg'vҵ(Hyn܌5E4sO)I%8pN) +|𙳎2vɠ-(hgg԰ J哼 &o=Puqi8\P5:ja spW¬J'ąw{U5 +endstream +endobj +3191 0 obj +<< /Filter /FlateDecode /Length 164 >> +stream +x=C!DV%@=drk@\d`;Q3gɃӱ4pok#Mx ac.UU׽cAi5 mځ?5ޣB(tneZ X> +stream +xMQIn0 yOA%#K\D^PBF^ ֜?F?T[ 1Q$tQ7H7 +~WXw+[:v*B<HZD=sCt >7!Di^um46'GI)flm*V2 +7TFZ622ZOv&'q.;;b >|iqA"4ťgxO\& +endstream +endobj +3193 0 obj +<< /Filter /FlateDecode /Length 170 >> +stream +x=K CBG[˙tc/DWt앇ƔhcO-\tNSf]a2oTafU317`*wr8ےlWaН0̑=Sss#_rkaЙ-eLal- Awz0A>d +endstream +endobj +3194 0 obj +<< /Filter /FlateDecode /Length 232 >> +stream +x=Kr! CBG> +stream +x5R;қASYyɤs6;,Bx!Q%O0^'w<ǻZT6mX& +F,Ǿ%xj=iŒLF$qz)߀4mN%I[Î/ 2HzRÒV scM$#V3\c$$ic%2OůZ1@6l'3E$7qMXsPR侻^+!Z1COYdA T3׾0NF wj+$vVJ9e9d;&l=7-+9dE)%C<(~# +endstream +endobj +3196 0 obj +<< /Filter /FlateDecode /Length 66 >> +stream +x334T0P5f& +F +)\@>L̀,cSS$625pDWRk +endstream +endobj +3197 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +x=P;D! 9/$#pF-f߮)PL~3$G 1%Bn CR zt6:3?a7cE1t=&9 +seVH'"3)*{x,6['= RRɥ?mʔ +:f,dM8˻IR2v"}<ȣ:dMά#Oۙp_dNt΃96Mi*/RZ~ugdZ" +endstream +endobj +3198 0 obj +<< /Filter /FlateDecode /Length 395 >> +stream +x=RKn@\yRUݼokCR*10}ʐK]qɷ^[<|.[Zy%>ܗ!]t.8G 2*DͪѡBN }9/װ =2A$)BnQAaPYQ2jo c BmH@DTg$gb`ѲTD{LjΨD>OM(L-VnS_|t*4U Xy9Hl!:n32`K9`GYutpL~OtZur@MAF2>)z,F3ar4k"X"bDls=L9l֡33*!ںj@vp?3m +endstream +endobj +3199 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +xMQI0 @!^CC9 X 1,=!s7~ٻYz"SQR.bB]ϡ=kY9,s3c}I2!N uZ¸kbZvBzM;" +2;-+{n?R\ +endstream +endobj +3200 0 obj +<< /Filter /FlateDecode /Length 94 >> +stream +xE TA + +O&2|` yF&^XJcP@r-p'TwiIU)ܤyg&yc c#< +endstream +endobj +3201 0 obj +<< /Filter /FlateDecode /Length 54 >> +stream +x363T0P0T026Q064bC.@rs`r22 +endstream +endobj +3202 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +x=90ОS#"qxV0z!8`ʺtSƜ xJM zԴԾhKՉ? +endstream +endobj +3203 0 obj +<< /Filter /FlateDecode /Length 218 >> +stream +x=P1 ]XzgKH"ER*5)/u%YS:|ynd6%*E/% +}ՖC4h9~ 3*K6p*3 mtV[ Ф`׶ r " JMr^>C5Xs S'no^#]X.i5AMZ-^# @qRkp/'S +endstream +endobj +3204 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xE 0D{`~&>Q޿ %n'=\ )n3C ,]q0 \GPaվRBf +endstream +endobj +3205 0 obj +<< /Filter /FlateDecode /Length 239 >> +stream +xMPm1 +50<C hK[e#9oɺCNinͯ vPT%J\n4I/8k{Yx)=2f90=NƯ;$B +%+ۘRN-{|=ލF-j80SѕqCgGW4 zB59p`˳Re]:4J(^7 +endstream +endobj +3206 0 obj +<< /Filter /FlateDecode /Length 320 >> +stream +x5RKn1)@O󪪋okL0`)/YK%ۥ[%BޏR-G- +Q=X/":pJWIj3 P@ƻb2R$siqr&'=YߓKMNI]IJD}B<>G1ɀ6m&%:fU`)W l[00Sbbe5ˆQ]pwhcG i8^8^9c, ch&zОaZT| +endstream +endobj +3207 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4R +endstream +endobj +3208 0 obj +<< /Filter /FlateDecode /Length 340 >> +stream +x5R9n1 +} n H qtR;ZTvˇTt7we ɫRHV!25gRqɂ?å X#D2f[~ix+-XR8y- +V~AG}TX IpPvH 9{,vQ3(1EA%9źtб،7:*[ZYc>,2zXtǃ 4 4e9QVxC 1! J<% _6?m^JkL +endstream +endobj +3209 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x-QIrA+fc+ @tZ⠌ ,W呫h31~+mX@T IcP5vzq ְ̓ f)1ge]=Aɬ\%La#g?2.s=7 FXanV34H!AF6r/tU1s-m_M8kX]q.'/6Qi@HnsxK{T`śn@6߼_`[ +endstream +endobj +3210 0 obj +<< /Filter /FlateDecode /Length 215 >> +stream +x5Q9! @$/xO(͌V\!R!S>z.j4疴-s/fi<CѨQCԥS(>nc! b(,AͩEm'5^ޗSƖV8=O&t2ԫ5 E"<Z42j;0NqdJoWGT +endstream +endobj +3211 0 obj +<< /Filter /FlateDecode /Length 91 >> +stream +x=A  +"i*5=23BƺUMFXJRMSHcJ`r(n7qc +endstream +endobj +3212 0 obj +<< /Filter /FlateDecode /Length 232 >> +stream +x-PmD1 =8\FKE¢Dex!k\%7~WZ@q/"xsLmjA7${ %>Eti(u:s1 EK2&(ITJ &,`9erɢ))->}\n[Vcsvnk]̮~OWrxOO/2mo*Tșk7҇ڙIDkM~nL}YUn +endstream +endobj +3213 0 obj +<< /Filter /FlateDecode /Length 213 >> +stream +x=P;1} +`<ɤܿp^h-&&JH24'v),~td5/ +]fvX3%'LxO?=^#jZ 1(+46¾Z i72N%+ԩ ء\gTHP +B>23ӂaW1,gWx^?]L +endstream +endobj +3214 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xUͻ 0О)x6%r;]q] L8`4> +stream +x= 0{`mcC"C5,42S g HFڟ 2s.5]űH]4)|ﻝn^2 +endstream +endobj +3216 0 obj +<< /Filter /FlateDecode /Length 165 >> +stream +x=9C! C{N#7-/KlO\H d +uk%%AG`3InnMޡ^L> +endstream +endobj +3217 0 obj +<< /Filter /FlateDecode /Length 343 >> +stream +x5R;n%1 @gyb%5H%BHvB;,E?OQ/g8:>Ofb/CúS?OwCLΓ:'gu)XK'BعțJAv V!ٍN:Q.\DNmyغ%gM?ViPH/olšxz*2$g_n2nm80R2!Z&ݦ1I۾0 ,m؜"մJ~QRP7243Ӕq.// REF'C ]ws!>2!`$㧵ȡ[oTxtg}$fGZNJd=(\57]h(̼h/<?:o +endstream +endobj +3218 0 obj +<< /Filter /FlateDecode /Length 63 >> +stream +x30R0P0b3sss#KC.S0# &fZY&ƦH, mdb!2p;+ I +endstream +endobj +3219 0 obj +<< /Filter /FlateDecode /Length 316 >> +stream +x=K0 C9.ЀT1oљE@Aև3W۰Jz+c[ԴW8Q̲'uE||WEQ;u<7Kȃ+s>8dV>*{AME|޿|ןK29}vPr*mQp/yY_V[k;n `'9ԜFFckF({p|T(zIh3b| ݚL.p“r[ ګ-gu[t`pn)&h*ޗCӛ%n]-7+*ju ܫfJ>pyt +endstream +endobj +3220 0 obj +<< /Filter /FlateDecode /Length 644 >> +stream +xEA! D} +_%(brm^" ˮoY*{}m_d+f=,=ͷ[ײϓsXNDh7~21fʚtHVȢŽ8gbV@MiEPYh3b+O?SEo)MXeU0ʒzn-W(٧Xn Em3oMhvEt& $a~S\UoVyiku>In_Lh>-$gubN Fmx+\L6cJPWg뉭pԙp7%ͣ`Lm@8ALQ|<ƀ:9b텂 +{!.ٱNDhܧ;@J{;aʤiP ̦’f_ϫ5}U;OknŨBR:NzݷЙٲ͟A б™:U_}ȰvK3@zbbdksiڌy}YRN,?ȰBAkOK\[OD<9LE{;+G\qjQj-Xs~/(i +endstream +endobj +3221 0 obj +<< /Filter /FlateDecode /Length 245 >> +stream +xEQ9n1 +}` )6oCj'HE’(R^Z2e\RKeՔ/RO?#ԚELQ+ 4h#6V3嬀+zƏ#T w=e}*U=Ͱt™7-U/={*j!m:w|mɄipO{\ͲPߚ:T@xFjdC3U\Qzn|K%+ybK^}L2=Ϙ__T] +endstream +endobj +3222 0 obj +<< /Filter /FlateDecode /Length 237 >> +stream +x5QKn1'sW=u[CTi$<`!8x#%5lC#Ah"2xPV$_&w8'L`EX1? +o7nAhͩPEOUU9@p2{cP4+sP\KxD^ՍS#mtvp!rlȎw{:7\t}Sfhr{}UU +endstream +endobj +3223 0 obj +<< /Filter /FlateDecode /Length 69 >> +stream +x30P0P05V541T02P0TH12403s`9`ahjѐӚjJ +endstream +endobj +3224 0 obj +<< /Filter /FlateDecode /Length 238 >> +stream +x5Kn1 Cs +] LPtR%tʐHytCzENYߊͿy>oOM(b.^SܗJq1Yj?2'SҵX mG^òt.V$#DE/ ěYqjD\ 3]t 2[YeOXw<츲VHIsBZ|Y}\ +endstream +endobj +3225 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x=Q9n1 +~` oCiHH2Eѹ6&CDėia fBp =)+>w3,lvB tHVeII%i;[d#]SNҌn5ۜWAUAԴsEՅh^<'ϲ3R5~k0 ЎyudU]x i劖]JY]MCs}6 o[* +endstream +endobj +3226 0 obj +<< /Filter /FlateDecode /Length 400 >> +stream +x5SIn1 +j=Sג T%Ԓ%CJG]Cfĭ{Z{R\ak)eȱoc5ߐF:BC{_Ka멉FF=<1 *aF%*տex_M+|J,cN_&p +:0^֦z&S#$-x;#jrgF=4큷F\JJRy ^A>Cr6^N!_BLkNςb{PGO> +stream +xMA!"'Tj׌5{q/zpw*R3zpy٤"YOBkMJ ܍ ȃl$Hs5pܰA-~Tñ5֨0vp`> +stream +xE TA +L&A5ńEFQIXzԂr 5:HѠ47Pf^꡴v2O9|h#8 +endstream +endobj +3229 0 obj +<< /Filter /FlateDecode /Length 343 >> +stream +xEMn0 >/`@d'EEzmxxK̐ej>me؜~UsIsg˭ƴEǕO/cq>b}8]tiyQ2 sO4E&/"WD1!IefA]o@{7(rpJw69 s RdW@7Eқԥ`2Ľa > >hWq\(ӹnf]1 +?w~Shɰ4rIʓ ZZ0(jl:E{A!/EҕPGvniUVF&Ao7 +endstream +endobj +3230 0 obj +<< /Filter /FlateDecode /Length 191 >> +stream +xEAr0 z@ %ǝN&=؋!dКæ^*-#G?L 0s#H-'@^^lj&AE,=svXux5r&:xi#gr:qZHwEԟYg#UIQ;ҺaM58J[x_=~gFc +endstream +endobj +3231 0 obj +<< /Filter /FlateDecode /Length 56 >> +stream +x314U0P05Q024W063T06TH1X\00 * <*++ +HU +endstream +endobj +3232 0 obj +<< /Filter /FlateDecode /Length 74 >> +stream +x361V0P0F +f +)\@B.H  4XiLEW Q bAC 4$ +endstream +endobj +3233 0 obj +<< /Filter /FlateDecode /Length 82 >> +stream +x5ͻ 0)m0" :@" }QiZ)5,n,tbʅ=Q:^z>® +endstream +endobj +3234 0 obj +<< /Filter /FlateDecode /Length 50 >> +stream +x361V0P0F +f +)\@>@4XiLEWWc % +endstream +endobj +3235 0 obj +<< /Filter /FlateDecode /Length 281 >> +stream +xERI1> +stream +xEK1C>AsNf162-Bn50ðkpȈ1חɷ̷ +s0>t\r1 Fˉ *@>tqL ~Y1GjUr:zkGxjrNۋ$ĩG> tGPTD xΎv&]&>+_?i Fh +endstream +endobj +3237 0 obj +<< /Filter /FlateDecode /Length 213 >> +stream +x5P 1 =`o 4ٿ('Ł> +stream +xMA ; ,ڵiz_^`eaiLzU/Pɴ)B4 Ě#(7O;_oY4^# ^> +endstream +endobj +3239 0 obj +<< /Filter /FlateDecode /Length 241 >> +stream +xE;n1 C{X>5"I䳗$&s! rK:[kNl ~lLfp ˍOzXȚ!g«镫l٪K9)'{"o2V!b`櫔-kh0VT ͽV3եwHY.Ϭ8N6dKHS(`z&mGfnx}{v٩Cfn77SHԦ÷n~^ +endstream +endobj +3240 0 obj +<< /Filter /FlateDecode /Length 153 >> +stream +x=;0 Cw`:_+%hCM?扁8XS<"%}!ƚش7G{(k-uļU>[ q n5H: l+IB7!.gM):X-Hum6A0 +endstream +endobj +3241 0 obj +<< /Filter /FlateDecode /Length 151 >> +stream +x=O91 +)#{@b'h&GNtIxލf:Fpv޸v3m #rIF XʓlW3ܲDZq\x8I/Dnbp٫؀TJ9~W{m0 +endstream +endobj +3242 0 obj +<< /Filter /FlateDecode /Length 52 >> +stream +x30P0P040F + +)\ 3 &fi 4m +endstream +endobj +3243 0 obj +<< /Filter /FlateDecode /Length 158 >> +stream +xEPA! +tzӃ&L@vt{4am2Au #U-Utఱi:cu ,J #;bnWM +(UŎesBɓFS^mQ +C%'3筬涿_ګ=?om8, +endstream +endobj +3244 0 obj +<< /Filter /FlateDecode /Length 346 >> +stream +x5InD1D>hLVo +lpQU8oʔ4yKƑ\StOψj%,$&g7y#Sܓ3:>b{ ת(=bΎ~*mzU,_Ʃ$oC.3{,aKd'ϩbzdڸ&mI^H4WcW;#3<8Y;3nbfޢ&1ZmDHWYꝹ\YUaj)~@؎Rَ6ٳaGcs#$&$biarú%Jm©k-[%XַbIk kU3ҁR[# &Ng|/֫~ +endstream +endobj +3245 0 obj +<< /Filter /FlateDecode /Length 330 >> +stream +x5RKnD1\R'jE{mm^0Iݒ-e.&*O^[~۝w;G܎: +2=EfόzBU U=ܜ,lOGAAe|L <܈BDz^k i6f)+8R{KFl""Az'11sl7nl'0S1q1G+*u .qPOʞ,'MTJ,p8GF L.nh +6h0 #dz1s<|,8}9>Oq{R`9#d`|^H7as)c6#4  ]} +endstream +endobj +3246 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4U +endstream +endobj +3247 0 obj +<< /Filter /FlateDecode /Length 132 >> +stream +xEAC!D#b4]o;߄8όN΅؋[H=񷩙*(C2M/c{yR- \5qm֦̒2.U~TL\\Xv`I,ֳ/}Y 2L +endstream +endobj +3248 0 obj +<< /Filter /FlateDecode /Length 211 >> +stream +x=PKn1 !>ϫxxv3 3 Bvb4?_ +b5am{7رaٰvX%\x[ⵜ^{Sޣ 3oCлT,+L_K2eHAE0Pk +$͎#!Wɤz3qdZM +zQG5WB.lnČΗig/M' +endstream +endobj +3249 0 obj +<< /Filter /FlateDecode /Length 204 >> +stream +xMQAn! +`%!jCkmfF&& ix/k8+"*4EÖ@<8vǻ6Jn^7) V( NG♷+;`CN2zwmRI?,ǙOtMEIr0&vb(,&FCBQxM(VL! Z2\CU`>xoݾyL +endstream +endobj +3250 0 obj +<< /Filter /FlateDecode /Length 74 >> +stream +x5 ! C{O!ANWo/ hgKvxIX'o2xS4HbEunj$^> +stream +x=0TA B?! +61FAw ^HޒM0iJ5i﹖?kkgJc}c_x +endstream +endobj +3252 0 obj +<< /Filter /FlateDecode /Length 139 >> +stream +x= 1 C{O < Pw4%i&2&(}yќSowAM=*<h+K 3GS !fqŅ&6uQ ~:컽v. +endstream +endobj +3253 0 obj +<< /Filter /FlateDecode /Length 220 >> +stream +x=ˍ1 CB ,`zf_W&0Al+EiB<,&i82\Jg'vҵ(Hyn܌5E4sO)I%8pN) +|𙳎2vɠ-(hgg԰ J哼 &o=Puqi8\P5:ja spW¬J'ąw{U5 +endstream +endobj +3254 0 obj +<< /Filter /FlateDecode /Length 14670 >> +stream +x |Ug9&- !7{raK[ &"ZeQDEV[-h][֢"Z"ϜD@jow3ggyf朓 +)5s5Y.D}sO̫Nz;[؂E''Ǖ +q\?uqg.Nfxg4/9q\%^k5Dkc0$Ǥ'$7ۂɌ[Ʀ֢1]0.#]YĐRT335,-.O.-*giz?}ܪr񍍭?7ڌbJ6qވ8-fq(##55@Ii%9CǗؒQҧwQ=OfgL,/kŴSdԢ^R[ )r=Fm"Đ<(<#5덋уJWMXVvM3F'UݸbԨ'gW8/ċF9*c%ƴ%s;R'5MYrCll2&Q0*tre9Vqn1{/&541Mg`}px"˃H +aMFӚ`8u~YI R+XVsK"F`/1ZjXh<0jvɁ워M%3V,HJ +dv_I9=E%u1-{iԦ/'V2kTy-vefNoJ dB0O! 0LPBz233⢒vC*>ge|QL/0WU+;fДMޔUêU3&z|4f}s/P4`Pܾ$EwL/,mtӷ0F4wȝ/[gQ&|=yqfaRvN>Czd:I}jL@%W-s1ZT{ S+_X%0 s-.&8L1T_Rѿq5s:?593;v[18=s{K3"':6]"tPCnB" +ɮTf(p'75ٲWfaSNc~~cNNcAActbvHcӟN_Դ1201?b7,ǩm||:czeN9aQ|cŹܒQG=qԲMI +&VV*:5CtŅ!& mSE55YcT˒tk69 I9OE#oeK[ЦCTngoYSkl8Rp9CƤgg 1̷*G _>r҆.{N.Lhm>Hɚ WǗW\1y!N+4*l@55'&.ې//aWi tŒ͋Ke 檪\ T{QWVsL5c*vJi Q=N>"+T*h[V&5gbSSe0hSu01!Hd8ĿU73PNɲn/#Rg٪ݕx3[g8r&Nn6iCՌvKl2a|4*9P¿282_BiNTGT|W?5TV(>vJC˲k(1Na#sgRޯqAKccpgƼUUc±tbQ)*sПWM[C6ckRZWΫ(˜`ttD\ADW;FwON}'xctۣs^˳[!3j}>~dR(fW ˜7yhP{9$xIZ="6T#XrL_^qI^ܤdOoшA32J:#f32Zؔ\ףo\abJQቝdEMED[.Gs&"g()#YYUUYVT1*zZQBĤѩM)ai32}%iE{\ɪdu0$2*ߋ~xb/]+=x{%'J'i.IcS%ǫDLrvUghߚe~y_/8:QDh Y&PM+68XmK:d(aDo7*vTpo\rbڀ._svW>bJiiuY +dRGE}+--!'{Z`/nB~g\2ba5 Mj:YUE7b 9HԮxqZq sXʐyYGQͩѽ;GD6uP>G+3K1 N66W>r0ٯo:7+83DnOSOjn I7.8gF4՞Cy[+?oj-gjG" C3g N[%|f MMO*zWǹ|1Mfi0 &% A:o#"dt=5R~#UĘ3OnG%b]@کh"Jt=~,=ئI1\D +9"¼Ɓ[mF(qb/qGv9͘NDz8ax WTq M̳ E=nxp91aڻrH>x +<VR4W`"W]r[V>b8Usy)},iHw +q(qMosjqоuak_3BK#>_t d^}*|Ƚ t;al%N[|,^bPhmeSjy5Sk~E6;6;e6[i(Onl)x*{_gߣzR8ʌ}Z|(Q(kB?>ĿQ[ͽ6N!G! ]ms=۝ܨW\GBٱm5]_a܌>?֝j^h~& + wٓ2x\AҨ򯱿1o|jc7rwyj1P# Ӂ{#.0a T6ҩe;| xec8 q\~s~Fa@Ȃ2sm|I6,خͧӉ 1NJB~K˼O?UZbꛟ +ݾK/@- +N8&dSѕ:6{~"2aH%:R7|0 @- *c+~kea>+y+@]==H0{DOf=ͭw8zKl'9Һ\xIܟuJݢmXKXsWD?>[4CG>5T*8OE?֔~2GDr̀0EOɧk=n)vD|HT'*QmE}E ZaP +co2MFО{iK6'0 +|POb9n]./y?R >؟U1泑ػ3u'fi$qE:?QAe6wAR2(:u4ȇ T(h{wB"q룏JJڤ׃Ŀ*:/If1 +39t4f0"3JdYC'TLse˂vsx$}mEε:_"߬9lٜam"R`oQd,",l mE?GZݭIV{h?f>tfwhDtNZ/8DxF@p7>܇w2u0 &高W>v8y1}L WN$Wu^U^!ϡ܏(mC279Ӗu)HY#w.GO= :]&;m9rh\G_EslEkgq0 1 + ec _ѣPA}AQEmƾMh`_AkauD:(vTPbCdP([7.3p}ga~XIbA]V>Vb8l$ݢk r}p1 p#,'\.,9u S 8wVu<ꖻҭA-q5Oץֆ.PH#U_r(3a[wc(A8QWs&/4q%1D)Ìr(gǿ'hc1a10ʳrx 握3/0"§:Vll7lw?9 :.04%Z-r\&, g@+,8牾\WOicfQ)޵?RX8sBe駜1cLXgRn,qP}-;6]Dž&YtVH5^բFw4r`L}r/B,,fPc'=׉Sދr@fRm_Os/pI S'{ƚ#ƫ 7c3~Ӎ2d?SO8׍nkRX j<<6e(߱ k^ 5É?1#C햫P~Fk47>M_w`NCPyt_h7{{ 1Y_t:֢՜yV#Ȕw2iϮ1T}S=[\ +k8sT}Vn]nx_/CjRSM=yqP}f?-})x# >ipj^%n}Cl/7iDz.@f`Qpj-RuZ?l`mW[d=gjmϧ݂σ;scֵ;&/]N{hl{$e"JB*X!KqPnEn%6mLKddĘ(̳3,hE+gFN {J922sE93Eq:K;hẄs\v3>$q3IQU8Yoȟl~>{ &zOx{\l +7IsoTӎifSJS__-(_ˍ^%⍇#.dʽ#Ї*. /Q"QSϽjD;w 团NZH~|4b_&ab~+]%X9EԲ7-k5s !:p'͉ Ng[DSY_F_ω7V{4Wp +(nQBk^~ّ7\!:vwcΫ8Wo;|O@9 šع.^lv s.9nrWW:a|_4%8å ΠPiVG?'!42N9˘øµ^ EggR5ή`Av$Tfq6o4KDusE5|w_%E sNce:θGu(1!KT]ueN +:ʚmLE&+R7Y[^(flNFn n07 R&zE5uQ D i_g,t2GSFZn#ד8ՆuKekhe[LPGQy^D)jo{.Od-Gr]ΰws1zg=Fb!o+T!?dݘ-^`=iqv4rr,*-x!+]_ojw}e nsʰ9I5D<.|P=!SCt o !?{jQضQIBMevG㕴cs8t2ZP.qfk:LFlm㱬}\)ʱ#؇t>ϵy)ȭ3V뤘 3nZf-C %0R)/1?#36|GFS.(Ma{= +Z-q/qG/~U˱F7Q.g(.D@ p!?0"Q׋E$>?r,uϴ,?g>(̗DV-[S}yuN !Q=4ސֿ-]`+a*uնէ[O3({C)vu|_v(?9kXnGoq/ Ͻ&׷.v|hP틯xol'oBls?{4Rٸ$t8XCqI7%&yPW0 +3q My:zx) s-L3~G p:9 +9fj|L 7;qFk8<63.fO 8Dz܍3~oo4!ި%[a=M5Lu6u\_>9\X7_Wc+K|G0WρzƷpz'/ +foƐȏ3I7$_!j' z!CE/؃|dJwOi״ rY3L'C=z +rHa|T4[Sah6Oa^7Gurf ;slYyYoEjPt G#תiӔW_8.ͧI=6>sy:'\V>x txy9ԙėAWȄ\w[Q{}|Ýo}ۧpy9́ꏇD,Ygҟ/y98mYO=vs-z3ΰyڝǗu|pIGGGG*:fS?$.9/Wsa?z~s U투 co3M0~/ѽsJ߭$f)Xg0 +;*,jϞeFAɞ/n + Fvmyizڪv/8vsM6k:S/P{W,G9n9G:Z|. s֗izݒiF(e=.:.3q;t{\,0F{ކ5~g}m3l3tPvZe"*@S׺ߡ<1ɵ=z̦IXޯA8ש`޴g©y$׈ Jd.r$r$s˹Nvmpbj?+Oir4ܮ.k?eii_p[Ga:$v} y)'G]d.L#窿7^'A*u3Wc5hƫK ?q f>+qxg|9 +S?$bzspp7Lszf=\9̆E?y֠.+#bD?]匁ɷ|;//ۛ {E6罐y(8Ә{cit{%fkRp9]sέ7Ey 7~O)e|>~rCgD"s(0HÙd{`>$z˧yvl0L;Oe/T ̹(|[p ;6xVA,[`~E?Sϰ/1's킫)e2GWx:cs%LD U0G8e7 vcnٿ8VI1oVQH ˜3b&~y68.H;Yz(ַԑKE[ԡe<7?$ÄS @ znoK ?v-ҁ-k][}5!8mτ7cEJ]s^I^,Eu#~e7~"$Mp!-(8B#u˸:~MJ>FiQ3sQY) +<@ƍ"Qtv ;:~zpReD F>N:t{pI<ןz#/EW]h=9cH$g|F{ٛ Wakާă>P'bKn. O1X3W9tWe2wxdYCuH|^H*AzSֿ's pXGn'=ol𞄞|c\ZHP3ݚU*Kk$yʧ[CYmt'r.{ǻ3^!g{C>.&7ߗٱ)6UBTGXQƞ\*49}WY>͓9&pӃ|[׽lQflEr6&N+WpV׻ _)L50M5pnâ؛e9XT;2Q_,#Xɽ3_s~ߢU>{UPGjIoWەTEC<$c~2ݹV*siq%0M@HF#ꎟ6>trөp;և5f;pxzkC[(Eu( 6u n9#Te^Caio[y'kor0eoq){= фO\)R(5>w4bF.>{Wwr S{ǬLֻZ:Q-|ԓMnčoϭkW&R@U+% aSݥY Wf.RS;OrvXͱօ٭5=AŮ\-<;x }D[e7QΧ))t%7އWx#[nHgRvGXg~GEoiǠc=:ݏAϏIs,\G3gسճ.ĞqGj@^zx=bmz^=Ğzi={=/8 7v=l16ezm:^G^^?||?z}:zVy[Ye~]cL'O> ;f\' 6~9OoCk-bn7n%3^$]5y0ܭ#Y|);,|8"QE:'*bK8xo뿧?!;V}!i8G;@0H]r5FћoQ ]I-ߤ~-꧒BGP~LslBhg6w~& Md zpԶ #NQR&#eڱ40\),`t׶P%wJdlB.GoyOٛ2gQ$h +f¥NYW:D[9ﳶ1Y "ϋ=pmf޴ C=`s@uNk}!gv<'JvNڟk]n Z(hW9UI1NsƑ{*[%Na>q(cۥX±*-8Xjf3onN`A񝌕O}/) + >̼65ͷY¿f1ozD/c(>Pof%տ{lբ2U+Rz_ѧf>zW> Ww6M=0OS1 ͣp~򴕭VFvO]#/[}ڝԿML͌Y&b}es}ԾD챣MCmzǥenƊv}%]έ>zj'}=;,ּ2cnWq."hiA[ >|N +/ѭE ʹ^qIpqQDl7 &^7e&voǑn'wg;c ӏ^Ƃ=.uXKϻA:csȋ##U팿ջg%= QcZQaDEK!R~^"i\KcY~d+Ƹ@yxH)&#kמy/z7c)=Bh;v{{-o@ȃ9kg͛߅0fb|oģ!-Vm`ϕmnWf{z/P~bǸq={?"EY`e 6sa>J7S8vkڒ8:+u˕ DFFJtWDvꖷFz+a;%"Le[l m?|Qh}XkuvF\&>Hm!sq}q5djBܟYw_vc+̇'V}>WrhQ2_HyƫωU>GVWbwt+xy +v,;$97.'_'(wi Cɼ\at>©P<X ?=*xcڱG&!؅пag]΂OWCv: Oz9L0a„ 1GNZj9.s &.]b~ &L0a„ &L0a„ &L0a„ &L0a„ &L0a„ &L0a„ &L0a„ &L0a„ &L0a„ &L0aqp;\@ +GtUW!EWc]*/x +endstream +endobj +3255 0 obj +<< /D (appendix.A) /S /GoTo >> +endobj +3256 0 obj +<< /A 3291 0 R /Next 3292 0 R /Parent 2724 0 R /Title 3293 0 R >> +endobj +3257 0 obj +<< /A 3294 0 R /Parent 2724 0 R /Prev 3292 0 R /Title 3295 0 R >> +endobj +3258 0 obj +<< /A 3296 0 R /Count -6 /First 3297 0 R /Last 3298 0 R /Next 2735 0 R /Parent 6 0 R /Prev 2724 0 R /Title 3299 0 R >> +endobj +3259 0 obj + +endobj +3260 0 obj +<< /D (subsection.E.2) /S /GoTo >> +endobj +3261 0 obj +<< /A 3300 0 R /Next 2730 0 R /Parent 2153 0 R /Prev 2727 0 R /Title 3301 0 R >> +endobj +3262 0 obj + +endobj +3263 0 obj +<< /D (subsection.E.4) /S /GoTo >> +endobj +3264 0 obj + +endobj +3265 0 obj +<< /D (subsection.D.1) /S /GoTo >> +endobj +3266 0 obj +<< /A 3302 0 R /Next 2734 0 R /Parent 2495 0 R /Prev 2733 0 R /Title 3303 0 R >> +endobj +3267 0 obj + +endobj +3268 0 obj +<< /D (subsection.D.3) /S /GoTo >> +endobj +3269 0 obj +<< /A 3304 0 R /Next 3305 0 R /Parent 2734 0 R /Title 3306 0 R >> +endobj +3270 0 obj +<< /A 3307 0 R /Parent 2734 0 R /Prev 3308 0 R /Title 3309 0 R >> +endobj +3271 0 obj + +endobj +3272 0 obj +<< /D (appendix.C) /S /GoTo >> +endobj +3273 0 obj +<< /A 3310 0 R /Next 3274 0 R /Parent 2735 0 R /Title 3311 0 R >> +endobj +3274 0 obj +<< /A 3312 0 R /Parent 2735 0 R /Prev 3273 0 R /Title 3313 0 R >> +endobj +3275 0 obj + +endobj +3276 0 obj +<< /Ordering (Identity) /Registry (Adobe) /Supplement 0 >> +endobj +3277 0 obj +<< /Ascent 3117 /CIDSet 3314 0 R /CapHeight 667 /Descent -2464 /Flags 4 /FontBBox [ -1475 -2464 2868 3117 ] /FontFile2 3315 0 R /FontName /PMYFND+CambriaMath /FontStretch /Normal /FontWeight 400 /ItalicAngle 0 /StemV 100 /Type /FontDescriptor /XHeight 467 >> +endobj +3278 0 obj +<< /Ordering (Identity) /Registry (Adobe) /Supplement 0 >> +endobj +3279 0 obj +<< /Ascent 3117 /CIDSet 3316 0 R /CapHeight 667 /Descent -2464 /Flags 4 /FontBBox [ -1475 -2464 2868 3117 ] /FontFile2 3317 0 R /FontName /PMYFND+CambriaMath /FontStretch /Normal /FontWeight 400 /ItalicAngle 0 /StemV 100 /Type /FontDescriptor /XHeight 467 >> +endobj +3280 0 obj +<< /Ordering (Identity) /Registry (Adobe) /Supplement 0 >> +endobj +3281 0 obj +<< /Ascent 1040 /CIDSet 3318 0 R /CapHeight 662 /Descent -307 /Flags 4 /FontBBox [ -568 -307 2046 1040 ] /FontFile2 3319 0 R /FontName /PMYFND+TimesNewRomanPSMT /FontStretch /Normal /FontWeight 400 /ItalicAngle 0 /StemV 100 /Type /FontDescriptor /XHeight 447 >> +endobj +3282 0 obj +<< /Ordering (Identity) /Registry (Adobe) /Supplement 0 >> +endobj +3283 0 obj +<< /Ascent 1040 /CIDSet 3320 0 R /CapHeight 662 /Descent -307 /Flags 4 /FontBBox [ -568 -307 2046 1040 ] /FontFile2 3321 0 R /FontName /PMYFND+TimesNewRomanPSMT /FontStretch /Normal /FontWeight 400 /ItalicAngle 0 /StemV 100 /Type /FontDescriptor /XHeight 447 >> +endobj +3284 0 obj +<< /Ordering (Identity) /Registry (Adobe) /Supplement 0 >> +endobj +3285 0 obj +<< /Ascent 1056 /CIDSet 3322 0 R /CapHeight 662 /Descent -328 /Flags 4 /FontBBox [ -558 -328 2000 1056 ] /FontFile2 3323 0 R /FontName /PMYFND+TimesNewRomanPS-BoldMT /FontStretch /Normal /FontWeight 700 /ItalicAngle 0 /StemV 100 /Type /FontDescriptor /XHeight 457 >> +endobj +3286 0 obj +<< /Ordering (Identity) /Registry (Adobe) /Supplement 0 >> +endobj +3287 0 obj +<< /Ascent 3117 /CIDSet 3324 0 R /CapHeight 667 /Descent -2464 /Flags 4 /FontBBox [ -1475 -2464 2868 3117 ] /FontFile2 3325 0 R /FontName /PMYFND+CambriaMath /FontStretch /Normal /FontWeight 400 /ItalicAngle 0 /StemV 100 /Type /FontDescriptor /XHeight 467 >> +endobj +3288 0 obj +<< /Filter /FlateDecode /Length1 69504 /Length 32465 >> +stream +x|?|f&f7eHdSb  %H bRAQlT B(**lp)X*U ?nA~fs3gΜg fF׌`!s +n>qtcx'&2UDc.I# Nzc&N13zxYi!;~:{+ Wo> vV0qu?6ZӏԼ 8GN^-`Vv/t?M 飹Y /-4iUS5uf0Cf7}Ly>n$`L(=vJI[ VHF/~3,6~1}!xs"QO{ yXF +/GwʓaB(dH?8R0]+0]{N8,^&#i"mXgHaSvbك1-H ^R̓Jxw.<\HB $ؿA1E=. `Ib0.1\瓙||3؎/?-]Fl`Y|ze';E1ߜY|셈FK80a>_G.[\f˷.k#O>hx6}GjF\8e UD6'# +.pe)aBM#hA8/q6؀taR&(~/wp7-A8hO@?B5UD>Apb&"Uqx _ 6$s m"|r`5(s! ˾Dݰ;Pud뢟@7?ܟȒN'%ryF> +|m\G#z4k@. iY@>[ʩ_>{JlAk ݡ|b]8#:.%mʿ>|ݘ7-" a],zoҽ7KHx۽Tu-VP8u_wۋ]qm)uv׷4Gy ގ|MXo\71\HG&C"; mzOnѬ +:,_Zv^_0~ +.'k8>NcH`THFtBy_t<,4,{u>X9ǮoRhuW7Nq;ϗ`0? |e2Zpmhfr;ۍوPsqq3,Qb̞F `#p}<:~#CNGB': *f}tb/"D=$D/Gs1'`ӬF9y(b8H!4X^#s/Cd(ok-Φ6Ix\=O{tƾtE_ampY݌|-m]d!wHӑ؇x qZE^,7Kq࠯@N19kYxsǽlAӼ9H]Z~@HA8o_c_LGI6+'N]p]@ܠd2H6 +Ca18|~KqyzxCYy28w~,wls 9ALhWfC2v޿h|*`[ҏ:$֠9G|r ok܏"X?맧hׁlϫ' -חcm)-ҴYUs}NĎ@YEz#ڪCq^|K3.pq/"݋t1H_Edb2EHaܯX-#~` r#ѝ@< VOˏ0/o-Hw0/!Dr(?js-mG2ܖ3T߷= erۙۯH=T ;5+4ӭ4 F#"@Ec{j/h[.ЏIqCBw07V/Hw?25t:5?]#kj?ƶ@ ڏ~$p\S?^bnNou>59d7}];ٹ_/uK$o+⯔==-?Ba| <647_ň%!H +beG7gېV*![y{z7t!]H֣-+:_F]{藍乥r\gzۗXLDWD(1iqu*}.;lϻ`ND2s tSfg|viP?[Nn:UQL~VUt'(~6$ ŝace +Rq@D?gl +!h/~>%vD{?Ϗ0 p[|Y{*pռܝ.u7~yRwB28(U`]D?ˌmvMۇm1 C̶vV5~/;KaoyNH m[q2} ;+Pɿ "AX'c?C%߻,Q@: +Cl5ow0qlA R{(~I3F~&,q0{'K?K%aN[LG.q.Xͩx=MtuY < =4;g,DGT^/vzg1ߙ q3w t;'c32/Sڅ7vDg_|%J5Uѭ!ރxv3Q7`j~0.c]ClN;ư@k`E3`:It4xlkXG/l̰%0?wnp,kfsh xLK`8-ҎJWpgK`Ў*n+k /W|Nl O޻e;P?x g^; )n{?DT |/iYbcٍ_p;W۸߶.ټz{}z]}v^az7ݘt/=}m ~n.Yn{)Dz-P8OiO0c>7;xAYMz^:anG#vkA#ToFŵs껷Qb<nǝl>B-?P2WkTQ_>ԟV=L<:{7 +P4_Ǹ5+?Cnp("i:Sn†#h]u3#4ni}aj8oTAOiDGZt=5*5Z܌|9[hzb爗:/\l?|X__xO^"ڍk#Hb D7sF?=Ov"NIĉA,Ṧz+Py"։:eGVz 11۾ݧoRwm7o~4]{juQl56#ȏ9~ψ` }e}@w9}oo~DԶ]Mw$ ~i?e|?v#CɄ6w?z,}O+3eY\ +^~6i,UY]!y `7 2v"6v\oŏMhC!n}齈OhoD)OiQ91l~<я~;oOaۇGV\3qu;N?lj +߆+vAEy\~˕x}S~{\f6p]{W)-m=_oޕ Su%~ +^S"EHC.KLLKo-C0O\v+]ໃm{{~vv٭o&g|Eh3z^ CQ?d yZ?QNݟlQc|:J?+k0}]Wzߙ!| 誯tM  yA|4ȇ7zE~&Xw/ۛw6?W-l[۴ +܋^/z7ۋ6>N;{{.Nt l +.VZI_fvևMb7=>dGW5\A<'1)B,Ri'ƍvq%g)[TZ iYonIJrrh &X,k{kk7k:::Uh ElN[mmma %'&D$$XR\ ='SnsvfG#֑HswtsLptqs,t,uދħ~ MӸag&918N'N>a:a<0PO' v{ÿY}X';s;|hܡ7hO1=0xFX`2M0n0 nV p')wL?IDG%D p,'+J\/A#L $YE"*18gsyYM^$kZyB֑ZRG< rYO^%F@L$l"I01 + #d J"H$YH^#76&yDhX !o$%q$Cvo;| GX$]y"Cb'AdK>"Oȧ$dBR|CI "~iDz@zPZ*=$=,- +i%H{%QDAEIEETEIIKHϤϥ//AtX:"}-IHǥop NJ39|I"P,ȡr.Gȑr-cr/[dl0-\Ђ!vDZ;Ӿюk17j7 ƋKF#nMDˉCvIr".ѡEjQLy<[[##+ϕ}By|X^"? ?(/ +Pw=:q Iy,| _~8?yNd\/_բ6Zx͢Y5ٵD͡9$-YxPX +)EJR*W SJOR\+>JWW((*)Jer2X U)UZ4-]2,;{vRkek9"~eDy@yPY<<,SQ++ʣcʓ&jb&3, ?9rJI~#@.KMPJH%*S@ҩFDh05Jh8ɠ4d,EiCci[Gmhi$v$IMI4TkW~vJ;*;iM4fv44vwmvzEgЙtMs=^:W٥|V>T({OO}gʗW~rH9QV*ǔoʷw rJ9Q*?*?)?+_ʯ?ߔ<:_4!*)F1\#(ūJT*FmT +J*TM51bVEjR`,ZE 5T S5RR6jUxբZUMPjKMEfjNVsjAvR;]DvU<5_ujZ%jz$dbRMT{ej[V}~juzzz:d4LA`R^VCaj:\TGju:VYW'Ij:YINUoVE~.R}.Gr zv^U'===^hk7za6gb=Vֲ:V^ekM{gGla߰)vH?џ9 =O;.+:wvQ5j^^%H a1&ГL4MݘP,Kb/OV,PqX-oo$6f9H*i4Fm4hT&c1g$ce4;Eƫe>Go05a2E9LU @ Dd A5 h0 !j3p^UpAPۣ>>>>iik_h_zB{CH*l7PafÛ0f?=>w"r]îeױ?`h4x5_ȷ(1M_ijfB +8os ɇŤL#Rr 4;4U*,BwhmM{t=t/~L?!z_ӣߢtvGi/afe629R%F9#V}QJUp2jemq!qx3J$F̒X2Ka(ͷww$Gy| bi(t2YkDzYkRzNE<{R<%F95:QNq( q%%xD7e8 e%JYR;is:JqWԝgv"UewL%YQ l n6.b%ΤTWZzFfV:vܥky¢ҫzUvuy>}p͵ t!CU #Gaq'LqR䛦Ly-N;kYsϽs_pE/^Kzx#WUO=̳=׬e/ʺ:OW7llشy^cۛwv|w}={ᣏ?tg×_?ZMZMZMZMp&znznznznznznznznznznznzn?7q^3׽[.;um.+3#=͕t$lVK|\ؘ6Qa! Q3,JUZgU0Y@UJZ'1SVHt7$fk7薞f-[kwۭ dP߁^Tl֞{6f ֒1ZRe--6fAIU1WE iPgЩ6^SGQ%]((&lTm9J;8fLO%E##j^Xғ@^MTT+X}ֺm 6aD8>jlx%#ąFv, -8yl,[P=ʽ ̵֮;y?++ KU JIJVS9܃UZyOx|m/!U㬵>f*o= 1%mmaAm6IO3[wMt5q{@ZGZ%اN1, ᧒`Q8"ckբ.<fu/ᩲ:ǐaIa|]rզrpLy?7=mZ}^c"AAvxeLd7@O̾}~+;UYKx̶@L5j .0 0A!a? Pϭ9$7ȍ>2G丷b^&GEgz1{&!A9Ukt!G=9zt9/%rX +oE5u [%/B}< b*aV/M .cn*ٌ}/`AA( <0 a%zKY+Cl=65\)W@X0x"c:ه +OT@/W}rF7OX#Czs8.e 7@Peu Aaf (&_Io+b AfLItӟ d9=1¾Ft'8;ػ`l}9{& &M~HW VO'Wϗ{ݡ'&C{xOź=呝W5޾sDkinLICj^R`d dHIf{ E6"1nHװٞ˶-W=y^ +4J 'm*{K 9^۹zgl(pԣ:؟Fi84qhNc+N;10M&;5l?,A>I[zWG zT#vX`f:'f}(n==Gz's1b/ Bd`a-l'(]s'"AoU~쉍~;  $OVӇ`z\w}.Y[Xo=/FwzT\BxK.SևGe[PNvCI>PQ,[Q6T!V!jq6&1ΆzH0^ñgjX;G,F8*, +KKDnDb&bb,B=,IYEB8Vi؎4 eVX`]Bf 2`3 ŝHv HG*F,խV̬ZU摻 qJ]r*rqD{ +$! !fgve{c{)g{:x ۓ~(L:sv8L"3b"XH&'}0Mb3b&Xpϔ Ti5LeinBcfͪ%*w{5V&Kg%5LiJ,r/%lAݏL]Z\z6|Kt>ktˎ,B%XW+=;j/1K~nNDk"Dr6Mktˎ,{ X0|>8`|$g)tӕIiӕ'H$ >#muR&&{XA0]E"Wb!gAsw])iWxHCqMYIݕ|ݵNOaUUM. >y] +amnBd$Zѡ!Jhji=f$> 2佉֟'C:w3|V~?ǹM%v$I4=hBBF1 oLH0mL0I0-M0 N0M0]J+h;jh5vYMZMOYMVS+&'?zj"Gg&K{S\{f\ u z01'5TP܁IOMHO:X2``@bOww޳:MC]4O + =O'޼ɼɼz]e +IY: ++h= 8[bm<}tEY4We^XkBSGaT]]mjC05dl1Sox}S]%z<&Scꏟ +7_\0U4$zlq,vUNWX'Z7#uC_"sSK9ۦ[{u Z{gcƴ<|mKߛ~8uWUI7̃]Dol4:xlGL_Յ.;"oֳB\aOu*X,:ڲ {q ]c/Eq<y0T׉>?w ހ! A {g(CEk2ZeP!&XR +pq]7"WyY  k1j$P݈utG`% jb vA,a +̅xa,Wa)nnDp#)x yd z FMD&a$N޽`Oa'K(7|'04l$"Bs0Xǒ=`>m3cAg7a$@l6 6ǖ.gMxN`idؘk.( +r-n'Fzboǒ_SpIXrͧK{2zu0^"N&c-o' na6~}8^|Fb۱0{1M J$XI=l#GhӁl['.N.9pl=5S$sfb|RAy;îc2-, +o Ə#y9YP!P !6|E%XRw KFd ylWy7x5˛]}̻{J(P5fb8|=}=gq . (II]G[~5Y$Vn`VֳO>)=N#y8L)'>%>#%/RiAN6 +4K/[WIBy*֧4y\/d%K߯өl}m~9S\-}%k vG-lO;Ic,EbՎ&XW:ӱCT91 !m'Z8#.@҃d-݁[!\^ XZD'`7I@.~"}+a1lf`љ fWcw~jKcIa,=,0:A'2 bމQ+JI+LTOa8Cr7mDFi:%Nkn܊QůV2y^' Oah%{ H ԠLF]<#9K q>=kȇpq:|3' +H_r)NH':zvmئp5WoWk_\:@wƕ}@"8G|U(AţBZcoo':F"q5 B+{w2[6^E]V!> W!\'^ +W&@R|;{߃?"w  VY +` /5@g>c\d'1mcy "̬,٘2!dRJi'v).I0v.F +yqE-qvR@/z4CVCa0 (40;HOUQf|+d1Q17hVCӞo o̮]tekm2[WY\h) «1זMϹujȹ!u|iȥsCC;gv;e>ՙs2\Aw ھ]!DȨȜQ,Iɟ9ّ&ޙ$iO"#/f#V*9ڝ-ߐhnygY7NjiN75sfu}-srN?2W! |8h[vo]V[4tSE;?7-422R +AiGa9}H]MSE0[0`nm&k&- FL3] !CHUB̡QQN1}pLbgueXGz3 -Z׸Ɔѥ}Ϥ 6ضJm `a]>O_Tl]Y[҇*1MYa7Yr;to&9r#yڌiWkXXQR0ha-BUzM[l?FdNpfŸt?@H//v63rrmtM*2i5-y COIc $̭Y,m\\{/)?D#d(>dp^'%%#߱#q|)?NFiΈSy3\(XX4!}_fK$˽4Wo5k_chM$)$6CgEEi?)PȐHh)`6Ԗb 1۩Fà d-BBDeNHL^r6HAU#If2$md9k3{: + Yuʋ'"K'kS~ % :_n1 +Pk\CB;ѧOhҹ3)b{iݺݺEl|svБH cmfĎksh &|_w&5Rmǽ̞SkVmB HG9>4L-|Ҙ{D% mHzоmJ~jBD1FVso}1cUƇ2=t~ jsQ;vHpEyOԽsn2c,HLb ,w + MA47bHh8.PɰS$PǍH6p.V 5is!>ש!燔ӧ(9ds^법ȶr(R)i48@j-:j .s\f!adNɕ0P]FpHsۇ&dGAuIig]7_q]Onc͔ Ȧ V̿-/13ϞX=ū3o3ㆰ178V4$7E#!# F8HHPqA A4!76q8dɤB&i_,=7d2CsivRg9óYxd)2y<+S8ͧr|2DŽQ)9)%)5I}Th!H aGRX[pao\3kܛY!7==׆<ǵTp߂ +'36k~Y9W ~dya +{8ֈ1},a1F{!ݖf юvڨԚS$guG5JnqG|`8߰-7,XV$kxI;"g: `9h?$<>+>. }]JlE'$kw$-%%d'٬q) v"Q6A9FD#"YY.9d)4Z`LX^'R8&Z#"(!18ŽB8ix{8\TCKzi$J )8 NiJ }j4ýRd*j!0΋ k\x=웖@ +Q q +K.)N%&YvRcCo8#6d1YhP^\0XP'ǵIHKN$h2%uHv$%=c+v'2JKpU}Dhov+cːu }CAh6`? WNҠ'Ed7T|b +MiO:̜x7ooΧc`sbq{K!ܑA)ZY$q,Jj*c+]E#nnI^S wܔ{SGR_Wk8vȽݱhn\([2#`i|%]b\3&hА<Fs6s8V7|z+/!Xm/hF'Ν ́"'W%\g[S` HJD%,;vA6s!ZR* I&[M[n諞o' +ݙ yƵI@: \{E\CdI;;]Zլn7ow,%Nh۬p\çnjAD8t:%1W.]Ǯ`-&ϛ4/XN;7XhBB5.4!!G5.$B)Qbc-4678ѥepj 0|PCGƵ?l#5m6esۆfj#u57tœO87pbDdK|ͅN +8S'Z&; 5ISٗQ\yWu=s_4:F}-2.6;`$˹g? @ lp,02Ig [ lNn2!|OU^^I=bzEB.IJ Ѵ1=O1 lfc3<[BJVͲs$ms`C`odRO PSh`ŬQ: mqo:VsZV|6צmfZaEId* [@ c:ڌѽ;bǾ{;}t+#%RBȻyE)4s$t.Jmt"ȱؔ;(1BhFPs3BDcQVa`&E.3B-!Ýlo[~Tj%W[E)5V>]fNL9:׌Apm@P]. "&;RH(@00h:یOu&ͳgǃL#mx?8qEdYZ1p𿲟Y{?eq?A 7i,UU4j6a!Co߈O4&hѬdU$8@ +nY ̈́@ZaRCCÎǙ1~u1̜p ̲%%zq}OhO0"x"zmلXⶅ+)pPD[ +rȼ[r3nd"^/h^yVD67~ 1Xұ7cI3p0pÝ>Eg*;e?(k*ݠW_s׌cST5;1cS:r_Pɑf:jh)XLL\f\2&HF&pT0_|`W>[_ظ޺61^kKv2~`?~~_||Aš9[?*/M"vS䱩իm|8^= CE.Lc\" ʞݨr7f!??@7#<0KdL}ߜ\BnAd 1pCǺ0e􆃁P޸0 _Jr@Tv`>5k4ȱ.6UW# X}HdAq׍lH ? 澇p+?&Q ߠv]?c`ryxqtqbctSFF F3T;F%9 Flc~,1%Pk`. o2؟LIB4988`Dwb<'p"P&t92qR$/O$paFQ c,4 }nv\sh ] ,](2 ϡ zHonD:oؗer:oA0EI`FAȌ۪AY'QfZ4u"h1S|0K6szb>{;sHyjeOp<ӡ:ɦu~M3ۙ'xG S q5\Rkqsb o*r (w) k.4Ux:Vxߥ盥fzX1I4ҵH\B ?ys| {=#m^bƦz6䳬?8aWh!1,Nw]9Y(ˡ1\nsϜ! =,DhJ~#?Ѥʬt>SnooV|5?wu h }^iޔt5uUd ؘ'[>[bo.tk+R͝N}pm|<7S#;zmRR)޶ <ōT_22@2z$JL 2wUNr + Cà G8L7AL&&̚Xv AYKJ\@A+q +Nyc:.0XB {URt)yՂ̵m6 A_wWq}>2 K‘i#e̪P ZB8N>ɩ~;+`A9'*4&}N!!3&ǝ'LDD7CK&a0Ч}{"r~ _+MItsV+cL6ESg>]h2ӝ Wq %9 odδ-mVP6H +-YEbO7>ٌ58HLZ%Szru{JFk+\s?auqE:62ĞUjHeย$Ztw"NIʶp:č>FHO BKc(9f[ɱ:6Y9`d3aLRT23r\.*38g6Mqodj2p-[pnC=;b8rb"ja_ wt01w6r;i?|AilvUe"100Iы qP +ݹg1]|/k+\6YO*kjOBDZ◥b34k%1w=̺bJpON~Y = z+VT bS]|fچ둙oITs@㽍G5Z {4`ef5t=;,PTia4-H]B& +a E@ [ 1dicT_UCހlcSG6+࿛ԾG~m^j6Y̵o3H0u +1flNCQMs4!&R /YUD}n|Kw]A8rN;A=4Ⱦ.y3Ǒ{`1=x4Il2&Sr+&NO[Ь2++r.澅/X$ l*mG2\".fM sՀ^L|Y~^40/zoz,S} PkP;T?HI˛N'MxKo4di2-4-, ,m2 :E|0M@Æϕ>_o@ݝ:|/OwZΑvv}L;yKoqCDX+֥u/7~54i\xs4>hh(  >|1hz3_aNd`1uRRUg[ϧ4~!eoybbE| Mڹȯ\TGEhaZj2]Ucq` iD6mй7{`?,`98wFp0Mp( 5 ΎH< `,Ƞutkhm&k mZ)Dd-"N$ Q (Z "BzpSR?08"si}b~%.W8<e?k/in)'#DSg ŗ{!WJ +ߨd k36s[!<*vE,o">ڝ3OMy!)Ą +.* +)aPn;Fn4/TeZH]$@@^MzE45M󳚾ыSäq8mpөL$ 3%#ӆD!9$CQ,f/ck;J5yq2(O2?a||6 ߰ߺ_ڟ>dYW7.o41qJs዗x&= K۞>zwYoWMa+DSw<.̼|Θf\WH[,[==ai1 ki>bqtddƌ{{3qaׯ)`Yd"B]-*Q| ?->*EhIoGbu܄Mޅj +Z}Y.<3LݭCBw ѬN9 zQD}lfv4偯r}yakJ HDuҖW.}8{6wB+9bjЕ+"*C/9N:3 H%9$Ԑ7ϳ1NŃvgP`_<5AWHCA&X tx39 ++jL{Ene\a +HQ>r봖 !TnTpƈӎj~8d]xMef&(8.{M`x +G*+[{Ҽ%}VHE쿃&U`wX,=pr<NVkq*6oK +G,OoS6Sۙw(v 읪֩fNUNL.1֠^Xa=0W16A+ԪV^, MShm a%Vrjn +7Aw)$.=)`^Fc7S@WLUTxXG':5 Sv׍1u{W\H +Lolh^N }2r&D;&4},:&RZ\wH-ΝD04XT;L@ٮ&@EG#TivqcKC@l 4yVRIk@%Ֆl(n^\ tVmS_ܲ}7>ֳ{usGwI޽%^yd?_kne|̔.LJyiH^xKh]=@#s+%55^l~% ZyqS親j\0dOd4r~.xJ:!$:E'ȓc̿D6%% KJr$єc~nJRR]2#p+ +n1鰚% 5>ˣ.\\s<|Alb D + +n*y05#xbSe,ڴ3@]g%.N\gifTuW'M<ϸPի&'"Z lb@A;vNcgd_$ [̟Ƙ%lDD%zccco"9'o +p؝s8 yo`1TF6PGH?e%b9/wMuv:ELtD](BJ(WFc(:1fNdG?R` 'x%d!%IM)k_z/!Ƣd"2Z8poƮ3T*Y߬ ++e :9^cQGݽ(iB(>xtސ)c*|Fߥ.j g&Μ;3KA(dhp\p 갑4x#AZS3q4 -v#h:C"8=OXdGs28-Ii|)i :oY* WM M4vscވ8$HF- L#[ p'gih#ZiӴTjզk'$1džMU]{ܧܧF7i__D\uQ$N.M cUp{f}:x0q-bVbݒj[̼uE"7RwyD)%P)#S'T8c'vܒځV y)iQ2iJ&l;-Vqc]@r1QEK.9x'K<!X2Cd}|$b 1BJRk%V-SbJo!EjaZ +RKT7==9:SsY%ceqWOۣcbд .=d +36Xj)F]RFfes-,bCDc5Gh}[,f%ErltkiԆ%0=e%?WWWYVN-12?q k)2zTuqcS"KkXzygv9PcަuAjrUl$ާy_GUM&]y7ƻ޸=Ebxe;͖xŕ&&R>qӚk֮^wסOmF6o^ꚴD )|Һfa#PЋ"c xWjhtySw +9̏Y(~3¸y'XעBEތ#QoJ5LXKR(K,&qYy5L1|8VzN]l*rV&}>/^}ދek^K`J A/ /^-[z K%/4jhIZC'%UtYeIG'dZ:n6=Dk'Ϊ-D^2ehGԐ[10r@yU}5';/,i&;cnZ"+߃wD 7k` yUfM CZ1KM0&jyj +E|vo*C"K1AxL)T |[QLIy"MWxі.~+YdPcVY_"{MՆ|@ϱLh򖠫A抍Fd-gWO%``?)ҢXVYIv0Q"q-xNo)辀a@>4ݞm?ܴduyMvu4hf*?څ]-0pDݯքHPP1vac~ )j['tG+~;̏? +. +ͅ;l&L=i٤h7:y}mSmq7H#aLLbq+pBG"R8L +47czU 6f&qt=Vݾ*:]Nj2k} 6%HDm-93WR]]:P_}UftBJr-_R5*&r87 5O,PRBEsfQ3i[̪7e%Ʀdxol[Mhi}įHF ZC/H}|3EbVsA`r$y Q.qlvVC R!mwrQFZMGzd*VWZx(`,i"ON@G +#]GW-@KKcSs +%=ס!ERAgffhK.%[zv)٪aO̹un+LϪmq\HnQeNǶK#.?~swokIEB|fC[>xPYx{륛v<$q3 (R3Qh 1xVsbSmm1v1=⍒1<~>ף=Z#QU<< +mnX<ס.:!8CrHV}ə jX& ~gm%'ɯ3LL>iK&Ms^G5uP>(o8xcGRf\X[oL#IG2 +Û&o?-#D;D2LTvWriLDR@l8cSwy#"^w:12p B ֒$0B$GމQXM&"[¾ +<8*B  0ɛv7$UQuUƆOA`L ;&h\Qs${"t\P2ӑSDo1jɈ/?{-+:yO$/+eW dqoV>RwMhNKxf159P¿S\TᆺWoM-/L>[,Ns'D]Sga+u##z"l~[@@+LW+.o+ڻڿ:pJZqqumzipf'} {~~|}]{2qN`tD]P`̸.Yd, Y-椬'`0KG7@FNKuljϨeݥIN.-d$dAĠk$Eka1{})`g-X`=n8Mƿ?g][벙`jXDVmIkNPZVIryˁ@8[p鄺5b\_%$#teeV,ZBJL͙홝4ۣR"_e$9{ajvcEw:QDiHEP N&L>O.dW\ E=3>5joTR]bIo73-Wn.N)|eR#Lny{I827}b"D$]M6%uy6ĄB~Bm*'X+e!꿋0jB M$"M`BզLZHTBZ+՜>B3S.a%&J%m<*6PRm-R 1>H0)%dRʢL!-GjVnz{ugWwE|жˀvҿ(JJO_2ۑ2bNa|r|KĮn$S{3a55pHm;c+|A’CR6CRb*ܔJr8t+=ϻ G'r²͑Mʽo`u0FM M>g3#TNr]bCώAa0@I9EZѯud7 9v""膿&Jo:\ƂVg'")r`GHJ'bH@C."ٶO৥ҿ8rX1 Mo#Ѭ̬iRK I@,-c[SQ&0'&_P̞x v|t +Ef#ZN91s&_}`{.tx@XTj#øp jjvA~7^DqJy({幉35)+"}CYrQ<@#=g,eb{/ZVƤdaߓ[0Wk8m &_ s06`$לa%`mD038y?nO0;\;m:?c +w6"SvZ#AftNhW (i#P9T:mBUS-vƫsڿ&cU1x`}: fQ:m@^m:muC~7uڄ_i3 +uڂs:+OA³i*~Ji#:m@̝:m@Juxe͟i3?Ni5ZFkh_5k m%c7OaӔyũ`)m'fT},)$ߩgE btJ{NvJ{XtǪR~6U{?ӤKަ=|vjkiS6w1:u̩6wm߯Ӥ N9=0P@cNl?tc4csa,g eTE7zFҬ7^swW6fhC yޓ^i}Qn#m~8d6:vx2vU^}uc` ^p} -Zyr?3L9@z3kimVP>52LDMI-:>r{dpwa.ֻc##kV_lUڍpwkZD3rz;NKP~b\vzT}_8.l?.߱ROkvU\غnE[A.>CwYx/hm v|Cՠj/ 7p=|TCa/>Ym M•3n?}Ō̴Y +endstream +endobj +3289 0 obj +<< /Filter /FlateDecode /Length1 29980 /Length 18588 >> +stream +x xTE?t'! ͆QEMH"B¦:32MF\2:㸀:*.#Eĕ܏Py{Ts:UuNv@ +rJ,̽ vtv@ 3]OsV.._N@W9}ƽ@fs]T^?oO]rtdsrf&d%sfٓ"x9ߡ ųΙnU ،%˖A<N_:-*3c>( E4Uh@! &A$eH"7҆|}WFA9.MWjgnimLS[3W.=[ +1 M:-jmF5:U)S)NlV/@>Cvz h˜QM@\`6tbf.^4}~a)gmևD!(-~e?y_}tM&? o6 [ˬˬ]lqu^Z+NII}"0U,G1,"JT^L|̃K +MXE8 \dG +0KG2Ea1kfa`ËEXy1KЏUXz/T^jQcE2c.c%+0W_v^\ ,oӧbfcR;KsY2:S +,eGmv.f)-XŘhϋlr")Y[w~1` +(W_?fo1 P!5:MJ6o7&QUD#e%P0yŢO~ەqmb6 zVV1JPM{Sp=ˁYTxw*zSYԄyR^{<4˛唎qۀh-M=f]o@75;%on t|r=՛"޶Ԅ׵FV%2-V%b# +o%FdmV +9Zޖ|)j579uGSeN`v +5E&iIin lpwkкk3fFLssgJYݼ[$ +\s[-]W~a nݕ]ߥ8vGˣ)лnBJum{|)])zywW\-Ye7/kzugץp*_:?_.E~wݴ/glW I޼)-حhdnf1Syn4K'ޔw7)`^ͩx&򉩹S-넱OCB3Ho`kfhBgYN-u4DRee|h[R>F\-_oM+Efu>75 Ԛ]ٲ=iHHwrQTNYsryo-@)]?h?6Er,})SwyvJYz1h.hb:PSǘy˔RRFYs3ZԮl NH YmFoo356r|yqgZ&NKtML]nB;a]YyWΊYޣ]IM;%'c[)USJSwmUӺҔЖArԮ^@Rj)啼L$OJS.kJPs2Jh َJG(dTYt[9]nMd[9S%B&kLzP; +O ')Fxm@$^^H07B A|1F*q#c"P&N[P%!Lc2rфb39AkY½DB1&vyS~Tp @$b - W!qz!:q2b^ rNb\+<}*2R˽q)aN[;.X_!|B# @5c$nRZ`A3Ѓ `q5nCY;B-`5wÎb$p2NOc&4vHR "hb\+[lx V#' [m98/H Y@.Iz:~x;QI9E A. st5Tu  >lx =2tWlP}|a>V2܅HjRK#!6-f-kUu!|Kq9N1LH-INrYO@w s~o6#/CSt}8" )"12D:LG.$n8!nt앤3H/G\@.!Wd%@^$/=]&z=v3h3^C+  DVY*/eUXդjW-T=zAWOTTQ_?e 5ZvS;M{7xIo gbtioQ=Co$w^ֱI3 7wo%U!'<%S 7YQ6NuYtbt-s1ciR+5cI-NORcol $.ve jD G o;* >vt^ OK! +sO1fl!]D4C̉2ʋ뱗M&\/HI^+?r'٨CME9wC$ϐ7WBr+ϱ Cxo}#42s_&Nʞ{Ob/,(D]BQ>2Y #$2,،i`<@a8Ԍz܏5T߅\DNS cRܢme~yѠ&^BӠܙ4Pk4*VʠjJ6Mzl-l4;PFQiKjդ\d4147'-:JM:Ѫu:A7e~DV_M0;M&06PNS54i5znRb1nD;`>A1i zCwd[V p}Ak4r6#Nk4]nM\.Ŝ'fduMQ3=yY?H;4l'[`fN].ɨZ + \Eߗm3@~~r].'@|/ -&7B d >o%+m[Q6j6m`RǓrAŜ'`v8 & +v@ߏRaQQ(<>9p9,Nߕ8KnNE$#$|"FގO˱&+LA ȱ[ݮxe1`(@y- +,6K V7G)X\kj}BSh)N{gl]Gr#)<>"ߛS( +br-ďR2 +$$q( +!G.cB~(?7>6NcāځC¥<8JC04tJgskh:U +j(Bނ/ 567ڹOO@iu:_D~GuP+9G|\ L8 +N>Oj%n'!|^yaG`I> -ȇaU l +C6k.͝W5\ +t)<寑<ȓB⓿B +/!P^P$ ?DK@> @ # Q9P,JQR(b +D?CgFL TQ* .DP-D=j1?1N F&1V$&6AZ0^;Z(mHHqhWh$0mLR`&1'1'ʟ'1'ɟdL?) +S8 Sa.tTyq<3p f` zp TL.^tc1[s0]gG#),)))1K 1[0G`3$gΒ?R̗@ovac%ù8G~)p| B^{+}X>\s}T +A嗰/a_ xL~/bH~ /_x_īxR~^:_8r6.w-<#ų.e~Sމwx/;>^<>_!^GxY~9|sksT, Yo gq{gm|wgޕ/xO3q>gOϞpO?{{z=}nOo2aIoA!DSThr j +EoFe4YxFe,&AeVI3Uv0H*{j)f,:;UK8 >ry_ñN˶jI4φS8Y;Ne[5gGVMA ^ ʆ~ [*4)T6lP lP)%ηZe#6lyijkG%`JP.@T 7{oNhUT0Em*-T*C )#e +KJ +!_DFCT$Q(H77fe3e& +د +*lTJe +9q)ZqI`_} ۊ!KgX>ؖtwĶ ,qI`efD)Kl¿Б-m)+̠w67AE w؋(Ȟb/2;B|MawU(b#.Ga{-mZ,d` el l[N'z#'i}""]1XIfPooh2 6 (D"nS^L덼_5ȅvpBdKNqh\a;ĥHv{ZWѠjҳ +ap]Mav-*ٵwQ?a}N)O}اF%E~67p{ *yJ[E5vv0by]<]; 'ab +{=re*/i) k ym[.Q4V@Qv _Rڱ+jO;ʘOͨiOQQAqEIĩ;D6MN X+wɊ.&@:S2j4HZHZgQ#.s\qI`cV󯄲ZxY-*Y-ְjAlʌeqlfqX*Gr,#J#2~6հ*$Y*eUP+}=A/V NbX ,5,GC,,-v(d= T(ְ(R,=, +rf堰3/{t4jfUի6T*KgsPAI<^۫ׯѳJ3Aӌ<֎C]3:` ZDlClOl`I!AlӸӱ|k[b;{L$KjD#I2f%l5[T"$T~#4JN#^#`lLfHKWs@j5k445Q&FuqdL@5 lPrBo`Rޠ{WJ i]s#'#+g } +/e:} 5lפeP +R! RɁ P5QFVF\H]%`}U{܏Wѯ$*:\_%WӁZknL MC7!F7!I7aR9D7A d-pđ?@AyMVz n` $[%ynLrލY4zOS=ݨ e#ЍB76%Tr[rn^%O7bv3;^EoЍt#|"7IgCv1CHbfQ&eL>UoxoT +Jƀˀɀ@OBfr@*l441h#h=hAޅf73~$?USD 9$g*@ryxo{x5w{c&GXnUM +y0a„!Ja%g33 +!1C Mbz'X*f#qؤVUE R ٪ؔ.[+f1t3 U I :W(fW"1Cb|"{b|. az?DIw$ y0;y$!Qߤ˖roD̐{eA1C΢;e!JUt b"ݷO̐[%(Q܌;9Uuѵt98ۛ:tJ C SԁfOiT]$EL._~ _ݍܕIwh#wFMHRaOJW؝\=1UR.gn 9NEm'z2{bj†Fu;:8Ngيƶ֭Y)d+g"[izLҢ0k_f;,xG]ՋPtX^9puk_lN+ߒKʒ3|K gG[CvwGy7+wzS׬Nn]r7rssŞT N)sY!EMB;y"@shrwۂֶ˖-[|+VD"e˲vg #m +}Z9\.˔Qr6E"Y^,tmhs/hdA{G!v`ٲHˌ.%U}&:>`CJذW򇈀]D^"HElqWF6Աcozk[{bC]ѽQV;:U7Yle+xu(U,,YU2\Q̲e˲JȲYbdbB\4.v /[_"ÔE$Ҷ5@ͿER7^6x@mQOATS"yte=*zY/cRGɉSig^Vy/y/}?TJ[.*-Bo"D `)9 +3Utzz]_Ŵ8jū3D5D&,hچ +Vt|Z1}pa<mz{^OxUDeD}\Z +î&\ +zcAD[#>w@QuY  9jk׮Ei%ϯ0Jzwh5ԍ|51cjlp8P:s4j^66'z~r7=<~'WpvL]НQ錟n*[C3{]Z>}r֑8 ʉ׵) +Z=x\CCF%}:D,$=PlKlp8h5;JS &aV]J7KUrn]ʥȖ!ݏmF7U/)7m6WdBq2c1iP(!FiF!@ YBfJg8oݜ{C3Ǣy -@AB5thP,J-EUzgPCW99,g̡mG]j8*Lؓ!9i-QMt;*M0!RA ?"Ŏ"!R 9SOYoQgʵ;s,T 0[N.@P.{V}nK}獿1֍tTuM}׹]8?Qj:ٹ￘oR_5-l.痋 ԓPE&Kù<=VWVWojΫ] ˝V\ͮQ_mly/נ9ULm`rLUTVwDj2=+zn?2ˆf*!Ϩ 5>oa?@40ip +N̍8sKWJJI.nFkNҤvvvvvVc.RmzKE)%Ց"ȥBn\/UjX͢}޼PǨs =Kc H&* 6KM{l!'E&&qV4`ͭVW ے^q8@+zx\֨ ?V#ٓZ_NPȷypC6O=͏!k-}sٷyr'M?忕:)0x ߟ-o!B?`QJtV衞F[=!k o2f ԐqS#!I5oȧQ34>rTѪJ  +ꢟz\-р2LՓ0L F{XDEʺ1uOP +ƐsqnWʂ+ 7[QWuT1G +!nuXsDH?F]U- Yc C@[Xd䫤x PR)(` ZXSXX2$cj(Paݦjo441Rc~׬( %zgnH,Up*VС]".C ƯtgH<`QT0Y,Qąn$xp46]YQ_$Awe[m$==Kyp!j&bq*uckRӒ`޷>|@m>g\bZFg{7|gQ=M\W< +13U]DPݥ|s;jST_H3S&!!~U-[ܘOj5:G|oɽ-宋IؓVf4PaBx; z}x<лH ]y. bDň<( xAѵgx0VhmƱy + ܹa|/R7r wz~76ӛokpO{Uh3$FU^>.5&A5e7kbͶzro1jtwQ}M{$׉5]>ϰ.lәdMF-[Thl۸srF.q8֮NԹ#j^DC҆wT3Uꋪ~jR=Nn9:nnNEuttݦ['k:QX]ƵMŨ[*$n=ӽ}{1v7nvK!ᦢby_LW)3d$HkHu'J:Kx"jim\-B%jZԝ^J7TwT]}E:D~# .9G W" aaG3%+1LNh44'BncMӝ="֍- +þ1\ي`ꋈ?0A(0\DT㊠\0(q#"Y:Ѓ=d H$Ę?ęOc,x<6M:NOγ3%4ODD&KBDz"%D:-UNBV3P?@x@ύ=d@H8IrCd&O.ٱ?n\^rĴk'Vu}*~&;n"|"S'Qr|y\^CPD]bTs.=jE-fȧ56CxPd)ϵ*? :++u) +V2!$?Ư&p48n|c)dItvhls0 K'8yST +)TB^EZ1:]DeK٠fr"|6 ',ƒŕJefG0Q==)ZB~Gep1B6_1)FG7H[X/Kņb~jJ@+\7oT~w[XQn~1yh0ϗTf*8\:Q.H8PP,~E.Z7%O-MW0QWId='U:n1'gI|<mp#}}6v}a6vp&Nc}l\)L'^c7dBn< ; )4Mk外<[Q.&:$=ۡA66&@i'?jjM&QY\4 ~\cbyB=h7$8(~}P4AїKs%A< ?Si>b6D=ї8$_S!pHkRKCpHU T\pHh! _I%v:A*8 +"V*h+Od~lBUY\\EbW(X8 +dbהY8sq 7M?COeDXSѬ^TH#{ԪAw͡9rXFT!\wդjyu9T^RLU U6*oM[UB-Ud ?dV4\yĘW3Øz*== G"]?#ʍEH BPDAMø]eCS onO]|*Z,?O_ǟ=3Iyhއ>YET_UHǢ;L臰֊I +ަMtsSiŚv53A#WBGqOdc6_D} ȾɕD0V)4՚pAJ]QD4Bc~1cx񘊲 +!{U?q*.zuzX-}tZŸGt8mN5)a_1&utf+Kvyh0PQLj29,y 6sl5fQ0N0)z|{RS3{׏?it}7tZ-n)s"4RP<%XMqHb\0ei;E ]0."_K&G C U'WKA8q0'Q]<R-{35$\NZ ikr>sjj({P"E -Ǭ:):73zw}^{goego_.e'p$h'jRR]P&$%Q j*h*h× + SBzjOjK1qÝ%w}c{y9Yu,ҒXEs,RRʮ8gB!)f!ہ!xo 1OJJM‚zYeTS*lTUBS**A*ДJhJ%4%P%uQ3uYhÛBݰ1PEdʯ^!j{\pEu A ]cU$<^[t:}ZA aSU)NQPTà E!BQi$} JGȟo.Av׎=Wi͑v^itvAA. \fʖY0^M ϻ\&gX% +(¼ i!_qMV2a2 Џ1ԙ#3_ě8ˇ,4~T5cƫ%+vTM̢S±1t*mОsmH럄jUOC Hp~-5uIqcݬ$Ta/Y8tЛo=(MŧSd " +8.q9BKB>|{ޱsV^a$SUeH (LP)WytZ&b;VJގ lsUb@71>.<,, +K+tXU[:R8J4>l*V_(%Ĕ\۵gCPYYiwrH-RCvjRƃ}ɶny9Szha]?66mcsK3T +ؚ0Ec0?w}0ۿظ5X3ܴpeZ̼^#KpJ"rjW5R'-CYژj?<%"j*>%XqFƂDH~r''|ۘ'^](/Džv^Lr&YFNo:N%EDpf1/$45) o zLoxH>G6cx ˃YcUae~j  +endstream +endobj +3290 0 obj +<< /Filter /FlateDecode /Length1 48328 /Length 30828 >> +stream +x |E?m'iM\Mz$iCz@K)m +RRNR@qU.X\u=vWu%m +x! ZEYL˵~~;%9>33{dMOkL~$s%*g/symo + G +.;]UE >Ǡ|rY|gSå|y>Ӳϐ΀[|p QCF41Ac@cF)=-ELK1JU +HT +?ǠgX@K0lHU՘íVh&JdbP" P6V#J}R,D;.B\iXKфP,|a!VKG!LX5hB9y>^X4ad,E3V`9ڱ$?|N0 3 +s˱6aP_DZ"t.b,J4"j,!N|c!cеL-\gښ&rJ8тX,zD3kL[3=N# cM+\G3 Nr,c;@`X,}iog'`)E68z)ZYh==s%psb9btz)/ q)^ sN:Ey+X~pJ4a)ZЎ|7|]oLi_3"AVk*FujdgRUTP(JT*$&;VjDV J9UJ9P(*ju~Я9G<*JRBZ~>QY O]iH8Wԟ+~R?W.?!AMר5jiYFџ&&*!1Q֯hTP5Z TjF ɒ8wHүO* A'%@YFiTbIZ*RVTOПd' * d0$")!|NӪu:t :5tZXSs/Y~$ zQR$HIĄMB"oJLLFNLDb"lT)Pk/?dJ65dMN6d|ILR$huDHSSMRJ0HHLbw~V4f?A$=4).ߜjI1Y, @b1!Ք Y~$% -$ Z\~lM1Y @Jjٔz~/I\'j$ ^WI ڄ OKKYm e"-YdLR)H6K6dDׅs= IПig[234of6K:2SL&}9HtSRaSS, sC=2\+ 8S-)dYwH& @6Dq,#ʲew ,l5 iVkMO1ِfՂPp$]hvefgg(;;Y.d[mVՔn3\S eEA0$_@/;MEyyNd;=;OHH7\ߞddnGehh9 /CY ; +y ttg]dTvaNOvr z:.8.+.I%%~~|.ח +|>efa +H]@#OD +0<y\ `)˃iEnNs= 3jԘcd#SQfa%XKHSc)yʸ%1u47qWy'4{bJXGnUSɗ` i)v<g̨sŨw'Qlw66:cdjesƔS\EM;H`j^7uNsPosbuEM =ܽc|bG&0.[g3Fc +X&gL鋩|xZ|BlW}Tq4wMNC?;Mκ  +_F唜cbl xJFg,:e㵝1:c)OUm'l)`Kמsc5~f +foȀ}u2qUsWhdGp?; H A(^iOuu8gEܝ٧t3{nMp>3f(Q2b0ѓ бO }"gVON~ha@>F} ('y*^Qn1\c/`mc[8[{aTAn.v3q = alaC{S08{߰M 0M(`m +``v pHnH݁L8v?C;T~f8C]v`w;DjJ[9odݙ"'!v;; %]ZDK]Sp`,]1GWX+tjeWc +]uZA +1vzUŮ!֎(k_'vHN}GEyD/k.QSRsrv r`7Ks8[S ?([ԓp6qC\ԣM \v.&҅=6)"5)YEU +ܝUx]K5&9ҵlbR"Y "6Ǽ~Ɗ|c!h=Clb8<<Œ0OY鑍]$$zNz$(GO'BCFz*?*dN.= dX.٘Kn%HyE8.L7L2IoLR̛|Ilx\"v{y;-=B<K>K8geS*&͘G7~ t3f!="ct3)CE:L1g:9栕́ofsl6l6Zlla`s6ͦO'faɨ*$ГG[-4+4Q|_MgO?GsP=CPW4Bd~J>B_!Q \TAU/H@4ťѥKKKҏrzv8)&pJthCC?ۡW}z4SP' Uh!ߡ +zJ#8p@wd#N#9gɏDxwGE*9F&(xCd%" cwZ. 1A?ZQ~2A;T݁8]w`Y[Dwu8 8;∓ ^~tGFY6KLjq<8ȸ^7'ݞa8W,V4Nf#TmWI .^5ݞkqz{3s|,@fdB7v6g͊Yݎ@\ClutepĶ lsl ,v<M8%w9{qJ嗁K̊&8";zt;8Fu2 +GiqLj8cXV_JosepN0.Nd^tm!lU\_Ojbͨ91grhcت !?s5cLΚuŏ=1>iYS_6j;mQ}vr%mɕUgভU끛Mz$!F&]]v +@&p!2 ʢm\W-Ld ]Y4)Tf8WY"A(3$B(s.+"]ý꺼lwrxIh292TsZjwcIOG q^za1v%V~Z9q~7-}YX[rv55_M.4WϨj.n6U{{Z[Ys^[7ir*y[\]jx[5j!5u];cZG ^c{ZDϘ3F +R@zHiK=cziՙ+9Y޾r*(\鯉H,R6V>V%FV٢ZUHU9rh5U>|Uʺ +7Y?ȂHfAxX,,%Tmg, <%KXK9ZY'TgឦE9qEq"lpwy x O, % Pj'UWr_I ~?kJ.'{1H*ziIJQΫоRhCy r|LO*3p^܉d^@/&!Tw`$a <#(Bc.V !5jŒR̨zy;އ&-d: +P4@b r=^$Yr^X_ÄKC>ɟ|I&XTΖ"<﨟0 `7{@ɽq8y|#\+с{fl'0jPXlB7zԐzK6)Cr*.C  zsLJeZL&v<)gˏsp`bc5.Ћ"%'^CPUy|La j0S1 p#nn|OI"2,&ȝ$N'Su6#ER)3-q6T#A"8Ih}A?a׳ _ r 50uXp3q\r i'kI$aŬ`l=Xx\rIiಁ7bۥB&@c>,O׵bµ-6lyw11"!\B.%W-rLBJ^!ZN+X^Ow]t7=쬙eǶ1YV7*VTǫk^=ן_~6p_>gk@E +k܃ `^«xO\w%+< H9G& d2Jd&M9'Kt_/7nrD%6y l)[&?r2>O̡,cpd8+R z(~MY%OO)V*S{(W^WvN3ʔp*d%d t)u" ,%sȣ+/hw пN\DEI&HZo%ϐI<&h"Ĩ 'kEa:k$>JjQ:=Ŋ .+ #!\ufp ?1o0 86,Gl5`LC t'p +4zݸJ Ӽ A'$ B3u!t؁JԐq9qEsnRT47b~T[oc + +}xbg#s?xD[ ; (h\ZxN܅؇I,BgLo<y.cZF ),_QO +y!=x_ h3T(oE*r=8K5b $ ' I>HI>3R E V?! ' jUv?"CL]NB]8x?-hȅW><#[>rD='AC0 P(h +俣!(t8PB;X#DP".rEe@|c0R>JD䣨((1JcQ.q`P!#T_c1r.XS0NCS1^ +0Q ++$KdKS/QZKT Lй&LŘ!<̔#hlc|ͨcȇ?c~&Ř+%h?RA/<Q>uwC m9 Z@>6,bЎtKpk"+q~JЫ*5hc-OсVʟ:X-\އ_ +y +y/c7^t +z#?MZ7"tV\+_ǸMq1/\/;+#܅u'1~;(&#+}Y#l-x!m#n?&.pƝxwQ%p>=,>c1+.'A7=x{6<({؎xZgy7Gwq]b.'w?EwW2z7<)W݁[؉m[xOo5:o <-]gdwʻ6wA.F_7G_/ʯCA?_1^_'xY~ {75+k;װ;W*uUs!awޔw A|wû|-7-Q'#wx_ށÇ+^H~'Ï}p/㤠L~8 cӿ/!0 G~D`G~D`~X`a L\`?~H`!~H`A~P`~@`g?_`~*0S +LT`>O`^{W`^LD`'bC)L#0}=L#0}='0=[`n +LG`;-0mo LK`[7)0Mo LS`]w L%0}7!0 oL]`_&05 LU`N;S`N;w +L)0}wL!0}W"0LF{/a{a` No7)o_E39wCdЩyb+AF|>BKaK#cG#HdXE\^O :~Z/ջ.et'dTp*z7 򹢡T!#Ckp/ph LmIaZ]i1k5 0}TZ`, '.*5lIu /N +y0Ý$G>=r̙iaz9{J@sOܽ~UfQ ()'!~ >{ޜ9Hٟ$k +pSc{d)2nQvwZ +@Qa4-(* YYīK,UeKO4gsRCꬉEI]ڜ;)IdNVcYkYG2Mz(=\ &ӳ2s +*2-S +g6B,ZV[LYQըn VZ3Wfg_KկlPQ/~J6-9lf0 L@ߑܹ#,ߝS\5X,fíVq)+uWlOXGS&ͳ]fN3~Lj0ΐMQFbb)xNo,8D'oFUr2H48̀[2$$:Y}eϒ7B_tL m6,0FVb:*:Y.hwm*XIsqTjo/gl SAhҔAKZրm hi$;),fW_>bg)-r 0|r=bhjpJqfLYapśC}wrǢ l޹ y&[Jzr@nxgo|[IOOIf<3ޜl ((' sV`K]IZZN;Wld#iFSJF&Su3iFV;lzJs$%iZ =2D`LNS5)Mqm|M<FG=!}qY*X*X4YjU$љ*QJ煪MCs1_Pm̳_z陆Tɛ4gT,at"Yk=֥w5En' +SX{"-D'qаҩ0Jj+\Qǭ2۹XYIxsڽ]e3x큃Ͻ3N I#U wO*'*Vo ovڢ6f^[ZCS-YTKno,Q%:뾢}:q#Y̵pXÁ$&+ooTZT +~2ss@iE ~ʯ3Wmm!$Ïş'O3RD>#SLvd"Yr\f<.c\dx!D곖H94ې7;GM?g3r rC\E*CMj|$ I$l$ɝ!l$Cfɸ/_XCۊtʹ]|p,Rc+ExXm o&JFc}\7o8|8ۿGS,Vaa1 a +|S,f0e5Sy3^]] :4ga!ޓ^%f@ށY]i&;y%kLWg12R)Ӵ*Y4,4\i]wִ5,X.YKkKZKnRentLSLkMIaR5'B?DtZ1>GW87xA7_/lKWՠWKoNvnv^6S%q$q:$گ B!9FB +oR[9~7zKc [=[T7lXRwlIQm*ɖs'%U?qelŮT~fjTKQxgyn]۝塀Q1.Hiw3kQovN\|Dr) 8ukO|@o|^~Q+^:4Z:ۚ){{PM>{Ը(zx|^EqdēED%d^L‡qpT8[+$l?l? +~#퇖G9ۏMQ4߮(/g I}}_}%) xk~ۢm65n8EђqQÖr6]h:l:'a<^-;l\'+6zԨvƔQ7&NwVM5ǜȸj7#tl?ȒVGZCiNKPoZMd#q[KFdq,[lTG僆巄> 2’TBMt^BJIz# +?Ka aU B~G~d,Rł9 Wށsk9b 2ص%v-.a|hNqɸDQ같\45m +$y֝bĪa ӫ'3g^O;ݗ&{;D)$8E8$Ql^N;8unw&w-LZP2ͤZ6(a\É`nCI  mݵZs(Չjj8X"c| Ƿ +?imI2D=>bX4O7é!cŝ'N)1|]YB.W\ɖ񍷗Eל<ݑn@rBT!J$s u_4L„rz4001Q7mx"b,-@yDi8c:A&*ֳֆʹuQ[XNTjKk%.j)RJY৞3h"0mBf\Өʛ{3CᒯԄ  feSj9@: +fgڂl{ŪvyEll"{ č A cI&VYi" 2(ɦW$MRnW:tn-“-c2 n;drQCfj kLZ&f24htJ!)*1).{h3|Iq'[|\qX^%N:rinr +WrܤM܃sNrp!8F"C|,uS))ơ_raEe]4GkJ3r`i昖ӕߑG3di''mHOOo'"'D RTJR*&= 4.~ؚRJR>B?޵_/1ڴ&mvV#V -lgVX!29vg76Fq3#{f7%4ío䨑#NYi:qXۖ@2_?eH o vG%dzYVTj9`9*5`s2%"ؙ͠-N#RYN_yشM}I l$)jcf5H$>HҨ>HL , b}\d *U|qKQlQ>! \9>z.K{˔3s` DH]=2=I s_*Ltێ|7z{YqA*JJU9Xz:CۇTiR~[=2'?'{ivk~G~K \{mGrȎ-d',=$qhwMT@^FNgz<Լ9jҥPz45]>!l$˧g"x"s"x6$ G+|}8oű?5Lg{?E' }ReZVo/+$Yv_!N+$^s 3DLpg:Gt{5Yl +;֕ቫڒI͋nIMJwoϙ-i4Fz{%Ǎ&qjƉTj6iK[b#6 +eJ\y-p4wz fɖ56)qgXgt{~UyW:`1ڎX[2%_i`r{y΄;^<3S* -w( Ye:M$z"7hko/M|~ 4 vosq vj=b/ȭ%_'Y&`'??B|(!ֶCC'Soq ?;H+ccskl7[.~ckg`z"G $DhLFT xno*AgE/]Z1 , Gg: +BHX;bk7V@X>%'.htMt" E EM`YIE+}_Cb _^`a)ciI\TA[|~q*MÕQh=QT:±H"+`GPl E&aaY~&8;'8?ٓn8^:0N`dzYG2r~gn<؉`gA"-8D,S;1BmB(B,bM,l +vްJI`r,'2vw.spk;Wn}W~ˁzr#ă<L7bzf:Kd $Xgon2Nwtɀe׷׿7@YmV;hl~c"<(L3lw;i[/d+*RT΢H&+k+be--;]N-"PT];ΫKW\ݵN|21^])NIS +/̧6{}1$Aجl#@h$?B3e#vMnAkBݒd@2TQ 2T1C,8w:<|I:ġSo5,: r4!ȓycsȿCy5_-oM@p969}irmrjyJ/h_6kTspm[5(N.]0]xWHI>˖@Ɓ +Yt-.'/d^{=!J)PH{L ?VjG Z:ⵚ6ZS8#xš[Ttk4`* :awGb;:;V"W>h(6)s„'db,阂eI_e0E\/9+rwP{~:)ZV#VTlZg'@tO8"aXN#L N$FebJȔ-ѸKUz;r>J>}Zy?wu7߶߰~: dnj<r;7wyn{Qfw}c5C`zeUeKgj& fҞlQ5ZEOGOR~]&eچ^bNѐf"v}F5q^pJz YVp[ziJehMec("Vd[nMo{EِgE~1Ba/k҂0ie$O?aA[SM[րW"FI48P_B+V68`6zim۸ʶ[/_;vwDJ1%Pgrga7)̟du!p{+0$0$ [Ч ^eB +|4"B}FїLsD&i9KMRqQKϢXAEtb&a1t&DtPYb=1?=uxڰ*=DOӤH4!~1]ԔUeTRC&8'U jdui +ѱ::F +#jKfUǾseM0fuutp AE6 +!WH.Gm5V=z ++e^ +Aho 0ގHWp +NI89jGp }=a|qvNIޭu!8<+*{U^"i:49;\ջE3 +PFQ,a\81.ŰX8>:c;>^-}ubTmFڔF3 c*ʸR'Ļ.poHd0{+%΋o⺎^=wwlmgumm|g9s&\gwqӶm cȧ[lǓa+"V )B:.HP@B@x`]tu F = `(AzF3LgyłߦJ*^@tnjM&xQ +ΟBShJ JvFb-JU )d*X* QUfcװFGOy30ρm+rQ&a6D:R)_)G?~'ӡ*v;tJT[O]to/yorzv~s7`SOQ Ic-/EEÞND "rt4ToM D~+A’-hE4R< >amvX^EG#Azi0=xA=befS)c[} +q,>}osߪB.t|vۍ@m9(NG *.1NDgVUTGmB:rC\vh0z$=AџD8( j3`̃EƇw!?<: <%R*Vj}OD֦&'k&iZuii;sRS B׆>"?69w{zz`09BӐ']U1?'";7Q?p(uY ՙ8K 20;)p6f6X`M'^o߀oudׄ|,veW~.ëO|RG' IϭpoGۆ91*^Jp%:C)XSh5$c(*2tN$}*>hXUjD}@"5E$d Eډa$,͒8 +BpF3Wh <eDvh~\nT$ѩ4Bc!"YU-ʼFjq8a@{Tc)vrQ3%XhU]=ӠИjr)ZtXa@ +rG3;nn3{G |F*P4qاרqQpT4b;d\)avmR`8!(ozl6BG=gLdD w! +eW|6W@ZrA2"@dxI¤I&͒QANݚU[l`*A@h p "<ӿ3K^Rrܚq8єu?w߻}С*~9GTy={t/7oa/m:c?lo79*rARoKcsҴZ6_X'GdRvO#2 C#̫ )23L0YbaXa$Wd֐vD/AVy;;a1I0M&ĥڤhHQsS/ݧ:uP{W1lMNrbCyK̍b+pQf߀!%!Ѥ Wwh=G}w<ȋˇVwmUwk~r>w7zG=8y@#֭ +9d:d7~kHH6fzOu(/4/W%ͣ`A|[x89F(C^d V`H!ͅ8c-z8#sٖ;@h֞Շ=' arhQ9VD۾W#xt<$cDbDOx6$B؞Csb=O\xkku(tJiƑ?56Vco9V!;D>aSv_"&o +>.MadoykfUJr2I&t :hIoNiӋݽNxI]r&[6"R|RpkTq(GQO &^|&777rbƑr[Dy#&9t[6Oox{KeC'\~˷\?1l2F?.CO>E֫NܯZ݃{wߒsrznH徵wm}:mIё(]oސIߢ)1<tj{G> nˆצUyB~I&zOW!:z +Er$Hh*J_G^@dS57 D!aEÜ$/M-%mꜨMbҤf6#N0A}I\j:בKK7Z-M%M9R(Qզ.,!$^M)Q[- z _cۮލJ0U5(u;Hj]r0O'w&vapM8UrXUej {*ܠl +Ԯ ܹ+`` WJAWQW 2W`w} +Z>|x7K JFhzyoAt&c6=6) kze(L`m7Ο2.[1f +3ETL'3GV5>' GNǞ^s1J&oeR,S OpPhhͰQ\0Q7 g++[Qǔ eFyT9XcA`AӒrWPjSuKBHhmqvX%\`_B>or]'K}͚5u[Y>`?C}JtYݩq0|g\><%x˔l@AH!d5bO W@"K@ƯNઐ95Ud u{.փ_y1 4a偫{ʅӍ!MTnfQNtS 3 W~bdIةkSF s}]C^hxc Qy/-dt̄TU @SqмY()pHc„0#<*œJ`L3[$"580,!=J3X2djQhIG|+jo(:ngOؤA*. *^xa^'НŖg/}hpOᣴM6B3FiuuXaZ7Fmu@+h]`Cp2>]çkݘ&qh7`>Rw]1nǽbN| 'k&~]j;_<:T%1x˾B-(w 0?|pImPYZZg6(.ϣVd?n6 },ߗ1V:6;.8U\P5hxN^ oO%nn3"{GC-7 4UyQ\_mEA؞WQ^Qm;Fo7@(68W|?#XOA&GsK ΌBQ3aNs;|@&͙ {xL˄uv<.T'mpj L{g wBL"+pٺIe3qJ㮧j >o{'XwW=FѴ8M +JphNl:m\e+}5Q/g vVn O秊F]rm+k~Rֈ79޶mp+TH<c!xDިlᵕm8|ǝMtlgwW |>N@ @?(_'CfcȐѳX(a!kb+8j q5Pn5ED O %BUep”A*KHСi ȡ32 Hċ@ŎNZ ZyNڟ5O9ʬUVGDfG4K暂tm|q{cFEGO J!<;Cdd BGd27Foh0d5Xe2S,ӕl8VW#g3d6&BpL:R A,W; gn1e^b, JR( eәl1C9-3ce3IHʒ RR~sY$ț9W' vDOF[GLR&/%K6v5.Ym{S#ܥnw">n9L~|%TCx|>[X3 1cBDnneҊp@뒂߂ D MZao0=I 1SKEG$~˨[q )҂ i,bQ\@Q'م/XJ5]{'Î_Y|C?aDVu7^VMx=Y,ˬ)  +p.8}(׶ͦ6;t''#=b1KcDծ6doV=]QL7 =I$I.A% +BЯBu@*tDHQޫի?uM!6 QpBBaCME%Fk& N= :uy8D b/ncK}%0Ep7Otя7n&}б3G_+z{>9ƿϐ@ +Ud1si;v4 ` ak.PɌ [u*BZq#E~J5bϘ lS {(E]خHU +K؄07/ .yt69C2̸\uWMQ]K){ +@=n `hZx:~Yא[Y{N˽Y&[]-'bnwޞ*Y[qHi<^k`!ɥf¾{\Tt0IKѝ4'bp31Ms8J$C,6deѱ^DZ<ɲCeދ9iGk *IBН*,:UXbTտZ >i (ڞӿ>1n>sIٲ`RD*HtDU4lП|d'?1tW߶S. + Xfj+6F8O|{z\S +'P;-*+⺧q +E2ey /W3DڱS3Dqu^i?VA24Ep>"%_ +HJӊ@Ҡ%qy?D/ 咩4=@ +N,N{ 7GZg..cJNah{a.FRd8p|ӭТL#I0JV^ +vH$iuF%*zZc.r bTvj43&dŇ]¥:z&2m$ֵbxE|{50ۻ]ɓ+l]68-揤8!볩5+[Rx<.G/ XӾ91a*JL TTSQD>2hfREҬv+Bk!l}k0Pp?' RV.mH ş6uF).hmVx#Všh7a"xOIQ3v$4RΦ\0(_qaV0NΰY_4+Qaw q+Gsi.3V(M(GU㐭cۏ EuR5[M@%͖gK{Kenkҵ%<|?ד7_9?7^3ӫ|밣u܍?}^ͬ +a~/`@Յ7]EZuZ8D F'\ɏUہz y[>b}#=7V7B:`Ҋy+V `PNgu +J1|VŅZ>4-450 ^ tzun:b)" @-C ^7R9 溒Ӎ%IĢ˩r)]LŦ7G?7c?mZL}ז^Koܒ|?h#AY%r +]Lë&݌p3w9gp%K-ZYTo\J)JjJUBvF(a8P8!Uq澯v&Yd8^{~=vx> v0 N%h/qIr͸i׌kE"TJƒ=Xq6xb_kd 1t8΀ + *!j;Y\\b9PoannJ,/VLzK\$]6YN*䵎IW~΍'-phU6}7Ϗbw/4|x]g&0=5@Wt Tj#J,dY(mN5|I@*B=IMP86l[~ލMr@\3[ FeoFoٿ?8u8U˾/s=ɝTN?o?wm>Vƣa9nl9bt0|N0 Ǭ8L++zEj>wX9#- +Raa qΰTokdYOU|"˹Y qq,CSV!%I: ^\;ʝ~Yl hPG2$sGm*`O92ۤqSB,'68f~u'rjih5NdW>BM_B㔲Zׇxe:DliƑ'8UUzSyD8;9D\:қ+@2lHWnKGɋA-f ra)G-Nx,x~P+cg3+O鈳|0Tc쬃O$,w~OZ +"ˠH䃠bBSIK#%s.AЀ\I!@~0){`z!`!,+kC!=՛a#,35#zMK*+˩rPR8}r\$#r fP 1"v$cD>rdR! +XtGJ]$9*w$TIT +G +eDeˇADB} a 9H9`.87/C9CS%bf}g}}4,JU:d%XzpbSELoLXj҅Դ*;L$X, HxsZ&x5͈}Cv.1}>T Nsi?q~yTfu/cz ڟlY٠kZN+_B[`NI|5v?+sqvΡw~sPmx?I:DI4A;I.):A +9HˍPvupy.ƣn=StNFY|1YN=cxN:u/SyV9|dNI-yBti;|s3jަj%\ݸuih-@&zWu#2/۶- :آ |.lV~$wA)põ~O( o q-,q*)"Cn3ލj+ 䃠^e,L$ʍQ(:ěhə$f'쬷B mI{S{Sk-ش;aV!vT7nw reqgj ժiiLqVܶc9h灿qINlR$`ڮ}6Cyy_]{(ec'ٸ'%U} ܐá۲þCӞBXѴl{;!l:$b;no粚ݽ2ZpLVk8abMǟ}P_MbzQz>ԫ8Wğ܁*;eISv#PC=ꑽYXVDW**6\mZnR)/ӚmVb^›S˕ahcL2+hlHTg?T(UgԹLۼ5;sW}5jw`RɔrW4ӦDZa}+wr@w1SOPjJ'K&--(Q{%ٱv(T$Dޠ +endstream +endobj +3291 0 obj +<< /D (subsection.A.1) /S /GoTo >> +endobj +3292 0 obj +<< /A 3326 0 R /Next 3257 0 R /Parent 2724 0 R /Prev 3256 0 R /Title 3327 0 R >> +endobj +3293 0 obj + +endobj +3294 0 obj +<< /D (subsection.A.3) /S /GoTo >> +endobj +3295 0 obj + +endobj +3296 0 obj +<< /D (appendix.B) /S /GoTo >> +endobj +3297 0 obj +<< /A 3328 0 R /Next 3329 0 R /Parent 3258 0 R /Title 3330 0 R >> +endobj +3298 0 obj +<< /A 3331 0 R /Parent 3258 0 R /Prev 3332 0 R /Title 3333 0 R >> +endobj +3299 0 obj + +endobj +3300 0 obj +<< /D (subsection.E.3) /S /GoTo >> +endobj +3301 0 obj + +endobj +3302 0 obj +<< /D (subsection.D.2) /S /GoTo >> +endobj +3303 0 obj + +endobj +3304 0 obj +<< /D (subsubsection.D.3.1) /S /GoTo >> +endobj +3305 0 obj +<< /A 3334 0 R /Next 3335 0 R /Parent 2734 0 R /Prev 3269 0 R /Title 3336 0 R >> +endobj +3306 0 obj + +endobj +3307 0 obj +<< /D (subsubsection.D.3.5) /S /GoTo >> +endobj +3308 0 obj +<< /A 3337 0 R /Next 3270 0 R /Parent 2734 0 R /Prev 3335 0 R /Title 3338 0 R >> +endobj +3309 0 obj + +endobj +3310 0 obj +<< /D (subsection.C.1) /S /GoTo >> +endobj +3311 0 obj + +endobj +3312 0 obj +<< /D (subsection.C.2) /S /GoTo >> +endobj +3313 0 obj + +endobj +3314 0 obj +<< /Filter /FlateDecode /Length 11 >> +stream +H` +endstream +endobj +3315 0 obj +<< /Filter /FlateDecode /Length1 1434 /Length 1115 >> +stream +HTmL[U~Ͻ@BKj)PJۏ\J D> GlIBm2uG6f".qƘ,~cԙ,Q2,l(T$y{~s@mbrvB[@|m 9'p.grqM<]Tr;ry,> +stream +H` +endstream +endobj +3317 0 obj +<< /Filter /FlateDecode /Length1 1202 /Length 912 >> +stream +HSMlU?^o^ljOvIxcHE[im6GmehKAҒ +""8FHHSKA@HPkJU A~3̷.5+8P]:p8 @jun"X}hZcTW'TrџB:YF>6*516s=AAM*Љ_)NL(D(=$6 &TJ# I6!)4ryl?'DGJ)zvAA&s*ǟ!+בjaY\E۬BZ5\ ]=A޾G-=1pF =g{=MQhv ϒrbn-ou{[7N6U. |1'ܓ0Cdg:bU9JLOyC<k^ycRwdspHGO,@O01Fa"zqjؓ FAx3Z6C-<;!-|8;X:s殾kԗ>:-Og|'LM]l$MOkBt&YpZk +.#_|3{i$q]H7n_>?f{qt*܊Ox+< -,(Vц]°9ɬuv/boe  + X|dkکHqvXHU pu0 Z,O决jcԥD +p09,ЀYh"v,A`7* +endstream +endobj +3318 0 obj +<< /Filter /FlateDecode /Length 14 >> +stream +H@ +endstream +endobj +3319 0 obj +<< /Filter /FlateDecode /Length1 27490 /Length 18231 >> +stream +HW wNW~޽>U` T$B $!WD܍ۈԨ,єiâ +ݴFvE=OYY+Y笳y~{Ss% ?} /ւԬ!W\j欔'#~t?8 + n:K](Qmt\Gw D"Wᦅen!K[tRDei<2?K[i|僖峕(qZb$NJ.C<=M=S50n!DBht3=jbMUNqqOqC暑fM_1t\8䙪N2=~dV1EzUڅ}Eβ82PJ5OPMd@RѶM&׍H +h|(I} "IuUL] J빽s3NfYa3 +oR2dܤP5u-zKjw}ʵv_;.r&z&yΘ8W "?)̦/X|YPycoWҔ>s,fBYArH1!?UB5#TGSE(iuQӍx=W#6˲ݎBG3Lv**yiy˳ss׌0І.뙃vf^|Ǣf77!SH_b !bO$Jse̗[ +n+ʳʬ3ekGi&#ps|xt8;s睦+{~قe2ŮgT/{2b5\g"KR':J=2B}!ʹS F Dݵpu_S#rUʳRommVGqRYXEȸd[mP׸Zu$ITk/U( VT>8;%bh albsnrF +.2dpbJEm܃`+̻dpܣsOb+ݬ,a?>g-tExWTpQJ-vX9W55S]]>>r)s'eeNHOKMIN;|=w֥sB۷k&(u-5u6mF ǻ^:kQjxUtؖVHwT?wGGU݉ .ފM+ᅙזLZntOvIQ^Eq[wen?@ǝib`q`Ը/+:RJ*aJ1/"JՇJjĖjcYЪ~f(0@Aϫ#:E= +W|qUws4B.w\1,IIpґU`)羱zA£[vg_߄a/rsLhSuVGEb34yXimuV}Z?R k+F)GOtwU ,l$946W=PL/KLGp# |\`u/],bTC띔%j!**4o̲؁@b9(xL]WjeY‡!%o 7 ޛ5*nhN[AN)r&g4T69[E +u.sh[Ani/0?  q_܈,m@8`@Y؄HR(`D_(VYs i )s[9&?_IP'ًT{O%jgbN|pýi265\V_z/ڳeꯆܐ/狛={Sc7=8"U2\hU,ù;myYԠlR@ cUoLT|̌*#ߘrW&q=๫:BNDAcziHB^[unX^a$h& r49(-6rN88aIHwnHK9.W f2:΀3#"I+@ >V\Õꠣ +K A!AuHCC/>kkUr{ %Ԭ^h4M0z֞85זhuׄO6Յ,uz8Exrd9zuDߊ%Ix3N;IIk=j)oZ MKKpLɤҍhuʝF>r̎4iQ(Q8L8v4çc^ Έ8=>L |N&an߿/!dz k})U fYD^p!P,( _򃯑,liN"IG"iIR8Y}sg c%j+Ki4٭,)Ra˂-,m:|Jw+-J{}g4F3<>4Mܑy]v]{*&mVW.FWc>e>=jRMWZ +u#o0Ͼy둤ԧ a;~!멗jUO_Wj2 vz>Z5mjV2 ڟ귇N-kz53G?WۿDؿCo?+k}S>V?{|~!6OQr6{Qy-GzL̮ohvMk5{ڴNiAeQsFaPEUލ)Ucvv*vV,R +$lS_g3iu5]6M\wwΉc_>ξ۔ ߄#ZBҹZF[XEj[: Z壠UʹNMF41mtT*M!%lJ;{zUnԍh>u=E\>Jk%O~URF,g-f.1҈Yd*ZmloT#*Z,x'kub|ء7Gh1 ZU8QEXe i7!ӏ,YQ@Zm Gl +,*h'vyY|@#5 F +tQ6 + 8O)QN{vɜ1wKvoωsςJT*,91)1RwvJ;yE"96VE{0%I."1LkǺOv1.HLQtgGҬj5a@s,|pL׮{V(i>lOӶDDL81L(HĴd+"ࡼ]G:b=Y_=B;kVg=$R ,j6v(fWۣr0l 2xG V00#ToOeTE[ͤ+(5P G;jԎa4L,LR;?LrBGl|H 4ظ[Ft#>-͉"R2,zUή+ϿYzHu%oǮkK&7Rwa׈i˕!Z3=MM/l< )At ̘T^G\6pGG3(LvJ{zy:Duqm{^ ̷h4B:a\Ⱦo/4tE5*}D?;|#D&pc׷:8ZH!5CDqT5QdUsNC34@ Oʃh4E>Cӫ7QoTh -TND@W5;EDfp೥JԝRO?sus)z1f/9?x]dיQ9; (N7D|[XAv{jcjٻ\ 259S0EZT7AÜre*Ą!zDYN x u)SI#Ax)b%zcmY_cY0P<"Fa/@msQkQt1?, +' LZ$lFP?Hϫ[0`lZ XʳF +XZ;j݈Ej))vBnNǵ9mNن^>")=Sl!:{t+-$X? a@sUH!l+UtCm4B]LYk]}`Dz7oӺ34#ڀۘs<$xzV]< I|Ԡ%D| Иul䰤f$ JDrCn2V87~ETWkl"E(aZLʊےE;t8q:<!o XfіV ۀ I`X\Nf?T4Yl#FúKiKy['Y<y};'U:s*'4jz#*PײnjJe%!]]D[υFI)'Љ9\7Srcmk7޴/o]I.qW]G3ii7>&zn"G.ȴg%$=\,E${[JĆCQb 'Xi@tح5NϪTu]4{@Sv buIR6 1<n:>6A%;z-ԓlIRNL/J^'yģ(nQ1jZ peyc8tjO~5.uM V\u!EI̚@3FԔѡZ# =ZE@X@CJi)eiϝ5pwVT4Y&8sr<5pT[[73! #ׅN:/;5 w /(Z!Z(#"0Yz[h@@ +J ]TUQ7$u4p0 ϳu]0!Kna~iIog(I>loOOo-p`mkK}> uɽ=90Dg[d31܅ڪ)z,tG>e7M3G-}3{jk;?*. 4 nǣ5f#Nr̻Y α 8Gp'XO"x q8}IyS܍*t^G}]IPkkϢDS_E; +Uj?=G]]eT/DowUЋ>u\Hբv\*/fO_Io^n*G9QN'xh.((:<8Aq*8kl\5q5þ[Cz`)$)KxDzE")d"BhU*A|!#KXu#N 9oʿASӥ=taVbZ-9]S6ʴg4LXy5l,>Rz Yz(_.YL^T^kpǴ|>!g0 Ė$j@4;Zx@-8PzxU`2DSc"1 ,UkXaFH/afZkq33N?2Ba9WU +ܟf &%Lh:˖+fmldBq׸{,uw0{=C}?khs=E 7"(cx847. kofw` 6c:Lt5=iu$%#%T WŒގѺ%P7On4{ 4쯷Q-8&ҜbݛVX8IBn( %XR] "]%:O/]Cx.uMPfPkɮ }w%_[Տ~ngThzx<䡣;=yŏvFԃKC?QzF?PePŘO!tdyud6@pB2`C'3$F~2Ox3; esfk5l(:rC]  T\P>* rhS[Dnz{ f"eγ Q6Sz#IO![7L^=,Z 7oq ++ PD{РkV,ʓκuZxt-Ygx-r ϩ":9Cfh,%IQzC:NBT*1Jr£,*hJ"l)D[* +o4KPlvԐN#@P~Y>B"K$DfELp UuN_ 䫲3\ C01cI+Rn_wk~c5GUcZ U1 +I +b\GǕX,JuthOk9w^D4 (L7 F,d1ķɓ>yn'r_W_,WK<57~G!K?:uܚt +3{Baᰃ6rThHbu;z c+a2 *"ҟ8OipjjEokMm%=uvn`K{9`E V6aLD\c``^ڡ5R]/ `&#?}1b0'ɇs%7|&EzrhmاN (iMz!Gڦӓ7/5y3d R\DltD*5pk![d!IX iTX2+ܲ^wKJGOgMkPVu"* znM<˲jPsru ӵ6dY! Q+i?jIՐ8x6t-f0iݫvHR2#DGFFc +uW! air#6#ӅG߾cHZǯ~T4{zF=ۗ,k` jϽչIJ$R tԀ$Ps.ǟz- VY̲qh6|Qn?^Ѿ`؃lT(0n_Q^wƑ왬͝jDdT. 6ƒvg6ܷvf# #̌k8ţ +K"? +21"xNg|V>%ȣsɶ +6v`5ǭ|k@q~g&n<شHZ%kZBY99ãn/I$qی炶g3fvNNȑ&q9YMU,^,DЊ;jےSf,I#o/ŷx+YgDU}#aBNs"-]s`R(et_On"ֻ Sp{rW{pzzp6Difgvv$dz@!QQn-+Y;J>PoBVCl^dp QY$R7{kDex˝2̂~]q,o_9ucW^(PhzOna#8Nh7:L7MF&ynl{ʲDصnlce,tɉE8Ƣ0Vq JmJ9bb>9ؒ$9b22LeܔɢLܔ/[Wn{!!D* !(CEBa J#I'̰kD.G7.xQqeGYBZbozwkeSʰ@n4=ɲWg `|p˰P-㸄d&α:qG_Ǐ3l.[}%LJ SKƤ/aڹo`=NqPk#2y7kJp>OG\6PrW-H)TIgM:&] a ֙aV{`|x Gv-0 2PqKʙ8Zi@^0ZY4*+f;!Bm"UnU +i@zEP6Վ:m|ڦ2f#(H?83j\~lUU%5)YD}zhIk^9k75[lm&zn/A7(vKTpZZŮ'SHFxŸ7B1Q +U+c*ड़ॽ-tz˼ u_[m|jd{u%P:3q|-vԞd_%"co|3= }wVY3):x|CI Ǡ5}pپvٹ;IU|? + NRBVUQ"jҦ32Zn.@4?MLjO`"[Uj[d ӤYz={>w߫G]?@>í$45iä^NvfG 0tavwXiD;s)od[gXX(5kwҘ +RrWX1A/ ]TM7'D~>腃 TB̤? +d{f|)dDW>D叆*GCIQoP ?)NJ `IuQ,<"^؟CML+tEtiW|EZ{5mYڜnmx(GL jL)u|jE`e1 DMsԤ)S2'i1 ?!K#sSo1cQ+p!@f2 |>¿!A+aӁɯ1ټҿLb^߼:աtt=bi8 5QsV@m[&*h[_IKsGSUsHB$E!1qV_R"ExN\Ub<% O!ThAmX5Ej30D74S0VpV0#կDcQ]){bM\A=<'[mѳuZ*'0DZѸq˪V14nga \FMQCaxvܦ +5RɍI2`uڬzj k@׃C3ܲoӷ3wmA t>4;Z3LuH?MU\Fd3^H1llFPJzp~5v2Pztj֑Z4IM[Hs墪ǧfhHLxrx2>œi<:U.P~ډx\m1H?X}!F/T°aqTds/q ZVbL1E&UA業^#Xh=B ;;c2'[$oWdB$^ KL]{#H?nD˦?*Չ$ÔdϐSI-pIx${"jq2p/ϥ/lF(xb|̸hǨ6M_xWģR/LNwgް2cQǒ"͸ %.hXgSK6)~' J-d +g2&dZKw&N@Nرp{/-ئ+Lt) >u 'k2)T} A.kZEOwPѧЙRV['$-1ƢX,ji +\2!YMk7McOP#L=OƎmʒ`..^=]k}?=~^5O:O>:Rhpv 9*K^|Qd..VH$y<4j0sØL,Ԕ$^I4Vi /T2ưY`To J.MSfpԤ{m=-fJ-sAp 2R@LcDD^xx*˙$^|4spHQGSs*[_l2q%|iljҬD<6n/p1-OXjxll6=NгVZm0l'BnY{B Bl58XMVkwwGt0C Ͱ7<{k5P `lF"!Z5H('E-IIrBLR$؜:dF_ʪ^^uB +jN\`8<^ls9"߾L`XeahmVVgsnMI9}&:@مξmkt;å9e,<;.h1Gs*泆WR^Vuj:ݝ3ˮwٝϲʪ.(B!RA \Id) FTUFQ%}JטZQiEU^H*BjԘ44B*hv3\^Z)՜9^)ʋ3x\"E,^n_\]a'K +YWZ5#p`RNtʿrgzK'v>#Hl OCԊRsM+M-qOgxsf{ޕhmS27w46󜘉erbfrZ9n5ݚIk#!>atay>j7d}Z_4~_1>?6f\0++NYyJ~ڮn5'QuLK꣙2"PF2W!G~NL&"qa +\N8H/.j8'FrY iLd3z !԰ӢE=NT-IiX +K0M q2wH~:Gkj$)4Se(biÝx X-fjp9Zߥw4'j?N׫S$z!!DƏӤO2F )g3LfMdzoH- .m1h[w\ԯ]&6 0%st;WS-.z;Eg1 yM:9Է۪ +T#Jej8Rbȗw6 +|T#9HcY9)є{ bE.D產N=:.>=vzEc 'cNNݠh) Fp0J0Eeq誌iJI%),a DФfk?PH6>4o.ї[ƾsůȯF"B-`u/Xfc#TFf5$V Dz$ 8C Mm觐!Ca 1kޚWJQ, R/gHP#@SPIeS4]M{-߆n( %5[^qd5>"XHFHґ{=B=cKKܘ8o ?ĚF +ՉHB @OhHN ᄜe>;ENsk|*JY}l}%Q _x$lV8WYפ &q/GsM¬iu.]\]@~/vo JV#=} ch>-{,!߮bo>1XvOI"RiUdҦvIJndؙڱdlo3U7]J*hK?hyonn-$ߐ^tAJj҈ƲȿM# ΩI_Fsu5Қq|m>=&;kϩ87Mqqx#otRWr/(J7UeAXÃ؉ʶqKD#JQoThY6I 1|fr$)^A),F5YSα$?򒂷=ezlQXœw7CFyMN.fw,FŃmvptx䭑UfT;Te(ZXca噲-`Q{He:JN9#DP;G")|2PYqh +3.s'#Mqnwc&Ir%X5&IVK+Υvdam9ID[{R ,>J/f +Imw0=~i/P?CO:~,HV0Ct`%+!} +k:ls=Ўf旰)BBuh1؍{Ԏsٰ 6g7iMja3ӥWsS=07{u +^. -zyx,7GVQBbyYbd;ѳ{wzڡ :C'0{V؏]=3/D}yZ/zEusYB*pS[?d ɤt)N&FH#8\*]?Z̴t:X%iӐNZGfә.ѡ[%<`ky &mdlą Ѓ4KD"~# zTUQ$ k*O{YC8bܴBt FbmV0$ +nԨDţŠeG:N (`Kα_{޵*9 mT4?kTݨAC A'$eABPmA=BDUKL"I>~V?v7! +H^&(ynq53IHrb ΰd]*+yR!R蒥![ȿ,8J?iAXyp9;mi6I"tt }_?SE<&iFiCׁ-7PɪZۈ|G!߷| #W,p<+"xt/bЭ'FE$u5bWFZd9ni K&XE4b╚Kr*~ +uXڋ%6~E8uZgv`M^ek$hW˓t}I9_R 6DBgo?Iw\zT槵=u/wU,mM$MR؆bF6B߈$mHLuIZ19עj K?Tee=~gwwٷ7W%UGu8GPQ\Z0oςLL`lJꧩB +s,Dw;Cf]U4i_nn/Pz$%;[qp_Jk_):0J,F|'vwvH13P)<( +o۸%jK1ET̓sJB1/KKhGͭ;^R#KJX%r(]ؽ4QzTZxDЄLki8_=ǓJz6$GȤ}QsARJ\JHÉd9:d"'[%f^"e΋o'ۚ7:^u(SɐQȩ~BC2M"mZ h3_>lBGY(3궎gw7W ʹw>v!3FWj7#Z{8~{2ِ^Ԛ>Ď +{BԊZQQk˜C4: X)M(˲qYcBWfylr)l#x~-9ZTaUE*\i&wez6mBx*|5|￷WPHpwD-GL-@bx\{q[5kq[@ xq[V㭩q{yOpt[GQ}ZH<HIkΛzuShiGJg VO/ |QH*k409cHt5F9\"Y͔ +u2 +r +endstream +endobj +3320 0 obj +<< /Filter /FlateDecode /Length 11 >> +stream +H:` +endstream +endobj +3321 0 obj +<< /Filter /FlateDecode /Length1 11986 /Length 6577 >> +stream +HW SUGND + " + ++* ,Q>8Zc1Qctb2D>1I94Sz9ӧOgjδDTC.4\OueZY;>+0tٙ?@ŽMj1ugNDmGF̬W[rMHDZ9Y9}€dXF#s]O?ܞ'\u_^= +HJƛS51K ~Hxv rp @I'YBgsh,5(U %]!($8JS +o2[qKmF û45-_! +$tn\h`}n- x'JU~.;"+muiaz-cJ}ԣbi+m򦵼1[Bο %ZbTB;f1(j9 gT5nmp"64PkOx* 5W3#6sܓNtC?3UlYE'uDaw>wi'*:@*ɲR +d\+ʡ|UK1M M9#Kkz0H}\E~z[)uM/+bu?4|H+SCKI)=5GUԵ[o:V/իI+*}x9cBB^-Pt$ћ&Q,"s6 +Gpė:r z"YArP!?C5#TzHiuQՍ=O}łeYnGDv3Lr/b_\{OafQ?FjZ+ǥ +]@ ZB#e4/ B̓\/ d,5XǵDLn}yJӛT :sT5H %U&rtPڥӭu}Hd[ݬV:e.[l;N7هGc#]s9ؙ<4Uw%qJ碁βH -Pu^IHT=lՑΔ i}.: `XPO W$zW>QrOb[ 컀.-)U|.&)73pYU]T/QkI1 +!vI{PK%P6v#)`8!j,Ō/)H6d SNBd.5V!8}弮r_՗ꑊu{F-ZB;&V-"MI;4Z'۾l϶ Eƪc³qhQ0D +{% Rқ}ᥚ1O2GCOV)eV#So>1cڀU9 ory6˿89sFFcD]b' +bsV#oI +SyGxf-zq&3f1N7;KX5ne2/y}#Qx' pA{؟"Ϻf O{4xDnQoxM U!H5tF(tڌ=hjw$B}[K;ެ/,TRY*Ke,x[ b1mI̤ۄ{td֙+yNw=dɳÈXC%Ƒcœ;%Ť72/_y7|h.Y.sdHK)-5%9)1alAztֵKN;}]ې6Z hӴIF ۫^:k^kիUtؖVwd?wGE.o"+S⊫sV2I#R2R Z"ܮݮ2z(֗vǺJTTߩ`?W[lgzwmL<6Y0g2K_1 `,  5TZjI@C4jժiճ됬TP% E jΙR5ݝ#]JH}~:׃p)+5ZD KeFEtGAB Y=i#,Ώ~7ݣĕ԰5U4GS<&194/i4+G.'o_囵YI/O7/r;WkLϠHa3˕3s +f7j$wV?^0uu{T6kS|O}Q^_Kk +Zu#U!Qp.1:4Tl^1"k37 ĵ0vь?3<^|뱟r&yYR .a͗CI4%A]2ѠmUFɯkn:YRuT3>Cn^G+obyϕ݀7hH/j{\ &Chf49 Um<8TiupeQAk\<.зBJ H8$NW%3VznJ cR.U/TPؿf# ƭ"ɨ#XXJ#õܦ*Lt*M^=t ;yU 4ٝ_1Oa9?_ '\h:7t9a&Kh|@,uI<:g!2-w:RT.XNhD٬[T5 ++s' "GJU!B^TT^pƤ6".)$eB%5iAG#Th"ƙ@dc:&4W o Wu'gQT!*Brߨt*z1;4ZRfe0p;v e n%1"@x%P֖͖XbG`!ouixC')sĹ'N 90x|Y6#/dKP rozI >6qi9|l8/jE?lAM{<"=J]I1>g<#bQ]ˀx[yQ }|pVAy '%ʛ M[8 t߷|` G7 mGg^2!1\MO[5)saG f9s62QS>vneqs9C.u^$l@ayR_>]K>eT}3&18fsuI;b8Y$,utmp5f,X,M:ٓT-]|Qu$\OTV_F(F-ʯ7(J1Z"%WUqEh5UbTޢsH:IhSS,_^S];Zg:.SZen7/1&3W9 $Ab*V%'.I\KL'X:s:5?Sn/*W/+>xWjA1=mv[׬VvV-XsڵkbrɶʼnGc> jiRA3pޔlKI~ĈTm_M{'K{3&މASJ=bKHJ+R G*0#N{( / +鈼tjhj*=B_ +i!ZHGAeFoC}[VN}ym)!\펃UnC ,t>پcm\jbtYC}4V5tv%Mʱ @uMO6lH\\xۄP~WAuQ'b|UsTWATvMk|eK۝(+T(@ٻfmA6{F[Ņm[:`z+#mu}{j"t + BUhB^a`?V@9ϊ{]9M \2ˁ^K!`~( w ׁ ^oI;xqyֵz@]u(¾ʞ +mt.\K]FJO#i@ujT`NlN攨Kv?Wml[W>^ڎsc7K4;&%׎ݒ84iӵv|466%- +D XUn?hP%"_nMc]A:99s p ^s ^nw<_:`TfMvӈůbϖo'|C~s8gK|ϱ<0Dt,&xMȢ v Vq Lvr]>?2`;"wN:'G uFF6m~ӛJ*}GO2zԻ=z[QI z!%Ԗ>GD6 +V8ӿ /8j4ԏꝀa@}+_ vq,TA3}]p-ev25ҳIR9ӏ.xRB?M0| 떞Amg!Xv~Lۂ޵BXb#~H68t4 o<_VϬiEoc+z 3V4VEȌ|ҟb 8 Ij/*VJeei [(Rt$&L41FZG=b* +uZ)\bүRu}p;_hp/ŮG4|^~*[p\%["E=k»[=7A0;ʇA^ŒÝa.S ɌK 2.-m2J;XȞB-rmvE#t8;8v;:ɱwzuZgT6$Άߞ bleY|J))3f}d%HX?hdLgW+ )}Lɡ,(7M7]KҶ~k\fQw0]KȦx ;ACU<|^zf kmݦdΌ:s߀htBO.I\rKD WRa$(M \xXy Ғaدtj%Oy"xR~.$!WHzacT:|ZB=3O-mA+0BaFJSpe89y4'P P?LK7Ǵ<9~S242162i)#ܣ=VhPveKYpZNJS]rkMκx#^2,ǮW1wU TVʚr[vP!eB9*kVuHC Iun3%[kT,6^bs9S/_.RteA2coV`'ȷgȭrk|A.Ÿ>9VjQ?[сWTO|P+QS +|+g0W Ŵ* +IA3YD?OЇO1")vAZ͊\]p^"`, +endstream +endobj +3322 0 obj +<< /Filter /FlateDecode /Length 11 >> +stream +H` +endstream +endobj +3323 0 obj +<< /Filter /FlateDecode /Length1 11438 /Length 7836 >> +stream +H\U Pν"p}Q "nغ  +*(uiDmH5-FitʳZi[QǕXNL#ig?w9ܳ|Y./^#oNN'zJƥ0u)k6/Z;²'SBn4VX\:\m6SnV;9[\ڙ25.U<$ (4Phע-`ɰLnk/p,C0)TyY0$!PCA0pb2 |)QJҰD1 IxeKpQ?DtPInb$2|wAБ'nPlpL)fZ1$[[03GP+oqôr 1K &{Sy >RQF5q @OL}.Kq|k"ZGRtmdTk?A^-'Uy|b-K/ +$RZŞk8>B*_Z7z锴PL g{'[G"HUf_bE-L)(yw>}݈4[IK2|H"`d\Vn k!E!Xm8bJi&!=-[(j*KO*kD4,r9CIތɔRX=AWF8a<7['<<904S>@:tAId, +yGv'< +VZuX]Su{Uuj\5~ַR+T3ՉUVj*Ss:I3cكk>}joၧSh"mD^s.\WI0s&"a|WzH|zxD1uȤ-9R6B)Q [ \rW&ѢL5^M$MRyjZΪꚺiRwԝuڭKFdӍZn6'yJsʾgauәxFo7bUX>Jgj rjI>[T蝪 0\ぬb5j̋FyU|zV窣j +޺ܨaՙO=ʮјc?gӧiP " +afHjxv>5#Q[#>Y%؂[?F蠌N.CfmYk?FK,.~I⤣1+_l$jO0fSq6n1RTUI grhƬXVoF?D/^]C:zz]YÁWN(EaTQ4#^&K6\z-訮]";G9;::vh߮mց^j¯yM|6JLq#rF3==aFO6rn9~ΙH)Ǚș?Nw hG>r:H,W:|w^7<4.[r99.7řR]M9mʙ;YK^DۥӜJ8]AOwgJu 햔HZ 81350B޷i^?Kګk{^ػ\wzk3 c<$-;uhu@32z!"򖞜J:5?OKD/0@,>\kZ|4Q*_󲜏4z 0t=ѼuYVHWlT)++6s6Ui ѐpCH+j􌤟烞dfh BFe5k^`LYCq&F>3C/P[WW&S˩md)5B] gPlh ; +0g3FOo .4\DF:bjC#7cVVkZǠVz@0M97g,07"77b֭b_;}): ӯkޗ>l2TU8uȋO|[q v zqcKЮ !LB6+ `K n''|[xN?>xD޶4Гn,e?Yn2Pl#@1]Eg2r&nD.1).e{C+>>k91^6JFcX"0|NhF켭h H +|`YFCN]NƶMѨ(& cbQ`hpǭ7H=0onؿݻA.o!Z3;]- .G%E^*sˁի _!$ I?"jWduѹI`1i1yM z@#ikt[R^mڬQe\ +ksE]b.bglW+FMfX=CyX ^د{GWjkdN,_h2핁rŇ8Q܀b) 9)'`>>Ai(VbFƆV-CZSH+jSO ylm +J\guKoBS,ЮS8gaeffIP^RjILpSIHPњfKZ@%\2xEJd +QA`bټə Tmg.~tp9K{{B-M>.=m_xK(s;m +}Ipy~Qy'sl/(kۣxR0Y>hAA r-N0uNĘI?͹ܗ(g!84KXjͱ{RނzJFgM @z ERo%B]~ +>Ǽ!rLOʬ8\eDۦM =av琍~H5qf8RF'N4=$I4Ҥ{o%xש^9y0 ++"jǔ#/^Fcɉh0~(wT?>͗}{f@c] \* , +.Qωb07%|., " += X@R W)!&RA?$3.`Y#1*`7$1cAl<ߢl@Տ,D$Ze-brLb&Igk[lIrb-j\w޻~&ӻYo'ĎW:iH&1Ti;U&-EF@N&Eh\85nW"~8vZ )6-#n ~`93̜;gcU!Ck+kV-_ݸr]T[S jnjkRm|o|5uq,MҎeUZP|BjԺSUTTx0&{eC7Զ9ukۖ>tϞ|3Y|Nkijbb:@Gh?G]4x/n7ćio?}x/?LR^Π(^J6ïp=+и^ꖖҊ{\\Iz9eFpp9zZ97G`ŜCbsz[̖nIqPs>=&uAHTwRn-΂8! "AAY6H)`Z57H&zLu&v +7i@1݋]R/0:l]$ݪ2nzeEZ[uz{Rl֐MTש[My]b&JtkԘ6_F%<^5?tJo +I=JO)0P`_-wʅ6_85;/r@Pk.SJ{k]aq+U|5~N~;~Sw&w`g+72ͣ4(<ǡ%~=7k4ߠ,0_ǔ %DK$vœih}N +%;)oI>MC3SuRl#Z` YIᏫxLKq7niN}+Cևk~Crv`߯ZŬI]vQV9]p􀨻~I:""2# ~O/,S`^9['xڋa5Erl- LIxTsS9ɗoGQv'1U 5qq[]M(0許 4Z Fڶ"G SPZV0-ƣM `@1Mu+8Z5#fEi6ĵ44K.JٸvJZ/ YvoȗVK $'1[$/ozl*QiX8Mi&"|Ouv.tlr!ɧ^[ƧZf[ZڠNiE.W OS\xw,![??gY̟_yr+9Ϣ( y2g㱊]ŎG_LFpVyɁ8pJy V u2, u2n4!p`Sn8fFBFm1]EX$aDͨ,gr#g3ЀlniNz6RN)*=6-v3GYS Ȓ +v3fHpܑ7ʸkD(#,IF%96,vX|*oDޢ2a0(/ +R |7x\>3`'z3ny[>^ʭq3h¸y#IT07y/(Q^#QvP͋R|)D\ĘЮS+ڰq1l<6 + ;ƽa9U#`+$k_P\ԄCCoBƫ!㙐'dCk7N5*7cEM0=@/:qSU0"]0"y B$_}1qa|f  ^r];EhzPs.m^ +4ݑ)&D>DkD;ՐI^|=ԘT_iM(~k#O803l4,LD=q0f @jab>K1;i-f[y&U;qC<7aDS.Av910 P08 #al0N;p+>!shŠ=-,pLX,N#¼0)zznCV:&y!2S# 7ty#)ľ&'ą(Lah=)-t8c%y8' v*e`0. g'@pQ􄢶6SEF GF%= q>}^q_\bZˇ݀k|&,u:y}k"ek8+ljf:3GFT7t_,;gpc o5UmU(XXhb찎` sghq u=dgLI< ~>$x/; +t+k칮 +|ӓ0_  y(#noSzuAUUFRD毕_m55UzDl[C%3px <{_=JҌ|d[[C1VmȐp"bWyݧdzE݆D(}xLL6Kg"} ]ug:+#}?5oel㦬ہl92b/)StjI92D;HeA#eTX SF2#Si=C\=R?%NӤ%Ch>Hh@0)bȄFEPiDr4xS Չ&3h?\?8ޙv:K9陉{r;:DFN ܙX.Z^{F7=;Kxo:6.vOߗ\ݳ`ݘk`zz51@|@ &hf$MmfLyuzZ#'] u %+0Ps{ +endstream +endobj +3324 0 obj +<< /Filter /FlateDecode /Length 11 >> +stream +H` +endstream +endobj +3325 0 obj +<< /Filter /FlateDecode /Length1 1222 /Length 903 >> +stream +HSMlU/acv5k7Ο9+FjqMI;R\4E +"5RzPZTU#H8@D*HU6 +c$z`7ߛ74;? +ݙWڰM"]̦1r,P͟#v;< r gOUgQs޴ ]ڡFiL$zZTD4i;f81^jS˲OkVkOHNjnooQmK<_$wz=FJOӹPr%;v͟|ٸ^c}:Vp+ > +{XNYOB#aBXy1OYeHNi% [yf.߾eqd}x0;^X^붿;{Dr0>,7Vƙ$[$8SMOǞ+M(^23 UF h,>/& f"M)ȱhb:i0fKeNcb2UnKb#џȁxh.F%9g{TS6H5+$Qy@s}3 e%{` ^vڌxe՝dT_k;0I#?c3 1࿯@*ߪWb!ʋ|H~c^ķUS6+~y/K<0\ZW]Xnn + +wz}>`*, \.%LfWk`}#R𔰵(b +f8Z *f竘G|c8u$yp00&f>}{HHAC&`fp# ,,sO?)$ +endstream +endobj +3326 0 obj +<< /D (subsection.A.2) /S /GoTo >> +endobj +3327 0 obj + +endobj +3328 0 obj +<< /D (subsection.B.1) /S /GoTo >> +endobj +3329 0 obj +<< /A 3339 0 R /Next 3340 0 R /Parent 3258 0 R /Prev 3297 0 R /Title 3341 0 R >> +endobj +3330 0 obj + +endobj +3331 0 obj +<< /D (subsection.B.6) /S /GoTo >> +endobj +3332 0 obj +<< /A 3342 0 R /Next 3298 0 R /Parent 3258 0 R /Prev 3343 0 R /Title 3344 0 R >> +endobj +3333 0 obj + +endobj +3334 0 obj +<< /D (subsubsection.D.3.2) /S /GoTo >> +endobj +3335 0 obj +<< /A 3345 0 R /Next 3308 0 R /Parent 2734 0 R /Prev 3305 0 R /Title 3346 0 R >> +endobj +3336 0 obj + +endobj +3337 0 obj +<< /D (subsubsection.D.3.4) /S /GoTo >> +endobj +3338 0 obj + +endobj +3339 0 obj +<< /D (subsection.B.2) /S /GoTo >> +endobj +3340 0 obj +<< /A 3347 0 R /Count -3 /First 3348 0 R /Last 3349 0 R /Next 3343 0 R /Parent 3258 0 R /Prev 3329 0 R /Title 3350 0 R >> +endobj +3341 0 obj + +endobj +3342 0 obj +<< /D (subsection.B.5) /S /GoTo >> +endobj +3343 0 obj +<< /A 3351 0 R /Count -4 /First 3352 0 R /Last 3353 0 R /Next 3332 0 R /Parent 3258 0 R /Prev 3340 0 R /Title 3354 0 R >> +endobj +3344 0 obj + +endobj +3345 0 obj +<< /D (subsubsection.D.3.3) /S /GoTo >> +endobj +3346 0 obj + +endobj +3347 0 obj +<< /D (subsection.B.3) /S /GoTo >> +endobj +3348 0 obj +<< /A 3355 0 R /Next 3356 0 R /Parent 3340 0 R /Title 3357 0 R >> +endobj +3349 0 obj +<< /A 3358 0 R /Parent 3340 0 R /Prev 3356 0 R /Title 3359 0 R >> +endobj +3350 0 obj + +endobj +3351 0 obj +<< /D (subsection.B.4) /S /GoTo >> +endobj +3352 0 obj +<< /A 3360 0 R /Next 3361 0 R /Parent 3343 0 R /Title 3362 0 R >> +endobj +3353 0 obj +<< /A 3363 0 R /Parent 3343 0 R /Prev 3364 0 R /Title 3365 0 R >> +endobj +3354 0 obj + +endobj +3355 0 obj +<< /D (subsubsection.B.3.1) /S /GoTo >> +endobj +3356 0 obj +<< /A 3366 0 R /Next 3349 0 R /Parent 3340 0 R /Prev 3348 0 R /Title 3367 0 R >> +endobj +3357 0 obj + +endobj +3358 0 obj +<< /D (subsubsection.B.3.3) /S /GoTo >> +endobj +3359 0 obj + +endobj +3360 0 obj +<< /D (subsubsection.B.4.1) /S /GoTo >> +endobj +3361 0 obj +<< /A 3368 0 R /Next 3364 0 R /Parent 3343 0 R /Prev 3352 0 R /Title 3369 0 R >> +endobj +3362 0 obj + +endobj +3363 0 obj +<< /D (subsubsection.B.4.4) /S /GoTo >> +endobj +3364 0 obj +<< /A 3370 0 R /Next 3353 0 R /Parent 3343 0 R /Prev 3361 0 R /Title 3371 0 R >> +endobj +3365 0 obj + +endobj +3366 0 obj +<< /D (subsubsection.B.3.2) /S /GoTo >> +endobj +3367 0 obj + +endobj +3368 0 obj +<< /D (subsubsection.B.4.2) /S /GoTo >> +endobj +3369 0 obj + +endobj +3370 0 obj +<< /D (subsubsection.B.4.3) /S /GoTo >> +endobj +3371 0 obj + +endobj +xref +0 3372 +0000000000 65535 f +0000000015 00000 n +0000000150 00000 n +0000003032 00000 n +0000010125 00000 n +0000010159 00000 n +0000010207 00000 n +0000010281 00000 n +0000010356 00000 n +0000010464 00000 n +0000010778 00000 n +0000010851 00000 n +0000010924 00000 n +0000011035 00000 n +0000011146 00000 n +0000011236 00000 n +0000011352 00000 n +0000011474 00000 n +0000011595 00000 n +0000011715 00000 n +0000011808 00000 n +0000011969 00000 n +0000012128 00000 n +0000012287 00000 n +0000012448 00000 n +0000012618 00000 n +0000012788 00000 n +0000012963 00000 n +0000013134 00000 n +0000013307 00000 n +0000013479 00000 n +0000013651 00000 n +0000013824 00000 n +0000013994 00000 n +0000014166 00000 n +0000014336 00000 n +0000014505 00000 n +0000014679 00000 n +0000014853 00000 n +0000015015 00000 n +0000015175 00000 n +0000015334 00000 n +0000015416 00000 n +0000018186 00000 n +0000018269 00000 n +0000018484 00000 n +0000018559 00000 n +0000018669 00000 n +0000018872 00000 n +0000018918 00000 n +0000019046 00000 n +0000019117 00000 n +0000019164 00000 n +0000019253 00000 n +0000019400 00000 n +0000019517 00000 n +0000019634 00000 n +0000019751 00000 n +0000019868 00000 n +0000019985 00000 n +0000020102 00000 n +0000020219 00000 n +0000020336 00000 n +0000020453 00000 n +0000020570 00000 n +0000020687 00000 n +0000020804 00000 n +0000020921 00000 n +0000021006 00000 n +0000021127 00000 n +0000021265 00000 n +0000021386 00000 n +0000021509 00000 n +0000021637 00000 n +0000021765 00000 n +0000021892 00000 n +0000022017 00000 n +0000022143 00000 n +0000022269 00000 n +0000022395 00000 n +0000022522 00000 n +0000022650 00000 n +0000022776 00000 n +0000022902 00000 n +0000023029 00000 n +0000023155 00000 n +0000023281 00000 n +0000023407 00000 n +0000023532 00000 n +0000023657 00000 n +0000023768 00000 n +0000023880 00000 n +0000023999 00000 n +0000024130 00000 n +0000024258 00000 n +0000024509 00000 n +0000024656 00000 n +0000024827 00000 n +0000025014 00000 n +0000025200 00000 n +0000025255 00000 n +0000025301 00000 n +0000025492 00000 n +0000025683 00000 n +0000025873 00000 n +0000025974 00000 n +0000025997 00000 n +0000027761 00000 n +0000027808 00000 n +0000027886 00000 n +0000027964 00000 n +0000028093 00000 n +0000028185 00000 n +0000028233 00000 n +0000028362 00000 n +0000028498 00000 n +0000028638 00000 n +0000029074 00000 n +0000029238 00000 n +0000029378 00000 n +0000029498 00000 n +0000029618 00000 n +0000029854 00000 n +0000030154 00000 n +0000030342 00000 n +0000030482 00000 n +0000030638 00000 n +0000030758 00000 n +0000030898 00000 n +0000031046 00000 n +0000031202 00000 n +0000031322 00000 n +0000031442 00000 n +0000031582 00000 n +0000031702 00000 n +0000031842 00000 n +0000032006 00000 n +0000032126 00000 n +0000032246 00000 n +0000032366 00000 n +0000032486 00000 n +0000032606 00000 n +0000032726 00000 n +0000032846 00000 n +0000033114 00000 n +0000033234 00000 n +0000033382 00000 n +0000033530 00000 n +0000033910 00000 n +0000034122 00000 n +0000034242 00000 n +0000034382 00000 n +0000034546 00000 n +0000034718 00000 n +0000034838 00000 n +0000034994 00000 n +0000035222 00000 n +0000035386 00000 n +0000035506 00000 n +0000035646 00000 n +0000035794 00000 n +0000035914 00000 n +0000036086 00000 n +0000036250 00000 n +0000036370 00000 n +0000036510 00000 n +0000036722 00000 n +0000036842 00000 n +0000036990 00000 n +0000037234 00000 n +0000037438 00000 n +0000037642 00000 n +0000037902 00000 n +0000038250 00000 n +0000039014 00000 n +0000039134 00000 n +0000039254 00000 n +0000039374 00000 n +0000039494 00000 n +0000039614 00000 n +0000039734 00000 n +0000039854 00000 n +0000039974 00000 n +0000040094 00000 n +0000040214 00000 n +0000040334 00000 n +0000040454 00000 n +0000040594 00000 n +0000040790 00000 n +0000041034 00000 n +0000041270 00000 n +0000041506 00000 n +0000041753 00000 n +0000041986 00000 n +0000042183 00000 n +0000042416 00000 n +0000042619 00000 n +0000042823 00000 n +0000043146 00000 n +0000043376 00000 n +0000043665 00000 n +0000043903 00000 n +0000044158 00000 n +0000044407 00000 n +0000044642 00000 n +0000044910 00000 n +0000045161 00000 n +0000045431 00000 n +0000045750 00000 n +0000046091 00000 n +0000046378 00000 n +0000046642 00000 n +0000046966 00000 n +0000047220 00000 n +0000047426 00000 n +0000047658 00000 n +0000047917 00000 n +0000048174 00000 n +0000048407 00000 n +0000048631 00000 n +0000048875 00000 n +0000049111 00000 n +0000049346 00000 n +0000049579 00000 n +0000049807 00000 n +0000050046 00000 n +0000050290 00000 n +0000050532 00000 n +0000050774 00000 n +0000051018 00000 n +0000051261 00000 n +0000051505 00000 n +0000051748 00000 n +0000051992 00000 n +0000052235 00000 n +0000052475 00000 n +0000052710 00000 n +0000052946 00000 n +0000053180 00000 n +0000053414 00000 n +0000053650 00000 n +0000053885 00000 n +0000054121 00000 n +0000054356 00000 n +0000054592 00000 n +0000054827 00000 n +0000055063 00000 n +0000055298 00000 n +0000055534 00000 n +0000055768 00000 n +0000056002 00000 n +0000056238 00000 n +0000056473 00000 n +0000056709 00000 n +0000056944 00000 n +0000057180 00000 n +0000057415 00000 n +0000057651 00000 n +0000057886 00000 n +0000058122 00000 n +0000058353 00000 n +0000058586 00000 n +0000058822 00000 n +0000059052 00000 n +0000059282 00000 n +0000059526 00000 n +0000059769 00000 n +0000060013 00000 n +0000060256 00000 n +0000060500 00000 n +0000060743 00000 n +0000060987 00000 n +0000061230 00000 n +0000061474 00000 n +0000061716 00000 n +0000061952 00000 n +0000062188 00000 n +0000062423 00000 n +0000062659 00000 n +0000062894 00000 n +0000063130 00000 n +0000063365 00000 n +0000063601 00000 n +0000063836 00000 n +0000064072 00000 n +0000064306 00000 n +0000064540 00000 n +0000064776 00000 n +0000065011 00000 n +0000065247 00000 n +0000065484 00000 n +0000065728 00000 n +0000065971 00000 n +0000066215 00000 n +0000066456 00000 n +0000066692 00000 n +0000066926 00000 n +0000067160 00000 n +0000067396 00000 n +0000067631 00000 n +0000067867 00000 n +0000068102 00000 n +0000068338 00000 n +0000068573 00000 n +0000068809 00000 n +0000069044 00000 n +0000069280 00000 n +0000069514 00000 n +0000069748 00000 n +0000069984 00000 n +0000070219 00000 n +0000070455 00000 n +0000070690 00000 n +0000070926 00000 n +0000071159 00000 n +0000071387 00000 n +0000071623 00000 n +0000071858 00000 n +0000072094 00000 n +0000072329 00000 n +0000072565 00000 n +0000072793 00000 n +0000072971 00000 n +0000073149 00000 n +0000073329 00000 n +0000073508 00000 n +0000073688 00000 n +0000073867 00000 n +0000074047 00000 n +0000074226 00000 n +0000074406 00000 n +0000074585 00000 n +0000074765 00000 n +0000074943 00000 n +0000075121 00000 n +0000075301 00000 n +0000075490 00000 n +0000075702 00000 n +0000075936 00000 n +0000076172 00000 n +0000076408 00000 n +0000076644 00000 n +0000076880 00000 n +0000077131 00000 n +0000077407 00000 n +0000077683 00000 n +0000077933 00000 n +0000078184 00000 n +0000078436 00000 n +0000078688 00000 n +0000078940 00000 n +0000079076 00000 n +0000079241 00000 n +0000079406 00000 n +0000079575 00000 n +0000079745 00000 n +0000079908 00000 n +0000080070 00000 n +0000080271 00000 n +0000080442 00000 n +0000080613 00000 n +0000080783 00000 n +0000080954 00000 n +0000081132 00000 n +0000081310 00000 n +0000081485 00000 n +0000081660 00000 n +0000084932 00000 n +0000085089 00000 n +0000085257 00000 n +0000085425 00000 n +0000089565 00000 n +0000089797 00000 n +0000089967 00000 n +0000090135 00000 n +0000090305 00000 n +0000090470 00000 n +0000090635 00000 n +0000093137 00000 n +0000093382 00000 n +0000093553 00000 n +0000093723 00000 n +0000093893 00000 n +0000094061 00000 n +0000094227 00000 n +0000094398 00000 n +0000094566 00000 n +0000097873 00000 n +0000098076 00000 n +0000098244 00000 n +0000098414 00000 n +0000098581 00000 n +0000098749 00000 n +0000098917 00000 n +0000101104 00000 n +0000101159 00000 n +0000101345 00000 n +0000102082 00000 n +0000102544 00000 n +0000103316 00000 n +0000103795 00000 n +0000104559 00000 n +0000105331 00000 n +0000106308 00000 n +0000106887 00000 n +0000107152 00000 n +0000108069 00000 n +0000108370 00000 n +0000108646 00000 n +0000110905 00000 n +0000110957 00000 n +0000111051 00000 n +0000111211 00000 n +0000111263 00000 n +0000111447 00000 n +0000111494 00000 n +0000111575 00000 n +0000111697 00000 n +0000111791 00000 n +0000111859 00000 n +0000111907 00000 n +0000111989 00000 n +0000112071 00000 n +0000112206 00000 n +0000112278 00000 n +0000112443 00000 n +0000115791 00000 n +0000116008 00000 n +0000116175 00000 n +0000116343 00000 n +0000116516 00000 n +0000116678 00000 n +0000116841 00000 n +0000117010 00000 n +0000117179 00000 n +0000117346 00000 n +0000117513 00000 n +0000117677 00000 n +0000117841 00000 n +0000118005 00000 n +0000118169 00000 n +0000118333 00000 n +0000118498 00000 n +0000118663 00000 n +0000118828 00000 n +0000118991 00000 n +0000119151 00000 n +0000119318 00000 n +0000119485 00000 n +0000119653 00000 n +0000119821 00000 n +0000119992 00000 n +0000120160 00000 n +0000120324 00000 n +0000120487 00000 n +0000120659 00000 n +0000120831 00000 n +0000120997 00000 n +0000121166 00000 n +0000121329 00000 n +0000121489 00000 n +0000121656 00000 n +0000121823 00000 n +0000121987 00000 n +0000122156 00000 n +0000122326 00000 n +0000125573 00000 n +0000125775 00000 n +0000125945 00000 n +0000126113 00000 n +0000126276 00000 n +0000126440 00000 n +0000129809 00000 n +0000129981 00000 n +0000130149 00000 n +0000133296 00000 n +0000133438 00000 n +0000136711 00000 n +0000136853 00000 n +0000140021 00000 n +0000140163 00000 n +0000140327 00000 n +0000140489 00000 n +0000140653 00000 n +0000140817 00000 n +0000140984 00000 n +0000141151 00000 n +0000141317 00000 n +0000141494 00000 n +0000141671 00000 n +0000141833 00000 n +0000141996 00000 n +0000142159 00000 n +0000142322 00000 n +0000145526 00000 n +0000145668 00000 n +0000145830 00000 n +0000145992 00000 n +0000146169 00000 n +0000146346 00000 n +0000146509 00000 n +0000146672 00000 n +0000146849 00000 n +0000147026 00000 n +0000147217 00000 n +0000147407 00000 n +0000147584 00000 n +0000147761 00000 n +0000147937 00000 n +0000148110 00000 n +0000148281 00000 n +0000148452 00000 n +0000148631 00000 n +0000148810 00000 n +0000148986 00000 n +0000149163 00000 n +0000149333 00000 n +0000152815 00000 n +0000152987 00000 n +0000153149 00000 n +0000153311 00000 n +0000153479 00000 n +0000153647 00000 n +0000153809 00000 n +0000153984 00000 n +0000154159 00000 n +0000157548 00000 n +0000157780 00000 n +0000157950 00000 n +0000159600 00000 n +0000159787 00000 n +0000159957 00000 n +0000160120 00000 n +0000160282 00000 n +0000162403 00000 n +0000162589 00000 n +0000165616 00000 n +0000165803 00000 n +0000165972 00000 n +0000169549 00000 n +0000169751 00000 n +0000169921 00000 n +0000170090 00000 n +0000173601 00000 n +0000173758 00000 n +0000173948 00000 n +0000174113 00000 n +0000174279 00000 n +0000177573 00000 n +0000177746 00000 n +0000179750 00000 n +0000179908 00000 n +0000181369 00000 n +0000181512 00000 n +0000181677 00000 n +0000183689 00000 n +0000183847 00000 n +0000185186 00000 n +0000185329 00000 n +0000185495 00000 n +0000188432 00000 n +0000188619 00000 n +0000188789 00000 n +0000188954 00000 n +0000189119 00000 n +0000189284 00000 n +0000192391 00000 n +0000192563 00000 n +0000195161 00000 n +0000195304 00000 n +0000197143 00000 n +0000197286 00000 n +0000199361 00000 n +0000199504 00000 n +0000201434 00000 n +0000201592 00000 n +0000203685 00000 n +0000203828 00000 n +0000206132 00000 n +0000206290 00000 n +0000208998 00000 n +0000209170 00000 n +0000209338 00000 n +0000209511 00000 n +0000209680 00000 n +0000209912 00000 n +0000210125 00000 n +0000210356 00000 n +0000210568 00000 n +0000210800 00000 n +0000211008 00000 n +0000211240 00000 n +0000211448 00000 n +0000211680 00000 n +0000211895 00000 n +0000212127 00000 n +0000212352 00000 n +0000212522 00000 n +0000212692 00000 n +0000215429 00000 n +0000215601 00000 n +0000215960 00000 n +0000216132 00000 n +0000216303 00000 n +0000216474 00000 n +0000219003 00000 n +0000219189 00000 n +0000219359 00000 n +0000219529 00000 n +0000221425 00000 n +0000221612 00000 n +0000221774 00000 n +0000221936 00000 n +0000222104 00000 n +0000222270 00000 n +0000222438 00000 n +0000222605 00000 n +0000222771 00000 n +0000222935 00000 n +0000223099 00000 n +0000223264 00000 n +0000223426 00000 n +0000223591 00000 n +0000223756 00000 n +0000223919 00000 n +0000224082 00000 n +0000224248 00000 n +0000224412 00000 n +0000224580 00000 n +0000224747 00000 n +0000224917 00000 n +0000225088 00000 n +0000225252 00000 n +0000225413 00000 n +0000225584 00000 n +0000225756 00000 n +0000225923 00000 n +0000226092 00000 n +0000226255 00000 n +0000226418 00000 n +0000226584 00000 n +0000226751 00000 n +0000229096 00000 n +0000229298 00000 n +0000229484 00000 n +0000229670 00000 n +0000229837 00000 n +0000230005 00000 n +0000230175 00000 n +0000230345 00000 n +0000230507 00000 n +0000230669 00000 n +0000230833 00000 n +0000230997 00000 n +0000234479 00000 n +0000234651 00000 n +0000238508 00000 n +0000238710 00000 n +0000238881 00000 n +0000240695 00000 n +0000240868 00000 n +0000241044 00000 n +0000241218 00000 n +0000241389 00000 n +0000241560 00000 n +0000244078 00000 n +0000244265 00000 n +0000244437 00000 n +0000244610 00000 n +0000244783 00000 n +0000244956 00000 n +0000245129 00000 n +0000247651 00000 n +0000247868 00000 n +0000251124 00000 n +0000251267 00000 n +0000251432 00000 n +0000251610 00000 n +0000251789 00000 n +0000254650 00000 n +0000254822 00000 n +0000254999 00000 n +0000255177 00000 n +0000255371 00000 n +0000255564 00000 n +0000255745 00000 n +0000255926 00000 n +0000256105 00000 n +0000256284 00000 n +0000256469 00000 n +0000256654 00000 n +0000256880 00000 n +0000257050 00000 n +0000260751 00000 n +0000260923 00000 n +0000261096 00000 n +0000261269 00000 n +0000261442 00000 n +0000261613 00000 n +0000264836 00000 n +0000265008 00000 n +0000265300 00000 n +0000265473 00000 n +0000265643 00000 n +0000268883 00000 n +0000269025 00000 n +0000269196 00000 n +0000269366 00000 n +0000272834 00000 n +0000272991 00000 n +0000273384 00000 n +0000273557 00000 n +0000273729 00000 n +0000273899 00000 n +0000274072 00000 n +0000274242 00000 n +0000274415 00000 n +0000277683 00000 n +0000277826 00000 n +0000277997 00000 n +0000278168 00000 n +0000278338 00000 n +0000278508 00000 n +0000281636 00000 n +0000281793 00000 n +0000282157 00000 n +0000282345 00000 n +0000282515 00000 n +0000285446 00000 n +0000285618 00000 n +0000285786 00000 n +0000286021 00000 n +0000286256 00000 n +0000286492 00000 n +0000286795 00000 n +0000287096 00000 n +0000287396 00000 n +0000287629 00000 n +0000287860 00000 n +0000288029 00000 n +0000291814 00000 n +0000292016 00000 n +0000292408 00000 n +0000292581 00000 n +0000292752 00000 n +0000292923 00000 n +0000295201 00000 n +0000295388 00000 n +0000295558 00000 n +0000295741 00000 n +0000295925 00000 n +0000296112 00000 n +0000296300 00000 n +0000296466 00000 n +0000296632 00000 n +0000296803 00000 n +0000296975 00000 n +0000297150 00000 n +0000297322 00000 n +0000297494 00000 n +0000297677 00000 n +0000297861 00000 n +0000301062 00000 n +0000301219 00000 n +0000301389 00000 n +0000301563 00000 n +0000301735 00000 n +0000301908 00000 n +0000302077 00000 n +0000302249 00000 n +0000302419 00000 n +0000302583 00000 n +0000302746 00000 n +0000305399 00000 n +0000305571 00000 n +0000305744 00000 n +0000305914 00000 n +0000306084 00000 n +0000306250 00000 n +0000306416 00000 n +0000306580 00000 n +0000306744 00000 n +0000306906 00000 n +0000307070 00000 n +0000309975 00000 n +0000310132 00000 n +0000310306 00000 n +0000310480 00000 n +0000310656 00000 n +0000310832 00000 n +0000311003 00000 n +0000311171 00000 n +0000311357 00000 n +0000311544 00000 n +0000311736 00000 n +0000311926 00000 n +0000312118 00000 n +0000312284 00000 n +0000312450 00000 n +0000312618 00000 n +0000312784 00000 n +0000312951 00000 n +0000316371 00000 n +0000316513 00000 n +0000316684 00000 n +0000316855 00000 n +0000317042 00000 n +0000317225 00000 n +0000317411 00000 n +0000317585 00000 n +0000317757 00000 n +0000317928 00000 n +0000318099 00000 n +0000318277 00000 n +0000318455 00000 n +0000318624 00000 n +0000318794 00000 n +0000318968 00000 n +0000319143 00000 n +0000319323 00000 n +0000319502 00000 n +0000319677 00000 n +0000319851 00000 n +0000320024 00000 n +0000320197 00000 n +0000320361 00000 n +0000320525 00000 n +0000320695 00000 n +0000320866 00000 n +0000321039 00000 n +0000321211 00000 n +0000324320 00000 n +0000324462 00000 n +0000324631 00000 n +0000324801 00000 n +0000324999 00000 n +0000325198 00000 n +0000325372 00000 n +0000325546 00000 n +0000325726 00000 n +0000325904 00000 n +0000326083 00000 n +0000326290 00000 n +0000326497 00000 n +0000326673 00000 n +0000326849 00000 n +0000327028 00000 n +0000327207 00000 n +0000327386 00000 n +0000327566 00000 n +0000327738 00000 n +0000327907 00000 n +0000328078 00000 n +0000328249 00000 n +0000328423 00000 n +0000328598 00000 n +0000328774 00000 n +0000328949 00000 n +0000329119 00000 n +0000329289 00000 n +0000329468 00000 n +0000329647 00000 n +0000329827 00000 n +0000330004 00000 n +0000330183 00000 n +0000330353 00000 n +0000330523 00000 n +0000330700 00000 n +0000330876 00000 n +0000331056 00000 n +0000331235 00000 n +0000331409 00000 n +0000331580 00000 n +0000331756 00000 n +0000331933 00000 n +0000332111 00000 n +0000332289 00000 n +0000332450 00000 n +0000332611 00000 n +0000332785 00000 n +0000332959 00000 n +0000333132 00000 n +0000333305 00000 n +0000333480 00000 n +0000333652 00000 n +0000333827 00000 n +0000333999 00000 n +0000334172 00000 n +0000334342 00000 n +0000334512 00000 n +0000334682 00000 n +0000334852 00000 n +0000335017 00000 n +0000335182 00000 n +0000335355 00000 n +0000335525 00000 n +0000335690 00000 n +0000335857 00000 n +0000336072 00000 n +0000336294 00000 n +0000336527 00000 n +0000336758 00000 n +0000336985 00000 n +0000337215 00000 n +0000337445 00000 n +0000337674 00000 n +0000337903 00000 n +0000338135 00000 n +0000338346 00000 n +0000338553 00000 n +0000338763 00000 n +0000338970 00000 n +0000342355 00000 n +0000342512 00000 n +0000346428 00000 n +0000346628 00000 n +0000348042 00000 n +0000348199 00000 n +0000349958 00000 n +0000350160 00000 n +0000351437 00000 n +0000351594 00000 n +0000354680 00000 n +0000354837 00000 n +0000357012 00000 n +0000357169 00000 n +0000359330 00000 n +0000359487 00000 n +0000362399 00000 n +0000362586 00000 n +0000364439 00000 n +0000364611 00000 n +0000368296 00000 n +0000369533 00000 n +0000374057 00000 n +0000375159 00000 n +0000376897 00000 n +0000377054 00000 n +0000377219 00000 n +0000380057 00000 n +0000381069 00000 n +0000381320 00000 n +0000381569 00000 n +0000381830 00000 n +0000382091 00000 n +0000382292 00000 n +0000382554 00000 n +0000382814 00000 n +0000383071 00000 n +0000388211 00000 n +0000388368 00000 n +0000388576 00000 n +0000388793 00000 n +0000389008 00000 n +0000389218 00000 n +0000389426 00000 n +0000389633 00000 n +0000389838 00000 n +0000390039 00000 n +0000390238 00000 n +0000390437 00000 n +0000390643 00000 n +0000390847 00000 n +0000391060 00000 n +0000391273 00000 n +0000395850 00000 n +0000395993 00000 n +0000396202 00000 n +0000396412 00000 n +0000396621 00000 n +0000396832 00000 n +0000397041 00000 n +0000397252 00000 n +0000397464 00000 n +0000397664 00000 n +0000397952 00000 n +0000398240 00000 n +0000398450 00000 n +0000398662 00000 n +0000398872 00000 n +0000404207 00000 n +0000404350 00000 n +0000404559 00000 n +0000404767 00000 n +0000404984 00000 n +0000405194 00000 n +0000405397 00000 n +0000405600 00000 n +0000405853 00000 n +0000406104 00000 n +0000406315 00000 n +0000406524 00000 n +0000406716 00000 n +0000406926 00000 n +0000407134 00000 n +0000412698 00000 n +0000412841 00000 n +0000413056 00000 n +0000413270 00000 n +0000413494 00000 n +0000413718 00000 n +0000413995 00000 n +0000414270 00000 n +0000414486 00000 n +0000414701 00000 n +0000414908 00000 n +0000415113 00000 n +0000415390 00000 n +0000415666 00000 n +0000415942 00000 n +0000421886 00000 n +0000422030 00000 n +0000422240 00000 n +0000422447 00000 n +0000422652 00000 n +0000422853 00000 n +0000423057 00000 n +0000423269 00000 n +0000423479 00000 n +0000423680 00000 n +0000423880 00000 n +0000424092 00000 n +0000424302 00000 n +0000428500 00000 n +0000428644 00000 n +0000428860 00000 n +0000429071 00000 n +0000429283 00000 n +0000429577 00000 n +0000429872 00000 n +0000430084 00000 n +0000430292 00000 n +0000435359 00000 n +0000435503 00000 n +0000435779 00000 n +0000436055 00000 n +0000436267 00000 n +0000436467 00000 n +0000436678 00000 n +0000436888 00000 n +0000437101 00000 n +0000437313 00000 n +0000437525 00000 n +0000437737 00000 n +0000437947 00000 n +0000442680 00000 n +0000442824 00000 n +0000442885 00000 n +0000442918 00000 n +0000442982 00000 n +0000443046 00000 n +0000443110 00000 n +0000443173 00000 n +0000443235 00000 n +0000443299 00000 n +0000443363 00000 n +0000443427 00000 n +0000443491 00000 n +0000443555 00000 n +0000443619 00000 n +0000443683 00000 n +0000443747 00000 n +0000443810 00000 n +0000443874 00000 n +0000443938 00000 n +0000444002 00000 n +0000444066 00000 n +0000444130 00000 n +0000444193 00000 n +0000444257 00000 n +0000444321 00000 n +0000444385 00000 n +0000444449 00000 n +0000444513 00000 n +0000444577 00000 n +0000444641 00000 n +0000444705 00000 n +0000444769 00000 n +0000444833 00000 n +0000444897 00000 n +0000444961 00000 n +0000445025 00000 n +0000445089 00000 n +0000445153 00000 n +0000445217 00000 n +0000445279 00000 n +0000445343 00000 n +0000445407 00000 n +0000445471 00000 n +0000445535 00000 n +0000445599 00000 n +0000445663 00000 n +0000445727 00000 n +0000445791 00000 n +0000445855 00000 n +0000445919 00000 n +0000445983 00000 n +0000446047 00000 n +0000446111 00000 n +0000446175 00000 n +0000446239 00000 n +0000446303 00000 n +0000446367 00000 n +0000446431 00000 n +0000446495 00000 n +0000446559 00000 n +0000446623 00000 n +0000446687 00000 n +0000446751 00000 n +0000446815 00000 n +0000446879 00000 n +0000446943 00000 n +0000447007 00000 n +0000447071 00000 n +0000447135 00000 n +0000447199 00000 n +0000447263 00000 n +0000447327 00000 n +0000447391 00000 n +0000447455 00000 n +0000447519 00000 n +0000447583 00000 n +0000447647 00000 n +0000447710 00000 n +0000447774 00000 n +0000447838 00000 n +0000447902 00000 n +0000447966 00000 n +0000448030 00000 n +0000448094 00000 n +0000448158 00000 n +0000448222 00000 n +0000448286 00000 n +0000448350 00000 n +0000448414 00000 n +0000448478 00000 n +0000448542 00000 n +0000448604 00000 n +0000448668 00000 n +0000448732 00000 n +0000448796 00000 n +0000448860 00000 n +0000448924 00000 n +0000448987 00000 n +0000449051 00000 n +0000449115 00000 n +0000449179 00000 n +0000449243 00000 n +0000449307 00000 n +0000449371 00000 n +0000449434 00000 n +0000449497 00000 n +0000449562 00000 n +0000449626 00000 n +0000449691 00000 n +0000449756 00000 n +0000449820 00000 n +0000449884 00000 n +0000449947 00000 n +0000450012 00000 n +0000450076 00000 n +0000450141 00000 n +0000450205 00000 n +0000450269 00000 n +0000450333 00000 n +0000450397 00000 n +0000450461 00000 n +0000450525 00000 n +0000450589 00000 n +0000450653 00000 n +0000450716 00000 n +0000450780 00000 n +0000450844 00000 n +0000450908 00000 n +0000450972 00000 n +0000451036 00000 n +0000451100 00000 n +0000451163 00000 n +0000451227 00000 n +0000451291 00000 n +0000451355 00000 n +0000451419 00000 n +0000451483 00000 n +0000451547 00000 n +0000451611 00000 n +0000451674 00000 n +0000451738 00000 n +0000451802 00000 n +0000451866 00000 n +0000451930 00000 n +0000451994 00000 n +0000452058 00000 n +0000452121 00000 n +0000452185 00000 n +0000452249 00000 n +0000452313 00000 n +0000452377 00000 n +0000452441 00000 n +0000452505 00000 n +0000452569 00000 n +0000452633 00000 n +0000452697 00000 n +0000452761 00000 n +0000452825 00000 n +0000452889 00000 n +0000452953 00000 n +0000453017 00000 n +0000453081 00000 n +0000453145 00000 n +0000453208 00000 n +0000453272 00000 n +0000453336 00000 n +0000453400 00000 n +0000453464 00000 n +0000453528 00000 n +0000453592 00000 n +0000453656 00000 n +0000453718 00000 n +0000453782 00000 n +0000453846 00000 n +0000453910 00000 n +0000453974 00000 n +0000454038 00000 n +0000454102 00000 n +0000454166 00000 n +0000454230 00000 n +0000454293 00000 n +0000454357 00000 n +0000454421 00000 n +0000454485 00000 n +0000454549 00000 n +0000454613 00000 n +0000454676 00000 n +0000454740 00000 n +0000454803 00000 n +0000454867 00000 n +0000454931 00000 n +0000454995 00000 n +0000455059 00000 n +0000455123 00000 n +0000455187 00000 n +0000455251 00000 n +0000455315 00000 n +0000455378 00000 n +0000455442 00000 n +0000455506 00000 n +0000455570 00000 n +0000455634 00000 n +0000455698 00000 n +0000455762 00000 n +0000455826 00000 n +0000455890 00000 n +0000455953 00000 n +0000456017 00000 n +0000456081 00000 n +0000456145 00000 n +0000456209 00000 n +0000456273 00000 n +0000456337 00000 n +0000456401 00000 n +0000456465 00000 n +0000456529 00000 n +0000456592 00000 n +0000456656 00000 n +0000456720 00000 n +0000456784 00000 n +0000456848 00000 n +0000456912 00000 n +0000456976 00000 n +0000457040 00000 n +0000457104 00000 n +0000457167 00000 n +0000457231 00000 n +0000457295 00000 n +0000457359 00000 n +0000457423 00000 n +0000457487 00000 n +0000457549 00000 n +0000457613 00000 n +0000457677 00000 n +0000457741 00000 n +0000457803 00000 n +0000457867 00000 n +0000457931 00000 n +0000457995 00000 n +0000458059 00000 n +0000458123 00000 n +0000458187 00000 n +0000458251 00000 n +0000458315 00000 n +0000458379 00000 n +0000458443 00000 n +0000458507 00000 n +0000458571 00000 n +0000458635 00000 n +0000458699 00000 n +0000458763 00000 n +0000458827 00000 n +0000458891 00000 n +0000458955 00000 n +0000459019 00000 n +0000459083 00000 n +0000459147 00000 n +0000459210 00000 n +0000459274 00000 n +0000459338 00000 n +0000459402 00000 n +0000459466 00000 n +0000459530 00000 n +0000459594 00000 n +0000459658 00000 n +0000459722 00000 n +0000459785 00000 n +0000459849 00000 n +0000459913 00000 n +0000459977 00000 n +0000460041 00000 n +0000460105 00000 n +0000460169 00000 n +0000460233 00000 n +0000460296 00000 n +0000460360 00000 n +0000460424 00000 n +0000460488 00000 n +0000460551 00000 n +0000460615 00000 n +0000460679 00000 n +0000460743 00000 n +0000460807 00000 n +0000460871 00000 n +0000460935 00000 n +0000460999 00000 n +0000461063 00000 n +0000461127 00000 n +0000461190 00000 n +0000461254 00000 n +0000461318 00000 n +0000461382 00000 n +0000461446 00000 n +0000461510 00000 n +0000461574 00000 n +0000461638 00000 n +0000461701 00000 n +0000461765 00000 n +0000461829 00000 n +0000461893 00000 n +0000461957 00000 n +0000462021 00000 n +0000462085 00000 n +0000462149 00000 n +0000462213 00000 n +0000462277 00000 n +0000462340 00000 n +0000462404 00000 n +0000462467 00000 n +0000462531 00000 n +0000462595 00000 n +0000462659 00000 n +0000462723 00000 n +0000462787 00000 n +0000462851 00000 n +0000462914 00000 n +0000462978 00000 n +0000463042 00000 n +0000463106 00000 n +0000463170 00000 n +0000463234 00000 n +0000463298 00000 n +0000463362 00000 n +0000463426 00000 n +0000463490 00000 n +0000463552 00000 n +0000463616 00000 n +0000463680 00000 n +0000463744 00000 n +0000463808 00000 n +0000463872 00000 n +0000463936 00000 n +0000463999 00000 n +0000464063 00000 n +0000464127 00000 n +0000464191 00000 n +0000464255 00000 n +0000464319 00000 n +0000464383 00000 n +0000464447 00000 n +0000464511 00000 n +0000464574 00000 n +0000464637 00000 n +0000464701 00000 n +0000464765 00000 n +0000464829 00000 n +0000464893 00000 n +0000464957 00000 n +0000465021 00000 n +0000465085 00000 n +0000465149 00000 n +0000465212 00000 n +0000465275 00000 n +0000465339 00000 n +0000465403 00000 n +0000465467 00000 n +0000465531 00000 n +0000465595 00000 n +0000465659 00000 n +0000465723 00000 n +0000465787 00000 n +0000465850 00000 n +0000465914 00000 n +0000465978 00000 n +0000466042 00000 n +0000466106 00000 n +0000466170 00000 n +0000466234 00000 n +0000466298 00000 n +0000466362 00000 n +0000466426 00000 n +0000466488 00000 n +0000466552 00000 n +0000466616 00000 n +0000466680 00000 n +0000466744 00000 n +0000466808 00000 n +0000466872 00000 n +0000466936 00000 n +0000467000 00000 n +0000467064 00000 n +0000467127 00000 n +0000467191 00000 n +0000467255 00000 n +0000467319 00000 n +0000467383 00000 n +0000467447 00000 n +0000467511 00000 n +0000467574 00000 n +0000467638 00000 n +0000467702 00000 n +0000467766 00000 n +0000467830 00000 n +0000467894 00000 n +0000467958 00000 n +0000468022 00000 n +0000468086 00000 n +0000468149 00000 n +0000468213 00000 n +0000468277 00000 n +0000468341 00000 n +0000468405 00000 n +0000468469 00000 n +0000468533 00000 n +0000468597 00000 n +0000468660 00000 n +0000468724 00000 n +0000468788 00000 n +0000468852 00000 n +0000468916 00000 n +0000468980 00000 n +0000469044 00000 n +0000469108 00000 n +0000469172 00000 n +0000469236 00000 n +0000469300 00000 n +0000469364 00000 n +0000469428 00000 n +0000469492 00000 n +0000469556 00000 n +0000469620 00000 n +0000469683 00000 n +0000469747 00000 n +0000469811 00000 n +0000469875 00000 n +0000469939 00000 n +0000470003 00000 n +0000470067 00000 n +0000470131 00000 n +0000470195 00000 n +0000470258 00000 n +0000470322 00000 n +0000470386 00000 n +0000470450 00000 n +0000470514 00000 n +0000470578 00000 n +0000470641 00000 n +0000470705 00000 n +0000470768 00000 n +0000470832 00000 n +0000470896 00000 n +0000470960 00000 n +0000471024 00000 n +0000471088 00000 n +0000471152 00000 n +0000471214 00000 n +0000471278 00000 n +0000471342 00000 n +0000471406 00000 n +0000471470 00000 n +0000471534 00000 n +0000471598 00000 n +0000471662 00000 n +0000471726 00000 n +0000471789 00000 n +0000471853 00000 n +0000471917 00000 n +0000471981 00000 n +0000472045 00000 n +0000472109 00000 n +0000472173 00000 n +0000472237 00000 n +0000472301 00000 n +0000472364 00000 n +0000472428 00000 n +0000472492 00000 n +0000472556 00000 n +0000472620 00000 n +0000472684 00000 n +0000472748 00000 n +0000472812 00000 n +0000472876 00000 n +0000472939 00000 n +0000473003 00000 n +0000473067 00000 n +0000473131 00000 n +0000473195 00000 n +0000473259 00000 n +0000473323 00000 n +0000473387 00000 n +0000473451 00000 n +0000473515 00000 n +0000473579 00000 n +0000473643 00000 n +0000473705 00000 n +0000473769 00000 n +0000473833 00000 n +0000473897 00000 n +0000473961 00000 n +0000474025 00000 n +0000474089 00000 n +0000474153 00000 n +0000474216 00000 n +0000474280 00000 n +0000474344 00000 n +0000474408 00000 n +0000474472 00000 n +0000474535 00000 n +0000474598 00000 n +0000474662 00000 n +0000474726 00000 n +0000474790 00000 n +0000474853 00000 n +0000474917 00000 n +0000474981 00000 n +0000475045 00000 n +0000475108 00000 n +0000475172 00000 n +0000475236 00000 n +0000475300 00000 n +0000475364 00000 n +0000475428 00000 n +0000475492 00000 n +0000475555 00000 n +0000475618 00000 n +0000475682 00000 n +0000475746 00000 n +0000475810 00000 n +0000475874 00000 n +0000475938 00000 n +0000476002 00000 n +0000476066 00000 n +0000476130 00000 n +0000476193 00000 n +0000476257 00000 n +0000476321 00000 n +0000476385 00000 n +0000476449 00000 n +0000476513 00000 n +0000476577 00000 n +0000476641 00000 n +0000476705 00000 n +0000476768 00000 n +0000476832 00000 n +0000476896 00000 n +0000476960 00000 n +0000477024 00000 n +0000477088 00000 n +0000477152 00000 n +0000477216 00000 n +0000477280 00000 n +0000477342 00000 n +0000477406 00000 n +0000477470 00000 n +0000477534 00000 n +0000477598 00000 n +0000477662 00000 n +0000477726 00000 n +0000477790 00000 n +0000477853 00000 n +0000477917 00000 n +0000477981 00000 n +0000478045 00000 n +0000478109 00000 n +0000478173 00000 n +0000478236 00000 n +0000478299 00000 n +0000478363 00000 n +0000478427 00000 n +0000478491 00000 n +0000478555 00000 n +0000478619 00000 n +0000478683 00000 n +0000478747 00000 n +0000478811 00000 n +0000478875 00000 n +0000478938 00000 n +0000479002 00000 n +0000479066 00000 n +0000479128 00000 n +0000479191 00000 n +0000479255 00000 n +0000479319 00000 n +0000479383 00000 n +0000479447 00000 n +0000479511 00000 n +0000479575 00000 n +0000479639 00000 n +0000479703 00000 n +0000479766 00000 n +0000479830 00000 n +0000479894 00000 n +0000479958 00000 n +0000480022 00000 n +0000480086 00000 n +0000480150 00000 n +0000480214 00000 n +0000480278 00000 n +0000480342 00000 n +0000480406 00000 n +0000480470 00000 n +0000480534 00000 n +0000480598 00000 n +0000480662 00000 n +0000480726 00000 n +0000480790 00000 n +0000480854 00000 n +0000480918 00000 n +0000480982 00000 n +0000481046 00000 n +0000481109 00000 n +0000481172 00000 n +0000481236 00000 n +0000481300 00000 n +0000481364 00000 n +0000481428 00000 n +0000481492 00000 n +0000481556 00000 n +0000481620 00000 n +0000481684 00000 n +0000481747 00000 n +0000481811 00000 n +0000481875 00000 n +0000481939 00000 n +0000482003 00000 n +0000482067 00000 n +0000482131 00000 n +0000482195 00000 n +0000482258 00000 n +0000482322 00000 n +0000482386 00000 n +0000482450 00000 n +0000482514 00000 n +0000482578 00000 n +0000482641 00000 n +0000482705 00000 n +0000482769 00000 n +0000482833 00000 n +0000482896 00000 n +0000482960 00000 n +0000483024 00000 n +0000483088 00000 n +0000483152 00000 n +0000483216 00000 n +0000483280 00000 n +0000483344 00000 n +0000483407 00000 n +0000483471 00000 n +0000483535 00000 n +0000483599 00000 n +0000483663 00000 n +0000483727 00000 n +0000483791 00000 n +0000483855 00000 n +0000483919 00000 n +0000483983 00000 n +0000484046 00000 n +0000484110 00000 n +0000484174 00000 n +0000484238 00000 n +0000484302 00000 n +0000484366 00000 n +0000484430 00000 n +0000484494 00000 n +0000484556 00000 n +0000484620 00000 n +0000484684 00000 n +0000484748 00000 n +0000484812 00000 n +0000484876 00000 n +0000484940 00000 n +0000485004 00000 n +0000485068 00000 n +0000485132 00000 n +0000485195 00000 n +0000485259 00000 n +0000485323 00000 n +0000485387 00000 n +0000485451 00000 n +0000485515 00000 n +0000485578 00000 n +0000485641 00000 n +0000485705 00000 n +0000485769 00000 n +0000485833 00000 n +0000485897 00000 n +0000485961 00000 n +0000486024 00000 n +0000486088 00000 n +0000486152 00000 n +0000486216 00000 n +0000486280 00000 n +0000486344 00000 n +0000486408 00000 n +0000486472 00000 n +0000486536 00000 n +0000486600 00000 n +0000486664 00000 n +0000486728 00000 n +0000486792 00000 n +0000486856 00000 n +0000486920 00000 n +0000486984 00000 n +0000487048 00000 n +0000487111 00000 n +0000487175 00000 n +0000487239 00000 n +0000487303 00000 n +0000487366 00000 n +0000487430 00000 n +0000487494 00000 n +0000487558 00000 n +0000487622 00000 n +0000487686 00000 n +0000487750 00000 n +0000487813 00000 n +0000487877 00000 n +0000487941 00000 n +0000488005 00000 n +0000488069 00000 n +0000488133 00000 n +0000488196 00000 n +0000488260 00000 n +0000488324 00000 n +0000488387 00000 n +0000488451 00000 n +0000488515 00000 n +0000488579 00000 n +0000488643 00000 n +0000488706 00000 n +0000488769 00000 n +0000488832 00000 n +0000488895 00000 n +0000488959 00000 n +0000489023 00000 n +0000489087 00000 n +0000489151 00000 n +0000489215 00000 n +0000489279 00000 n +0000489343 00000 n +0000489407 00000 n +0000489471 00000 n +0000489535 00000 n +0000489597 00000 n +0000489661 00000 n +0000489725 00000 n +0000489789 00000 n +0000489853 00000 n +0000489916 00000 n +0000489980 00000 n +0000490044 00000 n +0000490108 00000 n +0000490172 00000 n +0000490236 00000 n +0000490300 00000 n +0000490364 00000 n +0000490427 00000 n +0000490491 00000 n +0000490555 00000 n +0000490619 00000 n +0000490683 00000 n +0000490747 00000 n +0000490811 00000 n +0000490875 00000 n +0000490938 00000 n +0000491002 00000 n +0000491066 00000 n +0000491128 00000 n +0000491192 00000 n +0000491256 00000 n +0000491320 00000 n +0000491384 00000 n +0000491448 00000 n +0000491512 00000 n +0000491576 00000 n +0000491640 00000 n +0000491704 00000 n +0000491768 00000 n +0000491831 00000 n +0000491895 00000 n +0000491959 00000 n +0000492023 00000 n +0000492087 00000 n +0000492151 00000 n +0000492215 00000 n +0000492279 00000 n +0000492343 00000 n +0000492407 00000 n +0000492471 00000 n +0000492534 00000 n +0000492598 00000 n +0000492662 00000 n +0000492726 00000 n +0000492790 00000 n +0000492854 00000 n +0000492918 00000 n +0000492982 00000 n +0000493046 00000 n +0000493110 00000 n +0000493174 00000 n +0000493237 00000 n +0000493301 00000 n +0000493365 00000 n +0000493429 00000 n +0000493493 00000 n +0000493557 00000 n +0000493621 00000 n +0000493685 00000 n +0000493749 00000 n +0000493813 00000 n +0000493877 00000 n +0000493940 00000 n +0000494004 00000 n +0000494068 00000 n +0000494132 00000 n +0000494196 00000 n +0000494260 00000 n +0000494324 00000 n +0000494388 00000 n +0000494452 00000 n +0000494516 00000 n +0000494580 00000 n +0000494643 00000 n +0000494707 00000 n +0000494771 00000 n +0000494835 00000 n +0000494899 00000 n +0000494963 00000 n +0000495027 00000 n +0000495091 00000 n +0000495155 00000 n +0000495219 00000 n +0000495283 00000 n +0000495347 00000 n +0000495411 00000 n +0000495475 00000 n +0000495539 00000 n +0000495603 00000 n +0000495667 00000 n +0000495731 00000 n +0000495795 00000 n +0000495859 00000 n +0000495923 00000 n +0000495987 00000 n +0000496051 00000 n +0000496115 00000 n +0000496179 00000 n +0000496243 00000 n +0000496307 00000 n +0000496371 00000 n +0000496435 00000 n +0000496499 00000 n +0000496563 00000 n +0000496625 00000 n +0000496688 00000 n +0000496751 00000 n +0000496815 00000 n +0000496879 00000 n +0000496943 00000 n +0000497007 00000 n +0000497068 00000 n +0000497130 00000 n +0000497194 00000 n +0000497258 00000 n +0000497322 00000 n +0000497385 00000 n +0000497450 00000 n +0000497513 00000 n +0000497576 00000 n +0000497639 00000 n +0000497702 00000 n +0000497766 00000 n +0000497830 00000 n +0000497894 00000 n +0000497958 00000 n +0000498022 00000 n +0000498086 00000 n +0000498150 00000 n +0000498214 00000 n +0000498277 00000 n +0000498341 00000 n +0000498405 00000 n +0000498469 00000 n +0000498533 00000 n +0000498597 00000 n +0000498660 00000 n +0000498724 00000 n +0000498788 00000 n +0000498852 00000 n +0000498916 00000 n +0000498980 00000 n +0000499044 00000 n +0000499108 00000 n +0000499172 00000 n +0000499236 00000 n +0000499300 00000 n +0000499364 00000 n +0000499428 00000 n +0000499492 00000 n +0000499556 00000 n +0000499620 00000 n +0000499684 00000 n +0000499748 00000 n +0000499812 00000 n +0000499876 00000 n +0000499940 00000 n +0000500004 00000 n +0000500067 00000 n +0000500131 00000 n +0000500195 00000 n +0000500259 00000 n +0000500322 00000 n +0000500386 00000 n +0000500450 00000 n +0000500514 00000 n +0000500578 00000 n +0000500642 00000 n +0000500706 00000 n +0000500769 00000 n +0000500833 00000 n +0000500897 00000 n +0000500960 00000 n +0000501024 00000 n +0000501087 00000 n +0000501151 00000 n +0000501215 00000 n +0000501279 00000 n +0000501343 00000 n +0000501407 00000 n +0000501471 00000 n +0000501535 00000 n +0000501599 00000 n +0000501663 00000 n +0000501727 00000 n +0000501790 00000 n +0000501854 00000 n +0000501918 00000 n +0000501982 00000 n +0000502046 00000 n +0000502110 00000 n +0000502174 00000 n +0000502238 00000 n +0000502302 00000 n +0000502496 00000 n +0000502678 00000 n +0000502853 00000 n +0000503018 00000 n +0000503184 00000 n +0000503349 00000 n +0000506875 00000 n +0000611422 00000 n +0000616638 00000 n +0000640332 00000 n +0000667887 00000 n +0000691637 00000 n +0000691700 00000 n +0000691753 00000 n +0000691830 00000 n +0000691883 00000 n +0000691984 00000 n +0000692037 00000 n +0000692120 00000 n +0000692203 00000 n +0000692292 00000 n +0000692340 00000 n +0000692435 00000 n +0000692500 00000 n +0000692553 00000 n +0000692649 00000 n +0000692778 00000 n +0000692831 00000 n +0000693048 00000 n +0000693097 00000 n +0000693180 00000 n +0000693263 00000 n +0000693399 00000 n +0000693464 00000 n +0000693636 00000 n +0000693836 00000 n +0000706985 00000 n +0000707335 00000 n +0000776864 00000 n +0000777057 00000 n +0000788950 00000 n +0000797714 00000 n +0000801814 00000 n +0000804282 00000 n +0000806394 00000 n +0000808681 00000 n +0000808999 00000 n +0000809319 00000 n +0000809485 00000 n +0000823101 00000 n +0000840746 00000 n +0000842776 00000 n +0000846479 00000 n +0000849084 00000 n +0000859445 00000 n +0000859638 00000 n +0000859805 00000 n +0000859974 00000 n +0000860142 00000 n +0000860309 00000 n +0000860477 00000 n +0000860645 00000 n +0000860814 00000 n +0000860980 00000 n +0000861147 00000 n +0000861315 00000 n +0000861483 00000 n +0000861650 00000 n +0000861818 00000 n +0000861986 00000 n +0000862155 00000 n +0000862321 00000 n +0000862488 00000 n +0000862655 00000 n +0000862823 00000 n +0000862991 00000 n +0000863160 00000 n +0000863327 00000 n +0000863495 00000 n +0000863663 00000 n +0000863831 00000 n +0000863999 00000 n +0000864168 00000 n +0000864336 00000 n +0000864503 00000 n +0000864671 00000 n +0000864840 00000 n +0000865009 00000 n +0000865177 00000 n +0000865345 00000 n +0000865514 00000 n +0000865681 00000 n +0000865848 00000 n +0000866017 00000 n +0000866186 00000 n +0000866354 00000 n +0000866521 00000 n +0000866688 00000 n +0000866856 00000 n +0000867025 00000 n +0000867191 00000 n +0000867358 00000 n +0000867527 00000 n +0000867695 00000 n +0000867864 00000 n +0000868033 00000 n +0000868201 00000 n +0000868369 00000 n +0000868537 00000 n +0000868705 00000 n +0000868873 00000 n +0000869041 00000 n +0000869210 00000 n +0000869378 00000 n +0000869546 00000 n +0000869714 00000 n +0000869883 00000 n +0000870050 00000 n +0000870217 00000 n +0000870384 00000 n +0000870549 00000 n +0000870718 00000 n +0000870885 00000 n +0000871050 00000 n +0000871218 00000 n +0000871384 00000 n +0000871552 00000 n +0000871719 00000 n +0000871887 00000 n +0000872054 00000 n +0000872223 00000 n +0000872390 00000 n +0000872586 00000 n +0000873072 00000 n +0000873510 00000 n +0000873747 00000 n +0000874174 00000 n +0000874204 00000 n +0000874728 00000 n +0000875474 00000 n +0000876064 00000 n +0000876435 00000 n +0000877523 00000 n +0000878311 00000 n +0000878540 00000 n +0000879459 00000 n +0000879485 00000 n +0000879819 00000 n +0000880452 00000 n +0000881324 00000 n +0000881483 00000 n +0000882014 00000 n +0000882270 00000 n +0000882526 00000 n +0000882685 00000 n +0000883170 00000 n +0000883292 00000 n +0000883328 00000 n +0000883364 00000 n +0000883525 00000 n +0000883583 00000 n +0000883760 00000 n +0000883818 00000 n +0000884003 00000 n +0000884051 00000 n +0000884147 00000 n +0000884280 00000 n +0000884333 00000 n +0000884478 00000 n +0000884531 00000 n +0000884604 00000 n +0000884657 00000 n +0000884766 00000 n +0000884815 00000 n +0000884884 00000 n +0000885021 00000 n +0000885142 00000 n +0000885372 00000 n +0000886020 00000 n +0000886046 00000 n +0000886415 00000 n +0000887189 00000 n +0000887520 00000 n +0000887693 00000 n +0000887734 00000 n +0000887859 00000 n +0000888009 00000 n +0000888159 00000 n +0000888315 00000 n +0000888471 00000 n +0000888632 00000 n +0000888782 00000 n +0000888978 00000 n +0000889351 00000 n +0000889496 00000 n +0003221543 00000 n +0003221984 00000 n +0003222060 00000 n +0003222225 00000 n +0003222860 00000 n +0003223254 00000 n +0003223413 00000 n +0003223892 00000 n +0003224158 00000 n +0003224359 00000 n +0003224518 00000 n +0003225041 00000 n +0003225297 00000 n +0003225553 00000 n +0003225809 00000 n +0003226065 00000 n +0003226321 00000 n +0003226577 00000 n +0003226736 00000 n +0003227233 00000 n +0003227499 00000 n +0003227669 00000 n +0003227836 00000 n +0003228037 00000 n +0003228208 00000 n +0003228367 00000 n +0003228827 00000 n +0003229083 00000 n +0003229242 00000 n +0003229714 00000 n +0003229970 00000 n +0003230129 00000 n +0003230720 00000 n +0003231074 00000 n +0003231462 00000 n +0003231850 00000 n +0003232289 00000 n +0003232376 00000 n +0003478407 00000 n +0003478494 00000 n +0003641463 00000 n +0003641734 00000 n +0003642012 00000 n +0003642154 00000 n +0003948785 00000 n +0003948867 00000 n +0003948909 00000 n +0003948990 00000 n +0003949155 00000 n +0003949315 00000 n +0003949474 00000 n +0003950540 00000 n +0003950699 00000 n +0003951227 00000 n +0003951659 00000 n +0003952141 00000 n +0003952300 00000 n +0003952835 00000 n +0003953259 00000 n +0003953740 00000 n +0003953899 00000 n +0003954443 00000 n +0003954884 00000 n +0003955327 00000 n +0003955486 00000 n +0003956041 00000 n +0003956251 00000 n +0003956615 00000 n +0003956985 00000 n +0003957240 00000 n +0003958546 00000 n +0003958604 00000 n +0003958951 00000 n +0003959231 00000 n +0003959670 00000 n +0003960125 00000 n +0003960406 00000 n +0003961222 00000 n +0003961489 00000 n +0003961769 00000 n +0003962666 00000 n +0003962913 00000 n +0003963194 00000 n +0003963771 00000 n +0003964102 00000 n +0003964381 00000 n +0003965177 00000 n +0003965444 00000 n +0003965725 00000 n +0003966124 00000 n +0003966379 00000 n +0003966660 00000 n +0003966910 00000 n +0003967243 00000 n +0003967523 00000 n +0003968253 00000 n +0003968616 00000 n +0003968896 00000 n +0003969534 00000 n +0003969839 00000 n +0003970119 00000 n +0003971005 00000 n +0003971340 00000 n +0003971621 00000 n +0003972331 00000 n +0003972692 00000 n +0003972973 00000 n +0003973835 00000 n +0003974114 00000 n +0003974394 00000 n +0003975069 00000 n +0003975346 00000 n +0003975627 00000 n +0003976008 00000 n +0003976255 00000 n +0003976534 00000 n +0003976632 00000 n +0003977173 00000 n +0003977452 00000 n +0003978422 00000 n +0003978697 00000 n +0003978978 00000 n +0003979662 00000 n +0003979931 00000 n +0003980211 00000 n +0003980829 00000 n +0003981084 00000 n +0003981364 00000 n +0003982034 00000 n +0003982361 00000 n +0003982641 00000 n +0003983159 00000 n +0003983520 00000 n +0003983801 00000 n +0003984500 00000 n +0003984729 00000 n +0003985009 00000 n +0003985397 00000 n +0003985684 00000 n +0003985964 00000 n +0003986449 00000 n +0003986730 00000 n +0003987010 00000 n +0003987597 00000 n +0003987844 00000 n +0003988124 00000 n +0003988733 00000 n +0003988968 00000 n +0003989249 00000 n +0003989547 00000 n +0003989826 00000 n +0003990106 00000 n +0003990877 00000 n +0003991196 00000 n +0003991476 00000 n +0003992282 00000 n +0003992675 00000 n +0003992955 00000 n +0003993634 00000 n +0003993873 00000 n +0003994153 00000 n +0003994266 00000 n +0003994527 00000 n +0003994807 00000 n +0003994863 00000 n +0003995118 00000 n +0003995399 00000 n +0003996140 00000 n +0003996467 00000 n +0003996748 00000 n +0003997384 00000 n +0003997627 00000 n +0003997908 00000 n +0003998200 00000 n +0003998525 00000 n +0003998805 00000 n +0003999479 00000 n +0003999796 00000 n +0004000075 00000 n +0004000694 00000 n +0004000937 00000 n +0004001217 00000 n +0004001496 00000 n +0004001757 00000 n +0004002038 00000 n +0004002277 00000 n +0004002530 00000 n +0004002810 00000 n +0004003413 00000 n +0004003724 00000 n +0004004004 00000 n +0004004869 00000 n +0004005144 00000 n +0004005425 00000 n +0004006139 00000 n +0004006420 00000 n +0004006701 00000 n +0004007366 00000 n +0004007593 00000 n +0004007874 00000 n +0004007920 00000 n +0004008151 00000 n +0004008431 00000 n +0004008795 00000 n +0004009016 00000 n +0004009297 00000 n +0004009324 00000 n +0004009551 00000 n +0004009831 00000 n +0004009940 00000 n +0004010211 00000 n +0004010492 00000 n +0004011067 00000 n +0004011328 00000 n +0004011609 00000 n +0004012053 00000 n +0004012368 00000 n +0004012647 00000 n +0004012964 00000 n +0004013201 00000 n +0004013481 00000 n +0004013787 00000 n +0004014064 00000 n +0004014344 00000 n +0004015010 00000 n +0004015291 00000 n +0004015571 00000 n +0004016322 00000 n +0004016623 00000 n +0004016903 00000 n +0004017537 00000 n +0004017816 00000 n +0004018097 00000 n +0004018604 00000 n +0004018857 00000 n +0004019137 00000 n +0004019565 00000 n +0004019784 00000 n +0004020064 00000 n +0004020091 00000 n +0004020354 00000 n +0004020634 00000 n +0004021183 00000 n +0004021438 00000 n +0004021718 00000 n +0004022068 00000 n +0004022299 00000 n +0004022578 00000 n +0004022983 00000 n +0004023212 00000 n +0004023492 00000 n +0004023936 00000 n +0004024197 00000 n +0004024478 00000 n +0004025325 00000 n +0004025580 00000 n +0004025860 00000 n +0004026594 00000 n +0004026821 00000 n +0004027101 00000 n +0004027311 00000 n +0004027530 00000 n +0004027810 00000 n +0004027837 00000 n +0004028056 00000 n +0004028336 00000 n +0004028363 00000 n +0004028590 00000 n +0004028869 00000 n +0004028944 00000 n +0004029167 00000 n +0004029447 00000 n +0004029474 00000 n +0004029735 00000 n +0004030015 00000 n +0004030568 00000 n +0004030797 00000 n +0004031078 00000 n +0004031257 00000 n +0004031484 00000 n +0004031765 00000 n +0004032074 00000 n +0004032297 00000 n +0004032577 00000 n +0004032604 00000 n +0004032855 00000 n +0004033136 00000 n +0004033667 00000 n +0004033886 00000 n +0004034166 00000 n +0004034193 00000 n +0004034416 00000 n +0004034695 00000 n +0004034722 00000 n +0004034943 00000 n +0004035223 00000 n +0004035250 00000 n +0004035506 00000 n +0004036280 00000 n +0004036594 00000 n +0004068055 00000 n +0004071347 00000 n +0004082676 00000 n +0004093670 00000 n +0004103351 00000 n +0004105943 00000 n +0004106492 00000 n +0004106701 00000 n +0004107756 00000 n +0004108184 00000 n +0004108393 00000 n +0004109448 00000 n +0004110571 00000 n +0004111131 00000 n +0004111179 00000 n +0004111275 00000 n +0004111460 00000 n +0004111513 00000 n +0004111698 00000 n +0004111747 00000 n +0004111831 00000 n +0004111915 00000 n +0004112052 00000 n +0004112129 00000 n +0004114108 00000 n +0004132079 00000 n +0004134734 00000 n +0004134765 00000 n +0004135105 00000 n +0004135136 00000 n +0004135447 00000 n +0004135478 00000 n +0004135879 00000 n +0004135910 00000 n +0004136214 00000 n +0004136245 00000 n +0004136565 00000 n +0004136596 00000 n +0004136920 00000 n +0004137178 00000 n +0004137436 00000 n +0004137924 00000 n +0004138434 00000 n +0004170335 00000 n +0004170759 00000 n +0004170968 00000 n +0004172023 00000 n +0004172571 00000 n +0004172780 00000 n +0004173835 00000 n +0004174262 00000 n +0004174471 00000 n +0004175526 00000 n +0004175906 00000 n +0004176115 00000 n +0004177170 00000 n +0004177560 00000 n +0004177769 00000 n +0004178824 00000 n +0004179495 00000 n +0004179709 00000 n +0004180771 00000 n +0004180863 00000 n +0004181072 00000 n +0004182127 00000 n +0004182271 00000 n +0004182488 00000 n +0004183543 00000 n +0004183734 00000 n +0004183943 00000 n +0004185000 00000 n +0004187496 00000 n +0004188015 00000 n +0004188387 00000 n +0004188980 00000 n +0004189361 00000 n +0004190617 00000 n +0004190816 00000 n +0004192010 00000 n +0004192541 00000 n +0004192755 00000 n +0004193818 00000 n +0004194081 00000 n +0004194290 00000 n +0004195345 00000 n +0004195888 00000 n +0004196102 00000 n +0004197165 00000 n +0004197411 00000 n +0004197620 00000 n +0004198675 00000 n +0004199279 00000 n +0004199493 00000 n +0004200556 00000 n +0004200852 00000 n +0004201061 00000 n +0004202116 00000 n +0004202708 00000 n +0004202922 00000 n +0004203985 00000 n +0004222506 00000 n +0004230197 00000 n +0004239752 00000 n +0004253199 00000 n +0004258366 00000 n +0004262046 00000 n +0004270905 00000 n +0004276015 00000 n +0004280698 00000 n +0004289460 00000 n +0004299664 00000 n +0004307097 00000 n +0004315467 00000 n +0004325269 00000 n +0004331545 00000 n +0004338337 00000 n +0004340461 00000 n +0004355656 00000 n +0004363254 00000 n +0004368883 00000 n +0004373205 00000 n +0004382002 00000 n +0004391240 00000 n +0004394441 00000 n +0004400904 00000 n +0004407795 00000 n +0004411750 00000 n +0004415338 00000 n +0004421641 00000 n +0004429210 00000 n +0004439452 00000 n +0004442962 00000 n +0004448524 00000 n +0004453070 00000 n +0004460780 00000 n +0004464856 00000 n +0004472722 00000 n +0004479590 00000 n +0004482903 00000 n +0004488158 00000 n +0004492190 00000 n +0004501712 00000 n +0004508354 00000 n +0004514862 00000 n +0004517267 00000 n +0004520419 00000 n +0004522810 00000 n +0004525723 00000 n +0004530989 00000 n +0004535972 00000 n +0004544935 00000 n +0004548935 00000 n +0004555507 00000 n +0004561375 00000 n +0004568368 00000 n +0004574470 00000 n +0004579597 00000 n +0004581784 00000 n +0004587694 00000 n +0004592668 00000 n +0004595541 00000 n +0004598274 00000 n +0004603839 00000 n +0004608693 00000 n +0004611751 00000 n +0004614372 00000 n +0004617154 00000 n +0004620388 00000 n +0004622631 00000 n +0004626699 00000 n +0004629869 00000 n +0004633122 00000 n +0004635696 00000 n +0004640662 00000 n +0004643041 00000 n +0004645414 00000 n +0004648042 00000 n +0004654474 00000 n +0004654639 00000 n +0004654878 00000 n +0004655033 00000 n +0004655158 00000 n +0004655322 00000 n +0004655629 00000 n +0004656045 00000 n +0004656197 00000 n +0004656579 00000 n +0004657297 00000 n +0004657604 00000 n +0004657910 00000 n +0004658234 00000 n +0004658704 00000 n +0004659028 00000 n +0004659196 00000 n +0004659612 00000 n +0004659851 00000 n +0004659979 00000 n +0004660125 00000 n +0004660282 00000 n +0004660615 00000 n +0004660853 00000 n +0004661250 00000 n +0004661543 00000 n +0004661700 00000 n +0004662014 00000 n +0004662139 00000 n +0004662374 00000 n +0004662783 00000 n +0004662927 00000 n +0004663322 00000 n +0004663414 00000 n +0004663622 00000 n +0004664037 00000 n +0004664363 00000 n +0004664612 00000 n +0004664828 00000 n +0004664978 00000 n +0004665268 00000 n +0004665433 00000 n +0004665672 00000 n +0004665979 00000 n +0004666395 00000 n +0004666547 00000 n +0004666929 00000 n +0004667235 00000 n +0004667559 00000 n +0004668029 00000 n +0004668353 00000 n +0004668521 00000 n +0004668937 00000 n +0004669176 00000 n +0004669304 00000 n +0004669450 00000 n +0004669607 00000 n +0004669728 00000 n +0004669966 00000 n +0004670259 00000 n +0004670416 00000 n +0004670730 00000 n +0004670965 00000 n +0004671374 00000 n +0004671518 00000 n +0004671913 00000 n +0004672005 00000 n +0004672213 00000 n +0004672539 00000 n +0004672788 00000 n +0004672937 00000 n +0004673227 00000 n +0004673439 00000 n +0004673487 00000 n +0004673624 00000 n +0004673693 00000 n +0004673746 00000 n +0004673845 00000 n +0004674030 00000 n +0004674083 00000 n +0004674182 00000 n +0004674447 00000 n +0004674496 00000 n +0004674580 00000 n +0004674705 00000 n +0004674842 00000 n +0004674967 00000 n +0004675170 00000 n +0004675365 00000 n +0004675660 00000 n +0004675836 00000 n +0004676046 00000 n +0004676241 00000 n +0004680463 00000 n +0004686613 00000 n +0004686690 00000 n +0004687035 00000 n +0004687280 00000 n +0004687587 00000 n +0004688003 00000 n +0004688143 00000 n +0004688525 00000 n +0004689243 00000 n +0004689550 00000 n +0004689856 00000 n +0004690180 00000 n +0004690650 00000 n +0004690861 00000 n +0004691185 00000 n +0004691353 00000 n +0004691686 00000 n +0004691924 00000 n +0004692321 00000 n +0004692614 00000 n +0004692771 00000 n +0004693085 00000 n +0004693210 00000 n +0004693445 00000 n +0004693854 00000 n +0004693998 00000 n +0004694393 00000 n +0004694485 00000 n +0004694693 00000 n +0004695108 00000 n +0004695434 00000 n +0004695597 00000 n +0004695887 00000 n +0004696052 00000 n +0004696391 00000 n +0004696701 00000 n +0004696856 00000 n +0004696981 00000 n +0004697116 00000 n +0004697280 00000 n +0004697525 00000 n +0004697832 00000 n +0004698248 00000 n +0004698630 00000 n +0004699348 00000 n +0004699655 00000 n +0004699961 00000 n +0004700285 00000 n +0004700755 00000 n +0004701079 00000 n +0004701247 00000 n +0004701486 00000 n +0004701632 00000 n +0004701870 00000 n +0004702267 00000 n +0004702560 00000 n +0004702717 00000 n +0004703031 00000 n +0004703156 00000 n +0004703391 00000 n +0004703800 00000 n +0004703944 00000 n +0004704339 00000 n +0004704467 00000 n +0004704559 00000 n +0004704767 00000 n +0004705182 00000 n +0004705508 00000 n +0004705757 00000 n +0004705906 00000 n +0004706069 00000 n +0004706285 00000 n +0004706575 00000 n +0004706740 00000 n +0004706979 00000 n +0004707114 00000 n +0004707530 00000 n +0004707912 00000 n +0004708219 00000 n +0004708366 00000 n +0004708690 00000 n +0004709160 00000 n +0004709371 00000 n +0004709695 00000 n +0004709863 00000 n +0004710009 00000 n +0004710130 00000 n +0004710527 00000 n +0004710684 00000 n +0004710998 00000 n +0004711123 00000 n +0004711358 00000 n +0004711767 00000 n +0004711911 00000 n +0004712306 00000 n +0004712398 00000 n +0004712606 00000 n +0004713021 00000 n +0004713347 00000 n +0004713596 00000 n +0004713745 00000 n +0004713961 00000 n +0004714251 00000 n +0004714401 00000 n +0004714708 00000 n +0004715124 00000 n +0004715264 00000 n +0004715430 00000 n +0004715737 00000 n +0004716043 00000 n +0004716367 00000 n +0004716837 00000 n +0004717048 00000 n +0004717216 00000 n +0004717455 00000 n +0004717601 00000 n +0004717722 00000 n +0004717960 00000 n +0004718253 00000 n +0004718410 00000 n +0004718724 00000 n +0004719042 00000 n +0004719277 00000 n +0004719686 00000 n +0004720081 00000 n +0004720173 00000 n +0004720381 00000 n +0004720707 00000 n +0004720956 00000 n +0004721172 00000 n +0004721462 00000 n +0004721612 00000 n +0004722028 00000 n +0004722168 00000 n +0004722334 00000 n +0004722716 00000 n +0004723023 00000 n +0004723329 00000 n +0004723653 00000 n +0004724123 00000 n +0004724334 00000 n +0004724502 00000 n +0004724741 00000 n +0004724887 00000 n +0004725125 00000 n +0004725418 00000 n +0004725575 00000 n +0004725889 00000 n +0004726207 00000 n +0004726335 00000 n +0004726570 00000 n +0004726979 00000 n +0004727374 00000 n +0004727466 00000 n +0004727674 00000 n +0004728000 00000 n +0004728249 00000 n +0004728465 00000 n +0004728755 00000 n +0004728943 00000 n +0004729265 00000 n +0004729510 00000 n +0004729697 00000 n +0004730027 00000 n +0004730214 00000 n +0004730363 00000 n +0004730556 00000 n +0004730815 00000 n +0004731179 00000 n +0004731502 00000 n +0004731929 00000 n +0004732093 00000 n +0004732481 00000 n +0004732797 00000 n +0004733135 00000 n +0004733461 00000 n +0004733930 00000 n +0004734194 00000 n +0004734529 00000 n +0004734711 00000 n +0004734841 00000 n +0004735082 00000 n +0004735281 00000 n +0004735428 00000 n +0004735786 00000 n +0004736051 00000 n +0004736452 00000 n +0004736740 00000 n +0004736896 00000 n +0004737246 00000 n +0004737474 00000 n +0004737700 00000 n +0004738183 00000 n +0004738390 00000 n +0004738645 00000 n +0004739070 00000 n +0004739223 00000 n +0004739627 00000 n +0004739756 00000 n +0004739848 00000 n +0004740099 00000 n +0004740525 00000 n +0004740829 00000 n +0004741082 00000 n +0004741286 00000 n +0004741569 00000 n +0004741862 00000 n +0004742580 00000 n +0004742737 00000 n +0004742962 00000 n +0004743188 00000 n +0004743441 00000 n +0004743870 00000 n +0004744235 00000 n +0004744640 00000 n +0004744791 00000 n +0004744919 00000 n +0004745210 00000 n +0004745451 00000 n +0004745854 00000 n +0004746110 00000 n +0004746571 00000 n +0004746902 00000 n +0004747084 00000 n +0004747498 00000 n +0004747656 00000 n +0004747858 00000 n +0004748011 00000 n +0004748420 00000 n +0004748842 00000 n +0004749142 00000 n +0004749430 00000 n +0004749684 00000 n +0004749937 00000 n +0004750028 00000 n +0004750158 00000 n +0004750285 00000 n +0004750570 00000 n +0004750737 00000 n +0004751066 00000 n +0004751460 00000 n +0004751623 00000 n +0004751955 00000 n +0004752344 00000 n +0004752491 00000 n +0004752949 00000 n +0004753341 00000 n +0004753492 00000 n +0004753661 00000 n +0004754003 00000 n +0004754313 00000 n +0004754549 00000 n +0004754701 00000 n +0004755030 00000 n +0004755186 00000 n +0004755316 00000 n +0004755549 00000 n +0004755712 00000 n +0004755847 00000 n +0004756019 00000 n +0004756178 00000 n +0004756420 00000 n +0004756677 00000 n +0004757087 00000 n +0004757233 00000 n +0004757456 00000 n +0004757605 00000 n +0004758052 00000 n +0004758360 00000 n +0004758661 00000 n +0004758974 00000 n +0004759288 00000 n +0004759966 00000 n +0004760207 00000 n +0004760358 00000 n +0004760606 00000 n +0004760768 00000 n +0004760898 00000 n +0004761222 00000 n +0004761461 00000 n +0004761743 00000 n +0004762052 00000 n +0004762245 00000 n +0004762638 00000 n +0004762887 00000 n +0004763125 00000 n +0004763272 00000 n +0004763440 00000 n +0004763687 00000 n +0004763840 00000 n +0004764005 00000 n +0004764312 00000 n +0004764469 00000 n +0004764622 00000 n +0004764786 00000 n +0004765075 00000 n +0004765315 00000 n +0004765733 00000 n +0004765870 00000 n +0004766261 00000 n +0004766581 00000 n +0004766893 00000 n +0004767219 00000 n +0004767694 00000 n +0004767905 00000 n +0004768234 00000 n +0004768403 00000 n +0004768821 00000 n +0004769087 00000 n +0004769235 00000 n +0004769359 00000 n +0004769715 00000 n +0004769980 00000 n +0004770386 00000 n +0004770674 00000 n +0004770832 00000 n +0004771148 00000 n +0004771274 00000 n +0004771507 00000 n +0004771928 00000 n +0004772073 00000 n +0004772478 00000 n +0004772570 00000 n +0004772777 00000 n +0004773203 00000 n +0004773489 00000 n +0004773768 00000 n +0004773982 00000 n +0004774277 00000 n +0004774516 00000 n +0004774823 00000 n +0004775239 00000 n +0004775385 00000 n +0004775709 00000 n +0004776179 00000 n +0004776503 00000 n +0004776631 00000 n +0004776788 00000 n +0004777185 00000 n +0004777342 00000 n +0004777656 00000 n +0004777781 00000 n +0004777925 00000 n +0004778340 00000 n +0004778666 00000 n +0004778956 00000 n +0004779121 00000 n +0004779469 00000 n +0004779776 00000 n +0004779933 00000 n +0004780086 00000 n +0004780222 00000 n +0004780386 00000 n +0004780675 00000 n +0004780915 00000 n +0004781333 00000 n +0004781724 00000 n +0004782036 00000 n +0004782362 00000 n +0004782837 00000 n +0004783048 00000 n +0004783377 00000 n +0004783546 00000 n +0004783964 00000 n +0004784230 00000 n +0004784378 00000 n +0004784502 00000 n +0004784858 00000 n +0004785123 00000 n +0004785529 00000 n +0004785817 00000 n +0004785975 00000 n +0004786291 00000 n +0004786417 00000 n +0004786650 00000 n +0004787071 00000 n +0004787216 00000 n +0004787621 00000 n +0004787713 00000 n +0004787920 00000 n +0004788346 00000 n +0004788632 00000 n +0004788911 00000 n +0004789078 00000 n +0004789292 00000 n +0004789587 00000 n +0004789826 00000 n +0004790133 00000 n +0004790549 00000 n +0004790695 00000 n +0004791019 00000 n +0004791489 00000 n +0004791813 00000 n +0004791941 00000 n +0004792098 00000 n +0004792495 00000 n +0004792652 00000 n +0004792966 00000 n +0004793110 00000 n +0004793505 00000 n +0004793920 00000 n +0004794210 00000 n +0004794375 00000 n +0004794723 00000 n +0004795030 00000 n +0004795187 00000 n +0004795335 00000 n +0004795665 00000 n +0004795789 00000 n +0004795953 00000 n +0004796103 00000 n +0004796343 00000 n +0004796480 00000 n +0004796871 00000 n +0004797590 00000 n +0004797910 00000 n +0004798222 00000 n +0004798535 00000 n +0004798861 00000 n +0004799336 00000 n +0004799547 00000 n +0004799876 00000 n +0004800045 00000 n +0004800463 00000 n +0004800729 00000 n +0004800877 00000 n +0004801033 00000 n +0004801157 00000 n +0004801513 00000 n +0004801778 00000 n +0004802184 00000 n +0004802472 00000 n +0004802630 00000 n +0004802756 00000 n +0004803074 00000 n +0004803307 00000 n +0004803728 00000 n +0004803873 00000 n +0004804278 00000 n +0004804370 00000 n +0004804577 00000 n +0004805003 00000 n +0004805289 00000 n +0004805568 00000 n +0004805735 00000 n +0004805949 00000 n +0004806244 00000 n +0004806483 00000 n +0004806805 00000 n +0004807050 00000 n +0004807357 00000 n +0004807773 00000 n +0004807913 00000 n +0004808237 00000 n +0004808707 00000 n +0004809031 00000 n +0004809199 00000 n +0004809327 00000 n +0004809484 00000 n +0004809777 00000 n +0004809934 00000 n +0004810248 00000 n +0004810643 00000 n +0004810735 00000 n +0004811150 00000 n +0004811476 00000 n +0004811766 00000 n +0004811931 00000 n +0004812238 00000 n +0004812526 00000 n +0004812683 00000 n +0004812847 00000 n +0004813087 00000 n +0004813505 00000 n +0004813642 00000 n +0004814033 00000 n +0004814752 00000 n +0004815072 00000 n +0004815384 00000 n +0004815527 00000 n +0004815840 00000 n +0004816166 00000 n +0004816641 00000 n +0004816852 00000 n +0004817021 00000 n +0004817439 00000 n +0004817705 00000 n +0004817835 00000 n +0004817983 00000 n +0004818139 00000 n +0004818263 00000 n +0004818619 00000 n +0004818884 00000 n +0004819172 00000 n +0004819330 00000 n +0004819646 00000 n +0004819874 00000 n +0004820100 00000 n +0004820226 00000 n +0004820459 00000 n +0004820880 00000 n +0004821285 00000 n +0004821377 00000 n +0004821584 00000 n +0004821870 00000 n +0004822149 00000 n +0004822297 00000 n +0004822464 00000 n +0004822678 00000 n +0004822973 00000 n +0004837720 00000 n +0004837769 00000 n +0004837853 00000 n +0004837937 00000 n +0004838074 00000 n +0004838139 00000 n +0004838192 00000 n +0004838291 00000 n +0004838480 00000 n +0004838533 00000 n +0004838658 00000 n +0004838711 00000 n +0004838810 00000 n +0004838899 00000 n +0004838952 00000 n +0004839036 00000 n +0004839120 00000 n +0004839249 00000 n +0004839298 00000 n +0004839382 00000 n +0004839466 00000 n +0004839627 00000 n +0004839704 00000 n +0004839981 00000 n +0004840058 00000 n +0004840335 00000 n +0004840412 00000 n +0004840692 00000 n +0004840769 00000 n +0004841049 00000 n +0004841126 00000 n +0004841411 00000 n +0004841488 00000 n +0004841765 00000 n +0004874322 00000 n +0004893002 00000 n +0004923922 00000 n +0004923975 00000 n +0004924074 00000 n +0004924143 00000 n +0004924196 00000 n +0004924333 00000 n +0004924382 00000 n +0004924466 00000 n +0004924550 00000 n +0004924639 00000 n +0004924692 00000 n +0004924913 00000 n +0004924966 00000 n +0004925039 00000 n +0004925097 00000 n +0004925196 00000 n +0004925361 00000 n +0004925419 00000 n +0004925518 00000 n +0004925667 00000 n +0004925720 00000 n +0004926021 00000 n +0004926074 00000 n +0004926407 00000 n +0004926492 00000 n +0004927697 00000 n +0004927782 00000 n +0004928783 00000 n +0004928871 00000 n +0004947194 00000 n +0004947279 00000 n +0004953947 00000 n +0004954032 00000 n +0004961959 00000 n +0004962044 00000 n +0004963036 00000 n +0004963089 00000 n +0004963254 00000 n +0004963307 00000 n +0004963406 00000 n +0004963499 00000 n +0004963552 00000 n +0004963651 00000 n +0004963856 00000 n +0004963914 00000 n +0004964013 00000 n +0004964210 00000 n +0004964268 00000 n +0004964417 00000 n +0004964470 00000 n +0004964610 00000 n +0004964711 00000 n +0004964764 00000 n +0004964904 00000 n +0004964985 00000 n +0004965043 00000 n +0004965268 00000 n +0004965321 00000 n +0004965405 00000 n +0004965489 00000 n +0004965558 00000 n +0004965611 00000 n +0004965695 00000 n +0004965779 00000 n +0004965868 00000 n +0004965926 00000 n +0004966025 00000 n +0004966078 00000 n +0004966136 00000 n +0004966241 00000 n +0004966299 00000 n +0004966398 00000 n +0004966607 00000 n +0004966665 00000 n +0004966764 00000 n +0004966841 00000 n +0004966899 00000 n +0004967012 00000 n +0004967070 00000 n +0004967187 00000 n +0004967245 00000 n +trailer << /Info 2 0 R /Root 1 0 R /Size 3372 /ID [<3d4359adf29a874e92d8ea9d9c122ae8>] >> +startxref +4967398 +%%EOF diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-R1_Full_86pages.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-R1_Full_86pages.pdf new file mode 100644 index 0000000..b332c20 Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-R1_Full_86pages.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-V2_2405.04434.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-V2_2405.04434.pdf new file mode 100644 index 0000000..a2af62c Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-V2_2405.04434.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-V3.2_2512.02556.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-V3.2_2512.02556.pdf new file mode 100644 index 0000000..7b826f2 --- /dev/null +++ b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-V3.2_2512.02556.pdf @@ -0,0 +1,7550 @@ +%PDF-1.7 +% +1 0 obj +<< /Metadata 3 0 R /Names 4 0 R /OpenAction 5 0 R /Outlines 6 0 R /PageMode /UseOutlines /Pages 7 0 R /Type /Catalog >> +endobj +2 0 obj +<< /Author (DeepSeek-AI; Aixin Liu; Aoxue Mei; Bangcai Lin; Bing Xue; Bingxuan Wang; Bingzheng Xu; Bochao Wu; Bowei Zhang; Chaofan Lin; Chen Dong; Chengda Lu; Chenggang Zhao; Chengqi Deng; Chenhao Xu; Chong Ruan; Damai Dai; Daya Guo; Dejian Yang; Deli Chen; Erhang Li; Fangqi Zhou; Fangyun Lin; Fucong Dai; Guangbo Hao; Guanting Chen; Guowei Li; H. Zhang; Hanwei Xu; Hao Li; Haofen Liang; Haoran Wei; Haowei Zhang; Haowen Luo; Haozhe Ji; Honghui Ding; Hongxuan Tang; Huanqi Cao; Huazuo Gao; Hui Qu; Hui Zeng; Jialiang Huang; Jiashi Li; Jiaxin Xu; Jiewen Hu; Jingchang Chen; Jingting Xiang; Jingyang Yuan; Jingyuan Cheng; Jinhua Zhu; Jun Ran; Junguang Jiang; Junjie Qiu; Junlong Li; Junxiao Song; Kai Dong; Kaige Gao; Kang Guan; Kexin Huang; Kexing Zhou; Kezhao Huang; Kuai Yu; Lean Wang; Lecong Zhang; Lei Wang; Liang Zhao; Liangsheng Yin; Lihua Guo; Lingxiao Luo; Linwang Ma; Litong Wang; Liyue Zhang; M. S. Di; M. Y Xu; Mingchuan Zhang; Minghua Zhang; Minghui Tang; Mingxu Zhou; Panpan Huang; Peixin Cong; Peiyi Wang; Qiancheng Wang; Qihao Zhu; Qingyang Li; Qinyu Chen; Qiushi Du; Ruiling Xu; Ruiqi Ge; Ruisong Zhang; Ruizhe Pan; Runji Wang; Runqiu Yin; Runxin Xu; Ruomeng Shen; Ruoyu Zhang; S. H. Liu; Shanghao Lu; Shangyan Zhou; Shanhuang Chen; Shaofei Cai; Shaoyuan Chen; Shengding Hu; Shengyu Liu; Shiqiang Hu; Shirong Ma; Shiyu Wang; Shuiping Yu; Shunfeng Zhou; Shuting Pan; Songyang Zhou; Tao Ni; Tao Yun; Tian Pei; Tian Ye; Tianyuan Yue; Wangding Zeng; Wen Liu; Wenfeng Liang; Wenjie Pang; Wenjing Luo; Wenjun Gao; Wentao Zhang; Xi Gao; Xiangwen Wang; Xiao Bi; Xiaodong Liu; Xiaohan Wang; Xiaokang Chen; Xiaokang Zhang; Xiaotao Nie; Xin Cheng; Xin Liu; Xin Xie; Xingchao Liu; Xingkai Yu; Xingyou Li; Xinyu Yang; Xinyuan Li; Xu Chen; Xuecheng Su; Xuehai Pan; Xuheng Lin; Xuwei Fu; Y. Q. Wang; Yang Zhang; Yanhong Xu; Yanru Ma; Yao Li; Yao Li; Yao Zhao; Yaofeng Sun; Yaohui Wang; Yi Qian; Yi Yu; Yichao Zhang; Yifan Ding; Yifan Shi; Yiliang Xiong; Ying He; Ying Zhou; Yinmin Zhong; Yishi Piao; Yisong Wang; Yixiao Chen; Yixuan Tan; Yixuan Wei; Yiyang Ma; Yiyuan Liu; Yonglun Yang; Yongqiang Guo; Yongtong Wu; Yu Wu; Yuan Cheng; Yuan Ou; Yuanfan Xu; Yuduan Wang; Yue Gong; Yuhan Wu; Yuheng Zou; Yukun Li; Yunfan Xiong; Yuxiang Luo; Yuxiang You; Yuxuan Liu; Yuyang Zhou; Z. F. Wu; Z. Z. Ren; Zehua Zhao; Zehui Ren; Zhangli Sha; Zhe Fu; Zhean Xu; Zhenda Xie; Zhengyan Zhang; Zhewen Hao; Zhibin Gou; Zhicheng Ma; Zhigang Yan; Zhihong Shao; Zhixian Huang; Zhiyu Wu; Zhuoshu Li; Zhuping Zhang; Zian Xu; Zihao Wang; Zihui Gu; Zijia Zhu; Zilin Li; Zipeng Zhang; Ziwei Xie; Ziyi Gao; Zizheng Pan; Zongqing Yao; Bei Feng; Hui Li; J. L. Cai; Jiaqi Ni; Lei Xu; Meng Li; Ning Tian; R. J. Chen; R. L. Jin; S. S. Li; Shuang Zhou; Tianyu Sun; X. Q. Li; Xiangyue Jin; Xiaojin Shen; Xiaosha Chen; Xinnan Song; Xinyi Zhou; Y. X. Zhu; Yanping Huang; Yaohui Li; Yi Zheng; Yuchen Zhu; Yunxian Ma; Zhen Huang; Zhipeng Xu; Zhongyu Zhang; Dongjie Ji; Jian Liang; Jianzhong Guo; Jin Chen; Leyi Xia; Miaojun Wang; Mingming Li; Peng Zhang; Ruyi Chen; Shangmian Sun; Shaoqing Wu; Shengfeng Ye; T. Wang; W. L. Xiao; Wei An; Xianzu Wang; Xiaowen Sun; Xiaoxiang Wang; Ying Tang; Yukun Zha; Zekai Zhang; Zhe Ju; Zhen Zhang; Zihua Qu) /Creator (arXiv GenPDF \(tex2pdf:4177c2c\)) /DOI (https://doi.org/10.48550/arXiv.2512.02556) /License (http://arxiv.org/licenses/nonexclusive-distrib/1.0/) /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.28 \(TeX Live 2025\) kpathsea version 6.4.1) /Producer (pikepdf 8.15.1) /Title (DeepSeek-V3.2: Pushing the Frontier of Open Large Language Models) /Trapped /False /arXivID (https://arxiv.org/abs/2512.02556v1) >> +endobj +3 0 obj +<< /Subtype /XML /Type /Metadata /Length 8699 >> +stream + + + + DeepSeek-V3.2: Pushing the Frontier of Open Large Language ModelsDeepSeek-AIAixin LiuAoxue MeiBangcai LinBing XueBingxuan WangBingzheng XuBochao WuBowei ZhangChaofan LinChen DongChengda LuChenggang ZhaoChengqi DengChenhao XuChong RuanDamai DaiDaya GuoDejian YangDeli ChenErhang LiFangqi ZhouFangyun LinFucong DaiGuangbo HaoGuanting ChenGuowei LiH. ZhangHanwei XuHao LiHaofen LiangHaoran WeiHaowei ZhangHaowen LuoHaozhe JiHonghui DingHongxuan TangHuanqi CaoHuazuo GaoHui QuHui ZengJialiang HuangJiashi LiJiaxin XuJiewen HuJingchang ChenJingting XiangJingyang YuanJingyuan ChengJinhua ZhuJun RanJunguang JiangJunjie QiuJunlong LiJunxiao SongKai DongKaige GaoKang GuanKexin HuangKexing ZhouKezhao HuangKuai YuLean WangLecong ZhangLei WangLiang ZhaoLiangsheng YinLihua GuoLingxiao LuoLinwang MaLitong WangLiyue ZhangM. S. DiM. Y XuMingchuan ZhangMinghua ZhangMinghui TangMingxu ZhouPanpan HuangPeixin CongPeiyi WangQiancheng WangQihao ZhuQingyang LiQinyu ChenQiushi DuRuiling XuRuiqi GeRuisong ZhangRuizhe PanRunji WangRunqiu YinRunxin XuRuomeng ShenRuoyu ZhangS. H. LiuShanghao LuShangyan ZhouShanhuang ChenShaofei CaiShaoyuan ChenShengding HuShengyu LiuShiqiang HuShirong MaShiyu WangShuiping YuShunfeng ZhouShuting PanSongyang ZhouTao NiTao YunTian PeiTian YeTianyuan YueWangding ZengWen LiuWenfeng LiangWenjie PangWenjing LuoWenjun GaoWentao ZhangXi GaoXiangwen WangXiao BiXiaodong LiuXiaohan WangXiaokang ChenXiaokang ZhangXiaotao NieXin ChengXin LiuXin XieXingchao LiuXingkai YuXingyou LiXinyu YangXinyuan LiXu ChenXuecheng SuXuehai PanXuheng LinXuwei FuY. Q. WangYang ZhangYanhong XuYanru MaYao LiYao LiYao ZhaoYaofeng SunYaohui WangYi QianYi YuYichao ZhangYifan DingYifan ShiYiliang XiongYing HeYing ZhouYinmin ZhongYishi PiaoYisong WangYixiao ChenYixuan TanYixuan WeiYiyang MaYiyuan LiuYonglun YangYongqiang GuoYongtong WuYu WuYuan ChengYuan OuYuanfan XuYuduan WangYue GongYuhan WuYuheng ZouYukun LiYunfan XiongYuxiang LuoYuxiang YouYuxuan LiuYuyang ZhouZ. F. WuZ. Z. RenZehua ZhaoZehui RenZhangli ShaZhe FuZhean XuZhenda XieZhengyan ZhangZhewen HaoZhibin GouZhicheng MaZhigang YanZhihong ShaoZhixian HuangZhiyu WuZhuoshu LiZhuping ZhangZian XuZihao WangZihui GuZijia ZhuZilin LiZipeng ZhangZiwei XieZiyi GaoZizheng PanZongqing YaoBei FengHui LiJ. L. CaiJiaqi NiLei XuMeng LiNing TianR. J. ChenR. L. JinS. S. LiShuang ZhouTianyu SunX. Q. LiXiangyue JinXiaojin ShenXiaosha ChenXinnan SongXinyi ZhouY. X. ZhuYanping HuangYaohui LiYi ZhengYuchen ZhuYunxian MaZhen HuangZhipeng XuZhongyu ZhangDongjie JiJian LiangJianzhong GuoJin ChenLeyi XiaMiaojun WangMingming LiPeng ZhangRuyi ChenShangmian SunShaoqing WuShengfeng YeT. WangW. L. XiaoWei AnXianzu WangXiaowen SunXiaoxiang WangYing TangYukun ZhaZekai ZhangZhe JuZhen ZhangZihua Quhttp://arxiv.org/licenses/nonexclusive-distrib/1.0/cs.CL + + + + +endstream +endobj +4 0 obj +<< /Dests 8 0 R >> +endobj +5 0 obj +<< /D [ 9 0 R /Fit ] /S /GoTo >> +endobj +6 0 obj +<< /Count 10 /First 10 0 R /Last 11 0 R /Type /Outlines >> +endobj +7 0 obj +<< /Count 23 /Kids [ 12 0 R 13 0 R 14 0 R 15 0 R ] /Type /Pages >> +endobj +8 0 obj +<< /Kids [ 16 0 R 17 0 R 18 0 R 19 0 R ] /Limits [ (Doc-Start) (table.caption.9) ] >> +endobj +9 0 obj +<< /Annots [ 20 0 R ] /Contents [ 21 0 R 22 0 R 23 0 R 24 0 R ] /Group 25 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 12 0 R /Resources 26 0 R /Type /Page >> +endobj +10 0 obj +<< /A 27 0 R /Next 28 0 R /Parent 6 0 R /Title 29 0 R >> +endobj +11 0 obj +<< /A 30 0 R /Parent 6 0 R /Prev 31 0 R /Title 32 0 R >> +endobj +12 0 obj +<< /Count 6 /Kids [ 9 0 R 33 0 R 34 0 R 35 0 R 36 0 R 37 0 R ] /Parent 7 0 R /Type /Pages >> +endobj +13 0 obj +<< /Count 6 /Kids [ 38 0 R 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R ] /Parent 7 0 R /Type /Pages >> +endobj +14 0 obj +<< /Count 6 /Kids [ 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R ] /Parent 7 0 R /Type /Pages >> +endobj +15 0 obj +<< /Count 5 /Kids [ 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R ] /Parent 7 0 R /Type /Pages >> +endobj +16 0 obj +<< /Kids [ 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R ] /Limits [ (Doc-Start) (cite.schulman2020klapprox) ] >> +endobj +17 0 obj +<< /Kids [ 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R ] /Limits [ (cite.sonnet-4.5) (page.18) ] >> +endobj +18 0 obj +<< /Kids [ 67 0 R 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R ] /Limits [ (page.19) (subsubsection.3.2.3) ] >> +endobj +19 0 obj +<< /Kids [ 73 0 R 74 0 R ] /Limits [ (table.caption.13) (table.caption.9) ] >> +endobj +20 0 obj +<< /A << /S /URI /URI (https://arxiv.org/abs/2512.02556v1) >> /BS << /W 0 >> /NM (fitz-L0) /Rect [ 12 251.52503 32 590.365 ] /Subtype /Link >> +endobj +21 0 obj +<< /Length 10 /Filter /FlateDecode >> +stream +x+| +endstream +endobj +22 0 obj +<< /Filter /FlateDecode /Length 1717 >> +stream +xڽWKs6W͘ @|TgRMkCMjP ʎ뻋JɩX`}|2_<Q!Uɨ(yRfQ]s2?~CV譽~d(ĺb&EZDq<%>}~UG/~be + ${wqp4{f~Z,*2FHHdy"K8"j)C&Y,g6ne,NgJSzh@=Hk>*d2h妞zwv[z;g")UVhR idʼnW:^!ND4)$A;]:MۑOP[(JP4HC݌#UN@e e92JL?3Q24AtK)VP渪Gjꡳ[FfGc:Ǚ_Xȋ۬u3wH QHJrd0slUu"4GSSzxCWNPf՛ ݇Ӹ@m+GChz9gHDQ3m{}}F?A1l >QԻ_׃ԾGN]{{5O5M!#%2TaxZͧ̓R + +Ao\:-װ\ݶ[Ql,GSQ1輬L^d[SF ,0<G`3n mS%Xke/#I\`3iB!sث*e09Az;bٕ"eol04.h=^&Bn6nmlKTpXgc 6D\ˋZ Ƌ8U2)5RqQђ|2+!ov:4nhr #nC5gYNƺͰC`mnAaC2f (;Cњ5&r,.%釁|HntAe/F"7+T~ +I^iT"ݑ7~C/m;$yJR67 &ك煒= c)On~0xW<:6}֦^ӰE`JxxRmSS oqs\1M)]cbd@Wxؙ:s/Ep&ukz}4ūf|V +Gj_ :8iF;ZX TzyYv4Oo=WG0=yD{r怽ynr ]sXꀑ8[cM-HӘQW&huz\مE-ƴf^5=.wxBb;JO=9.©ֻd@ Ϟ]%[! ALusVMβ;F,tvH>T|:/Pۭyr?ZV'GTdoU%=ƙG8}T_1j_6bfx%f +x^I <;ӯr #LxJ<{$szT|,n0@8ݜZH!/X2|mqDǀ?v<0aϨ rPcn/ +w?qԀWl6؁H=^Nᔗ 19p +endstream +endobj +23 0 obj +<< /Length 11 /Filter /FlateDecode >> +stream +x +f +endstream +endobj +24 0 obj +<< /Filter /FlateDecode /Length 139 >> +stream +xE +@Ey* a;1U7 l2V40#&FUaT34`m?7?oxZ;Gk"Ħ^rkT郆ήcRvcsN%8& +endstream +endobj +25 0 obj +<< /CS /DeviceRGB /I true /S /Transparency /Type /Group >> +endobj +26 0 obj +<< /ColorSpace 75 0 R /ExtGState 76 0 R /Font << /F134 77 0 R /F137 78 0 R /F158 79 0 R /F67 80 0 R /Times-Roman 81 0 R >> /Pattern 82 0 R /ProcSet [ /PDF /Text ] /XObject << /Im1 83 0 R /Im2 84 0 R >> >> +endobj +27 0 obj +<< /D (section.1) /S /GoTo >> +endobj +28 0 obj +<< /A 85 0 R /Count -3 /First 86 0 R /Last 87 0 R /Next 88 0 R /Parent 6 0 R /Prev 10 0 R /Title 89 0 R >> +endobj +29 0 obj + +endobj +30 0 obj +<< /D (appendix.E) /S /GoTo >> +endobj +31 0 obj +<< /A 90 0 R /Next 11 0 R /Parent 6 0 R /Prev 91 0 R /Title 92 0 R >> +endobj +32 0 obj + +endobj +33 0 obj +<< /Annots [ 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R ] /Contents 129 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 12 0 R /Resources 130 0 R /Type /Page >> +endobj +34 0 obj +<< /Annots [ 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R ] /Contents 142 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 12 0 R /Resources 143 0 R /Type /Page >> +endobj +35 0 obj +<< /Contents 144 0 R /Group 145 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 12 0 R /Resources 146 0 R /Type /Page >> +endobj +36 0 obj +<< /Annots [ 147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R ] /Contents 153 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 12 0 R /Resources 154 0 R /Type /Page >> +endobj +37 0 obj +<< /Annots [ 155 0 R 156 0 R 157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R ] /Contents 163 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 12 0 R /Resources 164 0 R /Type /Page >> +endobj +38 0 obj +<< /Annots [ 165 0 R 166 0 R ] /Contents 167 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 13 0 R /Resources 168 0 R /Type /Page >> +endobj +39 0 obj +<< /Contents 169 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 13 0 R /Resources 170 0 R /Type /Page >> +endobj +40 0 obj +<< /Annots [ 171 0 R ] /Contents 172 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 13 0 R /Resources 173 0 R /Type /Page >> +endobj +41 0 obj +<< /Annots [ 174 0 R 175 0 R 176 0 R 177 0 R 178 0 R 179 0 R 180 0 R 181 0 R ] /Contents 182 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 13 0 R /Resources 183 0 R /Type /Page >> +endobj +42 0 obj +<< /Contents 184 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 13 0 R /Resources 185 0 R /Type /Page >> +endobj +43 0 obj +<< /Annots [ 186 0 R 187 0 R 188 0 R 189 0 R 190 0 R 191 0 R ] /Contents 192 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 13 0 R /Resources 193 0 R /Type /Page >> +endobj +44 0 obj +<< /Annots [ 194 0 R 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R ] /Contents 219 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 14 0 R /Resources 220 0 R /Type /Page >> +endobj +45 0 obj +<< /Annots [ 221 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R ] /Contents 231 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 14 0 R /Resources 232 0 R /Type /Page >> +endobj +46 0 obj +<< /Annots [ 233 0 R 234 0 R ] /Contents 235 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 14 0 R /Resources 236 0 R /Type /Page >> +endobj +47 0 obj +<< /Annots [ 237 0 R 238 0 R ] /Contents 239 0 R /Group 240 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 14 0 R /Resources 241 0 R /Type /Page >> +endobj +48 0 obj +<< /Annots [ 242 0 R 243 0 R 244 0 R ] /Contents 245 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 14 0 R /Resources 246 0 R /Type /Page >> +endobj +49 0 obj +<< /Annots [ 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R ] /Contents 260 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 14 0 R /Resources 261 0 R /Type /Page >> +endobj +50 0 obj +<< /Annots [ 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R ] /Contents 283 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 15 0 R /Resources 284 0 R /Type /Page >> +endobj +51 0 obj +<< /Annots [ 285 0 R 286 0 R ] /Contents 287 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 15 0 R /Resources 288 0 R /Type /Page >> +endobj +52 0 obj +<< /Contents 289 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 15 0 R /Resources 290 0 R /Type /Page >> +endobj +53 0 obj +<< /Annots [ 291 0 R 292 0 R ] /Contents 293 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 15 0 R /Resources 294 0 R /Type /Page >> +endobj +54 0 obj +<< /Contents 295 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 15 0 R /Resources 296 0 R /Type /Page >> +endobj +55 0 obj +<< /Limits [ (Doc-Start) (Hfootnote.5) ] /Names [ (Doc-Start) 297 0 R (Hfootnote.1) 298 0 R (Hfootnote.2) 299 0 R (Hfootnote.3) 300 0 R (Hfootnote.4) 301 0 R (Hfootnote.5) 302 0 R ] >> +endobj +56 0 obj +<< /Limits [ (Item.1) (appendix.C) ] /Names [ (Item.1) 303 0 R (Item.2) 304 0 R (Item.3) 305 0 R (appendix.A) 306 0 R (appendix.B) 307 0 R (appendix.C) 308 0 R ] >> +endobj +57 0 obj +<< /Limits [ (appendix.D) (cite.comanici2025gemini) ] /Names [ (appendix.D) 309 0 R (appendix.E) 310 0 R (cite.MQA) 311 0 R (cite.MiniMax-M2) 312 0 R (cite.balunovic2025matharena) 313 0 R (cite.comanici2025gemini) 314 0 R ] >> +endobj +58 0 obj +<< /Limits [ (cite.deepseek-math-v2) (cite.gemini3) ] /Names [ (cite.deepseek-math-v2) 315 0 R (cite.deepseekV2) 316 0 R (cite.deepseekmath) 317 0 R (cite.deepseekr1) 318 0 R (cite.deepseekv3) 319 0 R (cite.gemini3) 320 0 R ] >> +endobj +59 0 obj +<< /Limits [ (cite.gpqa) (cite.luong-etal-2025-towards) ] /Names [ (cite.gpqa) 321 0 R (cite.gpt-5) 322 0 R (cite.hle) 323 0 R (cite.k2-thinking) 324 0 R (cite.li2025tool) 325 0 R (cite.luong-etal-2025-towards) 326 0 R ] >> +endobj +60 0 obj +<< /Limits [ (cite.mcpmark) (cite.schulman2020klapprox) ] /Names [ (cite.mcpmark) 327 0 R (cite.mcpuniverse) 328 0 R (cite.mmlu_pro) 329 0 R (cite.o1) 330 0 R (cite.opus4.5) 331 0 R (cite.schulman2020klapprox) 332 0 R ] >> +endobj +61 0 obj +<< /Limits [ (cite.sonnet-4.5) (cite.yang2025qwen3technicalreport) ] /Names [ (cite.sonnet-4.5) 333 0 R (cite.swe_verified) 334 0 R (cite.tau2) 335 0 R (cite.vaswani2017attention) 336 0 R (cite.wei2025browsecomp) 337 0 R (cite.yang2025qwen3technicalreport) 338 0 R ] >> +endobj +62 0 obj +<< /Limits [ (cite.yang2025swesmith) (equation.2) ] /Names [ (cite.yang2025swesmith) 339 0 R (cite.yuan-etal-2025-native) 340 0 R (cite.zeng2025glm) 341 0 R (cite.zhou2025browsecomp) 342 0 R (equation.1) 343 0 R (equation.2) 344 0 R ] >> +endobj +63 0 obj +<< /Limits [ (equation.3) (equation.8) ] /Names [ (equation.3) 345 0 R (equation.4) 346 0 R (equation.5) 347 0 R (equation.6) 348 0 R (equation.7) 349 0 R (equation.8) 350 0 R ] >> +endobj +64 0 obj +<< /Limits [ (equation.9) (figure.caption.2) ] /Names [ (equation.9) 351 0 R (figure.caption.1) 352 0 R (figure.caption.10) 353 0 R (figure.caption.11) 354 0 R (figure.caption.12) 355 0 R (figure.caption.2) 356 0 R ] >> +endobj +65 0 obj +<< /Limits [ (figure.caption.3) (page.12) ] /Names [ (figure.caption.3) 357 0 R (figure.caption.4) 358 0 R (page.1) 359 0 R (page.10) 360 0 R (page.11) 361 0 R (page.12) 362 0 R ] >> +endobj +66 0 obj +<< /Limits [ (page.13) (page.18) ] /Names [ (page.13) 363 0 R (page.14) 364 0 R (page.15) 365 0 R (page.16) 366 0 R (page.17) 367 0 R (page.18) 368 0 R ] >> +endobj +67 0 obj +<< /Limits [ (page.19) (page.23) ] /Names [ (page.19) 369 0 R (page.2) 370 0 R (page.20) 371 0 R (page.21) 372 0 R (page.22) 373 0 R (page.23) 374 0 R ] >> +endobj +68 0 obj +<< /Limits [ (page.3) (page.8) ] /Names [ (page.3) 375 0 R (page.4) 376 0 R (page.5) 377 0 R (page.6) 378 0 R (page.7) 379 0 R (page.8) 380 0 R ] >> +endobj +69 0 obj +<< /Limits [ (page.9) (section.5) ] /Names [ (page.9) 381 0 R (section.1) 382 0 R (section.2) 383 0 R (section.3) 384 0 R (section.4) 385 0 R (section.5) 386 0 R ] >> +endobj +70 0 obj +<< /Limits [ (storelineno.1) (subsection.2.1) ] /Names [ (storelineno.1) 387 0 R (subfigure.3.1) 388 0 R (subfigure.3.2) 389 0 R (subfigure.7.1) 390 0 R (subfigure.7.2) 391 0 R (subsection.2.1) 392 0 R ] >> +endobj +71 0 obj +<< /Limits [ (subsection.2.2) (subsection.4.2) ] /Names [ (subsection.2.2) 393 0 R (subsection.2.3) 394 0 R (subsection.3.1) 395 0 R (subsection.3.2) 396 0 R (subsection.4.1) 397 0 R (subsection.4.2) 398 0 R ] >> +endobj +72 0 obj +<< /Limits [ (subsection.4.3) (subsubsection.3.2.3) ] /Names [ (subsection.4.3) 399 0 R (subsection.4.4) 400 0 R (subsubsection.2.1.1) 401 0 R (subsubsection.3.2.1) 402 0 R (subsubsection.3.2.2) 403 0 R (subsubsection.3.2.3) 404 0 R ] >> +endobj +73 0 obj +<< /Limits [ (table.caption.13) (table.caption.8) ] /Names [ (table.caption.13) 405 0 R (table.caption.14) 406 0 R (table.caption.5) 407 0 R (table.caption.6) 408 0 R (table.caption.7) 409 0 R (table.caption.8) 410 0 R ] >> +endobj +74 0 obj +<< /Limits [ (table.caption.9) (table.caption.9) ] /Names [ (table.caption.9) 411 0 R ] >> +endobj +75 0 obj +<< /pgfprgb [ /Pattern /DeviceRGB ] >> +endobj +76 0 obj +<< /pgf@ca1.0 << /ca 1 >> >> +endobj +77 0 obj +<< /BaseFont /ZXJMNA+URWPalladioL-Bold /Encoding 412 0 R /FirstChar 2 /FontDescriptor 413 0 R /LastChar 121 /Subtype /Type1 /ToUnicode 414 0 R /Type /Font /Widths 415 0 R >> +endobj +78 0 obj +<< /BaseFont /MXZOSQ+URWPalladioL-Roma /Encoding 412 0 R /FirstChar 2 /FontDescriptor 416 0 R /LastChar 180 /Subtype /Type1 /ToUnicode 417 0 R /Type /Font /Widths 418 0 R >> +endobj +79 0 obj +<< /BaseFont /HZKKDF+txsys /FirstChar 0 /FontDescriptor 419 0 R /LastChar 186 /Subtype /Type1 /ToUnicode 420 0 R /Type /Font /Widths 421 0 R >> +endobj +80 0 obj +<< /BaseFont /TTTSQL+LMMonoLt10-Bold /Encoding 422 0 R /FirstChar 46 /FontDescriptor 423 0 R /LastChar 115 /Subtype /Type1 /ToUnicode 424 0 R /Type /Font /Widths 425 0 R >> +endobj +81 0 obj +<< /BaseFont /Times-Roman /Encoding /WinAnsiEncoding /Subtype /Type1 /Type /Font >> +endobj +82 0 obj +<< >> +endobj +83 0 obj +<< /BBox [ 0 0 1125.4313 628.35879 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/v32_performance.pdf) /PTEX.InfoDict 426 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /A1 << /CA 0 /Type /ExtGState /ca 1 >> /A2 << /CA 1 /Type /ExtGState /ca 1 >> /A3 << /CA .9 /Type /ExtGState /ca 1 >> >> /Font << /F1 427 0 R /F2 428 0 R /F3 429 0 R /F4 430 0 R >> /Pattern << /H1 431 0 R >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << /F3-DejaVuSans-Oblique-tau 432 0 R >> >> /Subtype /Form /Type /XObject /Length 3512 >> +stream +x[KsFWUҁy?n#Q6u,UrHr`dZCQ%'~D j*`MwL˛vP=nk^/w[q|iuEZ2q\ΰ㇛uu񕨅&_~Ϟ/kɥ9fVp+;qxZ \/u`">짳}/R^{a^zs6o/g 텇tA3ZCN_{7}')?++U< +!!ge t*2mo2|SdvMKe }:p{#m2 V@ˤ> }: M ^ܿYxx(A;) @*NX Sc'z.\ e ^:uӞ ^.8-VIfb3 +.~(5  c?`Jk+MQkm֖y:-:N8/32HªĿ_(oTw<͉P܀t({ƩZT^ w.n +lr3K۱<_oՒ<w YO)ЖpeH+eLUtAcl J }F"g;iHak{eg":%E0{x?|0/OS.79>*:xGr{:/T/ǘg/E`ވؗ]/7wuI'Tï?֊Zϐ~ n?/z+6l7ƪyPc̊hgRڃu:).?o"XC(>ܼW5(X_|-ꇛu5~~SlGAwV l%VYC2D*P*UoBv̝j˚>Poe@ozz5Q#SoCx_AB5!vT QcAMmѱ ; i) +idEPzإSJ`jգFY Cs |q=!6 ku !q;kIqMPNȆ0D;4T%{ٸ&q9eO;2x0Jf㚠fAӎ1 `E隠ezLC sg㚠2HezLûJUA|MPe4=0cBokJTA5iǵ".<_k1 T"§c.A<_TcRLC("cb1;g㚠̉9>zK<ǵl\T0 ͡qpfB6 jbMĵC@D -2[1MJC&1>.4kXPCnC$?Y'AKP0a! !q? v0vdj~t5>-]Zq+Mi~3JJf0Ip/w#= >.G;Tz9TEd;B~L!rA$Cާ"O%LQ=3 +cލ5㢡>.GoB#Nf'(uIA1v::2=jk +̚>{j-Gi$">Cܓcލάz,ie +>'7* $J8!W4 77W%*2 + 3;i"-forN sy#Fgޫ%˛Yn9g25n$t;b[]\0( \  -NcsH؉?ѱy24ՠA[zI`wmeo+[lMDQ7)I1Q: +ZA2n lIJa'UnBTl~(2nu)IxaEI?8SrGyN!r߶Mˢߜ!)yJPy q ;LryĶ)8ewP t8vR"ن3jJ4E~8VDr8Mq wI (θ"=4,ѧ$EIfd;@-d)bJK~ ͩ3LRms<sԦ\]dx +)k_ +qPT|IGfJ5sWqMnZRCFzY$K2]01%#5^rլ]dw(ˉE*ZOK㥗dۃD"cz$@5TlВ8btU)* hW=>n\<鲿0-,Dp-P50/_\>eMs1Wa+؏Rd _`T%"'0\S;D{(@L/TA +/0d.qFR7 +N@{hW!,m+ +x2 +"W4Y<`oWůu'4l}6;xw[7j1H(kp-o Gë ZxjJp5*`oLc=͵۝`Cnή-׿6ï=nDQ/ > >> /XObject << /x6 434 0 R >> >> /Subtype /Form /Type /XObject /Length 1440 >> +stream +xmWK7 )t">*k!q6&wUcy]-6O$[i'6;#ޮק꣆Ͳ_kN{?Y~[ p[;~ۗ_\2+^gV}:` h ϻY ?"\&`q >: cC`YbL=/xI+JQw^}L8 }{xɭ̍Vǰs4lՎ6چ5GHEav>9 蝅nmj~Nk'y EbZ3呆LkqY㋉Թw@mpt%P eE 9b"`ULzmx0e^ ׋"pFCti wg.-PjՋ]a +Nt3ōN9BFH<^jm2 9.!vn8q1X* lȈoH ޘEA<b1u聳io,?QִE6dP]܁TjI%fВy&AjO(̠+b]2/4xSH*\XK^|jj-%,#v#24LGGk9Dg").\r6݁>r׹Ʈفp,#l(icMMT=OZrbRh&C"p:LJ#¢inY-C)nH&:9hTGхpM*s.r_MFODٺ&Qʼn%_D9aOOPl3^|ѵbCsocHi.ógt5xT"l؋"FMIeC:/ѳC\:)A fO )MZ0#5 cr3 -_fb!c<$Qh*lQEȎU|=4[$`D!RTs8 j8/\jBʃR xX3ENR +/F%R&Lc.aƭ8B!RڌVWH؄nOPi.$,"Z댺{;̓$F41yVTҥP:xW3*M1M5Kؓ P&Fa9FkM5b3*C֚<)) xPk + ;[Mo:4q D7IrJu'' }K4mqʋɅя-^x͟^X2чNH^),*NϛM8}.ZKZ0v@> mƤq[Ƕ??eX +endstream +endobj +85 0 obj +<< /D (section.2) /S /GoTo >> +endobj +86 0 obj +<< /A 435 0 R /Count -1 /First 436 0 R /Last 436 0 R /Next 437 0 R /Parent 28 0 R /Title 438 0 R >> +endobj +87 0 obj +<< /A 439 0 R /Parent 28 0 R /Prev 437 0 R /Title 440 0 R >> +endobj +88 0 obj +<< /A 441 0 R /Count -2 /First 442 0 R /Last 443 0 R /Next 444 0 R /Parent 6 0 R /Prev 28 0 R /Title 445 0 R >> +endobj +89 0 obj + +endobj +90 0 obj +<< /D (appendix.D) /S /GoTo >> +endobj +91 0 obj +<< /A 446 0 R /Next 31 0 R /Parent 6 0 R /Prev 447 0 R /Title 448 0 R >> +endobj +92 0 obj + +endobj +93 0 obj +<< /A << /D (cite.deepseekr1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 228.072 716.514 292.603 729.475 ] /Subtype /Link /Type /Annot >> +endobj +94 0 obj +<< /A << /D (cite.deepseekr1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 296.023 716.514 319.507 729.475 ] /Subtype /Link /Type /Annot >> +endobj +95 0 obj +<< /A << /D (cite.o1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 322.928 716.514 363.206 729.475 ] /Subtype /Link /Type /Annot >> +endobj +96 0 obj +<< /A << /D (cite.o1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 366.627 716.514 395.483 729.475 ] /Subtype /Link /Type /Annot >> +endobj +97 0 obj +<< /A << /D (cite.MiniMax-M2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 216.105 662.317 263.408 675.278 ] /Subtype /Link /Type /Annot >> +endobj +98 0 obj +<< /A << /D (cite.MiniMax-M2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 267.513 662.317 291.76 675.278 ] /Subtype /Link /Type /Annot >> +endobj +99 0 obj +<< /A << /D (cite.k2-thinking) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 295.864 662.317 349.031 675.278 ] /Subtype /Link /Type /Annot >> +endobj +100 0 obj +<< /A << /D (cite.k2-thinking) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 353.136 662.317 377.383 675.278 ] /Subtype /Link /Type /Annot >> +endobj +101 0 obj +<< /A << /D (cite.yang2025qwen3technicalreport) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 381.487 662.317 413.312 675.278 ] /Subtype /Link /Type /Annot >> +endobj +102 0 obj +<< /A << /D (cite.yang2025qwen3technicalreport) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 417.417 662.317 441.664 675.278 ] /Subtype /Link /Type /Annot >> +endobj +103 0 obj +<< /A << /D (cite.zeng2025glm) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 445.769 662.317 494.439 675.278 ] /Subtype /Link /Type /Annot >> +endobj +104 0 obj +<< /A << /D (cite.zeng2025glm) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 498.544 662.317 522.791 675.278 ] /Subtype /Link /Type /Annot >> +endobj +105 0 obj +<< /A << /D (cite.sonnet-4.5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 73.07 635.219 123.456 648.18 ] /Subtype /Link /Type /Annot >> +endobj +106 0 obj +<< /A << /D (cite.sonnet-4.5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 126.321 635.219 155.608 648.18 ] /Subtype /Link /Type /Annot >> +endobj +107 0 obj +<< /A << /D (cite.comanici2025gemini) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 158.474 635.219 211.386 648.18 ] /Subtype /Link /Type /Annot >> +endobj +108 0 obj +<< /A << /D (cite.comanici2025gemini) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 214.252 635.219 242.972 648.18 ] /Subtype /Link /Type /Annot >> +endobj +109 0 obj +<< /A << /D (cite.gpt-5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 245.838 635.219 285.922 648.18 ] /Subtype /Link /Type /Annot >> +endobj +110 0 obj +<< /A << /D (cite.gpt-5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 288.788 635.219 312.162 648.18 ] /Subtype /Link /Type /Annot >> +endobj +111 0 obj +<< /A << /D (cite.vaswani2017attention) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 120.254 547.149 189.994 560.11 ] /Subtype /Link /Type /Annot >> +endobj +112 0 obj +<< /A << /D (cite.vaswani2017attention) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 193.509 547.149 217.712 560.11 ] /Subtype /Link /Type /Annot >> +endobj +113 0 obj +<< /A << /D (cite.mcpmark) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 73.128 465.854 112.845 478.815 ] /Subtype /Link /Type /Annot >> +endobj +114 0 obj +<< /A << /D (cite.mcpmark) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 116.296 465.854 140.02 478.815 ] /Subtype /Link /Type /Annot >> +endobj +115 0 obj +<< /A << /D (cite.li2025tool) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 143.471 465.854 180.775 478.815 ] /Subtype /Link /Type /Annot >> +endobj +116 0 obj +<< /A << /D (cite.li2025tool) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 184.227 465.854 207.95 478.815 ] /Subtype /Link /Type /Annot >> +endobj +117 0 obj +<< /A << /D (cite.mcpuniverse) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 211.401 465.854 258.028 478.815 ] /Subtype /Link /Type /Annot >> +endobj +118 0 obj +<< /A << /D (cite.mcpuniverse) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 261.479 465.854 285.203 478.815 ] /Subtype /Link /Type /Annot >> +endobj +119 0 obj +<< /A << /D (cite.deepseekv3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 457.235 350.686 523.988 363.647 ] /Subtype /Link /Type /Annot >> +endobj +120 0 obj +<< /A << /D (cite.deepseekv3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 337.136 93.484 350.098 ] /Subtype /Link /Type /Annot >> +endobj +121 0 obj +<< /A << /D (cite.mcpmark) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 140.447 235.517 181.073 248.479 ] /Subtype /Link /Type /Annot >> +endobj +122 0 obj +<< /A << /D (cite.mcpmark) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 186.122 235.517 210.369 248.479 ] /Subtype /Link /Type /Annot >> +endobj +123 0 obj +<< /A << /D (cite.li2025tool) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 218.199 235.517 257.439 248.479 ] /Subtype /Link /Type /Annot >> +endobj +124 0 obj +<< /A << /D (cite.li2025tool) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 262.487 235.517 286.734 248.479 ] /Subtype /Link /Type /Annot >> +endobj +125 0 obj +<< /A << /D (cite.mcpuniverse) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 294.564 235.517 343.352 248.479 ] /Subtype /Link /Type /Annot >> +endobj +126 0 obj +<< /A << /D (cite.mcpuniverse) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 348.4 235.517 372.647 248.479 ] /Subtype /Link /Type /Annot >> +endobj +127 0 obj +<< /A << /D (cite.gemini3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 73.161 154.222 127.372 167.184 ] /Subtype /Link /Type /Annot >> +endobj +128 0 obj +<< /A << /D (cite.gemini3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 130.838 154.222 160.82 167.184 ] /Subtype /Link /Type /Annot >> +endobj +129 0 obj +<< /Filter /FlateDecode /Length 3152 >> +stream +xڅYYs~_T*!iWd'k*yIXbL + HYhPm_EW~OIUXeqyxQXHC%Û?u^eEQp׻6SZ/qbGaOh ET)||pf4n*0ѣb@y7 䆆22t!$|xz2{f 6/ǫPYX9dh8PUZ{-E=S弲TVAh,ipѸWcz.Fti|buyHq['䇶>*G6du{$o ܃lSPP !{gU8Z͢5AFؙ/qz|YK+ٿ,2J6YQ^v{q ^1Wq( >qO`=jy>)^ X'C<ѯ-=WhiX+'I12 N$)숤YQ߷ÈQε޷cBxY%  c"ˤkzbl$mYc/Y*%hPVL䧛 +l}|]hurKT@`j0vd4b-5eyd֓,k2nPP1|/,K0/f=#](x<#Suef""A~M1Vaڣ%'1sE^+4 +SwWLaLH``DIpo@eٱ5lE) +B0,\s1Ϛ +DD '܃g8 +3b$wzJDHLڠA`dnyL|U;eJ^kc]y@YebR`hE^JL. ! ~>Dνee|3G(ρ]5,ڝXۿ.7%D˅pcd'%n)ΓOU0j*IYF6aǖ!!. WN V9Щe |7v)i- +H4ߛ% v-Dz^pso(2'Np^$Ӵ +ȣMz&G&F?='Ŧp΁b=c4Xƿp+gؾOLJI0fk+ +!P8(gKÐ;iWE'Z8_VڕuZ<02>~ DVx1RqϱzǛ!܅@Ggʇ+ Ήc) e&۾`V<**N P\At^^Ct0̑@W9 kBBN %x7ϏL0vLvCy>xjkǷg%aB kLo( e8`c_|K AOHev>eQpt$;%H6W @M%ࡁ`{vdE$8(xVDPbzy rI/F X xfIז‹K(Tv}fYRGo^|b:,R[`Ym 6lBHycF]1~!A>;W(GB( +"Twգ<֬rx^s ,S(5T+3ػʿ9\ؕ*L+r 8p*֙zg(Pk? +Az $VNhq/OH qO{87@i1k#$V#֌;\ +=@<6 蒫2 _ji|y2עSύ2K·9y@B׷GS9ܮRGsēWT*. k(Й/HJf/7;lfy?R&*K9@Mhm==rFS9z@úsL>aIkq4~vQjU;^Aw|[?cAen N!N%#~s>_~^@-lKDW=|?R2 +endstream +endobj +130 0 obj +<< /ColorSpace 75 0 R /ExtGState 76 0 R /Font << /F134 77 0 R /F137 78 0 R >> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +131 0 obj +<< /A << /D (cite.deepseekV2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 318.772 319.679 384.191 332.64 ] /Subtype /Link /Type /Annot >> +endobj +132 0 obj +<< /A << /D (cite.deepseekV2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 387.666 319.679 411.455 332.64 ] /Subtype /Link /Type /Annot >> +endobj +133 0 obj +<< /A << /D (cite.yuan-etal-2025-native) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 121.941 292.581 174.15 305.542 ] /Subtype /Link /Type /Annot >> +endobj +134 0 obj +<< /A << /D (cite.yuan-etal-2025-native) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 177.606 292.581 201.395 305.542 ] /Subtype /Link /Type /Annot >> +endobj +135 0 obj +<< /A << /D (cite.MQA) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 455.922 292.581 495.622 305.542 ] /Subtype /Link /Type /Annot >> +endobj +136 0 obj +<< /A << /D (cite.MQA) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 499.079 292.581 522.868 305.542 ] /Subtype /Link /Type /Annot >> +endobj +137 0 obj +<< /A << /D (Hfootnote.1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 139.543 279.031 146.019 293.583 ] /Subtype /Link /Type /Annot >> +endobj +138 0 obj +<< /A << /D (figure.caption.2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 104.944 251.933 112.5 266.485 ] /Subtype /Link /Type /Annot >> +endobj +139 0 obj +<< /A << /D (Hfootnote.2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 449.316 251.933 455.791 266.485 ] /Subtype /Link /Type /Annot >> +endobj +140 0 obj +<< /A << /D (appendix.A) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 429.28 91.855 438.248 104.946 ] /Subtype /Link /Type /Annot >> +endobj +141 0 obj +<< /A << /S /URI /Type /Action /URI (https://huggingface.co/deepseek-ai/DeepSeek-V3.2-Exp/tree/main/inference) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 89.395 80.755 465.705 93.847 ] /Subtype /Link /Type /Annot >> +endobj +142 0 obj +<< /Filter /FlateDecode /Length 3438 >> +stream +xڽZYsF~#T%NANT%-;9Q&%{~sPTOstu.~xAGW7/0!\1[d4]dRz.⏛t{co bMMٚU{< QS;<%Dž٥*oš1aŶ5U[֕fg3B9 J0NwXnāPirlLc߲|*VKw1KS[q`Yұ|tI+,_cBrLNwYΏel,# )UOf˛\&+csizZRɶhZ`s0xl]Y'].SWE+p68TrL>]Cպuqzg*N%~R *k (2yr ^<3s>8~'e)jX}]AKh%cI۷O +f[Xjm>VTV_*4W[0mά6EU6;"+RPx4lLpr(7X|)XQ[Ţ]Y,\v*RJuq==zFeD AKFRzDbF +H.&,d/?!2Ҁ[>=?shs[5/EQ2ELɬEЖȝR xa,wXC+C2߫A*=ƍ)73(Ef^abP*ꯦ Ҍb"QLixUIdƦ. #,:yToK3FF2ٰUε9.g-;ĭ#URDЀ#"H)?AcjAmU"Q=9=)1lmi4# NSc\)I<sLP٢`>ЀI)i=3F&9?ˆSAh-و&զ] T:ZSPqm@fdAPNUWȓ]C"rT%m :2"t %=H~(qͮnŸ`]\lVE5L ~kv겂2txF>1wlZΊUJSBP^vCq5dqB-AJ4T^Bo_̿vh†SMFwˌ/(VDA}U#r=bj)lh߂v"@>q3РIaѾuOlYը1"˙)I u?TLʈyAbUk_2kD䜓\a uN[($K犎E>`Xb]UǪqg;1S{մ||Ax?go0 hs?sU?$^Ɨt|y wH؛y؝Y$q(Onhc8G:pv>BZLv O@(" ݡ2,} خg(/1߆tگ'u۶Dl.# \Qb5ۚDcymj|iiC%!<H˓Y8Gݎ$w_O1Э򙂱QChcz]zNә _vє$H0 {Ȅ;XүKY +mzm$ - :n+[vFxʼj۩v5#4 [6@$O%hϐe9iˤ_{nKW +7}K!سKJ 7}[B*AU&#:w, 48{@zoeSVa\љVgO*[1+ Tgk\ʞC^]J[(mVgD$9ڴE ŗcUn!3fo@ C`l|','`Ka¾,b;r{RovEzJ ߰ژՇ}]zCK<%jSws)L5}?|ήe`O]#uʅO?/xv? mjcv[?>.}uz_a|,j0̳.s25\I^ G{n-LH.X]]<≮wQc#n3~ARh=zl-=ik?b[Vp7 }&dm8IS5n gL.TAZBۆViJ2X^.eA@]݂i_[rЩ;R^8MB`;Ѕx#6 .``ƺt .jebiM5JO -htz*_9EN|]F`*I<B>d+$.8mo^^]mдbeȪZcgKKxyu2%P~j\We8yeN%ķߩSwא +endstream +endobj +143 0 obj +<< /ColorSpace 75 0 R /ExtGState 76 0 R /Font << /F134 77 0 R /F137 78 0 R /F158 79 0 R /F204 449 0 R /F276 450 0 R /F289 451 0 R /F299 452 0 R /F302 453 0 R /F311 454 0 R >> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +144 0 obj +<< /Filter /FlateDecode /Length 2371 >> +stream +xYݏ۸߿BZ`?Ehi҇6!eu-%&w3)[Nk3l_n_ Lf^ Uj%/7BW^A2 2Vg9^$_Z2Jf*kBx2+PRe}]BYXrJX*\XJ/z1 nh[!< 2=﫦ٿk;{Z7)w/p򶧉v5lT͒f%, ÿ}!htnPQS*&WQD.}}hn6~8=M'8E7P_~ϋ_͑߀mmdW?_32p% JKcj 2oVpi* 8J́}8İ?n!TÚ+]3J r#_7xd[g,d'9%nG sg*+ i#c)d`Bs+NK2ߓc=U3b a=/MJR2{r)q.&Wk8pJ)0fܜIrLyAvy +b QX*13B n6Ӹp >bSs!"!+8ELQk+kjx^T)Y'jYú޵2v0MG3B%\Y/kaj\,#H22.SIYHqA8r9BK*hp1%z7}G#y ^v~cۀ$)7 kD3'.~xHħ6ʈ(F3(S;UYVs BhByT+9VdReiaO  Sh˪J&eT`j8GA=3k9@_ +>uIG ^(DC+X/y GOSzZ@ 3z>\.sr]32Mn偵94W{>gGG&Bn^2t3t:(=-Mt; +SџAPi)ۆ^&E/GNݖCI58I`_f;ÈSLҏuO)Bu*7@;hۊ?N5i2U*(ՙ|_H{S^Ok Mm4g*a Ow& P:@k' 3R?ޭ2{q\<74Ĩf M=S|C}MP7.CO[&mvWθ*J.J[xaB:z& >Twl&Q"%^cPݣ(Hk_j(kˇgayDY7A-óIu3vfTȌ-9k &7`ұ'V;'7ߣ]Lg Uq1?lx +endstream +endobj +145 0 obj +<< /CS /DeviceRGB /S /Transparency >> +endobj +146 0 obj +<< /ColorSpace 75 0 R /ExtGState 76 0 R /Font << /F134 77 0 R /F137 78 0 R /F158 79 0 R /F204 449 0 R /F289 451 0 R /F299 452 0 R /F302 453 0 R >> /Pattern 82 0 R /ProcSet [ /PDF /Text ] /XObject << /Im3 455 0 R >> >> +endobj +147 0 obj +<< /A << /D (Hfootnote.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 125.485 485.742 131.961 500.294 ] /Subtype /Link /Type /Annot >> +endobj +148 0 obj +<< /A << /D (Hfootnote.4) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 384.003 472.193 390.479 486.745 ] /Subtype /Link /Type /Annot >> +endobj +149 0 obj +<< /A << /D (figure.caption.3) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 232.099 335.467 239.633 348.428 ] /Subtype /Link /Type /Annot >> +endobj +150 0 obj +<< /A << /S /URI /Type /Action /URI (https://artificialanalysis.ai/evaluations/artificial-analysis-long-context-reasoning) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 89.395 103.91 525.406 115.906 ] /Subtype /Link /Type /Annot >> +endobj +151 0 obj +<< /A << /S /URI /Type /Action /URI (https://artificialanalysis.ai/evaluations/artificial-analysis-long-context-reasoning) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 69.87 91.855 82.219 101.382 ] /Subtype /Link /Type /Annot >> +endobj +152 0 obj +<< /A << /S /URI /Type /Action /URI (https://fiction.live/stories/Fiction-liveBench-April-6-2025/oQdzQvKHw8JyXbN87) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 89.395 80.756 492.094 93.848 ] /Subtype /Link /Type /Annot >> +endobj +153 0 obj +<< /Filter /FlateDecode /Length 3313 >> +stream +xڭr6_1y<qʛqNDV9y8 <&#_hFj_4Mt7&|*Z~s-râ0ro(̒d8pd8.|Q|(:?]lyPms6lܛ0NM {_E+ߨ1-,&'B)h%n^:WJyi|'hA- ($Q^`#J$w^t0KNH.)\F=ܩ{UG:$@۝@1||cG+I(@=0_ӏ+fN0|p{4$`|IKC~]o8 ȗX.< Bo% 9tK__SFs?4O0%Vqa·^=]0&랄w@UKwW[P886Tnr/]Pq(Qc& \n({|Z_[\Z_>-Y07ZvZ\7e"3T; ww|*IF҅[?t憐57(Z(ױGNb2p;Gv04Mg0v]#gU[D^/K}CU@G-ѪVhΒ0g.q2xC~`Y ޶U\giedZI? meI$  cȉg!g EjthH0uT LC)ę3HQ:PrSe?P _skrYT`-alhde0jTH9^]{w8ARPU\]-6.s,1H3 4k {"H𶩯Ĵt %-NzM8p2s=;, Ln+ƛ UșAԆw.5CS!F+@!] -j$#>Y(s(#„3,'bP:e`2d&' +E<݂)а +JJʂS9OI![v\GCjc~4KBmA0qI (v JdQ2gDqYpo-W$6{^W8Ԛw Z@h9+䆋%5rs7Qa'_Š~I~`l4JH7kNNW+^pL PP-oXA8t4{]=F)v^BTZ:.gѧ!*}UTK(ĚW;4pD- #TMRraU0/nŵ`>`҆P Z[ߗM!t"Trvݓ{YpwycF0r+[89j̣㘂1DN]kCEeZcCY&ZRQ nQ;xrKf/ fSNj}9Gh,}qz[Z޺ .xJl8/'GN,F0 W馬kem6VLѭ֏ʁwZoL=;p=A$Ĝ/x7!}=?SY}F@hb ( f8 +B)*! G?8 ͱr_w-*t9X{XwVߪ3\P_ʆB`7efsȼb֠ tկ-M 2K,}1oX"0-N; +endstream +endobj +154 0 obj +<< /ColorSpace 75 0 R /ExtGState 76 0 R /Font << /F134 77 0 R /F137 78 0 R /F158 79 0 R /F276 450 0 R /F289 451 0 R /F302 453 0 R >> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +155 0 obj +<< /A << /D (cite.deepseekr1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 115.743 326.138 182.495 339.099 ] /Subtype /Link /Type /Annot >> +endobj +156 0 obj +<< /A << /D (cite.deepseekr1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 187.012 326.138 211.259 339.099 ] /Subtype /Link /Type /Annot >> +endobj +157 0 obj +<< /A << /D (cite.deepseekmath) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 215.776 326.138 269.72 339.099 ] /Subtype /Link /Type /Annot >> +endobj +158 0 obj +<< /A << /D (cite.deepseekmath) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 274.237 326.138 298.484 339.099 ] /Subtype /Link /Type /Annot >> +endobj +159 0 obj +<< /A << /D (cite.deepseek-math-v2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 323.372 141.511 373.449 154.473 ] /Subtype /Link /Type /Annot >> +endobj +160 0 obj +<< /A << /D (cite.deepseek-math-v2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 376.795 141.511 400.169 154.473 ] /Subtype /Link /Type /Annot >> +endobj +161 0 obj +<< /A << /D (subsection.3.1) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 119.68 94.089 135.309 107.05 ] /Subtype /Link /Type /Annot >> +endobj +162 0 obj +<< /A << /D (subsection.3.2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 421.814 94.089 437.443 107.05 ] /Subtype /Link /Type /Annot >> +endobj +163 0 obj +<< /Filter /FlateDecode /Length 2333 >> +stream +xڥXK6ϯ_[~מ=`D`DקݐÖD<m#_ "QIZhqȔ_h~z蕻7ԚI4qLO"f*nݶPGd3>HulӌWߋa4Kt'I*FwQfZywH-j8 ZLyģPǡ +ڑ9HDeJJ!v  uP8u4{;yh!pT}P`+2WKA,g3Qz~J%gxPdD8*V_9;~!`5J$|c)1gĜa3ZIKi .=$@E6 +%dqn}ASL04F^`y"9E録f@ *oږ L@H7a` %Ima*F;ʶ؃m!N%WUGϻtEA<ޚf,6Ԁ<ϴж d PzHW@Uta=D@+zrUeQrpJ>~mYND8WRqBoYyKFTOp>[u?֠hG6gj&P @ KA8QJe~w/h4i 5?kLH5@)K۷]ᙁ^#N*R2R%AU!_'8Z:Kq]Ei@n屶BPgpgxX2Cm\^JFA30RZ/"x*0`Z 02 !YD!RH;jؽ)v5 tMUX y1a8T:h}ZVI31M{v +m 8{!̡<6a(@7kWZpMlkmY +#!jJ.@<"c֮n@41(Iy)!`R<|~;ط}(ST2n s@CyY@䂔g3v*/8ĶY!>:ɴL@ 4ѿ/K0jR$FHs%_{_hlW 7DD\]T|n2QBBfdSźccΪ+"W䲪dx x3},qDih 'le7 +endstream +endobj +164 0 obj +<< /ColorSpace 75 0 R /ExtGState 76 0 R /Font << /F134 77 0 R /F137 78 0 R /F158 79 0 R >> /Pattern 82 0 R /ProcSet [ /PDF /Text ] /XObject << /Im4 456 0 R /Im5 457 0 R >> >> +endobj +165 0 obj +<< /A << /D (cite.schulman2020klapprox) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 135.591 379.192 184.73 392.154 ] /Subtype /Link /Type /Annot >> +endobj +166 0 obj +<< /A << /D (cite.schulman2020klapprox) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 187.647 379.192 211.021 392.154 ] /Subtype /Link /Type /Annot >> +endobj +167 0 obj +<< /Filter /FlateDecode /Length 4377 >> +stream +x\q~+$ت#2GT]U;IKbK_8<ڒ%}Y1_tgd+2WŌKgofF4d9{W7~ۡ\RYTf{3g_~a#Q#•Ѝ(0^J-go70n,/jm78PSM_vڿݾ]:c1k6_߆1x߭œ-뵧N݂R 8u%LbUjNgsZ*<_d$Ukǜu3m̶=>f*wx!MG3:&!wsnNLѥ faXTxыcVti0i>z3FW_]"S|g@I.JVDyJDH5Z_rV^s$*vYGgGҭ)dAy~ 8EݱԆ߃oTCUڷwǺvB^fYJ ,gsPl:\o'M,.EP:짦2M'H/QDA3b!&1Z bUO,pzW߽bTpFWLfKxXQ:{tM70ǧͫHAq0+QnSB!f`4 3㦣%E)@M*~ d-ĖD<6ocJJa)G9SP KS@GptbouA'fs©K3zb#,b\^+W%5z^K!H4~ ?V6TR!axmlDQNdwQ{TT,%my1 +䫝1y#"%+wLŦ;iAf;^32WG_FHWg+~QUyLR`aD꒨)8#i`V ++.0۴7snCâ~w/\ڥ6Pu_Тz~v/\0' lJLQis8IҜw +AJ +*T +8IL;T8TйE3!9+Pm>pU,vgag5~x|g9\ +j=-aaq.퐁u='Xd9/rP/d5I^NJ8~ SN3ni|A^r,)mwWrJMP5c(u zBۨd"6K?J%a~_\봒A S[F8$ϦY]CLg}קVNOj,ؿkݣz&f!Pc.ꬠvz!DpBU+٩쵿}]8Fr`M/ջo|ժT xn7}/[_UY6^=6\[/p#P:ۤuϪ!ߑ}ۦ.>j{ ΗX~G2#3ҖJ;RⰐqN` ^U 맲1*AQsu#/d:"G7I5 u:Lv<cB8 FS|FjNМ .-o,VL09;ܙ +{< sjsmZoqUxv̇pOF鹲qC$% r; 슼$\$!+jd_S: >V*#PrvSfsH񎿼6_<:O2Hu}&_74?ʌN_o._KbޯuCpEgQ7\xA{|ucRp}DLM1 +^qAKa&8VPlN3sUIl~ieh0gRWC!^MĄkFpޥp\;.nSo;P\*Z6>Bc~h^g_SRJ +NiQM:ۧaf9_`twh14sShZ4릫|͍U_/v.xL1-J)CUmѶhWa֕mXT6M:XÔq SsU `uu[a?N7ĽanwCa*C{vlM}r%A:oa}҆%#OV.f±6tHmt]RN6@W/G`=z}qGI4UQBLl] +\-@ Q90o#֫N4u^۪m{'aplڽϵ`i]DޭRn^hCYN Ǻ_92 -Qpn>`vrmvJ}Q1$Y+X5S(/#?sMm +%QU_.k<<צX=&lYw 9x.qC|^Z!{sOUI'44>-զYj'PX,CXfKpq!UKRҦt!|ntmwrq|Óki0}jH3 G-fx\trp1lJRBBn(3\P/h$F`ߋ?@|{XW3ۗf2FTc(Q*=ݦ6M+- s:zt:SmCR(\&>',h.(>:⇜:|hvl~i^i a1')ĺF''-k2W 7Q= u>?HeMc]p>梛޶a[GYRpvQ +endstream +endobj +168 0 obj +<< /ColorSpace 75 0 R /ExtGState 76 0 R /Font << /F134 77 0 R /F137 78 0 R /F158 79 0 R /F204 449 0 R /F289 451 0 R /F299 452 0 R /F302 453 0 R /F387 458 0 R >> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +169 0 obj +<< /Filter /FlateDecode /Length 3923 >> +stream +x[qb n%+'9 3]fsCV޿rV{'_Ka[ ϯ߾+|f70eya*Ի_nΧ>]VYԧ몯;j|϶=]"w{֛5CuZr*EA]_]7anCs_aG5[ǵT6=]hGH\*w4E>>@Wro su"T}@{MMuƅAgk7`猕"{Uw'*"~O2xosۤ˄u_ׇ Zw󇀦2PDQ1i1PdYjO!yic9[WkڮnHvq`œ̑"9<=z,ӹPj9ͰBO07xsQWyaU2=^=:fuzc{g/}}XVusNqaQlE1C Hf?ڮEt5No-uNv # +&0} L ǡTJ)wf0,gEUcjڧ^-"/^}\x+f-Md5|tٿ,+Y)߭ FZfXv5]УsN[:B^^Kx8~u,7]1gZpKbrfd:@j"ЋE4iIX/!Fbe)j\:BRjJJƹcu^8P"YjcT?FphFⲤˏ$pz_D-( Q%ciWwa-:ɨWnݭ޼/VY3"g|\+J0llk‰"`r#RQIGQ3Ä0vk]A9 fBҹz4E'$zkM9a'^P, n;mnr'#|R.j1s4 ~Y[f [ oXk?D"卯yCkLn^氈5W7 +H[C" HC]>Oy4j#e{o6ӻqz9܄Շ }{2='3SU!sf!glҜhhG92f5cڛFm6w25D7uOk$;\A + +lC'?M(lV]$o =Q8~w}o C8Qvh~Pg{pqbmi mPc)X!oF +'M7Cnhln]LjJ-{*#ۮMlWWÐ}M?5>j |q^5w L)s\.Ő'/'6DDTrzD?5tH#DGn(nsMFmN(TgXKt>;kE EYrMn_EVͩ ~^w#t^Gq!(ǡVgoKjH =B3]&vREӅ~B?7GZPu9;=?Owu%šAJլJ,# +d߶g'spx3h>fʬ^7W@EC&ue$uZOܻCvv;܃ouB զw?U2)  &&Vw`~v2Dib;:M{_ҷI%JƏ:VlG; YTz+,R06)ܑH8EEUa)uNģ1>oI8^I9]ᅴC|KÜe@ h+EP|$'M%-魍c +f"mޜ7wqwN*F+8I,AVק+W(Dk>3GP`zFR}i5E₵p֩εӺ8ǡ!k`*C1Tq=3}zTOVwXu7ZO/i.L::ه6k/HP + >W9 >InꉍwHKR#Хv]] PJ#ūilRoQ[o 1,vv<2x i ߶q̾i]:]qamb}ȚDӳxD~oxBΡecqj֡ kTfPm4ۛ\3(X"TVx322:>ekKH4aīR7hۺF݃C/t't Y_:!*qTWac.'s="jE4(GhA]|{*{ۇ |n.V' x\r E!bR@nobʱ +'F?Ͷ3='{Gyjڵǁ+:Ex ޢ3ח|gԦQgP~] t$fu%:̍YO +ܨޚ)wnU6DMzoU0Q4lQ8) QvD\e箞$X> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +171 0 obj +<< /A << /D (figure.caption.4) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 195.356 595.567 202.803 608.529 ] /Subtype /Link /Type /Annot >> +endobj +172 0 obj +<< /Filter /FlateDecode /Length 1858 >> +stream +xڍXM6 Эڙ!%$Mδ3MCWl$%;__dm3ɌIIXm#n^gDty2c%JSuaiqLM{w+m7:TxI^~Fz՝GS`UY)n\$|_6Kr8HFwwFҸS#Z8T+ZNVs$UOzl{$cHߩNyYBбa4M6Dݛ֌4-&AݾhNvαMɴ?:*؞ }áw eY| VwDQokt;sգjO0̀B8MjEպWſrT4ʳJp^Qpe>(T޷g@/!b9IƸZQx>=q_>,)0jYl>|CxqKB8"'s&impk% [:BJfUrIY"O_~MoMNE^L]hRLU?7Z"B^% Ax>1!Ov@~,E8/,<igt~4P{n nBEe`U8hRϹ<~b3+ZgvT^!zW \iKHà:}݄̌#OGZA#w/Й~Z7BQd,,rVIu!p9/!3HticИZ`^sBPhNCؐx +LJy*Hp$) <2<- N&ԓ#xj=a3upGʱ5>G^Q2L7+eij[zo/!B +ُv?rGB 8qA 3U(;3zBI姻e.zÀsR8%bˣ770 BW\iD\&r0Mj jx9ڨ.1nl N׀K *I_}?$թoޡm0p0d, wi> #*BI&QFE#̼PjYy^1>8F&Hlt+ ݉jjЅfgrp<8ܣ%e&CɓoRJ%r.»=nɮpW"#K쏞1U:LTC/@(:iSKՏ!>!KvT]O6l#=q>? +R.yqJҹcȀ?ɒaV] +1||)lN +pOR/$qd\% ) +endstream +endobj +173 0 obj +<< /ColorSpace 75 0 R /ExtGState 76 0 R /Font << /F134 77 0 R /F137 78 0 R /F158 79 0 R /F311 454 0 R >> /Pattern 82 0 R /ProcSet [ /PDF /Text /ImageC ] /XObject << /Im6 459 0 R >> >> +endobj +174 0 obj +<< /A << /D (table.caption.13) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 243.158 728.27 250.714 741.231 ] /Subtype /Link /Type /Annot >> +endobj +175 0 obj +<< /A << /D (table.caption.13) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 254.285 728.27 261.842 741.231 ] /Subtype /Link /Type /Annot >> +endobj +176 0 obj +<< /A << /D (table.caption.13) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 301.968 714.721 309.306 727.682 ] /Subtype /Link /Type /Annot >> +endobj +177 0 obj +<< /A << /D (table.caption.13) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 312.659 714.721 319.997 727.682 ] /Subtype /Link /Type /Annot >> +endobj +178 0 obj +<< /A << /D (table.caption.13) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 309.446 701.171 316.898 714.133 ] /Subtype /Link /Type /Annot >> +endobj +179 0 obj +<< /A << /D (table.caption.13) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 427.197 674.073 434.671 687.034 ] /Subtype /Link /Type /Annot >> +endobj +180 0 obj +<< /A << /D (table.caption.13) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 69.87 646.975 77.426 659.936 ] /Subtype /Link /Type /Annot >> +endobj +181 0 obj +<< /A << /D (table.caption.5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 449.218 465.384 456.665 478.346 ] /Subtype /Link /Type /Annot >> +endobj +182 0 obj +<< /Filter /FlateDecode /Length 3189 >> +stream +xڭˎ6IQO X,dZ[O~XE{0$Xb=$6?yTF|(E< s6Y9.77E7H2Ƕ釓 M Y6zZ/ۺ> ~472(6`MkmlOID&SQH,tO> +lCS4Fo@6=J?GQ7[d4{Ӡ-M7cO*)Nt#=vn8f< +EoK 25*xÁFE98$as1 8R( +'_ypP?zں>;ь6N +wmSm\&0c" A}!ݎ2Q|2L({8$wlNR.dz'F$ZWH4!c[zUTԓ`gZBDt?&y%K٥Y8elP4wAi`)4_[“;9tZ-a%c`Ϲ|4)shf{zdK7p0er`N?'mptk϶Mo,m]vڞMF|G єO-lar qh4Z V Mau쨥r4rp \*]3\ Q:2=* c?l֓uxY by52 e}iA像i@oٙá=sy$Dfk'8*)C6>&O*`Ќ>Ҡ嗙=;p pv.*X%Q]14b.D/KCPp&˷$̀/i٣&;x=YC 5"HsKyכg.hSRPdl6EAit!>M:!ސAA0k)L0 +W!*O6ځۛgɽ&$?FrD#w=ޫg.cYn/wfm +av%s%Dx COG F1aF(ޣt%0a/**.1'@frJflbYOX}1[o}hOuEsh?ϬEÙ.<s)[PdBFE 4["sAV(EpEF +euE>_%2!ݨT1Ak~tWOP**B4*bZm_v,0's*te-sGSY&yJ $%pD%9&_ $:$f\rDq PU|>ʾU.р +l Y^/? +|#WvT X/;hAslB׵Uz0*~_rC+^7e8&ťp/Н ֬h*I`E +Qn\R1ۙRCz'./aL/A3/EM,噩/bGۯw!O2h%3bW? 7t`nޚ^5XJcHy)}VYJٗQ3ϣ`IWEq.#MQD-|=%l*G^nN3,=q;^lY3(z,كӮgF*ybf>ymL{)Xtżc/] Q\LEgȯ 1GN)7nsU1i=D\DQS YqM51]K>~}+ Lh rECM6/E +aǽveF+kg$!*؎u]siQ"Ǟȼ}7پk{۸)6kZXSmBǾt96͍HH0y_5v8E_t9 g.չc#ߪNjk" ;YI沺< ߄fp#r)xxsgԮ6 +oT{i<akx&T1`vg*M$#Jfu;@Ţ?ew}^}u}fn;>c"> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +184 0 obj +<< /Filter /FlateDecode /Length 3271 >> +stream +xڍZK۶WhW>wMډcߴ $qewY + lsڰoo|xYXom&ca,Nܼl~ ~hiqI^|_w$Sl~螊`,uJvO<NjחR[3*A+Z tE8co7GuoqMmb%BG(l\tg0*X戳݇p}T}9Rwhm.~N4x>rͮf;}jpW7'+yxf@y~c,d/>ƞD˃; V'Yӂ?pȃ_U[8}nO֝duyr2L, A(/n8 A}CdΞ<H ƤۮՕ$͂SS:򼥳ЁphՈt$围aZ$( 1{+84 wNSTƖ(n:<'J#K8+/m`EE!SQ=8]3=8(X_H/(pd AC|U%&SPΉ\4ä ZUT]I1l +fa@:I|}v$Jk0> gRkK+H4dw$*lGǛM[,Q?=q㩓'd}ᾝDhN@M3Y@{u1LZ/Ȧ.1cY?B1 M^ϪƑlr4L;9)4m?51!UJ#qb̑DQV ͮmz=&g>PҀ wp~A`V$Cx-\pC\jĸ/6Ξ#+'ǭ{QO1@r$ yAI 0W7Hs"7M5/0JVҵY\fpb(DStΐw`n.G,C>sKm#rD䡈foe<]u1cZW "`-zj<ݰ D;"gOey<j1[m`N Cwsb8 3.g?fNHƣQ6Jwc{Ծi>+/,=Z &CC}88ʼnfc"yJa{,Đ +jrQ \i;ZRZ4G3LBsG%~J(O"By՜ti YݚdRCN+ReHX}%T4T@&0KZyl\Ap;B42\M^q8'V9Y2,- _|}*.\oqp]1""H +3Ia5ba=ƉΒF"*ͣ]Ӂ (u8 U/aո(U*.oyPFbʙ(eHFH)إ>BX# ? +'H֢REv ļ)ׇW\3+S +0OJ5Eğ^+d0icb⢜F)T9cUbrl:vhNxK9KXf$p[D^=u"V#DT%x^y9Gv3r4w7vQ/穈}Q!BP{v3ȕ3ڋ#ꔕg/8ؤ/:&~uCcH]Aeu\x@afESF O2!55dޱS9J 8.S=b9Uwl +e +pw'H,'p{'%r{ð9sVON+;* /mU[:Cd6˫Fx1x\bDG*"I#/* s: +Q!ߋq -{s,kEBi ޚ8҃EvnU1#k&12cFG,[g,ckԳ&6M}]Ι*{<օ:8$[)޷k[niy5µl+8"l 9K a<j g|2Gï`oW,͐tO9Y0@iEtkd^/q@>[vm}TL-ЉVoop]EN,+ܻreQN׊zI[l*_X,NB^!kq\X q "̥e/m@CMXVDHҹnrwXN| $ +(\j0S]*ڜU xÂGj+gl6!' Xӝk#P=Ӯpfx ih rMxe+ך(> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +186 0 obj +<< /A << /D (cite.mmlu_pro) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 254.024 98.436 312.166 111.397 ] /Subtype /Link /Type /Annot >> +endobj +187 0 obj +<< /A << /D (cite.mmlu_pro) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 316.585 98.436 340.832 111.397 ] /Subtype /Link /Type /Annot >> +endobj +188 0 obj +<< /A << /D (cite.gpqa) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 439.348 98.436 491.617 111.397 ] /Subtype /Link /Type /Annot >> +endobj +189 0 obj +<< /A << /D (cite.gpqa) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 496.035 98.436 520.282 111.397 ] /Subtype /Link /Type /Annot >> +endobj +190 0 obj +<< /A << /D (cite.hle) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 245.421 84.887 297.36 97.848 ] /Subtype /Link /Type /Annot >> +endobj +191 0 obj +<< /A << /D (cite.hle) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 300.806 84.887 324.421 97.848 ] /Subtype /Link /Type /Annot >> +endobj +192 0 obj +<< /Filter /FlateDecode /Length 3029 >> +stream +xZmo6_!KeU/.m6MZ0]WH8f8CmNHr8Z\"Dp) QǁQ&ʒ`?y7DD:Kmp ,hFZK!# i}|WS6 W4of3wKmZŻEK$rٜ1Qf6дu쨄񇼪xY}ց +&RcSU;ix8@[k :@\ JV xes=;) @\QAہ (0؃#OQ1 =# H|y\=|KTJk4oHhTT}) MvT|f/h]L˫ڌ6ȱc-iB>ZP:tk%!9=TD)՚~qXs溨 h s ჳk^>]$(zwL)@Og*U@RPoPVPG=& (>-:pw70J2P4wuD,{^ePW}yYVt*:_<47>w-2[( [XgoXmjsA!'r4fkuрK6>w渶T"``{gDpL%$߽6RePUaпtT&-6Ds h +l k Huw"x0``TP2W0I#%Uy" }7Q@~lӠsw 2."39箓`#Sgop?L :O" O4NpAt: +~8y!*a &r"Y@ J %90]c؁/n (N|DS 鷐uTf'1DM劍K4; vȫ=..o/W2t/!} : WlS ¶wcK)eH1m9w]:qˢC K$`|dd\77y_]qX !@"gGŭEe,g?L.'Ś(r=2d&%GL!=ä< ++~|z\GPl}Bᆖ30P(qߢTyW_ɫF$R"IPKcYy bU0R\sK&P@cc6w?UqC o]o +_7M/VY^7WP[z~ʹcA(5>o%ę$>ށ_ex1M},|wkw;8m`Veu~c5VG7!+qY7~iMvib|o9+Ÿb L:@rT``y#Df;pD;:ȕ`] *;KXZLH1cAj6;](Џ9N;b8 Jj +=b%၍?NrhhM!S ˫C> 3E PNITn ɷX+|k +e_+N$'͆@}o^c}kxTUtF5%_ 8WO2ӗi}QpąsqWvi +{ù{:|A_ g !Ê>r1/wK+[uDrfCWHAhXI_/4 +endstream +endobj +193 0 obj +<< /ColorSpace 75 0 R /ExtGState 76 0 R /Font << /F134 77 0 R /F137 78 0 R /F441 460 0 R >> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +194 0 obj +<< /A << /D (cite.balunovic2025matharena) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 417.349 741.819 493.184 754.78 ] /Subtype /Link /Type /Annot >> +endobj +195 0 obj +<< /A << /D (cite.balunovic2025matharena) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 496.655 741.819 520.422 754.78 ] /Subtype /Link /Type /Annot >> +endobj +196 0 obj +<< /A << /D (cite.luong-etal-2025-towards) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 164.406 728.27 222.477 741.231 ] /Subtype /Link /Type /Annot >> +endobj +197 0 obj +<< /A << /D (cite.luong-etal-2025-towards) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 225.838 728.27 249.212 741.231 ] /Subtype /Link /Type /Annot >> +endobj +198 0 obj +<< /A << /D (cite.swe_verified) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 420.916 728.27 461 741.231 ] /Subtype /Link /Type /Annot >> +endobj +199 0 obj +<< /A << /D (cite.swe_verified) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 464.361 728.27 493.647 741.231 ] /Subtype /Link /Type /Annot >> +endobj +200 0 obj +<< /A << /D (cite.yang2025swesmith) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 138.382 714.721 191.196 727.682 ] /Subtype /Link /Type /Annot >> +endobj +201 0 obj +<< /A << /D (cite.yang2025swesmith) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 194.803 714.721 219.05 727.682 ] /Subtype /Link /Type /Annot >> +endobj +202 0 obj +<< /A << /D (cite.wei2025browsecomp) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 299.786 714.721 346.647 727.682 ] /Subtype /Link /Type /Annot >> +endobj +203 0 obj +<< /A << /D (cite.wei2025browsecomp) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 350.254 714.721 374.501 727.682 ] /Subtype /Link /Type /Annot >> +endobj +204 0 obj +<< /A << /D (cite.zhou2025browsecomp) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 469.136 714.721 523.988 727.682 ] /Subtype /Link /Type /Annot >> +endobj +205 0 obj +<< /A << /D (cite.zhou2025browsecomp) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 701.171 93.244 715.644 ] /Subtype /Link /Type /Annot >> +endobj +206 0 obj +<< /A << /D (cite.tau2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 148.301 701.171 205.183 715.644 ] /Subtype /Link /Type /Annot >> +endobj +207 0 obj +<< /A << /D (cite.tau2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 208.55 701.171 231.925 715.644 ] /Subtype /Link /Type /Annot >> +endobj +208 0 obj +<< /A << /D (cite.mcpuniverse) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 315.506 701.171 361.424 715.644 ] /Subtype /Link /Type /Annot >> +endobj +209 0 obj +<< /A << /D (cite.mcpuniverse) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 364.791 701.171 388.165 715.644 ] /Subtype /Link /Type /Annot >> +endobj +210 0 obj +<< /A << /D (cite.mcpmark) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 454.684 701.171 493.795 715.644 ] /Subtype /Link /Type /Annot >> +endobj +211 0 obj +<< /A << /D (cite.mcpmark) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 497.162 701.171 520.537 715.644 ] /Subtype /Link /Type /Annot >> +endobj +212 0 obj +<< /A << /D (cite.li2025tool) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 174.331 687.622 213.568 700.584 ] /Subtype /Link /Type /Annot >> +endobj +213 0 obj +<< /A << /D (cite.li2025tool) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 217.691 687.622 241.938 700.584 ] /Subtype /Link /Type /Annot >> +endobj +214 0 obj +<< /A << /D (cite.mcpuniverse) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 73.215 660.524 122.542 673.485 ] /Subtype /Link /Type /Annot >> +endobj +215 0 obj +<< /A << /D (cite.mcpuniverse) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 126.936 660.524 151.183 673.485 ] /Subtype /Link /Type /Annot >> +endobj +216 0 obj +<< /A << /D (cite.mcpmark) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 241.768 660.524 282.394 673.485 ] /Subtype /Link /Type /Annot >> +endobj +217 0 obj +<< /A << /D (cite.mcpmark) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 286.788 660.524 311.035 673.485 ] /Subtype /Link /Type /Annot >> +endobj +218 0 obj +<< /A << /D (table.caption.7) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 417.152 167.247 424.708 180.209 ] /Subtype /Link /Type /Annot >> +endobj +219 0 obj +<< /Filter /FlateDecode /Length 4029 >> +stream +xڭ[[s6~ϯtfgNJ/IMܸ6%tEʊؚь@?;7lr9a1ѓ\B _Ldhe>YD$V:Lu5\T~|2ZOEfgUqsYToxuJ *8==lv?V]+>2͞Ŧ󓩎"R'21nO1|pj3"J^}Zl,+KfSx'#l˴.D?\ٺחo>4]uZm #i6i 2)CAUy,z  “bA6vj. +֮+]d{6V-MbKtV'!W3\r<- +*A[hefGrwߪZdEM!P\PmSe^~"nX-%O[76|~BmVP+rz:D`TCۼYRڬMF4ؘ:@i>Yy})WY8 P[g^pU7u~t3( g~Zܘǃ iuHd*0v6"P(M/YӀ,D: ٶPdl6VְnԞ~G&tk_)+мAeh^$ST^JX& ՠLU֯"pCOqS›P7A∴^ۥR(V8f\\DO2 +g9賔s`SYW%yikFR?llۺtq10ܸ෠˲ iJluTXNt"C\@ 39sER,|Lb%W+WnLoաUDkY +`aFq0{i=(TZ {a(s+xRF`ؚ-w殉X~\]r&CTWf2hb4j}v`=`w RVc9 h8H1 +8֝@mMM-= mc-(?nV3p[fUz䕓 kԱiyYLM^#7* P*e효I oLB!%Q*z2jt׭ӏw%\:7°f!0h(t/Ƙ. lD":x]t-΋m۔j#r*H=keg K87vF>@{4_9 +g|j/+7e> ΋G>j qOG~g'Q2;W@%P.&wjN\`k: +3{{AP #&tX[=͚u>a%b`D ])MY)0F!Ms;A,EYdSX)g`mE02]v>! NFq8$ȁbuʧFY8g5 bX.V B{_%{~ 0 +q$AYWHuclԬrjNﶚHPfw)n&y:00e(o^UU\a!/}D̒a 5@83e K@uBJ"v~G#vPeg8^}Qķ"zk(9 I/j?@^CD%;w2b 0bGCխ#mۦ//t`G!]M}3i٨x%u xzbƎj67yVwiA(Nsl+_+Ō`KU (.ƣb@`^T;bAL)aIk㣠nw˘eL&_T?;!wo #DԞoʃ'3&ӐƷѨ /4+a_4R/ s?hZq)e]u ئaXoA +z٘F`Z0%A͔\3d'bg`[}nL].%C|M\ 7eiC{]!6VnY UkJ(2v¨6Z63}2 +.2jliBi.9ujրr}U?'/%.N׭OO[;q4/.~IL6:m?Z^r^iCY)ePR4P8X + f^8[Bp.隞7ouXUe_mezguͫM{IA&G$E%hw i rda;.|9nWjgeeNGV.n-<ϲkAxy +A\tyU#1W*p)˛ +::R;3Ʌ+5U: xRKy)OZ.6fIj, wK]gG[> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +221 0 obj +<< /A << /D (subsection.4.2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 274.686 741.819 290.314 754.78 ] /Subtype /Link /Type /Annot >> +endobj +222 0 obj +<< /A << /D (subsection.4.4) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 258.169 538.581 273.798 551.542 ] /Subtype /Link /Type /Annot >> +endobj +223 0 obj +<< /A << /D (table.caption.14) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 421.367 315.019 428.814 327.981 ] /Subtype /Link /Type /Annot >> +endobj +224 0 obj +<< /A << /D (table.caption.7) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 97.336 259.588 104.679 272.55 ] /Subtype /Link /Type /Annot >> +endobj +225 0 obj +<< /A << /D (table.caption.8) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 286.222 232.49 293.669 245.451 ] /Subtype /Link /Type /Annot >> +endobj +226 0 obj +<< /A << /D (cite.deepseek-math-v2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 69.87 191.842 123.063 204.804 ] /Subtype /Link /Type /Annot >> +endobj +227 0 obj +<< /A << /D (cite.deepseek-math-v2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 128.128 191.842 152.375 204.804 ] /Subtype /Link /Type /Annot >> +endobj +228 0 obj +<< /A << /D (Hfootnote.5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 103.404 164.744 109.88 179.296 ] /Subtype /Link /Type /Annot >> +endobj +229 0 obj +<< /A << /D (appendix.D) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 386.655 164.744 397.091 179.296 ] /Subtype /Link /Type /Annot >> +endobj +230 0 obj +<< /A << /S /URI /Type /Action /URI (https://github.com/deepseek-ai/DeepSeek-Math-V2) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 197.595 80.756 444.453 92.885 ] /Subtype /Link /Type /Annot >> +endobj +231 0 obj +<< /Filter /FlateDecode /Length 3534 >> +stream +xڕZ˖+x:+[g+R9B$"Pϭj8''+tWn*2Xl|zxmEEP" ؍(jn}-b4lYr{uhb!Re۷KYϝ*;D$IGXN۾f + ;hlG8HA4!9eo͚ϰ +F8 ɟp+Et2&q䧉 QDQpQgQ+=Hq} $|5T~cQ*+>|hqanٔ{nYu7=&b~W8h"BFw܃^ir3vcXmڪ޳A˷"@1l=vF!`:S@iN\N}[+BFr=Tqawh<Ԛ⾒y3&`I-PIov6C/玐~ nXmȻaYKȜ`ぉx$ + cŞW <+B x7CIٞ%xb\\ +*^0C0w2:1v|[M$vq[mXD+<FaF6a&תr$3D;Nƺ*`-W[q+sP)eR@o_%cDK3V|aHw0 W#BFЖOCUh +)ʤ!"G1<~~LP +SJ48#v̧= UZ3%8sa6Sޝ S"yZ!! (:)P7t2cjbk^Ae\78(dO + $8[ՇW\LW3qEyS**"Ӏu3 <=0gNce8vA,ʝ{HSj5o^?C~ږ6KEEabS;5\qOB0Y 1kۃ[kBLVRg[4I5Kb4HEGg6%9˙~ -O_XCAM+@6mc\9LBH +%\b9 gmbp;){HClY6y}[gj QXI G9 ,]WY=Ev懗/7ʸ=^0sCt)ca~!\w 9# 2¦(K/u^ +endstream +endobj +232 0 obj +<< /ColorSpace 75 0 R /ExtGState 76 0 R /Font << /F134 77 0 R /F137 78 0 R /F276 450 0 R /F289 451 0 R >> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +233 0 obj +<< /A << /D (table.caption.9) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 160.116 196.135 167.508 209.096 ] /Subtype /Link /Type /Annot >> +endobj +234 0 obj +<< /A << /D (figure.caption.10) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 235.274 80.967 242.612 93.928 ] /Subtype /Link /Type /Annot >> +endobj +235 0 obj +<< /Filter /FlateDecode /Length 3360 >> +stream +xڭZ[w6~ϯKϡω\ C7M4MqCY-%) @iuf`$,yp9&,s:iaL&<\%_3ղ8Sy0I噕r8r.2npE5[[ZX_մyJjN-oY cRm}MXL*jZbdg^Sb:[PU\9eL meV#ef!EcX:6'FH+KM{iogjӬBEi`lEA͢h}ˁ'C/ >@L8(EWr/*qŦ|2XM5/˲*ѩgq9+2tK\$ճ?eN$+8%&ϸXw̡@JT3#$ɧgtc'aIo`4dzr>?/32$3cuxs!҉ H7ŪʉH+W8zǢTLxh\HP|̬t[f̴r}dd6&'rwH&"g$Cְb]M9(]Yz1o²̐OU']1+v֎\JԖ}n1Ζׯפ j:s||(Ŵinz?ȥN|k\ӠG;L +vHvD.pcL +3cȥDJv[* +mVAx6r|@/PDj'$=qD,#ᒘ9/N4ϥH-⮜h#@+Y+OyuR)yhZٌS>Α:vSߟia,P<3)թ63247q|:S nG=>t o?||Y5O8t4& +(+ }xm^{Tfzr^(y"xT[GU1C~_ fx'>^;va `#t;;30>Cc?eyهt,15^z2p2.+pB;[ҎTnpq@Rd?$0st N S apNa  ~aXYn" r{a}ȶ"\c9]Qu)x=J-PT,q׫-^o9+xѨslDE:^pXSJHz|w>d,l:JLh[/@//3酌M*tl1lLXOC1cCJdL˘GGB2Rc?Y9Yriq+8I ++MbHPR +h6)<s 84q&^p?b-fIX2Fm":Yڔ/rNO^p0M-DvSIWPظDw>;K_ҥtH^*пcgӧRvH#Z~n^n5e8K T&s<ůMݲ\"b/FON~@Lp)\Rq+.eص2 Wn"@f,]/o +bsy9Oms(JQX5Lv~[]Ӎ, oClIOMIűPs[kqװ5t:.CO[5D5O?+uOLt:,=)j؀5"LXfEWN+cL5>ҼƠiA}lC2 U8}ú;o`^/CGoz͌^a,whB)ydN4ws8l9})T-pi<[n摂D{YpB=f 3?l?lHp==VCo΢s|K+AJǿ؊i95BRC.7;ԐbFXH> _`#ӻڞ!-,n}:lQn꒞E + Q>{6/5#ރׂe4|'s4uxMgKdTJO˚MA}IU:` +EFlNq+]kФZQڑ_"c]&jBaWx  eRዢfy:{^B8J4,2"u,5$a5y_uek,V9b +Y9 / -N/yI3[^ۆwvF(Zͦ-r귀b($!d, +ぶ;=. +){RɁBAU7'ָZYUM +endstream +endobj +236 0 obj +<< /ColorSpace 75 0 R /ExtGState 76 0 R /Font << /F134 77 0 R /F137 78 0 R /F158 79 0 R >> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +237 0 obj +<< /A << /D (cite.opus4.5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 259.646 96.963 310.131 109.924 ] /Subtype /Link /Type /Annot >> +endobj +238 0 obj +<< /A << /D (cite.opus4.5) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 313.529 96.963 342.303 109.924 ] /Subtype /Link /Type /Annot >> +endobj +239 0 obj +<< /Filter /FlateDecode /Length 1795 >> +stream +xڭXYs6~KgIӗI:=qk/I`XPxXq}XP3!8v+h+zan}-YhӜEMĄL2LfHh]FzsbjDZ'>=>9%[qۢzS<-ǭmmojqg[`48f4 Qt?zf}F \c KU hEhS&nLa^GW=!Ό$K(@Qc/`H9aB)j4WDH)& ֙ V/"y3HNh EU@q +Pj"S/AE"!.Oh|4 Aq3.LP"M Yr|>酄S͏WT~/1)8\W?6Y-}v'3?OAm_}9GQ5~*j|i5JcQќ׍yP HGM[>h~(s +.L[gy fPkh] SRW;7j8SZ{4]pa(lkp m7j^7]ߘEW-p$0O_mǐ5ު_E| .TiRH0%%IJ|O!ޙ­9ܬD(9\r.9Tx7!(59Tgٶ 6ewpep G9<2@ayozXjtIբ + $c-<`b hIIIy@S0`k:x lrV'YH~_w)I`:\o+dIeH}KcJ%\_rk#¿b@0wRy +]Kzei"3u~9K(gJY[5 +3wLٍ ><+d\%Ymwj(\qs;5Џz㰫zr qïElsUig&3o[]HkL05b y/E ę}ĮiڕH=/y +%u5/_-h* 2Btwrա e_@@}';U ~jX.^$8{xxw`zw&#>IݷM>q~óyd Pu|l췄<"t'b 9UPvg,Ik(9IEq|7[3w*Q)W@\-ɱWruňg&70 NB8ݻ^e[;]uX31' h ؕPYпY +endstream +endobj +240 0 obj +<< /CS /DeviceRGB /I true /S /Transparency /Type /Group >> +endobj +241 0 obj +<< /ColorSpace 75 0 R /ExtGState 76 0 R /Font << /F134 77 0 R /F137 78 0 R /F158 79 0 R /F483 462 0 R >> /Pattern 82 0 R /ProcSet [ /PDF /Text /ImageC ] /XObject << /Im7 463 0 R >> >> +endobj +242 0 obj +<< /A << /D (cite.wei2025browsecomp) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 380.134 462.625 425.094 475.587 ] /Subtype /Link /Type /Annot >> +endobj +243 0 obj +<< /A << /D (cite.wei2025browsecomp) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 428.43 462.625 451.804 475.587 ] /Subtype /Link /Type /Annot >> +endobj +244 0 obj +<< /A << /D (figure.caption.11) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 116.752 449.076 124.286 462.038 ] /Subtype /Link /Type /Annot >> +endobj +245 0 obj +<< /Filter /FlateDecode /Length 2169 >> +stream +xڍXKs8WrUEQc7[afDۜHW;_? ʲJU$$WU|<WlU$QHYbUwҲJ7a2O?w9$B统W,ʸd*"V"aQ^<ԯYu8{7roaR4v>TZjsTeNz[vxЀnD1uKٕH A?i5Dֶ7gBFeZjT5Ϟ?@l:U~SuVp +o1_Ye |na_e6-u$5=b9@ۃcgurt({7] Au_Gٟu)XfwjhUeQ8NT)ߍ5Y; z8uPָ\ +#ɍ2!% vRwn 8јZ V >J64:9 b\qܩg*jOD^|g,XѧrF@(q _2'uدsX/E!"Mʁ0 vi*><;xo,R$ OgL|RA#F Rjx^34!܎uHdhIy+Oxn zR:O!MȮ}!F77_bƹBD)@F2n@Ge/7_O+lWZNl(ϞYz^"4Dh0a3i(d\|HZqF39~r'KM[buC3*䘤%CeLMI|qBE|Ifǀu!Uos['q.5oѐ%;W8~9@dp (ȍ$ Pscr9Yv:9pBVP)y7t+OBFR-ul;=hJ<✊:vbU#@c;Wtd +X)XjyБ=ˀ&8~6]l 6&8|SQ\k +:O_Tao,(H-9sAh'ݍXT9(i:|W%G 'UVW-G\gÛ^gnt3بp.(~H@!Z=Vc9s[G[Bt3,࿾@;睔WXaXET$讐K/.Fb÷ a5V E mxcS8Xq7\uk#wۨj2ܵZ+If V\qID H __0< +endstream +endobj +246 0 obj +<< /ColorSpace 75 0 R /ExtGState 76 0 R /Font << /F134 77 0 R /F137 78 0 R /F158 79 0 R >> /Pattern 82 0 R /ProcSet [ /PDF /Text ] /XObject << /Im8 464 0 R >> >> +endobj +247 0 obj +<< /A << /S /URI /Type /Action /URI (https://assets.anthropic.com/m/64823ba7485345a7/Claude-Opus-4-5-System-Card.pdf) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 334.413 612.697 525.406 626.099 ] /Subtype /Link /Type /Annot >> +endobj +248 0 obj +<< /A << /S /URI /Type /Action /URI (https://assets.anthropic.com/m/64823ba7485345a7/Claude-Opus-4-5-System-Card.pdf) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 599.557 393.271 612.55 ] /Subtype /Link /Type /Annot >> +endobj +249 0 obj +<< /A << /S /URI /Type /Action /URI (https://www.anthropic.com/news/claude-sonnet-4-5l) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 334.413 576.632 525.406 590.034 ] /Subtype /Link /Type /Annot >> +endobj +250 0 obj +<< /A << /S /URI /Type /Action /URI (https://www.anthropic.com/news/claude-sonnet-4-5l) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 564.523 203.274 576.485 ] /Subtype /Link /Type /Annot >> +endobj +251 0 obj +<< /A << /S /URI /Type /Action /URI (https://arxiv.org/abs/2506.07982) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 284.518 477.814 488.111 490.806 ] /Subtype /Link /Type /Annot >> +endobj +252 0 obj +<< /A << /S /URI /Type /Action /URI (https://storage.googleapis.com/deepmind-media/Model-Cards/Gemini-3-Pro-Model-Card.pdf) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 333.623 418.824 525.406 432.226 ] /Subtype /Link /Type /Annot >> +endobj +253 0 obj +<< /A << /S /URI /Type /Action /URI (https://storage.googleapis.com/deepmind-media/Model-Cards/Gemini-3-Pro-Model-Card.pdf) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 405.684 431.569 418.677 ] /Subtype /Link /Type /Annot >> +endobj +254 0 obj +<< /A << /S /URI /Type /Action /URI (https://doi.org/10.48550/arXiv.2405.04434) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 486.463 368.811 525.406 382.171 ] /Subtype /Link /Type /Annot >> +endobj +255 0 obj +<< /A << /S /URI /Type /Action /URI (https://doi.org/10.48550/arXiv.2405.04434) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 356.07 302.58 369.063 ] /Subtype /Link /Type /Annot >> +endobj +256 0 obj +<< /A << /S /URI /Type /Action /URI (https://arxiv.org/abs/2412.19437) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 334.728 333.145 525.406 346.547 ] /Subtype /Link /Type /Annot >> +endobj +257 0 obj +<< /A << /S /URI /Type /Action /URI (https://arxiv.org/abs/2412.19437) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 322.639 95.31 331.853 ] /Subtype /Link /Type /Annot >> +endobj +258 0 obj +<< /A << /S /URI /Type /Action /URI (https://mcpmark.ai/leaderboard) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 281.679 261.015 472.672 274.418 ] /Subtype /Link /Type /Annot >> +endobj +259 0 obj +<< /A << /S /URI /Type /Action /URI (https://aclanthology.org/2025.emnlp-main.1794/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 85.485 373.008 98.477 ] /Subtype /Link /Type /Annot >> +endobj +260 0 obj +<< /Filter /FlateDecode /Length 3824 >> +stream +xڥK{6_A̞hhMco6C ҢLKb`03<dzY<{$/.,~\hL8 t3:11Jʹ`z5ZWK[4lczȞYlMV7].3j"4cuYvy^msuUMyy?It$$N1yjٶ92:YU.>)k[Dc<ԓՐNɣóUZ߯ݜ[{=pmr``s{-*Q;6(pŕ-`mVup) 8' oZiCVa2Una?ڻq&#E~kؔy'Ē0!<7O ~= 2n[4͋.lxn| L@G^(r[ Kg9VǞ자CpwTBJd8cpD |9s@p72 +$ .V[΄FMUx`"~ :mbymZ/%a@ͥvO={{iCPh8y3ʶ)K,`m޶\v'o76Uk,߀E'fDRl5%قX44G '|C*y^+/[wwMniIzl +vĖ3{ãX7P)Ipm۶-˷)8Ko խms~xp'ݾ`"Ir|O<[B'z6ԭɄf1;hشb=xˬ]CuB' +tDd + +6q ĦY2ࢺ!\k$¥" upÄ6!pt)bDzȹ Ô6M"huZ<$^SSo@?ؔߖUCTB:͈' ^iB`8dT]hBaw!! 7 D'{ALt҄zD|`)baI̐3pu]0 qu@K!c'*)+ $҃+DCG)3JN!8kdC1xH:C5'Ι7TQHI&&%1:wb10 .R18ðq +]j 눣WUy@2:c?jBF~ #0·j01&_ҒA(AA vPd^G$Ga8cFpW{P. ֍0iJl6$7Vᬵx󐔦gM94Ֆ7yH׀uƏf_̬ߐZߚ,51z iګHˉ +e=H}%  eĈDBӶY +h +dtYE"̇jX'qe ECnFXXiuekw%|kP!yt~a܎&.t!~g/X^$WOH`9^tvr@*b,NG l-z4Eκus$ '~Hگ#ea'= 78֐曆3}@xEW<Ƃ ~4TrwL+?8B0j蹯5!xk'0Y M Jοweyu97n?H˫-G\bsiCH+[p`N<+%-}Y}O"!OȦ#D .\.h4ZV949ncJk_nE1 yڟ/ֵqmWZP$u}o70>h"d2~:K_JyUFz_e Np0™5r/܏q z}٪C?}عި 7O*j&$<]'4E՘ҡ>Ĕ@7& +-{QK P0{7 / 몖 +xvڝcI[];#fٴF\3X`6G +LB)ɮl LigTBŢ g?$Jf氘BN +5~6yTߪ]7I|qqyAaHە͕޻Js8}V>hoo38u0KL cE9_07Meo"lӠn5|F]zgDa6m2$v~S_e˹9x,IY bA0?9|U_..28Qf[!\(]3>2`Kby$*SV~ 0LHB;$pb͞C'q0!I@lc_$8 +Ue24f~i|ep:n7luxvF9k۴H7:]ayJUb:*{M_Z]/Cח%S:q7̈́hN4PoQW}Px"ٱٿ)v(7h+HߝK,<0kBʺbNck43d /7T 09d0锅5 w8).G,ػXSX`\)(3c.ExPu;]g:fk4NxR"mt0W;g$u|&ލc۪:]@Sv +#Z>]w/XD- 8(Κ Cެ4 <^Лw:m)bUyv} p8. ?k8 +TA23&z8_([R1x ]yh\I[`nS/?[oۦ5˧]P۱;RLQ|O| $󖢓Ƥ 5!=N!AGY&> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +262 0 obj +<< /A << /S /URI /Type /Action /URI (https://www.minimax.io/news/minimax-m2) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 401.823 741.819 525.406 755.221 ] /Subtype /Link /Type /Annot >> +endobj +263 0 obj +<< /A << /S /URI /Type /Action /URI (https://www.minimax.io/news/minimax-m2) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 729.71 196.608 741.672 ] /Subtype /Link /Type /Annot >> +endobj +264 0 obj +<< /A << /S /URI /Type /Action /URI (https://moonshotai.github.io/Kimi-K2/thinking.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 321.767 705.754 525.406 719.156 ] /Subtype /Link /Type /Annot >> +endobj +265 0 obj +<< /A << /S /URI /Type /Action /URI (https://moonshotai.github.io/Kimi-K2/thinking.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 692.615 196.608 705.607 ] /Subtype /Link /Type /Annot >> +endobj +266 0 obj +<< /A << /S /URI /Type /Action /URI (https://openai.com/index/learning-to-reason-with-llms/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 321.813 669.689 525.406 683.092 ] /Subtype /Link /Type /Annot >> +endobj +267 0 obj +<< /A << /S /URI /Type /Action /URI (https://openai.com/index/learning-to-reason-with-llms/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 656.55 223.302 669.542 ] /Subtype /Link /Type /Annot >> +endobj +268 0 obj +<< /A << /S /URI /Type /Action /URI (https://openai.com/index/introducing-swe-bench-verified/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 228.398 620.485 525.406 633.478 ] /Subtype /Link /Type /Annot >> +endobj +269 0 obj +<< /A << /S /URI /Type /Action /URI (https://openai.com/index/introducing-swe-bench-verified/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 607.966 143.058 619.928 ] /Subtype /Link /Type /Annot >> +endobj +270 0 obj +<< /A << /S /URI /Type /Action /URI (https://openai.com/index/introducing-gpt-5/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 257.816 584.011 525.406 597.413 ] /Subtype /Link /Type /Annot >> +endobj +271 0 obj +<< /A << /S /URI /Type /Action /URI (https://openai.com/index/introducing-gpt-5/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 572.542 88.38 583.864 ] /Subtype /Link /Type /Annot >> +endobj +272 0 obj +<< /A << /S /URI /Type /Action /URI (https://arxiv.org/abs/2505.09388) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 277.708 511.881 481.301 525.283 ] /Subtype /Link /Type /Annot >> +endobj +273 0 obj +<< /A << /S /URI /Type /Action /URI (http://joschu.net/blog/kl-approx.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 340.166 453.301 525.406 466.703 ] /Subtype /Link /Type /Annot >> +endobj +274 0 obj +<< /A << /S /URI /Type /Action /URI (http://joschu.net/blog/kl-approx.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 442.795 133.11 452.009 ] /Subtype /Link /Type /Annot >> +endobj +275 0 obj +<< /A << /S /URI /Type /Action /URI (https://doi.org/10.48550/arXiv.2402.03300) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 403.972 390.547 525.406 403.54 ] /Subtype /Link /Type /Annot >> +endobj +276 0 obj +<< /A << /S /URI /Type /Action /URI (https://doi.org/10.48550/arXiv.2402.03300) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 378.669 227.61 389.991 ] /Subtype /Link /Type /Annot >> +endobj +277 0 obj +<< /A << /S /URI /Type /Action /URI (http://arxiv.org/abs/1911.02150) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 134.357 304.868 331.65 317.861 ] /Subtype /Link /Type /Annot >> +endobj +278 0 obj +<< /A << /S /URI /Type /Action /URI (https://proceedings.neurips.cc/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 372.528 268.394 525.406 281.796 ] /Subtype /Link /Type /Annot >> +endobj +279 0 obj +<< /A << /S /URI /Type /Action /URI (https://proceedings.neurips.cc/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 255.255 517.909 268.247 ] /Subtype /Link /Type /Annot >> +endobj +280 0 obj +<< /A << /S /URI /Type /Action /URI (https://doi.org/10.48550/arXiv.2406.01574) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 105.884 192.091 366.177 205.084 ] /Subtype /Link /Type /Annot >> +endobj +281 0 obj +<< /A << /S /URI /Type /Action /URI (https://arxiv.org/abs/2504.21798) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 488.307 106.003 525.406 118.964 ] /Subtype /Link /Type /Annot >> +endobj +282 0 obj +<< /A << /S /URI /Type /Action /URI (https://arxiv.org/abs/2504.21798) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 80.717 92.863 245.88 105.856 ] /Subtype /Link /Type /Annot >> +endobj +283 0 obj +<< /Filter /FlateDecode /Length 3096 >> +stream +xڥZ]w6;XD)wi&M5MkPl֢ϒt~ ɖsd +$APl N^y1~̈́ nЂFl? +Áʏ7|ަE6y#bo^׋p<^VØ{~90jH G\1\0~us6~-%0A`h#%X[ F3`Ąd^-kQ#G>&nZ vscLsJi;N{3lNUoNp&S`! ]jXߓ1/۟"?Ķ|A-ꑲQ2< WW}-IODUliB܌ yRxyGD:I:%gv~#ʅ{g g Nig`=YD{I{oz$^]zފi(I.Vwd%"_)FKxYRծeiכhX$`03P=|C?RlpN|Lxc9|>+ [xC'/zB|B+a.َ8#<&EӿFx1V,+STĦplj3$+\ֽe_`Ed~lVc`Qӗu#$غ#^λL꼱߈G䝖 NZ,)䢭_6d,:>Y";\vt ~#F'd$!ּ_+pz6#FN.U˅lLp2dD.YfFK 'B,wD!DR~#TO7flp\G|cl܂ AOG ,[¨9!&ڶ]}-el\1vjei̶BPmz8 +6xn\10u\qxm$/|Q,AwSLACΈr$ h9}h瞔kM @H=6آ +B:+?N\T}`\%֏U&635%1hKl)/ȴlr >J0^S&``uW.s跄SX-I]a}Lk3dr$\[ٸFatW8bV>P GMp/mjFJu`S ! `W+W{e~ڷ3B Q\U C*/k .OP]eXu (U^Ӛ.hYY O5EC#d2@ٖHhVKQ>..!7!Qyִ1Х''uonmc;@l3KM3˛NGuRݻ5ķeUn“yG$,}^Gna7ೱ8q jb UZ"dAW Y_I 5D.4;1הt>kS("+jkbvrun 7Dydw͔zNײ8 h7xtTUYр͉ʹdm9%Ҹ,1Ūl/8KEȾ]}Wܳ%E;y+칅o&DJxJ5 B +S{ߧİ> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +285 0 obj +<< /A << /S /URI /Type /Action /URI (https://aclanthology.org/2025.acl-long.1126/) >> /Border [ 0 0 1 ] /C [ 0 1 1 ] /H /I /Rect [ 232.046 674.073 511.737 687.475 ] /Subtype /Link /Type /Annot >> +endobj +286 0 obj +<< /A << /D (figure.caption.12) /S /GoTo >> /Border [ 0 0 1 ] /C [ 1 0 0 ] /H /I /Rect [ 122.707 253.079 130.263 266.04 ] /Subtype /Link /Type /Annot >> +endobj +287 0 obj +<< /Filter /FlateDecode /Length 2146 >> +stream +xڭYIsWHUE0vyle/o39FbBHkޯ(E6F5Yg߫w`DO#08"HK).:-~II>-&,I@iޮݚyn{ސYFϙ /#8,X۰$-Ӷ4AH1װQ 8@6zfM1Gu[Zg?_R-UeMQgeq1sjDT<}:64fH%̫dJą;,ix\ҬH_r?6O %:X5?_Ͻw6P~K_L1m"qi܅MO#YnƍF쨄{?rӬ.WsٯOg5 WS%RG?q4"XWt1bGg ܤ$Y ˽H91 E1eX"*X"l(Qz 'U#9e)A4"$Ms#:xz,A!,(EDâ7UWt\L{P?I~ɐ iu8-7$]/b=' J9Ez)jPq*Jo%Dv3?Ià2"܄3 I (r_JXl7{)<-b@\2HjvXr/dm*pF>E8d9b`I*|/W=s zY_1ַܨڱuXkg@+ A>OϿbΪ:tyf`[D +pД:*|1"e^!QPNQCc/B:\[+ E'xm\ r!zLˍBe_\w)<0aҬ*)g,PX/ZSG!}-IuT]C$knXP@Ç&NMF)Ao);hL)J`ؠ'nw2G}=*ư&@,9mvJcJl]~TM1vM)U񼮗y:Ӣy9qP9*=}!vޣC +ayݯǗݠ+b̑rr6"'azwZEnfҎVZ?Ola{.}QNM^p\P`HvGhLlmDُT9+SLt(W^-%˳lfW(Qi3?g̳TVB'@l +hc`@c0G86'jdrDw?D`$X HkͶ}ؼp#h^7=]-yXSI4ʢy=KSL2?p,R81݇K/=p(w֡43I}XF pg`vv֣lB`Dk$=ItS6-fE5^ЈDb0J'tZh[$)ώj*<>f3~loJeP=G4clKpfA׉i y]]6[,IRmS~_k`bn^H֭ -Ezc8;YI|cј@?"+ʩU1MU&Zg!֕d1o< ȯ,<ָΛB{8ȀACB!"Ⱦ~56i4:P$a> /Pattern 82 0 R /ProcSet [ /PDF /Text ] /XObject << /Im10 465 0 R /Im9 466 0 R >> >> +endobj +289 0 obj +<< /Filter /FlateDecode /Length 2625 >> +stream +xY[s6~L_L7^xӤ2L-]=xd;Owף?G?%ލ!\{$NBo$$ YmV=7h}'QRoiK yg:Y0g eF$ʀ8JǓ^ pCǔڛ}PZOc&>QnUU=rj;=E#o +/keHqk&w Q%b"HFeATgP})cFJM5YEE΅8ѬRKNleLC5;ta4l CpAֵ9XOaЀj0 +)ۺ}⹺:Fgl'iᘨoMH! CRfՏ'Lv̊VKw`?.Y`#_1`4v]n!DI+ha*rv'P@]r[,xDbN D;RS_]p_:̸nⰾI78Rj{kuckC#Ti]B߆+M卥XԒrX w*OYB0ܛ'4"RGYoV-&un *RɓZ,Y $au嫷'hg_r2 e.2o2 + XsN8Ǚ`' nLB{g߿zxu5 4U_s<"sVӫMt4 +G8T}8M ebkUka~Yh֤V%jٽK(Nȵ $K;-ԟ>%)xcG[$ Pʡѝ)%4CvT^B%ؔ52"nT6{g`uLºBjX kUݔš pF[k .)p|[Xuo3cIl !Z~[ 桜\#wЌ{˥fPjFMѓhFz3"7+]?5Efi ҔjhFg0Y^ +4(2H(Q>E_+ {Wzp5&]s6^sY6\E/ HQoN~h |•&ZWSuneU!;C&U]nT"}Q@ޏ\n!DDimZu, EN +ɾH5& ih-fJiٮQ8sS*أ<0&xzSmlif8Ect |H/'z8ЖGE0V>0B>Ds$`>c3ݳݨLFc\?kO|0x5_|xeޟK߀y$&-P!'"ܘ$f:0, @r\[5x gw^=F u9tnW%{]F"~!0Hֈ4\T +`@ޓh9cp)z鰈.z!.cY pHz<r @>xc39C:;/Sɓu[49~.+0'OϲZmq +b8rwIF|1';۵<"1p`dz;ќ۶T:%Ɂd$ n[ĥ]tꐻ#5|]ڤՌb> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +291 0 obj +<< /A << /D (cite.deepseek-math-v2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 217.544 231.374 268.616 244.335 ] /Subtype /Link /Type /Annot >> +endobj +292 0 obj +<< /A << /D (cite.deepseek-math-v2) /S /GoTo >> /Border [ 0 0 1 ] /C [ 0 1 0 ] /H /I /Rect [ 272.984 231.374 296.794 244.335 ] /Subtype /Link /Type /Annot >> +endobj +293 0 obj +<< /Filter /FlateDecode /Length 2278 >> +stream +xڭXKs6WtŃ &*Nr@SEq~6Eү$ҁ hMn>I!Y\mEDe%WKzNNx,հmoNW\1KcnW? OnL;*|Wևr];|:T()`sI$:Oiy]wH H=e0 ~_Dٕ{ۃ>p1OpoLxd lap6t%H`mډGxQF6mudWa]UX{;Sy:lqy]֑"ٗamPBe"RXvɹքi=:QNG i DNf&1M-uyFAJUR5'_~>:\'~k)uryc~iRO/9riJ 0K$)݉/+d {[ż3) I. ORG!qY⦋OH!ŧOM! Aaсcg4] Y۹֪jC>*imڛ#X ׷K@SWv/-.eRD夐Nz^n0 q8f2Pu;-1,ؗ`[=WH̕^|28  +r´go0ȡ?\71CXY| V 1IhzZbeq@?B1!bCm|X~k=r.m-5v^q*7+ |d[M v*c,0wg@yˢGlqfܖ7&,H)n ^?3lN/$?K +endstream +endobj +294 0 obj +<< /ColorSpace 75 0 R /ExtGState 76 0 R /Font << /F134 77 0 R /F137 78 0 R /F158 79 0 R /F289 451 0 R >> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +295 0 obj +<< /Filter /FlateDecode /Length 2840 >> +stream +xڍY]W=՞IxkK} {1q J¯_ɒv+G,ٖH'I<9z&Y>IRI>9TrR兪dr~=}TiEGiG'fajbr3IT$$~4VE]N`3U7"\f@娳1/"zg̒_ ~ֆrqKpCV'۲o&`ZՖ;qbϹs;JӼ{ڞM& +Gms˸0M\5c=ny ],ZP6̆{>fmѤ[EprpW7Wض3ز w!5ܴ^087;͢[U!0LJiRĜÖ|BK-zU/:~@ŏ"Dp͆Z[va䋜L ЪW?KtD2h6awS + m7|"mįEXOcTΧwi>kvz`تp9!~>}h{?GiQvj-7:YR.DZioEi: :C8]Bpn=R418}ձLH`ό$o 0hg:rTMyCH:eg< gLpS۠.Mߧf涗'fPY?ȩ Rdÿ\ֆ*Cl)}V DmB|wo<쒜/%+*8-^4*sM:`KgSSAQpLJ H(~/E:5'#@!Kʶ< 7Y> y;~bֽ`qLsb6>}J7.3c^U%%,K1B"\{Gv A]9t@)p.*XLN )*9!O8Ijqh8ֈ#2V  yYזlI` ̪хc6D|J'T8L[hӚUq 崹'I/m*Yf|[d*7>fKrΈOvbpepR)`b0iFر^$n# 1ͱ0X-o<mw E\߼N8SU;%mϝAxde}19A/(&J|̷p-J*eS@~杖 /ckv;$V]ΛX[-l{8%ND=0oMYIc{c"Dddp8(}yU*N*mC9׽\!յq!CAٯVH}Aak_0/t$TR0)7CsRLЂ\9T>xɦ2!06(x<_:^%dT{4ٖCyX*erp2Pu u裐C1M4Rjq8Nhnǒ)lTUY٢b>S8Q!XymFyFʙ^"2‹}ֻpeG$A] x%Nڠ"7BA!I A37/7H(IXpg^4ԕE &Rl]߸VM鑷1=_Oe75)%J %kjU$ȭ]z $ B%q2{?6aLZh=_h. NIiC ,cuKnhcw(z̆;4GMa8V'qi/gi/F,8SNJI|ћ6PgdcȟQ$ Azx@#5:5^F!)q7 O%⫮>RoD~̬o!H +H}k;\8H$壀pW]z8~ ^$K;"+-KU!ڊj +V!:BLE>8fXydޮRVXK#QүFHFQ˔ergΝ Πh__@KngJHxkzN +yWjlwYEE@>]qK*ܲ#@±@S DJ]Ajc֓4iT*| +ԈUIAs'Ad*N6MHz\*uMA?ѱ}㇅۱qtj}F]:&I]LZ "}ϭY5 n^vCcCu};Ӈ՚N+b9_k~> /Pattern 82 0 R /ProcSet [ /PDF /Text ] >> +endobj +297 0 obj +<< /D [ 9 0 R /XYZ 70.866 756.85 null ] >> +endobj +298 0 obj +[ 9 0 R /Fit ] +endobj +299 0 obj +[ 9 0 R /Fit ] +endobj +300 0 obj +[ 9 0 R /Fit ] +endobj +301 0 obj +[ 9 0 R /Fit ] +endobj +302 0 obj +[ 9 0 R /Fit ] +endobj +303 0 obj +<< /D [ 42 0 R /XYZ 70.866 401.311 null ] >> +endobj +304 0 obj +<< /D [ 42 0 R /XYZ 70.866 360.663 null ] >> +endobj +305 0 obj +<< /D [ 42 0 R /XYZ 70.866 344.272 null ] >> +endobj +306 0 obj +<< /D [ 51 0 R /XYZ 70.866 535.275 null ] >> +endobj +307 0 obj +<< /D [ 51 0 R /XYZ 70.866 243.367 null ] >> +endobj +308 0 obj +<< /D [ 53 0 R /XYZ 70.866 756.85 null ] >> +endobj +309 0 obj +<< /D [ 53 0 R /XYZ 70.866 530.857 null ] >> +endobj +310 0 obj +<< /D [ 54 0 R /XYZ 70.866 756.85 null ] >> +endobj +311 0 obj +<< /D [ 50 0 R /XYZ 43.593 335.63 null ] >> +endobj +312 0 obj +<< /D [ 50 0 R /XYZ 43.593 759.441 null ] >> +endobj +313 0 obj +<< /D [ 49 0 R /XYZ 43.593 558.189 null ] >> +endobj +314 0 obj +<< /D [ 49 0 R /XYZ 43.593 472.51 null ] >> +endobj +315 0 obj +<< /D [ 50 0 R /XYZ 43.593 371.695 null ] >> +endobj +316 0 obj +<< /D [ 49 0 R /XYZ 43.593 400.381 null ] >> +endobj +317 0 obj +<< /D [ 50 0 R /XYZ 43.593 434.858 null ] >> +endobj +318 0 obj +<< /D [ 49 0 R /XYZ 43.593 314.702 null ] >> +endobj +319 0 obj +<< /D [ 49 0 R /XYZ 43.593 350.767 null ] >> +endobj +320 0 obj +<< /D [ 49 0 R /XYZ 43.593 436.445 null ] >> +endobj +321 0 obj +<< /D [ 50 0 R /XYZ 43.593 506.987 null ] >> +endobj +322 0 obj +<< /D [ 50 0 R /XYZ 43.593 601.632 null ] >> +endobj +323 0 obj +<< /D [ 50 0 R /XYZ 43.593 565.568 null ] >> +endobj +324 0 obj +<< /D [ 50 0 R /XYZ 43.593 723.376 null ] >> +endobj +325 0 obj +<< /D [ 49 0 R /XYZ 43.593 256.122 null ] >> +endobj +326 0 obj +<< /D [ 49 0 R /XYZ 43.593 156.894 null ] >> +endobj +327 0 obj +<< /D [ 49 0 R /XYZ 43.593 278.637 null ] >> +endobj +328 0 obj +<< /D [ 49 0 R /XYZ 43.593 206.508 null ] >> +endobj +329 0 obj +<< /D [ 50 0 R /XYZ 43.593 249.951 null ] >> +endobj +330 0 obj +<< /D [ 50 0 R /XYZ 43.593 687.311 null ] >> +endobj +331 0 obj +<< /D [ 49 0 R /XYZ 43.593 630.318 null ] >> +endobj +332 0 obj +<< /D [ 50 0 R /XYZ 43.593 470.923 null ] >> +endobj +333 0 obj +<< /D [ 49 0 R /XYZ 43.593 594.254 null ] >> +endobj +334 0 obj +<< /D [ 50 0 R /XYZ 43.593 651.246 null ] >> +endobj +335 0 obj +<< /D [ 49 0 R /XYZ 43.593 508.575 null ] >> +endobj +336 0 obj +<< /D [ 50 0 R /XYZ 43.593 299.565 null ] >> +endobj +337 0 obj +<< /D [ 50 0 R /XYZ 43.593 186.788 null ] >> +endobj +338 0 obj +<< /D [ 50 0 R /XYZ 43.593 529.503 null ] >> +endobj +339 0 obj +<< /D [ 50 0 R /XYZ 43.593 137.174 null ] >> +endobj +340 0 obj +<< /D [ 51 0 R /XYZ 43.593 759.441 null ] >> +endobj +341 0 obj +<< /D [ 51 0 R /XYZ 43.593 669.179 null ] >> +endobj +342 0 obj +<< /D [ 51 0 R /XYZ 43.593 633.114 null ] >> +endobj +343 0 obj +<< /D [ 34 0 R /XYZ 227.612 554.71 null ] >> +endobj +344 0 obj +<< /D [ 34 0 R /XYZ 213.959 393.574 null ] >> +endobj +345 0 obj +<< /D [ 35 0 R /XYZ 220.235 384.323 null ] >> +endobj +346 0 obj +<< /D [ 35 0 R /XYZ 214.178 232.915 null ] >> +endobj +347 0 obj +<< /D [ 38 0 R /XYZ 513.14 640.023 null ] >> +endobj +348 0 obj +<< /D [ 38 0 R /XYZ 241.693 586.828 null ] >> +endobj +349 0 obj +<< /D [ 38 0 R /XYZ 98.411 352.227 null ] >> +endobj +350 0 obj +<< /D [ 39 0 R /XYZ 513.14 648.79 null ] >> +endobj +351 0 obj +<< /D [ 39 0 R /XYZ 187.581 568.688 null ] >> +endobj +352 0 obj +<< /D [ 9 0 R /XYZ 70.866 385.693 null ] >> +endobj +353 0 obj +<< /D [ 47 0 R /XYZ 70.866 661.238 null ] >> +endobj +354 0 obj +<< /D [ 48 0 R /XYZ 70.866 763.625 null ] >> +endobj +355 0 obj +<< /D [ 51 0 R /XYZ 70.866 504.391 null ] >> +endobj +356 0 obj +<< /D [ 35 0 R /XYZ 70.866 763.625 null ] >> +endobj +357 0 obj +<< /D [ 37 0 R /XYZ 70.866 763.625 null ] >> +endobj +358 0 obj +<< /D [ 40 0 R /XYZ 70.866 442.318 null ] >> +endobj +359 0 obj +<< /D [ 9 0 R /XYZ 69.866 817.626 null ] >> +endobj +360 0 obj +<< /D [ 41 0 R /XYZ 69.866 817.626 null ] >> +endobj +361 0 obj +<< /D [ 42 0 R /XYZ 69.866 817.626 null ] >> +endobj +362 0 obj +<< /D [ 43 0 R /XYZ 69.866 817.626 null ] >> +endobj +363 0 obj +<< /D [ 44 0 R /XYZ 69.866 817.626 null ] >> +endobj +364 0 obj +<< /D [ 45 0 R /XYZ 69.866 817.626 null ] >> +endobj +365 0 obj +<< /D [ 46 0 R /XYZ 69.866 817.626 null ] >> +endobj +366 0 obj +<< /D [ 47 0 R /XYZ 69.866 817.626 null ] >> +endobj +367 0 obj +<< /D [ 48 0 R /XYZ 69.866 817.626 null ] >> +endobj +368 0 obj +<< /D [ 49 0 R /XYZ 69.866 817.626 null ] >> +endobj +369 0 obj +<< /D [ 50 0 R /XYZ 69.866 817.626 null ] >> +endobj +370 0 obj +<< /D [ 33 0 R /XYZ 69.866 817.626 null ] >> +endobj +371 0 obj +<< /D [ 51 0 R /XYZ 69.866 817.626 null ] >> +endobj +372 0 obj +<< /D [ 52 0 R /XYZ 69.866 817.626 null ] >> +endobj +373 0 obj +<< /D [ 53 0 R /XYZ 69.866 817.626 null ] >> +endobj +374 0 obj +<< /D [ 54 0 R /XYZ 69.866 817.626 null ] >> +endobj +375 0 obj +<< /D [ 34 0 R /XYZ 69.866 817.626 null ] >> +endobj +376 0 obj +<< /D [ 35 0 R /XYZ 69.866 817.626 null ] >> +endobj +377 0 obj +<< /D [ 36 0 R /XYZ 69.866 817.626 null ] >> +endobj +378 0 obj +<< /D [ 37 0 R /XYZ 69.866 817.626 null ] >> +endobj +379 0 obj +<< /D [ 38 0 R /XYZ 69.866 817.626 null ] >> +endobj +380 0 obj +<< /D [ 39 0 R /XYZ 69.866 817.626 null ] >> +endobj +381 0 obj +<< /D [ 40 0 R /XYZ 69.866 817.626 null ] >> +endobj +382 0 obj +<< /D [ 9 0 R /XYZ 70.866 85.039 null ] >> +endobj +383 0 obj +<< /D [ 33 0 R /XYZ 70.866 142.956 null ] >> +endobj +384 0 obj +<< /D [ 36 0 R /XYZ 70.866 282.266 null ] >> +endobj +385 0 obj +<< /D [ 43 0 R /XYZ 70.866 183.252 null ] >> +endobj +386 0 obj +<< /D [ 48 0 R /XYZ 70.866 297.099 null ] >> +endobj +387 0 obj +<< /D [ 9 0 R /XYZ 70.866 756.85 null ] >> +endobj +388 0 obj +<< /D [ 37 0 R /XYZ 70.866 756.85 null ] >> +endobj +389 0 obj +<< /D [ 37 0 R /XYZ 300.507 603.841 null ] >> +endobj +390 0 obj +<< /D [ 51 0 R /XYZ 70.866 497.616 null ] >> +endobj +391 0 obj +<< /D [ 51 0 R /XYZ 300.507 349.49 null ] >> +endobj +392 0 obj +<< /D [ 34 0 R /XYZ 70.866 736.726 null ] >> +endobj +393 0 obj +<< /D [ 35 0 R /XYZ 70.866 115.44 null ] >> +endobj +394 0 obj +<< /D [ 36 0 R /XYZ 70.866 446.091 null ] >> +endobj +395 0 obj +<< /D [ 37 0 R /XYZ 70.866 95.085 null ] >> +endobj +396 0 obj +<< /D [ 39 0 R /XYZ 70.866 116.838 null ] >> +endobj +397 0 obj +<< /D [ 43 0 R /XYZ 70.866 142.08 null ] >> +endobj +398 0 obj +<< /D [ 45 0 R /XYZ 70.866 316.016 null ] >> +endobj +399 0 obj +<< /D [ 46 0 R /XYZ 70.866 339.816 null ] >> +endobj +400 0 obj +<< /D [ 47 0 R /XYZ 70.866 261.784 null ] >> +endobj +401 0 obj +<< /D [ 34 0 R /XYZ 70.866 239.38 null ] >> +endobj +402 0 obj +<< /D [ 40 0 R /XYZ 70.866 739.834 null ] >> +endobj +403 0 obj +<< /D [ 40 0 R /XYZ 70.866 174.938 null ] >> +endobj +404 0 obj +<< /D [ 41 0 R /XYZ 70.866 586.999 null ] >> +endobj +405 0 obj +<< /D [ 52 0 R /XYZ 70.866 757.719 null ] >> +endobj +406 0 obj +<< /D [ 53 0 R /XYZ 70.866 731.545 null ] >> +endobj +407 0 obj +<< /D [ 41 0 R /XYZ 70.866 461.2 null ] >> +endobj +408 0 obj +<< /D [ 44 0 R /XYZ 70.866 575.044 null ] >> +endobj +409 0 obj +<< /D [ 46 0 R /XYZ 70.866 763.625 null ] >> +endobj +410 0 obj +<< /D [ 46 0 R /XYZ 70.866 519.043 null ] >> +endobj +411 0 obj +<< /D [ 47 0 R /XYZ 70.866 763.625 null ] >> +endobj +412 0 obj +<< /Differences [ 2 /fi /fl 34 /quotedbl /numbersign 37 /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less 62 /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft 93 /bracketright 95 /underscore 97 /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft 125 /braceright 136 /circumflex 149 /bullet /endash /emdash 180 /acute ] /Type /Encoding >> +endobj +413 0 obj +<< /Ascent 708 /CapHeight 672 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/a/ampersand/b/c/colon/comma/d/e/eight/f/fi/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/q/r/s/seven/six/slash/t/three/two/u/v/w/x/y/zero) /Descent -266 /Flags 4 /FontBBox [ -152 -301 1000 935 ] /FontFile 467 0 R /FontName /ZXJMNA+URWPalladioL-Bold /ItalicAngle 0 /StemV 123 /Type /FontDescriptor /XHeight 471 >> +endobj +414 0 obj +<< /Filter /FlateDecode /Length 698 >> +stream +xmTn0CƆ@LE"j.R$Λ1iZ)A337?nkNe$냛.Gמ]=U[wVش7m~X{kW{{;LQڜi\]sťpjA{5λ#tVQ͡i P{ L:Ց @tvM{BM_ht>X]0}j74훺"t{ArjwaѩM]_?zB΍ڝ]]悅K(eۚeks<, X#.KIɌC2O0'\8i!+e8I++7>\ÇzTao 7^R}ף|'2 rN +endstream +endobj +415 0 obj +[ 611 611 167 333 611 333 333 333 0 333 606 0 667 500 333 333 0 0 0 0 0 0 0 0 0 0 0 0 333 227 250 278 402 500 500 889 833 278 333 333 444 606 250 333 250 296 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 667 722 833 611 556 833 833 389 389 778 611 1000 833 833 611 833 722 611 667 778 778 1000 667 667 667 333 606 333 606 500 278 500 611 444 611 500 389 556 611 333 333 611 333 889 611 556 611 611 389 444 333 611 556 833 500 556 ] +endobj +416 0 obj +<< /Ascent 715 /CapHeight 680 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/acute/ampersand/asterisk/at/b/braceleft/braceright/bracketleft/bracketright/bullet/c/circumflex/colon/comma/d/e/eight/emdash/endash/f/fi/five/fl/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedbl/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /Descent -282 /Flags 4 /FontBBox [ -166 -283 1021 943 ] /FontFile 468 0 R /FontName /MXZOSQ+URWPalladioL-Roma /ItalicAngle 0 /StemV 84 /Type /FontDescriptor /XHeight 469 >> +endobj +417 0 obj +<< /Filter /FlateDecode /Length 698 >> +stream +xmTn0CƆ@LE"h.R$Λ1iZ)A337?^$ŝPIs77EW]=?:Wz\==硫nMioRE+ִ%Q;{&Ө5wZ(W\q/7}P^kMݧ`tTshz+&TuS}Hyq:=tb/x:.> M^UP@`T;0˻ީs#jv~_a߾`R-rfbiy= 9ff ؤdF@!i @E\ +` H s ` %(Ng *R0fd90#üb.k(@.o @u)(A:,RxVs}e#3cgWCYjxM#ƿp'g_rbhyp̅.c+StI(^Z9Bh?+q ~Pj=?fc91ا/s4lƽǮ<b]xB}Tz\'\z.۴2WsQr0M7]/S/Ar +endstream +endobj +418 0 obj +[ 605 608 167 380 611 291 313 333 0 333 606 0 667 500 333 287 0 0 0 0 0 0 0 0 0 0 0 0 333 208 250 278 371 500 500 840 778 278 333 333 389 606 250 333 250 606 500 500 500 500 500 500 500 500 500 500 250 250 606 606 606 444 747 778 611 709 774 611 556 763 832 337 333 726 611 946 831 786 604 786 668 525 613 778 722 1000 667 667 667 333 606 333 606 500 278 500 553 444 611 479 333 556 582 291 234 556 291 883 582 546 601 560 395 424 326 603 565 834 516 556 500 333 606 333 606 0 0 0 278 500 500 1000 500 500 333 1144 525 331 998 0 0 0 0 0 0 500 500 606 500 1000 333 979 424 331 827 0 0 667 0 278 500 500 500 500 606 500 333 747 333 500 606 333 747 333 400 606 300 300 333 ] +endobj +419 0 obj +<< /Ascent 707 /CapHeight 707 /CharSet (/J/L/O/S/bar/braceleft/braceright/element/lessmuch/minus/multiply/parenleft/parenright/periodcentered/plus/similar) /Descent -152 /Flags 4 /FontBBox [ -47 -944 2835 838 ] /FontFile 469 0 R /FontName /HZKKDF+txsys /ItalicAngle 0 /StemV 52 /Type /FontDescriptor /XHeight 400 >> +endobj +420 0 obj +<< /Filter /FlateDecode /Length 1012 >> +stream +xmVn:+t҅k>$R* @-֑T@, 4_9r,lqpWJcWctsS o/OO_)-請>绾y9S៻~qAZMN{~%M/qwXL!?xK,? !Pm9)Z_]|+TnTH`8 8@f%s +,Gds8HdS"&G +9 0C@̠9C +&e =L,8YCJ( U2(B2(!iFI %$\/!9R nHZLqP%/n_Y +q9~GD)RBR EvE6ӑd'VK0 aw,qX_TlGchJCZP +͕dyb9$4Rlc+7U)঩c3sѬN ڔmCZiMS:ܯO +vAv l楐3^G'eOyJy)37|ve< ׵o> +endobj +423 0 obj +<< /Ascent 600 /CapHeight 600 /CharSet (/a/at/c/d/e/h/k/m/o/p/period/r/s) /Descent -217 /Flags 4 /FontBBox [ -454 -308 734 1039 ] /FontFile 470 0 R /FontName /TTTSQL+LMMonoLt10-Bold /ItalicAngle 0 /StemV 83 /Type /FontDescriptor /XHeight 431 >> +endobj +424 0 obj +<< /Filter /FlateDecode /Length 843 >> +stream +xmUMo0WxNWH +Z&T~3ڮzy87?nkNehܤ=77U\;?:׺v==onU;O^uu#½O +ۍ=٘a?kLy6F/7}̽][H<Sicݾk^90jYVH^v}0<rL ͯ_/CkBnyWTHkuqö{s\녚"p]ϞќKյ u/A )`JbD>`2$`TY'`(ZqBJŌ +)Ǩ%553<,(hlwB60aG+LgıcW c rn +q9Mܗ8% CMq.5ShrAI皎\Sȩ ]8 `Y7ь1Oyezl,d mYĸSSJf-1i:C&e c4R$D& +&+übLaj by+bYBg YJYYr֟bx(rGT̛`F+٭L ,C9?d+͊11ӊĊ׊T_~+Cg!o!_??/?㫄Y +?^B\jUP{xᇻL^U}9pQq0O}c}3tȢ}Ə!VOu˷ +endstream +endobj +425 0 obj +[ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] +endobj +426 0 obj +<< /CreationDate (D:20251201154909+08'00') /Creator (Matplotlib v3.10.3, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.10.3) >> +endobj +427 0 obj +<< /BaseFont /ECACOO+DejaVuSerif-Bold /CharProcs 471 0 R /Encoding << /Differences [ 32 /space 37 /percent 40 /parenleft /parenright 45 /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine 64 /at /A /B /C /D /E 71 /G /H /I 76 /L /M 80 /P 82 /R /S /T 86 /V /W 97 /a /b /c /d /e /f /g /h /i 107 /k /l /m /n /o /p 114 /r /s /t /u 121 /y ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -836 -390 1796 1146 ] /FontDescriptor 472 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /ECACOO+DejaVuSerif-Bold /Subtype /Type3 /Type /Font /Widths 473 0 R >> +endobj +428 0 obj +<< /BaseFont /BMQQDV+DejaVuSans /CharProcs 474 0 R /Encoding << /Differences [ 40 /parenleft /parenright 49 /one /two 64 /at ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1021 -463 1794 1233 ] /FontDescriptor 475 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BMQQDV+DejaVuSans /Subtype /Type3 /Type /Font /Widths 476 0 R >> +endobj +429 0 obj +<< /BaseFont /GCWXDV+DejaVuSans-Oblique /CharProcs 477 0 R /Encoding << /Differences [ 65 /A 80 /P 82 /R 97 /a 99 /c /d /e 103 /g 105 /i 108 /l 110 /n /o 115 /s /t 118 /v ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1016 -351 1660 1068 ] /FontDescriptor 478 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /GCWXDV+DejaVuSans-Oblique /Subtype /Type3 /Type /Font /Widths 479 0 R >> +endobj +430 0 obj +<< /BaseFont /BXGEVL+DejaVuSerif /CharProcs 480 0 R /Encoding << /Differences [ 46 /period 48 /zero /one /two /three /four /five /six /seven /eight /nine ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -770 -347 2106 1110 ] /FontDescriptor 481 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BXGEVL+DejaVuSerif /Subtype /Type3 /Type /Font /Widths 482 0 R >> +endobj +431 0 obj +<< /BBox [ 0 0 72 72 ] /Filter /FlateDecode /Matrix [ 1 0 0 1 0 628.35879 ] /PaintType 1 /PatternType 1 /Resources << /Procsets [ /PDF /Text /ImageB /ImageC /ImageI ] >> /TilingType 1 /Type /Pattern /XStep 72 /YStep 72 /Length 169 >> +stream +x5 Cw~!kKdWCEEz͗uOFtsmMxYǬuuZ4:MN PtQF##d$&&}X7)lfgFtxW81_0d2Otaf_P7 +endstream +endobj +432 0 obj +<< /BBox [ -1016 -351 1660 1068 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 119 >> +stream +x5 1 sV%z0OMhCaƇaQ\Gnr5pV=nj2$,.Hzǵ'nD`yDX>x]'Ybc=_J<& +endstream +endobj +433 0 obj +<< /CreationDate (D:20240104052304Z) /Creator /Producer (cairo 1.16.0 \(https://cairographics.org\)) >> +endobj +434 0 obj +<< /BBox [ 0 0 147 32 ] /Filter /FlateDecode /Resources 483 0 R /Subtype /Form /Type /XObject /Length 2113 >> +stream +xmXIr,u2~t| G8Kjyh%X|,{ȕ߼\\/_־GW)w_uu,?҈}}^|`tΘ}Y(^.Z3Pq2lN{[q.Pnwkqlz\D h?1V¹6iSqwN_{!L|︨ת:/"\E Q5CE胺^$hc?l fvq_NX @C?kӈ a(ӑ@TV8lۂ\}kTuP H8(Yl-Y5B.)- +Z,9aĬYʝ$;o}9ΐ,yٕ?sfn l%80vq:=qC"̡pjE5<%#i~HX&P8%&iBvb;Y:9/\7(f`M"Xd*u9k*Yd%Κ$H n(' TUiB 0SWfkӎ`Q;kY8ܱ(wq5<`k伈 ָ91kkxi73B7|$qίKF/W22vZ0[_n!ᅧ79SYfҭglNgCf]n;rKԻX_<$Bd3PGYKf6z4](se6\b]^ j;'}F._k){?Nb{Q\>&{PS[-"C:^k6׵J{T y Md!4ڵ8r|> +; 7X}Pif[pRPy0" lF$hҵv> +endobj +436 0 obj +<< /A 484 0 R /Parent 86 0 R /Title 485 0 R >> +endobj +437 0 obj +<< /A 486 0 R /Next 87 0 R /Parent 28 0 R /Prev 86 0 R /Title 487 0 R >> +endobj +438 0 obj + +endobj +439 0 obj +<< /D (subsection.2.3) /S /GoTo >> +endobj +440 0 obj + +endobj +441 0 obj +<< /D (section.3) /S /GoTo >> +endobj +442 0 obj +<< /A 488 0 R /Next 443 0 R /Parent 88 0 R /Title 489 0 R >> +endobj +443 0 obj +<< /A 490 0 R /Count -3 /First 491 0 R /Last 492 0 R /Parent 88 0 R /Prev 442 0 R /Title 493 0 R >> +endobj +444 0 obj +<< /A 494 0 R /Count -4 /First 495 0 R /Last 496 0 R /Next 497 0 R /Parent 6 0 R /Prev 88 0 R /Title 498 0 R >> +endobj +445 0 obj + +endobj +446 0 obj +<< /D (appendix.C) /S /GoTo >> +endobj +447 0 obj +<< /A 499 0 R /Next 91 0 R /Parent 6 0 R /Prev 500 0 R /Title 501 0 R >> +endobj +448 0 obj + +endobj +449 0 obj +<< /BaseFont /CWBTOG+PazoMathBlackboardBold /FirstChar 68 /FontDescriptor 502 0 R /LastChar 82 /Subtype /Type1 /ToUnicode 503 0 R /Type /Font /Widths 504 0 R >> +endobj +450 0 obj +<< /BaseFont /JHZMPV+LMMono9-Regular /Encoding 422 0 R /FirstChar 45 /FontDescriptor 505 0 R /LastChar 122 /Subtype /Type1 /ToUnicode 424 0 R /Type /Font /Widths 506 0 R >> +endobj +451 0 obj +<< /BaseFont /FAOACD+XCharterMathMI /FirstChar 22 /FontDescriptor 507 0 R /LastChar 159 /Subtype /Type1 /ToUnicode 508 0 R /Type /Font /Widths 509 0 R >> +endobj +452 0 obj +<< /BaseFont /OGYQFN+txmiaX /FirstChar 61 /FontDescriptor 510 0 R /LastChar 61 /Subtype /Type1 /ToUnicode 511 0 R /Type /Font /Widths 512 0 R >> +endobj +453 0 obj +<< /BaseFont /BVQPEM+txexs /FirstChar 0 /FontDescriptor 513 0 R /LastChar 213 /Subtype /Type1 /ToUnicode 514 0 R /Type /Font /Widths 515 0 R >> +endobj +454 0 obj +<< /BaseFont /NMCNFZ+URWPalladioL-BoldItal /Encoding 412 0 R /FirstChar 45 /FontDescriptor 516 0 R /LastChar 120 /Subtype /Type1 /ToUnicode 517 0 R /Type /Font /Widths 518 0 R >> +endobj +455 0 obj +<< /BBox [ 0 0 1082 563 ] /Filter /FlateDecode /FormType 1 /Group 145 0 R /PTEX.FileName (./figures/v32_arch.pdf) /PTEX.InfoDict 519 0 R /PTEX.PageNumber 1 /Resources << /ProcSet [ /PDF ] /XObject << /Im1 520 0 R >> >> /Subtype /Form /Type /XObject /Length 37 >> +stream +x+2T0BC]s3]C ˥kf +endstream +endobj +456 0 obj +<< /BBox [ 0 0 460.8 345.6 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/cost_prefilling.pdf) /PTEX.InfoDict 521 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /A1 << /CA 0 /Type /ExtGState /ca 1 >> /A2 << /CA .3 /Type /ExtGState /ca 1 >> /A3 << /CA 1 /Type /ExtGState /ca 1 >> /A4 << /CA .8 /Type /ExtGState /ca .8 >> >> /Font << /F1 522 0 R >> /Pattern << >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << >> >> /Subtype /Form /Type /XObject /Length 1119 >> +stream +xMoF+tjgh'XHEN +*JwIDB#gg\+[WXNO5޷BckmS3)n-WĔޫ@&E>7tpRTz]2QrԊ|,N..9pNí'|)y5}DMۮ(Xrp~^~^'O-/4f_ dZů$גKosY.ߋ_CO@.*\x cAʹ0ۼ +_?YvUc8NpEASpt +X< ıǡSZ+dT +g,6NƠsNk+U) A d6p܄pP1!9mT 4'ue㧃SIjfNެUxEcR8鄴 1Gݏ]Q(_o6h9@o{E e~br>zNR J8lО^FEǚ\?:_لN>ql`{g턜1ѡ[f]24) =lrԓ'SZ\*}2ĜBO#Oɴg@'%tyۊd6txa&ݭKc I1wEMQ|<Ƹ'֔ϛQV8p7Or]+\%-3 woRchu,g +p)fh +endstream +endobj +457 0 obj +<< /BBox [ 0 0 460.8 345.6 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/cost_decoding.pdf) /PTEX.InfoDict 523 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /A1 << /CA 0 /Type /ExtGState /ca 1 >> /A2 << /CA .3 /Type /ExtGState /ca 1 >> /A3 << /CA 1 /Type /ExtGState /ca 1 >> /A4 << /CA .8 /Type /ExtGState /ca .8 >> >> /Font << /F1 524 0 R >> /Pattern << >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << >> >> /Subtype /Form /Type /XObject /Length 1092 >> +stream +xKo7< Lq8|5@ !IݸJ$j D$쌖Amc>\_77bI [|$k|okqj:!_!>%lpߵ^6)y<S#",rV-=ȾNq&je|N.M~([OIS:D /s4|rm(X@s|~'_-/4FLQb-bIr;G|T~w׹x_J;Na+a Zq؜yaQgU +nS쳱aPϋ1v[U>0Zi]'V)1;$&@$9:,:NByY~[ Wca:2ԍ߱*&г"zIF/gb29}t:) +U**1ke1\`ft*hF EGlG3‰IS䓠lM4@Z c0"J;$Cct ;>a;VK[R*iTZ^;?Ki1 hWz(M +ݕ[q:"IƅL~ lc #eMEZ`CPp \hEP αUi,v}Niߞ\&L58O%y}XT+A:a6jb M# i(UMU}΁]S/Vmg֭z +B\Z{9Y/YMmG,/L< QOs4 @~Q?f+m +endstream +endobj +458 0 obj +<< /BaseFont /NNFQXF+XCharterMathBMI /FirstChar 88 /FontDescriptor 525 0 R /LastChar 88 /Subtype /Type1 /ToUnicode 526 0 R /Type /Font /Widths 527 0 R >> +endobj +459 0 obj +<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter /DCTDecode /Height 671 /Subtype /Image /Type /XObject /Width 1280 /Length 76981 >> +stream +  +   $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222" + }!1AQa"q2#BR$3br +%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz + w!1AQaq"2B #3Rbr +$4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( +("CI#"1Ԛukn ]%ȷmޙ|Oor}f;[HLR(v GkۭanQX^E-.. `mgP <`^}΀G>凩kq)]ΊΓRfI;iz6ex'S(<w\xjmA#(oP񍮟H4Gy1* 1'=m|9}ok=:n 8&IoR*tVSom临[$`gz~k}Bե)J ##5*Fa_]+ Qn 6&.{}GsIkrD$&'P끞{ +[ [Vu3 Ek +L9$qMGJqvs#6ƻsEeyo̒vh6ex&S(<w\xjmA#(r6%C{+ǚf Qo铞x6vwsBUm$w}71Z]\ -60'ޝGЭimnerGr23RTK}}v7()g6mKks,s8<Ԫ$a_]+_E02+!Gci,|Qo}ĵHbYg\ *ZoskVOo> [*Vu㚇>.;-ݿ \LjnEu +qvsV޵qEey&IP;X/>xŕ](<w\xj!{H::+񕭗О散Q2 12sڏxڕW4( +ya[@Ww(x۽ťCchr}׉MSXe8F}cBZ[78뱹Ea{x<*02+!G7tϽ%-|16I JauCh-{u9+ @E4-naHY8\Gxݿ ݞ>ByN.t4W9[ntȬ"*kmZxYL̃;W=sM[+#r6^(B{+ǚVE*,n铚OxڕW<( +ya[@u"tVWmtkK9`>Ρr}߉=RheP(,7)nF}*$a_]+ +[D0:#B0n tϽ~'ܤ1aeaH8^¥n'˛mnaHI8PsQgŶ'Ovz`S +m|;]hsC񍮹\^C$ +ļ%mn|U&W2;ygh\xj!{H:J+񍭟"Z񦑑DʃFNi5TgCQ4,5VKuuV:J+7-0ݏ8ێ>&k} Hf'eP,2ϵ%BZ_sVϊ--ַM 0TyqLk{{ ˯-;YGv R-{u9+ B=ks +@JL1}? i=ݿ \LjnH6N.t4W9x^ծtl!{ufgVmK_ZxMldwC3 ўSiߠwQ\׌mm&k}JdBBʓ>ԕ +Qi|[ *nQXW^(ZZ42*0Tyq#4ZkktƮQ3KT07h= qCks +@̥&PAz>,86vFvz`St*EI +qvssa //2 hߊeVfL̃;FzMW~GEsw^1Lz Y^4eA=sF]V沼U`*2y慆IniIEs&m>;<1g@ێ>&{}KdAa->ԕ +Qi|[ *nXW~'ZZܴ2"0Tyqdgދ[xVM}mnGc (GLR-{u9+D5\j0 Re >|Wmⅹk{K#f~Ёs=0}"w8kQ\ށ_jw0^@)b +px6(A[+Ś6u32,냚o U6] T\όmmTY^4eA=sKC-٬&p^$F U_=ΎMo aqgwq#q'ޤ׼Qoi׳Z̓P,2QR\/a_]+^]{[EF0n鑚H-nD +IQ|3KT1kV{}kE⵹8 ien"؍BTWmm)]+?I4rϦGpO+PyYJ..VcM5tQE!Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@U ,@S\ׇom~=OgJ[[sH0z0aq4bl%t㹮d wVÇFHCJtuVn9lzQXNNwe$(C +( +( +( +( +( ++Z~|_M' edgL}6<x_2˥SKqc2A@EbxNGy lGӊihyϲՊBNO ഹ_qk'D+@>i{-6[#f<xx6x#gsZn\y!#'p9R*+<~#4F5|m\֡kY<"RHⷵiC8 +22OLSEq_|9jyMJT{{!wKrOn+;Ta,R 6CÂ2W>+ch𳶷I7[&s9I[w 3k67 +xºwnD-~^z]QEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\_tC[ѼE֍`d`tQ^}Ƌo%:jbm~e9 g=뭹md)N3w@Ώ€(yxQG@GG>gt)tyxPyxQG@GJXuUy!$iX]C#SЊZ(@' +)tyxPyxQG@GG>gt)tyxPyxQG@>{iZh+[Xg>yxQG@-Ʃ?3‹mu>.HLo;d^⏍n嶕 l32m{vtt:6}ψX,7ڣDCJ~R:ke>SG2= l|QG@C/}sh<gt)tyxPyxQG@GG>g*Ȍp@{ +MOE69TSS(W)t)tyxPyxQG@GG>gt)tyxP0Mu/[&:$qff(@<(8.OgHi,ఝUq!P?0x|KGÚZYݡ1e/=; 8^GIG@]iWW|7=v 3˴mrA^oO"imu5b%UL1a wJ:?<(}JGԮ7xXI21@W}zG'p-֠L)IaݮG:OagMK'͂jrTg8Sһ_:? +_:? +}:? +<(S<(LΏ€E3Ώ:? +}:? +<(R++} -LM>-%¼{׷W9tau +eʿmVizEOQXQEQEQҙ?PyxQG@GG>gt)tyxPyxQG@GGq~wn;{y2mm=I6C^o$6š)rCz{_'yƁ Kg:C!R]ٱ:֧,`㋩m cBɶ+Ώ€8τW:kimIIT(}g2hlyi!d"xRy|P >'E}UN(!OeSVVgtmmQ&(B3$WiGG>gt)tyxPyxQG@GG>gt)TcŸ@Q@Q@V>$zΒ,0nvum&:okR0䁽N07u=EnVMY[Eo&.{N$N'soRQEB +( +( +( + hEL l:<uE 6tyEc=Z(k͏z/G_αh 6?违l:Ţ6tyEc=Z(k͏z/G_αh 6?违l:Ţ6tDcOJ(vH9s%3rH楦؟LN m}jzQF6'o {O]K!\= PŠ(QEQEQEQETvXB,yEc-c=Z(k͏z/G_αh 6?违l:Ţ6tyEc=Z(k͏z/G_αh 6?违l:Ţ6tyEc҉c=:Ģ7h. ӊL PH]H=EM׭UX~jP-u5Xe$W> +l zS+_UbX䜚J($((((B@$Mc}i<(V^l:<uEmyEc-=͏z/XPכ_Ώ6?违b@^l:<uEmyEc-=͏z/XPכ_Ώ6?违b@^l:<uEmF8VS4 t5p =ISpj6 TjݿƆ4K\ou-:(iV@yLvtUx_mqcjKp2N~_iMI$v袊İ((b֢o~DQL(((dP~ 㔶;N f=͏z/XPכ_Ώ6?违b@^l:<uEmyEc-=͏z/XPכ_Ώ6?违b@^l:<uEmyEc-=͏z/XPכ_ΟXU(NBVm'=UjC.QE# +(0dZZ,cY<+vlHU]ZέI1rUxֵ۠}baɿ7ҩUٿ7ҩT!)(((+;Q\֍gj?@S((("k%/|NpcKQ\[huiT4Dy<*<Z4ֳ1;I 7M&\+H:CEsWatCJC-w봩 :a1Ÿ2.1[sxi7Zj*r[FAs7"MMM"=WsVAfN`AzT ľ-~yvOq{;]H$0?uWx߇kkWXԬe]v$-VY7)mul#E$QtucEPEPEP[QOEb_S@vU*ݿƉkŞ&6hfdҷ펁coqj8UUNsҴ*8y +nzܢ+(( + ֒UQEQEQEQEUoӿo@QEQEQEW5kMRzđO9O 艬kZQ,V2,a@%#QX:Oa5)4˽>KXTye`H8YP^;R1}=wm@}ɍzK?;۶]eS9,Vyk.bm'l@U'i#v3@Q@Q@Q@^ӿTj-? +RA} GRA} .QE# +(0t+ Oj7NQBqtkv,<2>.ut\f6<߭I6+-DYmaoRoRQEQEQEQEOkF )EQEQEW3]>qO]5jj/ψ!u++-4v2ڱgη֫:,%!+f?z] ╵/xBmKҤydUVv@ MdZw0x +RJi|<L zex"f)/j&Y> {8;85E +( +( +(5?S꟏fף}jzף}jzQI0:TC \O󫴀C +zM QT (((Zz-GZ@QE +( +( +> iz䵱{#A]=x5 66r_f<5DygF:V<R}*+'6; ]g:(n[&xrO^I}X'qޭM^Khy'.(VGNEwP3𕮩 ׬>-Y1@@8(QEQEQEo\z{UaUm*&R)\Nʮ+ }U@ƥ~4 *QEdQ@Q@Q@Q@WAXUQEQEQEr|Jusg4O0*p@x}O*.C,YcK"Ҏ j(-3:>}7::|2 웂Oc]k=O:ޣ&=k hn,ӻ䓴: }E;wk ۏ4kn'-t] {E{ + 7hȠ((}o~dQ@Q@Q@Q@o+2+2Q@Q@Q@~3<YB\Mjh9cEj7," 6xJ(moWmF]*JVeIӅ9zkIAۡ{ C|v7~sӶ3(c4{m.om +#e(OlguK_驤i"m)ہX$^EQE +( +( +O¨;Z~~pp\*FQEsw,g2]#Ʃ PcҺ:4 nꗗW,TX+|{t5rWwmD&TJWfTJYQE!iVZΣohi2@3=BWZĻ;m_$1V\cJ7h}N-dE}ɕdd8p +rz1+Ǣʊ H<k>%⻱#Exʖ[bt {Pg%bq.=Oe/$Tu&X9pȡчFR2+<@T~'qwt\Rvqp9^סGNLR\Hr<#Ȥ[=A@uޏ1օ#*CWiâvZzEQ/ҐTVOHJ6ZzEPU/ҍ~Eje_eQZ-="(i@TVOHJ6ZzEPU/ҍ~Eje_eQZ-="(i@TVOHJr%G1@@5SͯFF,a?uv7Wi|5B +(AEPEPEPU5&`8A9@TVK\")6ZzER*iFOHJʢvZzEQ/Ҁ2]~l +We_-="(*iFOHJʢvZzEQ/Ҁ2]~l +We_-="(*iJ<P,EZ`Mm*UX~jW7JBvFUvEsj+_ +QEY!EPEPEPEP]rX [njiH +We_-="(*iFOHJʢvZzEQ/Ҁ2]~l +We_-="(*iFOHJʢvZzEQ/Ҁ2]~l +We_-="((N$=@1RV~&U_+XZDa*ǗdxO=-n!LT6Hc]Q6)sv( +( +((7?ZJVIVHQEQEQEQE^K[ YUP2ZE4VOHJ6ZzEPU/ҍ~Eje_eQZ-="(i@TVOHJ6ZzEPU/ҍ~Eje_eQZ-="(i@TVOHJ6ZzEPUhiB;#.OHJ1@ RA} GRA} .QE# +(99=L^r\7Zӵ-fo764cV#s|:ڽm" S}*]S}*faES]#EstwAf m=8+P4Nd7cە|]BG~hH3;k&5dIh㺈Jy 8k>h經Om&*{`+ KӵM>ͦQ+>i9'95Cm?ǧZu,PLee#եE +*gMhVv?ݠ +tQEQEQEQEQEQEQEQEQEQEl[9$sR꟏fף}jzף}jzQI0:TC \O󫴀C +zM QT (((VPqպO>(EPEPEPEPEPEPEPEPEP9p*SԷҮPҭU[oV2JBvFUv\Nʮ~5-EsR($((((̾rI@b>?WEPEPEPEPEPEPEPEPEPTkir+ĭԧV~&U_9O]: hnb̤F8G\t_Uӭ2\+sGduin5SNdWGEV%Q@Q@%+}$((((z-ӂHZwH(((((((((4bb-? +RA} GRA} .QE# +(9;7W3Y-U-#WIrӽtuadfRes6Cc}ޭ{~[ȃ&TJWfTJYQEQEQEQEOkF )1 JNZ\<+uqCۊ񾓨jV}֗Oy_Gz|=7t]WRbw)4CQW6@5+ #8V6nj x~JhϗD'U>tޥsen RP>ɨ[c  :j^*Rϊ0E@A9Uzm巼Amt6A!8.}r:W;x{T]cMK]KRft2RzLZ֩o?svn'4aOq2huu;FNʬwjx`ss?- tѵYۖ(Ԥ;H#r7.z=PxOvQ=ԖUB^5֬uhf yd TW~:HtRNu[ Q@⢹Q,k![MyxN? \0_iw:m;Ys u!;GŐ[_[Xiſ+ C, cgaz:[؈v Hb:[gS[%݇qLay3iW:s]^ZD:ڢ9# nrx>1B/oMB᳑+Ei%s4I;4VL܆F' E7}CI4&OڥF/ˎ玴4˩ot}KK?m` ֩[xnFlm/-/.bUG9#;8"KOEubŬks" `B8oMV_/P-.+0~c\8quKh5[+m3R{skh2A9!sl~:Ciy3NYD 32NpfXŮxsT ڕAu*B/+0'*3W/h:<AmywnV{k934r; A34Z/..䲻fPU V'KXwwM66kȩydݍ<*OSҝ-"/%u;xYPrFN5O=Ѕ4p<~Tܵf{HYRO TZ@0=QR#GORJT-5UVaULRѿ]W7򫴀*+_KQ\h@T* +( +( +( +(2龃Uz{Mʫu+> xwO !9UIRk)cå܉ěcjjq'3~t69 gF:wɪƚF>wiJJo6fEۀ9.4Ϧpmdb4B@ppTV/%&cj.Tň=Bk4^;дgH$'OG+FsVocWQ5BQ{Wk+e㌃ڐ ׏4}3J"-NV,$Przۏ_nkzK>+糑-o>7 k>4ymTpg0S;C^GG1L_t簶ԟIգk1#i sҼ[M\ep}R|ȳqJjOҎ0#Ir,O_Nk[Cu]Ѯ@U\sHaCtV4Wz +OYԼayaijZxֈ@d7s\5'U}z63bʭ p0 lNˈ<=Di[L:z/YYiڍ&h# +1՟yzҟ[5OO{Mqd-q{=iy 'n610ʑԃ犬md[h~|\ulSxk{;&q<7F" +-#Ee & ̉đ(Y6sP+On7١Q!r\%P\ YŜr4˵si~+K=Z}2IukdtH@ e(4V[) 2A\&Ma jKo5hHh8](azW[-4^k`伯lnLN\=Ͻ00.oIkCP,/V~PTYA8cW/iח>:6j# mE?[QOE>MTvC%s1i\)c(>^~+s7݆m&n +*a0rq۷5Z=𳣢+Š(( + ֒UQEQEQEQEUoӿo@ex{/ +jvY#z$U-zN>yV\Zz͇ռ#R3 "w-؅ȑ>Fݞf854=6[^jƧf%XmwɅ݉ hXŠIZZ3ZKE^IAXZD·yǧۈ1n?e 7)tn!q:_{u%ނ`Z?j-W5)=:Jm:?6x# )!0sFⓩ_[Ojڢ2Ks@U'iZ5Ɵ\hZӵǙ$ƠU|7c[xt wKR)>wm@xn +ۛǖͣjBqnu',Awm[[MjF%K$V!鸒9=TAxvK{#7Z{jā켝_@Ʊ}eɫjH$E#>o&kKאmgB<</jޓdu7./PXW2GRu6ibwcY䷶e7]7cPMZ vDsuEq@1mu4ಎ(%{]򍫕XLrǥZ.in'I$nrMX`ڝd[IQz  Oc &86b6*-? +WiPj:hr(QEc^)4mY/ 45zXV7Z+-"E0n\DA+2VkY$ՓZ-?"aɿ7ҩUٿ7ҩT!)(((+;Q\֍g*wc4EPEPEPEPEPEPEP3/ Mp=\yl.d391+ԴPEPEPzzJ["ML 6SSԲM!'ڤO]U +hL(Q@Q@Q@Rէvj +L*p͢)QEQEQEQEQEQE^ +е[.-IHq 7kioci) *8`(MEQEQEh[W*>ȫT5UVaULRѿ]W7򫴀*+_KQ\h@T* +( +( +( +(2龃Uz|\#ZQ@Q@Q@Q@Q@Q@ 47DWGR25x öwp\Eg+}!I"U1ҺJ(((ԧ@$ [h +Ơ +u[UV~&4K\猼Ay:.[Վs+x|/aotֿhXv1NsZaU.^o"f(,((xi)[%Y!EPEPEPEP[ +̭[-lp3 eR((((((MWZ>z/n.yfkk?HSL,}>+ >-blk$I>EQE{NQ 9HGb8$b.ԐCQԐC@˔QEHŠ( +t^-0.HI 2:ջXv:>mCS/\Fx|!ޣ[fVmaH=)FzFUaiPywȏ;:*Z<pNG֏"?\,Sywȏ  0@#"?ywc;$^ +PzgC +zM QT (((qQ4_iFQAu&"i4 ֓:gּQ+ʇ?]}HN=ﵣ:gּQ(ʇ_c>Ӧ{_hN=ﵯ7`z +?Z>Ӧ{_k=0}u=#:g֏Z|AF*]}HN=ﵣ:gּQ(ʇ_c>Ӧ{_hN=ﵯ7`z +?Z>Ӧ{_k=0}u=#:g֏Z|AF*]}HN=ﵥ[4 5=u60}u=^̷IYX!E'0+r9>t%$Mm*UX~jfq!;O*T?'ioWiTW?UЀEUQEQEQEQEG3DAԹ~W:gֹOI.`f>\JWH5+գS8bdǤ}L3{k^o(T?Ǥ}L3{k^o(eC믱i?罯}Lכz +0=P`zGtk}i?罯AGT?>3{kGtk}yQǤ}L3{k^o(eC믱i?罯}Lכz +0=P`zGtk}i?罯AGT?>3{kGtk}yQǦ-$Vkd:5!jEqc0WN+[ջ_nWk(QXh66qQ[⛽R[v,a2bLg :4ߒSYEVEQ@Q@%+}$((((*,rFX>f@F09¹ǝuo]5s>2;_ʺ??>(<" \]k-'N_F;՘]cQ +_$q Pd5_6K-:+ Ga=~0UfASӟZ_iuoEg}{tp0992ONj;o\6^=}CS֤Sjv;GiQRz +g$lQ\ŷ-Pؼ9|c=zqW-Og-SY3ܜdt*_pttW:-A5W:VjofX2xy@_5.a[ + Uu vX7l'+͕]԰_Kުu[IBK1>ۮU+o WwjeQ[Q@?vEtU;AoWE_1j[G0iwMc!Y*Pwdx4=Ź5VV=ܗ6B{נg"Ե+\[IJJrq>OB'Vz+t]Ɵw@һ#<(z^>[4THR[{694LEs~R5 kY+: +)ӟAtmq"0S, *צ((((xi)[%Y!EPEPEPEP_W.5N&S(Ԁ4W]REj6FԺZóf^ jd4vYKP±ȈťpX€KG=OIdWiWmL _F +) ))cXX:^43/5sv*݆y7ĝcNkk(tyb#jZ9@:+]4%ťY_7;U/bITz,ѯQ{ D7&ܴ!d)+,Ζ BJүEmZ8yr2Q\-^>5fqJ.t>VzeŬOdh Y.gMTx9d^c9ԯoYj2]]4+K&2de=ͭm.utWpiΥ\}1 $8UXZh X(Y?«UO+:*H?H?3rQR0(ӴZzquM5X!o'it=+sN__r]_@o<}zG[Wm]D6S?J#aESQEQEQEUMCQ-ڤ@,}uݏmP4G&Wk[w?i_M?x\+5QGu;M4s| <.ᨣ:g&WhO?pQCuM?x\+4i Ƹj(Ρs <.|~2]²\F2ku0CHу# Nq[ԇ${3ф,G+JIX=I0:TC \O󫴆!j_= PŠ(j&?`}1VK+Y]G490)+i; +(3 +(;O2諝w'(cy"koVUJBvFUv\Nʮ~5-EsR($(((( &OպfqBzm4+zφ| Z>qqt$ЇUhcyX=@޻*r鷍NS[w61@ɐ\s]MSJQEf +Vm? nZ \> \>˔QEHŠ(sN%kw.jm1`3|59k~3,cW` SҺ:ںjJ-ބCaҠAQ)(((+#Wk\W +㯙ϊ9z(šweUQpөC/ Ѭ8*!OOOS,;IQpvOzдNgq/%v1zq Km)]GF{{ +Um z>:ۋ-c\MHX(i($k\m[]U,&-Ѷ|k:}Ŝ4{XKsy1oEkBLZTFUwUg8PX֒{m`y%HAw`> {,|+VFh$A# Ns!%$20\$j_Z+qS2R# ˨k>!:N-B9!߰oWOj#0۶ډTUO}@OjcKiw+b2q߾k_V[u0!.+Y86:U9qZpWeIcFz2AE''JnZ 34;U +LҾ!Icn$]s',Vn0+~%{5y+vTQEtQ@om٬o Ȼm|'#KzI\sTRo 'q?ή&!zWCT)0*QEQEQE $ӢL;1@ WTS]xUEz94I6pRem|?!sEz7^>vȣ/K;oQa9wG^ϝ(jCX}N]4Wem|?EڐVStyz_"/|G?sEz7^>vȣ/K;oQa9wG^ϝ(jCX}N]4Wem|?EڐVStyz_"/|G?sEz7^>vȥ]7LVm-:|H+˹CpITK!eq3[ըM;H[?JUmZY)\Nʮ+ }U@ƥ~4 *QEdQ@Q@Q@Q@'=ee;%E*ݎJxO:z8UO+|^ BS'$vȭ!˺vȣRr9/K;oQϝ(ԇhFem|?!>.+ѿEz_"H+˺vȣRr9/K;oQϝ(ԇhFem|?!>.+ѿEz_"H+˺\\}|݅GsZaUU^SgGEV%Q@Q@%+}$((((I5JdǟiVdJ7)QWso(Ϳ˰JX1FmcvFR?QX1G]f?Q`e**mc{e9JX1FmcvFR?QX1G]f?Q`e**mc{e9JZcOͿF1JVC,-I5I5r(QE&70Դjw1ޮf;D4m/OU>&go'>rd=:#Ia< o+o9ݻ9Z)QI.ߠw +($(O Ȼmcx[EoFk?ƗfBXԕ]J{a?uv7Wi C +zM QT (((.5=V!KbQ]EPEPEPEPEPEPEPEPEPf-'OU?՟X*7ҭU[oV6Z)\Nʮ+ }U@ƥ~4 *QEdQ@Q@Q@Q@Xv Kq +! nQEX(((((((($9P}Ef֌+ +#JcݿJo5Q-s1ִ:MݧdU`nks> mqgj-珥iMI+2j;EttQEbXQEQEAR?ZJB(((( +R8$ʭ; +̤EPEPEPEPEPEPEPEPEPZ{:V}^ӿ@H?H?e(aEPMB& `K,cVaXW}gז>Ս۶NZֵկL6p* +T1^8K q=/HֵXMXp +=+|,Vqݲq]D,>Rg6GYx7wRyWvWkXGB8" Ӟw&ω{ -bЅFr8Bp@S3dtPӰ[h!ҕǨǯX; Y\G˱=r:VH2Ϊ ےs.qZitⳂ<9-  +<5v ֽ]R+3nr]Fp#w\,{  ƑH٘sWח0|"s3tI6$$mv:w;cZ#r88=Cǵ v~#mukfRkc$r3J^q~ڡZ1ԃE`tniiww̤!W`38YR%[P*sST\YzߣG^>7?פ}?o^_9>es~zߣ^}?5>es~zߣ^}?5>es~zߣ^}?5>es~zߣ^}?5>es~zߣ^}?5>es~zߣ^}?5>es~zߣ^}?5>es~zߣ^}?5>es~:=R@cqף}?"pCsI5>4#ipZd12NO󫴀 ו)9IĒVDw*8ԕܴRo 'q?ή&!zWCT)0*QEQEQEZ֬kZ*E`QEy85}'Kwo^3_XwnM>A?{?x):V2ZWpj7ilɂ0ıLK7}gQw%躚3<_[/dme)Pr HѵzkI oI .W&oZҭVLRѿ]W7򫴀*+_KQ\h@T* +( +( +( +((o¢n?׷QWl>a-Š(P ѳ)PIG95\b&{6OzVlgI0g5r#IóռCe +䰄܀ #_+=bnn_"(}$ x +ƭ_khw$w=H#5o]sJ-UlS.tvn (槚Kax_ZRY^i:ť {m8I ևo.5hr3FHYëx]5t:i-mvw$HɮW4k+Ț-9cnr)Ŷc&qtRH> @Ĭ ;A<+GSHvXl_^jڍd>t98FKvb6ԯuX^72\;Y>mOe[FyV#CB{QT կVuh~4:MTv\L{Sp&a$ٌsVa\+yWIHb ?JR7hlnQEAEPEPIJxi* +( +( +( +(*ǷVeiǷVe +(<6Ηui^4uhZcHO{c5.X4nu_wo eڠg'T{ v7{s>5-5 ?l(cyA^-L,'p$x^ ԯ5(uּy;soHڣS|Muiճ%xU|G$NS<i{nf-b64hzm巎S}=|N1&!4[ENH> `¥N̠`*ޣⴵ#42Vkavi,{\z֥?"=M1 6ppFkZ4iyd$_hen"#-FTv'4c]B#2Hu<O~&lKagC}ifg,n=+ AWSSԴ%c?eƙ^0Ej2Dά7|v&~iN->+6r= +eI#ItxR7f>W>X9d+u[jiwLh.+xs@8 P!{VK꺜W ̜(3ګkW^#QŦF,1 +LU.&oZҭVlUT/QP>!H mR3ElTy#an`Bm^3[]tNGU=E:WN$FTv۟_T* +(е/iIi#[;X(F җҀ*0$ oȱ+88. +84nEQ^߅ES\Pd>a-Š(QEQEQEQEQEQEQEQEV+;u$PaXWSMTv\n+[wעImp$5X^)A|@pb/#'0q5t-),ݢ+"(( + ֒UQY۶?@}n÷ݷ;sڀ4?& @`Qzj(ve-p̂D S9#n*ǷVejީ{ck*Q@Q@Q@Q@Q@Q@Q@Q@Q@^ӿTkCNB؎  $u$2QR0(4>1to#TLmzWC\条45ibUJCҺ:ڼe?J~DFŠ( (((Ww֔"eR( (μk 5 2hz޲rE`T5~k?GPH+_mC*)m,`X=s]ЛY.E|eJnm^W[ιmڄVZ05O;AY8s +OZV[:֕s AH ꜃$g_T&=^ehKks [:yB;W5uY{?^ʸO<~.u;Ra/k B0d|ÊVhWg":c&f J[f3m6(߆4qh 9k6lY~-}Jú)1\ZdddGci+cowx~iK0v$%x uK{quo.Bcr];PH4]PZե7ec ?۹-nZY5K^T#h=RԘEJ녗GƅiwOV3K5M!b.2{WOaup]J8B?,<4hmO _p-Jn FzU- +ܱu`,dxhQYc@К>Y[i-aXhz*P:kPN6;O%;U}@m[kjWv&,޼EL/EVQ@v쿏 O_/-bRTqw+'hO]M!'C5BSBaEU((((4UK+ +8 phRm?QoX1YQͷ6ޱb(oX1FmcdQG3 #_6ޱbzȢfFmcE,|z3m+"9Yf?VEs05m(ͷ(adk?QoX1YQͷ|cVEs07h.Z PҭU[oVYHq!;O*T?'ioWiTW?UЀEU(+ttM͑$I-m5=k^icY2[1%e$erC/gvWiy;0,VcXfLG{S}jfY$fI;H9&;UΡC6%3 +P@L=k=*BNkr.Io=G.cioOqKİ$R:@J*w`v<6iSM +~Q1nςt=wVT]~K/sh$aaG-*Ñҋggi&S+LbI5=WM> 8D+!zI5mz6ޱb9kUAc_6ޱbzȢfFmcE,|z3m+"9Yf?VEs05m(ͷ(adk?QoX1YQͷ6ޱb(oX1FmcdQG3 #_6ޱbzȢfFy$3RV%H "nWj[ULhQiՍ:[DeS,ܬxeiC=O>o^ؖImcsސ#KK:'ֵg#{sK14 e:'tIⷊOQK{{GKKk3pI~'aC/d;6'w |z9/ Tcl.2D9L0p=(Ri3MK!< +a+w^^$mgfafL0 ֻ#xTxl)9 9߿4-UuK8ZB5/+[c +~iV~dmpe7NΘIX N#zJ<(YDDXw'P[EsZ>˪i:.IZ;@,;iu7NHgfͪEp/\1紼n )`O75x%dX!'y';8\TuxI|kx.u_>t.!?3&ְ___z+o'P:\n*@]¥ψ"6m} Ӌ+dQ$I( ?K*SԷҮPҭU[oV2JBvFUv\Nʮ~5-EsR($((((ʽU}7*H*g-\ql@psA yWnxd0Zd$E^>ٷ- ;9QXwVPNԴ"`7+R$}VRAqU]3ƃSDuXm~ȬyeRYhmNh>9 ,d`SV.%$x Ž@uQ@mE?[QOE>MTvC%s^&mmmrY9>9-;YԴh[p# YLpͪi͓Q^/KQXQEQEPo~֒(((( ?S_]T~)QEj@QGziΟ-kVw$Reڄ652(ҹW'&BWzsgFx2xI>f[oZl#,IsftW9xo54KH/.l{HG +TJj$!CB@I7d:+:nñ\Ļi5Υjiacj!34 P:rOwlXFJ[p 5+ +è3Sѭ˿\MwcLMR)yݜצw25`*f +Vm? nZ \> \>˔QEHŠ(sM[jmŨM:%h&o'nFzWG\Io|gmlj(rKgol`uu d*}z+SEj*j*sU( 4Q+QVh,VG0XEY`ZEbf9j*sU( 4Q+QVh,VG0XEY`ZǁV(,"2YwJԔNJ9.zdg#*Z{c۲<z(CT*j4&QEP(((j?TigE+˿xR vkc Դ/kMΩeiS,/b2~/u˝T6kASnץQ@.?xIէѮ-&9Y_2i$p3֮|hJ“.iOUSN* z isˮ^CT4Jzy峐 uĚvjM^KMA-Dx?z蘒,|Cxƞn]w[۬9 }tg"YM]?2<sn`Hq]}ï"CsxfVHLN>j(jm B(-iF0ֺZ(( ?K*SԷҮPҭU[oV2JBvFUv\Nʮ~5-EsR($((((ʽU}7*H(c@o- ktIʐcze G|%Xj6}ƯhDZlmF#*k?P淨xs7-Pii{Ic1fS.om{Q7lM[(xwFS} VB i9}A݋M6Yzv[jw&2mAZ='xE,wg` W@;k_iSMeVfUD9:Χд=NRLȉRtN?t )@5 "X/tFT*; C{Wc5oxCg.!M*'IW闺Gbh.w13xMBC zZZsȁCIrAP76!5KJL6XL{nվefMzנKs) Jh/2'A/m|s-oekyN1 Xl} u4SPIrtc:}]H1Tk&V[O8^ &qw:)[i"_<FLvyVqvӁʂAj\J(l (Y?«UO+:*H?H?3rQR0(ĐQЖՒK8ôŁqzum&ZohSR0ާnVMY[Eo&{QYQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE!jhU)c1;И(AEPEPEPU5- + +ytPC<ȇy'H j+gȇy'GOʀ1"䟕D??*Ƣ|~Ty$!IQC< j+gȇy'GOʀ1"䟕D??*Ƣ|~Ty$!IQC< j+gȇy'GIP6V "QE0&X~j=MMRE+ }Uڥq!;O*HUԵƄJ(((((.H,G  V-;"\?Z+~-?MBOT[hlҿ}JOSsÚ=4Ui_i}>٥ŧ(sÚ=4Ui_i}>٥ŧ(sÚ=4Ui_i}>٥ŧ(sÚ=4Ui_i}>٥ŧ(sÚ=4Ui_i}>٥ŧ(sÚ=4Ui_i}>٥ŧ(sÚ=4Ui_i}>٥ŧ(sÚ=4Ui_i}>٥ŧ(sÚ= pI+mTU=@qc,D`MZiO`vU*ݿcD[PO7Gt6 :fI;;~xCGJXvnV.xz nyGs?Zx\lu(d 68w؊x7JkesUj+m?^+;6~dֹkQF\g(Ȣ}o~dQ@Q@Q@Q@ܩhN;*ӨK[ǟµNUfDrwuc.FRuvFRuvFRuvFRuvFRuvFRuvFRuvFRuvFRVcF1JVC,-I5I5r(QEa.+#D>c${t°^sk:$`\%U/nջZֵկL6 +(((((((((((((((((((()`Z(?&?G֤##GZȏDjJ(?"?yw(G֤##GZȏDjJ(?"?yw(G֤##GZȏDjJ(?"?yw(G֤##GZȏDjJ(?"?)Q}QEJBvFUv\NʮQ\jZWBQVHQEQEQEQEIuq*^#$+_k" + vGYޤB(03@Q@Q@Q@Q@Q@Q@Q@ +:u9VAOi 5c"Mk\S +3Tbբ[UV~&Vz$=N{>kK1)( [x@-'Yhc2yϡ#vGSa=imkpivf#HQ]Z{IOɎmH'#Oa0+j+s'vhJ(%+}$((((z-ӂHZwH(2=h(((((((4%Iϫw(I5I4 ET(±_j7l1Bp9Zݬ  x]70xٌsk~$ڴe(J +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +k8^:qUlWdiyTtU +iyTtQd$O> '}iY<(Ojn._jOgdev]O>_M?'&sGk)):4 +<+}.5?6KƏP>WAG}rYϥG&sX(OSk?h}.5>_C_}img>?YϥGk(}bsO>OM_k?hSu~iyW) \k4mg>?Q}ί>4 +?6KƏM_5>OQA\&s \k4}F):4 +<+}.5rİ mrN?Z>_CO}(U[{xa$P#XV_*\I¸ cV/MtM)Tg6W:<1f +`ԓj:2E;MO0;}4וLEIٮwbϘ(]]r>7&K}Fjrz +몰 }⫸QEfzn _Wm!^Nkn5nWj[UZ|a>mj+f,ɻ8c躖[A] ycYPFWZaU5+yQ^-ZGEV%Q@Q@%+}$((((!Y!Y*h[v + |c}=9.Ğjo,_n>1ܛaJu;>V ԍM_:) BJT'h:Oo"㔗q@ s ٻ]X>.V %OJ\~'ޕi#ʺ ̴? ^iO/<ϤEcPK4/ʹUprǧjZj:g63YjGq 2lx*95A-΃…TEY@<#w=kZ[#y$~K1\eek&{h(^m5%Cm$ʍ wON(>槝nۜgMhVx380zEYQE(-0P?InR -kat剕wY YQL(ĝ +oWA_1C`+Š((((((((((((((((((?t*X?t*\DŠ(HQEQEQEW%v??%v??فx0 }Q_FyAQ\[AuqSG KE&TgҨ9|7s-~檶[<{c޶|36Л{DW7xǯibוkYG/ljgY{l[Mmj[1yxd݇[(QD 3WP˪Ym9l@9ݜ1xju-L˧^ f( Qή.hhgo$-O#V d +3SnZ薺{i=fO3Q +'ֵlOC6vc޸^qXzcC +_m"9/<J5!4p/G3E2Fvv'ӥVޗkq__̭$[3w ^}*? Fk\][̐M8vŽoMѮ7nO®1u0=o{~6% +?Wim կdWʟ6ZWp2=kK+oZEo50 _ kvwWWP/>K#ث1-Ju)EG:mIՠ*,{өX]PF!ESoW?wo+^Gh.jZȥq!;O*T?'ioWi *+_KQ\h@T* +( +( +( +(#(ed莞U,LC]0tv3Wؗ?KK_Qϥ***e̛DZ/~>?KK_TTQ/ax%gk| +9e/Ŀ_Z/}-QQG,ؗ?KK_Qϥ**(0{gk| +?EEfb_/}-G~>_Kϥ(r^=_ZY3 DZj K(_t@5 #%9POqXՋZrеnWj[UŚ"ZjIp:lR?/Һ:_VƟmtpfXvیsVxUIFDvwEaEPEPIJxi* +( +( +( +( +NV<\1X;U*ɔ\mFoHJE_]ͶޑmtQpͶޑmtQpͶޑmtQpͶޑmtQpͶޑmtQpͶޑmtQpͶޑmtQpͶޑmtQpͶݏ1OjͫVJ:TΗ*gwbI5I5r(QEi!񦩢joiL7e޺:2xQEF9c[xٯv/w[(İ((((((((((((((((((?JV?JW0C#h^sk2XQۅS\φa{yi:Vd\cta/"o:?(}oҀ$6mx4 \rUV INx)-mўkbU!X 'ƁKHZ +i0qB|=K=Փ4rx'Gm&mR3o4,HRq +єUMyx躠8Ϲ غٯ}.*.@h?s~֟/9%أE^?s~غ٣e$hغ٣Tu4{Z̾b{Tu4bfkOQbf]S?i2Ò]4U]S?:=?_xrKF:?uO\߳GIv(WuO\߳G.@h}.*.@iWC]>e$wݿt-9-- Iw@OjүIJMA&ISRQu5-rsTRѿ]W7򫴆ƥ~4 *QEdQ@Q@Q@Q@n?׷QT𨫶 +0EU(ƛ.cxu;9+2Ašv:]\1iZ[l sqPӵW ѵ%_,j/ٝ3Vϱnyߤ"ydU2~R ý,ΎuCB5mbaD儑8We궚&u_!wldrNԓ (cLjv7򖳒+,N85^ǂȵχXtd@ڔm哿n{: 3^ֵ;mKQ}2% [eМWg<s%o?y}Z XТOxn:R]bM&0]쵍FI0eޤ@r##q=SRXڢ O}i-cAպtKx <}ZgԴi涺sٖV.?*e{\hPKeRhZ:E_op#v8x݌zfu/={i5k%( ,gOEa{i?M6&Ig +~de<=ĭ*ڞ[x)bm} >tgiEsW-Nm;Mu V@Bn|4lt[K;㷎`uRzҗ \>˔QEHŠ( +oOVCh{mif(88=OQַkCz*qs >nzjɭ`+"((((((((((((((((((?t*X?t*\D¼OIۯǨȐal/!:ê<ڽ5h"[mcN.JPz›,Z{YӴ#|bV2GSҸͦۛDnWk~F`:ƙoxbiAg r9Լi]O]et0FN88pV?+,6.meW}r? +Jjuط!3ǽv׺hHӭӂL":cڢҼ-h.ZI&x!mgHh\> hM QUͼ*0 >/J$Xs+.jZ]rxrr3HJtj +OK|oҏWG;/?ߥoO7T(9(zqJE!oO7GU +(qv_zqJ>ޟoҨQGsQ~B=CޟoҏQ~}?ߥPge*{8;/?ߥa-Š(W%دax#u9?ZhjͧOYhu?5>ϙvq8kaO +Su{ F&΂Xv#*G9k=lSKf>w∵{xmNFz gxC~mI]0tSPVsƛSԭ lkUV 1^uxc:f5K=6 3~>6 ׶QIӾyVAf ~ER +}iA%2+X ήTʮĻ\Z36F(c*_K~h5RXTv\$b:zw]|%N_ :l*W9yI,TXN1]mUEYXQE +έկVFU_nWkZ@?<`f+ fXŬ xRpGߊU^ 7hȠ((}o~dQ@Q@Q@Q@]j\S:Op+R('~vJD_fMgn1zƿkZY~*FcYLAϝ*sLX#E,@}+b񶭬i>[{=gUi%gR1QMTvY2-axö${uq0d[RxOm7 1fB#Gi-D|ɚ^:*(,((xi)[%Y!EPEPEPEP7 +Z#*ӨK[ǟµSXF**oX1FoX1Wb}J?Q?Q`e**oX1FoX1G]ٔccvfRn{u=J?Q?Q`e**oX1FoX1G]ٔccvfRn{u=JZ) +DZOo*QqҦuy ;RA} GRA} `h\*FQE`xj+:ܻyFq{Vsw񞧮5Ҽw,!H)]mZWk޾D +(,((((((((((((((((((COҫՃOҫL(dQ@Q@Q@R:Gڥt)HRإEWQQE'Ğ4_iǕ`~Fι}۷g+:šzkL: Ojp0$LRBO[C6z]wL5(˩gNmğzSQkp({k" #B<8Z[Gߵ@;g+6'ZS Rیi09 loE75KH~6+ܟy .@,gǝ:ϽvRAvcxoA~/fݳn1IhwZ4io7ym^EW*F$zҦ* 3<<GmkoZ9|ab'-{wR[Š(QEc#Vj{YIL;EԵ]MKXrJBvFUv\NʮTW?UЀEUQEQEQEQEe1k`Uj{Mʫ(((((((((ѫXtPݿJo41ZC`+Š((((((((((((((((((= W5 AUE* +( +( +( +u ߼Xvw@̟<țy7ZVّȌ"oߕDɿ*֢l"2|~Ty&Z=&MQMȌ"oߕDɿ*֢l"2|~Ty&Z=&MQMȌ"oߕbշZQr"+xQ=zP +&-!u5-5hh]ҸQk7)gѿ]0wx.B jU "zHaQ\jZWBQVHQEQEQEQE{MʫՋoU^bxHaM8R27dK;Ah@%HRyl|i oĺ}iCEJ.2NqzܱMYYjZC"K3?#c)-(F )$±`K2)4Veq**${I$N8e,r=j~#Gw{@9}CR]ex^lSIkYV!杫h6ڬTg. F4WZmu{g% -Oxrw>!5Q+TXۮ4BWq<{ q]W溛Cf5Lg+j״ۿRlHa'Ҙz-Z,è8 }F[8rI 5 V+yeĆ[VέѵY: +( 8S=u~[9lqœ袊tV-mE?o5RM h]ku< p(H<|s]s25 NN[%XYZubOMOQXQEQEPo~֒(((({fV{fR]~ fVH"OwU$Bp˙p~Տhsx—ex>o\D~O ͦE(X3,N83PD~w߭̐: ǒOaKu tӯԉ[m;9`2p{dxJVx^%w|沯<)\ UӼ仵˙@FPy0Q׺eb`}kGA-WvVUh3Pr׮Eq牍4,lW5UwlOg HG ~t_խ}SLе BNDc ]d1P +ۑ) 7g#wLԺ~}|[{%-m&F$+=k?dž4dmx.QVF,O8Hrê]i=>a$gh,~f8ۏY}HLԮ5p"ʹe8]sZ6u/-^P6_&6#$]G n:-KhYGbH1;[$L |c q^g,fҒ9cN.$R 2kh(dN~&An>ZlpCT$ԭe kwaKqyFx'pc KI}Ụ ŝR_jk6To#ny!|<gWGcFrEu ŝ|4 R8O<9;f +郚`__WUOR&i.%?*䃅ҪxT{5kK $p9o+*}:qIQ$),FoC !|?>XWF}hfi5{N/ԐCQԐC@˔QEHŠ(sNdmw .jm1\G\杮j^3,W` SҺ:ںjJ-ބC`+Š(((((((((((((((((((((((((((((((((((ȏӨ(UԵƄJ(((((*>?WWEb8`0j +( +( +( +( +( +( +( +( +( +ڋJ+2OA[H6ƪz:MTv-s.)ƟmtθXv6c >f[Ǖf>kJnLnEAEPEPI(忄U֣c?)V)W<Gi,Sy1v&?pN<E:*hc ɍ3Lݣɏ\,g14biVhc L_?*<~U<EOʏ&/柕hy1v&?p<ɋyZLݣɏ\,g14biVhc L_?*<~U<EOʏ&/柕hy1v&?p<ɋyZLݣɏ\,g14biVhc L_?*Үy1v&?pN[G +E9 +) QHaEPOB& a%B^1w+vP叵cvc9ӥnֵ{-?.`+"((((((((((((((((((((((((((((((((((((((sIANW%O>V%O>V%O>V%O>V%O>V%O>V%O>V%O>V%O>V%O>V%O>V%O>V%O>V%O>V%O>V%Z +>jPE]}V+QyQAG+ QyQAG+ QyQAG+ QyQAG+ QyQAG+ QyQAG+ QyQAG+ QyQAG+ QyQAG+ QyQAG+ QyQAG+ QyQAG+ QyQAG+ QyQAG+ Q }EH#";ER( +NѡV{mrM[W| +ݬ+YPcw#J#jݭk4ڳؘ-( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +d}~Mn ( ((((`f垓g,0ȍN=Ofkc>??Onrz^ )SRbf;Ml?5kwkΡ#U[ƏMl:o>P?5kwh}?vCU[ƏMl:o>P?5kwh}?vCU[ƏMl:o>P?5kwh}?vCU[ƏMl:o>P?5kwh}?vCUź},%HAⷫOCX%؜^~; +6ptJԉt9@j +?^l:|a|M[Er)l޺*?^CDQEfPQEi6>0Եߵy>^6co9?v4P񞧫MvesPbP:W_" QEaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPL~4dsCEUQEQEQEQE0<1]Y??cB(YeU$zlZ9a T[ +:~!쮴,;Y6I$apӚӴ(|1Yq&wʱ͘kU&m-k(W,k$n2 Pj8h"7 ByִWqk%j!*06*ơX]54[N@]{}iY6 Ww")IRQAz[4mn-d10s&&4lju+IFVr&MbMZ]۵Z,@o)qSW+{ik+}&ILKSqӥV]c^ѵKYm)-<':S[dgEs+}juŭ7Xw N~QۊMJW=@FÐ?\+)K..JCFoiRĀ'qڎmc}==,9f?' +=g+t5k<1#m$D*J\گJ)[]wťἩmՊ`XSp]3cX(poyj(sNq嵂(?J{/IyA~_m\ +O?3' Mܯ[\`קӭp.Qwkzu04¬brqۜsWVo|.GEV%Q@Q@SE ((((c 1]]?Z2|3@+cFw`%jޓAK O񫮋"2:F2#!.[::k]gX՜nR#c@ eWvPx+[ܯm-Ѝ);EcA'*/d[Y/c2AIe(xxU+"+)MEmރW7-޷}]KL(]d1a{kt"4'doɸ҉bNJgy<[@"E pzND56+) "6o)kO WfdW'8:αeX[[$Z\a=:+_jV%̰M >7 7f# Gn3XkwM^[]Ax mLO4}?`LU$Ak}i|֗P\*1@>u].bZ\"oi= K{[ o4TBGIFI[GH4M4Vg"zP?NV #r8 %ح`5i )jmphW*f(H +ֹ +ָ~fo⣮|5QYQEsu;#Qm޺:48і56Q@-r{~e{l (K +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +( +ds%52(((()>'ȭuEdWaDx~7QElfA{o `<=7384SH+io7o;sӢ7v5&)h˼k"af #Z*@Il`nndO2Ol3nrÞ\xhVX$/c3kr=5p8N{]+_٬b&yc sMe;(g}033+9g~*)cJ/#۝{T3חvWۤͷ$xֶh(Zڝ%h#DAE` +(CW oW^e?+4c;p[z?P%!x]4iU[ +A9~?/]}\y 3f2 p}*r7;Ec+Š(( +ǩZQEQEQEQEs1k?pUo>g QEsf>_ıjp;VnkNEKqciEI %[y[zg?ҳ|*vk vyٷutTJ%_)TʹͶD^m~fCCnjP7I;q:=RHڽ؊PC$=Yy}*ݮm}C:zlٌ9[P;: FR\J7lSkdЮ{-mjEc=yW& z \roR=U>zF[V[ȫ)X~3(~Z +ʃyF>?υ5oGQWP}V:Կ?5/fu|j?**ù_\߳GF>?ע?oG_AXw<#R hԿ_֣uЫ>dj_s~\߳^}?aK|.٣#R k~Z֣B;uυ4dj_s~z/QhUTUsw:md vF"#_}B;A\5fXkZiF4r-Fg{WIg*SA9[Mrf h|>;qj$$M/Sv( +( +(+SEhAxŶp}QicjR:x +;U4Oth:ƍwjDfYtv:H+#3Ŧ|fƟ=,峌'.!>('Oei6L0L)\gc*$MYz"Kv2jS`) +[,sy~sÏ dj_s~\߳^}?aK|.٣#R k~Z֣B;uυ4dj_s~z/QhUTUsο5/fK|.ٯE|j>Z +ʃyF>?υ5oGQWP}V:Կ?5/fu|j?**ù_\߳GF>?ע?oG_AXwߦS罎MEVeQ@6%zΒY,lQַWҮoo(98_k? +1{QT (+d.% HpOSPEPEPEPE2Yci8nwv +=I< +!+Rh%Ibq$+PGEPEP[aX +ƶhCSG+[!ۏſ<<}laJu{xu{“\ש⪃JkpnQEAEPEPcAh)jFX=eݳLS.ЏC*= "]0K7bI#5Es^6s}2WBwd`33V/)j-{A6lA d : C͞Y4Y=ow;Erxa=Ȯú=-mQU>FG|:( h[˧h"]XwM D :d?d1nN "hEk-Yգ}!YK3EVQ@Q@Q@Q@Q@Q@Q@Q@]'T-? +Χʎ|~O+QEAEPxP#>1^1[ciBdm^HJIU^ݫvk_eؘlQEdPQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES%>/iEdQ@Q@Q@Q@wCS] vGF/p*}(W E3##!X;@%]jz׉TK +:ٮ^X'“b5#?? [x~#Z_Oaհ<gsDFxzK#eKu/+1%'$u|.x^rÃ*:U߾+/wE[V3Juk*.$(ϽIPGnGk:146k#jm-d>ć]8)mRL ?8n瞘V~k7iȳ]lvҸhs?@!];]ZBlOζ5/i{-BdN@a뀥r+Nֶ1ל GR,e‰9pQڠо~ <;wu%_2O +1 Ҽu|֑ŵmY ~lWR&jSϨZŦiů2@[?(kCMмI|RnlP| 5r=xo驩Pmٿ/^qD2ЬKTTy8fQ#=)<$mM߳υ݌ܤgUt?iQ6,>fݻ\cJ(QEV+#VAX@uMܨjhsKcD>S|Mcom=۬3*[rN-)lޯ.Zrjz\訢İ((h4VQ@Q@Q@Q@+:o+:i|&s(Ԁ(((<hk+[ I'ſbЙ(lI<ϟΧv:*(AEPEPEPWtiU*O³𲣹vߦS6DQEfPQEci־*5Xnc 4%Ԅr:X[j:,ױ/qs~oդV_"`QEAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPL~4dsCEUQEQEQEQEe \vAvDͿ*넗*2i܎ȗyG/oʪVdtTDͿ*<~T]'/oʏ"_ߕAfGEIK<ȗyEYRy6%mQtdtTDͿ*<~T]'/oʏ"_ߕAfGEIK<ȗyEYRy6%mQtdu +Ki]@Mi;V5Zv.Z?P\s:N7_f.Go5r2z+wk.™Jc^U4U>tTQEbXQEQEX4Pz+B(((( +Za*=Eg%[~UIXkR:*O"_ߕDͿ*2:*O"_ߕDͿ*.̎ȗyG/oʋ#%mQK<,<~Ty6 2:*O"_ߕDͿ*.̎ȗyG/oʋ#%mQK<,<~Ty6 2:O«y6-yzVu*+R>?Lj̠(|9u}#Y}$:t#(2yJ[<3xzN3Y13%N;>;[{HZOUV^[:z+~)= PBʒ +3?_tElXE b\TNڒq&r\ݽ&wDjswyhߜg^<;Nm[NKI|mz`u[NH/Ue)#4(I VRӕ us274]\]l +`'m7 TVBc>6c8:è\Y7pIl-*H +uE*cFYppg:_[2XE mQ%}6 N [N{[{in;IAe4 [Nkcwyhߜg^.t\˫i^-ܾҀ=0:E歧iw*ӌ.t\V:r^Al!L:4]\]l +s>rIMEU:qZ?1uֈu+6 -%YA=8]EUԬoy,D8f@O^qMtEl +XE lgrI_MESմ뻧tPYppr i|lV݃ J7ץE*}nL@XZP^hմ>TGUPN3G$r{骍{y|3Hv:4\] I UlG$.4USX7p BNEXdב] i@PcON(`-QUm5+[;.#Ch v q.u+;d\I UlB.TUVl_5ЀDAӞGXdױ i@Pc=8]EUԬoym.48g@N3Z\Y^&@s8JlE*^\=&KGppr i_kH0 Ap@E* I}nL@XZPӎui3$7wJ*8ގIv VSB-i@QK! $V>(IMEUmJ,E]'2 J#Ԭk{U@PמQ.tZVWм֗pO3 `jK-RQ+{nzg8I_MESմۇdq {К%KfuE*I}nL@9'hմh%qI% +XgG$r{i 彶 quΣeen] .@Y$*FF NnE*V1؋׻mLd=9Dz-{ j2 +:ҎIv VQ絻xg),K Kدmvcw mP%}6 NVӯgx-o. {К-ٮ %xG$r&E|R_[--(IZ.m:t \$Kd}`.Rjau qu֣eeOuw9^I8С-, YJGIHV+{% j1 XbשwZ$$yUivIm4(Hg@ʸ9"SԷf7y2۞QLt Ki@K$r+9ވ]:[沎ٮԐaYpG^:ӴL}[NXݒzq֋WNH.*H'iv ;{Xi>{om;|\fQ'$Cg}ZNnwI5VKՀ"f 4&c%KL@P`Z)-+whPG eRNH5 &7y2۞ I_MN㨦Zju $R*3@=WN{$V@\׎SL}[NXݒyuUӬc@8ދKi}RN{mHv:4Z)5D +H1x&RvpӸRId]4!=9u+7wZIH68<wKmF-$4W'${RYjvseyor2۞ I_MN㨦Zju $R*3@=[N{$4+ .^)]N>G|,^n@d##(մ;wH+6NwE6T~vݎ-ޣcaKww´ q 4-jV0-p%Vf9Nh]FMm$$08<wXz``U[mF-i#2NHAv\ZCq#24.oIOE|A/t״b]#>#ޡ`񦉩E^Mm2~ghFCcjxImD{n!̒A+UFk܋sN(s@(()"4U) +j*sU( 4Q+QVh,VG0XEY`ZEbf9j*sU( 4Q+QVh,VG0XEY`ZEb4id4)7pQEQEQEDl9rdfeL[wr@u'ֵU$Iʯs">˩,w v9rx'h_ hhYmvqqҵ^϶; = hZ͒{Ra#qF]}JO$K z(U&mC=c^Qv!$,@5=.6Kiݑ#F iQIUM鷐rat/Sj?wc94 "]*Ge(`n';$Ңk;Z{*fi(%MG1ch4 %}2[!OkQMըy=wXE}7TRXݾ@sN94/d@jy9+qҵTmvH2.1jj).*rgQx_G.blyb]`g=kBQ4Ԟje>MN\,D`ЊujzdZu娖-#,F6AJҢVi$o ]Z<(QZ[ML$ҭBYH<[n<֕kKӭDLw:''})?tI_L(v9SZSuj;O]Ö= hf6gd]ͻ|quҼ@&h.J̸^zS L4شQ-%JFXmE +ՒoMv3[CEkPtD;0G9Z-|?h6,e -79ֻ>ʻO[}:A198sL5h3bݦ9 gI5EG{뿘rDZcGҵ) +5`;O =p)fP,Xͽ0x:V{j~Eυkf=Z{ ѕ+.+ӌW>u Σfڌ]sֽ*MIe>Ҽ@h.$c=zN4 3TamD)b1`rzV*VI6U}LC+ڃ +!qr9zm.FI%ŸsZtRϸrni%}[sbrqңѼ5h +ib|;8Oj)'a>}Jf,+;9</ h덭GfXͽ0x:V:m= zzJe{ +8W>w ֡d +]9}k^jH2^ HWT %f^zSLtl/mDЕ)b0@*(Ufzm't5ў=T(q9E]M"P2 n5E/k;Z{*fi~[ItQ 3Ρ;Jf'@32[cgI5E7V9c|/i:6K v9OxcG[mf;5]A{d0x:V:m= hZzje{ +8TƏ^CwY`ֵVjOO0c/YuKAp!ݳ,ˌ=K@5m>Q-$б `t>UM鷐rDZ'5ў=UTCs[K_G-8!:(Ͽrf/FCZD NI}7Fޓ;2[wٳ>h՛9c|1_X٬73$pr }h<k1Y* mH8ZPTm'H2'Əs&5k*6N35O 7x@Tr0}k^jH2i> R\s,ˌ=K@5{oDȅ*(Ufy,{KDMKP#ſ~8:kVnG{뿘rDZxcG尿Xn&H>A}[}f+%[ff{dE +DRzirGoIjݳ.z)kQYډ`ȅ5E +խ'Ad4D `8NG9KG-Vsr֝{Y{9Wc3MXMecj!0zJn'aZ ;s>h՛9c<1׳^XYgñ'' hY߹fiIaqZPTm'${cGXZYfF4}b15 ܻ r:ZעZi=49#|7ӳNv3ЏAN?kPډ`ѡb0@} iBQZzmfO.EM[Ps/phoGjOuehw6csִֻ>ʻniXڈmb΁#ÚWa q6vl8OZ(ufzdi~[ɮ%yv9>[cG֟X-f{r[kCQܞaDY[PVVol 3j^mB57.9ZPTM5'H2 :h.<˰qz +v/YM$2!b0@cZtPVy,{.d&bUbx Ӝ戼?áiL;''iKֻ>ʻni6Xڈ$'$қxwJ̺]m߆f3Ԣ7t0]+>y-ޟdO2w >[cG֤ !fiwngEFrz${cG\]fK5mAYXM08:QcGյolP]ݧpuz(U&M${:φ|u;1pa .z)jmBO -8cZtPVy,_C2]ލ={ªŸ9dZhjTø:){Y{9Wc7N4+NEk1b'9<V開LAf݁ԚԢ7t0]hPDF((ܠ((((((((((((((((((((( +endstream +endobj +460 0 obj +<< /BaseFont /UARTZE+LMMono8-Regular /Encoding 422 0 R /FirstChar 40 /FontDescriptor 528 0 R /LastChar 121 /Subtype /Type1 /ToUnicode 424 0 R /Type /Font /Widths 529 0 R >> +endobj +461 0 obj +<< /BaseFont /LCCNSI+LMMono10-Regular /Encoding 422 0 R /FirstChar 34 /FontDescriptor 530 0 R /LastChar 125 /Subtype /Type1 /ToUnicode 424 0 R /Type /Font /Widths 531 0 R >> +endobj +462 0 obj +<< /BaseFont /LSGOSF+gbsnuff /FirstChar 12 /FontDescriptor 532 0 R /LastChar 12 /Subtype /Type1 /ToUnicode 533 0 R /Type /Font /Widths 534 0 R >> +endobj +463 0 obj +<< /BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter /FlateDecode /Height 1024 /SMask 535 0 R /Subtype /Image /Type /XObject /Width 1432 /Length 130045 >> +stream +x]|EV@&PATlQ  b9齆ޑf(51L IH&.{{{w{{vvg}gٙwm۶@X/ 2Ab &&)5#hÏD,t +ʔ)s7jϊ۔)SnUÆ {+8_paӦMs箸޽{7nܘhu]KGnlmݶi&_~ꫯ/w}ޢE 5tAS|uKZ-ZXnv +xok"RݡQEbT 2KEѱ ui޽UV-...,,sM75nXH駟3B'kyjժ9sF}ԇ~&;-[Fgon0uԦM)ɩ'{nG/ MgWr뭷^ڳ~S7͛oڴShѢ^zyvu2]\\]"HEN螷~7غu?_~!_uU(դI뮻;<[m5j?PG9U3w-\XwpcDbH?#=)\)))*٠A}^>/81qFɵJ]vّ#G GRM߿:tf|QQQ۶m/^L.Hv4!}/"uLxѣGttR:8t_gϞF#N5POy#SE2;SGk׮M@ WBwُ?ڴi_ȹ#Fxnĝ;wAdnXQr1dg(ŗlg_BSz.28Q֥C:(VJLcǎ9dUhs 7yMv~iiV-f͢jٲ| 6tp?FҐӃsfOFxf9+z믿gl2N5Bɚ0 +~ ~ w~ 'ߏ#quR7ߤy~C^ɕW^)S͟?8>>ԕx(H] ;PfӧOS7 a#hذ᭷ު VAd &w}># Pǹ.{%7.W2&@=aÆW_}5uGOߣG!Gwy<~饗e˖J*ɧ&&wuK?ɓ +w=SuwI?ʾ+W:dհcXJRttO?}WPo:1ǰb8+#7~a%3<#_Zu8:1Op9JfRG{7V^I~z%>*u_.?(zhԨ> do߾ڵv3s!'GEEܹS $oJUTIIIqc2O^z_~WNNqr} i"@5 +~ w~֭[+a^ j޼9Oe +U! +: X++bAUvT*~ e11*sO<駟ʓr={RA.aτ nݺՁ4hPZ5!ڵK 8Gݓ/_3{%]ty뭷3gΔϞRF j֬8~cǎ)4g?F^^1梛Ǥ؂ ~ Jݺu|N8Q~w&/_^fAʕ#jڮ !ܥ7ɓ\sڵkݏ!!qܹniҥ۷ P%=sLƍ17ܯD"F8E˖-322NM6ݳg\逸N?L}4s=rxyfd>--zrj}@F7w I7l׮#btSIv.?+JWNT}.?Pڵ+=!'KΜ9ӝCvXǐ{҃ccc>}܉Rc}WN:ɵ;Ξ=ۦMH*#.wNg|IW͆H(7ǡ.u>#D1c,_#Yn(z +9=,pi Yᒽ67+@~ য়~]vLL $ +!cn@ct@r~ ,@ ?pzz:\akm1Ŷmvan,0mݥUmHt"} XR{=K\vPD_ o ž D>{|?2HtH~ †`=)v4JI=py%>DkhwS3=4kl'{mjOq@ڝkgw +Ig&(41@hdgv~~ T=xs~Q˱;{JP` Ѻ%ګB` +@כka5C aMAxUա@I4cb|C10>{m.Erc06'K@c MmT}y=15&$0Ht%Wu~ :>y'>V.Y;־;&14>;$5!@u1_ $@H4DGO/5k&()% +LB{)+䥥KRpҤI2cǎ3g( >)y(8k,ܼysaa399ѣJ0//o۶mxڴip…tL֬YCqɫP:ujϞ=866b\R,YBɓ'`BBBNN0---11Q|ƍxܹ={¼H9bĈT5۷SREի)#THRIHA @ !h*X( q%P%P22 1@ @ !42Ŧ()% +LB~ P%P2MQN@ %I2CL.PT0CI(YÏrJJPf3 (Pq6ISs@ %L8((E2 J`JdqFS +@'Av1׍E8((rJ0(AHHH0[FRR@$ +ENp JJdy? (Pq6#''lJaJ %Pp> JJda? (Pq6cu@ H Տy^W?AP%P%y%('C~ P (ҏ!|\( JJ? (Pq ȠJ!c3J%P%0i*q/C@mB@ ~ _f0CI(Χ"(|(YҤI_" )cwHSh96 Jg1͖`(P2 %NP? (%)]u'3Ppi96 Jg10V`(P93((.яAgqJ+P+P%1P6@ %2@ Ax _)i?VJcl Jd3((i6dx6JI~ 1@ @ ݏ`1XÏ%{7{*UW7rȄ+g?jqF” J&d ? (%)'ʔiiHJ13j(PfIJ0(a@ +ϋFăϋQ scԨ!2)ΨMCh*@ ~ Pȡe bbxh>>tJEE{D +^J j+6@%4A ǘ;w2” J&d ? ((+.D<#:J?wR'Dܘ5 l86 Jh6 `1`O&MOr|Z |X RyQp֬Y2yB%frrѣG`^^޶mi(… (YƍWߟ$"T)HvyG!( nJJdma*̅}X唚9œbR^ 徚9 *!JBzL*?JŤ%T(HeO4SYU30eE]S:P Ǔ#G 8 +RAT+T[cj R wܺuk~~yJJy||<9s&%?1c:tJ;w'Re˖)HBwڕf~A5u (8c ܲeKAA0yLEAJB ) F?7!g3,KAl5jv[Bn6{$rZę(Q18SS +8ϟAo{EGgq^9?_2[\Ѷ? z}ҙzqϞc)|gII8w]^5ď!kJaJ %P” J&1PN@)87Ƞ3;t./s̄ l/J}7!ܢH6G+[Bf_ИDCǀ Jh6 JdP%1PN@)|)]|J.qoڡClSZwq;;P=1ɣ}c Jˆc@A)( G>V"¾#23Y`B+%^_x1'( Jڝ ϳOn]>9Sr'tGE͚>?j(P$0 J ?@4Y+~ VrjBwB!ڴTV/4̶ؓ_~ PBq[hؐgD: ρ2 {,yąC[3V\A)L)P , ?VELN)3S+'™;6"*㲳г| .PgJ!w2[Cgh(PaJy1u(?I9_%3d!euKQ_EZz?vO'9RԮIBV&^{_: _qj +JaJ KlYa_ ?VELNi8۶]8#gOؗs.`D6ˆ n#,[Vm+O2#P +aPڽc*^yE|3W$Ն SG3f^Dfr'97ccUHA⌡ˠVd,#XHqqeʈ4fC+A%Sz!ѨQɤ">ӪUȸ brrRcXC敀Xa~RQt4{!T$9P(j(P$ѡ⃃YQ·E CA)(8>Q^DZed8ξq{͛{4~|) c@s@ +\j){#"=]g~.T%%c)կ/^|ukq?B!Π9jx>7g?1_i'7f *!K/Ǥ&W?ݭf ~ h(PaG뤴~=f/D iDmn6?o+CcG#//l5” eJG^MZ6q_ 5(dfJmۺuo~)+R2i>qu6XZāoAz^eSY~ h(PBFDXDy:EDAwwAhHlj7Qjyƾwڇ8T޾}j()%2McV?;7mN^_쏕@%R:vkgΛu/ KMeC}Ή.=zx$Q%}Ӳd ?4`(q)ybqo裢V-ql(E/RyygP +%Skt(7K'e33xyKJmJmۊzx-c@s@ SxU4mC2P:0h-qPCX|?<ݱ G*9cy-L\sPCD|@D=9aVܲ_Ud9wGӹK7 j ?840L6 ׏ȹjRRAi@)){%^[IåG¥?LҀ ~2RVY3Οj%DѼ9=^^@}{cO9|tlGX'x7ۜk1EI?Ȅ[ M[w:>rxkܯ$U:a @)L)P֠]G{A~/ۃ;9'P$VߏaʉhPQ +汒fVSdѼy9kA/\̟~Xuf)d@)+ܩi"7@;'P#U 7bEx8}x +lPsz|\+>ƍN²eŵ^X`Xr嘡ψO9),4A`ssOI[Nv4o.rsw+ZtAq7dnǎYbO -Z਷=5yӥp=w w^ q8g!g=511A)L)PDMhzxxp̘R'srW6taՋ4lJgr|y.TCpiyN./x(g2N.|OM|# ! hu̘W7n4)H}7@IOp2.NzL +r:MO};GGP~-5P氠D͒f)Um9*8K:Y:jBv{+Ii۴h}],y޳%<7>X + D/FިƏ?q&X7x?F}HMʖU!XdX1ftAiQ&aiex ߟavFqx֖Ν PM.t ,JyYl2((O M;C)$ymڠ q1޽#ٳ<4C6JFqSS=8bE#܇$xmuolդ suLߟr[7U# ѣW" ?(FA~CyDVm~\_ f 3oڔСN_}RS̻t^zeK3JPȏy%L2ŸRmLk~ǎSe9qBe5_)]{-?s+=%jdxÓBAg5粲xzV#M1㴈_p_7?uwgeI\_7Yu*+_g2OK%kCnwk1fDLiVNY$'Nő#媧QB +*JyYC=ĥ+C9ec邧yڵk/7V8p ?8}ݻGI+"Ċ+䥥KڛdpǎgΜQ>|X Ry}g͚%7o.,,Tb&''=zT m۶MO6MtL֬YCqɫP:ujϞ=8\Xr .r23fԁ?>TѣKfggSɗ6-[&ݻ/Jb>!:֧v>f~A5u Ou![l)((P!]2HI_ tCϩ<&M@#Çs>Ybq6m΃RmN6)8gOtcy„L\J-["β,g12ecřT{0q&JTr|CejgE┘7?t-T~+N#ݻթC6/ݻ_+=z3:~Ѓ8/h&L v2ReY'cd`/~Qy֭ř3a`7lei!rZ(^h\9psR2|^;0V`(cZp9sJ` 8+ +>|8Ē?W_-y&%_~qbSWc~}{^|ɬ,^jR9㼊5SoN篸°0:Rq1/Cn yʸo|ZsN +탭J,DaU^%3x&Mxzy=Gl(%WlF_c4۝x;OK mB SqֱߟʠVPub:!0 + +x_߾SʕJ[@kJJ>~oRys7$Uvի~sM.۬+xsMu +ynrWyQ x:f,uSf12J]ƧܙG}9^ҏa6Pf1GI$wwS5F`(>-O5wܓOp눳T%1 c=76ofAٚߵRn.{p~LöA=wPִW,^sDF2ѱvf*"FΆ KmgN+lsBq<J:QVEu!S.{91,CI$wtTv5DThܘH4;mux;RIK($An* ZdJaj(^aR˖GoN+= fYu)ϗ-p>3Z_|<&J^+U??w}q𠧌6\% +z,8>'K7aLISKkGڵNe)^pWf!PfQwGe<.p]JpvCyu;ി" uTc{D.E  f|w=֟(lw^e()05bGqו+kjsZ5hQV 䰑\˖SgРT&Mj-[VŢ"QxEYI.] i,Q;}K^2GMקa-.̎{k*'IYBsc@FIw+VO$%z/<ێ,BGY(oN 6mPթ#|czW_w.%7Q|tn6c2(nJ~9ɼb&JW^s5"10U ::}:HLJZ)[~7l_o}Fpqsr_sen>N2ž=>Pr>jCQ"|?/߰ay68p MQ"w>|5ŻT^%B Y˥;L*::Za{Ƌ/.Vvْ&ON]jnjԐnԈ'^ѭxXn}?ܹ̿+KEEŷQŊsYb.ǮL?abG.+Pfc)խ{oR@gђ(uOBZͻk=&CPl ?yX!5qW8,:{)=zwݟݽMk1x!ѤKOnZVw6R11]HiAH=~}zTTSKȀ)$|yr02 DJC*UfqQ@>'|=!ԺСɻ~`oRNY'NCT%1Bn^^.LIVz@wm+:ٺh4nrcQ CÌR~6H?ۈ<| ] R,b>$ORrXn˺tUVRa7m670m1n)y8 +4=I%gb>h6Zx;J%lŋ͖di_Bz;CMxPO2z7ֺfoMSKⓕ.{l2b Ta_|qO{5|C4E&xZ.Te=m+''&d6;+^jtP eJ+Vf(ur>I}htZc &5ǖk1 ^1xqJJ8@xwp=Y], ~ei:~sxDo8?sw@]GR޳k1)egswhG.\ժK-=:s {+Տ?[uj]K/գPBs@ʘs+%,O|yFP7xO:ԉF4Gh_u g^y[NJ&duxm[659'? +AT{JprhԮm"+ժHkwb9!@y/ޖ-W;rrxu7tqkWҧ>'2[]\:p˧UV +WQÇC!aF);*GqL -5+цYIYӻy3w",3[l gƎ3^w + eFS~𥔖 +J+#/lm/Ox#%xc_} _tM億e)6_aʔ ~ڭ>]qv f;j QEǏDI:"+l8$_Ot.#wO=rVT&G ˢN5gϘ;WNNi*Oyy)QXhHԕݝ^Pđ#l~( ɖyAbY +lBq2{ EV E xz/p5"gNV {[Ÿ z V8k03b } /ƌdn^JtiS^i +T11^nxCXݍ7EI{ogIS\q,K{p{Wwߟ[Vn%$ʅ˗|<|H\UH}(K5gxiӧSBk1wt}VF=/9O^̲tMKι:v?$Jbg ?Cu:HjoCiVnP]6>F3sƙ8ɑs[oX lƦ2hx1tNJG\[Bb%9/9uB!Cud O M쳼w^8رZi@,T))G͛_XV{b6y%(T7AsZ)=zl%K. +;Q]%jv5PfS3ʉ}󍑔|UKnޯuji3ES|ɋa%3M)){M +w.8Sw`|qO?Ը\v@?w1z'ɓy4]vA^Fʙe}>}ӦEEmrIr_.!n驓հ!O+ygʐum+F1"M}{wP#C9M|W[z<~b͚Rs[端,z!#|9?ʉ!Eg DlYqY|yM;(!MeS=&l$%ycQ#Hʫ~=|Z3g%m֌w UQ8|m"rr߱ /lNofȝ ݹo]u_]}~+"?wᇚ=/"~l?sc#VJ1n\0鳒ԣre>hޜqs͚f0,&Cc˱dR2ÏRЖ2F8TN fC] LT+W^)uu8ҫ^ݵ#%?u/yG]~ ⡇^ˍԸ^vw8#=rĉD]C||EZҁ$K|2eJ:u6ßd ?FO{YmkhD"@׾}0鶒ôgyK/YK{-Y ͡QfD@JFtfiSжF8TN< 0~\nF[VD֭M{(z/_ݹV?d}4k[fSFH= /i c$&:?o%yq[]mBT᥮+EG+? 7$m} t@ _%-g ʹ=W^:rV@#([W.6JD8. +rK%ÿ9de6Ĺ+R20L[6⌡ˁ6 o+ӦuSi{̇wY6c;ߊO&@-,kv/8? q<ߡAKyܩX(ēu̚Ko]|1o1hPd <dF$h_XRٱnom|chҤd -+!n~Pȕ9,Z('θZG7,c0c^vJAZ⌦rL5ʇƵ҄ ;~zWn6c}8;$lw0d 3GS[nSLQ'n.7:R7lӧг'GXm;>uB!ξbZ.ˋ#KƎ/&ڕV;%9#l ?/gnuꈕ+n+!jY2vS4@mQaE<8V2Ïl- q84ibc'k훐;V8p ?8}ݻHǏ+V.]j/ÓdpǎgΜQ>|X +^ϛ7OY2yB%frrѣG`^^޶m4 1QZfɫP:ujϞ=866b\RP7Uɓ'`BBBNN0---11Q|ƍxܹ?ͦAl=l٢m7lmĈj۷oSo.ZHW^mC=z{}J“'OݻW|ժU2ؾƔ)S湹jIII]}uq߾C}f>9sUzb%!J9ztB^קU]y} Ob;z"-##s߾}RLLZ)Hv{7y^' H](9:Za^tt<۾Z%Y^a.Ծ}id~8HH6(%2HfNeJr#FlJTǎGsQB*{2&FY%!F d*CC ʾ *2zDIHSi yie +}2Hj<3['o? c{RAyy7a{mom(LJH  8S)J+Wزe<9s}O櫙3FC?P>sӦwcdͳ8ŭ" z=z,>qB8H~P%cY8-!J3)G׮7iNT%),Kdđ(ߕ`QQ +yU3QCG`%^Y\<5K8KPQ_^YJYw,x2u|5sE$xyReƙJ%%} ?iT|]J"'(L5oIо%?Zo=yGn.;w8ЇU}+chդڻ>u>5"Bę*?kÕWHJο^hŸz?^bUA ,ǰd9->16Av@ ?FRuS֍{NF/*яΟmۊ5]9s&OxQPΆmӏ>o ukQ-ʼnZ :_˗s_8!7/̣.{.x-NO=:q"P-a}WM)zt"O'sr{ ~[@ ~0-'yk3In6`j8(ACǘq "\yuS ,x+س ^H}x~2^u  <{vՓ'kqE}8N\Po1tdS?=o}_71*(R>+ (nEڔ)vhs69dMe9rFv10E?՗_+cPZgOn׭)~d./Cؕ˗V̚+uDE0~g8wNkPD^=.޵j]mYQa]P%P2L/q^9IKc曒`QhDx#xSO"f^@mB%3&D+}B ꫼!7͎Cl%9D5֡S++z>LpukѸ0jgfI"˔u؃9 ?2yySiJml +%PL?1Z]8#wSa\j([V|!j8(ACTƞ̘#)m7NkMQZ! :X=ˣ˕+Yb!&*NLKq +"w}@iP0pJc*S}Ps-]P%(~ JKQQQ6;gPڵk)8vX|X RyQp֬Y2yB%frrѣG`^^޶m4a…C 5k(8n8yuJSNٳGR̕+W`KO>}lmKKKKLLT32嗶naܵkWVV׭[' ,3dp˖-J;dѿt"K3) F?[1mBK2s~#)?σZҙk%$VI*+2>~%3DϮ2]H۵3V}{r~)䵓U>o(f?w459s}L+~ d;pD){J~ -|+wS0s&}:B)tC8PPA ⌦(ۻԾwwEgYs'E7M7PFu͊߶eeڵZd1[ P%P22;81XS#ZwRqqdP;| /&qP8d! ]7ʕGq ouE*p1fxѰa{9?^ԩ#^x!*] (YÏL߯ZUh!%P%(?lLo@n#̚1j%G>s'j8(ACTNKK3[F'NRT\LXޛ+ٝ쳰8XnZ գGZrbR'5*] (YÏLQF//*V((YJg9sҔ)wO [oB?ϋflڄ:JgS41VG{ap^BGz7FU&ڭ_}٭Z7B*] (a^?P?*x_(R1Y k ΔΝyq<Ր 'LFmB%3t|'xxq9)9kߵwa%1B)@ 0\ZC)ż}ǎޣ5m*dTVCmB%3uc2~ZԪz ayMnKrXS**͚zxa*2~󊻨J?Lپi=ܹZ5R%M#IP ;qBS9y1P#Tg>z4RrC5СF ~ N{fO6mC>3q"o ++C~d珆J~ }pV{)^^=4Lg-Y'M*2) J 4̖Ծ_?DTx g + ŸqT|wY2҄+.]%D<V25!ɔK5@ "܏$^zAZ+V<#jo6ѿJ>Jmڈ51) J 41VGATw'@gK6h{p_=[V]xy}a(scFm4DE#RP-+`KA%PcSOiMʚ5+q+s!PN>DSdbP ;q#h8ryĈSu]կzļy>, [K. d1|4gBTpP%PH PQ#C/__j SG;6 ]~Ail~Yx &(YU/R% i*O2l{tNʼm[:h")Ty$g5AΔy^@%P%+?Լ7m1W:^Ef?|JާO tl%KENpCd@lݻ7GY Pk1}Uyohk+syHf5j~*oѤI)'_ZԩRmcHs6!(c-\^(5^xٌR b~h6V2 3.LS)g<2~`fʯr:&@ "܏v8 +<|;w kH굸}{Pߞ=gX]%P2؏0*ÃCect>..N׮]KcN8aO޽{x}+VKK.$ܱcǙ3gVsx޼y5k n޼P|Q%m6y-իWS0&&Fۗ$H2,3T,)]Cn>ah<8UN}9ѫٿȑ PFpPjaWljM-`XɐydkP2XM&gr03Wx={PA @)"9~>}xDVMGw6OT|Pt.X(piԏJ4JlY#kyh%d ?Fp2e +V~PtA @)RqŢn]3pv(9_MΜˋC+P%~ | +3ΧWr_avԈgyn@(s0y:ng5qc#@}n I煮l*x~FX>W?EjŬV;iuNa*Ο|⛄(R1|[o!''ѫoqҪU M$zd>(`Jd +q1go ˋ}}b)+(E2%e8/\ynnv JJPh9dBQxdʼyQ掓5⯁(`J?F3yv/׫waC;%d8c8z Jp*,y$)#QtA @ ~X@.@d'h/ڴ8qgH]%Pc޽ffb,WCLr{uQ:{H,c%Ô7h  XQ:(J~ ,J˖K/I,(`Jd?ɓ'͖(;]8ykēOZJ`JdÃg#c賀jo+/'ī1F%Pch@A +!Δիp _ $|I=8;9ɹz$,'9Wyi8#_ܙR!x} Ǒ R!df1NէG' (H΅VH/7dBEdI"ՀDB&9H QLj1l,O>9EfBa3H fC){_zqcR8^0!(|@ +G8 $̾%<Њ7 A)s|# ~_o#a?B( +:!Df093BlqH [@+ t6|zNĝ#Fv1mZ~j@"!A $cDߊc A0eee]3́}ms ZRb9x9t(!p1@[rz(6˰$793Tƍ>DgyEٿs9,s9&'p1.w빨?P)_UVa+k^?|/O_ӹtyyOnu66p~9LK~97r;I0tl}qJ{q_.#n{q_./nǥs3xqÑI|@b؜Ak׮IÇsĉjΛ7O>}Y^^}wTSSr:̙Ҵ3\lY]]ku֊g-Zݻ/Зƍ' Gfii]M6m޼ٙ%Ka{ҤIO(/=49?&e7OY~a_w, KrZMΏv|0+3|'59O]Gӗ~ܿ}1^Yt$S_UN _f΁ڮ׭g71^_9iwtC~i=g.vNM\hK.bJex*vϷ߶-]&^jEy@)u $@"3pH$gOʛ6m?jC2]gz0XW;:RfٓbHkT{*! |챦4qy@)u $@"3pH$gO-By{"xEӾ-eȿ6I?;쬏 ymqɇn5]3 GGHWBHdl$g$r+`D-STV"qǙ __g&6 ː҃pH$d H1pH$g<ҜtRr =,3C_DBH D8 *H8Tnhhhdo *m)-!׿)ZK"($O$d@Y##K"jQ1@ $r_h7!S *@ +SU?c^/$'H)|8qO>jo߾Ԍ=Z  GΜ9SiӦb5-[VWWnݺ™r t{ܸqb5J҃#7mڴyfgݻwɒ%=l0i8iҤ.]9w\1]vǎauuUtrYԜ:uVsҥ{q lٲaÆ Ān|5'L #\h]&酓%9@_&P)' &7y;X3Y51Bir=!a)9j:0#<\\l`=`Cy@)u $@"3G=O"dA@"93T HK$g@ e|fQa3H Q 6@Q I H[Z(JcH a.Hy@)u $@"3pH$gO[lBH8 +$OQ N@ $2oə8 GTɹ9oq2su@Q 1A:qH }K H8 +MΉ,O*H y8Z&9H u  sJ A +$<-A $|̆:HPR9n#J6m5iĉjΛ7O>}Y^^}wTSSrʞ={ș3gKӦMXe˖չ[np`7nFRM6m޼ٙ{]dn6LN4IiܹbW_]v;\UVvYf9uT1ҥKnٲeÆ A;vGv 5kTUUt{СpjΙ3G~;wt wڵz ٳ՜2eC qA7:Q\cƌUwΔsʙu[K)$b +)| +,-NO|v1z3P&ݙUnxޑk7Tɕ +utr}HjKlHďnKDɑuobJ)$X K$;rpi(Ѯ\zgJߑҧ=TzԔ(5*}VˑңՔ3)]ŋ۷/H^YY$_pn9R?>H޻woׯ߶mkX[[|r4h9}t5g̘!\bݻ֭ ϟ?_ &9b5-Z~װI-H4\M9a0?vڑIέ5J΂$Ur"˫/OrXJ-9!q G RfcDc=;?÷ R"(TֻYHy@)u $@"3pH$gO!2Bdf3B89u yR"(HPə2HPe3H oP *@#9k.G\SN^==JɫG#zzTccs?OkӣIO^==JիWOݻӣZR$goYcɫ,H=OԷG=s=Oc)헩:W)OpH 'Byp@!23!B6R"(O_ӹsg5/O?t뮻N?cvN/rrZ/ov +`~ /غ?C7. *7cǎ/*7Q/(!s3{q% +$@ VG5S%3qPGD򤎡H^1:FQQou:VF'u O1!$@ +RfͷsS N@Q *DB %d3H R2s:3cİ$ c't ,BH8 +$OIiI Hcrܥ3ڴiSԤÇ'9o<1fyyۋQMMͨQt{iڡӦMXe˖չ[npzRu6;miiݑ6mڼy3ݻdy&MzŜ;w}W׮]cװzժU5g͚ԩS]3f9p@5WX{ uWSgJ1BE߿5l^8_^%ib@)' &7y;O1n;n]X!-'Z#砎B3Ujr^\tS_ߪ+bM7uּByMoG쟹7__zMD#muërf|B~!?KW/wk#'#s:t;v=w؝Xpm߹cwwNx wa_iuQp`~ l..7/nns"98SCeꀄ@* r֨kibF6 H TP9t'G}ķ_CA$O~*W?ußvY9^[#1?u$uŘ츕+Wvq-H^͎uͫqnF?y5;NԣGfɑ=WzyqK͎Kd\BDH$d@xBNvnc0)ä2tq}zt78 +8O&cH e:FEEo1֭[} )4hIHA@*m}Uꀄ@* r-F' Ref H8 +$٘ GDB&9H Nf61@ +$H A +$<-A $|̆:HP9}/AA$OH^=[<|v]]ooF'vH<[bx K $@*:qP7V"yRP$acٲe1[#1?u c, $@7toO"yDlE؂2aOOĶ.]z"4 FOv:O-e 1@[r~G|c+H8 +$OQ N@ $2oə8 GDrdB!|"B't|s&Hy@)u $@"3pH$gOsH H cH *H y8Z&9H u  $?s:C+Wv!@S$'Hc' ٷL@"9{2TBH8 +$OQ N@ $2oə8 GDrd\pHL#9H Hf6WT Grf T h H |T@-v1@ +$|63T *@$!A $joA$ t۷oBH8 +$OQ N@ $2sĭWdA@"9{2T.//BH8 +$OQ N@ $2sE[KpH$ ]vEM>|'NTs޼ybGM۷o/zG555+WСl0@9s4m41\lY]]ku֊ +gʑ ,qƉ9j(5KKK<ܴi͛w%KaäId[Ν+f߾}յkر5^jn_5kSNsj.]tϞ=-[6l$/))cNJ9zhG֭[UUUL* 'O9sׯk֬ٹskk׮իWgϞ)S2d#oܸљ]t1cHC_MD;RZI[g9̺-% }1JMZP>|ݖO'G'US>vk(~LVP%G>sjJSzW[b9RzŔŋ$ /\PG) Ǐ$ݻo۶5]|n4H>}3fsjXbAuϟ 1b-ڿkX$$yIPSHCi0͟:əCrX*9 DWYWY/WYRK>p%6mڤv$g(^%gArs^9əLrFr$7A $"3}% H8 +$'Cex% G R8 H DfnFZ|' (HΞ B(dJ$!Ǹ:⥨cGrF&d"9J'띀^ I!arN'>7gH8 +$O_Ӵ0#-z_ qH Tf΋3qI{@Q ~I=/cMX$@p H8 +$3u H 2$@ɷlcH B! 3Bxf&9#9 5)E $@"3 $>5H$d@"!sQ@ $ 1l $3$@ H Df梀D8 $pH$d. +H $pH !B!B!B!B!B!B!sc?6slsO*M9@uG8U"a$!ZfZI$g3f df2sԞw}[0"8scpkLDJܓCJ6H1b;^3Ndf3Lr&93lf̰Lf&3G\tL Lȹ[3ij_K%l_/|HBnu/Éb';mr&3I$g3fdf23ٟ֊ 9bBnGEQ\xsDfy`CVOdf3əLrf̰Lf&3{' ٴPkÄ3Lc5FBn/5R>Lf&9I$g df2 9ZVDO&y('Ÿ9{xɷp"3$g3əa3fdf2)`QjR2W.oNj{|[n +&{r%nx)2,%|z$g3əa3fdf239FbLiR&gV}THGeH $^QgKGhV&g23əLrf̰a3LfF!B!B!B!B!B!B!B!B!B!B!B!B!ZRn׌BBdfBƆ'#!!!!7St"{'BBLfFl' D9!DrF!23!r[!NBBdf23BVf6xB$g"3B(gI8FBN|^ !H!Df&3#Prs܃BBdf23BBBBBBdfB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!jRMRhB(i!PV29qBg`2 9Z)Ղrɽ!r +i9g5FK/BYqg.ǫQ ]^x4̉$'"-VZNmHI1q Be*uI1B0M) a6odv҇JC'o# +'-'93]c%B!2XHppdN|fZ$P>:B(Y7s"K< F}16iB +#m +kZNFA +PB(RNf$33-nVL I0'{Lg=\O66@|?B>- 43p4Vc$f`3jY1 =,1B>`qZ:a"93;r_ cB(i$GأsK_ +!2[HdB"_i1'0$3W:B(6s;{b)hiXy#n"wePAvy +8OB1Z>l:FzG* u PV&ZkH>:Fԝw'Zx1*l;FŤBIrQ!~#̇3jN`%ۖrT +ϧKsL ~$A!Thi9$lv5IngR]!HS/ywƓc PtwoBV=B`6~@0^!OZ >BB(Be23B!B!B!B!B!B!B(/|m9/'?I1?| .h/|ӟ>[<Ԕ 1?O)}_t ?uO}J=\1C?K_;sMrԮ]QI\ J.J.gK 36P9ru S8rtɃ]=xHmF]FKl$E5y:r ]FkzE p ""]*yK͟CO=/#򗽺sB>$gHm߾}}+ˀH8 +$O-A $|$g$ٓrQQo}L׮g/:Fv튚4|p1'Nyӧ۷o/zG555+WСl0@9s4m4c+Ej.[5ܺukEE3 q5jtGnڴiܻw%Kt{ذapҤI-Hso߾ڵkwVWWZJ/GΚ5KͩS9x`5.]gp˖-6lرc=z#ohhpGv֭*H^VVC'OVsΜ9bO5kܹ5ܵkիgVsʔ)b2đ7n.]1c|"y)3rfݖj +Bp +k(B>n˧#哪)]LƒxF;S*m4;r*RAr\)ZMAr $5%H.5%ĔSS1H.$HvP]M #Δ#=HOIRSz4ާG镮V鳺-Xq1x}+++ .#GJ‰֯_m6װv=h 9rjΘ1ĆbŊݻw׭[$?&LsĈj.Zhae/Ii(ՔKnc4zTӦMԒs׮]u۟ū,HBUrի#'9I&g?HyBԶmd!6:2\b>;z#ƿ'^ +| B$@ +Rf .L@*P!VHō7Qh~cH ͮ]f(0#BaR+i:B`rs3HyBJj Ҹqo~hR1R8&@)LHYӴ<1#7|' ( +099TfpT(ᐖ/7'hx$?u>M RR{jEJ@bO Aʞi6[v8LeK_AH +9' (HΞ ubR"(OJJGYlC2-"g%KKcЛ@ 0!A@"9{2TFF/%O7fq1 /4o_|"B't>P+H8*H掏~|Kq{ѯ9$sɦ[C'Bp1M RQ N@Q =*sH8*O"۔7`jkc5wkZˇnڷ/:;/> $@"3g#9' (H A"!'=U%C|>$Hhm&_EI H1pH$<*/]Է R"e*S>}vT +LHoi7J1H~_Dj Kcv@ 0!A@"9{2Tޣ7$){T;9sT"Q+0 UW?ɞcb)%⩬'':i$@ +R8 H8 +$sDsx .nIM<ȶ"*}yOxb+5$$gen>;UNr-fDڷ/m>v@ 0!q_ q)dfx)PLgY 8_|vZ#5_ kEr$lHę﹧(挖cH Q N@Q QhM$hL;!8%wak}GE+RUe^NE:Ij >KBH D8 GDrX#lٲŷ R"ej`sqs3ݻ{@Ft}lޜg5x p Ms[~+{wwKk%Bp1H; ٷL@"9'^47iӦIÇ'NTs޼ybG۷+WK=`c=S_6mZOb5-[VWWnݺ™r t{ܸqb5J҃#7mڴyfgݻwɒ%=l0i8i$sٷo_}uڵ;vp WZ#g͚ԩS~Vsҥ{q oذ!H^RRcǎsю)UUUt{СpjΙ3G~f͚;wvZzu|jN2E!C8 ƍug>&3f4jcck(3rfݖj +Bp +k(B>nkzB|R5峋)~k'7ou[- 4Ur:uҾ}#Y$ё#{z=E[+!jOlwGߝ' w}ŋ۷ϽWVV.\#GǏWSz{<~m۶˗/AɑӧOWsƌb8P+V޽5a7>!Zɳ;A $2s63q9R:S:9''u ܏ncȿmC(}wihjns5c{?.RC9p|sbUZbxޜ|r[{h:H u $RH99Ѽ|: Evu ѣM]]NfQqMС66|9ٛѭ=醤dt1@L$ .R:SI Q~)_w/iV. 43@:Op.4lZ!z˺K-dS&䖊 VI!:Beg9l+z%Zر@o2Łf\Cs<"?SsԡCfH+VO>پՉ{bժɲeg Z}]Pvͷ:$@*ș8 G{} O~Z}Arf\H3g[ 5/ ~#,bĞ?Q/`HZ|+ӝN.ͿDεwC-LpSSOMDx1Z$@A$ $?C?aeo̙gYH٪cMa, }nڟWRDA?ٿ?j@ԏvYqfMĸvWwSZzxUSGL6ؿgu)'J#_~E|Jn6m4|p?qD5͛'f>},//߾}{;Yr70`9sL}iڴiMXe˖չ[np`7nFRM6m޼ٙ{]dn6LN4IiܹbW_]v;\UVvYf9uT1ҥKnٲeÆ AH=z#ohhpG4*H^VVC'OVsΜ9bO5kܹ5ܵkիgVsJS62d#oܸљ{1cHC_MD;RZI[g9̺-% }1JMZP>|ݖO'G'US>%5uwxU|m탎\H*RAr\)ZYM7G.!ۂ$#DjJ)Dc\b5H.%¥DArG)}GznK+KMqPzW[vG)}\Lj.^x߾}A … u{|3~ yN\~m\˗. GN>]3f9p@5WX{ uWs„ b1BE߿5l^8_^%i" r`rs-u AQaEJHTN3wyĞ3yf96{R@)y.48x\v}gӨ*n(ZS/5khg~Ӯ]ge}:j pټYFQyfVb!kS}vBC^0Jho_l~q?7ݺ;=)|(訞=-CSn=v! e乫1V`} @)CL2sʏN*?>HPTRJh4jmRV˰:F>"qF׿6eKV~k13^:t(O4\#'7zĘ*;#NqjjG?j'QuuvwH7<ÿ]g H )t3sq-!j :Kə G)2osNlɩc$Rg; 8{wmn0<ͧ1!ai~1:io=2QkjB|_e)u $@ ۴Iw,cue$9 P"%#9]wGf6lNg'o͕Wک+[͟diMd>L˹A~WHpgj^v=P:fk-Uoa~K.9{5M@Nm$+!N@ e~կ5127ĨcĨo$RH?9 ᨰ"vvEd> sb`M s4s]7'?By?4j%$e/e]vɎ?X_o׻$ΐt1@)HO GI¥w$**۞6g`i&7Wl:$S^o^Ϙz[P?ʄpZΥ뢳eRev .Hc' RN[Zd^J]pT(K >2f+@6-Eƍ7-°9ݡrUUo}iq.~Fۇ$8 m800!AH9OM'gB$JŋoQҥv#=m7H`" 6g`̌Ң㏧t Mҳz m8t:8 $~~񕕑3 ]pT(zyk3$/эׯ~eN:ɼ6fYf|ǮI0 C 7gQrjH1H R^ mWj23u 6Ԣ~kl;,smI ]sx3OA&wcȱڇUUm]mKMFh 9HǠAr&N@0Kcİuo_zW@璫74|\wt{cj]:^'}$Bpi2W]eWoHv62Pz)LHc' Rg5bdL%gB$>߶;lw#$ v{﷿1kjHi 2rdFպHQvx]؝/ s8e#aRhQ N@ 4ϠKo-^LfXr&tAQCzU*ǎ=la g|ܽ{rVə˙TԵ2G…wI,#@J@I'c\q9ə GI 76uٳB׿Ry;wd)P9:#SH/Kzq-Ʃ]H D8 $2Ա,\Hffb07oB0\^>%uD jСk"۠XK!Hz1R G8 R8 H rۺ:/'3g89 !}GL]%/~ۄx۷/7]ٳГsv튚4|p1'Nyӧ۷o/zG555+W;fӦMkE_e\í[VTT8dž.qƉ9j(5KKK<ܴi͛w%KaäIԜ;w}Usڵ;vp WZ#g͚ԩS|ݖO'G'US>v53P&sfCCDnxޑrJT\#+GʵVS~\bC"5ȑm(9RKM71%Ԕh K%D4hWS?H.C3H⦢/5[G镮V鳺-Xq1x}+++ .My?~|wj_~۶mammu{РAr՜1cK TsŊw[.H>|5'L #\h]&9S^t[HCi0-u JY:riGHc BzsѶԗMfIOkw +=9GWj]{1onR7q'#vߺ¾u*gJ+$c7H D8 V 25Ao G~4ra6.[ֱcկ{Xc&]+c3~֑#Q\8 $OQ N@)e01^Ԅgt3$2vWG\̦Ц'c!aMK^gXp3eBɟ20gpfG$"̫WϞ=[MaEu=o{$ݖ_Y>㥗ΐ|#s-:!T[kS#$ߖrXYYUU' w؜N6aWjC쬞7xN 5R8c' R^80#gc>F82s:ə +?iSe52%'q{6I ͧ>efr5޽Rب@*@$ N@*pbs?0>1?߮UYMtppTT.ŕ+RSaM aZkͩߦS@Ar F:xМ|!/À/l1?l?uFࢎAo GO~bڴokN<14 tv4c-1֚5k| ]~ + +D +G8 5moZ[e>s5!RI]f_9Ms %Un*'?iU/lG6oO[ny锠793T޹so=(}do~sqQ N@)e~;}g#E%SGsύ?Մ̜L GYHC :DuljӪёŇO'-!~cȞT]mg g8I';xwOmuK?>uYJtppT:Ja!͝kEUU=ZDJ+$Lər:+xЕf_{tЭ[#E."ϐAAr 0 ]}9ȧכ30n϶ /edyf>*b1@Uڶh>7y||-"o.1Rnk.zPHkE_7~y{RWG9xP-& + +D +G8  wQ^޽śEcAZBjG5SKqRJG?, tcpm-!=9Țy +Ja͐0 *UҡCK^۷_a>!E΋!RAQTHc' ZWt>;"ףOH)#cԼ$ot1xgV$UV?TǠR;hSN3`YBбcct={#]{3~m<L]v1[7m93nܻ;KJ={ + +DE,[yO?qbZH9ɳ=2s:FJb4TrRSm9RП`QSqΐfΌ5C/rH* 3g Q^ݾξ8hsvF" pLr CmD/|!<đrHEs9sۍ̜|cb8_ԦM& >\O8Qy[fyyۋQMMM׮]u{M?f9j.[5ܺukEE3 ?5J҃#7mڴyfgݻwɒ%=l0i8iҤ:9ie۾}k׮ݱckX]]j*߿9k,5N*\t={\-[lذ!H^RRcqюAIȫeee=tPi8yd5HXӯ_?5׬YsNp׮]WϞ=[)S9dG^__$߸q3{nj# 5ecc;RZI[g9̺-% }1JMZP>|ݖO){ۇψ\CxϙUnxޑkTɕ +utr}HjKlHk'#Děk)SS1H.$Hvwaf+O>yHG\C;҃t[/5g6rJ镮V鳺-XĦw5/^ܱz8L^YY$_plHwᆑǏחysO#߶mkX[[|r4hkNWsƌb8P+V޽;Hnݺ ՜д#\h]&酓%9@_&P9iAR\r:2h#n(t]g>1'0yШ@*@p1)ٰYB~?3rdH9_%O3s"*b(}_ 9$Əs9vVD[om(Hoi?QK`؜rhn98sq;pN:MvP)u WVHPַ`ڵd#Oq19ԇ)W^{ψ:FFԝ$gZ]۶NwךoM670ɺeeͭ6T9Q^)$rr;7¤Q N@) @Z"5FG6MO9V3>%G Ze߫wg斦U4"]%瀄v5v"ʕG {oz˦瞋hoEl4p=Cy9*ٱcm,u)N ;c' )"2:F;.=\;E3ݤn \Oڇd=pU539$"e/Y:^6-Օ#T~e#ZrP9[ne!|3G Hb(I I idyYv 5qs*t қoڛXx=ӧ~ կcİ9o6n4'd.(+㥿վ{uu"nDO ͭ;T~SP-O]Bzi{uGs;3{nw'3nr&瀄TCwEUcM>:^y%t5}z$7i3 [w%K{%'-WQ`i" B:F tRk~ooN<1y6.v~N,If/[Ff&9#w{i=R@~uքl$nas+gc}r )hH…QFW_mNo]BCQ y:qH7ٻ(T|ފ]vQxLVOOrG.*$ + i*6rF?$A:wjiy^t.6lp8]1=zؗK/q >[m4v4׽{̆c@v-cԩ|+N >+7/3qΰbEE6 -g\#IBjϹ{ٟ ƁS իS4krʁڕy,`=2H~mb ۅF ; 7K5kj@ԗ1r)EDpɱc-o;FXX:Z^KrɉBn9R\T <3HrrV\7jQJ HC*R+<@ԩ#Z(fY<|ctv2[!usf&#4>q)}%_(5V>}.unΝM7 +fǀ$6iWii|tZG(/гF#4;{lw>\>%N:&30/pٴidWJ6&&… ҥK3f̠… ]۷%T<%Lݺ蟺ԩɓWwʇ{.RJ_ $i_.ʕsCn]yf: Ag>2gyړ'O(WO_?JVl~> y6Qoɒ%6R*&%%9sFadppL[5kH6$$P)IΞ=999ǎe˖ ^E{kdO8TLKKS={HV]t<;;[<..NaHD2vZH;JIEuIgi+=iJ*.^dJҝJvy-/AIT$+,Id+$mHWKs$j)5rjGKzjk޽[<***==]H'ԣ{.7b/_.٣GSE5ի"v:tH4F ^l6)#F4$KFRF+YQ,إ~n2oϦ.\55ÇUޠF>k,N:T|rDDL/ZHpxi.$Ǐgddƪ8p@7n|d9TL0L$:D$KU"U,Prj; =U5k_8JIm*L3 =jGY%}E9E?ʙ Qy䑓QޱCM죴ylr9ԦYi|.f ;yM4i̙:(3ϜjY%申1h| +_uwO? +SKSm@yzX5[<`p6NBzU4h/lS'Ѿ={c+GAv!˨^Rr7a  +h1OȐZ%9;5MvH.>*f5/(u3Xk1q"_H7ɺQ_Ja>\Q59A٥w)~|S?@ׯaQY>iU,zg*Gkrk.XF +$1`$@*bc"?3Op=RN*? q +if{_ 7x0~1`$L94D!IҭZBhF%oZE-0>dǰ' v z?⡇J}qbaHzB v ~> Ի7<ϝ+Os=^eWUӜ~=@\QWfb۶< +LJҤIE*ÎH6W^ j*|9+pZOsFԮ4o^Dqqq 7zg (@!Hƙ-{L9 Fٛ%WHZbb'Ff3ԭz 4wm4et\AL3:l H]&ѫWʕ7hpBP,וs>Q!7f/OZB=n܍h> + $@; Oo9' Z<9HH/̛&ޯ4lРtuOYp3m׷/o9{VyttA^yEi3: ($ ?}0 i7Qȕr1)I InQGM_|!n]$*Yf{觟r +1lֽ c~ׁ܂6aPHPȰcREԾZ?Y,AZ'ʿxl4nl\/uHKvMQ29xЙn^2uF2a$L}Ү]=J2!=^4ar'+K fCLrsy/sϹ}1vH$@ɇ )%7wjϋf4AܙP[ W<|7S7iRTl)O<ݜ\ҸI*}iQ͚@: (۴`3g߳eRj*̃^6e'VSzurC71m6T9X4-;wzv  (@5Ha@?$h`]_3mCxRJu߷:}j4C7{yن[n,ӪU[k&n(?_4kܾ=43t +*#i֜Wh-ႝL֭\lLsXJ +aH'L/ zi!ZVPW]:O |H}%'vjrdQ~ ئK*aavMȐ7W2yGժ \ &ԥz@iZhfc)g@ TN;vR׮[B}fС}dڸѱ /y*f*-H/ H; B7Tz{XN?bӦ) 鯿-г'k -f^9sҥn8bpݙ3JNcZhf1 f s[o ēOځ+eڵz?Υ/Q]`lZ{~z֪%75@ɧ t!zオES;p@\;hJy睢M;źtYk{{OP~;|5+,q=Wtl8 H>i%: o8VqV%)ApMޙ&OԨ qo=(gCL풴>@ c۪:uWfM?mPFNTnQ 9MA=UCTWRrڮfrUdSG7%(~ !gq.T*383ׯt6}xϏ$&}(ghcTurpG($ +  1OʺOd=t'o'IݬJI c{lxY')yD3CECesQ9C OzRF EHyy|9o*f-${R:T%~ѭɰviA |H'F}'Gjh±N  bk֔[S'W{Kh ˗5->zұ'5?ʐšյW9C Qef51򭷲&]%"$"iM]',RfM+K{LK]I6ŴSe/N `@?'Hz[puxdN!;k@pyn\Y|4.z7K4} g.*ƱcX5\6PH6+$#%K"CmIIg H?CRPӲ + +-^,TỻF1r$͆*m֋.DQH 1O ? $5 +>MC3L7j$^x!~x`7]ڀ}ih`pfkǰD_ U~_& +XwwڵcUڵ5ȑVMƗKHsrí#zB&Fs^fWEEEF?hE$ +|1O Mxn [5e-!E۶Avy~Qͪ'4Rh<}})<ϟ"pfֲ<]sh:uLfZA]BlڴI~[%stҥǏ… oX$}vs],LO>TСC2pՒ )((PJ'&&*lNNѣGezTq3g$v ˜9sѓ'O(ӣdz/޽[̖%KH6,,,++Kt5rz]ufyaaL$B~Y5cǎe˨-[$w^bΝ+'N*Ң#٭[ +vTAF$U$@|JIEuIgft]b d 'U*]н4;,;$v$RFSX*Vט7!^!9`3DH7iֲ$9 !JQϡ#9-"Ի$KX{ިFN}Ӧ\AN=\FNc̘JE;4!S7l}8fiQE}wj.]|4fe:м F4'M2&hhhhnnyBB>|XWZE ~/xʗ_zࣧNJNNV*^|9""B-ZDw!ٝ;w$Y$JEBF~nܸؕ+WJȑ#yyyJ3Ɇ:D!BdjFScHX棐 (@2$+A?1 ֭K3gzl^۹3z]ٽC:y"5i56'/]1d?XS]I7!]9Y7ߘz܊O>)^}ɿbB@P;`ǀ$ +\Ox`K˗󍇄)k3/FjpU!gc@3Q5i8 +I}xҋ/gc'U١e~aDOS'q-vl>~>])XΘS常8 j@QH 1O I^K]"ֲxQO`޼/q%~xQŋgs>am˛),v(U/k}g{Shf*ghf@2,_e?asy=6m+-3#"Ľ)ݲ4s&ᅲ[ 9 4@1{6!IIIFk@QH 1O Ik ش4NKG.FB[W{r|2u׉lC"%Cԧ;Ķg2ڵΜ)Vh(?k.- ~h/@ JDs%~dd# P.L[/ʟ|2Jl.he]kbtΛ^ӧ~{K._%K^Ln%~4cu ++]˴%ĉfvӭ(ȷl^=M/_!4F%_pOFڱUD4ƅLu&?^KCoo<l8Cė|%^3g<ɘbbxVZgw҅ |)S`WQ矋nL6沕Ɔo_Yc5~z8~A2CҾ,Lǡ̲ + +M7.] n' +~r;3޽@Y޽$Gp={%lB U+hf1 fgS'~[$5}wC + WXYC,7/hÆQ#p1 $(d(ib^.?FYH[pbz ]VzuqšBX˭>bu M,4(a_zWؾTX| BSw8uhf1 fG))P6sݐ\CJJ-)II~Hyꚍ+W&߿?z15n B Î~b4H>S,iǘ5H}g2M)4v,}kԨ:+(u-\1dtz:BO>TRӦ{-7C3P9C3Q uN.@:CZI/oG[o[]v ͞Ŭ޾td6nP &m 6A2;wzf ҥK!-`+X[lIT˭[[Az 6l\8Z_ [v.c D.72[݂M7lؠF>k,[%`j+v F{JVdHj_ )S '/\*Q>YNGFڒn:=ɕ*=< Ciʩ}I.+h=G1h227׾Q +n4dSq4n]jl BfI#Gp*g,]$$@2lo 3υeHԮn5B~F(U"; mÆHEauri.*)-dSv5P9gKIIݻp*Ẁd4T?Ċ%4Vӧ/ +I7J.͚Dx7X9Ԫxp1 $(d( + +InHOt׮CO+xVbY쭷j\ryR ^ݺ+O?G\ +ۗ|)3m ;43Sn.kWz߷Mo]k^H-ZLWH+ + Ytn u-T+=jjX꾅T APdHa@?1.qxs'O(CܙW]0a$1QÇKi+uz -/5o}i@' _}C9C3AP-^\HFQңZH3}:9MW_A,eA3;dJNl~>osMuO~g9zоYYKmoW}s6IV{ QiXu g׿4Rhx&fѣ0z}%и85112gS_֎!KG!APdHa@?1$Z>nۖX $ÛNl\ڡPNņڴayVVhBr64<^)G~Wfφf HF@P~jVb/OniԤ x"3qml)"x jJ l2H H6m[Qfk9sXTӾUQ߾l1HM*%RDY30XY/{b!)i}B9C3P]srlS~RE.H11V, NPϞP>R#q wR'{=v h?@ +ʹ"BTZnAMIS@jZqGfɓyA-,wie )̶fbG0itcaEr4Dvhf11mv¼i@ۮk^4n\ž;g7=ܟ{~O*B Î~bHGZwd;N+6 +6K3/X4+V8&n&!nz/{;bҤ'N@3rf$#ԩjh`U0!-\3 +iQЁpR+,,fW, =ܟ g?vzYWJ1Bɖ X:Ͱj7EE[ rP`V_b_nrN tl;"TAΜzxUC;M#Gɳ]=nJ٤!%:ݛl^?1#kH> + $@;߮^|QXmT5hP&NZ>'.{ +N%7*r&!\ ɻ + /j<\Rz:k~p:j/֍!( <5tz8cH䣐 (@2$Ǩ_iWŵJ͚ x;6́rpn]5Q +ܽ ـJ.{p-"wᓻ(kKCl [p1j $(d(gCr]l~tT+%qM%5ˣh>ܹ.{rCḚcj + >r~=٤8QP4^{UX5j⋼Xh>e z1}D!@QH 1Ou:݂G*FY$NZeh۶.vyŋEEl@ HBu +Ů]2ChpucGWb̫_c zdu܎6 + $@;,UgijZD(b*}$kTI;m7{.phf*ghf@*zI1}KWOYP6UX5jD?+CG;~HX zbkozr4,0VU,!5i"zJUft)Vر\wmjp +vfU߽WzUySfA7:I5g/ @ (@BrH^3quŅ iڴRz~oz~#ኾH̰c_NyqՔ݈ +JnEY3vH(ZÔ p1j  +Cr" /\"7o^y7#ۥG͛c^mŭ[; /,U=,oF_$.b`$6i=CCIJLSPV9#"vFKA9#g1!@QH  +e:P$YrhΙ73ge>}[ͪȆ ϫA uk6e8"YQ8w} G3kQŶ ێ~yHl|s\frrȶ=59DG /SP'9rw۽FݸMf1N8a$AA 9m(ol ITllɡ"ѨVq3g޲OsGpɅ K Qך=pō79Hmem5ÐrD)*y`.(Gy67߈ʕwXWۑn1m6K $,sŽ}%ԨxqˣQQ}{gܣG<ɱ_Fn1;mk;pӧy5ct?/t6/ifvK/}ZaCdzĮ^Z!!!JD9zL/7=ݼy3 Ҿ}o٘#܁NUNZ>?_Ԩ!ڵCV%XÚٶ*.O{'JJ_*~I3ө*Wv32ĵ׊a9ի UcqTiAr5|HKUb +=)D y^*<:}Ziz.9DEӦ{'LpF"kTGkvI9CY*ވ~aHj;r )OvO>ɱuŋs$Ct', +ŴنxH2H&hY3?q73BǏ*v&꫚LCnhVlJ-#%Kċ/ZJQB4^Ð.dϬ$gΆ 5e +>37tZH}'ηov^ᔳ̰cHcQ< 5o[9YĴЭE|/A; rWi VүhI'uC5m0!- Tr~OC'աoAYK2 +ɀ劦xFnbOjԿ6i:xa1f n54L9A9@I:$hf3 &=Tŋվ$*N?胪Cxbtgղxi +~b Hc aF+v3'Hgm3G̝[ R%BW>(K;Z:a9H=zNNOoJԭfsKS'q-ŦUp'>>RU +cDznc8, 7١`N;f$AA EW'Tzf_yU幘~[ӕ s΅<`@4^3!R#+.el]e)5h@Ϡ8.rrxى:RDoGXNl<^aC9{~CC`H> + $@;/6'+͛ +ѥKUOݤ + p@$?cx҆ n,17(Rgz˄ YP>̧2(r}ZRs8DY`_  1|Q>@<`qzp MǏMJzy$@c;g >q(/F6F $xQJaa0)(#G8rUTF|wxr p(gL v @$1|QxM͆ tLݤ + p@$1O\K[:|]Js2SJrѽ:v,shu޽\=Se@ v kL|}1+nA$/=u.*0 `@?q\VnrgxLJݺq|. wn,SOqroC@l,z8g$AA _-c2OA˗h$@frF? cYЭ32&1L/]r Un./G8kmQrW6_?B Îs2{6Of~$G,5uCq ٣ݐc.pwDO1vfT۶*4Oj7NYHHU{wQz8wXH a.ݿ@7 #+?}F 43! K~[zU{xUH):ں%3Cx~񷋊,> +xӶK[}Wԯ匩2 H;6JJ}uz5h$@fzrRQeKMfǹs^ҢErgK/v;s48, 飏DZtڭItPΰcHcQhU6Md`>UMH̰cxU_ +NC,T .F_0 =O,HT(9HcNyTJEE̐ƌq+V;m+WgKYJLd^AJ ̎[2bOfʆr?-խ~h$@frF?qf^@zwҙ3sr BY),n樘6{ǎ!+"@QH Fyf8tej8JVa4 A3{R9~J NBJJbO #* -O3(g/;u[~rr,'O;p;Se3;ѕ+<ݽ9E .QPPfr.}-9šy<˰Rp46[:[eK/jƓR~>5|G5_?# ?PήhcdPH> + $@;5Jh(p+Pv:1`WDk,5Yh$@38jQLݕ3IYjԈw,dՁfJA/)m֪lѦmo| =Nܸl{ 1mT{ $lrvܹvfME ($ + ?>(MYns'̱V.] 71 Y3۰HX]}%J~:u &f6N0)#`RIMȏ`R#G!LGSӦ{:t+P5nX0ʊO>VJ6%eI +rWI &^}vIM`YmԷI$f4uNR{h߾n&Ei`RJ`2|1@ 1|^":wU&+ %xGǎ ke=`X\}1@Ԣxta!8 a["=l8Do%ճ_]vEʢOuP>RiWXH aӐKfs4n_"< 5];Fٵ=ꮜO,oQtV5ԳgfPZ$^]wirIh v`Fh^ePfL v @$1|Qnv|.´PaѤ F REch YbQcQd:M2֪gر3uRܙB组$5;b{.92~ÇҴvy11EEn]曥 ; AP {3t;uob\Ѽ' 58AҎa{ov^rIIQJU{:__{N>̞HtyԭoEOۗHٚ|Bb쾩3g䣐 (@2$cJn)\f&,46kHlF){[̙?J۴݅E>)][K +Y v.e]m뵭:bHPS1OtZOR2 L]`|@&%%n\3;i$ۍ+l\uڸp*\6nOc"7UHh-sQ#ǮS1c|^JHv c6Jأ6JEEl!2eKRZ$Cgb>o>Pw6SP޽>Ư^e *;vd$ЄP.Rz9}k4}1Fpl1GS?͘Fxo{ШIwmlc&voh:"dۦ!OO,6Css,A3OjKĤixrqw05qT1=$ryhv4j(9J̘a ō9=zhNNIU~X۬i#GQ㶛ԎCԸ2z%4EP|F]e(W!!G0F>63-GO_­Tʧ[ߞ.>O}qWHEM@l\V4k yE +rstOjVo5Vٯoc{Q3ICVIs')_2%Qy)ȩ/9=cĪ\^e1xǩln5%ŷHH~c0f]Q8wGiwǐvfs(R4r0 m^{B!]s(߯zc;Ia*.4<ƿ.py&+g$$@2lsX7$}kT>թF 43 -^1c-.2?8k?C7Qԭ+>] ;rU6l[A`yDF 43v D1';'v5e ;w2-[tE!poTIIcPPlsa1N}aѴQٛS,'๙G!APdHaFӇ}hz=hXSɂvI3%&@$hf(gc6J~>K;%j-+%u2R˖YO>i$}2%Z]nx>yrc}T }fK$&rT9,,h H> + $@;O4+v r42h$@fr6fk2ĂFpA nX-DBzbþ|jݛ&rTÎa|;'0))mYNx ց@ hf(g #GA.]1)8n2CV˗w5DKۺu:v4>mbcZU_ϧc[9mf4aB SPQyʡ +rԶ-we#rrJE= p3g6JnՁݻ\篸b Ii.[QJ.[4*Wf_L6\#$*U_Q9qǀro TH(!CeZL>mO, =prZN>c3F?4?a4 f6hBoݻʋj6mb{ޝ5 ?$,V~k߳\r>qc:7ܓO-|? ,Z!cUc[Du7ǂ4m|&r`$@lj-}T9^/'N ҌNRQصCRU&@$L+#<\z 9-ZؗRÆn|3\oeJV> GG7'{OMڵ=a&$?cv $AA yݎӨSL+̟^6m$(٘ .K.EFF; .v풇.^XᙙJϟ>}ZaCdzĮ^Z!!!JDJ|~+?^N7oLG >[9sLGg>'===**Jϟ/Qr%K$TLJJ3#B0%֙9YFA^XXTg*lNNαcdzy-[$w^JĉJŴh5={Hv֭.]TAFEEEd2vZH JIEuIgiUJr8_*.^dJҝJXK$RF$U"UHW93gΨS;*ȥ1jkQ A=D 'OJz%Yo._\GU#FN=YAN=*Ro,5r4F 1Ehi|IFUT#J"V2MJ҈&sI U#OHHP#?|LZ*nذA\6ѩS/_E vC;w HǏP#U#?pd7nHʕ+%{ȑ!F%>{a4 f6P uRx8YnE*+WK)#]G;uCGzq+:4[cҩڷЄgv 9$ +ϮO9U1aQqd uŽUV l)zJg$Nh$@clE.;aHC8T EFZDbnpy}J[7KO5%t*P1 a@߀ɷ]$V r[f/[/v>v=KH躀H;HFP1H}&֪<2lD!)+>}x:ƫ 1k{%l_QWCRF }]XЩv5?4!1tެB 3[6rV=yS#G72t0B_z(.\I躀HTjZ9 iRVG8Vkev~IJsKM9^$&UZ4\l,Un1:sf'B1Ӎ䣐 (@2$cQ,Po;U,b:bHwsuc4 A3{R9QXO$)KÆˋKJ)52|xɡ-{B>#>M17T@rTku $,89qË!Ml HHǎaF1pl~ھ zeѠcRRܼrEpiNv[RCG,^slq@r`$@ˍ";lf۷gq躀H;t={ӐfvW('Tz9&%#?Ѳ-E5u3 w?;v$(g1 v @$1 (έ_mIwrnG2@$@_3\ '&eF7$\t +5kՐVZ!!n?=!hܹ7\z:;x~a)))Fk@QH 1(sǍKqvt]@$hfQˋ*e +g4ʁ%$!_~1|dǤDќ_dU7\ּLaq@r6TɓFk@QH 1(r"Z37>Zt]@$@n(hǰ]]lF4dK+}xy,U+#H^=1DƎ~U8pL4;$(g*c APrD9狻͚9Y= o t]@$@rݎQ|Qv];RN:&3X7m$(٘ .K.M8Q.\H%w%۷߂K6<<<33SxӧO+,դIKsIRC^I]($k~/BY&>h H> + $@;XX}71nA5躀HFYU0.̀H~ +ɀe+gݵ ifkJ_QGŴߔ3TH-{^9>] L3 cddnu1m$@C ;  g˞W|G9'Hͬr|,X_u1m$@CTh H> + $@;sN7@$@$?̮(g7J{ի躘6 rveb$AA  DGK1 HH܎F9wN\{<]f@$TWH@Hgv '$0w..`\s ] @3 W2ik'u1m$@O ;  g˞TIIzuK ݢ=(<#z +]f@$UήLW^m$AA Q |\YƢ 4'_|RjSKՙ}GʏI9'EC(kVuMVcƎw-(oZ,Oi5$*IcX3S>]"P>'OwaOwJtR8T2Yfw>{oICu=/#|Iu#>")Χb2*2.d$! <7ƥ5 (ۍyq{mqϓV~n\ƥ|O6*gW gv h^{7ŋ˗O7r7ߵkoOVCO,ә)bOH,_nO)"-pƎ+Y ^?/oӦի:s2|*&:N+BJ&A"2loqShn\5yqGeq%yq=jyqH\}Rch@Z"?߽J RQ3CE6ZT +[Q9{Q^>(^~]o!AP[ـS}͎d;d(;A2d2͎1b1= v q];JıcnQ$@$j!& ;^e뷐 (@!Se @ +hy~HH~b("a׾Ov_/u1m$@::th H> + $@; dg< \A?$@$66,(u1iŊi&߿@\p7]ti2pBa^v(۷/^,:uZ`4cFxffROVX)Iӆ̜i4`)>>>11QsQ*7ocg <;ecr^X_Ҕ4@}T~2Uy֬YRǪ,sVe*]"*VH];U6<ꮜ˓]bĐ?qڷ7,rruH>}tH UѳP΋ku׉j4F?$@$ch YbՈž&;d ;8GWn_?{EP >{y*ϮXP>gy6D7Ă +* ,B/[""-[@Hp썓};͹~s̽> @ q P@ yaB9brꞆ.(jkQ` c8c><<`Mn3(1ZERR@IJۆ;0CtA @IeeVse 2{YSm%PJ}q*oٲE$C"cX{ҥ]tN^t鄏<)NEG\"Z HKN"ٖJ^DTKO_믿V-%lKɘ/ޤM^Z8kp*6(6+XP@ ܍LjkJ|C $v<.((%8۱^* HaoMn3(RZ3VJA1,?8.((! Mn3(hCR:1Lf:!tCA 4]P%PBþ#'X;4]͠JW"@)I)P%_]3((R:1[`qE⤓֭;{YMn3(RWyѢEU(%)% + q%P%PJ8# ,Y9?SVT$jp?Mn3(R3敀X(X@ ̪S |5%:uüy}VE~ ͠Ji'pA @ @;%P%(RqEÆ꯿F~UT$}"ƍsMn3(Rz12JK %E(Fj}οӭW嬊_YK>}>~?}>(sP|gD{tT9%sbBω9}NW9])}NW4]/%񵏗OU_ϐ׽ n@~Ni79~V~N'>$JDC~NmyEŻr[ڲrT.upʕU3/=cYd{c妆2{g/QQPPyO;p JnW Őqu~+𣮝8F\TnA; CًZERR@IJ@;%P%(jq @)yy>!)s✑!;"AJ9ԸO> JPJ8 ((AUg1 bm%PJ^qlP+P%e3((j,ϏvJ0(A*@)Ye3((j,%%PRCK.U"@)I)PԈc(Y5qF;% + Ί;wT"@)I)PԈc(Y5qF;% + ΊJ0(a@ @)MY`^ (( W +@IAo JJ2 1@ @ |t02(AA [8((9RfG.q#J`J|@wWy۶mU(%)% +q P%PJ7ev`3 (P9BcZJ$C"R#vJJ̎\b;3|gP@ n6h=UV(cƌ3fP{Hm۶عsҥK۴iC}=333W'NbFF,.Z(??_;p˖-Z5k9r$ &s)))\~ ޽{,X  D;өأGʕ+o߮cǎe˖޽{ӞSL &PUPPiӦkϞ=[nT>|ƼT۳s7n3_p8p 8n8Y6m{)+V[|ԩSeqT0`ƼP|ݺuZCr{Ĉt E"Vۓc"&ܦsсt^Y$&T$VHQ~B/leGn%C LH3 eVVg3 n3 eVGMbk d=>@AN"NdiE9`[ '3WYMW9 e8C!gpPf("lgO,bĺUM((&Q'dj2k +Eה + ʬ8C!g3n3f(3ʬ ; SP3=XIeV_g3n3fPf(HMXM2 s9Q2j bu[ + VVVVYeM KtO q8C6m e2CMH  I,X@J](* ]@54Mi%8"V:K%2g(3 q n3 eXff eRc  9Z%'' e G 09[ng(3 HMC6d Pf(3@YD-4 e2&&l\ e2 68@8qd e %q@iqթAq&UOC` ?9 +>j^&yB:'֞Jݡ;ʺ(XA/%xunUSm +;Lj&1[1L,TZKБڌFeZ7˸{lOsKW@eU׾c wvt9դ URN1*vT݆\XHڟg%bl3B(/x1<ҋ_æcpt؅: +#ؼs*]W +z@SuIrτ10]i3+_ JXjޚ\ɶQ?e^xɭS`l3@ñۏza&K4ɯ4y UF-uE<܎hg; Jkw\"~Є"TN+6կiF:zp:q 6#"(;lNAR[i;lsI:5x1L4ሶ͘%7a=|F~E:LjuRmwq UONUpLFRLiWK2_|eS1p q S4_:nDŽgq s9xϏ8@Quz%N9r<(<*I|N֯T<1p6'ڑ\Up6k.{òbl zBT  qPM!5ѣj$C"R#vJJPf`(P8+*B!* JPJ8 ((AUgP@ W ȠJ-CA @ TSf8((U^rjJIJ %E(F@ ̪3 (PqVU޾}jJIJ %E(F@ ̪3 (PqVUXP@  ΠJJiJ@ @ gʠVJ +zgP%P%ՔY J`JJ!Wv JdP%ׂQ(3@ @{\ogP@)m(];vV`(PR Hk3lMe8((ycm3 (P4cU^ljJIJ %E(ٌca q%P%P%Ko qgP@)mRc]2.X(ǰtc(RZ)SV`(PJy%q GvZBa <>3f,Θ1ݻwUVm۶-7vܹt6mv>}hLĉ!-ܲeKvvV=g͚%GIaÆ9sJJJ=ׯ_aw Aсcǎm4}t*C~r۷kرcٲerw޴)Sdq„ T߿,feehnڴiڵzgϖ?1/--ܹƍ.\(H7NMFŞ={+rss/_g>uTY?~< 1/,,3_nV,++С1bHeXHI,\t W ,ObHWA"hORYk"AYHvz׊dU&kӁdyTSzTs_ړZ̩mP 믩mjQ'.YFEj{HQϜڪ9d9p:Z,R3A}D+Rߡ$Oў۷EqT'WjRo>+Ӟԣe8󋊊srrΝ+J5Jϼ[nR֬YuVݻw/^Xn׏4i,N<}%KڵK|z3gΔѣGSqȐ!8o޼b06QhYC@:\FӋ[c@!JlKJ3Q88ˊSJ%%wo08wQn#βRgD̕]j!g;q1+? J JPJy%h'JV.+'F`(PJ[qξ) Vmk3(+QX,R +`(PRuWct8uWN@ @)ݔ٩<[N@ %@*9P+P%E JJ2 %%PRC*X()-CA @ TSf8((Ui(%)% +q P%P2&h'CYW Őq (3 ً(%)% +q P%P2&h'CYWs@ %L8((2 %%PRC*X()-CA ҐRF?ā_NmecX(!^\嬬,* JPJ8 (R2RF*TGۮ N)xVf/J0(mVU.((P"@)I)PԈc(%#" `(xVf/J0(NPg ]%%PJ8 (R2R"G4"@CS2 +%%e(21\A %1 ΠJ>pJV@ `(P/w 1\A %1 ΠJ>&pDTԮ]G~ 1Л@ %)2.=6mRmRR@IJ@;%PJRJ=zժy$8Բ%''YCg&P@_JH^q*]VJIJ %E(F@)I)͝ˎh:J%}JF1]⠃DPf `(PRF^Pg ]%%PJ8 (RRՋ}/?wJkֈ5HmĞ=|b(J0(NA$+A~ 4WP@ q 3((yo˵gKR]$;O@%͠:+^ W +@ q P%(5h)7's=GNC<{eȯV8fF `(PRA'Sz1 Iƍy;8KFС+>g q@iLJ>n\5={j JIJ 2DFFyxmoJ@;%PJFJ~1o.eۻ7.OUFs{FY3WTeSћ@ %)n͏ ;v8c2(22؍HA +ś敠(%#F=ox*yiX;=,0 +T>OEL[q J`&%%a%1Л@ R߳ԯZv׮QrYfBẄcfPRRI8>8  PJRJ0T4<02AJq PdԼ8`vME8I1Lj&M|d7w΃2)MC.d%80}ي@M89_<$ +w-.xG0K'; q@Et*aC5>|j +JIJ FFaȏ+śA>@X˯ngP%P"y&A(.uW_%297 J>Rz^q&8c +6(/gFf}JAPdЄ+FQBA @UO bRFGE"b8|qɡI97 J~Qڿ5?hZ3\eP+5)?篿sΙ+)Ljގ ΠJLIt6lG(|3JkyD`Aq P+PRAcǘ#T(%)%*Բ%ooڥlAV\`qXJkժ +c1cdqƌT޽,Zj۶msΥKvЁdffʯ&N6~,.Z(??_;p˖-Z5k9r$ &dޒmoذA+ݻwr{РApKDiTѣvʕ۷oܱcDzev޽i)S ؿY*((ܴiڵkgϞ-eÇkKKK=ǍqF= Y,N6={+Vj-_\|ԩ8~x*0@c^XXgn:XVV9"&E"Vۓc"&ܦ_鼲HLHdx[@ +MWG{ҕjơ"A% G;Fɪd[-5G3zԘSҞTײHgNmZ&Jrbs>.Y&x$ Y֨gNmUϜZ|X8@]S>PԧG"8:z,R^Hܦ^L{RƄeq{5kzr999zsΕC5j_~)k֬ٺu~w^x,׏4i,N/ڷo_Y\dر6 }Y9իWϜ9SGM!Cy󊋋59aȊ C@:\F-5s@ %(Alnq r]Tk`4l(>ZQ^"^!:5AV8F&6gPԢ8 o_oQ\y?vb"q@sFo% +ScEYYZ3.XF_mۊO^zSJÒy%&? + JiHЬTҿ!8X=R46Uݻw1@ +T$pA 4s&KS>-*:"ƄpΔ\KAJZi>|J@[Eݺg&о=cX*geg1ܻׯWmRRJaC98:Q& _6RJO.ȏJxgPJmJfdnpJ(- /Gfp]>Pf % +|k<尸8f/ƍUkRPNNO̻}dU.~+lө^VN=|VťFJ$?Jc"VJ0+x"onj?+8Ñ>HѸ1oc߯VťFJCq͏qȏQwX˵_!NGP[6o|lxYSXp>3敀XRB)狪U{%l3>W hѼCϞ1#U?J>&td/s-XP^|m(w5Pːf\)tSydWr= {6ъ(=8dˎ5Nf>j)1@ @IJSMa„cDoǒ_1@ XJE<#veeNq9f]~x$o_~ ܆ +ǀ8Rb(Y4J4@\w1-YfJHރ$V ]k!֞j#pit"=1/1[i>ѕ>lܘ_+.5P ːf(ڶ9qδ8:XɂJJ>d%ה6o6X䘐$Sf8FJ9CwJf񩄋8~Zj}:{!]r۵wرl2ݻwosbVVVAAvM֮]g>{l?^gƼTsҤI7n3_p8p 8n8Y6m{)+V[|ԩSeqB=uiŲ2k=b:"]}IGѱZ~~Ynӹ@:,*+Y$V;En Ϛ+Ev*dݑe>ځd7wHV%m6HטpՔ9գƜE}=sjBgΜIGnS=u"7*RۓEjzVg\߬YBmۆ<䪫RePj_}5RI_2[:;wmSB{o\GRR^Hܦ^L{REv>Bİ^VԮ]wΝ;Wn:5jynݤYf֭ځw^xׯ9q$]Iطo߿;#պuիWS-pdȐ!8o޼b9amD_8$U^tzqK8u%nܠ& eҌ%| ;zFNI8þ1qJ7=%Bߜ9nʿЦM¬x 4t=g6,JyD+94xβמ9dpvjϙCK=z󋊊y;vEKϙ!eq +Ϲkߒ_ޥgsmɝXQ ]e %v .' #d_y"[߾ hå}H=/Jщu3_g8]敠}DC{~QzmqA3'*NU[$͚q5ܕairqI̎6fy%V8J"CM22ϧ0 W P"WQ#~abꫬBW\!:uχxЕWpiOav$J r`g c _ q@!ԏ+KRZ!l~qH^Ž>2L =zp5egtnVnrJ8< % +,̞ͧ O4g|3M^b"hܽ4 Jl)/_3 +' pzM|\2{ghSJ>Xcbիw)D)yJ0q%c9g]4(]2Ou~J&Yn⳥>/mJyU nKȏ&JKio Fĉ=sΩ(Pϣ'4%KKIhg_{dj䧆2 =pA+upA P&h&9}c؈VsubHw쿕we;&TƂ8d,1n\2Is(ĞOWxx7s>\$ףn]QV;ﻏ_8$-FJhԈp՟/jo=d45}zoJs$|!ܽ{-v7֮um\Pf/ tJW4CIL@VjAbsq? <%ي ~ W\~u#fr? .Y06Cdzf1oMd"'ؼ5,dBH1R#cWa2f$/~q?w/Wٻ:#ӷ/sX$ו q_΁>9a 8]Uq/PU1z/@)I)YJ[ +~榤t-vm7-[|EUabcӷ? 9<$FJWWp'xPz)N%es̘8 /vPsω58/x#N e"ΐA /vf<՗$Z6SJrI&jf˗n˕ҰaL_Ԫ8Y%5!)iڶ.X`]wxnp>ֿ?3;6a-1)O7`եF& F~XPQ(krUvqQO>loj׮5y7c 1r%~cxuX ).+&<{/OsR஭+C+8U%Y%*ѓz`~O7tOrJL7x`LVѯ5nH>߿x{8dL0mMմ)w@H )mf7НJ -s0hKyvd!m +q 1Ox#yhX wJCT8pm%n8*ݪ@)I)J[c&sIMx[yfΎݻz9:J<'+E 9Pgf:khK O8dLи1+1Jf7ȑ|Y GU]:`eҤInBj6Ԉc@Q*(`BN*Xt𡹤sAwqEEśnZ1Vڽ;tg/rnnj9Nc|I6o}%Jwax67ϲםJ2K O8dbavϗ^2V.ܯ_)&0\{w>{vvrWd-ù(z0;55)Ew9k(ߵ+wj1 (1rR yI뚥 J.(~{4'(+edbći3.z(2Q:7.GjĚ5g)6ovplӦx1_履gqo%g|{y%P2Q,JKY%Q)]}/5B[o_1w.o|فg]$.WJy%i(<]#rvQIcpќ|?x'=׷<ɮ@@@8ڲm]zi4kְ{F]E QRC-[\/~Ҽy|=ufVڷ++1ǀRNW^iW_J{ı^5fW\۶ Ȓ֬i62vpc%]C?8IIIN*1?KUV\"6ndJ`+$q P+9!b}@7i8Y-iڎF^gr7%oA>@Xk_br:3(*|=#K-2<_}urW=dխ[wGQG]4vFuq 1ԧ$SLnÄ U^pќ|4v,7*CQZʫk]zUdg#//O +JIJ)ŋ-=W)-bJN3-6t0 eK_Yn_]v(MC?\ P^=pKA> +_7 p73(@'GX$Dž'AŚU]8&WpdHl̩%iީǀ ڧL*ѺUݺn3(Ժ5KkB2ĉR1W˗/WRR2dE[n<gj֌W747kg$Ǝ(}56A{^pe٤J>D奅یcDockJѠGalwo  g_0Y+"_"ƟuEC~e~ 7!M.?d_#I9CmRJLfEI|ԨˆFq8Tq RFk~g ]%eYsg\=geqRzl%9 [m̯kzgH晉4iZWyCı#+vaxsZBa <>3f,go޽,Zj۶msΥKiӆeffʯ&(dddElْiYf#G9sJJJ=ׯ_aw A~2vX&JOw=z߮\rځ;vXlݻ79eY0a/YYYځ6mZvٳT)5楥ڞ;w޸q… pqi)+V#@|ԩ8>>Ѐ4慅z֭ӊeee:t#F,ѷڞt76KDePX tgktuVM^:';ȶD!hݨ޵"Yl+4Kv թ*S=j{N*9C-0Xϟ_TTgC/jޜϝ;W~5tP:pԨQzf͚[j{ŋ~ &Mɓ'So߾dɒ]viիWI3gΔt=ًO PJRJ^z7P{8 LU]w5S?b*kaͫ?R;5A;xᅩ'hk-ݻyYFpAGdx5Q* JcưԇAt13+(y_;+X+{Οxy!ch6C.ĢE4n@-Of:?M󡀛J\;:2|1i#OJ76_gIVqEE, +[8bDmVg^ѲeJ5oH,,d¾xX۵ %cOZO۰_qwj%93c\ ? Df\袤gnRM=47 }EO繢իoo8(dz,_OMwRxgPR1isJ)5Fmfl8,IVqS0Fn.oyy)S[?0ۖ^@qDBѴiaj&m6q~PֵS+ѝwWH1ӝM|q9L¶regqИtU+q{ aXF4l"pκ|ȑѸ +;bC>dڵō7Zq#:ux{e8狯>prh{hq%`8Iθ$66&LWqW 1A = gG{LۺC6fsg^ZO;~/RӥFJJwgXQ{p8wD'ݢg2`5I իsF [q|jxj6^2h9sgЂwlKҶJ-&sBZ>ֵ#+a&k¦8c +6( z rH*AӦ_f @xlNjtONPt}<"z\zV(M4v +8ISqm_AzN *51 x!NK޵]JӬ[ >?Fkz-lΓ:leRz76/uJk¦8U%=:eSr %#qzԩv w/gz衪̰ߜ8OS|Ҿ}9I76mY?SM\ԩ#n-iRNi}vpU|>S6RUˏ8{E㈒&Gœ@D$5caγεc2vŧN^$X%E|xMgc];#܆8*gee\A %9ws!u< SmPלob.5P€)w+͜|FpslϞ|>PN^4HTkKknS98<[nR-Qj(q2`pSJ2BKDq1/IN//d8AsrGib,uÆ.ڑI'8U.^Jv Ƣ;cowGZ9u|yv߲)՜[E7:]j1S+l軕Z]n]T}Jij:;JX& ܹ| a2+(Pf<8xQRRӦT6ػU" r|={8WpժұϪys^;X {+2unھ䚰|qrQ\>/xM }DJ(2/3;zώy ퟤ)5G0 J~MJunpyli)~},a(-,Qhݚ'q؜ǀ2<“hkJO?䤒}6Sj{**wj`ld5z4Ә9 W^g%ٹ~~zumJ6ׄMgq{$!1HJrR=(~;g _|wt( C];={/tpxgP2_/\zm7 ^{-\;SESKJؽ|xY0em%ߛ +qTj'#FTB)NC2 )EL*c.ΟpbD[o^=u0]7\=',ݻŕW:kGVk) h(z8D`v^R*-LAS osGđ=;RK/gNh!h'eR^Lfb[tS;]g<ۻ|vcP2#DFzT}z$d4kԉT׭oO:,+Rtqꢋx, rEz%`{oee#}h-v]k҄_XnLYq>@˯LvU޴ijXJY4gc1h߯_g?,̿O1}zu'1ZlԬi|q )Iy=Խ毕:B;]pA~jc^翕|1l>nJ8PfsOʰ6{g(st_yr!є֬N"׵kydtk֍ym'ڷX 4VMH#"A,p+Q +,T뽅gg3}8KD]_^&;*[N5AN,%yTV&ڷgw3DVÐ_!G~~xTdBdH]6TYWǩn~nq2G0ɈԶmI%&Wg4"WWfQ +l>d[ ^-cs&lRst+˝r1@N3+mx=;:Vf5k'3hHeb_~Mt:5uw¤ZڶE O;JWvr0Qʗt +iӐ_ 5D opw=:2u@ۧʑ GV:4C7hQwL@A<|u׾=ocȰh@;@ mɯXPMC~ ĥDժmoWxQ%gd&JJ?޺xQMW(D;W,a%cÝی8Y_x!^V,3zge;%QRmMj{Qt,m|%ۺu!j@8>HũdOY\|ym9*Zvp.fpe4)2d@ջV,--V!W&"ՅTSգƼxE+믾jf9 j!]{.Բe믿#E{REjo=EjzV̩%k̩Ӂeڿ9#Z ۷o/d#J@gv?ѲH}eqEEEz999zsΕCovGgޭ[7k֬ٺuvݻ/^,L4I'OLž}%Kvڥgzj=3gѣ"+.. Cn%vE:Ddeqfx}2MtzqCOU@O@uW'w!=ץ $8~]Qb#~sg'<H"ȶ\].{QGE۴I|ayu#Єq-w9w$- uEcȗJ!Gԯ;|d߹ں̉ԬO .)y,A4е+IO?5HmJF84^p-<=)F$0J?++vŨz/11ΐLOx{rN(M~_XqE7Y0{M7qkgUf|⬳?g,鳕䤒Ԫ%K\EE7ib瘒ua3mc2/\t~ 8ǚz) ]ݺU g|hU:Zvmqmg^HL$8O|ݭ[6J'ܠ#%+A;z=8N.7wJ> J'$|yڮ]H.zN?k_~ ,2F/JCSNxM>9a̾1|Y|o Sj׎;~NZuGjO.ehBbxZnGns84`HA[vLe /y e,<n3\pU8xio) + +cKMVgՖ-}&|e+mqQ94-25*sӾ,¤Z|rs}FI?OagˆW qNQΝ߿\D@I%ѐIcO[xAk\tQy.cM/ӗԩyyB'ȑt;|[6O E(ϔ:u~yoE\|H 툀%IRN?<`yITխ[xMΔr9-`)yI6R7 v2Tyg\64q"w߹'FzWsc6l;x8/=+|0 c({PhȬG>R"WC}xQN޵6,<sʑ(@w"==A yˏ?Ѷ\F_݆͉nU=֯ѭO@D? |iJRv/&MYpR4z6YCl 2Gm[#JӐ _7JV+A=5y!bֿb#99,Z!D~d6lf+ߑ}567&+n\n|CeN + 9$X/Joi%JݵZYrٕ٩l~x뭶ޓzP?߰9[Ʒ>ϲ`N'ׄ'8U+dR߈^aN~Rquvw^x&} s'$Quz5ؑ  +:]1cc8'/<~e2q/7X&F3&՟%%9]OzĦc}\R Ӎ7Mu=,%A}e81[8Qk +$_uע(,yҥ| ,o(˗;D*%|E^YHR;z+YM-cIR󋊊teCNNܹsp*QFˊ#Yf֭ځw^x~i:i$Ytb<,,&D?);:z]ƪUZݻSmV6Q"!JJqqp/:p)}+IyDD,To{ 0ԉ]ЅXSr1՜:x ZxRLj5$h'tͬ毙dF8%ZQt%Fŵj6Y%%9s0杂ʜ3I4?SʼnR W#JrR+]wyy|[<˜eOn%z8\uK=9uf O {H+- nO?uMg ]6ZFt1S37/kH\JՑ ɇD4+NT?kO+Vgqm᪫,-%9Lx41aĈS$i >b79$c'*|%).ʿaT٢KJ_Ϟ#RN"@#'KIw̏#-rl%&2%m>svZc9Tvz;T}3\Wҥ o}=!'m)ݿ3=qFå♧K/qpRӴihj/祑Եf%"<>%Vi͚boL dne.>jN&^r[|0iĈ qN.JrΕ+]tҺXm#r) g O*VXmKي#cx"yŎ)*!v;wdΌ+~N0{gh%&2Tf \+_}6tMPW$իW8N+.z;OԨQs6 ◪6АjJ:.ׄS3n4\_5JMOs4)?!6a鍛c2fE;h mْ= .xT W6]>%f/֞Rv v/bڬRi)%=U~駎)h_Ӵ@r bÉz5bY*W_TTPTٌM7q^x%& իW'txq;Dݺ?qdoeYYE];A!N?Ҿ_n 3׫ϛc'x P qN=J͛4[G:L7:u~ʐRnazHo*R{]ڷw۷!5zqx; R;8?-ᣴƯd6޽+>/.Nuy+b[Y4XOݺhsJfF)֩% PXX }6JVy0!7vٳ+CufyS9RRJ8FeSߔ9ıխ[!.y0TTgyu#?,_N&)5miB KZ22]CG3I.;$R;ZxNG1/Tpyq::NƆgCu9|5YId%!^6ًQ"* 12\X&\(u,':&u~ݒ֤I%jժUJ爔lNԔR#n]>%qޫH=gBŸ )ѹdB/|ANիCͶ|&&&q^$p=a!HJB}[n1L uݼnľ}ls"zҡ߽bP ֯/0.}nJLY ~Mdg ]W5v1/SF'Vdڬv@M#xg׸瞊\sDit4n\r(0$ۉ,)y|#cSO:BCJgVc9ƍ6o*C2CN3L\<2j땘ض[\p݆y,v 66]=#gsCwIngz+Fi~x DOѨW3\e nt<~,řgnnI\x-Jee,'_￳x\Z"J̽)/7SP%1jy(#QƩQJ^ҽN0Iw ACW/? +yg%ŋ/X@.jзnO?-^x_\=zru]fD,e>\JpD|yܹ{`oT|_2wR{k8&=&>֬X(~$;P8QJ8FwݼSYqfxǐRgܖ^W*'&9hWAG3Ik=}:?"]:oU #uj֏x6hP>w@ SŵזK}t0V"*Ns=֥ŢYʶ2~<$#xAG3ډmrN5;wޫ*UDt +^7rm~x{/nϕ]C"W=(-8*'6/t'O7繷ի풒5ˣ6mzĭz5O5'P q q40vb6$ۿۧmNJk d"fxzSXV0t76Y53Ɣ.LvYd0/H \G)N9|=eFd Ӟy|;IFaCq9n.tk:|ZN=UQ[s9=y3Λgj0T~;Vg^=<A%ÜWDo\%fEhi4;E\޽M[c>?6?U\e_κN'$|@ʌ8f=)d"J=s"6珦}2DלjEz;^QD:[Q?a'M2 [Flq=C(S*'o wqv7dž4oF>+r;thsgd(jgTsңVW<];=|Fhqr~_ --.]\=f<}ى/ +tM&yaEҧtIoUU¬Orl g}iם@ḦcX(;g';M 6wމ")j2^x3`@ZoOn:_R +?ڬ3'b@RMU?ٿߜHP%|kЖ[[BZ,cJ9s>Аڹq}Ζjj/f66\[:E\:~͋ԧQ.Q$ +\ $ 9Dz_wsQ-|8Ԑ8O~ι&@"s 2x^?iNgtFSZr.]̃C>#`<Ӛ{g״)m1VZe[h E?լhJ#͛M/K_\ye}M׿̫c℘3q&1޽V 2yRȐ5 H1ҥQ}׬ѳg #n]jIϙWΕ+]0@ g%qίmI!3oތ4jh0Tt3l\~0 ҬYn+B޴f9QKK-ܦ2eX ^Y9l $,2}8no/lkP{3a‰-Ҙ1ƖSsȟM vqV6سI-=L$okНl3磚)8T¶B;׌G)ǝ\vsɭ%;$R6᠍}cX(7Pq饱y=K~L{uIM Ԋq:wۜ}Ĕ)f78-M>SO:MiFաIo 4)|d檯7k>N1$'2tD$;$Re#!-'8_TeY"@tIIQKz%Fh $9q!_ qO?5ۿo|0ϔ:s)s1ҌJ>ĥ}8dnIMȋpV2Gq 7q/s۵kPni&Mܹs%9`Mܹ3v޽bŊ={eς})?PM.[-}׻Is=a\;F ,sܸq-[dmmmQQn9R +Nk,MN:UÇwkjjeeenO>=n8)(5)g${J))&rdݖ򾚜oG4)Bsm9;STS?01BۮXZ-(&&Vnu{l`1 y \K;Ҿ&gnsɥoHq k֬큁gHҤ7IJӤF/U/d|LQ5)K.Cƈ##Hs?曚'I}(-(UƬns99@}UWDs=ᇥӆ0^0.{1g58mڗ2gAc9ʜ2gEϜ}cR.qs~뭷t;&s~W^h/%4{vl欶v≵w66ʜ91s"3g_J,"9 +bA-$ٜ~es~uy kb3Ψ/9?r,!]spszW/gqܻlhB!%spg$"Yv ro!)ӟ:]ƃ$e&jhp-hT3 $r:is뭍ۺOQQlGo)'aDMD+}"GDGs~{3s=k`9|fSeZ%Ad:b,'!ҳ٭:HVH )8FHq e6܋/ƃT_onг}eΩ +3Aɷ8FK/Zݜ㨁s 7&KKADC[JFcZz,ZF|ɺ瞨F2tipo, +kʵTNɄ9(!9]2Z:uw8P[S|Ϸu>[* 7|zxsB̭eN2LjC  >bTWp1+眓z{mCk:twIVW;?Q}rsƠ#ڲdJ@mC·CN}*]iVIN=ծ1BRCsΏ쥗: mH)G㹫]7%]Qڬ7&PK $is"G kb =H ̙x1SB_|f:xЬ,9}DuיEMKU_t~׊("s+℘s*}vF]!eGr.ȹv $cexywđe?+ $9?kI,Ho$O /t~;FSzS}y癮5thH%%_j8!朲֭[S, bxKRt&HO]̓#YQ T̈cQv2٠-uA 6Lj2cO-fQ=Qjn#9:4)~`&O>hJo;l +_4H34pB9eS7<} J-McƘ+)A@)HHm $>]$@ gNĜ5k"ZOP-/p]M{sf1O*+ 3ҚŃr|kM. 1g_{ӮYlAjZO9n2۹f/]b$;+ +$}%Ho*1Z` D#A0KquA $Q^]];|wzS.]dΟo +秦#; MiL"GDJƒݘ3qhؾy _nٹő|M79W^hJo0Sc<#{ߋpZ ߢ2H hu #SC_A $cD[GZ4s\R f|!^9 9|'NMStf+Osnũرc} a>?Rjɷ,to;2)3@tmΗ4y.H IΜ9GY?.o7.ۡ_ԒowYXKv e RDCn[hb8{ĂN>9 w*+ R +9-fMM^W]eZR/lgO֬1/OJK/18Fn :I1̥#F?@J0|;їe{qΩ6`r,+31gA~t]@ggNs45 '\|zۅ|dɯ~R_z~ z̝hb9gl#k2H E#WC-,4s$7W '۱ qDjMX&kz˖/{Y_%k׸060 aΩc|ZsIBJD QQ R2Y\Ԯ]rss%ҤI5k,--ݹsga޽{Ŋ}˞R~~c.e˪݂۷o=կIv]Mr„ Rp̘1 ܂;o_ژ-**#G:^ɲ-Hs̑5kڵ=NUUʕ+u;;;1?i$9l0M.Yd߾}nm۶mذMjmTrر.C=Jn&XG!LٳgKrРA\zuEE[rժU^Yfirԩ>|K^SS%/++s971I9#ySJIY7)ǔ#붼դHR4)Bsm9;STrzо$5#z۸qZm].Lj%9JZK.˹˞֚x K.}Czn ?%{JҤ7IJӤF/-[ғ]rRPz&ϟ%_~7)cGFn˘ӔIqRPF&e<ʨt h12eOnt̲`\x6m/\PG-'N%׆[nǎn{._\*{N>]3f̐!C4YRRg/ڵkd^^c:J-:p[pS@p_^%)"&^ss-3|6zsP> bD&Z,xUO~'xϞy/д8Ft,wJsE駏Ygx;9s̜5ݹܸtgodgul&Ea6q2.ٹW1bZˇD2KyM29p1*ƝwuA T:sZ̜#mRgaAȓUCJW3_m9.1朙qZI'9/rtW $m!pHǚǸz ׋ۺ,"^GN+f2t)]$@"h yXjK:!Ç7Z~reFc$92On㫁=2H ٲ}7CƖKr~s.H DjG{p?9IEE|'yѩ1lTyCEcLïJ?R$* +4Bʌ8F5UBt_5 b鐮 H 8Fկ /޸HNMMqiWoOjk;21lTy۶m1xleZK QQ Rf1bĹ_]9X硇dHTH J6o6W^ Onf0wL $lsV6;ID+cVUR~$_+4B5O3TG2 EsN~Dn]RX9t[ +q2}C $ɮ޽2E‹/n6;#+ ʹ `f|سrHcG3hۛod0svW3 8FE'Y(/w?߬SVF(cET^ޑ%ƏoqO.H dU#Ly@#9Iq_4ڮ]lxsM,k#z)X~"7`Do&l(@'ڵ +(77W'MɹsJr,--ݹsga޽{Ŋ}˞R~~~r4lٲjׯ_Y=թSXO:O҄ 1ct չ7nܸe7Y[[[TT#Gtê&˶ ͙3GW׬Yk.`UUʕ+u;;p̙359m4Dirɒ%s n۶mÆ nR,,,2wcǺr\z֭[ź=b)8eMΞ=[ r VTT+++WZ%5k&N꘧h wkjjeeen^H3W=urL9n{IAy_M +~ TNu Yȹ趜)gI9wIJ=hIHޤݤԪԭnKmLwuҎ.W/ikMJ{ɥoHq n޼YnK=ݪ^&7zɥzɥ'åvMΟ?K.Cƈ##Hswʈs̵5)QF[PFYݖQ옻jR I\x6m/\PG$4qD/y֭[c޽{/_C=OJ ɒ={x׮]%7o&䋴5J-:p[pS@-HI)I9q Q~[;g'EdcȐ &@)]lc$>s\9V>t#ceG;_֙ώ%_?3쳺Ν>̹_?['3swwRx [&#ޙ$wzeK}R精f .V͜eJ3sٗU3gAcYNDZ5s4iYR|3ֽ#r"Seq;ᄘ#ϭTDEFHLjz4>ysT;J?qݛ H LjV1j_ob'9KJvIَƙO7{Q~yЉ'h۷7Oe41Aj朌 $ANRRR!J.<HV1B.8FK5p*9KP4q҆ sFi/$oa41Abϐ cXgvMwŐA8FƁH)cY3 ~1o^SgOݵsΡCK +$* +4Bʌ8F5s18۷G{D&t]@gnis"R p-{9}ٸ*?y9O=Qñ{l4Ag41Aœm*ǧokJ2#n!"OB(9I#?[K/5O.]-u~yk.Jt7$^ml##9:!n]d $* +4Bʌ8F45PTd&luA 6H^fR~mr~H^^2 >jBɿdhb9[1Un}2ݳ'YmPiDEd RY㩧w**' 9'Qtyϗ_6/;:enrsE{̆[7G2G29˗3 axacT7@@Sfg;F? $p洏cu^h&lY}1=єzƜ2(&l$ه̙39?ߘO$tbBG QQ Rf1"GCsu .H kI]zi 뮛9vl}n9&7DC2\>ѥl&l$هʕ+`:$gN'")2#~H s%1{nqǙ ksMHS媪^r{t J QQ Rf1B@"s] H 3'hIjDbYYURCt}'z5ul&l$هrKS)%H|_I"O@ $9AsN^诇b>w,]%񒗕>}q㤠פ)cʑu[K +jRH$)TNu Yȹ趜)gI9wIJ=h_q JIIU[ݖږR.I\%=593K.}Czn ?%{JҤ7IJӤF/U/d\zc59A2:dI;2t[ǔ/MT)O2eTeʘmŲhMwM.^x^M6y.\ۣG'NkÉ֭[c޽{/_C=O3fHrȐ!,))ٳg|ڵ^yi2//OFE86d}IHA)I9\s㾒}\>siNCÑ'tN8ٳIf@8FW]}wQ_ɬ9X͔f^W^S?rn޽9(?| On6$/^$ +#Ҽ|!1#̦f˙JuPVN^Tsns{xwn^twANQeÛ/ia5_$|/ؚtR>4 q{_~6l\q]DFn6UqT7H T8FR>ꋊƜs[o Lc<1H1ɪ8 Y8puqcx{%q ɞ8>8F t _$/H $I Hmǐ?Nm(DE90U!@JS$* +$K2#A? $pfF׏1OrLA~sNdܭ[=۷d\Tْ_^^l޼9(?//OKKK + +$ҥA/eۋ${J +_,.AB: rɗʗ3|9|^ziRnfѣwk~ݽ:t]z;v͗4_ +z尚/of +`hyl:)7+++|zO3|l\oٸ"EJdnr_ RH}%kcH]r$* +$̙8q 1c$@b6]h@œ*!RΖ1g@ $ۜɸ8mc0(2՜(̫A{yD[l!@JS$* +$K2#A? $p0L1gk%'\qʟWh@Hs>xrDN|qF4E@)3@ g3mn)3L?͚omcpHTH\la~H 3`Y9eXVera y"}%n~v͕I&irܹ0`&*vܙuXw^btW:sZutldi\3{Ne7ՙs.]=E!9J.:s֑xwx㍲!:]ry z%޽{YN%eCO}IT~Trt"Y@?~ɆAyiҥH Rct{W}̚5L^-5A#W;6Wj)-/ /(38-tiP~fsm/)R*h9˻ UPKEPYk*IE9f1w5{Awo~4봮y5_6KAoVLA 0A'Cʀ +߸? ߸gz{xƕ?EJdn$* +$f˘3H q 1c aTy}JHTH eF~H ̶3$* +$ْmk̈cO@ $6sDE9[2UBJ(zs $@j#'HPT$@2 H d3;1@ +$0g AHΖ1g@ $ۜ!T d9'2U!@JS$* +$K2#A? $pf̙~lTyٲe5HiDEd Rf1' l9O@@œ-*sHTH\ g9wj <뼦Ζ#:߼9(?//ҠΗ. /, <뼰PHKȒ//$/TAB.rAr/gӫW/M*7~}ޝ۷? ݽ:~}׮?ȾcGoRЛ/|y#7SC̻`k~I%q}7W>4 qqE~6w%2r[qOp(6 C $1c A8LA8FLɱ!@JS$* +$K2#A? $pf̙~lT!2L@!sF 6D8??߶)M(,Aʌ8ƃ}:jk4[kʃG\{sP~^iҠ. /:}sl{dOɗRAˑ%_%(_H$_\,L%_:(_+Wa/M*9o=ûs÷tw{փi]zћ/ia5_$|/ؚtRns?ظ?Wx?{]#6ٸm gNĜi%Se9,4nt-E$HV1ɶ8Fwz0cXzwgI1i3q 0d@"A? $pt1g HTH%Se]*HTH eF~H ̶3$* +$ْ2BeX!pf!,7DxU&HiDEd Rf1' l9O@@œ-*sHTH9H gvX$@sf T dls $@͙ AHvs"S+V )%HǠH8mL? sd{n4E@)3@ g͜' QQ aΖLV$* +$.ÜA $ڈ3;WT 9QWٙ2HPRܒoyTSa HIc$h1@b HbG5SO3Se 8 9F Y4g HɈc$n1@b Hh&έ2U޹sm R"QQ Ye#CKd1' Rrdu3$* +6ka|K^SS%/++sƍ_rF򪻧nR)Gmy/)(I!PiR8-(g!rv&%)m'5#zvwRR--r'NTIKyɥ]ri_SZ^rC܂/ңdO]&I{%%K5)K.Cƈ##HeLy[YF$eiRƣJV-XI㒔6m/\PG-'N%߿uvܻwu{С59c I2D%%%{]K.#Hyyy5j&-Ztঀt[%ARD +JqwHzMkn)c`ΘU}*s$9V C_V;CI{YR|lC#qsvsFʜIȭ2g9K9cΘs|qz}U~Z(}%ɋc` Hq䗼8FL?JLCG$ $cO@ $1@b H)cDǗu>R"QQ Y:c~I? $ڔ3'ɮ[ל' QQ esgxONT!2LqN*HTH eF~H ̶3$* +$ْ2Be2#B83BlΉqnnm R"QQ Yq H 3f(0gKs7a Hmę *@Ü*H Y8[ƜA $lsf8HP|B!,X!B6gƜBNsN8HiDE=F $@™A $$ $0d$@ gi3H a4HP H 3( ѝ@ C $* +$ F $@™A $B!B!B!B!JV?%_'Hsj|PHa1U-8RSE^R4 B[sfkgƜ1g̙i3f83Ό3{vO aqoarhdE}M&)Od#>R>3l839cL63mƙqf9R{v}g( z 3||CZ + &lh 9S23[k839cΘ3f83Ό3cabk)4d/C1BCNIEQĚĐ}hFĐm2TΩrgƜ1gsf̴gƙqfK 9;}7dX r'd1 9%ԼlN83cΘ393mfڌ38 Gђ ,(/ s QKu'~sƙ1gsf̴i3Ό3;mz.X<&-1g*ʶZaԇ|%'ݬ>RĖrXJ.|Ze839cL63mƙqf9L)a.I]~G)'gdNJ 7QI~4Rug-3[RKGh3cΘ3̴i3fgƙB!B!B!B!B!B!B!B!B!B!B!B!BBa!3#j-7vx1Ba!pfJCn-:!0g™qfJ!77X'T9B3B83B-Ő2eœBgƙB(U4vλOЫx2Ba!3! 1诋ÐBsF!gF! 9kA!9#Ό3#=N= BgF! !B83B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!Q +endstream +endobj +464 0 obj +<< /BBox [ 0 0 864 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (./figures/search.pdf) /PTEX.InfoDict 536 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /A1 << /CA 0 /Type /ExtGState /ca 1 >> /A2 << /CA 1 /Type /ExtGState /ca 1 >> /A3 << /CA .3 /Type /ExtGState /ca 1 >> /A4 << /CA .8 /Type /ExtGState /ca 1 >> /A5 << /CA .8 /Type /ExtGState /ca .8 >> >> /Font << /F1 537 0 R >> /Pattern << >> /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Shading << >> /XObject << /M0 538 0 R /M1 539 0 R /M2 540 0 R /M3 541 0 R >> >> /Subtype /Form /Type /XObject /Length 3340 >> +stream +xM +@:d}8` @, !AXؖyX=ӳ;3###aӜjv-%YW7_|;]?Oiχ9?25Svjq5NK~f))Aߗ5JR;7#7WCϯ-2ket3m|RƣBK+R3V6C5,}#~%dL:zϼwϛG~0 +hQI $9jn"do~o-R՘B5T4z`4d-5FIIV4G)pt!jՖgP%Plk;Y#;=CwJs6'&zͲ־2-Vjʎ8vQދJM5g =՞{4;: XSp)G+l5g]d?Q$G*}{;Ktmv<>ջei"We/OBDgL_ջV0JwO};^Ip̝9+9<0aBs4\i7yҝ=k<2ŃjN9O@F/6rO#;{֢3yL1dz +{ +2vd(.֢3yL1dPsSA&({˝=k<29@d~ +2"ȔLIjg-:4CR"(C:I ԋ Si]=k<2!\. )6V3yL1`FL"-|y +2}5e%?_랞{2G(^c QɨI|:Z +xC`Gy`P3)۴x#U3C0o8NohP$2&9f\? i%ɂ a!اG2(Ĩ7~(S8求EYهeYV* 砐 + bDQ}Jb!ĺ<>ajiSl"x,x&c`Z6|C|P-mZ L!~DD04GD{ +܃XpNhb(oyc p`QԠDw +RXaZ ݉-"<2$K-lKa(ژF E|_w3e[rRK%>>Ng}d}a{+.j.m +2@@$Bӡ@%Ҳl!gw-Usrٝ'ŸhZM=Xq۩`TXJđ| CZ_6|d)V+|+#bp~y1)b2ƳZtGt-zJ[%5, @ ,l ~Y"2y;7>24K+K8KXl S䄑qSYޘ}m_JYPP]FX′>qrTOcma$5!Sbm J +׏AYfO9 y׋\!b4s^% +1 1x$\sbPRYmP +#Xf:KT.us3X# +Nע8xV5;K%*Y*@bY(_!xVc#S q.E&}!Le[s$^4j> maŏBh;Rlq4pI +lI%IFiܫ%%#un jcHu +} +JtSCΩqK{ޡe[}w_K1é3> /Font << /TT10 544 0 R /TT12 545 0 R /TT14 546 0 R /TT16 547 0 R /TT2 548 0 R /TT4 549 0 R /TT6 550 0 R /TT8 551 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 15599 >> +stream +xɎlɑA";g>[ЂPkuDQ%B=r8Ye5!U'ss3s;?p.m~.y[>_<Z]8=on#9\ U2Me2#a ˴/2?wηrYǴw?}4уO;oΟ>xlNCᲶN5PCgohy_C~iGt箙L/we[uXNq^(8}Ow8qʄeZbmޢwtwڹ]Qb>Mm_Sd1p_$ +fKq׷u >9⏴GN3 ^~5Ġ׏mwq/3b@߳;^\6ئfqY%]>С oq^p;gm\9v\8^}9u9~6l.8Uq]O:G8pOÍ}=Dם ]*&cIv:s։|zIChġ;VhnV9,g4]fNjSٱ^(nʩi0_6βeܩyAz㍢0]8%CVӠaRƟCZC2e_UhtguՄ3ب;'<0cƛWBtԢ]3|Ce (o#=meo+xگ㴏 ?'M򕡌2„pZXyNȩ,,Է2F|f8)hhbh՛ZiJ>k<ކu8?\_] =Ϧ0nsL$܆Gю&sQΟ:@PvuThĩe~E@Xut^&(=fiA;Φ'mSc$ֺ }_ѩU~ur-!o'vuJ5ǁL8Xqي"000mACѪRt*atŤ>E$~@XrգZ!lP~kU1մڲBR.FfSu7+6̹/Yت2Lv3!i]!&E2qD]j d?s]J |Y-_V֒H 4CHzkYB_12hWz0TtJ´fN@[lQs˦îwH Z^ +8VzZo:*y` +^O}(Hj$7XXnأ+ƇV\X,\k"-\5maRwaEeA&q}]|&Aު36[QX"Z (eUmZ9q+4I7$VB +1!WeUC";^6@$F %jucp"=&@vl.~FuR=ϻ8.tLɄeVDT4~"LIU!>\Zf1kDa{!6CP%lZ[~YJc(J}آ +"G 7'q+#o'RaYgY~fu􉃑Cֆ5߆@sOv?!m5qFSfݑCn y?btCm ڻ KE: m.9v@o\ޣ;o BO@95\/1Kc2"cp9(m5 d?=/vCivٹd,K@8]fն*7Aq]ZzJR ]&ze4g?CmB4MŦ/uR2T8˪JtZ UxR4 66v.-G0q UFnW:l㚃UNWJNpn(ˎӺpIRQ4?Y`],0JP&X"v96b@aR%Ӹ⑱{mĠc kd*T7>` g`b^ʾs0Db +<oAKfpL0f,ri6Y՟`h ʔ R@~ +ccJ8.eCca5l' [9`z^F`7^̨7VfiH4ƴ AbFZKD%YJ]ZGw]'ۥhGxTZ'I +I0$[&INHDe$YDmȌ|2_+^6 mm +}z5FF~.h/-"dBFN՜y<uvC<%Л3sY.BdU73"˾G>s]q!yG׸uJ2Y4)A'F|CDp0S Z^8QBv >$u8@xM Z#V}NdxqpȪ1\uFHLI\"U{qD?"Y 7M 5qDPEKDT8 Py yHT(,?yn^4Cٶmy-ĸ#G9'ɏEm3?rbYo,J՞Lj&è(zP%B*0,yQ*$3IQ^?:m +VlzY&;*3{JD)#fGAWxDw,U!!m(hZQJ!HV?WkPMAZĖRw*${wѝ/`fL  yV`U +Ӣ| t/̧0vΓΎI5=1<@0wؙ0rq(!h)eΉQ`1{b:u92 E*V'Ƙ&j!\UyOދ0[?#m ' 7x]8:U;#Xj)21 b%k>!YNl7Ba Po +ߙOX 4H\=bl +F{Y!(RլrN3ɥA_wPG:o%d/8aⅉ&0_+ϛ>,ߜoQ͉j@d[8e c,ͼ!6dba(V|U|B7Φ\vy%Hzrh&] S,&zgIDJ@rum9FMaWc5аdWԞz58ϮMHcVXsHYa8;@Xtnƪec˰6,zljrC)R].cl4 s,x8q B pnG|$N*q*H3Dbg G=Ƽ #|CVαӄBǕlv{ +Dc\߄vm,6ų"Cs2IQ\%)n'p|$t#Y4[u, 49}$#/.a-zkEkj$P!s=hy +/0 +#14GX#0CpL#ܰr2vecڂeH_܍1*%fXyn].Xߙk^tbq2Asz > +[:6zJHz^U\N{v:_du߷k+ 5_nhCcuC"B_c?{QhGZ:0x+jc-;zXi]\c![ +"=  +,m#xIK"|ЃEWQK^t?zjcx:V)W'uBL6B$,*׋ 3(uCWE&*t{uw;Oku~*˻61<\tDJܿk:]a5qAoT +=<ҬuDs@m7/\f/{B& a&s qdB+L!ZaoI-Qj!hV(˵^u&x/" 3^aJ 'RNy &饌}L6`cь#p!1L0x L߱,/NVPnx1k/5~P7sDN6^Py;3#݃qt<)3¡6<̏<Տ;PQ(-0[>-E9b;ۏ ӎG% ٣%D$bBǓ3m*&a=BKhoH@|9Q6v1,]k$Ge1/8ov=h|dq;2# +I@qׅx{odΩܖOK&-!- b%~bB1Hz=(i趢ffyڼW1`@j86!0id +tb +s(Ro*?uHJѭ(qQ6v2C2* x*1!VAB 3t*@*gD`{YF۝ґPXX,Z<_JA|ha,4gګ0g¬1k*ŝ{\-sQW1 $5F Z Ϋ[)he\Qi65tSSz];@lkVdtZ#cYh0T 7Ѫs6WϲGG0n un5l]OenISp .oBR9l8Jāpq X oA.sUkm&/Q+ ([EĀchL\,%0U^Gp(ǟZI[=(i8/TR*$cc9AӔ *jGb8BBdKF!lgEeJ"ϕF*<zh%y'E)s`Z`0{AfI +c;1 %FhzZ#3ĵǮƟ7c3VPlC +kWur-iq=*nMwCEH{ skK;k#o%?|a`R[ikiY+Zr C }$x 2D#aأ r$rB[{bn W ^+Hv^H(G^?c^& +q?tU6x~v$P&^6b&8|lDiTBi€PyqR9q cb(ߧӢ1(Qac(xpI+$DN=ma\_ޝnє 4JO|s(9[!&DyY7e!r2Y&$7$X,%1d\E+1_*GGi~ VT'"^,ܡVv 'O_[b@(}JCsV#<+SqIJ2vOPp(rU9X,n]`@J/+5uO +XekI ?K<ޫD׿y>8;dF#k92r076:}0{ϫoRH(4SXwXw>W@"%b+ ++NnmݼV_ڭrNcT(3G#ta]8>D/ϔea'|6Ś&V{ϩĸvV+q} Qg)nhLH,{9.;XkZK +SXKշ7}9~>[YL\|זѲ J X,*=,h$3 +q50c0]{)l%H-H'Xâ{Jq(e_JnB3dr_K9a=8d:/?0dQ?Wd=,@?~Gˆobi[1T&K(U.X>b/v[l`.J{oG}h(~#MbrZPnS^xd }fyBKB;]\.)Leݷ6w +I`Z i,VBMs|RjzT/OvDzDt_(K}/շ>4){?ƍ>Gu}";IcG:M +)u3\;Ǿː.na#O^GHehp4 3>d+&:֙!zbU)ބ(Jq𣵪Tz%rUU?cZ):@D跷uZ#Sb Uגres$Vp. ?}cU@\'8OLv#I&B;}0a'PU3ʸCׄ(⧏1>>:#¨1 t dp<Ħǐ* TcvR~lYf,,KnG}*00 /ԓWLk֖rt,omC(IGI*9tfW5΋RK Q^:l-qngsVKQ-og ';Xw~8qɋMZ^&aX [Az&ϓt`Iւ0Bő,2sB (Db6yq+ RD{N;F &sKgB湸Ry;|7q^ZɅ-075J~b'*Of3k{ZRܾCw +BP܅Lj+ +syگ㛹hEGzES?5R˽ygO&M+8hW!$ +]\r^qMQ*$wW]~٧ƻmaO|m%%0ȞVI=)5ķ2=(mƥ^qU7E=hn%煄cBN*mTy~ZM얓:'~nr6J{[{^qq^׿;fev3NRиŠy|L=;ѠL7nԱ,f"+Qہ m@9hF"36#$S,RwňLB 0&(s2 ">Pt"yԇ(7ka7oYN,DJO,=nZhb8.+]VS +%0R:F)jOc2$!>A9l΁hSn8!,T dXY7{DHhͺg @C#@?h`vYtA\:%mJYCES\llΓJY/NYxuZ$M?H1ak^.ryla$!X.g׸Ȳh#^(eA"jNբTS[+ZbSE'5vYIJ/|+)cr_X)n1޹9\L=˰; kF)jO8)m%b&*y};eCZfQbp6%RԪiB0<ªPAB8M:d1D:[]GY'>Jˡ'؋%^Հ!`3U7 D~'( 6-󙥊zd Ȼqq#zVG2`c?$%%[wG + RQ.+':ո.JKjH4jYc^2QǻjeUuZi/xܨe/DfzfKSY: i5=BȥBꏧEw޹K ئF SwZz7WWUIK +sqUW2TG| UĮ#0hU&NW#J'j\29wA"y 0NF\lqaӐ>nyԺa=OD9׬>an?h^zԓRCjR%ۀؠɏM4ˠ:Q +Is|bƗ<-۝ '! %܌== ؖzv DzGbBބNZTr'oj{6b_ƭ?vO7I!pa4=KdmۆdCeㅺ^*) n*Q ʅm5qGG_W n!FDs8FB;'B <'p>0׶h8Nx탆oUBXpaK7%;5/n&W%_|(iw ȝf =bi ^V'~]J7R*KqCB2#)5ҎYK^2$ au+yW6GYoƭF!"xg;90RY +1F{z!PG"S@$,I8iwspTjcT5. HfI%a)t|2-BqjMTTqH*)vJ'Yߥy]*X#OÍD=I<Gz-qT6ON#&- q@aP@\B9zx=ܕԓRC=R@f*J,nSJEF(9#T$=1kg3oxo_ھǝ+b!MI +ӥ RRC=RzQ*)1~V{h*UBwsՍ^:ik8Fev `V)tsKTM`{1mII]a-A ~$2z\^i0%KͶɇ]ݰ܋R^ vJUoR!6Gv1r5#f-R`#-a m*=s$6eQOJ Jlr׶l+mqUT{Ñˎ}. _;9UZo,IL^ݻHQ獾^(K_߅q9mAh;SqBF-;COiPY=Y!d xua3Bt:5)?IFB.ؒH|UE^Wk" +(j*7J"pJ(RAіbVHpPj*AH CQcjvڵ5 lunSD~ JFBo؁N%QvEs"/b|I. MX KVHeʶ8VmEGWkY&$߷V윞zoh7aV|J^P}uOj;Tu [3#߷Sm$J~܄hhL(P` lFc[YP #>w. E jJ WyoTLR0bóqP-y)B:2:u|6xğZmXۻ0YaLmcy1 +’ek Mٻ|98l! @L3IDGb L"I Iw0 JN~Z "#⊝nCAOageqFBp|TTа Rp4 _+7}o'P6)`Rg8CA'I$ du2 T-KquJ +z +k])J#QUMdxO,^^u(v'lYQ!|?@Z  Bug +[;h8 /۱aXGČoX=0H| '~JvJD{D*kJD3"ڢ^ ZYU+UB@C@ BLWE´7^p, +Hl}~¸zl'7jq.h%i +g.* 9TJGͯŔn\O9 ;֤{)^ v<`h(DTH͟0dDN)sJPJq^/CC~1FO$wŪ xk|c|Rh'/aGۇ y8՜sIFDffEc"`D8 $TkF_=FGGI]#4nP8?3s;: +z(yF]߁yO_n#ꍘA >ܺ[Od #gL[> /Font << /TT10 554 0 R /TT12 555 0 R /TT14 556 0 R /TT16 557 0 R /TT2 558 0 R /TT4 559 0 R /TT6 560 0 R /TT8 561 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 18359 >> +stream +xMcɱҌm<<^/lǀ7>UU3.IZLȈ8aq?tX}i>oMÏiǟqb7??s𵆦a^'5n]jh ol8p<O ?r]<yaOn8CWr{j.ô^m5z^1OblO=C_,yXplæ]}/w-S5[1?߉ǝ/fz9 \MB;wUo{|s05Kϳy/Ga6q=|ˀ6vAHici{]Np7@[*z;˺ w_ :‡0BJ۲^pSȾKf֍QA}07lFK={\e[nthKpA4Ota}}#Sv}v7aځuBëWsӌz louVtܟ78 #yE$?ϷiϜ#צg>1hkĕILZt&f mm9O'XiOϧ.yeҁ?Qk]V*ZwyO̮z>NsQ_ܥTt*8L8峭1}# +Bt6v)t;^ V&z`4wΡ.VJq;qK77q1DH7&qm?nʺ=`moy8BkUb-rYuf8B;o^4 *e[$ü&Єa!R[ݔ! |*cDDvSvaȺ9'0zVN;pN~[w 2AP;4%\Ѽ"gB$1[HjStJ>uk*h0PUR}9^cY` ‰K3:qdZ Gꅡ@4(:n+mP. $}[Hx]HE0-".]aL4V錶6hLKCMr&$7I~5*mQ䩚Jz՟ĢAf7U91w;'/ $`ׂXߪR⥛.`]oPXcgYbM}.oCiFAj7WL(tBA:xuQBb,H9e"N(76Jv*e18fгc~V@Lc_ `#B+F w-Y!AL0VybqgC†،Zсß*{)8 *\(bn\Uřu$+|22ɀ%BUbTc=n5T +C2;/!=]:hHvgq" )*i9~AA7Kg1P|qȠDqa[ v"[BU{D'- :y}Ȟ2i_MsƌFV,G ډtQoNa*Fm%*ˈF/݈zmSh yʽQTW8qdJ#F]Hs@a7,ʆlu FTB'r Vѐm q|b]xD.i5I7-T=+&?v7v#KLʕ,a2XOEb&$ )LFl&\9[Aݩ*Ճtk[h^+!n/ُ*^b_>r QekmSSXku6;̀C\ Qng.mNB [!ZPaMt}M P# +1L0هGARq%| +a{ `hc,ҁs_7x䵴;jy$ۡ4ᗖ$ZaT)y'iaT\?vR;PSݕ, B&?4LiAfrpoLzD mX.mKkd*mPB-,+N<#x;/9+LeBX~3f8ihC]h ;]wWa6BJ2s1[7#!:*ϱV-≰3yG.hst\B!WŚ8 $7'qEk("B"qE+RSՓ@҅)r!|1H +siٽ-U,G ppa^Wmcg퀲3(*JF=vPOmBN)n/mUbHYի*U=/Jt{[y뜼MR7%@ G-H1oq15B"n$"D4Bb+H*XA= RfG X䢎X L^C!:$(|DЏ>VH#5%#"".&ηf}NeE6iQD#q?n[sW6"`jNo%1vCR!ٞ8@/uABR le +'=7rnjeC +B3js<cۭgN vsƶI(P7$Mi;w(՘Eb,~-h g431K%@P@&bI/sO@E}+X8vi $Ipae$-󀇚3L1!΅H:b HU)i\0w@+#TTv4!zU l#N€Dw\м\h9,Fwt.\*\ppAqpETRݣH:\ \TB:r ;"Wp`Xލs#Y!+ު5΅Ýs@lYÕ%0!&{( )tk>\hB,ٷѹНR=w.HWyQ"+ÅE@3s. X8.9wǃ#Allm$0 `|\r.4€s)DC51ɆQ`Ⱦt. HP) )n߰sAK!#i ["G|9'\`k r.P7*94a~IZ`f9+x#AQ1k a>QOцfB)vO[%P9ê +_lJk%v(C#r>\9ȍ˳2].u[Dk1pU1 džaHėue!Ԙq0j?!_ .D2H]! K +~@F^xj+grF9UsEM5ia41ja, N0GM֠E{.F4!^YSgZgޔ&E H~ڔUZ+{/%&f6MbFgVWk<:iqyS̙ueb5q4ݵu7(=#)| 7VzQN㓑Gca6}`h / ̶@$-y0_ [v0\Ie0 *%pUT.0Қ{!~ʈ ۀ^( eiϗ ص0;0uFa1/A'D]= >@&ZIqi1L;B9DRϬ-7!EW'=fS],z%+Rj))pvΪ'߰]$\qE0Ej`0r({!fH-=aOwVvod}!_~/z(C Lr7o7U7--c=Gÿ> QZ:C!DZdlvp ӏLwQ0 |lOF-FMq+ &1s /9AO G/b&*E{6&zw7A9Vx|f=-359]G7&՛(炁b +#`>j֯?cFb3ᘏ7a$Ulb&ӌy]hmt7]0>?m8,lBaPQe 3v_g"T"'6 "e-xayIbr +' W^a޲OZ3Wk ^{淚DF'RĜ1 D.b&ӨO}&Va;5k n\UK6XWRh&sj6!ER'P3U!f":rV/|K Z`߾GA, ,ˇyJpQ}0 Vo¬?5s"ϛI Y4) uٍʧ] 7AwmMNj'ma\U[,^+mv/48;l oniӒczt`\o1ls' R^/z$p-7,R߸ dUݯǔa%ͻ{h,#zOnSF=K0tDPdߦGșt w-,. M,Eij=L~䟹Sa>~m&8Q#ϭC'hŭe ?ybJ!~YUv.Ҧ%[5){6@Ȝ=?}' ibW='y|mbp@o{6޴fuƩ(ǭ ;4޼͆~Q(oXMLOx (꩘f!+5i6FSJĂ?6ĝwx EBMRF!R2"HdBH:F ܺzgM(Q2>R}HDCϺnxX,D,p[SaVOOqGdD3zo˙"|#>vxU?~qLQӱHc2Mҭ!Iclv;eRz[XetFE"ᡜL\L6mϟXtۆd% +1@~} xAOBDs0f)}Cq/EבفDh>%&+ =vxR1iKQr3.:!wE. {Qp0**ScWLN).C*O &/t;h}ع^RdTAT"J3yW6SzXq9:R6C W51hՈQc>uƘ{?36&Yy ?pBXV`!?jꊅx g!@*\>8ukVIQ nJ4:,q"BsqhYXD{~4SG -ݖ.ilC$ A3G0a"OqİgnG6b$ƛ1Yݤ{˅3>WRgTUAubX[eO3QQ~UcI3WMrl"dœ<桔e0)vRqNl JO^Y&֐I,_}]7D9qJ2W#| ; N>sO.$.z)s=oɃxs _$Nu⻥7㬮D 8B3q l8#=FsS=L!0";_C?4.w=O~{'IhN0K<("&%J]z$#;p\nV?>٨NdtM3Pk*2!M)9s҉4D+.D/t kM`UvjQe@"hX i )9oznP!W5 Qg~7чTs!D^: ?/G +1 \t80N}J %uB<'dҴQF:3 +DΆZA|paX"kI 1*G;, TrS'f>R-}` Yt ї]e`\TXUbF֔-TT첓!TK8W7}GCnt}f< Ayz KG, ; Ҷ"] R8hQJC@0! +@G<](,qm;}/}Zه@W51r@ v{PzX(=#"hlK&T&خ L[u{v{C%F_R"0K;#L}ޑv?-y׋߃GN)%VP +z%BUbl|sՍQұ'Igm<=AWܖ:vAuCGo'AUh҈{HU6'5t,˯~-s܏%[ߌQ>7r[_,-#~QĈӻ|DY ={5έh Z (g&ymp#N"8wD * }c +a7"YA"$s<13"NB l3Qwn%ɬ/k;>Kb9I^/{Q̉.R!ٞe)NC)!^"(٫ĺEm$4xKx"s>Iv~gsa3/ј Msuz0m>d"28J%B=R XA3:ꁣS +DzUEno:W^gIPZb +Ί7HwfϿyk{9@R.M)׮KzիĢE~X{߇nz?1}YN+KbN*e_pOD"HĐSrgqMlE"DD*16$E0\B+>=HDL={ҿ?{E$}tݘǥ?1ZfI” 3I +s#"[B?Y2)w,E]gUmfӘ)b6lJUPhK_ucai֛ػ;ߴ96R񂓬:bQ +'6 Gf a"5yv +^:] +ֶKK,{4bYǘX.^aLa%zZL._7'@VJ4\AYR"WJ{^z,sS{}7q#]>ف<۷1]hbbDN`cH1MYAnRCվZ``@RU>(Nxiqޅ|+q&&!Jnj\QlrfpE?܁d*mחoc$7Oύ4F}2mIύaԯQ_ +~ +v>A)G!4r[u,^[vY02 g B(4')ȺyVč3. u$"̚9La$׍ܓ BFs46[bVeRH nk'F=YqA!(ZYgxU`9TH孺9weQK=sc:1{K^ L$NvdGz޻TNSUUk*R5THYW-.DE<NuEt+M9E +!ɉhRǞjnY.{R.B7wQK51S}]woHkm<'BcŌRmϞP^m`W n0؍U ++B,[KR}Jj$\h,p$*P].L@zWi"wU>$7" !H(hF;,~/ݧIИIL)t;|6 +97C\pc|}*텈\8N)=Sf,(}@ aܴpggXCwVP#2@" aJꉰעЊRfܫ>eR_K\T!${51)>"nQ3G;êz"݇׃s 0Ec϶*IFcB.G&_v|~~I~ߓ4Ͱs|:M-V6R"%ٙĺI)L-1vD_ۢ<7-}%_* 9v=#+TH`'Ȟs *@a,| Tڅ_(XrMHR*$S=/Œ/)ь=;PzUKY1wґ05ٸڅˆ\G"^,O/At:JjsWLgZTX9^UyQ*ۼUwj?ځ}JFxcSUD!! _?%(&ٍN- L!J c +hą!QT!qjB5aÒ]x'{>8 +JzˍQZ=zO%XŢ0e\^3D߫B^1{rZċ PVk+BI ,B=y7j*ӱJ#qmM?c%S=K=SzKBxA3Hx9UOEb^^;wCl<$Խ : Đ4[9F׵>37 U Npt[0mhwwJB)42lHIoθ{baqMų%B{٩v"#m_vNͷX{~m j+2rc8k0K7,Ӯ0[t){/o47'jkQ@e73THnnYwV<6G +KdXT%F`UJšͽ&Y }XBu?`o.$ܯ&& qX,Do=O~îB+qfA?nFJD @sHzY +p&ȠMC#jThi`;ü"igu>- c(L~a,1AF|w3Gqf36J1f1 p.!.Bɱ6>+%2ꋦ!1ӰjCIǢcLqUor>q"#r>N|YmvB"|E7Cb<$kbTc.DU„;Φly =* c0v+϶dS<U8jf!6 UD0+hs t;֝*qrQ/mE[b%Ў_X^dV>0/s0Y|WվA(/@y eoωi >gc0o ٜdAQMBbhgZ!}*,MvHMdhN"eSc[kۣ~m{ Oz0 48IVJ+S]ʜryu)/U +T/KI,JLj/f*Em]瞇㋮ȲQ+8ԓYv_N3H~! +l8]l?XK/u@j7;ݫA1~׍ay|U+iCn&/^qda?Ha@ȯRp\K_|G(|)_Ʌ/[+`j|9>PPQ/ g=!*IU}Bu_߶!w>?;sa<~YDZ3*ݎǟk퐬\ƝV}.Ⱦ"\&Pܗ\i1!^ḎD;X`ra۩zU EX^鹑J6 O9ں)[Oy ԧl +祝ʧ^jxJ#u~C.sSk+J5: <vCu;~!@1TCNޒ?!][Gv}NJeކ2,IXeq0iWWSeweq`bbBА Jų%."cv|;0y=5VBF¡pU >V"Iv&"|I CUG–Sq$Gs+&SY]? *bH;f#o~Ճ:)Tuvqd !?ly ȼ*m)Ԭ1 J ny~/!k*c6(TtL0%f{*#Կ!ɬPO5l7N<0b0|\\ګlڲao!6sS +Iz_1`@Φ#۳-ԝB5 DJ秣{`V;bvgh1)<`HkLnT&YṣG +!}^ +EkR#ўe)V"[Sb;X{Uj4Euy1Ajvq̏"lڢNstUi'[Rx/]½D>tɳڍ%Bc#Ztz6n9be:ucyܕ 뛕^m8zx N#EX*Ug(ywڏ~C]u[%GQ b!Sja,\ĨSK<`pȿY9,'և)9Ub<9[-Q*b:0C`ţQ$VSpA 1&4 %הv{ WUFT{c>.k8RyuPG.A7o-Tm "Sؔv{ݫ*U)J"u{VN5wtNYdnhI}nA'uΙ},DSU4nyԸNYcyRn/vJhR! 瞇e`x&h9v|\pJDv.).lbn0+YD ƛ6bd❁ȁHE!?^d(=!JedGՃBbd=-L&Obf3!q9`\lW{Nsw5чFq2`? 66#'fW#b +YD̳䁘HIom 'ԙyaA_`D?# +P!pbC7``f,g ##[RX"wRJS(bKBtE4o\!ѩ¼A'bPlU|izbaY-T1L'=Q`ȬEy'%C|ZI7D=FR}NdX=۲BJ {V(۾E-RʰbQh&F0 g9:\!YNHvqض"yqoL 5O⹰$7DRۘiq5SU*א/N4ڣ^*\v{ ֫WuϋReho x^\e!8֔T f9 8V/w<ʘR x*ʥ`9)j-:J_`,rwcI7Z#,gBawL'RQEtK Eѫĺuk,C{[tLW,H*Yv#[R݉sM5`<#j"^!0}@1*$_'l)==$k'uyq8#._)ˏb, Z|DVѓjΤGAok*\wB'佺D*v*J'2;; am~'!/ UL0xc_k:2(¹t|=^p45Pģh=ĶY'M @OҙX'22loS34 {m] +HiigQZv2 C%o,&NՖjyݵ$NJ9'h[0ڲ˗lPa8W[#ǟ}FɗOdY(C])Yg_TZ(|[ST[שO&|ЂrӲtDש- Y1+ '>0U{!NHN Z\DK/ [9\]NY#,> G"hE) +筚h%주+I/EZчDW0[>M!1}Tݜ;/DT -7}^.(\8= O4\̔LF%C1S\%\_=::+(1粢J, +h*/BFfyXX;Hf_ +&F4FUA40~0 fXFIt&b<>`wX.~?aI@5t*.tw/̲`,S3M[ w7 yaxj$oR'OB:n 4TPwȱm?U78|-nJ^-2lԌK.|68sdvdWgASw1bG [0I*pfۑY'4D=-S{a0r z>S%8u)TUr00I[}(D=Z-G" g$D[ +)V挘jMI $ƚ?i`Qhg[S ZZ3`M L}W +T/K(ʜdzEAZ]vBDWJ{^j,Bխ1E(eΩh /Mk ƄhWk +:'F2 +hI([ +9@:^B* OUݙ+-cS\=݇D$I4c9(QL!чDCqLˆB%m*Ej#Zmeu)K=)cc%m&DWJ{^z,fFRuc/jj +J+j^-2Q&qiZWC{4o~>^ +ޏXCKE፱6sV2?.1XB)Hݿw\V}Q, l"'_tr*Kkafk=ŕW;!˺<.I$" "1ّW1V/7i?0tO;ܽ?COѽh'yg_wAzqI I+_HwM=}"q&ÊM3x| 34eO"#+< Gbo tdȊD:h +endstream +endobj +467 0 obj +<< /Filter /FlateDecode /Length1 1614 /Length2 22235 /Length3 0 /Length 23059 >> +stream +xڬyctelc۶mTTӱqvqضլwz>}zVQ3Y8 &6fV~RM5mS{{S G&qG{ ҿf.** )(i +j,H%l|||TN^.6V Rڿt e'?<3]mN /s:@ +ZH%UteIi4I@=99 +#tt!#\b:m<NI.6Im\I\L39,!n/BN.#8\]l@HJO)ڮ6ݤ#-i_0 S+) o`N.6j/.+S {_L$ߺ7urW㿢 `oɌ9om+ ?[EhHov 7\5  _@{/R %#oIR7DDyoRbQ>85cw5aR'=> t]C0S ~~B2qiΕXDI;ΰp {a-$BV#|TNPC9;Jk&\u4" #ȯ7?NM/~6"c6K?]%9 +"R%F/фҼٹXQbމkb̏6,X\>nyQ-f຿Y;Ibg,1=Y볓JOFG # ʾ2+K`&_Ep 1ds3߂YWJj|e%J ojW >7*1NlB dἘ[HڸzA[bef*:9i1O19Ir\==ːÚ|N -E\Գ`n|P +ƤpZ*TlH( BY4M}5N Tϣ_2=9Y/ixMgoceZ8V̹ٳkQK WlndLWW|:PV͹MuR 9k>s<&p|XM~V1θ)+ޥ+H{zR +YCmi.]ZIJ `$a&迋힩& 3DyI[snY)ɓڊI< !4Ubv'pnS-IԆ/} В8r^P +/$tRZL'XiyeQR:hP*JmGLdTDWYT{FS +kiXpqpCj*l^?VHJa`[}ۭDl +]3'BI4j0r2?Pqmxz*fQJ)3.+p6ւT4m0/+DP˹~go@ƽs*gI/(|*1CD-GzK>#w̆?$:!(`߷oji4!~Zd=~|UeT+b<|S*}C.kS %_]"o<$E}ِa)gau<υzפM{l rfy`LG{J",o_TjW|^'Zp +Vrwr%i <>Tp&{35;D>2i~Wzhڅy 礫>%Ǻ  oQ;:&+XsAE6lvx}u zhGVad g8e":|ayq.- Sh$HkUJsa0]AzhHw73pgHk#Kb.Ea#^޳?b>,b6xvðᚽ)$jiѽ|)snywTz7bKow3dI3/(`03]7)P +dmh2c 5n[i-Z^'jxѻ46(>X־ۯbaƖc Y+S"yC-P2ⲁw 2z4ZF~-L5IOܪ9jUL"5?hS51բ~-jO?WY"Dە%W9s}U("s~ /bvإ@MR6/OZCxb<1o~|kI-Y4EHR%t8&cWB"TVb_y.l~2yKIAtw4ʨr.P;oXXsD[% o:0<.`"240e͘/"n1F?ekgfd(X ,H4~U,D`7`Ӏ +΢9-|oÊ A*R7aaSMj7 { 6s_ +wtw25%J*S!%HQS|gsA'xo!1L%R*{^gR/,HPZ]$-q,xFP>Ѻ]T]b-4i*U!Ua5܈^̞Cm%ؚ-AXS!hβ/0{q(Hx`0haL5(Pu0^bmnL͚.uʼnV(K }%?aά,?-/Z*3 phU L1>O/ppzݧCq mx)]A# _eKwn9޷v[Jv 7tJ"R⩂ TՋ_.+Lo'IzoM),a͂&1h1$.?XP*Ӧ{-5ڼT|YF'iUG +֎Ig铉li"D[\)څ{xD="s#DL[8$2-($5kh{--d`uCnu(:Y]O =1Ҵ>˙S-:=q8&xg8.4L]s)q*wVCN.vC8rL"0|B{bSf + hgr׸=V![}S({;xcw$.5'lJ(fnʆ\;T1~0zC7`)Pesw3~_Bҁ{._ +ÅNNT|}nsuQe`I;B¡C.F*е1_JM oj :Aܟ`GeXB +O̴uHDfhkb83K4:{>{I ˄#n{).^NnZaW_VZ=5~u+Ni\S=W/C@[@Pn@kvFso3d /[ﮒ ~vq/6?vTϑLL_CAҘ16&khwʮmǜNe6{jn9#[jٺy\U稾p\:4f"VS9 09מowWm;Ve:?}C밒gS$tG_z;x2S4hb]jgL@^Y7bdg#rd5:Jd\oh97݉\Rt'B%%qLjtJAFW-d\ୡnG,rvnH%xb. O'S웊)Ĉp,KvJ\$xv0at3c"+i|,^OFEV$Ab~f[4π֫;b,uR @Zcf ++ΤSVb|v*=ۡX\fQ2IC߷Chً^-DI>/-6oC@Ŭu4hGY"ybp0:G2z1biтQtf[ǻnsE%d *֙#Ŝ't"vqv5yfZCQg7n8&+cb<7c& PDpN6B.ԥb ѪM!?5wi`V: +@~CMkU1B.h "߭k 8m{2Wq2i6i^;A s#(Bo?\,OI yM2{FEaP\ݬ;`uaj/w 9pZdNJoڇ[ُUQzMckIj$4j;NU Zlݷ9UmДV4v=~g6đy +d9 5ЖhU4`Hep9XR^'q$A%46Ό M;Iф+hjһYh$cNFz:Šx ptu7j=u!YqaB`r[.hj^-j㌁}Aw } lNN}̬כ PTr'J!OdYQS+: 0`1^7 HFxޤ5${&Zw M&1;5%];+"z#UH^VBȳ +צmns%Ow>"r3)<7= lT`i >~Nj_s8ck ϊ~4|-pS, W:Qtzmyl*؁0f6(?2, s.BٚVJvG|/9)-;IRخPkSUػ= җ,2" =hEcD ea+ <\0Cث]-/CzdOUw達y`  ȗzA9#Jd^hD'~Q8(xpK 1ĜE_;-CJBܽ{_ gɭI8_"ʖn,޺Lf>*[ +H +1)CP]6r,ŵ{_J>ZjB*Pulq|3k8|\JTkn\yTCK7|@c}[- ⸯeQf13 ?8` wT^,w +5!Z8`0hid_F%&L.7IfЭ#] +;kGMק-է< + _v6K2f~ L1N+`,wYiC}^+zoN4WNUYɌGG"d)ana]SGzqbMTk\oC&I*CT$^ZB3-ZHoČX5C㠐v֐AKiϸ =N==ԉr^hyZjAg>ie2YpBl0D\g/39GE{r]oku +"! :^Z\pTu[YXq{)f,pEZϣ@?%W SZ~2`""c(gn~p]~8g'(ore3vBUMx 1v9!5t*1QO# +|Nĉ9S:#_+?8t]3:+~BYbLk <@,iUU>?u/)iQ.43Edx"4sϸ˘J h XVqٖVgSJ+;NʻD4n/kIX&LQ@Yڱm,DEb~RZjQuB'=Xݏ;g-M$VckZtzЏIb/o(_S1vߋQ3O BTß! oBcNҔKG:t p7 +xGEN-hog"ݕ=T(&*V-bt >=k3DI `+ Fp"LZ 짪loLJ86 Ek1Owe)Ce|VJF0HR;2 '^e//;~x+Nw(LI3ܥT&)T4#=Nڵ20{:5,@h-̗]r +&Pofkvř5V~}GfY{;;:)Xq1\:wäd[U~WS4G ⇡[!@U)qQ^j3\q0C0L9XIh|D,^_Ͱ#S2Gѯi3vp>~g}Cjʟb5#!z8}LoK>%)t#H: uh|ᒅVbtЅBⶮZqpV3gJΧvSEpidz@ i1s-`u.zpuOv15#5qЏ3f+7ҩ&?oSs+Ե"!lq%(waMlm@nzF:Z=ӎ@}U89S^iM_H|g[tp-;Ip۬1@|) e[ئKwum>ek!MAC%n 7bҫS؍Ҿ^)Vg-bzSEEv:W,[ܳ 'u^bkHCHW-| +Eس}u=\/Ey-N9wl ޱIE+P%bD/8,8s?vNh3kx l V)d +!9Ba.Vg xd0yd}끞H0"jcP۲o U>yz&f볾W^}l6hc_JH @v2AM/6)vMk%T+TCrmWUTxF YB=n<%`ӳS߽oA΍]sR +$("1iqQy$enu(l1G˨3{jG{H~"X,@O3VlZ;vs|.+5<ol,ն̻$Юo]4e8Ml: S3q'jt"31'"guyrSSbENCc5]~?92 >(1X?%eccZdT4,/ͭ5 -`ĻTEQ0^TGSsb-R+urɽ tn_hTH9aFΝ neJ~7VU{773+75Me +PS8wDg|;)o6;gm9'FYvΪ)\f 3Yv%Jmoc=0ңEz+ +8DwtZǰ?֯S-8yG]<_RY I_i(N7Ϸkl3⾴%;4E=q:ՄN_/f rlc]0ʱ6+' +к_%haQ;?t$~wirx_L 'dtBB%0Xw&'I1|;! uR>0J,q c12//wMv?F5sMuჽ9n߂ִ,C/<@|'^ 6{Dv B {jcڐB۵{|4m+M(Iq8,zr5*w@Cr +Yqm5ڶdh츃 mvM?VxI ++9M'?{BA{\3~"ot Lj6XPn9mOx |=cCWUrxw9F [a2)!uѓ2 ]X_)wc! .]= +b24l. _3"-GY{^*Qlwb[" خ ٶ$H#J,ΕNV?atVJ[]}BչGiHcGTQtj6WYon>q@̆)lk56li0EPÇhLE5}3۳ uҁq,VQT1;=+PV9pm +M;(]jO@WuF+q8&:!Ŕ5)1vRݰ`JZF&5Im8{sEjdnz_QݷVA'ا* Z7)Bf@tٗo7Vk48nk@ t̐mhߑw?NDu!Z}e=hj$[UeGP(m-ed +s07Ѱp蜕 e9@ݤSj>7sl e8aH8p[7վ[4(R}PS)BK.6a'Ȓ'Hf [Eߗ]rrj^KpL EFY-X rVSr8xEJ]XPP+ خ>ʏvQP Ph4BځH15z,PN-H򹀜=_ UFIF҉"{8#"i䈒,w/oe1$Ȱ ~Ý!(,bA08sC$xCS 3)zgoJ|ͷ7z^#u%8^6]m{f%D>Wca-@lNT qVDw]ɌR 2=ɽW\zmza;/[p>-.4rc<(湃Nf5`Ж<"rՃSnA˨/hm#qim/aC7 #/Ix%LH1[rWS2d飳Sx;GNAEpD~nƾ0E>!P6-Ui``oaˉj#=i?YIa7=g![E(P}tQE]ϗ=eC'D̩v)@E!˦B>?XőiƧ!@J\dz_cjn>ӧ UL@fT .EN_ܚryr5"6PoIlǦ@A:URrk g%\\J>NA22Ao9WA&eG҈}Yg %]QӖ)O3I!wO.:tvBf +\:V#pWYLGbYp[Iݍ-g~p#7{0ڌϫF͔j닯nj5ZfOlW p؝wIPt25" Ev]5o~`/%E+4~C%1H!CUwPsH%40$V[6`VS LHj)xLJRǚcRZch{ivbiRVE$V7Y} +Qy) s׾\;^jaz+K`Czmltsɡ`.P:͑${pI;ƙ 0x-in-ڞahE~QzL:L} ESR|Zl4LE8o9KίVU_*c/MZ H)cl\yAKXlYiuO9Qe;N X.d,/tyk9̋T-*<-gYcKEV=RhCFt/ +5Pum,|Ǒ!KiIKglk C̩Gn+Wi)G2O>-AĔ-ۃTNͩ: sE!EoQ3@sbSȟ F#IOaNX9EG)ܼS(AkV?Δ{Ǒ? GQ}Y.?Aii%8HӞ] +GfLZl.ŔxU +-ڗ花whj*f@u +QT1VpTIyҗzLMLvVțɧ:@ӚKAAɐʦY.C N9 +Mq.%23ro;Ei{NJCWí)PiJOz MwݪJ¹J9;xKӬ^YDw\7_u@ M& WzݤKGt8V}( +kd{,ON{EEU%=ibN +I"el?PC1]l#N_ΦRԒW|ǒɸJbg’/?ϒ +^Yӓ@;z}nU((d|O{̍Lm^?*B?~Qf)rlI0mac>bV7NZ8t+9>~56Tկ|:hX m?!V^Ջ6CC=cY{cijR/Bdgnl Q-RL/%-=TI [qK4U}a5o'7:>S2YyłY]C#$`Qjqi7`КP%`#IciKy>KLP$|(cu!4bIǰq}w6bo4I $2V҄eԝtu)Sw|wn 5B{7 r(sl|\o">ܬ8++Qm\ơ*x]yѶ?1g&qG>q[Xin*)C`Szj IҡJX >\Xf7h5j7WyrLSZI.Od2|YL'љ=#a/{bp WFy| = )lއM 2ر jݣ?ːi] 訿]Ʃ ;iTO3{Ȁ]>5c [xnnY`"q!"48[_Jvqt/<8NtF"S3$i_%-U*ن9SF> ObϾ2&`}޿u] djxZK9Kpɠ۵L!PJb :57|fOAj5T)g2 GsKbʳ4U?אN4q"jTR֮ +W5:His´p"L(@^f5Æ c@IlLp}U37i4u92ő@'8ޖLTV[L7~#i W"ai:Ca5m +9Ic'VNnָGSNꍕu *0nM\'}Ǐzs5hrwP\$W'zG3 4Q3idhK1]]Vj׊(|#@12e-CS*xB\H(Z'βL&QeLϡ?Dd#b$Xl ݋a] P딠2V:jE27iG9tKpRkޱPӳ q|6"#؜2!>2E( $[RO' ir0J±d'8_..HHMQ@K7hd(V\evm{W9UWVxeiGZEpϿw40$x%'.i +b9,%wѲ^ ֤lDQnǟSe11fZZȠPؘRa K)q~yzc7v +TE5qo 4usk>eddu * = lW22PR-gbBޭ.mH4wn vu%iŽxPhzQ9XNŢF7UϗO_he]Ly_k8nN!X垓 sA4)r)oSdAdX]UF'o]Gr/߸Y-,Ft.гՈ2(FWfYM?'}2(35{^YH-M?_eUA;qͦRkdN uR^;'œ)DlT1 Lbtp'E7x˥>:)/ IMgWXJmBMǼR#>JYiZ?blvn1'f!LP { aN3=,gqk1ךf.dQrx4`=x;Fep9X[32ZR(&>b%V@в!;H 8*Z/PG^< YѩVptKp;P2T +:ꪊ…l]V+)DB-FKL ĦBz F9ZAS"Tc5ׯ mƁ +N>Yv=J7G r#Ϝ 1QiFu|A~ +c'yH(k%qcgrX 怴=IȏraD CO`o_}Xq\k + +JߍS#Chjz$ǷޒKH%|gEa%E1݂,HH;]{jܹ+b/jLDHa7jT1Z[k\NW"7HֈKjYj ruƂʆ_=l].O\J{4ڦNEQTTp} c˄E:rSאTT5h\9'ԫnkoP3v4(މ +I#e3kx^v}'a޸0oQ -tD?'bW~+D\bu@B%aUyXSv%µH03kJ`I(c5K |kaգ_ϒl;QF*-.^%\X A܆̱o(K]_~Khq$9YDEjYrfaG"EAjͬta0[_) |x{R il}%jsgnTؓd%5ӒhBb1,Qx)4)'8Ve<7B$`fǰv4[{!_%w"B$%vYeDj/bxFpkjFgy01 \lPXM7j'lȮzgVbDW r˭\1nk-W|J:x٫DrBSbd!=m,݀˦Lk[wK6E~vELH3!Iw;-EFfՃQM\dzjL!,!Q,_@\Bk HWS,&qhz? 8[˺V%FwSke8:TJI0~|У 1X7ؿFng6-!ϝD ͵4ܢT-`65ݹdV2G(9aViD9<wz'lNh +ȍn޸ʡ:zm& eGAUbiGHuov;X˂?'vf!s,9wbQFNM..^i9ȥS4Ab#+zR,_% *bg3F0}v5-%<~'Uf7Kg,e-g{$wn6DU-U:nUM]C& |{N[*iM؁ɶFm¬*8LiSv.j1 -BQ>lf(c")V)mꮂ0jވ'޻7ex)W~ >9޵+5 dD1ˢa_ڡ^-3n4ggq~Sta7@Zsk&c`eKYPYS% 4kdSFTT5 $i?P !G:ZP59o:+ h6BFy||X$ql +hBp3>#$թm wf_n?y7K{a,tkLq?F$wG*;uERY @. kÖk?ߢ*yzh|~.4KNaAQq5Qyk +EPHJ{٪\>WŋZA*Ns87rȉ^XT1(q5h#2>h\1K {,3="WJ=Ryp +endstream +endobj +468 0 obj +<< /Filter /FlateDecode /Length1 1616 /Length2 25461 /Length3 0 /Length 26288 >> +stream +xڬUP]%4P;tP[7;sfęy;Q;3ʕr"'VR63J:330U4 M,Ul p䢎@Cg ;[1Cg @hXXpQ;{wG 3sg_ jZZ0r;,lm!7gs UTҖVPI*$@GCk1@h9c054'XNC=61hc; `hhv [ckKo__0%;'g'cG {g߬JbN;ӿ&v./_O.# o`pq5/tG5/__u mo`6ecfon3 [8FEvs: f/ C;[kw QoJ D Or-bm`hw19?mhca v6 +a[r010I hdll05ۧ&@Gk [_=m%-li<&_e(]QUSS_jY\""bgгp=r,n6VCk-ohl&t?Ӣlhkw_]=Gtí-Ye;aOc/mT+*M 4x fhlw_:89ôM^{RlQtr0"kFy^/@|`8ܛTV+y"du~#u-C'{G1NmZWxvNxH9862<{G Kk|Fnxh lإYޞq@je + +7Z'Ū"`OI8G5g="(8sNh%ug;?XK[׆$/y]Ht:R("uK[o>qaߥL0!W''OP +lc$P#~1Eq|̳_bW3W PfSQjݰ /jŝHo֛=' uHc)Ht}5ǎ(2z*筘Ͼ]ET&d1[v]iBϒwݕiҝS*G1!&v.cm'*sU r:dfk︙]Ă\ = 0$dɓxi\%uFWr{.2Jt-&Lw)7*s82k8w"xL568ɩuvgO[;:$yo_Yf#Bar6NLݐ2^dB:6'P_|`.5?ump,-Zt':7Ptw) ^ ޼g*y!nbL@׎"cYYBYLj7OR. 7]j;WAlcR1t+t 觏ndNN*e^?|Cկ 2Mcri"8@5CG5VfU]4Lت;3~Iz=GBDN NNXm&i-Bt\{Ƽn 5^N;ϧZBfNKO6U.KvFodo'u6m D!v(1̝32L>+7.^JJ8!˳%|<NdKU?Fh?"dn,"t2vsXsy|̉>*8N#X,LE xQ6vKbU!:~XRz},R`{ +cD\5 $yA%t)ݢehi.P!5 +­ AtWiυf:NR;v LC,G*y 4H~fB)>#GI~[C N󮯈=\ 3 {jW7:nV0ɏͫ+KGBss>aiL/p e;{)"ܝ0-~?ӹ)鞧C9`g>42iHcxڌT3"X&װڢI6|%vOW3fN̈́ΎMVi7bf*PaÚ'&gC t4_FEZ)FୃEdm- h>ytWixv>MtEMD)yЋ;p6u7H&l |{|ͤm9y:z@+V(RA,9Rq4C]R4˱1z}f#_: +vD1q#()G_0vCtЯŝBd=fqz0DAcC Yy 9AUK"Q;zȣt +~ #3ϻCQv4㷿6[G}j}wZb#)iT/˾%7c%oN.y`ځck -==`hɹflsr8 cy= [gNP1\$];.HD+CXOםYq[$ùG?[pv0O+Byrߴ!M6_zJ7_q%cVpsÆ?{Y(vg<ir\In[5M;oT<"@upRj~HD"]H,ǮIR R5l&#1}#wV̅J&9B}( zn8p9Z`Lݖ.B?ׁ. }4:d B<[%UFp D6,"1aUv:3p7\Laʆaչ`uUi~Wf'(Bߓo7ۀ2=.QrhUWWrM*WTL<<~iwn!_$d"wrKð|C ;N2z`Z=,.9*v_~$gzw#ۉkc=CjQEOutj@>+ 9U<"qΤ/ אe^7'gw"G*%*5?x@'*s^$,| =w6^ I'C;mrؔ>(a_dQ~U|kh̽ R=LjZfiO["88ݸGHJA 5#d+  GzRm/Z{=|+Ǵv  + xSwN{{ +;V)Ks@;'Rﰀ߅לk8.}$8O mKdajdk˗jnG GW=E^0]͎SJ2`*9IXo%8uNp6ֹ RM>HZb*);#o=Q0 W9dbD<ܭHCJ RP lߓncuo_&' idm&jNL춹EeHcB,=-D}-VBJb]J=!<`Bu:S/xkT^獤V"j͍avVJ\uک{d]zhlݨ6k >^/'/@J}=ư~m<-yT)Nb8%}ץ7xsK zSMl^FQ@#""s|GM*0ʺ^")oUȥV?ـ)^g s / C߄^b+A?[Y#ږQ>L7 ;5ҹ ԾKXw\aIw3f}3~UfV\ q1gl\$6)&ve;2?Z>/UJa_rAaLC B-ͤEcc1 A௭mki2 7E%c7KC :)X}W)-IƘpkq__smiϒbx[ (M^#2G0U^MU$^Q&he&% Ǎ\ip5DO>ƫJyfSEtpu;Q#[~,_H$CzlVm }R?zyr |0<-7h*ȀezZVXhznuu' fk4j:u=6KCaE|!&!j_2z}QRN(b1u9ɸ7HZa;p#[†dX P5+t8_mHPm½ DN<=Nah-NHm#[ _(\a`v3ݲicnF9vn}-Y-Y +` +med؈j7ݫIO~To4 8'c2п]_vE+]6ڦG&H'qjt몧r3?˪U<_Qی!6tCF#q$얣{q|"|MROљ1> w{%@kacޜ];\.F:[etbGDE@ u$($PvA2+_2;P(6ig%NsV|gGr"MNX Qaȥ- \U>e08.D hhkiᇻ{Ʈ=ԜN oLG<0.m+{ 'pGIdfY_}.{`R̔bx8bkhm,1ϫoy3 UҸ>Z 3kV2\GJBܱ?U'VMǕRm4*.29~h/.]q`k k^DnJd8?N5S$=e!N)@@iFl8Eq[]~?F2å ?lm~%:үt-+K$PhiMtWGY{_×䰡c- e7\#i=Hk +Wi[AE T,T=kP;͖roWlINW9ĕ +L8Bߋ0Lܢy}4 .Њ_Q|X;ʢR +/um /V +"/iG{yW1aEb-Μ}E%B?x0@]c˳b~n.ޒ:I +ֱs!|4)v'/~ʨ%T˼zb$\ +X +';kGCOc M QR.8 XǾZhf6nY + Fs&mяͯ6e_cz:>7Qs&NLU]0GZz&P4ۢ*߯9V}oڪ^rޠJrrago. x;aC{%bp{ٽE3(zZ,OZ^) +X@ˎ0ߋR6{|T(.HZ@I WѢnhȅ i[q~  ƀ( .mXcܫ[`^#zP4i*1Κ3Z3NTY[ SP)$vr%\}uص^9)G{5Z؜Iƒdr0b(1@q1\~Kք@0d:4GsR6QCT#1UNjZ f='X|S!F. ew/]YT5fe2O*X#0Kk tpw;u)k'q/d\bu0= &(f/b?oR+dH|l(1g )J\o5% aC,E[pZdz HX!c 3Ӎk z1pS$^ ɵ3fadYsr`>tw8RJ#3u:pM5bFHZ'~R#!GC֒(' ҦDD +6/%+ &9ڝ!8p]-TZBF| *- t:D<1-D9{]@{$-9׏Ztwd @R-7:0UJPdԄ\4loXڏKy8=fޫj%rc͞)Ċsk#V65m964 ywk E솠o:"Gr3]sdO[^Aa7lj$)m w9Orv H_-vڝ/A5gDE98$h$(~g +y5Mh:{vq+(XR|Nncx)r3ePtgIƳG +OI:Ij $3+ևPMz=:Wg5 zVC5Bڥ18{bCy̶c^[#':d:exڤw~7#D!~u4}i3exV$竻]j=?(56E`Mx%7Ι մbd>H5"[tj&:־|+t\jxRC=֤R;̍Nl"(Ox.wГe ,]]5'~H 2)Tn6]xRW{sI3=2RJ3X=D1)oXrʎ̈́ί]\y>ij F~+ͼ)q.FQF tpq|mqm^7Cc13|LsCaHCbLJ|*z6t\EPnA9P1lK7Ռ]dyP3&>x 4*>?k#ʪaJFWCd! !JXb6wF   p!ϲ_(W,B0;~|UUWOEW /XqƧ[E^Z&5>5`BK%MJV{bAGgiٽYBL طϞ W)r>Zh}]'*Jb YHou)5㮛ͿMX؂v1ʛ>`,ia2)K`ʷ-Ƴܗi5Kl8]p!Cߏ؏]^:wdȎOjG'A>Mu>l/M`u._^ᐕ\6~nPLbz ̯oE8]yHuҺm(#vE@?C(`^͊\Y8WT' C\gZc>=b5bDkZsތոcvݐaY91ehTeDPUEkɘtǤi*y 7xC:2` ӫ^RkLcOxw;zAO<:| A*ZV,o}u8KpwgQ>]Y_VJ\,Bh%$NGbPQ6GX^pGph́G@Q'*9 +،S68ͼL0p,D>0##=CKȴ,<~l%%ѝ+ov'$NwI$U~e?XS;_O>@!eǞ&!'8C\KA0. _u *oE?D70h*+ l|2?LSƆ<:q~CԜQS+p1%θ:_%&)&O!Bv՞_F9v'90ىUl%bk^_I'Y u- U(X9y)fCKeۇaC4![{TW5oh>nXډC9z{Y&\':r<'Q^b9WǼuFK7 URHvcȻHd#dG7=E2 6) T"/}-r~1f8YAj:7\תuxt p&m5'pi/Ey|wȧ2$FU`NBMjAeH- ǑQ31NMi3`IĜ~r% U8JEl"Ÿ@,>Bʈ:"ádJoweN{&owEd;#'p[> =<SXnHv-"Sr-c#q.7 W8J0JQ yR;ta0q( \bS6f'=fqCԼ@QFjQ+Ԣ\NLؚ{nTEg~owT#IRr 8h82^ K*R9ٷ1<xWH ] +[Lvs=,L@E f:+g09<}c"sr{ٰ12_4v@!vޟ6( +=HrK;Eec6M0/ƒ܁_Z+0ү[ZG6Z-KC1P_ܩUy _~@=Rfo |!13Nŕ}h;hAaMvГ1:&A"ƌs˿?zVkҋOQd幚k]G q}Cq%$:Xzڵ>q:j'͏Þ!\L(Xh{[yт}dd"UP`؂*~Rbo"G0&>1dQ{d ,F0(ž#,M1~ꗾ4EֵoXOK#Si>_c*]ag4PLچ%XwUA轵_̬|OISgN$j}U +\0ƜN',k)+%k~!ɱMwmfrn'='V.J(yEt4u6k<򘵠? {_zrq0#c1L wpBjwlRgiH!f gAOBsx`hJdDɅ*\azA,^}&$6/m$`x/֨=NhrD\] ,m!D?뛳ɑzל3dYFv=]HZH3!թ_|n>Ӫ'Q s_Le +%Ô`QqwIoBv1ܚY"d&=wysJҲDѦ/B=-PEEpHiq6*Z}Q7ayA$b %t7cwN7Z/%AOOp1)1|lr^5wՇX{I$L0$󑒩E/K3e O}Y|0suޙ^L"7U0]$N/O0rf,ω1~ȶ +v}ޔ(\R$am ZRRQUxI^mr CnNȋ٧L~Kk` `n(-H.P] EjLwDGL#s;G!ݵ3mڥVZCl0*#"w lS8P 7 S NԸOvq8䂡Z_谵" $2L-sWhG5mp9 +"@RE  p4 jE +2diiGLf2ww ;6w^WiF;M>z'hizIC H:)X{FN@1dDheDk) +>c7[zdvӟ% (9JrYT^!Y)OE1yV3gtaL9 9 rqE(ֽrɻA͒ݏ +:ޜ+Vx'db"ҭZ{l/_{4ijHevAi8+|H:XiD җ VWQpv y:gy10 LwǮ=f6҆s'  P2 z܀𾧍J6Juߣ/U#ቱkn(/]vA6?;,~L{J,Uk;058/gWˆ_Hp- }o(38nH!o\YF $:FY# kV 5r.ܦ +B5i* +mC;6f׵15ZnM#kc##Ҷ6!'U m"slb|/uTfʧ9TbBUw[k4.=4@&=c#kAP//ړPܩxG1۠pSUtu_SȎd2Y +;b6UꔦEB|jzr,Pq`~T^@*( ++I2M};,JזH'8Y97 +AXk>eza{Eq+8Q^mi4CR2Y WӤhsWeGRGR<1h36gBŔs S H I;>sl駯]˃YF}Gu|JEmuTNjiSSBή[XcSrf"]>-3r;>HRC.7#ZX +.j+9 y^gW/+)"_ +?T 'xp糓6*)1}"݈3Hsl,V T@;s#."̒f9Fnt) ZTZWU8+탿}<6Ci?KQl3 `6-\ <>WKZ\P=EwuŹ$De0;l\f~~E;$`zYXNRX} +QoBu .>}lǑ{K u]ڶYWM|;_naӬ`̙b^Qԋq{(K6\h/ܮlwUH%lGWΎ2./ƞLm4$ZKVzdC)X fHRR)Ԫc*}'m X ̅X:Ba7_p@}'zFYPOl/Dx?rԈ +uUPpl @xv=c}爓'clo) 6shqGRVƳ /߷ +;>`Hs7%*"%; %cڦc˄Y-j&}jb6Bwx%*#JhƊ>Slf}-~TIT1('j}mT^Kk_MTq X8IeSRi=ީ/B?zzo s&Sq2x ahf + lK%h ٬qgK?!vź++,8Tb1[W|юˣn=稰ITj -2L#"̻<>@(!97 8gDnb>ې"Pޠ#'*ؗ槒lP&lZe( +p uX5}t)E.OvbTcc-Oe+}±/+y/p <L +Y#wWvkqV:WժO0P )d{P0@]7ȯJ ^*R137mX4N{J:8O*ę忩NN4YtG /.?o*Ty^()uݟ+^98_LX-k#s2A)S]>/YUW67YDrm;xA8ƏeV<`7!ܱ@48   {"/@?")5P:`&V6AVekec23g&(2i ^NJ}EA}f!1)rɴ|u3XHHo=H`wGjԄ:)ȅ$p B xOJ_Hv噴VV@u[chO׃"D:g7%t^oӁ7WKqNPP\bH<kW1 ^C6Yʁ&g)sc7|bӰ?[0=3{OCzKj(5Vfj(uh4]Pm'k@%~$ac)QnӣpO]cvpC/ڿ+LdmԂSyqRuEWX"^ ^֋I2f~6 _*^*Bܳ Y 2ZNxW)*=w~ۉp'& E)L [PkiE߃o,AgҶˁLH`l:0Rǯ Fk,RU,A9*ӤuzvUp@"3Hs ~cRP 7KrSʬtrKO¼8WE)yz(\v5?he&NUIZ"!,VK=GR >y:A|.￴lb pp 3XdI.Օ"u{!UL?>,`DQV.üEX]k +;];Va3EV;Ck *k{퀒&+;%_lS)NE;`3$xus;nCj M/ Cpj;`yܴF6ߗe*B|z-&NZt^+#My!fyȐq"rkSD{w_싦@;)ܱkPS}@ 0o.8JZBfkh#k{: v <̱&Ò.Ab$mv˽e/;D#YLi+f* Zsԗ^Hqȶ|M\?嫵fn:1 P)xhk?d'U;CD}؟VKrC*ːsvcxMVIl:0w8v[&?Bӎ@z9rV/etr/i0p8tYJ󪔮y&Ӛ:37sB; *|=80\x6d9Q&՟ߏ If"S fOyddÔ=e%V(~Be$/44=o94{tH~>{OlߤSB?& Ŋ+aspWu̡j6O{Ԍ!Y5z昭2wi7ݿ PbX.A5 s|1|>Sz'Wd&Ś31oX@ ' NEBWjzP1+fRj #rʬBS!9"ahO]CƪRؖe1XQ.Y30SAx"auڎҌ߿ <˶]d}PwE=@HZÄ{]H=JƩ +.:έ 3vBƽK#HݿIұpvng⯎n$(>{[cs伱ƻ0lB*vNA\xh5GrW)@];,2+=fE(׸+- n4Xfɂ3Ō?(Em+Ee'|lykRqȭeet0or+W2}j݊!Aޠ4v$+VfҚ^ Nn~w _w.fU%En`PuV& =`F* ?tu$Xhr5kd!Q]<_F.:ˍLcWጴ"&JE^4G'%+ٹSќf\&@/೑I +G)mM 3Ύ\"Ckkm)suyCy>tڰg,7j[wo& W*̬R&z),cf +uNdso+eSykq"V 8kjآᘚw}y{Q0H;t +~2 Ss Qd ్;X~SH ^\~cmcQFK%~:j9e.ݏa;YNȡ~J`r^W5E"/l+ Y{&th6NhlG3pR'S!s]yr,nŦc&6ϏeF۱e*5'T;7\]e[U踦/*ampxb$|ƀP X9&(* ~4 *Nͬk*u<Ť+  +hpi /4u~ 6z@(Uёِ3LhB=( d;L}J+'*7,/w]fs,,v0FWfgM2.E.blEd8s ?B@8E7|'Q2]na1̸jG3TZg6[erj1H^Q[5h.Ss8G +z@4w&"aB&Ux,0Dū k"4R:T߃Sb5+n"vdtdW&6V8'z. 7}9$G}ՁteIV_Xkn-!wp ^Sc-^okm܁+Bo+%*!xR|ir&9r\rڡC#snn~DJ9*i{pq-~{wgDG?E\VJ[fiWVd\Q-浆B3+-_mO*I :l1a'Գk2#[{KGjk4sac~:ΰY5v0DC!tLZ {u8 +cX=k%p{8v|{pxUvWG5jg_‘FoH':zu4+ b۶ҧ/*i嫒74gHhLEHIplۖ +^֠] +J Ʃ! bxs6{[pjMӜ_&+R%e=fL $:cƃ'6sOnzHA1o"%<6q Xmv + j2WJF#r~:_-l9JҒjF,v-17o,[.DhGkSvCf;>!x^enltzuJCTk-7&5b-mwQFxak&.uF*GmGv"_?7}B],)%k P) ~e7Xoc3D^Dٺ1c t<@B7>aD32(x $77ZIqvk6C-c1@acJN=h^aBb=&:J 6矩2÷`s Y!B8px{*t{(@aQ[]i)jH hm(o-^ķ~B-PiYدpFsX?ds z'A`13(ğ|n-LTU8cFikW L(nOhI?F^?|VBλB\1ȤVl.@C'$^WE7hnlB42 nzC3|ļ(!SLLv!m*I -)YEXͼ4BфPV +~g,zqS:I.}20r̗mAvśuImKׅnNL TάJnPC{xX , s +S@PĄf5,]6 p%?2IlG~Wۙz1ÚvȍP?4F&> XkD4gDBĄͰ@6._W3"ݥ)G'Qspף7r,]ME99z 6̆y˵HǞsvYj3JC?XbVUEɅR~3BIک6k@<)S@]оx3@SMG 81g5+wc ^rb=*إ,pxֱ0HQq!e c_ +4/Q%/om5"Agԛ y@4Gܵdư3D 4HҌ-%IBSL4[C`Ev2I+ bUn:dݯS%EpCB¹< m* @*xaU,R4zp.Dbxw {bHde5e٦rkdv]gNq# ++v$aE`8ּB["\A +^ՀamE4(X eTJ + ,@> bu]/9d/zA.ۛEخ_>S(4'\[XxMI$+7՜!Lk Gd9f.=o@#)m%{}R('q] +_urI|vM_ĵX ثjv"h|BԎhy*pxFfBgrGt(%=ĕ?{Tmw+C/SbtkHsp^i(o)+I(M/oc9I4|U>FB*BjEoǭYO0ݚ2x*x,Gaq%wwٵ +X<(G0j3o}ZfO~1;F`/ATw-]Ēeu*N,8M%xf WC;bYjU[d-hyӻ 2_쪸o\N B1^N D[4N?8Lgs&|gYmMPPTMnJ@Xa\ +LouXr:LQbGNj60=r(耝u-kƣQ| )E#Sa$抑$)"QHIzT)2D'V&򰁛DeŴ譌7),Ι.Zp[5{ MD&V ]X銂T CDDŃVq:_(樁Z4Od] WBZˤ3pŗhT,ut/-̣j Z,=r_A!%fa/MzAc(ZK+N.rMVStER fhJܸF޿1-գN!<we>Ckğ5 5U ]ǼH7˶X'ZwQ+YM0"i?ثo"yWVΣ5 t陼Eq*7Ƌ-=#-ї3HN({A˸(6(8pǗʛ[ +RM](k*1_BoL],|lk觜3R0Obv1ܬ䢕z&;lhiųr,iL9H;υHtnc/Kt ^{]~ź&#d"V23V7#@єyjuc(^^`*eW`Kq +岜'gغZH[樉3R‡wj7JjE8Y/: iiٽm~;:> 4mq DŏP)F6]>`b-&g+4ar29IA88e(gE^ + Z.TSԽk-+0o.XK~ 9ԍ3YםF>EACEOp`S{S@f/l _O7%"M W!UL0r37/u4 %l!F-BjsJ{ |VF}`,cĝ Φ*SL$"{O,M`J\ѬY4cfP4Iu\|(cfϘ6/E+[Lᬯ[x +endstream +endobj +469 0 obj +<< /Filter /FlateDecode /Length1 1130 /Length2 10325 /Length3 0 /Length 11097 >> +stream +x}ueT][54www A;vkVY=61P֙`cdP9[)4N ;[޿b@#XF b`esqXYUh PXjF@x +1;{G3/oR)-`K9/R6ff=/G-Й棧 ` +2qALQ{,S?c#gG;@ozMl=Shd0IɉKӰDE^ \vv+lQ6-?gelkb/ɮCa ࿉A&@vIX[C7? S +@S9?gq6ؚ[9I܁ g 🸆)d TsNfSXLmM [;SrpvY}r+6}?4_^3 xwc؟JaZvtyFI +t|IEYە^!~:mm kKRic:4kT~A][3 +["I9ɭ_ʽ~lu,ta_堚SO CF׀sy8 hWsh9IJ t>g1lE^:[=+Yzpqup!Ʀ)DReJ +,`ܼy=j 4k8:3L N^pʜno6,vG.I>\6c.@'*@PU3'fJ-.-(9e2Ըl$Bԏzg%m +▥;o 869 ^wybUTHj6ok0"vH3QW 8gk"Y c]߯4! t:A7w]3qkNK1$Ph7*/#n%qm?Tߋt"fGS%؞Y%xx5` +`T@R[lCf sY~)Iq8[_r!  IG^hkw{T9P6 +m͹FW}x1f\WhYx)\\Ϝ/9ͤ2nkr'uK#߼nPI|]n^xSdjr8 O[BB3/ ^Wߖq,3W1HOws +U܍ +!ȌRU^ {5U+Y4(~#Tя|VA7nc}N <5Q(vB\13vK=K%ca֙QH\Hޚt/V3/;,눣>T/$fOR0tdPo#fg*(FEw"4‹o|,yCCС 'CQJPV vvUע#:1=Zil˗X|HD )5Z=Mԡw %ܢvu&syRArvM\d'aK 9ŒA UcW0~0<:)Pz)cuq(!Q +N5M?8#*D98/ϯfn6koqTGhLr߳DJdfr>ۢWO5Qu8\ZGO̴`{]C㰺ť&4_J5o:FC+~j^}5m߮n9*Nʿ:T*o2(G +i`Q$yPI$@Y4`ptʗߏ?K[e [޲nZ]^ 8-|Ӕ KZ%e+EWH<7Nb%k m.XK$y"&}bi[{JdWTd瀈ow+W=mQ]/ +GG'݃7l\;/zx" ثOÀK&JRFgh_F8NeqI pmv>m'ʭ8;)^h'uY~eù5*G\e#c"=3}7;"J7UOkgs_SUro]SKDwVnH =T[U(. f>'#C܄oHa!bN0-6ClS xX +X+/x3;(x">GB~_BF̾x^=aq뎳[`^2Y'r)؏9)*Y޵] rCFdyJv: ϕ@t@[7ӬLuPKqs&‰fK(2}b{R8?<\3oUkt ?-4s=گL.ۑ"X[uWD'ٞB3ѩ$`ϮŰ\RPa5~:o%~3d[l9L +wLpș">vFclPZTD.E{$8t C*i T*-MuEI!rٶ=Z5fI!Q̇fSh>JiQ\!ȻJ KɛNomWO(5PEJ`.f1+quŢ7/+)wrޔ=D3 bzC;7o]s@2ڇjZi>nm:$eU@(TRt +y!ٷ'S+iynZSqֺhD4jL6F߲>KZF.[Gr-!ďVѣ;`Hr¸O5;On7(Cvz4[Ic]%9KpB;c?r]N"Hv=$'?=% |7 vy H2ɰ `X["B9HW})]l8ػGm9H3 a"x鎑y&"vGRQ.lzmUrCi wq3YGw΅JJmmB4ʛIIz> +l捶2x!zO`7y--K7^g.k8L#Z&pD0aok|5BZy խmjM Rc&p5E}ߓ>'v~qb|',f2^qLXװgN 0?*?8]T52 +|]J{HoN4u_Ta&֝EŹ)mTapw:f}Z)G"6@O[|fӺTMI_Jcso* }~m)sm*F  g[XҶ8bRN{'!QpcY\.3.r  6L K]fRa"mfTsasM; HPΕNР/=O6=1|e]Jڮ>ѹ .p;$9F!*izVf- 1ӰfiPwE:뫡!W#5FQʪU!;"9u+C#P)' B{"jn:IllGV +ai f;Q$7hl_XipuO@޺dn-Zvgԭ<ߌW5vrĚ@0arJ<_#f2/7/`/7)\̤:?1bO[d;{Nݕ.bC?n)Rxw\&򗃤ߠCu 9B"4U (S%wd>#D(֕P ~ ѩA-N1r.R7]ĊOY^eh.ǽ$0BT qZݿziY}>'ɒ]b9wGY)>LJ߄Zp#Zhh_DXA&܎5uiÉ LŠk(0Q$:.jvM5ķ9#w΋u=-^=^mLv{}{ `懳˯L؞ "fI`S\(!O V)"e#XӮ'@ ԟmNyNpiI.Ep̋6qs},;" +5aZoan.b;Oۈ ='Z=7fY™^qllRL!'P8dzitIȁl6Ezͷ?Ean}^x'MfÍHbe@QڒxpK.@7vBNPV6lr |bn|XA<ƪ| Jm;8uwe=Q>l u^(hf)`Vm߅׆[ ~M.>^'zjtr[)9 X8Պ+ZUUK˪͕ArJk3CDGz\.)^N")os3o,;i`LP%.}c"΁ð^Y훣5֦نɻqQOdz0)rq:2$+1\p瓮9=, :OTz(<*[U׻z/",uYǣ +㹟0.p}]-C=%QE0xԊ#w _QdfJu0ȢX(t>:`kA}o{ X.es&ƴ'!T>oE]Kk'yk:J~|qH<'j5Ei.Gf n%X) ++ԌM O +1馒TDbkdfJ6/a1nר-*.fK^lyU +]MͧN/T韙*j{݂Z 2S(:xEk]W +D $`Ж%nvxᇹPRCDLOYx>-4v{MLZX _,̌iY1c&H7W  iq(l):Wh%н֗_^H'XξjdfWot!2:?!x˛Dv~"b oC+Am qU "EdG0)H rͭͶpBnΙwz{2, Cr\녨z/LÆ/p,XH#|]أ3ONe +LI7on-ұ{ + [IKp5pG1iL4-/dJ>`(~Y+opO;ިqʡpKud# @ttf"åST/)1nΜ=cS.Qf*"/k8rqH|EFÏdÒ*P>Uo"VSӎubQ}Y.LFd١żq|B<̫BnJbOUnדOA&۽d\ Oa}"CI,pݬT:^!rՏFs&y2Ch[x>cS3Y%o֡OeZŒHr-f +&*70G g:3 [8kj.3 A Z:-""q}3 kMsUs&Í9pa}QBrRLhP pk`ׇ"jVEyIPI[Fkґ.qt4nbLkRd眿 0ѐA|Vvi] NVsTk!| /&TlZ0ħNtZ` ;vhϯk'h=Dq6Ϲ>MPMm葒IZ"'VaNu=,8RY"cT|!r|ۋ +dže-v /#`,c\_W)H!ՅbDf +?jP^K`H[u}o׍`7?jG悝4gl%ԁ<|~4HtF@q:,/*’n,QjI\4)嘷 T)=FOz6NDʱԙ^Zg~ŒbɎp=_ꥺ@3;sSmm町^Kbn*]czfMI) tfѥ1Yfx|o3aY+O4I)ac ]o%O!al>Ԭ ݹ _[G#Bưڍ"Emd +?~RO E;µ# 8#'+}}~trW_g؜{a&(tGkPQ9\Ƕ/jsY: ~,g z>t*z"A4xbtM+dsp5Li3o&%IEw]} :Fڦv0|I[!P 2F[a" f, +(c`/!pcbSHeUgG3$㵔T,/k8U΋] *f%eh-JwWp7J2q%o*n.J>W"Q'fWڏ=Ӏf +endstream +endobj +470 0 obj +<< /Filter /FlateDecode /Length1 1805 /Length2 22363 /Length3 0 /Length 23529 >> +stream +xڴcXo>gne۶회m۶kmsjjT9o׍뾞g[Zz(HDL ,̼y{yWfQ[3+#33;3^ `fdafdef恣HΟ t5Vr. &.b=D郍ᯧ֢YcS+@QIZ&@Kc[s9@ PPUH*i(0~:Vssttp\5"&=@JCM:lAPT\AB]D]GY,w߰gfMjKWWG^&&F 7WFg FGSrx88>@[?q7:\-ry+S 𯑤ÿv4]'Bi/u Xc+,3wۛ~*>@3%9;" ߩ:|L?;flo6uwrquG 7{=SQPSg9{3zן?ߺ92i[9eK_ +`@OSK4_~>sc[9b:|] s?W2џN3{[/IseKVHO5c;+[P-dV.V@3e+WS/ZsE-l-J3yX ,l!GS{ gf `RWWWSρGK 0vv6cV8= ` <\&?0baf0d0 ~ZtloӕBO[&윟loX>;0o͔,. PU]x)P$#0A^W?-ȾL"}3vLE_IBd&Fpz`U)ͩ"rŜ."ԙOOsM:^Uv!G2K;-: +^/|/3FBQQ8֔,`?"u$ǒ/p* ?,2N?m*-xJ,W]">?88HOJ  :ÞU/;~M(뱈BT< h6[Snj5hc  W6DChKg?F'5ׯp&eʞy<)185+-& &N)/&do|R@h|!0 F T5+-s\uTDTm`F;/٪J~N~ \ 9AҦP$59,b ^38Bf(U7&]ď_¥o{݁W,Z\#,(hO~BSZM?"|rmQwIV[G11z=O RzjUb22cmkGvj-GHox8)2b7"߯!yU7B#}hv]~+YhMS'uؾ#+52#-ΟwWrmU`KDlrj\+wÆzʂ#}`AUDBY12WM-SSlLyU +olP'ZN¸>c\u%h,C%^1/m;ጷ_"z%Vl Q3=:e[Z$y4DX0 SY!H'2e2}RId0|M6Ժؓ[$,jh8KP1`R`g,_K muz+0 "3(GzVg Pj:]'Ό{:kmF%1FrȽZ~e' 3Oݟ2jaa HI.N<"lYn{Ξk7i1gIVP$| pGGkjŧҨw+|JV,Т2`>J`3zʇ6 ĆV}P!R* wedڪ(W Oq/1X[ r\ +~{N>M a=ߖCYj- +Ʉ~g0…ۅ)$h +MuOωHtcqn (_B}c7 (E@++ds1P<Q_ I2<:,S7ѸZ&Zer& +h׻>#n]wȞF^ +grܩ~%`iӚ)(ʻ?GDIcup]>2ΰ97&Fwo-Dly%+a24k$>Jv#JWV1X-EW&fRYIME@"5'f_-Sj\Wd*S73SZ1HJzA_pMrF~%$/>ōΩ˹x{G!;nm2QeJ-]kO$  /O yaIˀVcm30u/*[$8/"q|,2bj~H- ׈3$LU[k"?;BeD='}HcT-,]&k'3[1G|Z̃MK5Cdݟrto7%wMؒ;OǙ]eӻu?z¯LǒEQ]Ǩ.KVB'KqT^k9ӽSq(ΦpP#j^ϑ?II:ǧ4P9mC%l>‡o#xGed\shY8Fcmq-<")7 Fi )'&86[W\$NCm?Y1\P +4U t*L +L$]gVCW}>e;ˉ'HSIN`_"a Sh8 {~ҹ{moc CMCJ^-Ϋ$h5T!& 9ŀit8MTZ n8IZQ}Sv](:ɮ/xw(vY%B'msE+[`ID >OG2DcGbiwBLju5q.bexpZM#w/^NMa?-_Uȫw\YRF*4ۯq.D̔1 &iwۣ҆JknglOtV}ֈ7u|:eRS$ƣU/%pn MJM 1L/Vbʨ6{){amPWx/ u2iア(˝As 1hRصD<= yzكBEFj3Ov誎L4FB%k.26_U^w"y0k:? {1>$G +iT"̹+!b %#cA9o։o ei]}Rw?bc aѾ fvlj-J-op+anr;I*~ JƲSOeNj㝮dHxĞ꒫3&69;PvTrs:P\|u%ԯi<.Ս|_q<+ny=@ZW!$խiN{͘덺=ح"9 1]#ߚt#4*SʹH>&vT ?]U\mh%>+r2/ +Bu-> ܱ*Ku5>m/?,)CD#s.@sWXXT 6ұ# ^TQ8$óȌ ;|LUFhrKʭ@ant+ԯ):cy ;p-~ Å(@DCopO':d*:Y)rEKV#,)o[};\-@Jj|$l ȿ9bg=]Z X,K? B&1+*EsloVse9l?D~OVo vURkFG4rIl{pV |֨87H.OWTC6M ' +<(G[4}Ii8}.2Õ&M)Cus$4l!LXfwIn4d/Ħp7sS$$pz֔#  "\e2?ljo.X={1s8)c;,F\{{&ٙ{;Wf^"1FPN*. PYovoV>h@VI_+$eү+8(24 m <6)SL]K4eB'"8vށ0BXy[<Gv?kJ fqZD |R@āT3FP|~VKFH'5ɖ>IxIٰ҉nnNI}dd[I{scwQV]GH[$ ӾK"<Ѫʰ"q>lY~jWA!)yjD4#%PLí3Rc!vr)͕Y(D{_/..xKf`"sҶEy6/H#Bm״:D SAo+xߘlʡo=]+Rl{%[˻ܦ[zgys.WE\mZ^"g_d%<Rw |oJ\ra&Ĭe!셤Hv]JwЇ3<'6#j1.+u" E6B[0y]˜s87fL޳\ 0s8ϦV#clZEQ^ iIgMg(IF21Nj&l!dpd)ӋȘw)ª]v>Qa83[j +i%&(xp(٘ᤇjV!{PI$D.i#n%\Q3! +N|:·p'OOjj;Z Y˺B +iUM~mH@ȌI؛jzncSzꗇ+4;Tӟ{ɶ_vj/Lr8CcX Şb >#";91ezR`AQ#Xh-.&, =Tw[{^J \{ˤX{I*q+T*y\)ȕ3{ P 0W@˘ފ;f91iLsq!e`_(#ܧtgdTDk\Z扤].,mio/SXH!KU+~H䘪q+\mx'e{K4,IBe:%s!jR"܄=㵆ҫS=jMKnwQٷuon p"T#WQj y( +qs}l,6:%6#lwk#>Ԥ(ĸo/.S `] {N?unoB0B`SHMZwWvYVM&KƖ +ގ{Y} }'|g@Y=Q+)g%3+n9xza&4N9|mM -T펁`~Tnҗyr2sz$4ElCy]hB]$#ۦJV:臾/: aO;<5{,q6DȯZFߜTd K&m{ַ6 e--iLNrLUy|F ϤQ=c94ѓ8I*Ԣ!0QyC\0FsXЪ͓͈W)NzuceA'^s}pz@Lmv8%Zt]4_ +OfzĞβD!1~Ys 3<$CD*2RY#Cve~Kxrux࠸W~"qo8ݸΑG}=s ++? N'Rl4ʺ@'\]u^AѽA4L(4r6 G^eA #l4vl]}s@*BޠCH:gݫkddne}2r/;Y&9CRia" gSIkr/ !0 Ŷs5v|ϸً:>!]+i^yu\*ru(S*j*KXP8>]wD*F9jM?8jȄ+LJLfW֡\Dx;*AI] <Eys{(zyt<od#YcP۸뼿?"7 Ƴ%xVyye.Μ KgM,cP} hA~GWZ:ZFj?Z$R5R MU?]ǪWYiR{4 .`9‰A`tз&5OC ˜<t=9fkd ,`ϧxѝL*vY7J ,f](8\A ɫV4_~^GGA @Ei #2o۔iE &;eC?[,qNҼ?#Oό`UzGOxYZ:nxDgj'ֶ_X_Aj`)H]ו23|ĠNCPU0\{S֦EhS)Z"le*^A2ɮ.f&0$^Zf?U/-1BQV8Sh. ٪ MoԹ#Zy=X.ʡvN^ks璫^`%5'OM}ŌLr76-y$4e0 ))0ᩘp"bpHOLZ3XN,8"w=oC=gOV,$idqXVov+bNƣ{Of @}+V5r7zv%J +7(fm+c ɰͶ.xjfFYsn@&c{ak"Bxaev ,h|DX*򒶥*ffᤃi@c%OgzXBoi}~i4g4TÆC*G%/> vµ-.(\4l9J ;]_8$>vU0E#1&M{zVLrZϽb${%D>\jAN?%ՂG/Kdc%?q 4F_nkrř 7Q8.]xAfy +ڰ=#fI-&47p],䔺y8yl} +I@1~|a3+ Ff HXϭW6LVkꬊc~dkv XkUH^gD6AQ**뻀OѲLXUĨޮ%a7.MJD!(lȹNr=O\0i_ +LLgkgˣQ #=.$Ё`D[ bL1jBQ[$evТ'D~(GiYQ+"%4erԶ`),>J"Zv)y0ph$ف C]M2'kqlnڏqSXY]2Lʼn# ,nkǃ#V}u<([& - q]DrE3-v4~'43ܷE)sU7cʝM0)[i@(<ǻlUwq SD(VjEzT~j!As΅ZvEq}d[Bݚ&fQM l}?#BV:>bk1 +挸CQ2CXkC,D\Qb<ф]':Xtݿ {#Jn_PmU&&F/jAUw_\6_DeՍMaܓVʟt_GR\0M&O}╙˧o%[=?w/?kJ);aclcmō ++yu_'Ag&681}D< t=]pxz+֥8wOfX}=8q3'1qT`܄}𫥯6*Hb0#Ak=)% cNWP'%>'NakjOpXb3%s/\hϫ~pTWWI p'(u:a7S"׼tơNDožb $䪀淼ϛ ŗ5ϹZƒi|1 +|8xoA0\WVUIn\ӏ\^dg-nk1E%ZQEA$BIy5a%fx5LЊ96Gj(Zhڑ򖖷[B9$+&5-oXPL_J{lha]ɘu!j46 +Y +Y|ɧz@D""Êl|tDxa f^ xu,pDa,wp@V!c\Vy{<bB]6 Bx^CA AoEc!e[,~,|,nrOmzОTdjl=^;=*f:vӓޖ昛ώ|7TR!`hHA 2T]׻jͅZ8+"e&grA`ܓұ߰BJu-8yB6Dj`"/C +6Dy&9ς-}>a Ъ+4l ] +1W~Z=FNp72yd"s%B5}+`69 =eX,&b)-8Φ6ͧU8TmF.T!liz8wݫ|qfɒ} *Ձ/p!㶄V|V8B?Ik7򙦏_Hݰ9/w<)u*jp؉kȔ] l"RKǝRdފ;+=[&+-h24ld7~}62f{Ib=Eni4Ny'l3A;|gq +n>lHHui[AXMuų(Vd_{ DŸ#gCZ X rC)-UއN07V03PPu_A`|"JztJQZT6؏ +\{}v;PV1G`Ҽx:EaJv_}:LvӴysV@,6|͞ cz.#ZRTOǚcC9TWoKiܢ9`r-a^&tdI֢^ +ˆ&Zb)6]Med49DOעЎ3*r*5ᛙJ\]p$[?yꞋC=$?>3gܻTІo`T0dp`qwJ8zL%=p=060q~ͳF'0sisX0pOSV ۗvY1V?vv5,=O:km5͚x$xݻ=#rtR?um =-p )K~f c"HDj6>-L,z~SqIcNc5_ 5Ӹ~1#`Ïޅ)%mԤjyˏɉ_̵`74K +qQd:(L//_MlS҄(oUJ_2P=jzǔ=FȇH;^K+]owD;g~1lR^xHn;?]Dpnx.^!'CE!*zyb8iꓕ~0[|P廟ldv5h܎]>U:5? ϐ@q5v=-$Z#Ix0R5ߒrX_B]-?g(€"|+`| +,R{ ']Ed/W:mSy @ƤDz׉KifKG`{w*5)87]A4ڠJeOǘZTΌ~Ӫ unۿJLj7"́ +9v䞛5ThMs#P>>ѐ0wb_5f(|6vcQZ\X9%HK6]w;f;GMiʩF1٦\+H8ui]ߧ2#7~^.%d +XMX,m5ǙcvEu#РtAKJ7Ecm+yȣZƀq*PsXJ!.UN{,db&*(tԸ'ơ'+{v +R(0YT U8]w]종xËGEZ lGdӂEmf; @k,^20L]XaLN0(g#gq w(:$2 ]ɸQ:D Vdo@%* +[ٞ{6ZnpٸlU* ^P`U28嘡o~bhjS)3khR"@@J)joproby FiD)`.9gkct E%|.uA=";3x JKi3nYq)O5S.m\6Nx>Fbux, +ƠV v_]F=lS+gڝiܓp|Az_Ww`V/1+u!+ Nh }UC.t&A_t fعҽD+^Zl,ӡ6 YeiXE6Z2ؐ\q}Z4X/ͫ'ꗵT[HK{xVzl+kyiN1ԅosn+aj[QE~×[PE]5;Wl(< o,Cȋ*q$Xʕ~T DY0"o6=fS>;H >x/ʇڴ ஏ&)IX(MiʒlHɒkJt{G+Z3iWDJ ı׷b 5/(7s,0 3 ٿGИyd]g{y6a{;FaWݶR2ώަϑ1E3pš<3p A=f;گ0D8_3+Sl}W ZE +͠CSF&ifBn &~8\rB|io*:IƁ3{vyy`0d(?Q4rIOJAQi.O3:$xpWEI#Դ$&ŝ{%JSϝxuH62ʡ,ZV 3gi 8ūTPWྱm\vEՌ]re=bvB.'"q}V<`c)h`{[M>2@Vm0ٱ<Ҥ\ѩtq{WF-]#o8PKK41_ EeN Q1__[UWWxs/ 2**?b`C-Pܸ)!+n|\lȺqI]dz"Xߐk}C'1~Ãk;FgbE,F=g7ϮJlҍk=-ӝr;"'A:92҄DŽ}j'53<[-zï6B\)RI]4PqC +e?-6Z-D՚:&]'<`-/~5HIFtܘAAV׃Gtd(J}p¿U3C nYC4Bߣ9^-4շkԗf5U8P^#hExsY(#U),/5ѐZ=:P-r['L_ҷوݓfh=S*v)-+ol!W@lFe+>iJp0EWJ.ӮR)}{-{7QNwϵP?:3g" '-1<Њ? +EyE@YŒW0rI|WQ{g#}T*J<^呪4xNNBĐL.?C \؍r8ű떽m6WgD4Uғ; d']+8!줓&rL.k; U=A-,ţ?8E!̒ SG-'9C-aDN +/JOW$i@F>-CXa鲑f|vCT`3eU+֤KiXQ"H*39wݣv^(Qe.fjɦ$uXK1D̰LS)+5([y,)*1T{glh6s V|^1bbzni| GoYh2H}FF +ѹ2P|OvC\\O+b@Dmq*Ag?D.}Afj8-7?}j;=coEZ%hU.c­͔aÍ'0m8p,#ehIab? W] :5iIi~+fruU&=RĽ +5;sHP5lYΨYUR(lk;]JϬdzhazXM i2\6]tդ !D㥼v搐1I:D2庩n]o.dk G./nwi_y"-2{Vy.-ji@q*)S7rQF\n mUf7 +(7/ȪFUKSR.AԲ_ _oPNjcJRP _ p5  diKs@8򧦗@.lVIJGdPƝn ܪ6\k 3gMJhn^- +-iT4 ;7N +~a 91/#MM\#夑f:4UjEãetuD)W6@Mz"S{XRtpf K{GV!?":mu9|F3U4lRttP- +}Zzr ootn/\u,#23֍bM8mpRD|4UVC*L9&9hj,^#n%{8IvR]V)l7QA;S'zڣPM{#մ2$.=GQ@EKQY]t=swJƄ1VІ͆A~եWt68Q`H1K, J"z7 'JZLv>¡r&7ܗH3]䲱[y%zNM+Ud79#վ)/suxӚOIĠ-'RJքig7ž,-7ͭ*"l׊wX6^:Z M/gs$YIe+n8%hoҢ{/5qV; 6N)aQ`_[:H~$0趡ۆ68b*\pw@: .SJwElbٖU$:ÀK\!6D̳-Y+$,,ƿ1X9P;D>?+5T `HJx N.|!\? R0(_I,8b̶1װWGf0!U wq[gR$"dbc4 ^F8?5>@ sBVED?]We+]Щe;`ʳ8:gwlʹDg 7+:a\WB'|`AylEPöKvR5vw; Of4u =7t7:nU wy g}һN!@aN%Qxķ~Up|dțAԻ؅kh1M@!DRWn>ؓըj"G "` \Z1;,Mcm J5lyoӶa=]^ '0< ROvekP\,g nTL&Ͷ7%' ci0AnAĪGZ`y>T_}OqńBoSJ?IEw'{lQJև}F1}L?0Ѕ,lO\ɻm` +/^ބ-7=o{QmqF,LgҼ6y"(ٲX,m7{{M$k0a'P45ǖ6(fW}%̇I{"NBXyq8$$BemtۗVlD;~ [BP覩ic"Kl:kR)o LMܶrL2G!mԏ)hO,I+(q%Ԕ&eA+qR[qWp(%P[E1C =Q]Rˇ2D+A,k rDPjtJR"]_o HMauXWDu]>2tN|WNtnŔԐFcO_* +.r0$S}eY*&y+R]]kDˎ$r&$=[ PvBxcqZLru4#sųlF)sDGu6r:9=k]YeDA{!XcJy# j&=d2#Grꐙg|JZ X}hzrFzzC""6-C5 a+n}:qUӋmQҏZEůAW)';mҮ7[FR:9{F61[rېPNeE-{d.He _,әЗ\8! 2R7 sQi j?;/,ӭ`(8+\r"_(Wݟ B2l פaCqB)!e WwR e1FQz\l5ell(gX`Г ub끮*$JD[xTir'\ +X8vH4xAR?CZBCٞ~oe`Z `FͫNE8lnX6cB V+G"Lpҝ #ƋK-l LiJ`RHy?r*YAz[_F+!+!9Lja6]Jܖf~( XE)LSmHMH02oPڡ a,Wp񔬈p)fgD =X."!,0X3j-F+bfJ}y܃.=o\~o qwJ(g9$:]bi*#23'JC(iMh0T.[ N"W'RUZ}5vWa$ܡ!?͜.r TVNoɌӱn<+yG:o/u?^8}ly]ΐ5I{nueN +ȧ*ި $ނЅ |]FU |mZlЯvFKM|9p.M:^CĽ|Ta@;}6ґf.yzJߟpYGCu@UNs8Ut]@E&mAAiFِS bl8}SvgUbU>Xʰy vhv6>{/b"+/nW{HX_`i/B @ab@܋fKUAQT8mT:\O%DCw@hNur,7ɴVꨆPCKqLʼ3.A?BCdgfp|R^7T7=D +6_oPq2[srLI-~3?n?uY[alN~,<ψoT*:?*BzN,vI FecuKfJ߭deUWr!=b<#.J5-YqB5ed}0jcT +͉p;k yّ2٢եcdyHfZrƾ"=y{0;ZMUY aE"Md 8(7v/~QͺT= Tdӵ4|ޛƁ-f +QE4 >.Yr9 I]8ںs~DޛC ›'=*P;ќE|^z+;6Cl{AW@"]j 8,e֫qS'/{h{nIʎ'<.V^)w]o qp5N4cwH ) +LJḫVaӾ* h(P \Ȍ1r8F}$1a@"9&btܿxY>RK ;Ie).&;vI_aKNT`%lE›$L$k|VT Zʡob8ZȵMqHlGOzЈދ _Cσj%E rD>mi2EQ3*!뎠\ػsG $9@߱QC]\5uTNBk ܂ϊcMIfW?m2Qm=eA_YlB;S=e,= E4La,R&祿[oyŰHd0 9θ"fϠ )il\tR'2俙w=_$/5OD튪 +~i$hCΉHګ"D@cr'27'.>3^%xnܤfO=PTqh 1"(L7*'<ّnǤاI2Q&4A,ǧE'TeW `xI՝j j{W}}EL@n:zts/x(SYw]i(מW8sR/ +endstream +endobj +471 0 obj +<< /A 562 0 R /B 563 0 R /C 564 0 R /D 565 0 R /E 566 0 R /G 567 0 R /H 568 0 R /I 569 0 R /L 570 0 R /M 571 0 R /P 572 0 R /R 573 0 R /S 574 0 R /T 575 0 R /V 576 0 R /W 577 0 R /a 578 0 R /at 579 0 R /b 580 0 R /c 581 0 R /d 582 0 R /e 583 0 R /eight 584 0 R /f 585 0 R /five 586 0 R /four 587 0 R /g 588 0 R /h 589 0 R /hyphen 590 0 R /i 591 0 R /k 592 0 R /l 593 0 R /m 594 0 R /n 595 0 R /nine 596 0 R /o 597 0 R /one 598 0 R /p 599 0 R /parenleft 600 0 R /parenright 601 0 R /percent 602 0 R /period 603 0 R /r 604 0 R /s 605 0 R /seven 606 0 R /six 607 0 R /slash 608 0 R /space 609 0 R /t 610 0 R /three 611 0 R /two 612 0 R /u 613 0 R /y 614 0 R /zero 615 0 R >> +endobj +472 0 obj +<< /Ascent 939 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -836 -390 1796 1146 ] /FontName /ECACOO+DejaVuSerif-Bold /ItalicAngle 0 /MaxWidth 1385 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +473 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 348 439 521 838 696 950 903 306 473 473 523 838 348 415 348 365 696 696 696 696 696 696 696 696 696 696 369 369 838 838 838 586 1000 776 845 796 867 762 710 854 945 468 473 869 703 1107 914 871 752 871 831 722 744 872 776 1123 776 714 730 473 365 473 838 500 500 648 699 609 699 636 430 699 727 380 362 693 380 1058 727 667 699 699 527 563 462 727 581 861 596 581 568 643 364 643 838 600 696 600 348 430 575 1000 523 523 500 1385 722 400 1180 600 730 600 600 348 348 575 575 639 500 1000 500 1000 563 400 1028 600 568 714 348 439 696 696 636 696 364 523 500 1000 487 625 838 415 1000 500 500 838 438 438 500 732 636 348 500 438 500 625 1043 1043 1043 586 776 776 776 776 776 776 1034 796 762 762 762 762 468 468 468 468 874 914 871 871 871 871 871 838 871 872 872 872 872 714 757 760 648 648 648 648 648 648 975 609 636 636 636 636 380 380 380 380 667 727 667 667 667 667 667 838 667 727 727 727 727 581 699 581 ] +endobj +474 0 obj +<< /at 616 0 R /one 617 0 R /parenleft 618 0 R /parenright 619 0 R /two 620 0 R >> +endobj +475 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1021 -463 1794 1233 ] /FontName /BMQQDV+DejaVuSans /ItalicAngle 0 /MaxWidth 1342 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +476 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 352 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 318 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] +endobj +477 0 obj +<< /A 621 0 R /P 622 0 R /R 623 0 R /a 624 0 R /c 625 0 R /d 626 0 R /e 627 0 R /g 628 0 R /i 629 0 R /l 630 0 R /n 631 0 R /o 632 0 R /s 633 0 R /t 634 0 R /v 635 0 R >> +endobj +478 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 96 /FontBBox [ -1016 -351 1660 1068 ] /FontName /GCWXDV+DejaVuSans-Oblique /ItalicAngle 0 /MaxWidth 1350 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +479 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 352 518 1000 500 500 500 1350 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1028 600 525 611 318 401 636 636 636 636 337 500 500 1000 471 617 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 617 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 608 630 613 613 613 613 613 613 995 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] +endobj +480 0 obj +<< /eight 636 0 R /five 637 0 R /four 638 0 R /nine 639 0 R /one 640 0 R /period 641 0 R /seven 642 0 R /six 643 0 R /three 644 0 R /two 645 0 R /zero 646 0 R >> +endobj +481 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -770 -347 2106 1110 ] /FontName /BXGEVL+DejaVuSerif /ItalicAngle 0 /MaxWidth 1342 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +482 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 402 460 838 636 950 890 275 390 390 500 838 318 338 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 536 1000 722 735 765 802 730 694 799 872 395 401 747 664 1024 875 820 673 820 753 685 667 843 722 1028 712 660 695 390 337 390 838 500 500 596 640 560 640 592 370 640 644 320 310 606 320 948 644 602 640 640 478 513 402 644 565 856 564 565 527 636 337 636 838 600 636 600 318 370 518 1000 500 500 500 1342 685 400 1137 600 695 600 600 318 318 511 511 590 500 1000 500 1000 513 400 989 600 527 660 318 402 636 636 636 636 337 500 500 1000 475 612 838 338 1000 500 500 838 401 401 500 650 636 318 500 401 470 612 969 969 969 536 722 722 722 722 722 722 1001 765 730 730 730 730 395 395 395 395 807 875 820 820 820 820 820 838 820 843 843 843 843 660 676 668 596 596 596 596 596 596 940 560 592 592 592 592 320 320 320 320 602 644 602 602 602 602 602 838 602 644 644 644 644 565 640 565 ] +endobj +483 0 obj +<< /ExtGState << /a0 << /CA 1 /ca 1 >> >> >> +endobj +484 0 obj +<< /D (subsubsection.2.1.1) /S /GoTo >> +endobj +485 0 obj + +endobj +486 0 obj +<< /D (subsection.2.2) /S /GoTo >> +endobj +487 0 obj + +endobj +488 0 obj +<< /D (subsection.3.1) /S /GoTo >> +endobj +489 0 obj + +endobj +490 0 obj +<< /D (subsection.3.2) /S /GoTo >> +endobj +491 0 obj +<< /A 647 0 R /Next 648 0 R /Parent 443 0 R /Title 649 0 R >> +endobj +492 0 obj +<< /A 650 0 R /Parent 443 0 R /Prev 648 0 R /Title 651 0 R >> +endobj +493 0 obj + +endobj +494 0 obj +<< /D (section.4) /S /GoTo >> +endobj +495 0 obj +<< /A 652 0 R /Next 653 0 R /Parent 444 0 R /Title 654 0 R >> +endobj +496 0 obj +<< /A 655 0 R /Parent 444 0 R /Prev 656 0 R /Title 657 0 R >> +endobj +497 0 obj +<< /A 658 0 R /Next 500 0 R /Parent 6 0 R /Prev 444 0 R /Title 659 0 R >> +endobj +498 0 obj + +endobj +499 0 obj +<< /D (appendix.B) /S /GoTo >> +endobj +500 0 obj +<< /A 660 0 R /Next 447 0 R /Parent 6 0 R /Prev 497 0 R /Title 661 0 R >> +endobj +501 0 obj + +endobj +502 0 obj +<< /Ascent 0 /CapHeight 692 /CharSet (/D/E/R) /Descent 0 /Flags 4 /FontBBox [ -15 -195 1118 709 ] /FontFile 662 0 R /FontName /CWBTOG+PazoMathBlackboardBold /ItalicAngle 0 /StemV 95 /Type /FontDescriptor /XHeight 469 >> +endobj +503 0 obj +<< /Filter /FlateDecode /Length 352 >> +stream +xmn0w?u C%BHiH MU]>RK`[ y.j;ө6\ث0&NCik8J0B +pp!Y;p+^E90g趫Dk/¶zK$4Pr ɒRooUI'(?m}Nq n+&-PU4@EU 0?{l0Ƶ{B}Zi_o|gI +endstream +endobj +504 0 obj +[ 924 753 698 788 974 479 479 868 753 1092 977 811 746 811 810 ] +endobj +505 0 obj +<< /Ascent 600 /CapHeight 600 /CharSet (/A/B/D/E/F/H/J/K/M/N/Q/S/V/X/a/b/c/colon/d/e/eight/f/five/g/h/hyphen/i/k/l/m/n/o/p/period/r/s/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /Descent -222 /Flags 4 /FontBBox [ -451 -318 734 1016 ] /FontFile 663 0 R /FontName /JHZMPV+LMMono9-Regular /ItalicAngle 0 /StemV 74 /Type /FontDescriptor /XHeight 431 >> +endobj +506 0 obj +[ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] +endobj +507 0 obj +<< /Ascent 490 /CapHeight 490 /CharSet (/greater/less/u1D434/u1D43A/u1D43B/u1D43C/u1D43F/u1D440/u1D443/u1D444/u1D445/u1D451/u1D456/u1D457/u1D458/u1D45C/u1D45D/u1D45E/u1D45F/u1D460/u1D461/u1D464/u1D6FD/u1D6FF/u1D700/u1D703/u1D70B/u1D70F) /Descent -6 /Flags 4 /FontBBox [ -351 -223 951 898 ] /FontFile 664 0 R /FontName /FAOACD+XCharterMathMI /ItalicAngle -11 /StemV 82 /Type /FontDescriptor /XHeight 400 >> +endobj +508 0 obj +<< /Filter /FlateDecode /Length 671 >> +stream +x}Tj0+tvF*!'dMtJkHlc;Q.,th,y.{٫s_E뜛-'݌OZWgҷV6d yӔsgϤDԍ}s׏܍\ǺYp,zǣ!cf e{ƝU`v6;i+LR.&e[ە5YqfX;%u \x9 g`.,r,u=Ӌ3`+XK@C fg g.h ] BxfhǨ&ӫNҀ#T %, MtI +TD@J TS11+TR$e" c"edd+gJ?\,K~Lgp]L+O1Y4p8F.ᱸӋBwnj~6=? +endstream +endobj +509 0 obj +[ 606 588 604 671 546 509 664 712 312 447 625 498 839 683 708 542 708 602 537 565 664 590 898 569 562 556 525 507 394 523 424 292 481 287 269 514 275 815 556 502 516 512 398 370 333 553 519 798 477 475 440 606 617 738 724 675 780 632 726 813 834 808 647 621 533 503 563 498 540 530 598 290 576 515 581 540 553 671 576 521 572 559 548 779 622 728 754 507 465 610 616 706 567 901 515 551 551 0 595 287 269 499 743 572 396 429 511 516 497 533 483 538 539 0 556 556 556 556 556 556 556 556 556 556 506 278 278 964 964 964 964 319 319 418 418 636 441 636 ] +endobj +510 0 obj +<< /Ascent 692 /CapHeight 715 /CharSet (/equal) /Descent -177 /Flags 4 /FontBBox [ -400 -243 1032 871 ] /FontFile 665 0 R /FontName /OGYQFN+txmiaX /ItalicAngle 0 /StemV 65 /Type /FontDescriptor /XHeight 450 >> +endobj +511 0 obj +<< /Filter /FlateDecode /Length 844 >> +stream +xmUn:+Et=%@m&֑\d2ps,E61O?7vxE<\ooStscrַWcG?9$ۥ׬Jk +'k3w6ϗmDS7EşxP_9TJq#.RZ]3O(~|?Ox߿ ݝ i|'_tz!dۉֿaG/qyz?yY1fhthx_}t'N9|3.y~=W*! ' +{r%⚀R@2%eByl@W(# ICl@F<~$ <&VVc&jmX@) +04P#3GfN7&|3r1)YH W@X2^DL+Q+X!F!uE*KLuHN W'NY' ؍902aWL9&9(%@{Z誹#{Vص8k8FHj'n!h!CgW)lIE.3z]lcgwEژ> +endobj +514 0 obj +<< /Filter /FlateDecode /Length 558 >> +stream +xmKo0]P'!BHyJ, +  (h+X=7>&޷4s9ꛜf}mM&I+QA8۾ʷԱiI6TF羠1qRDRSvvsWG*4S1]򇚶 9JHeWZΎ, ;e Vy7Dz/j3P]6XYɶk5k +jJybo̶3z +:_bG Rvךбm\UAmϩY+lekdc.0 5Jp!xj!, F!B3őAH _%䋐*MPFGK;Zkfe9[Sc%5a]07:s6xi8pdXpN ̬9;{fl;K9<|qw1B=}/ k=6 _pd {9Ӝ_}pPn:FxM.%\]ը?RDo[B. +endstream +endobj +515 0 obj +[ 293 293 333 333 371 371 371 371 432 432 402 402 232 436 529 529 356 356 369 369 353 353 371 371 371 371 446 446 433 433 621 621 382 382 363 363 371 371 371 371 562 562 448 448 659 659 567 567 400 400 363 363 363 363 363 363 552 552 552 552 552 552 552 533 400 400 400 400 418 418 853 1255 516 705 945 1393 945 1393 961 1393 808 945 423 853 853 853 812 812 1323 1355 603 1255 1255 1255 1135 1135 945 1355 666 1000 1450 666 1000 1333 343 343 371 371 371 371 414 414 732 824 946 900 939 939 939 629 533 533 622 622 622 622 629 629 333 333 333 333 371 371 371 371 451 451 363 363 200 400 499 550 0 0 0 0 0 0 0 0 0 0 1900 2400 2900 1900 2400 2900 0 0 0 0 0 0 0 0 0 450 450 450 450 450 450 438 748 1056 530 808 423 726 1027 456 714 620 1020 1424 711 1096 563 961 1369 557 953 853 1255 0 0 1255 1691 1255 1691 1255 1691 808 945 853 853 853 853 853 853 1323 ] +endobj +516 0 obj +<< /Ascent 728 /CapHeight 669 /CharSet (/A/C/L/M/P/S/T/a/c/d/e/g/h/hyphen/i/k/l/m/n/o/one/period/r/s/t/three/two/u/x) /Descent -256 /Flags 4 /FontBBox [ -170 -300 1073 935 ] /FontFile 667 0 R /FontName /NMCNFZ+URWPalladioL-BoldItal /ItalicAngle -9 /StemV 114 /Type /FontDescriptor /XHeight 469 >> +endobj +517 0 obj +<< /Filter /FlateDecode /Length 699 >> +stream +xmTn@Cx ^"#&W)R CfqTcfޛ|{NۻItճ;urnn:];pvA= ]u7Ŧm;J޴۹v'k^Sn_ܯI߿;L觑Ҍo"@]?pjA{5λ#WӋCփנPPM5?#yitM{BMiY]0}j74"x{R@hS/s}y +ymDO*7W,^EY.3܄r33KֈKRlRza2# D4 #.$97 Zd[RF3Ld ={d葡_1`M@ڵd][!Dvbb]0aʼnX_~:,Rx( y]eѱԁ_[WS3+!Z af> +endobj +520 0 obj +<< /BBox [ 0 0 1162.08 878.76 ] /Filter /FlateDecode /FormType 1 /Group 668 0 R /PTEX.FileName (./v32_arch.pdf) /PTEX.InfoDict 669 0 R /PTEX.PageNumber 1 /Resources << /ExtGState << /GS0 670 0 R /GS1 671 0 R /GS2 672 0 R >> /Font << /C2_0 673 0 R /TT0 674 0 R /TT1 675 0 R /TT2 676 0 R /TT3 677 0 R >> /Properties << /MC0 678 0 R >> >> /Subtype /Form /Type /XObject /Length 6292 >> +stream +x]nG}ﯨG`; 0`Jc"0(Y-i4<`}ɺvUu5D-UŪȌKFDFF^~͏/n>O^V/߽.ݽ˫޼ݿ粒R^ +|?ϯ>6}R]~DVNU7\H߂>]_>"j<|;eQ:}WhvkilLף꫍}@& +gL@3fT pL~!$lD)%|r +FCp{s^d'#?9M`W&ѺXYE(0>j)N"ڂcTi'Wכ˿u(8Q +k ~+ɕO6%+Mш437*7˔p6*A |!OZF'= T%bCn-K(-MYWZ )em_&Ei6)`.{H2el1b *QiAIBG@fuւG?)KNP?73 ,Wo2`dbT k0jy:8ATo6&Ps "Q<4o}`6w5;u\}-퀝joo65*ˮ!iL~ИвoOaq.~o*JhXL EAUz@p ?@*% >NdTp$l^qFi0Q՟57MsQop׵Xke-5\Y/iJyUtҕE_^ZC=mO^a/PϬ,u"y8E^a7e̲eklsU;Kp*( (̵/nImsn }um}p K Y_<0sLvaՀ?;\Tu|1HɎ1(gCDgjk(]qU$ȩЦ0ZXMb":|p2@,^ٶlUTWNKK9hk~ 1WOvKCd`Y{Î48;u-l$ +Io*憢\vp^FYBsg}8p;YA4Mv +ӭa03Z* T!];C*S{+jYh4ܰe݃]F6n |* y(#%,Q}(̐/ +%_iQR +~ziJLFpy*gTu1{IpF()KEaD=N?{a$w@KY/QojBt}LQ9gGRG:Ad eaD=J?k%3.sQ/έPQޅ<;0g}ȺP57 dei碰_^XټKB~aw~|7^$1)rLM]6 +Ǵ&#=io f-ug2+)?-%y瞲QRЛq 9 k]FUi?uG2\Ki>lJ9iswnv DDOhfӫ5UqI`WetYt֍3]NdA4))t7Q`ZѝA/ZYyի90Wfa -S;W #w_-DTL0Uۿ "a \9T@m&{&\4pǭ2 ݃i&y\aRSh_IxM2 12@S&. S6\-|9}|woo +)q8 taU{1Hp]f>yuCݭovF &׭klj@FmS3c2=BH>;G.B1뤑o;%Tu 3V|uq{#Lgݶ;H&Clr)_|ľWl-U;˿Ux!?bVw[z~?߷:lޱaf4 Wlb3IhWXՙS3y`(Nf f(brqG'fU?Z/g}= {`ļ+p>zbZlming,fKWlFm[mm]碽RINO.o,`lZɄs(mLIKnj$<Q[E)q0uS:By;cqvayg9ܖiiNO3 8PD6>0/D'>4 |qNt |lO#>$IU}í6)%t7e**dT >n5(%jBuL $FS"ǑKڜפ*x;08DT >xp_V<9,CÐwP>eaj8upg|wBk %ლ>.˙U3BW+BT/M5$k*C%4;1\wi",w-Dpmb f>*R|{"Z\*ҳi!lq4p\LY'ؠv!= ա R Fz)'1\7A?jZirدT_4V붐'^}t|a~\ &$a>ޓէ{FxfB_wo6B_R0v՞S9XID\퉾xv}֔0۪2mMul;3 9~E^1 RܖL16Vig!WF<|zGeb|w _* wOkeV6鬊S#9D:=R&[xՅEH(ݰX+L2CK0U.n 1(E`A8=`¡$+Hg ҡ$C :+z˓>,J7Y'"cSp;IF?쩻xb"XKڻpmwN5e'aguS;O "53Ƶ]S$B=PCq0Dqpr6` Ȼ k Mi(E=6L&5a`:P7'#&̗: tJ=@(&{(X%܆y >,=Ý9*qz8QV0t_TmXBզwV8e^gGYp~50 !:GZQa0f ~3"vDgfXM* 3Vڻ:i I}Tj<.OLBjF{п/deyӸL-yj {÷K1q]=]o ޳ƙ ߨl/cxQY{.7 HX P),E+czmţ͓ۘ1Ճ4ڭ8;;Ʉ&VR ,w0 ;F0ihnH7=4j OSUia;xs +C +hOIljI1QJiuiD, E"+T/ؒ:?B,}L"P뗆" +WVHX$\W*U>ZY$3 CEW+Sؐ|q+zI^_xˬ+SUF֊c_d}su) "}}A, zynj}0p- 8}D p6BҏP]ap_rzOwƘ*}Ưݥl#oq?2B +أ.H +Ɍd FUǮ?WW6ПQA3x,/f='6y\j֮mw1'lib}Y UC1 \c[GxU٫W7۝a60)-~nq΅ǫJQIWw!uL+|V}d6B2K Цq8!8'QR z,+q +0t 3Z0g^ E a\ÿT +mw?xEdbQ Z]YcĸAut|͇#Ix}eT$EmWܢfU8jv)9Z&0 Qmpt!zMukL%"A_4 ^|}7li6Uine e?KV\4Ay`NHPv4G@-9]Q]3 +endstream +endobj +521 0 obj +<< /CreationDate (D:20251126173857+08'00') /Creator (Matplotlib v3.7.3, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.7.3) >> +endobj +522 0 obj +<< /BaseFont /BMQQDV+DejaVuSans /CharProcs 679 0 R /Encoding << /Differences [ 32 /space 36 /dollar 45 /hyphen /period 48 /zero /one /two /three /four /five /six /seven /eight /nine 67 /C /D 75 /K 77 /M 80 /P 83 /S /T 86 /V 101 /e 105 /i 107 /k /l /m /n /o /p 114 /r /s /t /u ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1021 -463 1794 1233 ] /FontDescriptor 680 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BMQQDV+DejaVuSans /Subtype /Type3 /Type /Font /Widths 681 0 R >> +endobj +523 0 obj +<< /CreationDate (D:20251126173931+08'00') /Creator (Matplotlib v3.7.3, https://matplotlib.org) /Producer (Matplotlib pdf backend v3.7.3) >> +endobj +524 0 obj +<< /BaseFont /BMQQDV+DejaVuSans /CharProcs 682 0 R /Encoding << /Differences [ 32 /space 36 /dollar 45 /hyphen /period 48 /zero /one /two /three /four 54 /six 56 /eight /nine 67 /C /D 75 /K 77 /M 80 /P 83 /S /T 86 /V 101 /e 105 /i 107 /k /l /m /n /o /p 114 /r /s /t /u ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1021 -463 1794 1233 ] /FontDescriptor 683 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BMQQDV+DejaVuSans /Subtype /Type3 /Type /Font /Widths 684 0 R >> +endobj +525 0 obj +<< /Ascent 743 /CapHeight 679 /CharSet (/u1D479) /Descent -217 /Flags 4 /FontBBox [ -154 -240 980 898 ] /FontFile 685 0 R /FontName /NNFQXF+XCharterMathBMI /ItalicAngle -11 /StemV 124 /Type /FontDescriptor /XHeight 400 >> +endobj +526 0 obj +<< /Filter /FlateDecode /Length 702 >> +stream +x}Tj@+zI1h0CN$$~0{ݵn~aQBs[w"~<4MR׋' ]L{i|{v]UwHvoǡux?x-}Y-8Te6쟉̜oN]G]YWLs VE\_a,(rTVE;ʎeޏ})Ϯח]u͆-îo?);g-wvM6Y#Ɲd65z:\4[L~l4!Ҽ.trwl8߲Mm]Qr> +endobj +529 0 obj +[ 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531 531.2 531.2 531 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 531.2 ] +endobj +530 0 obj +<< /Ascent 599 /CapHeight 599 /CharSet (/A/C/G/K/M/O/P/S/X/a/b/backslash/braceleft/braceright/c/colon/comma/d/e/eight/f/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/period/q/quotedbl/r/s/seven/six/slash/t/three/two/u/v/w/x/y/zero) /Descent -222 /Flags 4 /FontBBox [ -451 -316 731 1016 ] /FontFile 687 0 R /FontName /LCCNSI+LMMono10-Regular /ItalicAngle 0 /StemV 69 /Type /FontDescriptor /XHeight 431 >> +endobj +531 0 obj +[ 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] +endobj +532 0 obj +<< /Ascent 0 /CapHeight 777 /CharSet (/uniFF0C) /Descent 0 /Flags 4 /FontBBox [ 0 -121 1000 879 ] /FontFile 688 0 R /FontName /LSGOSF+gbsnuff /ItalicAngle 0 /StemV 333 /Type /FontDescriptor /XHeight 0 >> +endobj +533 0 obj +<< /Filter /FlateDecode /Length 203 >> +stream +x]1o! !ݒ( M^+u%`NH9|ܐ_@ ~:ChGWMqx 6olTǒiGh U%o}# v/Fk UloWMLU鹐Stjs +endstream +endobj +534 0 obj +[ 1000 ] +endobj +535 0 obj +<< /BitsPerComponent 8 /ColorSpace /DeviceGray /Filter /FlateDecode /Height 1024 /Subtype /Image /Type /XObject /Width 1432 /Length 22498 >> +stream +x \U{B3cfJQ9[dib9ӵV+:_\[bK7󏽿fn|ojd9 (p/ /?.Zz=>#y=#\XQRdE +m`z+, #%_HօALS\_܇;봟'{k춒|'vl{稭olv 9l7i*o8=kgj[{wpԵ\_GL/(9}h?^:!~jOot-l#61 t]_F/G7{JzR)c>[TVhgnr[CjԊTQb9Vc(eP*7hWz[ғ5rlmulIngAõ0U.XvCKgA=>mKmv`;V#<Ɓy{8|}_+Bg}WAۏ6g6mw_鞍ح8/S-Ɨe~6{iUCcOzkl%ytPy {O{kl9%N(-=_>o3s\rAu:/ +H;OS6hiܬ^}w߄q1j1 +N*.WPqE~bCw~@i~.Wz1 +kj Yȯ&1.v~Yk+ʶ9 +|{v\{ӫ@^{Cc'tj(vE6b+8~r.gγU1>Ov2ۻuh~ ~Z"\Ǩg h|1[pU7ɱshHUm^}o8`ˮ6Sx6P_mU?+'ߢڧleۡ}.k Ĝ9 vrزkg E^i.o)i9 @Ў.L29l@.> O xX$Be0-O}řs_=ų݇wgNYRm c]V$4̫-eT#,~i] .kۗwƉ ih>$>O 1m;q*5FM&l\l]6۸"1OX[|kj7p=?Ӿ"+˵IC9[bi^Ѻ^{?g `mS2dQa8gHĆLwz;JxK{ +ɎڂrQn v^6Kd6K aWLC׆tx]dЧDvqtЉo|Yk{o ɞ_r+7x2/q,^RBn>|ylt`G..yC==$?s>_E|r<8C6o잹7E:}%LONIqZ+ u"7&;ve\Kc಺u]e+7cT}.V}H̉0Uⷾh/AV?5l_s%o"5mߟ^":Qԣ=yE}J-橴"S_Q]#M]v_䞓k ^̛\&9^twt9b돨;K=/ե#Rpvֽ?~E.;ɚ6v{{uM+}Mݾ}Uu/!Ŭ/77]vIX.ztG˯ϥˆ~}zN=eƾߠޜM+y )z>tّ'r0kuoxa1^]3Fdra]SM]B h@Z44BpQ^zYWA]]/.] t2z1K.] t2jK.] t.z^orsv@QE,]౻@~/zC]D#$$*$t]qIY-2c{y͒DdIf2<\lKEƹhOEL%2{*f2e.O{A}需Y cr7^^^]WK.v?ro9^ tۤG凍|-] Y+z2ey NK.v}v C/] nZ\Ԋ^ t.z2e@.ct2e@.t2e@ыYF..] t2jK.] t2vK.] mQrrSDf8 om:t2oqu$I +^ tηZN,L![Cl^ tΫZNbIXR}'cN t OȐ3^ t -R҃y t VtbW;t2wޝq&n+t9t2e}e@.]F-zMov.]cNe`>ډ^ t {G;8'] eG;K.Cc?ډ^ t {G;K.vOh'z2eD@.]]e@.]^e@.]F/f/ t2eh^j=/.Y tR턜H!Q%Q%@0/?Q;DdIf2e0L[?%+Y=o֦@.|?cJe`Zү̢dО4e3@e=!#N5mI$z23*֗9잹I$z2e0D.]#ힹI$Ae ]vo^ teýI$z2e0D.]cힶI$z2eD@.]]e@.]^e@.]F/f/ t2e˨E/] t2eE/] t2e좗.] t2eb.] t2eԢ.]&:k Z䔢Vz2e0@m+>ž^~dHY<t2vj3[otr0L?t2wKEe}*BENڲFK7H,nf2e0To#L.C@m^no! trUZ1e`<6\1e`^߇bD~f2e0LBO7~f2eD+ t2e,] t2e˨E/] t2eԢ@.]]e@.]^e@.]F/f/.PjI~"2&:tTo*,o'HϊM<@yNF/]U7lƁ{K!@(ҧ"T;vGd.[]s w^ i/h?c +?,sk.{v^ ?3Teg +cJtij}ӕ~euOŲkdeX\-cO(ryvBn]'.CE.] t2vK.] t2z1K.] te䲾2e@.t2e@.ct2e@^ t2e@ыY t2e@Q^ t2e˨E/vK.] t Kw7&.]톺#R珳2] Zd mi2] M]*2.C]eNNW*D1k^ urX_'l`뛜JJTITdI$76M:®ȨK.v1ý +t2m7uȸ maWyz2e.xp +@!1BjK.vJ"Յ;mjO=EQRE^ ܔ"L7J+3z2ZS 9C;%pLEjtNoqD)^L.aj}o0KVv;...]#"1u6@yD]#_g _^ t Px*yt+gK.jOYT#'Dcv t2e}eB3))~]MZ3ݳeGiLpS69ظv\]/]F-#+`I&)~IdN +e^ m-{CA2wpUM܁-]rEQ<ڻXv O-];s* Xd+4{8-- +o)J{pԶ{n{}z Esjˉvk+eg%eey<.n֣J"K"[-amem-\ᴴ+<7^m%ΑݯE/뿋ǖ_T!S[#1$M_j[HB[{D]ybvhW+?זv- }8wvۨE/µKenYH+Rj/ݞ=I_ZV .X3i]hk֧=eأ9IZa+[RpZ\[{&}8gv۪E/µ( + ݲ֪%=7[Z6Z[oڙ[-ʻJiރRKV.z6 +_h/$Rn]|BtpۘԪBu/_{Wj@:zϥ]2x/\o[o 9_)ָ:Y:nMt>_n_e;ysBB[UY KC%~O>NkKW^m%΍ݶ=vཀ߶nhUW+_voϔukgWB]$ڻxN焖,6;_~HR+=֖~ɜ.+-9v.z]uu`E Oҭ*^.?P r'$e.?fݠ FI)MڗvL#e3%]Y7!;tU%)CxOY5Q~ },N\7 \ T#NL:~[ʦgX9 Znn};Jʞ2#o^.lt^. 8_ } [2V)BpW9նݘz0V9ro ÿ->"@3~^C_ͬ`pM<]E-]c쳈\,.6tg}&Ǚ2=tg#LuNQ[v}hy%y =]q {/8v{ORtW[j]wBG+_6=)~hzdE/Uy*TV>h{ԟ*}uu/xxM>".Td_ܷ_OR/z=г!J..EGe+BwiL<57tC:q{^k+ա{{_MegK]dҬ VDuiyzqx0KѮv`P#KLeO I7ı\vyY=oG|9?P|btHt!WYDOwkt<{~`ərEc&Jk^{S:W<Ѯu2XJY";{!"a?DaOkG N^x}c?2;9RGev%iEWieQR}JcOX}w{Oo΍׉df\®[˼Z.yCq| o }x{}=olLcz,T{./d.I)i9y_[#׋FYHH}i疫K }>s\XTuuԡ{㖭ô{[UGvu!7{ܣQmtMt~dk9CkO|:a"Dz_4W_ jպxzrD2.SWx}N J/U]b6 uݓU?u/ͪ'uwY'rdCM[NFPiLPOelsSi^]yҮʺKdfop/堑?_̫T_Wjϗ7\}Q}$|)>;{|9m稻iۛuy56Q-yVd}"\"U#CoɡuyЕEOd7to4,zUһBOt &I.t9S[wWk$C#=cQ7cۇ"^/(s_o׮SDwx"lΟ  +o;WTS1Q"y|TrϷj꩒=]59cdRvM;kS}J֨‡T7Z%'[ec}'r?+\jtoz0aHm>5q|G#O [{[q]XKf+Ni&_* :0NC.c%T:.r* l:Xߛ`RV׬H4BpQ^zYWA]]/.] t2z1K.] t2jK.] t.z2e8v { +__\<^dt2`7aOTr"DDEDʶU.]Y-2c0v4mȒ%ep.q[e,S֊ [?fce`DWW..]1OYw t2l7$._.ct+*,KA/] FM)r͔yNsR+2eL@.]]e@.]^e@.]F/f/ unCt2u"e@hAY2Ml,] F}m`cw e0]~ R7ke(EJz`.]uU\ׂY t:-vezYWAֻ]d9Qbe1z2e0No.">oA/]Vꊏ' #:ȔDk>ѨȒH6ز6elCV̘^z ]6]XwӖ,I^B/]@VTd\{9cI[hOlzEevԤ"V.CtylUėՏNX_&rUZfK!1F>)3&kǠDjJ"eW3*݊v}bcDʒ(}ep)E2oݯm!7aw<^3}:߾Nž-u8+I;%1 t2c׷CNYxƿ]@8|Scוjl7{ trXws?zIߏ^ t Ǹ`Yٱj}Fzz2e0nXI\{Y{'^=;t2a75Svyx1;7Q(z2eH@.]]e@.]^e@.]F/f/ t2e˨E/] t2eojz w]K.qj}A%Q%Q%@0Mz-Y^ t SݐJ,:KdTv4D.C tylտ@y;zt2ַ] Ϩ(e`ZW"8K.C\] t2eԢ.] t2 ̮ODnLEY,2|ނ^ t q`?=Ѻ|4g0IZ+2l%_b띮JT \ A名Z2_k뛮J`eyۛ1y ^t]v}_|YJ(}g+r ]wW)`;93v9*,] ^3chs5@h0K.zUO7,] uE.] t@.] t@.]Zbt2e@^ t2e@ыY t2e,#t2e@Q^ t2e@^ t2em"9ݽtwcܜBE^ t ꊏ'jK?J{ʕ{.'.]cY-2cvw-t.].. |SԵe2ۢ?fce`@C6ƺWt@yۛ$]>#=t\mLUN) +nXI\{Y}Cndelc:nJk򬣊蘝(t[mI/^ 'mY72e.@!`1K.j޶zinʼn@8޷}P u.]/ t2e˨E/] t2eE/] t2e좗.] t2eb.] t2eԢ.] t2jы]e@.].z2ep>&:nL,]{ڀ,Db#:E2l +m:MM^xFL!6`C~^S ԥ"2ԅ˓l6]{ڀ+RDFɺ1VxL!HgtǸ`YٱI <9oXI\{tiW"zM1xS\3e(L!6`g +o^^] ^ t2eE/] t2e,] t2eJۙH^ٮP٦[y 2xͣ4l&)~ l\ ӋZF.W..$\Ĥs2r'q2xS/@lO_E =݋zK9D)^)睹[劢yw@4[vUbe yK WhpZX[R2^m%ΑݯE/|O_E@\8wދzj?OJ*O[xi]80GDEDp[g%6O?e`˪ZiimWPynN+RK#_C﹵^lZ7QZ0Fb +eI"lV߅o=mK_y^,ѮW8--ZZ{Jm/qQ9^kw[ vWe"={m۳'IVD%|~& mY"ñ{4g0IZ+2leKjNk}7ڤ6n[ce^vۢS[![ZFqKUkFV£wT;}XePyV8T{Wj~s6p۪E/µۆB>VD^ +mR(cZRPKZ}J _Gﹴ^kп + 9_ًzKY:nMt>_n_e;ysBB[UY KC%~O>NkKW^m%΍ݶ=vཀ6WqCc]݋z 3%z](hPC.ި8f9+8˵M`W)ʰpf_A2'Jm/q]9^n@df~rcXB`0t + ?Tcw:I|ǶGyY7tRre>(HL8zIW z`/]U{AE)xI%,^hV z`j|C_."+-z`'<ሓ.ߖ2C+Vz`#{排gs?L[da ݠ vd\zXa X<۷qW^li'c( c$h? V74ʵ>m p~^lc36d뱍uuu\/_lMaܹ׳b|unwUwP'׫vOex瑱z9YUCu z[蓉yHzulۇ˿>tJWvP]b}8Lݽ1xѨcC>vLmf3}JoiR{CCr2u(Wnljn[$reeKoZ]ݲ O-)n\\g]k]G lS/=SxJ? 6,*?=LP_!Cf}~Lommл}M=+Np]2)_^SbʣYX!2Q;&K:>i[/"_v޸륕r/#kȂ䍙!nл\1L""{n@䗎-ߍaOk =Wԋw{Fj]P $UUB.GU KoмO_" VDuiyzqx0v3"/m~ Vڜtyl~Y}X|V*)ҡbHȖߪ$e\v`dzlEbNogWK+2~kq;KɌS<3<]^ 9C޷'#ܻEB]+/DU𮇺|{ծTg3{~*rF64;~u$vօ |]M=I e\]xo'w9kh_!2yN.UdbӸKih>9._Ya4W^6R6C+=YU>MnV7{Jc${呺K>?r1Tϯzc~ghؾG";֛{ԕ7Ӯ*.P@?TmJm+[vu(7/T](Sv+Ԋ[Gp݆ʚc<ޜF+TVr:\It}Ki%kZiS69MЭ6eo,S^/^J:˳7^,=}Q2s3Kf6K .ϗ_#{՟/|y؁BjaWAr\vަ ߻E~N*}/.l\y!5_^R{Wvr-gtkZko62ZMyijf=R>^g:yv?z?Nys3RI1Ok`">: <^5F^k$lVig.;RzU1WyFƹ>2Ϟf;~^2C}N6znȮɾAotrx5|pHߗsEݳG\g4Bsn^3z-M8zL9W|MugVe\,c/פG5ߏa5>yG<i F.*ы]]/*Ȱ1p^e]e@.]F/f2e@.]F-z2e@.EoM.tFZ(E"㋋cj^';͉"36^stݍI^5PW|=ѽ2*,lЫy"2#I[\]n$dA7K%i z^V鋫rυoLHF.VP:KdT&$cK~k.||O.%d]uyƺ2CE~.D]{Zky<1Bj0^ tPR)FB$vO6{z2ȇ@.]~.L)]t߮wNv(%AQz} Kȉ"u \ a7xHbkOԏe AbCi貉>-Y"'mY1K!6}xaWy4 ʻJ//u2SE~\2 7< "N} .Cckυ%/nёVVY o7xDIP^S~.;,]` |e5e]eR@.]]e@.]^e@.]F/f/ t2e˨E/] t2eE/] t2Ewݟnܧη"K.j}Aocde`Z]Y\e0 ep-cgݜ"] vylU2z2e0jc2SǠ@0]r^JPzYSe`Z.9׶O7~+z2ȇ@.]Ze@.]]e@.].z2e@.]F/f2e@.]F-z2^~䞂E,]`D[k +%DJ*,,]]DF}$vk+fiKDa.C߉c*}qAoCߒ,Sg̞Y oiga$cK5UWW޵옓.CtY5< "a.C0c0a"%/nQQv}7AN[Jxz1Fsf2]]lPϽW$TQ.]>;LyK =+Jf*z2e0FWo t.],c!Y2e0cVX砗.]C1F}v@^JPF{L;5F, A/] F~Dw~EY!cO(ryvB/] 9rY_t2e@Q^ t2e@^ t2eE/] t2e,] t2e˨E/] t2eԢ@.]]e@.]^e@.]F/f@.]ZeFɅazL9(+0k^#2x y zM$^PW|=Qr~P:LyKJ"K"e`˪k.&EoPZd l6>*Wo%"Kbv^st4tfc}e`<ƣu1|%z2e0@mXI\_FhOŲe`ڔ"L7J}PHmّj'e#E.] t|zMT"㋋c.C0 ri>xz}M7v*,,]#:Ȕ^^v.-YY oo#uzKޠ\XzEe,S@]Nɘ7xrUZﯖK!X<6|tU tpc<>#rWDFFFa.C ޫ] ڛyݧ!;uIkEg^3u9dcl.]F^c\t$11`a%qer5;8(5&͟%V1"Mjbշ"bFJ,AKԾDVMhZb 6lO6Cb5 I,N`H2}ar{>΁]\}5_UU~Q +7(}y~ x.&we2as^|}fTlvHK:ӗ痌ޠaSޠE/}@_2З^2З e/}/}@_2z1K/2,CSc=q<T2>x?C`]~zQK]Z*좷8!:|K.O0/sѕ186t]1[̣3eĥj@DfT0?.[ZwwMu/p5RaiNeF(e|iB!^.z)۽1]I&Y5˞61Q֐+Q~tJgDODw.Ѻ){{-i/ieXOsBR' ]R!(׏P=̺Rh/ϞihE,b=Hs;l\TOϮG>E/^j/2}!ř9!׬^[EN{IgywjwIN? i:Vaָ`'!|UvK׮wڒUNnMZuE/^J}}nB(wXأ߾ozrnGQhůk`'uI<.DvK׮c0g_syܓ(k||m?)=؉ȖsED>λ hjKJ~T܎2[+oxCl<:l,٦hL$FcR}*|Kgn]/_~uwT"G`5FsEk;l֥ +z9Ov.z)ސ&{WvaipPf + K֏WJ JWb53r^.,G濌LO̘<{\Rd A/`޾Ra}"fȡI zX> +endobj +537 0 obj +<< /BaseFont /BMQQDV+DejaVuSans /CharProcs 689 0 R /Encoding << /Differences [ 32 /space 37 /percent 45 /hyphen /period 48 /zero /one /two /three /four /five /six /seven /eight /nine 66 /B 68 /D 80 /P 82 /R /S 97 /a 99 /c /d /e /f 105 /i 108 /l /m 111 /o /p 114 /r /s /t /u 119 /w 121 /y ] /Type /Encoding >> /FirstChar 0 /FontBBox [ -1021 -463 1794 1233 ] /FontDescriptor 690 0 R /FontMatrix [ .001 0 0 .001 0 0 ] /LastChar 255 /Name /BMQQDV+DejaVuSans /Subtype /Type3 /Type /Font /Widths 691 0 R >> +endobj +538 0 obj +<< /BBox [ -15.238613 -15.238613 15.238613 15.238613 ] /Filter /FlateDecode /Subtype /Form /Type /XObject /Length 140 >> +stream +xm;1D{N g6^c(Rfm&Lc)> +stream +xm;1D{N g6^c(Rfm&Lc)> +stream +xm;1D{N g6^c(Rfm&Lc)> +stream +xm;1D{N g6^c(Rfm&Lc) >> +endobj +543 0 obj +[ /ICCBased 692 0 R ] +endobj +544 0 obj +<< /BaseFont /AAAAAK+Calibri /FirstChar 33 /FontDescriptor 693 0 R /LastChar 43 /Subtype /TrueType /ToUnicode 694 0 R /Type /Font /Widths [ 252 525 525 525 335 226 623 229 525 498 662 ] >> +endobj +545 0 obj +<< /BaseFont /AAAAAM+CambriaMath /FirstChar 33 /FontDescriptor 695 0 R /LastChar 43 /Subtype /TrueType /ToUnicode 696 0 R /Type /Font /Widths [ 611 387 606 387 483 609 350 264 350 612 584 ] >> +endobj +546 0 obj +<< /BaseFont /AAAAAO+CambriaMath /FirstChar 33 /FontDescriptor 697 0 R /LastChar 41 /Subtype /TrueType /ToUnicode 698 0 R /Type /Font /Widths [ 440 205 351 606 720 652 698 657 662 ] >> +endobj +547 0 obj +<< /BaseFont /AAAAAQ+Calibri /FirstChar 33 /FontDescriptor 699 0 R /LastChar 49 /Subtype /TrueType /ToUnicode 700 0 R /Type /Font /Widths [ 855 525 229 335 229 306 673 498 349 453 226 579 525 527 303 533 303 ] >> +endobj +548 0 obj +<< /BaseFont /AAAAAC+CambriaMath /FirstChar 33 /FontDescriptor 701 0 R /LastChar 35 /Subtype /TrueType /ToUnicode 702 0 R /Type /Font /Widths [ 983 584 606 ] >> +endobj +549 0 obj +<< /BaseFont /AAAAAE+CambriaMath /FirstChar 33 /FontDescriptor 703 0 R /LastChar 40 /Subtype /TrueType /ToUnicode 704 0 R /Type /Font /Widths [ 371 727 649 440 205 351 606 767 ] >> +endobj +550 0 obj +<< /BaseFont /AAAAAG+Calibri /FirstChar 33 /FontDescriptor 705 0 R /LastChar 34 /Subtype /TrueType /ToUnicode 706 0 R /Type /Font /Widths [ 252 226 ] >> +endobj +551 0 obj +<< /BaseFont /AAAAAI+Calibri-Italic /FirstChar 33 /FontDescriptor 707 0 R /LastChar 44 /Subtype /TrueType /ToUnicode 708 0 R /Type /Font /Widths [ 416 513 514 514 335 478 514 229 447 543 517 488 ] >> +endobj +552 0 obj +<< /CreationDate (D:20250917061516Z00'00') /ModDate (D:20250917061615Z00'00') /Producer >> +endobj +553 0 obj +[ /ICCBased 709 0 R ] +endobj +554 0 obj +<< /BaseFont /AAAAAK+CambriaMath /FirstChar 33 /FontDescriptor 710 0 R /LastChar 40 /Subtype /TrueType /ToUnicode 711 0 R /Type /Font /Widths [ 440 205 351 606 720 652 698 657 ] >> +endobj +555 0 obj +<< /BaseFont /AAAAAM+Calibri /FirstChar 33 /FontDescriptor 712 0 R /LastChar 50 /Subtype /TrueType /ToUnicode 713 0 R /Type /Font /Widths [ 855 525 229 335 229 306 623 498 479 525 226 579 525 527 303 533 349 303 ] >> +endobj +556 0 obj +<< /BaseFont /AAAAAO+Calibri-Italic /FirstChar 33 /FontDescriptor 714 0 R /LastChar 44 /Subtype /TrueType /ToUnicode 715 0 R /Type /Font /Widths [ 416 513 514 514 335 478 514 229 447 543 517 488 ] >> +endobj +557 0 obj +<< /BaseFont /AAAAAQ+Calibri /FirstChar 33 /FontDescriptor 716 0 R /LastChar 34 /Subtype /TrueType /ToUnicode 717 0 R /Type /Font /Widths [ 252 226 ] >> +endobj +558 0 obj +<< /BaseFont /AAAAAC+CambriaMath /FirstChar 33 /FontDescriptor 718 0 R /LastChar 34 /Subtype /TrueType /ToUnicode 719 0 R /Type /Font /Widths [ 983 483 ] >> +endobj +559 0 obj +<< /BaseFont /AAAAAE+CambriaMath /FirstChar 33 /FontDescriptor 720 0 R /LastChar 39 /Subtype /TrueType /ToUnicode 721 0 R /Type /Font /Widths [ 371 727 649 440 720 652 767 ] >> +endobj +560 0 obj +<< /BaseFont /AAAAAG+Calibri /FirstChar 33 /FontDescriptor 722 0 R /LastChar 43 /Subtype /TrueType /ToUnicode 723 0 R /Type /Font /Widths [ 252 525 525 525 335 226 623 229 525 498 662 ] >> +endobj +561 0 obj +<< /BaseFont /AAAAAI+CambriaMath /FirstChar 33 /FontDescriptor 724 0 R /LastChar 44 /Subtype /TrueType /ToUnicode 725 0 R /Type /Font /Widths [ 611 387 606 387 541 483 609 350 264 350 612 584 ] >> +endobj +562 0 obj +<< /Filter /FlateDecode /Length 113 >> +stream +xE VAPOd0j[ +E:`*0%7!T2=u6=!O:r XGHl?xnXTILu`) +endstream +endobj +563 0 obj +<< /Filter /FlateDecode /Length 279 >> +stream +xEQq0g +F0d{z}+M!,kX=g'?" +'HH>k0 C[+2blԸFd쾀e9 +a227np(-+uAweȜwMkJqTs]LQ}lx+%Yb7O,'E XX,H!Ul[nFŕt}R}>k޳կWDy~jVfɾi_M7Wx،ff؇2|!lG +Qm +endstream +endobj +564 0 obj +<< /Filter /FlateDecode /Length 247 >> +stream +x=QKj1 @!;Rxr=bٖS'/1ŷ4 #B߳@vNnL" +?&ODL+` Tқɏ8D*/ +=(KɛTEI"Y6.Ls ZF)HǐVc-8E&>f$ls1{|h6"h.-G3H|2jDo5Va7:cc)3&9}X~V +endstream +endobj +565 0 obj +<< /Filter /FlateDecode /Length 170 >> +stream +xEK0C>G`~IErmzc@N:hH1 +)zPI{h93`JJBJdrvn[W@3a3׌U`} <=׻ݐunA6yꭊQmuG LM&+ sC5?; +endstream +endobj +566 0 obj +<< /Filter /FlateDecode /Length 112 >> +stream +xMK 9` |~70PԍqxlN O|eхHF|"6&U&Y&MkjRaMlMKRgH<\}x?np2Q +endstream +endobj +567 0 obj +<< /Filter /FlateDecode /Length 255 >> +stream +xEm0 DbX8rpf >[pH RGw_jo~W#+PQ|-bj;{/T6\-|T濣S'$f(O\ j6j^R$d½b@!D!G'=ܐ`Ȁ5PL:`lI3y«jfcq"M>d,qnA[ icL+7~'؞[`mULPFg؋f58.kh5Icg?] +endstream +endobj +568 0 obj +<< /Filter /FlateDecode /Length 112 >> +stream +xMϽ )Q'KEF=3 *GGJf3"6%S&)KSl [a`> +stream +x31P0P01FF +F +)\`~.2T241@0 ,d@CXIc# $)L΀2R: +endstream +endobj +570 0 obj +<< /Filter /FlateDecode /Length 84 >> +stream +xU 0;S0>x <5$EdpG1qTPPD/r) 6ʣ.x\zf`= +endstream +endobj +571 0 obj +<< /Filter /FlateDecode /Length 118 >> +stream +xUM ཧziQhm<ac_Nel1Uʂj)ƚihB>?Y3 +endstream +endobj +572 0 obj +<< /Filter /FlateDecode /Length 184 >> +stream +xEu0 C廒%P$㼼9Lf96@Zi e %?s%/yZ +B(P)j +D{,u)},s+HA_gnq­&m7=:`D}85q*ބeS$j+%vH =aj4ܭ'h"T{> +stream +xEQ; 9yf߾)oWd)6-gڐ.^.-Hk L%JvZ*@ćxn]ҁDnU)n *!&֩mLtK⫙vmlz`/ɺSB i7;zDm֤pȲs4çjf14{Kg>^f`Ӷt3́my!Qn6 ߽k?Z&\TɀC<{<+x0?ykd +endstream +endobj +574 0 obj +<< /Filter /FlateDecode /Length 352 >> +stream +x5Kn$ADy +.Ryjdb|G, m&S֒:d{|WyPQt=Ex]rRaGN*<#f!6|]ܢoΖRz)fJg K1r}i[Q/r-uwyś6TfY%U锭S-,ٸc$)361 +p-z I2TC,/1IpzPlPy_cYlYmYUk[Vlk1)\Ql6,Q|a?xziXJg ۳g +gc7$ʜӰ.KԹ9YށqvjP;Gr3{ +endstream +endobj +575 0 obj +<< /Filter /FlateDecode /Length 92 >> +stream +xM ;S0Xܧiz_T/ɧƌⰃjÓ| ajZC;-#/95i&XmS>$ eDOn^U[#* +endstream +endobj +576 0 obj +<< /Filter /FlateDecode /Length 95 >> +stream +xMA "4QE4=_+ZUp࣌mDj|Fr|&Aw~Q.Y!``r`5LpYFX,gFkt" +endstream +endobj +577 0 obj +<< /Filter /FlateDecode /Length 121 >> +stream +xM10{dSEi`YEiQ |55& +flnKHe(P/_`|-A s»(uхn0?پ- +endstream +endobj +578 0 obj +<< /Filter /FlateDecode /Length 313 >> +stream +x=Kn0 C>.0}.ߖT.2$HWl*/u)KIwґz]>fB}>E!ӤB^%KlV547**8#N*_摂OmsbZC +sd BBk݄p '&!!B#0SOqP/kh@y@ x +endstream +endobj +579 0 obj +<< /Filter /FlateDecode /Length 647 >> +stream +xMK\1D +oJ|l(dӜ;Rm(>6sTǶ{ղƟv|nW2dyb_m͑#oLZnpR7ll(8 r66 yZ$7ȑMGE`F ës[(vPْƷP+1z5|_`<Vt7H{ƈM3ۆv <|]bnq,^0/kv5<"p +iHĵPzV6\HlJ~*њ( .P/.$GqKN%ӈǦʄjGDkfNJڅMl(}6>.rEq()yuLn +g~V7ޣTNTΔRC-`tA5`Na@OR+M}PT8{imA!qfw%hsRׄs+Gi /Wˮ8lݯAvww'jf 'XG +endstream +endobj +580 0 obj +<< /Filter /FlateDecode /Length 259 >> +stream +xMP;n0 s +] 'CkI%@;$%=9-dԖ9TSp!N5H4 S [)TBSJ|~"$#w5+*tanI:FLI+2:D +wAܠ'q\2q^lEm  I U"UY6\b,jIy^0ˌJdaTz%;0Ʉ> +stream +x=QArE!{\3<D`̓ >,Ed>m4rLMGz!77b C}G#3> +stream +xMQ9n1 +~/Ql`pf HJsl-*iZ%TloH>n9%$-Vr>eH:sIu↋OINT>V9&@FnX0Y +G˛uPf2eB )V=^174*KbS4g$( +DXB6YJ1dOK܌C +f;^^h65%NN8/m9@6jpP*Ck<Nd +endstream +endobj +583 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x=Q;n0 s +^u|%C "(h  o;r|~79tdL\GBv"r"牰^= xp]C9$ɣcًF6:k HTQQ[PZ R9 kkJjȼNMf2*Q~cWy18+!Hi5yPc6-aV*7Fo4Pc4sgw7i~^D\, +endstream +endobj +584 0 obj +<< /Filter /FlateDecode /Length 394 >> +stream +x=RIn1+@$~OGQ.kpw ]dH|K[_K>W%YS> +stream +xMm1 DsU1%wYpp?Py/? M'&TX2&d43ֵE +;Lf"*pq49ʪ̰{+2YX +VcUO+:MI>O;lYf=pzU8vC(L %}Dҟ`Ebiy_g|L' +endstream +endobj +586 0 obj +<< /Filter /FlateDecode /Length 260 >> +stream +xMMn! xpWU]L■Ԫ o 81D*^bX:CF,onZS ɽ<6T|O{'CsAO{\3+p5q=jU+" ֲu<&]J=/;.3r +(Dr&U2*CAli@Z暓99K4 lg1:󕅶DE6 + rn⋻ʛM` "ٕuH(ǒ=aH9}` +endstream +endobj +587 0 obj +<< /Filter /FlateDecode /Length 107 >> +stream +xM TA O& DЮʄG-T#t²!w22ơRҏx̦Wdsir5S{}o7P) +endstream +endobj +588 0 obj +<< /Filter /FlateDecode /Length 353 >> +stream +x=R;n0 s +]yR%"C R{ːP,IwҫIԐFSJI}iP*9*#/}9tnި#윢61 =Fϥ/B'M!@D pkN1*ܗ{蓪!}LWvB~cc'"zȈCzhWt:Rʹ(Q1 x2 OL~(dCٞpq miՊ)1w)kH7JEzޅ?OWJ,b)1P];>7{edh  )Ytx8p!gɡx *f,&1~h"DH +endstream +endobj +589 0 obj +<< /Filter /FlateDecode /Length 191 >> +stream +xMA!C#L__ovIϤTr꒭C =%Ek?&qso&]&&WAJkL^%Truƫ4& p~Lu9@J*Nu&SRcg0l:3fT*1n˫> +stream +x314U0P05Q020R063T066QH1X\00 * <*++ ' +endstream +endobj +591 0 obj +<< /Filter /FlateDecode /Length 166 >> +stream +xEO03#6`ϓ^/foMۇ- !>w~(m rґ[+2fӚ0[c)b۵k6DjMHf9zO!`sW&*GSi˥>栓l)CvQ +j" ]VY2nkϊ|? +endstream +endobj +592 0 obj +<< /Filter /FlateDecode /Length 124 >> +stream +xM;! C{N#/>L&RH2#:50uxac+zLqYXiA4(H&4Rc~ItCe,C/`r MUMZf|sC4} +endstream +endobj +593 0 obj +<< /Filter /FlateDecode /Length 73 >> +stream +x30P0P06 +f +)\F + +\ 1 #0&0 +,lh``B 3biXyWp +endstream +endobj +594 0 obj +<< /Filter /FlateDecode /Length 283 >> +stream +xEKr GAXF$XkƃĂL,0=N%̓K]57&%F"A:=8]6:O{r8B<8 D.B|D |&:YҍcsTziyk^ /MYɓ—R&M~)Y6%MRؔ36eI% LɕcNi|% Tǟd)^*$P@Bb7%.j6նӿ܀; +endstream +endobj +595 0 obj +<< /Filter /FlateDecode /Length 190 >> +stream +xMA! CG6p\u\@RRChH7hUR|˳.t? ;]L1u^bQ9)`­h>F9wg/^x +F=O`¹ _Sx +q3d m v4( ;WnKKOZQ-6_]q^me>h7uK +endstream +endobj +596 0 obj +<< /Filter /FlateDecode /Length 326 >> +stream +x=Rm@ +5``tUAIߐM^GIdIRC/zR~._{=(KZ +E24⑬" *|x3⺅S}cbݼ3 3u!fV {7N![uEBEoh {vK,r|4ksD@{֚U]lI'4L6lt5)K76 5) Il˶Ts163@U2 X57>:yCv=*SǏ!X!ߗz4cXh_`> +stream +x5PK1)@̜U6aOT-Kam;^8"#Zv =me9ttZ ##ג$3G,4e4j!oጒƕ}79D62KF}> +stream +xE͹ 0)>Q޿ %nq 1gt(E@Y؝m=p-Ւ'Nɰ>@scuǨX +endstream +endobj +599 0 obj +<< /Filter /FlateDecode /Length 275 >> +stream +xURIn0 @ߓb0)=$bLIĤFMaF_2tx}dNF2tNݤHXƋf6,W{8+$J:4@g@&ũ2l/M =HEW-SFm(u\YW<Ђ6C&*ayG -u4ͽL Cp%UD5AE\GǕm,Jm'ϳF/d[]}Ys<~CkG +endstream +endobj +600 0 obj +<< /Filter /FlateDecode /Length 153 >> +stream +x= 1 C{O XkAm$_!R`!̠L_xhyv!Ԓ̉i +%*紳,u 8]qm)9Kqb!z" gPQx ~=VT}m4dFC)k .0 +endstream +endobj +601 0 obj +<< /Filter /FlateDecode /Length 151 >> +stream +x5OI! +) =SzhSLČk|.=A4C"iRJrdc< C.v)JbV$҄ GƄD,ĩ YNo#]A-ƞ=`rWZ]0 +endstream +endobj +602 0 obj +<< /Filter /FlateDecode /Length 408 >> +stream +x5RIn0 @[E_K!gLQC4ٚR=/)M\CrM5%c}%ש< .@GUmp}'ohhU3&A'9ިBT7}v6CjdR,X,TB𱞙DdBP'@ў@T7f‡LSR>\턏Gmw=3-8sJw,-<+v- +DH XM"[ +endstream +endobj +603 0 obj +<< /Filter /FlateDecode /Length 132 >> +stream +x5 0 C dǟyRtkD?n}jk1e3Vv`\u| Rb';'w o9%c0 $I<Á-." 4 [=1?pOyɰ*! +endstream +endobj +604 0 obj +<< /Filter /FlateDecode /Length 180 >> +stream +xEPI1<򞩪’ b_syVB| n{ :1M B@WU£bD>T4]|lE4/Th}6'qA?Hn=rY&L9s +tf9xQ_d}5VS Gr]hD7 +endstream +endobj +605 0 obj +<< /Filter /FlateDecode /Length 350 >> +stream +x=I$A +>Pk,Vk5AEXD yYHKEȷ=JN\*sd|=kHHgh-4 _RtdoQ)N0η +C#kr/Ä'vcO{KooTٗJ΢ݦZ%霷]! ` +`(f$KvV̱ *XwLX6*"(rM9Y3/T +endstream +endobj +606 0 obj +<< /Filter /FlateDecode /Length 79 >> +stream +xM̱ 0D`}(޿ HÉiE AK.Ahc+umd!%Ru:y I +endstream +endobj +607 0 obj +<< /Filter /FlateDecode /Length 329 >> +stream +x5RKn@@?sTOo[ô`!y iC|ʣpS|?=O k}̍hÊ_6U%*'}R( D!e) ̇*9񥮋$!P%U`.ݾN!7Gw^W֦5}ЄtفsUe1%J3Q#QlTэ]?gD|Y+\m (qjQ2o}wO{of\BGnᚘ u:Kި6#>+zvSlÅnI3c7SS> +stream +x363U0B]K#c R!Ő pXp@i 4 +V +endstream +endobj +609 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4U +endstream +endobj +610 0 obj +<< /Filter /FlateDecode /Length 176 >> +stream +xMK0D>\󤪺H퐤yPM >3;ւώWT YJ_lJt.. ?׋քƠ4Yؚf ak}$? +endstream +endobj +611 0 obj +<< /Filter /FlateDecode /Length 351 >> +stream +x5R9n1 +} nI rl-*[B:\v|:#ȶ+[܀Ȯ ++m˓i0[}ԥ V+nbA$}*RKRd=і@|!.%1ޙ+nސAikHEfܢ>& <*ąG "oƆɲ4`$L,0 +'0`2'x蔘> +stream +xEQKr0:yo+vA,$ȚN+d)?ņ! EiAZPf&jhMd-7r!&+Qh"Y5ȫXO%΂*LVYAPeP8=Ș + {)s',3lp`brT 9wKeN3oe_o$ w< +2x!wrObaMZ߿#R +endstream +endobj +613 0 obj +<< /Filter /FlateDecode /Length 178 >> +stream +xMM! Db.`B<1.[y}%4Сf$&}(j >V.n&h$;޴ZD&'V&qA)Q={HEh!vM䞚ԙQANn!(`Zr2U˳ز?:&|g{|YCc +endstream +endobj +614 0 obj +<< /Filter /FlateDecode /Length 208 >> +stream +xMAv C{H&gH■> +stream +x5Pm0 g +.PIQTR y^ y-ϵv t$r0=W6D1bĉ>I2F$; Z4mͰԍqc0OVGHb(n:Z0 5-r_I5?Tf%4ǖf1`'zn2DQI["$[1B7J"5T4S +endstream +endobj +616 0 obj +<< /Filter /FlateDecode /Length 643 >> +stream +xMAe) Co [TZǹAHc VeH?͚8a(5ϲ,75f?o(uuG'*jbSFdخj m[]APoWF#"wϿt:+f+?v[mu7eymaIw+C3d NyZ^[ʈ3N7o]̷ѝJ jTY*0s #*4͑%H +H{QeNk{P=AN+ zWOZtQ^g|0%=qB> +xƉ)TG5XͻYK'`C:9;^ќp2 ڝ|Yô CׄLJl@ƹ߽;HY[DuL<зi+l?ЀP%9 + xPs}f~Pcl:!9R:vzN3`BS[̢9$|/IBgTU>ETM +`I> +stream +xE 0D{`~&>Q޿ %n'=\ )n3C ,]q0 \GPaվRBf +endstream +endobj +618 0 obj +<< /Filter /FlateDecode /Length 150 >> +stream +x=O90 +~ uXޓ"xȲc1I4@,#zB0,p6IAVIW>[L!^H<MdLjR[uU$] cp=a5z0cGUKnv}`0] +endstream +endobj +619 0 obj +<< /Filter /FlateDecode /Length 151 >> +stream +x5 0 C ϲ$#I9P7OhL 3Ke> +stream +x-QIrA+fc+ @tZ⠌ ,W呫h31~+mX@T IcP5vzq ְ̓ f)1ge]=Aɬ\%La#g?2.s=7 FXanV34H!AF6r/tU1s-m_M8kX]q.'/6Qi@HnsxK{T`śn@6߼_`[ +endstream +endobj +621 0 obj +<< /Filter /FlateDecode /Length 94 >> +stream +x=A0"1CU ;!Hu6l`= +oРSSTjr$6]d\̀ }Q|eNs +endstream +endobj +622 0 obj +<< /Filter /FlateDecode /Length 178 >> +stream +x=;D1s#h>>[&?]`4K`Cٷ&:|3~ CƠ`%!OgY* 퓆N<dRA)w%1,iMwxi5v+uk 9@UUCAjI&n[% ' #o?KOwP9z&O>_64> +endstream +endobj +623 0 obj +<< /Filter /FlateDecode /Length 236 >> +stream +x=P;r! 9ɤw6›IX)w`B?9'n|P>Cj[/sa16qY|'v.[h!O"qGr[V6W> +stream +x=Kr1Ds +.*☋ҏ7fͨYEGYN@ud̤h|TlJA^gO?凕 +endstream +endobj +625 0 obj +<< /Filter /FlateDecode /Length 290 >> +stream +x5m#A EO`VK<=0|>XߨgCzZʶ2cȃ|6H8 3 +GCQV9:t}tgI`aC7]Nks jC DN`|1> +stream +x5q1 C dFJg3D\; +@Oi3$j" 3<K;>z̼P8tV۰XivU&U9gS|m[Cj.#cӒ R|FyTv6*RӋBrp5|sx"po@=9̈(`4h`S68V,}1$,ѢKM6H(6wK5'D8S80nC.Z;^7۬b[r̥.vhH/;g#Rr ^r6_ƪb$7_@q?~fwe +endstream +endobj +627 0 obj +<< /Filter /FlateDecode /Length 330 >> +stream +x=Kn@D>> +stream +x=K0 C9.ЀT1oљE Ŗ(̶acYz뤵sHWzVueݤ,?PNI^w')s~H[w[K Hm7m!J:\I^WLet)‹;[|kۼ=,!t;e11Yp=Mmt}M +*HdǬVvZ4lИi,YTsRé}:54jѺZcn ϓEY8!'CBsPU)g ¹j[[n\xp$;Ar<'(svv8YoAsۈHG9C:ښQXya_h5 +endstream +endobj +629 0 obj +<< /Filter /FlateDecode /Length 77 >> +stream +x= @s rp?!v  _xP606BW?DSN)iFNxL~ +endstream +endobj +630 0 obj +<< /Filter /FlateDecode /Length 54 >> +stream +x32P0P06F +f +)\f.L0(BpepЮ t +endstream +endobj +631 0 obj +<< /Filter /FlateDecode /Length 216 >> +stream +x=P11 +`@bML +[ !MKc޴ev,1qu-OaZ.Z^[\fQN}NGI{+3\ey|Fӑ%S9 Sj eB2p4nœٻ]Rl5!SL3ds e4kbBJ5~; N +endstream +endobj +632 0 obj +<< /Filter /FlateDecode /Length 303 >> +stream +x5I%1Dy +.P}jjH"&Kb˗|Kc]ԯle)9э꧃" JNNq;K +QM 7Jm33]^l⊓mJodAQXӗ%c2]=gB\^y' ]HIaE@ǡ.uR_δןO pTMʠ۲ +vl<xlCCMK-?Q69َlAW#;>[xj1G~=5!\ܹTrn'jo'~o8 +endstream +endobj +633 0 obj +<< /Filter /FlateDecode /Length 328 >> +stream +x59nd1Cզ0#X +Q"GN~f;o٥)8墳Ͽ6z- +endstream +endobj +634 0 obj +<< /Filter /FlateDecode /Length 181 >> +stream +x=K!D ?$brm'f +l):r5dW<'>gjjG +}S3yG1 jq2 ,&f`D.PQhfj}VE&,g+ 7˳< +t,{yE#~Zn`eh('{xw{}d|C +endstream +endobj +635 0 obj +<< /Filter /FlateDecode /Length 72 >> +stream +x34R0P0f& +& +)\@>ehffpI # *4e6(?++  +endstream +endobj +636 0 obj +<< /Filter /FlateDecode /Length 386 >> +stream +x5RA$1+J@Hӫ^׵C Wljj Oe~ +EeMm3}n3͕y](f)#yk|_!VF(ۘcd m|E!4-])6Y@m{2/:ÚaaX?!Uֹzl@-3" x !VE)tS5tCYNF8NA|k,ro?m0=,Wgiw>㝍 &C5 D/zg}##wr_w9ACCjq1j;$$ϔA-Ñ `q!9Nr Ng +AX焏;q-ʭ@zeRD$fF|kleAFzeYtYf +endstream +endobj +637 0 obj +<< /Filter /FlateDecode /Length 256 >> +stream +xMQIn0 @3ECk)3! cS)%1K"lCܹJ=ɤI䅛J`m掓0%X1A50)>ГυR\(Jݱ  ӛ/6ة +&c<"y5mŻwS3<и^*g;aak͌0KGEIF&tNރH ޟ1_ +endstream +endobj +638 0 obj +<< /Filter /FlateDecode /Length 107 >> +stream +xE @DTA ,?c<`W^̌#,;nx=uç0`,6sX8{t7&e^`Ԗz> +{6S]/W) +endstream +endobj +639 0 obj +<< /Filter /FlateDecode /Length 339 >> +stream +x5RIn1 @kߓPԤ%6CEKio'l+\78*e0c&|/UH +L._?Wi'ɶJjY6r()gT!&F/-2t;K"?+@#ze"9oi{˨+h~6NԝtD'ʮcsƢ㴆S=dd`W8X> +stream +xMA0; W]M5Ma{fyj"BrG"UB2W_t] +endstream +endobj +641 0 obj +<< /Filter /FlateDecode /Length 127 >> +stream +x-N[ +0 )t$u}w;(eM`'"O}َ,.iJhuw5R|v'  +OTjaKB +< c2pPqWh( +endstream +endobj +642 0 obj +<< /Filter /FlateDecode /Length 79 >> +stream +xM1 C= ܧ: o> +stream +x5Rˍ1 +5bIא`q-..&ߺZdaՈEv"mf)jT4Q.9YKGӔ@w ;m ~b{݃4ʳ^1α/D |2pcRܮ@]s¹2Ωgp_Zz#POGY~_7:F hώޞuV@Bv(@*N +'x8@- / j)P-h?~} +endstream +endobj +644 0 obj +<< /Filter /FlateDecode /Length 347 >> +stream +x=R;nC1 } +^ ϓ-DK6%R/-Q"/YwJRRDԙ-WcsO^Jd%ȔVRubJ#u)s*WfT\_Xݬ'(5" (S?͌ +j_p$])lc;k Y gKޗHlFnp&~h +endstream +endobj +645 0 obj +<< /Filter /FlateDecode /Length 225 >> +stream +xEQI0 |IQu(g9$$,"D./ Qv$WakIA״p CYAҥatSwb&28s>v*d #V cUiRΊTp6~T aD]Nf4`/7-. Wz{JFd4uZ`'|h\cw/$FjRM +endstream +endobj +646 0 obj +<< /Filter /FlateDecode /Length 213 >> +stream +x5Pm0 { +.Pڞ'EZQNOf"D&kb[Ɇ9>ò@ +&DpH=4_K礐#b&E9Ie3!|%:Ȗv<1 6vk*(bҽ!> +endobj +648 0 obj +<< /A 726 0 R /Next 492 0 R /Parent 443 0 R /Prev 491 0 R /Title 727 0 R >> +endobj +649 0 obj + +endobj +650 0 obj +<< /D (subsubsection.3.2.3) /S /GoTo >> +endobj +651 0 obj + +endobj +652 0 obj +<< /D (subsection.4.1) /S /GoTo >> +endobj +653 0 obj +<< /A 728 0 R /Next 656 0 R /Parent 444 0 R /Prev 495 0 R /Title 729 0 R >> +endobj +654 0 obj + +endobj +655 0 obj +<< /D (subsection.4.4) /S /GoTo >> +endobj +656 0 obj +<< /A 730 0 R /Next 496 0 R /Parent 444 0 R /Prev 653 0 R /Title 731 0 R >> +endobj +657 0 obj + +endobj +658 0 obj +<< /D (section.5) /S /GoTo >> +endobj +659 0 obj + +endobj +660 0 obj +<< /D (appendix.A) /S /GoTo >> +endobj +661 0 obj + +endobj +662 0 obj +<< /Filter /FlateDecode /Length1 1236 /Length2 3464 /Length3 0 /Length 4311 >> +stream +x}Tfdٻ8لswq +Qe(E^)HCDV*3#w|k>_ YX@8$%ɀeAg +#``paDt H HHuJ@0_`uyU@%^6%a(Z h8 pAX6}dC++GƼ" ]a#pX/@4ʍHH%=4,( _yVHh8_'h2 Xܐ `" 0 &X"WEaɲ8JN ]Ir(JlkEsXH y+)0Fg4K t@Rbq$Z 'iG`ۿfʪ޾wK R.X9M,$k__|`ivk:x쬣2`%jJ XPg*L Фsq} u$ aɩ)"6k + +|{ Oq=4$tEo>K8Gj4+*ZL糺c^NZoFy4y6;:V>>eWT6`\KR<>Ѷ`qhuGg ',wN*N/Z;oH\1gݵ^gB27i?Ve*|zS"eTlh0[pB 6BJO8%Bm}ܽ%t*0Uh[w' K y1AJ::dQHܹt6L.x7A:GpdqLE[ V7.$}uh{um=eZu0mGLfUJ2_okBs4KV =;%'>v2dhќJ RWontoVw5 +;bgu2N~e㸫5nI[WJdZ&'FNLlí +c/WxkնjPCKuNb/юlA=N"t%jd@%a)y%9Gzq2*V_t}jFw# ߍXE%ij~Jgu!5jbo;/-0HɍW`VAOSBJ?0Qi9גJFeϑk{{om˅bhȽ)X[A'L_ryFg ( ǖ{H"C)r8cKu~Y||рPr=Clvh2cM1N/`riaz8[sxeE I/7<;Xs#{ $;[^bpǙkc䓻O52|Ѣ&}S Eܯ8P Դ^奯=bC5*Aosԩ_v<\>Mn)EǟͷMOaJD8@Ebz`9 +a,>}iG|YV3Fa cs:'nk'Q=BԪ]6)4Io@/fhۮ}Dgs}MMjeS6n8 +UDײJ(4Eh@t/1` HR+PͭP2*V"grߎ5[*}^eY^H$!NEsL/n~ay0"I$ʯf?*]X&"1^ż??FRT3W8e_t{HOF!Ye~n56,iqo8rh_y/Iip:ثpZLe"[>|EIq" ) +P~ţ9އW\ ]k2ȶP +njDww$ȧ &{ +x=w1QH/K\LڧtM?SD^РL?&ba|6w< ++{PdfoՅ}N +^& .zлkwD™ 3Q/yd> 0Yth8rLs=Bq@Er  O|Oez48enʧZxca]:kl1gIDq%"gZ@,p7/"NS1"=ť@eVBPv}!'Kq=!5H&or̶aVnf>!12o+D +W~dwFZ[dZ`FQ!N"ReSX8č+q "iG ocIJ\q}/-2w~!KwԤ-Ւ*Oe\=smʡsopx6_(*d|9:qǻe펒nL0(gH B‹雼Do"` 6m[[OX!U L,%کi}iZ$ n S(xf9u)::YJ3X]Nx-Aߛ;#>^홯z7 +ѹSЮWܟTho<}Z|MU' NE xm-D㍃oGNfn=ړ>ɹS-bsvCƾy)tGM>cQ;y%&G,HnK3[rmtj =SΤKfcJjvFyDUm>oQmseY!!.ne_,A|.Yjl#}'+`*uof[RYͳ}J:/Qf0J|wF\{RxLŒP!ZUpãh4:;¤"j V:OI8S5} WRڨQuGΓ9TW&=8?Uct +endstream +endobj +663 0 obj +<< /Filter /FlateDecode /Length1 2360 /Length2 24366 /Length3 0 /Length 25780 >> +stream +xڴuXJ ]C# =t3ttwwHK tIwt{~9{y&ޕZ{?CI l`p102TVFff6$JJQg1^p, '؂ :fO<dd\@ &.`5"lea HE2Ʀ6.6Vc{3 <#@,8LƶsP * +TQTWR}\DU%b +j=@R]U߂6./&$ b;p3v5wv'rabrwwgpu1:8[0:Ol;m4 N%_~ @h$/`'bF~Ǵ94.))쌭A@{c{S!0G~ͨEuuvC*7upez޾b.^6uwr+"`ne Y#VWUc=; ?ֿ ɁG +` Yrpd߱wpͭՑI(-``@SKbbp|ƶ.@_+s 9}V7BbYc*HD7wpK fo ?=x9z̀HL + 8':fvV&7Sg;cYHXy͔@_bi1x-lG{'قG|X> ,O= +77Y?VfVVv'3xX,i6z3%&F{ +;8#^IvoѿI0A& Nf +` p?$3(q&?LiqcA`fm֙:؂fp!fA0{pf/p $ͭ܀ l^Xz:Z&Ymr@0B;TtrZ0; ˟~#_\.VBXO@: +f r$8_\_\ + {z!tWYJ/NL?[n*ie~Dl >Xr߿+埓/oo6pO>{8|_?'-H7}@)✃)ouZO~E܌UZ2 0bd@ր,b9)}@R-,ۗն_fB[~~£yAY ]dd +ئډ꣇1o/S*W +`KfXZ9bx,w,LvB^E +/N~sڍCVuzQ9L<o{S=߫Du sq/GЦ_j +JœLlC>w)f|Eq=p (“9%3բvd)ɑ:5Eav%ʖU-[J8-[D{Qiى3M=(yA~H'oK17Pkr v~c~;6fQ~+D?ƉNaO&c6J Z9~̸xl6]mǴ̓jp"DI^=TtscB,C|^FUsU;|T]c4 +<9j8^.A<3_E'I=v;ZdbRԒ.P ,tbb{Oelr9]R-z)܂z0<n{+_޹xv/{2|{̄0癌L+"ܑJ3a5M'4s(F ج)fw؎a^Y[z3]5QJM(|0 +y.'3I:3&HXog`zҲ$Ԧ:p +wZwq#<z"hT1,Ԃ;/m(_R*}8*bǰhh=5 gY>:q:GnOHjYʧ>)d7W gAҸjnwaJj*=p}!19!fge&WK<OZݗ*Ȕt`UDjz%zAe4ap[GdS"&s!^sQ0?˝d?Ξ]F|j>''?wF3aLJte큰uɺʼn -{S, ,QN~>3ǀYs^Kj.L + .0^ + D'r:Dt|sM˙C +%߶_qqAEx~C/;0uar 4$ukHb!,\$O^j>ֆgD9(krbS|p>qap^vsne`9?;p>;]M*!kr n H2]oE8]| ~I/W5 ffc&7 8yC8NWuYUrl̓Aܥ^^&- C'qLS/AL0D\o5$S<2Ȱ凑;OJ-w.fJc:j$ݚrjRݟtxe`D0;!iy*iT!N6bX#>cؘ#A\!Yeԩ6~oVN mۗs67\:Uf`,gMPa${񻴟sV܄p.ڙc-)w$rzh o2"΍P-=>ꮲC:ftưSé7]ykeu +0- ϛD0>Ud>иlkVP-YT_~-H\|E&粔PsxIo=![$7W栕d߻qhƹ>bzR^\41R3E.\I|Յ^c|ԒQY:,ۘD^yJԲ] *&XC,$bLyYA޹i~t1 ]Ȉ#@dᔄ\ݴhmo1yi"clY +^J$0M + i"F0WmC:<I/0²NsT!es'JUPj،'iSK:A<8va#"HbxF1" \ 1*g ʗq}c}oM*iZ RWi=)A (ƒ.js[/_0(JDI2Kս//4sN3Z1 +&2m>3 zE܏yGhOlYI6BAWkQ).tT⽷ gY6鶗Tviz[F1C;zB:Uw}5YM٩xg'&FaQm.am:6\|GC*=CrV}Py-M %qz?LGӶeWx"qT ͏ɑf9w\!Kܵ9"ڶu:$!8K Bum"rɖtlj"R~ڤg.O|(ۈ5F&f)Ť:S[ R.nl^^oMȑc;Ҫ8mP@L>uLH@ "׊GO|ds?4I`V90u=e1yi>i9i"$W 7{#r +KN) +H2+L-2U!t7PJS!<Qv=KvŠlWw9d?ybyV٨9}W)^u8v,qFTXH +cPeT[Z֛m@ vT悔 jk/9A%jO2 q2q?X +w, .4jh&*hO5[Vz .@.P q}R5]Ymjj;}""7GEXMu@NքhO|>)7gwG +@PIs{۪o]Yb3BI"jH3,dGHl!Tة2jk3c,VǶ^΅NBI<ZӔ8nþIhcsO,ϩs/ӏsi[PuilujJ5S'Я1L< ճ~Oq\aj0N/δڳ!jU5A:۹g.pŘ L*`cQ̼ݚt1xYoW2X 4I.aܬRF2 N-5TpGgm;eg+ulRd1T@ůĈUE)hXҘw:!U- o./Z*pEh//6k=)ß_x3᫣J#u TC]q7$bvヒP%ψZQxpD(**U"Q=gٸs) -@+ ݥZw(!8CaЫ7F^/敿˴'i48nTN˚].nXv>^KlyCaEQ޺ 3|VSˮOfcNB2V5L +g?zw#4Jw+H0r߆ri?F g%/o$m1&MkCm^O 66ߛx?`FҲ?Լ]2%jTcMX'@= `}Ʈ!%财0DNR^Ū%bE4áAegGq==L>[^Xr.AbDG͐ /tځWJWx!ԏEF2X=_^&61$n)'$w>6=l?ϼiؕ{vfҸA7BzYz?=}>+J*0-yؚ=/& ;#-F~;a|ԔF!$fu ϽIp tڪK uBbJ]S݅s'IԷ琕~Wy>?R!(b-]IIg*VC?L˚jsԺڴ6D6tKAJt޻a6 ~r*_㽭#2ĵ0}غaUrVV#'p4RWL W;h_A kU#&W]dzs] ?p{KV_ wzyLN@?<ef9wacI#\i״n@bcy.;^~R99s#d=aݛ;+<=#1P1 xOZ7q/'0EWMoD~j "_/a(g?v`EP3cyt7m0[WLژIfc8!tI|)dCs¤Rڪϐ4,q~n;Z2c85zȢT$j>D߼`0L`4i6~i'vyA<)RAꖵLYeE5^۟);%*sb (DR2ɞ[>1l;#*e7eK0:eBTל3VQh3\`tPryx i[)Ĝ H`wU \R,MbQĎ~ tOZ։x9C5G^c H.08Kh42R7r8l Ba|);?$58QS.1jZ)8_cRrPƘnN!zY1:ddLuW=\ݗlYջЦ\  +YXhXYOmjK#$t͆j^|Yׅo5Ւ# ;7V̬tc D%[Jp5'~et" t6AhD;ʥlcY>)STteI;{퉘{=΂$gYMF>I*[\'k% E}: 7Bhi( avl%78 @7dLb i/U제 /Q,%͍UU*H)E?F,|[8FCq*W)gpǝ5wڥF$s.X/nnYپG_׳QQl{[4{db'1Q7mhĚOs>^ \  +I,)I6qBwN4y<+.v]wXhZmQQxyaaZ0hވ3h)pmJ,i[맔;zYBwZbAwXve6v3rZXC .^\a􄆽~VC4~ƯU++09#8OBo(`JB|Gw> ɣ0'*`mb=IFO9?+)yy`b}ܺ`D`P +7)F'ZW'Wڹp}{w +CI *Wp&ط*~\I#u|EnYVP@wV=ӹ*%Ojr>hbH,ȧ[/<愦_+Y􌀲+ň"!d`|I}DM7H9'가%5tdZOyZV1C]Xpu7i oPݫ XI@[qy*7ke]nY*pN7\ψBe&EKҨ˧&ة7󁔧j9:x2Je +Q;lUak21kpdžqh1?{fF>|TwjD|~;< q񟀃nԍ<6HO9"j4a4}m %2̓Q`K:rAQc'W6a&lWcZ 8ӱ$5VPwvx[}F_~s\$bx%TdHZi5]CБE+8vY8NzGy^k\>ӓ;z\SP|]̯DB:<r*^}Γ!B404G LQmTc4!HN JUlS8S~,xKiY^1bgM$ ?K(dR46¹Qզwo;;]7?s`u#ꑰ{7ƭ-N+pu-53'mIًPumb'sZSBuhg>9<NaIˏh\JA_Di HߒǑc}:Pa &رb$aU= + +܈55VS11JmZ 'QٱZϑgK|չ+P=.=+^k]OZ(:X,-ec.߰0,?~,bA3(ki hxRIr|}XF5zU>;=(åof_bODYM@nτby4pn7sQ`|G(li9|/?%VkGKPJ}Hv/-־S1ElִW2{ +-\N,0iP"$&$.Y,VgLCK e%5ȝMe)75bV[س?%IV# eߪ%2K )!񯅆_!g0IBRt2,OS\QcA;gL #+%U_ "^w jVIQL7'S䵱 +/_zXYmXP!|>׿Tzўu0|I5o5JfמtzZTa)f +0 kc:+ơ3 ^G͓g!gWR/C V=Fv(z% ph[ efSXg@>u}|/0=^h2xTQ /ac|i,5J*u(͚>pB훯>f U΃aZ +&s}",D /Erur:PʻUxt|*XTnWuFm) 3k6O1:ljUiAjp`6=Fp)zs4F#ƚ|4$ݬҞ^3HdTyrnsw۱MԷ+H!J))#ڴJ˥s*\ZJLh_uH~Q*˺E,3y5[*NDhH>0RBӀ&}&[u{UPП\ +~M*3{'/GUvaNʁNTQ"A"n))9qUwVt ҈iCRwjmlu˯ Erhie/5c-N܆U|dn$u;x1X9W-%4rӹX@[͂7kҩNƒ#oحg7$",!ނs"e})mj _?( +cS<`%Ae U^œ H*7V"5Eҋ CΪ|֣-Fa43įij ܶƞ'L OM +:M]XouxⶡE:\=ԑƪ3c|KzBB65tO- Qa0;`8F9A3 +݇L +D;ޞ!"u#:ū5zEB~ٻLq%ln:HԜ[ESZijƦ|g%k#.jޣ/e[lJ&goSf>l3P{߄%`JK,F;}EOϢ,]{XӌJ:u<wSw?UTW4YM߁Bb6rV2`>Tڍ‘4/{XMYhdGb¯V58ӽ~RL6*LWb~P_p1TUj TA#0==WuF5l' bߝN޻ɃXm yG ѾyǷKȼOn0E Nfp󦅡( |5]gm^ZKU|K)<=^,h}Disln+/ 9űE;(mB)#:# =QX\BZ8]2M}w ++qkK0 ƌkBߑOVC-^s? >Hjy m$j98+ 6:kkv<]y~{edRԳ'MꛛXc\:KߪH$NC|'7 +b Ag'[e5xa#FG]Z\"<ɴDkʞI-&S-_*^҄_#Կ/Yeh5cQW(qI9@jiD(^GjڕN7]D.Ș kZ6ǝ(]xP7C(Lsv|9q}@Ki2ßw|%eUݎ|`ǥ:ug*{©Fmzwu_ > Gܻ6C\ +='sbp/UbU",y8^jwAu~:{3\s$zEuЬvi@|Zon'ޅۅb sm:y#9(3Q;%4ًcwdNBi| 't$OLPn3$FdmB.?Cjɴ)1BPh2.6`NLr=7`'R#x:CQܛaQ"I GRKSAbM=6yӺ<g65>,yGu,.~@?sPtݴpD+p_Lz⁔k*Be\{kPYn(4r7 +;6B7A84 YAbU$ 2Z8ωl}[ +۲ەZ#>CڵF*psy!'YN0ŘT ηDv=O}g*@M^?rC0P[BMTb8ix+Aۺ,oG +EkX'LzEzzm8Z`qmb*/3Ê|*-o;{j_#c<isi\vT? .N.oVs5A1y5ڤa8qF?wR!(Mju7 _D|53uGBsJbr $w23glcx P*r9T&v LiJ{0RWjwUnGㅨKnSD)95˾5$CR|!1%Ё'8at)\n"K2G'\vLWf:-űV܅DA>#uH7;nK|_v$>4)c~6_c)S_ G Ry@ 8\+?XskHNK3M3Kp?8W*ShoBwm<M]9_N\1BKP|:4g{YˌUV)MO?)?|bO`e{mfώfe@ϯu5Fұq'Q;0l$>"/ #TY|{FMIZ5-B7!=ЍW8bZԔaW. o+W_OTzF};<VW=s5c؊ɣ9ϓ((N\r?74,>mAn`0S/4itސWpM5W?]ۧɛ :oi'9+@@Hj_T,ҽ5ыAUDdcdG3ա,NV\sי{WӬ LL`ZoIq ;h@' چAjgG:V0-["0M7ĪUGr ^' f +dzG`5>le3u˃ 6ۻ{)c& P'_6c_vKFoC8 W84MtxDQ.[@-t %K!e04orI6m5孢k$`CFtq +2cWOR]e$]".P֗$:Dcf֊&hue buG#뼂^nl.eš E)َ7UB5{ΧD3ZAtg{Xx[hq\On;+Rh@ =V7Q|J=,l59i=fi[vA=KK^!jg#_8h,_N)˝2ݍVTs?q$?Bl(2:@r'?߄$P(rϠ;!]2yS eѕc +k˟d._K"nvo)_(_" 0X =AAݒ#P` T@/x8.2ЊGDPM 7س!2;c[QshU7%B?K&X"Gr(Ks&Je//7x}[d-V2'7Vm߯˗@kŁ>-Oυ/|f AjfYY@Z+~OVpi&`Xj\&ɑdk6y7X/W_[u] mAV +̵\x +k\*+LpAR{UȬn:] +S<shqO'g/:e-BYbLL26`~)fIoxָmÊ\ug3h۬ʱwmS +Μ;? P]"wIJ];>:&i0(?Nlo0ݢ5H(.t2T{Y#?5= 7Kayɳ 2hm_uk=YyxG\Ö +/ c(1=c*=_gsI +6>oNѶ#ٷ·o`K /_0w)7Uޔf$.u, -0 + h<"D ŞF2erƢ=Q\?z +JRD.Joc.pM8<#Ҫ  ؛τ59|x?Œ1*zЏ}=x=IJ:Ѐd13p7h‏&89bKu +oӧhҙQnxBst<+ϹAst}?+=fI3_fx7k*ӘA )#(I;T lTjIWCeC@j Uw+ְƾLP>.7)}*{DQ̦9& #28uEҥ]w_TyK5ʹb +F$WWiź)HPnK8x| +:i!&U`Z7[J'5L^z0[ؽ?qSW8ˁ4<˞}"֋x8 h'~'eGSJ̄5XTa]tE-\ Hq_X+N +4R~hXeQY)?:t!o77YJb7VeuP !2tn֛4DCL2]G֪ q rRU)gF*6l^UÐئ*چZˆFci ÉMmpĢP8٤!Jp=9UugT|vg{{Z8gA͙]P`ɱ<u$ƌџR=B7O I7s +I:mJm꧇N"OYZ!8` +kշ {$Ӧ)}-l; I Y7G%a{NY_osiNI՗ǐO@v'9\9;܍ap>2_Z-\/DN:"zΤDL;_AG +%dq.|K{'M=kcY&YNR˰hP3\Pdj,sav<; -\8~L +-P><SA:M}QpS;1M3pmr,[렇ֵ"i + i;}`LBO<5ŵ|MxuS<}!)(e/0 #owݝ:&1g\:NR G{eX[TWMA +I=w[ `[Zd?;%.ɸ@5 +3lƺ딹aJC2}dt-e*E19@*DpDiُőF |);j#iW`zn.2 +,jVξ7]!+%UA@bK3jPTUhحטvڄڡJ1B:56>WRggH+M+{AjN~5!ĘԖ Yڬr]D@:^G8BNSW?.1돩AGAaGp3H풆~H5fDb\T7d[j y% +MF`eC.,R'4.;E~( >f{wnxCPt_1uvSƿ+6c5 dyXYYAQ< +[ /dCozqv<"1NwJ Cwnzk_Dm/ZܻDą'ūg?" ߁՗C8`"GF*h!o^20JSm{- CAwS pu]-rl҆aUIJ(N-Ywk7|Ո"USct&O)!S;EQ1&I6'x,$sR6*R ]+ jӳ/X>f }D:$lPEP ҂Mݨ\p.3l#4D{Qcy-_/ԀG8w>&ՏH-Jf2xFzv^$aۃ.=&F`YZ#*Fxo{OtUDIFea1Z1q0tg=dJPfD^Qٙv_f`Z(̸Gd5*Ys"|j,U8fR$H;Ci_'6Zz_dbul"'W$Y}íĠ@>5zBu HDaVOB:<%Y=垽K]7KH8$k͟ ոm{^eiq8 gO.DŽ#OWC4֟NlW1X:UYa5,~}CxmT#̸tY[\?C= +%G\3bsҖg>MS$2E_ݶb##wj7gM1{nkE'}:L[+e$!h[O#+%9ҍ@-t7axk) ]HO_CB#az ޻レɰwڦEA + +" )/AhC۔spEG*VmΞBKfDp.jJ;m<#u y%p8xO'ko3HNibh9uglsOv3HWƊk!߃\={ɂJL)C\Wc0K(O%\{^>|c DZ$d'(LoZZ/8e8OFt&{zdC_CߴCItsVZZ'g%ѠDz/eZQ181%7EΠHU%~u&m(# Mzؗ)=ZU2(xYB>ɸ\-tv 6T>' d'X31F\Zc7p/A=,~fc2g*5<8RS:'"wEP xtZ` vLQID:v H&O*C&^Pq2TnUlQ{ ΙM6&W$0U?2QCmKʣ}\2SR6v',zZQcYh,_S]7C)GAz/>(po9mOn9-O'-O3TΤYUXmu{d +hZS|R؁'?Ǯ6KFH_;ظQC fƩ־ c%tĎ|y][5/Ssܽ hܫD= cycYbڅpSoZFk|X@n)=!ucB'MC3w_nч V?s oyEء>ۄ|8Yǯ9t.("Ô߸k憨=|ժL'/ xY)0_G8?=ZT +MN.̰VE])!P6hoEcv:.={ _?5(蠪/Kؠߗ;zYGh`O7=uGr38b0+[U,"r"| aZН>xE2v,"Hd/+\ܼ(O=lXSmilqh%Bx+$V Oj=t+K4_>$(B {w{#^Nx#K~!¾g¾WH!}`Wj'ӷ9:ukgj"ȶEdYI"Y垖4M|IX4//\3 hF̆0`-30rLyyy#Y&ԟ USϤ^hP+{eDڈh<[DqL1$8CIM$9Cњ Lh A!n|G#2cA2i}bC:amPކ e)'k5)ob0M;rA[K,l~ney0/|Xsh%ӕZ|uep2rHHZn-uD +_VBln +endstream +endobj +664 0 obj +<< /Filter /FlateDecode /Length1 1846 /Length2 7691 /Length3 0 /Length 8678 >> +stream +xڵuTRea:..IANEZ9uoos׺ku׬5<1*bp +dHX;B-ewVs Z-%,%ƎwLA wp@ ?'?7nPXCwڶP Z #?@nK`p:X[:X@M.p{+@N?tda65{=j 5e _i¬@ +]+WP-?;1E|0_wjqt0cAiL%66P`j q@-a쿤4l jnD=>\m +Yݛ+@RbbZwV.]oSOO>038Ml +#?Ŕ?y@{ 2INb٥@&JXZ/iCU;Y>ߡ`PZ:HYBMU,!3cko 3[[ *p_]sי% +up~AaJ9 78A<c{{c7 @坒+z ws:9=Mzlv_a&v'$7=qqAGܿ7=џIp -_x{DxֺϞO'@OAOAy$s_#ϟ$xSS}|x#A|y9} [O8߽`zGfw+B!_'WUgbd.x7TSWos +_â鼒eM}_i/~Ϯ쁳9_^F2qY>^%262#BVЃSGBhrb 4Zi eͶ._%ٳY'm84c-}H~肍{, j0{ ^}SM[\z=̌0OT#&dճv}qj]ϋ&MU Dnn9*U7ZU1'NbR9ta:/PXr +v-MRށH^jlL&ד(B_;̭V܉/8U$Sݳ.}m\&RJZx|Hĝ* +!fH?#<8 TA9Oؕނo#fPfKqL7r$O?݀fēG ݲx8"e[琣Myl PzײJ2Ҷv 9vmupEm~7QET Ps9mD<$# &'<) JQAExcjAzNq;cR`D.Zһ")5:uz<) *ʤmg=K͇DKdF9V%WM/}- QH\RMEaa@=刄"W8a]D4˴j+? !3 9T!v%O4{k2cv"Td\E0X:, PȨ.w,O B%bDqR/ PT!$Ck=9]UʤxA??J*izdRmN#?`Nʤ oh)-mYxH#J UWa;)I6Q+) 5}""Nj$`HA낈 A?RUk9{Qs!6;$p>֕ЖK-D mYqXrMyZF0 Ws &(w\0r JkWy$8 +i"efؤǀQEONwд/}V07kڗ飕lhZ,7q} Ō-Y6)@D׬\xDL#0=Rg7qT8Y0dC?F[0E/ƈބ$?aM|:3Zp->{Ԉp|Kأe||eG*niHV+7w#p(pL @*?D#WP~"S6Դo\7_ˬ y'{Њ9{ |,b Uj%Ie zx=7!m47sDm0D1jm5 ]ML?' ՌqaC?ǖ(.k?K7rIM <dLZ͖d9z:OD WFNŜk߭ں>M_v!hahpϵ%>^['VA{X-} \Dg2s9v*<~qCJcSt6 q u{Be,9^0!嚊7Aj|䢖;t:o_㰫19bd +hx|n=Zu{3`kt$a8>^TyqGdQ#,u!khv.ָ8iq␔nf + "|v Tlpg+u *vղw*& WC:J9jhDbl:6lE=|O~O塢k4 +>wuOoSil5 F9cziVbUF`q/`o),UkӛV2o$t8MCr 1yJ&vSЕӪ`X둵s-#lw ^5 b-l +!RMãw޲#io*ݼ[?Mt[=Ҟi"zD94z1]8/I3-|VؚpEʶ9)͙k'hEF=iXY`*5@t+p`O[ȳzўJ:CxB0PL*5TS^]+6y{U{Iѣ*уP&eJVrpJpYr۳hG:~FMT/G'H#ẅFS5Ν3y8>+]B<SB$ tbKp,;42* ߑLtw#ILErH 5ӇOHiy6*$;8 b +Ֆ{tʴëk<):wO 2'Zjb6rRa7KЍCutIN>t z7%L =#4El'4[9M!ݴ9Y!wRׄ/ܱK`DbRz6^[ ^XרCq}uNΑ6[ϿK"P2>9+4"ԨAoKސսs!at9WE1C$-Z])v(v#wx d+Vm5AնYJuz +$i;F'V9ei!JsJ@Z2oR)vl #'$ŗ^Wեp3G\^![i~t vSTF؈luZ'MfR-AGDC>=csoĥ"U 4(#a#>&tN‰ SNSe{ R2U.FKphmd Z"o 9q?( +Ć[ L.&' +vrHxͬ@!RV<I>zB{ص48cܔg;d뤓V:[b6S+ҷKGo4bh$˻ՆUk]:3 (1`^5+sfzYmya>;AoVni>Fuf%+'/}bȀ!-OB"ylD1>{oTwԘ'DWo:|Cۮ2 @]朣&;W *PjV[Qq`Idw0{W"ꄴ?ٙ[5A'z{ókM|tS16@>oIٴ}&/"'D,彠IԬ}ʜ{ ǟ>b\L ,Sdb2Z㢗Ǘ3m:3s9ɕMHcQHл!o_$‰D@ {=g9+BR2 {։fǑ%u܅؂+?4 J,ptI"Ս>N{=pNH>_&q] oZ/*uI<dL*l 1ƾ'PյE#GZ)ς9eH!V^/0gJ<??ePm8S3},s'Qү$̇Tuˆ$Y1;#u_\ywTd[Rݺ h&W:Y!5ǣ'eeKkR/jԼk(¯Ke)|#.&VeI Jlb?N%j]x߳]#Jz VCK@B7B+K*]d?M;+q΋9ULsc#%3gDlk{E'\!UuA%Y"a.6ԈuZI!)3!Wh5 i<tU?yhr*ye$1čEs]N5>#1CDvH}$gnK7<\tBoN{k|O  uꍀMu.Ćgzy{Њq 3*De%G ~JՄečM_7Z񵄵p#f@|{+ޛ `9 ɭH5PYG}q'#`H"%.#9FTԞnGFiCL4O'ϖ QƉgdl`RFԑ 0p[w#˥eC9~ٜgo=˱?xe5 z3C¿]-Y5hӓd$'r-WGFp7 y&hxh ܔ05a4ZUkԉvdFehc9g&#SHdf_ ڭk!%,u,^׀,vk[V=Ȳq_0nii;rlcԸ N-o7="m!ECk5Tm5Xov#ЭRX DnGQdj2x_YE2L#FL֞WfǠ& IJܣɶWV9PCy񐘄e햫fM;N=!@ЬZ+2ݴ +r)ǽ(YrjK +V=M۴#ۗ=OУ?uD+D!8׆dasjlV ۍ.7[.}~| +]zf;Z9H]\B{tL> qJtEe$46m47: {qvsS)Ǽ,jmL#DrF^tlJd9ʽ +VZ:$dƍnw;@"M~ĆńU]C`t$X'hyodHhK6^ dk G*_(UYS3M惟4 0Zш9բ&,gAu5wKi\8^@t͏S-Q{{Ơ!\CP V'390E\TeD#{SS \T82I_\r b!v ¡jA^O9,v̌x4ė\F-껔sNKeH+ueg\=*^ӂz`ez/p\I6L2FD&C?dd륄e'h*tca< 9iلxXAܷ4v^5T#=gSŵUka?ƈ*{UoNل64GEKjEV p89ny-\ӇU=Baj[Ky;J +ov}Z'/w̐b@*3S? 5?5紶bIe@sX.5^3JZ4Q[_ gO$H'=2=cm0yqM5%tBFeQ0SRXB(mG8sfu|+r Ug φv7&ɐz|-B"խqdߺ59=o`Ɲxb{f EpeA3-']ta\kXú: +bw?fM0s缦OYx&ݬK9> +stream +x}veT]-Bq .Ah Kݝ[wf]ϩuv~.?VrANf+wc*;}@[^p +鸯'sgݟ8K t}DNf ڄފ'aJ3ވPx5"OToy6טoG[A84]x"0HJΪ%vhۭ@ʏw> 0X:~Pë\5F;(d.hOjOK54q›mOӆ.̨Kև:BnAz3$ ,>E@}?mhX˸*w]4a_ M? ݝkS42(&o֌Qa[.sZ ܅2 BZtl w^"?2[r=)WELd2jl$\t Լlx@;ݰo+PJ"7 xոoJ}1[acu*M?C&X t-AK/BKjOᷨV-Y򊮴v{ԍBB=t1QwOz=W ءzhF"R2$"Ǫ-rvP?ZBG RPG7(喙Pȝ̵DJMn 9S]$J%kMs7P%:F́jh#snDc QX*\BB 3Qi=UĘ=G<؁U9il6kxŵ |nS1v cN'#fu^0fWph:i +na 4=s!Vt +"Mj-)_e..DM·;j&Tv_HVM UȺ2U;V}]B/fzJyS45D[굷N D~q%-55!TͥN/˜މ,ˊQoB{)܆HVA @@!#P}l̨9H"2=bp[P>w⿰g|"yGc~jq|{1hܞʀ^57~@dJ/.F+ U eO&*i\cf'6$Yy@jtTP0:CQ$&r# r%<`BYKHБs.!V5T:?&bcSn2dI &gu^sD%}^sTc`ʘI^^$8ZPpe"-W~aRk^)8'W](-h• 75?n?=y2Gq80bOQ(]fㄕ;%. E{bfPʶ[(f\#зfG[;he4?K֩S0ҳ5Ȝ=vx]kt*닮-unb%oPg(+Lu]+Og4>#s*-8Fh25i,3j*}ímEcݮ6Nǐ=ɨ.`j SH̓rХ2IL9O)B:V *,-`bR4ˇ.ca9kQD"HON[^Z 42At5ڢ׳9vB jw t}`yѴw hjo>U)'8-ϭ{l;37O6w 0oI(Tae!(Qd[%GB(e6ZbaKN'j;6TF; +*V@kI9ϼO<gɩҕd)Xh;dj\楜&ݤtK;h܏xgXLX630+*0Sa7߇,nT֭p+BYܖIY7hIf#z@Ԋ \DIrx7JĤ;oT7zLZ;䍭̊Ȕd1ϒ41ĆﵦH%>mI#t/Msa +2=OKJzyp +L?ۊMԚ>@I .Q +DmifZTI/?~)0!Nd 9m 8Ϳ<Lk8 k0״+tY+5&/$ƶsxF;YL}W#vJC5q2K!i7HB b͊;d XI>}%~dNI9pqNqgiRW8%6!YD7?+S@f&%lRL~U-| +A1+yG5mXĈTє/(= G2\-bFdI{TW1fU1/-1V*|ÑBII-KqXq=pq*V q({\i'1~/%X4DyzfƊU`=r RZr0t=]d#+qnAI`25>&wt 8gr!ڲ]E6y~M1+ooڳ.j a>7.o ($hE}j}8 ?t/L7/|Hf@nvy~D\#q F3[52Kv8}?Snsw`.<D[VK4^o>U8d5{.YvAOO-p2upX5@zGN٩[ҔC^kXb~Ņ30SġI8'5;Ű!}b{_VzNӥ0%?Nb*j?ck`6P:f!~owRte<G5gڐ۶$~23^qFx +ق N*/Ղ92 !?jct=ۙ~S +}%S$Ed|єdAhA7ꓟq nTudffG1z4+NRp?ho T55-]IT[m1zӉ\2t.ߊL9ck@k9q*D^f6{N:2/(Lj zg4_層taiH Qc˾~!D]8 el_PXQZrH|*=q&!Yt!~1uZṈo[3 +^C֎ a E7]+?pIF'V!l*r %LW/! D9] 4rqNHCkF(ʔė뮵;]9|+K2Aߧx+ Xɠ?z2(^ޱh1#VagIRV˧M_gS3Yzyܩz\!Qmf1އ5^NF$]t17 BܵLn +"1 nI[Z{' lOH- +raP5rm"Į-'ut˱P;P_c'C! MT,Gѽ.:e HځpQf쇘|%7 gBbt<z+u<UPǯ`y`0kr95𸛢Ο#Xvy}S5#ޭ"&J1Fb!;9|{;VI(W&u'u?(shPkFq|Vh@Vm5X_N3t2a޵6/f$?Sֺch&R8B.V7T"%_[xq^f|uvn6ӵeRTŽB e XŨ8T"%b|6h.޸W f,^415BU!"u\j+\]R7Q%G Mcmt]%sPvHr0W)61&SR^CHhN$#J^mkTLSF(Вpʛ9;WخO;m;h \7".IĀ /bYes.柍 c9q!em[|W8nV4&;XM.sAaDvJWip .^/^96[1n3[pɳ v[yEf#I*4d3![q(S ,wȷݧ8=dlK--iE!x({㲅`.7锁Ao߀&=xb i9HQTYy),a08I4a7$w)r# +k26'TE,fHb&QR%onapF}/@_kWkucҽ)9nӤlZ0gjc1s|V#y윧$gg\홲_i#IeV0-dI(5<] +endstream +endobj +666 0 obj +<< /Filter /FlateDecode /Length1 1274 /Length2 4067 /Length3 0 /Length 4838 >> +stream +x}uX %-"JJ#l#"-Hsc#F@QR% F|w}ޯssמּ%$R㈢b`( \ 0EQ'4 U(8 +'q A1 $LJ'Ġ(,`h'8Td֎~z40(pd[x-)*!& 0|C`'0ET!U(щ%$ښ Ph5 +(g8v̠`(T ~gq>ÒQD@_MbxW]T +ЃHJJ?N$9۳GHOD[q$,{; GcO U:($d?>e"NhWRMlX'DhJOvmC55R@p+r= ăD6۠$N@"q(]C֨?4eCDmRo=;A@t+VA0(eL;p`iJb2?ȅ*ɟ/3H=8Zh', ͡Rp"ʕ $;[t)mxps(kn/on^bwj6-SUa%eƩ7)QPSG]p*iAw@TAg#Kt3lfUug3)4 '87O8Ѱsedt ɲn.iboh:ߕBo*@|`7M+o߶+V*y(0*X0GTr$VG.)](Qt$K&g7JUnLbl''9 ˽ ү[n u*1ɘ{Z@^ːp +fe;Zf'Tjr 8񿭛LxL2|gU\H47`i9 m:Ѹz# ܞf0:jQpvkwqf2q&=LT6-~$|^jeoWhTvXA̿~=F7=ʇ?H+-ȸN UxZaxyzev"$kf˗$iz0>{]p..vJE{a$.!;44sV,lk"| aWmBSX-<mTQ)qy޸7^qBSy ކ{W{a 6Te&Wy:Ǐ7/p!.MRL ~OIUu|BELdR]DoÆn->uAB +ұ/]^OLoMGY6È*B~ڭ7*S6\goi(&y; p;t*Joj);78-ra=اA'C}ӶՔÝ]Dm==%!egzrG+28<ד3xWJ؞&n?AO94x$uS?k͋ف/6oNJ$)R +VJ֤Vbiwf편䣯E>jVOx.N<"nX#lZ1(3yntDDE"gZVa}uFI8vArbdk=0{Y|\㖗Z7m|=05/%qƆmBūcFeÁma1C\{ߐuw + ;: j*f:x"qD ͨJm1> a=Jm[|{xԕ"U#'ޥ<"o)y辝Ύp'$]0֩B\eGra GEC/.V2fU˹wE=jqx +4Hף[\sSY~ ՗]6BfȊxjP`gD%W#edpG+]=@` _F zSBz%׽#pQ\JKt& D@A~V/hߪISoSWl1Qʫ wjXʣALl 7=$MXfBGT⻌O;]1!țw,%N6u)Pn8`]nȿjT1{Nhip-p\9RS467ы$ǔ2/E֢ @P p-HVnx1l=5[UD +!}Cб)6mj)N^I,zt!5n:*͋ s=@/m3\=kį5Og Ҧ50{SNzչ'QX} cwT R_1),э(qospgecH_eHeЛߔcTRA 7@SUUʇ~hEь[ۋթ"]ISs/&l̲(f:=[QVLsE0 >a&U>E1 + bpIQj~Ι71A ]9-wH炦IlWNCfnR}Ee5Ԏ綰Ԝ 1υݶ-;krg$ T98GEM_!JrJlZlYb!ݛKk\t]5K_ +5<6 bhlEn. DC~>HCd1M?SF ftYycd9ɧ1B-EFp_^6KeQN^ɭN+sѦ2NzȲbMu bBFfFVs;axLh@aN+gKHF 44Ccx= *犨TH~.ڦoʻ\~Zp$ʴRt. LrҼV% rt^Ez`a=U #_RLeyW#1 +endstream +endobj +667 0 obj +<< /Filter /FlateDecode /Length1 1630 /Length2 12181 /Length3 0 /Length 13013 >> +stream +xڭxeT\5Npwk4K iq Cp݃KpwsκT]v [:|\~.&DL]6}vVvv?? Fdh:Z*] } +@s` ܁1I.؁z¯@&! -GN/;C];Sg _vٌJ27x?n?#Mqߝ3|v <. +.}@%| SNGS#dOM+.kFEa8 M]`ֵP~g vĹTȽb\z3B M xd)} VBjk!B)]? zx`ؿ,+AM_霦;Omh!GP/ZDi= xԙ(跱.?tk33b|3TWz-BQ=X{e^SUx2$˴#ov6ϰ?Ci)7ݾ#Gw{8ˌv.2Jt.@sJ?ePwDf]Z|颏^%8t%߮Kѝ(SQ.oA+^.Px[r &*ݚ#eɈ8P?+#R{Y{8}6e Ȫ~@8$~bPklEވhXP:ZvbwjhPa%wl,%/VYsrzMKk~krH5v4zSH%v[%W +"On"_}:'DJtYIB5a`Ou djb8k ؜ +3t}:?>$vޗ)Q qcG,3p p$zCځSbhL$avʂ{6|,cʾ ER{ﯻ+:XKiE״m%E,&[pߣ]H''" +b|~,+|ՠQwk Sά={_9^sT.-ŢI} -ð Wy()Be:Ul[',*[6*hJ1uў4ۃ&>Аm3M`q#%bU}/=<ߦ%[d &%}oUtekԁ_PP6ֽ ېjZVpN`֩oZ ׵M(Pk6gzuc +U8`MH/\ّ^|n6:}u$/<)P" +{~Na4[0t},jB9-iY*&Eh_ +TeWp΃bf# +fSOTĽbj<6Ww,5$s]֌9Z'XO-z;v" &W#1:n!*-)d9y֑0-ߡob$d=U~G{8m4eHR\ltZyYv#^mźCO5& kܘDQea? fɖkwU(WܚۛvJ|JT BEb3'("mNU/D~iZ{j)qt7Rnmdmѿ׼W[U 0𪭮6;L?\㫲w[Jp !a:.Ԇ"~!J?|l%PI,2tA@xgi/FZ$A8=Rp\^${uc[{3Xkp֣ϑN@э,^Ԁ^]Ki} o߹+c~ E'R7sG0hQFEHx1l$݆&UIz}q``sm)`RK~]+S4:HTNݔ/6 S>:ҚY!c~ȡL_g_aiZrߗ<*In5#Nhj"(|f~Cphcن>+OԨXONXM¶ z*3Y:p3OZ2t%eΡ${K g<t U`/RIx3a/JcF~Q +lv.a3"/g͸Pʧ?ext gOITyUVM  1jcl祑 kClV8/(<ɢ*ڞ6h0zl~A3`2 iEA:5}6~t5 ~ +?Ƶϭ3 z9Xc.lbx;; +7:Y/^RX, nh ywhI{mrw$ݣk#k-,':qC!c+!W1$*]M tJj}!u +v&dN~бR\'s¡|XRzw+ cXbjБ qq[eʧdw8"j )m~5o`bŷ=MFS2ǜiiujzt@Ro=H]pUJZD1_#:#[ox;- j|%) +tf\(-zPPA܋,"L1:k q@Pe) ;maq"ο9 T!Rd  M܇餷36?ٲE)vs,L|.LUIݨGصAX\; +H˗"bU =g' RX^`iĘ*OIGMuKЕxh~V;Y Ehb36&6.DZֵ7LVC?zi`G|Xϥqw[Mg4B tP_}6gzJKfm +W +Cl?>_wn`w%a$lt%ȘF'3Xkp^ɇ[*xZ FT&M)l2җADd8tv5~iuNc"]=s &\[AA m+&B `]N A^Q,oo1 p])g)o{d@4D$ Qϳ6>.봫!V,f_edN9 +!n 11[S?CxSI$uop~XꦗS9ɏt"BfpuoDJ۱<8x7:W΃AHFᆣƒ,C)Oү@ḱG]J|],Z-BSVQMD@n{HjP͝򓫑td߼-ٹi2*hp~`GTnW\_"+Wru_ R +]@Yb^beΠK" p=F?OhA􈷚M7*s\Sa.fAf9 ~';tqmp9u]9= r.;;~G6GE~䇞 ^?VNvޅemUGs<`i[G/HF#IFF>cF28.XM^"Ĥq( u$\Z`Yǹ_@:e}F׈DD2Sf )V=%Sr ":XFk#~"&{/4 Cd 8^p>~s`6w$S~5S?|NJGMD4=1#])E5ٹ7qjQE?` *a9\Z[xVɟ+3T@QsM{=ǐJՍ=h\o4\#rLp[S0*i,~z"ZAO2zvv9QSET W07xVZ.}OѮVȎV (+Ci:n^uan\NPR˥V|ׂ#S `"ć_d(LEWR\n[}twg׶->!)dja8YgulM y za_%陊p GL(`Kˉ?1PC-s J(Z4gح?\M4wae3ɡkPm6EO):2M^TERGZǀ 4DC& m]b1LC'"s'r{d@ÆR} nOn)7\z!"dlrT{?eYoą[kkS {2}*-w2eM +ۄjկEHv_V/ `&<{A+wd&H"sev@ aEʚTuXUG3?cm}a4P[>L[cPOke}gl{ :_1E7^u֝)V 1NC *NjjTG焞( u&~8 >NmP9 sG~%jd}NRd還̛vҴ.,I~Ks%Җv^'o%: +j2;g8iC |<r?|q?{zjK@|>B5=W2bPSԲ;p?O L繞>},s8M%SCq4DcE+6(Yu~`P$Zx7CXլFO^t;6ŝ_sQ}QR6iT@-$Hz"4ݮΝ'ܚ̠ZHM}ǨlM^Y,ztJz~0bؘlM" +z{6wQ^$j0899jNR<& +`hQ*H}yӁ=C|Gc`v~B" ŝCU.E<["ѐ桝wPaWe{”3m"29]aC5(CV܇(gQ0 2g<%~KD7؁k bOn#z?88_1 CXT_䝓7::4;2c\ +d0 TzϸrSY?c5"<ͳC}SUJuvmo>%)+`%L<-ݔ!KsFccy,G8 |6Л>Y?-V-7m- +CptK +twwԟ/20E~,L)5b,wGQbgY`{oQe|?x,Ak1o>X_3#(ſIr\[m>% Hjo (N&>Jg5 + "p?;:U|Њ??mQ[KytMtLf;8vT8"0V2Oso3-;3G@HP4׼6$jWNcA\kSv 韍Q$)N`BˁKBM~&ewѯH"R5L +?E51\:oeБ؟hpCH}QFf WXA/ZۋGfkfَt@[thK$oED'3rqW'XFE f+/Mkoa*(D*m\ob|(z+Vg):hw3|WfZ}BB>FR˷c~498ȾazȄ2m>3s{x9|_U" 4:>S2- "jHLx/U%^SMiG1f̈́KrgFOKvfCUkL7gzVJD\B$ *=ᄭP +ϗ.fbk%=JF$ʂBu`QkI?ܓGE'BZReָY%-0@}! "H~66ޫ\[U,YQg|ݡD l}  DR({,q3*wB$R;烖v'8^FlOYo& ž]7#9NMSdw=MbA\sj GaC49JuYy??@!LްTܲ;#$\0^͚"gJ"@@.(xF$ZҾT\gnn2 bT4ᑉQj7Hlvn'|3eRz#I;駎Z:Ѧ bg¦ξ6HHdb'a{vK1~w'2z4FsQ-gEFr Go:E :HL7 (Ӹ'GqC5.:dm)mxdg#wU^d[칺fh;mM~pG)[qu~+Ii*zD gTkS\*i,_ĪmL?IYBRe,A6cɥ`Žtfij2,4yL7{@5xGxו|ODr=q2M\Qzx^{ 8] Z*hpVX4Yh?gNAt bS$I=@}r +̂jɌ]IQT.;n +wwek"TŴg $wk%a*a~&/UD7^FK$HFOˮV/ q%LSoM+H_'H| 2h`l2ӈFO)\"k|tIE6jKԀ%m%C; M]B^ZkN"YGPjRcmh sܳmBT Lƻ݁lEK icӤxc g:ߩ-2QN'Xn-"m%+fICY> ^o\ҹ!1gۇ+fBuE.MD`럯]i&)4mS]t;VJ2)NMT/*{s;O,Dچyv yWӯޓe+FCyPdW V( (@bw?/9*Mzn8/Oɴϲ ?(P=Mf=x8=p&^>0 rbz{,-ASOg lu&U"Iˬ; ?'*B$ݱ'dC j1x +U;Gg@Ɗ=yɤBT#7J/qea_Yd 00p|R@ nH۵Eg.[[?0)F~nh]V6NUDw0u'&'cs2QW6mnGQ)O+9"75aG"2vb*ph< r_\@Knb-0&8m.NEk6&́1;@q:T"V|:bT!] +wӪ*}S SiQ%#Br,i.qV_%/z2#%/eo(a{k,/e\e'ͲW fȚu1|&q{,s/ba63\FqsV +vk#B KR~ n{Dߴ w,<(+ {͏YpSe.vmhA/JxEc +i +EP4B4BWwr$#U)BbZ7YBSS 7O:̥={DA|&T2@3Z{UHaķgƠtAۧ˫vLFY I=RH2ڟH{KJ3w%ЏB&ag;P(K}6n"KNF_k$Dٽ$1GGxk\`XF_ ]o<홶-lq)CTl{Cu]@?Jb`Щ h~! ۨX!s\@}6(ǜ.ou]bgf4KdUsWНlQj1␺Nz 2`ʿ~d6;}42׋6 E䤫?%5Һ uHrc1,lPopԬlo_);;rK:N:C'j=}Q{]fF`ü9Yuɲ"W|,OtEk1;f:+BL4vq矢"5J u0qv8DGes? +zY +II_6RkiOflpX^$5^Xo8oG,=W~~J[_Ϧ60)ҕm~Bx`Y|Nz#dS?e&4|YTT%Óд:S8͂fM?ȶcG +-::;;n)(>3jxyuh1nȃrB=]H=Ĉ=g=)hXɪ<Z++x٭nj(*`N +o G@g[⥷Pt7 1K,ǽJ]UKˇI럡{7h}b` 6{']k̒;C98rEra\U{0G؇&E(uLB)pzj}Zvsq/1cLL?4 +endstream +endobj +668 0 obj +<< /CS /DeviceRGB /S /Transparency >> +endobj +669 0 obj +<< /Author /CreationDate (D:20250923142443+08'00') /Creator /ModDate (D:20250923142444+08'00') /Producer (Adobe PDF Library 22.1.117) /Title >> +endobj +670 0 obj +<< /AIS false /BM /Normal /CA .619614 /OP false /OPM 1 /SA true /SMask /None /Type /ExtGState /ca .619614 /op false >> +endobj +671 0 obj +<< /AIS false /BM /Normal /CA 1 /OP false /OPM 1 /SA true /SMask /None /Type /ExtGState /ca 1 /op false >> +endobj +672 0 obj +<< /AIS false /BM /Normal /CA 1 /OP false /OPM 1 /SA false /SMask /None /ca 1 /op false >> +endobj +673 0 obj +<< /BaseFont /YSXCNX+CambriaMath /DescendantFonts 732 0 R /Encoding /Identity-H /Subtype /Type0 /ToUnicode 733 0 R /Type /Font >> +endobj +674 0 obj +<< /BaseFont /PCHVRP+Calibri /Encoding /WinAnsiEncoding /FirstChar 32 /FontDescriptor 734 0 R /LastChar 183 /Subtype /TrueType /ToUnicode 735 0 R /Type /Font /Widths [ 226 0 0 0 0 0 0 0 303 303 0 0 0 306 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 579 0 533 0 0 0 0 623 252 0 0 0 855 0 662 0 673 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 498 0 0 0 229 0 0 229 0 525 527 525 0 349 0 335 525 0 0 0 453 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 252 ] >> +endobj +675 0 obj +<< /BaseFont /KSURZZ+Calibri-Italic /Encoding /WinAnsiEncoding /FirstChar 32 /FontDescriptor 736 0 R /LastChar 121 /Subtype /TrueType /ToUnicode 737 0 R /Type /Font /Widths [ 226 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 488 0 0 0 0 0 0 0 0 0 0 517 0 543 0 0 0 0 0 0 0 0 0 0 0 0 0 0 514 0 416 0 478 0 0 0 229 0 0 229 0 514 513 514 0 343 0 335 0 0 0 0 447 ] >> +endobj +676 0 obj +<< /BaseFont /SJVNHJ+CambriaMath /Encoding /WinAnsiEncoding /FirstChar 44 /FontDescriptor 738 0 R /LastChar 125 /Subtype /TrueType /ToUnicode 739 0 R /Type /Font /Widths [ 205 0 0 0 0 0 0 0 0 0 0 0 0 0 0 264 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 350 0 350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 387 0 387 ] >> +endobj +677 0 obj +<< /BaseFont /HQGZJF+Calibri-Bold /Encoding /WinAnsiEncoding /FirstChar 45 /FontDescriptor 740 0 R /LastChar 120 /Subtype /TrueType /ToUnicode 741 0 R /Type /Font /Widths [ 306 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 267 0 0 423 0 0 0 0 0 0 473 495 0 0 0 0 0 0 0 0 0 0 0 0 0 0 418 537 503 0 474 537 246 0 480 246 0 537 538 537 0 355 0 347 0 0 0 459 ] >> +endobj +678 0 obj +<< /Name /Type /OCG /Usage << /PageElement << /Subtype /BG >> >> >> +endobj +679 0 obj +<< /C 742 0 R /D 743 0 R /K 744 0 R /M 745 0 R /P 746 0 R /S 747 0 R /T 748 0 R /V 749 0 R /dollar 750 0 R /e 751 0 R /eight 752 0 R /five 753 0 R /four 754 0 R /hyphen 755 0 R /i 756 0 R /k 757 0 R /l 758 0 R /m 759 0 R /n 760 0 R /nine 761 0 R /o 762 0 R /one 763 0 R /p 764 0 R /period 765 0 R /r 766 0 R /s 767 0 R /seven 768 0 R /six 769 0 R /space 770 0 R /t 771 0 R /three 772 0 R /two 773 0 R /u 774 0 R /zero 775 0 R >> +endobj +680 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1021 -463 1794 1233 ] /FontName /BMQQDV+DejaVuSans /ItalicAngle 0 /MaxWidth 1342 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +681 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 352 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 318 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] +endobj +682 0 obj +<< /C 776 0 R /D 777 0 R /K 778 0 R /M 779 0 R /P 780 0 R /S 781 0 R /T 782 0 R /V 783 0 R /dollar 784 0 R /e 785 0 R /eight 786 0 R /four 787 0 R /hyphen 788 0 R /i 789 0 R /k 790 0 R /l 791 0 R /m 792 0 R /n 793 0 R /nine 794 0 R /o 795 0 R /one 796 0 R /p 797 0 R /period 798 0 R /r 799 0 R /s 800 0 R /six 801 0 R /space 802 0 R /t 803 0 R /three 804 0 R /two 805 0 R /u 806 0 R /zero 807 0 R >> +endobj +683 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1021 -463 1794 1233 ] /FontName /BMQQDV+DejaVuSans /ItalicAngle 0 /MaxWidth 1342 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +684 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 352 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 318 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] +endobj +685 0 obj +<< /Filter /FlateDecode /Length1 1339 /Length2 2807 /Length3 0 /Length 3588 >> +stream +xڵT 4TmVr6{GĠ)1(#D2131^|.o +Q[$%9*Q_o_߿ֿֿz~}_}=}?h{B8:FFɆx"o A8A?Eӌ#Ԃ \̒2841mcght|p3 8‚fR}F=4D@I| / <s +*cE#, +|۳&ĂꗨI$5Mkњhna59GgzC҇fiiyAq5.wD\?A!(;i^tf E!OțBkJ =GLJ +rﷃ\^t5g-lmq{qQ T hj 1@دDʿ ?V42a܋a> ϐ-M!q)$_ C~kGvt`&R)+#SV99As9T"2並4o*pwQ /{ +TwyAL*Yq) 7GX,@'4݋BW"I B@AZ(ͥ ; )ZfM0;mJ ("{:}p%Psɣq{-/[2WK}A6=qI*VͣGB֯Q{g5,~ VLDX^[Ixb`!d|;v~t3f~JvB9K˓Xk[_JIVot*θo*o[3Qrcqy'ji]4T1ī'lEU|aJolU_=$;V?rryAEV`Xe.Qg4yQsd'aEvѧ|k{<_tچ=i\iWT7"P6z|v`;_:2VGf]4!PmW–S|uY*ilRXe)uaP`W+zzw ?ui/TSAѮU[ؔޝ1ʂ>IB9ƣaeu }WcL|2 ؞YGȿp"/o]FWD ` zE#{30C]&)l/QaZuRpNB~M1\⦙|FɬʛȘh9!i]ۋGs2W`jkOT>"KwJ˞s֥HHkQ5A췫n ۀ I,=&i4јp:=ϋw\i|^!%V biߋy= +Y| <%"ܽnȚ5)jAVSe!Ceu:"eWY3pZ E O'I佟+ga\֟vS:RdNam;jv^kYHV 353&9+w>V_fx4Zc$62/|)b>^ףKug.Kr+M qIXw+AxZ4)&ܧt_=+iCdTWǘ.SZ yjϚEI9H MV׎%*fm%o.-uTs0?̜ޚ5=6 W!k٩*'83rlZ.XVp?Ս7J-R<[՝c[ #IM#ˮ4j'ܟG1 Y3KeV| KL91R#xbZ iO +08m hS;=~JEmO[z:!`)*ugUs[a5#%1fB{G,!xAM~EDw;e^gin"E֟XyG̬qԸ £64jI&!SV%`²A͈0=$@t%Hq,)S59O{S/]vb~v>6[|\{Ys"XQ{vD1{}I+b& e[uv$7$=kdPphԦSfxZ QxWNzb2͕l +nd>-m}wjĖKeQw tɄ&lB+ <-ey\-z>})Ի| :|8-qVigˋ[Θ0yW!k }th 5Y&Y%@;v-4cEktzOP7QNd1mD_d>zWd|_ wNX!/С􄸇OuqC_|P I6~mX +rJ$): #ik9W +`4-ag3_mR~GSdZ +xoRQV[Naar277+)k//6NŸ 7~^XhV`у<.+6-Ji:9QI<:1F 2gIL'%{(: +endstream +endobj +686 0 obj +<< /Filter /FlateDecode /Length1 2026 /Length2 21561 /Length3 0 /Length 22833 >> +stream +xڴeT\۶5S-$Hw]'Bp'G} >1 h(ԵX$@@Y + @YEgڸ;8Yٹhh\nv 'is7 f.D:]ߜV o +\7 n,77 "rvuSO?ْEsK{'`dPdUa<ߌvzhk` Y-M-[a-wggp֑cHKj9-??Nomo?}hKhpy +_hߘj +rYӓ +rauv r} mns&e;K'I(ߒnGmnj:'9\euue- 0 A @Ou_. z{2c_s;Ƕ9nT؃_6 UY-m79ަWzoRprrD*d%rt|c F3>i9\-k{'lmdegVl:Nv.@ ~3!m@ҖO6_g3 } =7Ww?8Vvno2*HUWpc~c_הZV@k$6Uۛe%jDfh0W:;gZ۹Y5d/d|;L:nÛd֎ݟ`MN@0 6}6 MmC('K `j&N/Ǜ^r{K8AHNRf` ,qs7}`9l\6r<67Zo߈9 9h8p)bVo+X#տsHS L㍻ߐ?kA뎳-y?\A@=;w?BT\.(Ǜ34dKJ|Y߄F!sW6_MIDZYY +}x^ S<[ K#zR'=ML ]M + nʡ-) ;|uxH1P Fe QYd8R/2(әIЙ)%9+ҸsG2QlNBgyp E8> G4e"XP|4|JQ6][~|s!!2NʗfG>jYT]v+'vūZ&Z\y` 8[G$7.,[3UX2~<2}}:@%xw9/ ]m\d}1TI&(ro&1*̎L }{y:1EQ*}3?Uo>7@I>}LMmũmBY`5{# .G0Gv'Fɒq'ED4ZXPuIѬ}>|APE6+w61d(|%5mW^Vxԓ۷H|3 +v選D\cRFAs_Ӹ]H\HǹPÅIľQ %Ty|%e:cDt5m֍Bc"cE9z?~1oȉX!-lQ/] jV_@_uSL<{Y_@^lk ڄ!8~JL.#tl/?o +0]'tv;!g柑>* Iu\m@NqaWtRxCR65Z: , ~҂A}'@yۑXFpf!)*Ŷ$|P., \vVL,TwaplFhHKNZT@M0f>)e@GiڅLz)ٍ;A +GqA>.ZotQ}ۦ&2MS$[`j`n؋/HS[A(1wAhoek۶eH~k7 *fN,.$~i_)ۇbu-̴Xsv^Rk?Y(ߧnԱQ2Z g7']BZ{)bVæ"jNRN,xǤj&Vt}UcT3PA>~ Us9ۗu)CN<p*9K~:}΃c\&.h&|'aWUy].yTw"ѪI)B㩯|ff~0V_oO_YbBi%56d2\'.Eh +y.#<O+'GG=O2l1WSmoQ>2g_yxrZ]­{E\y}~ApLq%0SMlNȫ-b@"- -7zbsCӍBϧ°:h`>I9,KMox=D>Pb-d$H壊K-s񦊄b B!k˦{竓DzݓIWfl?1N 1$ƕa8i+G=K]b*VIH!js{_@CaƉhI}\^6 rbm79Bt6fJh'lF0tԏ17|ܐ+QdC3nefT$X~ QτP Y.tF"їGq<Mn+ݒIݦzwc,ʛBrsmՊǯhoOcʧXkeCxޥZm +=gxdi}:Rcݶ?JOr#?[; W1kŀE uXЂn +0[-0_%V[|9F]n;(W0:d2QŁVr{ 2"Lߙ"Hߡ BٳمWV#F- C²*ǠL +~rLD2'xwlc,ݮd„YKKM'䔩4[i"G?&15c6Qjڟ2dKKRr7˷˂~XMr YˆV d^w^v4h2'@%فaM ("&VSLMZc(:$e^.KRƀb5/AI0JnfWG>QWg@>ش<%.v 9RR5*Ȗ6(4:0tķ +%QԶw,?W`m|1?;A܃b,ЂZHV^՝RE1'_+ gHuWs >sdN}{{[5P\I~a.~aӍFu0Oeb~02!w8Ą~9Uã(YC=hEku@RX9%zsx "S4hU@'O tӶfuKNG4P?Q7oSC4fB(U;)wҲ%;N>H9E +kp⇆!毁Sc)qW\隿y$'"ŠR9]]p"J#B7eV1Jq~ȣ7"߳&kjN f;޷2vj$*;g9^vt3窼I;~Ii38}4T2bMc +] =]Y&E' +Z`ZB!T>˥t)IcFX>:$ i?Af\Geku)@w-#b^}?OGX ѼsWKL8$<%0GLm%5Eyeۄ}%{J$&مMF.R7a獎:ҷr}ݏ.&*vr+MhV-1HYicms%zjn[Kӵ4B2YCY^[q +j5=!D@߈-b#AhY87VLP5;?jG7hiLh/FS!ps^c[Qx>W!Vh7]٤TCdimuC9NgviOCr% nK=uPPHTCM8 [+T[ Fr^CN{rW|A h4֠ 2lwcehΎ-\o=%٭F-J{ jsKMS|3PV'vNQrF*5{-3J@2U+|3_2U)Ƭ +F1`Z59_ǰ݁=:Ɖb+Μ{.-= &< ]hã|FP!KYmO|g4% n_.he3i4*׽US`%i\CXmY1u^foBәsM=lOljy3cەɲX2"ܖA6\La V2lzGd~Avq95Qz?nh R9&t'; FFKB\W:)F@OZt2$J'ٺ]6]nRE(U[¥ep7io+(ƦKq>1hhN#IF-uCSͲD]\; Cҟv>[~x]"G@<4s|m +Dߋxs5-6dP{5D"u-Պ'=P)+kѮomXnU_XU#4YES\P5 :& sy~a,`1h9>]ק/{{,KӾ! jZh9*fg[^O%L>WDߝ X\"۱f/G\6#ZsEHT|"R U(u_~LSdX%" F&$o M :`~Gv}q#|vb석|WEKl2.~6 +Fx~l)CzNbv6d,6Q-~Al;.N Nu+1$4ɔؑ8a\3bP'㰅s +U՚4]4Ġa<þ0#+f sP +ס| /@+w2%..| ~ +o@>7VI bԠ I훢`+8\ӫ ƺ +w.=ʹT204@4f$T9vaYԖw}O|]aoꅷdݳN +gs) C(s8PGNv8%'\]ξR,4:o'SZI*X +^gK8j0"\Ǩ.;>۟5ss)^ꌕ9M[Ӛoұ;ϗaxWIe@Vf}}%W]yN0gUDN26!*Z̬4_Bqx)οoSWa!wҳ"klNtDnlAv\&shz5 +M]@B|G#~LEtέ xtD= 0xhr=~l3=D36x SD5X+`a-E;+XM2RJ&J#K {+z( g@K=Zu5r4Ey jl$u\z&.ɧG P%>p{q jg >~`},{Wy/y׎P2sVm4%0 =UwlKvSX2V\꼝aG`/L!}2 g®SZmݿ#M&9} $}@lUk.Pg!L:_H 4I)1 ]5B +/{uVVH4 )\0Ÿ!2^EGį҆efDA{@8̥M1HP +YznF??[mBJBT\&C + z~.v-Kfw$hlu%5ƾG:Z,<"7xXO?SNcNk8ڋlko*o"aO"/fd=O#x|KxF)"G=/SpB'dhޡ?u>xX@݄OF!"7OH?vo5NLM-!4pRÕwiM!xHp|l:܌"+Bpw^- W^xle*R)W*Ũ4x~!jSC~?\g^xa{Uo|nT9Z%YN yКIRrԠl➆^x9e7e!+/{'*'kzg.x+J |CJwVm+dԩ4Gca4@fU^w0GwWT({wt"vAHDK+Ev8+mx@r܍*B=^FK;# 4i%&8&0MIbvMH 7trfH#"@rvOMo/::4U dAjy"ńCL&YNRONȜR+VOrKwVKư0I?p[dH /ɨU_7U ?-1ܿӞr,wج8C;jvG +sH&;SnXq'qFW[#~sO2I&w|{,Nw_S"~D<ͦ&{JBh=X^ma%|+uo <d3s/86Ls!>>z2L8&_:6ʙNBo=H^~d* [U/PS$ξ~!8AXRl@_?eLzيs~S{]Qз&d{uVTNHj[.Aw5D 9h1bxBsN95å@27,1\KH+ˣnC#;1ys/eac'@/RK+X^btǥd3!AhmiYE{ p{I[Wh#>Z=Ïz"%D3T +t3B26̇ף`;kMb0Vb%o}U=N U[ek{S)^lŨ]^a:x$*S3V" W㠩_0akfH UXG ̋qGߵ_aW*f0b\\$M&ӳ㆓k)9?A#[<ƷdTT˝|VS@NgCVesG?d,Nse)x ί^ʧk z4ׁW ?_MP\׬zw8lwfިr: J}NF\I^ HvSW+ŵ#Q3A/gP )O|s+~Ċ"ka^*EiI;'./NuՍ>}nErȃF j#i ^%jLm&#hBdqr;QKNNBJ83 VPRQβ\ABk 80/t-bNlzU٥O9,CTmRbm^QZfc *Y1)!.v?iA? [k?\o,cL f!miîJt3χmrb@4r1&><EkuZy޳NaƅOfkj ~P^*g7AcUMq˾m&FArCO8C6FRuH +O}Fc 䨭~|%lt36D԰/Yˇ-}fFD| +y}~O~]_4Lm>}C:M<*~X࡚HHE$zUFxMy~WRv$;K2-Q&$`.zêh 3 \!*ș((AM+A1CAlGk,W>9g +`4l||Ԣbr"٠ +`C ej COpMd_ڞQ{SP|APN|GAXtQ9u?sTPOsLZC!2L.T1?|hB + zIj< 3S1̂­F؁Td[>>OP-30,~(*v`f>$aqeyJFLP Z;Xw"]yK%OOm<ֱt ϢK'xۖy3hJ@:Y@!w[#֜ɏ7_OF%HGyZϡcSͩ7[JTd4w0l`d\t_)@ދ\ubaEA)eMTL;9gX̙GIqxJ*(2M3"^`D/09bÿ~_ù 3*g;KZQ엂j\h` ]@ (Wx4M-#l헱_wҕ;,~u 1!2kiՐM1ڢfmUږh[7yP1UftT>hxV ͐J`S?Dʘs|6SQncWFR @>Ö?eqQk\p7J;εl Bo] {vvEkez9$;HF!;w3v~.(wӹkWNQ]1sz7U~2#g~U-Mֈ](~?aXo Y25ye26G߿u$-%%I zA +EZvjkȞMPs ɦ@3xI!EFN\XK4ĬG2ve|GUVUdf,ap5':(!v֫; X+H6IpaJ_0-H=(!P cefMrwŸJ4%j/_ϰEDp\|$WUk|n>sN~{Yk!F$\Dgr.=}WYB1bJQ)LY!c Cd\vt C9˃2)͗4HbmT(5)}6t<'!>aak@Db)U6Ꭿw^;DjJrfqŀ\SXpՠH:'_TƑ ^)}ND%M%bT)"[[iwXy#JXչ1n+qCנcxkT/:g"pm+5H+;|&f%=LU/EvY\jIm?;vD ʏ2 Ͱ8DyyFQMEYL#AvZw!2EXy7V5n}#a&J8b#u!{+ث.ߔ7 4o&>'3c̰wd6bnwJ楼ۊV$*Jk( ̬hQg:Iktb l+&6=y=b9; +kwTqH74}+auOd0M/z֤T/TŗdaɅ+ʁK::-b0>V1T9RfՒK>ǒًv;! ɢ@R#e{3ƭJVY泶/rϏ1ӎ0ܣ&{Ysi13̪ꇂ  tە +CJG'QoةrYYW~N?ß%uU42`2Y#'DbOBA]d?8_z4diA,9>>EmmD~]" -fJ:<çTJ1wVtk g i"JqDhNRPLy?$(VuoſGuՖ*o{ mDN/Lv$;O {Md#pGddk3̒)Ofy vyWjE"3f~,|tڈ +j#Kga8F,NhA8â%Lɴ +7qA`1Ve8"-Fг< 8Ē;Ȭ@M[\s1m|nJ`VE\R4]yI}&8^! +QA`i'w&%:N& +Ñ%1yhJ4 +6}'R o-BTAA?r1ԳP}@SxaYNČ}G-_F5;-ˤ(MU`%Aɪ0!J \_Z =^?DA]26N"yJQ1E9W +,aޖCu@uV_ZIGV'6A +NQ=:VjxNSAUYem򸏔= jrvsV¢ؗAѲ*)Vɒ1(\&,LbdN=4:Gi"W(JQyqZ^0$a?;fr5'8y%*GOHžFި6cC~~ʹ jxW }tm'`W BfQ- 'ZSьM˘5K>|8/ H!H;2j|fWݜ>aj'"6vZ!f*Wi]Ecjwd޵+9CdB +QڽcuF/ST ؕ`gJ@lU.Gy\!}7'5sXfϹr1`}/gtvguwͼVb8`٨ѪLnX'+~B~z&gKsNd^9 ]Q\F։9CIHoSRBE,\״UU~{aXcWfv?}A\Ji9 Y!M]AgIG37-BƜ9d˵ :[X+F3P]9tlTPp۠),<#ć:R2 QIPeBUt/vi#iUa ֲSQr= \q.VxlWc pt#,%1g'gSedzTA-K8s?8Ȯ |_ѱL?Z Cc4L~Ge=χJkMdm?ߑx~2BkUf^se* +`Ytt5VqFH- )|Y1l۫YImgM2"t& FDDZ`;^lYCE^`0 #QH[\h|z]k+yN[+R YՏK@§J|ncR.I[#։pʨ/両2gvPkCtcr֚z hv\[~-T#o#h-B@Ӡψiyɘ ЂO b}w+NU9AT!I-mK)Ơ>d0 Bܦ D +Wb 0E:Gba_VZ0s ݉IHɝ_78V+?uVU,H\밥0),nO_*>7nDI\{v^DkUm'Ŗ{G~hO݂D>J +1D}JA{\!0.cnlYvH(~h? T }+2*}• "nfNFp`Y8drQwFLU*pWnM%O'l*w$)&w\aC`CIn̒xGA)B+4q3 x$.sLj8E777_GM%RW{xdYp$[HO$XB3$)χFtLy;T+LdZ3[RW> 7n5#OՎx}l(g+&Oxp<[x5m(ggvvjl +0"Y*z@@]^V\[Dm`w=3;ajM=TZ2(r"TnB5- +;<:,UI2w,"ך wa +y2C?IMH5^0Ω j^V=O +máv_HtvfB݇Ȕ D8'%ˣo#Uu5?|Q?J~kBOْK1]} Q‡ډm']x𿢊_wa[Rl,H5ݣVՖHc'ʶsX+<1&>G|ohyۅ"+&jRLck92r㸬/b8E%w1><]ˋI)My:z!lw)rR>g>9CVX'\j SXĬ=92]pIT^26ۣ Wdkrt1J5\5€9znF(2.SDW9N((ysjSlfUҷ.wjJy;՚=rZQuoynWDpߞi_q gzAn摵?;o"zz}J M"phϞI 4S:3Wt.ݘ+~CXWp4?4Lҡa7%7s4$jIɚVhdYqa)Tj4$"OZ<sB)hh qs>~_>,m~XWg4)_Q_)u_gyHL>@D@.EPwLSR_ `[t} c*b̋㫝0,qp*qC"wb 3Ed8ѳ3/^P/+3Z@KۡW +T*0[l +}&%iAbS##x|ga}qpe'~*%v= "l6HɃdcU4jROF'`zBՠ1<ǤuԌF&>+[skes">0擘Cs#>KO +'euyɖ)L\G)r՘=G%`XSL|St=mB Us iX|/+ƝGz$/t3"Pk{xa={UhP8גW$i@F>-CXmW}U<.;&1K0fI׵WʁOwGTrw]8t02K_$%0=[%+#Ywưaz + |(>#?S2A~%5~_QUo<)$9y}-ͲRYX\;kYir2@9$G.6 kNI{On?Yr4|y1p2`ʵ_1nLG=sZZ_tCE댵$"˪&N ոS>< !12gL8/OzP/Mhˑb0fuv:av@PC@$H^9̘rv-uF7k.ir,K%>`h}neI.g9a%WCzG3٢"j=øY2l"99T;f !Mͩ$RZbYLʼn]k8(8xiдOu c7YDwYPl//eΐGDT3UBOMd˟X6hCc!xm%@Fi'}$s z*8D@>e-[\?X03IX*v"nEVzHCznO- +RM5@;xo#&NjtjR5j0B5%'IѦ4]7y6jL~I  moI\O[/^ZGۄ*mu*[X TOraؾi- ȓ17I6QeT*+c˔)xWMޮPd[*p4He%x-aam.dX(*xAz|A a3Ѫ >%HB;рY^u*Ɗ{>j԰ФGxaոMGGn$BGhdVI]-zY|[9 +==|tAwGY xB+<莘dX4@ΎSUɵ窙'G2K0`OX}ޢG95K޸'-u ]H! Y|+BTȨ) sc!c%&8L N2E]>/*Qi1tqI@,ˌqV]fN,hgmʟulTw*F,^ozР8Z"^%jh76(t&{-4mò~ +`'(3sx9N_韖[ixg!Y0+@γU{ZP~Bqgz 2hK'n*eG(MZ](k + ReM3,rb$?N^wDtf:*K7'/BopHx`K{'OGЬ"Ib%Rƀ5Bh;C R/v^L +b^hS7ԋ8tV} ݢN1YSe_VH 3b[a΢SW\8%&t^'H0*yoh_ +=J2p }6uWu?K E Ǫ*q\|OH0Cy,a}/ǣ q7 i ]UzJJ@քW d}3%ډܐuVfA/hXɜok)ѢwzWqE .+k j߀#JQY1FTts垑ҴF?(̲W1tTv6 [,7{]9ٕ:*+6}3Adw1`D}{(ҏdy7l`Z +"\H9_ͦ)]-@q@dxL1}D0xL f,]uI&֌ˎ$/T6-Y+KSI*}|2A6ӼC( !PeߌSvAEώ|@UUh: Yg@A hκV;RSGlyp)7[M3w{it@JԮ4tCQGq(ܯoR렏U%l'2j߹b,߄:|4c>o9W 2gC-Ss`["-)|q^j+<9 :R t1`:TN"u8?p z(vwcrLdK.=La#L?=R:GUl7w 9XO`݌źi [jݯi/A~L\_ pe(/I̕id,4p~AW+&Tyz_7/["[c\xbq@Fq/!̜QU|aT$;-',o +CqBФf퇇<7rQ-OEਲ਼к=-h +" /Ȯ[e#*aͯ%EW]̌`OwZEJ+xס0]}NQIYxsrn\%$W5 'n{lkSZߓUoh\g5ӾƇ[u|*jNĸ,g*UdvVѩ;"9>tn?{bK -)L I$B*B5$x-Kd +ù#^QB$~ɞi:(OZ;ȗ{DfVQ>zS4Q#1-C.o#ށklSK7\$u7BI)>ko+8 )Iatb@zXu?pNOYõF5..^tH,=_Vx%Sw0Id@9w@p, 52NnÙ 8a\n:5rWУ{@8 YZi -֦>Ғ&[ld)O '=&ՙ\WAU^!!w43hH=ZK-Li nqާX.DnP4n cʟyBv{.e]5Yft::B-" +VeYp2Y퉎f4\Yi˜@ƇX/2eq"!Jl ".@|j/ypm|);P*iO-X:!Tf|WĊoqut-%IhvGĤrE;R<}zIHxd#Rƞ3 wkKn|rlVy91Y|-'T R+C-*(?A2ѳKkwEL,I}^IAz]GGv/+)uʈo{vjUga9}S%K6ҒWi "l_q#WoE]*8*đFAO5e>MEG~XWy[4%IDk<6/~e`9Sw,ER۩*' BC6x ~tKq[9kh"R@EK6L`6^?/E\'zksԲ~Ԅoİr3]hf^Z%0-$bC%nt-%K$0M˲7'CN$b:gEvjhip-ŝMZ_IYɌss *WdW0DOzef$2jGK1WorVtX9(/8Bܗdx$8 i Y +"TI<1_e:RI)m u MQ {cH#U Ϊ*h +^oa-x ^V .y9jLP3z;hgu!} b.gC3W N?ZEɷq?زֱ(EgIVw/lwJpH 'j; +'lC3حa'?vN$7>:%!{TI2UՕ%qLTiL_MDs[.ĉF.$Hr~pA|53^Bڸu(ru₩Y]\%H/2ȧg[J ز5vQT17ߎmytcvkwU)L|E٘۳謜4& 8(u9b/zA}Xbh< B@#yP/YMx֛mT*)}՝ xΩDEƆfHnOH,7*>@m5s+ wuFSY93(H=T(m*jD e`ldzapK4#D{vM&(/n-GwK3 +k䤓ɾw䓉Jv[MH'E7^:5Q=hdHaX! +ɶMe +endstream +endobj +687 0 obj +<< /Filter /FlateDecode /Length1 2469 /Length2 26511 /Length3 0 /Length 27970 >> +stream +xڴeT\۶5 +AK @‚ww CAQ{pw  *{>~_Aч>sZ*L SPPT9XԀ.v&`;3++' +58h9H@|@ MFP@0i0(!&@6_@ a25q@:h8lmiSO?b93[5 Ǭ PAZhebgY4MuI5u:3#?\54J#@ZS]_ %#@I4O$˟lW ϲ=ojT 0V# 3dv3 @?@;_¸8CXUϦ̀?IR9RBvȿAip3X87vL̠3/hN/@ g uRA;ӷ1q3qpq6ٶ@{?{fMQTIVJR]I:xL :w_J(@G +RIsq=3$:A@`3׶ 7kv0# PV&m@tͬX,״11Cer9,L윁>@+}O06@zXP.` eڿ*<@ %:ZKNHߒwDWGJ ݁*3TYb}QK; tO2i9Mvб^=n.7iftvpBU/P(+2+L dn` `&(9`xAGנX@h +Ql&7E_"o`A#FHſ/E+Eo`Q}hB>ӿ;AV6vh9S?ۿ@qA0A-,`c77 +lP@YX#G4J8}Xy8ZYB9B5hom\T47h2?fvC8BC.6hsNޜ\@ؠmoNsAÝ^ -6 ж!n$@kBEsقfB{ `?fֿ<0!&+beڡ?,@3bb w/&NLP]x8 1םzy@w7MjShdt95/i%\Rt;m +pa@B orC6u0z맪";&0$Er53˻(ruJ8g3Hc1쓿S(V܊ٚ߀p:-NwB~?6]3CteH>rU1B:ˉ!PT-v4T/*9?6mXaˈW9˪j$~0GMAg6e=6Ƕac\jF~#9ݟCmVps. "ʩ% ̲G3QM~NV5X/-RFfBHѤ)ٞq;:Il+xrr!dnۛ%ZE?VJu zw[ߵE[rטcY(0bo1F-ieW*ɗ+$ >mTI1; r +f+:&p"*Vz )Vt%GmUሎw+.Խ5G7hgu-ԃo,hkTح'e M/oK=snN▏+DԶ^͘_lS,~ojH8w6ܙZa22quVffme'cC\4_7MZ[$6 ۉZL7,*~'D+vqIy!3xk~UM\ͤ ޺yWRLCD8'yDz'W 2:f>}@ iMhd]NzkSyŋ34ڳQo)_ܬ xcZ6(<PUMN'zgCNI6.12:&b~eZgN尴S:*wIxq.=#nդߵ3WDdW"+YT0xM@HM)eGWu85PhDRH +|r]0"H ]62b7¢kInjMyȶ Pd~MkSoB4`D|<WC{fL]o7jʰՁ=g"zDbUdQo2.tԌp]|=g yDEjhl6_^ _ONhrg ڻǴf#1QGc&bF+ci7l RqXקInR@B^kbg)nͪmQ)i3FeKJk+\NjY/Ei wY^TIDOIN3'' +}0)vNK3썩7fim g œ(\fa%gIǕǩvdo?ke AMBCR!jϞ( dZMEK|zoe^kY +ګku:406m J7glMKaaQ7Huɳ#j 0hhoZ +mYO闞:|k^O/ˍ1^D+SR}܊-2^9~DM;U_P|KḏcFɕ}V{r0~y!tlha` zB0=R'f |",< /Vd-G0f^,N() Qa2J^;qׂ}ϻbU>bH)SgT墿~L{%G^fN`2Ԓ *nPy˛2fd=ÀP$j "]\E/xI==hj>#+*6Pc2-5l>J +A Oj$6{d5:ΦݟVujF-"Iy.[ӷItn^8As%cmjK&~RRħ!\~oQbY,k/{a43Z? #'ǏQ/K&0V$^\~J=?GN:CwC~tO^T}?]֮Z:uc_]VVA?|uokgQr0:!ؤJlr.NrBY*~qZY-۾;VV !a>U>Jm<wSfgaWV\*ۢ*Py~RzY="z%7xnv4rpBniFR5H`QJXfA]`2 +D#S {wvUL#cB%"d*zO;CCp[>L#w<5+nU* ` 2 +`}(Xv:)Twl{ d֌# +t4̏!ڜ\TcΛmf;][S.)b+__U^ Rg.JxX8>>~!E~x Rk>C^ʷ蹨d#-$S;B/96̓x5O _J 䲣$}Rݎ߆R>{['qMoFL@h6Q=h0I\EG7QOŵXӊ~xzO7bI?5a'<,o{fCb1[Rz;ZV5%k64|/i oV=`$ykZaS(_74 +^5< Jso2Ă|svd|?7i٘DKFqOWQN/3䶚ݔ,Ai* ?U8Q[_:nv{[hp}殌P +ʁ]@+דEOsj,Dɸ {dYtChon=cO:b۴ko0HD1T43*DSh0L.aW{n;eޔڌ +`5y 2"_i# 5S yEzu{!ҒFD[%3c`w"uʋUXV PvCJӟ +uF1,X1le$IO.H?p5tą`1 2\G1 ]X2mG͠mJGl\cJ]))ӀD\%;;GIx^}I5m/.hk˛OXe/ x;w.ק,/Fm y,j00vn&Xm"&c'҅ +19nSۡ].9<[%X1[IQ+ +J'9',fW.tչ6٢B<ӧuo=#s}|jOQ͒dԠBZ_{K[[浄y=y48akQN|+F3qq˜Cׅկ&sُjf4]r9b[zC*bHi5?"bN)M={ g2p+\&Z A#~"cm:\vJ*`qZ7"&6EEumQkS]0[k.abI&WG9mbR~'O֟[</-[`NTz|\_u͘ĩ|dGk,UT)!9Sw!T󨻫WrϹ#J|$NlvYn3B +(/3TfC<#&>#v%nc"*!-cyOTnUsL\fU4KΈ{F.`yUĐX> +ٝحLW!h" +5Q>(?kƾctsp!%M cmtxcVE:5}M! *dfLڧYb!mʴ3çAvG4OPA]oqO'lѠef&V&Vm^D&rVVWIGtsHLQGz$(l\6%̟73 >z)/nLǐ`+XfEGҡgWWTY=kr\D+y M_Bf9i|& +9x;|.4ٰkkR !xM]9 IV:'8Kz 7fGi60^!xYf?N"W8g"mtF:aºb+t޴7s`}VQLdcݒ%Jg'kӶ1=.QqQ@^+|Z%f y< AHO}2[No&) vxOK6#wzzp4%"( i"ȱ\YW{=qNSɣM%00`i +f^΋1pz5dQՁ$[ΐwrlbJ kwq={xr*[ZkVuͨrs_*5VC/;ߌӋ w[ ~Q#q <*t%Qo8;`Iʍ+~ o~`Py8,0qèE{`<&X|ޔCZA^Wƥt_Y:HNze^إE,6r*X sŻ612Ultjyq}jVI4zּOdm9#˅ɯc5O 8MRjF%!n0S=J‰4=CVZr=[u +)U{Q3~Ө,-½Q6Hc +NSW,H1Fazr'af'wY: .zwl5ܶx'o1zշc騩`}uR[LEpx J{w[CUF,҄NB ^U + &u1k +Zl~3y{s{ 2ey=/D5;1\uqqֹU%"@qp [̡uC/kÑ/|ɂ]_qv:~`>*+є@bmdA,.n FC2VP~r^UF+"1b}վYJkXIY,1|lČ(i(ճ:_[vm u0c[[l;[<'clF_Ś̅Ђ+ǫZCM19-OkR$2y3@HvT>Jv1!2PQŰMoj n2,T:~aa`ƏX7ƭ)&,pT3o:T$Hf[c(Zރksa,,?)ωrrwU,g-{#usw,UqIok915 ΖAcu]j$!\ZBPͥ2>if>ȅ +W +9 +J.)Wgbo`雳 fLR}BόMH} n$>lfK(ዷp"c(!MYYگ 1r)}`J[ _A*Vd6,; !VB.:J[/h'B濓uDE,*~/`pD\KYK4,b5cK[K4 '@')*&I`-'N.,{"ەwֈMڇ7>AF~OqT8ѥLtuM!yesİ=a%fwWB~r\ں3 ˕-@=maxc7'bF&Q-d(0Ry]*˛͖P1 ?e+6.|sk=NL<8P & `yANE +bHNTdו5$.1|_9{$ѻmN_rR.iS^dӭa)BT=X0bo}9LzX@By^A7ύ.3fP|ƿ!db S)2+q!oPc9(_s R, }0ٙhfGe-=LX+rб Ӱ/$ |.߅]`ͼ:Jm(~t'3|c@VNMu7'wզf fCɟ/'t>N! E¡~"ybNcv@gvJNҿ!7 ,0f!ٌty6r[vB{Ĝa>IU֧5Fٿ9w\i2^Z$mJ_ݴggd'dz3 ԉb՜js%QJB=vvm6f]G`ٚJTu7JyNK=Y< +TyVR+Mq|C"N(ZR(xުV]!Gf" wmل͐n$tu$s5ӎK5DiVeU9}ޣmy]A7Du㪘Vv¤EֈL:$\LEtT*-Njxp*o*6ߨolUJ]O~'s{asEAǿFyFPS+Em+*z )]sTⳢIr&9~;&6/  +yo9ċ9M68i}N;.F*ΝXIq +`We"ọ4}y|bk8GFŞb"e2tE+՟>&׹bM%{TB:S:Rzwcߤ1u񽔙/W ڑYl+V%6F|]@_ùIOUd+bs-^B/'{  e5|*KU$vnXɑsKZns|氹Yty3;&)[BhS g1GkD +EX_r+mNB'd}ä=Sׅ8lcpG<ȇDb ܡ~1Ř ݓgg vCm(_ƹUƚ\H]Y}j @PŠNL~yIMe9wbzr"L5 yb_u I:/| ч/Zbيd *,A٨[ull Z^T$?se#R2T7cʕ/bڦ#y.m2bF\-A/G[aQ4' 4 _KՙD Ǿjio%Fx+-qW3F50/1|%I3Ia5=nUv3l]e{OlO3Ʈgyp:`wLɜ=T5ӯZQqTөLỳ=ٔ-d-]±aݭӕ/\Uu󵕡,S# 00(hrn/N~X#ﳔ|TS xyn%"SCw\hyBxZ燓7"1dJ׊p0^.I ˺'%"c# l ;G=ͰgxT_M!$WddD_:v-Z +ilrBլ4mR};$4]eaEW-q[R M),ϸOcp'va AkLO7X`|}ixG%%N PdZp; +GSIBT`gh|"=B9dLD"cN_:|uqY5z8+'1 +뻪Y b!m YZ|(tavTa6/G2k ԢĪmu%]m!|aR{7% "rI;w݌"nSl% %tۣn; }ӫ +gq`.xrxGxzYOp~uﲠ$נmf'[DAԼL _qhñI:PqwO`-ޒmjewr +ONUNyJY? .1th,y5+z ?Թ'qR~;>tK.٣>{ k&squbwM=i͝g¸tavw6B|hM;pS&z@l]X}ð7~pt< 5gFHoZPsn\ݺ *'_bogVqq݅rLLj[ %ۣWv=e1dZEXH4e;d#+Uq&"o!MP!;Rt G D7(}'w[`шꮼDM V/NDCVLIn-0hjzFk0suyNŷ>SG_* g>=PF07y9$W< 95F +|ʛ0DwgYȟ>. +$6'IzŴG( dϱxDkr7:6IMۛ9I2f%6"]`5 +C]^% .zѐCT|x "L7M=Z5btu*]v9n@Ѡ;xfErY)h%jMh7=滰+~I'Ƥb"1Os]'FU P$GZ/ tNųiFp+{#<8,+i(=:5\ *o}4ߤzPgUk&^r K,02#quK:tC:dR\U8TJ ]\(62g>6hjLް,vI  .# { ?ȅ+\5MXd$:/_Pvcĕ|u*Mg~+{܄iKGQBa  |.|]`D:ģ$2ȶՊI{z,{An!eU8~ gktLٮi0BK@gpAGB쮃*p B}X:gI%sRBf@XXӸ #@?|{"3$?\Y^\(#f+G[mF ,p:ş׿ +Đ.q4{my2Q +ž \:Dl.,ᣡLsP|036r&IɢMVxr zUz`K\.yVhYA!r[>G{oL# tAve6)eNIG<5O=(=ݒC+?Qi1T`Q~bMCWD$5|R5?,Ş}~j`{ŠهŐ.3ĚtrɎs4T޿mFj")ŴFuaEޞJn+'iwO0v~̔Ybr'{;%g F* +%ɂqʙx=mGRɂhrPZfJD]^P Pqa}hCv +yodj't@Fp*h.S]?@_߻Ѩv?ޒ*):y$#tG GK:zF%eӷ󧫟X. ygKυF-nYHyNLc#J'(&xHnSaMb}co*prlR(ZL!!^sN*5,<OicxPyCͼ"[f]yzd +]boG#-s<4+D j)]ܼS;(EDi& +5rU9·PQ?k&NP8ZЦUj(mEG5-}rEY +F|GJˀ*({by<-Ra[גm$w*DҕKzkAlt{tb*lsYI3F_ +SQXgQo7 ;=HvL/yjmw-=1|UL6_1vFak.%IW5N6z4WnҔn9}nY(VY/''<^ +jCJE+@lh;,궵h;Aɥ4MQi[@,oaLllc2 tΐGBAJOxe_9}(z]_HP`=<4C @;c$^u(6qL-yB4xlj?V6+ B7^/&,pݯCGnV5; +FEciySq`I1-q:e8]gq݈|.MQ~H{TK2;뎆d;a&}vo`fWd&Djo/6-"*\O҈ +5$}OUGL[/aN%Qxķ~Uq'vXxၹIˮ:Ӧu 64:ʊWf@%uV#hsㄆ̵/FrpaòsA@kh3%h$qE4F?%(hJ!͜sԑK'":;2=i,Lb:rmG0^8W)]AQ"3;Ň=8ğ=+D& XUtAۍ.I}Qښ ktU<-Qu[CLsKu!~̀CB|h;l2zX |fy`),`lQ1S6 {nyB[gM$$fVCxj@zshMhlX0T KաgB EHr:X3 P t/7;30_cLAwшS0;{y*%Ԯ'vH0-UE?]lE !ӮqÜ_cRP^.>lXTsWrT~{+G~Oe/ͼD ( nv\fX8Fsqrd[I,cc k +nX̩$k9E5'w^fZPf-۪(qf^, 2 W'~/*I Y_-)-׷ >9Z4W$OdbR5"f~to^dsOաL|z֊ַEshrSWzwi̭+ڿnI%9⏿M̩ј6,(@ozD3@Ǽ&XGlgC]h$QcG/x+kK3WZ >UpC=ZK%}ӣg +.⋥!]&4~I̾ i$ܣ`1 d~!$ +D8g2Ŷ U ŘF|gȃ0W-(Kn%P4\6Ƴ*)5krڤ(euK"0jAC=n7-J {3wW3$OāR1樹V?29QBcnN/ +o%]/+Q9qjvRh0KWc.(Jo tlbIQ=C83 j"o:^F^TFȳdZ˫"/?:.1d ~0?:۞J1o}X5EaƬU+O`A6#Q9[WC4Y\Zh@ ,Vu6AF,Rٛ>Y<_jM,xߣ(RiThu1K;!Bȱ9-5*[idbys˧5uF}{9Vi% om-l3- =P6~Ȕ@d!xfE +۬L_U^nv EPB'9,<\R˒5`4GUpe$o&sK/cH&Nؐ `PR9rnl@c٧?[E 7;|}VpURj4؉vvϒ {.6 ]!6OͦpV2{?!(QJ{dob7c Aǃ5}_k!=(%ϯRe`˺oYITh8 +5#Kȿ6v۩!_/Za.#ږY,nܷd[Ba:` yc"ȕP61'Ux7Pj;T+ ^rSwJb.4s* +-JyYstK!]~j8l"XMŖNCd/cmuU6CF>DJ%+bqsdB8.Yצ* w7M dyF#q`0 .V<'4 +yCr|w) A l:h2,JxćH}c0=:SmE4;@{7 DA/Bbl gYH3#G#R&c_:߫6ewị +nlW-/t`0 >O'`X_`ȼ0E\f:kޣ$7?7KO%sBQ H>zEoO'f3*T j='vEJ$ށjCWófaGT<{JP5_ECbtk MR1}Г +۽|08V,&a{(jeL؞l@܍$UG"[ݸzK&Fz>sd "ŧzIl- =$ +O/+&_ƸrTLزBG%}[{vrU@!X_.68|vEnJ`E(:)<;Vp%r32O'uCQZ:q|-eY dLU!"jM{G6'-?Չ"х GC:tg\)7! + u~.of7M),rmoN.4Y[Z{+G<j [`UB%=[#obFaDP*٧^QD%-wшAU_Kx)];OȎG+]0JR`(Ͼ,|clG6dCG 0 })?Jzsƛa9̇ $W{ + yW˘n +JgZgea?},8mGǧ ՗mZtlbu9IzsSDV%T4 `#Q +Jm=λ*0KCL(YuZ6 Z[Dy *IQVj)Yd;xMw ((z´-~IC=F{o5>?ffkhGD8}MVuϠPG;JzGNp""nLBvKH /nWf <{.$G5AsXsKc7i~ݢb1>s1t7}S@͞ mxIg9$C%C69 Egl+gk&I bK-AA1nk'jJW1vQfk8Wg2(YaK kb**ޫ>^d"Q$3LJ)ռCK=?6WڃNKLtD>l^ZRh_3Rs&79Ꝇ(SSE/@b DիnSorauuLRWuɍPT;'T5fCLܖt?di[90Pj%mǂ0LMI64 +FTC9BD4g~KxHU>rmH76`i^~z`Y'˖E>oi!%+(|H +>oKX"+N/𿿝gqY/lĭ:8W5Dޖ* E@F D}5g=}8 Zul%%y J}4UK [ ͿU~m~ ҙ8Aҗp 2NrWs>Jێz +Vު}gZEqoqRNÛ7qGTGMWt_=O],N$IoiXeW-d4iip{`MR*pC!@&ikgCT ?'KdP1d*) X}Neh+1qg /9%!)n+%+@/2K" U +jB  iZ|*&-!r&1r6i^G24&:{8Qb|Fsse?vRr:(NĬ~5 (95N g6ᎉn,yJۛdQ&vsB34>Ջ\tbqF ZͰky;2&fXL)!Q X50NXm +" T%EnJdž؁?#,:nZ*&[:*/tT;ł9c..vh^&i/8iCp*46fЪ@w*!$ܙ7(VE)כe/mE#Bp3+\qܗUHމF83?=+iwn;lhv{϶ɑPϽ3mnSg%4%~e&3BQ\TE/t4Q}șv#Dt: +HӺx7XE΁5 ŠPbZ.VXWAGFJ#>>?z#+鑹I=()ǕVXޘw>l֥|GбyTsYRo)qG9L!IefEvөsQ V]h六jֵ%lcrD,> fSi?X[&48\:g?BzhxzNKk -ówմ]ٺ7 B` s9.{!@ak|xjklZ."l ȵЙ7ĉʱ !+0F?6;ܙ3vmzZ#nd䍙*E/ T%V1Y۟,ڡ$+ÜWPWUE{M?Ivb>Wkj̷ZO11sdSU& X(~kټ~j9 ?oZ8YDGN3JY<ګEVM:/|uK˗u!'A*hh +ЇToNM~ޅN:#K^> ӏ(ARAsLi;*Ƒ]=77ihlj + y8LR8)vKS0BwF]Z6*`(EȦ݄+C9#訠<*qS +c~|lǪ?}B}}ןU>N13+F+ +gR.!Vr]Хpvc>gS6gy%*3z݄X ͦHfr<geo[ +IXj + Ez)0Fq%<_ Z VA (:HɝjGQ:gtH13Y]+n'iD G!30j+1U +eUdN3"c"I,&>i/2H_u]W|֎[ܠ +endstream +endobj +688 0 obj +<< /Filter /FlateDecode /Length1 1366 /Length2 950 /Length3 0 /Length 1784 >> +stream +xڝT PSg^] tEl@< R劏7 77J(*Ң"2d+ +,henT\]E&Lw299s 5e$AsP."$a0(+up򊃔' x"#Mse~rf{oPegicqywV=!T3⎟d>Vm[qT~]/.ⲥL$qW|z^(m{4aNj9.Cms?- 0_3:_ɾ{x wYnqkU?iBckc]ͣdw4jH9, \cЙ/0brPg0FkSV:ӹUOS:6{ig~5{n[ŮQ*zvr\ò#wNʇ +t☢oO<4ߔQzs^os!1:z͎E +?j)-" n*>*]^5KC+t<;k-ZYX~ط!vj_/^T|fƚG̡ϗ]xɠf֍Μc3U6`!6aVUu|Qmcױ^[wi\s<_ +endstream +endobj +689 0 obj +<< /B 808 0 R /D 809 0 R /P 810 0 R /R 811 0 R /S 812 0 R /a 813 0 R /c 814 0 R /d 815 0 R /e 816 0 R /eight 817 0 R /f 818 0 R /five 819 0 R /four 820 0 R /hyphen 821 0 R /i 822 0 R /l 823 0 R /m 824 0 R /nine 825 0 R /o 826 0 R /one 827 0 R /p 828 0 R /percent 829 0 R /period 830 0 R /r 831 0 R /s 832 0 R /seven 833 0 R /six 834 0 R /space 835 0 R /t 836 0 R /three 837 0 R /two 838 0 R /u 839 0 R /w 840 0 R /y 841 0 R /zero 842 0 R >> +endobj +690 0 obj +<< /Ascent 929 /CapHeight 0 /Descent -236 /Flags 32 /FontBBox [ -1021 -463 1794 1233 ] /FontName /BMQQDV+DejaVuSans /ItalicAngle 0 /MaxWidth 1342 /StemV 0 /Type /FontDescriptor /XHeight 0 >> +endobj +691 0 obj +[ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 352 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 318 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] +endobj +692 0 obj +<< /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2612 >> +stream +xwTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ +E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h +A1vjpԁzN6p\W p G@ +K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! +ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 +FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK +.3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' +O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf +endstream +endobj +693 0 obj +<< /Ascent 952 /AvgWidth 521 /CapHeight 632 /Descent -269 /Flags 4 /FontBBox [ -503 -313 1240 1026 ] /FontFile2 843 0 R /FontName /AAAAAK+Calibri /ItalicAngle 0 /MaxWidth 1328 /StemV 0 /Type /FontDescriptor /XHeight 464 >> +endobj +694 0 obj +<< /Filter /FlateDecode /Length 289 >> +stream +x]j0 E +-!N:O2e >hHl%8Eמ#ʒښ@ٻTÁzcyx` F['2e<ֶ,QB'=uco^7vשI7lIQUGֽ#SZ#o²sqL:4ϮU[;(lT.yUFI9V, + $#>!)2@BRx #MBq0O}?xH0_&O +endstream +endobj +695 0 obj +<< /Ascent 950 /AvgWidth 615 /CapHeight 667 /Descent -222 /Flags 4 /FontBBox [ -1475 -2464 2867 3117 ] /FontFile2 844 0 R /FontName /AAAAAM+CambriaMath /ItalicAngle 0 /MaxWidth 2919 /StemV 0 /Type /FontDescriptor /XHeight 467 >> +endobj +696 0 obj +<< /Filter /FlateDecode /Length 311 >> +stream +x}j0 ~ +C6k0: +9t1{OvC2z|O‘ʚ@߫m.ƒڨ0St$ztm{94Ē!nuC{ |B6PFZl*ݛft[i̛0nj!F_I08K{|KMM~']IO{npr+g.Wk5N.qsm@M;M(b=ZZ-2ehQ}B,iVqt3iqY|VwAG + +endstream +endobj +697 0 obj +<< /Ascent 950 /AvgWidth 615 /CapHeight 667 /Descent -222 /Flags 4 /FontBBox [ -1475 -2464 2867 3117 ] /FontFile2 845 0 R /FontName /AAAAAO+CambriaMath /ItalicAngle 0 /MaxWidth 2919 /StemV 0 /Type /FontDescriptor /XHeight 467 >> +endobj +698 0 obj +<< /Filter /FlateDecode /Length 222 >> +stream +x]n {bKqsNr`X[HָsRl|0O= 03qc0H\:4$d}͸4EZw8=8C^#y2l)}႔A cT{.?\ǞJB\~*qM![Qh݌@#uFQs-T~^m̥MC+Z RL6~pG +endstream +endobj +699 0 obj +<< /Ascent 952 /AvgWidth 521 /CapHeight 632 /Descent -269 /Flags 4 /FontBBox [ -503 -313 1240 1026 ] /FontFile2 846 0 R /FontName /AAAAAQ+Calibri /ItalicAngle 0 /MaxWidth 1328 /StemV 0 /Type /FontDescriptor /XHeight 464 >> +endobj +700 0 obj +<< /Filter /FlateDecode /Length 327 >> +stream +x]j0z +C$NPR>}[ZA- Y9;)0O;Vʎsl{tKQ֙@t dOgD^HcuQ:cEv#&YUB-s |x2SO| ئ7Tq/FYj]5 +]'Б_GғwB$*t9kG?JXJmL-BJk T7@q K Tv@Hm8% +v; LQ=BbW! KbwB(׸< kF\y9Kwzb9  +endstream +endobj +701 0 obj +<< /Ascent 950 /AvgWidth 615 /CapHeight 667 /Descent -222 /Flags 4 /FontBBox [ -1475 -2464 2867 3117 ] /FontFile2 847 0 R /FontName /AAAAAC+CambriaMath /ItalicAngle 0 /MaxWidth 2919 /StemV 0 /Type /FontDescriptor /XHeight 467 >> +endobj +702 0 obj +<< /Filter /FlateDecode /Length 246 >> +stream +x}1k0w!v( %%I ή,T 4ܽ[R^4+mXYj)(.S1!)vh;zHG vyg]ʟ; +endstream +endobj +703 0 obj +<< /Ascent 950 /AvgWidth 615 /CapHeight 667 /Descent -222 /Flags 4 /FontBBox [ -1475 -2464 2867 3117 ] /FontFile2 848 0 R /FontName /AAAAAE+CambriaMath /ItalicAngle 0 /MaxWidth 2919 /StemV 0 /Type /FontDescriptor /XHeight 467 >> +endobj +704 0 obj +<< /Filter /FlateDecode /Length 265 >> +stream +x}Mn b"M TET 0vj@/|qm)`̛<7F(޽-QG;yp^RQPZkrc1@-c3잔Cy^v_6Wɹ( 砰Ͻ*"[>6sv訮-IptBGʒ4FZ N~ O8SJ"rѕ{Ʃ{\q_n9K,߿W%VF&'cZyO96YM'r +endstream +endobj +705 0 obj +<< /Ascent 952 /AvgWidth 521 /CapHeight 632 /Descent -269 /Flags 4 /FontBBox [ -503 -313 1240 1026 ] /FontFile2 849 0 R /FontName /AAAAAG+Calibri /ItalicAngle 0 /MaxWidth 1328 /StemV 0 /Type /FontDescriptor /XHeight 464 >> +endobj +706 0 obj +<< /Filter /FlateDecode /Length 234 >> +stream +x]n wd,]R*U>Tx i*u/s|p׸e0$8o˽j=8þ\0EPB֒w8<8޲ :Ö7. +58hݫIW zGs_Q=!P""[$X&ȔZ].apF);4SRRIBGBLYZ|\.To.sL +endstream +endobj +707 0 obj +<< /Ascent 952 /AvgWidth 521 /CapHeight 633 /Descent -269 /Flags 68 /FontBBox [ -725 -276 1259 1026 ] /FontFile2 850 0 R /FontName /AAAAAI+Calibri-Italic /ItalicAngle -5 /MaxWidth 1328 /StemV 0 /Type /FontDescriptor /XHeight 467 >> +endobj +708 0 obj +<< /Filter /FlateDecode /Length 298 >> +stream +x]j0E +-E0lil,de5M80\?FI7eo 4OנIv4X'Bқ[/2$7i]?ɲRfHcXd5 + rynKsFrQ*QUPrϭiGYJ]q5~|,$:BFӒ ;Z7(˥̿&IwkW%~S(ڳnJ[(;(PeC; XQzD-(+X;(\ JmQS!tN^ut?<H|瓜 +endstream +endobj +709 0 obj +<< /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2612 >> +stream +xwTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ +E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h +A1vjpԁzN6p\W p G@ +K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! +ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 +FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK +.3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' +O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf +endstream +endobj +710 0 obj +<< /Ascent 950 /AvgWidth 615 /CapHeight 667 /Descent -222 /Flags 4 /FontBBox [ -1475 -2464 2867 3117 ] /FontFile2 851 0 R /FontName /AAAAAK+CambriaMath /ItalicAngle 0 /MaxWidth 2919 /StemV 0 /Type /FontDescriptor /XHeight 467 >> +endobj +711 0 obj +<< /Filter /FlateDecode /Length 222 >> +stream +x]n {bKqsNr`X[HָsRl|0O= 03qc0H\:4$d}͸4EZw8=8C^#y2l)}႔A cT{.?\ǞJB\~*qM![Qh݌@#uFQs-T~^m̥MC+Z RL6~pG +endstream +endobj +712 0 obj +<< /Ascent 952 /AvgWidth 521 /CapHeight 632 /Descent -269 /Flags 4 /FontBBox [ -503 -313 1240 1026 ] /FontFile2 852 0 R /FontName /AAAAAM+Calibri /ItalicAngle 0 /MaxWidth 1328 /StemV 0 /Type /FontDescriptor /XHeight 464 >> +endobj +713 0 obj +<< /Filter /FlateDecode /Length 330 >> +stream +x]j0E +-EBJ>qԲw4.h(0ꆢ34Ɏ.։xt֋ { u:5餹zM(*iGֿ,.kU'PFңɷB.$J|9/n]O-dZJEJ6+(PjYPuXPTZCS@sPM;(@+Q h R2q$V<+.`cMMo!`ƭǿG ?u +endstream +endobj +714 0 obj +<< /Ascent 952 /AvgWidth 521 /CapHeight 633 /Descent -269 /Flags 68 /FontBBox [ -725 -276 1259 1026 ] /FontFile2 853 0 R /FontName /AAAAAO+Calibri-Italic /ItalicAngle -5 /MaxWidth 1328 /StemV 0 /Type /FontDescriptor /XHeight 467 >> +endobj +715 0 obj +<< /Filter /FlateDecode /Length 298 >> +stream +x]j0E +-E0lil,de5M80\?FI7eo 4OנIv4X'Bқ[/2$7i]?ɲRfHcXd5 + rynKsFrQ*QUPrϭiGYJ]q5~|,$:BFӒ ;Z7(˥̿&IwkW%~S(ڳnJ[(;(PeC; XQzD-(+X;(\ JmQS!tN^ut?<H|瓜 +endstream +endobj +716 0 obj +<< /Ascent 952 /AvgWidth 521 /CapHeight 632 /Descent -269 /Flags 4 /FontBBox [ -503 -313 1240 1026 ] /FontFile2 854 0 R /FontName /AAAAAQ+Calibri /ItalicAngle 0 /MaxWidth 1328 /StemV 0 /Type /FontDescriptor /XHeight 464 >> +endobj +717 0 obj +<< /Filter /FlateDecode /Length 234 >> +stream +x]n wd,]R*U>Tx i*u/s|p׸e0$8o˽j=8þ\0EPB֒w8<8޲ :Ö7. +58hݫIW zGs_Q=!P""[$X&ȔZ].apF);4SRRIBGBLYZ|\.To.sL +endstream +endobj +718 0 obj +<< /Ascent 950 /AvgWidth 615 /CapHeight 667 /Descent -222 /Flags 4 /FontBBox [ -1475 -2464 2867 3117 ] /FontFile2 855 0 R /FontName /AAAAAC+CambriaMath /ItalicAngle 0 /MaxWidth 2919 /StemV 0 /Type /FontDescriptor /XHeight 467 >> +endobj +719 0 obj +<< /Filter /FlateDecode /Length 238 >> +stream +x]N <ÆBbl҃tV C^=p~n[k"ణ:얀=Ʋm0n<ܭs!O9Otנ);[lI ܋W5R=:&K| FNRPv$&JE2 +_*0R=h|ߜ\j&vr\BHe]?X7\!M|j +endstream +endobj +720 0 obj +<< /Ascent 950 /AvgWidth 615 /CapHeight 667 /Descent -222 /Flags 4 /FontBBox [ -1475 -2464 2867 3117 ] /FontFile2 856 0 R /FontName /AAAAAE+CambriaMath /ItalicAngle 0 /MaxWidth 2919 /StemV 0 /Type /FontDescriptor /XHeight 467 >> +endobj +721 0 obj +<< /Filter /FlateDecode /Length 252 >> +stream +x}1o0w!2U`!U"14Jm3k\U |{ֻg~^+woUMZm`GayUXnizzi-G O{A> +endobj +723 0 obj +<< /Filter /FlateDecode /Length 289 >> +stream +x]j0 E +-!N:O2e >hHl%8Eמ#ʒښ@ٻTÁzcyx` F['2e<ֶ,QB'=uco^7vשI7lIQUGֽ#SZ#o²sqL:4ϮU[;(lT.yUFI9V, + $#>!)2@BRx #MBq0O}?xH0_&O +endstream +endobj +724 0 obj +<< /Ascent 950 /AvgWidth 615 /CapHeight 667 /Descent -222 /Flags 4 /FontBBox [ -1475 -2464 2867 3117 ] /FontFile2 858 0 R /FontName /AAAAAI+CambriaMath /ItalicAngle 0 /MaxWidth 2919 /StemV 0 /Type /FontDescriptor /XHeight 467 >> +endobj +725 0 obj +<< /Filter /FlateDecode /Length 315 >> +stream +x}j0 ~ +C6k0: +9t1{OvC2zOHNKeMهU jC +hcI^PmT\N:aq=ʶ=P}bH7Ϻo!޽onOuW~(#BP -{Mv@T4MX_?Š%kTॽ ~> VߥU?^㮤Z3S-\ʅk׸Ǚwb5 kZ i QsڣEѢ+S -]- +޺uij׬mǥ I'ӷ +endstream +endobj +726 0 obj +<< /D (subsubsection.3.2.2) /S /GoTo >> +endobj +727 0 obj + +endobj +728 0 obj +<< /D (subsection.4.2) /S /GoTo >> +endobj +729 0 obj + +endobj +730 0 obj +<< /D (subsection.4.3) /S /GoTo >> +endobj +731 0 obj + +endobj +732 0 obj +[ 859 0 R ] +endobj +733 0 obj +<< /Filter /FlateDecode /Length 343 >> +stream +Htۊ0}l/zZm=>MƮo14_& / Y3t +xJ28Ԣ<CiV l|GՋ+lf ~s3P|St[HC{6rdP^Q@~֣P?>l٥c߭˳ਗWO*ÒX& & +읉d<yv@rD4&q1q5a1њҙhL9S9q1׷8!Zso-Iָ$јhp}dEx$ݔ15Y |dZty  +endstream +endobj +734 0 obj +<< /Ascent 1026 /CapHeight 632 /Descent -312 /Flags 32 /FontBBox [ -503 -312 1240 1026 ] /FontFamily (Calibri) /FontFile2 860 0 R /FontName /PCHVRP+Calibri /FontStretch /Normal /FontWeight 400 /ItalicAngle 0 /StemV 80 /Type /FontDescriptor /XHeight 467 >> +endobj +735 0 obj +<< /Filter /FlateDecode /Length 335 >> +stream +H\j0l/֪iAͶ0ɱf ^;'t #ITe[ao^bH> +=NDni(BF89~'3^`-7o*W_UQsseYJ^Z y`o@&aZ WE[)ɎcN^ -c{|DNC19R6lJٔiȞqcEƞ> +endobj +737 0 obj +<< /Filter /FlateDecode /Length 301 >> +stream +H\n <"IFP)ke{i!C~N揍͛5wèr7'jz8u8f?ȹxIns +6W|5xw'42kP8C/}'eV_uGE(>OYb{7Wd"QШϟI6wLraPF&Dp^ c >>pxJ| +$n_SJJ:$>No gG]G9*[lUW6覝-*L+Q,= +endstream +endobj +738 0 obj +<< /Ascent 3117 /CapHeight 667 /Descent -2464 /Flags 34 /FontBBox [ -1475 -2464 2868 3117 ] /FontFamily (Cambria Math) /FontFile2 862 0 R /FontName /SJVNHJ+CambriaMath /FontStretch /Normal /FontWeight 400 /ItalicAngle 0 /StemV 84 /Type /FontDescriptor /XHeight 467 >> +endobj +739 0 obj +<< /Filter /FlateDecode /Length 261 >> +stream +H\PMk +{XtS\$&rM\Bb!]PAǛ ow6^`D\5'عcuyճ +yؖsFϤA% _[4Gh08R^Ռ3۴W* .AiMȤӀ|0t_.먿UdjV2L>> +endobj +741 0 obj +<< /Filter /FlateDecode /Length 325 >> +stream +H\n0 y +Cem$VtH#DxqI&H`N8A9p 9vfW O8a_vPE)l3.T,]:- 9])%XlC/mz$ʖx7K=B+) G *RZ%GZBgųTd|7Aٞ)U"!+cd2k5f9Ι[fɥ9 % |`> +SSEF&C gRC5+\Ԟ(Hnp>ys /:N9 ~@*~ԯ48 +endstream +endobj +742 0 obj +<< /Filter /FlateDecode /Length 235 >> +stream +x5QIn1@'Q/$F$>Đ(W|4;YJ佈 +* +irV3 3Yf>;PMqv4Ai\G0< >qcYbHR*G,NJݢgI\v^Omi_u7;",.:n)!8-T&~f$xʞN4A{AGn&d*PF*4ƌh&CMT +endstream +endobj +743 0 obj +<< /Filter /FlateDecode /Length 164 >> +stream +x=C!DV%@=drk@\d`;Q3gɃӱ4pok#Mx ac.UU׽cAi5 mځ?5ޣB(tneZ X> +stream +x5A0EN!AܧB-Iyg5CcNj ȷE)IxBx:\~i5v.t +?#;, +endstream +endobj +745 0 obj +<< /Filter /FlateDecode /Length 90 >> +stream +x= 0CLSTU׆|z[ȸ  څo'u`]^Bd;Jf&$qD;MJ +endstream +endobj +746 0 obj +<< /Filter /FlateDecode /Length 170 >> +stream +x=K CBG[˙tc/DWt앇ƔhcO-\tNSf]a2oTafU317`*wr8ےlWaН0̑=Sss#_rkaЙ-eLal- Awz0A>d +endstream +endobj +747 0 obj +<< /Filter /FlateDecode /Length 341 >> +stream +x5R;қASYyɤs6;,Bx!Q%O0^'w<ǻZT6mX& +F,Ǿ%xj=iŒLF$qz)߀4mN%I[Î/ 2HzRÒV scM$#V3\c$$ic%2OůZ1@6l'3E$7qMXsPR侻^+!Z1COYdA T3׾0NF wj+$vVJ9e9d;&l=7-+9dE)%C<(~# +endstream +endobj +748 0 obj +<< /Filter /FlateDecode /Length 66 >> +stream +x334T0P5f& +F +)\@>L̀,cSS$625pDWRk +endstream +endobj +749 0 obj +<< /Filter /FlateDecode /Length 72 >> +stream +x30Q0Pb3s3s#KC.# 3@.X 261R044L͍b0@YKA9P9\\it2 +endstream +endobj +750 0 obj +<< /Filter /FlateDecode /Length 367 >> +stream +xERI1 +m _{0'lKhQ!,[BV'b߳=PY+QURlr#fKbff"cwxhrw +:_ۖU#d@y ' QKϑؗ +CXz]"Rmxeg6\&]:͖DTῨGvwqKzI[InNN)D,]e +cw5Z*_ ꂕD16-HkܣS n |Tx~R. u~聟ȑ2j%|A,R'88Qq;Wq}h^,|u@F- ZM] k!J@c7HhT +endstream +endobj +751 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +x=P;D! 9/$#pF-f߮)PL~3$G 1%Bn CR zt6:3?a7cE1t=&9 +seVH'"3)*{x,6['= RRɥ?mʔ +:f,dM8˻IR2v"}<ȣ:dMά#Oۙp_dNt΃96Mi*/RZ~ugdZ" +endstream +endobj +752 0 obj +<< /Filter /FlateDecode /Length 395 >> +stream +x=RKn@\yRUݼokCR*10}ʐK]qɷ^[<|.[Zy%>ܗ!]t.8G 2*DͪѡBN }9/װ =2A$)BnQAaPYQ2jo c BmH@DTg$gb`ѲTD{LjΨD>OM(L-VnS_|t*4U Xy9Hl!:n32`K9`GYutpL~OtZur@MAF2>)z,F3ar4k"X"bDls=L9l֡33*!ںj@vp?3m +endstream +endobj +753 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +xMQI0 @!^CC9 X 1,=!s7~ٻYz"SQR.bB]ϡ=kY9,s3c}I2!N uZ¸kbZvBzM;" +2;-+{n?R\ +endstream +endobj +754 0 obj +<< /Filter /FlateDecode /Length 94 >> +stream +xE TA + +O&2|` yF&^XJcP@r-p'TwiIU)ܤyg&yc c#< +endstream +endobj +755 0 obj +<< /Filter /FlateDecode /Length 54 >> +stream +x363T0P0T026Q064bC.@rs`r22 +endstream +endobj +756 0 obj +<< /Filter /FlateDecode /Length 72 >> +stream +x32P0P4& +f +)\@B.H  %g m DDJ% +endstream +endobj +757 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +x=90ОS#"qxV0z!8`ʺtSƜ xJM zԴԾhKՉ? +endstream +endobj +758 0 obj +<< /Filter /FlateDecode /Length 47 >> +stream +x32P0P4& +f +)\V.L,іp +"g ' +endstream +endobj +759 0 obj +<< /Filter /FlateDecode /Length 258 >> +stream +xEKr D#> +stream +xE;! C{N##>f2)6oclRX ڂ肇%gc6n5uVhR}ith6s+ fz:rCp_b9S6;ܬ~+UaiYK f@ S9ګ=? +: +endstream +endobj +761 0 obj +<< /Filter /FlateDecode /Length 322 >> +stream +x5Qm0 50 ~% H;کHӼU^2\.u*YaCu|f!S֖{yJ,p 6s +QDnY@蚫Xb V)Xv$ r1YSE)|,ّZrY +n}a8쳋DyL$dl>[E6v8Ѐ$AS8>aj('89֯1 NKRWϠA3.IwcJd)6 +SbVofQlܠbod[7}_{d +endstream +endobj +762 0 obj +<< /Filter /FlateDecode /Length 218 >> +stream +x=P1 ]XzgKH"ER*5)/u%YS:|ynd6%*E/% +}ՖC4h9~ 3*K6p*3 mtV[ Ф`׶ r " JMr^>C5Xs S'no^#]X.i5AMZ-^# @qRkp/'S +endstream +endobj +763 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xE 0D{`~&>Q޿ %n'=\ )n3C ,]q0 \GPaվRBf +endstream +endobj +764 0 obj +<< /Filter /FlateDecode /Length 239 >> +stream +xMPm1 +50<C hK[e#9oɺCNinͯ vPT%J\n4I/8k{Yx)=2f90=NƯ;$B +%+ۘRN-{|=ލF-j80SѕqCgGW4 zB59p`˳Re]:4J(^7 +endstream +endobj +765 0 obj +<< /Filter /FlateDecode /Length 51 >> +stream +x36P0P040F@B!H Y@8&++ +endstream +endobj +766 0 obj +<< /Filter /FlateDecode /Length 160 >> +stream +xE91s'H\˵G4Mzh>Fk,JDPc;(HLHcH#X]T*Ri¿ZDpTO\M1T;I^EZ1D0 oE&پ` +8 L7 +endstream +endobj +767 0 obj +<< /Filter /FlateDecode /Length 334 >> +stream +x-RKr s +]3s--|FЀ_䟯imӮzL;lOs^&_Zg:R3s(VFv6Hj\loXJЅn\F#"<& +⏜r*aꚮtrUq53IfHy]8 Sfy'rԩgK9YhtNONW3!9 bZWib _SQSz;~,s|s +endstream +endobj +768 0 obj +<< /Filter /FlateDecode /Length 70 >> +stream +x336S0P0 +F +)\@>,́,# .C c0mbl`fbdY 1 2 +endstream +endobj +769 0 obj +<< /Filter /FlateDecode /Length 320 >> +stream +x5RKn1)@O󪪋okL0`)/YK%ۥ[%BޏR-G- +Q=X/":pJWIj3 P@ƻb2R$siqr&'=YߓKMNI]IJD}B<>G1ɀ6m&%:fU`)W l[00Sbbe5ˆQ]pwhcG i8^8^9c, ch&zОaZT| +endstream +endobj +770 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4R +endstream +endobj +771 0 obj +<< /Filter /FlateDecode /Length 133 >> +stream +xEK!Dq2s퀝nc=T=.k!񷩖EY>TzRV!ܠ,I*!P-en6 S0l_["u?*/ȥֻޢ1 +endstream +endobj +772 0 obj +<< /Filter /FlateDecode /Length 340 >> +stream +x5R9n1 +} n H qtR;ZTvˇTt7we ɫRHV!25gRqɂ?å X#D2f[~ix+-XR8y- +V~AG}TX IpPvH 9{,vQ3(1EA%9źtб،7:*[ZYc>,2zXtǃ 4 4e9QVxC 1! J<% _6?m^JkL +endstream +endobj +773 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x-QIrA+fc+ @tZ⠌ ,W呫h31~+mX@T IcP5vzq ְ̓ f)1ge]=Aɬ\%La#g?2.s=7 FXanV34H!AF6r/tU1s-m_M8kX]q.'/6Qi@HnsxK{T`śn@6߼_`[ +endstream +endobj +774 0 obj +<< /Filter /FlateDecode /Length 174 >> +stream +xMIC! C31Aݢ-Xvs21F<\d "]VYϷ;ݏf_=ŰWǁK^*%c"R6;Trݛ+pC#< +endstream +endobj +775 0 obj +<< /Filter /FlateDecode /Length 215 >> +stream +x5Q9! @$/xO(͌V\!R!S>z.j4疴-s/fi<CѨQCԥS(>nc! b(,AͩEm'5^ޗSƖV8=O&t2ԫ5 E"<Z42j;0NqdJoWGT +endstream +endobj +776 0 obj +<< /Filter /FlateDecode /Length 235 >> +stream +x5QIn1@'Q/$F$>Đ(W|4;YJ佈 +* +irV3 3Yf>;PMqv4Ai\G0< >qcYbHR*G,NJݢgI\v^Omi_u7;",.:n)!8-T&~f$xʞN4A{AGn&d*PF*4ƌh&CMT +endstream +endobj +777 0 obj +<< /Filter /FlateDecode /Length 164 >> +stream +x=C!DV%@=drk@\d`;Q3gɃӱ4pok#Mx ac.UU׽cAi5 mځ?5ޣB(tneZ X> +stream +x5A0EN!AܧB-Iyg5CcNj ȷE)IxBx:\~i5v.t +?#;, +endstream +endobj +779 0 obj +<< /Filter /FlateDecode /Length 90 >> +stream +x= 0CLSTU׆|z[ȸ  څo'u`]^Bd;Jf&$qD;MJ +endstream +endobj +780 0 obj +<< /Filter /FlateDecode /Length 170 >> +stream +x=K CBG[˙tc/DWt앇ƔhcO-\tNSf]a2oTafU317`*wr8ےlWaН0̑=Sss#_rkaЙ-eLal- Awz0A>d +endstream +endobj +781 0 obj +<< /Filter /FlateDecode /Length 341 >> +stream +x5R;қASYyɤs6;,Bx!Q%O0^'w<ǻZT6mX& +F,Ǿ%xj=iŒLF$qz)߀4mN%I[Î/ 2HzRÒV scM$#V3\c$$ic%2OůZ1@6l'3E$7qMXsPR侻^+!Z1COYdA T3׾0NF wj+$vVJ9e9d;&l=7-+9dE)%C<(~# +endstream +endobj +782 0 obj +<< /Filter /FlateDecode /Length 66 >> +stream +x334T0P5f& +F +)\@>L̀,cSS$625pDWRk +endstream +endobj +783 0 obj +<< /Filter /FlateDecode /Length 72 >> +stream +x30Q0Pb3s3s#KC.# 3@.X 261R044L͍b0@YKA9P9\\it2 +endstream +endobj +784 0 obj +<< /Filter /FlateDecode /Length 367 >> +stream +xERI1 +m _{0'lKhQ!,[BV'b߳=PY+QURlr#fKbff"cwxhrw +:_ۖU#d@y ' QKϑؗ +CXz]"Rmxeg6\&]:͖DTῨGvwqKzI[InNN)D,]e +cw5Z*_ ꂕD16-HkܣS n |Tx~R. u~聟ȑ2j%|A,R'88Qq;Wq}h^,|u@F- ZM] k!J@c7HhT +endstream +endobj +785 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +x=P;D! 9/$#pF-f߮)PL~3$G 1%Bn CR zt6:3?a7cE1t=&9 +seVH'"3)*{x,6['= RRɥ?mʔ +:f,dM8˻IR2v"}<ȣ:dMά#Oۙp_dNt΃96Mi*/RZ~ugdZ" +endstream +endobj +786 0 obj +<< /Filter /FlateDecode /Length 395 >> +stream +x=RKn@\yRUݼokCR*10}ʐK]qɷ^[<|.[Zy%>ܗ!]t.8G 2*DͪѡBN }9/װ =2A$)BnQAaPYQ2jo c BmH@DTg$gb`ѲTD{LjΨD>OM(L-VnS_|t*4U Xy9Hl!:n32`K9`GYutpL~OtZur@MAF2>)z,F3ar4k"X"bDls=L9l֡33*!ںj@vp?3m +endstream +endobj +787 0 obj +<< /Filter /FlateDecode /Length 94 >> +stream +xE TA + +O&2|` yF&^XJcP@r-p'TwiIU)ܤyg&yc c#< +endstream +endobj +788 0 obj +<< /Filter /FlateDecode /Length 54 >> +stream +x363T0P0T026Q064bC.@rs`r22 +endstream +endobj +789 0 obj +<< /Filter /FlateDecode /Length 72 >> +stream +x32P0P4& +f +)\@B.H  %g m DDJ% +endstream +endobj +790 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +x=90ОS#"qxV0z!8`ʺtSƜ xJM zԴԾhKՉ? +endstream +endobj +791 0 obj +<< /Filter /FlateDecode /Length 47 >> +stream +x32P0P4& +f +)\V.L,іp +"g ' +endstream +endobj +792 0 obj +<< /Filter /FlateDecode /Length 258 >> +stream +xEKr D#> +stream +xE;! C{N##>f2)6oclRX ڂ肇%gc6n5uVhR}ith6s+ fz:rCp_b9S6;ܬ~+UaiYK f@ S9ګ=? +: +endstream +endobj +794 0 obj +<< /Filter /FlateDecode /Length 322 >> +stream +x5Qm0 50 ~% H;کHӼU^2\.u*YaCu|f!S֖{yJ,p 6s +QDnY@蚫Xb V)Xv$ r1YSE)|,ّZrY +n}a8쳋DyL$dl>[E6v8Ѐ$AS8>aj('89֯1 NKRWϠA3.IwcJd)6 +SbVofQlܠbod[7}_{d +endstream +endobj +795 0 obj +<< /Filter /FlateDecode /Length 218 >> +stream +x=P1 ]XzgKH"ER*5)/u%YS:|ynd6%*E/% +}ՖC4h9~ 3*K6p*3 mtV[ Ф`׶ r " JMr^>C5Xs S'no^#]X.i5AMZ-^# @qRkp/'S +endstream +endobj +796 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xE 0D{`~&>Q޿ %n'=\ )n3C ,]q0 \GPaվRBf +endstream +endobj +797 0 obj +<< /Filter /FlateDecode /Length 239 >> +stream +xMPm1 +50<C hK[e#9oɺCNinͯ vPT%J\n4I/8k{Yx)=2f90=NƯ;$B +%+ۘRN-{|=ލF-j80SѕqCgGW4 zB59p`˳Re]:4J(^7 +endstream +endobj +798 0 obj +<< /Filter /FlateDecode /Length 51 >> +stream +x36P0P040F@B!H Y@8&++ +endstream +endobj +799 0 obj +<< /Filter /FlateDecode /Length 160 >> +stream +xE91s'H\˵G4Mzh>Fk,JDPc;(HLHcH#X]T*Ri¿ZDpTO\M1T;I^EZ1D0 oE&پ` +8 L7 +endstream +endobj +800 0 obj +<< /Filter /FlateDecode /Length 334 >> +stream +x-RKr s +]3s--|FЀ_䟯imӮzL;lOs^&_Zg:R3s(VFv6Hj\loXJЅn\F#"<& +⏜r*aꚮtrUq53IfHy]8 Sfy'rԩgK9YhtNONW3!9 bZWib _SQSz;~,s|s +endstream +endobj +801 0 obj +<< /Filter /FlateDecode /Length 320 >> +stream +x5RKn1)@O󪪋okL0`)/YK%ۥ[%BޏR-G- +Q=X/":pJWIj3 P@ƻb2R$siqr&'=YߓKMNI]IJD}B<>G1ɀ6m&%:fU`)W l[00Sbbe5ˆQ]pwhcG i8^8^9c, ch&zОaZT| +endstream +endobj +802 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4R +endstream +endobj +803 0 obj +<< /Filter /FlateDecode /Length 133 >> +stream +xEK!Dq2s퀝nc=T=.k!񷩖EY>TzRV!ܠ,I*!P-en6 S0l_["u?*/ȥֻޢ1 +endstream +endobj +804 0 obj +<< /Filter /FlateDecode /Length 340 >> +stream +x5R9n1 +} n H qtR;ZTvˇTt7we ɫRHV!25gRqɂ?å X#D2f[~ix+-XR8y- +V~AG}TX IpPvH 9{,vQ3(1EA%9źtб،7:*[ZYc>,2zXtǃ 4 4e9QVxC 1! J<% _6?m^JkL +endstream +endobj +805 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x-QIrA+fc+ @tZ⠌ ,W呫h31~+mX@T IcP5vzq ְ̓ f)1ge]=Aɬ\%La#g?2.s=7 FXanV34H!AF6r/tU1s-m_M8kX]q.'/6Qi@HnsxK{T`śn@6߼_`[ +endstream +endobj +806 0 obj +<< /Filter /FlateDecode /Length 174 >> +stream +xMIC! C31Aݢ-Xvs21F<\d "]VYϷ;ݏf_=ŰWǁK^*%c"R6;Trݛ+pC#< +endstream +endobj +807 0 obj +<< /Filter /FlateDecode /Length 215 >> +stream +x5Q9! @$/xO(͌V\!R!S>z.j4疴-s/fi<CѨQCԥS(>nc! b(,AͩEm'5^ޗSƖV8=O&t2ԫ5 E"<Z42j;0NqdJoWGT +endstream +endobj +808 0 obj +<< /Filter /FlateDecode /Length 264 >> +stream +x=R1 ˷ +_R=q`=;11KAnQ9?m%ˏegIm sqb$-e&gq j3!IrR"_7tlPzKTþr;]샦3Ӯ쀥ԤN#,¤HE!,۹~]XO<iVzKLm;YcT !Z:4Uy"R=5\KImphg +endstream +endobj +809 0 obj +<< /Filter /FlateDecode /Length 164 >> +stream +x=C!DV%@=drk@\d`;Q3gɃӱ4pok#Mx ac.UU׽cAi5 mځ?5ޣB(tneZ X> +stream +x=K CBG[˙tc/DWt앇ƔhcO-\tNSf]a2oTafU317`*wr8ےlWaН0̑=Sss#_rkaЙ-eLal- Awz0A>d +endstream +endobj +811 0 obj +<< /Filter /FlateDecode /Length 232 >> +stream +x=Kr! CBG> +stream +x5R;қASYyɤs6;,Bx!Q%O0^'w<ǻZT6mX& +F,Ǿ%xj=iŒLF$qz)߀4mN%I[Î/ 2HzRÒV scM$#V3\c$$ic%2OůZ1@6l'3E$7qMXsPR侻^+!Z1COYdA T3׾0NF wj+$vVJ9e9d;&l=7-+9dE)%C<(~# +endstream +endobj +813 0 obj +<< /Filter /FlateDecode /Length 307 >> +stream +x=Kn1 C>.ٞ('%EjLYS4p;lffZb|F]Y'f:Q96M,.x&[?Р5. 7tWe)4c{2jL]lR{<^DUG"cA JhZwEA{ jȲ;)ftR.n!kB+%H؆3r'hލKh!n.`S:EbdNriUNPӹý lEC)s_ klxJ&KVۨN<Zt +endstream +endobj +814 0 obj +<< /Filter /FlateDecode /Length 232 >> +stream +x5QIn0 'ŠR@%%bc#/195&~grW,OG­I^ve?3VΤƓ E6=<2%:0ufډ!#RF*Sms mNv{I疬eX=QK1}l'(l>jD(g(gU!h]ݧmcFJӿ MMD g4ϽN!T +endstream +endobj +815 0 obj +<< /Filter /FlateDecode /Length 231 >> +stream +x5O9! y>0U@6N!x##fZd fSLſ" ap֬nvX6Y^LWg.ci9n]uSXG0 tÔ sTɎ28',v9~ 6!*z6yrA]E%  Qb_vt(sBA.!*PRQp>謟_\- +endstream +endobj +816 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +x=P;D! 9/$#pF-f߮)PL~3$G 1%Bn CR zt6:3?a7cE1t=&9 +seVH'"3)*{x,6['= RRɥ?mʔ +:f,dM8˻IR2v"}<ȣ:dMά#Oۙp_dNt΃96Mi*/RZ~ugdZ" +endstream +endobj +817 0 obj +<< /Filter /FlateDecode /Length 395 >> +stream +x=RKn@\yRUݼokCR*10}ʐK]qɷ^[<|.[Zy%>ܗ!]t.8G 2*DͪѡBN }9/װ =2A$)BnQAaPYQ2jo c BmH@DTg$gb`ѲTD{LjΨD>OM(L-VnS_|t*4U Xy9Hl!:n32`K9`GYutpL~OtZur@MAF2>)z,F3ar4k"X"bDls=L9l֡33*!ںj@vp?3m +endstream +endobj +818 0 obj +<< /Filter /FlateDecode /Length 136 >> +stream +xMA1y@ @xVU_Kv ɀlQ%xE6g_R)b!Op0S)wcqj,hx^KM-w-oGm E- Bl2|Guill4I +endstream +endobj +819 0 obj +<< /Filter /FlateDecode /Length 249 >> +stream +xMQI0 @!^CC9 X 1,=!s7~ٻYz"SQR.bB]ϡ=kY9,s3c}I2!N uZ¸kbZvBzM;" +2;-+{n?R\ +endstream +endobj +820 0 obj +<< /Filter /FlateDecode /Length 94 >> +stream +xE TA + +O&2|` yF&^XJcP@r-p'TwiIU)ܤyg&yc c#< +endstream +endobj +821 0 obj +<< /Filter /FlateDecode /Length 54 >> +stream +x363T0P0T026Q064bC.@rs`r22 +endstream +endobj +822 0 obj +<< /Filter /FlateDecode /Length 72 >> +stream +x32P0P4& +f +)\@B.H  %g m DDJ% +endstream +endobj +823 0 obj +<< /Filter /FlateDecode /Length 47 >> +stream +x32P0P4& +f +)\V.L,іp +"g ' +endstream +endobj +824 0 obj +<< /Filter /FlateDecode /Length 258 >> +stream +xEKr D#> +stream +x5Qm0 50 ~% H;کHӼU^2\.u*YaCu|f!S֖{yJ,p 6s +QDnY@蚫Xb V)Xv$ r1YSE)|,ّZrY +n}a8쳋DyL$dl>[E6v8Ѐ$AS8>aj('89֯1 NKRWϠA3.IwcJd)6 +SbVofQlܠbod[7}_{d +endstream +endobj +826 0 obj +<< /Filter /FlateDecode /Length 218 >> +stream +x=P1 ]XzgKH"ER*5)/u%YS:|ynd6%*E/% +}ՖC4h9~ 3*K6p*3 mtV[ Ф`׶ r " JMr^>C5Xs S'no^#]X.i5AMZ-^# @qRkp/'S +endstream +endobj +827 0 obj +<< /Filter /FlateDecode /Length 83 >> +stream +xE 0D{`~&>Q޿ %n'=\ )n3C ,]q0 \GPaվRBf +endstream +endobj +828 0 obj +<< /Filter /FlateDecode /Length 239 >> +stream +xMPm1 +50<C hK[e#9oɺCNinͯ vPT%J\n4I/8k{Yx)=2f90=NƯ;$B +%+ۘRN-{|=ލF-j80SѕqCgGW4 zB59p`˳Re]:4J(^7 +endstream +endobj +829 0 obj +<< /Filter /FlateDecode /Length 406 >> +stream +x5RK#1)T1>O^Eۑ{$f!C?R{ +,[ɽJ%sՔϓb"BG5$ L(aϳ`bvm?Յvx2@f)KP$m|3T9Zbh!7م>IdȠbJ Tك;9Yֱ,AqU\U;vFj_ovRy8[f=1p@.zwCDj yB9 +x%a䦴 +YE4`Wdih4U +endstream +endobj +830 0 obj +<< /Filter /FlateDecode /Length 51 >> +stream +x36P0P040F@B!H Y@8&++ +endstream +endobj +831 0 obj +<< /Filter /FlateDecode /Length 160 >> +stream +xE91s'H\˵G4Mzh>Fk,JDPc;(HLHcH#X]T*Ri¿ZDpTO\M1T;I^EZ1D0 oE&پ` +8 L7 +endstream +endobj +832 0 obj +<< /Filter /FlateDecode /Length 334 >> +stream +x-RKr s +]3s--|FЀ_䟯imӮzL;lOs^&_Zg:R3s(VFv6Hj\loXJЅn\F#"<& +⏜r*aꚮtrUq53IfHy]8 Sfy'rԩgK9YhtNONW3!9 bZWib _SQSz;~,s|s +endstream +endobj +833 0 obj +<< /Filter /FlateDecode /Length 70 >> +stream +x336S0P0 +F +)\@>,́,# .C c0mbl`fbdY 1 2 +endstream +endobj +834 0 obj +<< /Filter /FlateDecode /Length 320 >> +stream +x5RKn1)@O󪪋okL0`)/YK%ۥ[%BޏR-G- +Q=X/":pJWIj3 P@ƻb2R$siqr&'=YߓKMNI]IJD}B<>G1ɀ6m&%:fU`)W l[00Sbbe5ˆQ]pwhcG i8^8^9c, ch&zОaZT| +endstream +endobj +835 0 obj +<< /Filter /FlateDecode /Length 18 >> +stream +x36P0C4R +endstream +endobj +836 0 obj +<< /Filter /FlateDecode /Length 133 >> +stream +xEK!Dq2s퀝nc=T=.k!񷩖EY>TzRV!ܠ,I*!P-en6 S0l_["u?*/ȥֻޢ1 +endstream +endobj +837 0 obj +<< /Filter /FlateDecode /Length 340 >> +stream +x5R9n1 +} n H qtR;ZTvˇTt7we ɫRHV!25gRqɂ?å X#D2f[~ix+-XR8y- +V~AG}TX IpPvH 9{,vQ3(1EA%9źtб،7:*[ZYc>,2zXtǃ 4 4e9QVxC 1! J<% _6?m^JkL +endstream +endobj +838 0 obj +<< /Filter /FlateDecode /Length 251 >> +stream +x-QIrA+fc+ @tZ⠌ ,W呫h31~+mX@T IcP5vzq ְ̓ f)1ge]=Aɬ\%La#g?2.s=7 FXanV34H!AF6r/tU1s-m_M8kX]q.'/6Qi@HnsxK{T`śn@6߼_`[ +endstream +endobj +839 0 obj +<< /Filter /FlateDecode /Length 174 >> +stream +xMIC! C31Aݢ-Xvs21F<\d "]VYϷ;ݏf_=ŰWǁK^*%c"R6;Trݛ+pC#< +endstream +endobj +840 0 obj +<< /Filter /FlateDecode /Length 89 >> +stream +x5 0 D{O! +ؿIpcݓ^R@:'A^ VEQIMESϦM'3uzZ(mp} +endstream +endobj +841 0 obj +<< /Filter /FlateDecode /Length 141 >> +stream +x=0C +@)|Oj#K zcÆ`%Tk@%7ș`Gzb8\f}B%h{Siܦq5)ꜣg44s {Sw. +endstream +endobj +842 0 obj +<< /Filter /FlateDecode /Length 215 >> +stream +x5Q9! @$/xO(͌V\!R!S>z.j4疴-s/fi<CѨQCԥS(>nc! b(,AͩEm'5^ޗSƖV8=O&t2ԫ5 E"<Z42j;0NqdJoWGT +endstream +endobj +843 0 obj +<< /Filter /FlateDecode /Length1 18276 /Length 8908 >> +stream +x{w|TUwf2L$I`& eB'$)B Ih-:)AbEWE7$]׶vQwmZe =p|?NyϹLX\'EĠU+ʙ Xf!L'W,\Jv(ʻq}=9l3xDd+}^Gvl`PPyΕSV ]_ ۽jiO{ES]\ Ϩ?+(ӄIQMdBčPY6tu.HmzA7t%sBՋ@=o g.=" fϪOlR {"[}[?1o߀} +:5~aTÀ2Эja Lb ZRaW@-Fp')6[Y\ʢ%,b,6Xb,ְhf*+Y`2KY4Xb1E,X,dQϢE-,XTXb>y,沘âE9,f(c1 Yb*),&(a1E1,&(bQȢE>,Ʊcb,1,F"E6,Fb,b,Yd`e1EXe"EYppŢ',,RX$Hb"E<8,l,bXDb"E8 30&F*  9,~f,~dw,e W,d3,>gOY|c;_Y,N3Y]xşX[,dS,^gWYe/x ,yϱx3,f{O'Y<$Yψ>%'D}Dw +YWBi*3|]wަ?G17@o"DJ +L9_$zDSsDϒ~O(I :I8=F(9O':Ft"aCD yt00N=LуD6]_ZKtD!NDwPcS+JeL&p#Y{n CeS+]Ke]Mtn+)rYDW]N負 +ctTm :am%4j :p(#@[6SMTo#ц!:DkVJAG ZYN-ȥDDK-z D gT"k*ͧAϣ%CBYt!?RF4h݇2ӂv`@SLd +)!AB)&k"r[PV헀`\h((7e,YcF +uCkd06 aDCpX9AX!e t "/56?5֏/Q:QZ0VfMmRcnjEԋ$A$J!Jͤm>(1h[J rىB,U3((("Ap" ("Mi$H%R+%q.S',#|?O{;[a| |s3} +c# ]np} |ރ.mOފzFTTTu5WWP"|/D-uy砟Zz&jBߡ''_I?<<u"u>>>>> +4g}=]mO77Sk+K ggON'1(@h4a!A -p?pp pp' nWW+]@+pp9 !jǵ(ۡ[K` l6uZ` VMJ`X,%b`,:*Xs9@P,3@)0 +LJI@10@/j˷wB>u?&-?|2.Ĺ/ RX-L׋;Zl'{BO[֛H&:uܽ@).[}q.۹8׍R_Ck(]gq䆉VwBW|hbs\1OT*V4E(e e a-@]Z.VIb ~V@ +Yln7Y'֋ b$6M(٠{סdwRUW&k; +ܱ_jĕWů\#׊0^q-_xo73 ܡFqB<-=5-eRgzr cvA)kِn {kByۆH}ly8`dϏSH5^9b[/Ό^n6;.*]Фۻcew{p/s/|}Xۿm**}H<9M8(N>":Cm[9*!i{)='Sz,}sPϋ?^ߟxM.R^SbPDq1܍[|/L)!wеDQܥCJ|20Eš s:65K_e;VjZbK/jXX_W[`s*3N:erɤ + Ǐ3zTNóffKOJbshyFҭWjtĉTQuRsUtqPtQQ;RLj1B[{P*wx]Oѵ1]7`0)BhMCkaeAfnEdf+JYѮUt+ծ +KfH+J + OmiaYo˽HC.w{+;lY멭 Uj(lmݩz:-SPy=XɌ ()q~'yϙ _ʆQXV\}# 'JhJ=}3+GmB// U|\9GBt*)CҐ-̀aG}BFݡ5}"j:TtB>߉##|PtP%6YrL 3@_g"()$1Ć+`8&F7n9-҂HkA0UȰ %i~PhHwD/l!I c8h +ݵrm*oh,H\ů)\\8,Rԍ׬ҟ'y~g$(t[+=؈&* r.{ׂDw<[mSP[0۪-l6P\#N3z#V3#0TVPԽ,01iq1ّ֢V\]Sjr-^$օu,h-rw%MT'V#]_ƟQ<`,jD'1'>$R{p/ N4 /UDTf|W=^Ǖ5s b8i,2~b)l@؋(4Uiur1UܨN,!(aGA%ق}1F5HJJ݆%Py7E|dQl_5S Ʒ#:sq!lw!6O7TF4MyR%/\ĦGf={:oCÇ{zGo؈CzD'Wbx +ô0u'oPS{TI9&6sNژ=sd19wIcaͱ= =, wLga)Cy} 7EXTcXXGSgیx[lٯ`ne9wꁮR2+Ȏڔ)Ƅ8J "JVc}=Xl!jC51$X;T/Q዗oX|%CHɏ,q>J/dJsFyyyg,tb Ä"RI0D <4%r|,{jRn<n{'%-ݝb4LH$k۬:ϪaAU2G%>hLȧ8ƊG =9H +AςĈ/(I @r ?e,3ƏMMӗb.oݎp ;ԡp] Wh `} "9z9j:Ft(v,w&sjܡ?3$#W$bE{/\s +&yէv;+nZ?Ʀ7~/u7/{tԲ+/l:kJ'2Rup+>OuBψ+obu#{ ʑ ʑi9/j:-J XOΨաF"S9})4iXb<=qLM\bV@(=DCrMEp$YPcҤhYP^ɒ/h= 6 i.w \9ߐkL3]I{7F&;:W7hĊX;e֔mիoPZQrD; gSWnl܀^Fc +ΑSdss{^T715zY6ONQDJ6-L٧=H&hyRCU{v0M *Z1W[iT:bJMƬ_{ ׎[Uվ%f t8qQ1 V`-{N)IMYؓR#yiCH4X߅t;5<lHoqu!L WzD|UsCɶb}yާhvmOA) +si8m8N>l! J%Ν7rZ3FJ$[o혢PfeШsc&w.6Ȃ #SO֜6{\ i0 wLps᥵c>w3>݄9%=_z2ej1!uFzbpdbTĞQg'9nֳwE9醆N"F&4&N4 +FЏۋՔ\gPC;.GW- +ѲƅGs'u#Fv;pFt$ W_f; ۟%1k܍8ƅwc^Qiw"M +7b|xU7-+N +endstream +endobj +844 0 obj +<< /Filter /FlateDecode /Length1 1788 /Length 1342 >> +stream +xT}LSW?Bi)ZR)-!X:-PGsCX[A@G(niGƶ,F:ǢaefqS,C &M1ymMFw;]f`:5z8{7te)YL072~`^sio31`&>vQ_"2}9c)$r Ca=#٫]n/i`Zj}dVD{wm4@SnN_(еLk;SNBe.jJFq%?~M2QBFFU%"K iEX5RA:A2J i+[+.;8P?x=VSL ӠdfgQ-g%f@0XTj!ީ +w U怳vIIL#״ZK6͗52Vk&m V6{!w0&KȊBp 0oA,ZdAd zl".e6Ⱦ1j4>+.{__YD- +-L~{7e1+`7XXU"v¢:HM~[Tj{1y3w~\aKyvpg\^dϻٶ2MGmdu} Ji+;s9&oC⭐lnrVPv1Dwt!V}^kYSiޥ߼Lfiy9IޏgI}><|oŦsR|"L5gxW௔a} ^ =_4OD2Ј=[-oT9"'dRp>r#}u1FC6R I O+X(>QGU"bD417B +endstream +endobj +845 0 obj +<< /Filter /FlateDecode /Length1 1984 /Length 1628 >> +stream +xU{l[?ܗ^;׽ۉ}}6y5@h)nUdW*j>Mz2=Irέjne +#vwO05`N.%+cŔ>/IڹO{J=K]wA@} .J$&aL8Ο*bcP :DȨ Իc)U&'_DgI2|pg}g )N[xp_][\X|9XY/Hbo4/ȿ>Y>ҵYyz׮B BU63rBU$llDM=?(N^;jw8}bΤo FQɎ͗1(.MͱUɡ׳4K7//uty\y:roAow`OU\ݖz ZU6.=!P_7mįp|{b9>;DX=1BYkX[c=1bcnptKrYVIPLx[NeS g\TTBo){;-.G`0@ {G&oʿSOŖR`S:3+HX%5I@2_Մͩ A ze8? VSN̾ѽcG.;(zl񰠽tHoQd#{ȶkGrR Wlr2{`pe4=c +endstream +endobj +846 0 obj +<< /Filter /FlateDecode /Length1 19616 /Length 9980 >> +stream +x|yxTEu{{_NwNtBH Ҙ  ¾D((:*iP.2n3訸茢$ߩvEp|3N>Zn[Uoݾ icf6eeSS_@[֯R_˜e+)unjt[9hkj4 +mt!osuK40eٻH{W5l{y-/բ(`UL `ʗ'˻xөSeIg[8y!I#lPO3}Ϲ北ߨL_ ?-? +G~*m~VqkW? ~F~MjeX"u;pвsВ̨/18+Zu^@ v(1|!c4; b ++! MBlb(! #:! +F.!V JBt +q+X.D˄hMV!ZhIF! +D! Hz!ꄨl! +FBZyBT 1W9BRYBTQ.L!ʄ(Db!f1]EBL,! +1EB +Q $!(!/8! ++DBd b%D~!2)OB #DB"Y$!H"^N!pa&D1BXa$Qz!tBh! ! BbPSB(B{!_BSoFw!+! !N !>BEC!>B/{B+;B-xK7xCׅ8.kB*+B,KB( BNLj%:Fy=LƇ$:JthJD":/ #E~0}DCt7FP+w; DJjfj&)뉮#*\C"KyWR+W.'R=DPɋ)GtхDq5a#fyD"vvqꍸpH;"|vmT}+B9jEMT}#D=DRT} QWՂVVScJNsV-zD˨gTJ555-%ZBn-&ZDBDgSw҅BJ DgqrVE|΍8wD٠ThVĉ RD3XqnG^iy$*8{A3"2t QѴY!5hrQ!QA>I{-(?bM Dy{丈llR.QUϦ+d1DQDD~{i$AmSc^jCFRRDDI[Lؖ"x"(ATFX"+JF"HG%TRCFH&Xp(19$=l/7;F+K !S|| 5f/1?>~6-97S$$1R sHryʔa/˘$]j62l(,]X?a݅a_T/IKrqMYY]O{e߾u^AUqP.dm@m,f]qdccءX9xbd1cM*z2*A+,ܕy5efYr\T\4g-q+-Y\PHI=<r^iB_~Q1[/j/ȑ񿼋 [v|~ ;6`+ l6@X *`% 2hZhX ,:8X`0U\`0f@90(JL@0 8 +L&@0 &<`<0 9@61h` `$Fi@*d Hx88 V` Z@3} + X4~~N | |;5%p  1W/G? ^^^^^^^~<xx x8<< <<a~p@8 p5pp+  + \ \ + \\ Y^<]N\l[-f`zuZXtUJ8X,:e@;-@34K%@Xu@-p65`>0J`P32(Yyo^{ml%'͌ ^y_@c+Z֋v%;alulc+E9t,C'1YD*N2dg/ ֵ̤ʯHN1P>O@ǪWZ}s? p] f=jvv^6hRteyf;0Wr'l]ۿeI(^v:sa" ;|fʻuFۊ reb<Ey?0lǢ'R~=⹏cm=,{=^bGEi^f؛7|b/k?b1l:lȖK\lwCSYTȻ1K%x2KKf9١*Nm`׭^ӵzsV,XڼtIEuU͝3rVE̲ҒӃEΚ:era9Y#}#GO4E- ۷g!),5 7KO}x ȚVR˚ ԅFqxNgK}po7; 33š {ÊsS[#/YMm8Xl:l.75b˹kù7 (]VBҰ8[¹%R'w嫮=>ucXG8/mm{ݭXZwz8Xj,lrxaZJvXan 2|fLE-$SbJWgQ\`T-.wcqKn6 INh]FyF{KJN"v0}u`Yǐ%C{mjⳘ yZ_·5W'Z>xU*9#Ef5"<iU3pg"qkgJ_~IU:_9K70KzMc1vo"yzƎ}>߂ک\5lso}qJfٌ~tauPpA}c kj#257Ψ#^ƂUVnE<[A->dWը52 1F`XˀL6Z߯^(;2hAlTzT96s ?^$0h Ac"[eOI(kAdh#7GԖtTEInEb2Nk@kZW?Qb!$v`)G|XXMCu6#l"n/"a)^d 5j:,rw`h6t@}mA͘r39ami`!2z*ZE(R6c(SJ-XkXj^$½uhr#far|hؔq'#Ԓō$.HoA[|jiX# 0uKbߦf2>,%l59ho9ho}.ma3z?͕ +*x_ET[3*pQ}3,Qm2Y|!a`hoq╝_}^2jU}}@2Xc ޼XRo'ZKXBhb?lS] O!_M!w_xٙɎdp3o?&p'V&"|F}^o` +vЈyXXu|xkឲƾ>\҄j| F^8I ^6yqk*Uצpďy>p$gu;Kǁ[Wu~pu6 Ѽۮ]_SMmj2tWԇ܆rc\_ZCc9} 8=48UɍZSuh +3xA7+ ,|/WAm=_'*Z DO|D6)8OQܼ7,xQW 4aT QIqڈsh>E;0Ls+iJXMv(?< \zYv|/KGzr _:L/k>gwHŸϦ uq0V#[''OQR"֥^= Ga )ܼ8w&[wDΉnOb/΢ӉF/^ @3${]3F:߈yb??/o4yoD&OO$4%땪S:yha6-9iiDG ۂESsR^h Qf,ޞOu xW]mɿkc~(tWMY\4Rd5:@ZbҘ) clso;Q%OJm\֩9pofF0?{9!M +W̰W|L 38JYfiH?ْ8"gJ ,}c|8R;B+**r64 +<ۉqc@=n/44i6Oo'Q44L`2ue*JOh>%]clOFQ_W(8_JjFd"kRfwLrfG1Eo1JS1Zm;^1ksj vDW6 kZ]Sؔ< ۱LY,DdM64Pʔ"2$ 62ڜ`MĂ,r`)If$۰Whl/h#n +v`)"B'8&'Hy|Ur NORBzAS̮T+igJ7)rwxǎL4Jd?ie;ΒlZŠY^Ih0' 3Ғ<ʝicƸTAttɦGYH5;Fq?~G9Q܏AMMQRGgX]`uy6~@;H7Yчdh& H~+/!j} r8lXP)BFjU#m;Bu!:6vDZX׈iZiBeQ,:gݺ󦍻/.vYyic*Vr\tmW׵KG^sQ .~jZ;[T#b|x=G;]2沇0tBNyScrW+q^7 Oťg,,|lYn<σզ}͜-Ӈ}%YR26t&`6*l:Feއ͟QR4ZF%U[$A14ZҸ(jL1E͇x(I5I&'?ܥNTpr:Opes0I~- "@>b _UuJNB8Q+2? ӽUk^ t{ڊ%U+J_V9rCY; ',9gΦ KvAy?;5QFX]``\W4XЎl2,[{GwySW?4uT+~jդh0$t%81}ra5}dEHJs|h49' +jڕ_L&c>IR^Mf>zQ'(ph$XOS' H~=-_xbhˮ4k*FHڃ1suB]6&* _e4F+:*Xh{b.]=' TWB]7j5HDܗrNRka]Bs.Y!֩ogԆao^e+8+s D`[y'J9(%,%$I$S\RS*7K; _$%B›2ҮfZ1RaRcrh=#gb8HKCr|x=ƟZw5H88}p/6>3hw~ڋ] +_n +׊bf+.y7+þõ"> +stream +xRKSQsuPs99rf)s.u&FAQQD&b != !Hb`Zj۵s }99ghf'$(Pbi{ow%S v1D/ D I}8kÝ<|<3"\4!48tZae:U]ꓻ!+)^|^.=jn6R74-{zDEzzOϮCQbU +0hN y 4.X`r:z zًX$@F JD +N!bf^c̒WxrLi^eU-ݖ\M"QGJW`vee:%_ثBΒgf zu8KsC{H H;jRm/.ockr+|| ?|»Տ臄3  2FԒ+rNv*D x9'^>kM3YA񚵱djְFW~\'zOesoXΒ7a% "JR8+Dr+%ibX{ Okb-f9gZ ѥR9N(q( ?cLAFT +}FMP ϐx ﮽pᄄX}.B|K+KP~':v? AzG1$ +* *? [ +endstream +endobj +848 0 obj +<< /Filter /FlateDecode /Length1 1640 /Length 1298 >> +stream +xTklUw>flt;;mw}LG)-JHKl_(%`$j@  &Z5!!Đ ЀN=jMf9>}LFD"48܅RFV Q'>z shm3W-?>5>q"~tpz?.jFTNj4 TD_gnM $#F |Avpt\"R9FH}X'x C#t#~D ,:'lĠbP jA tN]Ÿ ";.BMf@Uȋ8P E%TTBH3 γ0&:Jfk+2h8mTKy[CU?^fZ ]A7m5t-nk\QLi7K#ÿ*LmEPBv0`VV`@A;{쭖X̞xcmcM#ݍFXY ,ZX:$ B:b]M_uIev5m{W-jG͗F]XF4?Mb|a(nJH5O=k74GH}fn%3Hn8[=  =@;4t`KR/G>+a>gstq_?@em53/+ukD{ێˊo WY9 +2mQ, +dR7ǽR%],[x|4agkV$!?չ4O[@hj =sz +zz )"rG0O +hJI&[l2Zl9 $D{=.Y(Cѱh/Wd+nVm y$Q1ɵ2Eԡ1sjɮe)4cwtn6w[_~}i#ŵ={ SsCt##Ӆ;;,0uL%"@u TJ ,+vwe[os,@ NGc)bi7gr={RG9gFjG2Kv$gF7@ +endstream +endobj +849 0 obj +<< /Filter /FlateDecode /Length1 15180 /Length 6812 >> +stream +x՛y\vu m@4pIF`FfpcDEw4ӦlO[V+ZFKEw+w[t: ysqvNOg~u/Ͻ<Z#E0U FafCT-oS/DC (΀ WRbs͇l>`>ؼ6oy͛l`:ؼ0Wؼ%6ؼ6ϳyͳla4< 6yͣl96y̓lǦ^66t^6M666lnb͍lvlcs-k\f;mlbs%+\26lͅll.`f6<6l`s.v6٬cf-5lVYf%lie¦Mel,eMz6,bMlj԰fSŦMl汙flxٜf26lf)f3t6S¦Mll\lߖ&98( s!jh=ɺ$(ZKd5ɪI280d9I+PLDehHd Ui 'YBE$ IHJ E$U$$~ +$\&)'xI!E!)#)%IRBRL2d:4$E$SB̡ hh2;h-B +ZBIHrlsP$gLIQ$$g!M"II2d8uE2ed8H J2t:${$CUަ-7}Ty5JJrK$(" $ϓD ~}$]Ts/EOdw09gC:ItH%nɸ+wR/w좲In#In"Ir#uzz*ZkH)FrɕTvr9eTv)%$l%j^HQ-$I&1MJy$I6L j&a&#ikjTYEW YNJBL]7Qe$*:[B5HI,"YHHjy I5լ"$T'GK#C2&]N]@^sh@ꥌd&II0щ& vz0q#dZ012L &⋄RHQdJP +&nC`2IC21M'X`dDg㽐1rh*E22TsD0^Nlx0^ސHQL:B:;d(u6tt`\H4s0J٩ j7d?Ie.L ZA-!$I$$}HA<5P2$LC5f%#I"HI¨f( D%QH'&9We뎫 + 8~? =e"| G|# |:ۧ1#}A[Ŷ7#lo@_7^3^_1;l/! ? yiBS:ۓ'qx8{x<PLf>"e{P :/zն{nuDw]vp[tV-f 3zF7C_עkmUJp.CFM]5vq֨lEm23e6*ٶ vϹ6Ϻ6Otfm+j[n3!,jggMj* +ʎVY iMlmi5Ъt*VEV{)ih&)dtIMJTWMAnsm^YiXYRY.^XͮtT{+= +칞ys=s=;=lԟ]tyJK<3;J<3{#?-33%SQ0y12>d>#V%wi=b"Ք_OɛOYo}KR^JQ)C3q}_a߯q:--dS[299#Fs%k$%.ɖNR&Ů(B@LhGIM#? ET9""=xlJ姳\ۢ Olo\TԼ2=M[ERoдs\_.i[^"H7,j\:0X[*?zbMg6*?z̦dmѪ''zFs;3e<ȎyFSZeJnnA, ,UCxP俠D/|wRzlvm`-XVU`%XV2%ԃ`XP j@5*|0slP| R0b0LTPBP&7p|r$9`"8L80d0#`0 2!ti@A* +~  $>   b@4 0 +B&T! +~?'#|߂o+p| __1=.x o75*8 ^/!"x<ςg)$x<x< `{~A tp.p'p3 7p=\ W` +\ p1 +.l`Ԯlvm`-XVU`%XVAXR4z, AXjA UA恹` ʁx9`2P +fb0LSA +A Aߦ'_N|1M?)|ǯ8_@EY|U\!wEw)nw +]<*o_ bL{E#Dϱo]'e@'[r_r+,ADmas 0a#cu3|qowS&P,JD-戹B1jQ'bez -E4p{1oFT4*7eˌUJJkZȬEj#%z̹bX)Q'6a6-GK\*.q>\)8/._+vqW!sᶉ!_+kYu5Vksx҈i5WXuX 9@Wb6by:ۈru {iJ\mr.9eu+#lrK'm\7St7Ó'w(E*n^ұRvv;pm%:͟^qsA[N> .#ýmv<>_<3qwÙ;Л}¨EcqQK>siܡϋKIDg,Wś9>ˡX1 qWh$vܳgSUnq~3C+6H{z~2́~'=_;ܴq钆ŋ-?o>tfIӦM),vNrL<{qc3:kXfƐӴxK9:*2"<,4Ą.]a+t Sƚ I +ݎ:]蔚NԬ]M'tXĄ K/k. 5_ft#0#HME +.߮+v^^pUgf(QyZ^MTf茊Ӈhʐa!q04Z/.򭩩>#'<=˾PǘŅΌ,SUxu&W YwC|}OS5zV4=4͢? + ^;%F}Rߛ K(de?{a_j˅]NQ@o/Rl֠pf9|Z!KrIGsɉV֥*zRJ{fvx!i(ʪ:b-EWw8 +Lb\5Z.6$͵k4KOEEUo+=˅8E\1r/ĻO99n=R>9=9 +xku[gkM՝>,O.i}/l +s]miivj5n!awC˝F vb\ G!) 01M +8&a'A6&:j jO)"0ۿ*עw10r*y))v]۽Zp9rsZ_{Qy6"ˁ͓v*Ո'wŅ\(;)MN0yW:T9̌ZV׍;kvwW:@nVXJƍͺZ%A)EeJөl)-aR ]sE4yمpYUfeRV@4AQߺ)DQb$KF*!.r^gq '߉*qr!EPj,/ /0fzoQg3F5XR%Adn"v(fډ>1'Hu+)s轷*d:!iH <1+_ÃeZ_]'"*ފhj1=Jգ\ϑʇ|+ +6 7@1)/of)h=K5?{HtiSPoz{_Cxp/*.vU +Hj6zC*k8!vsȃz]ht34](HΔW.QiDblK+B O9JCQUs2=,yL !5QB!eJ6G!GCx(rFmѣ1VEr,xoeGe7%]b~9hP(i~<ݨ}42Z67F_i2%xr1Xwzvi-_|OXBlGfFf#D}Z `"U'q]MTT140ECMM O'kaƽLJD%6:Xo%2B!;/85;QƗaxcc}UǙb{niS5jاNui{+qcywWLGҗ8Nׅ "WAo/WjxSSZQP]GV=Zr>c]@@ ƍ>]F~5VGp-`r1/_R~T46$c#$jVUd7oEu-Q4Y.9G2Zԗ:r+F6ӫs#z9to6 +1R];_ާxiX^'N=lmU<^i{)n a !b\bxHӆCsX?̋X!z?FlEiD "+_ +,77H&.ƊibخorxcHOϏ DCc;~??9BTsö =9[񗏜eup4alQ%>Y#?zKxbz4m +Zoϑ흑9N5|k=:Iq?88@7#|J|jAb >=}ȑgNTGJǪFnԘ&F9H5&e&2VL-7Si9Fh U$dNHN0l`)<>ELJ009i`|xǾ %/+Maf:*B 񩅳XBX#c>?ic@R= ;]9,Q:X:nga&%*4/sN=j3%Y' 3w=$_yM 33 +endstream +endobj +850 0 obj +<< /Filter /FlateDecode /Length1 13960 /Length 7853 >> +stream +xZ |Tչ?ɬɐ.3LB BrII 3 @D4*vpGںkm7V}u>[Vk5j[@Ms{~a?wswgCvt#$ھ(9'r:ͣt!jgώM[QFyΦ= vwN,LޭC} 흉`:賶ht~[n/jLߝg^.'Od5Q+>,lrB:B5WݕFkg$Y_oN=kpK r[^n;]p)`s#>9?E8ON3\9mherZNE`܆ !#.-Jz*M=]X #aF e=:kbQ"+Z˳FԖ!4 #!,EXPPP-ꠖ*WPA} `@(}@[PaJR++B(D(:\.BB6|,,\CHG!  `@irr,Z +B2<n4KBцF3 `@кNNn"h*tPc300`@_N!D'w S +?7Oc8!_>@ g{O".DFx M7d*=A{[*o^A5KGxW"=oh93O#ݰ1O +'~&ׂ!QGcc#h|!@8 # c9 cE !G?r`nDvnEEvu@oF{ & p#\p-kdW; +r2,p!AKeWj9]]mk9ſ0p!#Ovê - `,va{X|'"!]قmF]E&ynIQSvR +:.;Eиd`\/;/X';/X+;,fȎ4BTv@[JviDdL+JyEv14#4IrR-@#246 ԣa)9 M]jXP%ۗ@^lbe{ B(GX$,CXT!DgR"BN-d;5!GSʳc,YRC@!# BA9 ^B*zBad/zz q:$;!X,ft1fmlmtZ =UɡE`8'q1/@rl' |jN߬]O@>d>/ = ]HG?۠& M ȫ +y%_|y@~,/A~os?71gdMdКH$Y JZ#ʒȊHSr74D 5DKFꆖFFjdm?ςH񉾷}T'qI +;ϚT5%3ۓ/L2z_w^f-C̛_K67\oVڷjB~bk>v106Ne`\ZQ00a[W #ډ y\*WҧزF\*Ța"6̰Ue _~$ Rʨv[jeAiQT4M%F$Pݤ2ްk`W8*m'vk2V넕oac‰Zofc̹E3X(sMͭVF*MFV4VTՊƬ3{޽aWVm1Tdwn? ]Qs{7nP~7B3~Ii&[.}j\B.'Gw\mGD"?# QUo%&a!B&NOdDma9CO[&lehȄm|DD JY32fl4[%ETgAڪ7-sF2J"d#Md9H3i!d=HI'"ݤl"d3u#[6 ;I?p s!;aA<#d?s\L~p"r1Ƿy v) }i;S2+ȕd2=iu Wk`ԯ 07+#z]EןKo&[aw,_y+y31mCIr O]g> f%SSw(4vAf/.g2Խ>r?(y21.B]W\X-U6}4$4VBU,K[EҕklߝFe*cs /z'DT,R#uBkZN TrUA;G l afSCJC"f +sT`ӡm:ȱќdƔ0(QѠu^4f(&,Wϐ&NGa;Ԅ xR Tpc uQ$zY=j"PJ- s οx[ sDbrXc Bwd*+ЮvP)1n{6x1(\o˛ #sX:5QIN%TDlqetb\$=ԠOJޠP'5JAP FiD$d+.t,8o`M-0r0́ڶxm;ۡ}m3 +B( `3RʴDC@]vz4Cm=N'7A>I GRO{l1Wedu\0 qIja^=[)[ *|5naθo xR/ UsUR,╡nQ->Hqhk +at)Bd+Rd!e%Qa@&D*1+`O䩃u@SGK +RM E9=93y_kWY'QlBI%-\+YƽLWI*YJ8GvrZ\@20)50# D 8s7>U7Oijj]Nh|:A/5Y,l%uDtAed1mѤ\2YEpV@Nn8-VEEyla|Vm \~^PWTL_4m~iR3-j +l֠a:nނ?iZvX*Ixrj˿T}-شH}AǪ4G}@rwX6Ep'i$chQa'ţ5&Auzd+QSY,e8{D6˭susS)f2W?0bRzxnb ) +C-[G@kz8ʳ g &2'؞˷8t 1O͉]J<>0 @ +;-*!ܮRt0|<5 QS6 ,g0J5FU6v{Tj7eb]^yuU~_ĢpdE5/3J^TrŵmZZft&55ojJE}Da_L~A +ɱy,b3ݯfԆϳI-5pbQٲ^uxR̜-0QOm/>/9<mM>HltFݔC&9T*a6,;rkb/ΰ*[ִ.[]yoO_\'9imBxҒ:cGfw %)0c2ؗ|(#X"")s:,y8#n7彔QozKLKP +Ǡ44 +ݯ=0W=\u|R +bc}2^˨O3m̠"hhNAq9gPjg]I9j)⥯\E.4zά3-jʋ]L.Z \޳ .6r_a6fM)}]sIOyFeKq~Eֲ2zc8M[̱hsh Qժq+k=]LiZ8?2xaӾo߮fw~IaDg)\3iĜb+"妤B* GZSbQ}gQXsC:>\/c?h0p Xhygl[u)\SES}_Q+$hg 2%"rN)jfV]p{4W2zG峪 ;U) +sƞ/p/jXtΑU&pٰͫz[%w_fޅxm^yMhJQ?Q;/g+9郒d3y49fF|w}wT,>WnSIYGci0ɝdQ;Mo -7]qp]撴p}ǎ݄89~-"?T(,2 ͅ^ W4qVc** 9BW%꒚JOCQeɼ2mgC'2Ry +s97ImɳyrVn'3.&9t(-fU{ѝӰp4aN.;'Õ'lK6צE;B8=V p$>2$^]/ZӬ`Vi9TNWrٞ%>VM|A1']*g z#TW5"S*[f%Ȼ_՚*ޤ}M;GI#pTp:=o4d63vǯ ZD:ALs6X[a0 +wѩ+~ȚBI!S38**O{G~9T{iR>!5~zj"߮e%~J2z k~oߪ&&)嶛ZUqZal6OΤn$`~4wSjѿ9n7$:4E} +endstream +endobj +851 0 obj +<< /Filter /FlateDecode /Length1 1828 /Length 1496 >> +stream +xT{hSW?{sӴy474MroӤI6$ƶXZƶZc:)Ct ]RaC1cC6'Ήe0mm;pws~% ;<86[_2_j>_b=w9?bl0;;=]0"hALPNW!G +[jvlب{J9|;7{-#C$/qu9Q!QD&p ,a[ tk41&8(.̅h1Pvt=&V^9Au +ab4$!Fyw9h2v"ԹtI +V͢dYc.TFCcwҦx#? *Z;z+Eݭ+ >GiDc+ T[[?: -$ȄmENcqtdI"ܶeY s]p7 6R $Y#o,$v-̮\l +M׊{~SUG(󂎘y3]on]enhg/O '(5ct`/g$Ə]RAB 2.OR)Gy[F^wh/kܴ^al6H%:k,kЪj닝Ӣ˩T.z]i Zn^™0BwQ42_)::@Fm.Xh_W=t ܛu}H^S(PS+`(h@=c+xńA,s"Ćɲ{c'~_2vڂj@e;訵;]4叺(RC'\zirujxsSۚ*ź?^>yG1?5Є+f @ɿr2cA()A r+fի~:k.\DbL'}``<1%(uz!W fx +ODIY)5T&H&d+B9-dDO:ߧ\J XALٽP[ Y5YB]RS-ڮJXo`aQo$5*7CR==?0r1?JR.T!5Ta )j9r%n`⿓bQ)y#hz&cNWHGW-[sBE%q m|9K[u@oBB^ƤR7&@nv.|5$l\]kX댡lv8gJ&_i|y1][m-ȈK @i]i|B Cg`Qae۲}{daE +endstream +endobj +852 0 obj +<< /Filter /FlateDecode /Length1 20164 /Length 10271 >> +stream +x{wXWy鍙`Gu(*E1e (b)$lںbI]SDL5Y7u6mmfcnML>3`v7r}<27v1c*6cMzfvl쥴1̓Wt&XѳEo3xjeW['w0PZ_f3Ww0g]G4h kڶEy׶6yoKpw%zjF)$3a1[ +ͽpr/Y^1?]==gX_J6ciMƌ=}cn97`PY$?%? +G~2BM~F_+߁_~0!,[,hTۀW ;$fB}9X l4(0nGy  .;$b 'yBb)! MBlWBlbX'Z!#ĹBb+X!D]Bt +!DmB +\eBT%B4 $DX B,bB Q+!j/DUBT +1OBTQ.DB1GBb3!t!(bB 'DS"d!r"KL!BLb/D 1N4!BxH"Ed!B$ (K!p +"NX!B؄ +#E&!B B+F*!d!$!XTH#BbXVB|#BKR/s!>S!> w!>oB|(BUg!$x_ +o o +{!u!^U!^wB,KB( BJG'jq7v$A=2EERJA[RfJm"H TXOh-YCCtn$%W"ZI;\"]$ j'j#j%ZNPj)f&Fs-$'#%Z@TC4*D*EUH%*ʈJJ(o SDfRDөzQ!4|rGK^M!Lr^Q&QhD DON>Ƒ4"/%"I D"W$x2:d#%SJ" LDF"tDHb$փD*2ʔB4L%:MyPk}EeI}N}JON}Ly'#RPϔH>{wDoIE~O7^$IX z2e^"/=O~K,3Ti$D$ |R z&z=@t?q!*yRK4Ht4_NG"K@Da{&N#Dcח~E^~It 6_Jt !MF(D?#:HSp=#ʻ*ʻ +ˉ]F%/T?%D]Dtaن8A8Kt~B/a#q껨Ng'lۈm!%L\oG𲎜kz%ZM$ZA-]DTh92t l)t3n5C]L +ED # :VqF|.8j",|*RMTq"!URj\2VD{Wq\*8F}HlhQhv$ifFMH uTDTEjZ*؛AGg8JNy&G|C!ʦYL9D4M G]2PBĶO$rR;UJCd!2SI4@'iJɨ"$"{8X;XqWhGhmG/dЖ#!uws^HT+Mdk̛CCl u67g7Qf%ȉݩ஍[ņк#BkׄV +WVY. u u +[C [Bˎ6i56AŅ БТ#VU U[X*GY-ٛ,HFK[*sV3w}­&yD6QZx^*tM̬&Oq,W9ykxߎOW+N8O҅L%y%I6J:Sz&|Y$Jҳa}ݒtq8}7YyI$]4 ɥ aGu}38RJ)#CRJ}\ᚡHS`٦M,f]|MZ%u*h5#U0fʴ +cۈECak<&9Tl5ASqiEД5yؼlSrs@AIIM@H3/*r7᥸!?^AM`X"sF ]>`/p>v`; +lz&`X=j`Xt]@'m@+XK%@34,@P ,j@5PT@P@ 0l`0LB`Py@.0Lrl $`"0@:04 xT H@ p  10&=P + `SM: o___||| +|>| +?~ +xx xxxx-, 4$8p (pxxxxx8 ǀ{A(0pp7pp'p5+av6-!f&FπOkkWWWˀK~b"B`?'] {.`'l[^`3 l뀵8X V+n :v hˀ`)hF`1EBj +s +(JY6޼kŌ7ֵ|Iwcg>/j߅=blAv~Q4{Z35kYuiw_lȩ3wC1S{F>3W icQk_J#qje勠ʓ>t3@gl [ZX+kC;J +95lZH-G)l/:cf˶zM۠{Vƶl'vG߷*]١X!g;#s>۫(d.`1j%O]2Z].8_ή`?s%]~p ]~ysv+͘3ƵܬAa)@l)"".J#}cZL:=wcjlƑGoJGǁ{H\@ +km>o ciZ/] SXjmh!rP#o#,h +˭0ܗ8yo >XoG8/o{ZݝFwZ8؄5(lqxaZJvX6nU-xD-$ђFD1<%Z J/`T-NV^C4#m|&zΏ6JMwiYNP)XD&p}ʔևeS1Qtyì50u|px^*% g(,Q$'Oኀ2|X\%=J}w0U:IKµ&_=K3sZCk)VovN_EkV [WNǺUv5*nޖXV-U7J|AE͍my/nhi`<{ *V[ R}ʚh/ deh(~?Wx-̽#X 7o9?`}UK +Wp訰|ҼM\e+18BB?g'W&+]`z610|_`f"[)GjZ1N/oc;&;S_яx;Pkgĺp_ۊTߘj{A_? +|H)ΚPwX˗&%lV6 +{?]%'ںu)u+\%:}rrZ~v"ac nw,nQO$2mnJj#*hHi ֬ ҿ^z+Z1\'*)뉗 DKBl?ߧCX|oleFiUT3=rt('hς2{DZCR) W0lROTSjv}xA_ Y<.{L{X*c|ZKVl9T;=WIYźxs=[sJyw߷}('WޟoIc=;֓Qًy8(8| L$ +1Neܩ%VMwuoibNCmkTKǫ~jjv(Օ8iFZbkMmXyB GIkNic~6q6~AM +g&XLBo,> &qS[w LT3Ol2ƥ)^mffYgcSƆ4!V\\[TbO(CsmsL-3wSҜEXcQ7xkPbTq~4)AS{-I3 uKNIJz)$fz'%ŨwJQtf4Aqǫ#J ĊhLm֤bN+h2@DڤgG +|Ԣ'rGr.VKKEI,M 1_9!弯IL4DhOZH[&7L#=Y}2C∡9N3:[t_kO;͝u9|O|hJF_)yHƛ\ɆКl(f2Ʌ!L`ATÂqfZA4|&-'ҋf|ipX ^ᑧOEyI Txin@16l+bPN؄Ti$C?|*5Ρ;ƹzF&fF3Ï ~SӲVh3kxxNΊO=[ΐ|cwT9A{Nm@$&3*3Lu3s%8eWz'wBSǟ3^ktFJIIߝ#uR޻t䔪X +eOINdH3#~y9ob\Ql|(I8xIJ3@ `Fp$b}}2Ǭ3iUJg*X!37X}mk[g-=N匴mIN]Lb%j6%fڱe~]T74i0b_oOKfq22;%3'R f);sH>'LU*SSn%н=T +s%zh1_ySXڪuq^>Kq38qUQLQ(N<}"lĢ"P.AxO'''nWЧABH-@1cZv6OS*!lHYXߊIquR6 SM|rEs;>FTې &%Lt 7b=įYJSϘ:(F Ե1g0]/`!2jɳw&'ħti9?m4VfYdP &PKZbWm; K2IACouz+xoz<']Z9JAc%1xQ=fi6)iò֠'w&NΟ\J3(Œ6>ŬVIT`;OlWPaUFC1IT^Mg(1쾬|Q+'1)xh Sy)S tx#7z?wr*OlB0r'aW2lωV>k+!ݣ +S6J܀q"FoNN jnm~/QMk q6z9;>.ɮ{ 3=)nehĸkIewx2Erg,},':J_+-c^@>#MUa$V/'>m QldV5^x3nv.6jm)6řb\lR:ׅ 9&Y[~5][C f]'6/j7^a᫯\Yͫ43%9̍AT[*$Lv*g,KUo1ho2R=~֞T7TAPMLe3[*Ǵ`:bmYv .&~g^ҧ[/H1)IqfUdO\`KOHɚ4gvj_z + Jkgہ~R,[ ]g-a|>`F &cԉ} +b ?-XO$X$e˖e[r3ٮWʉyn^+kLv3_?mVܙZ%|o6jm=7?؜ +endstream +endobj +853 0 obj +<< /Filter /FlateDecode /Length1 13960 /Length 7853 >> +stream +xZ |Tչ?ɬɐ.3LB BrII 3 @D4*vpGںkm7V}u>[Vk5j[@Ms{~a?wswgCvt#$ھ(9'r:ͣt!jgώM[QFyΦ= vwN,LޭC} 흉`:賶ht~[n/jLߝg^.'Od5Q+>,lrB:B5WݕFkg$Y_oN=kpK r[^n;]p)`s#>9?E8ON3\9mherZNE`܆ !#.-Jz*M=]X #aF e=:kbQ"+Z˳FԖ!4 #!,EXPPP-ꠖ*WPA} `@(}@[PaJR++B(D(:\.BB6|,,\CHG!  `@irr,Z +B2<n4KBцF3 `@кNNn"h*tPc300`@_N!D'w S +?7Oc8!_>@ g{O".DFx M7d*=A{[*o^A5KGxW"=oh93O#ݰ1O +'~&ׂ!QGcc#h|!@8 # c9 cE !G?r`nDvnEEvu@oF{ & p#\p-kdW; +r2,p!AKeWj9]]mk9ſ0p!#Ovê - `,va{X|'"!]قmF]E&ynIQSvR +:.;Eиd`\/;/X';/X+;,fȎ4BTv@[JviDdL+JyEv14#4IrR-@#246 ԣa)9 M]jXP%ۗ@^lbe{ B(GX$,CXT!DgR"BN-d;5!GSʳc,YRC@!# BA9 ^B*zBad/zz q:$;!X,ft1fmlmtZ =UɡE`8'q1/@rl' |jN߬]O@>d>/ = ]HG?۠& M ȫ +y%_|y@~,/A~os?71gdMdКH$Y JZ#ʒȊHSr74D 5DKFꆖFFjdm?ςH񉾷}T'qI +;ϚT5%3ۓ/L2z_w^f-C̛_K67\oVڷjB~bk>v106Ne`\ZQ00a[W #ډ y\*WҧزF\*Ța"6̰Ue _~$ Rʨv[jeAiQT4M%F$Pݤ2ްk`W8*m'vk2V넕oac‰Zofc̹E3X(sMͭVF*MFV4VTՊƬ3{޽aWVm1Tdwn? ]Qs{7nP~7B3~Ii&[.}j\B.'Gw\mGD"?# QUo%&a!B&NOdDma9CO[&lehȄm|DD JY32fl4[%ETgAڪ7-sF2J"d#Md9H3i!d=HI'"ݤl"d3u#[6 ;I?p s!;aA<#d?s\L~p"r1Ƿy v) }i;S2+ȕd2=iu Wk`ԯ 07+#z]EןKo&[aw,_y+y31mCIr O]g> f%SSw(4vAf/.g2Խ>r?(y21.B]W\X-U6}4$4VBU,K[EҕklߝFe*cs /z'DT,R#uBkZN TrUA;G l afSCJC"f +sT`ӡm:ȱќdƔ0(QѠu^4f(&,Wϐ&NGa;Ԅ xR Tpc uQ$zY=j"PJ- s οx[ sDbrXc Bwd*+ЮvP)1n{6x1(\o˛ #sX:5QIN%TDlqetb\$=ԠOJޠP'5JAP FiD$d+.t,8o`M-0r0́ڶxm;ۡ}m3 +B( `3RʴDC@]vz4Cm=N'7A>I GRO{l1Wedu\0 qIja^=[)[ *|5naθo xR/ UsUR,╡nQ->Hqhk +at)Bd+Rd!e%Qa@&D*1+`O䩃u@SGK +RM E9=93y_kWY'QlBI%-\+YƽLWI*YJ8GvrZ\@20)50# D 8s7>U7Oijj]Nh|:A/5Y,l%uDtAed1mѤ\2YEpV@Nn8-VEEyla|Vm \~^PWTL_4m~iR3-j +l֠a:nނ?iZvX*Ixrj˿T}-شH}AǪ4G}@rwX6Ep'i$chQa'ţ5&Auzd+QSY,e8{D6˭susS)f2W?0bRzxnb ) +C-[G@kz8ʳ g &2'؞˷8t 1O͉]J<>0 @ +;-*!ܮRt0|<5 QS6 ,g0J5FU6v{Tj7eb]^yuU~_ĢpdE5/3J^TrŵmZZft&55ojJE}Da_L~A +ɱy,b3ݯfԆϳI-5pbQٲ^uxR̜-0QOm/>/9<mM>HltFݔC&9T*a6,;rkb/ΰ*[ִ.[]yoO_\'9imBxҒ:cGfw %)0c2ؗ|(#X"")s:,y8#n7彔QozKLKP +Ǡ44 +ݯ=0W=\u|R +bc}2^˨O3m̠"hhNAq9gPjg]I9j)⥯\E.4zά3-jʋ]L.Z \޳ .6r_a6fM)}]sIOyFeKq~Eֲ2zc8M[̱hsh Qժq+k=]LiZ8?2xaӾo߮fw~IaDg)\3iĜb+"妤B* GZSbQ}gQXsC:>\/c?h0p Xhygl[u)\SES}_Q+$hg 2%"rN)jfV]p{4W2zG峪 ;U) +sƞ/p/jXtΑU&pٰͫz[%w_fޅxm^yMhJQ?Q;/g+9郒d3y49fF|w}wT,>WnSIYGci0ɝdQ;Mo -7]qp]撴p}ǎ݄89~-"?T(,2 ͅ^ W4qVc** 9BW%꒚JOCQeɼ2mgC'2Ry +s97ImɳyrVn'3.&9t(-fU{ѝӰp4aN.;'Õ'lK6צE;B8=V p$>2$^]/ZӬ`Vi9TNWrٞ%>VM|A1']*g z#TW5"S*[f%Ȼ_՚*ޤ}M;GI#pTp:=o4d63vǯ ZD:ALs6X[a0 +wѩ+~ȚBI!S38**O{G~9T{iR>!5~zj"߮e%~J2z k~oߪ&&)嶛ZUqZal6OΤn$`~4wjѿ9n7$:4} +endstream +endobj +854 0 obj +<< /Filter /FlateDecode /Length1 15180 /Length 6812 >> +stream +x՛y\vu m@4pIF`fDEw4ӦlO[V+ZFKEw+w[t: ysqvNOg~u/Ͻ<Z#E0U FafCT-oS/DC (΀ WRbs͇l>`>ؼ6oy͛l`:ؼ0Wؼ%6ؼ6ϳyͳla4< 6yͣl96y̓lǦ^66t^6M666lnb͍lvlcs-k\f;mlbs%+\26lͅll.`f6<6l`s.v6٬cf-5lVYf%lie¦Mel,eMz6,bMlj԰fSŦ|6e3l6ll{$CUަ-7}Ty5JJrK$(" $ϓD ~}$]Ts/EOdw09gC:ItH%nɸ+wR/w좲In#In"Ir#uzz*ZkH)FrɕTvr9eTv)%$l%j^HQ-$I&1MJy$I6Lr#j&a&#ikjTYEW YNJBL]7Qe$*:[B5HI,"YHHjy I5լ"$ḤIϥ!Mt 94Yt 7RNRF24JrYg;=2- JUIEB)d2% P +&nC`Bd$db0 )"O2./$Ɉ +{ cT6dd0>3``!e t uvPl$$ixJh`3:S/6An +I~A\̃ ZCIHI$Pxj`dI,$jFS(JFDQPBIJgO\Mr<Wmp  ~@{ʾE |"%eG9 5v/uO'crG߃ őmoGހnfN +ÿbv^/C( ៃ"慶u' lO1(px8f&ۃ1Ͷ1-} Ep?l7rA tp_*۽ѫmDf^g Lۭ[hstgbۍ;o_E_נ +p9].n$jQ.edJgʶmTms;mum6%Vܶ6gBXZjU+E9ҚjUhU[ᭊ*Z-VSLM%MMzSxH* +εMfK2RwcR" paw]wmv]]guuɮpp{=sPVvQ..u(uȞbԎbBwQG{rvۅɋ&*íN7aխи~Jތ~~]RLQoHgߡ +D%ٞlJsKV.;9'thcd- .IK%I+P,SQl˄\*]bfQ2[WieYZmхbSQ.v*j^X\ZA[b}`'hڹs`Xo4|Uyͭl$xSK5.NSq|\-V=&g숳 +6*?z̦dǔEۢUwNhW^/-IGvkv87"*CPws bA,do膺&%CDG|w;mx^Wa +x yx<O'qx#ax@ =`7Np7w;`nM`'7uZp lUJp\.Vp` Dv<`8`hk+ + 2%ԃ`XP j@5|`>9`6^Y A J 0L` +(`2(.D6g>?Zv⋙lyO;8~)D,͢?狭 +q@+*FkNqSQxVc+D!z=~; +=)s>!2=~=]a "hkVcx s#}}w2Q**l1G>EXY,EXbDKP|Z*R$ZDXFH-3V?+*ZkE[ +#%J3 cFq؄], c]pV@\(.>_,.䷞RrT\&.pJlW㼸N\v#!n9#[\̍&S~qO<`e֖VץXFZyI#\qba5^pR(Wo#j 쥭7+q)fFy5syr-+g,z\m]/ٓk췉pބO OFßqNq {KHJۑ%}w7{=Sn;+*߷WD/~ ΐGAigF@o ŏF-YέqzNA8,^o*fW/~*b$~b~_EsϊMV)ȻK{EĒDT"Q4:к7|8SKsӲƥK/ZXrsfWx=򲙥%3OZCҵLk~$'%|SvΏSj:Qw5TybO23.ͮٻR|k׏~Cҍ 5-쮔|.`y]P:򴼚   ;!èC\:UaMi.^Rq[SSFN}ayzї}1 uYDSUxt&W YwC|}OS5zV<=4͢? + ^;%F}Rߛ K(de?{a_j˅]NQ@o/Pl֠pf9%$-KڹDsui._{y]^i4=$ vݔ h!R{tg>߻Ya 2z,QOri@'ie e]zb.|U,qʾR>1H(uH1Jx8k5Zǚ;X>],#8^@\"jB^-w +,zrGs'=Up5tWP4+6^aHVGSۘ884-4?it`oo~\"v9dfvG*i.uQbh5W9,͑kmoq&jvYR~JDTr7OzWF<وO+.bwDI P)LiTv* ͻЫpx5ҡqfftFr_9f @hthE3kڬXDR\T۩)[J;ʖ +>-垠5r̳.Ȫ2+]"}N!ڍ#aU]0rT 9ETu:Ӎ9NTuP{A.rT{HoXd~ ~1Ӌ~ +uF8#1YŒ- "u#;F1+N ?IwF:(_iGMkGT!IwCzgD\-$4.{{dx+MMĈb(&Wre>Gs(&Z$+.t> 7b\SË"/o5SI}zԛk~Kõ\uǼJQ\+Hp GHz,Ud7oEu-Q4Y.9G2Zԗ:r+F6ӣp#z9to6 +1R];_ާxiEX^'N=lmU<^i{E)n a !b\bxHӆCsX?̋X!z?FlEiD "+_ +,77H&.ƊibخorxcHOϏ DCc;~??9BTsö⋺=9[񗏜eup4alQ%>Y#?zKxbz4m +Zoϑ흑9N5|k=:Iq?88@7#J|jAb >=}ȑgNTGJǪFnԘ&F9H5&e&2VL0Si9Fh U$dNHN0l`)<>LJ009i`|xǾ %/+Maf:*B EXBX#c>?ic@R= ;]9,Q:X:nga&%*4/sN=j3%Y' 3w=$_<ʦ= +endstream +endobj +855 0 obj +<< /Filter /FlateDecode /Length1 852 /Length 657 >> +stream +xQ_HSa?߽w:ݴΡ.z]sM܌yYƠ?-uL , $B +z+||5_M_" 72f^C89;73}{*`hdV3 ,;ce@Fu7ّBD@XTvf`L#e}B8gGbxf?bHCS# ֕jsvw,?8G@]I}e4>!_ +9ƧJk⊐75z&mHㄔoT 6"jQe<&z\`,( 5*ѡ"5(N +iD )n N"bTS㻵ve>Mj5* )YZ/DAhZ\mjt] jqE=!ZL'04rޜӞ~yWTM6,FU 7qDk4~$f9#LԣNѰkSDEk.QJKryUICUMS$.1r%ch6eپSM3hec1.}br+(޺h17>@MXۈ=Nq}&d +endstream +endobj +856 0 obj +<< /Filter /FlateDecode /Length1 1700 /Length 1321 >> +stream +xTYlEl޵c{׉Yn|u;q6J(MҤJj9$>T +*WЊH$*ROH}B Th+5j!͆Y'_ߝ;2 8 )E"?3}򻩉 55^S39,pOӳclmnC b)k@|dV,`\=z5e Egζ{;4T cz04O<&*"HS2FCH}r +p̀.l"\ PW|! +"=c$jԂ80 5C$X"FLf`чl +N1 m~>J Lu}t˩chTNUh& +_y^ +%xZw}'|1o|kPδn#J>tv<:I>2F AFo̐}H`j#` !BpTi/dS8o-s_ DXȦSO,Xtx?n2g\mڻk$c{+\=ڂ?:N榒Y,ߥc K51LC3Ȩ2KWN uuO $gڽkpq^bT8ų}/Kw>5QTa#Yj02RrE"Fl^3NlR%.E^[ #sEpf"UlMi r[[.~ pW.ER;𛸀b)U`X#'Hqt6nSv5twpfJsP̫-]S:Uӹ2->eEV>f`mT{bTL->%2 +S=i+ڸlY&yJ٪)R*mK&SeBuEnFhw|Spa6X=]BjlcZ[Z*n#.&/k dk+e ځ~] f[h]-A1ېUЩgrhź"7T-f yA Kڋg䪢"KٲCJ?ȣTaYZZd? NIL:'nuQj3~O8A=Rf:z!p4&Mј2HC.8`ӎ6 u"'L]hv]:ѹ4 +endstream +endobj +857 0 obj +<< /Filter /FlateDecode /Length1 18276 /Length 8908 >> +stream +x{y|SU7I6]6 )eIKiY@(B)kw +PvqEWtTtp eQq]g\qQ-~>Mys{KRV5 h1vIrr֮^&;@Ӊ .hZ@v}on#[ 0p%֒#Դ6Ts%%kCv/^ROp}^\*Wh3* +"TacTaYbq#G zgmc|'-g_=m ?l 2fPb!P|{BD}KEpø"[gBV~O 7`~ *qcG'_w00t:XwXaE}E'EPv&>Ѣ"CI$wheq ,6b,ֱXb ,ZXb +Y,cM,Xb!F X4gQǢE jU,泘b.9,fŢEL3XYTbre,¢d%,&(f1E, +Yg18>y,rYe1hXf1Y c1Y bb L,,Ϣ,Yâ7Tn.XdуE +dI,Y$pg"E hQ,"YXYDgaaafBe!t8Ǣ,~bqŏ,~`O߳ŷ,a_ŗ,`q,>c)OX|#g7+if>Xo?xś,`q,^c*WX%/xX<9ϲx,~)c$'Xd8X<,8ʢ8,,Yh,fY<߲},=,fw>wm,neq YeqYaq,gqkY\jWJ;Y,vvXleť,ZY\b3M,6b=u,ֲXb5Xdb,Xb &Y,bE#,XԳcQˢE5*Yc1YbQ"b&,,*XLg1E,̢$,&E!r-+ׅg`/h Y{J%D"DF D{C`|D-TD\9-#ZJ!K{"rBFD 'h><79DfUf UM'FTNTF4h +Q)dIAg1PL41kQQY0 * 'Oe㨞(%CFQlD#ScÈR+C ƲRL "/DRDif"Qoj:M\Dz rS YDI 3((lD1&"2+QQ8YDa2\L. TRNJ9=D$gRُd@O &U:oIAߐ/ TѧcN!#CJ_> :Me&zK'HV0q&f0q S|5W^^"D/y +yYr>C4"E>ID'Lj% DLjuP!:Lt`0!fډ4"zD &`WV#OeCt7o"hmDR-D7%*HvSuDR5DW]EJIVD ,ط5mD[X[. :Z6%AfMT}#@>C:h jUD+fhyQVQcK)r QbED ^#YU'Zj*DhsgsfӠgQӕtL Z N4 +8 xxxxxG-M :* +2"y9YiS''c 8p 8 +tGG!  xxxx8    + nn7kk]N \luZmP[-@+p l6uZ` hV+f`X,Mb`h @=P5@5Ps9l`P  TӁi@0LJI@10@/˷UwB>u?&͟?|2.Ĺ/ 2HL׋;Fl+{BO[֙H&:uܽ@).[}q.۹8׍R_Ck(]gq䆉Vw@W|he\1WTjN4b$e `G]Z&eY-b5~C Yln5Y+։b(6融(Y{עdwREW*k; +ܱ_j;ŕWů]\#׊0vq-_xo73 ܡ=FqB<-=-eҠgz9rczA)kِn {-CyۊH}l +y8`dϏSH5^9b[/Όn=6;.*]Фۻcew{p/ s/|}Xۿ9/TTxPshAqP|D?=u +vrT1C'<< +!SzO߉(Y$3ء/a? x]DA*>{xcy_|RCkMAKĕdbK+.aC]umjQCk-5Πey+5J_rIw*2[) +nLZkܙofLC[3W6Jo`ȥh_u(탲_]A,i(hY3 I+\8=W!ofDUmU"mʶ<偣bhanbqS u Y8S5_%W WʻiOrx0_Ds0,4TʻocP`Ȕwtw@q +UBR] CZDTjDg*&]r '#:a:'ίve .E;jS%]9Q!3Cvآw1ɭ2wS`\dG~,Ȣl*DjIE ɓV﫼=A͉(.b;]Tv+0Ԧz+=Zד*nUXE9=E]VZ-/ju)kL7M/qD)T1ݣ\^S.>+p&@PgU+,p-O+2- 4=y'D^j]ۡGA)C%MkO/0R[0g!_+E E[Pb%|>Ӌ> E|_/RRRyKCl"F*Qmbp+p)V +S !\F8)о-$s MNοmUr U4œ+4ՓEj3^?aoה7n[1T_wTbV]]g*SZ)m&HT=Ak~er)bRP (JkzVZkV ,=rmStyʶ8rE8ab8Q̑yEUndsd:2rS=ߘ^#*rX4kT> Wj@4_s%"[;BMG2TAQ ~w2 LyY_vZZTZq5N7oǓ͕і%MdO,GcKY'8~efx'pBmth_ztw[%W|YYc ,'>܅LjW 6ɃCMM']W)2}/ZǴxm|*u ~۴f06qc便ȩ5afXwyFyjjp?f\4@ &;STVԆkQMЕދĺP]U£RHMub5 ՚S-2\e8@mrJ\ԩq05T{RqWU?:-lkiFP`4eW, ˽z빫E讞?gkyǸD|m󠵹U^d"-͝ӆ-x.Ncz*UDr뷺 y-V%4HK@f}9GEm-zٴVƕ$Vx551試LΆ} +3#>L=Tt{Ų*aT їI>mDN/BzaY<ɢ8LT~svC" W2ωT_KZEJUawax\Ya[ix FP'G)Fm7pg4 F); + +,ǔ|4g| 1QGRR,;Z}F5 K5 <k?2L S7{f 5JGIqclgl0Ls{4~ӑ3bk|}M?6pSE5uJJ0:xFLh&Xq +t^!pP[St5Y?7XDvt}|Ц:(3|*YHcMBՆH aX`PmDs(/lJr(AYi}: _HH%228/+)Y^);:ID`8_?yi|Kp30=X,Ԥy*9bNJN[Rݝb4LH$k۬:ϪaA2G&>hLȧ8ƊG4=9H +AςĈ/(I @r ?e,ڮ3ƏMMӗb.oݎp ;ԡp] Wh `} "9z9j:FLt(v w&sj.ܡ?3$#MW$bE{/\}; &~էv;o?}֍+nOsgg?o_)W_|rgi'2Rup+>OuBψ+obu#{ ʑ ʑi9/j:-J XOΨաF"S9})4iXb<]8O&.1+ !9"by)iR{IـdNa}KHt}4ja;DŽkoH͵ndw\ +#fK+ꛌn4bE)Qfm +U9J.(sgcj6 +ԏ?ٝ5ɓL༓;!ocNu=SbmqxAj^fS1Y2C$ ,#1knOpEQ{6,cE<%uRXgDW.zYlnZ=s^nJJmGZg1w~xD): 9-kÉuF_ZW8DXI2_CYjJ.3sƣ+PhY£Zֹp㓺ό#8z:{ƆNgI̚8(wC!jqxʘWԨyv~;u~~Zݦ8dS '_M k?+J +endstream +endobj +858 0 obj +<< /Filter /FlateDecode /Length1 1892 /Length 1430 >> +stream +xT{LW?~}X(--}(Bii+mZa:_RA@G(ni.,Qga0lnөɲhe5?4Qc>cȲv{Owۿf +hOW0xzwNٗ+IqS>\-݉){1Joh+2\-`4(B:a@6 ;Z; [bC0^[>ݮݛyMP'>M ;FN,b*(TFp'D̂ Fq:0$ m9*#C+UI*zA +beX uRL:2BմnC < /;8a}!1jSP oj5h(lךY2I]Eo5(r=YPtZR2>!au.r{5 Kqѕ̶J#sLN=K;4č=P&; + _,ϖTxV.37"jl j.s L <+ 0 F-3z.nS?> kiYSEq7{4>BZU- ^*hU#"7Evڳ^Yw z9ۜ3nm Z和|/ndZv^té1"+5]܆fZ8#mH +&N}A^u2b<? +&. 6kɚXWNhnshfnNGZ &ݱԕ<Ǻܖ24Y3t1?ȩIm)j" +&r/F)(ZOBo=|e矏q%[km_N8>U/5 :>&t@?Ml!2)ͻ^:y77UoJws +mCSkW2WӃc"<jlfjxçu..a>2WaⱰEu$)alM/)o(A[?^:q!.jt-Q"!r6 +j5z#OPJ4ܱ_8VpgNp yհbD\S-Kz&I]I$wU'C6YGF"/j oP3[ʝNe歛XfUZ7;'I䬳)L49FS+:wrAD>D&|zx%"EAXszz쿠I> +endobj +860 0 obj +<< /Filter /FlateDecode /Length1 86072 /Length 28776 >> +stream +H̖{\ϹgfvyC|D CD|DQQ|T* +G_պ~$F VkiE-%1:ۻU⧟~ν;sA급}l?b&,kVAv~W0Y_  S8[zIz_:&Wssg;_y[+`*܂%F] +pY8I",^R" tq<]wDpAQTv s +}"a"# 7V FyꠂIfIĤ< a,n y"t*P95GGeoj'Zc!0wB1ᅫ3f:J{h m*ҋ4ʧL>=P ZJR4]@p>@< DISadlȅ"( J +ime، Mh@ HLi80/q·mmxO)<|ZI; ! +PBB ;#G-Y8b)` +#rbR1JRV}4L6?60g2;}iy_ VGj:UPPoj^̭:hޗq<^X(U^k~~D.$--+-UOHt$zZC:IdYg$xX q'3lu>KbDݞ=;[*:A~Ys4|`-Z$H֤e$;бQX@#wD"lv/W6(5xDu|\{__[&-C7ypz\[̊ :m[37nW.;/Yc{M/j5Q]_o} FCӔ]M=bg45oLiLjmx/%{6-*Uh#7 ;@ѻE;D_ױk5k%";D @@no}:\֠Ȍ5,˅^elxz[ng_WI +.v]cG6^~x'z4M@SHǜ)exݏ4t?xii)I2S՘~1>'>dBowɴA!ue~|Pwh;Q̻-@XG+JkFO[ hz)O#EK(Eh"4ѨW&Q#*AگS_{a Ui+m,)ET%QM ׫ QO`QOLTRV⨫qyw47z/v? =bX1 Ba6V 'BoLuqzx{Q&m܍V34MMPAE)" .qb76ƘkҦio9{Ӗ wH3 wN7teNwd1N/6wxKtgg,̦:d aӜwXg-˲'g㄰pV"'sFHV,杖T9+\ȥ.?W#^VcR~x!~JSſp׊:\/~ ݈ 7!f܂b܆#;]܃5p/CBQ<ǎd5)=O! X `mvgk{ߖx*9P!TgUuW=U/GSbz] Tf5X Qo7[mGQI^VFEBUFp!DΩ\=QQjV1*VW*QMjJRTT5] LrUWPb@-R%jZVUjZ6MFEnk +a9 ucXw% : +5Y 3tnzBo}: A o[ֽ S`A1$DHd S!RadBdLȁ\ȃ|(90 +a>,Eă"(tGx7Mvn;ƹ!nNe2RQr#X/eqIn;&qGX=P +:lp^a` .ZXal- ;aY18's ʡ.k5- ^7x-ykކљwxwރ^7<>އz>ơ!w] 9n4Y \! e,Yr̖rGy 8Ãe\ gɅ2W.b'KdSSzm)StF+i8}D! +6qM#h5 +4(ZOᴁFFMI)JciEvK;ih^J}Hi1M$:H MC4T:B)tQ)T:N͠F(NSL:KYt<ͤ Ci]\*TNyTAt*~VR!]"NMOhݦt]ZLR ݣ%tZFi9=nA)AS0o"(o7֋bq^%xI^Mx)^7ݛ{^F]UWյXUZ狷_t:ҞQk=FOTt0 6P4YfYfVZe[_h۪vM9v=c4wT:WcY{>թztЙ:K_WU]|hl3,7%SfMl'[f[Z ulnCjg\;|Uߴ6{ž{^eVV{>? hK6 l,nKe趺n;:7W;ξLEwtwS6M#ݮoۦih4USi}V[c')v-smkkBY/,,w2/f#E.@8C#  p G"W *p8^V,y/f1Y'qdu,kYsd-*9QQDn&\Yd.q3e=|\&l Fl":n[ͭ S ȁ04XPyF`& [“-4lg`̂,`'̆]< s`7{E(`/ 0<(P + `?,w "x!Xa)eXJx^5VGbF{1cn=76p8+Òc"=O/ 4"*\+}6z +hW& :VI[hm]܂p+~[r2>cGtrνSWFsc8NLG<#7憜 7TD%TLi/>:x +OPPP&pTHonzzpw$}J'PPP +<roNa<[}J u<~s9t~ PPpax3)Lq:p3't;!Έp g-Hp'%\ oNA06Vwk5*n̸`Y'@<4zC"$@SM Am-[C?0Ȅ qfB/Nv>Oʦ>$ glɖASM fAs +dP"Z1t]u[=v=^AJ҂>A = 2``dӂ /ZAQQ QEu :c}^Wy˽J5o+6xM^y{b{ZMگM]RUhuH-W[,JUhZ6[ʕjey}F>:+UuJAݰ ꦮu*kVNԝ,&R/6-z%`7ɖ{,~As5ۦmf\}?o`T1 - L2+K3_~ ? ?OScsĜVDs 1LRyHSk>ujZg X-PQEuL:EF]fQúEMk_t,yzζX[X_ ylЫZZ!SӅޥKO鯭D5&0L0k' u7ܞ촾9gUM~~}BUB?1VLO>[8#Y6Z.ֈIl3ley1Y"(7ϗا(&J4TR_SBY~WVJНz)Vyyy6v(Wm-3H"S P1~HcOf/D,΍( FUW=&&g"rT'xow1\'bxVkU>ݳ3JLmjv(D%fGv{Iggg` V)ĄQ,$@v#bDDK*SU,`'߹g2Eϙ~s=<r$}dto<@_Ct,P +=<zI"F_G=|蛨'q= +丢X"Jӳ3zAŲ42b1+|cѺkJe04rH<5h4ZE5*C8'RRcmtw24hMWt+dS)GG.QT㭑~~~Eg*stNs t~9'CDsTKt;7_e0ͿLZ{~zHzܛj$@z3]A7EO#fZIO-p{a1&ק Fg\Em#O/ۙ򃟻w~=T>}]7MzΉёwl䶭-B>7t3ظ[߿'Z|+%LtuvcѶiPoA}[f|ٖ}̋2r KPq}f/t9DњNSHڛhS_]|=/9cr}4/<[WvEeJa]X=Y?<ջ:s"Wzg.PG= E=IO+#ByZJy +%s2l{g:b{%ivO.WFD +ApH.ʵ"/|g5\"_Ycƚ2N +;x8H9DwI^b3L7hoKؗ#sMQW6MY'zYr!Y%9)NUemEՕ-#2r5ۄ+<Peaue'W!wՐp\WQgB絃lKtlty\CR2W4svt<n,\6K(mvCWKm״"g ]C m t)3:v j%`j0tnER^J.Mx$OzK١voqph`h49t7D4: 3 +,%خ +OƱV6.N*aL,|$ n0f5XZ*~q!WL)R"#1 9)ԄC݉bYIjSAq}v}t Mr~̽:s/mƶ!2i.ãu8<>' 0sW2w&rj2 363li L\[QMIʜA +70*sƒz!6-qmiP;I%  )ՉtFt !e0d0:l)xΨ;k^Y 5kd9|z;/`{`_=1?TYΓ=w7 +ːLq{!%d|PP*M76btK{-& 7uKvteG[4z[oJ.K}0쀅4j UPkeH:j6zg:b2O) +oG/âH{~[N+/+Jtʎu0uD1+P eZB@t */UV1q[';, tM"64y +mqǖ0|函O??ѨKyS7M(8O4 +4>Sf[掬zl8A4Љ}RZpyDeT2ZVƃ 9@޲mE1^!kQ+Zr/*;)?-|HR-P:nZvP0Xbrp&y{vI!^ؾg45FTB7m;U(T*KY2i\) w }-l@Rm0Aەk_V =_U5wUtؚU*`K[?*IJ`y`o і|Q'R]!%<ҊiV-ܖ/"#*<sHCEwf ⍱IOEX\BxTţmiNaz À3$i8vY%qWmfq*0~e>dp^N29WSk SۏF挾cGM/Fo?oslcr#XΊ5S{1t8w}Ȳ]Qwcw>þ;n}G/6wK!8\c0pL Q"tۡ )IJDں Q)uT)p!q#ԨB叔iqgA9iw~;gRA'%4Z|Ki풆ΰӸd`4-Xk6-ͱhD$gͭmy2 \}'HgBtgm 5 XHemߌY>V`hX"?aզ>ZK6i͈Ĵ<=3  {p 37αހT0h-$xNޔ+h(7txc{~(O=4נ>s>s>s>s>s>`] pX!VapX!^Xѽxyu걥զKmvcU+Yޣ@h9s+,Z(|AC8(KԀs O0#΢rXnY y`/?3#38hDj+$0PJLdtd cRɘT2&I%cR S0g[髧0F3q6{|.V 1BNS6[fr>.m"[fg&HUsE~||U|aiY>v LG yFX46Œ9]K˚ YRT_^hPvIcōہDzap=lL{`lt]#v3mYpsR$ufXt;t䥴̝́s/?\٠Cc+Nley "WUŸȆ8FqPK.~%J|z_`Dw=ssͨs"\=K:#$ 3I.u f)ȡTQ^ KvO%V E.Mz|ie ̅vnM Ԩ{ T +-v`f観feMUnh`Ae:<6]qG+zQ㨿'6ոOl% ސ\kHCB !ZPx[Qo/nZѮ +΂9}s_5f9)knf+1/*os ؕ;*DXmoҚ.L+M#$$E9G꺂Zp]mNF^ H &Y>(rfYGc搙zb&y[nzա&ZPWc)kTWk)תIctfd:[imQ +pQzv:ΌAgp~P2(Eb Q:.;SVLvqshf(gO%7Q6͚5΀7Snɷpui +V={"\̗S'C.Cl[ɠEHI!vZ,]r%+x[.V`&MmV;Q^2mXg攥Mқo9U M-)g)GJ2Ej:[Ùc:L Mv.k8ϦNC # #CMڌm*ŋl60^2;6p2Cf&#5[u +jI̲#hw9XKZeaA!{g $#|4>{Ua`I~y_Gِy_Xq?߻;wT#py$G̽w(3j킏g_cA^?NΡqш6C bhXX<Ā#PB%hw +S" =*ϐ~^އKס%hӐn4~ eGY8W+d^|P (_C+ӡ! -ǭA$Π?Ac.zU0Qh{ƢE?G@1׏G4P(Acx&1b+6!.AcBlg * _֩kj\~b5kKUj$@eUys( ÎR +(H}f0 :,lRu@Y2`IUQXbAZckMJ)b]Z0y$${.9 mAv$޵wKsԾ$_zq㬀ͱ] E.>VJ^OzFNsv,e]NOoF;;~ddN|oLp>ߛJ>ȽCs<S{Ǥ>cH{\aVqkZ䳥P}Rx-竭9|0 9; l'5a0aH%󎕶M>$PcyG9\Q;zyoRoF0"cW۝]}#WRkj?EB#QP,8WlN޳ő-3}$anT3D `LDU Nc:f֣sRs;wztT&c-Y針,NrwJi^&ݪ/Z |~'=F9H(rhLT&.<ʰFIr|_"xm-֟ ƬA IYY!{`N}( E/cG]fՎS77 *&hM}Gucڞ>k^3by"| dI+q&VA0CnˌtǷR߅<b߲I1]8"XV8~a*ey\< ıuWRGT=G(^<3;C9/]N2~AqJ{&ֻ1ZNdk8ᅱ/&ѴH7Kf\)c]cݜ3j][ٷ%ϯO&W: #ۂ:GI`<`aUVv!s!VS^C󰼢e Lu؞&;KVq7ixQ;X+[mTb٣{{bc_w,W뷦k[R%3`,gUYj>>vcál3azfwkqe FJb$a9nUO=猯E1)0:\n'Fdt9:Skޒ%~̳Rz_K/3N(5xf4}%ϔ"} l3Z/hgE۵3ZF>~բRӠ;Lo!*>&j<' +?ީ\~Vr:@535\<^&-dv +tc_bne[O=W?ﭨåy,/Tj{"<'c 2 MmՉf ';ደESf3)Y~~!V?Y5lOOZ|0٤?x;SQ}7|^wKSTd5;Y[柺+gۥj:2RE~) :Q7))jȩʯ?5tZshJxyBjY#ڙOdM<9d=%0ϹkKɛKќhoYMLOUbI(y޽j3_ +(ca6bvʝ1)$Y3~>)?K'ǰ=DBzB}D3)wsy]b{Ѽqkno<\!f}|Or}o3;^͈h{P_zү᯶{t)2 =Em620V*ۘADV(&&( P*x1㤕 +1 +lXI@i!M=<17t[ &w$~,*/$.7{4F+c[:Sӓq,}OGmzOr?I9)i.5)uνK?rvHt#6SH&+iqyNΖz-xw8?$<<N{BzI+c!j?91ϥGE ?7I[{ Y2fyQM}fy̝pz9誖y[ubW iPf7?׃jm=hλOF?Eu{wAJU**!TkaP"5$( U5V0 :mDg֙C_iuXTW_tswH:?>s{g={4U\}^΋O_R1z͗w5ro407`>|k~4|.F{̩gu.:ZJjN.S qy+3Un\gK=f6Hy9egn f`k| +pP^~"}p|p;޿gKXs9L<=4 [=HEoW5GrVywwIwEEj:bu'w{9cZ{BJR?z8Iu {0M[w}Sʃ9u8bC;*v x|ǣ7k2nHU_`VHCW!ԮT/1 e&YlBmn;ev}(ɜӑ|wg>)r oev5ڔd!yI04ˁ(4/Ks0L6 b=^-3 w{`};zJ0ϴ;CgsjD|`S}`."׵;i0諗|LqZǭ>TAw3"[E=GI ` \iJyYIsu;?&zA`8A։}9436pA\əHӛ&gsBżV99z1g_Q4c>}Gz)TKHu iዺw9oq|Κ._/BF>1giu4. wѻ_p/ޛ :㏐2ܙ9. -E8Է5jr]7F} ~e]N (S$֬>--Hp%{2;5ihi&_>X}SNTdO&`r_{gj7#VsG4rŌ_"ek9ϟ'3n;6NЌBBO;wVόs'ߑF\l4[ O +)lȪMu-eFڵb?۔OmF`oQN?;gj k_2{y37w[+evf\6k*X lUI75\ A]=sH]p7 `}˻+tK)ƹ0^A +_D8ڸc(]1=bʮ:f#8:&PvEup*ٴ$会mm=ó-K=ƶGOW}sL=np"*N$<~]WotσxZG&>΂K%-ch{3]hZqRF&@:.ImҏL?G-f%>_hg AcU'; p+U?!גtnơ_msfuPI} H}}N{5L܁J *\^>mlX5-\Է&{(/[hoan/gvd7uP=U:=vxuP경6y65~IuA?o F$v`a7YI-ga q12@K{J)l9z*n3WiʌfɌl(>fWfk_nWiۮiNѲ1oK8%~99m<ޣό7,Z PI[R}aᮤB!̃T.Wu u>2]^W19Wk5w!Kz2.=́2v7s O9gBy pm!9C_}VFǏ2 nꞞĎ|N}|~/NG9Tt=qX?u)pxoaO_A>̳0__VxBZߥ<;ą>i|{J +ɶFq%vq><|Ȝn݇e>JU\2ӛ$3F{KG9FJ)2l[1LSRg5):wI?ķ~ +Ew4vr3REQgKwKλy}ƖK:{P+=oqcn'yGm PnnjF3YkM$C5`,WorqBu{ur!F$ޕZ+B}ޫ_TY )ӏ-4$Oe|"Ggl7s+c3ߣKltv*~Crs2]? $&"hg뉑czH"/_S>3s-Ӈ +3[nVETHKn@^W>Bm;)ڢ.b_HZd&"+>ȴޓdRl8pPr=!/) +gWھY y՗᫞]zmJGMjԛH#Rqo,2{9Riױn:gtɋy&C{._=]]>8 73#ioQ?zTXRA=9:CN|-Ł|)|M֦>-Z) +T?#xvoC8+]_ /߂ "oh5˫ Mv*/r8pm$ 8矏W]C +Z13n[$h@ѐBse(Egi<7ǀ@Wn{sɕ$[ܼO$ާKǿ[q?<29>4!$W+C6,5 q. B֐!4G2'$[|~E!B-q{k{s+B.;9˂Zww5ζ'R@N<<Ғ 6\Czt%w\Cw_|ؚN^NlN'Lf +ynĦH2=5֭wf9lr=f=Xb"E`_GoG$.+r%qqE]j]~LL3{/\ }59K.9M j!H*♒-!+[#oS%cǴ1bg깍GWC8z"&ѿ6]eyt9C{]B-Qh!VHOr9jljyϩ5:;9DLα4Vv~cnسuEosoU2<yjan~{2ВSwcujLMDz0) ꆮm\$Y,dI2ѻD4ݩfLrt׎3r֡LӷR,֮TS'c1\@};osC ,V&}huu:C7c=ԣUW|~ZSk~"Z.wX53AeP|%~y0j aK [Ÿ?bM?lDOB7k3;#6KfRͱ1-զ6-5n[+Y46Ƣeɗ _Y8F car&`>?DE:QV0]ZaK~H^FYj2rR[;2X̱mVҿJy 㑃A6 + }p5nB'@?\*]K,=_A,D?,@b^lLc2U~I23Jy5Oq44/J\g51aơ؏y쟼NPkv똇Ͻ^w(,'y+nk>u_6j u~X쥯? 8Go3@F2(wCZ/C}Mu}udr6F[!Va{'Y_,o{Sb(j.IRh5s6^9ٶ]LٯCSm6 0hOfj~ T9aA.S9GN,r; |sA5ʢ\,WwX5e}X6%t$5[=)&&|'z]'7tJ$|5k\%Ob + %e"<]^]4[;YPvq9>f짩{ \}U7dwaTB;ܟ\>R|i.5gLy?4lTntW`LKLQ }潿=)M n +) ObbO5S,CVǨMYm<;+d>Kz1{OYۣzg]*B/S&ɄxMDn;÷IYHtxDĢyZ67鹖Z\#)j(vl;{;;ϭ|sCLJZZ0A^RsEE.|zfVElHOʠNM5ߪWjuL$XN)JR&nn/Gwi؊- Wtu@M ,Pq`'j4Un+$(o:&K8G?oc ߘÚm[ 4ϴotO8oPu ʫs:&,LIR&nn/Gwiي- ǿꀚ@:X.Fe'j4Un+$(o:&K,XbmKkEcrhenlwB ^oa<ΚC7kT֞MI2V5J'ӭCCMsz6:)sœ@ܫZ֦5*ѬD}83xOxQb&fcJ0ioP=7cu˹PM:A'F`>u# `n?tzNI4܇RɊt"WyǎnCS?_6<{PbɎ~L\c:Uxۨdส_|[.<niEVgwԝnrN{ޝbOu7kxyčg ƪ/?al8Rي1Žޘ6]Pu~/ਪ+^ H*V +(`|#!MiId_5R( + +@Ff(*|T N6Zj-NSFt +lN0O2{ι~gQu)/AξM=>c6|}_a~S8OxNGR3ݎ"hQcc* k#fp,kXs5'K1Y0HMW&o@x;b}8n[Vf` +ӸGwwǽ7z=HWQa_;@Dg%qV='O99ɻό1!{wLT~>R݊"m7q/w t' o/hWrm0üꓵtqed +§ns/亓^|uh<9ryzs9z-2zov-AA憱&K%o                       p [@.@%@ω7,9_@,e-=:r/Y?Kˀʘ=Mr<_֩/eEėM_f>bl( S!$GԢɔh~8bgDDo:Dؖj6KsewSaww<:{B}}.F';+ 3##Ljet`0Qv6֌Vf& јшѐрQQQQQQQQQQɨʨˆ`TfTb3*2*03120J3%%EEyy99YY#fddd`gc1 ;#-#ac0iVefbd`$g$c0P??__oo//OOww77WWgg''GG{{;;[[ad`,g,c,e,a,f,b,d,`gceafbd`LgLcLeLaLfLbLdL`gceaf7/(HűGqQ{űGqQ{űGqQ{űGqQ{űG9GqQGqQGqQGqQGqQGqQGqQGqQ{űGqQviGqQviGqQbpZY: ѡeDA:Opc7 A?RIC">7pYv=uHeᕮ 3U: āX @{m]kZh 0Ac4 @}Pu@mP 5)T:PUP*pPUA9YA(J8(["0.+ + ?< 7ȅs3;, 33@(@0Ȩ32:c=!¡qVg RY* uB2Co g߰ +NX7>`o v+^8|'1^yC`ww[&k]Wtep \pgpIp+Q!p=xNlV`6蠊A-`X ր`:HV+pr ϖ%`1X`>9`63 0Ln*&$2L` ƀx_(0R; ##JiG0 SHX ֎ _;b~/zHp=#Z˺ͮ :.W; @{mn_Y+9~P3&A&ni  ='?u}PG J-PSe.P50R U}PE ڞ(TցB%* +:PcWNۚ eAmKQi[55Jj[ Ŵ-PoѶXamKo( 'pY^@NCے-epgVܙe-w! AZHt@[!8p+Û H Rx3}7P+~Gc?d}MξYe}Q?z/7^z%/egeLSYOd=Ng9>a0f 5!Ds6yܦŭ,`w-}wo3}=}#bG3{{\f2ݕRR]K0f/rw&:9]r*߭npFᣜրȞfw-I~xOcvĘ1bâaQ[^mq^Z7MBjm 6eI({TMhA[V#V-Ž6^8S|{$ޜD?6.x o *^x }x/y> +stream +H̖yTTǿ{oP`d5 +; $q_PH%FS]C:iwqI0&Xmڴb* j5Vczezgj<=}s~~{y F=f+2 .>yhW ~f\N,lVYL(-_>A2d/Hm,$Ȉt> +X=[ +<˕u,?-vxmY_XUXU5$RƗ~`U@CmC>EP˝kJA(^(^G;@X^z`TN0tڭR :>8GJK{ wtR"Zqy +OƇo\¥N}sO<|Ə1O `u:GP_tBBtGoA_ DL ٘b,"r2̋)Eԙ(h +MʣzRzTA't>try[x#$JLɟd`JJJʨ!:H(ݼ^i;Wq%:^Tx>UGde:j:GuhءR8sx\%6 h5H\Lz"_$XJ+R&tCkuG/(Jr@9U(_(Pۊ8^o.OMR4MmvL;Ӛ#C@~gy_v 8x2F!(}>YOחK#Y0 Q"ZĊޢ,RQ"J:Y{>8%L$LfS)cmJ500}`Vol]tsVl̵4YYaUVok{k'.kK֛%#J#Qwyo/lm&ۛmjlml~9Ss{G{W{O{{_`{bspp mR#rL9(T*M ʯ"^!\ǻdeZ۠jR.-\ZTDf.x=UTL?տui.'H-SD(Z +ETj8تeeJ6-7U񐻗,k񠷌Q{dZz<4߽ܽ҆n 7Ra#Q\cQ|\khlTt)i.иm74Nn#N7ߺ%ߠX{c͍z18{= ȵ?Scws$#^^ƖJAMϞQ+mˋ`F=k6a6mF7=d<~ywW0r;;fuc o1\>cL0|OpqRk4?/}zq/<׃1iUѸf_kŽ1p}>AqJluibPNձ(.r18 ԵhShh3h8qpM q?%Z5gU5ut S諸!cU? <;QM +ؾT*ڱv`')vagβsε|.b;.KmC g3nv6|Lt[Vl6&djm\ݦ]vͰ{mͲm=hsakl=f I{ʞy{^WU{ް{//?ep AJ'DD_rZI i55Ԇ3P#jLM)5ԊZS;jO#uOPJ=' +-u4DZHCh4XOh +Mi4fLE{Csi-%~I,8XGhZku;zvN :MoLI0&l1I&$XbL7izz^#uެrQoqz^WAh/%Q2jr)Lq>nJp)'L)>iJ)SO|Ɣ㳦<3BM%`*ES/|TLubjϦfXrm/<,L0½/ҋ/֋D/KR4oKvz^e>r}f_WsxNxxw+c'O // o!#NJ%G%'Y)E_TW(*)V +ç>SE[CUJPOAU_rcA"R0XUת +aFjaѪƨazU}|`joo?7ʿTcLVM0E5T TsLW-0Cķjڨj:ݯ/!r\/ r(GMr f9FFȱ2RQr-re$d/9U&i2INrLT9SV9Knv9Gt9W.@ e\$2S.Yr'r-Wȃȓ!Zg52Wyr<uHwTKG[Wkg{Cu>c.|,𹾥;~c㛨$2nvmKq9ŊIJ*--8)WRrrC& +[B>qU`W@QWWp\Yih_7w~ޛp,NX_ok-ERaG(`'\u:tw(o3nmݿwy|_D_0 aW3}1+7܋A3q:*3pߌdA#£Xa| A샙a!(#q041eeeee3i8| +#3eekq.e5&,-,9|w.܄qT`-,-؀ +6Ğ{YVYVZXSil;::-bHv;Zֲk\_-aK\i9)㜏ɍqEpnWcpG[,vO=.ræƴœevV=Uf֜-6fff[1sZ@s\HUE8az΍gS_8)O bVBXLcK`),tx^<XA\1\{GWzk`-e}M-އ>N)zk}#tZ IpKmc`g )`\%M2r Ǎ(SVZCJk ؟j)K QKU{"{ԔYȥj2-;8Y +^r^}<'ᘒA툱0<|#|NKM P0-A2R}Ih$fZUUVKi}J&Gk@iPxq+TT+97-~:D|E͐+NrVXE7*GG GKZrr4zHݡ4?{ܔdoP))S;%Tep.'+>-K4vN}G݊N;ܜ )ӲE )&9+K'feJ +〨P:DIMj KO$5Z1b>EښC)E#Od3'*b%YZ%$E.}2Ր+OΦZon_َTIa S*8I% nTG4:_cdN;X +KB&i1:0k|TNPX~7=$H@}Kuq0r+\%A@tV:fi{fR +̲YVPe_Ϋ% ϾCKR\\K՚{eQ"[ے#EDYreP8.cw +CCzmZYYqL +O5" EY=8SIge'; #^+Jc*&⁊X ¯Yȸ\ M5ڡIB haMph+w-gn#($L:U6EL}4@I7rxZR>JYs\VVݦN458WVvhs̶K| N׼_8?ma],= +eS(i}vڢ|1=yt<)06NՒ"ʉ5TkER43NmōO1J@>f>BqT,4cx2ڒN^ cŲ-/Z|"*Y}v%\/A=Cĺ;7 (:{ae%N 9M,&*I=>vBx.[y2`%;J삲! <`wXMCě&x}%n(pSXIбPy|r/)Kڮ\!eYէ i@4Gժr/"/=v8o*} =EWGS[ 6;KW2Qp&ʫj3V^xs{C, ^rI+Ml J1J`RVAx:^ŗRJe  (DZWfՒRJ@B^sS䒲T΍b)6%ҲAqq{djU$bǁ' &pˆ/yȎv :X2C/` A;U|5_,D*$El|E +"zI0G(rq8?K"L!aV\ўmH/6I|xjT<=U +Vmz0J`PHhDNiV3 +`t!1G AN?17doTM :UBCfC./QG{-޿w;T^Q=˥}o + m4{,*HkiffEstoruFC3=m 2ӝ9%9uHl&{xQ嘟cyV??V>an{Ohעj I^?.>$Mn-Db^y$d-0\&}~@'F6}1*/MYRɘ/CIw`H0Ÿi 5( Cfj)04`N7?dk`uz-e5L㮀3 +H6c i`Y]c~ :2xo@5a$n?K3&3x-.|o^u. .I|[}R%E^>طsۏ݉B^5IR5 QM3R/`LiIAN6Cpڤun)V^!t܍X6#G:?L$`eSѢ52vfzϨ2F_űsY?u_x(MZA|?78&>4E?ȂK=o2\{0|noCvG]2 BO{@.o +c}k'rR n"YiHō;r$$c1Iy)bM$g73p88pS< #]E+тެҐY\]~6AcЇnv֘}G_=8h$~uz3bVEb?_::O1t4,qJ2yO߽~ȳӒƲ~r>U)BO2DhKp޳0OSʼnғJQZd4ɱӛwq5yxȑ益#\.->'J456x6uqܷ}m NĎC yB$PHy&QV"Z`k&ƄR 1V&FM['#Le lGF"{|ν}g"ZD LG-&UUmn͡KZ[CUfvچTs! AU]ޱ%e[8_]X2}#ʱ ZnsJ'x͍EM MG=* }soyLnFqM2PkH EmJ$s2cX0=I*)VEKK,gSkERCKeᾊTce%BRz 6v!/:AY۹Eҋk?n6xɞ%?j9Tz;ِ>ͥKvʱʳRw.c6@H|۬GȨ( 1å/ +a,lJ`ZhuZ٩Z])4M"n[>1947dϖu$4ņ3y$bep#wiYTXZPPv~x-zmBL`; `Qqʏ%cƃ~ YzXN`+~Y|4O.ROf$j#Ρm 7!s +zPA$zP+}@iԏEL X'e@ X C?@xcpj:%(3TLuaR63?6<|'m%mBL3џyvz6y$1tvB\؏bՀؖ Bs'A("$ы:kf)꠯꾌4w'A=įa>I3IՕLa%FN#˴j?*F<>f1cUy$jb(ȵd=>y + &x>-;"33KFLS21GgiTċ +A0kucZE0 }#>`:{~c8<5n7uo!c'Ϥo8D]o*\MP<>wOں+2w`[Ԧ8[.~ݑSf&ϵVl]FclhKn +gcsڼ<*יfG8_d9DO=mw[1kU4"$z= `՗6#; 4Rz +/;Јw콬'{*, M<b5fzzNkpocA[5Wk䛮ٚzF̦)R1{S:ZL:usPz%6S{`3Y!n}?D=Ǔ^ċVH S͏2e3QZ͎Hn.zKE܉- qQA.!!:E{2Ͻ9 Y [tQVqUVude8" $IUh*֓}(T4>=-KP] w}g ij Y^sc;rVdKd \9N]> .Ч8xLF>'  URU,6אZ\G5Tkfb5 +ꊈx3UIR_TEi5s "-O c1#,&v.&g%̍Ck)BM2d-9q,ZE~.N4, 8=I H?AdIYh|qKs|h3N2$VIM > 4ch0䱷d^kj뇞WS5˫\#xڔ5'b?":Vj?YBwrCЗ*%YRǩ/HꞆ^XcD(7՛R$u>OD!{rp.iA$DGKy`~-u5K'ʻBy,цL,2לϵ9L^=^GjZoǚ+~<հ &m4jo a}tNm##|bh7SQ a?)fU㩬!vme~ αY@/zDK,4юDA^t2E:-\VOٻ410}WbIY}@ξ䊬+̣(8|_%@ sD aAa Y d3#!GFD$ +@ ""1HٕEWc';^wWխ[椞ǵZ<5ZCγzhl߆aa1;\W72=ٳuhԂ}3`+ku;w@ϻSnaC :rZܭ` :'WsL  tguR%E ~r8mF*6Jc.5-WvDsu-X hz֗A2RP>-Akw h~K>M]]ˤj6l }~"UR-^:qJ'PYo;^S[5+#EASc}64.zc{dH%\s86 6B<'i +GK4r~ѡ|WhK aן~yko 3s1F9JʹýڕuvX {ݹIo'}=`d)ųjf]#cpYk0W%}BU-Zj] +cEM!DT7(H|503.=;r8MJ?*U>өst_ɇ^iJءGH٬ Tٮ벲m/ĵ/^W.,WmXIg WR7>Eu\$$6<{4HuA6!2[ F s֜x"q7) +C?[y݈EEh󖈸E c:5V +Tt +.ve=O9R-q>ؘoC բy_N{;G\0%LcMHslsZ- +|DtM}jJlG}ZKgk,VZ_9I ٌ t&3V5|a:mnUon$2isk g6gq|U5ji٣"X̸ײz+ r|_Q;dn +/8 +{ +1hyUQ$0jR_!R HPD^ P&2 CAG?A$(7gܽ?{w9rw'] 'aH8 7ә戸ِɾlfGO9p#6 wL]j'!;_{NbJD9tѮ&򺚠o<磦Uӧ"QkPb;@C~ B`PGNv NP;yͦz39.$'·NRVgEJsE ')$}HI8rBc蟠y6XoM9~ "eT0rIh]:~eڃՙF@mY7 qo\*TY)/*$jq\sTw@w'W2=?l@ ?LE]&H s11t}v86{~ + vęcͨ`6.x>x>xڬ KbИxx1M9~ "eGuޡ<:83 節Itڑ4>" #g|i=/7:Wȡ|'KDxɒIfY~*<{aw|['/"٬ B2,APtIf-2CMXuNX_׬rjHiH/GH|[|-?_/*cY4Dyy-~Я>GUq+̗jo3H|nUn}d𾖞:AO" 7r}7uPF7BBhsf;ݩ?㍖~+CJg[B/ԷWx(bL+_ͼl +>mWv[PͲol6cα[cFܠvJ?1I퓾j +}u*>/'[iK/mn7L +0\sG-roǼŞB1 ܯؿ9I~f )dmbc4e-ZCgH^McNsus'TodY'bk>tcKD.j Hg0 FXR3m-:5&6scy5TfpWensJqR)uXhKkU0PN4Vq[I{/[)tWTI=4ko.ãD9-C*"MG6",}ys4rS9\. t3wϼ2Sm<|zDt#y:|B yP0+a1lr`&dCV[]"rE$/ +h@L-An Oa6"ecgߎyd'_-?:lVQ+#[cyKy]%yf֙|y̾+4PUɼk4a+|jkXÅ7D3]leGR,z#]!s +f]̷ A=y-h1?1IMXL,/v҉dx͑{ Wmr:oeWΘYJqzl0v)yawڟN-ԛ9b!NSiYJqrT `85tYhyS,i!\|+Bj'7w~[59L$Z~ G=7ԃ nPEʍ-- x} 7>x m +sM\q=0;紉H+2j`;:J#A6QKvxVi{'O&ZU[U~2f7XͳcȟLj<߫r";assϳ}I.|cy*(D/x@yIJ"QC{`R'V Yc: +Y-P[^IԞƆLO$9A<S~x 3 lNsn8]R{ɼ󿄹9>?y͸l`-Zs-?wJpg'I^RfM#>e!+9OH!rT/*Y9)C 5Bc5 +}~+$_Gه>ZC2خmskd@ ~L3hbn HF3)aBtZ{^*\LBsf{8t ~m"Үg,NY):K͛6sG2kFHq(Ȗf81]Mz +>N9Ԩd,yIhbzCV +wHDS%@m?-!r g&IcW[eqx'HHO7F^Vu7d>au<} t ocS[\{'߉02<{9j_sn69ݖɇI?`=C4O뉰gX+yK|r{P)wD&Vt%yw3j-86j} +}T$cNH`:Zm_jQ +ɣIEߗ]`N-- ijwR<)oʔ?| yD7q͡, B\ͩ,L*Wsc73օ/,]>:(l銎k;kz4~imљ7;]GZկy/Yu5{Ǔ|.K}kL>Sx(2CYNiI>M Bz=|A+Sy&EIϮ}w'OMa-׆w/SF{feH9=ӷ|)ɕ9&9`as?h"@`?T7H z9F"ogVzv2vC$>$f:Ajk?=o㲞+njj7-y?B}?R'o;`7c;ej԰Ft :;l VosS{C_^,7iݜz;Xg6 mNo:fum0ë +iYi6y5_3JN3SҦIiNVnvu6EѶ2J=qguwպ,}ETES=5m>i)}ʙY_hX[ƴ+/M&݄X?e8vp&A֩D"Iݢ"lv6[uK.t[?þn +Co1eːv~]'YC-/Bwϒ{Mfu`eXyn mԞ|8xHW=-xZ] ңƞɏwa`]{DζӃ>GxmF/g/Zr(%s9zz{ڦJ \tiN\Cepw2 Nc{v͉uL7oニk3n)q{Yh򨩔!nֵRJ8sJ0L#A{ yfPc7C734K3RKP-(q݊q"kr84?L_hܝ98n<ΚWnhtongӺĴ\p7ȖIDr=#y^*YnU.S%*KVSֺd2y>#7ɦv/5׌4n Gc,ݿxbz8Ygb|엻l3r'nbjd[wIVp~JI邏'L/=O&ڙq.7ji}VFjT4VR+1uSnFӌro˭'vb4hֲܑ䚓ueZ cB̓V)|ce-}3q.F:Nx?C0ߏh||qYȪޑH@?֦?t ];b*]?VEy5r_${o5=/F \Y~'2~2|g|E79t983ϖ,Gtޝ8>lܐ>Ym#|Achz%1K\]{asUEVA!7JߌLե{_M@L6N3ʍc{C6Jew9g^F*%1?*Ѭ 8NǺ,C~.isrvr9U_='VSNN=u{7-------------------------------------------------------------------T]xz!19O7-+y3izͤ}HߒI?Ζ޽rPgL{d86J&텽&!}i&GL?%[Ŕ2TD%5HrsXl"Rƿ)հ5Jn-x3.2zX,Y YBLDͭ7F Eӊ6̎>Hȍnvhǩ#(5ꔦпDxja1O؟wL|=JkD3#5VR( mݕB7*>9cqw^ǺaI tf9>L}Mמpߩ'  B;1+6^7kx_u4nvF Λޕm5>̬h"ڐ4ˣX4HH916Ʀd¬V|*2ժ[+Y1+R@k44F;hָa:5aw0zYǚ̩H0luz)bNMN;Mv c= Ѹ9ɮ@̴(5T{F=I tRQ" N|n : 6CnTG +%e#IVΡO; /X3?`>go߀ +|g_ |> 1D,V א{~ ^B"^σ4xJ;?Ǵr(r`6[]SZxC~|͟S^-]5Yp7 ܦ.巪fu!ޤ.7~7F\փ:p:_mW6++2p_[5|o_`ҟr^j&yEˊ)zaGl􂎂={ zYeCbR8. +! .W!W:6CL> +stream +HtU XWǨkndQ-x !([;*xqF1Q!=oU{U lvc[ccYOJ(PulR.Ц2 %oq-1,ff#빠@+ש񉓺gv _Ơw_ӰLrX(Սx}LLav0 9&$C".c0G\s -Pݩ„J4Sc#"\+!N)qts7 {JVr8V. Vb *Сlv1SiFŌ ʥ +k52 кbHhkboZdZѦfj5Zw_ ֦k9vW{JںMӃ&zZӇ8}IP? [[v7{vin׷7ϴ/)WP1]?WWN\\7oJJ`62S2cZhZjGMjE?D.hw{گkeFz7G1COSL~LiAH>AڢmOm_t:_!?9rr7xCe%{\k] vK޾zxxKw]rt?{eJqfu;[Kd{6uY}c1.;wB8f*Im[T*'rTV#cGzY<`!a1`)a9R+ +ki؈tkbm%EgJܼ"XD(o͑c\G̝DHQn5̝b詼"G*NԂfj4@C4Bc4hvhDE?|0 (F1N۸oW 7w?/ ~;ńRb+l؆:A=@v#F}B "_ +h<Z8V8fLhcLOppqaNθ.(tUut5D&q=q zK|@20 #!0? ?bca$~8x#y&wLE a0)OY4}h4צxþ44ml@4(&?M4qק4?lmJ4frIܐfs#ccKsiƴBZMOܜp]x:'Z-h-`JB+%PZͭh ܆ǴnǟP܁ҹ#mNa;S&w-ܕr7N({P6Sm?d.# +i']܋vs$޴ܗq?ϟOy£9YC@ LCh$4Ѯ["q%Rni[-w+Jnefnmncm{m*j݀[5@q =d2YA{i7=NEGb)(|Z@ i-%~_WrZA+i5z@im-vA;CtQ:F)NI:EtYJst.ED +SeReSR5*|*tnMCwݦ[tؓ6=e3mͲm=csYkl=g)~zl{ڋ^fu{&$Gm=aIeť0*09 A)mIsXʚ#RT0ǥIJT6'9%ImN 30gIcΉsA(油"A.o f2ɒ&[j%M1yRK=S M40E\FXk\437%-miiH+sWZ{ܗ恴3y$oԧXkkji }~?ZEEE"~  *U8*A o?ԛLf^@7 xCapo7$yc^7K{^x^ex~g{TG#Qh?֏ x?)d?Ot?pZ8'),|9Jk +x>X)X9X%X5X-iiPH3FŋїP/їr5o ^^ +J7QU"oFފ4EZ*yꨁ}8ԉ>}u^G}hFVh&hfxo9Z%Z5ڠ-ڡ}SDm:mw }|>'s|/7ߡ3GtE7tGD/FE?  0 (E'c 2bX>0X)fq>llgKy,,ò|eW+"+2*1Y5YYuY>`6d#6f6e3ɷ؜-ؚؒmؖ؞ؑoN|C~O)?_+~o-cg~.n^>~A!aQ1xc3ILf +Stf0Ylp"'q2p*q:gp&gq6p.q>0 K˹+ku\o#l6Zn&nodɖbfae,rlM6Ŧr4n3lͲ6[ov̎ ;i총vh]vͮۏl7boa_cݱv{hڣ|1/& bS &?R#_EcAQcb Q,HU{ذ&1Ē+Xh4x.H9/{۝3kYY-W,XlYUr'Siy)P|"KdL2KfI2O8 %^ +Y)d,!$\` !2T"elTI(XB$e ($ʰHH7.Avh؝CzJ/;PzK9a DABa<`(P%PP=5еdءpLU*UTjR-Mu.գG !5ԄR3jN-%ԆR;jOȟ:RuH]+uD='ԇ)R?Oh PLa40 +AEC4FR48Oh"$L 44N3h&͢4i.ͣ"ZLKh)-崂V*JdZMkh-Rh#mʹR*mv.M{h/t!:LG(1:NЇBxeQ( +Q QUQ Q5Q QuQhFh&hfhhVh6hvhGG:#]A聞`/?` !!apD QF b1#Q1q xLd$` +bcfbfc10 K˰+d*MXuC[֛stݠtCzLOzN?  +ȋ HFlflVbcvbvcb" pC|$N4s|ppp鸂 +7ppp[^KM&3v;mZغi2x/zIfY!$m JUE8ɑZDTzAE?3MS{Μyfha6{j.xn*a +w I.XEhچ2ȯ'C?A_aOὌݳȠo!~XC[NOӬl|յܫ-կ׿E6^_>Ƣ߈y:h5|3vu﫨Mϰ/[~Oԙk|?urڱO&9>y##\vC|ḣ>wо{s`jv;w$o:׫߱'uD#jI#ʄ dž%3L ;*MK_vYGv7~1e$TI6ܙMӐ~E7 Rlܦ\{3 ˘I[:피I㚧7;9,d[F4ѱRذnJ_j[AG _]<,ZuooQ{ܛ{`._L؍u5&DkhCZF{`>R7OcAZK." \[Y^b`kʘVE%ػ-7u6UQe UGa5NΩ5aO.f#oWks.pZ^4W هw^ezyN[[YkҌ HBu//pF%mh,Vs +?*˭7=]&n;8c`ʪ@*/T-ͩ.!^y~!G|MocNm5M#M'+Uh -)'}*++DsP@0Mlqsc~C{$1i|}{Kv>gP~zҸui ֒JS4GA5e?Cmσ4WR&] +<׫43k$޹Uk_^2daّ[FH+LdIrU*~8,̌ai 9@9נT'4Q! g(e 91WMȕ)7(kN*??  +!IԴ 6>a{fNÏ.aVZ'Soa쮀ߒw>ల*URL6B*diՕF);(#EH=-#Y{8pN4e*+e(ХvPjPWUyo$ _+h]zO'膿R-کacBYn&kdmJ̝P 5rnNXnBe"1vczԲS܀?cUJ#(:HWوo[E#LIuv&/7pve(۲n GMb 8yUj' #I;BΤ)9j9q0n$;Bƃ%e dŪ'샾XI+QM6GB0Ѱ S%1~l_ i;4vg_Y +"(iiC&+zX]a# +M)Xl3tAuBD|բauzO@F'eO7`d`+jŭN+ evj셄֣ ȜTVotZ%%i2`6 :A8Ͽ[781m`fP҃!lJk~©yCʶ鋺 1qGBvQ-F ~}xcbS\e3CsPRs}˔ShOi #>[!=( (;!3 +YXE%(-uG:i:Ԟ'k 4x}>Ռ;R+HNFmDA lq)Y12T ү!s& ΩeHן.9D>C_q|n1 ٺFL0:@I*^!1M6) +FJ+I1eOXA3ddCctw\A %c-x$N|3G=/s{^fQnǩ"GQ;Lu1czk퍡݀ eCTJ=w$vZ@>Ƞj4\0j|Nt1BMiD1mDAB )ܞAC Z!|28IMoLNDבq:? P\y.]\^.,y$FQ53Ԑ1i')MѴ֘N:&kꌕ*wkWfa}|ν 'RNJ@w3gBc|cՁN^ǫۄsjE)ngjd#-v1|O'_r0>G-rbwãkm|"r .e'̝NGi'r35gVY|49TNKB n Ûլqo6e?ϹGQ⣷h"vgcW(Kĕ_D.UXUv薟4>$D:j7&, 5TҎjq~3v8v"Q$Q>yꫲ[XP[P_Jh$%ŧ*TS3=EfR_bObٛSxDGWȓ*_qs\lrJJEcdk2 +՚bu$s' Y)9OVZLkK*F'd;r&.L.l|ino~^rVјo)T'f׾FW +n/` 5iQuow-U͈Mq؄x}ĉ"rүzU1m(< md]7VȾ\Y[lOoXSt欙w޷Ig933o3wo5J#*,[wsudN4;̍]f-A1QnYC5&W |Ϗ*NKD>\TVekQtHQƎF:2G$w{J%ſ[L?̷d[Yj/js1嶴\MOx+oyMWү^q5YNTg֤[<ݳԓgNg<@uT'We祍t8thNXFYG5C15#%Py >C,}7|oF$Cs/4 &{ȤVW"uu2͙V `ih +HW"`4YQtxy$.t0OgZnI(/G3wʹNb 4rO JEwlEm_Qm:G4Sumyu/"[C6Q_iY}:Dz:{N=J՚fj!ȢΦ%=@ +R8?E! +X *ɑm9ΰy6jTA$\ejWSr*UK)5əET)S5A%o:ڕjReϢn%E䓕\~pе0g( Göb6c[zضmmMl,/8EF"h۩Vy_ 3n(Yj0S6U>E>a 1v诀͡>Z cͬi` +ԯԮKmqZ^tuA)߅Oj)Y;֤lgXoa z"h`z]6(I.!-oW l ys-ѰVFʀ}6C0`_G>o ƛ4KdԬ̡f5KW^KS:*HɪQt{34|oZ],ȯ|y4(K\GYO!x}gF'`2#݉n+ԠmF ZZK4p Ce( +65>/īNZx9E]~:; Ɇ!XG8i'-W6hbC_h]F{yL%Cq@5ah,1""!5s8{ 4Q o_sV{qЈsV叱FwIwN]\Ǽ|"]@뵗PxjeeS s?>ÿs>Z, +VHjA (H(7"IB %I+R[*V ciEhIi 8شٽ"G?zgyw}. ̛ hPIxd윾OmZN/Ez/nÜV|WXf n=*ɪ/,e*i٥sGy6DXg.vkh :ɭf{aujקOPb7e<{M,`~^佌mP/.eyt؎7TtN'cy&_.Y_ EtSp7:us$e{'4(ΟA5iߜMevep&E1{vacl(9JiGԚj,K[W ROg5NV8F4*[~&e"ڮdjqyۢ+ķ, F#ԝ<'X?t49U?xGe68{۽7/"[cu_XKr(2+a.TFS`YW_|acb^U Ulx4jQN|8 uf8{Nq9#_;*M7?W'o~-T=`f{qںY>#{?:fy+֩ ozz+jGv=vI_zZoRkCu4Qk:Zjt:u>NT-]uq柤s*f:|Pw/֤oVܮc5-J[;N} st!6 <_`.^g͌v|߬[ReGoME p5́iq%~>OG j;q\ } 6V$QΡpf^N$MIt7x>;{]#`s|艽{ӢǒOE>!sdU`J/5 3U͹;Ͳz`JhKo$ߑ} f"4EjmyDshieu6CtWB%bm^-u~z{oN{SY9>!Θ(-Jir|Gk"- ,|2k>h5hmVCSU&cS)U^FKmO1y-c#Zv 4Q)5嘋5ߣՃO.L 4dl`IW[}S-q2֬T`9Mx4fafD}nAXn +wLS6xSxՎcrA 'k^jz5ǧ ]ۂ%73Aa~ W%IUe?SpX\YZ +XTj#>Q?|[S@a[LAPya:d%כ1m/hgT ϤYUa'm.ӣ0ӶuMsU9"ޡZ/{ئe 0tw-嵎:))[ګ +oOǃhj5okccSkA+R#g0?LO0,Tas8\izKlvsbjw _ +esz9;[|G>g?~`|X?>?=օIȕ;Φ89"Rt/<Y+31h"cѓ{ 5!cgdݵݝsfJVWi%ƵWzuoݙ[if@VЗ1rW,WӯX֎qytg)Tt^.$~'IKj7ۗ/{:U}R `?{ƸOa!`orF΁$i_Wmli{{a>>z 28k; 2c,M6KuT[ =:`iVU 3x+} YSO#YP6qo&sۡY쯡Z%zM*GJG^B +gm)ϲUHn[2迧Ü9QQߤbrMۨ\QͩTo ytfzmgG5Οyd-'0br*,q?BNmC1kih`6y&g[k.`&M3LwE6~99z󽭫M~xq}_HCcj, ȚU D4)ʢJ-1stSVv+1%Z=Q֭i7aG?纾>ٌesW v{ +Ϡ̝vP7Yo@dN1 |W'۷1ԙ@!w6:$MC' joq6uwA,{iߘ*@G&?='dǷsFXf.Q>*hg<?<_sʩkPtĐޛ !{&lϹ &} 8!':Tf)3YC|G/]7Yp5kbO{;uW(4睝<sF6tXBn1[Ͻyv=y6 [r82;J'a2>lנj%T6zF)Ϭ71<4M)詐<(Q@r7>q་Aט5>IWD&|w!t Ux?= J5:>9n7)7tFb#sqR*YsJqs!N} ~0A9Y2 :LWuwm EQ^?yΏyyP^n{) ?U;ߚ:D9I[9H,^WLdi}C>Y%(RiN q?+ Z!**="&Jj V=^?=YF%znY_;kqMn4gOV[A VcgPyUGwgnݧrgF:o{3c9w5Fd f #fQ u +X z~a} MrJ4| c([乏47{7v⿆| {tbݵJSgBo+M$>DrEbDF/gw?zBY7qOSZFu=m*Sùi"IT 6+JNJ&eukkr>u쵏q)J*Ҽ0*V'*`b +X?RN%m +[dEر1?]]oxLObD`#]Iz[7cCz{KÊwcjc~j>* y̑BSAGx_FC1Ԉ=F-0O3k}ʵ)9}E1Ȝ>ǵîWSdGӫX߮dS06iNwx{Q]]x}1q+D[WI~-#fGbqsiME@,w223e;>D$G&'>^93{wy sƻԔsRl?Qf/3E:}2u.hS| ަ?ǷQIYjѡ>9ݪ,> }<0,EGo4܅nE9Y2.GF9]_>M<7nރ?r)DCS>Ї:d>d/՛Yky+7C7z+l\xv%*Bse[gXz֛]#4Ӄy]C߬ ]C~J_9e5cIS[zbo~E-o 6=ylqhtn&k~AmKcmܯ?E=:PրM,X Yvk Q;swGi,9yIA5X #Z8`:8@-XK^MzRV+Z?(wPzQk"j| O qkry ?ac.imvұT;\W@ߩ`-`7Xiastr{fYqカPfE$mV0(]-u2\2#(U :Z*R +a:/QXaNHm$v~}K[,ܾٗ<gPKn2$د!2p.Dl $QA_߅~F>B|ʹ szy{ӝhfN +JzNK/jldEƦzr*Wﻇal[ӬS*s^>nzZ!~/ =tmv?-S~ۙcs O嶯E"j#;}ظ?|ҭ7h7v\-NYg~\S~yrרru+ysN]9Xlqag벵 sw|lǏ=o[|ǘkK:'{+srg>kYc"ҸO)/|r2'3 nī󉡖xށ}{Ku2` V !{r4EC2wO6# !N 4{P=#ޭs k> .?`'[pw8` +;:&r.aϼ=94N<ٞKqb#zN[Ng=aU'5*~~m 8WE1P o!f}#*wyZ44C#Ήqwcx%r[/~CT=NoKu"S^Lb+A[)gga3$oSY Lv=!> Sk=֘⼧1i|Qoo4}V6G{nq9K+sW}FC~آy@լ_>^+qfcao]NbZ]CtW4%GѮ\9J8MN]ۇk7}V7l^'f:&%'\e_փ1Rw*u~m WsOgEr? ܪG*u>RuS`{G5>`}@Iuxg+ qKJZ㏣_=kݮ x}HX~G"CniqR;W3`A33ۋ`omzkEIw7sP4 9Vs/i+$CBK;KL;*LVJ=r>~؁,KxK aHZR\l/~㽺K稶{3٣2;*Z;{G)z`6k|%ϲ +9ƑSm; c~oÆ\ˍ;$6&X5-z|kJm{\7bz&r7?Pbk)oRd6@B9E cޘ"EjF75YiKi* ]ML|9yvNVigT 7s ]r[ic{^HǩeoD!?0g*j6x*_3 \uq{tĿ{@2E;Ϩg|baFruԸ\g]>祄TA-lgm>M!)9q~Li*q?@,MzWU]qs97(ZaR1%Aj `THA "XFl+:(TZ ʔ)ku`lfjaU@rsMn.߬~Zk]CBW€-Aǽ#'N_#R :=tJ]<+O|>N)km%fnQF%z}dkd3GݯMk?kAHpk$[-N1DjlZK&_b_CܡC1vEew*` -f6{^{lXaqvUUIIiv_Mh{Ȭ׫$s`QsRz)vj2jcNڥ շZ\m\P{êA gvB]Oqz[#8:3L*UIY(?ݛA;YZĖ=vG26 曥-IV UKg)J;*~`b16:%!bXOȯS/[bu7HӰM6{`^N~f:# *4΂6uʦB3A}veUf6}a;˂q{h鉝^>~34|g֛_&+3Do*,3uF7偕wErtZ_0%HHv8. L@b&+`"><GlC)\5⚐.=^4ax.WUbUfbS֠wPI锠B2Hp +-&cFfixܬu=ę<08aa\B}Z:I)</4`jZυnxD4RΚ2U0E6P?u +uN~kR0iS=5bbǚE6Q' driN;!f)hfRjU#-^Ynl;z?|l qr +VEqܱr@җêa  dsuM=TW)]>v >Vdva1Q:iSp8|2a(sMx.tr_qpȇ,8G೦>G?v͑J/'yPOm]M vR^T{GT|$}$v?Q_ v|m'LPj윁#{"W +ӭ:`/BwtNA__$V-H.[`v觋^ٖ@V~ö =?iAbމ>$NT>Ifxu)GQ~u~ƞ4ܛN븷f!g wVc+e.B*r|˰61:_Ci9q+z+WYT)5`[-iEGw/{҇:iIuVwa g/ݳ'K?o3uziVa{xB?Qz1:-|ODtzTn&/A.̢?XHW]чOn1ox\-e"II0E jnwpŝ"Q0]ts":x[]HNw3Ht{uk1_̻t6_A$jMF}o" 81 +Ə-k0ſ!ݝ~1$cuhETIsëW$$s\83frZ o7M_SpeI&~ _lzwGJ|" |wdB76T5ñۋpBQ/ׯ_D<@.rާ}@:I2Vl'Io_σ3[uM>OA y̛˛[ ODi"DLFl>v {`cKyKؚנHH{W3C}:iMECV3c9=dYctqBt!Yp_^&ⷽ<:.2?^OQl 9p47\b8ZScn9(uT>o$^ݤ]&i vlxPSz_~p=6źlH 6g<5%њzpS2Ĭ3~guae^hI}vT/g1o(~i3`]HD5| WY>*Ք'ppn{|_Dm^JIwTR?ikc"#nb'O6F鄭Im<}֯-TM)꜌We@]ڗJ | ,9!,Lp{=y?e l%[a V5­}K#{I+s&Oګ_WhGq +Ǚ:M1~e1Zd-ije`ī휖Qf ¯UrNY:k$$8ȃ#=3Z 5vw$T]s.]j,Rj)#D^,r̻:'9l7I2? k'zOH}O}T=g3G:HC'WͻP]%jn:nM^ O,ɵԴ&echl|\dsrm[Y;sIw2[)򐳁>hWII+5K#C'-z"C_K}>?B;ZdTkdco}B F 6vޑW_z;rR _>Z# ɶ855<`AF;j6Dae6"4%cކ()͹O%TMu!~+p ꁆ]IEkUePxmEeq#=RGJzHJ(wV~r3=RY2ox]ңD.el[%~)q?7U=*RN?8}vC|XY>B?4@W@÷`$v7DD+a+Vmp8B-PZGbm;ԎhxMdq$syw8C_E] 0-pmYV 5)Vgւ""-^/@W>/58@6r;/./0V qTi)o5 0m}4jPmxef׀~Yd5aq1"1D +\|Ё\`uVgw[oW,OGY78m-{M96(b,1X^qƧFod MOt0`x+(ضm˺;9Ϲ"#Z ӗ3v|>qpzN/D '쬛0>etK:lH;K8Xc{_a>{ޫ8 aN[T뼑KKznznv(r#pnG{@2$Y)k9 !#It=˳ڌK,AR9C.O`jޝ>f<1f "tmUڊvvtҖhO?I6^G s[(ԟ6$뫫 1 M5_n[ވ_pX=z=[u6AOL`a f8,O$w^_bM@x^湧IX9.̍puhtq\rR +~7HԛVk;+f$w}B9hϚȵKnWk3?uJ}cn:ὗUigNSDE^qKwOCK鿯|ً=O^(☝s؍_%9Q;2P<{+M#N> g6mN="axi5Oyc']9\\0^F9cOV97 Ϝfӭd5j7ơ횰yb)s|(} +sրw m`=1jQڜc\XWn߷ۘ}ޓُҴ|L"۳Kc@/W16ˁ>k4'h1?\jVC={DK-)ܡi& qrN'ԯe~DK`z_r[`54?]}mE&h&gо,p f<-|w}\E LMݳ[9=Oү̣OWlxm3IpmOflr\-/Z# }Չv:eqz_% c,GϷXA῁g 34AAAAAAAAAAAAAAAAztAAAAAAAAAAAq<@+x А< ut M,yb6"(>6A@gt 1LblFM1j($cn:'љ^8w=]hųr2p/&7+W9jX󘫓迎S4_F4ki.M4Uܓ447!\G\4gD3tK*ii^lf4K3OTIS!3ҔK3Mbiɓf4إf @W'W}|KM7_ૂ/ (n,?.'.6G\p&(AN!oOMՉQWoJ\&xɮ`$^ (f @-hڀY ,TNy@@=@T jU@P5T xE.Bv]"zU (BE~[4ϺE8737 ƫYvYSy=&G=l`m9VQW6u=jǀkY=L@P +1`Yʵ䔌Kmڜٴ9~jUɞj_NY7ԝ쇠+@K,Yz)=mmƉi7i4dsMǚAv8n@X#EÚI#G>Tv9 k=o۬)2ԯu4M0ζŜ6Upҍl– ]DlD<>8{f*U3> كAI~pmcpAPs,fl=ԌtK(񇺚͎1 +)n2[+L6 :`8JTxσ_ƿ^ƳXZJKP +j`.Nm"FqfX06zSt#NIb^O7Xd-', 5ok9XhSeSb[*aR,ƨee,Q:5+BͭNJ'-YZd+4ߊt4K#4WaLI:SX*KCSqEs?CshIAsМ4'~B32Q MG ҁ΢ϚOF[:~<+sf*6N/[zOF[C +텚]"xl]TX/M@ױ> J$7W{*Gwk0 ff`Fƣ#C-WHacpԌ$d!S!xN쌴ۙ4#Yg$?]O?eFؑƑ`kIJҌyე:h*oޯpm>{sWVT\(wl7K}72(SRޠJ .-4?rF"mkߥi"gZ;|ZLUx*vZ/j6wtX5{C6^tVB'[L^5iw$llP3M1a?kVS*7N aFOSi +MNc JS% nhg .$G2t;Om\76wkw'Sk?jGkMlm I>Sx]sZi+Vo/|^Uj nq\KkCY;mV`LH }7, )!Z!N-vt)rng^w+yn;͏QFrA5?h5;u[9YW\x3&6Ω6'~ 1bʡW %dR|qpRaGOݥ]щTThxH9)* 'Q謲pw(B^W̟{ҦyY=誰Z C&>?nM3CN|I|Qh<3‹g͍(uue… OÅa?Z[N+?q=93ɋ&q]a~BGyݿ=e +We( +6A,`Jvp5Z <wQB)i ] VK C;J NrN{^ #DU*꣢U}QrD̷wll׀T4tu .[ sH6{4]ƹt{4ֶ>PϘQ޳._viGo8_酞DE醮(GY%RtBtDEi"92iBG::ڨF{ܡ" +9dA8)RH"#=b&6`#u!V%Y`S1~7j1>BsͻaB +endstream +endobj +863 0 obj +<< /Filter /FlateDecode /Length1 80539 /Length 26670 >> +stream +H̖{TT{wyC; 1UDEA{?1ld5_ /+9ZLy'~z4@>Jۜ/ +Ypߠb~]X7C1ޠBQw,g +VX\`Xӆ 0X47? `R-(VkTlxB _--s們<% +J~~Z{Iq(o̩203I1s6 +9v+eksSHo+]&D9GΕWȫcmI SF)9JBQ6)0Pa<`5MBhm ^Ғ_k[:vvut"]e +Wֿ`A Yl? ;β/I@-e*.ɓq4v:ϭk1Z Fhi5ޞڑx|WkNߊK|UL]lN*C(Otu:I[An/{ogOjUBlyeW+lo-~U^-QQFteH_kzVͣMwM UM}>ߣƔQb#kכYgs3yjsFf7ͰbbKESf/ȧi0[J֖g^.1s5;xgyoBlja!_(pNA12ֱ>O//V d)"e>^]yIW^uH'+8o1wOO:,"~;}Y;Od4BMmrt^Nz>44Δk5p5gǥgZTvi飮ff7xz,^~GۉRteAh.a*^+c~]AClZZb^YR# 4D!D.Uk.}%bѺƎti(d,]ia1dFIH"PD4->X\&E<&E,ǒ,Rl39DgKg6y9l cN(+vBXJp69#\ 8Ql8젓9찓Ď8쨓N9삓d2'U89tq3umq H{>!c8O|.*%UpopbxwUJO_. s\_/+)? R?Gg\))~U_ZkĿqzn@pnF[ +nEq;VX wbu܅."}pKcGǔ+@'h !6@ey|^V!)+(/J8ZV1 +1a:#%be"NEY_I)kڲ+n57ѭV608X Ya= 06‹eȃ^-0 « &vx v SaL0 C>`&,ȁ0ޅ\(,ð"8 +/2xqXJPLUpނM8pܚn-[c;,9K4zf,N3u?6zzFN2WJWjVI[hm]ܘsS~p n-}:AGtN҇1܁;s*w3WFnπ=7w^t)~P?@{.ef&quN6ܚrx?߆8YsOi!-2u6Z\pʧB*~:#x4< fϺI5&CioC85ܑq[nŏq +?Ni:E;; Opi4 RA]h)t ݂ =d=^A 3 ガ ;x*4 ͂n'BPJa(5h {[-y+U[jom-^/x5ro+`:櫍֮"HY%j5UhjUPS]RN;u[ҥԷ:Y}~uWՉ:t9]]UtSI)VT`z]MU̪0-i&ѴN^9df3fe'M9Sj5+k7V9kdz_ɏ͏Z)+]ƭw%L Q#?0daVjZmwm;Ss[*GU'Ϊwu6E:۲dֶۢ/0znkcX_97_~B8WyMrIHb8$΋5kHd Uxr0q(QrbƒBFc&׎@?gJT+-/>,?z1ٟCKƴ7.ipo3+~+!F1"KdbxI,&b&v/&7L1KsD+\1_, "X,K2+JwΫ56 +;k!gm66/ǞlB]?Q +RRT?B%Rih܅4U(MH+0}m)HC&mHSٞ{gv Gvqs9;p\!~,gg" O00/Kو-AZ{ 2p+X3[Ip^_}K8XǓXSHN} ix~ Ýq,%<¥?OÛ +]\q] j:P5Pֳu<^ ׈7 #^EuyNeykss|%>SP7Y;Tq̬7Jp?'gwT؝{Q{o.; r]dΞ׸:<ܾv-pm?p3J| : ɿ3?GnG"_HKy5BDdykt (č=K +)"$bƟgJnc +dYNJ_ +RIT*RMBfwOѐBXޓF d5y]ǭd YK֓DQnCm0 +߆,/Ů][yPlWIŌA+b!a;9~l^u]^%'wsk ?8btww1 >-xjm415Qዹ#|ix̰_4LhpvLNQZ{YI#k1 +\k8kl`(?aZ`tb$ n=x /1&sc0B\_(c?m( +ljдe Fգ`4ZLJrd)Tɛ'i*tG&+Ԩ܄ѱI~OMi,f-a2##5Y݂$.bOàZnVJ#aS8f4 9Xxǥɘ Eh^ʬc,[Ţis|'N?wjb鳨9a* kӅČ +׶D;Wѽ)ū֋B""hK3 +95E~PhdnSCVT'&Egckh6AOȩxsυ31Zxy9r㓋nīX1ئtZkMQmg$I6 R`o+7 9/-sҁ4wNvS7,[f/v7ڛZPMSawǓOaKWS-247ad(71Ⱦ KkQHd"gh@%r !B_1Ǧ ̛MK6ab.3?XIL1۸65NZXJ<#D3Dr20?p=67crxOJ'))P&ފ2wMg 34Y!j;nF63&65qm=z6UYz(pDF3} 0v⼜Ѯm[JKa֤28^3m,Lk9 ~N :@QB] /co/r]]7oE0rm/]+WȐ;!euI) C83+L&_o(V~ J/X#lځjо[ OQ  a,] Tzr-.r㿼BK@$V2qC_;)oU&֝O7)wVN5~U źCVNZRDں.p#~eI/a#asTc!T@e|Bl/.l6ޞJ@gH#@Ookb 5͈uI5Q{zm͉ mmZ{dls6&̱dRA֑Ss&5\NiƁSq+G]?ڢ^XB A8<bU`h@hlh$w FdQ žoAD>w* +*][k +ܜ/UD9^ +TKuED,wrk8gRovO.V 8F44nlvnXg<ٽѿ;'#& ӥ^ޠW8kg*AܕWGo9AR} ?t14~DU)g-504DEX  3f-,zIz';-##z*.S"(K:,w}0O~Gg׳/{zT8'J+#G 6Y}:n! [IW\XaQ#9?fh}[Cs[f=}-"ɀ1V-Sp4ךjՍnvZ=f^ܮp ]KjtͭXzdn\#n0D:w{SB2X;0j +G(&;[lx]^q|=1PBT&B ]!DҥE 6mYxN_+6\sƬޕvGiўCFB\˽32gݡz'ӂ3=Ri0JzX +<7 H`MT-sJu?=6QUJ` n}ضήmcy䭨NCthC*7ԙMh M(v׫F[8KKyX%UQBY,8z.zUkz J/hU@Ȳ8&.nmju> Pj᭪whuYJWW 55 +Q (5P$l"b^?!M EGuCq/lU%hk ϯ_BDbQOO!M*!謩E&i?>r')4-~q Uot4H7+ a0Sgdv ڒTsSKO)&gZQ/b%@MO, /0 GRe&^I%-ll;=4ۇ/Ϟ,xW'l Ff6}7m +22wԀWwAN._S\֘ڑVЗo+)[BC5ŸH< jNFH'\Oa'@ޭfZrHyGBB^V + #oБcK(K M&D;6ZAWL*ZW&|s8fn5P4GyEu]q{{ /D(*F>D JUR_AF1Z)RFhIFGgIcGcjFMjm:ӎF3Sc>&t2MѨJV:2͹{wϹ'.ޢRa~nwܨ(7 l\~S +[16p4;l~Aaw~0mP?#*5aWEJ+FvgbN8ziE%Is;f\9)7 9T,f8 }m~ Il@uڹ@?8u87_ήl)ث,Dv~ܫRR) ,)L?yXcYy48D;R2C9N}/TB H,IMD%x$ L6;Z6 + 0xGEHOjpibݱv0P2Б'W"2w]]䳓;uo_;"G}*  i8ݹr͑=7 ׽!L޾b E"QM;]x r4)K_UG, S;jY*x SøفЛb.+v Vj7X{b/dE40:SxףmRv~ 'ҿA=Kg}E'E#Rȣhp{f)DwIHj; lhw`lZ2ļ4'h8K6 r:SG,øE,, +"t[ǙmK"ڌ +:hGohRŽ0QM|UXѮv0\&[-NvPMJ>$bb'ԣ,QXzhg_bLXL$mѨoVQ[MZ = A h+Vi(آXk9 e+2(7RIwhRvh5ǃh01S S>Vп!g!Ti +ARD, ̍˾R^t=9;׶ (SsoPN4 Ħ8D tzg里w4uQ+ j 5hkVGID͓sFk1s~^:eCofOf -Ow= EvZ7`ңx^E?4JhП*+`-OF?*A:>Jw \e1Ipc?E&e ^(2)yMNfzr.kS1ZJhAN5D%z!Vf^ڠVSZ8x9Gm~d6eFJ{'B+o"yQDyeGrbk$oݠz3ovIթ|Ip/ЌH.k|#vGTc%AL9:.;!f<*~z5XUh=rk#~S2<^,1>e6z=j!*,zpn'm 9aW[~:aY֩K4]y֨5um[XX fPZ[-ڻ !Vi/"*ȶ(2a!8{UWxfa8d"b4WתI.]Ⱥ+\G\$N+ةI/A0seS%G2&w)B\hAfqJ9\ b*{hVlyM#A lDF*#*2dRu| 6[@e0~2}It5o TehwNjݒY#7f_}Q``D8h&!P3Wtc9^AD- ͳ<%-]:;NС_’/'"7]Жng0jQOz-|/"gJ4,b46x^ V.OP2bĻnUhЮ3i2ڇ@9HAF[NtJs+)6\Li^]UW?w{$FAVŠeKX,% AYFpHUS,EHg)jpEhԥԢJWҪLR" p9u|w}w9sgb vvQ"!9jgGA[zR"@/qsEwn,N) +sοm]+%p7Jʩo24 {dhE=.y^#}787IixcO S\;jr6'垤c8C1:5)AF&=%Z6QnS¥m%ϝ9W,r0Ah𩛁R5t4o cBsf +Ɯ='5&X ܱ&RnMߏf>xo7|?/_5J29yD.CR +15cE\'r@=sOGdBw1kbhs4!?vv5cff2[4+Q1ˋ4_<.g0V|/چ֢nDrO ͓/Z|&Pw'_JO, H{6KyVӋ[I$s©nkAƹ\tFjs/c9$*'iPįI4p!qwY-ܢ >s ԯ"%1[ѫnj$5{>ydY^,p_O{aO~47Ƅh{-CLYyƐ[>{uVݎ524ڛݳqJu,c[JLOQcvXіC*iNsq+bȻ.k Y&v +\p ?59EKE\t7ae)3f,7S̥ʒ<5}.m%Ȏa=rud=^ #gk$G.;}i6XA7>sG}^vy r3n4q~baH)FWIO4<{=}hЖNNxI nA}脨?`E{:cqtmߧ=|P|4GO"E?(#|@eO`Gyf/}gn7=F2.b57t RĻU=/uyCjN^i'WXcl|gۿIUOFJ=d)^p@hF&ݺI#,5v!uMȞb7al,{i&.smG伟˹=̿$ omTyh{Jwxx~K#ڇK|$L3}Pcl`6#f֫»i0(~Y?m'bhOC<Ƨ絝~d],jdix{7łby=lx㸛_j92(ݦ23 읨8I23;Qj&d?):^=cWe $`FqohLCH}5˫Cuq|@zNQOF22]:h"C"}~^=b1p5]TOT#sێ;J;Kh{3S7$K<SșX(=ɝ5Iinl!UO}{ȷmk=@;A3sVv>!fOr=^轆*餭1aF9_< N3aGC{L= xQϕ~?V4Vꌂp%K.'r3)OqVˮ,s$~4ȱY/pL{^gWx!l,#pzTg4qt݅>8Ay.Q~Q̩3Z&k۔@=ײS50ƺ朰8A}u9N#EŻw^μOcn=Gnw0\wit;c^$/u"`1}acuU 3:2Nt(9<\˸DD[*v7l4)`:M;zMZ};Y2~"=oYW^%x Ri!7Hk>4އ>#.vԟgeE/m؝XEkGC;BeNlyS w# )7eqћ~V1w KU}՝y-6syDl5s_1,dXϹwχ73ZHKM6d +QF%%HSb@1eN4wS[dy}v3Uoo𝟡Et #b^<{Qc!k<:_ww3+ꄬ5NR <)PIH4y9c=1tu᯳]pbWp~4pXIi.ng_W(7k!=`mߜ/ެ-wc +ٰ*tkq_UP˿B (eP Ȅ1>E߀\-_/*Rl֧$Χx1OK;`{п&9S@z~0>Ϫ lȃ_k|J^;L ⵥˏAM`\*߳ܓDBHZA"$10ӂPHĊ5X }@)Np֊mut"2hU|poݫ;=? Roas/9;`&a~,*sK|[i)|hke,Mh#r<ƹW-Y&ZĈф*(,߱\micoc{9iy,iYkWF-Mo7<6odsfi2^6~9:F..Hd>*ǽd%#KL˄ЁܧwXn9۟H^JwVϠw 1I9#П}p4mĴ29H6y)=L ETJ5Qa#{ 9Ƿ{kI{$a O|HB"|7^( Youe]bh<Z.O)oaO]>&?)G%M͔kx^B?ӿ]Ĺ~SƨYɱvLbp+U $/>^\/X x|qrppL)$"} `ߎZAg-#gPȀ/)6wWxA)Q/sjth_W{7辛沟Ѝ荞rd=KEYc۱ϩPbQs$j*Wn)Y欱1ntwysc +y")4 GEL͐҇L͠T>djF9lsB?Og| nL0mux[zeˁ ԸǮޒ່t#vGKk~"NLByTx^Qz/:c~hjK3.kȴq'eo2Y鉟L_>#/7%苮Fgg9i M^ѓ F/5zc1:Z=K=~G:>2KiE:+#d7C*z^ƿ>(9)[5srno +Ijt2ZƄ.!>Qt0 e?> R|zEs7=IZWN25?|Gp6#2/| T\h_ciꨏʥew;%On e +Yw+7D\ Re_X*ԇ΢:}[NDZDIǚ;#Ĵ<-le|yWm|uhyvoj?L]_cJ'O;sžr23hPL1߬(OLLc=eNYb p +N*/^/iM{_zǤOZ> {[( >2>rIaӜRN<q2G׻Y0MalͰؾֲEN8XS11zlI[lr*;E0f:(u5 +VKȟ:6y :]#;(W$ULwCSSEOqK_J>qN&AP3PZ6,N.3/J;@·G *mD9D0ir.VREĤvխ~fA?j7}@=f/:ZǬfۯ~'B|cta2睰}بy-FF>j$7~@(ǰ>4[?S[tu-BEc]-Z*w\)n+GU|-~jk_1Wa/IM egGT7OfLhD<5&|+y~Pȉ.sƽq.9dR8Q|OI/BDl⌚|W:"_WX{  +#{Wק>[L+Bg8W8N@-5<ƣg"+Cc>\bqx@{vK46j%7WM+Xoe܃8{Ϲ@)1D8sy?(^%GW![_y&\#$(08qOu[1,I!ξDVd`m}M;2.*k"ǩNC_?#N?QHP'`ݳqGg  hHГl6ѐt0NJ.}VBNjËWp?{iĵ\/>?89Su/Cr~W`εJm!wQę DwϓeZ A̙H1thfZȎYdǬ SK2d;c"Ԃr:E)qK^ НqjA9HWvBՀ82J3.>sTfGy4dj.l{"UZp%Θ+N!M S~ ]u +W*G(utθZƽb2{<;{8o}Ga%>&xw1 1漩Q2vîD%_a8kz P{=|@!pwSyHm'2ǂ D$HE dg[~ <|*6҇;*_OP.nrZ`f(c +) Dܧdw Qߖb pv!#1 ʓnݪ@'0$+I AЖ8 ~2il@`3&>/@/O+A0Eoěj,~Ʃ-1Aβoڐn#&{LO9&bk.vԷaUO{RsPk~r͏!Gz9 Zo`+5e,'4Zz_{ x֊#w8%hf `o;7P0kD_B!"c)9Wjv巧|.hžW^v1"v7p-y-IĞal=ljŶAꟋԞtivPmz7JQlMBYPO9+ A$F0zU迥L)C/hj9P C $+-HAd`(]d{xFR^* ї}W S6փMƫNJXu7fo?pM$3wW/NG%}4a+H>#v}7Y<[4Hh'0<H~ +r1v!WS>Si;H3dǝ+h@Syh`WnB!eakP||;Ol?Rwyry__ YsVF>y8LNa1̅=,=C.CtU +/m!c]CNuIrE^F)2]$Q){P?ruʕjh  +ič(YC!'" W4?ZWZ,ڣQDN}}ШM!q8r/c,NHOWsRk)w`OG?WIl=_"O6 +GEo;A~uJR^y|1qz@ /~>NGԋ?,e/$<, PO÷|iJg@3>[/р3%_?F i?$t%TjS/hU -,N4닺쀽Xyef \ +'nW4q!2ǹ tow6d В$$XH!`b$jN1&VmZu%([|!j9S=ܹϙD.>sktK[x!.|)Kr~T&*+ޭTAiZ[?Rȹij_޹֝K,̵4K_DSBJs!?ZE5Ic=cϷScR7I){ ss!Sg,>YO^\cp)L|B_Q-5R9G:s6 rTɥzitڝ*muf qYܦC\spiє"V~#@͉Skq!t48AQ\qN3K+ 8=pugpߨSʭUS\Ud^}u _ع%NiS i_+:V91w>q^=c|ʝN;Й^uOOsshmߍ>.w72_U3܌F̨?n\U +Z)SzLz}Tj"z=*W!i==r^b3:GC&U@3N1ª5k2b*q̨*3CFRɓ ^ TWU&]UOSUF@uT!Ԫ D=gjS*!>j /3CJU<-h21jF =?zt 4Uy% ]|tr#97[WuS}?+EQ?h6Mm9q&G "$ֆYEs Wf X2TEi@KEZ Mӊ1l;=l;*Fx^Qs|Tu|㸝RahC4r98r6qp<*n58q,׽9`{?ka>=8GO`-wQ|w;`;fOaVًyüae`^W+h2^[f"xlσ`#xG`'{]bm0`+boZr 7y^|W,_2x lЛ <`ϢF x<6' 8X?aG-_:Dca5`5X+ +C/K1~,D ܋iwE.p', T~nRKVj5sz&3JanRkyVxf.܄&74G__aQai@.j,-FmsK@yC[e<,;S܊u.>;r iy}y>#&WW+Rp9_$+.N9ye`)G^J.!;JpKtp8I`"UwVFJI LN$'D'ar Xٓo~(1H! !d0) d~Aֵwډv_OGU}>CO#!z=EϠSIڌG]~}^C׺9Ns +F2r94S$2ԓ:RKRMH%F*$d19I9O#}p07G2FT"X74څ>ľ^CW%mA/b7p|4 8/&&dk8!$2;1&Ihى`~"ؖnEOȌ@5/> +endobj +865 0 obj +<< /Ascent 3117 /CIDSet 866 0 R /CapHeight 667 /Descent -2464 /Flags 6 /FontBBox [ -1475 -2464 2868 3117 ] /FontFamily (Cambria Math) /FontFile2 867 0 R /FontName /YSXCNX+CambriaMath /FontStretch /Normal /FontWeight 400 /ItalicAngle 0 /StemV 84 /Type /FontDescriptor /XHeight 467 >> +endobj +866 0 obj +<< /Filter /FlateDecode /Length 30 >> +stream +Hj`@` 1@ <VD +endstream +endobj +867 0 obj +<< /Filter /FlateDecode /Length1 76686 /Length 25039 >> +stream +HV{pT޽I Iؼ`EzK4@TP4 1 T&@Rq078VE# k! Fc:t2-)VkܽyJGg'{=;M.heM7}~ +_x,QADzs݀gF6vq!6&wPg{AHlBmMOt}}S{wk&, ~$Rgx.ff6ll˒lOlAJ̨bFUi(MZ8>'hR,WIT"@rSq;G{W!KJZl! 9Gs\ 6[ w˴ѫ_JxMg=l(d_ӄk2:H,i."=Kev| VS,з~>I?}TNY-Dl"&2Z JZtQ3S5M6LE?-~J^mm퐺h#=@{I +vӸ#9H 4bӉ|쥝,mgD竬ck +v݁m@^~+NjizAīЉ{vjFu݇w} _Y?f'ЃXIۙ6OIV tпny`ھ@[n[ԫ}A?6f6mA<ڌ:^?MOxڏ)5j ح'LXyd2(aw@Eϙvťw$οE7\Yf-medEb1>}!t.?ߚeK#ѿ'KLyp}@w ~>K7Kvݞ$9Czj>:{^e?hϑo<ߪj>U:`3y N9,].?b=ٴ,غq{׵%)p]?X>\en/yKW|%h; nys +̞悛n̟R5J4)9YiRKIN풍,Noʧyu4V UrR\Z:08ⲛSv9ϩ R'ȓYVp)q +Es{>~PT\}%ABy.mJ]J SƩ2 G +bq0W0ƹ޴i^^JS`ż G8ڨKes[ǚb bjp "Gb:K5T:9GrVUwRW6A&zS'3I -e_kt/KO+/q|(#@hA,~ʎbN$/O9nwրݝ¡.KR?R˧WSx*37<Q WǮDÑ&] 5hPx~`K"~g*@ئpw%v~ ֠Z"RRHYea39!w5j/iʰ*\n k[Uɼjy5ԫoGDq˺\|[_ + /zBq3ŵjbqPC by+O&TChL9nuf*}y{n\t*q.Lm +`bM}W7{ĨcYv9J9s6E sTBRnUkYpd⻁ǡzJ?3K79ެ_*Jq8y<ス_P1йUAl>s$#. *qЎٳBBo FAK-z+̚RQUQ h</;D9/' +yyh1IL/uǕhp8rYY5Q7y$œSN$%SIDA;VVu :1`3[QɊAM[ Q](7R+7b0*T$bCJ˫!ˬ]Z4JJ+Ebl"pczMnmq;GĞWl봮 +A:a8 H WIR2y.W$M8i[4ٶ ,ݱ+?pd n< 4B3sOO y U"Y uA"&ƂtKYӭf>a. ݮfx@iQP *O9"<L6.llnEL!:3W_srz`c,c$8kcA A%> e9o8C(@Q`7yb̺NA5X3rn#"C&[N{@ +]b4-K(K'ŖkĪ?nt&۝pyKyzs4msemxPUu3BǡLMot{s0r0EvYxA}"킒{LBd؁$_2<2,9[#ʕGSj!ވ Nbcgw{qwD:^L7e8 П(ȥbǢ6&.2eqfZw7On5G-vḊeM\#8=lp,V@B@b- Pm (b͑SDBP'B^)I<B~[9^4 pвhuAO^e8u3$HD.ղ2yA| _p3`uq>TC&S!p٥@1<%_($rdPOll0 IaK]US|]M.\ 74 Dp!&Rw8 ?- 5X|޺-[?$)3ߡub=r%y>w4 .]~`mE0p፛M"T qX\I>Q Џ +]#ҏ]е뺦uxx=wq ҽhH!\/>~qїO5G% O4k\` .]$:Yh͵\7>5Үy5/@::e + +餝 +fi=ʀzC +lՙR8P/&9P_2-ޑ^okOGl MIyPTɑɋOT_?f;iݱӃ-dd!D\|c^]Y7jgcF&@g#}zwQ\S8}޳[7e:W釤Uufs&`0, ;! +¡}8@ Ԑ-OG‚`;(h6RMJks'ғ#q8)~cClfcq5塻q몯urXy C(@BڲHRD_&Qj(G]M^x]yxXrݿ/0+{ڸZl eaP?ϪË Hn|V~?`kINWlYt}oI2BK^_+hc8]R8:EAYNauu]Ϥu:]ypWɡ4}ʕSo_CbTSNIx-m>Y~}׻b?ɾ+MRlb,d³x[~g493 )FUz0E7nֽɿ +J$`[_PmM HdXQ +R/iU PxyHqο1^-M]g{Ͻߏؾ~Ư؎I`HBLFJ@XB4)c*PW cj,%"m6i5kiFnRQ+P&RƁ,{utEHBfWev϶X)-圦2$o|N%=|}7d lxnvQ/UQ +oYXßsCNJ?fP,tIU [YDZ<#uҼN])FI +u:5hyOP2Q `bOi(i ڭR^h /{X]VT*+tՅ4hl\u4R)VWݒƚ;#K6<LΖj(ntI2\ `phlX,xapǤx&j7koY۵rIY_&޽3{r}=muG\76/\U'\{@Մ"(ˬِsԐDZlTp^/sy=sƑr*YτC^õB浙#I H ZQ|8etaKY?kt'VYK#E&Y`<#~STMs~!Ԙo!SZ'5v{f꼊#xFSX a(M1RrA'z`$xMu[`J07wD<5J#t_bЧlr_,}tyϓT2+t wRRǩ( :ŚZK8sl%-Rr"11CW'ڦ섫\GUWXApϰk;; ?n h +epK*se|)[dKϾ=p7̲XƔ\wbTrb:4}Sppx^K-C^oT3QU9HD L9DF/ ?-8>.v'"h:l ++4g5C+@у^<=fA<,\/ &܏61^z 1Po_h%@,^ҴxoGMxerh%ӏ:1O\ * +>Z˜F{;g>-9>.@M\:df%E4ΕD7'駐a~C> xA ijYwrtwJ_B1ۇ~.̅E^_ܺP.m !ڌyl饻HwyN&{y>Gl'Q +~*dt I5Q&l^~MC \ -IHp}/B:eSH20(oĮ$O_EՊuH:mUc^3E%0܂C2ĸ v{a4)sLqEN{ykcv a8c9ଝQ~1}q;^.68$\qOH[p+\ܼr4_\LsPͳ"\|7 +&&<8D/ֿ{VC#ff^qı|-:]A%?yZئJj=Cu =ӟm߶mۄ,/?ϵ7\݌}1P;w<dS[{ͧDTcPD?p\gݽzs3ZV3sW>\g>֟~KTRfer󙽴Z^u +s{i X&ka}ҟjU9Hj4beYtmt韱ZYX~Un]b˔Y"/eI}Ţvj[=].LͶW-oi4EG3]4LGq+C؆5+%q܎2rNw;3>zew+DOkrg*:kgΓ_3;ˢX9NGDck8' NL~gwveQIk◫^ ܱbUqu4dk mqW(l;VB,ֵbL ৾Un0ϫَV?4]~o-l(isax XQW󉺘Ce X ͇nHX:W/Wi LJ +`TGE0fZ\| cZo%o^$T K##Ɋ̒$x8K4P~˞\(KRMSk6J~xh;Zq 6o@;}ŗ@Yk_Wd7UjJyS`ڙhA49\3jGv>v ldR&8LfaR*ש7zcy}zs45{wiE&Wi `l*oyF_B&`'q5lP0v14뢝ӌߠ)@9dA_t9?k>KWB]Z'`m)Kb;aOjyr/E|@)ui=4~*mfwED,ҩ7O=|? K_fr6D&;.hlߦȮaCھebQγ8xV3Ihfu65%f "@|V:A)~g?*3,⌉7bd*3;rwL%e_x@U~tNZ{ /N + e}h4C!b}_tJt^[UI}hQgޠ rTAl-d~9u俭yX]elI[jůZzU~Ĕ Vp1UhXgު5 2%^Moikvێ}˅)_|^ΫnRE}~aWh^"=ܡx~Ffab<YT== *ma 1o;oh"l|pPaDM-~[盱QmS4}Z' Ҡv6l|k؍7UUDҭZU{ݸ;T˹ Bݏ~Y\5:k oBSzbX5N9OIkt0Mcs4^ +[9}7CvP,7\Uuܛ@H$<"hjcR Q  `kJ: +Z:XH8h +-M,TiE^wnHs?g{@ +Z>V$*sfjZÙV.}gYiƥ?yonwm]w= {Ƴ׃r'nCM49Fܱ^@W׮[a'7^$zr;IM +䳓^@V8F"ّU5ק kn޼[S[挴ei= 7%gtAMds!4]S r7ݲ5ɖI_Us\3Ƶf2fx9%+Og[cmwأdsQ-1)5G4syTYV9Z;/9r%T3xG=Fhv|.DGp@SWC̝ټ+qT'yA F#{~4|;v6+?Ouokvo5>kPR~z>ޅQÌ}KT1ٌsj<YdH3^#n|{^mfO)ȸ +̆=G%n0 GIKFiܛo7ٷonͰEl͖)_ 4n4{}HifF6o(rːo=v`F9;g"D֓n{}T1QjWnO+cq^fߛj_{s_SI%/mU WDO,B4ȑ @Ah-W@zzqa-XWEO:y$y"tޠƐ'x bߓ"zDZss>y ߗT/~~z\CRە{“dv)`:(Qև؏CuAƘ]ߐxa74o%q.8w 31z{Arُ\zҜDE +{C 7xh~^/#'+'ѡ-q8خ#[ o*)0O?foL#; [TTW +Ne1^\{ikb՟ ]W/|W;xƪOg\-k -UBrqӑg$). O'(*0J\ |TϟۤT]8g?򿁼?yyŌ ):K&g"2C> ]s AM8~.cч3Df(x?ez[O!COԺحbb𤀙fP{w ;?KTF`2l,?+Uuw>t8y{DLtW j.{daj8S;V!PW/G*ڴR7Wʢ~{45|bp>5PlEzIv5>D +>H8}0EsLٟwzy{l:oqm:~\Pvga4|(/sG8/=9ԛ1^ys _N0LoP8?Ne?1=oa)cÝCéOJȥDRCr8+Ր΂Ԭkr;:5쵑p8V1wMEhzWf!s{q56EU;9>B5f5Uvm +nҥHZ)رڱU`ZSZxL{(R;>8*våTeDH"B=Ԥw%qTϛAaJuw;XC_Kֻgn rrm#hWi ZU%rVUa*|Yf\.8?2R&!$G TPBEAHHx@xZ$Sm)qhyD(ՠ@KJ hU xw~~w"G#u~@<> Y)3Yuާ Ba^T:3#zoq?/k=vW%t(l낲,"{<eyǀ͡"l lw3G? +xlr*{Ԝ#9˃d=5Sqe5_ϩ)2`qr?YfY{:I/,x̶aZjſF1" |6X5F>ļ<*V> B},=ct^,\}.[Ϡ3>c>3.|CYկfM%2+]0ԯv]YwnjG7ԯvux1PO{\芻Xܩwù^ؖf߈mT=G@,3mK]`;yv 1\e*BbZ9X +`2Fq`*;O3cQ @~xb" NVG QLDzj9T%ݡmn?"-F8c|g?Ȼ.h0ULdE>P6`X6r;@NE`M. S ҹe\t;krJu61~7Mn;U8@?=#mt&,V/bcOrE'={?__Y@NgSpM·j*>1wuLm^n1Vdg ժ7k ~f?o> :m\b(̃p~2\&u (pMYWsNe_s_{}xonA)RпhOCNFY[K]EM{Rc'ꏯ{}xnoΏcW&>GµCc]6S_4~=C?=#s6sFQGAl픳uu%!lモUʰN13l9o7Wɜk2g2uIiԣ+D..睿Lu~+p9N")}9\̻r^^x5rzx~0tpqgis}٪rG oxǸ?2cgމ cʞRЫFd)w2}h-{"_~vQ="=ȡ:*-bmvD l-P/!.v^4耭7}Y:kTmTc0H; +W<7{~F3^ {Mc,bLA \jxx]V${QnpA +2w=[Fδ;k,_5m\m|F٫rU. Zk{WN<Åq<| 5]a'o[Iv~V5m N޺qr-HxYJOOR"OT]~'0|jǍNNaq5Qw}9~Wۧ9Alg>Q_DTLZ'ؒ#c,,FkѯkUAνߑD7I̩ԷO㼣-Jf<>9>S +jX Wpa]#\?|3:mJ # YvBg|*cR{U:aWž˴:v5Aos)lp}v Ҙ7˯4]%^9zO-}lW_C;ȹY&]*V+mw$Yfn фOwh>]5`nϴ 84m[_Tjr>g/*=zҭ8K>D10R@JnjjJ?~*TkXPS5EUgϦMJЊm}9Ĕ1zUb`ŀ$A?~c/qZސ 0aڼG=ܯD|{۔V iJ'()%؇p +*M.ۨ@ԫ +ϥI{G45%qY+س&6_lGu썮U{7kGl̿ONi +*/={Ξs 1bi+P,4 + +A+% A:#-XPBLJ@M+Li GiahGZ&HϞ&Rggݳg9"7;W{6yG$]{!:ǯ&f_G"m9_`Sk}F>Ǹ t,74·]]]d<%F1$j̅2wNKExz؟, {%ScɃ$?p*c6R{8qLC=>n.w9BujDcH,#n,#pf96>gMq + }q$ RA:I/_)Ĵj:qt-ď@U>w>Z#5IE+ٖC u# =NKsT'%@#HU.7j}C|2dv~Rh}3modu۱Nq?|.)SX4 WP~μCF#Q)vU+(4c˛{3ZVn&øHo-*ePc&NwL~%mn%FG{v& ~eٲ-K7M`zX,fNlM$\#KʿiV L =,FuDVؿdyKY"Q1s}\F*5 g?~ڻIoY>?ptc"M˞0d%iV)~Zi ^ ݠc7( +|Rzms|\أù]6j4 |`_SnUЍ;>)qиqnn>(|δNn)d*[14iY8iH^) +U)w}d~8qlVe7FyNSM +!u.ImWc/?Fƺ Q]Nlv~(o.}~~SEyzbYNUA¼n5JrC^ߞgM!Kd8+Cц`\r/K`.o?N2X DVFmG>O(1=t43?*䭀pM&VE^9SFuWX?8GrO K)0@{Q&=wKapOµޒ\tus_`iy IhLFt!'Y'n}{ b`=7 O+۷ WCmOc +7%-NKDyk&qqTAC9 9ˬQɑd3_ڒ3Esp݈ܿWQ;|7Z2e +ǥ$6K*2Mn:C r,|u:Z^;{U{J]#[®Rۨ9SjXm"+T9~hog-aL}>ꅮv^aB"]+KevGwqH/lƨA*>2Y3h5+l)W*CG^q`C*B'. vD6I>c,S^TF=e WzbuzI\^0 ḰQj ȻTJ>&m-^/Gs4p'8JN>:qij% wzJԿ.BU}HLR򋈻i -:h> q'CS$@ӛ)s m/ s%P.4y7a9hb0]6;бoXzy`9K'S4'{֯|ls_c3v6lƛ)CFrx۰&S4y>}??]Z!-FԄ܇oN@XJ?',gL3SL+0V̾+wSs,sõ+Xbcb#CFl[AbJ+1|Up +d-)0V+i?_"lcl(他֧}s|"CA b pdWVo`q7r:;"nx1o@=x/owN+|gS9KDxqN{Į&96G.!/}sɻ/w{FrPmlHcs.rߎS=z=~4:ցShv{{vDr]v_qHn˨O^x/K<\ +(*ެ8{yrY0\j`%}^{jk^Et +^b+|Gyyϙ&N>H_dhѧ,h&S~ث`I{X2']U{L緓 ` |zL DP" I=AE5z`ꖗbp|ǿ ;*A }e;TQ 7aw{ ./94g.5%"iT,*{Q~g+W^htSMSO?x\ +oRkר`omOq93KٹejNUӇMnP83P]Qh^ +v#@Z E9X} T&ؽn]n,P_g9~{l|CFTHv[lcϑqOnҘ=>Un|o0[qnF點wԹu.C%>?,iA7k7T['c+;1VTgs2un_\mY`O0 ׄ *0Ai 77G{jT{=j)nN#I25m{X8#3z߬[dno +sʯ7ǂrյĦ =.u2D]:܃9{tMWǿϹ7"t i 3E<:BB^Iz#"5mZV 12vj,Y]ę0R3R{7>o~k48,%k!UvdL,2|g'Qr! &aGh\DBy|O`tϣx;Dj;uG,r.jW >f_;(LAOd2:뷐Dz$kM} Wav؁1@zr·\a sHn"O^Fe8C}hkc%ucヾqFN^Ί\H΋}.Z_ +EGQH݈JnF|n7Pڽs=R1;ֲ}ZV;e t[>&qɉ[0ݮo~Z7dXGJ0}/mn Q; )k]javzuF{G%9H}l}ߧ嘠=j=D{ N;G,"YNaߙ-)Wɠ;?#.1.hoSjT0LBH;hі%j:?jI kh,Wp@f4oH lNshj(뗩XhcŎz27/WyR11w*WYz75;9uk6)9|وS89h)t%oحIABmٚD$BhV]@k)X"%y^&@]8ݮ6%E VA904 댃F7렪cUa*VUU"qGY!]wa X礓(5*͙(6Խ8‥( <ʶ繸~ǣ4`!J +Cou{ +jx~ Ӎ_hn';WeꊏjYc^Ca-}P)*ݟI6r)s/8QH3XM9X{so?@8Q; $"!ӌG'a.d'TR;8v>{v:~Ĝwy>F/b_`~K1_'l$!?}õ!v$ŐC}iW|->(0~~փyE¾trwIY@1{ȸ+Qt +'OHv,8;m|CQU]?3x +F"7[!va9aFt9^m4!lIJ\_CY U 9~gBF˧1[2QhMKeGs +ߒ.+O#G$LQ0Je;ȔP`o8bFg}X?w9%uQ<#UjUQq|T%W^SZqG5 2ʑ&b|t~kBlN/d|rXNe.̗˹n 6NLe-ZAxt}>::෕p9Huyaϻm0/~1cHu#QC|C Br^';\5#(2s6Yd!^P)XB +L,`y@Lfshts# 9>s%vb)I\q D5]orn6 C"!`#qXvvPE!5M7@) q87A[_U(O;(*ajՉ{OMؙK~Ϲ{ݵ%w.~sV=߯e9wr4yyx{( ke_ +.ຉA^{4C-pΠ6*Ę-x7Qg8ϞôyNij;\CD&s~ ߠ{~KUÈahGE_Hd۫s2a޿BϱC|Ľ8j" >8֝3 0 0 0 0 0 0 X=Hd0 0 0 0 qm5a;o{QLHb p*0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |DGzF݁9jx3UYP]?ggr^~gf:j յ{JBP=j<`}C{'\Və_QYRViT5/fV7N=6O=\US\n< |}8jvW[Zm9şOTqʠƇbDm=ImQ|,/#<=NzzuWa@:Iwt5tCgt8)Nu86I :q@uCst(au(ay:0IluptS_YJQz]J(}Ke^y甞Qz\1T_(}EϔDiҗGWWsJ(ݤ)O*ݨt'UFנ{K=UK*+.V:[iNS:@=@ L"]`3 Gloyv`0z1z1z1z1zɍ9.@u P] {&]7`*Xv3K`ߠ<9?80h6[ɡ!{km´'A?gcGJ%1 x0˺ͶuP)vjGAdE L"E7寰]OLJ;kW$:ܹ +i +A[S[)cH2.mZ۰єe%@J;4h-wR|JnF$RAn ^|n-., ]"c3}GHɕbC~U |\/\i29O/弈H Yׂ~?'䣔 ^UDT"پ +RD2>yČ=}gtݙ~gjb1 VG=HC +I42.1!?fF=}j+\soH8ߏ +|]y]0؍};Ǝ6|-6cgqկV?OjHBD١G>9ꢣY'=u,Hיּ팃t KDfMnzI9lL!MGpUb6Da1ryƈ/y Q$*s"*ވ٣[YUrb:| r\ +UվjYp'1f\y\KN n 9L$YM&tI6͓Sw3i[{Hī , T*e~瓥Gfμj~i;L̛ܼiI"7͟I 50kdle5Y)dan&2Dk~M `RmRqO"_ d,V_twO:P;'Sc#xc4Iiev\d*IO{A vo鴾i-n~7ut--$9~H0] >> +startxref +963099 +%%EOF diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-V3_2412.19437.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-V3_2412.19437.pdf new file mode 100644 index 0000000..c486a87 Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-V3_2412.19437.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-V4-ModelCard.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-V4-ModelCard.pdf new file mode 100644 index 0000000..d02fec0 Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-V4-ModelCard.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-V4_Technical_Report.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-V4_Technical_Report.pdf new file mode 100644 index 0000000..308207b Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-V4_Technical_Report.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-VL2_2412.10302.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-VL2_2412.10302.pdf new file mode 100644 index 0000000..ec56ebc Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-VL2_2412.10302.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-VL_2403.05525.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-VL_2403.05525.pdf new file mode 100644 index 0000000..a7646e6 Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeek-VL_2403.05525.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeekMath_2402.03300.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeekMath_2402.03300.pdf new file mode 100644 index 0000000..247efad Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeekMath_2402.03300.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeekMoE_2401.06066.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeekMoE_2401.06066.pdf new file mode 100644 index 0000000..1124d7c Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/DeepSeekMoE_2401.06066.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/Engram.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/Engram.pdf new file mode 100644 index 0000000..f5e67cd Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/Engram.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/Fire-Flyer_2408.14158.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/Fire-Flyer_2408.14158.pdf new file mode 100644 index 0000000..e6d85b6 Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/Fire-Flyer_2408.14158.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/JanusFlow_2411.05820.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/JanusFlow_2411.05820.pdf new file mode 100644 index 0000000..401e5f2 Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/JanusFlow_2411.05820.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/Janus_2410.13848.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/Janus_2410.13848.pdf new file mode 100644 index 0000000..aad6b1f Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/Janus_2410.13848.pdf differ diff --git a/AirPlan/docs/architecture/branch-deepcode-cli/papers/NSA_2502.11089.pdf b/AirPlan/docs/architecture/branch-deepcode-cli/papers/NSA_2502.11089.pdf new file mode 100644 index 0000000..7e7ff45 Binary files /dev/null and b/AirPlan/docs/architecture/branch-deepcode-cli/papers/NSA_2502.11089.pdf differ diff --git a/AirPlan/docs/architecture/branchvibebox/feasibility-plan.md b/AirPlan/docs/architecture/branchvibebox/feasibility-plan.md new file mode 100644 index 0000000..4ef4a9c --- /dev/null +++ b/AirPlan/docs/architecture/branchvibebox/feasibility-plan.md @@ -0,0 +1,738 @@ +# VibeBox Feasibility and Implementation Plan + +Date: 2026-05-26 +Status: Practical implementation plan for the VibeBox downstream branch + +## 1. Feasibility Verdict + +VibeBox is feasible if scoped as an appliance that generates small, local Electron utilities from templates. + +It is not feasible as an unrestricted “any software from any prompt” agent. The product must enforce a constrained scope: + +```text +small local Electron app + + template-based generation + + default high-permission appliance setup + + frontend-design and image-gen capabilities + + full automated workflow testing + + review gates + + ARM Linux packaging/delivery +``` + +Expected timelines: + +| Stage | Estimate | Outcome | +|---|---:|---| +| Prototype | 3–5 weeks | Generates and packages simple Electron tools | +| Partner trial | 6–8 weeks | Background setup/dev/test/review/package on ARM Linux box | +| Stable appliance version | 10–12 weeks | Hardened testing, packaging fallback, diagnostics, user-friendly failure handling | + +## 2. Product Contract + +VibeBox should provide this user experience: + +```text +User: “I want a tool that renames photos by date and lets me preview the result.” + +VibeBox: + 1. asks only blocking product questions, if any + 2. configures the environment silently where allowed + 3. generates a small Electron app + 4. designs the UI and required assets + 5. writes code + 6. runs full automated tests + 7. reviews security/functionality/packaging + 8. packages for ARM Linux + 9. gives the user a runnable app and a simple report +``` + +The user should not supervise implementation. The user may lack computer expertise. + +## 3. Scope Boundaries + +### Accepted by default + +- Small desktop utility +- Local-first app +- Simple filesystem workflows +- Form/data-entry tools +- CSV/JSON/image batch helpers +- Clipboard/notes/todo utilities +- Single-window dashboards +- Simple API client if network access is declared + +### Requires narrowing question + +- vague app idea +- multiple unrelated features +- unclear input/output data +- network access or credentials +- destructive filesystem operations +- system integration beyond app sandbox + +### Refuse or escalate + +- malware, credential theft, stealth, evasion +- destructive system modification +- kernel/driver changes +- large Excel/Photoshop/IDE-like apps +- multi-service cloud systems +- unbounded automation over arbitrary shell commands + +## 4. Architecture Cut from AirCoding + +VibeBox keeps only the minimum needed path. + +```text +Orchestrator + → Executor + → Reviewer/Tester + → Packager + → Delivery Reporter +``` + +No V1 support for: + +- Architecture Designer as a separate agent +- complex TaskGraph / Scheduler +- parallel write workers +- worktree merging +- C++ toolchain +- ExperienceMiner / Curator +- Debug Knowledge Network +- plugin marketplace +- broad multi-language runtime + +## 5. Default Permission Model + +VibeBox is an appliance product and should default to highest-permission automation. + +However, highest permission is bounded by appliance policy: + +```text +Allowed automatically: + - installing approved runtime dependencies + - creating/modifying generated app projects + - running tests/build/package commands + - writing artifacts/reports + - using configured image-gen provider + +Requires explicit user/operator confirmation: + - credentials entry + - network access not implied by the user request + - destructive file operations outside the app workspace + - system-sensitive paths + - shell execution exposed inside generated app +``` + +System dependency installation should use an allowlist controlled by the appliance vendor/operator. + +## 6. Recommended Technology Stack + +### Runtime + +Preferred for V1: + +```text +Node.js runtime for generated apps +Bun or Node.js for the VibeBox agent runtime +``` + +Choose Node for maximum Electron ecosystem compatibility if uncertain. + +### Generated app stack + +```text +Electron +Vite +TypeScript +React +CSS modules or simple Tailwind-like design tokens +Playwright/Electron tests +Electron Builder or Electron Forge +``` + +### Test stack + +```text +Vitest for unit tests +Playwright + Electron for E2E tests +Xvfb or configured display backend for ARM Linux UI automation +``` + +### Packaging + +Primary: + +```text +AppImage arm64 if stable on target box +``` + +Fallback: + +```text +unpacked Electron app + launcher script +``` + +The fallback is important. Packaging should not block delivery if an unpacked app runs reliably. + +## 7. Template Strategy + +VibeBox must be template-first. + +Suggested V1 templates: + +```text +templates/ + file-batch-tool/ + data-table-tool/ + form-entry-tool/ + clipboard-tool/ + notes-todo-tool/ + image-batch-tool/ + api-dashboard-tool/ + single-panel-utility/ +``` + +Each template includes: + +- Electron secure main/preload/renderer structure +- React component skeleton +- local storage helper +- design tokens +- test harness +- Playwright fixtures +- packaging config +- README/report template + +AI should select and fill templates, not build projects from scratch. + +## 8. Built-in Capabilities + +### 8.1 frontend-design + +First-class built-in capability. + +Inputs: + +- user requirement +- selected template +- display size constraints +- novice-user profile + +Outputs: + +- UI layout plan +- component hierarchy +- design tokens +- copywriting +- empty/loading/error states +- screenshot review checklist + +Default design priorities: + +1. clarity over aesthetics +2. large readable controls +3. obvious next action +4. safe defaults +5. clear error messages +6. local-first expectations + +### 8.2 image-gen + +First-class built-in capability. + +V1 should support: + +- app icon generation +- empty-state / placeholder illustration generation +- simple decorative assets +- SVG fallback when bitmap generation is unavailable +- multiple candidate generation if provider supports it + +Provider strategy: + +```text +preferred: configured cloud image provider +fallback: SVG/simple generated asset +deferred: heavy local image model on ARM unless hardware supports it +``` + +Generated assets are artifacts first. They are copied into the app only after internal selection/review. + +### 8.3 electron-test + +First-class built-in capability. + +Required functions: + +- launch generated Electron app in test mode +- interact with UI through Playwright +- test core workflows +- test edge cases +- test persistence/restart when applicable +- capture screenshot/trace artifacts +- launch packaged app or unpacked delivery + +Smoke test alone is insufficient. + +## 9. Testing Policy + +VibeBox users may not be able to diagnose software failures. Therefore, delivery requires full workflow validation. + +Minimum delivery gates: + +1. environment setup passed +2. dependencies installed +3. build passed +4. typecheck passed when TypeScript is used +5. lint passed when configured +6. unit tests passed or skipped with reason +7. integration tests passed for data/file flows +8. E2E tests cover all core user workflows +9. edge cases tested where relevant +10. persistence/restart tested if local data is stored +11. packaged or delivered app launches +12. screenshot evidence captured when display backend exists +13. review report approves delivery + +Core workflow coverage definition: + +```text +For every user-visible requirement, at least one automated test exercises the path. +For every input type, normal / empty / invalid / large input cases are tested where practical. +For storage features, restart recovery is tested. +For delivery, the packaged or unpacked app launch is tested. +``` + +## 10. Review Policy + +Reviewer/Tester pass should use a fixed checklist. + +### Functional review + +- Does the app implement the user request? +- Are any requested features missing? +- Are assumptions clearly reported? + +### UX/design review + +- Is the UI understandable to a novice? +- Are controls readable on the target display? +- Are error states visible and actionable? +- Does screenshot match design intent? + +### Asset review + +- Are generated icons/images appropriate? +- Are assets bundled locally? +- Are missing provider fallbacks acceptable? + +### Security review + +- `contextIsolation: true` +- `nodeIntegration: false` +- preload API is minimal +- no arbitrary shell exposure +- filesystem access scoped to the app's purpose +- network access declared if used + +### Test review + +- Do tests cover all core workflows? +- Are skipped tests justified? +- Are failure artifacts available? + +### Packaging review + +- Does the delivered app launch on the ARM Linux box? +- Is there a fallback launcher if AppImage fails? + +## 11. Doctor / Setup + +Doctor runs at first boot and before generation. + +Checks: + +- ARM Linux architecture +- Node/Bun availability +- npm/pnpm availability +- Electron install ability +- native npm build tools +- frontend-design capability availability +- image-gen provider or fallback availability +- Playwright/Electron automation support +- Xvfb/display backend +- disk space +- workspace write permission +- package cache availability + +Modes: + +```text +prepared appliance: + pre-authorized high-permission setup + run fixes automatically with brief visible status + +unprepared/manual mode: + show fix plan and ask operator before fixing +``` + +## 12. State Layout + +Each generated app is self-contained. + +```text +// + ├── package.json + ├── src/ + ├── tests/ + ├── dist/ + ├── release/ + └── .vibebox/ + ├── project.json + ├── session.db + ├── artifacts/ + ├── reports/ + └── state.json +``` + +Minimum DB tables: + +- `messages` +- `message_drafts` +- `steps` +- `tool_runs` +- `command_runs` +- `artifacts` +- `reports` + +Pipeline steps: + +```text +understand +setup +plan +scaffold +design +asset_generate +implement +test +review +fix +package +deliver +``` + +## 13. Delivery Contract + +Delivery directory: + +```text +/release/ + ├── -arm64.AppImage # if available + ├── unpacked/ # fallback if needed + ├── launch.sh # fallback launcher + ├── README.md + └── vibebox-report.md +``` + +Final report must be non-technical and include: + +- what was built +- how to launch it +- what it can do +- where its data is stored +- tests that passed +- known limitations +- package path +- what VibeBox automatically configured + +## 14. Failure Handling + +If generation fails, VibeBox should not dump raw logs to the user. + +It should provide: + +```text +- simple explanation +- what was attempted +- what failed +- whether retry is possible +- what the user/operator can do next +- diagnostic artifact bundle path +``` + +Automatic retry limits: + +- implementation/test fix cycle: max 2–3 rounds +- dependency setup: max 1 automatic fix attempt per issue +- package fallback: AppImage → unpacked app + launcher + +If still failing, deliver a failure report and preserve artifacts. + +## 15. Implementation Phases + +### Phase 0 — Feasibility spike (3–5 days) + +Goal: prove Electron generation/testing/package path on the ARM box. + +Tasks: + +- choose runtime/package manager +- scaffold one fixed Electron template +- run build/typecheck +- run Playwright/Electron E2E on box +- package AppImage or produce unpacked app +- document environment dependencies + +Exit criteria: + +- a hand-coded sample app can be built, tested, and launched on the target box + +### Phase 1 — Prototype generator (1–2 weeks) + +Tasks: + +- implement Orchestrator linear pipeline +- implement filesystem/shell/template tools +- implement session/artifact logging +- implement one template family +- generate simple app from natural language +- generate tests for golden path +- produce final report + +Exit criteria: + +- user prompt → generated runnable app for 2–3 simple examples + +### Phase 2 — Strong testing/review (1–2 weeks) + +Tasks: + +- add electron-test capability +- add edge-case test generation +- add restart/persistence test +- add reviewer checklist +- add screenshot evidence +- add fix loop + +Exit criteria: + +- generated apps pass workflow tests and review gates before delivery + +### Phase 3 — frontend-design + image-gen (1–2 weeks) + +Tasks: + +- implement frontend-design spec generation +- add design tokens/templates +- add image-gen provider interface +- add SVG fallback +- add asset review + +Exit criteria: + +- generated app includes coherent UI design and usable assets + +### Phase 4 — appliance hardening (2–4 weeks) + +Tasks: + +- doctor/setup automatic fixes +- high-permission appliance policy +- package fallback +- non-technical failure reports +- more templates +- partner trial scenarios + +Exit criteria: + +- partner can use VibeBox on the ARM box with minimal operator intervention + +## 16. Recommended V1 Cut Line + +V1 should include: + +- high-permission appliance setup +- Electron + Vite + TS + React template +- 5–8 templates +- frontend-design +- image-gen provider with SVG fallback +- full workflow Playwright/Electron tests +- review gate +- AppImage or unpacked delivery fallback +- final non-technical report + +V1 should not include: + +- arbitrary app complexity +- local heavy image model unless hardware supports it +- plugin marketplace +- long-term memory/curator +- multi-agent scheduler +- cloud/backend deployment +- unrestricted shell apps + +## 17. Top Risks and Mitigations + +| Risk | Mitigation | +|---|---| +| User asks for too-large app | scope classifier + propose smaller MVP | +| Electron packaging fails on ARM | unpacked app + launcher fallback | +| UI tests flaky on display backend | fixed appliance environment + Xvfb/Wayland profile | +| image-gen unavailable | SVG fallback + design prompt artifact | +| generated app unsafe | fixed Electron security template + security review gate | +| novice user cannot debug failure | non-technical report + preserved diagnostics | +| dependency setup breaks system | allowlisted high-permission setup only | + +## 18. Implementation Decisions + +The following decisions are fixed for VibeBox V1 to avoid delaying implementation. + +### 18.1 Agent Runtime + +**Decision: Bun for the VibeBox agent runtime.** + +Reasons: + +- aligns with AirCoding baseline +- fast startup on appliance +- good TypeScript support +- easy subprocess management +- can still generate Node/Electron apps normally + +The generated Electron apps use Node/Electron runtime as usual; Bun is only the agent/runtime implementation choice. + +### 18.2 Generated App Package Manager + +**Decision: bundled pnpm for generated apps.** + +Reasons: + +- deterministic dependency resolution +- faster installs than npm +- better workspace/cache behavior +- avoids relying on user-installed package manager + +VibeBox should ship or bootstrap a known pnpm version into its appliance cache. + +Fallback: npm may be used only if pnpm bootstrap fails and doctor records the fallback. + +### 18.3 Electron Template Stack + +**Decision: Electron + Vite + TypeScript + React.** + +Reasons: + +- mature Electron template ecosystem +- React is easier for AI-generated UI composition +- TypeScript improves generated-code validation +- Vite gives fast build/dev loop +- Playwright/Electron testing works well with this stack + +Default security posture: + +- `contextIsolation: true` +- `nodeIntegration: false` +- explicit preload bridge +- no arbitrary shell exposure to renderer +- local-first storage + +### 18.4 Image Generation Provider + +**Decision: cloud image provider first, SVG fallback always available.** + +V1 includes a provider interface and default cloud-provider adapter selected by deployment configuration. + +If image provider is unavailable: + +- generate SVG icon/assets +- generate design prompt artifact +- use template placeholder assets +- continue delivery if app functionality is not blocked + +Heavy local image models are not V1 unless the appliance hardware is explicitly provisioned for them. + +### 18.5 Display / UI Test Backend + +**Decision: Xvfb-first controlled display backend for automated tests.** + +Reasons: + +- predictable CI/appliance behavior +- mature with Electron and Playwright +- easier to run headless than Wayland-first automation + +If the target appliance is Wayland-only, provide a configured compatibility path, but V1 test automation assumes Xvfb availability. + +### 18.6 Packaging Default + +**Decision: unpacked app + launcher is the reliability baseline; AppImage is a preferred artifact when available.** + +Delivery order: + +1. Build unpacked Electron app directory. +2. Generate `launch.sh` and verify it starts. +3. Attempt AppImage arm64 packaging. +4. If AppImage fails but unpacked app passes full tests, deliver unpacked app + launcher and report AppImage failure as non-blocking. + +Rationale: delivery of a working tool matters more than a single-file package. + +### 18.7 High-Permission Dependency Installation Allowlist + +**Decision: high-permission setup may automatically install only allowlisted dependencies.** + +Initial ARM Linux allowlist: + +```text +runtime: + - nodejs + - npm + - pnpm bootstrap into VibeBox cache + +build/electron: + - python3 + - make + - gcc/g++ or build-essential equivalent + - git + - unzip + - tar + - xz-utils + - ca-certificates + +ui-test/display: + - xvfb + - libgtk-3 / gtk runtime package + - libnss3 + - libxss1 + - libasound2 or platform equivalent + - libx11-xcb1 + - libxcomposite1 + - libxdamage1 + - libxrandr2 + - libgbm1 + +packaging: + - fuse or fuse3 when AppImage requires it + - desktop-file-utils when available +``` + +Rules: + +- Dependency names are normalized per OS/package manager by Doctor. +- Commands are shown in status, but appliance high-permission mode runs them unless interrupted. +- Credentials, destructive system changes, kernel/driver changes, and non-allowlisted packages require operator confirmation. +- All setup actions are recorded in `.vibebox/reports/setup-report.md` and command artifacts. + +### 18.8 Network Default + +**Decision: generated apps are local-only by default.** + +Network access is allowed only when: + +- the user's request clearly requires it, or +- VibeBox asks and receives product-level approval, or +- the template explicitly declares a safe local-only loopback service. + +Final report must state whether the generated app uses network access. diff --git a/AirPlan/docs/architecture/branchvibebox/vibeboxbaseline.md b/AirPlan/docs/architecture/branchvibebox/vibeboxbaseline.md new file mode 100644 index 0000000..2adada2 --- /dev/null +++ b/AirPlan/docs/architecture/branchvibebox/vibeboxbaseline.md @@ -0,0 +1,545 @@ +# VibeBox Baseline V1 + +Date: 2026-05-26 +Status: Downstream simplified branch of AirCoding Baseline V1 + +VibeBox is a highly simplified AirCoding derivative for an ARM Linux appliance. Its goal is to let non-technical users describe a small desktop utility in natural language, then run environment setup, development, testing, review, packaging, and delivery mostly silently in the background, finally handing the user a usable Electron application. + +This baseline intentionally cuts most of AirCoding's general-purpose architecture to minimize implementation cost, runtime risk, and support burden. + +## 1. Product Goal + +VibeBox should behave like an appliance: + +```text +User describes desired small tool in natural language + → VibeBox asks only blocking product questions, if any + → Runs doctor/setup silently where allowed + → Generates Electron app from approved template + → Implements UI and local logic in the background + → Runs lint/typecheck/test/smoke test + → Reviews generated code + → Fixes issues automatically when possible + → Packages app for ARM Linux + → Delivers runnable app to user with report +``` + +Primary experience target: after the user states the requirement, VibeBox should work in the background and only return when a usable tool is ready, unless a truly blocking product or safety decision is required. + +Target user: non-programmer / beginner. + +Target output: small Electron-based desktop utilities for ARM Linux. + +Typical examples: + +- simple file renamer +- local note/todo app +- clipboard helper +- small form/data-entry utility +- image batch resizer wrapper +- CSV viewer/editor +- local dashboard around simple APIs +- single-purpose internal workflow helper + +Non-goals: + +- large software projects +- multi-language deep toolchains +- C++ build/debug loop +- complex distributed agents +- long-running enterprise workflow automation +- arbitrary system administration +- production SaaS/backend deployment + +## 2. Relationship to AirCoding + +VibeBox reuses AirCoding principles selectively. + +Keep: + +- Claude Code style execution-layer discipline +- Anthropic canonical message format internally +- conservative file edit/diff/update primitives +- local session persistence +- artifact/evidence records +- doctor/setup environment checks +- TUI/HUD or simple appliance UI status display +- review/test before delivery + +Cut or defer: + +- Architecture Designer as a separate agent +- complex Scheduler / TaskGraph / worktree parallelism +- C++ toolchain profile +- multi-language toolchain packages +- network/GUI/static-analysis Air plugin family as first-class components +- ExperienceMiner / Curator +- Debug Knowledge Network +- project migration complexity beyond simple schema versioning +- multi-provider complexity beyond one configured provider +- OpenCode-compatible advanced TUI + +## 3. Core Design Principle + +VibeBox should optimize for appliance reliability over architectural generality. + +Key rule: + +> One user request should produce one small app project through a linear setup → generate → test → review → package → deliver pipeline, with background silent execution as the default. + +The system should not require the user to supervise intermediate development steps. Progress can be visible in status/HUD, but VibeBox should not ask for implementation choices unless the task is blocked. + +No parallel write workers in V1. + +No complex agent hierarchy in V1. + +No automatic architecture replanning loop in V1. + +## 4. Agent Model + +### 4.1 Single Orchestrator + +VibeBox has one main Orchestrator agent. + +Responsibilities: + +- Understand user's natural language request +- Ask only truly blocking product/safety questions +- Choose an app template +- Produce an internal implementation plan without requiring user approval for implementation details +- Run environment setup through doctor/setup according to appliance permission policy +- Drive Executor and Reviewer steps sequentially in the background +- Present final package and usage instructions + +### 4.2 Executor + +Executor can be implemented as a mode of Orchestrator or a simple child process. + +Responsibilities: + +- Scaffold Electron project from template +- Edit files using Claude Code-like execution primitives +- Run npm/pnpm commands +- Run tests and smoke checks +- Produce structured result + +### 4.3 Reviewer/Tester + +Reviewer/Tester can be a separate pass, not a long-lived agent. + +Responsibilities: + +- Inspect generated diff +- Check for obvious security issues +- Verify app matches user request +- Verify tests/smoke test passed +- Produce a concise approval or requested-change report + +V1 pipeline: + +```text +Orchestrator + → Executor + → Reviewer/Tester + → Executor fix pass if needed + → Package + → Deliver +``` + +Maximum retry cycles: 2. + +If still failing, show clear failure report and ask user whether to continue. + +## 5. Execution-Layer Quality Standard + +VibeBox follows AirCoding D-059: execution-layer primitives align with Claude Code for code quality. + +Required behaviors: + +- read before edit +- small exact edits +- no broad rewrites unless scaffolding from template +- no unrelated refactors +- run verification before declaring success +- collect evidence for build/test/package results +- diagnose root cause on failure, not random retries +- explicitly escalate if the requested app is outside supported scope + +This is the most important reuse point from AirCoding. + +## 6. Technology Stack + +Recommended V1 stack: + +```text +Runtime: TypeScript + Bun or Node.js +App target: Electron +Frontend: React + Vite or plain HTML/TS template +Package manager: pnpm or npm +Testing: vitest + Playwright/Electron smoke test +Packaging: electron-builder or electron-forge +Target OS: ARM Linux +``` + +Default app template: + +```text +Electron + Vite + TypeScript + ├── main process + ├── preload bridge + ├── renderer UI + ├── local storage helper + ├── test harness + └── packaging config for ARM Linux +``` + +Security defaults: + +- `contextIsolation: true` +- `nodeIntegration: false` +- explicit preload API +- no remote code execution +- no arbitrary shell command from generated app unless user explicitly requested and approved +- local-first storage by default + +## 7. Project Layout + +Each generated app is self-contained. + +```text +// + ├── package.json + ├── src/ + │ ├── main/ + │ ├── preload/ + │ └── renderer/ + ├── tests/ + ├── dist/ + ├── release/ + └── .vibebox/ + ├── project.json + ├── session.db + ├── artifacts/ + ├── reports/ + └── state.json +``` + +VibeBox may later converge with AirCoding `.air/shared` + `.air/local`, but V1 uses `.vibebox/` for product clarity and isolation. + +## 8. Session and State + +V1 uses one SQLite database per generated project: + +```text +/.vibebox/session.db +``` + +Minimum tables: + +- `messages` +- `message_drafts` +- `steps` +- `tool_runs` +- `command_runs` +- `artifacts` +- `reports` + +No complex TaskGraph tables in V1. + +Pipeline steps are linear: + +```text +clarify +plan +scaffold +implement +test +review +fix +package +deliver +``` + +Artifacts: + +```text +.vibebox/artifacts/ + ├── command-runs/ + ├── screenshots/ + ├── build-logs/ + ├── test-logs/ + ├── review-reports/ + └── packages/ +``` + +## 9. Tool Set + +Minimum built-in tools include frontend design and image generation as first-class VibeBox capabilities, because the target output is a user-facing Electron app and the user may not be able to provide UI/assets manually. + +### Filesystem + +- list files +- read file +- write file +- edit file with exact replacement +- apply patch +- create project from template + +### Shell + +- run command with timeout +- capture stdout/stderr artifacts +- enforce output limits + +### Electron workflow + +- install dependencies +- run dev build +- run typecheck +- run unit tests +- run smoke test +- package app + +### Frontend design + +- generate layout plan from natural language requirement +- choose sensible UI pattern from templates (form, dashboard, list/detail, wizard, utility panel) +- generate component structure and styling tokens +- generate CSS/theme defaults suitable for appliance users +- generate responsive layout for common small displays +- review screenshot against requested UX + +### Image generation / assets + +- generate app icon +- generate placeholder illustrations / empty-state images +- generate simple background or decorative assets when useful +- generate SVG assets when bitmap generation is unavailable +- edit/regenerate assets from user feedback +- store generated assets as artifacts before copying into the app + +### Electron automated testing + +- generate Playwright/Electron tests for all core user workflows +- launch Electron app in controlled test mode +- interact with UI elements, forms, menus, file pickers, and local storage paths where applicable +- test invalid/empty/large input cases relevant to the generated tool +- test restart/persistence behavior when the app stores local data +- capture screenshots and traces for failed UI tests +- run packaged-app launch test after packaging + +### UI evidence + +- launch app under Xvfb/Wayland-compatible mode if available +- capture screenshot +- compare screenshot against generated design intent +- use automated UI test evidence, not only smoke-test evidence + +### Delivery + +- collect release artifact +- generate README / usage instructions +- generate final report + +## 10. Doctor / Setup + +First startup runs read-only doctor. + +Checks: + +- Node.js or Bun availability +- npm/pnpm availability +- Electron install ability +- frontend-design capability availability +- image generation provider availability or local image model availability +- build tools required by native npm modules +- display/Xvfb availability for automated Electron UI tests +- Playwright/Electron automation support +- disk space +- write permissions to workspace +- ARM Linux architecture +- package manager cache availability + +If issues exist: + +- Low-permission mode: ask user before fix +- High-permission appliance mode: run fix automatically after showing a brief visible plan, unless the user interrupts +- First startup on a prepared appliance may be pre-authorized by the vendor/operator; otherwise it shows the fix plan before proceeding + +VibeBox's default appliance deployment should be high-permission and background-oriented. Environment setup is part of the product promise: the user should not need to manually install Node/Electron/build dependencies. + +## 11. User Interaction Model + +VibeBox should minimize technical language and assume the user lacks computer expertise. Default mode is highest-permission appliance automation with strong test/review gates, not an interactive developer workflow. + +User sees: + +```text +1. Understanding your app idea +2. Creating the app +3. Testing the app +4. Reviewing quality +5. Packaging for this box +6. Ready to use +``` + +Clarifying questions should be limited to product choices, for example: + +- app name +- input/output file types +- desired UI layout +- whether data stays local +- whether app may access network + +Do not ask users about implementation details unless necessary. If a decision can be safely inferred from the user's requirement and appliance defaults, VibeBox should choose automatically and report the choice in the final summary. + +## 12. Review and Test Gate + +VibeBox must maximize testing and review strength because the user may not be able to diagnose failures manually. + +Before delivery, VibeBox must have: + +- environment setup result +- dependency install result +- install/build command result +- typecheck result where TypeScript is used +- lint result when configured +- unit test result when tests exist +- integration test result for file/data flows when applicable +- end-to-end UI test result covering the main user workflows +- edge-case test result for invalid/empty/large inputs relevant to the app +- persistence/restart test result when the app stores local data +- frontend design review result +- generated asset review result when image-gen is used +- packaged-app launch test result +- screenshot evidence when a display backend is available +- reviewer report +- final package artifact + +Recommended review passes: + +1. Functional review: does the app match the user's request? +2. Runtime review: does it start and perform the golden path? +3. Full workflow test review: are all core user workflows covered by automated tests? +4. Edge-case review: are invalid/empty/large-input paths tested where relevant? +5. Frontend/design review: does the UI match the generated design intent and stay usable for a novice? +6. Asset review: are generated icons/images appropriate, local, and correctly bundled? +7. Security review: does it avoid dangerous filesystem/network/shell behavior? +8. Packaging review: can the delivered app run on the ARM Linux box? + +If a gate is skipped, final report must say why. Delivery should be blocked if the app cannot be launched, packaged, or validated through all core workflows. Smoke testing alone is insufficient for delivery. + +Delivery is blocked if: + +- app fails to start +- package build fails +- generated app requests unsafe permissions not approved by user +- reviewer finds high-severity issue + +## 13. Packaging and Delivery + +Default package output: + +```text +/release/ + ├── -arm64.AppImage or unpacked Linux directory + ├── README.md + └── vibebox-report.md +``` + +If AppImage is not feasible on the target box, deliver an unpacked Electron app directory plus launcher script. + +Final report includes: + +- what was built +- how to launch +- where files are stored +- tests run +- known limitations +- package path + +## 14. Scope Guards + +VibeBox should refuse or ask for escalation when user asks for: + +- malware, credential stealing, persistence, stealth, evasion +- destructive system modification +- unsupported drivers/kernel changes +- large multi-service systems +- cloud deployment requiring secrets +- apps that require unapproved network or filesystem access + +## 15. Reuse Strategy + +Reuse strongly from AirCoding: + +- execution-primitives aligned with Claude Code +- Anthropic canonical message handling +- ToolResult / ArtifactRef / EvidenceRef style +- doctor/dependency concepts +- basic session/artifact persistence + +Reuse from OpenCode: + +- optional TUI style if VibeBox has an operator console +- theme/dialog/status patterns + +Reuse from Codex: + +- shell/patch/test direct loop +- broad tool/capability examples + +Reuse from Claude Skills: + +- packaged workflow templates +- app-generation skill format + +Do not carry over: + +- AirCoding multi-agent scheduler complexity +- C++-specific toolchain +- long-term memory/curator in V1 +- OpenCode business state model + +## 16. MVP Acceptance Criteria + +A VibeBox V1 prototype is acceptable when it can: + +1. Run doctor on the ARM Linux box. +2. Accept a novice user's natural-language app request. +3. Ask at most 3 clarifying questions for a simple app. +4. Scaffold an Electron template. +5. Implement requested UI and local behavior. +6. Run build/typecheck/test or explain skipped gates. +7. Launch the app for a smoke test and capture evidence. +8. Run a review pass and fix at least one round of issues. +9. Package the app for ARM Linux or deliver a runnable unpacked app. +10. Produce a final user-friendly report. + +## 17. Explicit Differences from AirCoding Baseline V1 + +| Area | AirCoding | VibeBox | +|---|---|---| +| Target | General coding agent, C++ first | Appliance for small Electron apps | +| User | Developer | Beginner/non-programmer | +| Agent model | Main + Architect + Scheduler + Workers | Linear Orchestrator + Executor + Reviewer | +| State layout | `.air/shared` + `.air/local` | `.vibebox/` per generated app | +| Toolchain | multi-language, C++ deep first | Electron/Node only | +| Parallelism | write-area/worktree capable | none in V1 | +| Memory | Project Rules + ExperienceMiner + Curator | minimal session memory only | +| Debug knowledge | structured local DB | not in V1 | +| UI assets | optional capability | useful for app UI generation | + +## 18. Fixed V1 Implementation Decisions + +Detailed rationale lives in `feasibility-plan.md`. + +1. **Agent runtime**: Bun. +2. **Generated app stack**: Electron + Vite + TypeScript + React. +3. **Package manager**: bundled pnpm, npm fallback only if doctor records the fallback. +4. **Image generation**: cloud image provider first, SVG/design-prompt fallback always available. +5. **Display/test backend**: Xvfb-first controlled backend for automated Electron UI tests. +6. **Packaging**: unpacked app + launcher is the reliability baseline; AppImage arm64 is preferred when available. +7. **Permissions/setup**: default high-permission appliance mode with an allowlisted dependency installation set. +8. **Network**: generated apps are local-only by default unless the user request clearly requires network access or the user approves it. +9. **Testing**: smoke test alone is insufficient; V1 requires full workflow E2E tests for core user requirements. diff --git a/AirPlan/docs/architecture/c4/code-view.md b/AirPlan/docs/architecture/c4/code-view.md new file mode 100644 index 0000000..913663a --- /dev/null +++ b/AirPlan/docs/architecture/c4/code-view.md @@ -0,0 +1,858 @@ +# C4 Code View and UML Class Model + +Date: 2026-05-27 +Status: Formal V1 code-view design for AirCoding V1.0.0 Alpha skeleton + +This document refines `AirPlan/docs/architecture/c4/module.md` from container/module view into package-level code structure, class/service responsibilities, UML class diagrams, and implementation boundaries. + +Canonical TypeScript interface contracts are defined in `AirPlan/docs/architecture/interface-contracts-v1.md`. + +## 1. Code View Scope + +The V1.0.0 Alpha code view covers these packages: + +```text +packages/contracts +packages/cli +packages/runtime +packages/llm +packages/toolchain-cpp +packages/tui +``` + +The code view is implementation-facing but remains architecture-only. It defines expected classes/interfaces and relationships; exact file names may be adjusted during implementation if contracts and dependencies remain stable. + +## 2. Package Dependency Diagram + +```plantuml +@startuml +skinparam componentStyle rectangle + +package "packages/contracts" as contracts +package "packages/cli" as cli +package "packages/runtime" as runtime +package "packages/llm" as llm +package "packages/toolchain-cpp" as cpp +package "packages/tui" as tui + +cli --> runtime +cli --> tui +cli --> llm +cli --> cpp + +runtime --> contracts +runtime --> llm : adapter interfaces +runtime ..> cpp : capability registration boundary + +llm --> contracts +cpp --> contracts +tui --> contracts +runtime --> llm : ProviderManager facade/API + +@enduml +``` + +Rules: + +1. `contracts` must have no implementation-package dependencies. +2. `runtime` must not import `tui`. +3. `tui` must depend only on `contracts` and a narrow `ProjectionClient`/UI API boundary; it must not import runtime private services, query SQLite, or subscribe to EventBus directly. +4. `toolchain-cpp` exposes tools through capability registration, not direct runtime coupling. +5. `llm` owns provider adapters, model config, provider conversion, and ProviderManager implementation; `runtime` owns prompt assembly and calls LLM through the provider facade/API. + +## 3. Contracts Package Code View + +Expected directory: + +```text +packages/contracts/src/ + index.ts + ids.ts + runtime.ts + event.ts + ipc.ts + task.ts + worker-result.ts + tool.ts + artifact.ts + evidence.ts + project.ts + provider.ts + permission.ts + ui.ts + error.ts + capability.ts + platform.ts +``` + +### UML + +```plantuml +@startuml +interface RuntimeEvent { + id: UUID + type: string + version: number + timestamp: ISOTimeString + session_id: SessionID + project_id?: ProjectID + source: EventSource + route: string[] + payload: T +} + +interface TaskSpec { + id: TaskID + type: TaskType + title: string + description: string + acceptance_criteria: string[] + scope: TaskScope + dependencies: TaskDependencySpec[] + verification: VerificationPolicy + constraints: TaskConstraints + context_refs: TaskContextRefs + output_contract: WorkerOutputContract +} + +interface WorkerResult { + task_id: TaskID + agent_id: AgentID + agent_type: AgentType + status: WorkerStatus + summary: string + changed_files: string[] + artifacts: ArtifactRef[] + verification: VerificationResult[] + risks: Risk[] + follow_up_tasks: FollowUpTask[] + evidence_refs: EvidenceRef[] + result: T +} + +interface ToolDefinition { + name: string + version: number + description: string + input_schema: JsonSchema + output_schema: JsonSchema + category: ToolCategory + permissions: ToolPermissionSpec + streaming: boolean +} + +interface ProviderCapabilityMatrix +interface AirError +interface ArtifactRef +interface EvidenceRef +interface PermissionDecision +interface ProjectionSnapshot +interface CapabilityManifestV1 + +RuntimeEvent --> EventSource +TaskSpec --> WorkerResult : output contract +WorkerResult --> ArtifactRef +WorkerResult --> EvidenceRef +ToolDefinition --> PermissionDecision +AirError --> EvidenceRef +@enduml +``` + +### Contract Ownership + +| Contract | File | Primary consumers | +|---|---|---| +| IDs and aliases | `ids.ts` | all packages | +| RuntimeEvent/EventSource | `event.ts` | EventStore, EventBus, IPC, ProjectionStore | +| TaskSpec | `task.ts` | Scheduler, workers, ContextAssembler | +| WorkerResult | `worker-result.ts` | workers, Scheduler, Main Agent | +| ToolDefinition/ToolResult | `tool.ts` | ToolRegistry, capabilities, workers | +| ArtifactRef/EvidenceRef | `artifact.ts`, `evidence.ts` | ArtifactStore, EvidenceStore, reports | +| ProviderCapabilityMatrix | `provider.ts` | ProviderManager, Scheduler, Doctor | +| AirError/ErrorKind | `error.ts` | tools, Scheduler, agents, UI | +| IpcMessage/ControlMessage | `ipc.ts` | WorkerManager, child workers | +| PermissionDecision | `permission.ts` | PermissionEngine, ToolRegistry, UI | +| ProjectionSnapshot | `ui.ts` | ProjectionStore, TUI/HUD | +| CapabilityManifestV1 | `capability.ts` | CapabilityRegistry, Doctor | + +## 4. Runtime Package Code View + +Expected directory: + +```text +packages/runtime/src/ + index.ts + app/ + RuntimeApp.ts + ServiceRegistry.ts + config/ + ConfigLoader.ts + ResourceLoader.ts + project/ + ProjectLocator.ts + ProjectInitializer.ts + ProjectStore.ts + storage/ + DatabaseManager.ts + MigrationRunner.ts + repositories/ + events/ + EventBus.ts + EventStore.ts + EventIngestor.ts + EventSchemaRegistry.ts + sessions/ + SessionManager.ts + SessionStore.ts + scheduler/ + Scheduler.ts + TaskGraph.ts + WavePlanner.ts + RetryPlanner.ts + WorkspaceManager.ts + AgentMonitor.ts + workers/ + WorkerManager.ts + WorkerProcess.ts + WorkerProtocol.ts + roles/ + tools/ + ToolRegistry.ts + BuiltInToolRegistrar.ts + fs/ + shell/ + git/ + project/ + artifact/ + context/ + permission/ + doctor/ + security/ + PermissionEngine.ts + PathClassifier.ts + CommandRiskAnalyzer.ts + SecretRedactor.ts + capabilities/ + CapabilityRegistry.ts + CapabilityManifestValidator.ts + context/ + ContextAssembler.ts + PromptLayerLoader.ts + CompactionPolicy.ts + artifacts/ + ArtifactStore.ts + EvidenceStore.ts + knowledge/ + DebugKnowledgeStore.ts + LearnedMemoryStore.ts + projection/ + ProjectionStore.ts + projections/ + doctor/ + DoctorService.ts + checks/ + logging/ + Logger.ts + DeveloperLogEncryptor.ts + agents/ + main/ + architecture/ +``` + +### Runtime Service UML + +```plantuml +@startuml +class RuntimeApp { + +start(options): Promise + +shutdown(): Promise +} + +class ServiceRegistry { + +get(token): T + +register(token, service): void +} + +class ProjectStore { + +open(root): Promise + +initialize(root): Promise +} + +class SessionManager { + +openSession(project, options): Promise + +closeSession(sessionId): Promise +} + +class DatabaseManager { + +open(path): DatabaseHandle + +transaction(fn): Promise +} + +class MigrationRunner { + +migrate(db): Promise +} + +class EventStore { + +append(event): Promise + +query(filter): Promise +} + +class EventIngestor { + +ingest(event): Promise + +ingest_ephemeral(event): Promise +} + +class EventBus { + +publish(event): void + +subscribe(filter, handler): Subscription +} + +class ProjectionStore { + +hydrate(sessionId): Promise + +apply(event): void + +snapshot(): ProjectionSnapshot +} + +RuntimeApp --> ServiceRegistry +RuntimeApp --> ProjectStore +RuntimeApp --> SessionManager +SessionManager --> DatabaseManager +DatabaseManager --> MigrationRunner +EventIngestor --> EventStore : durable events +EventIngestor --> EventBus : ephemeral events +EventStore --> DatabaseManager +EventStore --> EventBus : publishes after commit +ProjectionStore --> SessionStore : hydrate via repositories +ProjectionStore --> EventBus : subscribes to live events +@enduml +``` + +### Scheduler UML + +```plantuml +@startuml +class Scheduler { + +create_tasks(session_id, specs): Promise + +add_dependency(session_id, task_id, dependency): Promise + +load_graph(session_id): Promise + +run_until_idle(session_id): Promise + +cancel_task(task_id, reason): Promise + -plan_wave(graph): SchedulerWavePlan + -dispatch(wave): Promise + -collect_results(): Promise +} + +class TaskGraph { + +tasks: Map + +dependencies: TaskDependencyRecord[] + +getRunnableTasks(): TaskNode[] + +markTerminal(taskId, status): void +} + +class WavePlanner { + +plan(graph, resources): SchedulerWavePlan +} + +class RetryPlanner { + +decide(task, attempts, error): RetryDecision +} + +class WorkspaceManager { + +createWorkspace(plan): Promise + +mergeWorkspace(workspaceId): Promise + +cleanupWorkspace(workspaceId): Promise +} + +class AgentMonitor { + +recordHeartbeat(event): void + +detectLostAgents(): Promise + +enforceTimeouts(): Promise +} + +class WorkerManager { + +spawn(taskSpec, contextPack): Promise + +cancel(agentId, reason): Promise +} + +class WorkerProcess { + +agent_id: AgentID + +pid?: number + +send(envelope): void + +on_message(handler): void +} + +Scheduler --> TaskGraph +Scheduler --> WavePlanner +Scheduler --> RetryPlanner +Scheduler --> WorkspaceManager +Scheduler --> AgentMonitor +Scheduler --> WorkerManager +Scheduler --> EventStore +Scheduler --> ContextAssembler +WorkerManager --> WorkerProcess +@enduml +``` + +### Tool/Permission UML + +```plantuml +@startuml +class ToolRegistry { + +register(definition, executor): void + +call(name, input, context): Promise + +list(): ToolDefinition[] +} + +class PermissionEngine { + +evaluate(request): Promise + +record(decision, context): Promise +} + +class PathClassifier { + +classify(path, projectRoot): PathRiskClassification +} + +class CommandRiskAnalyzer { + +analyze(command, cwd): CommandRiskAnalysis +} + +class CapabilityRegistry { + +discover(): Promise + +validate(manifest): Promise + +enable(capability_id): Promise + +disable(capability_id): Promise + +register_tools(tool_registry): Promise +} + +class DoctorService { + +run(input): Promise + +checkCapability(capability): Promise +} + +ToolRegistry --> PermissionEngine +ToolRegistry --> EventIngestor +ToolRegistry --> ArtifactStore +PermissionEngine --> PathClassifier +PermissionEngine --> CommandRiskAnalyzer +PermissionEngine --> EventIngestor +CapabilityRegistry --> ToolRegistry : registers enabled tools +DoctorService --> CapabilityRegistry : reads manifests/checks dependencies +@enduml +``` + +### Context/Agent UML + +```plantuml +@startuml +class ContextAssembler { + +assemble(input): Promise + -loadLayers(profile): Promise + -fitBudget(context): BudgetFitResult +} + +class PromptLayerLoader { + +loadRuntimeInvariant(): PromptLayer + +loadRole(role): PromptLayer + +loadProjectRules(project): PromptLayer[] +} + +class MainAgent { + +handleUserMessage(message): Promise + +presentProgress(): Promise + +presentBlocker(blocker): Promise +} + +class ArchitectureDesigner { + +assessImpact(change): Promise + +updateArchitectureDocs(update): Promise +} + +interface ProviderManager { + +select_model(requirement): Promise + +complete(request): AsyncIterable +} + +ContextAssembler --> PromptLayerLoader +MainAgent --> ContextAssembler +MainAgent --> ProviderManager : LLM facade from packages/llm +MainAgent --> Scheduler +ArchitectureDesigner --> ContextAssembler +ArchitectureDesigner --> ProviderManager : LLM facade from packages/llm +ArchitectureDesigner --> EventIngestor + +class DebugKnowledgeStore { + +insert(record): Promise + +lookup_by_signature(sig): Promise + +lookup_by_task(task_id): Promise + +update(id, patch): Promise +} + +class LearnedMemoryStore { + +insert(memory): Promise + +lookup_by_type(type): Promise + +update_status(id, status): Promise + +scan_stale(): Promise +} + +class CompactionPolicy { + +should_compact(messages, budget): boolean + +compact(messages, target): Promise +} + +ExperienceMinerRole --> LearnedMemoryStore +DebuggerRole --> DebugKnowledgeStore +ContextAssembler --> CompactionPolicy +@enduml +``` + +## 5. LLM Package Code View + +Expected directory: + +```text +packages/llm/src/ + index.ts + ProviderManager.ts + ModelConfigLoader.ts + CapabilityMatrix.ts + ConversionReport.ts + adapters/ + AnthropicAdapter.ts + OpenAICompatibleAdapter.ts + canonical/ + AnthropicCanonical.ts + ToolUseConverter.ts + StreamNormalizer.ts +``` + +### UML + +```plantuml +@startuml +interface ProviderAdapter { + +provider_id: string + +list_models(): Promise + +validate_model(model_id): Promise + +complete(input): AsyncIterable + +count_tokens?(input): Promise +} + +class ProviderManager { + +load_config(): Promise + +select_model(requirement): Promise + +complete(input): AsyncIterable +} + +class ModelConfigLoader +class CapabilityMatrixRegistry +class AnthropicAdapter +class OpenAICompatibleAdapter +class AnthropicCanonicalConverter +class StreamNormalizer + +ProviderManager --> ProviderAdapter +ProviderManager --> ModelConfigLoader +ProviderManager --> CapabilityMatrixRegistry +AnthropicAdapter ..|> ProviderAdapter +OpenAICompatibleAdapter ..|> ProviderAdapter +OpenAICompatibleAdapter --> AnthropicCanonicalConverter +ProviderAdapter --> StreamNormalizer +@enduml +``` + +## 6. Toolchain C++ Package Code View + +Expected directory: + +```text +packages/toolchain-cpp/src/ + index.ts + capability.ts + CppToolRegistrar.ts + detect/ + CppProjectDetector.ts + build/ + CMakeConfigurator.ts + CppBuilder.ts + test/ + CppTestRunner.ts + analysis/ + CppcheckRunner.ts + ClangdClient.ts + DiagnosticParser.ts +``` + +### UML + +```plantuml +@startuml +class CppToolRegistrar { + +register(toolRegistry): void +} + +class CppProjectDetector { + +detect(projectRoot): Promise +} + +class CMakeConfigurator { + +configure(input): Promise +} + +class CppBuilder { + +build(input): Promise +} + +class CppTestRunner { + +runTests(input): Promise +} + +class CppcheckRunner { + +run(input): Promise +} + +class ClangdClient { + +query(input): Promise +} + +class DiagnosticParser { + +parse_compiler_output(output): Diagnostic[] + +semantic_signature(diagnostic): string +} + +CppToolRegistrar --> CppProjectDetector +CppToolRegistrar --> CMakeConfigurator +CppToolRegistrar --> CppBuilder +CppToolRegistrar --> CppTestRunner +CppToolRegistrar --> CppcheckRunner +CppToolRegistrar --> ClangdClient +CMakeConfigurator --> DiagnosticParser +CppBuilder --> DiagnosticParser +CppTestRunner --> DiagnosticParser +CppcheckRunner --> DiagnosticParser +@enduml +``` + +## 7. TUI Package Code View + +Expected directory: + +```text +packages/tui/src/ + index.ts + TuiApp.tsx + ProjectionClient.ts + components/ + SessionView.tsx + TaskListView.tsx + AgentStatusView.tsx + ToolRunView.tsx + DiffView.tsx + EvidenceView.tsx + PermissionPrompt.tsx + BlockerReport.tsx + HudView.tsx + theme/ + theme.ts + keymap/ + keymap.ts +``` + +### UML + +```plantuml +@startuml +class TuiApp { + +start(): void + +stop(): void +} + +class ProjectionClient { + +subscribe(handler): Subscription + +snapshot(): ProjectionSnapshot +} + +class SessionView +class TaskListView +class AgentStatusView +class ToolRunView +class EvidenceView +class PermissionPrompt +class BlockerReport +class HudView + +TuiApp --> ProjectionClient +TuiApp --> SessionView +TuiApp --> TaskListView +TuiApp --> AgentStatusView +TuiApp --> ToolRunView +TuiApp --> EvidenceView +TuiApp --> PermissionPrompt +TuiApp --> BlockerReport +TuiApp --> HudView +@enduml +``` + +Rules: + +1. UI components render projections only. +2. Permission prompts emit user decisions through the narrow runtime UI command API, not private runtime services. +3. UI never mutates domain tables directly. +4. UI never imports `packages/runtime/src/*` private implementation modules. +5. Diff/evidence views must link back to artifact/evidence refs. + +## 8. CLI Package Code View + +Expected directory: + +```text +packages/cli/src/ + index.ts + commands/ + run.ts + init.ts + doctor.ts + provider.ts + e2e.ts + release.ts + bootstrap/ + createRuntime.ts + loadConfig.ts +``` + +### UML + +```plantuml +@startuml +class CliEntrypoint { + +main(argv): Promise +} + +class RunCommand +class InitCommand +class DoctorCommand +class ProviderCommand +class E2ECommand +class ReleaseCommand +class RuntimeFactory { + +create(options): Promise +} + +CliEntrypoint --> RunCommand +CliEntrypoint --> InitCommand +CliEntrypoint --> DoctorCommand +CliEntrypoint --> ProviderCommand +CliEntrypoint --> E2ECommand +CliEntrypoint --> ReleaseCommand +RunCommand --> RuntimeFactory +InitCommand --> RuntimeFactory +DoctorCommand --> RuntimeFactory +@enduml +``` + +## 9. Repository Interface Code View + +Domain repositories live under `packages/runtime/src/storage/repositories/`. + +```plantuml +@startuml +interface SessionRepository +interface MessageRepository +interface EventRepository +interface TaskRepository +interface AgentRepository +interface ToolRunRepository +interface CommandRunRepository +interface ArtifactRepository +interface DiagnosticRepository +interface EvidenceRepository +interface WorkspaceRepository +interface SummaryRepository +interface UiStateRepository + +class SessionStore { + +sessions: SessionRepository + +messages: MessageRepository + +events: EventRepository + +tasks: TaskRepository + +agents: AgentRepository + +toolRuns: ToolRunRepository + +commandRuns: CommandRunRepository + +artifacts: ArtifactRepository + +diagnostics: DiagnosticRepository + +evidence: EvidenceRepository + +workspaces: WorkspaceRepository + +summaries: SummaryRepository + +uiState: UiStateRepository +} +@enduml +``` + +Repositories must be thin persistence adapters. Scheduling, permission, and projection logic must not be hidden inside repositories. + +## 10. Worker Role Code View + +```plantuml +@startuml +interface WorkerRole { + +run(taskSpec, contextPack, runtime): Promise +} + +class WorkerRuntime { + +emit(event): void + +callTool(name, input): Promise + +checkpoint(data): Promise +} + +class ExecutorRole +class ReviewerRole +class DebuggerRole +class CompactorRole +class ExperienceMinerRole + +ExecutorRole ..|> WorkerRole +ReviewerRole ..|> WorkerRole +DebuggerRole ..|> WorkerRole +CompactorRole ..|> WorkerRole +ExperienceMinerRole ..|> WorkerRole +WorkerRole --> WorkerRuntime +@enduml +``` + +Role constraints: + +| Role | Write access | Required output | +|---|---|---| +| Executor | scoped project writes | ExecutorResult in WorkerResult | +| Reviewer | read-only | ReviewerResult | +| Debugger | scoped writes only when assigned | DebuggerResult | +| Compactor | summaries/artifacts only | CompactorResult | +| ExperienceMiner | candidates/rules/skills only when assigned | ExperienceMinerResult | + +## 11. State Ownership Rules + +| State | Owner | Access rule | +|---|---|---| +| session DB | SessionStore/EventStore | runtime services only | +| live events | EventBus | runtime services publish/subscribe | +| UI projections | ProjectionStore | TUI read only | +| artifacts | ArtifactStore | tools/workers via runtime API | +| evidence refs | EvidenceStore | reports/reviews/debug via runtime API | +| tasks/agents | Scheduler | repositories are storage only | +| permission decisions | PermissionEngine | ToolRegistry requests decisions | +| model config | ProviderManager | runtime/Doctor read through API | +| project rules | ContextAssembler/ProjectStore | workers receive context excerpts | + +## 12. Implementation Cut Lines + +V1.0.0 Alpha implementation must create public interfaces matching `interface-contracts-v1.md`. Classes may be implemented as functions/modules where idiomatic TypeScript is simpler, but module ownership, dependency direction, and service boundaries must remain intact. + +Do not implement: + +```text +TUI direct DB access +worker direct SQLite writes +capability direct dependency install +provider adapter changing prompt semantics silently +tool execution without PermissionEngine +repositories containing scheduling policy +``` diff --git a/AirPlan/docs/architecture/c4/module.md b/AirPlan/docs/architecture/c4/module.md new file mode 100755 index 0000000..8bb39e3 --- /dev/null +++ b/AirPlan/docs/architecture/c4/module.md @@ -0,0 +1,356 @@ +# C4 Module + +Date: 2026-05-27 +Status: Formal C4/module view for AirCoding V1 architecture + +Detailed C4 code view and UML class model are defined in `AirPlan/docs/architecture/c4/code-view.md`. + +## 1. System Context + +AirCoding is a local AI coding agent/runtime operated by a developer in a project workspace. + +```text +Developer + → AirCoding CLI/TUI + → local project files and .air state + → configured LLM providers + → local toolchains/build systems/test runners +``` + +External actors/systems: + +| Actor/System | Relationship | +|---|---| +| Developer | gives requirements, approves decisions, reviews progress/results | +| Local project | source files, build/test outputs, `.air` state | +| LLM providers | Anthropic/OpenAI-compatible model calls through adapters | +| OS shell/toolchain | build, test, static analysis, debug, doctor fixes | +| Git | status/diff/worktree/merge/backup repository | +| Display/network subsystems | optional GUI/network evidence collection | + +## 2. Container View + +```text ++-------------------+ +| Developer | ++---------+---------+ + | + v ++-------------------+ +-------------------+ +| packages/cli | ----> | packages/tui | +| startup/doctor | | OpenTUI/Solid UI | ++---------+---------+ +---------+---------+ + | ^ + v | ++------------------------------------------------+ +| packages/runtime | +| Main Agent, Architecture Designer, Scheduler, | +| EventStore, ToolRegistry, PermissionEngine, | +| ContextAssembler, ArtifactStore, Projection | ++----+-------------+-------------+---------------+ + | | | + v v v ++-----------+ +-------------+ +-------------------+ +| packages/ | | packages/ | | child worker | +| llm | | toolchain- | | Bun processes | +| providers | | cpp | | NDJSON IPC | ++-----+-----+ +------+------+ +---------+---------+ + | | | + v v v ++-----------+ +-------------+ +-------------------+ +| LLM APIs | | OS tools | | project .air DB | +| | | CMake/etc | | artifacts/files | ++-----------+ +-------------+ +-------------------+ +``` + +## 3. Package Dependency View + +```text +packages/contracts + ↑ + ├── packages/runtime + ├── packages/tui + ├── packages/llm + └── packages/toolchain-cpp + +packages/cli + ├── runtime + ├── tui + ├── llm + └── toolchain-cpp + +packages/runtime + ├── contracts + ├── llm interfaces/adapters + └── toolchain-* via registry/capability boundary + +packages/tui + ├── contracts + └── ProjectionStore client/view-models +``` + +Rules: + +1. `contracts` has no dependency on implementation packages. +2. `runtime` does not depend on `tui`. +3. `tui` consumes `ProjectionClient`/projection contracts, not runtime internals, DB, or EventBus directly. +4. `toolchain-*` registers capabilities/tools; runtime invokes through ToolRegistry. +5. `llm` owns ProviderManager, provider adapters, model config, and provider conversion; runtime owns prompt assembly semantics and calls LLM through the provider facade. +6. `Scheduler → WorkerManager`, `EventIngestor → EventStore/EventBus`, `ProjectionStore → EventBus`, `DoctorService → CapabilityRegistry`, and `CapabilityRegistry → ToolRegistry` are one-way dependencies. + +## 4. Runtime Component View + +| Component | Responsibility | Public Interfaces | Dependencies | Data Ownership | Quality Notes | +|---|---|---|---|---|---| +| CLI Bootstrap | command entrypoint, config/resource loading, project open/init | CLI commands, startup API | runtime, tui, llm, toolchain-cpp | none long-term | startup smoke and doctor tests | +| Main Agent Shell | user-facing conversation/routing/escalation | MainAgent API, UI channel | ContextAssembler, Scheduler, Architecture Designer, LLM | messages via SessionStore | must remain responsive | +| Architecture Designer | architecture planning, impact assessment, ADR/C4/plan sync | architecture assessment/update API | ContextAssembler, LLM, plan docs | architecture docs | no implementation code edits | +| Scheduler | TaskGraph, waves, retries, workspaces, child dispatch | scheduler service API | EventIngestor, SessionStore, ContextAssembler, WorkerManager | tasks/agents/workspaces/attempts | restart recovery tests required | +| WorkerManager | spawn/monitor child Bun processes over NDJSON | process lifecycle API | Scheduler-owned API, OS process APIs | agents runtime metadata | heartbeat/timeout tests | +| EventIngestor | runtime event intake and durable/ephemeral routing | ingest / ingest_ephemeral | EventStore, EventBus, schema registry | none directly | ingestion tests required | +| EventBus | live event pub/sub | subscribe/publish | none; services publish through EventIngestor/EventStore | ephemeral only | no recovery source-of-truth | +| EventStore | durable event validation and transactional projection | append event, query event | SQLite, schema validators | `events` and domain updates | transaction tests required | +| SessionStore | domain repositories for session DB | repository APIs | SQLite | messages/tasks/tool runs/etc | schema migration tests | +| ToolRegistry | schema-validated tool dispatch | register/call/list tools | PermissionEngine, EventIngestor, ArtifactStore | tool run lifecycle | tool contract tests | +| PermissionEngine | path/command/network/credential decisions | evaluate/request/record | security config, realpath, command analyzer, EventIngestor | permission decisions/events | policy tests required | +| CapabilityRegistry | load/validate/enable capabilities | register capability/tools | ToolRegistry | capability config/cache refs | manifest validation tests | +| ContextAssembler | layered prompt/context construction | assemble context | SessionStore, ArtifactStore, rules, summaries | context artifacts/summaries | omission/conflict tests | +| ArtifactStore | temp-write, rename, hash, DB row/event request, URI | create/read artifact | filesystem, EventIngestor, SessionStore | artifacts tree/table | crash/orphan tests | +| EvidenceStore | claim-linked evidence references | create/query evidence | ArtifactStore, diagnostics | evidence_refs | report traceability tests | +| ProjectionStore | TUI/HUD view model from DB + live events | hydrate/subscribe/query projections | SessionStore, EventBus | derived UI state | not source-of-truth | +| ProviderManager | provider/model config, selection, adapter dispatch | complete/list/select model | llm adapters, capability matrix | provider metadata only | lives in `packages/llm`; runtime calls facade | +| DoctorService | environment/capability/dependency checks/fixes | doctor.run tool/API | CapabilityRegistry, PermissionEngine, shell tools | doctor artifacts/events | read-only startup test | + +## 5. Worker Component View + +Each worker runs in an independent Bun child process. + +```text +Parent Scheduler + → agent.start control message + → Worker runtime bootstrap + → role-specific loop + → tool calls through parent/runtime protocol + → RuntimeEvents and WorkerResult +``` + +| Worker | Writes code? | Primary input | Primary output | +|---|---:|---|---| +| Executor | yes, scoped | TaskSpec, ContextPack | Executor WorkerResult, diff/artifacts/evidence | +| Reviewer | no | diff/artifacts/plan/evidence | review report, risks, follow-up tasks | +| Debugger | yes if assigned | failure evidence, logs, diagnostics | diagnosis, fix or blocker, debug record | +| Compactor | no project code | message range snapshot, rules | summary artifact and `summary.created` | +| ExperienceMiner | rules/skills only if assigned | verified evidence/patterns | memory/skill/rule candidate | + +## 6. Data Store View + +```text +session.db + schema_meta + sessions + messages + message_drafts + events + tasks + task_dependencies + task_attempts + agents + tool_runs + command_runs + artifacts + diagnostics + evidence_refs + workspaces + summaries + ui_state +``` + +Project-level DBs: + +```text +/.air/local/debug-records.db +/.air/local/learned-memory.db +``` + +File-backed stores: + +```text +/.air/shared/project.json +/.air/shared/rules/*.md +/.air/shared/plan/* +/.air/local/sessions//artifacts/* +/.air/local/backups/* +``` + +## 7. Key Runtime Sequences + +### 7.1 Startup / Resume + +```text +CLI + → PlatformDetector + → ConfigLoader + → ProjectStore.openOrInit + → DoctorService.run(read_only) + → SessionStore.open + → EventStore.recover + → ProjectionStore.hydrate + → TUI.start + → MainAgent.ready +``` + +### 7.2 User Request to Worker Execution + +```text +TUI + → MainAgent receives user message + → SessionStore inserts message + → MainAgent classifies intent + → Architecture Designer if design needed + → Scheduler loads/creates tasks + → Scheduler plans wave + → ContextAssembler assembles ContextPack + → WorkerManager spawns Executor/Reviewer/Debugger + → Worker emits IPC tool.call / event / worker.result messages + → parent runtime routes tool.call to ToolRegistry + → ToolRegistry validates and executes tools through PermissionEngine + → EventIngestor routes events to EventStore or EventBus + → EventStore persists durable events/domain rows + → ProjectionStore updates TUI/HUD + → WorkerResult returned + → Scheduler merge/retry/review/complete + → MainAgent reports result +``` + +### 7.3 Tool Call + +```text +Worker/Agent + → IPC tool.call when running in child process, or ToolRegistry.call for in-process runtime tools + → ToolRegistry schema validation + → PermissionEngine.evaluate + → permission prompt if needed + → tool.started event + → command/tool/artifact operations + → tool.completed or tool.failed + → structured ToolResult +``` + +### 7.4 Context Compaction + +```text +ContextAssembler detects budget pressure + → context.compaction.requested + → Scheduler creates compact task + → Compactor receives immutable message range snapshot + → summary artifact and summaries row + → context.compaction.completed + → future contexts use summary + backtracking refs +``` + +### 7.5 Parallel Workspace Merge + +```text +Scheduler plans non-conflicting wave + → git.worktree.create per write task + → workers complete + → workspace.merge.started + → git merge/patch apply + → workspace.merge.completed or workspace.merge.conflicted + → conflict repair/debug/escalation if needed +``` + +## 8. Interface Inventory + +| Interface | Owner | Consumers | +|---|---|---| +| `RuntimeEvent` | contracts/runtime | EventStore, EventBus, workers, ProjectionStore | +| `TaskSpec` | contracts/runtime | Scheduler, workers, ContextAssembler | +| `WorkerResult` | contracts/runtime | workers, Scheduler, Main Agent | +| `ToolDefinition` | contracts/runtime | ToolRegistry, capabilities | +| `ProviderAdapter` | llm | ProviderManager/runtime | +| `ProviderCapabilityMatrix` | contracts/llm | Scheduler, ProviderManager, Doctor | +| `PermissionDecision` | runtime/security | ToolRegistry, Main Agent, EventStore | +| `ArtifactRef` | contracts/runtime | Tool results, WorkerResult, EvidenceStore | +| `EvidenceRef` | contracts/runtime | reports, reviews, debug records | +| `IpcMessage` | contracts/ipc | WorkerManager, child agents | +| `ProjectionSnapshot` | contracts/ui | TUI/HUD | + +## 9. Capability View + +Built-in capability groups: + +| Capability | Tools | +|---|---| +| core-filesystem | `fs.list`, `fs.read`, `fs.write`, `fs.edit`, `fs.patch`, `fs.stat` | +| core-shell | `shell.run`, `process.kill` | +| core-git | `git.status`, `git.diff`, `git.worktree.create`, `git.merge_workspace` | +| core-project | `project.scan`, `project.profile.write` | +| core-artifacts | `artifact.create` | +| core-context | `context.assemble` | +| core-permission | `permission.request` | +| core-doctor | `doctor.run` | +| toolchain-cpp | `cpp.detect`, `cpp.cmake.configure`, `cpp.build`, `cpp.test`, `cpp.static.cppcheck`, `cpp.clangd.query` | +| debug-basic | `debug.run`, `debug.parse_logs` | +| gui-evidence-basic | `gui.screenshot` | +| network-evidence-basic | `network.capture` | + +## 10. Deployment View + +Local single-machine deployment: + +```text +AirCoding binary tarball + bin/air + resources/ + prompts/ + themes/ + capabilities/ + scripts/ + +Runtime process tree + air parent process + child worker process N + child shell/tool processes +``` + +State: + +```text +~/.air/ # global config/cache/logs +/.air/shared/ # project-shareable configuration/plans/rules +/.air/local/ # private sessions/artifacts/workspaces/backups +``` + +## 11. Architecture Decision Boundaries + +Implementation may proceed silently when confined to accepted TaskSpec scope and architecture contracts. + +Escalate when changing: + +```text +public interfaces +DB schema +event/tool/provider contracts +component responsibilities +permission/security assumptions +product behavior/acceptance criteria +platform support promises +``` + +## 12. MVP Skeleton Module Cut + +Initial implementation order should minimize dependency cycles: + +1. `packages/contracts` +2. workspace/build/test harness +3. `runtime` storage/event/artifact foundations +4. `runtime` ToolRegistry/PermissionEngine foundations +5. `llm` provider adapter interface and one provider path +6. child worker IPC skeleton +7. Scheduler minimal state machine +8. filesystem/shell/git/project/artifact/context/doctor tools +9. `toolchain-cpp` MVP tools +10. ProjectionStore and basic TUI/HUD +11. Main Agent/Architecture Designer prompt integration +12. E2E release gate diff --git a/AirPlan/docs/architecture/capability-trust-v1.md b/AirPlan/docs/architecture/capability-trust-v1.md new file mode 100644 index 0000000..d711dcb --- /dev/null +++ b/AirPlan/docs/architecture/capability-trust-v1.md @@ -0,0 +1,352 @@ +# AirCoding Capability Trust Model V1 + +Date: 2026-05-27 +Status: Canonical capability/plugin trust model for V1.0.0 Alpha skeleton + +This document defines how AirCoding trusts, installs, enables, validates, and runs capabilities and plugins. + +Capabilities are tool bundles with dependencies, triggers, evidence types, and configuration schema. They extend ToolRegistry but do not bypass runtime security. + +## 1. Goals + +Capability trust must: + +1. Allow built-in and future third-party capabilities. +2. Keep dependency installation under Doctor/setup policy. +3. Prevent plugins from bypassing PermissionEngine. +4. Make capability source and permissions visible. +5. Support project-local reproducibility. +6. Keep MVP simple while leaving a path to signed plugins later. + +## 2. Capability Manifest + +Manifest path: + +```text +CAPABILITY.md or capability.json +``` + +V1 canonical JSON shape: + +```ts +interface CapabilityManifestV1 { + schema_version: 1 + capability_id: string + display_name: string + version: string + description: string + publisher?: string + source: CapabilitySource + trust_level: CapabilityTrustLevel + tools: CapabilityToolDeclaration[] + dependencies?: CapabilityDependency[] + permissions: CapabilityPermissionDeclaration + events?: { + produced?: string[] + consumed?: string[] + } + artifact_types?: string[] + config_schema?: unknown + entrypoint?: CapabilityEntrypoint +} +``` + +```ts +type CapabilitySource = + | { kind: "built_in" } + | { kind: "local_path"; path: string } + | { kind: "git"; url: string; ref?: string } + | { kind: "registry"; registry_id: string; package: string; version: string } + +type CapabilityTrustLevel = + | "built_in" + | "project_local" + | "user_installed" + | "verified_publisher" + | "untrusted" +``` + +## 3. Tool Declaration + +```ts +interface CapabilityToolDeclaration { + name: string + version: number + category: ToolCategory + description: string + input_schema: unknown + output_schema: unknown + streaming?: boolean + permissions: { + read_paths?: boolean + write_paths?: boolean + execute?: boolean + network?: boolean + system_sensitive?: boolean + credentials?: boolean + } +} +``` + +Tool names must be namespaced unless built-in: + +```text +. +``` + +Built-in tools reserve short namespaces: + +```text +fs.* +shell.* +git.* +project.* +cpp.* +debug.* +gui.* +network.* +artifact.* +context.* +permission.* +doctor.* +``` + +## 4. Dependency Declaration + +```ts +interface CapabilityDependency { + dependency_id: string + kind: "system_package" | "binary" | "language_package" | "service" | "model" | "provider" | "display_backend" + required: boolean + detector: string + installer?: { + strategy: "doctor_allowlisted" | "manual" | "unsupported" + commands?: string[] + package_names?: string[] + } + permission_notes?: string +} +``` + +Rules: + +1. Capability manifests declare dependencies; they do not install directly. +2. Doctor detects and installs/fixes dependencies according to permission profile. +3. Credentials/system-sensitive dependencies always require explicit confirmation. +4. Install commands must be visible in Doctor plan. + +## 5. Permission Declaration + +```ts +interface CapabilityPermissionDeclaration { + read_project?: boolean + write_project?: boolean + execute_commands?: boolean + network?: boolean + system_sensitive?: boolean + credentials?: boolean + project_outside_write?: boolean + generated_artifacts?: string[] + notes?: string[] +} +``` + +Permission declarations are maximum requested permissions, not grants. Runtime PermissionEngine still evaluates every tool call. + +## 6. Trust Levels + +| Trust level | Meaning | Enable behavior | +|---|---|---| +| `built_in` | shipped with AirCoding release | enabled by default if required | +| `project_local` | stored in project and reviewed by user/team | ask on first enable | +| `user_installed` | installed by user into global AirCoding config | ask on install/enable | +| `verified_publisher` | future signed/verified source | ask with higher confidence | +| `untrusted` | unknown source or modified package | disabled until explicit user approval | + +Trust level affects prompts and defaults; it does not bypass PermissionEngine. + +## 7. Capability Lifecycle + +```text +discovered + → validated + → doctor_checked + → enabled + → registered + → active + → disabled | failed | updated +``` + +### `discovered` + +Runtime finds capability manifests in configured locations. + +### `validated` + +Manifest schema, tool schemas, namespacing, and declared permissions are validated. + +### `doctor_checked` + +Doctor checks dependencies and reports missing/incompatible items. + +### `enabled` + +User/project policy enables the capability. + +### `registered` + +Tools are added to ToolRegistry with permission metadata. + +### `active` + +Tools may be invoked through normal ToolRegistry path. + +## 8. Capability Locations + +Built-in: + +```text +resources/capabilities/ +``` + +Global user-installed: + +```text +~/.air/capabilities/ +``` + +Project-local: + +```text +/.air/shared/capabilities/ +``` + +Cached downloads: + +```text +~/.air/cache/plugins/ +``` + +Project-local capability config: + +```text +/.air/shared/capabilities.yaml +``` + +## 9. Runtime Isolation + +MVP isolation: + +1. Capability tools run as normal runtime tools or child processes under ToolRegistry control. +2. Every filesystem/shell/network action goes through PermissionEngine. +3. Capability code cannot write EventStore directly; it emits tool results/events through runtime APIs. +4. Capability-generated artifacts use ArtifactStore. +5. Capability config is schema-validated. +6. Capability logs go through runtime logging with redaction rules. + +Post-MVP may add process/container sandboxing. + +## 10. Event Namespace Rules + +Built-in event types are defined in `event-registry-v1.md`. + +Capability custom events must be namespaced: + +```text +capability.. +``` + +Rules: + +1. Custom capability events are ephemeral by default. +2. Durable custom events require registration and schema approval. +3. Capability events must not spoof built-in event names. +4. EventStore rejects unknown durable events unless development-mode config explicitly allows them. + +## 11. Update and Integrity Rules + +MVP: + +```text +record source kind/path/ref/version +record manifest hash +ask before updating user-installed or project-local capability +Doctor rechecks dependencies after update +``` + +Post-MVP: + +```text +signature verification +publisher trust store +lockfile with hashes +reproducible capability bundle format +``` + +Project lockfile candidate: + +```text +/.air/shared/capability-lock.json +``` + +## 12. Built-in MVP Capabilities + +Built-in capabilities are part of runtime packages: + +```text +core-filesystem +core-shell +core-git +core-project +core-artifacts +core-context +core-permission +core-doctor +toolchain-cpp +debug-basic +gui-evidence-basic +network-evidence-basic +ui-design-assets-basic +``` + +Only the tools in `tool-registry-v1.md` are required for MVP implementation. Other capability names may exist as placeholders if their tools are not registered yet. + +## 13. Refusal and Disable Conditions + +Disable/block a capability when: + +```text +manifest invalid +tool schema invalid +requested permissions exceed user/project policy +source is untrusted and not approved +dependency install requires disallowed action +capability attempts to bypass ToolRegistry/PermissionEngine +capability emits spoofed built-in events +capability output contains malicious prompt-injection instructions targeting runtime policy +``` + +## 14. V1.0.0 Alpha Cut Line + +V1.0.0 Alpha skeleton must implement: + +1. Capability manifest schema. +2. Built-in capability registration. +3. Namespaced tool validation. +4. Dependency declaration and Doctor check path. +5. Enable/disable config. +6. Permission declaration display. +7. ToolRegistry enforcement for capability tools. +8. Manifest hash/source recording. +9. Rejection of unknown durable capability events. + +Post-MVP: + +```text +signed capability packages +registry publishing +containerized capability execution +capability lockfile enforcement +capability review UI +automatic vulnerability checks +``` diff --git a/AirPlan/docs/architecture/cross-platform-matrix-v1.md b/AirPlan/docs/architecture/cross-platform-matrix-v1.md new file mode 100644 index 0000000..2fec2ae --- /dev/null +++ b/AirPlan/docs/architecture/cross-platform-matrix-v1.md @@ -0,0 +1,217 @@ +# AirCoding Cross-Platform Matrix V1 + +Date: 2026-05-27 +Status: Canonical platform support matrix for V1.0.0 Alpha skeleton + +This document defines MVP platform targets, feature support levels, toolchain assumptions, and release validation requirements. + +## 1. Support Levels + +```ts +type PlatformSupportLevel = + | "tier_1" + | "tier_2" + | "experimental" + | "unsupported" +``` + +| Level | Meaning | +|---|---| +| `tier_1` | release-blocking support; tested before release | +| `tier_2` | intended support; best-effort validation; not always release-blocking | +| `experimental` | may work; no compatibility promise | +| `unsupported` | explicit non-target | + +## 2. MVP Platform Targets + +| Platform | Support level | Notes | +|---|---|---| +| Linux x86_64 | tier_1 | primary development and CI target | +| Linux arm64 | tier_2 | important for appliance/VibeBox lineage and embedded-style testing | +| macOS arm64 | experimental | CLI/runtime likely portable; C++/debug tooling varies | +| macOS x86_64 | experimental | lower priority | +| Windows native | experimental/post-MVP | path/shell/process/debug semantics need dedicated work | +| WSL2 Linux | tier_2 | treated as Linux with Windows filesystem caveats | + +MVP implementation should be Linux-first and avoid hardcoding Linux-only assumptions where simple abstractions are cheap. + +## 3. Runtime Feature Matrix + +| Feature | Linux x86_64 | Linux arm64 | macOS | Windows native | WSL2 | +|---|---|---|---|---|---| +| Bun runtime | tier_1 | tier_2 | experimental | experimental | tier_2 | +| CLI | tier_1 | tier_2 | experimental | experimental | tier_2 | +| OpenTUI/Solid TUI | tier_1 | tier_2 | experimental | experimental | tier_2 | +| SQLite session DB | tier_1 | tier_2 | experimental | experimental | tier_2 | +| NDJSON child processes | tier_1 | tier_2 | experimental | experimental | tier_2 | +| ToolRegistry | tier_1 | tier_2 | experimental | experimental | tier_2 | +| PermissionEngine path policy | tier_1 | tier_2 | partial | partial | tier_2 | +| Doctor read-only | tier_1 | tier_2 | partial | partial | tier_2 | +| Doctor fix | tier_1 | tier_2 | limited | limited | tier_2 | + +## 4. Filesystem and Path Matrix + +| Capability | Linux | macOS | Windows native | WSL2 | +|---|---|---|---|---| +| POSIX paths | yes | yes | no | yes | +| symlink realpath | yes | yes | different semantics | yes | +| chmod/exec bits | yes | yes | partial | yes | +| case sensitivity | usually yes | often no | usually no | depends mount | +| project-local `.air` | yes | yes | yes | yes | +| git worktree | yes | yes | yes with caveats | yes | +| project-outside backup repo | yes | yes | yes with path handling | yes | + +V1 path classifier must be platform-aware and must not rely on string prefix checks before realpath normalization. + +## 5. Shell and Command Matrix + +| Shell behavior | Linux | macOS | Windows native | WSL2 | +|---|---|---|---|---| +| bash/sh commands | tier_1 | partial | unsupported by default | tier_2 | +| process signals | POSIX | POSIX-ish | different | POSIX | +| sudo | yes | yes | no | yes | +| package manager commands | apt/dnf/pacman/etc | brew optional | winget/choco optional | Linux package mgr | +| timeout/kill | tier_1 | partial | different | tier_2 | + +MVP shell tools target non-interactive POSIX shell. Windows native command support is post-MVP. + +## 6. C++ Toolchain Matrix + +| Tool | Linux x86_64 | Linux arm64 | macOS | Windows native | WSL2 | +|---|---|---|---|---|---| +| CMake | tier_1 | tier_2 | experimental | experimental | tier_2 | +| Ninja | tier_1 | tier_2 | experimental | experimental | tier_2 | +| Make fallback | tier_1 | tier_2 | experimental | partial | tier_2 | +| gcc/clang | tier_1 | tier_2 | clang-focused | MSVC not MVP | tier_2 | +| clangd CLI | tier_1 | tier_2 | experimental | experimental | tier_2 | +| cppcheck | tier_1 | tier_2 | experimental | experimental | tier_2 | +| CTest/GoogleTest | tier_1 | tier_2 | experimental | experimental | tier_2 | +| core dumps/backtrace | tier_1 | partial | different | unsupported MVP | tier_2 | + +Windows MSVC-specific workflows are not MVP. + +## 7. GUI, Debug, and Network Evidence Matrix + +| Evidence type | Linux | macOS | Windows native | WSL2 | +|---|---|---|---|---| +| screenshots | tier_1 with display backend | experimental | experimental | depends WSLg/X | +| GUI automation | post-MVP/basic only | post-MVP | post-MVP | depends WSLg/X | +| pcaps | requires permissions | requires permissions | different tooling | requires permissions | +| core dumps | Linux-first | different | different | Linux-first | +| debugger integration | Linux-first | experimental | post-MVP | Linux-first | + +MVP only requires basic GUI screenshot evidence where display backend is available. + +## 8. Provider/Network Matrix + +Provider APIs are platform-independent except for: + +```text +TLS/certificate store differences +proxy environment variables +local model runtimes +network firewall/proxy policy +``` + +Doctor should validate provider reachability without exposing secrets. + +## 9. Distribution Matrix + +MVP distribution: + +| Platform | Distribution | +|---|---| +| Linux x86_64 | binary tarball | +| Linux arm64 | binary tarball, best-effort | +| macOS | experimental tarball or manual run | +| Windows native | no stable MVP distribution | +| WSL2 | use Linux tarball inside WSL | + +Binary tarball contains: + +```text +bin/air +resources/ +LICENSE +``` + +Resources include templates, prompts, themes, HUD presets, Python scripts, and toolchain resources. + +## 10. Platform Detection Contract + +```ts +interface PlatformInfo { + os: "linux" | "darwin" | "windows" | "unknown" + arch: "x64" | "arm64" | "arm" | "unknown" + libc?: "glibc" | "musl" | "unknown" + shell?: string + is_wsl?: boolean + display?: { + wayland?: boolean + x11?: boolean + xvfb?: boolean + wslg?: boolean + } + package_managers?: string[] + path_case_sensitive?: boolean +} +``` + +Doctor records platform info in doctor report artifacts and session metadata. + +## 11. Release Gate + +Before an AirCoding MVP release: + +Tier 1 Linux x86_64 must pass: + +```text +unit tests +integration fixture tests +real LLM E2E release test +project init smoke +C++ configure/build/test flow +SQLite recovery smoke +child agent IPC smoke +TUI startup smoke +artifact/event persistence smoke +``` + +Linux arm64 best-effort gate: + +```text +runtime startup +doctor read-only +SQLite/session creation +basic shell/tool execution +C++ toolchain detection if available +``` + +Experimental platforms may have smoke checks but do not block MVP release unless declared for a specific release. + +## 12. VibeBox Relationship + +VibeBox targets ARM Linux appliance behavior and has its own downstream baseline. AirCoding mainline should keep Linux arm64 viable, but VibeBox-specific Electron packaging/test requirements do not become AirCoding mainline MVP release blockers. + +## 13. V1.0.0 Alpha Cut Line + +V1.0.0 Alpha skeleton must implement: + +1. Platform detection. +2. Linux x86_64 tier-1 path/shell/process behavior. +3. Linux arm64 best-effort packaging/runtime checks. +4. WSL detection and warnings. +5. Platform-aware path classifier. +6. Doctor platform report. +7. Release gate script definitions for tier 1. + +Post-MVP: + +```text +Windows native shell/process support +macOS notarized distribution +containerized test matrix +MSVC toolchain profile +Wayland/X11/Windows/macOS GUI automation adapters +platform-specific sandboxing +``` diff --git a/AirPlan/docs/architecture/db-schema-v1.md b/AirPlan/docs/architecture/db-schema-v1.md new file mode 100644 index 0000000..d283a34 --- /dev/null +++ b/AirPlan/docs/architecture/db-schema-v1.md @@ -0,0 +1,680 @@ +# AirCoding Session DB Schema V1 + +Date: 2026-05-26 +Status: Canonical schema baseline for V1.0.0 Alpha skeleton + +This document defines the first implementation-facing SQLite schema for per-session state. + +Session DB path: + +```text +/.air/local/sessions//session.db +``` + +Project-level DBs remain outside this session schema: + +```text +/.air/local/debug-records.db +/.air/local/learned-memory.db +``` + +## 1. SQLite Runtime Settings + +```sql +PRAGMA journal_mode = WAL; +PRAGMA synchronous = NORMAL; +PRAGMA foreign_keys = OFF; +``` + +Rationale: + +- WAL supports concurrent read/write patterns needed by runtime and TUI projection. +- `NORMAL` is sufficient for local session state and faster than `FULL`. +- Foreign keys are disabled in MVP to reduce migration/recovery complexity. Application-level consistency checks handle references. This can be revisited after schema stabilizes. + +Transaction rules: + +- A durable event insert and its corresponding domain table update must be in the same transaction. +- Artifact file writes use temp file → atomic rename → DB record. +- `ui_state` is flushed periodically and on normal exit. + +## 2. schema_meta + +```sql +CREATE TABLE schema_meta ( + key TEXT PRIMARY KEY, + value TEXT NOT NULL +); +``` + +Initial keys: + +```text +schema_version = 1 +created_by = aircoding +created_at = +aircoding_version_created = +aircoding_version_last_opened = +``` + +## 3. sessions + +```sql +CREATE TABLE sessions ( + id TEXT PRIMARY KEY, + project_id TEXT NOT NULL, + project_root TEXT NOT NULL, + title TEXT, + status TEXT NOT NULL, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL, + exited_at TEXT, + model_provider_id TEXT, + model_id TEXT, + metadata_json TEXT +); +``` + +Status values: + +```text +active | archived | deleted +``` + +## 4. messages + +```sql +CREATE TABLE messages ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + role TEXT NOT NULL, + canonical_format TEXT NOT NULL, + content_json TEXT NOT NULL, + parent_message_id TEXT, + route_json TEXT, + created_at TEXT NOT NULL, + token_estimate INTEGER, + metadata_json TEXT +); + +CREATE INDEX idx_messages_session_created +ON messages(session_id, created_at); +``` + +`canonical_format` is `anthropic` in V1. + +## 5. message_drafts + +```sql +CREATE TABLE message_drafts ( + message_id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + role TEXT NOT NULL, + canonical_format TEXT NOT NULL, + partial_content_json TEXT NOT NULL, + status TEXT NOT NULL, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL, + metadata_json TEXT +); + +CREATE INDEX idx_drafts_session_status +ON message_drafts(session_id, status); +``` + +Drafts are deleted after the completed message is written to `messages`. + +Status values: + +```text +streaming | interrupted | error +``` + +## 6. events + +```sql +CREATE TABLE events ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + type TEXT NOT NULL, + version INTEGER NOT NULL, + timestamp TEXT NOT NULL, + + source_kind TEXT NOT NULL, + source_id TEXT, + agent_type TEXT, + + task_id TEXT, + agent_id TEXT, + tool_run_id TEXT, + command_run_id TEXT, + + route_json TEXT NOT NULL, + route_text TEXT NOT NULL, + + payload_json TEXT NOT NULL +); + +CREATE INDEX idx_events_session_type_time +ON events(session_id, type, timestamp); + +CREATE INDEX idx_events_task_time +ON events(task_id, timestamp); + +CREATE INDEX idx_events_agent_time +ON events(agent_id, timestamp); + +CREATE INDEX idx_events_route_text +ON events(route_text); +``` + +## 7. tasks + +```sql +CREATE TABLE tasks ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + type TEXT NOT NULL, + status TEXT NOT NULL, + title TEXT NOT NULL, + + task_spec_json TEXT NOT NULL, + worker_result_json TEXT, + + assigned_agent_id TEXT, + workspace_id TEXT, + + retry_count INTEGER NOT NULL DEFAULT 0, + + created_at TEXT NOT NULL, + started_at TEXT, + completed_at TEXT, + heartbeat_at TEXT, + + metadata_json TEXT +); + +CREATE INDEX idx_tasks_session_status +ON tasks(session_id, status); +``` + +Task status values: + +```text +pending | running | completed | failed | blocked | cancelled | interrupted +``` + +## 8. task_dependencies + +```sql +CREATE TABLE task_dependencies ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + task_id TEXT NOT NULL, + depends_on_task_id TEXT NOT NULL, + dependency_type TEXT NOT NULL, + reason TEXT, + created_at TEXT NOT NULL +); + +CREATE INDEX idx_task_deps_task +ON task_dependencies(task_id); + +CREATE INDEX idx_task_deps_depends_on +ON task_dependencies(depends_on_task_id); + +CREATE INDEX idx_task_deps_session_type +ON task_dependencies(session_id, dependency_type); +``` + +Dependency types: + +```text +hard | soft | conflict | serialization +``` + +## 9. task_attempts + +```sql +CREATE TABLE task_attempts ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + task_id TEXT NOT NULL, + attempt_index INTEGER NOT NULL, + + agent_id TEXT, + status TEXT NOT NULL, + + failure_signature TEXT, + failure_summary TEXT, + + started_at TEXT NOT NULL, + completed_at TEXT, + + worker_result_json TEXT, + metadata_json TEXT +); + +CREATE INDEX idx_task_attempts_task +ON task_attempts(task_id, attempt_index); + +CREATE INDEX idx_task_attempts_failure_signature +ON task_attempts(failure_signature); +``` + +## 10. agents + +```sql +CREATE TABLE agents ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + type TEXT NOT NULL, + status TEXT NOT NULL, + + pid INTEGER, + task_id TEXT, + + model_provider_id TEXT, + model_id TEXT, + + started_at TEXT NOT NULL, + completed_at TEXT, + last_heartbeat_at TEXT, + + metadata_json TEXT +); + +CREATE INDEX idx_agents_session_status +ON agents(session_id, status); + +CREATE INDEX idx_agents_task +ON agents(task_id); +``` + +Agent status values: + +```text +starting | running | completed | failed | lost | cancelled +``` + +## 11. tool_runs + +```sql +CREATE TABLE tool_runs ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + + task_id TEXT, + agent_id TEXT, + origin_message_id TEXT, + + tool_name TEXT NOT NULL, + status TEXT NOT NULL, + + input_json TEXT NOT NULL, + output_json TEXT, + error_json TEXT, + + started_at TEXT NOT NULL, + completed_at TEXT, + duration_ms INTEGER, + + artifacts_json TEXT, + evidence_refs_json TEXT, + metadata_json TEXT +); + +CREATE INDEX idx_tool_runs_origin_message +ON tool_runs(origin_message_id); + +CREATE INDEX idx_tool_runs_session_time +ON tool_runs(session_id, started_at); + +CREATE INDEX idx_tool_runs_task_time +ON tool_runs(task_id, started_at); + +CREATE INDEX idx_tool_runs_agent_time +ON tool_runs(agent_id, started_at); +``` + +Status values: + +```text +running | ok | error | cancelled +``` + +## 12. command_runs + +```sql +CREATE TABLE command_runs ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + + task_id TEXT, + agent_id TEXT, + origin_message_id TEXT, + tool_run_id TEXT, + + command TEXT NOT NULL, + cwd TEXT NOT NULL, + + exit_code INTEGER, + + stdout_artifact_id TEXT, + stderr_artifact_id TEXT, + combined_artifact_id TEXT, + + started_at TEXT NOT NULL, + completed_at TEXT, + duration_ms INTEGER, + + parsed_diagnostics_json TEXT, + metadata_json TEXT +); + +CREATE INDEX idx_command_runs_origin_message +ON command_runs(origin_message_id); + +CREATE INDEX idx_command_runs_session_time +ON command_runs(session_id, started_at); + +CREATE INDEX idx_command_runs_task_time +ON command_runs(task_id, started_at); + +CREATE INDEX idx_command_runs_agent_time +ON command_runs(agent_id, started_at); +``` + +## 13. artifacts + +```sql +CREATE TABLE artifacts ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + type TEXT NOT NULL, + + uri TEXT NOT NULL, + path TEXT NOT NULL, + original_name TEXT, + + size_bytes INTEGER, + sha256 TEXT, + + task_id TEXT, + agent_id TEXT, + tool_run_id TEXT, + command_run_id TEXT, + + associated_entity_type TEXT, + associated_entity_id TEXT, + + created_at TEXT NOT NULL, + metadata_json TEXT +); + +CREATE INDEX idx_artifacts_session_type_time +ON artifacts(session_id, type, created_at); + +CREATE INDEX idx_artifacts_task +ON artifacts(task_id); + +CREATE INDEX idx_artifacts_agent +ON artifacts(agent_id); + +CREATE INDEX idx_artifacts_tool_run +ON artifacts(tool_run_id); + +CREATE INDEX idx_artifacts_command_run +ON artifacts(command_run_id); +``` + +## 14. diagnostics + +```sql +CREATE TABLE diagnostics ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + + task_id TEXT, + agent_id TEXT, + command_run_id TEXT, + artifact_id TEXT, + + language TEXT, + toolchain TEXT, + severity TEXT, + + file TEXT, + line INTEGER, + column INTEGER, + code TEXT, + + message TEXT NOT NULL, + semantic_signature TEXT NOT NULL, + + created_at TEXT NOT NULL, + metadata_json TEXT +); + +CREATE INDEX idx_diagnostics_signature +ON diagnostics(semantic_signature); + +CREATE INDEX idx_diagnostics_file +ON diagnostics(file); + +CREATE INDEX idx_diagnostics_command +ON diagnostics(command_run_id); + +CREATE INDEX idx_diagnostics_task +ON diagnostics(task_id); +``` + +## 15. evidence_refs + +```sql +CREATE TABLE evidence_refs ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + + task_id TEXT, + agent_id TEXT, + tool_run_id TEXT, + command_run_id TEXT, + artifact_id TEXT, + diagnostic_id TEXT, + message_id TEXT, + + kind TEXT NOT NULL, + ref TEXT NOT NULL, + location_json TEXT, + claim TEXT NOT NULL, + + created_at TEXT NOT NULL +); + +CREATE INDEX idx_evidence_task +ON evidence_refs(task_id); + +CREATE INDEX idx_evidence_artifact +ON evidence_refs(artifact_id); + +CREATE INDEX idx_evidence_diagnostic +ON evidence_refs(diagnostic_id); +``` + +## 16. workspaces + +```sql +CREATE TABLE workspaces ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + + task_id TEXT, + agent_id TEXT, + + path TEXT NOT NULL, + strategy TEXT NOT NULL, + status TEXT NOT NULL, + + base_ref TEXT, + branch_name TEXT, + + created_at TEXT NOT NULL, + merged_at TEXT, + + metadata_json TEXT +); + +CREATE INDEX idx_workspaces_task +ON workspaces(task_id); + +CREATE INDEX idx_workspaces_status +ON workspaces(session_id, status); +``` + +Workspace strategy values: + +```text +main | worktree | isolated_copy +``` + +Workspace status values: + +```text +active | merged | conflicted | abandoned | cleaned +``` + +## 17. summaries + +```sql +CREATE TABLE summaries ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + + type TEXT NOT NULL, + range_start_message_id TEXT, + range_end_message_id TEXT, + + content_json TEXT NOT NULL, + + created_at TEXT NOT NULL, + metadata_json TEXT +); +``` + +## 18. ui_state + +```sql +CREATE TABLE ui_state ( + id TEXT PRIMARY KEY, + session_id TEXT NOT NULL, + scope TEXT NOT NULL, + key TEXT NOT NULL, + value_json TEXT NOT NULL, + updated_at TEXT NOT NULL +); + +CREATE UNIQUE INDEX idx_ui_state_session_scope_key +ON ui_state(session_id, scope, key); +``` + +`ui_state` is not a source of truth for runtime state. It stores route, active panel, layout, scroll, collapse state, selected tab, and HUD preset. + +## 19. V1 Summary + +Frozen decisions: + +1. Session DB is project-local and per-session. +2. WAL + synchronous NORMAL + foreign_keys OFF. +3. No `message_parts` source-of-truth table in V1.0.0 Alpha. +4. Canonical messages are Anthropic content JSON. +5. Draft messages exist only during streaming/incomplete assistant output. +6. Domain tables are scheduling/recovery/query source of truth. +7. JSON columns preserve full object fidelity; frequently queried relationships are extracted into columns and indexes. +8. Durable event + domain update must be transactional. +9. Artifact files are written temp → rename → DB record. +10. UI state is flushed periodically and on normal exit. + +## 20. Project-Level DBs + +Two project-level databases live under `/.air/local/`: + +### 20.1 debug-records.db + +```sql +PRAGMA journal_mode = WAL; +PRAGMA synchronous = NORMAL; +PRAGMA foreign_keys = OFF; + +CREATE TABLE debug_records ( + id TEXT PRIMARY KEY, + task_id TEXT, + failure_signature TEXT NOT NULL, + summary TEXT NOT NULL, + root_cause TEXT, + fix_ref TEXT, + evidence_json TEXT, + verification_json TEXT, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL, + metadata_json TEXT +); + +CREATE INDEX idx_debug_records_signature +ON debug_records(failure_signature); + +CREATE INDEX idx_debug_records_task +ON debug_records(task_id); +``` + +### 20.2 learned-memory.db + +```sql +PRAGMA journal_mode = WAL; +PRAGMA synchronous = NORMAL; +PRAGMA foreign_keys = OFF; + +CREATE TABLE learned_memories ( + id TEXT PRIMARY KEY, + memory_type TEXT NOT NULL, + summary TEXT NOT NULL, + content TEXT, + source_entity_type TEXT, + source_entity_id TEXT, + status TEXT NOT NULL, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL, + metadata_json TEXT +); + +CREATE INDEX idx_learned_memories_type +ON learned_memories(memory_type); + +CREATE INDEX idx_learned_memories_status +ON learned_memories(status); +``` + +## 21. Closed Enum Inventory + +The following TEXT columns use closed value sets. Implementations must validate on insert/update. + +| Table | Column | Valid values | +|---|---|---| +| `sessions` | `status` | `active`, `archived`, `deleted` | +| `messages` | `role` | `user`, `assistant`, `system`, `tool` | +| `messages` | `canonical_format` | `anthropic` | +| `tasks` | `type` | `execute`, `review`, `debug`, `compact`, `mine_experience`, `docs` | +| `tasks` | `status` | `pending`, `running`, `completed`, `failed`, `blocked`, `cancelled`, `interrupted` | +| `task_dependencies` | `dependency_type` | `hard`, `soft`, `conflict`, `serialization` | +| `task_attempts` | `status` | `pending`, `running`, `completed`, `failed`, `cancelled` | +| `agents` | `status` | `starting`, `running`, `completed`, `failed`, `lost`, `cancelled` | +| `tool_runs` | `status` | `running`, `ok`, `error`, `cancelled` | +| `artifacts` | `type` | `log`, `diff`, `screenshot`, `pcap`, `report`, `diagnostic`, `bundle`, `other` | +| `diagnostics` | `severity` | `error`, `warning`, `info`, `hint` | +| `evidence_refs` | `kind` | `build_output`, `test_output`, `log`, `screenshot`, `diff`, `metric`, `other` | +| `workspaces` | `strategy` | `main`, `worktree`, `isolated_copy` | +| `workspaces` | `status` | `active`, `merged`, `conflicted`, `abandoned`, `cleaned` | +| `summaries` | `type` | `compaction`, `checkpoint`, `review`, `other` | +| `message_drafts` | `status` | `streaming`, `interrupted`, `error` | +| `learned_memories` | `memory_type` | `project_rule`, `toolchain_rule`, `skill_update`, `debug_experience` | +| `learned_memories` | `status` | `candidate`, `promoted`, `archived`, `rejected` | diff --git a/AirPlan/docs/architecture/decisions-round-1.md b/AirPlan/docs/architecture/decisions-round-1.md new file mode 100644 index 0000000..74f5794 --- /dev/null +++ b/AirPlan/docs/architecture/decisions-round-1.md @@ -0,0 +1,134 @@ +# Architecture Decisions — Round 1 + +Date: 2026-05-25 +Source: idea.md discussion, questions 1–18 + +## D-001: Bun as JS Runtime + +- **Decision**: Bun. +- **Why**: Both OpenCode and Claude Code use Bun; built-in SQLite removes native addon dependency; native TSX support simplifies build config; C++ modules communicate via subprocess, not native addons. +- **Distribution**: Bundle Bun runtime with AirCoding. + +## D-002: @opentui/solid as TUI Framework + +- **Decision**: `@opentui/solid` (MIT licensed, standalone project, not coupled to OpenCode). +- **Why**: OpenTUI is an independent library consumed by OpenCode as a regular npm dependency. The TUI rendering layer is cleanly separated from OpenCode's business logic. Reference OpenCode's TUI component patterns for interaction design. +- **Reuse strategy**: Direct npm dependency on `@opentui/solid @opentui/core @opentui/keymap`. AirCoding TUI components reference OpenCode patterns but are independently implemented. + +## D-003: Bun Monorepo + +- **Decision**: Monorepo with Bun workspaces + Turborepo. +- **MVP packages**: + - `packages/tui` — AirCoding TUI components on top of `@opentui/solid` + - `packages/runtime` — Agent Loop, Session, Scheduler, Tool Registry, EventBus + - `packages/llm` — Provider/Model abstraction (reference `@opencode-ai/llm`, but may fork/adapt) + - `packages/toolchain` — C++ BuildTool, DiagnosticParser, TestRunner + - `packages/cli` — Entry point, assembles all packages +- **Later**: Plugin SDK, debug knowledge, Python worker bridge. + +## D-004: Python as Subprocess-Only Tooling + +- **Decision**: Python workers are called via `Bun.spawn` with JSON-over-stdio. No long-lived Python server. No bundled Python environment. +- **Scope**: Python only wraps existing C++ toolchain scripts and Python-specific libraries. Experience mining, context assembly, and memory management stay in TS runtime. +- **Re-evaluated from idea.md**: idea.md assigned Python for Hermes-style learning and AirContext compression, but these are LLM + text + SQLite operations that Bun/TS handles natively. Keeping them in TS avoids unnecessary language bridging. + +## D-005: Event-Driven Agent Architecture + +- **Decision**: Event-driven. Main Agent subscribes to EventBus for agent/task/tool events and renders progress to TUI/HUD. +- **Main Agent state machine** (see `AirPlan/docs/architecture/main-agent-state-machine.md`): + - IDLE → CLASSIFYING → DELEGATING → CONFIRMING → EXECUTING → SUMMARIZING → IDLE + - INTERRUPTING for mid-execution user requirement changes (classified via LLM) + - Error handling: Main Agent handles what it can, escalates to user only when necessary +- **Key constraint**: Main Agent must remain idle-ready for user intervention. Background tasks (ExperienceMiner, DebugKnowledge indexing) are dispatched to sub-agents. + +## D-006: Sub-Agent Loops Are Independent + +- **Decision**: Executor, Reviewer, and Debugger each have their own agent loop implementation. Not a shared generic loop engine. +- **Executor loop**: LOADING → THINKING → ACTING → OBSERVING → (loop with debugging sub-loop on failure) → FINALIZING +- **Reviewer loop**: LOADING → REVIEWING → DECIDING (approved / changes_requested / blocked) +- **Debugger loop**: GATHERING → ANALYZING → FIXING → (RECORDING or ESCALATING) +- **Sub-agent execution quality**: Claude Code is the behavioral benchmark (read-first, small edits, verify before return, follow Project Rules). + +## D-007: Independent Processes for Sub-Agents + +- **Decision**: Each Executor/Reviewer/Debugger is an independent Bun process spawned by Scheduler. IPC via stdio + JSON (same mechanism as Python workers). +- **Why**: Crash isolation, context isolation, natural worktree support. Single-process approach excluded due to context explosion and lack of fault isolation. +- **Communication**: Scheduler passes TaskSpec (worktree path, tool set, permission level) on spawn; sub-agent returns structured WorkerResult JSON on completion. + +## D-008: Push Heartbeat + Soft/Hard Timeout + +- **Decision**: Sub-agents push `AgentHeartbeat` events (status, turn count, tokens) every N seconds. Scheduler subscribes and detects stalls. +- **Heartbeat**: Push model. Sub-agent proactively reports state. +- **Timeout**: Hybrid. Hard timeout kills on expiration. Soft timeout warns and allows extension requests (sub-agent can justify need for more time). Scheduler decides per-task. +- **Loop detection**: Same error signature appearing N+ times triggers escalation to Main Agent (not auto-kill). + +## D-009: Per-Session SQLite with Anthropic-Native Storage + +- **Decision**: + - `~/.air/sessions//session.db` per session + - `~/.air/projects//debug-records.db` cross-session + - `~/.air/projects//learned-memory.db` cross-session +- **Message format**: Anthropic-native content blocks (TextBlock, ThinkingBlock, ToolUseBlock, ToolResultBlock), following Claude Code's approach. +- **Provider switching**: Same-provider switching (e.g., Opus → Sonnet) is zero-cost. Cross-provider switching converts at API boundary (Anthropic format → target provider format → response → back to Anthropic format for storage). +- **Event persistence**: + - High-frequency events (TokenDelta, StdoutChunk) → EventBus only, not persisted + - Durable events (TaskCompleted, ToolRunCompleted) → SQLite, synchronous write on main thread + - WAL mode for concurrent read/write + +## D-010: Full Context Dump on Session Exit + +- **Decision**: On session exit, dump complete context to session storage. On resume, load from full dump, not reconstruct from summaries. +- **Recovery**: + - Compaction is internal projection optimization, not data removal + - Structured summaries serve as index for fast historical lookup + - Scheduler rebuilds task queue from AgentTask table; running tasks judged by heartbeat timestamp + - User sees full conversation history transparently + +## D-011: Build System Auto-Detection + +- **Priority**: CMake (built-in) > Meson/Bazel/XMake (capability plugin) > Makefile/.sln +- **Conflict handling**: When multiple build system files exist (e.g., CMakeLists.txt + meson.build), ask user to choose. +- **Generator**: Ninja first, fall back to Make if Ninja fails. +- **Config failure**: BuildTool built-in logic attempts fix first (install missing deps, adjust CMake args); if unresolved, hand off to Debugger. + +## D-012: compile_commands.json — On-Demand Generation, No Caching + +- **Decision**: Detect and generate `compile_commands.json` on demand via `cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON`. No persistence/caching between sessions. + +## D-013: clangd CLI Mode for MVP + +- **Decision**: CLI mode (`clangd --check=` or equivalent) for MVP. Spawn on tool call, exit on completion. LSP daemon mode deferred to later phase if CLI latency proves unacceptable. + +## D-014: LLM-Based Diagnostic Parsing + +- **Decision**: All compiler/linker output parsed via LLM (not regex). LLM extracts structured `Diagnostic` records and generates semantic error signatures. +- **Error signature**: LLM computes semantic signature that normalizes across GCC/Clang/MSVC wording differences (e.g., "use of undeclared identifier" and "was not declared in this scope" map to same signature). +- **Linker errors**: Separately categorized from compiler diagnostics. + +## D-015: LLM-Driven Project Initialization — Loose Acceptance + +- **Decision**: Scanner collects facts → LLM infers `ProjectProfile` → loose schema acceptance (missing fields marked as `unknown`, not rejected) → user confirms/corrects → incremental field update with "may affect related inferences" hint. +- **No LLM retry loop** on schema mismatch. User correction is single-pass. + +## D-016: Classification by LLM + +- **Decision**: Main Agent uses LLM to classify user messages (chat, direct-mode, simple-task, needs-planning). + +## D-017: Confirmation Gating + +- **Decision**: Implementation-level changes that don't affect interfaces or architecture → silently proceed to EXECUTING. Architecture-level changes → Arc assessment required. Low permission: user confirms. High permission: auto-proceed with results displayed to user for immediate intervention. + +## D-018: Interruption via LLM Intent Detection + +- **Decision**: User interruption during execution detected via LLM intent classification, not Ctrl+C (ineffective with multi-process architecture). + +## D-019: Scheduler — Full Dependency Handling + +- **Decision**: Scheduler handles both hard dependencies (topological sort) and soft dependencies (optimization hints). Write-area conflict detection: different areas → parallel; same area but different code blocks → git worktree parallel then merge; same area, same code block → serial. +- **Concurrency**: Dynamic, API-rate-limit-aware, machine-resource-aware. +- **Failure**: Retry 3-5 times. Solvable failures block hard dependents only. Unsolvable failures (e.g., kernel limitation) go back to Architecture Designer. Repeated failures after max retries → Main Agent evaluates (silent resolution vs. user escalation). +- **Model selection**: Scheduler decides whether to force a specific model per task or let Executor choose. + +## D-020: Memory System — Claude Code Style + +- **Decision**: Claude Code's persistent memory system (MEMORY.md + frontmatter + typed layers) is the primary reference for memory design, alongside Hermes-style experience mining as a candidate layer. diff --git a/AirPlan/docs/architecture/decisions-round-2.md b/AirPlan/docs/architecture/decisions-round-2.md new file mode 100644 index 0000000..700d3e7 --- /dev/null +++ b/AirPlan/docs/architecture/decisions-round-2.md @@ -0,0 +1,96 @@ +# Architecture Decisions — Round 2 + +Date: 2026-05-26 +Source: idea.md discussion, questions 19–30 + +## D-021: Project Model Version Migration + +- **Decision**: Backup before migrate, user confirmation required. +- **Mechanism**: On opening a project with old-version `project.json`, auto-detect and prompt user. Backup to `~/.air/projects//backups/` before migration. Migration failure → rollback to backup, notify user. + +## D-022: Scanner — Full Directory Tree, No Exclusions + +- **Decision**: Scanner collects complete directory tree (file system metadata only — paths, extensions, file types), no recursion depth limit, no directory exclusions. +- **Why**: Directory tree traversal is fast (kernel inode walk), and the full tree provides useful structural information (e.g., detecting referenced components). File content is NOT read during scanning. +- **Timeout**: 15 seconds hard timeout as safety net. On timeout, return partial results with `incomplete` marker. +- **Update strategy**: First scan is full. Subsequent scans are incremental (mtime diff). On re-open, load `project.json` + quick check for top-level directory changes; trigger incremental scan only if changes detected. +- **Informed by**: Claude Code's zero-pre-scan approach (agentic search, no indexing), OpenCode's Tree-sitter AST + LLM hybrid. + +## D-023: Project Rules Format — Markdown + Frontmatter + +- **Decision**: Claude Code style — Markdown body with YAML frontmatter for structured metadata. Human-readable, git diff friendly, LLM natively understands. +- **Storage**: `~/.air/projects//project-rules.md` (project-authoritative). Export via `air memory export --project-rules AIR.md`. +- **Informed by**: Claude Code's CLAUDE.md format with frontmatter metadata. + +## D-024: ExperienceMiner — Mid-Session Trigger + Curator + Self-Patch + +- **Decision**: + - **Triggers**: DebugRecord produced + session end + N-turn interval (Hermes-style Nudge Engine counter, ~10 turns or 10 tool calls). Background sub-agent, never blocks Main Agent. + - **Scope**: Full extraction, no range limits. LLM decides what's worth saving. + - **Validation**: Non-debug experiences use occurrence count (N=3) as threshold for promotion prompt. Debug experiences use evidence (build/test pass) as confidence; no numeric score needed. + - **Deduplication**: Curator Daemon runs periodically (weekly), identifies overlapping skills, suggests merges, marks stale entries, archives unused ones. + - **Self-patch**: When agent finds existing skill/rules wrong during execution, forwards to ExperienceMiner to patch. + - **Data format**: SKILL.md (YAML frontmatter + Markdown body) under `~/.air/skills/`. Memories in `~/.air/projects//learned-memory.db`. +- **Informed by**: Hermes Agent's Nudge Engine, Curator Daemon, self-patching mechanism, and SKILL.md format. + +## D-025: Context Compaction — Rule-File Driven, Copy-on-Write, Async + +- **Decision**: + - **Trigger**: 70% of context window capacity. + - **Strategy**: Rule-file driven with three-tier inheritance (system default → user template at `~/.air/compaction-rules.yaml` → project override at `.air/compaction-rules.yaml`). System default template ensures projects without custom rules work normally. Editing user template affects all future new projects. + - **Mechanism**: Copy-on-Write. On trigger, snapshot current messages 1-N. Compression runs asynchronously (independent Compactor sub-agent). New messages continue appending to original chain. On completion, a compaction marker is inserted between the compressed summary and post-snapshot messages. LLM sees: summary + marker + new messages. Original messages preserved for explicit LLM backtracking. + - **Executor**: Independent Compactor sub-agent (not ContextAssembler, not Main Agent). + +## D-026: Permission — Symlink Physical Resolution + +- **Decision**: Symlinks resolved to physical path (follow `realpath`). This prevents project escape via symlink chains. + +## D-027: Permission — .git/ Write Protection + +- **Decision**: `.git/` directory write-protected by default (requires user confirmation). Can be overridden in `.air/permissions.yaml` project settings. + +## D-028: Permission — Build Directory Unrestricted + +- **Decision**: Build directories (`build/`, `out/`, etc.) have no special restrictions. C++ packaging workflows require agent ability to manually organize runtime libraries (.so/.dll deployment, rpath, resource file organization), so build directory access must be unrestricted. + +## D-029: Permission — `~/.air/` System-Managed + +- **Decision**: `~/.air/` and all contents are managed by AirCoding internally. PermissionEngine does not check AirCoding's own internal operations. + +## D-030: Backup — Git-Based Repo + +- **Decision**: Project-external file backup is a git repository at `~/.air/projects//backups/`. Each external file modification: `cp` to backups/ → `git add && git commit` (commit message: session_id, agent_type, reason). Version history, diff, compression all provided by git natively. `air restore --list` → `git log`; `air restore --session ` → `git log --grep `. User manually deletes backups; no automatic cleanup. + +## D-031: High-Risk Action Detection — Static Path Whitelist + LLM Escape Hatch + +- **Decision**: Static path whitelist covers clearly-system paths (`/etc/fstab`, `/boot/`, `/etc/default/grub`, Windows registry system hives). `sudo` is NOT treated as high-risk (development machines need it for routine operations). LLM judgment only used as escape hatch when path matching can't decide. + +## D-032: Restore Granularity + +- **Decision**: Three levels — single file (most recent backup), specified time point, entire session. Git-backed storage makes all three straightforward. + +## D-033: Testing Strategy + +- **Decision**: Three layers: + - **Unit tests** (`bun test`, CI per push, <30s, no LLM): Tool schema validation, PermissionEngine, ContextAssembler token math, EventBus routing, build system detection, config loading priority. + - **Integration tests** (CI per push, <1min, recorded LLM fixture replay): Agent Loop state machine, Scheduler dependency resolution, sub-agent spawn → IPC → WorkerResult, session persist/restore, compaction Copy-on-Write, worktree lifecycle. + - **E2E tests** (Release gate, real LLM): Full C++ project scenarios — add function + test, fix build error, multi-task dependency order, session resume. Must pass before every release. + +## D-034: Distribution — Binary Tarball + +- **Decision**: Binary distribution (Bun compile standalone executable, bundled Bun runtime). Distribution package = binary executable + Python scripts + default resource files (compaction rule templates, HUD presets, etc.). No public npm/channel until stable. Language-specific toolchains are first-class plugins, not bundled special treatment. + +## D-035: Logging — Dual-File, 7-Day Retention + +- **Decision**: + - `air.log` — User-readable. Records startup failures, exceptions, environment configuration issues. Helps users self-diagnose. + - `air.developer.log` — Full debug log, encrypted (may contain user privacy data, only decryptable by development team). Performance metrics written here. 7-day retention, auto-rotated. + - Crash diagnostics: `air doctor` command collects version info, system environment, recent logs, crash stack trace into diagnostic package. Auto-detect abnormal exit on next startup, prompt user. + +## D-036: Multi-Language Extension — Per-Language toolchain-* Packages + +- **Decision**: Runtime (Agent Loop, Session, Scheduler, ToolRegistry, PermissionEngine) is language-agnostic. Each language is a `toolchain-` package + a `LanguageDetector` plugin implementing a common interface. Adding a new language = adding a `toolchain-python`/`toolchain-rust` etc. package, no core changes required. MVP ships with `toolchain-cpp`. + +## D-037: Compaction Rules — Three-Tier Inheritance + +- **Decision**: System default (built-in, never deleted, always fallback) → User template (`~/.air/compaction-rules.yaml`, editable, affects all future new projects) → Project rules (`.air/compaction-rules.yaml`, project-specific, highest priority). diff --git a/AirPlan/docs/architecture/decisions-round-3.md b/AirPlan/docs/architecture/decisions-round-3.md new file mode 100644 index 0000000..5183fa8 --- /dev/null +++ b/AirPlan/docs/architecture/decisions-round-3.md @@ -0,0 +1,425 @@ +# Architecture Decisions — Round 3 + +Date: 2026-05-26 +Source: implementation-interface freeze discussion + +## D-038: RuntimeEvent Envelope Uses Route Chain + +- **Decision**: Runtime events use a structured `route: string[]` route chain instead of correlation/causation IDs. +- **Reason**: Route chain is easier to display, append, and inspect across Main Agent → Architecture Designer → Scheduler → Worker → Tool flows. +- **Envelope**: + +```ts +interface RuntimeEvent { + id: string + type: string + version: number + timestamp: string + session_id: string + project_id?: string + source: EventSource + route: string[] + payload: T +} +``` + +- **Durability**: Not declared by the event. EventStore decides durability by event type. + +## D-039: IPC Uses NDJSON over stdio + +- **Decision**: Parent Scheduler and child agents communicate via NDJSON over stdio. +- **stdout**: Protocol only (`event`, `control`, `log` messages). +- **stderr**: Crash fallback and non-structured fatal diagnostics only. +- **Message union**: + +```ts +type IpcMessage = + | { kind: "event"; event: RuntimeEvent } + | { kind: "control"; control: ControlMessage } + | { kind: "log"; level: "debug" | "info" | "warn" | "error"; message: string; data?: unknown } +``` + +- **Exit codes**: + - `0`: protocol-level completion, including task completed/blocked/failed + - `1`: uncaught exception + - `2`: startup/protocol error + - `3`: permission error + - `4`: parent cancelled + - `5`: hard timeout killed + +## D-040: Durable Event Type Set + +- **Durable**: + - `session.created`, `session.archived`, `session.deleted` + - `user.message.created`, `assistant.message.created` + - `agent.started`, `agent.completed`, `agent.failed` + - `task.created`, `task.started`, `task.completed`, `task.blocked`, `task.failed`, `task.cancelled` + - `tool.started`, `tool.completed`, `tool.failed` + - `command.started`, `command.completed`, `command.failed` + - `artifact.created` + - `context.compaction.completed`, `summary.created` + - `memory.candidate.created`, `memory.promoted`, `memory.archived` + - `debug.record.created` + - `permission.decision.recorded` + - `requirement.changed`, `architecture.plan.updated`, `architecture.impact.completed` +- **Ephemeral only**: + - `agent.heartbeat`, `task.progress`, `token.delta`, `stdout.delta`, `stderr.delta`, `hud.frame.rendered`, `tool.progress` +- **Rationale**: Persist tool/agent starts so crash recovery can detect half-finished operations; avoid persisting high-frequency stream deltas. + +## D-041: TaskSpec Contract + +```ts +interface TaskSpec { + id: string + type: "execute" | "review" | "debug" | "compact" | "mine_experience" + title: string + description: string + acceptance_criteria: string[] + scope: { + write_area?: string + expected_files?: string[] + allowed_paths?: string[] + denied_paths?: string[] + } + dependencies: { hard: string[]; soft: string[] } + verification: { + commands?: string[] + required: boolean + fallback_allowed: boolean + } + constraints: { + max_turns: number + soft_timeout_ms: number + hard_timeout_ms: number + retry_budget: number + model_policy: "scheduler_forced" | "agent_select" + model_id?: string + } + context_refs: { + plan_ref?: string + arc_ref?: string + parent_task_results?: string[] + artifacts?: string[] + } + output_contract: "ExecutorResult" | "ReviewerResult" | "DebuggerResult" | "CompactorResult" | "ExperienceMinerResult" +} +``` + +- **allowed_paths/denied_paths** are task-level narrowing rules on top of global PermissionEngine. +- **verification.commands** are Scheduler recommendations; agents may add more and must report actual commands run. +- **retry_budget** is per task. + +## D-042: WorkerResult Contract + +```ts +interface WorkerResult { + task_id: string + agent_id: string + agent_type: "executor" | "reviewer" | "debugger" | "compactor" | "experience_miner" + status: "completed" | "failed" | "blocked" | "cancelled" + summary: string + changed_files: string[] + diff_ref?: string + artifacts: ArtifactRef[] + verification: VerificationResult[] + risks: Risk[] + follow_up_tasks: FollowUpTask[] + evidence_refs: EvidenceRef[] + result: T +} +``` + +- **failed**: task goal not achieved; Scheduler may retry or skip. +- **blocked**: upper-level decision needed; continued attempts are not useful. +- **summary**: human-readable 3–6 sentence summary covering what was done, evidence, conclusion, and risk. It is for TUI/Main Agent display, not scheduling logic. +- **changed_files** exists for all worker types and may be empty. + +## D-043: ArtifactRef and EvidenceRef Separation + +- **Artifact**: persistent file or large data object (build log, test log, screenshot, pcap, core dump, diff, terminal cast). +- **Evidence**: a claim-supporting reference that may point to an artifact excerpt, structured result, message, tool run, command run, or diagnostic. + +```ts +interface ArtifactRef { + id: string + type: "build_log" | "test_log" | "screenshot" | "pcap" | "core_dump" | "terminal_cast" | "diff" | "report" | "other" + uri: string + size_bytes?: number + sha256?: string + created_at: string +} + +interface EvidenceRef { + id: string + kind: "artifact_excerpt" | "structured_result" | "message" | "tool_run" | "command_run" | "diagnostic" + ref: string + location?: { line_start?: number; line_end?: number; byte_start?: number; byte_end?: number } + claim: string +} +``` + +## D-044: Tool API Contract + +```ts +interface ToolDefinition { + name: string + version: number + description: string + input_schema: JsonSchema + output_schema: JsonSchema + category: "filesystem" | "shell" | "build" | "test" | "debug" | "static_analysis" | "gui" | "network" | "memory" | "project" | "internal" + permissions: { + read_paths?: PathPolicy + write_paths?: PathPolicy + execute?: boolean + network?: boolean + system_sensitive?: boolean + } + streaming: boolean + execute(input: I, context: ToolExecutionContext): AsyncIterable | Promise> +} +``` + +- Inputs and outputs are both JSON-schema validated. +- Streaming tools must emit a final `tool.result` containing `ToolResult`. +- Bash is a regular shell tool; PermissionEngine performs extra command risk analysis. + +## D-045: Capability Dependencies Are Managed by Doctor/Setup + +- Capability manifests declare dependencies but do not install them directly. +- `air doctor` / `air setup` detect and repair missing dependencies. +- First startup runs read-only doctor automatically. +- If issues exist, user is prompted to run fix. +- High-permission mode can use `announce_then_run` for dependency installation after the first startup; user not interrupting means allow. +- First startup, even in high-permission mode, shows the report and asks before `doctor --fix`. +- `credentials` and `system_sensitive` risks always require explicit confirmation. + +```ts +interface DependencySpec { + id: string + kind: "executable" | "system_package" | "npm_package" | "pip_package" | "lsp_server" | "formatter" | "mcp_server" | "env_var" | "permission" | "service" | "network_port" + required_for: string[] + severity: "required" | "optional" | "degraded" + detect: DependencyDetectSpec + install?: { + low_permission: "never" | "prompt" | "safe_cache" + high_permission: "never" | "announce_then_run" | "safe_cache" | "prompt" + commands?: InstallCommandTemplate[] + docs?: string + } + risk: "none" | "downloads_code" | "needs_root" | "network_capture" | "credentials" | "system_sensitive" +} +``` + +## D-046: ContextAssembler Contract + +- ContextAssembler outputs Anthropic canonical messages. Provider-specific conversion happens only at the LLM adapter boundary. +- ContextAssembler records omissions so agents know what was not included. +- If usage passes compaction threshold, it publishes `context.compaction.requested` but does not compact itself. + +```ts +interface ContextRequest { + session_id: string + project_id: string + requester: { kind: "main" | "architecture_designer" | "scheduler" | "agent"; agent_type?: string; task_id?: string } + purpose: "user_response" | "architecture_planning" | "task_execution" | "review" | "debug" | "compaction" | "experience_mining" + model: { provider_id: string; model_id: string; context_window_tokens: number; max_output_tokens: number } + budget_policy: { reserved_output_tokens: number; safety_margin_tokens: number; target_usage_ratio: number } + include: { + project_rules: boolean + project_profile: boolean + task_graph: boolean + recent_messages: number + related_artifacts?: string[] + related_tasks?: string[] + related_files?: string[] + } + rule_set_ref?: string +} + +interface AssembledContext { + request_id: string + messages: AnthropicMessageParam[] + included_refs: { messages: string[]; summaries: string[]; artifacts: string[]; rules: string[]; tasks: string[] } + token_estimate: { total: number; by_section: Record; model_id: string } + compaction: { needed: boolean; reason?: string; requested_event_id?: string } + omissions: { ref: string; reason: string }[] +} +``` + +## D-047: Compaction Rules Use Markdown + Frontmatter + +- Rule files are Markdown with YAML frontmatter. +- Paths: + - Built-in system default + - User template: `~/.air/compaction-rules.md` + - Project override: `.air/shared/compaction-rules.md` +- Three-tier inheritance: system default → user template → project override. +- Message classification is done by ContextClassifier before compaction. +- `drop_if_needed` is allowed because original messages are preserved. + +## D-048: TUI Reuses OpenCode UI Primitives, Not Business State + +- Use `@opentui/solid`, `@opentui/core`, and `@opentui/keymap`. +- Copy/adapt OpenCode's generic theme, dialog, toast, keymap, layout, spinner, border, markdown/code/diff rendering patterns. +- Do not reuse OpenCode's SDK/sync/session business layer. +- AirCoding defines its own event store, session/message/task/agent/tool state model. +- OpenCode session UI is used as a rendering reference only. + +## D-049: Project State Lives in `.air/local`, Shared Knowledge in `.air/shared` + +- Project source of truth moves into the project directory: + +```text +/.air/ + shared/ # git-shareable project knowledge + local/ # portable but gitignored runtime state +``` + +- `.air/shared` contains project profile, permissions, compaction rules, project rules, and plan/docs. +- `.air/local` contains sessions, artifacts, runtime state, backups, debug/learned DBs, locks, temp, and workspaces. +- `~/.air` contains only user config, cache, global skills, global logs, and a project index. +- `project_id` is a stable UUID generated at initialization, not an absolute-path hash. + +## D-050: Developer Logs Use Development-Team Public Key Encryption + +- `air.developer.log` is encrypted with the development team's public key. +- No local user private key is required for decrypting developer logs. +- `air doctor --bundle` may include full diagnostics and is not automatically redacted. +- Rationale: redaction may remove information needed to debug real failures. +- Diagnostic bundles are never auto-uploaded; user must explicitly export/send them. + +## D-051: Session DB Uses Canonical Messages + Domain State Tables + +- `messages` stores complete Anthropic canonical content JSON. +- `message_drafts` stores streaming assistant intermediate state for crash recovery and is deleted after final message completion. +- `message_parts` is not a source-of-truth table in MVP. +- Domain tables are the source of truth for scheduling/recovery/query: + - `tasks`, `task_dependencies`, `task_attempts` + - `agents`, `tool_runs`, `command_runs` + - `artifacts`, `diagnostics`, `evidence_refs`, `workspaces`, `events` +- `ui_state` stores lightweight UI recovery state only. +- ProjectionStore rebuilds TUI view models from DB + live EventBus. + +## D-052: Query-Friendly Columns and Tables Are Preferred over Parsing JSON + +- Canonical JSON preserves fidelity; frequently queried relations are extracted to columns/tables. +- `tool_runs` and `command_runs` include `origin_message_id`. +- `artifacts` include common foreign keys (`task_id`, `agent_id`, `tool_run_id`, `command_run_id`) while retaining generic associated entity fields. +- `events` extract source/task/agent/tool/command IDs and store both `route_json` and `route_text`. +- `task_dependencies`, `task_attempts`, `diagnostics`, `evidence_refs`, and `workspaces` are first-class tables. + +## D-053: UI State Is Flushed Periodically and on Exit + +- UI changes are held in memory during interaction. +- `ui_state` flushes periodically (e.g. every 10 seconds) and on normal exit. +- Crash/power loss may lose a few seconds of UI-only state, but never scheduling/message state. + +## D-054: Artifact Layout Is Project-Local + +- Artifacts live under: + +```text +/.air/local/sessions//artifacts/ +``` + +- URI format: + +```text +artifact://project//session// +``` + +- Layout: + +```text +artifacts/ + command-runs// + tool-runs// + builds/ + tests/ + screenshots/ + pcaps/ + core-dumps/ + diffs/ + reports/ +``` + +- Internal filenames may use artifact IDs or semantic names; DB preserves `original_name`. +- Logs may be gzip-compressed; screenshots, pcaps, and core dumps are not double-compressed by default. +- Session delete/purge deletes artifacts; archive keeps them. + +## D-055: Schema Migration Requires User Confirmation + +- Opening a project auto-detects `.air` schema versions. +- Old schema triggers a migration plan display. +- User confirmation is required even in high-permission mode. +- Migration backs up `.air` first. +- Migration failure must rollback. + +## D-056: HUD/TUI Consumes ProjectionStore Only + +- DB is persistent state source. +- EventBus is real-time state source. +- ProjectionStore is the only display projection consumed by TUI/HUD. +- HUD does not query SQLite directly. +- ProjectionStore hydrates from DB on startup and applies EventBus updates during runtime. +- If EventBus disconnects/restarts, ProjectionStore rehydrates from DB. +- HUD presets only control visible fields, not underlying state. + +## D-057: UI Design Asset Capability Is Optional but Supported + +- AirCoding is not a general creative-media agent, but software development often requires UI assets, icons, visual mockups, and design specs. +- Runtime supports an optional `ui-design-assets` capability. +- MVP includes text/SVG/design-spec oriented tools: + - ASCII/wireframe mockup generation + - design specification generation + - SVG icon generation + - screenshot design analysis + - external image-generation prompt generation +- Bitmap image generation/editing is provider-backed and post-MVP. +- Generated design assets are artifacts first: + - `ui_mockup` + - `icon` + - `illustration` + - `svg_asset` + - `design_spec` + - `design_prompt` +- Generated assets are shown to the user before being written into project files. UI/design choices are subjective and should not be silently finalized even in high-permission mode. + +## D-058: Anthropic Claude Skills Are a Tool/Skill Reference Source + +- Anthropic/Claude open-source Skills are included as a reference for AirCoding's skill and tool organization. +- AirCoding should study and borrow: + - `SKILL.md` structure and frontmatter conventions + - skill directory layout (`scripts/`, `references/`, `assets/`) + - how reusable workflows are packaged as discoverable skills + - how skill descriptions guide trigger/retrieval behavior + - how skills interact with project rules and tool/capability execution +- Claude Skills are a reference for AirCoding's SkillGenerator, ExperienceMiner output format, and Capability documentation. +- AirCoding still keeps Project Rules, Skills, MCP, and Capabilities as separate concepts: + - Project Rules: authoritative project constraints + - Skills: reusable procedural knowledge + - MCP: external service/tool protocol + - Capabilities: runtime-registered tool bundles with dependencies/triggers/evidence types + +## D-059: Execution-Layer Primitives Align With Claude Code for Code Quality + +- AirCoding should align execution-layer behavior with Claude Code as much as possible to maximize code quality, correctness, and safe modification behavior. +- Claude Code is the primary behavioral reference for execution-layer primitives. +- This includes: + - file read/edit/write safety boundaries + - exact and conservative diff/update application semantics + - patch granularity and conflict handling + - tool input/output schema style + - permission checks around filesystem and shell operations + - TAOR/TORI-style execution loops and result feedback patterns + - read-before-edit discipline + - small-step edits with verification before completion + - avoiding unrelated refactors and premature abstractions during task execution + - build/test/debug evidence collection before declaring completion + - project-rule and memory adherence during edits + - failure handling that diagnoses root cause instead of random retries + - explicit blocker escalation when implementation discovers architecture/interface conflicts +- OpenCode remains the runtime/TUI structure reference, but execution primitives must favor Claude Code semantics whenever there is a tradeoff. +- Codex remains a reference for broad tool surface and shell/patch/test direct loops, but AirCoding should not sacrifice Claude Code-style edit discipline for tool breadth. +- Rationale: Executor correctness, safe code modification, patch quality, verification discipline, project-rule adherence, and failure recovery matter more than matching OpenCode's internal execution implementation or Codex-style general tool breadth. diff --git a/AirPlan/docs/architecture/error-taxonomy-v1.md b/AirPlan/docs/architecture/error-taxonomy-v1.md new file mode 100644 index 0000000..a97eca5 --- /dev/null +++ b/AirPlan/docs/architecture/error-taxonomy-v1.md @@ -0,0 +1,300 @@ +# AirCoding Error Taxonomy V1 + +Date: 2026-05-27 +Status: Canonical error taxonomy for V1.0.0 Alpha skeleton + +This document defines error kinds, severity, retryability, failure signatures, user-facing presentation, and routing rules. + +## 1. Goals + +The error taxonomy must support: + +1. Consistent ToolResult and WorkerResult failures. +2. Scheduler retry/block/skip decisions. +3. User-facing concise errors. +4. Developer diagnostic detail. +5. Stable semantic signatures for repeated failure detection. +6. Safe distinction between implementation failure and architecture/product blockers. + +## 2. Core Error Contract + +```ts +type ErrorKind = + | "user_error" + | "project_error" + | "env_error" + | "dependency_error" + | "permission_error" + | "tool_error" + | "command_error" + | "build_error" + | "test_error" + | "static_analysis_error" + | "debug_error" + | "provider_error" + | "model_capability_error" + | "context_error" + | "agent_error" + | "scheduler_error" + | "workspace_error" + | "merge_error" + | "architecture_error" + | "policy_error" + | "system_error" + | "unknown_error" + +type ErrorSeverity = "info" | "warning" | "error" | "fatal" + +type Retryability = "retryable" | "retryable_after_change" | "not_retryable" | "unknown" + +interface AirError { + error_id: string + kind: ErrorKind + severity: ErrorSeverity + message: string + detail?: string + retryability: Retryability + semantic_signature: string + cause_ref?: EntityRef + cause_refs?: EntityRef[] + user_action?: string + metadata?: Record +} +``` + +## 3. Error Kind Semantics + +| Kind | Meaning | Default route | +|---|---|---| +| `user_error` | invalid/contradictory user input or cancelled decision | Main Agent | +| `project_error` | project structure/config issue | Main Agent or Doctor | +| `env_error` | local environment missing/broken | Doctor | +| `dependency_error` | missing or incompatible dependency | Doctor/PermissionEngine | +| `permission_error` | action denied or needs confirmation | PermissionEngine/Main Agent | +| `tool_error` | tool implementation or validation failure | Scheduler/Debugger | +| `command_error` | shell process failed outside build/test classification | Scheduler/Debugger | +| `build_error` | build/configure/compile/link failure | Executor/Debugger | +| `test_error` | test command failed or assertion failed | Executor/Debugger | +| `static_analysis_error` | static analysis found issue or tool failed | Reviewer/Debugger | +| `debug_error` | debugger/instrumentation failed | Debugger/Scheduler | +| `provider_error` | provider API/network/auth/rate failure | Provider layer/Main Agent | +| `model_capability_error` | selected model lacks required feature | Scheduler/provider selector | +| `context_error` | context assembly/compaction/retrieval failure | ContextAssembler/Compactor | +| `agent_error` | worker protocol/crash/result validation issue | Scheduler | +| `scheduler_error` | graph/dispatch/recovery internal issue | Main Agent/developer log | +| `workspace_error` | worktree/copy/workspace setup failure | Scheduler | +| `merge_error` | merge/patch conflict or copy-back failure | Scheduler/Debugger/Architecture Designer | +| `architecture_error` | design/interface mismatch or invalid plan | Architecture Designer | +| `policy_error` | safety/security/policy violation | Main Agent/PermissionEngine | +| `system_error` | OS/resource/filesystem unexpected failure | Scheduler/Doctor | +| `unknown_error` | insufficient classification evidence | Scheduler/Debugger | + +## 4. Severity Semantics + +| Severity | Meaning | User visibility | +|---|---|---| +| `info` | non-blocking note | usually hidden or progress detail | +| `warning` | degraded path or skipped optional gate | shown in final report | +| `error` | task/tool failed but system can continue/retry | shown when relevant | +| `fatal` | session/graph cannot safely continue | immediately surfaced | + +Severity does not imply retryability. A fatal provider outage may be retryable after user changes provider; a low-severity policy denial may be not retryable. + +## 5. Retryability Rules + +```text +retryable → same strategy may succeed +retryable_after_change → retry only after model/context/command/permission/env/workspace change +not_retryable → route to block/skip/cancel +unknown → first failure can be diagnosed, repeated unknown escalates +``` + +Default retryability by kind: + +| Kind | Default retryability | +|---|---| +| provider_error | retryable or retryable_after_change | +| env_error | retryable_after_change | +| dependency_error | retryable_after_change | +| permission_error | retryable_after_change | +| build_error | retryable_after_change | +| test_error | retryable_after_change | +| merge_error | retryable_after_change | +| architecture_error | not_retryable until architecture decision | +| policy_error | not_retryable unless policy changes | +| agent_error | retryable_after_change | +| scheduler_error | unknown/fatal depending on invariant | + +## 6. Semantic Failure Signature + +Failure signatures are used for retry-loop detection and debug knowledge. + +Signature inputs: + +```text +kind +normalized tool/command name +normalized exit code or provider status +primary diagnostic semantic_signature +primary file/module path when relevant +normalized error message class +architecture/policy blocker class when relevant +``` + +Signature format: + +```text +:::: +``` + +Examples: + +```text +build_error:cpp.build:undefined_reference:src/foo.cpp:ab12cd34 +provider_error:llm.complete:rate_limit:none:91fe2300 +merge_error:git.merge_workspace:patch_conflict:src/main.cpp:3344aa90 +permission_error:shell.run:system_sensitive:/usr/bin:bb12cc88 +``` + +Do not include volatile data such as timestamps, temp paths, PIDs, random IDs, full absolute home paths, or secret-like strings. + +## 7. Mapping to Task Outcomes + +| Error kind | Common task outcome | +|---|---| +| build/test/static_analysis | failed, then retry/debug | +| permission | blocked unless policy auto-allows | +| architecture | blocked and route to Architecture Designer | +| provider/model capability | failed or blocked depending fallback availability | +| merge/workspace | failed, retry serial/repair, or blocked | +| env/dependency | blocked or doctor fix task | +| policy | blocked/cancelled | +| agent/scheduler/system | failed or fatal blocked | + +WorkerResult status rules: + +1. Use `failed` when the task goal was not achieved but Scheduler can decide retry/skip. +2. Use `blocked` when a higher-level decision or external condition is required. +3. Use `cancelled` when explicitly stopped. +4. Do not label architecture/product impossibility as ordinary failure. + +## 8. User-Facing Error Presentation + +User-facing messages should include: + +```text +what failed +why it matters +what AirCoding tried or can try next +whether user decision/action is needed +where evidence/report is stored +``` + +They should not include: + +```text +secrets +raw huge logs +stack traces unless the user asks +irrelevant implementation detail +``` + +Developer detail goes to `air.developer.log` and artifacts. + +## 9. Tool and Command Error Mapping + +ToolResult errors must map into `AirError`. + +```ts +interface ToolErrorOutput { + error: AirError + partial_output?: unknown + artifact_ids?: string[] + evidence_ref_ids?: string[] +} +``` + +Command failures are classified by purpose: + +| Command purpose | Non-zero exit maps to | +|---|---| +| `build` | `build_error` | +| `test` | `test_error` | +| `doctor` | `env_error` or `dependency_error` | +| `debug` | `debug_error` or diagnosed target error | +| `general` | `command_error` | + +## 10. Provider Error Mapping + +Provider adapter maps provider-specific failures: + +| Provider condition | Error kind | +|---|---| +| auth failure | `provider_error`, not retryable until config change | +| rate limit | `provider_error`, retryable_after_change or retryable after delay | +| model not found | `model_capability_error` or `provider_error` | +| context too large | `context_error` or `model_capability_error` | +| tool use unsupported | `model_capability_error` | +| network timeout | `provider_error`, retryable | +| malformed model output | `provider_error` or `agent_error` depending boundary | + +## 11. Policy and Security Errors + +Policy errors are not bypassed by retry. They require one of: + +```text +user approval within policy +permission/profile change +architecture/task redesign +request refusal/cancellation +``` + +Security-sensitive details may be summarized in user-facing text and preserved in encrypted developer logs/artifacts when needed. + +## 12. Error Events and Persistence + +Errors appear in: + +```text +tool.failed +command.failed +task.failed +task.blocked +agent.failed +context.compaction.failed +doctor.fix.failed +``` + +Each failure payload should include canonical `AirError` plus evidence refs: + +```text +error.kind +error.message +error.detail when useful +error.retryability +error.semantic_signature +evidence refs +``` + +Diagnostics table uses `semantic_signature`; not every error is a diagnostic. + +## 13. V1.0.0 Alpha Cut Line + +V1.0.0 Alpha skeleton must implement: + +1. `AirError`, `ErrorKind`, `ErrorSeverity`, `Retryability` contracts. +2. Tool/command/provider error mapping. +3. Semantic failure signature generation. +4. Scheduler retry/block mapping from error kind. +5. User-facing vs developer-detail formatting. +6. Event payload integration for all failure events. + +Post-MVP: + +```text +learned failure classifier +cross-session duplicate failure clustering +automatic debug knowledge promotion by signature +localized user-facing error text +provider-specific deep error parsers +``` diff --git a/AirPlan/docs/architecture/event-registry-v1.md b/AirPlan/docs/architecture/event-registry-v1.md new file mode 100644 index 0000000..db8607a --- /dev/null +++ b/AirPlan/docs/architecture/event-registry-v1.md @@ -0,0 +1,1231 @@ +# AirCoding Event Payload Registry V1 + +Date: 2026-05-27 +Status: Canonical event and payload registry for V1.0.0 Alpha skeleton + +This document defines the V1 RuntimeEvent type registry, persistence policy, payload shapes, and producer/consumer rules. + +Event envelope is defined in `baselineV1.md` and `packages/contracts/event.ts`: + +```ts +interface RuntimeEvent { + id: string + type: string + version: number + timestamp: string + session_id: string + project_id?: string + source: EventSource + route: string[] + payload: T +} +``` + +Registry rule: + +```text +event_type → payload schema → persistence policy → domain transaction → producer → consumers +``` + +Event producers must not decide persistence ad hoc. `EventStore` owns persistence policy by event type. + +## 1. Common Payload Conventions + +All payloads use snake_case JSON keys to match persisted DB column names and artifact metadata. + +Common aliases: + +```ts +type ISOTimeString = string +type JsonObject = Record +type EventPersistence = "durable" | "ephemeral" +type EventDelivery = "eventbus" | "eventbus_and_db" +``` + +Common lightweight references: + +`EntityRef` is defined in `interface-contracts-v1.md` §4 with the canonical `EntityType` enum (12 values including `capability` and `provider`). This document uses `EntityRef` by reference. + +```ts +interface EvidenceLink { + evidence_ref_id?: string + artifact_id?: string + diagnostic_id?: string + claim: string +} + +interface FailurePayload { + error: AirError + evidence_refs?: EvidenceLink[] + metadata?: JsonObject +} +``` + +Payloads should contain identifiers needed for routing/querying even when the same identifiers are also extracted into top-level event columns and domain tables. + +## 2. Persistence and Transaction Rules + +Persistence categories: + +```text +durable → inserted into events table and applied to domain tables in one transaction +ephemeral → published on EventBus only, not required for crash recovery +``` + +Rules: + +1. Durable event insert and corresponding domain table update must happen in the same SQLite transaction. +2. Ephemeral events may be throttled or coalesced by EventBus/ProjectionStore. +3. Ephemeral events that become important for diagnosis should be captured as artifacts or durable summaries, not promoted ad hoc. +4. Streaming deltas are ephemeral; completed message/tool/command records are durable. +5. `route` is append-only. Forwarders append their route segment; they never rewrite earlier route entries. +6. `route_text` in SQLite is derived from `route.join("/")` for indexing. +7. Payload schema changes require incrementing the event `version` for that event type. + +## 3. Durable Event Registry + +### 3.1 Session Events + +#### `session.created` v1 + +Persistence: durable. + +Producer: Main Agent / CLI startup. + +Domain update: insert `sessions` row. + +```ts +interface SessionCreatedPayload { + session_id: string + project_id: string + project_root: string + title?: string + model_provider_id?: string + model_id?: string + metadata?: JsonObject +} +``` + +#### `session.archived` v1 + +Persistence: durable. + +Domain update: update `sessions.status = archived`. + +```ts +interface SessionArchivedPayload { + session_id: string + reason?: string +} +``` + +#### `session.deleted` v1 + +Persistence: durable. + +Domain update: update `sessions.status = deleted`. + +```ts +interface SessionDeletedPayload { + session_id: string + reason?: string +} +``` + +### 3.2 Message Events + +#### `user.message.created` v1 + +Persistence: durable. + +Domain update: insert `messages` row. + +```ts +interface UserMessageCreatedPayload { + message_id: string + canonical_format: "anthropic" + content_json: unknown + parent_message_id?: string + token_estimate?: number + metadata?: JsonObject +} +``` + +#### `assistant.message.started` v1 + +Persistence: durable. + +Domain update: insert/update `message_drafts` row with `status = streaming`. + +```ts +interface AssistantMessageStartedPayload { + message_id: string + canonical_format: "anthropic" + parent_message_id?: string + route?: string[] + metadata?: JsonObject +} +``` + +#### `assistant.message.created` v1 + +Persistence: durable. + +Domain update: insert `messages` row and delete matching `message_drafts` row. + +```ts +interface AssistantMessageCreatedPayload { + message_id: string + canonical_format: "anthropic" + content_json: unknown + parent_message_id?: string + route?: string[] + token_estimate?: number + metadata?: JsonObject +} +``` + +#### `assistant.message.failed` v1 + +Persistence: durable. + +Domain update: update `message_drafts.status = error` or create failure artifact if draft is absent. + +```ts +interface AssistantMessageFailedPayload extends FailurePayload { + message_id: string + partial_content_json?: unknown +} +``` + +### 3.3 Agent Events + +#### `agent.started` v1 + +Persistence: durable. + +Domain update: insert `agents` row with `status = running` or `starting`. + +```ts +interface AgentStartedPayload { + agent_id: string + agent_type: "executor" | "reviewer" | "debugger" | "compactor" | "experience_miner" + task_id?: string + pid?: number + model_provider_id?: string + model_id?: string + workspace_id?: string + metadata?: JsonObject +} +``` + +#### `agent.completed` v1 + +Persistence: durable. + +Domain update: update `agents.status = completed`. + +```ts +interface AgentCompletedPayload { + agent_id: string + task_id?: string + summary: string + worker_result_ref?: string + metadata?: JsonObject +} +``` + +#### `agent.failed` v1 + +Persistence: durable. + +Domain update: update `agents.status = failed`. + +```ts +interface AgentFailedPayload extends FailurePayload { + agent_id: string + task_id?: string +} +``` + +#### `agent.lost` v1 + +Persistence: durable. + +Domain update: update `agents.status = lost`. + +```ts +interface AgentLostPayload { + agent_id: string + task_id?: string + last_heartbeat_at?: ISOTimeString + detection_reason: "heartbeat_timeout" | "process_exit_without_result" | "ipc_broken" +} +``` + +#### `agent.cancelled` v1 + +Persistence: durable. + +Domain update: update `agents.status = cancelled`. + +```ts +interface AgentCancelledPayload { + agent_id: string + task_id?: string + reason: string +} +``` + +### 3.4 Task Events + +#### `task.created` v1 + +Persistence: durable. + +Domain update: insert `tasks` row and optional `task_dependencies` rows. + +```ts +interface TaskDependencySpec { + depends_on_task_id: string + dependency_type: "hard" | "soft" | "conflict" | "serialization" + reason?: string + source?: "architecture" | "scheduler" | "worker" | "user" | "system" +} + +interface TaskCreatedPayload { + task_id: string + type: "execute" | "review" | "debug" | "compact" | "mine_experience" + title: string + task_spec_json: unknown + dependencies?: TaskDependencySpec[] + metadata?: JsonObject +} +``` + +#### `task.started` v1 + +Persistence: durable. + +Domain update: update `tasks.status = running`, set `started_at`, `assigned_agent_id`, `workspace_id`; insert `task_attempts` row. + +```ts +interface TaskStartedPayload { + task_id: string + agent_id: string + attempt_id: string + attempt_index: number + workspace_id?: string +} +``` + +#### `task.completed` v1 + +Persistence: durable. + +Domain update: update `tasks.status = completed`, set `worker_result_json`, `completed_at`; update `task_attempts`. + +```ts +interface TaskCompletedPayload { + task_id: string + agent_id?: string + attempt_id?: string + worker_result_json: unknown + summary: string + changed_files?: string[] + evidence_refs?: EvidenceLink[] +} +``` + +#### `task.blocked` v1 + +Persistence: durable. + +Domain update: update `tasks.status = blocked`; update `task_attempts` if applicable. + +```ts +interface TaskBlockedPayload { + task_id: string + agent_id?: string + reason: string + blocker_kind: "user_decision" | "architecture_decision" | "environment" | "permission" | "dependency" | "external" + evidence_refs?: EvidenceLink[] + suggested_next_step?: string +} +``` + +#### `task.failed` v1 + +Persistence: durable. + +Domain update: update `tasks.status = failed`; update `task_attempts.failure_*`. + +```ts +interface TaskFailedPayload extends FailurePayload { + task_id: string + agent_id?: string + attempt_id?: string +} +``` + +#### `task.cancelled` v1 + +Persistence: durable. + +Domain update: update `tasks.status = cancelled`. + +```ts +interface TaskCancelledPayload { + task_id: string + reason: string + cancelled_by: "user" | "main" | "scheduler" | "system" +} +``` + +#### `task.interrupted` v1 + +Persistence: durable. + +Domain update: update `tasks.status = interrupted`. + +```ts +interface TaskInterruptedPayload { + task_id: string + reason: string + resumable: boolean + resume_ref?: string +} +``` + +### 3.5 Tool Events + +#### `tool.started` v1 + +Persistence: durable. + +Domain update: insert `tool_runs` row with `status = running`. + +```ts +interface ToolStartedPayload { + tool_run_id: string + tool_name: string + task_id?: string + agent_id?: string + origin_message_id?: string + input_json: unknown + metadata?: JsonObject +} +``` + +#### `tool.completed` v1 + +Persistence: durable. + +Domain update: update `tool_runs.status = ok`, set output/artifacts/evidence/duration. + +```ts +interface ToolCompletedPayload { + tool_run_id: string + output_json?: unknown + duration_ms?: number + artifact_ids?: string[] + evidence_refs?: EvidenceLink[] + metadata?: JsonObject +} +``` + +#### `tool.failed` v1 + +Persistence: durable. + +Domain update: update `tool_runs.status = error`. + +```ts +interface ToolFailedPayload extends FailurePayload { + tool_run_id: string + duration_ms?: number +} +``` + +#### `tool.cancelled` v1 + +Persistence: durable. + +Domain update: update `tool_runs.status = cancelled`. + +```ts +interface ToolCancelledPayload { + tool_run_id: string + reason: string +} +``` + +### 3.6 Command Events + +#### `command.started` v1 + +Persistence: durable. + +Domain update: insert `command_runs` row. + +```ts +interface CommandStartedPayload { + command_run_id: string + task_id?: string + agent_id?: string + origin_message_id?: string + tool_run_id?: string + command: string + cwd: string + metadata?: JsonObject +} +``` + +#### `command.completed` v1 + +Persistence: durable. + +Domain update: update `command_runs.exit_code`, artifact refs, diagnostics, duration. + +```ts +interface CommandCompletedPayload { + command_run_id: string + exit_code: number + duration_ms?: number + stdout_artifact_id?: string + stderr_artifact_id?: string + combined_artifact_id?: string + diagnostic_ids?: string[] + parsed_diagnostics_json?: unknown + metadata?: JsonObject +} +``` + +#### `command.failed` v1 + +Persistence: durable. + +Domain update: update `command_runs.exit_code` when available and create failure artifacts. + +```ts +interface CommandFailedPayload extends FailurePayload { + command_run_id: string + exit_code?: number + duration_ms?: number + stdout_artifact_id?: string + stderr_artifact_id?: string + combined_artifact_id?: string +} +``` + +### 3.7 Artifact, Diagnostic, and Evidence Events + +#### `artifact.created` v1 + +Persistence: durable. + +Domain update: insert `artifacts` row after file has been written temp → atomic rename. + +```ts +interface ArtifactCreatedPayload { + artifact_id: string + type: string + uri: string + path: string + original_name?: string + size_bytes?: number + sha256?: string + task_id?: string + agent_id?: string + tool_run_id?: string + command_run_id?: string + associated_entity_type?: string + associated_entity_id?: string + metadata?: JsonObject +} +``` + +#### `diagnostic.created` v1 + +Persistence: durable. + +Domain update: insert `diagnostics` row. + +```ts +interface DiagnosticCreatedPayload { + diagnostic_id: string + task_id?: string + agent_id?: string + command_run_id?: string + artifact_id?: string + language?: string + toolchain?: string + severity?: string + file?: string + line?: number + column?: number + code?: string + message: string + semantic_signature: string + metadata?: JsonObject +} +``` + +#### `evidence.created` v1 + +Persistence: durable. + +Domain update: insert `evidence_refs` row. + +```ts +interface EvidenceCreatedPayload { + evidence_ref_id: string + kind: string + ref: string + location_json?: unknown + claim: string + task_id?: string + agent_id?: string + tool_run_id?: string + command_run_id?: string + artifact_id?: string + diagnostic_id?: string + message_id?: string +} +``` + +### 3.8 Context and Summary Events + +#### `context.compaction.requested` v1 + +Persistence: durable. + +Domain update: insert compaction task if Scheduler accepts it. + +```ts +interface ContextCompactionRequestedPayload { + reason: "token_budget" | "user_request" | "session_checkpoint" | "manual" + range_start_message_id?: string + range_end_message_id?: string + target_budget_tokens?: number +} +``` + +#### `context.compaction.started` v1 + +Persistence: durable. + +Domain update: mark compaction task running. + +```ts +interface ContextCompactionStartedPayload { + task_id: string + agent_id: string + range_start_message_id?: string + range_end_message_id?: string +} +``` + +#### `context.compaction.completed` v1 + +Persistence: durable. + +Domain update: mark compaction task complete. The `summaries` row is inserted by `summary.created`, not by this event. + +```ts +interface ContextCompactionCompletedPayload { + task_id?: string + agent_id?: string + summary_id: string + range_start_message_id?: string + range_end_message_id?: string + token_estimate_before?: number + token_estimate_after?: number +} +``` + +#### `context.compaction.failed` v1 + +Persistence: durable. + +Domain update: mark compaction task failed or blocked. + +```ts +interface ContextCompactionFailedPayload extends FailurePayload { + task_id?: string + agent_id?: string + range_start_message_id?: string + range_end_message_id?: string +} +``` + +#### `summary.created` v1 + +Persistence: durable. + +Domain update: insert `summaries` row. + +```ts +interface SummaryCreatedPayload { + summary_id: string + type: string + range_start_message_id?: string + range_end_message_id?: string + content_json: unknown + metadata?: JsonObject +} +``` + +### 3.9 Permission Events + +#### `permission.decision.recorded` v1 + +Persistence: durable. + +Domain update: append permission decision record to events; optional future projection table. + +```ts +interface PermissionDecisionRecordedPayload { + decision_id: string + subject: "tool" | "command" | "path" | "network" | "dependency" | "migration" + action: "allow" | "deny" | "ask_user" | "block" | "refuse" | "announce_then_run" + grant_scope: "none" | "once" | "session" | "project" | "global" + reason?: string + risk_level: "low" | "medium" | "high" | "critical" + decided_by: "user" | "policy" | "high_permission_mode" | "system" + scope_json?: unknown + expires_at?: ISOTimeString +} +``` + +#### `permission.prompt.requested` v1 + +Persistence: durable. + +Domain update: append event; optional UI projection. + +```ts +interface PermissionPromptRequestedPayload { + prompt_id: string + subject: string + risk_level: "low" | "medium" | "high" | "critical" + reason: string + options: string[] + default_option?: string + request_ref?: EntityRef +} +``` + +#### `permission.prompt.resolved` v1 + +Persistence: durable. + +Domain update: append event and create `permission.decision.recorded` if applicable. + +```ts +interface PermissionPromptResolvedPayload { + prompt_id: string + selected_option: string + decision_id?: string + resolved_by: "user" | "timeout" | "system" +} +``` + +### 3.10 Doctor and Dependency Events + +#### `doctor.run.started` v1 + +Persistence: durable. + +Domain update: append event and create optional report artifact later. + +```ts +interface DoctorRunStartedPayload { + run_id: string + mode: "read_only" | "fix" + trigger: "startup" | "manual" | "dependency_request" | "release_gate" +} +``` + +#### `doctor.issue.found` v1 + +Persistence: durable. + +Domain update: append event and optional diagnostic/report artifact. + +```ts +interface DoctorIssueFoundPayload { + run_id: string + issue_id: string + severity: "info" | "warning" | "error" | "blocking" + capability?: string + dependency?: string + message: string + fix_available: boolean + fix_requires_confirmation?: boolean +} +``` + +#### `doctor.fix.started` v1 + +Persistence: durable. + +Domain update: append event and optional command/tool run rows. + +```ts +interface DoctorFixStartedPayload { + run_id: string + issue_id: string + fix_id: string + strategy: string +} +``` + +#### `doctor.fix.completed` v1 + +Persistence: durable. + +Domain update: append event and update report artifact. + +```ts +interface DoctorFixCompletedPayload { + run_id: string + issue_id: string + fix_id: string + evidence_refs?: EvidenceLink[] +} +``` + +#### `doctor.fix.failed` v1 + +Persistence: durable. + +Domain update: append event and update report artifact. + +```ts +interface DoctorFixFailedPayload extends FailurePayload { + run_id: string + issue_id: string + fix_id: string +} +``` + +#### `doctor.run.completed` v1 + +Persistence: durable. + +Domain update: append event and create doctor report artifact. + +```ts +interface DoctorRunCompletedPayload { + run_id: string + status: "passed" | "issues_found" | "fixed" | "failed" + issue_count: number + blocking_issue_count: number + report_artifact_id?: string +} +``` + +### 3.11 Requirement and Architecture Events + +#### `requirement.changed` v1 + +Persistence: durable. + +Domain update: append event and mark impacted tasks when Scheduler applies it. + +```ts +interface RequirementChangedPayload { + change_id: string + origin_message_id: string + summary: string + change_type: "clarification" | "scope_change" | "architecture_change" | "constraint_change" | "cancellation" + affected_refs?: EntityRef[] +} +``` + +#### `architecture.plan.updated` v1 + +Persistence: durable. + +Domain update: append event and artifact/plan references. + +```ts +interface ArchitecturePlanUpdatedPayload { + plan_ref: string + update_kind: "created" | "revised" | "superseded" + summary: string + affected_task_ids?: string[] + adr_refs?: string[] + c4_refs?: string[] +} +``` + +#### `architecture.impact.completed` v1 + +Persistence: durable. + +Domain update: append event; Scheduler consumes to continue/replan/block. + +```ts +interface ArchitectureImpactCompletedPayload { + assessment_id: string + requirement_change_id?: string + impact_level: "implementation" | "interface" | "architecture" | "product" + decision: "silent_continue" | "requires_user_confirmation" | "requires_replan" | "reject_or_escalate" + summary: string + affected_task_ids?: string[] + evidence_refs?: EvidenceLink[] +} +``` + +### 3.12 Workspace and Merge Events + +#### `workspace.created` v1 + +Persistence: durable. + +Domain update: insert `workspaces` row. + +```ts +interface WorkspaceCreatedPayload { + workspace_id: string + task_id?: string + agent_id?: string + path: string + strategy: "main" | "worktree" | "isolated_copy" + base_ref?: string + branch_name?: string +} +``` + +#### `workspace.merge.started` v1 + +Persistence: durable. + +Domain update: append event and mark workspace merge in progress in metadata. + +```ts +interface WorkspaceMergeStartedPayload { + workspace_id: string + task_id?: string + strategy: "fast_forward" | "patch_apply" | "manual_merge" | "copy_back" + target_ref?: string +} +``` + +#### `workspace.merge.completed` v1 + +Persistence: durable. + +Domain update: update `workspaces.status = merged`, set `merged_at`. + +```ts +interface WorkspaceMergeCompletedPayload { + workspace_id: string + task_id?: string + merged_ref?: string + diff_artifact_id?: string +} +``` + +#### `workspace.merge.conflicted` v1 + +Persistence: durable. + +Domain update: update `workspaces.status = conflicted`. + +```ts +interface WorkspaceMergeConflictedPayload { + workspace_id: string + task_id?: string + conflict_files: string[] + conflict_artifact_id?: string + suggested_resolution?: "retry_serial" | "debugger" | "architecture_review" | "user_decision" +} +``` + +#### `workspace.cleaned` v1 + +Persistence: durable. + +Domain update: update `workspaces.status = cleaned` or append cleanup metadata. + +```ts +interface WorkspaceCleanedPayload { + workspace_id: string + reason: "merged" | "cancelled" | "abandoned" | "manual" +} +``` + +### 3.13 Memory and Debug Knowledge Events + +#### `memory.candidate.created` v1 + +Persistence: durable. + +Domain update: append event; future memory table may project it. + +```ts +interface MemoryCandidateCreatedPayload { + candidate_id: string + source_ref: EntityRef + memory_type: "project_rule" | "toolchain_rule" | "skill_update" | "debug_experience" + summary: string + evidence_refs?: EvidenceLink[] +} +``` + +#### `memory.promoted` v1 + +Persistence: durable. + +Domain update: append event and update `.air/shared/rules`, skill, or `learned-memory.db` through the owning subsystem. + +```ts +interface MemoryPromotedPayload { + candidate_id: string + target_ref: string + promoted_by: "user" | "curator" | "system" + summary: string +} +``` + +#### `memory.archived` v1 + +Persistence: durable. + +Domain update: append event and mark memory inactive in owning subsystem. + +```ts +interface MemoryArchivedPayload { + candidate_id?: string + memory_ref?: string + reason: string +} +``` + +#### `debug.record.created` v1 + +Persistence: durable. + +Domain update: insert/update `debug-records.db` and append event in session DB. + +```ts +interface DebugRecordCreatedPayload { + debug_record_id: string + task_id?: string + failure_signature: string + summary: string + evidence_refs?: EvidenceLink[] + verification_refs?: EvidenceLink[] +} +``` + +## 4. Ephemeral Event Registry + +Ephemeral events are for live rendering, streaming, and heartbeat. They are not required for crash recovery. + +### `agent.heartbeat` v1 + +Producer: child agent process. + +Consumer: Scheduler, ProjectionStore. + +```ts +interface AgentHeartbeatPayload { + agent_id: string + task_id?: string + status: "starting" | "running" + progress_text?: string + current_step?: string + resource_snapshot?: { + pid?: number + cpu_percent?: number + memory_bytes?: number + } +} +``` + +### `task.progress` v1 + +Producer: Scheduler or worker agent. + +Consumer: ProjectionStore, Main Agent summaries. + +```ts +interface TaskProgressPayload { + task_id: string + agent_id?: string + phase?: string + progress_text: string + percent?: number +} +``` + +### `assistant.message.delta` v1 + +Producer: Main Agent / provider adapter. + +Consumer: ProjectionStore; `message_drafts` may be periodically flushed by draft writer. + +```ts +interface AssistantMessageDeltaPayload { + message_id: string + delta: unknown + sequence: number +} +``` + +### `tool.progress` v1 + +Producer: streaming tool. + +Consumer: ProjectionStore, command/tool monitor. + +```ts +interface ToolProgressPayload { + tool_run_id: string + message: string + progress_json?: unknown +} +``` + +### `command.stdout.delta` v1 and `command.stderr.delta` v1 + +Producer: shell/command runner. + +Consumer: ProjectionStore, artifact writer. + +```ts +interface CommandStreamDeltaPayload { + command_run_id: string + chunk: string + sequence: number + truncated?: boolean +} +``` + +### `hud.frame.rendered` v1 + +Producer: TUI/HUD. + +Consumer: local performance/debug logging only. + +```ts +interface HudFrameRenderedPayload { + frame_id: string + duration_ms?: number + dropped_frame_count?: number +} +``` + +## 5. Producer and Consumer Boundaries + +Producer responsibilities: + +1. Emit valid RuntimeEvent envelopes. +2. Provide IDs generated by the subsystem that owns the entity. +3. Append route segment when forwarding. +4. Never update SQLite domain tables directly unless the producer is the owning store/service. + +EventStore responsibilities: + +1. Validate event version and payload schema. +2. Apply durable events and domain table updates transactionally. +3. Derive query columns such as `task_id`, `agent_id`, `tool_run_id`, `command_run_id`, `route_text`. +4. Publish committed durable events to EventBus after commit. +5. Reject unknown durable event types unless explicitly allowed by development-mode config. + +ProjectionStore responsibilities: + +1. Hydrate from DB at startup/resume. +2. Apply live durable and ephemeral events. +3. Coalesce noisy deltas for TUI/HUD. +4. Never become the source of truth for scheduling or recovery. + +Scheduler responsibilities: + +1. Consume task/agent/workspace/architecture events. +2. Drive retries, dependency unblocking, merge waves, and escalation. +3. Treat missing heartbeat as `agent.lost` and persist that durable event. + +## 6. V1 Event Type Index + +Durable: + +```text +session.created +session.archived +session.deleted +user.message.created +assistant.message.started +assistant.message.created +assistant.message.failed +agent.started +agent.completed +agent.failed +agent.lost +agent.cancelled +task.created +task.started +task.completed +task.blocked +task.failed +task.cancelled +task.interrupted +tool.started +tool.completed +tool.failed +tool.cancelled +command.started +command.completed +command.failed +artifact.created +diagnostic.created +evidence.created +context.compaction.requested +context.compaction.started +context.compaction.completed +context.compaction.failed +summary.created +permission.decision.recorded +permission.prompt.requested +permission.prompt.resolved +doctor.run.started +doctor.issue.found +doctor.fix.started +doctor.fix.completed +doctor.fix.failed +doctor.run.completed +requirement.changed +architecture.plan.updated +architecture.impact.completed +workspace.created +workspace.merge.started +workspace.merge.completed +workspace.merge.conflicted +workspace.cleaned +memory.candidate.created +memory.promoted +memory.archived +debug.record.created +``` + +Ephemeral: + +```text +agent.heartbeat +task.progress +assistant.message.delta +tool.progress +command.stdout.delta +command.stderr.delta +hud.frame.rendered +``` + +## 7. V1.0.0 Alpha Cut Line + +The V1.0.0 Alpha skeleton must implement schema validation and EventStore handling for all durable event names in the V1 index, even if some subsystem producers are initially stubs. + +The first implementation may keep payload schemas in TypeScript with runtime validation generated from the same definitions. Unknown plugin/capability events must use a namespaced prefix and must not be durable until registered. diff --git a/AirPlan/docs/architecture/interface-contracts-v1.md b/AirPlan/docs/architecture/interface-contracts-v1.md new file mode 100644 index 0000000..a985963 --- /dev/null +++ b/AirPlan/docs/architecture/interface-contracts-v1.md @@ -0,0 +1,1334 @@ +# AirCoding Interface Contracts V1 + +Date: 2026-05-27 +Status: Canonical implementation-facing interface contract set for V1.0.0 Alpha + +This document freezes V1 public TypeScript interfaces and service boundaries. Implementations may use classes, functions, or modules, but exported contracts, dependency direction, and serialization shapes must remain stable unless a later ADR updates them. + +## 1. Naming and Serialization Conventions + +V1 TypeScript public contracts use `snake_case` field names. Runtime events, tool payloads, DB JSON metadata, IPC messages, and WorkerResult structures therefore share one JSON-compatible field convention. + +Rationale: + +1. Event payloads, DB columns, tool schemas, and persisted JSON are already `snake_case`. +2. Avoiding a camelCase↔snake_case mapper reduces V1.0.0 Alpha implementation cost and prevents boundary drift. +3. Provider adapters may translate external provider formats, but AirCoding internal contracts remain `snake_case`. + +Implementation code may use local camelCase variables internally, but exported interfaces in `packages/contracts` must keep `snake_case` field names unless a later ADR changes this. + +## 2. Core Primitive Types + +```ts +export type ISOTimeString = string +export type UUID = string +export type ProjectID = string +export type SessionID = string +export type MessageID = string +export type TaskID = string +export type AgentID = string +export type ToolRunID = string +export type CommandRunID = string +export type ArtifactID = string +export type EvidenceRefID = string +export type WorkspaceID = string +export type SummaryID = string +export type CapabilityID = string +export type ProviderID = string +export type ModelID = string +export type WaveID = string +export type JsonObject = Record +export type JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue } +// JsonSchema is nominal-only: T provides no compile-time runtime check, but documents the expected shape for tool schema consumers. +export type JsonSchema = JsonObject +``` + +Testability primitives: + +```ts +export interface Clock { + now(): ISOTimeString +} + +export interface IdGenerator { + uuid(): UUID + project_id(): ProjectID + session_id(): SessionID + message_id(): MessageID + task_id(): TaskID + agent_id(): AgentID + tool_run_id(): ToolRunID + command_run_id(): CommandRunID + artifact_id(): ArtifactID + evidence_ref_id(): EvidenceRefID + workspace_id(): WorkspaceID + summary_id(): SummaryID +} +``` + +## 3. Error Contracts + +```ts +export type ErrorKind = + | "user_error" + | "project_error" + | "env_error" + | "dependency_error" + | "permission_error" + | "tool_error" + | "command_error" + | "build_error" + | "test_error" + | "static_analysis_error" + | "debug_error" + | "provider_error" + | "model_capability_error" + | "context_error" + | "agent_error" + | "scheduler_error" + | "workspace_error" + | "merge_error" + | "architecture_error" + | "policy_error" + | "system_error" + | "unknown_error" + +export type ErrorSeverity = "info" | "warning" | "error" | "fatal" +export type Retryability = "retryable" | "retryable_after_change" | "not_retryable" | "unknown" + +export interface AirError { + error_id: UUID + kind: ErrorKind + severity: ErrorSeverity + message: string + detail?: string + retryability: Retryability + semantic_signature: string + cause_ref?: EntityRef + cause_refs?: EntityRef[] + user_action?: string + metadata?: JsonObject +} +``` + +All tool, event, worker, provider, and command failures use `AirError`. Do not introduce parallel `error_kind` / `retryable` / `failure_signature` shapes. + +## 4. Entity References + +```ts +export type EntityType = + | "session" + | "message" + | "task" + | "agent" + | "tool_run" + | "command_run" + | "artifact" + | "diagnostic" + | "workspace" + | "summary" + | "capability" + | "provider" + +export interface EntityRef { + type: EntityType + id: string +} +``` + +## 5. Runtime Event Contracts + +```ts +export type AgentType = "executor" | "reviewer" | "debugger" | "compactor" | "experience_miner" + +export interface EventSource { + kind: "main" | "architecture_designer" | "scheduler" | "agent" | "tool" | "system" + id?: string + agent_type?: AgentType +} + +export interface RuntimeEvent { + id: UUID + type: string + version: number + timestamp: ISOTimeString + session_id: SessionID + project_id?: ProjectID + source: EventSource + route: string[] + payload: TPayload +} + +export interface EventFilter { + session_id?: SessionID + types?: string[] + task_id?: TaskID + agent_id?: AgentID + tool_run_id?: ToolRunID + command_run_id?: CommandRunID + route_prefix?: string[] + since?: ISOTimeString +} +``` + +Event payload schemas and persistence policy are defined in `event-registry-v1.md`. + +## 6. Transaction and Storage Contracts + +```ts +export interface TransactionHandle { + id: string +} + +export interface DatabaseHandle { + path: string +} + +export interface TransactionManager { + transaction(fn: (tx: TransactionHandle) => Promise): Promise +} +``` + +Repository records mirror `db-schema-v1.md` columns and use `snake_case`. + +```ts +export interface SessionRecord { + id: SessionID + project_id: ProjectID + project_root: string + title?: string + status: "active" | "archived" | "deleted" + created_at: ISOTimeString + updated_at: ISOTimeString + exited_at?: ISOTimeString + model_provider_id?: ProviderID + model_id?: ModelID + metadata_json?: string +} + +export interface MessageRecord { + id: MessageID + session_id: SessionID + role: string + canonical_format: "anthropic" + content_json: string + parent_message_id?: MessageID + route_json?: string + created_at: ISOTimeString + token_estimate?: number + metadata_json?: string +} + +export type TaskType = "execute" | "review" | "debug" | "compact" | "mine_experience" | "docs" +export type TaskStatus = "pending" | "running" | "completed" | "failed" | "blocked" | "cancelled" | "interrupted" + +export interface TaskRecord { + id: TaskID + session_id: SessionID + type: TaskType + status: TaskStatus + title: string + task_spec_json: string + worker_result_json?: string + assigned_agent_id?: AgentID + workspace_id?: WorkspaceID + retry_count: number + created_at: ISOTimeString + started_at?: ISOTimeString + completed_at?: ISOTimeString + heartbeat_at?: ISOTimeString + metadata_json?: string +} + +export type TaskInsert = Omit & { + retry_count?: number +} +export type TaskUpdate = Partial> + +export type PersistedEventInsert = Omit & { + route_text?: string +} + +export type TaskDependencyType = "hard" | "soft" | "conflict" | "serialization" + +export interface TaskDependencyRecord { + id: UUID + session_id: SessionID + task_id: TaskID + depends_on_task_id: TaskID + dependency_type: TaskDependencyType + reason?: string + created_at: ISOTimeString +} + +export interface PersistedEventRecord { + id: UUID + session_id: SessionID + type: string + version: number + timestamp: ISOTimeString + source_kind: string + source_id?: string + agent_type?: AgentType + task_id?: TaskID + agent_id?: AgentID + tool_run_id?: ToolRunID + command_run_id?: CommandRunID + route_json: string + route_text: string + payload_json: string +} +``` + +Repository layer: + +```ts +export interface Repository { + get(id: string, tx?: TransactionHandle): Promise + insert(record: TInsert, tx?: TransactionHandle): Promise + update(id: string, patch: TUpdate, tx?: TransactionHandle): Promise +} + +export interface TaskRepository extends Repository { + list_by_status(session_id: SessionID, statuses: TaskStatus[], tx?: TransactionHandle): Promise + list_runnable_candidates(session_id: SessionID, tx?: TransactionHandle): Promise +} + +export interface EventRepository { + insert(event: PersistedEventRecord, tx: TransactionHandle): Promise + query(filter: EventFilter): Promise +} +``` + +Repositories are persistence adapters only. They must not contain Scheduler, permission, or projection policy. + +## 7. EventBus, EventStore, and Ingestion Contracts + +```ts +export interface Subscription { + unsubscribe(): void +} + +export interface EventBus { + publish(event: RuntimeEvent): void + subscribe(filter: EventFilter, handler: (event: RuntimeEvent) => void | Promise): Subscription + drain?(): Promise +} + +export interface EventStore { + append(event: RuntimeEvent, options?: EventAppendOptions): Promise + append_many(events: RuntimeEvent[], options?: EventAppendOptions): Promise + query(filter: EventFilter): Promise +} + +export interface EventAppendOptions { + expected_session_id?: SessionID + transaction?: TransactionHandle +} + +export interface EventIngestor { + ingest(event: RuntimeEvent): Promise + ingest_ephemeral(event: RuntimeEvent): Promise +} + +export interface EventSchemaRegistry { + register(type: string, version: number, schema: JsonObject): void + validate(type: string, version: number, payload: unknown): boolean + list(): Array<{ type: string; version: number }> + get_schema(type: string, version: number): JsonObject | undefined +} +``` + +Rules: + +1. `EventIngestor` is the runtime entry point for events from agents/tools/workers. +2. `EventStore` validates durable event schema and applies domain projections transactionally. +3. EventBus publication of durable events happens after commit. +4. EventBus is live transport only and is not a recovery source of truth. +5. If a `subscribe` handler throws, the error is caught, logged to developer log, and does not propagate to the publisher. The subscription remains active. + +## 8. Project and Session Contracts + +```ts +export interface ProjectContext { + project_id: ProjectID + project_root: string + air_root: string + shared_root: string + local_root: string + schema_version: number +} + +export interface ProjectInitOptions { + force?: boolean + title?: string + default_rules?: boolean +} + +export interface ProjectStore { + locate(start_path: string): Promise + initialize(project_root: string, options?: ProjectInitOptions): Promise + open(project_root: string): Promise +} + +export interface SessionContext { + session_id: SessionID + project_id: ProjectID + project_root: string + db_path: string + artifact_root: string +} + +export interface OpenSessionOptions { + session_id?: SessionID + title?: string + model_provider_id?: ProviderID + model_id?: ModelID +} + +export interface SessionManager { + open_session(project: ProjectContext, options?: OpenSessionOptions): Promise + close_session(session_id: SessionID): Promise +} +``` + +## 9. Task and Scheduler Contracts + +```ts +export interface TaskDependencySpec { + depends_on_task_id: TaskID + dependency_type: TaskDependencyType + reason?: string + source?: "architecture" | "scheduler" | "worker" | "user" | "system" +} + +export interface TaskScope { + write_area?: string + expected_files?: string[] + allowed_paths?: string[] + denied_paths?: string[] +} + +export interface VerificationPolicy { + commands?: string[] + required: boolean + fallback_allowed: boolean +} + +export interface TaskConstraints { + max_turns: number + soft_timeout_ms: number + hard_timeout_ms: number + retry_budget: number + model_policy: "scheduler_forced" | "agent_select" + model_provider_id?: ProviderID + model_id?: ModelID +} + +export interface TaskContextRefs { + plan_ref?: string + arc_ref?: string + parent_task_results?: ArtifactID[] + artifacts?: ArtifactID[] +} + +export type WorkerOutputContract = + | "ExecutorResult" + | "ReviewerResult" + | "DebuggerResult" + | "CompactorResult" + | "ExperienceMinerResult" + +export interface TaskSpec { + id: TaskID + type: TaskType + title: string + description: string + acceptance_criteria: string[] + scope: TaskScope + dependencies: TaskDependencySpec[] + verification: VerificationPolicy + constraints: TaskConstraints + context_refs: TaskContextRefs + output_contract: WorkerOutputContract +} + +export interface TaskNode { + task_id: TaskID + spec: TaskSpec + status: TaskStatus + assigned_agent_id?: AgentID + retry_count: number + workspace_id?: WorkspaceID +} + +export interface TaskGraph { + session_id: SessionID + tasks: Map + dependencies: TaskDependencyRecord[] +} + +export interface WorkspacePlan { + strategy: "main" | "worktree" | "isolated_copy" + path?: string + base_ref?: string + branch_name?: string + reason: string +} + +export interface ModelAssignment { + mode: "scheduler_forced" | "agent_select" + provider_id?: ProviderID + model_id?: ModelID + allowed_models?: Array<{ provider_id: ProviderID; model_id: ModelID }> + requirement: ModelRequirement + reason: string +} + +export interface SchedulerWavePlan { + wave_id: WaveID + runnable_task_ids: TaskID[] + serialized_task_ids: TaskID[] + workspace_assignments: Record + model_assignments: Record + reason: string +} + +export interface SchedulerRunResult { + status: "completed" | "blocked" | "cancelled" | "idle" + completed_task_ids: TaskID[] + blocked_task_ids: TaskID[] + summary: string +} + +export interface Scheduler { + create_tasks(session_id: SessionID, specs: TaskSpec[]): Promise + add_dependency(session_id: SessionID, task_id: TaskID, dependency: TaskDependencySpec): Promise + load_graph(session_id: SessionID): Promise + run_until_idle(session_id: SessionID): Promise + cancel_task(task_id: TaskID, reason: string): Promise +} +``` + +## 10. Worker and IPC Contracts + +IPC uses NDJSON messages with explicit direction, correlation IDs, and request/response envelopes. + +```ts +export type IpcDirection = "parent_to_worker" | "worker_to_parent" + +export interface IpcEnvelope { + id: UUID + direction: IpcDirection + kind: IpcKind + timestamp: ISOTimeString + session_id: SessionID + agent_id: AgentID + correlation_id?: UUID + protocol_version: number + payload: TPayload +} + +export type IpcKind = + | "control" + | "event" + | "log" + | "tool.call" + | "tool.result" + | "tool.stream" + | "worker.result" + | "worker.checkpoint" + | "protocol.error" + +export type IpcMessage = + | IpcEnvelope + | IpcEnvelope + | IpcEnvelope + | IpcEnvelope + | IpcEnvelope + | IpcEnvelope + | IpcEnvelope + | IpcEnvelope + | IpcEnvelope + +export interface LogPayload { + level: "debug" | "info" | "warn" | "error" + message: string + data?: unknown +} + +export type ControlMessage = + | { + type: "agent.start" + version: 1 + task_spec: TaskSpec + context_pack: ContextPack + runtime: AgentRuntimeContext + } + | { type: "agent.cancel"; reason: string } + | { type: "agent.pause"; reason: string } + | { type: "agent.resume" } + | { type: "agent.extend_timeout"; extra_ms: number; reason: string } + | { type: "worker.ready"; protocol_version: number; worker_version: string } + +export interface AgentRuntimeContext { + session_id: SessionID + project_id: ProjectID + agent_id: AgentID + worktree_path?: string + permission_template: "main_direct" | "executor" | "reviewer" | "debugger" | "system" +} + +export interface ContextPack { + refs: { + plan_ref?: string + arc_ref?: string + task_refs?: TaskID[] + artifact_refs?: ArtifactID[] + rule_refs?: string[] + } + assembled_context_ref?: ArtifactID + notes?: string[] +} + +export interface ToolCallRequest { + tool_call_id: UUID + tool_name: string + input: unknown + context: ToolExecutionContext +} + +export interface ToolCallResponse { + tool_call_id: UUID + result: ToolResultEnvelope +} + +export interface ToolStreamPayload { + tool_call_id: UUID + event: ToolEvent +} + +export interface WorkerCheckpointPayload { + checkpoint_id: UUID + task_id: TaskID + data: unknown +} + +export interface ProtocolErrorPayload { + error: AirError + received_message_id?: UUID +} +``` + +IPC handshake: parent sends `agent.start` after spawn; worker responds with `worker.ready` carrying `protocol_version` before receiving tasks. If `protocol_version` does not match, the parent terminates the worker with a `protocol.error`. + +IPC direction typing: `ParentToWorkerMessage` covers `control`, `tool.result`, `tool.stream`. `WorkerToParentMessage` covers `event`, `log`, `tool.call`, `worker.result`, `worker.checkpoint`, `protocol.error`. Both share `IpcEnvelope` shape; runtime validation enforces direction. + +Worker role: + +```ts +export interface WorkerRole { + run(task_spec: TaskSpec, context_pack: ContextPack, runtime: WorkerRuntime): Promise> +} + +export interface WorkerRuntime { + emit(event: RuntimeEvent): Promise + call_tool(name: string, input: I): Promise> + checkpoint(data: unknown): Promise +} +``` + +## 11. WorkerResult Contracts + +```ts +export type WorkerStatus = "completed" | "failed" | "blocked" | "cancelled" + +export interface VerificationResult { + name: string + status: "passed" | "failed" | "skipped" | "unknown" + evidence_ref_ids?: EvidenceRefID[] + notes?: string +} + +export interface Risk { + severity: "low" | "medium" | "high" + summary: string +} + +export interface FollowUpTask { + title: string + description: string + type?: TaskType +} + +export interface WorkerResult { + task_id: TaskID + agent_id: AgentID + agent_type: AgentType + status: WorkerStatus + summary: string + changed_files: string[] + diff_ref?: ArtifactID + artifacts: ArtifactRef[] + verification: VerificationResult[] + risks: Risk[] + follow_up_tasks: FollowUpTask[] + evidence_refs: EvidenceRef[] + result: TResult +} + +export interface ExecutorResult { + implementation_summary: string + changed_files: string[] + verification_commands: string[] +} + +export interface ReviewerResult { + verdict: "approved" | "changes_requested" | "blocked" + findings: ReviewFinding[] +} + +export interface ReviewFinding { + severity: "low" | "medium" | "high" + category: "correctness" | "security" | "scope" | "architecture" | "test" | "maintainability" + message: string + file?: string + line?: number + evidence_ref_ids?: EvidenceRefID[] +} + +export interface BlockerReport { + impact_level: "implementation" | "interface" | "architecture" | "product" | "permission" | "environment" | "policy" + reason: string + required_decision: string + options?: Array<{ label: string; tradeoff: string }> + evidence_ref_ids?: EvidenceRefID[] + suggested_default?: string +} + +export interface DebuggerResult { + diagnosis: string + root_cause?: string + fixed: boolean + blocker?: BlockerReport +} + +export interface CompactorResult { + summary_id: SummaryID + range_start_message_id?: MessageID + range_end_message_id?: MessageID + token_estimate_before?: number + token_estimate_after?: number +} + +export interface MemoryCandidate { + candidate_id: UUID + memory_type: "project_rule" | "toolchain_rule" | "skill_update" | "debug_experience" + summary: string + evidence_ref_ids?: EvidenceRefID[] +} + +export interface ExperienceMinerResult { + candidates: MemoryCandidate[] +} +``` + +## 12. Tool Contracts + +```ts +export type ToolCategory = + | "filesystem" + | "shell" + | "git" + | "project" + | "build" + | "test" + | "debug" + | "static_analysis" + | "gui" + | "network" + | "memory" + | "context" + | "artifact" + | "permission" + | "doctor" + | "internal" + +export interface ToolPermissionSpec { + read_paths?: PathPolicy + write_paths?: PathPolicy + execute?: boolean + network?: boolean + system_sensitive?: boolean + credentials?: boolean +} + +export interface PathPolicy { + allow?: string[] + deny?: string[] + source?: string +} + +export interface ToolDefinition { + name: string + version: number + description: string + input_schema: JsonSchema + output_schema: JsonSchema + category: ToolCategory + permissions: ToolPermissionSpec + streaming: boolean +} + +export interface ToolExecutor { + execute(input: I, context: ToolExecutionContext): Promise> +} + +export interface StreamingToolExecutor { + execute_streaming(input: I, context: ToolExecutionContext): AsyncIterable + execute_final(input: I, context: ToolExecutionContext): Promise> +} + +export interface ToolExecutionContext { + session_id: SessionID + project_id: ProjectID + task_id?: TaskID + agent_id?: AgentID + origin_message_id?: MessageID + permission_template: string + cwd?: string +} + +export interface ToolResultEnvelope { + status: "ok" | "error" | "cancelled" + output?: T + error?: AirError + artifact_ids?: ArtifactID[] + evidence_ref_ids?: EvidenceRefID[] + metadata?: JsonObject +} + +export interface ToolEvent { + type: "progress" | "artifact" | "result" + payload: unknown +} + +export interface ToolRegistry { + register(definition: ToolDefinition, executor: ToolExecutor): void + register_streaming(definition: ToolDefinition, executor: StreamingToolExecutor): void + call(name: string, input: I, context: ToolExecutionContext): Promise> + call_streaming(name: string, input: I, context: ToolExecutionContext): AsyncIterable> + list(): ToolDefinition[] +} +``` + +Tool streaming rule: `call()` consumes stream events internally and returns the final `ToolResultEnvelope`; `call_streaming()` exposes progress events and must end with exactly one final result envelope. + +## 13. Permission Contracts + +```ts +export interface PermissionRequestContext { + session_id: SessionID + task_id?: TaskID + agent_id?: AgentID + tool_name?: string + command?: string + paths?: string[] + network?: boolean + requested_action: string + reason: string +} + +export type PermissionAction = "allow" | "deny" | "ask_user" | "block" | "refuse" | "announce_then_run" +export type PermissionGrantScope = "none" | "once" | "session" | "project" | "global" + +export interface PermissionDecision { + action: PermissionAction + grant_scope: PermissionGrantScope + risk_level: "low" | "medium" | "high" | "critical" + reason: string + required_confirmation?: boolean + backup_required?: boolean + evidence_ref_ids?: EvidenceRefID[] +} + +export interface PermissionRecordResult { + ok: boolean + error?: AirError +} + +export interface PermissionEngine { + evaluate(context: PermissionRequestContext): Promise + record(decision: PermissionDecision, context: PermissionRequestContext): Promise +} +``` + +Permission checks are layered: tool capability policy → permission profile → task scope → path/command/network risk → credential/system-sensitive override → user prompt workflow. + +## 14. Artifact and Evidence Contracts + +```ts +export interface ArtifactRef { + artifact_id: ArtifactID + uri: string + path: string + type: string + sha256?: string + size_bytes?: number +} + +export interface EvidenceRef { + evidence_ref_id: EvidenceRefID + kind: string + ref: string + claim: string + location_json?: unknown +} + +export interface ArtifactCreateInput { + type: string + original_name?: string + content?: string + source_path?: string + associated_entity_type?: string + associated_entity_id?: string + metadata?: JsonObject +} + +export interface ArtifactContext { + session_id: SessionID + task_id?: TaskID + agent_id?: AgentID + tool_run_id?: ToolRunID + command_run_id?: CommandRunID +} + +export interface ArtifactReadResult { + artifact: ArtifactRef + content?: string | Uint8Array + content_type?: string +} + +export interface EvidenceCreateInput { + kind: string + ref: string + claim: string + location_json?: unknown + task_id?: TaskID + agent_id?: AgentID + tool_run_id?: ToolRunID + command_run_id?: CommandRunID + artifact_id?: ArtifactID + diagnostic_id?: string + message_id?: MessageID +} + +export interface ArtifactStore { + create(input: ArtifactCreateInput, context: ArtifactContext): Promise + get(artifact_id: ArtifactID): Promise + read(artifact_id: ArtifactID): Promise +} + +export interface EvidenceStore { + create(input: EvidenceCreateInput): Promise + list_for_entity(entity_type: string, entity_id: string): Promise +} +``` + +Worker results embed full `EvidenceRef[]` when evidence is part of the worker conclusion; lightweight payloads may carry `evidence_ref_ids`. + +## 15. Provider Contracts + +```ts +export interface ProviderCapabilityMatrix { + provider_id: ProviderID + provider_kind: "anthropic" | "openai" | "openrouter" | "ollama" | "anthropic_compatible" | "openai_compatible" | "custom" + model_id: ModelID + enabled: boolean + quality_tier: "frontier" | "strong" | "standard" | "cheap" | "local" | "unknown" + cost_tier: "high" | "medium" | "low" | "free" | "unknown" + context_window_tokens?: number + max_output_tokens?: number + supports: JsonObject + conversion: JsonObject +} + +export interface ModelRequirement { + required: JsonObject + preferred?: JsonObject + min_quality_tier?: "frontier" | "strong" | "standard" | "cheap" | "local" + max_cost_tier?: "high" | "medium" | "low" | "free" + min_context_window_tokens?: number + allow_lossy_conversion?: boolean +} + +export interface ProviderCompletionInput { + provider_id: ProviderID + model_id: ModelID + canonical_format: "anthropic" + messages: unknown[] + tools?: unknown[] + tool_choice?: unknown + system?: unknown + max_output_tokens?: number + temperature?: number + metadata?: JsonObject +} + +export interface ProviderStreamEvent { + type: "message_start" | "content_delta" | "tool_use" | "message_stop" | "error" + payload: unknown +} + +export interface ProviderAdapter { + provider_id: ProviderID + list_models(): Promise + validate_model(model_id: ModelID): Promise + complete(input: ProviderCompletionInput): AsyncIterable + count_tokens?(input: unknown): Promise +} + +export interface ProviderManager { + select_model(requirement: ModelRequirement): Promise + complete(input: ProviderCompletionInput): AsyncIterable +} +``` + +## 16. Context Contracts + +```ts +export interface ContextAssembleInput { + task_id?: TaskID + purpose: "main" | "execute" | "review" | "debug" | "compact" | "mine_experience" + refs?: string[] + token_budget?: number +} + +export interface AssembledContext { + canonical_format: "anthropic" + messages: unknown[] + omissions: string[] + refs: string[] + token_estimate?: number + compaction_requested?: boolean + messages_artifact_id?: ArtifactID +} + +export interface ContextAssembler { + assemble(input: ContextAssembleInput): Promise +} + +export type PromptLayerLevel = + | "runtime_invariant" + | "role" + | "project_rules" + | "task_spec" + | "architecture" + | "evidence" + | "tool_output" + | "conversation" + | "user_override" + | "system_debug" + +export interface PromptLayer { + level: PromptLayerLevel + priority: number + content: unknown + token_estimate?: number + source_ref?: string + immutable?: boolean +} + +export interface BudgetFitResult { + fitted: PromptLayer[] + omitted: PromptLayer[] + omissions: string[] + total_tokens: number +} + +export interface PromptLayerLoader { + load_runtime_invariant(): PromptLayer + load_role(role: AgentType): PromptLayer + load_project_rules(project: ProjectContext): PromptLayer[] + load_task_context(spec: TaskSpec, context_refs: TaskContextRefs): PromptLayer[] +} + +export interface CompactionPolicy { + should_compact(messages: unknown[], token_budget: number): boolean + compact(messages: unknown[], target_tokens: number): Promise +} + +export interface CompactionResult { + summary_id: SummaryID + range_start_message_id?: MessageID + range_end_message_id?: MessageID + token_estimate_before: number + token_estimate_after: number +} +``` + +`context.assemble` tool may return `messages_artifact_id` when context is too large for inline return; `ContextPack.assembled_context_ref` points to that artifact. + +## 17. Projection/UI Contracts + +```ts +export interface SessionProjection { + session_id: SessionID + title?: string + status: string +} + +export interface TaskProjection { + task_id: TaskID + title: string + status: TaskStatus + progress_text?: string +} + +export interface AgentProjection { + agent_id: AgentID + agent_type: AgentType + status: string + task_id?: TaskID + progress_text?: string +} + +export interface ToolRunProjection { + tool_run_id: ToolRunID + tool_name: string + status: string + task_id?: TaskID +} + +export interface CommandRunProjection { + command_run_id: CommandRunID + command: string + status: "running" | "ok" | "error" | "cancelled" | "unknown" + exit_code?: number +} + +export interface ArtifactProjection { + artifact_id: ArtifactID + type: string + uri: string +} + +export interface PermissionPromptProjection { + prompt_id: string + subject: string + risk_level: string + reason: string + options: string[] +} + +export interface BlockerProjection { + task_id?: TaskID + reason: string + required_decision: string +} + +export interface ProjectionSnapshot { + session?: SessionProjection + tasks: TaskProjection[] + agents: AgentProjection[] + tool_runs: ToolRunProjection[] + command_runs: CommandRunProjection[] + artifacts: ArtifactProjection[] + permission_prompts: PermissionPromptProjection[] + blockers: BlockerProjection[] + updated_at: ISOTimeString +} + +// ProjectionStore.apply handles all durable events and key ephemeral events +// (agent.heartbeat, task.progress, assistant.message.delta, tool.progress, +// command.stdout.delta, command.stderr.delta). Unknown event types are ignored. +export interface ProjectionStore { + hydrate(session_id: SessionID): Promise + apply(event: RuntimeEvent): void + snapshot(): ProjectionSnapshot + subscribe(handler: (snapshot: ProjectionSnapshot) => void): Subscription +} + +export interface ProjectionClient { + snapshot(): ProjectionSnapshot + subscribe(handler: (snapshot: ProjectionSnapshot) => void): Subscription +} +``` + +TUI may consume only `ProjectionClient` or projection contracts, never runtime internals, SQLite, or EventBus directly. + +V1 transport: TUI runs in-process with runtime. `ProjectionClient` is a direct interface reference, not IPC. UI command API (permission prompt responses, user blocker decisions) emits typed events through a narrow `UiCommandChannel` interface. This boundary is enforced by module imports: `packages/tui` may only import from `packages/contracts`, never from `packages/runtime/src/*`. + +## 18. Capability Contracts + +```ts +export interface CapabilityManifestV1 { + schema_version: 1 + capability_id: CapabilityID + display_name: string + version: string + description: string + publisher?: string + source: JsonObject + trust_level: "built_in" | "project_local" | "user_installed" | "verified_publisher" | "untrusted" + tools: Array<{ + name: string + version: number + category: ToolCategory + description: string + input_schema: JsonSchema + output_schema: JsonSchema + streaming?: boolean + permissions: ToolPermissionSpec + }> + dependencies?: JsonObject[] + permissions: JsonObject + events?: { produced?: string[]; consumed?: string[] } + artifact_types?: string[] + config_schema?: JsonSchema + entrypoint?: JsonObject +} + +export interface ValidationResult { + ok: boolean + errors: string[] + warnings: string[] +} + +export interface CapabilityRegistry { + discover(): Promise + validate(manifest: CapabilityManifestV1): Promise + enable(capability_id: CapabilityID): Promise + disable(capability_id: CapabilityID): Promise + register_tools(tool_registry: ToolRegistry): Promise +} +``` + +## 19. Doctor and Logging Contracts + +```ts +export interface DoctorRunInput { + mode: "read_only" | "fix" + scope?: "startup" | "project" | "toolchain" | "release_gate" + capabilities?: CapabilityID[] + bundle?: boolean +} + +export interface DoctorRunOutput { + run_id: string + status: "passed" | "issues_found" | "fixed" | "failed" + issue_count: number + blocking_issue_count: number + report_artifact_id?: ArtifactID + bundle_artifact_id?: ArtifactID +} + +export interface DoctorService { + run(input: DoctorRunInput): Promise +} + +export interface Logger { + debug(message: string, data?: unknown): void + info(message: string, data?: unknown): void + warn(message: string, data?: unknown): void + error(message: string, data?: unknown): void +} + +export interface DeveloperLogEncryptor { + encrypt_log_chunk(chunk: Uint8Array): Promise +} + +## 20. Debug Knowledge and Learned Memory Contracts + +```ts +export interface DebugRecord { + debug_record_id: UUID + task_id?: TaskID + failure_signature: string + summary: string + root_cause?: string + fix_ref?: string + evidence_refs?: EvidenceRef[] + verification_refs?: EvidenceRef[] + created_at: ISOTimeString + updated_at: ISOTimeString + metadata_json?: JsonObject +} + +export interface DebugKnowledgeStore { + insert(record: DebugRecord): Promise + lookup_by_signature(failure_signature: string): Promise + lookup_by_task(task_id: TaskID): Promise + update(debug_record_id: UUID, patch: Partial): Promise +} + +export interface LearnedMemory { + memory_id: UUID + memory_type: "project_rule" | "toolchain_rule" | "skill_update" | "debug_experience" + summary: string + content?: string + source_ref?: EntityRef + status: "candidate" | "promoted" | "archived" | "rejected" + created_at: ISOTimeString + updated_at: ISOTimeString + metadata_json?: JsonObject +} + +export interface LearnedMemoryStore { + insert(memory: LearnedMemory): Promise + lookup_by_type(memory_type: LearnedMemory["memory_type"]): Promise + update_status(memory_id: UUID, status: LearnedMemory["status"]): Promise + scan_stale(): Promise +} + +## 21. Diagnostic Contracts + +```ts +export type DiagnosticSeverity = "error" | "warning" | "info" | "hint" + +export interface Diagnostic { + diagnostic_id: UUID + task_id?: TaskID + agent_id?: AgentID + command_run_id?: CommandRunID + artifact_id?: ArtifactID + language?: string + toolchain?: string + severity: DiagnosticSeverity + file?: string + line?: number + column?: number + code?: string + message: string + semantic_signature: string + created_at: ISOTimeString + metadata_json?: JsonObject +} +``` +``` + +## 22. Compatibility and Versioning Rules + +1. Public contract files in `packages/contracts` should export all interfaces in this document. +2. Event payload schema changes increment event `version`. +3. Tool schema changes increment tool `version`. +4. SQLite schema changes increment `schema_meta.schema_version` and require migration plan. +5. Provider adapter conversion behavior changes must update conversion tests. +6. Interface-breaking changes require ADR update and plan/todo synchronization. + +## 23. Non-Negotiable Boundary Rules + +Do not implement paths that violate these contracts: + +```text +TUI → SQLite direct query +TUI → runtime private service import +worker → SQLite direct write +worker → filesystem/shell/network side effect outside tool IPC +tool → side effect without PermissionEngine +capability → dependency install outside Doctor +provider adapter → silent semantic prompt loss +repository → scheduling policy +EventBus → recovery source of truth +LLM output → direct file/shell side effect +``` diff --git a/AirPlan/docs/architecture/main-agent-state-machine.md b/AirPlan/docs/architecture/main-agent-state-machine.md new file mode 100644 index 0000000..e14342a --- /dev/null +++ b/AirPlan/docs/architecture/main-agent-state-machine.md @@ -0,0 +1,148 @@ +# Main Agent State Machine + +Date: 2026-05-28 +Status: V1.0.0 Alpha canonical state machine + +This document defines the Main Agent lifecycle for V1.0.0 Alpha. Event names align with `event-registry-v1.md`. Permission model aligns with `interface-contracts-v1.md` `permission_template`. + +## States + +```text + ┌──────────────────────────────────────────────┐ + │ IDLE │ + │ Waiting for user input │ + └──────┬───────────────────────────────────────┘ + │ user.message.created + ▼ + ┌──────────────────────────────────────────────┐ + │ CLASSIFYING │ + │ LLM classifies intent │ + └──┬──────────────────┬───────────────────────┘ + │ │ + Chat/Q&A │ Task request │ /direct command + ▼ ▼ ▼ + ┌──────────┐ ┌──────────────────┐ ┌──────────────┐ + │ANSWERING │ │ DELEGATING │ │ DIRECT_MODE │ + │ Direct │ │ Needs arch check?│ │ Main Agent │ + │ reply │ └──┬───────────┬───┘ │ with executor│ + │ → IDLE │ │ │ │ permissions │ + └──────────┘ Simple│ Needs│ │ /done → IDLE │ + skip │ plan │ └──────────────┘ + plan │ │ + → ▼ ▼ + Scheduler┌──────────┐ ┌──────────────────────┐ + │SCHEDULING│ │ARCHITECTURE_DESIGNING│ + │Create │ │ Architecture │ + │tasks │ │ Designer assesses │ + │→ AWAITING│ │ impact │ + └──────────┘ └──────┬───────────────┘ + │ architecture.plan.updated + ▼ + ┌──────────────────┐ + │ CONFIRMING │ + │ Present plan to │ + │ user, await │ + │ confirm/modify/ │ + │ reject │ + └──┬───┬───┬──────┘ + │ │ │ + Confirm │ │Mod│ Reject + ▼ │ │ → IDLE + ┌──────────┐│ + │EXECUTING ││ + │ Scheduler││ + │ monitors ││ + │ progress ││ + └──┬───┬───┘│ + │ │ │ + task.progress event │ │ │ + → summarize to user │ │ │ + │ │ │ + ┌────────────────────┘ │ │ + │ User requirement change │ │ + ▼ │ │ + ┌──────────────┐ │ │ + │ INTERRUPTING │ │ │ + │ Classify │ │ │ + │ change level:│ │ │ + │ execution │ │ │ + │ → notify │ │ │ + │ Scheduler │ │ │ + │ design/ │ │ │ + │ interface │ │ │ + │ → Arch │ │ │ + │ Designer │ │ │ + │ full │ │ │ + │ assessment │ │ │ + └──┬───────┬───┘ │ + │ │ │ + Execution│ Design level │ + → resume │ ▼ │ + EXECUTING│ ┌──────────────┐ │ + │ │ARCHITECTURE │ │ + │ │ REVISING │ │ + │ │ Update plan │ │ + │ │ → CONFIRMING │ │ + │ └──────────────┘ │ + │ │ + ▼ ▼ + ┌──────────────────────────────────────┐ + │ SUMMARIZING │ + │ All tasks complete, summarize to user│ + │ Trigger ExperienceMiner │ + │ → IDLE │ + └──────────────────────────────────────┘ +``` + +## Events (from event-registry-v1.md) + +| Event | Emitter | Consumer | Notes | +|---|---|---|---| +| `user.message.created` | TUI/CLI | Main Agent | User input | +| `requirement.changed` | Main Agent | Scheduler, Architecture Designer | When user changes scope mid-execution | +| `architecture.plan.updated` | Architecture Designer | Main Agent | Plan produced or revised | +| `architecture.impact.completed` | Architecture Designer | Main Agent | Impact assessment done | +| `task.created` | Scheduler | Main Agent | Tasks created from plan | +| `task.progress` | Scheduler/workers | Main Agent | Progress update | +| `task.completed` | Scheduler | Main Agent | Task done | +| `task.failed` | Scheduler | Main Agent | Task failed | +| `task.blocked` | Scheduler | Main Agent | Task blocked | +| `permission.prompt.requested` | PermissionEngine | Main Agent/TUI | Needs user decision | +| `permission.prompt.resolved` | TUI | PermissionEngine | User decided | + +## Key Internal Events + +| Event | Meaning | +|---|---| +| `IntentClassified` | Main Agent internal: chat vs task vs direct | +| `DirectModeEntered` | Main Agent entered `/direct` mode | +| `DirectModeExited` | Main Agent exited `/done` mode | + +## Confirmation Gating + +| Change Level | Action | +|---|---| +| Implementation (no interface/architecture impact) | Silent → EXECUTING | +| Architecture (interface/constraint/design change) | Architecture Designer assessment → low-permission: user confirm; high-permission: auto-proceed, results displayed | + +## Main Agent Idle Principle + +Main Agent must remain idle and responsive. Background tasks (ExperienceMiner, DebugKnowledge indexing) are dispatched to sub-agents via Scheduler, never run on Main Agent's thread/loop. + +## Direct Mode Rules + +1. `/direct` enters DIRECT_MODE with `permission_template: "main_direct"`. +2. In DIRECT_MODE, Main Agent executes directly without Scheduler dispatch. +3. Main Agent uses Executor-level permissions but remains user-facing. +4. `/done` exits DIRECT_MODE, triggers evidence collection, returns to IDLE. +5. DIRECT_MODE does not block Scheduler-owned background tasks. +6. All DIRECT_MODE actions are logged with `source.kind = "main"`. + +## State-to-AgentRuntimeContext Mapping + +| State | permission_template | +|---|---| +| IDLE, CLASSIFYING, ANSWERING, CONFIRMING, SUMMARIZING | N/A (no task execution) | +| DIRECT_MODE | `main_direct` | +| EXECUTING | Determined by Scheduler per task | +| INTERRUPTING, ARCHITECTURE_REVISING | N/A (delegation only) | diff --git a/AirPlan/docs/architecture/prompt-layering-v1.md b/AirPlan/docs/architecture/prompt-layering-v1.md new file mode 100644 index 0000000..2c3115e --- /dev/null +++ b/AirPlan/docs/architecture/prompt-layering-v1.md @@ -0,0 +1,528 @@ +# AirCoding Prompt Layering Model V1 + +Date: 2026-05-27 +Status: Canonical prompt/context layering model for V1.0.0 Alpha skeleton + +This document defines how AirCoding assembles prompts and context for Main Agent, Architecture Designer, Scheduler-facing planning, worker agents, Reviewer, Debugger, Compactor, and ExperienceMiner. + +AirCoding stores and assembles Anthropic canonical messages internally. Provider adapters convert only at the LLM boundary. + +## 1. Goals + +Prompt layering must: + +1. Preserve stable global behavior across providers. +2. Keep project/user rules visible and ordered. +3. Keep worker context bounded and task-specific. +4. Make architecture decisions explicit and traceable. +5. Prevent UI/progress/scheduling state from polluting coding instructions. +6. Support copy-on-write compaction without losing backtracking ability. +7. Keep Claude Code-like execution discipline at the execution layer. + +## 2. Canonical Layer Order + +ContextAssembler builds messages in this order: + +```text +L0 Runtime invariant +L1 Role / agent mode +L2 Safety and permission policy +L3 Project rules and user preferences +L4 Architecture baseline and current plan +L5 Task specification and acceptance criteria +L6 Relevant code/artifacts/evidence +L7 Recent conversation and decision context +L8 Tool result history / diagnostics +L9 Immediate instruction +``` + +Higher layers may specialize lower layers but must not silently contradict runtime invariants or safety policy. If a conflict is detected, ContextAssembler records an omission/conflict note and routes to Main Agent or Architecture Designer. + +## 3. Layer Definitions + +### L0 Runtime invariant + +Source: + +```text +built-in runtime prompts/resources +packages/contracts +baseline invariants +``` + +Contents: + +- internal message format is Anthropic canonical content blocks +- tool use protocol and result expectations +- read-before-edit discipline +- exact/small edit discipline +- no unrelated refactors +- verify before declaring completion +- escalate architecture/interface conflicts +- respect PermissionEngine decisions + +Mutable: no, except by AirCoding release. + +### L1 Role / agent mode + +Source: + +```text +built-in role prompt for main/architecture/scheduler/executor/reviewer/debugger/compactor/experience_miner +``` + +Defines: + +- responsibility boundary +- allowed outputs +- whether writing files is allowed +- expected result schema +- whether user-facing language is allowed + +### L2 Safety and permission policy + +Source: + +```text +~/.air/permissions.yaml +/.air/shared/permissions.yaml +runtime PermissionEngine +``` + +Contents: + +- path policy +- system-sensitive policy +- credential policy +- network policy +- high-permission announce-then-run behavior +- explicit-confirmation boundaries + +### L3 Project rules and user preferences + +Source order: + +```text +built-in default project rules template +~/.air/rules or global profile +/.air/shared/rules/project-rules.md +/.air/shared/rules/toolchain-rules.md +relevant promoted memories/skills +``` + +Rules: + +1. Project-local rules override default templates. +2. User-confirmed rules override inferred rules. +3. Stale rules discovered during execution route to ExperienceMiner/Curator; workers do not silently rewrite rules unless assigned that task. + +### L4 Architecture baseline and current plan + +Source: + +```text +/.air/shared/plan/AGENTS.md +/.air/shared/plan/plan.md +/.air/shared/plan/todo.md +ADR/C4 docs +current Architecture Designer output +TaskGraph +``` + +Contents: + +- current architecture constraints +- accepted ADR decisions +- interfaces and module boundaries +- active plan/todo +- impact assessment summaries + +Workers receive only relevant excerpts or references, not the entire architecture corpus by default. + +### L5 Task specification and acceptance criteria + +Source: + +```text +TaskSpec +Scheduler wave plan +Worker runtime context +``` + +Contents: + +- task title and description +- scope/write area +- allowed/denied paths +- dependencies and parent results +- acceptance criteria +- verification requirements +- retry/model policy + +This is the primary steering layer for workers. + +### L6 Relevant code/artifacts/evidence + +Source: + +```text +fs.read outputs +artifact refs +command/tool reports +diagnostics +debug records +review findings +``` + +Rules: + +1. Prefer exact snippets with file paths and line ranges. +2. Large content is passed by artifact reference. +3. Binary/screenshot/pcap/core evidence is summarized plus referenced. +4. Diagnostics include semantic signatures when available. + +### L7 Recent conversation and decision context + +Source: + +```text +messages +summaries +requirement.changed events +architecture.impact.completed events +``` + +Rules: + +1. Include recent user intent and decision changes. +2. Include summary ranges when raw history is too large. +3. Preserve raw message backtracking through copy-on-write compaction. + +### L8 Tool result history / diagnostics + +Source: + +```text +tool_runs +command_runs +diagnostics +evidence_refs +``` + +Contents: + +- recent tool calls relevant to the task +- build/test/debug evidence +- failed command excerpts +- previous retry attempts and failure signatures + +### L9 Immediate instruction + +Source: + +```text +Main Agent instruction +Scheduler worker start message +user's latest request +``` + +This layer states what the model should do now and the required output format. + +## 4. Agent-Specific Context Profiles + +### Main Agent Profile + +Purpose: user-facing coordination. + +Includes: + +```text +L0 runtime invariant +L1 main role +L2 permission policy summary +L3 user/project rules summary +L4 current plan/task graph summary +L7 recent conversation +L8 high-level evidence summaries +L9 latest user request +``` + +Excludes by default: + +```text +large source files +raw command logs +worker-private scratch context +``` + +Main Agent must remain responsive and should delegate background work. + +### Architecture Designer Profile + +Purpose: architecture/interface/impact decisions. + +Includes: + +```text +L0 +L1 architecture role +L3 project rules +L4 full relevant baseline/ADR/C4/plan context +L5 architecture task spec +L6 code/interface excerpts when needed +L7 requirement history +L9 requested decision/output +``` + +Allowed outputs: + +```text +architecture plan +impact assessment +ADR/C4/doc updates +TaskGraph/todo updates +``` + +It must not implement code directly. + +### Scheduler Planning Profile + +The Scheduler is mostly deterministic code, but may use LLM classification for complex planning decisions. + +Includes: + +```text +TaskGraph summary +write areas +dependency graph +resource snapshot +failure/retry history +architecture constraints +``` + +Output must be structured: + +```ts +interface SchedulerLLMDecision { + decision_type: "wave_plan" | "retry" | "escalation" | "model_assignment" | "merge_strategy" + decision: unknown + reason: string + risks?: string[] +} +``` + +### Executor Profile + +Purpose: implement/build/test within a bounded task. + +Includes: + +```text +L0 execution discipline +L1 executor role +L2 scoped permissions +L3 relevant project/toolchain rules +L4 relevant architecture excerpts +L5 full TaskSpec +L6 relevant files/artifacts +L8 prior failures for this task +L9 required WorkerResult format +``` + +Executor rules: + +1. Read before edit. +2. Use exact/small edits. +3. Do not change architecture/interface unless TaskSpec or Architecture Designer authorizes it. +4. Verify with required commands unless impossible; if impossible, return blocked/failed with evidence. +5. Return structured WorkerResult. + +### Reviewer Profile + +Purpose: inspect and validate. + +Includes: + +```text +L0 review discipline +L1 reviewer role +L3 project rules +L4 architecture/acceptance constraints +L5 review TaskSpec +L6 diff/artifacts/evidence +L8 verification results +L9 review output schema +``` + +Reviewer is read-only. It may propose follow-up tasks but must not edit files. + +Review dimensions: + +```text +correctness +security +scope control +architecture compliance +test evidence +regression risk +``` + +### Debugger Profile + +Purpose: diagnose failures and either fix within scope or produce blocker evidence. + +Includes: + +```text +L0 debugging discipline +L1 debugger role +L2 permissions +L3 toolchain rules +L4 relevant architecture constraints +L5 debug TaskSpec +L6 failing logs/diagnostics/artifacts/code excerpts +L8 retry/failure signatures +L9 DebuggerResult schema +``` + +Debugger may modify code only when assigned a debug/fix task with write scope. + +### Compactor Profile + +Purpose: summarize immutable message ranges. + +Includes: + +```text +L0 compaction invariant +L1 compactor role +compaction rules +message range snapshot +existing summaries +current plan/rules for terminology +``` + +Output: + +```text +Markdown/frontmatter summary artifact +summary.created / context.compaction.completed payload +omissions and backtracking refs +``` + +Compactor must preserve decisions, constraints, open questions, tool evidence, and user preferences. + +### ExperienceMiner Profile + +Purpose: extract durable rules/skills/debug knowledge candidates. + +Includes: + +```text +L0 memory policy +L1 experience_miner role +project rules and skill docs +verified debug records +repeated patterns +user confirmations +``` + +Output: + +```text +memory candidate +rule patch proposal +skill patch proposal +debug record promotion +``` + +Non-debug experience promotion requires user confirmation unless project policy says otherwise. + +## 5. Conflict Handling + +Prompt/context conflicts are classified: + +| Conflict | Example | Action | +|---|---|---| +| policy conflict | project rule asks to bypass permission | Permission policy wins; report conflict | +| architecture conflict | task asks to change public interface without ADR | block or Architecture Designer assessment | +| user-rule conflict | old rule contradicts latest explicit user instruction | latest explicit user instruction wins for session; ExperienceMiner may update rule | +| evidence conflict | stale summary contradicts current file | current file/evidence wins; update summary/rule if needed | +| provider conflict | target model lacks required capability | route to provider/model selection or block | + +## 6. Context Assembly Algorithm + +```text +1. Resolve context profile from agent/task purpose. +2. Load immutable L0/L1 templates. +3. Load permission/project rules with precedence. +4. Load current architecture/plan refs. +5. Load TaskSpec and dependency results. +6. Retrieve relevant files/artifacts/evidence. +7. Add recent messages/summaries and requirement changes. +8. Add relevant tool/command/diagnostic history. +9. Fit to token budget using compaction rules. +10. Emit Anthropic canonical messages and omissions list. +11. If required context cannot fit, emit context.compaction.requested or block. +``` + +## 7. Prompt Asset Locations + +Built-in prompt resources ship with binary distribution: + +```text +resources/prompts/ + runtime-invariant.md + roles/ + main.md + architecture-designer.md + scheduler-decision.md + executor.md + reviewer.md + debugger.md + compactor.md + experience-miner.md + output-schemas/ +``` + +Project overrides are not allowed for L0 runtime invariants. Project rules belong in `.air/shared/rules/`, not in prompt resource replacement. + +## 8. Provider Boundary + +ContextAssembler always returns Anthropic canonical messages: + +```ts +interface AssembledContext { + canonical_format: "anthropic" + messages: unknown[] + omissions: string[] + refs: string[] + token_estimate?: number +} +``` + +Provider adapters may convert to OpenAI/OpenRouter/ollama formats after assembly. Provider conversion must not change task semantics or drop tool contract requirements without recording an omission/blocker. + +## 9. V1.0.0 Alpha Cut Line + +V1.0.0 Alpha skeleton must implement: + +1. Built-in role prompt assets. +2. Context profile selection by agent/task type. +3. Layered assembly order L0-L9. +4. Project/global rule loading with precedence. +5. Architecture/plan/task/evidence reference loading. +6. Token-budget fitting with omission reporting. +7. Anthropic canonical output. +8. Provider-boundary conversion hook. +9. Conflict detection for policy, architecture, stale evidence, and provider capability. + +Post-MVP: + +```text +learned retrieval ranking +semantic code retrieval +skill auto-selection +multi-provider prompt optimization +UI prompt visualization/debugger +``` diff --git a/AirPlan/docs/architecture/provider-capability-matrix-v1.md b/AirPlan/docs/architecture/provider-capability-matrix-v1.md new file mode 100644 index 0000000..d78bc31 --- /dev/null +++ b/AirPlan/docs/architecture/provider-capability-matrix-v1.md @@ -0,0 +1,347 @@ +# AirCoding Provider Capability Matrix V1 + +Date: 2026-05-27 +Status: Canonical provider/model capability contract for V1.0.0 Alpha skeleton + +This document defines how AirCoding represents provider/model capabilities, selects models, handles conversion limits, and records fallback behavior. + +AirCoding's internal canonical message format is Anthropic content blocks. Provider adapters own conversion. + +## 1. Goals + +The provider capability matrix must answer: + +1. Can this model/tool path execute the requested task? +2. Which capabilities are native vs emulated? +3. What quality/risk tier is acceptable for the task? +4. What conversion or feature loss must be recorded? +5. When should Scheduler force a model vs let an agent choose? + +## 2. Provider Identity + +```ts +type ProviderKind = + | "anthropic" + | "openai" + | "openrouter" + | "ollama" + | "anthropic_compatible" + | "openai_compatible" + | "custom" + +interface ProviderIdentity { + provider_id: string + provider_kind: ProviderKind + display_name: string + base_url?: string + auth_ref?: string + local: boolean +} +``` + +Secrets are referenced by `auth_ref`; they are never embedded in session DB events or artifacts. + +## 3. Model Capability Matrix + +```ts +interface ProviderCapabilityMatrix { + provider_id: string + provider_kind: ProviderKind + model_id: string + display_name?: string + enabled: boolean + quality_tier: "frontier" | "strong" | "standard" | "cheap" | "local" | "unknown" + cost_tier: "high" | "medium" | "low" | "free" | "unknown" + context_window_tokens?: number + max_output_tokens?: number + supports: { + text_input: boolean + text_output: boolean + streaming: boolean + tool_use: boolean + parallel_tool_use: boolean + structured_output: boolean + json_mode: boolean + thinking: boolean + prompt_cache: boolean + system_prompt: boolean + image_input: boolean + image_output: boolean + audio_input: boolean + audio_output: boolean + file_input: boolean + computer_use: boolean + long_context: boolean + batch: boolean + } + conversion: { + from_anthropic_canonical: "lossless" | "lossy" | "unsupported" + tool_schema: "native" | "converted" | "emulated" | "unsupported" + image_input: "native" | "artifact_link" | "unsupported" + thinking: "native" | "stripped" | "unsupported" + cache_control: "native" | "ignored" | "unsupported" + } + limits?: { + requests_per_minute?: number + tokens_per_minute?: number + concurrent_requests?: number + max_tool_schema_bytes?: number + max_image_count?: number + max_file_bytes?: number + } + default_use?: { + main?: boolean + architecture?: boolean + execute?: boolean + review?: boolean + debug?: boolean + compact?: boolean + mine_experience?: boolean + } + notes?: string[] +} +``` + +## 4. Capability Semantics + +### `tool_use` + +Native model-driven tool invocation. + +If false, agents may still call deterministic internal tools outside model tool-use, but the model cannot choose tool calls directly in a single turn. This is lower quality for coding execution. + +### `parallel_tool_use` + +Model can request multiple tool calls in one turn. Scheduler/ToolRegistry may still serialize unsafe tools. + +### `structured_output` / `json_mode` + +Used for WorkerResult, review reports, scheduler decisions, and impact assessments. If unavailable, runtime validates best-effort parsed JSON and may retry with stricter prompt. + +### `thinking` + +Model supports a distinct reasoning/thinking channel or equivalent. If converted/stripped, the adapter must ensure hidden reasoning is not persisted as user-visible content. + +### `prompt_cache` + +Provider supports cache-control or equivalent prompt reuse. If unsupported, ContextAssembler still works but cost may be higher. + +### `image_input` + +Required for screenshot/UI analysis, diagram analysis, and image-based debugging. + +### `image_output` + +Required for first-class image generation. If unavailable, `ui-design-assets` falls back to SVG/assets/prompts. + +### `computer_use` + +Post-MVP. V1 uses explicit tools for GUI/screenshot/network rather than opaque computer-use loops. + +## 5. Task Capability Requirements + +```ts +interface ModelRequirement { + required: Partial + preferred?: Partial + min_quality_tier?: "frontier" | "strong" | "standard" | "cheap" | "local" + max_cost_tier?: "high" | "medium" | "low" | "free" + min_context_window_tokens?: number + allow_lossy_conversion?: boolean +} +``` + +Default requirements by task type: + +| Task type | Required | Preferred | Quality floor | +|---|---|---|---| +| Main conversation | streaming, tool_use | prompt_cache, long_context | strong | +| Architecture Designer | structured_output, long_context | thinking, prompt_cache | frontier/strong | +| Executor | tool_use, structured_output | thinking, long_context | frontier/strong | +| Reviewer | structured_output | image_input for UI artifacts | strong | +| Debugger | tool_use, structured_output | long_context, image_input | strong | +| Compactor | long_context or large enough context | prompt_cache | standard | +| ExperienceMiner | structured_output | long_context | standard | +| UI screenshot analysis | image_input | structured_output | strong | +| Image generation | image_output | image editing | provider-specific | + +## 6. Scheduler Model Assignment + +Scheduler chooses one of: + +```ts +type ModelAssignmentMode = "scheduler_forced" | "agent_select" + +interface ModelAssignment { + mode: ModelAssignmentMode + provider_id?: string + model_id?: string + allowed_models?: Array<{ provider_id: string; model_id: string }> + requirement: ModelRequirement + reason: string +} +``` + +Guidelines: + +1. Use `scheduler_forced` for cross-model review, high-risk tasks, repeated failures, and deterministic comparisons. +2. Use `agent_select` for normal implementation/debug tasks when multiple acceptable models exist. +3. Use strong/frontier models for code-changing tasks where hidden complexity may exist. +4. Use cheaper models for summarization, indexing, and low-risk classification when evidence can be validated. +5. Escalate if no model satisfies required capabilities. + +## 7. Provider Adapter Contract + +```ts +interface ProviderAdapter { + provider_id: string + list_models(): Promise + validate_model(model_id: string): Promise + complete(input: ProviderCompletionInput): AsyncIterable + count_tokens?(input: unknown): Promise +} + +interface ProviderCompletionInput { + model_id: string + canonical_format: "anthropic" + messages: unknown[] + tools?: unknown[] + tool_choice?: unknown + system?: unknown + max_output_tokens?: number + temperature?: number + metadata?: Record +} +``` + +Adapter responsibilities: + +1. Convert Anthropic canonical messages to provider format. +2. Convert provider output back to Anthropic canonical content blocks or RuntimeEvents. +3. Validate tool-call and structured-output compatibility. +4. Record conversion omissions/losses. +5. Never leak credentials into logs, events, artifacts, or model-visible messages. + +## 8. Conversion Loss Handling + +Conversion result: + +```ts +interface ProviderConversionReport { + status: "lossless" | "lossy" | "unsupported" + omissions: string[] + warnings: string[] + required_confirmation?: boolean +} +``` + +Rules: + +1. Lossless conversion continues silently. +2. Lossy conversion may continue only if `allow_lossy_conversion` is true and omitted features are not required. +3. Unsupported required feature blocks before model call. +4. Thinking/cache-control stripping is allowed only when not required by task policy. +5. Tool schema truncation or unsupported required tool use blocks. + +## 9. Configuration Locations + +Global provider/model config: + +```text +~/.air/models.yaml +``` + +Project override: + +```text +/.air/shared/models.yaml +``` + +Session records store selected `model_provider_id` and `model_id`, but not secrets. + +Example config shape: + +```yaml +providers: + - provider_id: anthropic-main + provider_kind: anthropic + display_name: Anthropic + auth_ref: env:ANTHROPIC_API_KEY + enabled: true + models: + - model_id: claude-opus-4-7 + quality_tier: frontier + cost_tier: high + default_use: + architecture: true + execute: true + review: true + - model_id: claude-sonnet-4-6 + quality_tier: strong + cost_tier: medium + default_use: + main: true + debug: true + compact: true +``` + +## 10. Doctor Checks + +Doctor validates: + +```text +provider config parseability +auth_ref existence without printing secret values +base_url reachability when allowed +model list/validation where provider supports it +required default model coverage by role +capability mismatch warnings +rate-limit metadata if configured +``` + +Doctor must not persist or print API keys. + +## 11. Fallback Policy + +Fallback order: + +1. Same provider, same quality tier, compatible model. +2. Same provider, higher quality tier if allowed. +3. Different provider with lossless/acceptable conversion. +4. Lower quality tier only for non-code-changing or explicitly allowed tasks. +5. Block and ask Main Agent/user if no safe fallback exists. + +Fallback must record: + +```text +original provider/model +selected provider/model +reason +capability differences +conversion report +``` + +## 12. V1.0.0 Alpha Cut Line + +V1.0.0 Alpha skeleton must implement: + +1. `ProviderCapabilityMatrix` contract. +2. Global/project model config loading. +3. Anthropic and OpenAI-compatible adapter interfaces. +4. Capability-based model selection. +5. Conversion report and omission handling. +6. Scheduler model assignment integration. +7. Doctor provider checks. +8. Session persistence of chosen provider/model IDs. + +Post-MVP: + +```text +automatic provider benchmarking +cost optimizer +multi-provider speculative review +batch processing +computer-use models +native image-generation providers +local model quality calibration +``` diff --git a/AirPlan/docs/architecture/runtime-semantics-v1.md b/AirPlan/docs/architecture/runtime-semantics-v1.md new file mode 100644 index 0000000..0ed8cc7 --- /dev/null +++ b/AirPlan/docs/architecture/runtime-semantics-v1.md @@ -0,0 +1,435 @@ +# AirCoding Runtime Semantics V1 + +Date: 2026-05-27 +Status: Canonical runtime semantics corrections for V1.0.0 Alpha + +This document resolves implementation-critical semantics that cut across the event registry, DB schema, Scheduler, ArtifactStore, PermissionEngine, ContextAssembler, and ExperienceMiner. + +## 1. Source of Truth + +This document refines, not replaces: + +- `interface-contracts-v1.md` +- `event-registry-v1.md` +- `db-schema-v1.md` +- `scheduler-state-machine-v1.md` +- `artifact-naming-v1.md` +- `security-model-v1.md` + +If a runtime behavior conflicts with older wording, this document is authoritative for V1.0.0 Alpha runtime semantics. + +## 2. Event Ingestion Boundary + +All runtime events from workers, tools, agents, and internal services enter through `EventIngestor`. + +```text +producer + → EventIngestor.ingest(event) + → schema/version validation + → persistence policy lookup + → durable: EventStore transaction + domain projection + post-commit EventBus publish + → ephemeral: EventBus publish/coalescing only +``` + +Responsibilities: + +| Component | Responsibility | +|---|---| +| EventIngestor | accepts events, validates routing, chooses durable vs ephemeral path | +| EventStore | validates durable event payload, inserts event, applies domain projection transactionally | +| EventBus | live publish/subscribe only | +| Domain services | emit follow-up events; do not hide policy inside EventStore | + +EventStore must not create scheduler tasks, permission decisions, memory promotions, or doctor fixes by policy. Those are follow-up actions emitted by the owning services. + +## 3. Durable Projection Rule + +For same-session DB domain updates: + +```text +BEGIN + insert events row + apply domain table projection +COMMIT +publish committed event to EventBus +``` + +For external DB/file side effects, use the cross-store semantics in section 6. + +## 4. Heartbeat Semantics + +`agent.heartbeat` remains an ephemeral event for live UI updates, but Scheduler must coalesce heartbeat timestamps into domain rows. + +Rule: + +```text +agent.heartbeat event + → EventBus live publish + → Scheduler/AgentMonitor updates agents.last_heartbeat_at and tasks.heartbeat_at at a throttled interval +``` + +Default coalescing interval: + +```text +5 seconds or meaningful status change, whichever comes first +``` + +Recovery uses `agents.last_heartbeat_at`, `tasks.heartbeat_at`, process liveness, and task attempt state. It does not require replaying ephemeral heartbeat events. + +## 5. Command Run Status Semantics + +`command_runs` V1 schema has no explicit `status` column. Runtime derives status: + +| Row state | Derived status | +|---|---| +| `completed_at` is null | `running` | +| `exit_code = 0` | `ok` | +| `exit_code` non-zero | `error` | +| cancellation metadata present | `cancelled` | +| inconsistent row | `unknown` | + +ProjectionStore may expose derived command status. A later schema version may add a physical `status` column if needed. + +## 6. Cross-DB and File Transaction Semantics + +Some durable events refer to project-level DBs or files outside the session DB: + +```text +debug-records.db +learned-memory.db +.air/shared/rules/*.md +skills +artifact files +workspace files +``` + +SQLite cannot provide one transaction across arbitrary files and DBs. V1.0.0 Alpha uses an outbox/compensation model. + +### 6.1 Session DB First For Intent + +For external side effects: + +```text +1. Insert durable session event recording intent/request. +2. Insert or update session domain row with pending/external status where applicable. +3. Perform external DB/file operation through owning service. +4. Emit durable completed/failed event with evidence. +5. On restart, recovery scans pending external intents and reconciles. +``` + +### 6.2 Artifact Files + +Artifact files use: + +```text +write temp file +compute hash/size +atomic rename +insert artifact row + artifact.created event +``` + +If the DB insert fails after rename, startup recovery scans orphaned files and either registers or quarantines them. + +### 6.3 Debug Records + +`debug.record.created` means: + +```text +session DB records debug-record intent/completion event +DebugKnowledgeStore writes debug-records.db +if debug-records.db write fails, emit debug.record.failed or task.failed with AirError +``` + +### 6.4 Memory and Rule Promotion + +`memory.promoted` means: + +```text +candidate was approved/promoted by owning service +rule/skill/learned-memory write is performed by ExperienceMiner/Curator service +session event records completed promotion and target ref +``` + +If the file/DB write fails, emit a failure event and leave the candidate unpromoted or pending repair. + +## 7. Summary and Compaction Ownership + +Only `summary.created` inserts a `summaries` row. + +`context.compaction.completed` records compaction task completion and references the created summary: + +```ts +interface ContextCompactionCompletedPayload { + task_id?: string + agent_id?: string + summary_id: string + range_start_message_id?: string + range_end_message_id?: string + token_estimate_before?: number + token_estimate_after?: number +} +``` + +Sequence: + +```text +context.compaction.requested +context.compaction.started +summary.created +context.compaction.completed +``` + +This avoids duplicate summary rows. + +## 8. Permission Layering + +Permission evaluation order: + +```text +1. tool capability declaration +2. permission profile +3. TaskSpec scope allowed/denied paths +4. path/command/network risk classification +5. credential/system-sensitive override +6. user prompt workflow if required +``` + +Project-level allow does not override task scope. Credential and system-sensitive boundaries override broad project/local allow. + +Canonical decision: + +```ts +action: allow | deny | ask_user | block | refuse | announce_then_run +grant_scope: none | once | session | project | global +``` + +## 9. Execution Primitive Semantics + +Claude Code-quality execution is enforced through tool contracts, not only prompts. + +### 9.1 Read-Before-Edit Token + +`fs.read` returns or records a read observation: + +```ts +interface FileReadObservation { + path: string + sha256?: string + observed_at: ISOTimeString + task_id?: TaskID + agent_id?: AgentID +} +``` + +`fs.edit` and `fs.patch` require either: + +```text +active task read observation for the target file +or explicit expected_existing_sha256 +``` + +### 9.2 Exact Edit Behavior + +`fs.edit` rules: + +1. `old_string` must match exactly. +2. If `replace_all` is false, `old_string` must occur exactly once. +3. If no match or ambiguous match, fail with `tool_error` and no file write. +4. The tool does not guess indentation or nearby replacements. +5. Successful edit emits a diff artifact. + +### 9.3 Patch Behavior + +`fs.patch` rules: + +1. Patch paths must be within task scope and permission policy. +2. Rejected hunks become artifacts. +3. Partial patch application is allowed only if the patch tool can prove unchanged rejected paths were not written; otherwise fail atomically. +4. Successful patch emits a diff artifact. + +### 9.4 Completion Gate + +A code-changing WorkerResult cannot be `completed` unless: + +```text +required verification passed, or +verification is explicitly skipped with reason/evidence/risk, and fallback_allowed is true +``` + +## 10. Project Scanner Semantics + +Project initialization scanner collects full directory tree metadata with no directory exclusion and no depth limit. + +Rationale: the user wants complete project shape visibility, and directory tree metadata alone is not comparable to reading file contents. + +Safety boundaries: + +1. Do not recurse through symlinks by default; record symlink target metadata instead. +2. Handle permission errors as entries with error metadata, not fatal scanner failure. +3. Avoid reading file contents during tree scan. +4. Record special file types without opening them. +5. Provide progress and cancellation hooks for UI responsiveness. +6. Detect obvious filesystem cycles or mount anomalies and record them as scanner warnings. + +No directories such as `.git`, `node_modules`, build directories, or vendor directories are excluded from the directory tree. + +## 11. Learning, Skills, and Experience Lifecycle + +ExperienceMiner produces candidates; it does not silently rewrite durable project rules or skills unless assigned an explicit promotion task. + +Lifecycle: + +```text +candidate.created + → evidence threshold check + → user/project policy approval + → promotion write through owning store + → memory.promoted or promotion failed + → rollback/archive if stale or harmful +``` + +Candidate types: + +```text +project_rule +toolchain_rule +skill_update +debug_experience +``` + +Promotion requirements: + +| Candidate | Promotion requirement | +|---|---| +| debug_experience | verified failure + fix evidence | +| project_rule | repeated pattern or explicit user confirmation | +| toolchain_rule | verified toolchain evidence or explicit user confirmation | +| skill_update | reviewed patch and trust policy approval | + +Skills use Claude Skills-style directory structure where applicable: + +```text +SKILL.md +scripts/ +references/ +assets/ +``` + +Skill invocation must pass through capability/tool trust rules when it causes side effects. + +## 12. C++ Diagnostic Ownership + +`toolchain-cpp` owns deterministic extraction of compiler/test/static-analysis diagnostics and semantic signatures. + +LLM-based interpretation belongs to runtime Debugger/Reviewer context, not hidden inside low-level toolchain code, unless a future injected diagnostic interpretation service is explicitly added. + +This preserves package direction: + +```text +toolchain-cpp → contracts +runtime/debugger → llm/provider facade +``` + +## 13. V1.0.0 Alpha Cut Line + +V1.0.0 Alpha includes: + +```text +complete C++ configure/build/test/static-analysis/debug/fix/review workflow +local and built-in capability manifests +GUI/network evidence tools +TUI/HUD projection +release gates for Linux tier 1 +``` + +V1.0.0 Alpha may defer: + +```text +third-party plugin registry/signing +container sandboxing +multi-machine scheduling +Windows-native deep support +advanced semantic merge +production bitmap image generation providers +``` + +## 14. FK-Off Application Invariants + +With `foreign_keys = OFF`, the runtime must enforce referential consistency in application code. + +Invariants: + +1. `tasks.session_id` must reference an existing `sessions.id`. +2. `task_attempts.task_id` must reference an existing `tasks.id`. +3. `agents.task_id` must reference an existing `tasks.id` when not null. +4. `tool_runs.task_id`, `tool_runs.agent_id` must reference existing rows when not null. +5. `command_runs.task_id`, `command_runs.agent_id`, `command_runs.tool_run_id` must reference existing rows when not null. +6. `workspaces.task_id`, `workspaces.agent_id` must reference existing rows when not null. +7. `diagnostics.command_run_id`, `diagnostics.artifact_id` must reference existing rows when not null. +8. `evidence_refs` foreign columns must reference existing rows when not null. + +Enforcement: + +- Repository insert methods validate foreign key existence before insert. +- On session startup recovery, run orphan scan: rows referencing deleted parents are logged and either re-parented or archived. +- Release gate includes orphan scan validation. + +## 15. Workspace GC Policy + +`/.air/local/workspaces/` and the `workspaces` table grow over time. + +Retention rules: + +1. Active workspaces (`status = active`) are preserved until merge or explicit cancel. +2. Merged workspaces (`status = merged`) are preserved for 7 days after `merged_at`, then cleaned. +3. Conflicted workspaces (`status = conflicted`) are preserved until user/system decision, then moved to `abandoned`. +4. Abandoned workspaces are preserved for 3 days, then cleaned. +5. `cleaned` status means filesystem artifacts removed; DB row retained with metadata. + +Cleanup runs on session startup and periodically during idle. + +## 16. Direct Mode Semantics + +`/direct` enters a foreground execution lane where Main Agent acts with Executor-level permissions without dispatching to Scheduler. + +Rules: + +1. Direct mode is a Main Agent state, not a separate agent type. +2. Direct mode uses `permission_template: "main_direct"`. +3. Direct mode tasks write to the main workspace only; no worktree creation. +4. Direct mode does not block Scheduler-owned background tasks from running concurrently. +5. `/done` exits direct mode, triggers evidence collection, and returns to IDLE. +6. Direct mode changes are recorded in the event log with `source.kind = "main"` and metadata indicating direct mode. + +## 17. ExperienceMiner Trigger Ownership + +ExperienceMiner is triggered by: + +1. `debug.record.created` event → Scheduler creates `mine_experience` task. +2. Session end → Scheduler creates final `mine_experience` task. +3. N-turn/tool-call interval (configurable, default 10) → Scheduler creates periodic `mine_experience` task. +4. Stale rule/skill discovered during execution → worker emits `memory.candidate.created` with `memory_type = skill_update`, Scheduler creates `mine_experience` task. + +The Scheduler owns trigger creation; ExperienceMiner never self-triggers. Curator periodic dedup runs as a scheduled `mine_experience` task with `memory_type = "curator_dedup"`. + +## 18. Doctor Self-Bootstrap + +Doctor validates its own prerequisites before running capability checks: + +1. Verify Bun runtime version. +2. Verify SQLite availability. +3. Verify basic shell access. +4. Verify `.air/` directory writability. +5. Then proceed to capability/dependency checks. + +If self-bootstrap fails, Doctor reports a `blocking` issue and skips remaining checks. + +## 19. air restore Semantics + +`air restore` supports three granularities: + +1. `air restore file ` — restore most recent backup of a single file. +2. `air restore time ` — restore all files backed up since a given timestamp. +3. `air restore session ` — restore all files backed up during a specific session. + +All restore operations use the git-backed backup repository at `/.air/local/backups/`. Restore creates a new commit with the restored content, preserving full history. diff --git a/AirPlan/docs/architecture/scheduler-state-machine-v1.md b/AirPlan/docs/architecture/scheduler-state-machine-v1.md new file mode 100644 index 0000000..2c388ac --- /dev/null +++ b/AirPlan/docs/architecture/scheduler-state-machine-v1.md @@ -0,0 +1,485 @@ +# AirCoding Scheduler State Machine V1 + +Date: 2026-05-27 +Status: Canonical Scheduler state machine for V1.0.0 Alpha skeleton + +This document defines the MVP Scheduler lifecycle, task states, retry policy, workspace/merge flow, heartbeat handling, and escalation rules. + +The Scheduler is not a coding agent. It is the orchestration service that reads TaskGraph state, launches worker agents, monitors progress, persists transitions, and escalates when architecture or user decisions are required. + +## 1. Inputs and Outputs + +Primary inputs: + +```text +TaskSpec records +task_dependencies +RuntimeEvents +Architecture impact assessments +Permission decisions +WorkerResult records +Heartbeat/progress events +Resource availability snapshot +``` + +Primary outputs: + +```text +task/agent/workspace events +child agent processes +workspace creation/merge requests +retry attempts +blocked/escalation reports +ProjectionStore updates via EventBus +``` + +The Scheduler persists all durable state through EventStore and domain tables. In-memory queues are rebuildable from SQLite. + +Task dependencies use one edge model across TaskSpec, events, DB, and Scheduler memory: + +```ts +interface TaskDependencySpec { + depends_on_task_id: TaskID + dependency_type: "hard" | "soft" | "conflict" | "serialization" + reason?: string + source?: "architecture" | "scheduler" | "worker" | "user" | "system" +} +``` + +Architecture Designer may create planned `hard`/`soft`/`serialization` edges. Scheduler may dynamically add `conflict` or `serialization` edges after write-area/resource analysis, but those inferred edges must be persisted through `task_dependencies` and durable events so restart recovery does not need to rediscover them. + +## 2. Task Status Model + +Task table status values: + +```text +pending | running | completed | failed | blocked | cancelled | interrupted +``` + +State meaning: + +| Status | Meaning | Scheduler action | +|---|---|---| +| `pending` | task exists but is not active | wait for dependencies/resources/write-set availability | +| `running` | task has an assigned agent/attempt | monitor heartbeat, events, timeout, result | +| `completed` | task met acceptance and produced WorkerResult | unblock dependents and consider merge/review | +| `failed` | task attempted and did not meet goal | retry, skip if allowed, or escalate | +| `blocked` | task cannot continue without higher-level decision | route to Main/Architecture Designer/user as needed | +| `cancelled` | task intentionally stopped | cancel dependents or replan | +| `interrupted` | task stopped but can be resumed or requeued | resume/requeue after requirement/control decision | + +## 3. Task Attempt Model + +Each run creates a `task_attempts` row. + +```text +task.created + → task.started + task_attempts.insert(attempt_index=N) + → agent.started + → terminal event: + task.completed + task.failed + task.blocked + task.cancelled + task.interrupted +``` + +Attempt indexes are monotonically increasing per task. + +Failure signature is normalized from: + +```text +error_kind + tool/command name + semantic diagnostic signature + failure location + concise failure summary +``` + +Repeated identical failure signatures consume retry budget faster than new failure signatures. + +## 4. Scheduler Lifecycle + +Top-level Scheduler states: + +```text +IDLE + → LOADING_GRAPH + → PLANNING_WAVE + → DISPATCHING + → MONITORING + → COLLECTING_RESULTS + → MERGING + → REVIEWING_WAVE + → REPAIRING_OR_CONTINUING + → COMPLETED | BLOCKED | CANCELLED +``` + +### `IDLE` + +Scheduler has no active graph or all graphs are terminal. + +Transitions: + +- `task.created` / execution request → `LOADING_GRAPH` +- requirement change affecting active work → `LOADING_GRAPH` + +### `LOADING_GRAPH` + +Reads tasks, dependencies, attempts, agents, workspaces, and recent architecture/permission events from DB. + +Actions: + +1. Reconstruct TaskGraph. +2. Detect orphaned running tasks/agents. +3. Convert missing heartbeat/process to `agent.lost` and then `task.failed` or `task.interrupted`. +4. Validate dependency references. +5. Compute blocked/unblocked sets. + +Transitions: + +- valid runnable graph → `PLANNING_WAVE` +- no runnable tasks and blocked tasks exist → `BLOCKED` +- all terminal success → `COMPLETED` +- graph invalid beyond scheduler repair → `BLOCKED` + +### `PLANNING_WAVE` + +Computes next wave of tasks. + +Inputs: + +```text +hard dependencies +soft dependencies +conflict/serialization dependencies +write_area and expected_files +resource snapshot +model policy +permission profile +workspace strategy +``` + +Rules: + +1. Hard dependencies must be completed before dispatch. +2. Soft dependencies influence priority/context but may run concurrently if Scheduler decides it is safe. +3. Tasks with different write areas may run concurrently. +4. Tasks with same file but provably different regions may run concurrently in separate worktrees. +5. Same write area with uncertain conflict serializes by default. +6. Reviewer tasks are read-only and may run concurrently with each other, but not against unstable unmerged write outputs unless they target a workspace snapshot. +7. Debugger tasks may serialize with tasks touching the same failure surface. +8. Machine resources constrain concurrency. + +Wave output: + +```ts +interface SchedulerWavePlan { + wave_id: string + runnable_task_ids: string[] + serialized_task_ids: string[] + workspace_assignments: Record + model_assignments: Record + reason: string +} +``` + +Transitions: + +- runnable wave exists → `DISPATCHING` +- no runnable wave but graph not terminal → `BLOCKED` + +### `DISPATCHING` + +Creates workspaces if needed, assembles context, and starts child agents. + +Actions per task: + +1. Create workspace (`main`, `worktree`, or `isolated_copy`). +2. Create `task.started` and `agent.started` events. +3. Write `agent.start` control message containing `TaskSpec`, `ContextPack`, and runtime context. +4. Record attempt row. + +Dispatch failures: + +- permission denied → `task.blocked` +- workspace create failure → retry if recoverable, otherwise `task.failed` +- context assembly failure → `task.failed` or `task.blocked` depending on reason +- process start failure → `task.failed` + +Transition: `MONITORING`. + +### `MONITORING` + +Tracks active agents. + +Inputs: + +```text +agent.heartbeat +task.progress +tool/command events +process exit +soft timeout +hard timeout +user interruption +requirement.changed +``` + +Heartbeat policy: + +```text +agent emits heartbeat periodically +Scheduler updates agents.last_heartbeat_at and tasks.heartbeat_at +missing heartbeat past threshold → inspect process +process alive but silent → send status ping or soft cancel depending on timeout +process gone without result → agent.lost +``` + +Timeout policy: + +| Timeout | Action | +|---|---| +| soft timeout | ask agent for checkpoint/status; Scheduler may extend if progress is credible | +| hard timeout | cancel/kill worker; emit `agent.lost` or `agent.cancelled`; mark task failed/interrupted | + +Requirement change policy: + +1. Main Agent records `requirement.changed`. +2. Scheduler pauses affected dispatch decisions. +3. Architecture Designer assesses impact when change may affect interface/architecture/product goals. +4. Implementation-only non-conflicting change may be silently absorbed. +5. Architecture-level impact uses `architecture.impact.completed` and may require user confirmation or replan. + +Transitions: + +- all active agents terminal → `COLLECTING_RESULTS` +- user/global cancellation → `CANCELLED` +- architecture/user blocker → `BLOCKED` + +### `COLLECTING_RESULTS` + +Consumes WorkerResult and terminal task events. + +Actions: + +1. Validate WorkerResult against output contract. +2. Persist artifacts/evidence references. +3. Mark attempt terminal. +4. Classify task terminal status. +5. Compute dependency unblocks. + +Status mapping: + +| WorkerResult status | Task status | +|---|---| +| `completed` | `completed` | +| `failed` | `failed` pending retry/skip decision | +| `blocked` | `blocked` | +| `cancelled` | `cancelled` or `interrupted` depending on resumability | + +Transition: + +- write workspaces need merge → `MERGING` +- no merge needed but review required → `REVIEWING_WAVE` +- more work remains → `REPAIRING_OR_CONTINUING` +- all done → `COMPLETED` + +### `MERGING` + +Merges completed workspace outputs back into the target workspace. + +Strategies: + +```text +main → no merge +worktree → git merge or patch apply +isolated_copy → copy-back or patch apply +``` + +Rules: + +1. Merge only tasks with successful WorkerResult unless explicitly recovering artifacts. +2. Serialize merges touching overlapping write areas. +3. Persist `workspace.merge.started` and terminal merge event. +4. Conflict creates `workspace.merge.conflicted` and either schedules Debugger/repair or blocks. + +Conflict handling: + +| Conflict | Scheduler action | +|---|---| +| trivial patch conflict | schedule repair/debugger or retry serially | +| semantic conflict | route to Reviewer/Architecture Designer | +| architecture/interface conflict | block and request Architecture impact assessment | +| user requirement conflict | block and ask Main Agent/user | + +Transition: + +- merge success and review needed → `REVIEWING_WAVE` +- merge success and more tasks → `REPAIRING_OR_CONTINUING` +- merge conflict recoverable → `REPAIRING_OR_CONTINUING` +- unrecoverable conflict → `BLOCKED` + +### `REVIEWING_WAVE` + +Schedules review tasks after implementation/debug waves when required by plan or risk. + +Reviewers are read-only unless a follow-up execute/debug task is created. + +Review result handling: + +```text +approved → continue +minor issue with clear fix → create execute repair task +high-severity/security/architecture issue → block or Architecture Designer assessment +insufficient evidence → create verification task +``` + +Transition: `REPAIRING_OR_CONTINUING`. + +### `REPAIRING_OR_CONTINUING` + +Decides next action after a wave. + +Actions: + +1. Retry failed tasks within budget. +2. Create repair tasks from review/debug output. +3. Skip allowed failed tasks only when acceptance criteria permit fallback. +4. Recompute graph and continue. +5. Escalate if architecture/user decision is required. + +Transition: + +- more runnable tasks → `PLANNING_WAVE` +- blocked → `BLOCKED` +- all acceptance criteria met → `COMPLETED` +- cancelled → `CANCELLED` + +## 5. Retry Policy + +Default retry budget: task-specific `TaskSpec.constraints.retry_budget`, usually 3–5. + +Retry rules: + +1. Retry only when failure is plausibly recoverable. +2. First retry may use same agent strategy with corrected context. +3. Later retries should change one dimension: model, context, command strategy, serialization, or Debugger involvement. +4. Identical failure signature after multiple attempts triggers escalation faster. +5. Environment/kernel/toolchain impossibility becomes `blocked`, not infinite retry. +6. Architecture/interface mismatch routes to Architecture Designer. +7. If fallback is allowed and the failed task is non-critical, Scheduler may skip after recording evidence and risk. + +Retry decision shape: + +```ts +interface RetryDecision { + action: "retry" | "retry_serial" | "debug" | "skip" | "block" | "cancel" + reason: string + next_model_policy?: "scheduler_forced" | "agent_select" + required_context_refs?: string[] +} +``` + +## 6. Model Assignment Policy + +Scheduler chooses per task: + +```text +scheduler_forced → exact model assigned by Scheduler +agent_select → agent may choose within allowed model/capability constraints +``` + +Guidelines: + +- Implementation tasks with hidden complexity should use strong coding-capable model assignment or constrained agent choice. +- Cross-model review should be scheduler-forced. +- Debug tasks may switch models after repeated failures. +- Cheap/simple tasks may use lower-cost models when quality risk is low. + +## 7. Resource-Aware Concurrency + +Scheduler considers: + +```text +CPU cores +RAM pressure +disk space +active command count +LLM provider rate limits +toolchain locks +workspace write conflicts +user-configured max concurrency +``` + +Concurrency can shrink or expand dynamically. Running tasks are not killed solely because resources become tighter unless the system is at risk; new dispatch is paused first. + +## 8. Escalation Model Hooks + +Scheduler does not ask the user directly except through Main Agent/PermissionEngine. + +Escalation routes: + +| Trigger | Route | +|---|---| +| product/user choice needed | Main Agent | +| architecture/interface change | Architecture Designer → Main Agent/user if needed | +| permission decision | PermissionEngine → Main Agent/UI | +| environment impossible | Main Agent with Doctor/Debugger evidence | +| repeated implementation failure | Debugger or Main Agent based on recoverability | +| high-severity review finding | Main Agent + Architecture Designer if design-level | + +## 9. Recovery on Restart + +On startup/resume: + +1. Load `tasks` where status is `running` or `interrupted`. +2. Load active `agents` and `workspaces`. +3. Check process liveness where PID is known. +4. If process is alive and IPC can reconnect, resume monitoring. +5. If process is gone, emit `agent.lost`; mark task failed/interrupted based on resumability. +6. Preserve workspaces until merge/cleanup decision is recorded. +7. Rebuild queue from pending/failed-with-retry tasks. + +## 10. Terminal Graph States + +### `COMPLETED` + +All required tasks completed and required review/verification gates passed or documented as skipped by policy. + +### `BLOCKED` + +No runnable work remains because a decision or external condition is required. Scheduler must produce a concise blocker report with: + +```text +blocked task IDs +reason +required decision +available evidence +safe suggested next step +``` + +### `CANCELLED` + +User/system cancellation propagated to running agents, task statuses terminalized, and workspaces left in a recoverable state. + +## 11. V1.0.0 Alpha Cut Line + +The V1.0.0 Alpha skeleton must implement: + +1. DB-backed TaskGraph loading. +2. Hard/soft dependency handling. +3. Write-area serialization and basic worktree workspace strategy. +4. Child process dispatch via NDJSON IPC. +5. Heartbeat timeout detection. +6. Retry budget and failure signature tracking. +7. Workspace merge success/conflict events. +8. Review wave support. +9. Restart recovery for running/lost agents. +10. Escalation report generation. + +Advanced optimization can wait: + +```text +fine-grained AST write-set prediction +multi-machine scheduling +provider rate-limit optimization +automatic semantic merge resolution +learning-based retry strategy +``` diff --git a/AirPlan/docs/architecture/scope-escalation-v1.md b/AirPlan/docs/architecture/scope-escalation-v1.md new file mode 100644 index 0000000..b1b9369 --- /dev/null +++ b/AirPlan/docs/architecture/scope-escalation-v1.md @@ -0,0 +1,283 @@ +# AirCoding Scope Escalation Model V1 + +Date: 2026-05-27 +Status: Canonical scope escalation model for V1.0.0 Alpha skeleton + +This document defines when agents may continue silently, when Scheduler must route to Architecture Designer, and when Main Agent/user confirmation is required. + +## 1. Core Principle + +Implementation-level changes that do not conflict with existing requirements, interfaces, architecture, or permissions may continue silently. + +Architecture-level, product-level, safety-sensitive, or user-visible requirement changes require assessment and may require user confirmation depending on permission mode and impact. + +## 2. Escalation Levels + +```ts +type ScopeImpactLevel = + | "implementation" + | "interface" + | "architecture" + | "product" + | "permission" + | "environment" + | "policy" +``` + +| Level | Meaning | Default action | +|---|---|---| +| `implementation` | internal code details within accepted scope | silent continue | +| `interface` | public API/schema/module boundary changes | Architecture Designer assessment | +| `architecture` | component responsibility/data flow/runtime model changes | Architecture Designer + likely user-visible summary | +| `product` | changes user-facing goal, behavior, UX, or acceptance criteria | Main Agent/user confirmation | +| `permission` | action exceeds current permission grant | PermissionEngine/Main Agent | +| `environment` | dependency/toolchain/platform blocker | Doctor/Debugger, then Main Agent if unresolved | +| `policy` | safety/security/legal/project policy issue | block until explicit decision or refuse | + +## 3. Silent Continue Criteria + +An agent may continue without escalation when all are true: + +1. Change is inside TaskSpec scope/write area. +2. Acceptance criteria remain unchanged. +3. Public interfaces and architecture decisions remain unchanged. +4. No denied path, credential, system-sensitive, or unapproved network access is needed. +5. Verification plan remains valid. +6. Change does not contradict project rules or latest user instructions. +7. Risk is low or normal for the task type. + +Examples: + +```text +rename local variable +adjust private helper implementation +fix compile error without API change +add missing test for accepted behavior +change internal algorithm with same contract +``` + +## 4. Architecture Designer Assessment Criteria + +Route to Architecture Designer when any are true: + +1. Public function/class/module interface must change. +2. DB schema or persisted data shape must change. +3. IPC/event/tool contract must change. +4. Dependency graph or component responsibility changes. +5. Task requires new subsystem/capability not in plan. +6. Multiple tasks conflict semantically, not just textually. +7. A user requirement change may affect architecture. +8. Repeated failures indicate the plan itself is wrong. + +Architecture Designer outputs `architecture.impact.completed`: + +```ts +interface ArchitectureImpactCompletedPayload { + assessment_id: string + requirement_change_id?: string + impact_level: "implementation" | "interface" | "architecture" | "product" + decision: "silent_continue" | "requires_user_confirmation" | "requires_replan" | "reject_or_escalate" + summary: string + affected_task_ids?: string[] + evidence_refs?: EvidenceLink[] +} +``` + +## 5. User Confirmation Criteria + +Main Agent asks the user when any are true: + +1. Product behavior or acceptance criteria changes. +2. Architecture Designer marks `requires_user_confirmation`. +3. Low-permission mode requires approval for the planned action. +4. Credentials or system-sensitive operations are involved. +5. Migration or destructive/shared-state operation is involved. +6. Safety/policy boundary requires explicit authorization. +7. Failure cannot be resolved without user preference or external input. + +High-permission mode may auto-execute many actions after visible `announce_then_run`, but cannot bypass: + +```text +credentials +system_sensitive +migration confirmation +policy refusal boundary +destructive/shared-state actions requiring explicit confirmation +``` + +## 6. Environment Escalation + +Environment/toolchain issues follow: + +```text +worker detects issue + → Doctor/Debugger evidence + → if fix is allowlisted and permission mode allows: announce_then_run or ask + → if fix fails or unsupported platform: Main Agent blocker report + → if architecture assumptions invalid: Architecture Designer assessment +``` + +Examples requiring environment escalation: + +```text +missing compiler/toolchain +kernel feature unavailable +package manager unavailable +insufficient disk space +X/display backend missing for GUI evidence +``` + +## 7. Permission Escalation + +PermissionEngine returns an action plus a grant scope: + +```text +action: allow | deny | ask_user | block | refuse | announce_then_run +grant_scope: none | once | session | project | global +``` + +Routes: + +| Action | Route | +|---|---| +| `allow` | execute according to `grant_scope`; create backup first when `backup_required` is true | +| `announce_then_run` | visible notice, auto-execute if not interrupted; grant is bounded by `grant_scope` | +| `ask_user` | Main Agent/UI prompt | +| `deny` | do not execute this request; caller may choose another safe path | +| `block` | task.blocked | +| `refuse` | policy_error and cancellation/blocker | + +## 8. Requirement Change Handling + +When the user changes requirements during execution: + +```text +Main Agent records requirement.changed +Scheduler pauses affected dispatch/merge decisions +Architecture Designer assesses if needed +Scheduler cancels, interrupts, replans, or continues affected tasks +Main Agent reports visible impact summary +``` + +Classification: + +| Change | Handling | +|---|---| +| clarification only | update context; continue | +| implementation detail | Scheduler updates pending tasks; running tasks may continue if unaffected | +| scope change | interrupt affected tasks and replan | +| architecture change | Architecture Designer assessment | +| cancellation | cancel affected tasks and preserve workspaces/artifacts | + +## 9. Worker Self-Escalation Contract + +Workers return `blocked` instead of improvising when they detect: + +```text +architecture/interface mismatch +permission denial +missing product decision +unsupported environment condition +unsafe requested behavior +verification cannot be run and acceptance depends on it +TaskSpec scope insufficient for necessary change +``` + +WorkerResult blocker fields: + +```ts +interface BlockerReport { + impact_level: ScopeImpactLevel + reason: string + required_decision: string + options?: Array<{ label: string; tradeoff: string }> + evidence_refs?: EvidenceLink[] + suggested_default?: string +} +``` + +## 10. Scheduler Escalation Decision + +Scheduler maps task/agent/tool events to one of: + +```text +continue +retry +retry_serial +debug +ask_permission +architecture_assessment +ask_user +cancel +refuse +``` + +Decision inputs: + +```text +error kind +failure signature repetition +TaskSpec scope +permission result +architecture impact +verification evidence +resource/environment state +user permission mode +``` + +## 11. User-Facing Reports + +Escalation reports should be short and actionable: + +```text +What changed or failed +Why AirCoding cannot safely continue silently +Evidence summary +Recommended default action +Alternatives if meaningful +``` + +Do not show implementation noise when the decision is product-level. Do show precise evidence when the decision affects architecture, data loss, security, or environment setup. + +## 12. Examples + +### Silent implementation fix + +A C++ build fails because a private helper has a mismatched parameter type. Executor edits the helper and reruns build/tests. No escalation. + +### Interface-level escalation + +A task discovers the accepted API cannot support required streaming. Executor returns blocked. Architecture Designer assesses interface change and updates plan/ADR before Scheduler continues. + +### Product-level escalation + +User asked for local-only storage, but implementation requires cloud sync to meet a new requirement. Main Agent asks user; no silent change. + +### Environment escalation + +Build requires a missing compiler. Doctor can install it. In high-permission mode this may be announced and run if allowlisted; credentials/system-sensitive steps still ask. + +### Policy escalation + +Requested behavior would steal credentials or hide persistence. AirCoding refuses; no architecture workaround. + +## 13. V1.0.0 Alpha Cut Line + +V1.0.0 Alpha skeleton must implement: + +1. ScopeImpactLevel contract. +2. Silent continue checks for workers. +3. Worker blocked report schema. +4. Architecture impact event route. +5. PermissionEngine route integration. +6. Scheduler escalation decision table. +7. Main Agent blocker/confirmation presentation. + +Post-MVP: + +```text +learned escalation classifier +risk scoring by code ownership/history +interactive impact visualization +automated ADR draft generation from repeated escalations +``` diff --git a/AirPlan/docs/architecture/security-model-v1.md b/AirPlan/docs/architecture/security-model-v1.md new file mode 100644 index 0000000..14ec7fb --- /dev/null +++ b/AirPlan/docs/architecture/security-model-v1.md @@ -0,0 +1,334 @@ +# AirCoding Security Model V1 + +Date: 2026-05-27 +Status: Canonical security model for V1.0.0 Alpha skeleton + +This document defines AirCoding's MVP security boundaries for local coding-agent operation. + +## 1. Security Goals + +AirCoding should: + +1. Protect user code, credentials, system-sensitive files, and git history. +2. Allow productive local development, including C++ build directories and `sudo` when appropriate. +3. Make risky actions visible and confirmable. +4. Keep local evidence useful for debugging without automatic upload. +5. Prevent tool/provider/plugin boundaries from bypassing permissions. +6. Preserve recoverability through backups, artifacts, and event history. + +## 2. Trust Boundaries + +```text +User + → Main Agent/UI + → Runtime services + → ToolRegistry/PermissionEngine + → OS/filesystem/shell/network/provider +``` + +Boundary rules: + +1. User instructions are intent, not permission bypass. +2. LLM output is untrusted until validated by runtime/tool schemas and PermissionEngine. +3. Tool inputs are validated before execution. +4. Provider responses cannot directly modify files or run commands. +5. Plugins/capabilities use the same ToolRegistry and PermissionEngine path as built-ins. +6. Session DB/artifacts are local state, not remote telemetry. + +## 3. Permission Profiles + +```ts +type PermissionProfile = + | "low" + | "normal" + | "high" + | "developer" +``` + +Profile behavior: + +| Profile | Behavior | +|---|---| +| `low` | ask for writes/exec/network beyond read-only inspection | +| `normal` | allow project-local work; ask for project-outside/system-sensitive/credentials | +| `high` | announce-then-run many allowlisted actions; still ask for credentials/system-sensitive/migrations/destructive shared actions | +| `developer` | for AirCoding developers; may emit full encrypted diagnostics; still cannot bypass credential/policy rules | + +## 4. Path Security + +Path categories: + +```ts +type PathRiskCategory = + | "project" + | "project_air_shared" + | "project_air_local" + | "project_build" + | "project_git" + | "project_outside_user" + | "system_sensitive" + | "credential_store" + | "unknown" +``` + +Rules: + +1. Resolve symlinks with realpath before deciding risk. +2. Project directory reads are allowed by default. +3. Project directory writes are allowed by default except protected paths. +4. `.git/` is write-protected by default. +5. Build directories are unrestricted project paths because C++ workflows need them. +6. Project-outside non-system writes require backup then allow/ask depending profile. +7. System-sensitive and credential-store paths require explicit confirmation or are blocked. +8. Unknown paths are treated conservatively. + +System-sensitive examples: + +```text +/etc +/usr +/bin +/sbin +/boot +/dev +/proc +/sys +system service directories +package manager global state +``` + +Credential-store examples: + +```text +~/.ssh +~/.gnupg +password manager stores +cloud credential directories +.env files when classified as secret-bearing +API key config files +``` + +## 5. Command Security + +Command risk categories: + +```ts +type CommandRisk = + | "read_only" + | "project_write" + | "build_or_test" + | "network" + | "dependency_install" + | "destructive" + | "system_sensitive" + | "credential_access" + | "privilege_escalation" + | "unknown" +``` + +Rules: + +1. `sudo` alone is not automatically forbidden. +2. `sudo` touching system-sensitive paths still requires explicit confirmation. +3. Destructive commands are never run silently unless narrowly allowlisted and recoverable. +4. Interactive commands are not supported in MVP except through dedicated tools. +5. Commands must have cwd and timeout. +6. stdout/stderr are captured as artifacts when needed for evidence. +7. Shell execution is non-interactive and does not inherit secrets except allowlisted environment variables. + +Destructive examples: + +```text +rm -rf +reset --hard +clean -fd +force push +dropping databases +overwriting user files outside scoped paths +killing unrelated processes +``` + +## 6. Network Security + +Network categories: + +```text +provider API calls +dependency downloads +project-requested network behavior +analysis/debug network capture +unknown outbound network +``` + +Rules: + +1. Provider API calls use configured providers only. +2. Dependency downloads are managed through Doctor/setup and permission policy. +3. Generated/project code network access must match user request or be approved. +4. Network capture may require elevated permissions and explicit reason. +5. No automatic upload of doctor bundles, debug knowledge, artifacts, screenshots, logs, pcaps, or source code. + +## 7. Credential Handling + +Credential rules: + +1. Secrets are referenced by `auth_ref`, never copied into session DB/events/artifacts. +2. Tools must declare whether input/output may contain secrets. +3. Provider adapters redact auth headers and API keys from logs. +4. Doctor checks existence/shape of credentials without printing values. +5. Credential access always requires explicit confirmation unless already granted by a scoped secure config reference. +6. LLM-visible context must not include secrets unless the user explicitly requests and the policy allows it. + +## 8. Provider and Prompt Injection Security + +External content includes: + +```text +web pages +dependency logs +compiler output +repo files +tool output +provider responses +MCP/plugin output +``` + +Rules: + +1. External content is data, not instruction. +2. Tool results cannot override runtime policy or project rules. +3. Prompt injection suspicion is surfaced to the user/developer log when relevant. +4. ContextAssembler separates instruction layers from evidence/tool output layers. +5. Provider output must pass tool schema validation before tool execution. + +## 9. Plugin and Capability Security + +Capabilities declare: + +```text +tools provided +dependencies +permissions requested +network access +artifact types +config schema +trust level +``` + +Rules: + +1. Capability install/enable is a permissioned action. +2. Capability tools are not privileged above built-ins. +3. Capability dependencies are detected/installed by Doctor, not by arbitrary plugin scripts. +4. Unknown plugin events cannot be durable unless registered or namespaced and approved. +5. Capability updates require the same package/source trust policy as install. + +## 10. Logs, Artifacts, and Export + +Local logs: + +```text +~/.air/logs/air.log +~/.air/logs/air.developer.log +``` + +Rules: + +1. `air.log` is user-readable and contains startup failures, exceptions, and environment configuration issues. +2. `air.developer.log` is full debug/performance log encrypted with development-team public key. +3. Logs retain seven days by default. +4. Session artifacts are project-local and not automatically redacted. +5. Export/share/upload requires explicit user action. +6. Debug Knowledge sharing requires redaction, preview, and authorization. +7. Doctor bundles may include full diagnostics and are encrypted for development-team channel. + +## 11. Backup and Recovery + +Project-outside writes: + +```text +backup to /.air/local/backups/ before write +``` + +Migration: + +```text +always ask user +backup .air first +rollback on failure +``` + +Workspace merges preserve conflict artifacts and do not discard user work silently. + +## 12. Refusal and Block Conditions + +AirCoding refuses or blocks: + +```text +malware, credential theft, stealth, evasion, destructive abuse +unauthorized access or exploitation +mass targeting or DoS +supply-chain compromise +unapproved credential access +unapproved destructive shared-state actions +policy-bypassing requests +``` + +Defensive security, authorized testing, CTF, and educational work are allowed when authorization context is clear. + +## 13. PermissionEngine API + +```ts +interface PermissionRequestContext { + session_id: string + task_id?: string + agent_id?: string + tool_name?: string + command?: string + paths?: string[] + network?: boolean + requested_action: string + reason: string +} + +type PermissionAction = "allow" | "deny" | "ask_user" | "block" | "refuse" | "announce_then_run" +type PermissionGrantScope = "none" | "once" | "session" | "project" | "global" + +interface PermissionDecision { + action: PermissionAction + grant_scope: PermissionGrantScope + risk_level: "low" | "medium" | "high" | "critical" + reason: string + required_confirmation?: boolean + backup_required?: boolean + evidence_refs?: string[] +} +``` + +Permission decisions are recorded with `permission.decision.recorded` when durable. + +## 14. V1.0.0 Alpha Cut Line + +V1.0.0 Alpha skeleton must implement: + +1. Realpath-based path classifier. +2. Command risk analyzer. +3. Permission profiles. +4. Explicit credential/system-sensitive confirmation gates. +5. Project-outside backup-before-write path. +6. ToolRegistry permission enforcement. +7. Provider secret redaction. +8. Export/share no-auto-upload rule. +9. Security refusal/block handling. +10. Permission decision events. + +Post-MVP: + +```text +sandboxed command runner +seccomp/container profiles +plugin signature verification +secret scanner integration +advanced prompt-injection classifier +policy-as-code engine +``` diff --git a/AirPlan/docs/architecture/solution-architecture.md b/AirPlan/docs/architecture/solution-architecture.md new file mode 100755 index 0000000..2d64d21 --- /dev/null +++ b/AirPlan/docs/architecture/solution-architecture.md @@ -0,0 +1,479 @@ +# Solution Architecture + +Date: 2026-05-27 +Status: Formal V1 architecture derived from AirCoding Architecture Baseline V1 + +## 1. Overview + +AirCoding is a self-owned local AI coding agent/runtime. It is not a Claude Code plugin wrapper. The product provides a Claude Code-quality execution layer, OpenCode/OpenTUI-inspired terminal UI, project-local session persistence, multi-agent orchestration, and language/toolchain capability packages. + +The V1 architecture is Linux-first, TypeScript/Bun-based, event-driven, and project-local by default. C++ is the first deep language profile, while the runtime remains language-agnostic through `toolchain-*` capability packages. + +Core value path: + +```text +User requirement + → Main Agent clarification and routing + → Architecture Designer for design/interface decisions + → Scheduler task graph and wave planning + → Executor/Reviewer/Debugger/Compactor/ExperienceMiner workers + → ToolRegistry + PermissionEngine + EventStore + → project-local DB/artifacts/evidence + → TUI/HUD ProjectionStore +``` + +## 2. Architecture Sources of Truth + +This document summarizes the formal architecture. Detailed V1 baselines remain authoritative for implementation contracts. + +Precedence rule: + +1. `interface-contracts-v1.md` wins for TypeScript public interface shape. +2. `db-schema-v1.md` wins for SQLite persistence shape. +3. `event-registry-v1.md` wins for event names and payloads. +4. `tool-registry-v1.md` wins for tool names and tool I/O schemas. +5. `runtime-semantics-v1.md` wins for cross-cutting runtime behavior. +6. `c4/module.md` and `c4/code-view.md` win for package/component boundaries. +7. ADR files win for accepted design decisions they explicitly cover. +8. `baselineV1.md` remains the narrative baseline and decision index. + +| Area | Source | +|---|---| +| Overall baseline | `AirPlan/docs/architecture/baselineV1.md` | +| Interface contracts | `AirPlan/docs/architecture/interface-contracts-v1.md` | +| Runtime semantics | `AirPlan/docs/architecture/runtime-semantics-v1.md` | +| C4/module/code view | `AirPlan/docs/architecture/c4/module.md`, `AirPlan/docs/architecture/c4/code-view.md` | +| DB schema | `AirPlan/docs/architecture/db-schema-v1.md` | +| Event registry | `AirPlan/docs/architecture/event-registry-v1.md` | +| Tool registry | `AirPlan/docs/architecture/tool-registry-v1.md` | +| Scheduler state machine | `AirPlan/docs/architecture/scheduler-state-machine-v1.md` | +| Prompt layering | `AirPlan/docs/architecture/prompt-layering-v1.md` | +| Provider matrix | `AirPlan/docs/architecture/provider-capability-matrix-v1.md` | +| Error taxonomy | `AirPlan/docs/architecture/error-taxonomy-v1.md` | +| Artifact naming | `AirPlan/docs/architecture/artifact-naming-v1.md` | +| Scope escalation | `AirPlan/docs/architecture/scope-escalation-v1.md` | +| Security model | `AirPlan/docs/architecture/security-model-v1.md` | +| Capability trust | `AirPlan/docs/architecture/capability-trust-v1.md` | +| Platform matrix | `AirPlan/docs/architecture/cross-platform-matrix-v1.md` | + +## 3. Architectural Principles + +1. **Execution quality follows Claude Code.** File edits are read-before-edit, exact, conservative, small, and verified before completion. +2. **OpenCode is a UI/runtime reference, not a business-state dependency.** Reuse visual patterns and OpenTUI/Solid primitives, not OpenCode's session/sync state model. +3. **Project-local source of truth.** Session state, artifacts, backups, and project rules live under project `.air/`. +4. **Events drive live behavior; SQLite drives recovery.** EventBus is live transport; domain tables and durable events are the source of truth. +5. **Workers are isolated child processes.** Executor, Reviewer, Debugger, Compactor, and ExperienceMiner run as independent Bun processes over NDJSON IPC. +6. **Main Agent remains responsive.** Long-running background work is delegated to Scheduler/workers. +7. **Architecture changes are explicit.** Implementation-only changes may continue silently; interface/architecture/product changes route through Architecture Designer and/or user confirmation. +8. **Tool/capability boundaries are permissioned.** Built-in and future plugin tools all pass through ToolRegistry and PermissionEngine. +9. **Provider boundary is isolated.** Internal messages are Anthropic canonical; adapters convert at provider boundary. +10. **Evidence is first-class.** Build/test/debug/review outputs become artifacts and evidence refs before completion claims. + +## 4. Major Containers + +### CLI Container + +Package: `packages/cli` + +Responsibilities: + +- command entrypoint +- startup and first-run initialization +- Doctor invocation +- project discovery and `.air` initialization +- resource loading +- TUI/runtime bootstrap + +Interfaces: + +- CLI commands +- local filesystem +- runtime service initialization + +### TUI/HUD Container + +Package: `packages/tui` + +Responsibilities: + +- OpenTUI/Solid user interface +- Main Agent conversation surface +- progress, task, agent, diff, and evidence display +- permission prompts and blocker reports +- HUD/statusline projection + +Interfaces: + +- ProjectionStore read API +- Main Agent UI channel +- Permission prompt UI + +Constraints: + +- TUI consumes ProjectionStore only. +- TUI does not query SQLite or EventBus directly. +- TUI does not own scheduling state. + +### Runtime Container + +Package: `packages/runtime` + +Responsibilities: + +- Main Agent orchestration shell +- Architecture Designer integration +- Scheduler +- child process management +- EventBus and EventStore +- SessionStore/domain repositories +- ToolRegistry +- PermissionEngine +- CapabilityRegistry +- ContextAssembler +- ArtifactStore and EvidenceStore +- ProjectionStore producer side + +Interfaces: + +- `packages/contracts` +- `packages/llm` +- `packages/toolchain-*` +- SQLite +- project filesystem +- child process stdio IPC + +### LLM Container + +Package: `packages/llm` + +Responsibilities: + +- provider configuration +- provider adapters +- Anthropic canonical message handling +- OpenAI/OpenRouter/ollama/custom endpoint conversion +- capability matrix validation +- streaming/tool-use conversion +- token counting hooks where available + +Interfaces: + +- ProviderAdapter API +- ProviderCapabilityMatrix +- runtime LLM request API + +### Toolchain C++ Container + +Package: `packages/toolchain-cpp` + +Responsibilities: + +- C++ project detection +- CMake configure/build orchestration +- Ninja-first, Make fallback strategy +- CTest/GoogleTest execution +- cppcheck static analysis +- clangd CLI queries +- compiler/linker diagnostic parsing +- build/test/debug evidence production + +Interfaces: + +- Capability manifest +- ToolRegistry tools under `cpp.*` +- shell command runner +- diagnostics/artifacts/evidence stores + +### Contracts Container + +Package: `packages/contracts` + +Responsibilities: + +- compileable shared TypeScript interfaces +- RuntimeEvent, TaskSpec, WorkerResult, ToolDefinition, ArtifactRef, EvidenceRef +- error, provider, project, IPC, UI types + +Dependency rule: + +- All packages may depend on `contracts`. +- `contracts` must not depend on domain implementation packages. + +## 5. Runtime Agents + +### Main Agent + +User-facing coordinator. It handles conversation, progress summaries, requirement changes, direct foreground tasks, and escalation presentation. It does not perform long-running background work. + +### Architecture Designer + +Owns architecture planning, impact assessment, ADR/C4/plan/todo alignment, and design/interface change review. It may edit planning/architecture documents, not implementation code. + +### Scheduler + +Owns TaskGraph loading, wave planning, dependency handling, write-area conflict handling, retry strategy, child worker dispatch, heartbeat monitoring, merge coordination, and restart recovery. + +### Executor + +Performs scoped implementation/build/test tasks with Claude Code-style execution discipline and structured WorkerResult output. + +### Reviewer + +Read-only reviewer for correctness, security, scope control, architecture compliance, and evidence sufficiency. It produces review reports and follow-up tasks. + +### Debugger + +Diagnoses failures using logs, diagnostics, artifacts, command output, GUI/network evidence, and may fix only within assigned write scope. + +### Compactor + +Performs copy-on-write context compaction. It produces summaries while preserving original messages for explicit backtracking. + +### ExperienceMiner + +Extracts project rules, skill candidates, and debug knowledge from verified repeated patterns and evidence. + +## 6. Data Architecture + +Project layout: + +```text +/.air/ + shared/ + project.json + permissions.yaml + compaction-rules.md + rules/ + plan/ + local/ + sessions// + session.db + artifacts/ + backups/ + debug-records.db + learned-memory.db + workspaces/ + tmp/ + locks/ +``` + +Session DB path: + +```text +/.air/local/sessions//session.db +``` + +Core data groups: + +| Group | Tables | +|---|---| +| session/conversation | `sessions`, `messages`, `message_drafts`, `summaries` | +| orchestration | `events`, `tasks`, `task_dependencies`, `task_attempts`, `agents`, `workspaces` | +| execution evidence | `tool_runs`, `command_runs`, `artifacts`, `diagnostics`, `evidence_refs` | +| UI recovery | `ui_state` | +| schema | `schema_meta` | + +SQLite V1 settings: + +```sql +PRAGMA journal_mode = WAL; +PRAGMA synchronous = NORMAL; +PRAGMA foreign_keys = OFF; +``` + +Durable event insert and corresponding domain table update must be in the same transaction. + +## 7. Control Flow Architecture + +### Startup Flow + +```text +CLI starts + → detect platform and config + → load resources/prompts/capabilities + → open or initialize project .air + → run read-only Doctor + → open session DB + → hydrate ProjectionStore from DB + → start TUI/Main Agent/runtime services +``` + +### Normal Execution Flow + +```text +User request + → Main Agent classifies intent + → direct answer or architecture/task planning + → Scheduler creates/loads TaskGraph + → ContextAssembler builds agent context + → Scheduler dispatches child worker over NDJSON IPC + → worker uses ToolRegistry + → ToolRegistry enforces PermissionEngine + → tools emit events/artifacts/evidence + → worker returns WorkerResult + → Scheduler retries/merges/reviews/continues + → Main Agent reports outcome +``` + +### Requirement Change Flow + +```text +User changes requirement + → requirement.changed event + → Scheduler pauses affected work + → Architecture Designer assesses if needed + → implementation-level change continues silently + → architecture/product-level change routes to user confirmation/replan +``` + +### Recovery Flow + +```text +Process/session restarts + → open session DB + → load running/interrupted tasks and agents + → inspect child process liveness when possible + → emit agent.lost/task.failed or reconnect/resume + → preserve unmerged workspaces + → rebuild Scheduler queues + → hydrate ProjectionStore +``` + +## 8. Tool and Capability Architecture + +ToolRegistry provides stable schema-validated built-ins: + +```text +fs.*, shell.*, git.*, project.*, cpp.*, debug.*, +gui.*, network.*, artifact.*, context.*, permission.*, doctor.* +``` + +CapabilityRegistry adds built-in and future plugin capabilities through manifests. Capability dependencies are declared in manifests but installed/fixed by Doctor, never by arbitrary plugin scripts. + +Every tool call follows: + +```text +model/agent request + → schema validation + → PermissionEngine evaluation + → tool execution + → tool/command/artifact/evidence events + → structured ToolResult +``` + +## 9. Prompt and Provider Architecture + +ContextAssembler emits Anthropic canonical messages with L0-L9 layers: + +```text +runtime invariant +role/mode +safety and permission policy +project rules/user preferences +architecture baseline/current plan +task spec/acceptance criteria +relevant code/artifacts/evidence +recent conversation/decision context +tool result history/diagnostics +immediate instruction +``` + +Provider adapters convert canonical messages at the LLM boundary. Conversion omissions are recorded. Required unsupported capabilities block before model call. + +Model selection is capability-based and can be Scheduler-forced or agent-selected within allowed constraints. + +## 10. Security Architecture + +Security boundary summary: + +- LLM output is untrusted until validated. +- Tools are the only path to filesystem/shell/network effects. +- PermissionEngine evaluates all writes, execution, network, system-sensitive, and credential access. +- Symlinks are resolved by realpath before risk classification. +- `.git/` is protected by default. +- Build directories are allowed project write areas. +- Project-outside writes require backup. +- Credentials and system-sensitive operations require explicit confirmation. +- No automatic upload of logs, artifacts, debug knowledge, or doctor bundles. + +## 11. Platform Architecture + +V1.0.0 Alpha is Linux-first: + +| Platform | Support | +|---|---| +| Linux x86_64 | tier 1 | +| Linux arm64 | tier 2 | +| WSL2 | tier 2 | +| macOS | experimental | +| Windows native | experimental/post-MVP | + +Shell/process/C++ tooling in V1.0.0 Alpha targets POSIX-like Linux behavior. + +## 12. Quality and Validation Architecture + +Validation layers: + +```text +unit tests → integration fixture replay → real LLM E2E release gate +``` + +Execution completion requires evidence appropriate to the task: + +- build command result +- test command result +- static analysis result where configured +- debug evidence where failures occur +- review report for significant changes +- artifact/evidence refs for claims + +Release gate for tier-1 Linux must cover startup, project init, child IPC, session DB, artifacts/events, C++ configure/build/test, TUI startup, and real LLM E2E behavior. + +## 13. Key Risks and Mitigations + +| Risk | Mitigation | +|---|---| +| Execution quality below Claude Code | Align edit primitives, tool lifecycle, read-before-edit, verification discipline | +| Context explosion | copy-on-write compaction, ContextAssembler budgets, artifact refs | +| Scheduler complexity | V1 state machine and V1.0.0 Alpha cut line; advanced optimization deferred | +| Tool/plugin safety | ToolRegistry + PermissionEngine + capability trust model | +| Provider feature mismatch | Provider capability matrix and conversion report | +| Lost worker/process | heartbeat, task attempts, restart recovery | +| Merge conflicts across parallel workers | write-area planning, worktrees, merge events, repair/escalation | +| Debug evidence too large/noisy | artifact naming/layout, evidence refs, summaries | +| Platform drift | Linux tier-1 release matrix and Doctor platform report | + +## 14. V1.0.0 Alpha Architecture Boundaries + +In scope for V1.0.0 Alpha: + +```text +Bun monorepo +contracts package +runtime services +project-local SQLite/artifacts +EventStore/EventBus/ProjectionStore +Main Agent shell +Scheduler/worker IPC +ToolRegistry/PermissionEngine +complete C++ development workflow +local/built-in plugin and capability foundation +TUI/HUD startup and projections +provider adapters +Doctor read-only/fix framework +GUI/network evidence tools +release gate and binary tarball packaging +``` + +Deferred beyond V1.0.0 Alpha: + +```text +third-party plugin registry/signing +container sandboxing +advanced semantic merge +multi-machine scheduling +Windows-native deep support +production-grade bitmap image generation providers +browser/computer-use automation +learned retry optimizer +``` diff --git a/AirPlan/docs/architecture/tool-registry-v1.md b/AirPlan/docs/architecture/tool-registry-v1.md new file mode 100644 index 0000000..5659ae6 --- /dev/null +++ b/AirPlan/docs/architecture/tool-registry-v1.md @@ -0,0 +1,761 @@ +# AirCoding V1.0.0 Alpha Tool Registry V1 + +Date: 2026-05-27 +Status: Canonical V1.0.0 Alpha built-in tool registry + +This document freezes the built-in tools required for the V1.0.0 Alpha skeleton. Additional tools may be added by capabilities/plugins later, but the tools here define the minimum stable execution surface. + +Tool contract is defined in `interface-contracts-v1.md` §12 and exported from `packages/contracts/tool.ts`. + +## 1. Registry Principles + +1. Tools are schema-validated at input and output boundaries. +2. Tools emit lifecycle events from `event-registry-v1.md`: `tool.started`, `tool.progress`, `tool.completed`, `tool.failed`, `tool.cancelled`. +3. Tools must go through PermissionEngine before filesystem writes, command execution, network access, or system-sensitive operations. +4. File edit tools follow Claude Code style discipline: read-before-edit, exact replacement, small edits, no broad rewrite unless the tool is explicitly `fs.write` or template scaffolding. +5. Shell tools capture stdout/stderr as artifacts when output exceeds inline limits or when the command participates in verification evidence. +6. Tool implementations return structured outputs; human-readable summaries are presentation data, not the source of truth. +7. Tool names are stable API identifiers and use dotted namespaces. + +## 2. Common Tool Types + +`ToolCategory`, `ToolResultEnvelope`, `ToolDefinition`, `ToolExecutor`, `StreamingToolExecutor`, and `ToolRegistry` are defined in `interface-contracts-v1.md` §12. This document references those contracts; it does not re-define them. + +Inline output limits are implementation config, but V1 defaults should be conservative: + +```text +stdout/stderr inline preview: 16 KiB each +file read inline default: 2000 lines +single tool event payload target: < 256 KiB +larger content: artifact reference +``` + +## 3. Filesystem Tools + +### `fs.list` v1 + +Category: filesystem. Permission: read paths. + +Purpose: list directory entries with metadata. + +Input: + +```ts +interface FsListInput { + path: string + recursive?: boolean + max_depth?: number + include_hidden?: boolean + glob?: string +} +``` + +Output: + +```ts +interface FsListOutput { + entries: Array<{ + path: string + type: "file" | "directory" | "symlink" | "other" + size_bytes?: number + modified_at?: string + target_path?: string + }> + truncated: boolean +} +``` + +### `fs.read` v1 + +Category: filesystem. Permission: read paths. + +Purpose: read text, binary metadata, images, PDFs, or notebooks through typed adapters. + +Input: + +```ts +interface FsReadInput { + path: string + offset_lines?: number + limit_lines?: number + pages?: string + encoding?: "utf8" | "base64" | "auto" +} +``` + +Output: + +```ts +interface FsReadOutput { + path: string + content?: string + content_type: "text" | "binary" | "image" | "pdf" | "notebook" | "empty" + line_count?: number + truncated: boolean + artifact_id?: string +} +``` + +### `fs.write` v1 + +Category: filesystem. Permission: write paths. + +Purpose: create new files or overwrite files only when explicitly authorized by the caller policy. + +Input: + +```ts +interface FsWriteInput { + path: string + content: string + create_parent_dirs?: boolean + expected_existing_sha256?: string +} +``` + +Output: + +```ts +interface FsWriteOutput { + path: string + bytes_written: number + sha256: string + backup_artifact_id?: string +} +``` + +### `fs.edit` v1 + +Category: filesystem. Permission: read/write paths. + +Purpose: exact string replacement in an existing file. + +Input: + +```ts +interface FsEditInput { + path: string + old_string: string + new_string: string + replace_all?: boolean + expected_existing_sha256?: string +} +``` + +Output: + +```ts +interface FsEditOutput { + path: string + replacements: number + sha256: string + diff_artifact_id: string +} +``` + +Rules: + +- The file must have been read in the active task before edit. +- `old_string` must be unique unless `replace_all = true`. +- The tool fails rather than guessing indentation or nearby replacements. + +### `fs.patch` v1 + +Category: filesystem. Permission: read/write paths. + +Purpose: apply a unified patch generated by the execution layer. + +Input: + +```ts +interface FsPatchInput { + patch: string + strip?: number + expected_paths?: string[] +} +``` + +Output: + +```ts +interface FsPatchOutput { + changed_files: string[] + diff_artifact_id: string + rejected_hunks_artifact_id?: string +} +``` + +### `fs.stat` v1 + +Category: filesystem. Permission: read paths. + +Purpose: inspect path metadata and realpath for permission decisions. + +Input: + +```ts +interface FsStatInput { path: string } +``` + +Output: + +```ts +interface FsStatOutput { + path: string + realpath?: string + exists: boolean + type?: "file" | "directory" | "symlink" | "other" + size_bytes?: number + modified_at?: string +} +``` + +## 4. Shell and Process Tools + +### `shell.run` v1 + +Category: shell. Permission: execute plus command risk analysis. + +Purpose: run a bounded non-interactive command. + +Input: + +```ts +interface ShellRunInput { + command: string + cwd: string + timeout_ms?: number + env?: Record + stdin?: string + capture_mode?: "inline" | "artifact" | "both" + purpose?: "build" | "test" | "debug" | "doctor" | "general" +} +``` + +Output: + +```ts +interface ShellRunOutput { + command_run_id: string + exit_code: number + duration_ms: number + stdout_preview?: string + stderr_preview?: string + stdout_artifact_id?: string + stderr_artifact_id?: string + combined_artifact_id?: string + parsed_diagnostics_json?: unknown +} +``` + +Rules: + +- No interactive commands in V1 unless a dedicated tool owns the interaction model. +- Destructive commands require PermissionEngine approval based on command risk analysis. +- The command runner emits `command.started`, command stream deltas, and terminal command events. + +### `process.kill` v1 + +Category: shell/debug. Permission: execute; system-sensitive when target is outside AirCoding process tree. + +Input: + +```ts +interface ProcessKillInput { + pid: number + signal?: "SIGTERM" | "SIGKILL" | "SIGINT" + reason: string +} +``` + +Output: + +```ts +interface ProcessKillOutput { + pid: number + signal: string + delivered: boolean +} +``` + +## 5. Git Tools + +### `git.status` v1 + +Category: git. Permission: read paths. + +Input: + +```ts +interface GitStatusInput { cwd: string } +``` + +Output: + +```ts +interface GitStatusOutput { + branch?: string + clean: boolean + staged: string[] + modified: string[] + untracked: string[] + conflicted: string[] +} +``` + +### `git.diff` v1 + +Category: git. Permission: read paths. + +Input: + +```ts +interface GitDiffInput { + cwd: string + base_ref?: string + pathspecs?: string[] + staged?: boolean +} +``` + +Output: + +```ts +interface GitDiffOutput { + diff: string + diff_artifact_id?: string + truncated: boolean +} +``` + +### `git.worktree.create` v1 + +Category: git. Permission: write project-local paths. + +Input: + +```ts +interface GitWorktreeCreateInput { + cwd: string + path: string + branch_name: string + base_ref?: string +} +``` + +Output: + +```ts +interface GitWorktreeCreateOutput { + workspace_id: string + path: string + branch_name: string + base_ref?: string +} +``` + +### `git.merge_workspace` v1 + +Category: git. Permission: write project paths. + +Input: + +```ts +interface GitMergeWorkspaceInput { + workspace_id: string + strategy: "fast_forward" | "patch_apply" | "manual_merge" + target_ref?: string +} +``` + +Output: + +```ts +interface GitMergeWorkspaceOutput { + status: "merged" | "conflicted" | "failed" + changed_files: string[] + diff_artifact_id?: string + conflict_artifact_id?: string +} +``` + +## 6. Project Tools + +### `project.scan` v1 + +Category: project. Permission: read project paths. + +Purpose: collect project metadata for initialization and profile updates. + +Input: + +```ts +interface ProjectScanInput { + project_root: string + include_directory_tree: true + include_git_summary?: boolean + include_extension_stats?: boolean + include_special_files?: boolean +} +``` + +Output: + +```ts +interface ProjectScanOutput { + project_root: string + directory_tree_artifact_id: string + extension_stats: Record + special_files: string[] + git_summary?: unknown +} +``` + +### `project.profile.write` v1 + +Category: project. Permission: write `.air/shared/project.json`. + +Input: + +```ts +interface ProjectProfileWriteInput { + project_root: string + profile_json: unknown + expected_schema_version?: number +} +``` + +Output: + +```ts +interface ProjectProfileWriteOutput { + path: string + schema_version: number + sha256: string +} +``` + +## 7. C++ Toolchain MVP Tools + +### `cpp.detect` v1 + +Category: build. Permission: read project paths. + +Output includes detected build systems, compiler hints, test frameworks, and confidence notes. + +```ts +interface CppDetectInput { project_root: string } +interface CppDetectOutput { + build_systems: Array<"cmake" | "make" | "ninja" | "custom" | "unknown"> + preferred_build_system?: string + source_roots: string[] + test_roots: string[] + notes: string[] +} +``` + +### `cpp.cmake.configure` v1 + +Category: build. Permission: execute and write build directory. + +```ts +interface CppCmakeConfigureInput { + project_root: string + build_dir: string + generator_preference?: "ninja_then_make" | "ninja" | "make" + cmake_args?: string[] +} +interface CppCmakeConfigureOutput { + command_run_id: string + compile_commands_path?: string + diagnostics?: unknown +} +``` + +### `cpp.build` v1 + +Category: build. Permission: execute and write build directory. + +```ts +interface CppBuildInput { + project_root: string + build_dir?: string + target?: string + clean_first?: boolean +} +interface CppBuildOutput { + command_run_id: string + status: "passed" | "failed" + diagnostics?: unknown +} +``` + +### `cpp.test` v1 + +Category: test. Permission: execute project/build outputs. + +```ts +interface CppTestInput { + project_root: string + build_dir?: string + framework?: "ctest" | "gtest" | "custom" + filter?: string +} +interface CppTestOutput { + command_run_id: string + status: "passed" | "failed" + test_count?: number + failed_tests?: string[] + report_artifact_id?: string +} +``` + +### `cpp.static.cppcheck` v1 + +Category: static_analysis. Permission: execute/read project paths. + +```ts +interface CppcheckInput { + project_root: string + paths?: string[] + compile_commands_path?: string +} +interface CppcheckOutput { + command_run_id: string + diagnostic_ids: string[] + report_artifact_id?: string +} +``` + +### `cpp.clangd.query` v1 + +Category: static_analysis. Permission: read project paths and execute clangd helper. + +```ts +interface ClangdQueryInput { + project_root: string + compile_commands_path?: string + query: "definition" | "references" | "symbols" | "diagnostics" + file?: string + line?: number + column?: number + symbol?: string +} +interface ClangdQueryOutput { + results: unknown + artifact_id?: string +} +``` + +## 8. Debug and Evidence Tools + +### `debug.run` v1 + +Category: debug. Permission: execute project/build outputs. + +```ts +interface DebugRunInput { + command: string + cwd: string + timeout_ms?: number + collect_core_dump?: boolean + collect_backtrace?: boolean +} +interface DebugRunOutput { + command_run_id: string + exit_code?: number + crash_detected: boolean + backtrace_artifact_id?: string + core_dump_artifact_id?: string +} +``` + +### `debug.parse_logs` v1 + +Category: debug. Permission: read paths. + +```ts +interface DebugParseLogsInput { + paths: string[] + task_id?: string + hint?: string +} +interface DebugParseLogsOutput { + diagnostic_ids: string[] + summary: string + report_artifact_id?: string +} +``` + +## 9. GUI and Network Evidence Tools + +### `gui.screenshot` v1 + +Category: gui. Permission: read display/session state; system-sensitive if outside controlled test display. + +```ts +interface GuiScreenshotInput { + target: "active_window" | "display" | "window_title" | "pid" + value?: string +} +interface GuiScreenshotOutput { + screenshot_artifact_id: string + width?: number + height?: number +} +``` + +### `network.capture` v1 + +Category: network. Permission: network and system-sensitive when packet capture requires elevated permissions. + +```ts +interface NetworkCaptureInput { + interface?: string + duration_ms: number + filter?: string + reason: string +} +interface NetworkCaptureOutput { + pcap_artifact_id?: string + summary_artifact_id?: string + packet_count?: number +} +``` + +## 10. Context, Artifact, Permission, and Doctor Tools + +### `artifact.create` v1 + +Category: artifact. Permission: write session artifact path. + +```ts +interface ArtifactCreateInput { + type: string + original_name?: string + content?: string + source_path?: string + associated_entity_type?: string + associated_entity_id?: string + metadata?: Record +} +interface ArtifactCreateOutput { + artifact_id: string + uri: string + path: string + sha256?: string + size_bytes?: number +} +``` + +### `context.assemble` v1 + +Category: context. Permission: read DB/artifacts/rules. + +```ts +interface ContextAssembleInput { + task_id?: string + purpose: "main" | "execute" | "review" | "debug" | "compact" | "mine_experience" + refs?: string[] + token_budget?: number +} +interface ContextAssembleOutput { + canonical_format: "anthropic" + messages_artifact_id: string + omissions: string[] + token_estimate?: number + compaction_requested?: boolean +} +``` + +### `permission.request` v1 + +Category: permission. Permission: internal. + +```ts +interface PermissionRequestInput { + subject: string + risk_level: "low" | "medium" | "high" | "critical" + reason: string + options: string[] + default_option?: string + request_ref?: unknown +} +interface PermissionRequestOutput { + prompt_id: string + selected_option?: string + decision_id?: string +} +``` + +### `doctor.run` v1 + +Category: doctor. Permission: read system/project state; fix mode may require execute/write. + +```ts +interface DoctorRunInput { + mode: "read_only" | "fix" + scope?: "startup" | "project" | "toolchain" | "release_gate" + capabilities?: string[] +} +interface DoctorRunOutput { + run_id: string + status: "passed" | "issues_found" | "fixed" | "failed" + issue_count: number + blocking_issue_count: number + report_artifact_id?: string +} +``` + +## 11. MVP Required Tool Index + +```text +fs.list +fs.read +fs.write +fs.edit +fs.patch +fs.stat +shell.run +process.kill +git.status +git.diff +git.worktree.create +git.merge_workspace +project.scan +project.profile.write +cpp.detect +cpp.cmake.configure +cpp.build +cpp.test +cpp.static.cppcheck +cpp.clangd.query +debug.run +debug.parse_logs +gui.screenshot +network.capture +artifact.create +context.assemble +permission.request +doctor.run +``` + +## 12. Post-MVP Tool Candidates + +These are intentionally not required for the V1.0.0 Alpha skeleton: + +```text +image.generate +image.edit +browser.automate +gui.interact +container.run +package.manager.install +mcp.call +skill.run +clang-tidy native wrapper +sanitizer runner +coverage reporter +``` + +They may be registered by capabilities once the V1 registry, permission model, event schema, and artifact model are stable. diff --git a/AirPlan/docs/architecture/vibeboxbaseline.md b/AirPlan/docs/architecture/vibeboxbaseline.md new file mode 100644 index 0000000..31d8cf1 --- /dev/null +++ b/AirPlan/docs/architecture/vibeboxbaseline.md @@ -0,0 +1,545 @@ +# VibeBox Baseline V1 + +Date: 2026-05-26 +Status: Historical/top-level VibeBox overview; canonical VibeBox branch baseline lives at `AirPlan/docs/architecture/branchvibebox/vibeboxbaseline.md` + +This file is retained as a high-level overview. Implementation decisions for VibeBox V1 are authoritative in `AirPlan/docs/architecture/branchvibebox/vibeboxbaseline.md` and `AirPlan/docs/architecture/branchvibebox/feasibility-plan.md`. + +VibeBox is a highly simplified AirCoding derivative for an ARM Linux appliance. Its goal is to let non-technical users describe a small desktop utility in natural language, then run environment setup, development, testing, review, packaging, and delivery mostly silently in the background, finally handing the user a usable Electron application. + +This baseline intentionally cuts most of AirCoding's general-purpose architecture to minimize implementation cost, runtime risk, and support burden. + +## 1. Product Goal + +VibeBox should behave like an appliance: + +```text +User describes desired small tool in natural language + → VibeBox asks only blocking product questions, if any + → Runs doctor/setup silently where allowed + → Generates Electron app from approved template + → Implements UI and local logic in the background + → Runs lint/typecheck/test/smoke test + → Reviews generated code + → Fixes issues automatically when possible + → Packages app for ARM Linux + → Delivers runnable app to user with report +``` + +Primary experience target: after the user states the requirement, VibeBox should work in the background and only return when a usable tool is ready, unless a truly blocking product or safety decision is required. + +Target user: non-programmer / beginner. + +Target output: small Electron-based desktop utilities for ARM Linux. + +Typical examples: + +- simple file renamer +- local note/todo app +- clipboard helper +- small form/data-entry utility +- image batch resizer wrapper +- CSV viewer/editor +- local dashboard around simple APIs +- single-purpose internal workflow helper + +Non-goals: + +- large software projects +- multi-language deep toolchains +- C++ build/debug loop +- complex distributed agents +- long-running enterprise workflow automation +- arbitrary system administration +- production SaaS/backend deployment + +## 2. Relationship to AirCoding + +VibeBox reuses AirCoding principles selectively. + +Keep: + +- Claude Code style execution-layer discipline +- Anthropic canonical message format internally +- conservative file edit/diff/update primitives +- local session persistence +- artifact/evidence records +- doctor/setup environment checks +- TUI/HUD or simple appliance UI status display +- review/test before delivery + +Cut or defer: + +- Architecture Designer as a separate agent +- complex Scheduler / TaskGraph / worktree parallelism +- C++ toolchain profile +- multi-language toolchain packages +- network/GUI/static-analysis Air plugin family as first-class components +- ExperienceMiner / Curator +- Debug Knowledge Network +- project migration complexity beyond simple schema versioning +- multi-provider complexity beyond one configured provider +- OpenCode-compatible advanced TUI + +## 3. Core Design Principle + +VibeBox should optimize for appliance reliability over architectural generality. + +Key rule: + +> One user request should produce one small app project through a linear setup → generate → test → review → package → deliver pipeline, with background silent execution as the default. + +The system should not require the user to supervise intermediate development steps. Progress can be visible in status/HUD, but VibeBox should not ask for implementation choices unless the task is blocked. + +No parallel write workers in V1. + +No complex agent hierarchy in V1. + +No automatic architecture replanning loop in V1. + +## 4. Agent Model + +### 4.1 Single Orchestrator + +VibeBox has one main Orchestrator agent. + +Responsibilities: + +- Understand user's natural language request +- Ask only truly blocking product/safety questions +- Choose an app template +- Produce an internal implementation plan without requiring user approval for implementation details +- Run environment setup through doctor/setup according to appliance permission policy +- Drive Executor and Reviewer steps sequentially in the background +- Present final package and usage instructions + +### 4.2 Executor + +Executor can be implemented as a mode of Orchestrator or a simple child process. + +Responsibilities: + +- Scaffold Electron project from template +- Edit files using Claude Code-like execution primitives +- Run npm/pnpm commands +- Run tests and smoke checks +- Produce structured result + +### 4.3 Reviewer/Tester + +Reviewer/Tester can be a separate pass, not a long-lived agent. + +Responsibilities: + +- Inspect generated diff +- Check for obvious security issues +- Verify app matches user request +- Verify tests/smoke test passed +- Produce a concise approval or requested-change report + +V1 pipeline: + +```text +Orchestrator + → Executor + → Reviewer/Tester + → Executor fix pass if needed + → Package + → Deliver +``` + +Maximum retry cycles: 2. + +If still failing, show clear failure report and ask user whether to continue. + +## 5. Execution-Layer Quality Standard + +VibeBox follows AirCoding D-059: execution-layer primitives align with Claude Code for code quality. + +Required behaviors: + +- read before edit +- small exact edits +- no broad rewrites unless scaffolding from template +- no unrelated refactors +- run verification before declaring success +- collect evidence for build/test/package results +- diagnose root cause on failure, not random retries +- explicitly escalate if the requested app is outside supported scope + +This is the most important reuse point from AirCoding. + +## 6. Technology Stack + +Recommended V1 stack: + +```text +Runtime: TypeScript + Bun or Node.js +App target: Electron +Frontend: React + Vite or plain HTML/TS template +Package manager: pnpm or npm +Testing: vitest + Playwright/Electron smoke test +Packaging: electron-builder or electron-forge +Target OS: ARM Linux +``` + +Default app template: + +```text +Electron + Vite + TypeScript + ├── main process + ├── preload bridge + ├── renderer UI + ├── local storage helper + ├── test harness + └── packaging config for ARM Linux +``` + +Security defaults: + +- `contextIsolation: true` +- `nodeIntegration: false` +- explicit preload API +- no remote code execution +- no arbitrary shell command from generated app unless user explicitly requested and approved +- local-first storage by default + +## 7. Project Layout + +Each generated app is self-contained. + +```text +// + ├── package.json + ├── src/ + │ ├── main/ + │ ├── preload/ + │ └── renderer/ + ├── tests/ + ├── dist/ + ├── release/ + └── .vibebox/ + ├── project.json + ├── session.db + ├── artifacts/ + ├── reports/ + └── state.json +``` + +VibeBox may later converge with AirCoding `.air/shared` + `.air/local`, but V1 uses `.vibebox/` for product clarity and isolation. + +## 8. Session and State + +V1 uses one SQLite database per generated project: + +```text +/.vibebox/session.db +``` + +Minimum tables: + +- `messages` +- `message_drafts` +- `steps` +- `tool_runs` +- `command_runs` +- `artifacts` +- `reports` + +No complex TaskGraph tables in V1. + +Pipeline steps are linear: + +```text +clarify +plan +scaffold +implement +test +review +fix +package +deliver +``` + +Artifacts: + +```text +.vibebox/artifacts/ + ├── command-runs/ + ├── screenshots/ + ├── build-logs/ + ├── test-logs/ + ├── review-reports/ + └── packages/ +``` + +## 9. Tool Set + +Minimum built-in tools include frontend design and image generation as first-class VibeBox capabilities, because the target output is a user-facing Electron app and the user may not be able to provide UI/assets manually. + +### Filesystem + +- list files +- read file +- write file +- edit file with exact replacement +- apply patch +- create project from template + +### Shell + +- run command with timeout +- capture stdout/stderr artifacts +- enforce output limits + +### Electron workflow + +- install dependencies +- run dev build +- run typecheck +- run unit tests +- run smoke test +- package app + +### Frontend design + +- generate layout plan from natural language requirement +- choose sensible UI pattern from templates (form, dashboard, list/detail, wizard, utility panel) +- generate component structure and styling tokens +- generate CSS/theme defaults suitable for appliance users +- generate responsive layout for common small displays +- review screenshot against requested UX + +### Image generation / assets + +- generate app icon +- generate placeholder illustrations / empty-state images +- generate simple background or decorative assets when useful +- generate SVG assets when bitmap generation is unavailable +- edit/regenerate assets from user feedback +- store generated assets as artifacts before copying into the app + +### Electron automated testing + +- generate Playwright/Electron tests for all core user workflows +- launch Electron app in controlled test mode +- interact with UI elements, forms, menus, file pickers, and local storage paths where applicable +- test invalid/empty/large input cases relevant to the generated tool +- test restart/persistence behavior when the app stores local data +- capture screenshots and traces for failed UI tests +- run packaged-app launch test after packaging + +### UI evidence + +- launch app under Xvfb/Wayland-compatible mode if available +- capture screenshot +- compare screenshot against generated design intent +- use automated UI test evidence, not only smoke-test evidence + +### Delivery + +- collect release artifact +- generate README / usage instructions +- generate final report + +## 10. Doctor / Setup + +First startup runs read-only doctor. + +Checks: + +- Node.js or Bun availability +- npm/pnpm availability +- Electron install ability +- frontend-design capability availability +- image generation provider availability or local image model availability +- build tools required by native npm modules +- display/Xvfb availability for automated Electron UI tests +- Playwright/Electron automation support +- disk space +- write permissions to workspace +- ARM Linux architecture +- package manager cache availability + +If issues exist: + +- Low-permission mode: ask user before fix +- High-permission appliance mode: run fix automatically after showing a brief visible plan, unless the user interrupts +- First startup on a prepared appliance may be pre-authorized by the vendor/operator; otherwise it shows the fix plan before proceeding + +VibeBox's default appliance deployment should be high-permission and background-oriented. Environment setup is part of the product promise: the user should not need to manually install Node/Electron/build dependencies. + +## 11. User Interaction Model + +VibeBox should minimize technical language and assume the user lacks computer expertise. Default mode is highest-permission appliance automation with strong test/review gates, not an interactive developer workflow. + +User sees: + +```text +1. Understanding your app idea +2. Creating the app +3. Testing the app +4. Reviewing quality +5. Packaging for this box +6. Ready to use +``` + +Clarifying questions should be limited to product choices, for example: + +- app name +- input/output file types +- desired UI layout +- whether data stays local +- whether app may access network + +Do not ask users about implementation details unless necessary. If a decision can be safely inferred from the user's requirement and appliance defaults, VibeBox should choose automatically and report the choice in the final summary. + +## 12. Review and Test Gate + +VibeBox must maximize testing and review strength because the user may not be able to diagnose failures manually. + +Before delivery, VibeBox must have: + +- environment setup result +- dependency install result +- install/build command result +- typecheck result where TypeScript is used +- lint result when configured +- unit test result when tests exist +- integration test result for file/data flows when applicable +- end-to-end UI test result covering the main user workflows +- edge-case test result for invalid/empty/large inputs relevant to the app +- persistence/restart test result when the app stores local data +- frontend design review result +- generated asset review result when image-gen is used +- packaged-app launch test result +- screenshot evidence when a display backend is available +- reviewer report +- final package artifact + +Recommended review passes: + +1. Functional review: does the app match the user's request? +2. Runtime review: does it start and perform the golden path? +3. Full workflow test review: are all core user workflows covered by automated tests? +4. Edge-case review: are invalid/empty/large-input paths tested where relevant? +5. Frontend/design review: does the UI match the generated design intent and stay usable for a novice? +6. Asset review: are generated icons/images appropriate, local, and correctly bundled? +7. Security review: does it avoid dangerous filesystem/network/shell behavior? +8. Packaging review: can the delivered app run on the ARM Linux box? + +If a gate is skipped, final report must say why. Delivery should be blocked if the app cannot be launched, packaged, or validated through all core workflows. Smoke testing alone is insufficient for delivery. + +Delivery is blocked if: + +- app fails to start +- package build fails +- generated app requests unsafe permissions not approved by user +- reviewer finds high-severity issue + +## 13. Packaging and Delivery + +Default package output: + +```text +/release/ + ├── -arm64.AppImage or unpacked Linux directory + ├── README.md + └── vibebox-report.md +``` + +If AppImage is not feasible on the target box, deliver an unpacked Electron app directory plus launcher script. + +Final report includes: + +- what was built +- how to launch +- where files are stored +- tests run +- known limitations +- package path + +## 14. Scope Guards + +VibeBox should refuse or ask for escalation when user asks for: + +- malware, credential stealing, persistence, stealth, evasion +- destructive system modification +- unsupported drivers/kernel changes +- large multi-service systems +- cloud deployment requiring secrets +- apps that require unapproved network or filesystem access + +## 15. Reuse Strategy + +Reuse strongly from AirCoding: + +- execution-primitives aligned with Claude Code +- Anthropic canonical message handling +- ToolResult / ArtifactRef / EvidenceRef style +- doctor/dependency concepts +- basic session/artifact persistence + +Reuse from OpenCode: + +- optional TUI style if VibeBox has an operator console +- theme/dialog/status patterns + +Reuse from Codex: + +- shell/patch/test direct loop +- broad tool/capability examples + +Reuse from Claude Skills: + +- packaged workflow templates +- app-generation skill format + +Do not carry over: + +- AirCoding multi-agent scheduler complexity +- C++-specific toolchain +- long-term memory/curator in V1 +- OpenCode business state model + +## 16. MVP Acceptance Criteria + +A VibeBox V1 prototype is acceptable when it can: + +1. Run doctor on the ARM Linux box. +2. Accept a novice user's natural-language app request. +3. Ask at most 3 clarifying questions for a simple app. +4. Scaffold an Electron template. +5. Implement requested UI and local behavior. +6. Run build/typecheck/test or explain skipped gates. +7. Launch the app for a smoke test and capture evidence. +8. Run a review pass and fix at least one round of issues. +9. Package the app for ARM Linux or deliver a runnable unpacked app. +10. Produce a final user-friendly report. + +## 17. Explicit Differences from AirCoding Baseline V1 + +| Area | AirCoding | VibeBox | +|---|---|---| +| Target | General coding agent, C++ first | Appliance for small Electron apps | +| User | Developer | Beginner/non-programmer | +| Agent model | Main + Architect + Scheduler + Workers | Linear Orchestrator + Executor + Reviewer | +| State layout | `.air/shared` + `.air/local` | `.vibebox/` per generated app | +| Toolchain | multi-language, C++ deep first | Electron/Node only | +| Parallelism | write-area/worktree capable | none in V1 | +| Memory | Project Rules + ExperienceMiner + Curator | minimal session memory only | +| Debug knowledge | structured local DB | not in V1 | +| UI assets | optional capability | useful for app UI generation | + +## 18. Open Issues Before Implementation + +Before coding VibeBox, decide: + +1. Bun vs Node for the appliance runtime. +2. Electron template stack: React/Vite vs plain HTML/TS. +3. Package manager: npm vs pnpm. +4. Packaging target: AppImage vs unpacked app + launcher. +5. Whether VibeBox has a TUI/operator UI or only a simple local web/app shell. +6. Exact smoke-test approach on the ARM Linux box. +7. Whether generated apps may use network by default or must be local-only. diff --git a/AirPlan/docs/architecture/多模型三视角审查联合评估.md b/AirPlan/docs/architecture/多模型三视角审查联合评估.md new file mode 100644 index 0000000..13e7156 --- /dev/null +++ b/AirPlan/docs/architecture/多模型三视角审查联合评估.md @@ -0,0 +1,174 @@ +# 多模型三视角审查联合评估 + +Date: 2026-05-28 +Status: Resolved — all P0/P1/P2/UX issues addressed; ready for system overview design +Scope: + +- `AirPlan/docs/architecture/MIMO2.5三视角审查.md` +- `AirPlan/docs/architecture/DeepSeekV4Pro三视角审查.md` +- `Opus4.7三视角审查.md` +- `AirPlan/docs/analysis/requirements.md` +- `AirPlan/docs/architecture/*` +- `AirPlan/plan.md` +- `AirPlan/todo.md` +- `idea.md` + +## 1. Executive Conclusion + +三份多模型三视角审查在总体方向上高度一致:AirCoding V1.0.0 Alpha 的核心架构方向成立,需求主干对齐,包边界和事件驱动/SQLite 恢复/ToolRegistry + PermissionEngine/独立 worker 进程等关键决策没有方向性错误。 + +但报告指出的问题大部分属实,且集中在进入下一阶段前最容易放大的层面:公共契约冻结、跨文档源定义冲突、V1.0.0 Alpha 范围表述漂移,以及若干原始用户体验需求未进入 `plan.md` / `todo.md`。因此不建议直接进入系统概要设计或详细设计。 + +阶段门建议: + +```text +GO with remediation gate: +先处理 P0/P1 架构与契约清理,再进入系统概要设计; +不要在这些问题未清理前开始 packages/contracts 或详细设计。 +``` + +## 2. Cross-Model Consensus + +| Area | MIMO2.5 | DeepSeek V4 Pro | Opus 4.7 | Joint assessment | +|---|---|---|---|---| +| Core architecture direction | 正确 | 正确 | 正确 | 属实:方向成立 | +| Requirements alignment | 基本满足 | 完全对齐 | 技术主干满足、UX 计划遗漏 | 属实但需区分技术主干与 UX 表面 | +| Interface-contract drift | 高风险 | 高风险 | 高风险 | 属实:进入实现前必须清理 | +| DB / event / external store gaps | 高风险 | 高风险 | 中高风险 | 属实:尤其 project-level DB schema 与 FK invariant | +| V1.0.0 Alpha vs MVP wording | 未作为主问题 | 未作为主问题 | 关键问题 | 属实:文档漂移影响范围纪律 | +| TUI/runtime boundary | 基本认可 ProjectionClient | 基本认可 ProjectionClient | 认为 transport 未定 | 部分属实:边界有,传输机制缺 | +| User-facing command/UX gaps | 基本认为满足 | 基本认为满足 | 明确指出遗漏 | 属实:计划/todo 未覆盖若干原始需求 | + +## 3. Verified Findings + +### P0 — Must fix before next phase + +这些问题会导致 `packages/contracts` 冻结失败、实现者根据不同文档写出不兼容代码,或使下一阶段设计建立在不稳定接口上。 + +| ID | Finding | Source evidence | Verdict | Required action | +|---|---|---|---|---| +| P0-1 | `AirError.cause_ref` 类型冲突 | `interface-contracts-v1.md` defines `cause_ref?: EntityRef`; `error-taxonomy-v1.md` defines multi-key object | True | 选定唯一形状。若按 current precedence,改 `error-taxonomy-v1.md` 为 `EntityRef`;若采用多引用诊断能力,则更新 `interface-contracts-v1.md` 并明确 `cause_refs` 数组 | +| P0-2 | `EntityRef` / `EntityType` 重复且集合不一致 | `interface-contracts-v1.md` has 12 types including `capability` and `provider`; `event-registry-v1.md` inline `EntityRef` has 10 | True | `event-registry-v1.md` 不再内联定义,引用 contracts 的 `EntityRef` | +| P0-3 | `PermissionProfile` 概念命名冲突 | `security-model-v1.md` uses `PermissionProfile = low/normal/high/developer`; `interface-contracts-v1.md` and `baselineV1.md` use `permission_profile = main_direct/executor/...` | True | 将角色模板字段改为 `permission_template` 或 `role_permission_template`;安全态势保留 `permission_profile` | +| P0-4 | `TaskInsert = TaskRecord` 不适合作为 insert 契约 | `interface-contracts-v1.md` line concept requires caller-provided generated/default fields | True | 定义 `TaskInsert` / `EventInsert` 子集类型,移除调用方不应提供的默认/生成字段 | +| P0-5 | `FollowUpTask.type` 包含 `docs`,但 `TaskType` 不包含 | `interface-contracts-v1.md`: `TaskType` lacks `docs`; `FollowUpTask.type?: TaskType | "docs"` | True | 将 `docs` 加入 `TaskType`,或把 follow-up docs 从 scheduler task 类型中分离 | +| P0-6 | `DebugKnowledgeStore` / `LearnedMemoryStore` 被运行时语义引用但无契约 | `runtime-semantics-v1.md` references `DebugKnowledgeStore` and ExperienceMiner/Curator learned-memory writes; `interface-contracts-v1.md` lacks interfaces | True | 在 contracts 或 runtime public contract 中补接口与错误/恢复语义 | +| P0-7 | `PromptLayer` / `PromptLayerLoader` / `CompactionPolicy` 被 code-view 引用但 interface contracts 未定义 | `c4/code-view.md` lists classes and `PromptLayer[]`; `interface-contracts-v1.md` only has minimal `ContextAssembler` | True | 补上下文层契约,至少定义 `PromptLayer`、预算结果、加载器/策略边界 | +| P0-8 | `debug-records.db` / `learned-memory.db` 无 DDL | `db-schema-v1.md` only defines session DB, while these DBs are in project layout and event/runtime semantics | True | 在 `db-schema-v1.md` 增加 project-level DB schema 或独立 schema 文档并加入 precedence | +| P0-9 | ProviderAdapter 方法名跨文档冲突 | `interface-contracts-v1.md` uses `list_models`, `validate_model`, `count_tokens`; `provider-capability-matrix-v1.md` uses camelCase | True | 统一为 internal exported contracts 的 snake_case,并更新 matrix 文档 | +| P0-10 | `Diagnostic` 类型缺失 | `c4/code-view.md` has `DiagnosticParser.parse_compiler_output(...): Diagnostic[]`; contracts only define event payload/DB row concepts | True | 增加 `Diagnostic` / `DiagnosticRecord` / parser output contract | + +### P1 — Should fix before system overview design + +这些问题未必阻止 contracts 首次编译,但会影响概要设计的边界表达、测试计划和任务拆解。 + +| ID | Finding | Source evidence | Verdict | Required action | +|---|---|---|---|---| +| P1-1 | V1.0.0 Alpha 与 MVP cut line 术语漂移 | 多个较旧规范仍有 `MVP Cut Line`; newer `requirements.md`, `plan.md`, `runtime-semantics-v1.md` use V1.0.0 Alpha | True | 将所有规范中的 MVP cut line 改为 V1.0.0 Alpha cut line,或明确定义 MVP skeleton 是 Alpha 内部阶段 | +| P1-2 | `main-agent-state-machine.md` 仍是早期草案 | 无日期/status;事件名如 `UserMessageReceived` 不在 event registry;DIRECT_MODE 未与 scheduler/task/write scope 绑定 | True | 重写或降级为 historical;对齐 event registry、direct mode、confirmation flow | +| P1-3 | C++ DiagnosticParser ownership 表述冲突 | `baselineV1.md` says LLM-based DiagnosticParser; `runtime-semantics-v1.md` says deterministic extraction in toolchain-cpp and LLM interpretation in runtime Debugger/Reviewer | True | 更新 `baselineV1.md`:toolchain-cpp only deterministic parse/signature;LLM interpretation belongs runtime roles | +| P1-4 | TUI ↔ runtime transport 未定 | contracts define `ProjectionClient`; C4 says narrow UI API; no in-process vs IPC/command-channel contract | Partially true | 保留 ProjectionClient 边界,但补 `ProjectionTransport` / UI command API 的最小 V1 决策 | +| P1-5 | `foreign_keys = OFF` 有理由但缺应用层一致性契约 | `db-schema-v1.md` gives rationale; no orphan/invariant check list | True | 在 runtime semantics 或 DB schema 增加 repository invariant checks、orphan scan、release gate | +| P1-6 | `EventBus.subscribe` handler 异常行为未定义 | contracts only define signature; no error propagation semantics | True | 明确 handler error 不传播到 publisher,记录 developer log / event,订阅是否保持 | +| P1-7 | `PermissionEngine.record` 无失败路径 | returns `Promise` despite evidence-first and durable decision record expectations | True | 改为 Result-like contract 或明确 typed throw / failure event | +| P1-8 | `PathPolicy` 缺 source/role 元数据 | `PathPolicy` only allow/deny; permission model depends on profile/task/capability layers | Mostly true | 若 PathPolicy 只是 raw path list,可延迟;若用于审计决策,需补 `source` / `origin` | +| P1-9 | `SchedulerWavePlan.wave_id` 未品牌化 | `wave_id: string`; other IDs are aliases | True but low impact | 增加 `WaveID` 或接受为 non-persistent local ID并说明 | +| P1-10 | `ToolCategory` / `ToolResultEnvelope` 重复定义 | `interface-contracts-v1.md` and `tool-registry-v1.md` both inline definitions | True as documentation drift | tool registry doc 改为引用 contracts;避免未来复制到同一 package 时报重复 | +| P1-11 | IPC handshake/protocol lifecycle不足 | `IpcEnvelope` has direction but no protocol_version; only `agent.start.version`; no worker ready/hello | True | 增加 `protocol_version` 或 `worker.ready` / version negotiation 最小流程 | +| P1-12 | IPC direction not type-enforced | `IpcEnvelope.direction` exists but payload union not discriminated by direction/kind | True but can be runtime-guarded | 最好定义 parent/worker message union;否则明确 runtime validation guard | +| P1-13 | DB closed enums 多处未规范 | task_attempts.status, summaries.type, evidence_refs.kind, artifacts.type, diagnostics.severity are open `TEXT` | True | 在 DB schema and contracts 增加 closed enum inventory or documented open extension policy | + +### P2 — Can defer, but should be tracked + +| ID | Finding | Verdict | Suggested handling | +|---|---|---|---| +| P2-1 | `JsonSchema` phantom generic | True | 可先品牌化或记录 nominal-only;不阻塞概要设计 | +| P2-2 | `ToolExecutor.execute()` stream/non-stream union不便测试 | True | 可在 contracts pass 中拆分 `ToolExecutor` / `StreamingToolExecutor` | +| P2-3 | `ProjectionStore.apply(RuntimeEvent)` 未类型窄化 | True | 可通过 doc + event handler map 实现;非阶段门阻塞 | +| P2-4 | `MessageRecord.role: string` 等 open string | True | 与 P1 closed enum pass 合并处理 | +| P2-5 | route_prefix SQLite LIKE 索引性能 | Plausible, not architectural blocker | 实现/性能测试阶段处理 | +| P2-6 | Workspace GC retention | True | 加入 runtime semantics/todo;不阻塞 contracts | +| P2-7 | Doctor bootstrap self-check | True | 加入 Doctor design/todo;不阻塞 contracts | + +## 4. User-Requirement Alignment Check + +技术主干需求已经在 `requirements.md` 和架构中覆盖:自有 runtime、项目本地状态、SQLite 恢复、独立 worker、C++ 深度工具链、PermissionEngine、Provider boundary、OpenTUI ProjectionStore、Doctor、插件/能力基础均成立。 + +但 Opus 用户视角指出的若干 UX/操作面计划遗漏属实: + +| Requirement / decision | Evidence | Current plan/todo state | Verdict | +|---|---|---|---| +| `/direct` / `/done` direct mode | `idea.md` §5.2; `baselineV1.md` says direct mode foreground lane; `main-agent-state-machine.md` mentions DIRECT_MODE | `plan.md` and `todo.md` have no direct-mode task/contract | True gap | +| `air restore` three granularities | `idea.md` §10.3; D-032 | no explicit restore task in `todo.md` | True gap | +| ExperienceMiner N-turn Nudge trigger | `idea.md` §12.2; D-024 | T-033 only says candidate flow; no cadence/trigger scheduler detail | True gap | +| Curator periodic dedup/archive | `idea.md` §12.2; D-024 | no todo item | True gap | +| self-patch flow for stale rules/skills | D-024; runtime-semantics mentions outdated rules route to ExperienceMiner/Curator | no explicit todo/acceptance criterion | True gap | +| Doctor fix mode and bundle export | FR-018 requires fix mode; plan Phase 8 has doctor report bundle; T-034 only read-only Doctor | Partially covered; todo incomplete | +| CLI command catalog (`resume`, `compact`, `history`, etc.) | idea-level UX | not in `plan.md` / `todo.md` | True gap if intended for Alpha; otherwise explicitly defer | +| VibeBox branch visibility | branch baseline exists | main plan/todo does not schedule VibeBox | Not blocker for AirCoding Alpha if explicitly downstream/post-Alpha | + +Conclusion: the architecture does not conflict with user intent, but the Alpha plan risks delivering a strong runtime with an under-specified user-facing command surface unless the omissions are either scheduled or explicitly deferred. + +## 5. Findings That Are Not Fully Supported + +| Claim | Assessment | +|---|---| +| `foreign_keys = OFF` is itself a blocker | Overstated. The setting is documented with rationale in `db-schema-v1.md`; the real issue is missing invariant/recovery checks, not FK-off itself. | +| TUI boundary is completely missing | Overstated. `ProjectionClient` and no-DB/no-EventBus rules exist. Missing part is transport and UI command channel, not the architectural boundary. | +| Core architecture fails original requirements | Not supported. Requirements are broadly covered; gaps are UX scheduling and contract details. | +| Provider capability matrix is necessarily over-engineered | Judgment call. It is more elaborate than minimal Alpha, but it supports stated provider flexibility and conversion-report requirements. | +| 14 architecture docs should be trimmed before proceeding | Optional. The real requirement is consistency and precedence, not fewer docs. | + +## 6. Recommended Remediation Plan + +### Pass A — Source-of-truth and vocabulary cleanup + +1. Replace or define all `MVP Cut Line` sections as `V1.0.0 Alpha Cut Line` / `V1 skeleton within Alpha`. +2. Add `packages/contracts` to the canonical package list in `baselineV1.md`. +3. Mark `main-agent-state-machine.md` as V1-aligned or historical; if kept, align event names with `event-registry-v1.md`. +4. Update `baselineV1.md` DiagnosticParser wording to match `runtime-semantics-v1.md`. + +### Pass B — Public contract freeze repair + +1. Resolve `AirError.cause_ref` shape. +2. Single-source `EntityRef` and `EntityType`. +3. Rename role permission template field away from security `PermissionProfile`. +4. Fix `TaskInsert`, `EventInsert`, `TaskType/docs`, `WaveID`. +5. Add missing contracts: `Diagnostic`, `DebugKnowledgeStore`, `LearnedMemoryStore`, `PromptLayer`, `PromptLayerLoader`, `CompactionPolicy`, `EventSchemaRegistry`. +6. Normalize ProviderAdapter method names to snake_case. +7. Decide IPC protocol version/handshake and direction-typed unions or runtime validation contract. + +### Pass C — Persistence/runtime invariant repair + +1. Add schema for `debug-records.db` and `learned-memory.db`, or create separate canonical schema docs. +2. Add application-level reference consistency invariants for `foreign_keys = OFF`. +3. Define EventBus subscriber error behavior. +4. Define PermissionEngine record failure behavior. +5. Add closed enum inventory for DB/contract fields or explicitly mark extension points. + +### Pass D — UX scope gate + +1. Decide which UX commands are Alpha: `/direct`, `/done`, `air restore`, `resume`, `compact`, `history`, `doctor --fix`, `doctor --bundle`. +2. For included commands, add `todo.md` rows and plan deliverables. +3. For deferred commands, record explicit post-Alpha scope so they are not silently lost. +4. Add ExperienceMiner Nudge cadence, Curator, and self-patch acceptance criteria if they remain Alpha. + +## 7. Phase-Gate Decision + +Do not start implementation or detailed design yet. + +Recommended next step: + +```text +1. Complete Pass A–C as architecture/document edits. +2. Update `AirPlan/todo.md` with any P0/P1 remediation tasks and UX scope decisions. +3. Then proceed to system overview design. +4. Only after overview design is consistent, produce detailed design and start Phase 0 contracts implementation. +``` + +Rationale: + +- P0 findings directly affect `packages/contracts`, DB schema, and code-view boundaries. +- If ignored, they will force contract churn during Phase 0/1 and invalidate parallel execution boundaries. +- The fixes are mostly documentation/contract edits, not architectural redesign. +- Core architecture is sound, so the remediation should be short and bounded rather than a new planning cycle. diff --git a/AirPlan/docs/debug/airxdb-artifacts/README.md b/AirPlan/docs/debug/airxdb-artifacts/README.md new file mode 100755 index 0000000..95ad1fc --- /dev/null +++ b/AirPlan/docs/debug/airxdb-artifacts/README.md @@ -0,0 +1,3 @@ +# Artifact Output + +- Save generated evidence files in this directory. diff --git a/AirPlan/docs/debug/debug-log.md b/AirPlan/docs/debug/debug-log.md new file mode 100755 index 0000000..a2efadb --- /dev/null +++ b/AirPlan/docs/debug/debug-log.md @@ -0,0 +1,3 @@ +# Debug Log + +- Add reproducible bug investigations, root-cause notes, and validation outcomes here. diff --git a/AirPlan/docs/debug/gui-debug-log.md b/AirPlan/docs/debug/gui-debug-log.md new file mode 100755 index 0000000..85ae77d --- /dev/null +++ b/AirPlan/docs/debug/gui-debug-log.md @@ -0,0 +1,3 @@ +# GUI Debug Log + +- Add screenshots, GUI observations, Midscene evidence, and visual acceptance notes here. diff --git a/AirPlan/docs/network/airndb-captures/README.md b/AirPlan/docs/network/airndb-captures/README.md new file mode 100755 index 0000000..95ad1fc --- /dev/null +++ b/AirPlan/docs/network/airndb-captures/README.md @@ -0,0 +1,3 @@ +# Artifact Output + +- Save generated evidence files in this directory. diff --git a/AirPlan/docs/network/airndb-log.md b/AirPlan/docs/network/airndb-log.md new file mode 100755 index 0000000..d221e05 --- /dev/null +++ b/AirPlan/docs/network/airndb-log.md @@ -0,0 +1,3 @@ +# AirNDB Log + +- Add packet-capture commands, pcap paths, network observations, and conclusions here. diff --git a/AirPlan/docs/staticanalysis.md b/AirPlan/docs/staticanalysis.md new file mode 100755 index 0000000..413690a --- /dev/null +++ b/AirPlan/docs/staticanalysis.md @@ -0,0 +1,3 @@ +# Static Analysis + +- Add cppcheck or other static-analysis summaries, report paths, and residual risks here. diff --git a/AirPlan/docs/validation/README.md b/AirPlan/docs/validation/README.md new file mode 100755 index 0000000..82790fc --- /dev/null +++ b/AirPlan/docs/validation/README.md @@ -0,0 +1,3 @@ +# Validation Artifacts + +- Save build logs, flash logs, test logs, screenshots, and validation summaries under this directory. diff --git a/AirPlan/docs/validation/logs/README.md b/AirPlan/docs/validation/logs/README.md new file mode 100755 index 0000000..95ad1fc --- /dev/null +++ b/AirPlan/docs/validation/logs/README.md @@ -0,0 +1,3 @@ +# Artifact Output + +- Save generated evidence files in this directory. diff --git a/AirPlan/plan.md b/AirPlan/plan.md new file mode 100755 index 0000000..a5c5bd3 --- /dev/null +++ b/AirPlan/plan.md @@ -0,0 +1,344 @@ +# Implementation Plan + +Date: 2026-05-27 +Status: Formal architecture-to-V1.0.0 Alpha plan + +## Read First + +1. `AirPlan/AGENTS.md` +2. `AirPlan/docs/analysis/requirements.md` +3. `AirPlan/docs/architecture/solution-architecture.md` +4. `AirPlan/docs/architecture/c4/module.md` +5. `AirPlan/docs/architecture/baselineV1.md` +6. `AirPlan/docs/architecture/多模型三视角审查联合评估.md` +7. `AirPlan/docs/architecture/adr/` +8. `AirPlan/todo.md` + +## Goal + +Build AirCoding V1.0.0 Alpha: a Linux-first Bun/TypeScript local AI coding runtime with project-local `.air` state, SQLite session persistence, event/domain store, scheduler/worker IPC, ToolRegistry/PermissionEngine, provider adapter boundary, complete C++ development workflow, usable plugin/capability foundation, OpenTUI/Solid ProjectionStore UI, Doctor, and release validation gates. + +## Architecture Baseline + +Implementation must follow these canonical V1 documents: + +| Area | Document | +|---|---| +| Requirements | `AirPlan/docs/analysis/requirements.md` | +| Solution architecture | `AirPlan/docs/architecture/solution-architecture.md` | +| C4/module view | `AirPlan/docs/architecture/c4/module.md` | +| Baseline | `AirPlan/docs/architecture/baselineV1.md` | +| DB schema | `AirPlan/docs/architecture/db-schema-v1.md` | +| Event registry | `AirPlan/docs/architecture/event-registry-v1.md` | +| Tool registry | `AirPlan/docs/architecture/tool-registry-v1.md` | +| Scheduler state machine | `AirPlan/docs/architecture/scheduler-state-machine-v1.md` | +| Prompt layering | `AirPlan/docs/architecture/prompt-layering-v1.md` | +| Provider matrix | `AirPlan/docs/architecture/provider-capability-matrix-v1.md` | +| Error taxonomy | `AirPlan/docs/architecture/error-taxonomy-v1.md` | +| Artifact naming | `AirPlan/docs/architecture/artifact-naming-v1.md` | +| Scope escalation | `AirPlan/docs/architecture/scope-escalation-v1.md` | +| Security model | `AirPlan/docs/architecture/security-model-v1.md` | +| Capability trust | `AirPlan/docs/architecture/capability-trust-v1.md` | +| Platform matrix | `AirPlan/docs/architecture/cross-platform-matrix-v1.md` | +| Multi-model phase-gate assessment | `AirPlan/docs/architecture/多模型三视角审查联合评估.md` | + +## Phase Gate Status + +The P0/P1/P2 remediation and UX scope gate from `AirPlan/docs/architecture/多模型三视角审查联合评估.md` are complete: + +1. source-of-truth and V1.0.0 Alpha vocabulary cleanup — DONE (T-000A) +2. public contract freeze repair — DONE (T-000B) +3. persistence/runtime invariant repair — DONE (T-000C) +4. UX scope decision — DONE (T-000D): all features scheduled as Alpha; VibeBox removed from main plan + +System overview design and detailed design may proceed. `packages/contracts` implementation may proceed after overview design is consistent. + +## Constraints + +1. Runtime: TypeScript on Bun. +2. Monorepo: Bun workspaces + Turborepo. +3. TUI: `@opentui/solid`, `@opentui/core`, `@opentui/keymap`. +4. IPC: NDJSON over stdio. +5. DB: project-local SQLite per session. +6. Internal message format: Anthropic canonical content blocks. +7. Workers: independent Bun child processes. +8. V1.0.0 Alpha platform: Linux x86_64 tier 1, Linux arm64/WSL2 tier 2. +9. Execution layer must follow Claude Code-style edit/verification discipline. +10. All side effects must pass through ToolRegistry and PermissionEngine. + +## Phases + +### Phase 0: Repository Skeleton and Contracts + +Objective: create a compileable monorepo foundation and shared contract package. + +Deliverables: + +- Bun workspace and Turborepo config +- `packages/contracts` +- core types for runtime, events, IPC, task, worker result, tool, artifact, provider, project, UI, error +- baseline test/lint/typecheck commands + +Validation: + +```bash +bun install +bun run typecheck +bun test +``` + +### Phase 1: Project and Session Storage Foundation + +Objective: implement project-local `.air` initialization and SQLite V1 session store. + +Deliverables: + +- project `.air/shared` and `.air/local` initializer +- session ID/project ID creation +- SQLite schema/migration V1 +- SessionStore repositories +- EventStore transactional durable event application +- ArtifactStore temp-write/rename/hash/DB insert + +Validation: + +```bash +bun test packages/runtime +bun run air -- doctor --read-only --project +bun run air -- init +``` + +### Phase 2: ToolRegistry, PermissionEngine, Core Tools, and Capability Foundation + +Objective: provide safe side-effect execution primitives and a usable plugin/capability foundation for V1.0.0 Alpha. + +Deliverables: + +- ToolRegistry +- ToolResult envelopes and tool lifecycle events +- realpath path classifier +- command risk analyzer +- PermissionEngine decision records +- filesystem, shell, git, project, artifact, context, permission, doctor core tools +- CapabilityRegistry manifest loading/validation +- local and built-in capability enable/disable config +- namespaced capability tool registration +- Doctor dependency check path for capabilities + +Validation: + +```bash +bun test packages/runtime --filter tool +bun test packages/runtime --filter permission +``` + +### Phase 3: Provider and Context Layer + +Objective: support model calls through canonical context assembly and provider capability validation. + +Deliverables: + +- provider config loader +- ProviderCapabilityMatrix implementation +- ProviderAdapter interface +- one Anthropic-compatible or OpenAI-compatible adapter path +- ContextAssembler L0-L9 layering +- omission/conflict reporting +- provider conversion report + +Validation: + +```bash +bun test packages/llm +bun test packages/runtime --filter context +``` + +Real-provider smoke gated by local config: + +```bash +bun run air -- provider doctor +bun run air -- provider smoke +``` + +### Phase 4: Worker IPC and Scheduler V1.0.0 Alpha + +Objective: run independent child workers with Scheduler state machine. + +Deliverables: + +- WorkerManager process spawn/monitor +- NDJSON IPC framing +- Executor/Reviewer/Debugger/Compactor/ExperienceMiner process foundations +- heartbeat and timeout handling +- TaskGraph load/plan/dispatch/collect +- retry budget/failure signature tracking +- workspace create/merge events +- restart recovery for lost/running agents + +Validation: + +```bash +bun test packages/runtime --filter ipc +bun test packages/runtime --filter scheduler +bun run air -- e2e worker-fixture +``` + +### Phase 5: Complete C++ Development Workflow + +Objective: deliver the first complete language workflow, not just build/test smoke coverage. + +Deliverables: + +- `packages/toolchain-cpp` +- `cpp.detect` +- `cpp.cmake.configure` +- `cpp.build` +- `cpp.test` +- `cpp.static.cppcheck` +- `cpp.clangd.query` +- compiler/linker/test diagnostic parser and semantic signatures +- compile_commands generation/discovery +- build-system conflict reporting +- Debugger integration for failed build/test/debug evidence +- Reviewer integration for C++ changes +- automatic scoped repair loop for representative C++ failures +- C++ fixture projects covering configure/build/test/static-analysis/debug/fix/review + +Validation: + +```bash +bun test packages/toolchain-cpp +bun run air -- fixture cpp-build-test +bun run air -- e2e cpp-fix-fixture +bun run air -- e2e cpp-debug-review-fixture +``` + +### Phase 6: TUI/HUD Projection + +Objective: expose runtime state through OpenTUI/Solid UI without coupling UI to DB/EventBus. + +Deliverables: + +- ProjectionStore hydrate/apply APIs +- TUI startup shell +- session/task/agent/tool/command/artifact views +- permission prompt UI +- blocker report UI +- basic HUD/statusline projection + +Validation: + +```bash +bun test packages/tui +bun run air -- tui-smoke --project +``` + +### Phase 7: Agent Prompt Integration and End-to-End Loop + +Objective: connect Main Agent, Architecture Designer, Scheduler, workers, tools, context, and provider call path. + +Deliverables: + +- built-in prompt resources +- Main Agent request classification +- Architecture Designer impact assessment flow +- Executor WorkerResult loop +- Reviewer report loop +- Debugger failure evidence loop +- Compactor summary loop +- scope escalation integration + +Validation: + +```bash +bun run air -- e2e simple-edit-fixture +bun run air -- e2e cpp-fix-fixture +``` + +### Phase 8: Release Gate and Packaging + +Objective: make V1.0.0 Alpha foundation reproducible and releasable for tier-1 Linux. + +Deliverables: + +- binary tarball packaging +- resource bundle +- release gate script +- doctor report bundle generation +- documentation of skipped gates/known limitations + +Validation: + +```bash +bun run release:check +bun run release:package +``` + +## Parallelization Boundaries + +Can parallelize after contracts stabilize: + +- storage/EventStore and provider/context adapter work +- ToolRegistry/PermissionEngine and ArtifactStore +- C++ workflow tools/debug/review fixtures and TUI ProjectionStore +- worker foundation and Scheduler tests +- capability manifest validation and built-in capability registration + +Must serialize: + +1. `packages/contracts` before package implementations. +2. DB schema before EventStore/SessionStore tests. +3. ToolRegistry/PermissionEngine before tools and workers rely on side effects. +4. Provider/context contract before agent prompt integration. +5. Scheduler IPC before real worker E2E. + +## Validation Strategy + +Minimum per-task validation appears in `AirPlan/todo.md`. + +Release-level validation: + +```bash +bun install +bun run typecheck +bun test +bun run lint +bun run air -- doctor --read-only +bun run air -- e2e worker-fixture +bun run air -- fixture cpp-build-test +bun run air -- e2e cpp-fix-fixture +bun run air -- e2e cpp-debug-review-fixture +bun run air -- capability validate --all +bun run release:check +``` + +If a validation gate cannot run, record: + +```text +why skipped +evidence available +risk +follow-up task +``` + +## Static Analysis Strategy + +V1.0.0 Alpha static analysis: + +- TypeScript typecheck for all packages. +- ESLint or equivalent once repo config exists. +- `cppcheck` for C++ fixture/toolchain validation. +- Architecture/static consistency reviewed through ADR/C4 updates. + +## Risk Controls + +| Risk | Control | +|---|---| +| contract churn | implement contracts first and version event/tool schemas | +| unsafe edits | enforce read-before-edit and exact edit tools | +| hidden side effects | all tools through PermissionEngine | +| context overflow | ContextAssembler budgets and Compactor | +| worker loss | heartbeat, timeouts, task_attempts, restart recovery | +| provider mismatch | capability matrix and conversion reports | +| evidence gaps | artifact/evidence refs required in WorkerResult | +| platform surprises | Doctor platform report and Linux tier-1 release gates | diff --git a/AirPlan/state/airarc/state.json b/AirPlan/state/airarc/state.json new file mode 100755 index 0000000..a5ce3a0 --- /dev/null +++ b/AirPlan/state/airarc/state.json @@ -0,0 +1,12 @@ +{ + "enabled": true, + "updatedAt": "2026-05-25T08:58:26.694090+00:00", + "projectRoot": "/run/media/airlongdian/EasyU/AirCoding", + "artifactHealth": { + "AirPlan/AGENTS.md": true, + "AirPlan/docs/architecture/adr": true, + "AirPlan/docs/architecture/c4/module.md": true, + "AirPlan/plan.md": true, + "AirPlan/todo.md": true + } +} diff --git a/AirPlan/todo.md b/AirPlan/todo.md new file mode 100755 index 0000000..783da20 --- /dev/null +++ b/AirPlan/todo.md @@ -0,0 +1,64 @@ +# TODO + +Status values: TODO / DOING / DONE / BLOCKED + +| ID | Status | Module | Task | Files/Dirs | Done When | Validation | Static Analysis | ADR/C4 Update | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | +| T-000A | DONE | Architecture Gate | Clean up source-of-truth and V1 Alpha vocabulary | `AirPlan/docs/architecture/{baselineV1.md,main-agent-state-machine.md,*-v1.md}`, `AirPlan/plan.md` | MVP/V1.0.0 Alpha terminology is unambiguous; `packages/contracts` is in the canonical package list; Main Agent state machine is V1-aligned; C++ DiagnosticParser ownership matches runtime semantics | All architecture docs reviewed | No unresolved precedence conflicts | baseline, main-agent-state-machine, 13 *-v1.md files, plan, and solution-architecture updated | +| T-000B | DONE | Contracts Gate | Repair public contract freeze issues | `AirPlan/docs/architecture/interface-contracts-v1.md`, `event-registry-v1.md`, `error-taxonomy-v1.md`, `provider-capability-matrix-v1.md`, `tool-registry-v1.md`, `c4/code-view.md` | P0 contract conflicts resolved: `AirError.cause_ref`/`cause_refs`, `EntityRef` single-source, `permission_template` naming, `TaskInsert`/`EventInsert`, `TaskType/docs`, `Diagnostic`, `DebugKnowledgeStore`/`LearnedMemoryStore`, `PromptLayer`/`CompactionPolicy`, `ProviderAdapter` snake_case, `WaveID`, IPC handshake/direction, `EventSchemaRegistry`, `StreamingToolExecutor`, `PermissionRecordResult` | All contract edits verified | Contracts can be transcribed to `packages/contracts` without conflicts | C4 interface inventory updated implicitly via contract changes | +| T-000C | DONE | Runtime Gate | Define persistence and runtime invariants | `AirPlan/docs/architecture/db-schema-v1.md`, `runtime-semantics-v1.md`, `event-registry-v1.md`, `interface-contracts-v1.md` | `debug-records.db` and `learned-memory.db` DDL added; FK-off invariants defined; EventBus handler error behavior defined; PermissionEngine record failure path defined; DB closed enum inventory added; workspace GC policy defined; direct mode, ExperienceMiner triggers, Doctor self-bootstrap, air restore semantics defined | All runtime/runtime-semantics and db-schema edits verified | Storage/runtime docs cover invariants needed by EventStore, repositories, recovery, and permission audit | runtime-semantics sections 14-19 added; db-schema sections 20-21 added | +| T-000D | DONE | UX Scope Gate | Alpha UX scope decided | `AirPlan/plan.md`, `AirPlan/todo.md`, `AirPlan/docs/analysis/requirements.md`, `AirPlan/docs/architecture/main-agent-state-machine.md` | All UX features scheduled as Alpha tasks; VibeBox removed from main plan (separate project branch) | Requirements-to-todo trace check | No original UX requirement silently unscheduled | T-038 through T-045 created; VibeBox references removed from plan/todo | +| T-001 | TODO | Monorepo | Create Bun workspace and Turborepo skeleton | `package.json`, `turbo.json`, `packages/` | Workspace installs and scripts resolve | `bun install && bun run typecheck` | TypeScript config validates package graph | ADR-0002, C4 package dependency view | +| T-002 | TODO | Contracts | Implement shared contract package | `packages/contracts/src/` | RuntimeEvent, TaskSpec, WorkerResult, ToolDefinition, ArtifactRef, EvidenceRef, provider, error, IPC, UI types compile | `bun test packages/contracts && bun run typecheck` | Type-only package has no implementation deps | C4 interface inventory | +| T-003 | TODO | CLI | Implement CLI bootstrap shell | `packages/cli/src/` | CLI can start, print version/help, locate project root, load resources | `bun run air -- --help` | Typecheck CLI package | C4 container view | +| T-004 | TODO | Project Store | Implement `.air` project initializer | `packages/runtime/src/project/` | Creates `.air/shared` and `.air/local` with project ID and default rules/config | `bun run air -- init ` | Typecheck runtime project module | ADR-0003 | +| T-005 | TODO | Storage | Implement SQLite schema V1 migration | `packages/runtime/src/storage/`, `.air/local/sessions/*/session.db` | New session DB matches `db-schema-v1.md` | `bun test packages/runtime --filter storage` | SQL migration checked by tests | ADR-0004 | +| T-006 | TODO | EventStore | Implement durable EventStore and event validation | `packages/runtime/src/events/` | Durable events validate, persist, and update domain tables transactionally | `bun test packages/runtime --filter eventstore` | Event payload types compile against registry | ADR-0004, event registry | +| T-007 | TODO | ArtifactStore | Implement artifact write/URI/hash/DB flow | `packages/runtime/src/artifacts/` | Artifacts write temp→rename, sha256 recorded, artifact.created emitted | `bun test packages/runtime --filter artifact` | Artifact metadata typecheck | artifact naming baseline | +| T-008 | TODO | Permission | Implement path classifier and PermissionEngine core | `packages/runtime/src/security/` | Project/system/credential/build/git paths classified by realpath; decisions recorded | `bun test packages/runtime --filter permission` | Security model types compile | ADR-0007, security model | +| T-009 | TODO | Permission | Implement command risk analyzer | `packages/runtime/src/security/commands.ts` | Shell commands classify read/build/destructive/system/credential risk | `bun test packages/runtime --filter command-risk` | Typecheck risk rules | security model | +| T-010 | TODO | Tools | Implement ToolRegistry core | `packages/runtime/src/tools/` | Tools register, schemas validate, lifecycle events emitted | `bun test packages/runtime --filter tool-registry` | ToolDefinition generics compile | ADR-0007, tool registry | +| T-011 | TODO | Tools | Implement filesystem tools | `packages/runtime/src/tools/fs/` | `fs.list/read/write/edit/patch/stat` follow read-before-edit and exact edit rules | `bun test packages/runtime --filter fs-tools` | Typecheck schemas | ADR-0006 | +| T-012 | TODO | Tools | Implement shell/process tools | `packages/runtime/src/tools/shell/` | `shell.run` captures command events/artifacts; `process.kill` permissioned | `bun test packages/runtime --filter shell-tools` | Typecheck schemas | security model | +| T-013 | TODO | Tools | Implement git tools | `packages/runtime/src/tools/git/` | status/diff/worktree/create/merge paths work on fixture repo | `bun test packages/runtime --filter git-tools` | Typecheck schemas | scheduler/workspace flow | +| T-014 | TODO | Tools | Implement project, artifact, context, permission, doctor tools | `packages/runtime/src/tools/{project,artifact,context,permission,doctor}/` | Core internal tools callable through ToolRegistry | `bun test packages/runtime --filter core-tools` | Typecheck schemas | tool registry | +| T-015 | TODO | Capability | Implement CapabilityRegistry and built-in manifests | `packages/runtime/src/capabilities/`, `resources/capabilities/` | Built-in capabilities load, validate, and register tools | `bun test packages/runtime --filter capability` | Manifest schema validation | capability trust model | +| T-016 | TODO | LLM | Implement provider config and capability matrix loader | `packages/llm/src/` | Global/project model config loads and validates capabilities | `bun test packages/llm --filter capability` | Typecheck provider matrix | ADR-0008 | +| T-017 | TODO | LLM | Implement one provider adapter path | `packages/llm/src/providers/` | At least one Anthropic-compatible or OpenAI-compatible call path works under config | `bun run air -- provider smoke` | Adapter output types validate | provider matrix | +| T-018 | TODO | Context | Implement ContextAssembler L0-L9 | `packages/runtime/src/context/`, `resources/prompts/` | Assembles Anthropic canonical context with omissions/conflict reporting | `bun test packages/runtime --filter context` | Prompt asset schema checks | prompt layering model | +| T-019 | TODO | IPC | Implement NDJSON IPC framing | `packages/runtime/src/ipc/` | Parent/child can exchange event/control/log messages | `bun test packages/runtime --filter ipc` | IPC message types compile | ADR-0005 | +| T-020 | TODO | Workers | Implement worker process bootstrap skeletons | `packages/runtime/src/workers/` | Executor/Reviewer/Debugger/Compactor/ExperienceMiner start and return stub WorkerResult | `bun run air -- e2e worker-fixture` | WorkerResult schema validation | C4 worker view | +| T-021 | TODO | Scheduler | Implement TaskGraph loading and wave planning | `packages/runtime/src/scheduler/` | Scheduler loads tasks/deps and plans runnable wave with write-area serialization | `bun test packages/runtime --filter scheduler-graph` | Typecheck SchedulerWavePlan | scheduler state machine | +| T-022 | TODO | Scheduler | Implement dispatch, heartbeat, timeout, retry, and recovery | `packages/runtime/src/scheduler/` | Child workers dispatch, heartbeat monitored, lost workers recovered, retry budget enforced | `bun test packages/runtime --filter scheduler-runtime` | Error taxonomy mapping checked | scheduler state machine | +| T-023 | TODO | Scheduler | Implement workspace merge flow | `packages/runtime/src/scheduler/workspace.ts` | Worktree workspace created, merged, conflict event emitted on conflict | `bun test packages/runtime --filter workspace` | Typecheck workspace events | ADR-0005, C4 merge sequence | +| T-024 | TODO | Toolchain C++ | Implement C++ detection/configure/build/test tools | `packages/toolchain-cpp/src/` | Fixture C++ project detects, configures, builds, and tests | `bun run air -- fixture cpp-build-test` | Typecheck toolchain schemas | C++ baseline | +| T-025 | TODO | Toolchain C++ | Implement cppcheck/clangd/diagnostic parsing | `packages/toolchain-cpp/src/analysis/` | Static analysis and clangd query produce diagnostics with semantic signatures | `bun test packages/toolchain-cpp` | cppcheck on fixture if available | C++ baseline | +| T-026 | TODO | Projection | Implement ProjectionStore | `packages/runtime/src/projection/` | Hydrates from DB and applies live events for session/task/agent/tool views | `bun test packages/runtime --filter projection` | Projection types compile | ADR-0004 | +| T-027 | TODO | TUI | Implement OpenTUI/Solid startup and core views | `packages/tui/src/` | TUI starts and shows session/task/agent/tool projections | `bun run air -- tui-smoke --project ` | Typecheck TUI package | C4 TUI container | +| T-028 | TODO | TUI | Implement permission/blocker/report UI surfaces | `packages/tui/src/` | Permission prompts and blocker reports render from ProjectionStore | `bun test packages/tui` | Typecheck UI contracts | scope escalation/security model | +| T-029 | TODO | Agents | Implement Main Agent request classification shell | `packages/runtime/src/agents/main/` | Main Agent stores messages, classifies direct vs delegated work, and reports progress | `bun test packages/runtime --filter main-agent` | Prompt schema checks | solution architecture | +| T-030 | TODO | Agents | Implement Architecture Designer impact flow | `packages/runtime/src/agents/architecture/` | Requirement/interface changes produce architecture impact events and doc update tasks | `bun test packages/runtime --filter architecture-agent` | Structured output validation | scope escalation ADRs | +| T-031 | TODO | Agents | Implement Executor/Reviewer/Debugger minimal loops | `packages/runtime/src/workers/roles/` | Simple edit fixture can execute, review, debug failure, and return evidence | `bun run air -- e2e simple-edit-fixture` | WorkerResult schema checks | ADR-0006 | +| T-032 | TODO | Compaction | Implement Compactor summary flow | `packages/runtime/src/workers/roles/compactor.ts` | Context budget pressure creates summary row/artifact and preserves backtracking refs | `bun test packages/runtime --filter compaction` | Summary schema validation | prompt layering/context baseline | +| T-033 | TODO | Experience | Implement ExperienceMiner candidate flow with Nudge, Curator, and self-patch | `packages/runtime/src/workers/roles/experience-miner.ts`, `packages/runtime/src/workers/roles/curator.ts` | Verified pattern creates memory/rule candidate; N-turn Nudge trigger fires periodically; Curator dedup/archive runs; self-patch forwards stale rules to ExperienceMiner | `bun test packages/runtime --filter experience` | Candidate/Curator/self-patch schema validation | memory baseline, runtime-semantics §17 | +| T-034 | TODO | Doctor | Implement Doctor with read-only, fix mode, and bundle export | `packages/runtime/src/doctor/` | Platform, provider config, toolchain, display, disk, permissions checks report; fix mode applies fixes under PermissionEngine; bundle exports diagnostic archive | `bun run air -- doctor --read-only && bun run air -- doctor --fix --dry-run && bun run air -- doctor --bundle` | Doctor report/bundle schema validation | security/platform matrix, runtime-semantics §18 | +| T-035 | TODO | Logging | Implement user/developer logs | `packages/runtime/src/logging/` | `air.log` user errors and encrypted developer log path exist with retention policy hooks | `bun test packages/runtime --filter logging` | Secret redaction tests | security/logging baseline | +| T-036 | TODO | E2E | Implement release gate fixtures | `fixtures/`, `scripts/release-check.*` | Worker, C++ build/test, DB recovery, TUI startup, artifact/event persistence gates run | `bun run release:check` | Typecheck/lint/test all packages | cross-platform matrix | +| T-037 | TODO | Packaging | Implement binary tarball packaging | `scripts/package.*`, `resources/` | Tarball contains `bin/air`, `resources/`, `LICENSE` and starts on tier-1 Linux | `bun run release:package` | Package smoke validation | distribution baseline | +| T-038 | TODO | Main Agent | Implement `/direct` and `/done` direct mode | `packages/runtime/src/agents/main/`, `packages/tui/src/` | Main Agent enters DIRECT_MODE with executor permissions; `/done` exits and collects evidence; direct mode events logged | `bun run air -- e2e direct-mode-fixture` | Direct mode state machine and permission template checks | main-agent-state-machine, runtime-semantics §16 | +| T-039 | TODO | CLI | Implement `air restore` with three granularities | `packages/cli/src/commands/restore.ts`, `packages/runtime/src/restore/` | `air restore file`, `air restore time`, `air restore session` work from git-backed backup repo | `bun test packages/runtime --filter restore` | Restore schema and git operation validation | decisions-round-2 D-032, runtime-semantics §19 | +| T-040 | TODO | CLI | Implement CLI command catalog | `packages/cli/src/commands/` | `air resume`, `air compact`, `air history`, `air session list`, `air provider list` commands exist and function | `bun run air -- help` shows full catalog; individual commands have `--help` | Command typecheck and help output validation | requirements FR-005, baseline §18 | +| T-041 | TODO | Main Agent | Implement `compact` and `resume` user commands | `packages/runtime/src/agents/main/`, `packages/cli/src/commands/` | `air compact` triggers manual compaction; `air resume` restores session from DB | `bun run air -- e2e compact-resume-fixture` | Compaction and resume schema validation | runtime-semantics §7, prompt-layering | +| T-042 | TODO | Main Agent | Implement `history` and `session list` commands | `packages/cli/src/commands/` | `air history` shows session message history; `air session list` lists sessions with status | `bun run air -- session list` and `bun run air -- history` | Output format and DB query validation | db-schema, projection | +| T-043 | TODO | TUI | Implement permission prompt UX with announce_then_run visualization | `packages/tui/src/components/PermissionPrompt.tsx` | Permission prompts render risk level, options, and announce_then_run mode; user decisions flow through UiCommandChannel | `bun test packages/tui --filter permission` | Permission prompt UI snapshot validation | security-model, scope-escalation | +| T-044 | TODO | TUI | Implement evidence display in TUI | `packages/tui/src/components/EvidenceView.tsx` | Users can expand/view artifact previews, log tails, screenshots inline from evidence refs | `bun test packages/tui --filter evidence` | Evidence view rendering validation | artifact-naming, interface-contracts §14 | +| T-045 | TODO | TUI | Implement HUD presets (Full/Essential/Minimal) | `packages/tui/src/components/HudView.tsx`, `packages/tui/src/theme/` | HUD renders in Full/Essential/Minimal presets; user can switch | `bun run air -- tui-smoke --project ` | HUD preset rendering validation | requirements FR-016 | + +## Quality Gates + +- T-000A through T-000D are DONE. System overview design, detailed design, and `packages/contracts` implementation may proceed. +- Run the validation command listed for the task before marking it `DONE`. +- Keep ADR and C4 docs synchronized whenever architecture, module boundaries, dependencies, or ownership change. +- Record skipped validation, residual risk, and follow-up work explicitly. +- Do not mark code-changing tasks done without artifact/evidence references where applicable. +- All side-effect tools must pass PermissionEngine tests before worker E2E tasks rely on them. diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..e69de29 diff --git a/Opus4.7三视角审查.md b/Opus4.7三视角审查.md new file mode 100644 index 0000000..887559c --- /dev/null +++ b/Opus4.7三视角审查.md @@ -0,0 +1,416 @@ +# Opus 4.7 三视角审查 + +> 由 Claude Opus 4.7 并行启动三个独立审查代理生成,基于约 12K 行最新文档集。 +> 生成日期:2026-05-28 + +--- + +## 一、架构师视角 (Architect Perspective) + +# AirCoding V1 Architecture Review + +Reviewing 11 architecture documents as a senior software architect. Note: I deliberately did not invoke TaskCreate/TaskUpdate; the review is read-only and the existing task list already tracks the architecture review itself. + +--- + +## 1. Top Critical Architectural Issues + +### C1. Vocabulary split: "V1.0.0 Alpha" vs "MVP" undermines scope discipline +The two newest documents (`solution-architecture.md §14`, `runtime-semantics-v1.md §13`) use **"V1.0.0 Alpha cut line"** and explicitly include a *complete* C++ workflow plus plugin foundation. But six older-but-canonical docs still say **"MVP cut line / Post-MVP"** with narrower content: +- `scheduler-state-machine-v1.md §11` "MVP Cut Line" +- `scope-escalation-v1.md §13` "MVP Cut Line" +- `security-model-v1.md §14` "MVP Cut Line" +- `capability-trust-v1.md §14` "MVP Cut Line" +- `cross-platform-matrix-v1.md §13` "MVP Cut Line" +- `c4/module.md §12` "MVP Skeleton Module Cut" + +Effect: implementers cannot tell whether "MVP" in those docs is a synonym for V1.0.0 Alpha or a smaller earlier slice. The user's stated goal ("complete C++ workflow + plugin foundation, NOT half-finished MVP") is therefore not unambiguously expressed in the binding documents. + +### C2. `main-agent-state-machine.md` is out of step with the rest of V1 +- Mixed Chinese/English ASCII art, undated, no V1 status header — clearly an earlier draft. +- Uses event names (`UserMessageReceived`, `PlanProduced`, `ExecutionRequested`, `ImpactAssessmentCompleted`, `UserRequirementChanged`) that do not match the canonical event names used elsewhere (`requirement.changed`, `architecture.impact.completed`, `task.created/started/completed`). +- Introduces a `DIRECT_MODE` state with "Executor-level permission" (line ~22) without specifying: write-area conflict with Scheduler-owned tasks, audit trail beyond a single mention, how it interacts with `permission_profile: "main_direct"` in `AgentRuntimeContext`, or how `/done` reconciles in-flight side effects. +- Violates `solution-architecture.md §2` precedence rule: this is a state machine doc but doesn't carry V1 framing or align to the event registry it implicitly depends on. + +### C3. C++ DiagnosticParser ownership is contradicted across documents +- `baselineV1.md §20`: "DiagnosticParser: **LLM-based** compiler/linker parsing and semantic signatures." +- `c4/code-view.md §6`: `DiagnosticParser` lives inside `packages/toolchain-cpp` and is wired into `CMakeConfigurator`, `CppBuilder`, `CppTestRunner`, `CppcheckRunner`. +- `runtime-semantics-v1.md §12`: "**LLM-based interpretation belongs to runtime Debugger/Reviewer context, not hidden inside low-level toolchain code.** … `toolchain-cpp → contracts`, `runtime/debugger → llm/provider facade`." + +If runtime-semantics is authoritative (and it claims to be for V1.0.0 Alpha), then baselineV1 §20 wording and code-view's placement together imply an implicit `toolchain-cpp → llm` dependency that violates the package direction in `c4/module.md §3`. + +### C4. TUI ↔ Runtime transport boundary is unspecified +- `c4/module.md §2` shows TUI and runtime as separate containers; TUI must **not** query SQLite or EventBus directly. +- `c4/code-view.md §7` says TUI uses a `ProjectionClient` and a "narrow runtime UI command API." +- No document specifies whether TUI is in the same Bun process as runtime, in a child process, or remote-capable. No protocol (function call vs. NDJSON vs. pipe) is defined for `ProjectionClient.subscribe`, permission prompts, or user blocker confirmations. + +This is a load-bearing decision: if TUI is in-process, the "do not import runtime private modules" rule is enforced only by convention; if out-of-process, an entire IPC contract is missing from the V1 baselines. + +### C5. `PRAGMA foreign_keys = OFF` on the source-of-truth DB +`solution-architecture.md §6` mandates FK off, while: +- The same schema requires transactional `events` insert + domain projection (§6). +- `runtime-semantics-v1.md §6` adds outbox-style cross-DB compensation for `debug-records.db`, `learned-memory.db`, artifact files, and rules. +- Recovery semantics rely on consistency of `tasks`/`task_attempts`/`agents`/`workspaces`/`tool_runs`/`command_runs`. + +Disabling FK is defensible for migration flexibility, but no document states the rationale or compensating invariant checks. Combined with cross-DB outbox, the correctness burden on application code is significant and currently unguarded. + +### C6. ProjectionStore dependency direction conflicts with module rules +- `c4/module.md §3` Rule 6: "`ProjectionStore → EventBus` … one-way." +- `c4/code-view.md §4` (Runtime Service UML): `ProjectionStore --> SessionStore : hydrate via repositories` and `ProjectionStore --> EventBus : subscribes`. +- `c4/code-view.md §11` State Ownership: "session DB | SessionStore/EventStore | runtime services only" — but `ProjectionStore` reads through SessionStore, which leaks domain repository surface to a UI-projection component. + +Not a hard cycle, but the projection layer is doing both event-sourced and DB-replay reads with no documented conflict-resolution rule when DB and live-event ordering disagree under coalescing. + +--- + +## 2. Should-Fix Before Detailed Design + +1. **Unify cut-line vocabulary.** Replace every "MVP cut line" with "V1.0.0 Alpha cut line" (or define both, with one being a strict subset of the other) in the six docs listed in C1. Without this, the "complete C++ workflow + plugin foundation" goal is not auditable. +2. **Rewrite or retire `main-agent-state-machine.md`.** Bring its event names into the registry, add a V1 header, define DIRECT_MODE write-scope rules, and align state names with `scheduler-state-machine-v1.md` (`requirement.changed` flow already covers `INTERRUPTING`). +3. **Resolve DiagnosticParser ownership.** Either: + - keep deterministic extraction in `toolchain-cpp` and explicitly delete LLM language from `baselineV1.md §20`, or + - introduce a `DiagnosticInterpretationService` in runtime that toolchain-cpp depends on through a contracts-only interface. +4. **Specify the TUI ↔ Runtime transport** (in-process vs. NDJSON child) and add a `ProjectionTransport` contract to `packages/contracts`. Without it, `interface-contracts-v1.md` cannot be considered frozen. +5. **Justify or rescind `foreign_keys = OFF`.** At minimum, document the integrity invariants the runtime promises to enforce in code, and add them to the release-gate test list in `cross-platform-matrix-v1.md §11`. +6. **Define the V1.0.0 Alpha status of Compactor and ExperienceMiner explicitly.** Both appear in `solution-architecture.md §5` and `c4/module.md §5` as runtime agents, but neither `solution-architecture.md §14` nor `runtime-semantics-v1.md §13` lists them as in-scope. The user's "not half-finished" criterion requires a yes/no decision. +7. **Specify ExperienceMiner trigger ownership.** `baselineV1.md §16` lists triggers; `runtime-semantics-v1.md §11` requires an "explicit promotion task." Who creates that task — Main Agent, Scheduler on `task.completed`, or a periodic service — is undefined. +8. **Doctor bootstrap loop.** `core-doctor` is itself a capability (`capability-trust-v1.md §12`). Define how Doctor's own dependencies (Bun, SQLite, basic shell) are validated before the capability lifecycle (`discovered → validated → doctor_checked → enabled`) can run. +9. **Workspace GC policy.** `/.air/local/workspaces/` and the `workspaces` table both grow; only "preserve until merge/cleanup decision recorded" is stated (`scheduler-state-machine-v1.md §9`). Add an explicit cleanup transition and retention bound. +10. **Add `packages/contracts` to `baselineV1.md §4`** package list (currently only listed in §14 and `solution-architecture.md §4`). Trivial but the precedence rule makes baselineV1 a normative source for this list. + +--- + +## 3. Acceptable Tradeoffs + +- **Outbox/compensation across session.db ↔ debug-records.db ↔ learned-memory.db ↔ files** (`runtime-semantics-v1.md §6`). Full distributed transactions are out of scope; the session-DB-first-intent pattern with restart reconciliation is a reasonable V1 choice as long as recovery scanners actually exist. +- **Coalesced heartbeats (5s) and derived `command_runs.status`** (`runtime-semantics-v1.md §4–5`). Saves write amplification and a schema column; acceptable while ProjectionStore exposes the derived status uniformly. +- **No process sandbox / no plugin signing in V1** (`security-model-v1.md §14`, `capability-trust-v1.md §14`). Acceptable given Linux-tier-1 + local-only positioning, since `PermissionEngine` is on the unavoidable path. +- **Linux-first, Windows experimental** (`cross-platform-matrix-v1.md §2`). Aligns with stated product positioning; the "PathClassifier must not rely on string prefix before realpath" rule is the right minimum portability guard. +- **Workers as independent Bun processes with NDJSON IPC, exit-code mapped error classes** (`baselineV1.md §8`). Simple, debuggable, and matches the stated "Main Agent must remain idle" principle. +- **Anthropic-canonical internal format with adapter conversion at boundary** (`solution-architecture.md §9`). Correct — minimizes per-call lossy translation when staying on Anthropic. + +--- + +## 4. Strengths + +1. **Clear precedence rule** (`solution-architecture.md §2`) for resolving conflicts among baselines. Rare in young architectures and immediately useful to implementers. +2. **State ownership is mostly enumerated.** `c4/code-view.md §11` lists 9 ownership rows; `c4/module.md §4` adds component-level data ownership. This is the strongest part of the architecture. +3. **Event-driven core with explicit durable vs. ephemeral split** (`runtime-semantics-v1.md §2–3`, `baselineV1.md §7`). The "EventStore must not create scheduler tasks / permission decisions / memory promotions / doctor fixes by policy" rule (runtime-semantics §2) correctly prevents the most common event-sourced anti-pattern (policy migrating into the event log). +4. **Project-local `.air/{shared,local}` split with `project_id` decoupled from path.** Clean separation between git-shareable rules/plans and machine-local sessions/artifacts/backups. +5. **Read-before-edit token + exact `old_string` semantics** (`runtime-semantics-v1.md §9`). Operationalizes Claude Code-quality discipline as a tool contract, not a prompt instruction — this is the right level for enforcement. +6. **Scope escalation taxonomy** (`scope-escalation-v1.md §2`, 7 levels) is well-scoped and integrates cleanly with `PermissionEngine` actions and Scheduler decisions. +7. **Capability manifest model** (`capability-trust-v1.md`) leaves a credible path to signed third-party plugins post-V1 without restructuring V1 — namespacing rule + permission declaration + Doctor-owned dependency install is the right shape. +8. **Recovery semantics are concrete** (`scheduler-state-machine-v1.md §9`, `runtime-semantics-v1.md §6`) rather than handwaved — process liveness, attempt rows, agent.lost emission, workspace preservation are all explicit. + +--- + +## 5. Overall Score: **7.4 / 10** + +**Reasoning.** The architecture is materially better than typical at this stage: +- precedence rule established, +- containers/components/data stores/state ownership documented at three C4 levels, +- event-driven core with explicit durability boundary, +- security and capability models are coherent and not over-engineered, +- recovery semantics are operational, not aspirational. + +It is held back from 8+ by: +- **Document drift** between the V1 layer (`solution-architecture`, `runtime-semantics`) and the older layer (six "MVP" docs + `main-agent-state-machine`). For a project whose explicit goal is "not half-finished," the wording must catch up. +- **One genuine contradiction** (DiagnosticParser ownership) that crosses package boundaries. +- **One missing decision** (TUI ↔ Runtime transport) that blocks freezing `interface-contracts-v1.md`. +- **One risk-unjustified rule** (`foreign_keys = OFF` over outbox-coordinated multi-DB writes). +- **Underspecified surface** for DIRECT_MODE, ExperienceMiner triggers, workspace GC, and Doctor self-bootstrap. + +None of the issues are structural; all are tractable in a single editing pass before detailed design begins. After fixing items in §2 (especially C1–C4), I would expect this architecture to move into the 8.5+ band. + +--- + +### Files referenced +- /run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/solution-architecture.md +- /run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/baselineV1.md +- /run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/c4/module.md +- /run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/c4/code-view.md +- /run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/runtime-semantics-v1.md +- /run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/scheduler-state-machine-v1.md +- /run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/scope-escalation-v1.md +- /run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/main-agent-state-machine.md +- /run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/security-model-v1.md +- /run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/capability-trust-v1.md +- /run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/cross-platform-matrix-v1.mdagentId: ae082ba701e248209 (use SendMessage with to: 'ae082ba701e248209' to continue this agent) +total_tokens: 80627 +tool_uses: 11 +duration_ms: 213238 +--- + +## 二、工程师视角 (Engineer Perspective) + +# AirCoding Architecture Review — Senior Engineer Pass + +## 1. Blocking Implementation Issues (must fix before compiling contracts) + +### 1.1 `AirError.cause_ref` shape conflict +- `interface-contracts-v1.md` §3: `cause_ref?: EntityRef` (a `{type, id}` 2-tuple). +- `error-taxonomy-v1.md` §2: `cause_ref?: { event_id?, task_id?, agent_id?, tool_run_id?, command_run_id?, artifact_id?, diagnostic_id? }` (multi-key object). +- These are mutually incompatible. An `AirError` produced under one definition will fail validation under the other. Pick one (the multi-key form is more useful for diagnostics; the `EntityRef` form is too narrow — a single error can reference both a tool_run and a diagnostic). + +### 1.2 `EntityRef.type` enum drift +- `interface-contracts-v1.md` §4: 12 entries including `"capability"` and `"provider"`. +- `event-registry-v1.md` §1: 10 entries, omits `capability` and `provider`. +- Will cause `ts(2322)` mismatches anywhere `EntityRef` is shared between event payloads and contract callers (e.g., `RequirementChangedPayload.affected_refs?: EntityRef[]`, `PermissionPromptRequestedPayload.request_ref?: EntityRef`). Single-source `EntityType` from `contracts/ids.ts`. + +### 1.3 Provider adapter method-name divergence +- `interface-contracts-v1.md` §15: `list_models`, `validate_model`, `count_tokens` (snake_case). +- `provider-capability-matrix-v1.md` §7: `listModels`, `validateModel`, `countTokens` (camelCase). +- The §1 "snake_case for exported contracts" rule makes interface-contracts authoritative; capability-matrix doc must be updated or contracts will compile but adapters written from the matrix doc will silently miss the interface. + +### 1.4 `JsonValue` recursive type compileability +```ts +export type JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue } +``` +This compiles in modern TS, but only when used directly. Some older `tsc`/IDE setups will hit "type is referenced before declaration" if emitted into a `.d.ts` without `noImplicitAny` discipline. Confirm `tsconfig` has `"strict": true` and verify with `tsc --emitDeclarationOnly`. + +### 1.5 `JsonSchema = JsonObject` is a phantom generic +`T` is never used inside the alias. `ToolDefinition.input_schema: JsonSchema` therefore provides zero compile-time linkage between schema and the inferred I/O types of `ToolExecutor`. This is technically compileable but defeats the type contract. Either (a) accept the phantom and document it, or (b) introduce a runtime validator type pair (e.g., `JsonSchema = JsonObject & { __t?: T }` or use a real schema lib like Zod with branded types). At minimum, mark `JsonSchema` as nominal-only in §2. + +### 1.6 Missing `Diagnostic` interface +- C4 `code-view.md` §6 declares `DiagnosticParser.parse_compiler_output(output): Diagnostic[]` and `semantic_signature(diagnostic): string`. +- `interface-contracts-v1.md` defines no `Diagnostic` type; only `DiagnosticCreatedPayload` (event payload) and a `diagnostics` DB row exist. Workers/toolchain need a typed `Diagnostic` to flow between parser → registrar → event emit. Add `Diagnostic` (mirror of `DiagnosticRecord`) to `contracts/error.ts` or a new `diagnostic.ts`. + +### 1.7 IPC envelope cannot enforce direction by type +`IpcMessage = IpcEnvelope | IpcEnvelope | …` — but `ControlMessage` is parent→worker only and `WorkerResult` is worker→parent only. There is no compile-time link between `kind`/payload-type and `direction`. A handler accepting `IpcMessage` will not narrow on direction. For V1 this risks hard-to-debug protocol bugs; consider tagged union by both `kind` AND `direction`, or document runtime guard requirements. + +### 1.8 IPC handshake/lifecycle gap +`ControlMessage` covers `agent.start | cancel | pause | resume | extend_timeout`. There is no: +- worker-side `worker.ready` / `worker.hello` (version negotiation), +- explicit `worker.exiting` / `worker.exited`, +- protocol-version field at envelope level (only `agent.start.version: 1` is versioned; `cancel/pause/resume/extend_timeout` have no version). +Without a hello, mismatched parent/worker binaries will deadlock on first message. Add `IpcEnvelope.protocol_version` or a mandatory hello round-trip before `agent.start`. + +--- + +## 2. Should-Fix During Contracts Implementation + +### 2.1 Permission subject enum drift +- `permission.decision.recorded` payload: `subject: "tool" | "command" | "path" | "network" | "dependency" | "migration"`. +- `PermissionRequestContext` (contracts §13): no `subject` field at all; conveys via free-form `requested_action: string`. +- `PermissionPromptProjection.subject: string`: free-form. +Promote `PermissionSubject` to `contracts/permission.ts` and use it on all three. + +### 2.2 `PermissionDecision` missing `decision_id` +The event `permission.decision.recorded.decision_id` cannot be produced unless `PermissionEngine.evaluate()` or `record()` returns it. Add `decision_id: UUID` to `PermissionDecision`. + +### 2.3 `MessageRecord.role: string` too loose +DB and contracts both use `string`. Anthropic canonical roles are bounded (`user | assistant | system | tool`). Tighten to a union in contracts; keep DB column TEXT. + +### 2.4 Missing enums in DB schema doc +- `task_attempts.status` — no enum given. +- `summaries.type` — no enum given. +- `evidence_refs.kind` — no enum (the contract `EvidenceRef.kind: string`). +- `artifacts.type` — listed informally in `artifact-naming-v1.md` §6 but neither db-schema nor contracts encode the canonical set. +- `diagnostics.severity` — no enum. +At minimum, document closed enums in `db-schema-v1.md` so projections/repositories can validate. + +### 2.5 Internal types referenced but undefined +Used by C4 but absent from contracts: +- `RetryDecision` (RetryPlanner) +- `WorkspaceRef`, `MergeResult` (WorkspaceManager) +- `PathRiskClassification`, `CommandRiskAnalysis` (security) +- `PromptLayer`, `BudgetFitResult` (context) +- `ArchitectureImpact`, `DocumentUpdate` (architecture) +- `AgentLost` (AgentMonitor.detectLostAgents) +- `FileReadObservation` (runtime-semantics §9.1) — needed for read-before-edit token plumbing +These are runtime-internal but should still live in `packages/contracts` to avoid circular `runtime → runtime` type imports between sub-modules. + +### 2.6 `EventBus.publish` synchronous vs `WorkerRuntime.emit` async +`EventBus.publish: void`, but `WorkerRuntime.emit: Promise`. Workers emit through IPC, so async is correct — but document explicitly that `WorkerRuntime.emit` resolves on send-ack, not on parent-side commit, to prevent subtle ordering assumptions. + +### 2.7 `TaskInsert = TaskRecord` is too strict +Forces callers to construct `retry_count: 0`, `created_at`, etc., at insert time even though they're scheduler-owned. Recommend `TaskInsert = Omit & { retry_count?: number }`. + +### 2.8 EventStore reject-unknown-types policy +`event-registry-v1.md` §5: "Reject unknown durable event types unless explicitly allowed by development-mode config." But `EventSchemaRegistry` is shown only in the C4 directory listing, with no contract. Add `EventSchemaRegistry` interface (`register/validate/list/getVersion`) to `contracts/event.ts`. + +### 2.9 Route prefix querying performance +`events.route_text` is indexed for equality, but `EventFilter.route_prefix` requires `LIKE 'a/b/%'`. SQLite can use the index for left-anchored LIKE only with `COLLATE NOCASE` or `BINARY` plus the right query form. Add an explicit note + small migration covering this; or store `route_text` as fixed depth segments. + +### 2.10 `ToolExecutor.execute()` return-type union +```ts +execute(...): AsyncIterable | Promise> +``` +Forces every caller (and `ToolRegistry.call`) to runtime-discriminate. Simpler: split `ToolExecutor` and `StreamingToolExecutor` interfaces, with `streaming: boolean` on the definition selecting which is required. This also makes registry `register` overloads cleaner and prevents accidentally implementing the wrong shape. + +### 2.11 `command_runs` has no `status` column +Runtime derives it (`runtime-semantics-v1.md` §5). Acceptable, but `CommandRunProjection.status: "running"|"ok"|"error"|"cancelled"|"unknown"` is computed each snapshot. Add `idx_command_runs_session_completed` to make "running" filtering cheap, or accept the cost — but call this out as known. + +### 2.12 `EventBus.drain?()` optional +Tests need deterministic drainage. Drop the `?` (make required) for V1, or formalize a `TestableEventBus` extension. Currently the absence of `drain` would cause flaky tests for "after publish, subscriber sees X". + +### 2.13 `ProviderManager.complete` lacks task/agent linkage +`ProviderCompletionInput.metadata?: JsonObject` is the only carrier for task/agent IDs — too loose. Provider rate limiting and cost tracking per-task need first-class fields. + +--- + +## 3. Acceptable Gaps + +- **Foreign keys OFF**: documented rationale; orphan handling deferred. Acceptable for Alpha. +- **`JsonObject = Record`** vs strict types in events: V1 uses TS-side validators, plan to migrate to Zod/JSON-schema generation post-MVP. +- **Phantom `JsonSchema`**: only blocks if you intend type safety; mark as nominal. +- **`schema_meta` migration story** is conceptual only; deferring an actual `MigrationRunner` migration ledger table is fine for V1 if the runner refuses to open DBs at unknown `schema_version`. +- **GUI/network tools** (`gui.screenshot`, `network.capture`) requiring host tooling (xdotool, tcpdump+sudo) — Doctor checks listed; fallbacks to "blocked" are acceptable. +- **Outbox for cross-DB writes** (debug-records.db, learned-memory.db) is described in semantics §6 but no dedicated table; acceptable since each external store can carry its own pending state, but document recovery scan ownership. +- **No `worker_id` separate from `agent_id`** — using `agent_id` as the worker identity is fine. +- **`message_drafts` not source of truth**: documented; OK. + +--- + +## 4. Strengths + +1. **Clear single-writer DB architecture** with explicit "no worker → SQLite direct write" rule (§21 boundary list). +2. **Disciplined event vs domain transactionality** (`runtime-semantics-v1.md` §3) — event-sourcing avoids the typical drift between events table and domain projections. +3. **Layered prompt model L0–L9** is unusually rigorous; explicitly forbids project override of L0 invariants. +4. **`semantic_signature` from `error-taxonomy-v1.md` §6** — the volatile-data exclusion list is the right discipline for retry-loop detection. +5. **Read-before-edit token (`FileReadObservation`)** as a tool-level enforcement, not a prompt rule (`runtime-semantics-v1.md` §9.1). Best practice for execution-discipline integrity. +6. **Compaction ownership rule** ("only `summary.created` inserts a `summaries` row", §7) eliminates duplicate-row class of bug. +7. **Capability manifest v1** allows plugin foundation without runtime coupling: `CapabilityRegistry.register_tools(tool_registry)` is the only seam. +8. **Provider conversion report** (`ProviderConversionReport.omissions/warnings/required_confirmation`) makes lossy translation auditable rather than silent. +9. **TUI → ProjectionClient only** is properly enforced at the package boundary level (`code-view.md` §2). +10. **Permission decision space** (`allow|deny|ask_user|block|refuse|announce_then_run` × `none|once|session|project|global`) is well-thought-out and matches Claude-Code-style flows. +11. **Artifact naming with ULID + temp-then-rename + sha256** (`artifact-naming-v1.md` §8) — production-grade. + +--- + +## 5. Engineering Quality Score: **7.5 / 10** + +Reasoning: + +- **+** Coverage breadth is high: events, errors, tools, schemas, prompts, permissions, capabilities, IPC, providers all addressed at architecture-only level. +- **+** Persistence/transaction story is consistent and recovery-aware. +- **+** Boundary rules are enforced architecturally (TUI/runtime/contracts/llm/cpp/tui dependency direction). +- **−** Several cross-document type drifts (§1.1, §1.2, §1.3) will cause `tsc` errors on first compile of `packages/contracts`. Must be reconciled before code starts. +- **−** Phantom generics (`JsonSchema`) and loose `unknown`/`string` typing on hot paths reduce the usefulness of the strict TypeScript stance. +- **−** IPC missing handshake/protocol-version & direction-typing — high risk for first multi-process integration milestone. +- **−** ~10 internal types referenced in C4 are not in contracts; contracts package will be rewritten mid-implementation when Scheduler/Workspace/Permission classifiers need them. +- **−** Several enum sets (artifact.type, diagnostic.severity, evidence.kind, permission.subject, summary.type, task_attempt.status, message.role) are open `string` in DB/contracts despite being closed in practice. + +Once the §1 blocking items are resolved, this jumps to ~**8.5/10**: the architecture is well-disciplined and demonstrably production-aware — the remaining gaps are typical of an alpha contract pass and are tractable during implementation. + +Files referenced (all absolute): +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/interface-contracts-v1.md` +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/db-schema-v1.md` +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/event-registry-v1.md` +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/tool-registry-v1.md` +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/error-taxonomy-v1.md` +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/artifact-naming-v1.md` +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/provider-capability-matrix-v1.md` +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/prompt-layering-v1.md` +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/runtime-semantics-v1.md` +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/c4/code-view.md`agentId: a26080831ed2e7713 (use SendMessage with to: 'a26080831ed2e7713' to continue this agent) +total_tokens: 94458 +tool_uses: 10 +duration_ms: 224290 +--- + +## 三、用户视角 (User Perspective) + +# AirCoding Architecture Alignment Review (User Perspective) + +I'm operating in pure read-only review mode; no files edited, no task tools used since this is a one-shot analysis. + +## 1. Original requirements FULLY satisfied + +- **Self-owned runtime, not a Claude Code plugin wrapper** — explicit in `baselineV1.md` §1, `solution-architecture.md` §1, `requirements.md` §1. +- **Claude Code-quality execution layer** — D-059, FR-009, principle 1 in solution-architecture; read-before-edit, exact small edits, verification-before-completion enshrined. +- **OpenTUI/Solid TUI reuse, not OpenCode business state** — D-002, D-048, baseline §18, solution §4 (TUI container constraints). +- **Hermes-style learning / Curator / SKILL.md** — D-024, baseline §16, runtime-semantics integration; ExperienceMiner is a first-class worker. +- **Project-local portable state** — D-049, FR-002, `.air/shared` + `.air/local` with project-id UUID, gitignore guidance. +- **Independent worker subprocesses** — D-007, D-039, FR-008, baseline §6/§8 (NDJSON over stdio, exit codes, per-worker independent loops). +- **C++ as first deep profile** — FR-017, baseline §20, plan Phase 5; runtime kept language-agnostic via `toolchain-*` (D-036, NFR-003). +- **Multi-agent set (Main, Architect, Scheduler, Executor, Reviewer, Debugger, Compactor, ExperienceMiner)** — present in §5 of solution-architecture and baseline §6. Note user's "Debugger absorbed Fixer" is honored. +- **High-permission announce-then-run, credentials/system-sensitive explicit confirmation** — D-045, baseline §11/§12, security model. +- **Anthropic canonical message storage + provider boundary conversion** — D-009, D-051, baseline §17. +- **Binary tarball distribution; defer public channels** — D-034, baseline §25. +- **Reference projects taxonomy (OpenCode/CC/Hermes/Codex/Skills/asciinema/atuin/claude-hud)** — preserved in baseline §2. + +## 2. Original requirements PARTIALLY satisfied + +- **VibeBox downstream branch (ARM Linux Electron appliance)** — `vibeboxbaseline.md` exists at top level but is marked historical; the canonical version is at `branchvibebox/vibeboxbaseline.md` (not read here). The main `plan.md` / `todo.md` / `requirements.md` make **no mention of VibeBox** at all. V1.0.0 Alpha plan and release gate ignore the VibeBox branch entirely. Risk: VibeBox derivation is decoupled but has no scheduling visibility in the Alpha workstream. +- **CLI/TUI experience (OpenCode-style UX)** — TUI container, ProjectionStore, HUD presets defined; but actual interaction surfaces (`/direct`/`/done` modes from idea.md §5.2, command palette, history/rewind/resume/compact UX from idea.md §3.2) are **not mentioned** in plan.md or todo.md. T-027/T-028 cover startup and permission prompts only. +- **Error handling and evidence display to user** — Evidence refs and structured WorkerResult exist; error-taxonomy-v1.md is referenced but not directly visible. The user-facing error escalation/blocker reporting flow exists structurally (T-028) but no UX detail. +- **"Goal upgraded to V1.0.0 Alpha (complete C++ + plugin foundation)"** — captured in requirements §2 and plan, but plan Phase 7 (agent prompt integration) and Phase 5 (C++ workflow) carry the entire weight; the Alpha is realistic only if Phases 4–7 ship cleanly. No contingency for partial delivery. +- **Hermes Nudge Engine N-turn mid-session triggers** — D-024 lists "N turns/tool calls interval" but plan.md/todo.md only deliver T-033 "candidate flow" — mid-session Nudge cadence is not separately scheduled. +- **Memory/skill self-patch ("agent finds rule wrong → patch")** — D-024 design exists, but no todo item explicitly schedules the self-patch path. +- **Doctor `--fix` mode with announce-then-run** — D-045/FR-018 designed; T-034 only delivers read-only Doctor; permissioned fix mode is mentioned in requirements but not scheduled as a distinct todo. + +## 3. Original requirements NOT satisfied (or missing in Alpha scope) + +- **Direct mode (`/direct` enter, `/done` exit) as a first-class Main Agent lane** — referenced in baseline §6 ("Direct mode is a foreground execution lane") but no contract, no IPC, no todo. User explicitly wanted this. +- **`compact` / `resume` / `history` / `rewind` user-facing commands** (idea.md §3.2) — not surfaced in CLI/TUI todo. +- **`air restore` three-granularity (file / time / session)** — D-032 designs it; plan.md and todo.md never schedule a restore command. +- **Local DebugRecord network with provider interface for sharing** — baseline §13 mentions it, but no T-* item creates `debug-records.db` schema or sharing interface in Alpha. Only T-031 (debugger loop) gets touched. +- **Curator Daemon periodic dedup/archive** — D-024 designs, todo doesn't schedule. +- **`air doctor --bundle` diagnostic export** — D-050 designs; not in todo. +- **Crash detection on next startup with prompt** — D-035 designs; not scheduled. +- **PTY/asciinema-style command capture + Atuin-style structured history search** — referenced in idea.md §3.6, dropped from Alpha entirely. Not necessarily wrong, but unacknowledged scope reduction. +- **VibeBox Alpha integration / branch tracking** — no plan-level treatment; user wanted it as a downstream branch baseline. + +## 4. Architecture decisions BEYOND what user asked (over-engineering risks) + +- **C4 model + 14 frozen prerequisite baseline docs** (interface-contracts-v1, runtime-semantics-v1, scheduler-state-machine-v1, prompt-layering-v1, provider-capability-matrix-v1, error-taxonomy-v1, artifact-naming-v1, scope-escalation-v1, security-model-v1, capability-trust-v1, cross-platform-matrix-v1, etc.) — user asked for a working agent, not 14 frozen v1 spec docs before any code. This is heavy formalism for an Alpha. +- **`packages/contracts` typed package as Phase 0 hard gate** — sensible engineering, but creates a serialization bottleneck (plan §"Must serialize") that can stall the whole project on contract churn. +- **Provider capability matrix + conversion report mechanism** — user only said "Anthropic + OpenAI + compatibles". Capability matrix is more elaborate than was requested. +- **L0–L9 prompt layering** — formalized to ten layers; user did not specify layering depth. +- **Five worker types as independent Bun processes including Compactor and ExperienceMiner** — user explicitly listed Compactor and ExperienceMiner as separate agents, but spawning them as full child processes (vs in-process background tasks) adds IPC/heartbeat/timeout cost for what are largely background async jobs. Justifiable but heavy. +- **Route-chain (`route: string[]`) instead of correlation/causation IDs** (D-038) — clever but a non-standard choice with no requested benefit. +- **`message_drafts` separate table for streaming intermediate state** — a fine touch, but not requested. +- **Static path whitelist plus LLM escape hatch** for high-risk detection — user said "static whitelist for system paths"; LLM escape hatch is an addition. +- **Scope-escalation v1 model as a separate frozen doc** — user already said "implementation silent / architecture confirm"; turning it into a frozen ADR-class document is over-formalized. + +## 5. Architecture decisions that CONFLICT with user intent + +- **None outright conflicting**, but borderline: + - User wanted "Hermes-style learning" with Nudge Engine mid-session triggers; D-024 includes them but **plan/todo do not schedule the mid-session cadence implementation**. If shipped without it, "Hermes-style" reduces to "session-end miner". + - User wanted Compactor as an independent subagent (idea.md §12.3 "Copy-on-Write … 独立 Compactor 子代理"). Architecture honors this — but `runtime-semantics-v1` (referenced, not read) reportedly governs "compaction ownership", which could centralize control again. Worth verifying. + - User wanted "高权限模式 announce_then_run … 凭据/系统操作显式确认". D-045 honors this for capabilities/dependencies, but it's unclear whether the same model applies to *general* shell command execution (the security-model-v1 doc, not read here, is the source of truth). Visible parts of the security model show only path classification and `.git/` protection — the broader announce-then-run for arbitrary shell isn't visible at this level. + - User wanted Codex-style "tool breadth" as a reference. Architecture explicitly subordinates breadth to Claude Code edit discipline (D-059 last paragraph). This is a legitimate choice the user implied, but worth flagging that breadth (image gen, vision, browser/computer use) is mostly deferred. + +## 6. User-experience gaps + +- **No CLI command surface design.** plan.md/todo.md show `air doctor`, `air init`, `air -- e2e ...`, `bun run air -- tui-smoke`, but there's no consolidated CLI catalog (no `air resume`, `air compact`, `air restore`, `air history`, `air session list`, `air provider list`, etc.). +- **No spec for `/direct` and `/done` modes** in TUI or Main Agent state machine artifacts referenced from todo. +- **Permission prompt UX** is a single todo (T-028) — no design for what the user sees, what defaults exist, how high-permission mode visualizes "announce_then_run", how confirmations are batched. +- **Evidence display in TUI** — ProjectionStore exposes evidence_refs, but there's no defined "user clicks/expands evidence" UX (artifact preview, log tail, screenshot inline). +- **HUD presets (Full/Essential/Minimal)** — referenced in idea.md §16 but not in todo. +- **Error messaging policy** — `error-taxonomy-v1.md` referenced for routing, but not for user-facing copy. +- **Internationalization / Chinese labels** — idea.md notes "中文 label"; nothing in plan.md. +- **Onboarding / first-run experience** — Doctor read-only is scheduled, but there is no "welcome / models.yaml setup / API key prompt" UX. + +## 7. Overall alignment score + +**7.5 / 10** + +Reasoning: + +- **Strengths (why ≥7):** The architecture genuinely captures the user's hardest asks — self-owned runtime, project-local state, independent worker processes, Claude Code execution discipline, Hermes-style miner, Anthropic-canonical storage, C++-first multi-language toolchain plan, OpenTUI without OpenCode business state. The core technical bones are well-aligned and internally consistent. +- **Why not ≥8.5:** The user-facing surface (`/direct`/`/done`, restore/resume/compact/history commands, HUD presets, Chinese labels, permission prompt UX, doctor bundle export, mid-session Nudge cadence, Curator Daemon scheduling, VibeBox branch integration) is largely undeferred-but-undelivered: the documents describe these intentions but plan/todo don't schedule them. The Alpha as currently scheduled would ship a strong runtime with a thin user-experience skin. +- **Why not <7:** The over-engineering (14 frozen v1 baseline docs, full C4, route-chain, capability matrix) is real but does not contradict user intent — it's gold-plating that risks burning time, not direction error. The requirements doc and solution-architecture are tight and traceable. + +## Key files referenced + +- `/run/media/airlongdian/EasyU/AirCoding/idea.md` +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/analysis/requirements.md` +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/solution-architecture.md` +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/baselineV1.md` +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/decisions-round-1.md` / `decisions-round-2.md` / `decisions-round-3.md` +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/docs/architecture/vibeboxbaseline.md` (and the canonical `branchvibebox/vibeboxbaseline.md` not read here) +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/plan.md` +- `/run/media/airlongdian/EasyU/AirCoding/AirPlan/todo.md` + +## Recommended follow-ups (non-blocking) + +1. Add todo entries for the user-facing CLI catalog and TUI commands (`/direct`, `/done`, `air resume`, `air restore`, `air compact`, `air history`). +2. Schedule mid-session Nudge cadence and Curator Daemon as concrete T-* tasks. +3. Schedule `air doctor --bundle` and `doctor --fix` paths. +4. Decide explicit Alpha posture toward VibeBox (parallel branch in plan, or explicit "post-Alpha"). +5. Consider trimming the 14 frozen v1 docs to what Alpha actually consumes; convert the rest to "design-as-needed".agentId: a86a8f5ed442d26e9 (use SendMessage with to: 'a86a8f5ed442d26e9' to continue this agent) +total_tokens: 76830 +tool_uses: 10 +duration_ms: 176409 \ No newline at end of file diff --git a/idea.md b/idea.md new file mode 100755 index 0000000..f40ea29 --- /dev/null +++ b/idea.md @@ -0,0 +1,488 @@ +# AirCoding Agent 设计文档 + +> 最后更新:2026-05-26 +> Canonical baseline: `AirPlan/docs/architecture/baselineV1.md` +> 历史决策记录:`AirPlan/docs/architecture/decisions-round-1.md`、`decisions-round-2.md`、`decisions-round-3.md` + +## 1. 背景与动机 + +当前 Air 系列插件主要运行在 Claude Code 已暴露的 agent/plugin 接口之上,能力边界受限。尤其是 AirContext 为了参与上下文管理,需要通过插件层绕行,这种方式不够优雅,也不利于长期演进。 + +新的方向是:从"Claude Code 插件外挂式扩展"转向"自有 agent/runtime 架构"。 + +目标不是做一个泛用 Claude Code clone,而是构建一个以 C++ 为首个深度支持语言、后续可扩展至 Python/Rust/JS 等多语言的长期可用 AI Coding Agent。 + +## 2. 核心定位 + +AirCoding Agent 的核心 runtime 是语言无关的。C++ 是第一个深度支持的语言 profile,后续按 `toolchain-` 包扩展。 + +开发闭环: + +```text +需求理解 + → 架构/接口设计 + → 代码阅读 + → 修改计划 + → 编译 + → 静态分析 + → 单测/集成测试 + → 运行/调试 + → 崩溃/日志/网络/GUI 证据分析 + → 修复 + → 变更总结 + → 经验沉淀 +``` + +## 3. 参考项目分工 + +### 3.1 OpenCode + +OpenCode 作为 runtime 骨架、TUI、provider 抽象、session/tool registry 的主要参考。 + +- TUI 交互布局以 OpenCode 为设计规范 +- runtime 分层(session/event/sync、多 agent 组织) +- provider / model 抽象 +- plugin / SDK 扩展层 + +### 3.2 Claude Code CLI + +Claude Code CLI 作为执行层代码质量、Executor 行为、工具调用策略、记忆系统、文件编辑安全边界的标杆。AirCoding 的执行层功能应尽可能与 Claude Code 对齐,以提升代码修改质量、安全性和验证纪律。 + +- 工具生命周期、schema 校验 +- 权限模型 +- 子代理调度 +- 文件 read/edit/write 与 diff/update 执行原语 +- 小步精确编辑、先读后改、避免无关重构、失败时定位根因而不是随机重试 +- build/test/debug 证据闭环,完成前必须验证或明确说明未验证原因 +- 实现中发现架构/接口冲突时显式上报 blocker +- compact / resume / history / rewind 交互 +- **记忆系统**(MEMORY.md + frontmatter + 多类型分层) +- **TAOR / TORI 设计**(Task-Agent-Observation-Result / Tool-Observation-Reasoning-Iteration 循环) + +### 3.3 Hermes Agent + +Hermes Agent 作为长期运行、跨会话学习、技能生成和 Curator 机制的参考。 + +- Nudge Engine 计数触发机制 +- Curator Daemon 定期去重/合并/归档 +- 使用中自我 patch +- SKILL.md 格式(YAML frontmatter + Markdown body) +- FTS5 语义搜索 + +### 3.4 Codex / OpenAI Coding Agent + +Codex / OpenAI 开源 coding agent 作为通用工具调用与多模态工具面的补充参考。 + +- shell / patch / test 直接闭环 +- coding sandbox 与工具调用编排 +- tools / plugin / core-plugins / MCP 相关实现 +- 图像生成、图像编辑、视觉输入等通用工具能力的 capability 设计参考 +- 只作为工具面参考,不作为 AirCoding 核心 runtime 形态参考 +- 本地参考路径:`reference/openai-codex/` + +### 3.5 Anthropic / Claude Skills + +Anthropic/Claude 开源 Skills 项目作为 skill/tool 组织方式的重要参考。 + +- SKILL.md 结构、frontmatter、触发描述与资源组织 +- 技能包内 scripts / references / assets 的组织方式 +- 可复用工具步骤如何沉淀成 skill +- skill 与 MCP / capability / Project Rules 的边界划分 +- 作为 AirCoding SkillGenerator、ExperienceMiner、Capability 文档格式的参考 +- 本地参考路径:`reference/anthropic-skills/` + +### 3.6 asciinema / Atuin / claude-hud + +- asciinema:PTY 接管与终端流捕获 +- Atuin:SQLite 命令历史结构化存储与搜索 +- claude-hud:实时 HUD / statusline 设计 + +## 4. 语言选型(已确定) + +### 4.1 主语言:TypeScript + Bun + +- **运行时**:Bun(内置 SQLite,原生 TSX 支持) +- **TUI 框架**:`@opentui/solid`(MIT 许可独立项目,npm 依赖引入) +- **包结构**:Bun workspaces + Turborepo monorepo + +### 4.2 Python 角色 + +Python 退化为纯 subprocess 工具调用(`Bun.spawn` + JSON-over-stdio),仅用于封装已有 C++ 工具链脚本和 Python 特有库。经验提炼、上下文组装、记忆管理全部留在 TS runtime 内部。 + +### 4.3 多语言 toolchain 包结构 + +Runtime 核心是语言无关的。每种语言通过独立包 + LanguageDetector plugin 扩展: + +``` +packages/ + tui/ — 语言无关 TUI + runtime/ — 语言无关 Agent Runtime + llm/ — 语言无关 Provider 抽象 + cli/ — 语言无关入口 + toolchain-cpp/ — C++ 工具链 + toolchain-python/ — Python 工具链(后续) + toolchain-rust/ — Rust 工具链(后续) + toolchain-js/ — JS/TS 工具链(后续) +``` + +## 5. 架构设计 + +### 5.1 架构模型 + +事件驱动。Main Agent 订阅 EventBus 获取 agent/task/tool 事件并渲染 TUI/HUD。 + +Main Agent 状态机详见 `AirPlan/docs/architecture/main-agent-state-machine.md`: + +```text +IDLE → CLASSIFYING(LLM 判断意图) + → DELEGATING(需要执行时) + → CONFIRMING(架构级变更需确认,实现级静默通过) + → EXECUTING(Scheduler 派发任务,Main Agent 监控进度) + → INTERRUPTING(用户中途变更,LLM 判断意图) + → SUMMARIZING(汇总结果,触发 ExperienceMiner) + → IDLE +``` + +核心约束:Main Agent 必须保持空闲可响应用户介入。后台任务派子代理做。 + +**确认门控**:实现级变更(不影响接口/架构)→ 静默进入 EXECUTING。架构级变更 → Architecture Designer 评估 → 低权限需确认,高权限自动推进但结果显示给用户。 + +### 5.2 Agent 层级 + +``` +Main Agent(用户唯一交互入口) + ├── 对话模式(默认):不直接操作文件和命令 + └── 直通模式(/direct 触发,/done 退出) + +Architecture Designer(全周期架构规划与审查) + +Scheduler(任务图拆解、并行/串行调度、进度监控) + ├── Executor(写代码、改文件、编译、测试验证) + ├── Reviewer(代码审查、静态分析审查,只读不改代码) + └── Debugger(证据收集、问题定位、插桩修复,吸收 Fixer 职责) +``` + +### 5.3 子代理进程模型 + +每个 Executor/Reviewer/Debugger 是**独立 Bun 进程**(非单进程内异步任务,也非 Worker 线程)。IPC 通过 stdio + JSON。崩溃隔离、上下文隔离、天然适配 worktree。 + +### 5.4 心跳与超时 + +- **心跳**:Push 模型。子代理每 N 秒主动推送 `AgentHeartbeat`(当前状态、turn 数、已用 token) +- **超时**:混合硬超时(kill)+ 软超时(警告 + 允许申请延期)。Scheduler 按任务类型分情况决定 +- **死循环检测**:同一错误签名出现 N+ 次 → 上报 Main Agent + +### 5.5 并发写入策略 + +轻量 write_area 粗分: + +- 不同写集 → 默认可并发 +- 相同写集但大概率不写相同代码块 → git worktree 隔离并发,事后合并 +- 高概率改同一代码块或公共接口 → 串行 + +Scheduler 是合并协调者,非统一写入器。lockfile、构建配置、公共 API/schema 默认提高并发风险。 + +### 5.6 Worker Agent 类型 + +**Executor**(Claude Code 为行为标杆): +- 内部 loop:LOADING → THINKING → ACTING → OBSERVING → (调试子循环)→ FINALIZING +- 自治完成完整闭环,不逐步骤汇报 +- 出口:TaskCompleted / TaskBlocked / TaskFailed +- TaskSpec 附带 max_turns / acceptance_criteria / timeout + +**Reviewer**(只读): +- 流程规则自动触发(Executor 完成 → Reviewer) +- loop:LOADING → REVIEWING → DECIDING(approved / changes_requested / blocked) + +**Debugger**(build/test 失败自动触发): +- loop:GATHERING → ANALYZING → FIXING → RECORDING 或 ESCALATING +- 产出 DebuggerResult + DebugRecord 候选 + +三个子代理的 Agent Loop **各自独立实现**,不共享通用 loop 引擎。 + +### 5.7 流程规则 + +```text +Executor 完成切片 → 自动触发 Reviewer +build/test 失败 → 自动触发 Debugger +静态分析报警 → 自动触发 Reviewer 或 Debugger +阶段完成 → 自动触发 Architecture Designer 架构审查 +项目完成 → Architecture Designer 最终一致性审查 +``` + +### 5.8 需求变更协议 + +用户需求变更先由 Main Agent 做 LLM 分类: + +- execution 级 → Scheduler 直接调整 +- possible_design 级 → Architecture Designer 轻量 impact check +- design/interface/goal 级 → Architecture Designer 完整影响评估 + +Scheduler 基于分类结果或 Arc Revision 调整 TaskGraph。 + +### 5.9 Worker Result 标准 + +所有 Worker 结果必须结构化(非自由文本摘要)。格式详见 idea.md 原始定义(ExecutorResult / ReviewerResult / DebuggerResult)。 + +## 6. C++ Toolchain 工具链 + +### 6.1 分层 + +```text +Agent 接口: build(config) → BuildResult, test(filter) → TestResult, analyze() → Diagnostic[] + ↓ +C++ Toolchain Adapter(屏蔽 CMake/MSBuild/Bazel 差异) + ↓ +Native Tool Execution(实际调用 cmake/ninja/msbuild/...) +``` + +### 6.2 BuildTool + +优先级:CMake(内置)> Meson/Bazel/XMake(capability plugin)> Makefile/.sln + +冲突处理:多种构建系统文件同时存在 → 询问用户 +Generator:Ninja 优先,失败回退 Make +配置失败:BuildTool 内置逻辑先尝试修复 → 失败则交给 Debugger + +### 6.3 CompilerDiagnosticParser + +**全部走 LLM 解析**(不用正则),生成结构化 Diagnostic + 语义错误签名(归一化 GCC/Clang/MSVC 措辞差异)。链接器错误单独归类。 + +### 6.4 TestRunner / StaticAnalysis / CodeIntelligence + +- TestRunner:CTest + GoogleTest 内置,Catch2/Boost.Test 插件 +- StaticAnalysis:cppcheck 内置,clang-tidy 插件 +- CodeIntelligence:MVP 走 clangd CLI 模式(spawn 用完即退),LSP daemon 模式后续按需加 + +### 6.5 compile_commands.json + +按需生成(`cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON`),不做持久化缓存。 + +## 7. Project Model 项目模型 + +### 7.1 设计原则 + +- 多语言通用:语言无关层 + 语言特定层分离 +- Scanner 只收集文件系统元数据(目录树 + 文件扩展名 + 特殊文件),不读文件内容 +- LLM 驱动理解,用户确认修正 + +### 7.2 Scanner 策略 + +- **无递归深度限制、无目录排除**——完整目录树本身就是有用的结构信息 +- 15 秒硬超时兜底,超时返回部分结果 + incomplete 标记 +- 首次全量,后续增量(mtime diff) +- 再打开时加载 project.json + 快速确认顶层无变化,有变化才增量扫描 + +### 7.3 LLM 驱动的项目初始化 + +Scanner 收集事实 → Main Agent + LLM 推理 → 提出假设 → 用户确认/修正 → 沉淀 + +- **Schema 校验**:宽松接受,缺失字段标记 unknown,不让 LLM 反复重试 +- **用户纠正**:增量更新单字段 + 提示"关联判断可能受影响",不自动重写整个 json +- **版本迁移**:打开项目时检测旧 schema → 备份后提示用户确认迁移 → 失败回滚 + +## 8. Agent 目录结构 + +### 8.1 全局目录 + +```text +~/.air/ + ├── config.yaml + ├── models.yaml + ├── permissions.yaml + ├── compaction-rules.md # 用户模板 + ├── project-index.db # 最近项目索引,不是 source of truth + ├── cache/ # plugins/providers/lsp/downloads + ├── resources/versions// + ├── skills/ # 跨项目复用技能(SKILL.md 格式) + └── logs/ + ├── air.log # 用户可读(启动失败、异常报错) + └── air.developer.log # 开发组公钥加密全量调试日志,保留 7 天 +``` + +### 8.2 项目内 `.air/` + +```text +/.air/ + ├── shared/ # 可提交 git,共享给团队 + │ ├── project.json # 含 stable UUID project_id + │ ├── permissions.yaml + │ ├── compaction-rules.md + │ ├── rules/ + │ │ ├── project-rules.md + │ │ └── toolchain-rules.md + │ └── plan/ # 原 AirPlan 工作流内化 + │ ├── AGENTS.md + │ ├── plan.md + │ ├── todo.md + │ └── docs/ + └── local/ # 可随项目携带但默认 gitignore + ├── sessions// + │ ├── session.db + │ └── artifacts/ + ├── state/ + ├── backups/ # Git 仓库管理的项目外文件备份 + ├── debug-records.db + ├── learned-memory.db + ├── workspaces/ + ├── tmp/ + └── locks/ +``` + +推荐 `.gitignore`: + +```gitignore +.air/local/ +``` + +## 9. Provider / Model 抽象层 + +- 原生支持 Anthropic API + OpenAI API +- 兼容接入:OpenRouter / ollama / 自定义 endpoint(通过 Anthropic/OpenAI 兼容模式) +- **内部存储格式**:Anthropic 原生 content blocks(Claude Code 路线) +- **Provider 转换**:API 边界做双向转换,存回 Anthropic 格式 +- **同 provider 切换**:零开销 +- **跨 provider 切换**:API 边界双向转换 + +## 10. Permission 权限模型 + +### 10.1 核心原则 + +```text +只读操作 → 永远允许 +项目目录内 → 完全开放(含 build 目录,C++ 打包部署需要手动组织运行库) +项目外非系统 → 自动备份 + Git 记录,静默执行 +高危系统操作 → 用户确认 +``` + +### 10.2 边界定义 + +- **Symlink**:按物理路径(follow realpath),防止逃逸 +- **`.git/`**:默认写保护(需确认),可在 permissions.yaml 关闭 +- **build 目录**:不加特殊规则,Agent 需要完全读写 +- **`sudo`**:不算高危(开发机日常操作) +- **高危判断**:静态路径白名单(`/etc/fstab`、`/boot/`、`/etc/default/grub` 等),模糊情况走 LLM escape hatch +- **`~/.air/`**:AirCoding 自身管理,不经过 PermissionEngine + +### 10.3 备份与还原 + +- 项目外文件修改备份为 **Git 仓库**(`/.air/local/backups/`) +- 每次修改 = `cp` + `git add && git commit`(commit message: session_id、agent_type、reason) +- `air restore` 三个粒度:单文件最近版本、指定时间点、整个 session +- 用户手动删备份,不做自动清理 + +## 11. 会话持久化 + +### 11.1 存储策略 + +- 按 session 分库 SQLite(`/.air/local/sessions//session.db`) +- 消息存储:Anthropic 原生 content blocks(canonical source) +- `message_drafts` 保存流式 assistant 中间态,完成后删除 +- 调度状态由 domain tables 持久化:tasks / task_dependencies / task_attempts / agents / tool_runs / command_runs / artifacts / diagnostics / evidence_refs / workspaces / events +- `ui_state` 只保存 UI 恢复状态,定时和退出时 flush +- ProjectionStore 从 DB + EventBus 重建 TUI/HUD view model +- 中断恢复:Scheduler 从 domain tables 重建调度队列,running 状态按心跳时间戳判断存亡 + +### 11.2 Event Store 分层 + +- **EventBus**:高频实时事件(TokenDelta、StdoutChunk、AgentHeartbeat),不落盘 +- **PersistentEventStore**:durable events(AgentStarted、TaskCompleted、ToolRunCompleted 等),SQLite 主线程同步写入 +- **ArtifactStore**:大体积内容(build log、test log、pcap、screenshot),DB 存引用 + 摘要 + hash + +## 12. 上下文与记忆系统 + +### 12.1 记忆分层 + +```text +Project Rules(权威层,Claude Code 风格 Markdown + frontmatter) + → Project Profile(事实层) + → Session Memory(会话层) + → Learned Experience(学习层,tentative) + → Debug Knowledge(结构化经验库) + → User Preference(用户偏好) +``` + +### 12.2 ExperienceMiner + +- **触发**:DebugRecord 产生时 + 会话结束时 + 每 N 轮/工具调用中间触发(Hermes Nudge Engine 风格) +- **执行者**:独立后台子代理,不阻塞 Main Agent +- **去重**:周期性 Curator Daemon(识别重叠技能、建议合并、标记过期、归档无用) +- **自我 patch**:Agent 执行中发现经验/规则不对,转发给 ExperienceMiner 做 patch +- **升级**:非调试经验按出现次数(N=3)提醒升级;调试经验以验证证据为置信度,不打分 +- **格式**:SKILL.md(YAML frontmatter + Markdown body) + +### 12.3 上下文压缩 + +- **触发**:Context window 占比达 70% +- **策略**:Markdown + frontmatter 规则文件驱动,三层继承(系统默认 → 用户模板 `~/.air/compaction-rules.md` → 项目规则 `.air/shared/compaction-rules.md`) +- **机制**:Copy-on-Write。快照消息 1-N → 异步压缩(独立 Compactor 子代理)→ 新消息继续追加 → 完成后插入压缩标记。LLM 看到:摘要 + 标记 + 新消息。原始消息保留,LLM 可显式回溯。 +- **系统默认模板**:确保没写规则的项目也能正常压缩 + +## 13. Debug Knowledge Network + +- 本地优先,provider 接口预留远程共享 +- DebugRecord 结构化存储(症状、错误签名、根因、修复方案、验证步骤、证据引用) +- 隐私:默认不上传,上传前脱敏,显式授权,可撤回 + +## 14. 分发与日志 + +### 14.1 分发 + +- **前期**:二进制 tarball(Bun compile 独立可执行文件 + Bundled Bun runtime + Python 脚本 + 默认资源文件),不发布公开渠道 +- **后续**:稳定后再考虑 npm / brew / apt / winget + +### 14.2 日志 + +- `air.log`:用户可读(启动失败、异常报错、环境配置问题) +- `air.developer.log`:开发组公钥加密全量调试日志 + 性能指标,7 天保留 +- `air doctor`:崩溃诊断包收集命令;诊断包不自动脱敏,但必须用户显式导出/发送 +- 下次启动自动检测异常退出并提示 + +## 15. 测试策略 + +- **单元测试**:bun test,CI 每次 push,<30s,无 LLM(覆盖所有确定性逻辑) +- **集成测试**:CI 每次 push,<1min,录制 LLM fixture 回放(覆盖 Agent Loop、Scheduler、IPC、session 持久化、压缩、worktree) +- **E2E 测试**:Release gate,真实 LLM(完整 C++ 项目场景),必须通过 + +## 16. HUD / Status Layer + +- HUD 作为 runtime 内建层,通过 ProjectionStore 消费 DB + EventBus 派生状态(不依赖外部脚本解析 transcript) +- 展示:model/project/git/session/context/tasks/agents/tools/build/test/debug +- Preset:Full / Essential / Minimal +- 参考 claude-hud 的 threshold 颜色、多行布局、中文 label + +## 17. 架构决策记录(ADR) + +原始 13 项 ADR + 三轮讨论补充的新决策,详见: +- `AirPlan/docs/architecture/decisions-round-1.md`(D-001 ~ D-020) +- `AirPlan/docs/architecture/decisions-round-2.md`(D-021 ~ D-037) +- `AirPlan/docs/architecture/decisions-round-3.md`(D-038 ~ D-059) +- `AirPlan/docs/architecture/main-agent-state-machine.md` + +## 18. MVP 第一阶段 + +```text +C++ local dev loop ++ @opentui/solid TUI ++ durable sessions(项目本地 per-session SQLite,domain tables 持续持久化) ++ Copy-on-Write 上下文压缩(三层继承规则文件) ++ Claude Code 风格 Project Rules + Hermes 风格 ExperienceMiner + Curator ++ local debug knowledge base ++ 事件驱动 EventBus + HUD ++ 二进制分发 +``` + +具体包含: + +1. Agent 目录与配置(`~/.air/` + `.air/shared/project.json` + `.air/local/`) +2. LLM 驱动的项目初始化(Scanner → LLM → 用户确认 → `.air/shared/project.json`) +3. 多语言 Project Model(语言无关层 + 语言特定 profile + LanguageDetector 接口) +4. TUI Shell + HUD(`@opentui/solid` + ProjectionStore) +5. SQLite Session Store(项目 `.air/local` per-session 分库,Anthropic 原生格式 + domain tables) +6. C++ Toolchain(BuildTool / DiagnosticParser LLM / TestRunner / StaticAnalysis / clangd CLI) +7. Provider / Model(Anthropic + OpenAI 原生,API 边界转换) +8. Permission 引擎(信任优先 + Git 备份 + 静态白名单高危检测) +9. Agent 分层(Main Agent 状态机 + Architecture Designer + Scheduler + Executor/Reviewer/Debugger 独立进程) +10. Context / Memory(Project Rules + ExperienceMiner + Curator + Copy-on-Write 压缩) +11. Local DebugRecord Store +12. Capability Plugin Prototype(AirSDB 优先改造) diff --git a/reference/air-suite-20260518/.gitkeep b/reference/air-suite-20260518/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/reference/anthropic-skills/.claude-plugin/marketplace.json b/reference/anthropic-skills/.claude-plugin/marketplace.json new file mode 100644 index 0000000..03d8e71 --- /dev/null +++ b/reference/anthropic-skills/.claude-plugin/marketplace.json @@ -0,0 +1,55 @@ +{ + "name": "anthropic-agent-skills", + "owner": { + "name": "Keith Lazuka", + "email": "klazuka@anthropic.com" + }, + "metadata": { + "description": "Anthropic example skills", + "version": "1.0.0" + }, + "plugins": [ + { + "name": "document-skills", + "description": "Collection of document processing suite including Excel, Word, PowerPoint, and PDF capabilities", + "source": "./", + "strict": false, + "skills": [ + "./skills/xlsx", + "./skills/docx", + "./skills/pptx", + "./skills/pdf" + ] + }, + { + "name": "example-skills", + "description": "Collection of example skills demonstrating various capabilities including skill creation, MCP building, visual design, algorithmic art, internal communications, web testing, artifact building, Slack GIFs, and theme styling", + "source": "./", + "strict": false, + "skills": [ + "./skills/algorithmic-art", + "./skills/brand-guidelines", + "./skills/canvas-design", + "./skills/doc-coauthoring", + "./skills/frontend-design", + "./skills/internal-comms", + "./skills/mcp-builder", + "./skills/skill-creator", + "./skills/slack-gif-creator", + "./skills/theme-factory", + "./skills/web-artifacts-builder", + "./skills/webapp-testing" + ] + } + , + { + "name": "claude-api", + "description": "Claude API and SDK documentation skill for building LLM-powered applications", + "source": "./", + "strict": false, + "skills": [ + "./skills/claude-api" + ] + } + ] +} diff --git a/reference/anthropic-skills/.gitignore b/reference/anthropic-skills/.gitignore new file mode 100644 index 0000000..4ff6017 --- /dev/null +++ b/reference/anthropic-skills/.gitignore @@ -0,0 +1,5 @@ +.DS_Store +__pycache__/ +.idea/ +.vscode/ + diff --git a/reference/anthropic-skills/.gitkeep b/reference/anthropic-skills/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/reference/asciinema-3.2.0/.cargo/config.toml b/reference/asciinema-3.2.0/.cargo/config.toml new file mode 100755 index 0000000..1309df4 --- /dev/null +++ b/reference/asciinema-3.2.0/.cargo/config.toml @@ -0,0 +1,2 @@ +[env] +RUST_TEST_THREADS = "1" diff --git a/reference/asciinema-3.2.0/.gitattributes b/reference/asciinema-3.2.0/.gitattributes new file mode 100755 index 0000000..fbbfa57 --- /dev/null +++ b/reference/asciinema-3.2.0/.gitattributes @@ -0,0 +1 @@ +assets/asciinema-player.* linguist-vendored diff --git a/reference/asciinema-3.2.0/.github/ISSUE_TEMPLATE/bug-report.yml b/reference/asciinema-3.2.0/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100755 index 0000000..2a04093 --- /dev/null +++ b/reference/asciinema-3.2.0/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,101 @@ +name: Bug Report +description: Report a bug to help improve asciinema CLI +body: + - type: markdown + attributes: + value: | + **This is a bug tracker for asciinema CLI (the recorder).** + + - If your issue is with the JavaScript player or server, please open an issue in the related repository + - If you're experiencing issues with asciinema.org, contact admin@asciinema.org + - For feature requests, questions, and discussions, use the [forum](https://discourse.asciinema.org) or [GitHub discussions](https://github.com/orgs/asciinema/discussions) + + Thanks for taking the time to report a bug! Please fill out the sections below. + + - type: checkboxes + id: checks + attributes: + label: Pre-submission checks + description: Please confirm the following before submitting your bug report + options: + - label: I have searched existing issues and this bug has not been reported yet + required: true + - label: This is a bug report for asciinema CLI (not player or server) + required: true + + - type: textarea + id: bug-description + attributes: + label: Bug Description + description: A clear and concise description of what the bug is. + placeholder: Describe the bug... + validations: + required: true + + - type: textarea + id: reproduction-steps + attributes: + label: Steps to Reproduce + description: Provide detailed steps to reproduce the behavior + placeholder: | + 1. Run command `asciinema ...` + 2. Do action '...' + 3. Observe error + validations: + required: true + + - type: textarea + id: expected-behavior + attributes: + label: Expected Behavior + description: A clear and concise description of what you expected to happen. + placeholder: What should have happened instead? + validations: + required: true + + - type: input + id: os-version + attributes: + label: Operating System + description: Which OS and version are you using? + placeholder: e.g., Ubuntu 24.04, macOS 14.0, Fedora 39 + validations: + required: true + + - type: input + id: cli-version + attributes: + label: asciinema CLI Version + description: What version of asciinema CLI are you using? Run `asciinema --version` to check. + placeholder: e.g., 2.4.0 + validations: + required: true + + - type: dropdown + id: installation-method + attributes: + label: Installation Method + description: How did you install asciinema CLI? + options: + - Package manager (apt, yum, brew, etc.) + - pip/pipx + - Built from source + - Downloaded binary + - Other + validations: + required: true + + - type: textarea + id: terminal-info + attributes: + label: Terminal Information + description: What terminal emulator and shell are you using? + placeholder: | + Terminal: e.g., GNOME Terminal, iTerm2, Ghostty + Shell: e.g., bash 5.1, zsh 5.8, fish 3.6 + + - type: textarea + id: additional-context + attributes: + label: Additional Context + description: Add any other context, screenshots, or relevant information about the problem here. diff --git a/reference/asciinema-3.2.0/.github/ISSUE_TEMPLATE/config.yml b/reference/asciinema-3.2.0/.github/ISSUE_TEMPLATE/config.yml new file mode 100755 index 0000000..10beddd --- /dev/null +++ b/reference/asciinema-3.2.0/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Forum + url: https://discourse.asciinema.org/ + about: Ideas, feature requests, help requests, questions and general discussions should be posted here. + - name: GitHub discussions + url: https://github.com/orgs/asciinema/discussions + about: Ideas, feature requests, help requests, questions and general discussions should be posted here. diff --git a/reference/asciinema-3.2.0/.github/workflows/ci.yml b/reference/asciinema-3.2.0/.github/workflows/ci.yml new file mode 100755 index 0000000..bbafd6c --- /dev/null +++ b/reference/asciinema-3.2.0/.github/workflows/ci.yml @@ -0,0 +1,45 @@ +name: CI + +on: + push: + branches: ["develop"] + pull_request: + branches: ["develop"] + +env: + CARGO_TERM_COLOR: always + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + rust: [default, msrv] + + steps: + - uses: actions/checkout@v5 + + - name: Install Nix + uses: nixbuild/nix-quick-install-action@v34 + + - name: Setup Nix cache + uses: nix-community/cache-nix-action@v6 + with: + primary-key: nix-${{ runner.os }}-${{ matrix.rust }}-${{ hashFiles('**/*.nix', '**/flake.lock') }} + restore-prefixes-first-match: nix-${{ runner.os }}-${{ matrix.rust }}- + + - name: Build + run: nix develop .#${{ matrix.rust }} --command cargo build --verbose + + - name: Run cargo tests + run: nix develop .#${{ matrix.rust }} --command cargo test --verbose + + - name: Run integration tests + run: nix develop .#${{ matrix.rust }} --command tests/integration.sh + + - name: Check formatting + run: nix develop .#${{ matrix.rust }} --command cargo fmt --check + + - name: Lint with clippy + run: nix develop .#${{ matrix.rust }} --command cargo clippy diff --git a/reference/asciinema-3.2.0/.github/workflows/release.yml b/reference/asciinema-3.2.0/.github/workflows/release.yml new file mode 100755 index 0000000..af2b04a --- /dev/null +++ b/reference/asciinema-3.2.0/.github/workflows/release.yml @@ -0,0 +1,90 @@ +name: Release + +permissions: + contents: write + +on: + push: + tags: + - v[0-9]+.* + +jobs: + create-release: + name: Create GH release draft + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v5 + + - name: Create the release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh release create ${{ github.ref_name }} --draft --verify-tag --title ${{ github.ref_name }} + + upload-binary: + needs: create-release + name: ${{ matrix.target }} + runs-on: ${{ matrix.os }} + + strategy: + matrix: + include: + - os: ubuntu-latest + target: x86_64-unknown-linux-gnu + use-cross: false + + - os: ubuntu-latest + target: x86_64-unknown-linux-musl + use-cross: false + + - os: ubuntu-latest + target: aarch64-unknown-linux-gnu + use-cross: true + + - os: macos-latest + target: x86_64-apple-darwin + use-cross: false + + - os: macos-latest + target: aarch64-apple-darwin + use-cross: false + + env: + CARGO: cargo + + steps: + - uses: actions/checkout@v5 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.target }} + + - name: Install cross + if: matrix.use-cross + uses: taiki-e/install-action@v2 + with: + tool: cross + + - name: Overwrite build command env variable + if: matrix.use-cross + shell: bash + run: echo "CARGO=cross" >> $GITHUB_ENV + + - name: Install build deps + shell: bash + run: | + if [[ ${{ matrix.target }} == x86_64-unknown-linux-musl ]]; then + sudo apt-get update + sudo apt-get install -y musl-tools + fi + + - name: Build release binary + run: ${{ env.CARGO }} build --release --locked --target ${{ matrix.target }} + + - name: Upload the binary to the release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + mv target/${{ matrix.target }}/release/asciinema target/release/asciinema-${{ matrix.target }} + gh release upload ${{ github.ref_name }} target/release/asciinema-${{ matrix.target }} diff --git a/reference/asciinema-3.2.0/.gitignore b/reference/asciinema-3.2.0/.gitignore new file mode 100755 index 0000000..500c22a --- /dev/null +++ b/reference/asciinema-3.2.0/.gitignore @@ -0,0 +1,4 @@ +target/ +.envrc +.direnv +/result diff --git a/reference/asciinema-3.2.0/.gitkeep b/reference/asciinema-3.2.0/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/reference/atuin-18.16.1/.atuin/skills/release/SKILL.md b/reference/atuin-18.16.1/.atuin/skills/release/SKILL.md new file mode 100755 index 0000000..cace07b --- /dev/null +++ b/reference/atuin-18.16.1/.atuin/skills/release/SKILL.md @@ -0,0 +1,213 @@ +--- +name: release +description: > + Orchestrate a multi-step Atuin CLI release — version bumping, changelog + generation, PR creation, tagging, and crates.io publishing. Invoke with + /release or /release . +disable-model-invocation: true +argument-hint: [version] +--- + +# Atuin CLI Release + +You are orchestrating a release of the Atuin CLI. Follow the steps below +**in order**, pausing at each checkpoint for user confirmation. Do not skip +steps or combine them. + +## Current State + +- Workspace version: !`sed -n '/^\[workspace\.package\]/,/^\[/s/^version = "\(.*\)"/\1/p' Cargo.toml` +- Latest tag: !`git describe --tags --abbrev=0 2>/dev/null || echo "none"` +- Suggested next version: !`git-cliff --bumped-version 2>/dev/null | sed 's/^v//' || echo "(unknown)"` + +--- + +## Step 1 — Check Dependencies + +Verify these tools are installed: `git`, `gsed`, `cargo`, `gh`, `git-cliff`. + +Use `command -v` for each. If any are missing, report which ones and stop. + +Remember to use `gsed`, or else macOS flags to regular `sed`, later in the workflow. + +--- + +## Step 2 — Determine Version + +The target version may be provided as `$ARGUMENTS`. If it's empty, use +AskUserQuestion to ask for the new version (show the current state above +for reference). + +After determining the version: +- If it contains a `-` (e.g. `18.15.0-beta.1`), it is a **prerelease**. + Note this — it affects changelog and publish behavior later. +- Show the user: `current → new` and whether it's a prerelease. +- **Checkpoint:** Ask the user to confirm before proceeding. + +--- + +## Step 3 — Set Up Working Directory + +Clone a fresh copy into a temp directory: + +```bash +WORKDIR=$(mktemp -d) +git clone git@github.com:atuinsh/atuin.git "$WORKDIR" +``` + +Print the working directory path so the user can find it if needed. + +NOTE: +ALL subsequent Bash commands run from `$WORKDIR`. + +--- + +## Step 4 — Create Branch & Update Versions + +1. Create a release branch named after the version (no `v` prefix): + `git checkout -b ` + +2. Replace the old version with the new one in all `Cargo.toml` files. + **Escape dots** in the old version so sed treats them literally: + + ```bash + VERSION_PATTERN="${OLD_VERSION//./\\.}" + find . -type f -name 'Cargo.toml' -not -path './.git/*' \ + -exec gsed -i "s/$VERSION_PATTERN/$NEW_VERSION/g" {} \; + ``` + +3. Run `cargo check` to update `Cargo.lock`. + +4. Show `git diff --stat` and the version-related lines from the diff: + ```bash + git diff --unified=0 -- '*.toml' | grep '^\+.*version' | grep -vF '+++' + ``` + Remember to use macOS grep arguments on macOS systems. + +5. Verify the workspace version was actually updated by re-reading it + from `Cargo.toml`. + +6. **Checkpoint:** Show the diff summary and ask the user to confirm the + version changes look correct. + +--- + +## Step 5 — Update Changelog + +The changelog strategy differs for prereleases vs stable releases: + +- **Prerelease:** Maintain a running `## [unreleased]` section containing + all changes since the last stable release. Use: + `git-cliff --unreleased --strip all` + (cliff.toml's `ignore_tags` already ignores beta/alpha tags, so + `--unreleased` spans back to the last stable release automatically.) + +- **Stable release:** Generate a versioned entry that replaces the + `[unreleased]` section. Use: + `git-cliff --unreleased --tag "v" --strip all` + +Then update `CHANGELOG.md`: + +1. If an existing `## [unreleased]` or `## [Unreleased]` section exists, + **remove it entirely** (the heading and all content up to the next + `## ` heading). + +2. Insert the new entry before the first existing `## ` version heading. + +3. **Checkpoint:** Read and display the new changelog entry to the user. + Ask if they want any edits. If so, make the requested changes using + the Edit tool. Repeat until they're satisfied. + +--- + +## Step 6 — Commit & Push + +Stage all changes and commit: + +``` +chore(release): prepare for release +``` + +Push the branch with `--set-upstream origin`. + +--- + +## Step 7 — Create PR & Wait for Merge + +### Create the PR + +Extract the changelog entry body (everything between the new `## ` heading +and the next one) for the PR description. + +For prereleases, the heading to match is `## [unreleased]`. +For stable releases, it's `## ` (escape dots in the awk pattern). + +Create the PR: +```bash +gh pr create \ + --title "chore(release): prepare for release " \ + --body "" \ + --repo atuinsh/atuin + --draft +``` + +Show the PR URL to the user. Tell the user to go review and merge the PR. + +When the user reports the PR is merged, proceed to the next step. + +--- + +## Step 8 — Tag Release + +Back in the working directory: + +```bash +git checkout main +git pull +git tag "v" +git push --tags +``` + +Tell the user the tag was pushed and the release CI workflow has been +triggered. + +--- + +## Step 9 — Publish to crates.io + +**If this is a prerelease**, skip this step entirely and tell the user. + +**If this is a stable release**, ask the user whether to publish. + +If yes, publish each crate **in dependency order** using `--no-verify` +(the code already passed CI, and verification fails when crates.io +hasn't indexed a freshly-published dependency yet): + +``` +atuin-common, atuin-client, atuin-ai, atuin-dotfiles, atuin-history, +atuin-nucleo/matcher, atuin-nucleo, atuin-daemon, atuin-kv, +atuin-scripts, atuin-server-database, atuin-server-postgres, +atuin-server-sqlite, atuin-server, atuin-pty-proxy, atuin +``` + +For each crate, run from `crates/`: +```bash +cargo publish --no-verify 2>&1 +``` + +If it fails with "already uploaded", report it as a skip (not an error) — +some crates like `atuin-nucleo` are versioned independently and may +already be published at their current version. + +If it fails for any other reason, stop and report the error. + +--- + +## Completion + +Summarize what was done: +- Version released +- PR URL +- Tag name +- Which crates were published (if any) +- Working directory path and how to clean it up (`rm -rf`) diff --git a/reference/atuin-18.16.1/.cargo/audit.toml b/reference/atuin-18.16.1/.cargo/audit.toml new file mode 100755 index 0000000..11cef85 --- /dev/null +++ b/reference/atuin-18.16.1/.cargo/audit.toml @@ -0,0 +1,9 @@ +[advisories] +ignore = [ + # This is a vuln on RSA. RSA is in our lockfile, but not in cargo-tree. + # It is a issue with sqlx/cargo, and does not affect Atuin. + # See: + # - https://github.com/launchbadge/sqlx/issues/3211 + # - https://github.com/rust-lang/cargo/issues/10801 + "RUSTSEC-2023-0071" +] diff --git a/reference/atuin-18.16.1/.claude/skills/hunk/SKILL.md b/reference/atuin-18.16.1/.claude/skills/hunk/SKILL.md new file mode 100755 index 0000000..6670322 --- /dev/null +++ b/reference/atuin-18.16.1/.claude/skills/hunk/SKILL.md @@ -0,0 +1,154 @@ +--- +name: hunk-review +description: Interacts with live Hunk diff review sessions via CLI. Inspects review focus, navigates files and hunks, reloads session contents, and adds inline review comments. Use when the user has a Hunk session running or wants to review diffs interactively. +--- + +# Hunk Review + +Hunk is an interactive terminal diff viewer. The TUI is for the user -- do NOT run `hunk diff`, `hunk show`, or other interactive commands directly. Use `hunk session *` CLI commands to inspect and control live sessions through the local daemon. + +If no session exists, ask the user to launch Hunk in their terminal first. + +## Workflow + +```text +1. hunk session list # find live sessions +2. hunk session get --repo . # inspect path / repo / source +3. hunk session review --repo . --json # inspect file/hunk structure first +4. hunk session review --repo . --include-patch --json # opt into raw diff text only when needed +5. hunk session context --repo . # check current focus when needed +6. hunk session navigate ... # move to the right place +7. hunk session reload -- # swap contents if needed +8. hunk session comment add ... # leave one review note +9. hunk session comment apply ... # apply many agent notes in one stdin batch +``` + +## Session selection + +Most session commands accept: + +- `--repo ` -- match the live session by its current loaded repo root (most common) +- `` -- match by exact ID (use when multiple sessions share a repo) +- If only one session exists, it auto-resolves + +`reload` also supports: + +- `--session-path ` -- match the live Hunk window by its current working directory +- `--source ` -- load the replacement `diff` / `show` command from a different directory + +Use `--source` only for advanced reloads where the live session you want to control is not already associated with the checkout you want to load next. For a normal worktree session, prefer selecting it directly with `--repo /path/to/worktree`. + +## Commands + +### Inspect + +```bash +hunk session list [--json] +hunk session get (--repo . | ) [--json] +hunk session context (--repo . | ) [--json] +hunk session review (--repo . | ) [--json] [--include-patch] +``` + +- `get` shows the session `Path`, `Repo`, and `Source`, which helps when choosing between `--repo` and `--session-path` +- `Repo` is what `--repo` matches; `Path` is what `--session-path` matches +- `review --json` returns file and hunk structure by default; add `--include-patch` only when a caller truly needs raw unified diff text + +### Navigate + +Absolute navigation requires `--file` and exactly one of `--hunk`, `--new-line`, or `--old-line`: + +```bash +hunk session navigate --repo . --file src/App.tsx --hunk 2 +hunk session navigate --repo . --file src/App.tsx --new-line 372 +hunk session navigate --repo . --file src/App.tsx --old-line 355 +``` + +Relative comment navigation jumps between annotated hunks and does not require `--file`: + +```bash +hunk session navigate --repo . --next-comment +hunk session navigate --repo . --prev-comment +``` + +- `--hunk ` is 1-based +- `--new-line` / `--old-line` are 1-based line numbers on that diff side +- Use either `--next-comment` or `--prev-comment`, not both + +### Reload + +Swaps the live session's contents. Pass a Hunk review command after `--`: + +```bash +hunk session reload --repo . -- diff +hunk session reload --repo . -- diff main...feature -- src/ui +hunk session reload --repo . -- show HEAD~1 +hunk session reload --repo . -- show HEAD~1 -- README.md +hunk session reload --repo /path/to/worktree -- diff +hunk session reload --session-path /path/to/live-window --source /path/to/other-checkout -- diff +``` + +- Always include `--` before the nested Hunk command +- `--repo` or `` usually selects the session you want +- `--source` is advanced: it does not select the session; it only changes where the replacement review command runs +- If the live session is already showing the target worktree, prefer `hunk session reload --repo /path/to/worktree -- diff` +- `--session-path` targets the live window when you need to keep session selection separate from reload source + +### Comments + +```bash +hunk session comment add --repo . --file README.md --new-line 103 --summary "Tighten this wording" [--rationale "..."] [--author "agent"] [--focus] +printf '%s\n' '{"comments":[{"filePath":"README.md","newLine":103,"summary":"Tighten this wording"}]}' | hunk session comment apply --repo . --stdin [--focus] +hunk session comment list --repo . [--file README.md] +hunk session comment rm --repo . +hunk session comment clear --repo . --yes [--file README.md] +``` + +- `comment add` is best for one note; `comment apply` is best when an agent already has several notes ready +- `comment add` requires `--file`, `--summary`, and exactly one of `--old-line` or `--new-line` +- `comment apply` payload items require `filePath`, `summary`, and exactly one target such as `hunk`, `hunkNumber`, `oldLine`, or `newLine` +- `comment apply` reads a JSON batch from stdin and validates the full batch before mutating the live session +- Pass `--focus` when you want to jump to the new note or the first note in a batch +- `comment list` and `comment clear` accept optional `--file` +- Quote `--summary` and `--rationale` defensively in the shell + +## New files in working-tree reviews + +`hunk diff` includes untracked files by default. If the user wants tracked changes only, reload with `--exclude-untracked`: + +```bash +hunk session reload --repo . -- diff --exclude-untracked +``` + +## Guiding a review + +The user may ask you to walk them through a changeset or review code using Hunk. Start with `hunk session review --json` to understand the file/hunk structure without inflating agent context, then use `--include-patch` only for the files you truly need to read in raw diff form. Use `context` and `navigate` to line up the user's current view before adding comments. + +Your role is to narrate: steer the user's view to what matters and leave comments that explain what they're looking at. + +Typical flow: + +1. Load the right content (`reload` if needed) +2. Navigate to the first interesting file / hunk +3. Add a comment explaining what's happening and why +4. If you already have several notes ready, prefer one `comment apply` batch over many separate shell invocations +5. Summarize when done + +Guidelines: + +- Work in the order that tells the clearest story, not necessarily file order +- Navigate before commenting so the user sees the code you're discussing +- Use `comment apply` for agent-generated batches and `comment add` for one-off notes +- Use `--focus` sparingly when the note itself should actively steer the review +- Keep comments focused: intent, structure, risks, or follow-ups +- Don't comment on every hunk -- highlight what the user wouldn't spot themselves + +## Common errors + +- **"No visible diff file matches ..."** -- the file is not in the loaded review. Check `context`, then `reload` if needed. +- **"No active Hunk sessions"** -- ask the user to open Hunk in their terminal. +- **"Multiple active sessions match"** -- pass `` explicitly. +- **"No active Hunk session matches session path ..."** -- for advanced split-path reloads, verify the live window `Path` via `hunk session get` or `list`, then use `--session-path`. +- **"Pass the replacement Hunk command after `--`"** -- include `--` before the nested `diff` / `show` command. +- **"Pass --stdin to read batch comments from stdin JSON."** -- `comment apply` only reads its batch payload from stdin. +- **"Specify exactly one navigation target"** -- pick one of `--hunk`, `--old-line`, or `--new-line`. +- **"Specify either --next-comment or --prev-comment, not both."** -- choose one comment-navigation direction. diff --git a/reference/atuin-18.16.1/.claude/skills/release/SKILL.md b/reference/atuin-18.16.1/.claude/skills/release/SKILL.md new file mode 100755 index 0000000..7884923 --- /dev/null +++ b/reference/atuin-18.16.1/.claude/skills/release/SKILL.md @@ -0,0 +1,269 @@ +--- +name: release +description: > + Orchestrate a multi-step Atuin CLI release — version bumping, changelog + generation, PR creation, tagging, and crates.io publishing. Invoke with + /release or /release . +disable-model-invocation: true +argument-hint: [version] +--- + +# Atuin CLI Release + +You are orchestrating a release of the Atuin CLI. Follow the steps below +**in order**, pausing at each checkpoint for user confirmation. Do not skip +steps or combine them. + +## Current State + +- Workspace version: !`sed -n '/^\[workspace\.package\]/,/^\[/s/^version = "\(.*\)"/\1/p' Cargo.toml` +- Latest tag: !`git describe --tags --abbrev=0 2>/dev/null || echo "none"` +- Suggested next version: !`git-cliff --bumped-version 2>/dev/null | sed 's/^v//' || echo "(unknown)"` + +--- + +## Step 1 — Check Dependencies + +Verify these tools are installed: `git`, `gsed`, `cargo`, `gh`, `git-cliff`. + +Use `command -v` for each. If any are missing, report which ones and stop. + +--- + +## Step 2 — Determine Version + +The target version may be provided as `$ARGUMENTS`. If it's empty, use +AskUserQuestion to ask for the new version (show the current state above +for reference). + +After determining the version: +- If it contains a `-` (e.g. `18.15.0-beta.1`), it is a **prerelease**. + Note this — it affects changelog and publish behavior later. +- Show the user: `current → new` and whether it's a prerelease. +- **Checkpoint:** Ask the user to confirm before proceeding. + +--- + +## Step 3 — Set Up Working Directory + +Clone a fresh copy into a temp directory: + +```bash +WORKDIR=$(mktemp -d) +git clone git@github.com:atuinsh/atuin.git "$WORKDIR" +``` + +Print the working directory path so the user can find it if needed. +All subsequent Bash commands run from `$WORKDIR`. + +--- + +## Step 4 — Create Branch & Update Versions + +1. Create a release branch named after the version (no `v` prefix): + `git checkout -b ` + +2. Replace the old version with the new one in all `Cargo.toml` files. + **Escape dots** in the old version so sed treats them literally: + + ```bash + VERSION_PATTERN="${OLD_VERSION//./\\.}" + find . -type f -name 'Cargo.toml' -not -path './.git/*' \ + -exec gsed -i "s/$VERSION_PATTERN/$NEW_VERSION/g" {} \; + ``` + +3. Run `cargo check` to update `Cargo.lock`. + +4. Show `git diff --stat` and the version-related lines from the diff: + ```bash + git diff --unified=0 -- '*.toml' | grep -E '^\+.*version' | grep -v '^\+\+\+' + ``` + +5. Verify the workspace version was actually updated by re-reading it + from `Cargo.toml`. + +6. **Checkpoint:** Show the diff summary and ask the user to confirm the + version changes look correct. + +--- + +## Step 5 — Update Changelog + +The changelog strategy differs for prereleases vs stable releases: + +- **Prerelease:** Maintain a running `## [unreleased]` section containing + all changes since the last stable release. Use: + `git-cliff --unreleased --strip all` + (cliff.toml's `ignore_tags` already ignores beta/alpha tags, so + `--unreleased` spans back to the last stable release automatically.) + +- **Stable release:** Generate a versioned entry that replaces the + `[unreleased]` section. Use: + `git-cliff --unreleased --tag "v" --strip all` + +Then update `CHANGELOG.md`: + +1. If an existing `## [unreleased]` or `## [Unreleased]` section exists, + **remove it entirely** (the heading and all content up to the next + `## ` heading). + +2. Insert the new entry before the first existing `## ` version heading. + +3. **Checkpoint:** Read and display the new changelog entry to the user. + Ask if they want any edits. If so, make the requested changes using + the Edit tool. Repeat until they're satisfied. + +--- + +## Step 6 — Commit & Push + +Stage all changes and commit: + +``` +chore(release): prepare for release +``` + +Push the branch with `--set-upstream origin`. + +--- + +## Step 7 — Create PR & Wait for Merge + +### Create the PR + +Extract the changelog entry body (everything between the new `## ` heading +and the next one) for the PR description. + +For prereleases, the heading to match is `## [unreleased]`. +For stable releases, it's `## ` (escape dots in the awk pattern). + +Create the PR: +```bash +gh pr create \ + --title "chore(release): prepare for release " \ + --body "" \ + --repo atuinsh/atuin +``` + +Show the PR URL to the user. + +### Wait for merge + +Start a **persistent Monitor** that polls the PR status every 30 seconds. +The monitor script must: +- **Only emit output** on meaningful state changes: all checks green, PR + merged, or PR closed. Silent polls keep the monitor quiet and avoid + flooding notifications. +- Handle transient API errors gracefully (don't crash on a single failure) +- Exit 0 on `MERGED`, exit 1 on `CLOSED` + +The rollup mixes two entry shapes: `CheckRun` entries use `status` + +`conclusion`, while `StatusContext` entries use `state`. A check counts +as "passing" when it's in a terminal state with a non-failing outcome. +Treat `SUCCESS`, `SKIPPED`, and `NEUTRAL` as passing — some release +workflows (e.g. `announce`, `build-global-artifacts`) are conditional +and report `SKIPPED` on non-tag events, which is expected, not a +failure. + +Example monitor script (substitute the actual PR number): +```bash +checks_passed=false +while true; do + json=$(gh pr view PR_NUM --repo atuinsh/atuin --json state,statusCheckRollup 2>/dev/null) || { sleep 30; continue; } + state=$(echo "$json" | jq -r '.state') + case "$state" in + MERGED) echo "PR #PR_NUM has been merged!"; exit 0 ;; + CLOSED) echo "PR #PR_NUM was closed without merging."; exit 1 ;; + esac + # Only notify once when all checks reach a terminal passing state. + # CheckRun entries carry `status`/`conclusion`; StatusContext entries + # carry `state`. SKIPPED and NEUTRAL count as passing. + if [ "$checks_passed" = false ]; then + counts=$(echo "$json" | jq -r ' + [.statusCheckRollup[]?] as $all + | ($all | map(select( + (.status == "COMPLETED" and (.conclusion | IN("SUCCESS","SKIPPED","NEUTRAL"))) + or .state == "SUCCESS" + )) | length) as $passing + | ($all | map(select( + (.status == "COMPLETED" and (.conclusion | IN("FAILURE","TIMED_OUT","CANCELLED","ACTION_REQUIRED","STALE"))) + or (.state | IN("FAILURE","ERROR")) + )) | length) as $failing + | "\($all | length) \($passing) \($failing)" + ' 2>/dev/null) + read -r total passing failing <<<"$counts" + if [ "${failing:-0}" -gt 0 ] 2>/dev/null; then + echo "PR #PR_NUM has $failing failing check(s) — investigate before merging." + checks_passed=true # don't re-notify + elif [ "${total:-0}" -gt 0 ] 2>/dev/null && [ "$total" = "$passing" ]; then + echo "All $total checks passed on PR #PR_NUM — ready to merge!" + checks_passed=true + fi + fi + sleep 30 +done +``` + +Tell the user to go review and merge the PR. While the monitor runs, you +can respond to other questions — the monitor notifications will arrive +asynchronously. + +When the monitor reports `MERGED`, proceed to the next step. +If it reports `CLOSED`, inform the user and stop the release. + +--- + +## Step 8 — Tag Release + +Back in the working directory: + +```bash +git checkout main +git pull +git tag "v" +git push --tags +``` + +Tell the user the tag was pushed and the release CI workflow has been +triggered. + +--- + +## Step 9 — Publish to crates.io + +**If this is a prerelease**, skip this step entirely and tell the user. + +**If this is a stable release**, ask the user whether to publish. + +If yes, publish each crate **in dependency order** using `--no-verify` +(the code already passed CI, and verification fails when crates.io +hasn't indexed a freshly-published dependency yet): + +``` +atuin-common, atuin-client, atuin-ai, atuin-dotfiles, atuin-history, +atuin-nucleo/matcher, atuin-nucleo, atuin-daemon, atuin-kv, +atuin-scripts, atuin-server-database, atuin-server-postgres, +atuin-server-sqlite, atuin-server, atuin-pty-proxy, atuin +``` + +For each crate, run from `crates/`: +```bash +cargo publish --no-verify 2>&1 +``` + +If it fails with "already uploaded", report it as a skip (not an error) — +some crates like `atuin-nucleo` are versioned independently and may +already be published at their current version. + +If it fails for any other reason, stop and report the error. + +--- + +## Completion + +Summarize what was done: +- Version released +- PR URL +- Tag name +- Which crates were published (if any) +- Working directory path and how to clean it up (`rm -rf`) diff --git a/reference/atuin-18.16.1/.codespellrc b/reference/atuin-18.16.1/.codespellrc new file mode 100755 index 0000000..bd9ada0 --- /dev/null +++ b/reference/atuin-18.16.1/.codespellrc @@ -0,0 +1,7 @@ +[codespell] +# Ref: https://github.com/codespell-project/codespell#using-a-config-file +skip = .git*,*.lock,.codespellrc,CODE_OF_CONDUCT.md,CONTRIBUTORS +check-hidden = true +# ignore-regex = +ignore-words-list = crate,ratatui,inbetween,iterm,fo,brunch + diff --git a/reference/atuin-18.16.1/.depot/workflows/codespell.yml b/reference/atuin-18.16.1/.depot/workflows/codespell.yml new file mode 100755 index 0000000..1ad4692 --- /dev/null +++ b/reference/atuin-18.16.1/.depot/workflows/codespell.yml @@ -0,0 +1,28 @@ +# Depot CI Migration +# Source: .github/workflows/codespell.yml +# +# No changes were necessary. + +# Codespell configuration is within .codespellrc +name: Codespell +on: + push: + branches: [main] + pull_request: + branches: [main] +permissions: + contents: read +jobs: + codespell: + name: Check for spelling errors + runs-on: depot-ubuntu-24.04 + steps: + - name: Checkout + uses: actions/checkout@v6 + - name: Codespell + uses: codespell-project/actions-codespell@v2 + with: + # This is regenerated from commit history + # we cannot rewrite commit history, and I'd rather not correct it + # every time + exclude_file: CHANGELOG.md diff --git a/reference/atuin-18.16.1/.depot/workflows/installer.yml b/reference/atuin-18.16.1/.depot/workflows/installer.yml new file mode 100755 index 0000000..da09ec5 --- /dev/null +++ b/reference/atuin-18.16.1/.depot/workflows/installer.yml @@ -0,0 +1,36 @@ +# Depot CI Migration +# Source: .github/workflows/installer.yml +# +# No changes were necessary. + +name: Install +on: + push: + branches: [main] + pull_request: + paths: .github/workflows/installer.yml +env: + CARGO_TERM_COLOR: always +jobs: + install: + strategy: + matrix: + os: [depot-ubuntu-24.04, macos-14] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v6 + - name: Install zsh for ubuntu + if: matrix.os == 'depot-ubuntu-24.04' + run: | + sudo apt install zsh + - name: Test install script on bash + run: | + /bin/bash -c "$(curl --proto '=https' --tlsv1.2 -sSf https://setup.atuin.sh)" + [ -d "$HOME/.atuin" ] && source $HOME/.atuin/bin/env + atuin --help + - name: Test install script on zsh + shell: zsh {0} + run: | + /bin/bash -c "$(curl --proto '=https' --tlsv1.2 -sSf https://setup.atuin.sh)" + [ -d "$HOME/.atuin" ] && source $HOME/.atuin/bin/env + atuin --help diff --git a/reference/atuin-18.16.1/.depot/workflows/nix.yml b/reference/atuin-18.16.1/.depot/workflows/nix.yml new file mode 100755 index 0000000..571688b --- /dev/null +++ b/reference/atuin-18.16.1/.depot/workflows/nix.yml @@ -0,0 +1,33 @@ +# Depot CI Migration +# Source: .github/workflows/nix.yml +# +# No changes were necessary. + +# Verify the Nix build is working +# Failures will usually occur due to an out of date Rust version +# That can be updated to the latest version in nixpkgs-unstable with `nix flake update` +name: Nix +on: + push: + branches: [main] + paths-ignore: + - 'ui/**' + pull_request: + branches: [main] + paths-ignore: + - 'ui/**' +jobs: + check: + runs-on: depot-ubuntu-24.04 + steps: + - uses: actions/checkout@v6 + - uses: cachix/install-nix-action@v31 + - name: Run nix flake check + run: nix flake check --print-build-logs + build-test: + runs-on: depot-ubuntu-24.04 + steps: + - uses: actions/checkout@v6 + - uses: cachix/install-nix-action@v31 + - name: Run nix build + run: nix build --print-build-logs diff --git a/reference/atuin-18.16.1/.depot/workflows/rust.yml b/reference/atuin-18.16.1/.depot/workflows/rust.yml new file mode 100755 index 0000000..8dfdad1 --- /dev/null +++ b/reference/atuin-18.16.1/.depot/workflows/rust.yml @@ -0,0 +1,187 @@ +# Depot CI Migration +# Source: .github/workflows/rust.yml +# +# No changes were necessary. + +name: Rust +on: + push: + branches: [main] + paths-ignore: + - "ui/**" + pull_request: + branches: [main] + paths-ignore: + - "ui/**" +env: + CARGO_TERM_COLOR: always +jobs: + build: + strategy: + matrix: + os: [depot-ubuntu-24.04, macos-14, windows-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v6 + - name: Install rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.94.0 + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-release-${{ hashFiles('**/Cargo.lock') }} + - name: Run cargo build common + run: cargo build -p atuin-common --locked --release + - name: Run cargo build client + run: cargo build -p atuin-client --locked --release + - name: Run cargo build server + run: cargo build -p atuin-server --locked --release + - name: Run cargo build main + run: cargo build --all --locked --release + cross-compile: + strategy: + matrix: + # There was an attempt to make cross-compiles also work on FreeBSD, but that failed with: + # + # warning: libelf.so.2, needed by <...>/libkvm.so, not found (try using -rpath or -rpath-link) + target: [x86_64-unknown-illumos] + runs-on: depot-ubuntu-24.04 + steps: + - uses: actions/checkout@v6 + - name: Install cross + uses: taiki-e/install-action@v2 + with: + tool: cross + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ matrix.target }}-cross-compile-${{ hashFiles('**/Cargo.lock') }} + - name: Run cross build common + run: cross build -p atuin-common --locked --target ${{ matrix.target }} + - name: Run cross build client + run: cross build -p atuin-client --locked --target ${{ matrix.target }} + - name: Run cross build server + run: cross build -p atuin-server --locked --target ${{ matrix.target }} + - name: Run cross build main + run: | + cross build --all --locked --target ${{ matrix.target }} + unit-test: + strategy: + matrix: + os: [depot-ubuntu-24.04, macos-14, windows-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v6 + - name: Install rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.94.0 + - uses: taiki-e/install-action@v2 + name: Install nextest + with: + tool: cargo-nextest + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.lock') }} + - name: Run cargo test + run: cargo nextest run --lib --bins + check: + strategy: + matrix: + os: [depot-ubuntu-24.04, macos-14, windows-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v6 + - name: Install rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.94.0 + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.lock') }} + - name: Run cargo check (all features) + run: cargo check --all-features --workspace + - name: Run cargo check (no features) + run: cargo check --no-default-features --workspace + - name: Run cargo check (sync) + run: cargo check --no-default-features --features sync --workspace + - name: Run cargo check (server) + run: cargo check -p atuin-server + - name: Run cargo check (client only) + run: cargo check --no-default-features --features client --workspace + integration-test: + runs-on: depot-ubuntu-24.04 + services: + postgres: + image: postgres + env: + POSTGRES_USER: atuin + POSTGRES_PASSWORD: pass + POSTGRES_DB: atuin + ports: + - 5432:5432 + steps: + - uses: actions/checkout@v6 + - name: Install rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.94.0 + - uses: taiki-e/install-action@v2 + name: Install nextest + with: + tool: cargo-nextest + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.lock') }} + - name: Run cargo test + run: cargo nextest run --test '*' + env: + ATUIN_DB_URI: postgres://atuin:pass@localhost:5432/atuin + clippy: + runs-on: depot-ubuntu-24.04 + steps: + - uses: actions/checkout@v6 + - name: Install latest rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.94.0 + components: clippy + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.lock') }} + - name: Run clippy + run: cargo clippy -- -D warnings -D clippy::redundant_clone + format: + runs-on: depot-ubuntu-24.04 + steps: + - uses: actions/checkout@v6 + - name: Install latest rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.94.0 + components: rustfmt + - name: Format + run: cargo fmt -- --check diff --git a/reference/atuin-18.16.1/.depot/workflows/shellcheck.yml b/reference/atuin-18.16.1/.depot/workflows/shellcheck.yml new file mode 100755 index 0000000..28c16c2 --- /dev/null +++ b/reference/atuin-18.16.1/.depot/workflows/shellcheck.yml @@ -0,0 +1,20 @@ +# Depot CI Migration +# Source: .github/workflows/shellcheck.yml +# +# No changes were necessary. + +name: Shellcheck +on: + push: + branches: [main] + pull_request: + branches: [main] +jobs: + shellcheck: + runs-on: depot-ubuntu-24.04 + steps: + - uses: actions/checkout@v6 + - name: Run shellcheck + uses: ludeeus/action-shellcheck@master + env: + SHELLCHECK_OPTS: "-e SC2148" diff --git a/reference/atuin-18.16.1/.depot/workflows/update-nix-deps.yml b/reference/atuin-18.16.1/.depot/workflows/update-nix-deps.yml new file mode 100755 index 0000000..96a35cd --- /dev/null +++ b/reference/atuin-18.16.1/.depot/workflows/update-nix-deps.yml @@ -0,0 +1,25 @@ +# Depot CI Migration +# Source: .github/workflows/update-nix-deps.yml +# +# No changes were necessary. + +name: Update Nix Deps +on: + workflow_dispatch: # allows manual triggering + schedule: + - cron: '0 0 1 * *' # runs monthly on the first day of the month at 00:00 +jobs: + lockfile: + runs-on: depot-ubuntu-24.04 + if: github.repository == 'atuinsh/atuin' + steps: + - name: Checkout repository + uses: actions/checkout@v6 + - name: Install Nix + uses: DeterminateSystems/nix-installer-action@main + - name: Update flake.lock + uses: DeterminateSystems/update-flake-lock@main + with: + pr-title: "chore(deps): update flake.lock" + pr-labels: | + dependencies diff --git a/reference/atuin-18.16.1/.dockerignore b/reference/atuin-18.16.1/.dockerignore new file mode 100755 index 0000000..91e4ecf --- /dev/null +++ b/reference/atuin-18.16.1/.dockerignore @@ -0,0 +1,2 @@ +./target +Dockerfile diff --git a/reference/atuin-18.16.1/.gitattributes b/reference/atuin-18.16.1/.gitattributes new file mode 100755 index 0000000..95eedf9 --- /dev/null +++ b/reference/atuin-18.16.1/.gitattributes @@ -0,0 +1,5 @@ +*.sh eol=lf +*.nix eol=lf +*.zsh eol=lf + +*.sql eol=lf diff --git a/reference/atuin-18.16.1/.github/DISCUSSION_TEMPLATE/support.yml b/reference/atuin-18.16.1/.github/DISCUSSION_TEMPLATE/support.yml new file mode 100755 index 0000000..5dd663e --- /dev/null +++ b/reference/atuin-18.16.1/.github/DISCUSSION_TEMPLATE/support.yml @@ -0,0 +1,84 @@ +body: + - type: input + attributes: + label: Operating System + description: What operating system are you using? + placeholder: "Example: macOS Big Sur" + validations: + required: true + + - type: input + attributes: + label: Shell + description: What shell are you using? + placeholder: "Example: zsh 5.8.1" + validations: + required: true + + - type: dropdown + attributes: + label: Version + description: What version of atuin are you running? + multiple: false + options: # how often will I forget to update this? a lot. + - v17.0.0 (Default) + - v16.0.0 + - v15.0.0 + - v14.0.1 + - v14.0.0 + - v13.0.1 + - v13.0.0 + - v12.0.0 + - v11.0.0 + - v0.10.0 + - v0.9.1 + - v0.9.0 + - v0.8.1 + - v0.8.0 + - v0.7.2 + - v0.7.1 + - v0.7.0 + - v0.6.4 + - v0.6.3 + default: 0 + validations: + required: true + + - type: checkboxes + attributes: + label: Self hosted + description: Are you self hosting atuin server? + options: + - label: I am self hosting atuin server + + - type: checkboxes + attributes: + label: Search the issues + description: Did you search the issues and discussions for your problem? + options: + - label: I checked that someone hasn't already asked about the same issue + required: true + + - type: textarea + attributes: + label: Behaviour + description: "Please describe the issue - what you expected to happen, what actually happened" + + - type: textarea + attributes: + label: Logs + description: "If possible, please include logs from atuin, especially if you self host the server - ATUIN_LOG=debug" + + - type: textarea + attributes: + label: Extra information + description: "Anything else you'd like to add?" + + - type: checkboxes + attributes: + label: Code of Conduct + description: The Code of Conduct helps create a safe space for everyone. We require + that everyone agrees to it. + options: + - label: I agree to follow this project's [Code of Conduct](https://github.com/atuinsh/atuin/blob/main/CODE_OF_CONDUCT.md) + required: true diff --git a/reference/atuin-18.16.1/.github/FUNDING.yml b/reference/atuin-18.16.1/.github/FUNDING.yml new file mode 100755 index 0000000..bbbb246 --- /dev/null +++ b/reference/atuin-18.16.1/.github/FUNDING.yml @@ -0,0 +1,13 @@ +# These are supported funding model platforms + +github: [atuinsh] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/reference/atuin-18.16.1/.github/ISSUE_TEMPLATE/bug.yaml b/reference/atuin-18.16.1/.github/ISSUE_TEMPLATE/bug.yaml new file mode 100755 index 0000000..d1b8e64 --- /dev/null +++ b/reference/atuin-18.16.1/.github/ISSUE_TEMPLATE/bug.yaml @@ -0,0 +1,39 @@ +name: Bug Report +description: File a bug report +title: "[Bug]: " +labels: ["bug", "triage"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + - type: textarea + id: what-expected + attributes: + label: What did you expect to happen? + placeholder: Tell us what you expected to see! + validations: + required: true + - type: textarea + id: what-happened + attributes: + label: What happened? + placeholder: Tell us what you see! + validations: + required: true + - type: textarea + id: doctor + validations: + required: true + attributes: + label: Atuin doctor output + description: Please run 'atuin doctor' and share the output. If it fails to run, share any errors. This requires Atuin >=v18.1.0 + render: yaml + - type: checkboxes + id: terms + attributes: + label: Code of Conduct + description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/atuinsh/atuin/blob/main/CODE_OF_CONDUCT.md) + options: + - label: I agree to follow this project's Code of Conduct + required: true diff --git a/reference/atuin-18.16.1/.github/dependabot.yml b/reference/atuin-18.16.1/.github/dependabot.yml new file mode 100755 index 0000000..6091393 --- /dev/null +++ b/reference/atuin-18.16.1/.github/dependabot.yml @@ -0,0 +1,19 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "cargo" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" + - package-ecosystem: "docker" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/reference/atuin-18.16.1/.github/pull_request_template.md b/reference/atuin-18.16.1/.github/pull_request_template.md new file mode 100755 index 0000000..a037ef0 --- /dev/null +++ b/reference/atuin-18.16.1/.github/pull_request_template.md @@ -0,0 +1,5 @@ + + +## Checks +- [ ] I am happy for maintainers to push small adjustments to this PR, to speed up the review cycle +- [ ] I have checked that there are no existing pull requests for the same thing diff --git a/reference/atuin-18.16.1/.github/workflows/codespell.yml b/reference/atuin-18.16.1/.github/workflows/codespell.yml new file mode 100755 index 0000000..d39dd87 --- /dev/null +++ b/reference/atuin-18.16.1/.github/workflows/codespell.yml @@ -0,0 +1,28 @@ +# Codespell configuration is within .codespellrc +--- +name: Codespell + +on: + push: + branches: [main] + pull_request: + branches: [main] + +permissions: + contents: read + +jobs: + codespell: + name: Check for spelling errors + runs-on: depot-ubuntu-24.04 + + steps: + - name: Checkout + uses: actions/checkout@v6 + - name: Codespell + uses: codespell-project/actions-codespell@v2 + with: + # This is regenerated from commit history + # we cannot rewrite commit history, and I'd rather not correct it + # every time + exclude_file: CHANGELOG.md diff --git a/reference/atuin-18.16.1/.github/workflows/docker.yaml b/reference/atuin-18.16.1/.github/workflows/docker.yaml new file mode 100755 index 0000000..9dd687c --- /dev/null +++ b/reference/atuin-18.16.1/.github/workflows/docker.yaml @@ -0,0 +1,61 @@ +name: build-docker + +on: + push: + branches: [main] + tags: + - 'v*' + +jobs: + publish: + concurrency: + group: ${{ github.ref }}-docker + cancel-in-progress: true + permissions: + packages: write + contents: read + id-token: write + + runs-on: depot-ubuntu-24.04 + steps: + - uses: actions/checkout@v6 + + - name: Get Repo Owner + id: get_repo_owner + run: echo "REPO_OWNER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" > $GITHUB_ENV + + - uses: depot/setup-action@v1 + + - name: Login to container Registry + uses: docker/login-action@v3 + with: + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + registry: ghcr.io + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ghcr.io/${{ env.REPO_OWNER }}/atuin + flavor: | + latest=false + tags: | + type=ref,event=branch + type=sha,prefix= + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Build and push + uses: depot/build-push-action@v1 + with: + push: true + platforms: linux/amd64,linux/arm64 + file: ./Dockerfile + context: . + provenance: false + build-args: | + Version=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] || 'dev' }} + GitCommit=${{ github.sha }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/reference/atuin-18.16.1/.github/workflows/installer.yml b/reference/atuin-18.16.1/.github/workflows/installer.yml new file mode 100755 index 0000000..c4c4aab --- /dev/null +++ b/reference/atuin-18.16.1/.github/workflows/installer.yml @@ -0,0 +1,38 @@ +name: Install + +on: + push: + branches: [main] + pull_request: + paths: .github/workflows/installer.yml + +env: + CARGO_TERM_COLOR: always + +jobs: + install: + strategy: + matrix: + os: [depot-ubuntu-24.04, macos-14] + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v6 + + - name: Install zsh for ubuntu + if: matrix.os == 'depot-ubuntu-24.04' + run: | + sudo apt install zsh + + - name: Test install script on bash + run: | + /bin/bash -c "$(curl --proto '=https' --tlsv1.2 -sSf https://setup.atuin.sh)" + [ -d "$HOME/.atuin" ] && source $HOME/.atuin/bin/env + atuin --help + + - name: Test install script on zsh + shell: zsh {0} + run: | + /bin/bash -c "$(curl --proto '=https' --tlsv1.2 -sSf https://setup.atuin.sh)" + [ -d "$HOME/.atuin" ] && source $HOME/.atuin/bin/env + atuin --help diff --git a/reference/atuin-18.16.1/.github/workflows/nix.yml b/reference/atuin-18.16.1/.github/workflows/nix.yml new file mode 100755 index 0000000..6e763d4 --- /dev/null +++ b/reference/atuin-18.16.1/.github/workflows/nix.yml @@ -0,0 +1,34 @@ +# Verify the Nix build is working +# Failures will usually occur due to an out of date Rust version +# That can be updated to the latest version in nixpkgs-unstable with `nix flake update` +name: Nix +on: + push: + branches: [ main ] + paths-ignore: + - 'ui/**' + pull_request: + branches: [ main ] + paths-ignore: + - 'ui/**' + +jobs: + check: + runs-on: depot-ubuntu-24.04 + + steps: + - uses: actions/checkout@v6 + - uses: cachix/install-nix-action@v31 + + - name: Run nix flake check + run: nix flake check --print-build-logs + + build-test: + runs-on: depot-ubuntu-24.04 + + steps: + - uses: actions/checkout@v6 + - uses: cachix/install-nix-action@v31 + + - name: Run nix build + run: nix build --print-build-logs diff --git a/reference/atuin-18.16.1/.github/workflows/release.yml b/reference/atuin-18.16.1/.github/workflows/release.yml new file mode 100755 index 0000000..d742a92 --- /dev/null +++ b/reference/atuin-18.16.1/.github/workflows/release.yml @@ -0,0 +1,304 @@ +# This file was autogenerated by dist: https://axodotdev.github.io/cargo-dist +# +# Copyright 2022-2024, axodotdev +# SPDX-License-Identifier: MIT or Apache-2.0 +# +# CI that: +# +# * checks for a Git Tag that looks like a release +# * builds artifacts with dist (archives, installers, hashes) +# * uploads those artifacts to temporary workflow zip +# * on success, uploads the artifacts to a GitHub Release +# +# Note that the GitHub Release will be created with a generated +# title/body based on your changelogs. + +name: Release +permissions: + "contents": "write" + +# This task will run whenever you push a git tag that looks like a version +# like "1.0.0", "v0.1.0-prerelease.1", "my-app/0.1.0", "releases/v1.0.0", etc. +# Various formats will be parsed into a VERSION and an optional PACKAGE_NAME, where +# PACKAGE_NAME must be the name of a Cargo package in your workspace, and VERSION +# must be a Cargo-style SemVer Version (must have at least major.minor.patch). +# +# If PACKAGE_NAME is specified, then the announcement will be for that +# package (erroring out if it doesn't have the given version or isn't dist-able). +# +# If PACKAGE_NAME isn't specified, then the announcement will be for all +# (dist-able) packages in the workspace with that version (this mode is +# intended for workspaces with only one dist-able package, or with all dist-able +# packages versioned/released in lockstep). +# +# If you push multiple tags at once, separate instances of this workflow will +# spin up, creating an independent announcement for each one. However, GitHub +# will hard limit this to 3 tags per commit, as it will assume more tags is a +# mistake. +# +# If there's a prerelease-style suffix to the version, then the release(s) +# will be marked as a prerelease. +on: + pull_request: + push: + tags: + - '**[0-9]+.[0-9]+.[0-9]+*' + +jobs: + # Run 'dist plan' (or host) to determine what tasks we need to do + plan: + runs-on: "ubuntu-22.04" + outputs: + val: ${{ steps.plan.outputs.manifest }} + tag: ${{ !github.event.pull_request && github.ref_name || '' }} + tag-flag: ${{ !github.event.pull_request && format('--tag={0}', github.ref_name) || '' }} + publishing: ${{ !github.event.pull_request }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + submodules: recursive + - name: Install dist + # we specify bash to get pipefail; it guards against the `curl` command + # failing. otherwise `sh` won't catch that `curl` returned non-0 + shell: bash + run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.31.0/cargo-dist-installer.sh | sh" + - name: Cache dist + uses: actions/upload-artifact@v6 + with: + name: cargo-dist-cache + path: ~/.cargo/bin/dist + # sure would be cool if github gave us proper conditionals... + # so here's a doubly-nested ternary-via-truthiness to try to provide the best possible + # functionality based on whether this is a pull_request, and whether it's from a fork. + # (PRs run on the *source* but secrets are usually on the *target* -- that's *good* + # but also really annoying to build CI around when it needs secrets to work right.) + - id: plan + run: | + dist ${{ (!github.event.pull_request && format('host --steps=create --tag={0}', github.ref_name)) || 'plan' }} --output-format=json > plan-dist-manifest.json + echo "dist ran successfully" + cat plan-dist-manifest.json + echo "manifest=$(jq -c "." plan-dist-manifest.json)" >> "$GITHUB_OUTPUT" + - name: "Upload dist-manifest.json" + uses: actions/upload-artifact@v6 + with: + name: artifacts-plan-dist-manifest + path: plan-dist-manifest.json + + # Build and packages all the platform-specific things + build-local-artifacts: + name: build-local-artifacts (${{ join(matrix.targets, ', ') }}) + # Let the initial task tell us to not run (currently very blunt) + needs: + - plan + if: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix.include != null && (needs.plan.outputs.publishing == 'true' || fromJson(needs.plan.outputs.val).ci.github.pr_run_mode == 'upload') }} + strategy: + fail-fast: false + # Target platforms/runners are computed by dist in create-release. + # Each member of the matrix has the following arguments: + # + # - runner: the github runner + # - dist-args: cli flags to pass to dist + # - install-dist: expression to run to install dist on the runner + # + # Typically there will be: + # - 1 "global" task that builds universal installers + # - N "local" tasks that build each platform's binaries and platform-specific installers + matrix: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix }} + runs-on: ${{ matrix.runner }} + container: ${{ matrix.container && matrix.container.image || null }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BUILD_MANIFEST_NAME: target/distrib/${{ join(matrix.targets, '-') }}-dist-manifest.json + permissions: + "attestations": "write" + "contents": "read" + "id-token": "write" + steps: + - name: enable windows longpaths + run: | + git config --global core.longpaths true + - uses: actions/checkout@v6 + with: + persist-credentials: false + submodules: recursive + - name: Install Rust non-interactively if not already installed + if: ${{ matrix.container }} + run: | + if ! command -v cargo > /dev/null 2>&1; then + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y + echo "$HOME/.cargo/bin" >> $GITHUB_PATH + fi + - name: Install dist + run: ${{ matrix.install_dist.run }} + # Get the dist-manifest + - name: Fetch local artifacts + uses: actions/download-artifact@v7 + with: + pattern: artifacts-* + path: target/distrib/ + merge-multiple: true + - name: Install dependencies + run: | + ${{ matrix.packages_install }} + - name: Build artifacts + run: | + # Actually do builds and make zips and whatnot + dist build ${{ needs.plan.outputs.tag-flag }} --print=linkage --output-format=json ${{ matrix.dist_args }} > dist-manifest.json + echo "dist ran successfully" + - name: Attest + uses: actions/attest-build-provenance@v3 + with: + subject-path: "target/distrib/*${{ join(matrix.targets, ', ') }}*" + - id: cargo-dist + name: Post-build + # We force bash here just because github makes it really hard to get values up + # to "real" actions without writing to env-vars, and writing to env-vars has + # inconsistent syntax between shell and powershell. + shell: bash + run: | + # Parse out what we just built and upload it to scratch storage + echo "paths<> "$GITHUB_OUTPUT" + dist print-upload-files-from-manifest --manifest dist-manifest.json >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + + cp dist-manifest.json "$BUILD_MANIFEST_NAME" + - name: "Upload artifacts" + uses: actions/upload-artifact@v6 + with: + name: artifacts-build-local-${{ join(matrix.targets, '_') }} + path: | + ${{ steps.cargo-dist.outputs.paths }} + ${{ env.BUILD_MANIFEST_NAME }} + + # Build and package all the platform-agnostic(ish) things + build-global-artifacts: + needs: + - plan + - build-local-artifacts + runs-on: "ubuntu-22.04" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BUILD_MANIFEST_NAME: target/distrib/global-dist-manifest.json + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + submodules: recursive + - name: Install cached dist + uses: actions/download-artifact@v7 + with: + name: cargo-dist-cache + path: ~/.cargo/bin/ + - run: chmod +x ~/.cargo/bin/dist + # Get all the local artifacts for the global tasks to use (for e.g. checksums) + - name: Fetch local artifacts + uses: actions/download-artifact@v7 + with: + pattern: artifacts-* + path: target/distrib/ + merge-multiple: true + - id: cargo-dist + shell: bash + run: | + dist build ${{ needs.plan.outputs.tag-flag }} --output-format=json "--artifacts=global" > dist-manifest.json + echo "dist ran successfully" + + # Parse out what we just built and upload it to scratch storage + echo "paths<> "$GITHUB_OUTPUT" + jq --raw-output ".upload_files[]" dist-manifest.json >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + + cp dist-manifest.json "$BUILD_MANIFEST_NAME" + - name: "Upload artifacts" + uses: actions/upload-artifact@v6 + with: + name: artifacts-build-global + path: | + ${{ steps.cargo-dist.outputs.paths }} + ${{ env.BUILD_MANIFEST_NAME }} + # Determines if we should publish/announce + host: + needs: + - plan + - build-local-artifacts + - build-global-artifacts + # Only run if we're "publishing", and only if plan, local and global didn't fail (skipped is fine) + if: ${{ always() && needs.plan.result == 'success' && needs.plan.outputs.publishing == 'true' && (needs.build-global-artifacts.result == 'skipped' || needs.build-global-artifacts.result == 'success') && (needs.build-local-artifacts.result == 'skipped' || needs.build-local-artifacts.result == 'success') }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + runs-on: "ubuntu-22.04" + outputs: + val: ${{ steps.host.outputs.manifest }} + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + submodules: recursive + - name: Install cached dist + uses: actions/download-artifact@v7 + with: + name: cargo-dist-cache + path: ~/.cargo/bin/ + - run: chmod +x ~/.cargo/bin/dist + # Fetch artifacts from scratch-storage + - name: Fetch artifacts + uses: actions/download-artifact@v7 + with: + pattern: artifacts-* + path: target/distrib/ + merge-multiple: true + - id: host + shell: bash + run: | + dist host ${{ needs.plan.outputs.tag-flag }} --steps=upload --steps=release --output-format=json > dist-manifest.json + echo "artifacts uploaded and released successfully" + cat dist-manifest.json + echo "manifest=$(jq -c "." dist-manifest.json)" >> "$GITHUB_OUTPUT" + - name: "Upload dist-manifest.json" + uses: actions/upload-artifact@v6 + with: + # Overwrite the previous copy + name: artifacts-dist-manifest + path: dist-manifest.json + # Create a GitHub Release while uploading all files to it + - name: "Download GitHub Artifacts" + uses: actions/download-artifact@v7 + with: + pattern: artifacts-* + path: artifacts + merge-multiple: true + - name: Cleanup + run: | + # Remove the granular manifests + rm -f artifacts/*-dist-manifest.json + - name: Create GitHub Release + env: + PRERELEASE_FLAG: "${{ fromJson(steps.host.outputs.manifest).announcement_is_prerelease && '--prerelease' || '' }}" + ANNOUNCEMENT_TITLE: "${{ fromJson(steps.host.outputs.manifest).announcement_title }}" + ANNOUNCEMENT_BODY: "${{ fromJson(steps.host.outputs.manifest).announcement_github_body }}" + RELEASE_COMMIT: "${{ github.sha }}" + run: | + # Write and read notes from a file to avoid quoting breaking things + echo "$ANNOUNCEMENT_BODY" > $RUNNER_TEMP/notes.txt + + gh release create "${{ needs.plan.outputs.tag }}" --target "$RELEASE_COMMIT" $PRERELEASE_FLAG --title "$ANNOUNCEMENT_TITLE" --notes-file "$RUNNER_TEMP/notes.txt" artifacts/* + + announce: + needs: + - plan + - host + # use "always() && ..." to allow us to wait for all publish jobs while + # still allowing individual publish jobs to skip themselves (for prereleases). + # "host" however must run to completion, no skipping allowed! + if: ${{ always() && needs.host.result == 'success' }} + runs-on: "ubuntu-22.04" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + submodules: recursive diff --git a/reference/atuin-18.16.1/.github/workflows/rust.yml b/reference/atuin-18.16.1/.github/workflows/rust.yml new file mode 100755 index 0000000..1941e0a --- /dev/null +++ b/reference/atuin-18.16.1/.github/workflows/rust.yml @@ -0,0 +1,230 @@ +name: Rust + +on: + push: + branches: [main] + paths-ignore: + - "ui/**" + pull_request: + branches: [main] + paths-ignore: + - "ui/**" + +env: + CARGO_TERM_COLOR: always + +jobs: + build: + strategy: + matrix: + os: [depot-ubuntu-24.04, macos-14, windows-latest] + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v6 + + - name: Install rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.95.0 + + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-release-${{ hashFiles('**/Cargo.lock') }} + + - name: Run cargo build common + run: cargo build -p atuin-common --locked --release + + - name: Run cargo build client + run: cargo build -p atuin-client --locked --release + + - name: Run cargo build server + run: cargo build -p atuin-server --locked --release + + - name: Run cargo build main + run: cargo build --all --locked --release + + cross-compile: + strategy: + matrix: + # There was an attempt to make cross-compiles also work on FreeBSD, but that failed with: + # + # warning: libelf.so.2, needed by <...>/libkvm.so, not found (try using -rpath or -rpath-link) + target: [x86_64-unknown-illumos] + runs-on: depot-ubuntu-24.04 + steps: + - uses: actions/checkout@v6 + + - name: Install cross + uses: taiki-e/install-action@v2 + with: + tool: cross + + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ matrix.target }}-cross-compile-${{ hashFiles('**/Cargo.lock') }} + + - name: Run cross build common + run: cross build -p atuin-common --locked --target ${{ matrix.target }} + + - name: Run cross build client + run: cross build -p atuin-client --locked --target ${{ matrix.target }} + + - name: Run cross build server + run: cross build -p atuin-server --locked --target ${{ matrix.target }} + + - name: Run cross build main + run: | + cross build --all --locked --target ${{ matrix.target }} + + unit-test: + strategy: + matrix: + os: [depot-ubuntu-24.04, macos-14, windows-latest] + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v6 + + - name: Install rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.95.0 + + - uses: taiki-e/install-action@v2 + name: Install nextest + with: + tool: cargo-nextest + + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.lock') }} + + - name: Run cargo test + run: cargo nextest run --lib --bins + + check: + strategy: + matrix: + os: [depot-ubuntu-24.04, macos-14, windows-latest] + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v6 + + - name: Install rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.95.0 + + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.lock') }} + + - name: Run cargo check (all features) + run: cargo check --all-features --workspace + + - name: Run cargo check (no features) + run: cargo check --no-default-features --workspace + + - name: Run cargo check (sync) + run: cargo check --no-default-features --features sync --workspace + + - name: Run cargo check (server) + run: cargo check -p atuin-server + + - name: Run cargo check (client only) + run: cargo check --no-default-features --features client --workspace + + integration-test: + runs-on: depot-ubuntu-24.04 + + services: + postgres: + image: postgres + env: + POSTGRES_USER: atuin + POSTGRES_PASSWORD: pass + POSTGRES_DB: atuin + ports: + - 5432:5432 + + steps: + - uses: actions/checkout@v6 + + - name: Install rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.95.0 + + - uses: taiki-e/install-action@v2 + name: Install nextest + with: + tool: cargo-nextest + + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.lock') }} + + - name: Run cargo test + run: cargo nextest run --test '*' + env: + ATUIN_DB_URI: postgres://atuin:pass@localhost:5432/atuin + + clippy: + runs-on: depot-ubuntu-24.04 + + steps: + - uses: actions/checkout@v6 + + - name: Install latest rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.95.0 + components: clippy + + - uses: actions/cache@v5 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.lock') }} + + - name: Run clippy + run: cargo clippy -- -D warnings -D clippy::redundant_clone + + format: + runs-on: depot-ubuntu-24.04 + + steps: + - uses: actions/checkout@v6 + + - name: Install latest rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.95.0 + components: rustfmt + + - name: Format + run: cargo fmt -- --check diff --git a/reference/atuin-18.16.1/.github/workflows/shellcheck.yml b/reference/atuin-18.16.1/.github/workflows/shellcheck.yml new file mode 100755 index 0000000..12abbeb --- /dev/null +++ b/reference/atuin-18.16.1/.github/workflows/shellcheck.yml @@ -0,0 +1,18 @@ +name: Shellcheck + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + shellcheck: + runs-on: depot-ubuntu-24.04 + + steps: + - uses: actions/checkout@v6 + - name: Run shellcheck + uses: ludeeus/action-shellcheck@master + env: + SHELLCHECK_OPTS: "-e SC2148" diff --git a/reference/atuin-18.16.1/.github/workflows/update-nix-deps.yml b/reference/atuin-18.16.1/.github/workflows/update-nix-deps.yml new file mode 100755 index 0000000..a6d65c4 --- /dev/null +++ b/reference/atuin-18.16.1/.github/workflows/update-nix-deps.yml @@ -0,0 +1,21 @@ +name: Update Nix Deps +on: + workflow_dispatch: # allows manual triggering + schedule: + - cron: '0 0 1 * *' # runs monthly on the first day of the month at 00:00 + +jobs: + lockfile: + runs-on: depot-ubuntu-24.04 + if: github.repository == 'atuinsh/atuin' + steps: + - name: Checkout repository + uses: actions/checkout@v6 + - name: Install Nix + uses: DeterminateSystems/nix-installer-action@main + - name: Update flake.lock + uses: DeterminateSystems/update-flake-lock@main + with: + pr-title: "chore(deps): update flake.lock" + pr-labels: | + dependencies diff --git a/reference/atuin-18.16.1/.gitignore b/reference/atuin-18.16.1/.gitignore new file mode 100755 index 0000000..78ae9ef --- /dev/null +++ b/reference/atuin-18.16.1/.gitignore @@ -0,0 +1,17 @@ +.DS_Store +/target +*/target +.env +.idea/ +.vscode/ +result +publish.sh +.envrc +.planning/ + +ui/backend/target +ui/backend/gen + +sqlite-server.db* + +.atuin/permissions.*.toml diff --git a/reference/atuin-18.16.1/.gitkeep b/reference/atuin-18.16.1/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/reference/atuin-18.16.1/.mailmap b/reference/atuin-18.16.1/.mailmap new file mode 100755 index 0000000..e408a9b --- /dev/null +++ b/reference/atuin-18.16.1/.mailmap @@ -0,0 +1,14 @@ +networkException +Violet Shreve +Chris Rose +Conrad Ludgate +Cristian Le +Dennis Trautwein +Ellie Huxtable +Ellie Huxtable +Frank Hamand +Jakob Schrettenbrunner +Nemo157 +Richard de Boer +Sandro +TymanWasTaken diff --git a/reference/atuin-18.16.1/.rustfmt.toml b/reference/atuin-18.16.1/.rustfmt.toml new file mode 100755 index 0000000..0e363b3 --- /dev/null +++ b/reference/atuin-18.16.1/.rustfmt.toml @@ -0,0 +1,4 @@ +reorder_imports = true +# uncomment once stable +#imports_granularity = "crate" +#group_imports = "StdExternalCrate" diff --git a/reference/claude-code-2.1.88-leak/.gitkeep b/reference/claude-code-2.1.88-leak/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/reference/claude-code-cli/.gitkeep b/reference/claude-code-cli/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/reference/claude-hud-0.0.12/.claude-plugin/marketplace.json b/reference/claude-hud-0.0.12/.claude-plugin/marketplace.json new file mode 100755 index 0000000..e953105 --- /dev/null +++ b/reference/claude-hud-0.0.12/.claude-plugin/marketplace.json @@ -0,0 +1,20 @@ +{ + "name": "claude-hud", + "owner": { + "name": "Jarrod Watts", + "email": "jarrodwattsyt@gmail.com" + }, + "metadata": { + "description": "Real-time statusline HUD for Claude Code - context health, tool activity, agent tracking, and todo progress", + "version": "0.0.12" + }, + "plugins": [ + { + "name": "claude-hud", + "source": "./", + "description": "Real-time statusline showing context usage, active tools, running agents, and todo progress. Always visible below your input, zero config required.", + "category": "monitoring", + "tags": ["hud", "statusline", "monitoring", "context", "tools", "agents", "todos"] + } + ] +} diff --git a/reference/claude-hud-0.0.12/.claude-plugin/plugin.json b/reference/claude-hud-0.0.12/.claude-plugin/plugin.json new file mode 100755 index 0000000..e416b20 --- /dev/null +++ b/reference/claude-hud-0.0.12/.claude-plugin/plugin.json @@ -0,0 +1,17 @@ +{ + "name": "claude-hud", + "description": "Real-time statusline HUD for Claude Code - context health, tool activity, agent tracking, and todo progress", + "version": "0.0.12", + "author": { + "name": "Jarrod Watts", + "url": "https://github.com/jarrodwatts" + }, + "commands": [ + "./commands/setup.md", + "./commands/configure.md" + ], + "homepage": "https://github.com/jarrodwatts/claude-hud", + "repository": "https://github.com/jarrodwatts/claude-hud", + "license": "MIT", + "keywords": ["hud", "monitoring", "statusline", "context", "tools", "agents", "todos", "claude-code"] +} diff --git a/reference/claude-hud-0.0.12/.editorconfig b/reference/claude-hud-0.0.12/.editorconfig new file mode 100755 index 0000000..c63be93 --- /dev/null +++ b/reference/claude-hud-0.0.12/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false diff --git a/reference/claude-hud-0.0.12/.github/CODEOWNERS b/reference/claude-hud-0.0.12/.github/CODEOWNERS new file mode 100755 index 0000000..0cc2fbf --- /dev/null +++ b/reference/claude-hud-0.0.12/.github/CODEOWNERS @@ -0,0 +1 @@ +* @jarrodwatts diff --git a/reference/claude-hud-0.0.12/.github/ISSUE_TEMPLATE/bug_report.md b/reference/claude-hud-0.0.12/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100755 index 0000000..2c923fb --- /dev/null +++ b/reference/claude-hud-0.0.12/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,21 @@ +--- +name: Bug report +about: Report a reproducible problem +labels: bug +--- + +## Summary + +## Steps to Reproduce + +## Expected Behavior + +## Actual Behavior + +## Environment + +- OS: +- Node/Bun version: +- Claude Code version: + +## Logs or Screenshots diff --git a/reference/claude-hud-0.0.12/.github/ISSUE_TEMPLATE/config.yml b/reference/claude-hud-0.0.12/.github/ISSUE_TEMPLATE/config.yml new file mode 100755 index 0000000..bff1611 --- /dev/null +++ b/reference/claude-hud-0.0.12/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Security report + url: mailto:jarrodwttsyt@gmail.com + about: Please report security vulnerabilities via email. diff --git a/reference/claude-hud-0.0.12/.github/ISSUE_TEMPLATE/feature_request.md b/reference/claude-hud-0.0.12/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100755 index 0000000..11235dd --- /dev/null +++ b/reference/claude-hud-0.0.12/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,15 @@ +--- +name: Feature request +about: Suggest an idea or enhancement +labels: enhancement +--- + +## Summary + +## Problem to Solve + +## Proposed Solution + +## Alternatives Considered + +## Additional Context diff --git a/reference/claude-hud-0.0.12/.github/dependabot.yml b/reference/claude-hud-0.0.12/.github/dependabot.yml new file mode 100755 index 0000000..4796d06 --- /dev/null +++ b/reference/claude-hud-0.0.12/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 5 diff --git a/reference/claude-hud-0.0.12/.github/pull_request_template.md b/reference/claude-hud-0.0.12/.github/pull_request_template.md new file mode 100755 index 0000000..a4362ad --- /dev/null +++ b/reference/claude-hud-0.0.12/.github/pull_request_template.md @@ -0,0 +1,11 @@ +## Summary + +## Testing + +- [ ] `npm test` +- [ ] `npm run test:coverage` + +## Checklist + +- [ ] Tests updated or not needed +- [ ] Docs updated if behavior changed diff --git a/reference/claude-hud-0.0.12/.github/workflows/build-dist.yml b/reference/claude-hud-0.0.12/.github/workflows/build-dist.yml new file mode 100755 index 0000000..8e192b1 --- /dev/null +++ b/reference/claude-hud-0.0.12/.github/workflows/build-dist.yml @@ -0,0 +1,42 @@ +name: Build dist + +on: + push: + branches: [main] + +concurrency: + group: build-dist + cancel-in-progress: false + +permissions: + contents: write + +jobs: + build: + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, '[auto]')" + + steps: + - uses: actions/checkout@v6 + with: + token: ${{ secrets.GITHUB_TOKEN }} + + - uses: actions/setup-node@v6 + with: + node-version: '20' + cache: 'npm' + + - run: npm ci + - run: npm test + - run: npm run build + + - name: Verify build output + run: test -f dist/index.js || exit 1 + + - name: Commit dist/ + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add dist/ --force + git diff --staged --quiet || git commit -m "build: compile dist/ [auto]" + git push diff --git a/reference/claude-hud-0.0.12/.github/workflows/ci.yml b/reference/claude-hud-0.0.12/.github/workflows/ci.yml new file mode 100755 index 0000000..ac2c4db --- /dev/null +++ b/reference/claude-hud-0.0.12/.github/workflows/ci.yml @@ -0,0 +1,23 @@ +name: CI + +on: + pull_request: + push: + branches: [main] + paths-ignore: + - 'dist/**' + +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [18.x, 20.x] + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 + with: + node-version: ${{ matrix.node-version }} + cache: npm + - run: npm ci + - run: npm run test:coverage diff --git a/reference/claude-hud-0.0.12/.github/workflows/claude.yml b/reference/claude-hud-0.0.12/.github/workflows/claude.yml new file mode 100755 index 0000000..5a35acc --- /dev/null +++ b/reference/claude-hud-0.0.12/.github/workflows/claude.yml @@ -0,0 +1,48 @@ +name: Claude Code + +on: + issue_comment: + types: [created] + pull_request_review_comment: + types: [created] + issues: + types: [opened, assigned] + pull_request_review: + types: [submitted] + +jobs: + claude: + if: | + (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) || + (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) || + (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) || + (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))) + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: read + issues: read + id-token: write + actions: read # Required for Claude to read CI results on PRs + steps: + - name: Checkout repository + uses: actions/checkout@v6 + with: + fetch-depth: 1 + + - name: Run Claude Code + id: claude + uses: anthropics/claude-code-action@v1 + with: + claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} + + # This is an optional setting that allows Claude to read CI results on PRs + additional_permissions: | + actions: read + + # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it. + # prompt: 'Update the pull request description to include a summary of changes.' + + # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md + claude_args: '--model claude-opus-4-5-20251101' + diff --git a/reference/claude-hud-0.0.12/.github/workflows/release.yml b/reference/claude-hud-0.0.12/.github/workflows/release.yml new file mode 100755 index 0000000..e65a385 --- /dev/null +++ b/reference/claude-hud-0.0.12/.github/workflows/release.yml @@ -0,0 +1,40 @@ +name: Release + +on: + push: + tags: + - "v*.*.*" + +permissions: + contents: write + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 + with: + node-version: 20.x + cache: npm + - run: npm ci + - run: npm run build + - run: npm test + - run: npm run test:coverage + - name: Extract release notes from CHANGELOG + run: | + version="${GITHUB_REF_NAME#v}" + awk -v version="$version" ' + $0 ~ "^## \\[" version "\\]" { in_section = 1; next } + in_section && $0 ~ "^## \\[" { exit } + in_section { print } + ' CHANGELOG.md > RELEASE_NOTES.md + + if [ ! -s RELEASE_NOTES.md ]; then + echo "No changelog section found for version $version" + exit 1 + fi + - name: Create release + uses: softprops/action-gh-release@v2 + with: + body_path: RELEASE_NOTES.md diff --git a/reference/claude-hud-0.0.12/.gitignore b/reference/claude-hud-0.0.12/.gitignore new file mode 100755 index 0000000..8d2fa88 --- /dev/null +++ b/reference/claude-hud-0.0.12/.gitignore @@ -0,0 +1,59 @@ +# Dependencies +node_modules/ + +# Build artifacts +# dist/ is gitignored but exists on main - CI builds and commits it after each merge. +# See .github/workflows/build-dist.yml +dist/ +*.tsbuildinfo + +# Logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids/ +*.pid +*.seed +*.fifo + +# OS files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# IDE +.idea/ +.vscode/ +*.swp +*.swo +*~ + +# Environment/secrets (safety) +.env +.env.* +.claude/settings.json +.claude/*.local.json +*.pem +*.key +secrets/ +credentials/ + +# Test coverage +coverage/ +.nyc_output/ + +# Temp files +tmp/ +temp/ +*.tmp + +# Lock files (keep package-lock.json for npm) +yarn.lock +bun.lock diff --git a/reference/claude-hud-0.0.12/.gitkeep b/reference/claude-hud-0.0.12/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/reference/hermes-agent-2026.5.16/.dockerignore b/reference/hermes-agent-2026.5.16/.dockerignore new file mode 100755 index 0000000..f4a0248 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.dockerignore @@ -0,0 +1,31 @@ +# Git +.git +.gitignore +.gitmodules + +# Dependencies +node_modules +**/node_modules +.venv +**/.venv + +# Built artifacts that are regenerated inside the image. Excluded so local +# rebuilds on the developer's machine don't invalidate the npm-install layer +# that now depends on the full ui-tui/packages/hermes-ink/ tree being present. +ui-tui/dist/ +ui-tui/packages/hermes-ink/dist/ + +# CI/CD +.github + +# Environment files +.env + +*.md + +# Runtime data (bind-mounted at /opt/data; must not leak into build context) +data/ + +# Compose/profile runtime state (bind-mounted; avoid ownership/secret issues) +hermes-config/ +runtime/ diff --git a/reference/hermes-agent-2026.5.16/.env.example b/reference/hermes-agent-2026.5.16/.env.example new file mode 100755 index 0000000..812986d --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.env.example @@ -0,0 +1,469 @@ +# Hermes Agent Environment Configuration +# Copy this file to .env and fill in your API keys + +# ============================================================================= +# LLM PROVIDER (OpenRouter) +# ============================================================================= +# OpenRouter provides access to many models through one API +# All LLM calls go through OpenRouter - no direct provider keys needed +# Get your key at: https://openrouter.ai/keys +# OPENROUTER_API_KEY= + +# Default model is configured in ~/.hermes/config.yaml (model.default). +# Use 'hermes model' or 'hermes setup' to change it. +# LLM_MODEL is no longer read from .env — this line is kept for reference only. +# LLM_MODEL=anthropic/claude-opus-4.6 + +# ============================================================================= +# LLM PROVIDER (NovitaAI) +# ============================================================================= +# NovitaAI — 90+ models, pay-per-use +# Get your key at: https://novita.ai/settings/key-management +# NOVITA_API_KEY= +# NOVITA_BASE_URL=https://api.novita.ai/openai/v1 # Override default base URL + +# ============================================================================= +# LLM PROVIDER (Google AI Studio / Gemini) +# ============================================================================= +# Native Gemini API via Google's OpenAI-compatible endpoint. +# Get your key at: https://aistudio.google.com/app/apikey +# GOOGLE_API_KEY=your_google_ai_studio_key_here +# GEMINI_API_KEY=your_gemini_key_here # alias for GOOGLE_API_KEY +# Optional base URL override (default: Google's OpenAI-compatible endpoint) +# GEMINI_BASE_URL=https://generativelanguage.googleapis.com/v1beta/openai + +# ============================================================================= +# LLM PROVIDER (Ollama Cloud) +# ============================================================================= +# Cloud-hosted open models via Ollama's OpenAI-compatible endpoint. +# Get your key at: https://ollama.com/settings +# OLLAMA_API_KEY=your_ollama_key_here +# Optional base URL override (default: https://ollama.com/v1) +# OLLAMA_BASE_URL=https://ollama.com/v1 + +# ============================================================================= +# LLM PROVIDER (z.ai / GLM) +# ============================================================================= +# z.ai provides access to ZhipuAI GLM models (GLM-4-Plus, etc.) +# Get your key at: https://z.ai or https://open.bigmodel.cn +# GLM_API_KEY= +# GLM_BASE_URL=https://api.z.ai/api/paas/v4 # Override default base URL + +# ============================================================================= +# LLM PROVIDER (Kimi / Moonshot) +# ============================================================================= +# Kimi Code provides access to Moonshot AI coding models (kimi-k2.5, etc.) +# Get your key at: https://platform.kimi.ai (Kimi Code console) +# Keys prefixed sk-kimi- use the Kimi Code API (api.kimi.com) by default. +# Legacy keys from platform.moonshot.ai need KIMI_BASE_URL override below. +# KIMI_API_KEY= +# KIMI_BASE_URL=https://api.kimi.com/coding/v1 # Default for sk-kimi- keys +# KIMI_BASE_URL=https://api.moonshot.ai/v1 # For legacy Moonshot keys +# KIMI_BASE_URL=https://api.moonshot.cn/v1 # For Moonshot China keys +# KIMI_CN_API_KEY= # Dedicated Moonshot China key + +# ============================================================================= +# LLM PROVIDER (Arcee AI) +# ============================================================================= +# Arcee AI provides access to Trinity models (trinity-mini, trinity-large-*) +# Get an Arcee key at: https://chat.arcee.ai/ +# ARCEEAI_API_KEY= +# ARCEE_BASE_URL= # Override default base URL + +# ============================================================================= +# LLM PROVIDER (MiniMax) +# ============================================================================= +# MiniMax provides access to MiniMax models (global endpoint) +# Get your key at: https://www.minimax.io +# MINIMAX_API_KEY= +# MINIMAX_BASE_URL=https://api.minimax.io/v1 # Override default base URL + +# MiniMax China endpoint (for users in mainland China) +# MINIMAX_CN_API_KEY= +# MINIMAX_CN_BASE_URL=https://api.minimaxi.com/v1 # Override default base URL + +# ============================================================================= +# LLM PROVIDER (OpenCode Zen) +# ============================================================================= +# OpenCode Zen provides curated, tested models (GPT, Claude, Gemini, MiniMax, GLM, Kimi) +# Pay-as-you-go pricing. Get your key at: https://opencode.ai/auth +# OPENCODE_ZEN_API_KEY= +# OPENCODE_ZEN_BASE_URL=https://opencode.ai/zen/v1 # Override default base URL + +# ============================================================================= +# LLM PROVIDER (OpenCode Go) +# ============================================================================= +# OpenCode Go provides access to open models (GLM-5, Kimi K2.5, MiniMax M2.5) +# $10/month subscription. Get your key at: https://opencode.ai/auth +# OPENCODE_GO_API_KEY= + +# ============================================================================= +# LLM PROVIDER (Hugging Face Inference Providers) +# ============================================================================= +# Hugging Face routes to 20+ open models via unified OpenAI-compatible endpoint. +# Free tier included ($0.10/month), no markup on provider rates. +# Get your token at: https://huggingface.co/settings/tokens +# Required permission: "Make calls to Inference Providers" +# HF_TOKEN= +# OPENCODE_GO_BASE_URL=https://opencode.ai/zen/go/v1 # Override default base URL + +# ============================================================================= +# LLM PROVIDER (Qwen OAuth) +# ============================================================================= +# Qwen OAuth reuses your local Qwen CLI login (qwen auth qwen-oauth). +# No API key needed — credentials come from ~/.qwen/oauth_creds.json. +# Optional base URL override: +# HERMES_QWEN_BASE_URL=https://portal.qwen.ai/v1 + +# ============================================================================= +# LLM PROVIDER (Xiaomi MiMo) +# ============================================================================= +# Xiaomi MiMo models (mimo-v2-pro, mimo-v2-omni, mimo-v2-flash). +# Get your key at: https://platform.xiaomimimo.com +# XIAOMI_API_KEY=your_key_here +# Optional base URL override: +# XIAOMI_BASE_URL=https://api.xiaomimimo.com/v1 + +# ============================================================================= +# TOOL API KEYS +# ============================================================================= + +# Exa API Key - AI-native web search and contents +# Get at: https://exa.ai +# EXA_API_KEY= + +# Parallel API Key - AI-native web search and extract +# Get at: https://parallel.ai +# PARALLEL_API_KEY= + +# Firecrawl API Key - Web search, extract, and crawl +# Get at: https://firecrawl.dev/ +# FIRECRAWL_API_KEY= + + +# FAL.ai API Key - Image generation +# Get at: https://fal.ai/ +# FAL_KEY= + +# Honcho - Cross-session AI-native user modeling (optional) +# Builds a persistent understanding of the user across sessions and tools. +# Get at: https://app.honcho.dev +# Also requires ~/.honcho/config.json with enabled=true (see README). +# HONCHO_API_KEY= + +# ============================================================================= +# HYPERLIQUID OPTIONAL SKILL +# ============================================================================= +# Optional defaults for the Hyperliquid skill in optional-skills/blockchain/hyperliquid +# +# Hyperliquid API base URL override +# Default: https://api.hyperliquid.xyz +# HYPERLIQUID_API_URL=https://api.hyperliquid-testnet.xyz +# +# Default address for account-level commands like state, fills, orders, and review +# HYPERLIQUID_USER_ADDRESS=0x0000000000000000000000000000000000000000 + +# ============================================================================= +# TERMINAL TOOL CONFIGURATION +# ============================================================================= +# Backend type: "local", "singularity", "docker", "modal", or "ssh" +# Terminal backend is configured in ~/.hermes/config.yaml (terminal.backend). +# Use 'hermes setup' or 'hermes config set terminal.backend docker' to change. +# Supported: local, docker, singularity, modal, ssh +# +# Only override here if you need to force a backend without touching config.yaml: +# TERMINAL_ENV=local + +# Override the container runtime binary (e.g. to use Podman instead of Docker). +# Useful on systems where Docker's storage driver is broken or unavailable. +# HERMES_DOCKER_BINARY=/usr/local/bin/podman + +# Container images (for singularity/docker/modal backends) +# TERMINAL_DOCKER_IMAGE=nikolaik/python-nodejs:python3.11-nodejs20 +# TERMINAL_SINGULARITY_IMAGE=docker://nikolaik/python-nodejs:python3.11-nodejs20 +TERMINAL_MODAL_IMAGE=nikolaik/python-nodejs:python3.11-nodejs20 + + +# Working directory for terminal commands +# For local backend: "." means current directory (resolved automatically) +# For remote backends (ssh/docker/modal/singularity): use an absolute path +# INSIDE the target environment, or leave unset for the backend's default +# (/root for modal, / for docker, ~ for ssh). Do NOT use a host-local path. +# Usually managed by config.yaml (terminal.cwd) — uncomment to override +# TERMINAL_CWD=. + +# Default command timeout in seconds +TERMINAL_TIMEOUT=60 + +# Cleanup inactive environments after this many seconds +TERMINAL_LIFETIME_SECONDS=300 + +# ============================================================================= +# SSH REMOTE EXECUTION (for TERMINAL_ENV=ssh) +# ============================================================================= +# Run terminal commands on a remote server via SSH. +# Agent code stays on your machine, commands execute remotely. +# +# SECURITY BENEFITS: +# - Agent cannot read your .env file (API keys protected) +# - Agent cannot modify its own code +# - Remote server acts as isolated sandbox +# - Can safely configure passwordless sudo on remote +# +# TERMINAL_SSH_HOST=192.168.1.100 +# TERMINAL_SSH_USER=agent +# TERMINAL_SSH_PORT=22 +# TERMINAL_SSH_KEY=~/.ssh/id_rsa + +# ============================================================================= +# SUDO SUPPORT (works with ALL terminal backends) +# ============================================================================= +# If set, enables sudo commands by piping password via `sudo -S`. +# Works with: local, docker, singularity, modal, and ssh backends. +# +# SECURITY WARNING: Password stored in plaintext. Only use on trusted machines. +# +# ALTERNATIVES: +# - For SSH backend: Configure passwordless sudo on the remote server +# - For containers: Run as root inside the container (no sudo needed) +# - For local: Configure /etc/sudoers for specific commands +# - For CLI: Leave unset - you'll be prompted interactively with 45s timeout +# +# SUDO_PASSWORD=your_password_here + +# ============================================================================= +# MODAL CLOUD BACKEND (Optional - for TERMINAL_ENV=modal) +# ============================================================================= +# Modal uses CLI authentication, not environment variables. +# Run: pip install modal && modal setup +# This will authenticate via browser and store credentials locally. +# No API key needed in .env - Modal handles auth automatically. + +# ============================================================================= +# BROWSER TOOL CONFIGURATION (agent-browser + Browserbase) +# ============================================================================= +# Browser automation requires Browserbase cloud service for remote browser execution. +# This allows the agent to navigate websites, fill forms, and extract information. +# +# STEALTH MODES: +# - Basic Stealth: ALWAYS active (random fingerprints, auto CAPTCHA solving) +# - Advanced Stealth: Requires BROWSERBASE_ADVANCED_STEALTH=true (Scale Plan only) + +# Browserbase API Key - Cloud browser execution +# Get at: https://browserbase.com/ +# BROWSERBASE_API_KEY= + +# Browserbase Project ID - From your Browserbase dashboard +# BROWSERBASE_PROJECT_ID= + +# Enable residential proxies for better CAPTCHA solving (default: true) +# Routes traffic through residential IPs, significantly improves success rate +BROWSERBASE_PROXIES=true + +# Enable advanced stealth mode (default: false, requires Scale Plan) +# Uses custom Chromium build to avoid bot detection altogether +BROWSERBASE_ADVANCED_STEALTH=false + +# Browser engine for local mode (default: auto = Chrome) +# "auto" — use Chrome (don't pass --engine flag) +# "lightpanda" — use Lightpanda (1.3-5.8x faster navigation, no screenshots) +# "chrome" — explicitly request Chrome +# Requires agent-browser v0.25.3+. Lightpanda commands that fail or return +# empty results are automatically retried with Chrome. +# Also configurable via browser.engine in config.yaml. +# AGENT_BROWSER_ENGINE=auto + +# Browser session timeout in seconds (default: 300) +# Sessions are cleaned up after this duration of inactivity +BROWSER_SESSION_TIMEOUT=300 + +# Browser inactivity timeout - auto-cleanup inactive sessions (default: 120 = 2 min) +# Browser sessions are automatically closed after this period of no activity +BROWSER_INACTIVITY_TIMEOUT=120 + +# Extra Chromium launch flags passed to agent-browser, comma- or newline-separated. +# Hermes auto-injects "--no-sandbox,--disable-dev-shm-usage" when it detects root +# or AppArmor-restricted unprivileged user namespaces (Ubuntu 23.10+, DGX Spark, +# many container images), so leave this unset unless you need extra flags. +# Setting this disables the auto-injection. +# AGENT_BROWSER_ARGS=--no-sandbox + +# Camofox local anti-detection browser (Camoufox-based Firefox). +# Set CAMOFOX_URL to route the browser tools through a local Camofox server +# instead of agent-browser/Browserbase. See docs/user-guide/features/browser.md. +# CAMOFOX_URL=http://localhost:9377 + +# Externally managed Camofox sessions — when another app owns the visible +# Camofox browser, set these so Hermes shares the same userId/profile instead +# of creating its own isolated session. +# CAMOFOX_USER_ID= +# CAMOFOX_SESSION_KEY= +# Set to true to reuse an already-open Camofox tab for this identity before +# creating a new one (useful for gateway restarts). +# CAMOFOX_ADOPT_EXISTING_TAB=false + +# ============================================================================= +# SESSION LOGGING +# ============================================================================= +# Session trajectories are automatically saved to logs/ directory +# Format: logs/session_YYYYMMDD_HHMMSS_UUID.json +# Contains full conversation history in trajectory format for debugging/replay + +# ============================================================================= +# VOICE TRANSCRIPTION & OPENAI TTS +# ============================================================================= +# Required for voice message transcription (Whisper) and OpenAI TTS voices. +# Uses OpenAI's API directly (not via OpenRouter). +# Named VOICE_TOOLS_OPENAI_KEY to avoid interference with OpenRouter. +# Get at: https://platform.openai.com/api-keys +# VOICE_TOOLS_OPENAI_KEY= + +# ============================================================================= +# SLACK INTEGRATION +# ============================================================================= +# Slack Bot Token - From Slack App settings (OAuth & Permissions) +# Get at: https://api.slack.com/apps +# SLACK_BOT_TOKEN=xoxb-... + +# Slack App Token - For Socket Mode (App-Level Tokens in Slack App settings) +# SLACK_APP_TOKEN=xapp-... + +# Slack allowed users (comma-separated Slack user IDs) +# SLACK_ALLOWED_USERS= + +# ============================================================================= +# TELEGRAM INTEGRATION +# ============================================================================= +# Telegram Bot Token - From @BotFather (https://t.me/BotFather) +# TELEGRAM_BOT_TOKEN= +# TELEGRAM_ALLOWED_USERS= # Comma-separated user IDs +# TELEGRAM_HOME_CHANNEL= # Default chat for cron delivery +# TELEGRAM_HOME_CHANNEL_NAME= # Display name for home channel + +# Webhook mode (optional — for cloud deployments like Fly.io/Railway) +# Default is long polling. Setting TELEGRAM_WEBHOOK_URL switches to webhook mode. +# TELEGRAM_WEBHOOK_URL=https://my-app.fly.dev/telegram +# TELEGRAM_WEBHOOK_PORT=8443 +# TELEGRAM_WEBHOOK_SECRET= # Recommended for production + +# WhatsApp (built-in Baileys bridge — run `hermes whatsapp` to pair) +# WHATSAPP_ENABLED=false +# WHATSAPP_ALLOWED_USERS=15551234567 + +# Email (IMAP/SMTP — send and receive emails as Hermes) +# For Gmail: enable 2FA → create App Password at https://myaccount.google.com/apppasswords +# EMAIL_ADDRESS=hermes@gmail.com +# EMAIL_PASSWORD=xxxx xxxx xxxx xxxx +# EMAIL_IMAP_HOST=imap.gmail.com +# EMAIL_IMAP_PORT=993 +# EMAIL_SMTP_HOST=smtp.gmail.com +# EMAIL_SMTP_PORT=587 +# EMAIL_POLL_INTERVAL=15 +# EMAIL_ALLOWED_USERS=your@email.com +# EMAIL_HOME_ADDRESS=your@email.com + +# Gateway-wide: allow ALL users without an allowlist (default: false = deny) +# Only set to true if you intentionally want open access. +# GATEWAY_ALLOW_ALL_USERS=false + +# ============================================================================= +# RESPONSE PACING +# ============================================================================= +# Human-like delays between message chunks on messaging platforms. +# Makes the bot feel less robotic. +# HERMES_HUMAN_DELAY_MODE=off # off | natural | custom +# HERMES_HUMAN_DELAY_MIN_MS=800 # Min delay in ms (custom mode) +# HERMES_HUMAN_DELAY_MAX_MS=2500 # Max delay in ms (custom mode) + +# ============================================================================= +# DEBUG OPTIONS +# ============================================================================= +WEB_TOOLS_DEBUG=false +VISION_TOOLS_DEBUG=false +MOA_TOOLS_DEBUG=false +IMAGE_TOOLS_DEBUG=false + +# ============================================================================= +# CONTEXT COMPRESSION (Auto-shrinks long conversations) +# ============================================================================= +# When conversation approaches model's context limit, middle turns are +# automatically summarized to free up space. +# +# Context compression is configured in ~/.hermes/config.yaml under compression: +# CONTEXT_COMPRESSION_ENABLED=true # Enable auto-compression (default: true) +# CONTEXT_COMPRESSION_THRESHOLD=0.85 # Compress at 85% of context limit +# Model is set via compression.summary_model in config.yaml (default: google/gemini-3-flash-preview) + +# ============================================================================= +# SKILLS HUB (GitHub integration for skill search/install/publish) +# ============================================================================= + +# GitHub Personal Access Token — for higher API rate limits on skill search/install +# Get at: https://github.com/settings/tokens (Fine-grained recommended) +# GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx + +# GitHub App credentials (optional — for bot identity on PRs) +# GITHUB_APP_ID= +# GITHUB_APP_PRIVATE_KEY_PATH= +# GITHUB_APP_INSTALLATION_ID= + +# Groq API key (free tier — used for Whisper STT in voice mode) +# GROQ_API_KEY= + +# ============================================================================= +# STT PROVIDER SELECTION +# ============================================================================= +# Default STT provider is "local" (faster-whisper) — runs on your machine, no API key needed. +# Install with: pip install faster-whisper +# Model downloads automatically on first use (~150 MB for "base"). +# To use cloud providers instead, set GROQ_API_KEY or VOICE_TOOLS_OPENAI_KEY above. +# Provider priority: local > groq > openai +# Configure in config.yaml: stt.provider: local | groq | openai + +# ============================================================================= +# STT ADVANCED OVERRIDES (optional) +# ============================================================================= +# Override default STT models per provider (normally set via stt.model in config.yaml) +# STT_GROQ_MODEL=whisper-large-v3-turbo +# STT_OPENAI_MODEL=whisper-1 + +# Override STT provider endpoints (for proxies or self-hosted instances) +# GROQ_BASE_URL=https://api.groq.com/openai/v1 +# STT_OPENAI_BASE_URL=https://api.openai.com/v1 + +# ============================================================================= +# MICROSOFT TEAMS INTEGRATION +# ============================================================================= +# Register a Bot in Azure: https://dev.botframework.com/ → "Register a bot" +# Or use Azure Portal: Azure Active Directory → App registrations → New registration +# Then add the bot to Teams via the Bot Framework or App Studio. +# +# TEAMS_CLIENT_ID= # Azure AD App (client) ID +# TEAMS_CLIENT_SECRET= # Azure AD client secret value +# TEAMS_TENANT_ID= # Azure AD tenant ID (or "common" for multi-tenant) +# TEAMS_ALLOWED_USERS= # Comma-separated AAD object IDs or UPNs +# TEAMS_ALLOW_ALL_USERS=false # Set true to skip the allowlist +# TEAMS_HOME_CHANNEL= # Default channel/chat ID for cron delivery +# TEAMS_HOME_CHANNEL_NAME= # Display name for the home channel +# TEAMS_PORT=3978 # Webhook listen port (Bot Framework default) + +# ============================================================================= +# GOOGLE CHAT INTEGRATION +# ============================================================================= +# Connects via Cloud Pub/Sub pull subscription (no public URL required). +# Setup walkthrough: website/docs/user-guide/messaging/google_chat.md. +# 1. Create a GCP project, enable the Google Chat API and Cloud Pub/Sub. +# 2. Create a Service Account with roles/pubsub.subscriber on the +# subscription (NOT project-wide); download the JSON key. +# 3. Configure your Chat app at console.cloud.google.com/apis/credentials +# → Google Chat API → Configuration → Cloud Pub/Sub topic. +# 4. (Optional, for native attachment delivery) Each user runs +# `/setup-files` once in their own DM after Pub/Sub is wired up. +# +# GOOGLE_CHAT_PROJECT_ID= # GCP project hosting the topic (or set GOOGLE_CLOUD_PROJECT) +# GOOGLE_CHAT_SUBSCRIPTION_NAME= # Full path: projects//subscriptions/ +# GOOGLE_CHAT_SERVICE_ACCOUNT_JSON= # Path to SA JSON (or set GOOGLE_APPLICATION_CREDENTIALS) +# GOOGLE_CHAT_ALLOWED_USERS= # Comma-separated emails allowed to talk to the bot +# GOOGLE_CHAT_ALLOW_ALL_USERS=false # Set true to skip the allowlist +# GOOGLE_CHAT_HOME_CHANNEL= # Default space (spaces/XXXX) for cron delivery +# GOOGLE_CHAT_HOME_CHANNEL_NAME= # Display name for the home channel diff --git a/reference/hermes-agent-2026.5.16/.envrc b/reference/hermes-agent-2026.5.16/.envrc new file mode 100755 index 0000000..45c5952 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.envrc @@ -0,0 +1,5 @@ +watch_file pyproject.toml uv.lock +watch_file ui-tui/package-lock.json ui-tui/package.json +watch_file flake.nix flake.lock nix/devShell.nix nix/tui.nix nix/package.nix nix/python.nix + +use flake diff --git a/reference/hermes-agent-2026.5.16/.gitattributes b/reference/hermes-agent-2026.5.16/.gitattributes new file mode 100755 index 0000000..8726216 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.gitattributes @@ -0,0 +1,2 @@ +# Auto-generated files — collapse diffs and exclude from language stats +web/package-lock.json linguist-generated=true diff --git a/reference/hermes-agent-2026.5.16/.github/ISSUE_TEMPLATE/bug_report.yml b/reference/hermes-agent-2026.5.16/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100755 index 0000000..67a3f64 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,162 @@ +name: "🐛 Bug Report" +description: Report a bug — something that's broken, crashes, or behaves incorrectly. +title: "[Bug]: " +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + Thanks for reporting a bug! Please fill out the sections below so we can reproduce and fix it quickly. + + **Before submitting**, please: + - [ ] Search [existing issues](https://github.com/NousResearch/hermes-agent/issues) to avoid duplicates + - [ ] Update to the latest version (`hermes update`) and confirm the bug still exists + - [ ] Run `hermes debug share` and paste the links below (see Debug Report section) + + - type: textarea + id: description + attributes: + label: Bug Description + description: A clear description of what's broken. Include error messages, tracebacks, or screenshots if relevant. + placeholder: | + What happened? What did you expect to happen instead? + validations: + required: true + + - type: textarea + id: reproduction + attributes: + label: Steps to Reproduce + description: Minimal steps to trigger the bug. The more specific, the faster we can fix it. + placeholder: | + 1. Run `hermes chat` + 2. Send the message "..." + 3. Agent calls tool X + 4. Error appears: ... + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected Behavior + description: What should have happened instead? + validations: + required: true + + - type: textarea + id: actual + attributes: + label: Actual Behavior + description: What actually happened? Include full error output if available. + validations: + required: true + + - type: dropdown + id: component + attributes: + label: Affected Component + description: Which part of Hermes is affected? + multiple: true + options: + - CLI (interactive chat) + - Gateway (Telegram/Discord/Slack/WhatsApp) + - Setup / Installation + - Tools (terminal, file ops, web, code execution, etc.) + - Skills (skill loading, skill hub, skill guard) + - Agent Core (conversation loop, context compression, memory) + - Configuration (config.yaml, .env, hermes setup) + - Other + validations: + required: true + + - type: dropdown + id: platform + attributes: + label: Messaging Platform (if gateway-related) + description: Which platform adapter is affected? + multiple: true + options: + - N/A (CLI only) + - Telegram + - Discord + - Slack + - WhatsApp + + - type: textarea + id: debug-report + attributes: + label: Debug Report + description: | + Run `hermes debug share` from your terminal and paste the links it prints here. + This uploads your system info, config, and recent logs to a paste service automatically. + + If you're in an interactive chat session, you can also use the `/debug` slash command — it does the same thing. + + If the upload fails, run `hermes debug share --local` and paste the output directly. + placeholder: | + Report https://paste.rs/abc123 + agent.log https://paste.rs/def456 + gateway.log https://paste.rs/ghi789 + render: shell + validations: + required: true + + - type: input + id: os + attributes: + label: Operating System + description: e.g. Ubuntu 24.04, macOS 15.2, Windows 11 + placeholder: Ubuntu 24.04 + validations: + required: true + + - type: input + id: python-version + attributes: + label: Python Version + description: Output of `python --version` + placeholder: "3.11.9" + + - type: input + id: hermes-version + attributes: + label: Hermes Version + description: Output of `hermes version` + placeholder: "2.1.0" + + - type: textarea + id: logs + attributes: + label: Additional Logs / Traceback (optional) + description: | + The debug report above covers most logs. Use this field for any extra error output, + tracebacks, or screenshots not captured by `hermes debug share`. + render: shell + + - type: textarea + id: root-cause + attributes: + label: Root Cause Analysis (optional) + description: | + If you've dug into the code and identified the root cause, share it here. + Include file paths, line numbers, and code snippets if possible. This massively speeds up fixes. + placeholder: | + The bug is in `gateway/run.py` line 949. `len(history)` counts session_meta entries + but `agent_messages` was built from filtered history... + + - type: textarea + id: proposed-fix + attributes: + label: Proposed Fix (optional) + description: If you have a fix in mind (or a PR ready), describe it here. + placeholder: | + Replace `.get()` with `.pop()` on line 289 of `gateway/platforms/base.py` + to actually clear the pending message after retrieval. + + - type: checkboxes + id: pr-ready + attributes: + label: Are you willing to submit a PR for this? + options: + - label: I'd like to fix this myself and submit a PR diff --git a/reference/hermes-agent-2026.5.16/.github/ISSUE_TEMPLATE/config.yml b/reference/hermes-agent-2026.5.16/.github/ISSUE_TEMPLATE/config.yml new file mode 100755 index 0000000..0daa52c --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,11 @@ +blank_issues_enabled: true +contact_links: + - name: 💬 Nous Research Discord + url: https://discord.gg/NousResearch + about: For quick questions, showcasing projects, sharing skills, and community chat. + - name: 📖 Documentation + url: https://github.com/NousResearch/hermes-agent/blob/main/README.md + about: Check the README and docs before opening an issue. + - name: 🤝 Contributing Guide + url: https://github.com/NousResearch/hermes-agent/blob/main/CONTRIBUTING.md + about: Read this before submitting a PR. diff --git a/reference/hermes-agent-2026.5.16/.github/ISSUE_TEMPLATE/feature_request.yml b/reference/hermes-agent-2026.5.16/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100755 index 0000000..720cc8f --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,85 @@ +name: "✨ Feature Request" +description: Suggest a new feature or improvement. +title: "[Feature]: " +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + Thanks for the suggestion! Before submitting, please consider: + + - **Is this a new skill?** Most capabilities should be [skills, not tools](https://github.com/NousResearch/hermes-agent/blob/main/CONTRIBUTING.md#should-it-be-a-skill-or-a-tool). If it's a specialized integration (crypto, NFT, niche SaaS), it belongs on the Skills Hub, not bundled. + - **Search [existing issues](https://github.com/NousResearch/hermes-agent/issues)** — someone may have already proposed this. + + - type: textarea + id: problem + attributes: + label: Problem or Use Case + description: What problem does this solve? What are you trying to do that you can't today? + placeholder: | + I'm trying to use Hermes with [provider/platform/workflow] but currently + there's no way to... + validations: + required: true + + - type: textarea + id: solution + attributes: + label: Proposed Solution + description: How do you think this should work? Be as specific as you can — CLI flags, config options, UI behavior. + placeholder: | + Add a `--foo` flag to `hermes chat` that enables... + Or: Add a config key `bar.baz` that controls... + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Alternatives Considered + description: What other approaches did you consider? Why is the proposed solution better? + + - type: dropdown + id: type + attributes: + label: Feature Type + options: + - New tool + - New bundled skill + - CLI improvement + - Gateway / messaging improvement + - Configuration option + - Performance / reliability + - Developer experience (tests, docs, CI) + - Other + validations: + required: true + + - type: dropdown + id: scope + attributes: + label: Scope + description: How big is this change? + options: + - Small (single file, < 50 lines) + - Medium (few files, < 300 lines) + - Large (new module or significant refactor) + + - type: checkboxes + id: pr-ready + attributes: + label: Contribution + options: + - label: I'd like to implement this myself and submit a PR + + - type: textarea + id: debug-report + attributes: + label: Debug Report (optional) + description: | + If this feature request is related to a problem you're experiencing, run `hermes debug share` and paste the links here. + In an interactive chat session, you can use `/debug` instead. + This helps us understand your environment and any related logs. + placeholder: | + Report https://paste.rs/abc123 + render: shell diff --git a/reference/hermes-agent-2026.5.16/.github/ISSUE_TEMPLATE/setup_help.yml b/reference/hermes-agent-2026.5.16/.github/ISSUE_TEMPLATE/setup_help.yml new file mode 100755 index 0000000..974181b --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/ISSUE_TEMPLATE/setup_help.yml @@ -0,0 +1,112 @@ +name: "🔧 Setup / Installation Help" +description: Having trouble installing or configuring Hermes? Ask here. +title: "[Setup]: " +labels: ["setup"] +body: + - type: markdown + attributes: + value: | + Sorry you're having trouble! Please fill out the details below so we can help. + + **Quick checks first:** + - Run `hermes debug share` and paste the links in the Debug Report section below + - If you're in a chat session, you can use `/debug` instead — it does the same thing + - Try `hermes update` to get the latest version + - Check the [README troubleshooting section](https://github.com/NousResearch/hermes-agent#troubleshooting) + - For general questions, consider the [Nous Research Discord](https://discord.gg/NousResearch) for faster help + + - type: textarea + id: description + attributes: + label: What's Going Wrong? + description: Describe what you're trying to do and where it fails. + placeholder: | + I ran `hermes setup` and selected Nous Portal, but when I try to + start the gateway I get... + validations: + required: true + + - type: textarea + id: steps + attributes: + label: Steps Taken + description: What did you do? Include the exact commands you ran. + placeholder: | + 1. Ran the install script: `curl -fsSL ... | bash` + 2. Ran `hermes setup` and chose "Quick setup" + 3. Selected OpenRouter, entered API key + 4. Ran `hermes chat` and got error... + validations: + required: true + + - type: dropdown + id: install-method + attributes: + label: Installation Method + options: + - Install script (curl | bash) + - Manual clone + pip/uv install + - PowerShell installer (Windows) + - Docker + - Other + validations: + required: true + + - type: input + id: os + attributes: + label: Operating System + placeholder: Ubuntu 24.04 / macOS 15.2 / Windows 11 + validations: + required: true + + - type: input + id: python-version + attributes: + label: Python Version + description: Output of `python --version` (or `python3 --version`) + placeholder: "3.11.9" + + - type: input + id: hermes-version + attributes: + label: Hermes Version + description: Output of `hermes version` (if install got that far) + placeholder: "2.1.0" + + - type: textarea + id: debug-report + attributes: + label: Debug Report + description: | + Run `hermes debug share` from your terminal and paste the links it prints here. + This uploads your system info, config, and recent logs to a paste service automatically. + + If you're in an interactive chat session, you can also use the `/debug` slash command — it does the same thing. + + If the upload fails or install didn't get that far, run `hermes debug share --local` and paste the output directly. + If even that doesn't work, run `hermes doctor` and paste that output instead. + placeholder: | + Report https://paste.rs/abc123 + agent.log https://paste.rs/def456 + gateway.log https://paste.rs/ghi789 + render: shell + + - type: textarea + id: error-output + attributes: + label: Full Error Output + description: Paste the complete error message or traceback. This will be auto-formatted. + render: shell + validations: + required: true + + - type: textarea + id: tried + attributes: + label: What I've Already Tried + description: List any fixes or workarounds you've already attempted. + placeholder: | + - Ran `hermes update` + - Tried reinstalling with `pip install -e ".[all]"` + - Checked that OPENROUTER_API_KEY is set in ~/.hermes/.env diff --git a/reference/hermes-agent-2026.5.16/.github/PULL_REQUEST_TEMPLATE.md b/reference/hermes-agent-2026.5.16/.github/PULL_REQUEST_TEMPLATE.md new file mode 100755 index 0000000..5496eb5 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,75 @@ +## What does this PR do? + + + + + +## Related Issue + + + +Fixes # + +## Type of Change + + + +- [ ] 🐛 Bug fix (non-breaking change that fixes an issue) +- [ ] ✨ New feature (non-breaking change that adds functionality) +- [ ] 🔒 Security fix +- [ ] 📝 Documentation update +- [ ] ✅ Tests (adding or improving test coverage) +- [ ] ♻️ Refactor (no behavior change) +- [ ] 🎯 New skill (bundled or hub) + +## Changes Made + + + +- + +## How to Test + + + +1. +2. +3. + +## Checklist + + + +### Code + +- [ ] I've read the [Contributing Guide](https://github.com/NousResearch/hermes-agent/blob/main/CONTRIBUTING.md) +- [ ] My commit messages follow [Conventional Commits](https://www.conventionalcommits.org/) (`fix(scope):`, `feat(scope):`, etc.) +- [ ] I searched for [existing PRs](https://github.com/NousResearch/hermes-agent/pulls) to make sure this isn't a duplicate +- [ ] My PR contains **only** changes related to this fix/feature (no unrelated commits) +- [ ] I've run `pytest tests/ -q` and all tests pass +- [ ] I've added tests for my changes (required for bug fixes, strongly encouraged for features) +- [ ] I've tested on my platform: + +### Documentation & Housekeeping + + + +- [ ] I've updated relevant documentation (README, `docs/`, docstrings) — or N/A +- [ ] I've updated `cli-config.yaml.example` if I added/changed config keys — or N/A +- [ ] I've updated `CONTRIBUTING.md` or `AGENTS.md` if I changed architecture or workflows — or N/A +- [ ] I've considered cross-platform impact (Windows, macOS) per the [compatibility guide](https://github.com/NousResearch/hermes-agent/blob/main/CONTRIBUTING.md#cross-platform-compatibility) — or N/A +- [ ] I've updated tool descriptions/schemas if I changed tool behavior — or N/A + +## For New Skills + + + +- [ ] This skill is **broadly useful** to most users (if bundled) — see [Contributing Guide](https://github.com/NousResearch/hermes-agent/blob/main/CONTRIBUTING.md#should-the-skill-be-bundled) +- [ ] SKILL.md follows the [standard format](https://github.com/NousResearch/hermes-agent/blob/main/CONTRIBUTING.md#skillmd-format) (frontmatter, trigger conditions, steps, pitfalls) +- [ ] No external dependencies that aren't already available (prefer stdlib, curl, existing Hermes tools) +- [ ] I've tested the skill end-to-end: `hermes --toolsets skills -q "Use the X skill to do Y"` + +## Screenshots / Logs + + + diff --git a/reference/hermes-agent-2026.5.16/.github/actions/hermes-smoke-test/action.yml b/reference/hermes-agent-2026.5.16/.github/actions/hermes-smoke-test/action.yml new file mode 100755 index 0000000..08b9f93 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/actions/hermes-smoke-test/action.yml @@ -0,0 +1,47 @@ +name: Hermes smoke test +description: > + Run the image's built-in entrypoint against `--help` and `dashboard --help` + to catch basic runtime regressions before publishing. Requires the image + to already be loaded into the local Docker daemon under `image`. + + Works identically on amd64 and arm64 runners. + +inputs: + image: + description: Fully-qualified image tag (e.g. nousresearch/hermes-agent:test) + required: true + +runs: + using: composite + steps: + - name: Ensure /tmp/hermes-test is hermes-writable + shell: bash + run: | + # The image runs as the hermes user (UID 10000). GitHub Actions + # creates /tmp/hermes-test root-owned by default, which hermes + # can't write to — chown it to match the in-container UID before + # bind-mounting. Real users doing `docker run -v ~/.hermes:...` + # with their own UID hit the same issue and have their own + # remediations (HERMES_UID env var, or chown locally). + mkdir -p /tmp/hermes-test + sudo chown -R 10000:10000 /tmp/hermes-test + + - name: hermes --help + shell: bash + run: | + docker run --rm \ + -v /tmp/hermes-test:/opt/data \ + --entrypoint /opt/hermes/docker/entrypoint.sh \ + "${{ inputs.image }}" --help + + - name: hermes dashboard --help + shell: bash + run: | + # Regression guard for #9153: dashboard was present in source but + # missing from the published image. If this fails, something in + # the Dockerfile is excluding the dashboard subcommand from the + # installed package. + docker run --rm \ + -v /tmp/hermes-test:/opt/data \ + --entrypoint /opt/hermes/docker/entrypoint.sh \ + "${{ inputs.image }}" dashboard --help diff --git a/reference/hermes-agent-2026.5.16/.github/actions/nix-setup/action.yml b/reference/hermes-agent-2026.5.16/.github/actions/nix-setup/action.yml new file mode 100755 index 0000000..0aeaf91 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/actions/nix-setup/action.yml @@ -0,0 +1,18 @@ +name: 'Setup Nix' +description: 'Install Nix and configure Cachix binary cache' + +inputs: + cachix-auth-token: + description: 'Cachix auth token (enables push). Omit for read-only.' + required: false + default: '' + +runs: + using: composite + steps: + - uses: DeterminateSystems/nix-installer-action@ef8a148080ab6020fd15196c2084a2eea5ff2d25 # v22 + - uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17 + with: + name: hermes-agent + authToken: ${{ inputs.cachix-auth-token }} + continue-on-error: true diff --git a/reference/hermes-agent-2026.5.16/.github/dependabot.yml b/reference/hermes-agent-2026.5.16/.github/dependabot.yml new file mode 100755 index 0000000..3854c8f --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/dependabot.yml @@ -0,0 +1,44 @@ +# Dependabot configuration for hermes-agent. +# +# Deliberately scoped to github-actions only. +# +# We do NOT enable Dependabot for pip / npm / any source-dependency ecosystem +# because we pin source dependencies exactly (uv.lock, package-lock.json) as +# part of our supply-chain posture. Automatic version-bump PRs against those +# pins would undermine the strategy — pins are moved deliberately, after +# review, not on a schedule. +# +# github-actions is the exception: action pins (we use full commit SHAs per +# supply-chain policy) must be updated when upstream actions publish +# patches — usually themselves security fixes. Dependabot opens a PR with +# the new SHA and release notes; we review and merge like any other PR. +# +# Security-update PRs for source dependencies (opened ONLY when a CVE is +# published affecting a currently-pinned version) are enabled separately +# via the repo's Dependabot security updates setting +# (Settings → Code security → Dependabot → Dependabot security updates). +# Those are CVE-only, not schedule-driven, and do not conflict with our +# pinning strategy — they fire when a pinned version becomes known-bad, +# which is exactly when we want to move the pin. + +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + day: "monday" + open-pull-requests-limit: 5 + labels: + - "dependencies" + - "github-actions" + commit-message: + prefix: "chore(actions)" + include: "scope" + groups: + # Batch routine action bumps into one PR per week to reduce noise. + # Security updates still open individually and bypass grouping. + actions-minor-patch: + update-types: + - "minor" + - "patch" diff --git a/reference/hermes-agent-2026.5.16/.github/workflows/contributor-check.yml b/reference/hermes-agent-2026.5.16/.github/workflows/contributor-check.yml new file mode 100755 index 0000000..3ca4991 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/workflows/contributor-check.yml @@ -0,0 +1,73 @@ +name: Contributor Attribution Check + +on: + pull_request: + branches: [main] + paths: + # Only run when code files change (not docs-only PRs) + - '*.py' + - '**/*.py' + - '.github/workflows/contributor-check.yml' + +permissions: + contents: read + +jobs: + check-attribution: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + fetch-depth: 0 # Full history needed for git log + + - name: Check for unmapped contributor emails + run: | + # Get the merge base between this PR and main + MERGE_BASE=$(git merge-base origin/main HEAD) + + # Find any new author emails in this PR's commits + NEW_EMAILS=$(git log ${MERGE_BASE}..HEAD --format='%ae' --no-merges | sort -u) + + if [ -z "$NEW_EMAILS" ]; then + echo "No new commits to check." + exit 0 + fi + + # Check each email against AUTHOR_MAP in release.py + MISSING="" + while IFS= read -r email; do + # Skip teknium and bot emails + case "$email" in + *teknium*|*noreply@github.com*|*dependabot*|*github-actions*|*anthropic.com*|*cursor.com*) + continue ;; + esac + + # Check if email is in AUTHOR_MAP (either as a key or matches noreply pattern) + if echo "$email" | grep -qP '\+.*@users\.noreply\.github\.com'; then + continue # GitHub noreply emails auto-resolve + fi + + if ! grep -qF "\"${email}\"" scripts/release.py 2>/dev/null; then + AUTHOR=$(git log --author="$email" --format='%an' -1) + MISSING="${MISSING}\n ${email} (${AUTHOR})" + fi + done <<< "$NEW_EMAILS" + + if [ -n "$MISSING" ]; then + echo "" + echo "⚠️ New contributor email(s) not in AUTHOR_MAP:" + echo -e "$MISSING" + echo "" + echo "Please add mappings to scripts/release.py AUTHOR_MAP:" + echo -e "$MISSING" | while read -r line; do + email=$(echo "$line" | sed 's/^ *//' | cut -d' ' -f1) + [ -z "$email" ] && continue + echo " \"${email}\": \"\"," + done + echo "" + echo "To find the GitHub username for an email:" + echo " gh api 'search/users?q=EMAIL+in:email' --jq '.items[0].login'" + exit 1 + else + echo "✅ All contributor emails are mapped in AUTHOR_MAP." + fi diff --git a/reference/hermes-agent-2026.5.16/.github/workflows/deploy-site.yml b/reference/hermes-agent-2026.5.16/.github/workflows/deploy-site.yml new file mode 100755 index 0000000..8df74c0 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/workflows/deploy-site.yml @@ -0,0 +1,97 @@ +name: Deploy Site + +on: + release: + types: [published] + push: + branches: [main] + paths: + - 'website/**' + - 'skills/**' + - 'optional-skills/**' + - '.github/workflows/deploy-site.yml' + workflow_dispatch: + +permissions: + pages: write + id-token: write + +concurrency: + group: pages + cancel-in-progress: false + +jobs: + deploy-vercel: + if: github.event_name == 'release' + runs-on: ubuntu-latest + steps: + - name: Trigger Vercel Deploy + run: curl -X POST "${{ secrets.VERCEL_DEPLOY_HOOK }}" + + deploy-docs: + if: github.repository == 'NousResearch/hermes-agent' + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deploy.outputs.page_url }} + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: 20 + cache: npm + cache-dependency-path: website/package-lock.json + + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + with: + python-version: '3.11' + + - name: Install PyYAML for skill extraction + run: pip install pyyaml==6.0.2 httpx==0.28.1 + + - name: Extract skill metadata for dashboard + run: python3 website/scripts/extract-skills.py + + - name: Regenerate per-skill docs pages + catalogs + run: python3 website/scripts/generate-skill-docs.py + + - name: Build skills index (if not already present) + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + if [ ! -f website/static/api/skills-index.json ]; then + python3 scripts/build_skills_index.py || echo "Skills index build failed (non-fatal)" + fi + + - name: Install dependencies + run: npm ci + working-directory: website + + - name: Build Docusaurus + run: npm run build + working-directory: website + + - name: Stage deployment + run: | + mkdir -p _site/docs + cp -r website/build/* _site/docs/ + # llms.txt / llms-full.txt are also published at the site root + # (https://hermes-agent.nousresearch.com/llms.txt) because some + # agents and IDE plugins probe the classic root-level path rather + # than /docs/llms.txt. Same file, two URLs, one source of truth. + if [ -f website/build/llms.txt ]; then + cp website/build/llms.txt _site/llms.txt + fi + if [ -f website/build/llms-full.txt ]; then + cp website/build/llms-full.txt _site/llms-full.txt + fi + + - name: Upload artifact + uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3 + with: + path: _site + + - name: Deploy to GitHub Pages + id: deploy + uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4 diff --git a/reference/hermes-agent-2026.5.16/.github/workflows/docker-publish.yml b/reference/hermes-agent-2026.5.16/.github/workflows/docker-publish.yml new file mode 100755 index 0000000..cccb8f3 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/workflows/docker-publish.yml @@ -0,0 +1,534 @@ +name: Docker Build and Publish + +on: + push: + branches: [main] + paths: + - '**/*.py' + - 'pyproject.toml' + - 'uv.lock' + - 'Dockerfile' + - 'docker/**' + - '.github/workflows/docker-publish.yml' + - '.github/actions/hermes-smoke-test/**' + pull_request: + branches: [main] + paths: + - '**/*.py' + - 'pyproject.toml' + - 'uv.lock' + - 'Dockerfile' + - 'docker/**' + - '.github/workflows/docker-publish.yml' + - '.github/actions/hermes-smoke-test/**' + release: + types: [published] + +permissions: + contents: read + +# Concurrency: push/release runs are NEVER cancelled so every merge gets its +# own SHA-tagged image; :main and :latest are guarded separately by the +# move-main and move-latest jobs. PR runs reuse a PR-scoped group with +# cancel-in-progress: true so rapid pushes to the same PR collapse to the +# latest commit. +concurrency: + group: docker-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +env: + IMAGE_NAME: nousresearch/hermes-agent + +jobs: + # --------------------------------------------------------------------------- + # Build amd64 natively. This job also runs the smoke tests (basic --help + # and the dashboard subcommand regression guard from #9153), because amd64 + # is the only arch we can `load` into the local daemon on an amd64 runner. + # --------------------------------------------------------------------------- + build-amd64: + # Only run on the upstream repository, not on forks + if: github.repository == 'NousResearch/hermes-agent' + runs-on: ubuntu-latest + timeout-minutes: 45 + outputs: + digest: ${{ steps.push.outputs.digest }} + steps: + - name: Checkout code + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + submodules: recursive + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3 + + # Build once, load into the local daemon for smoke testing. Cached + # to gha with a per-arch scope; the push step below reuses every + # layer from this build. + - name: Build image (amd64, smoke test) + uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6 + with: + context: . + file: Dockerfile + load: true + platforms: linux/amd64 + tags: ${{ env.IMAGE_NAME }}:test + cache-from: type=gha,scope=docker-amd64 + cache-to: type=gha,mode=max,scope=docker-amd64 + + - name: Smoke test image + uses: ./.github/actions/hermes-smoke-test + with: + image: ${{ env.IMAGE_NAME }}:test + + - name: Log in to Docker Hub + if: github.event_name == 'push' && github.ref == 'refs/heads/main' || github.event_name == 'release' + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # Push amd64 by digest only (no tag). The merge job assembles the + # tagged manifest list. `push-by-digest=true` is docker's recommended + # pattern for multi-runner multi-platform builds. + # + # We apply the OCI revision label here (and again on arm64) because + # the move-main / move-latest jobs read it off the linux/amd64 + # sub-manifest config of the floating tag to decide whether it's safe + # to advance. The label must be on each per-arch image — manifest + # lists themselves don't carry image config labels. + - name: Push amd64 by digest + id: push + if: github.event_name == 'push' && github.ref == 'refs/heads/main' || github.event_name == 'release' + uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6 + with: + context: . + file: Dockerfile + platforms: linux/amd64 + labels: | + org.opencontainers.image.revision=${{ github.sha }} + outputs: type=image,name=${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true + cache-from: type=gha,scope=docker-amd64 + cache-to: type=gha,mode=max,scope=docker-amd64 + + # Write the digest to a file and upload it as an artifact so the + # merge job can stitch both per-arch digests into a manifest list. + - name: Export digest + if: github.event_name == 'push' && github.ref == 'refs/heads/main' || github.event_name == 'release' + run: | + mkdir -p /tmp/digests + digest="${{ steps.push.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + - name: Upload digest artifact + if: github.event_name == 'push' && github.ref == 'refs/heads/main' || github.event_name == 'release' + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: digest-amd64 + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + # --------------------------------------------------------------------------- + # Build arm64 natively on GitHub's free arm64 runner. This replaces the + # previous QEMU-emulated arm64 build, which was ~5-10x slower and shared + # a cache scope with amd64. Matches the amd64 job's shape: build+load, + # smoke test, then on push/release push by digest. + # --------------------------------------------------------------------------- + build-arm64: + if: github.repository == 'NousResearch/hermes-agent' + runs-on: ubuntu-24.04-arm + timeout-minutes: 45 + outputs: + digest: ${{ steps.push.outputs.digest }} + steps: + - name: Checkout code + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + submodules: recursive + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3 + + # Build once, load into the local daemon for smoke testing. Cached + # to gha with a per-arch scope; the push step below reuses every + # layer from this build. + - name: Build image (arm64, smoke test) + uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6 + with: + context: . + file: Dockerfile + load: true + platforms: linux/arm64 + tags: ${{ env.IMAGE_NAME }}:test + cache-from: type=gha,scope=docker-arm64 + cache-to: type=gha,mode=max,scope=docker-arm64 + + - name: Smoke test image + uses: ./.github/actions/hermes-smoke-test + with: + image: ${{ env.IMAGE_NAME }}:test + + - name: Log in to Docker Hub + if: github.event_name == 'push' && github.ref == 'refs/heads/main' || github.event_name == 'release' + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Push arm64 by digest + id: push + if: github.event_name == 'push' && github.ref == 'refs/heads/main' || github.event_name == 'release' + uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6 + with: + context: . + file: Dockerfile + platforms: linux/arm64 + labels: | + org.opencontainers.image.revision=${{ github.sha }} + outputs: type=image,name=${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true + cache-from: type=gha,scope=docker-arm64 + cache-to: type=gha,mode=max,scope=docker-arm64 + + - name: Export digest + if: github.event_name == 'push' && github.ref == 'refs/heads/main' || github.event_name == 'release' + run: | + mkdir -p /tmp/digests + digest="${{ steps.push.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + - name: Upload digest artifact + if: github.event_name == 'push' && github.ref == 'refs/heads/main' || github.event_name == 'release' + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: digest-arm64 + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + # --------------------------------------------------------------------------- + # Stitch both per-arch digests into a single tagged multi-arch manifest. + # This is a registry-side operation — no building, no layer re-push — + # so it runs in ~30 seconds. On main pushes it produces :sha-. + # On releases it produces :. + # --------------------------------------------------------------------------- + merge: + if: github.repository == 'NousResearch/hermes-agent' && (github.event_name == 'push' && github.ref == 'refs/heads/main' || github.event_name == 'release') + runs-on: ubuntu-latest + needs: [build-amd64, build-arm64] + timeout-minutes: 10 + outputs: + pushed_sha_tag: ${{ steps.mark_pushed.outputs.pushed }} + pushed_release_tag: ${{ steps.mark_release_pushed.outputs.pushed }} + release_tag: ${{ steps.tag.outputs.tag }} + steps: + - name: Download digests + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 + with: + path: /tmp/digests + pattern: digest-* + merge-multiple: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3 + + - name: Log in to Docker Hub + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # Compute the tag for this run. Main pushes use sha- (so every + # commit gets its own immutable tag); releases use the release tag name. + - name: Compute tag + id: tag + run: | + if [ "${{ github.event_name }}" = "release" ]; then + echo "tag=${{ github.event.release.tag_name }}" >> "$GITHUB_OUTPUT" + else + echo "tag=sha-${{ github.sha }}" >> "$GITHUB_OUTPUT" + fi + + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + set -euo pipefail + # Build the arg array from each digest file (filename = the digest + # hex, with no sha256: prefix; empty file content, only the name + # matters). Using an array avoids shellcheck SC2046 and keeps + # every digest a single argv token even under pathological names. + args=() + for digest_file in *; do + args+=("${IMAGE_NAME}@sha256:${digest_file}") + done + docker buildx imagetools create \ + -t "${IMAGE_NAME}:${TAG}" \ + "${args[@]}" + env: + IMAGE_NAME: ${{ env.IMAGE_NAME }} + TAG: ${{ steps.tag.outputs.tag }} + + - name: Inspect image + run: | + docker buildx imagetools inspect "${IMAGE_NAME}:${TAG}" + env: + IMAGE_NAME: ${{ env.IMAGE_NAME }} + TAG: ${{ steps.tag.outputs.tag }} + + # Signal to move-main that the SHA tag is live. Only on main pushes; + # releases set pushed_release_tag instead. + - name: Mark SHA tag pushed + id: mark_pushed + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + run: echo "pushed=true" >> "$GITHUB_OUTPUT" + + # Signal to move-latest that the release tag is live. + - name: Mark release tag pushed + id: mark_release_pushed + if: github.event_name == 'release' + run: echo "pushed=true" >> "$GITHUB_OUTPUT" + + # --------------------------------------------------------------------------- + # Move :main to point at the SHA tag the merge job pushed. + # + # :main is the floating tag that tracks the tip of the main branch. Every + # merge to main retags :main forward. Users who want "latest dev build" + # pull :main; users who want stable releases pull :latest. + # + # The real serialization guarantee comes from the top-level concurrency + # group (`docker-${{ github.ref }}` with `cancel-in-progress: false`), + # which ensures at most one workflow run for this ref executes at a time. + # That means two move-main steps for the same ref cannot overlap. + # + # This job has its own concurrency group as defense-in-depth: if the + # top-level group is ever loosened, queued move-mains will run serially + # in arrival order, each one running the ancestor check below and either + # advancing :main or skipping. `cancel-in-progress: false` matches the + # top-level setting — we don't want rapid pushes to cancel a queued + # move-main, because the ancestor check is the real safety mechanism + # and queueing is cheap (move-main is a ~30s registry op). + # + # Combined with the ancestor check, this means :main only ever moves + # forward in git history. + # --------------------------------------------------------------------------- + move-main: + if: | + github.repository == 'NousResearch/hermes-agent' + && github.event_name == 'push' + && github.ref == 'refs/heads/main' + && needs.merge.outputs.pushed_sha_tag == 'true' + needs: merge + runs-on: ubuntu-latest + timeout-minutes: 10 + concurrency: + group: docker-move-main-${{ github.ref }} + cancel-in-progress: false + steps: + - name: Checkout code + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + fetch-depth: 1000 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3 + + - name: Log in to Docker Hub + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # Read the git revision label off the current :main manifest, then + # use `git merge-base --is-ancestor` to check whether our commit is a + # descendant of it. If :main doesn't exist yet, or its label is + # missing, we treat that as "safe to publish". If another run already + # advanced :main past us (or diverged), we skip and leave it alone. + - name: Decide whether to move :main + id: main_check + run: | + set -euo pipefail + image=nousresearch/hermes-agent + + # Pull the JSON for the linux/amd64 sub-manifest's config and extract + # the OCI revision label with jq — Go template field access can't + # handle dots in map keys, so using json+jq is the robust route. + image_json=$( + docker buildx imagetools inspect "${image}:main" \ + --format '{{ json (index .Image "linux/amd64") }}' \ + 2>/dev/null || true + ) + + if [ -z "${image_json}" ]; then + echo "No existing :main (or inspect failed) — safe to publish." + echo "push_main=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + + current_sha=$( + printf '%s' "${image_json}" \ + | jq -r '.config.Labels."org.opencontainers.image.revision" // ""' + ) + + if [ -z "${current_sha}" ]; then + echo "Registry :main has no revision label — safe to publish." + echo "push_main=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + + echo "Registry :main is at ${current_sha}" + echo "This run is at ${GITHUB_SHA}" + + if [ "${current_sha}" = "${GITHUB_SHA}" ]; then + echo ":main already points at our SHA — nothing to do." + echo "push_main=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + + # Make sure we have the :main commit locally for merge-base. + if ! git cat-file -e "${current_sha}^{commit}" 2>/dev/null; then + git fetch --no-tags --prune origin \ + "+refs/heads/main:refs/remotes/origin/main" \ + || true + fi + + if ! git cat-file -e "${current_sha}^{commit}" 2>/dev/null; then + echo "Registry :main points at an unknown commit (${current_sha}); refusing to overwrite." + echo "push_main=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + + # Our SHA must be a descendant of the current :main to be safe. + if git merge-base --is-ancestor "${current_sha}" "${GITHUB_SHA}"; then + echo "Our commit is a descendant of :main — safe to advance." + echo "push_main=true" >> "$GITHUB_OUTPUT" + else + echo "Another run advanced :main past us (or diverged) — leaving it alone." + echo "push_main=false" >> "$GITHUB_OUTPUT" + fi + + # Retag the already-pushed SHA manifest as :main. This is a registry- + # side operation — no rebuild, no layer re-push — so it's quick and + # atomic per-tag. The ancestor check above plus the cancel-in-progress + # concurrency on this job together guarantee we only ever move :main + # forward in git history. + - name: Move :main to this SHA + if: steps.main_check.outputs.push_main == 'true' + run: | + set -euo pipefail + image=nousresearch/hermes-agent + docker buildx imagetools create \ + --tag "${image}:main" \ + "${image}:sha-${GITHUB_SHA}" + + # --------------------------------------------------------------------------- + # Move :latest to point at the release tag the merge job pushed. + # + # :latest is the floating tag that tracks the most recent stable release. + # Only `release: published` events advance it — never main pushes. + # + # We still run an ancestor check against the existing :latest so that a + # backport release on an older branch (e.g. patching v1.1.5 after v1.2.3 + # is out) doesn't drag :latest backwards. The check is the same shape as + # move-main: read the OCI revision label off the current :latest, look up + # that commit in git, and only advance if our release commit is a strict + # descendant. + # --------------------------------------------------------------------------- + move-latest: + if: | + github.repository == 'NousResearch/hermes-agent' + && github.event_name == 'release' + && needs.merge.outputs.pushed_release_tag == 'true' + needs: merge + runs-on: ubuntu-latest + timeout-minutes: 10 + concurrency: + group: docker-move-latest + cancel-in-progress: false + steps: + - name: Checkout code + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + fetch-depth: 1000 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3 + + - name: Log in to Docker Hub + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Decide whether to move :latest + id: latest_check + run: | + set -euo pipefail + image=nousresearch/hermes-agent + + image_json=$( + docker buildx imagetools inspect "${image}:latest" \ + --format '{{ json (index .Image "linux/amd64") }}' \ + 2>/dev/null || true + ) + + if [ -z "${image_json}" ]; then + echo "No existing :latest (or inspect failed) — safe to publish." + echo "push_latest=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + + current_sha=$( + printf '%s' "${image_json}" \ + | jq -r '.config.Labels."org.opencontainers.image.revision" // ""' + ) + + if [ -z "${current_sha}" ]; then + echo "Registry :latest has no revision label — safe to publish." + echo "push_latest=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + + echo "Registry :latest is at ${current_sha}" + echo "This release is at ${GITHUB_SHA}" + + if [ "${current_sha}" = "${GITHUB_SHA}" ]; then + echo ":latest already points at our SHA — nothing to do." + echo "push_latest=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + + # Make sure we have the :latest commit locally for merge-base. + # Releases can be cut from any branch, so fetch broadly. + if ! git cat-file -e "${current_sha}^{commit}" 2>/dev/null; then + git fetch --no-tags --prune origin \ + "+refs/heads/main:refs/remotes/origin/main" \ + || true + fi + + if ! git cat-file -e "${current_sha}^{commit}" 2>/dev/null; then + echo "Registry :latest points at an unknown commit (${current_sha}); refusing to overwrite." + echo "push_latest=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + + # Our release SHA must be a descendant of the current :latest. + # Backport releases on older branches won't satisfy this and will + # be left alone — :latest stays on the newer release. + if git merge-base --is-ancestor "${current_sha}" "${GITHUB_SHA}"; then + echo "Our release commit is a descendant of :latest — safe to advance." + echo "push_latest=true" >> "$GITHUB_OUTPUT" + else + echo "Existing :latest is newer than this release (likely a backport) — leaving it alone." + echo "push_latest=false" >> "$GITHUB_OUTPUT" + fi + + # Retag the already-pushed release manifest as :latest. + - name: Move :latest to this release tag + if: steps.latest_check.outputs.push_latest == 'true' + env: + RELEASE_TAG: ${{ needs.merge.outputs.release_tag }} + run: | + set -euo pipefail + image=nousresearch/hermes-agent + docker buildx imagetools create \ + --tag "${image}:latest" \ + "${image}:${RELEASE_TAG}" diff --git a/reference/hermes-agent-2026.5.16/.github/workflows/docs-site-checks.yml b/reference/hermes-agent-2026.5.16/.github/workflows/docs-site-checks.yml new file mode 100755 index 0000000..80fe9ea --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/workflows/docs-site-checks.yml @@ -0,0 +1,48 @@ +name: Docs Site Checks + +on: + pull_request: + paths: + - 'website/**' + - '.github/workflows/docs-site-checks.yml' + workflow_dispatch: + +permissions: + contents: read + +jobs: + docs-site-checks: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: 20 + cache: npm + cache-dependency-path: website/package-lock.json + + - name: Install website dependencies + run: npm ci + working-directory: website + + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + with: + python-version: '3.11' + + - name: Install ascii-guard + run: python -m pip install ascii-guard==2.3.0 pyyaml==6.0.3 + + - name: Extract skill metadata for dashboard + run: python3 website/scripts/extract-skills.py + + - name: Regenerate per-skill docs pages + catalogs + run: python3 website/scripts/generate-skill-docs.py + + - name: Lint docs diagrams + run: npm run lint:diagrams + working-directory: website + + - name: Build Docusaurus + run: npm run build + working-directory: website diff --git a/reference/hermes-agent-2026.5.16/.github/workflows/history-check.yml b/reference/hermes-agent-2026.5.16/.github/workflows/history-check.yml new file mode 100755 index 0000000..bd66f19 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/workflows/history-check.yml @@ -0,0 +1,58 @@ +name: History Check + +# Rejects PRs whose branch has no common ancestor with main. +# +# In May 2026 PR #25045 was merged from a branch that had been disconnected +# from main's history (likely an accidental `git checkout --orphan` or +# `.git/` re-init). GitHub's merge UI does not refuse merges of unrelated +# histories, so the PR landed cleanly with the intended one-file change — +# but its parent-less root commit (413990c94) got grafted into main as a +# second root, and ~1500 files' worth of `git blame` history collapsed +# onto that single commit. +# +# This check catches the failure mode by requiring `git merge-base` between +# the PR head and main to be non-empty. + +on: + pull_request: + branches: [main] + +permissions: + contents: read + +jobs: + check-common-ancestor: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + fetch-depth: 0 # full history both sides for merge-base + + - name: Reject PRs with no common ancestor on main + run: | + # `git merge-base` exits non-zero AND prints nothing when the two + # commits share no ancestor. We check both conditions explicitly + # so the failure message is clear regardless of which signal fires + # first. + if ! BASE=$(git merge-base origin/main HEAD 2>/dev/null) || [ -z "$BASE" ]; then + echo "" + echo "::error::This PR has no common ancestor with main." + echo "" + echo "Your branch's history is disconnected from main. Common causes:" + echo " - the branch was created with 'git checkout --orphan'" + echo " - '.git/' was re-initialized at some point during the work" + echo " - the branch was force-pushed from an unrelated repository" + echo "" + echo "Merging an unrelated-history PR grafts a parent-less root commit" + echo "into main and collapses git blame for every file in that snapshot." + echo "Reference: PR #25045 caused this and re-rooted blame on ~1500" + echo "files to a single orphan commit." + echo "" + echo "To fix, rebase your changes onto current main:" + echo " git fetch origin main" + echo " git checkout -b fix-branch origin/main" + echo " # re-apply your changes (cherry-pick, copy files, etc.)" + echo " git push -f origin fix-branch" + exit 1 + fi + echo "::notice::Common ancestor with main: $BASE" diff --git a/reference/hermes-agent-2026.5.16/.github/workflows/lint.yml b/reference/hermes-agent-2026.5.16/.github/workflows/lint.yml new file mode 100755 index 0000000..807d5b6 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/workflows/lint.yml @@ -0,0 +1,202 @@ +name: Lint (ruff + ty) + +# Two things here: +# 1. Advisory diff — ruff + ty diagnostics as a diff vs the target branch. +# Posts a Markdown summary and a PR comment. Exit zero always. +# 2. Blocking ``ruff check .`` — enforces the explicit rules in +# ``[tool.ruff.lint.select]`` (currently PLW1514). Failure blocks merge. +# Separate job so the advisory diff still runs and posts even when +# enforcement fails. + +on: + push: + branches: [main] + paths-ignore: + - "**/*.md" + - "docs/**" + - "website/**" + pull_request: + branches: [main] + paths-ignore: + - "**/*.md" + - "docs/**" + - "website/**" + +permissions: + contents: read + pull-requests: write # needed to post/update PR comments + +concurrency: + group: lint-${{ github.ref }} + cancel-in-progress: true + +jobs: + lint-diff: + name: ruff + ty diff + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Checkout code + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + fetch-depth: 0 # need full history for merge-base + worktree + + - name: Install uv + uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5 + + - name: Install ruff + ty + run: | + uv tool install ruff + uv tool install ty + + - name: Determine base ref + id: base + run: | + # For PRs, diff against the merge base with the target branch. + # For pushes to main, diff against the previous commit on main. + if [ "${{ github.event_name }}" = "pull_request" ]; then + BASE_SHA=$(git merge-base "origin/${{ github.base_ref }}" HEAD) + BASE_REF="origin/${{ github.base_ref }}" + else + BASE_SHA=$(git rev-parse HEAD~1 2>/dev/null || git rev-parse HEAD) + BASE_REF="HEAD~1" + fi + echo "sha=${BASE_SHA}" >> "$GITHUB_OUTPUT" + echo "ref=${BASE_REF}" >> "$GITHUB_OUTPUT" + echo "Base SHA: ${BASE_SHA}" + echo "Base ref: ${BASE_REF}" + + - name: Run ruff + ty on HEAD + run: | + mkdir -p .lint-reports/head + ruff check --output-format json --exit-zero \ + > .lint-reports/head/ruff.json || true + ty check --output-format gitlab --exit-zero \ + > .lint-reports/head/ty.json || true + echo "HEAD ruff: $(wc -c < .lint-reports/head/ruff.json) bytes" + echo "HEAD ty: $(wc -c < .lint-reports/head/ty.json) bytes" + + - name: Run ruff + ty on base (via git worktree) + run: | + mkdir -p .lint-reports/base + # Use a worktree so we don't clobber the main checkout. If the basex + # SHA is identical to HEAD (e.g. first commit), skip and leave the + # base reports empty — the diff script handles missing files. + HEAD_SHA=$(git rev-parse HEAD) + BASE_SHA="${{ steps.base.outputs.sha }}" + if [ "$BASE_SHA" = "$HEAD_SHA" ]; then + echo "Base SHA == HEAD SHA, skipping base scan." + echo '[]' > .lint-reports/base/ruff.json + echo '[]' > .lint-reports/base/ty.json + else + git worktree add --detach /tmp/lint-base "$BASE_SHA" + ( + cd /tmp/lint-base + ruff check --output-format json --exit-zero \ + > "$GITHUB_WORKSPACE/.lint-reports/base/ruff.json" || true + ty check --output-format gitlab --exit-zero \ + > "$GITHUB_WORKSPACE/.lint-reports/base/ty.json" || true + ) + git worktree remove --force /tmp/lint-base + fi + echo "base ruff: $(wc -c < .lint-reports/base/ruff.json) bytes" + echo "base ty: $(wc -c < .lint-reports/base/ty.json) bytes" + + - name: Generate diff summary + run: | + python scripts/lint_diff.py \ + --base-ruff .lint-reports/base/ruff.json \ + --head-ruff .lint-reports/head/ruff.json \ + --base-ty .lint-reports/base/ty.json \ + --head-ty .lint-reports/head/ty.json \ + --base-ref "${{ steps.base.outputs.ref }}" \ + --head-ref "${{ github.event_name == 'pull_request' && github.head_ref || github.ref_name }}" \ + --output .lint-reports/summary.md + cat .lint-reports/summary.md >> "$GITHUB_STEP_SUMMARY" + + - name: Upload reports as artifact + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: lint-reports + path: .lint-reports/ + retention-days: 14 + + - name: Post / update PR comment + if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository + continue-on-error: true + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7 + with: + script: | + const fs = require('fs'); + const body = fs.readFileSync('.lint-reports/summary.md', 'utf8'); + const marker = ''; + const fullBody = marker + '\n' + body; + + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + }); + const existing = comments.find(c => c.body && c.body.includes(marker)); + if (existing) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: existing.id, + body: fullBody, + }); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body: fullBody, + }); + } + + + ruff-blocking: + # Enforce the rules in pyproject.toml [tool.ruff.lint.select]. Currently + # PLW1514 (unspecified-encoding) — catches bare ``open()`` / + # ``read_text()`` / ``write_text()`` calls that default to locale + # encoding on Windows. Failure here blocks merge; the advisory + # ``lint-diff`` job above runs independently so reviewers still get + # the diff comment even when enforcement fails. + name: ruff enforcement (blocking) + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Checkout code + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - name: Install uv + uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5 + + - name: Install ruff + run: uv tool install ruff + + - name: ruff check . + # No --exit-zero, no || true. Exit code propagates to the job, + # which propagates to the required-check gate. + run: | + ruff check . + + windows-footguns: + # Static guardrails on Windows-unsafe Python primitives — os.kill(pid, 0), + # os.killpg, os.setsid, signal.SIGKILL without getattr fallback, + # shebang scripts via subprocess, bare open() without encoding=, etc. + # See scripts/check-windows-footguns.py for the full rule list. + name: Windows footguns (blocking) + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Checkout code + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - name: Set up Python + uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 + with: + python-version: "3.11" + + - name: Run footgun checker + run: python scripts/check-windows-footguns.py --all diff --git a/reference/hermes-agent-2026.5.16/.github/workflows/nix-lockfile-fix.yml b/reference/hermes-agent-2026.5.16/.github/workflows/nix-lockfile-fix.yml new file mode 100755 index 0000000..b5e02c3 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/workflows/nix-lockfile-fix.yml @@ -0,0 +1,254 @@ +name: Nix Lockfile Fix + +on: + push: + branches: [main] + paths: + - 'ui-tui/package-lock.json' + - 'ui-tui/package.json' + - 'web/package-lock.json' + - 'web/package.json' + workflow_dispatch: + inputs: + pr_number: + description: 'PR number to fix (leave empty to run on the selected branch)' + required: false + type: string + issue_comment: + types: [edited] + +permissions: + contents: write + pull-requests: write + +concurrency: + group: nix-lockfile-fix-${{ github.event.issue.number || github.event.inputs.pr_number || github.ref }} + cancel-in-progress: false + +jobs: + # ── Auto-fix on main ─────────────────────────────────────────────── + # Fires when a push to main touches package.json or package-lock.json + # in ui-tui/ or web/. Runs fix-lockfiles and pushes the hash + # update commit directly to main so Nix builds never stay broken. + # + # Safety invariants: + # 1. The fix commit only touches nix/*.nix files, which are NOT in + # the paths filter above, so this cannot re-trigger itself. + # 2. An explicit file-whitelist check before commit aborts if + # fix-lockfiles ever modifies unexpected files. + # 3. Job-level concurrency with cancel-in-progress: true ensures + # back-to-back pushes collapse to the newest; ref: main checkout + # always operates on the latest branch state. + # 4. Uses a GitHub App token (not GITHUB_TOKEN) so the fix commit + # triggers downstream nix.yml verification. + auto-fix-main: + if: github.event_name == 'push' + runs-on: ubuntu-latest + timeout-minutes: 25 + concurrency: + group: auto-fix-main + cancel-in-progress: true + steps: + - name: Generate GitHub App token + id: app-token + uses: actions/create-github-app-token@7bfa3a4717ef143a604ee0a99d859b8886a96d00 # v1.9.3 + with: + app-id: ${{ secrets.APP_ID }} + private-key: ${{ secrets.APP_PRIVATE_KEY }} + + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + ref: main + token: ${{ steps.app-token.outputs.token }} + + - uses: ./.github/actions/nix-setup + with: + cachix-auth-token: ${{ secrets.CACHIX_AUTH_TOKEN }} + + - name: Apply lockfile hashes + id: apply + run: nix run .#fix-lockfiles -- --apply + + - name: Commit & push + if: steps.apply.outputs.changed == 'true' + shell: bash + run: | + set -euo pipefail + + # Ensure only nix files were modified — prevents accidental + # self-triggering if fix-lockfiles ever touches package files. + unexpected="$(git diff --name-only | grep -Ev '^nix/(tui|web)\.nix$' || true)" + if [ -n "$unexpected" ]; then + echo "::error::Unexpected modified files: $unexpected" + exit 1 + fi + + # Record the base SHA before committing — used to detect package + # file changes if we need to rebase after a non-fast-forward push. + BASE_SHA="$(git rev-parse HEAD)" + + git config user.name 'github-actions[bot]' + git config user.email '41898282+github-actions[bot]@users.noreply.github.com' + git add nix/tui.nix nix/web.nix + git commit -m "fix(nix): auto-refresh npm lockfile hashes" \ + -m "Source: $GITHUB_SHA" \ + -m "Run: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" + + # Retry push with rebase in case main advanced with an unrelated + # commit during the nix build. Without this, a non-fast-forward + # rejection silently loses the fix. If package files changed during + # the rebase, abort — a fresh auto-fix run will handle the new state. + for attempt in 1 2 3; do + if git push origin HEAD:main; then + exit 0 + fi + echo "::warning::Push attempt $attempt failed (non-fast-forward?), rebasing…" + git fetch origin main + + # If package files changed between our base and the new main, + # our computed hashes are stale. Abort and let the next triggered + # run recompute from the correct package-lock state. + pkg_changed="$(git diff --name-only "$BASE_SHA"..origin/main -- \ + 'ui-tui/package-lock.json' 'ui-tui/package.json' \ + 'web/package-lock.json' 'web/package.json' || true)" + if [ -n "$pkg_changed" ]; then + echo "::warning::Package files changed since hash computation — aborting; a fresh run will recompute" + exit 0 + fi + + git rebase origin/main + done + echo "::error::Failed to push after 3 rebase attempts" + exit 1 + + # ── PR fix (manual / checkbox) ───────────────────────────────────── + # Existing behavior: run on manual dispatch OR when a task-list + # checkbox in the sticky lockfile-check comment flips from [ ] to [x]. + fix: + if: | + github.event_name == 'workflow_dispatch' || + (github.event_name == 'issue_comment' + && github.event.issue.pull_request != null + && contains(github.event.comment.body, '[x] **Apply lockfile fix**') + && !contains(github.event.changes.body.from, '[x] **Apply lockfile fix**')) + runs-on: ubuntu-latest + timeout-minutes: 25 + steps: + - name: Authorize & resolve PR + id: resolve + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + // 1. Verify the actor has write access — applies to both checkbox + // clicks and manual dispatch. + const { data: perm } = + await github.rest.repos.getCollaboratorPermissionLevel({ + owner: context.repo.owner, + repo: context.repo.repo, + username: context.actor, + }); + if (!['admin', 'write', 'maintain'].includes(perm.permission)) { + core.setFailed( + `${context.actor} lacks write access (has: ${perm.permission})` + ); + return; + } + + // 2. Resolve which ref to check out. + let prNumber = ''; + if (context.eventName === 'issue_comment') { + prNumber = String(context.payload.issue.number); + } else if (context.eventName === 'workflow_dispatch') { + prNumber = context.payload.inputs.pr_number || ''; + } + + if (!prNumber) { + core.setOutput('ref', context.ref.replace(/^refs\/heads\//, '')); + core.setOutput('repo', context.repo.repo); + core.setOutput('owner', context.repo.owner); + core.setOutput('pr', ''); + return; + } + + const { data: pr } = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: Number(prNumber), + }); + core.setOutput('ref', pr.head.ref); + core.setOutput('repo', pr.head.repo.name); + core.setOutput('owner', pr.head.repo.owner.login); + core.setOutput('pr', String(pr.number)); + + # Wipe the sticky lockfile-check comment to a "running" state as soon + # as the job is authorized, so the user sees their click was picked up + # before the ~minute of nix build work. + - name: Mark sticky as running + if: steps.resolve.outputs.pr != '' + uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 # v2.9.1 + with: + header: nix-lockfile-check + number: ${{ steps.resolve.outputs.pr }} + message: | + ### 🔄 Applying lockfile fix… + + Triggered by @${{ github.actor }} — [workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}). + + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + repository: ${{ steps.resolve.outputs.owner }}/${{ steps.resolve.outputs.repo }} + ref: ${{ steps.resolve.outputs.ref }} + token: ${{ secrets.GITHUB_TOKEN }} + fetch-depth: 0 + + - uses: ./.github/actions/nix-setup + with: + cachix-auth-token: ${{ secrets.CACHIX_AUTH_TOKEN }} + + - name: Apply lockfile hashes + id: apply + run: nix run .#fix-lockfiles + + - name: Commit & push + if: steps.apply.outputs.changed == 'true' + shell: bash + run: | + set -euo pipefail + git config user.name 'github-actions[bot]' + git config user.email '41898282+github-actions[bot]@users.noreply.github.com' + git add nix/tui.nix nix/web.nix + git commit -m "fix(nix): refresh npm lockfile hashes" + git push + + - name: Update sticky (applied) + if: steps.apply.outputs.changed == 'true' && steps.resolve.outputs.pr != '' + uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 # v2.9.1 + with: + header: nix-lockfile-check + number: ${{ steps.resolve.outputs.pr }} + message: | + ### ✅ Lockfile fix applied + + Pushed a commit refreshing the npm lockfile hashes — [workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}). + + - name: Update sticky (already current) + if: steps.apply.outputs.changed == 'false' && steps.resolve.outputs.pr != '' + uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 # v2.9.1 + with: + header: nix-lockfile-check + number: ${{ steps.resolve.outputs.pr }} + message: | + ### ✅ Lockfile hashes already current + + Nothing to commit — [workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}). + + - name: Update sticky (failed) + if: failure() && steps.resolve.outputs.pr != '' + uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 # v2.9.1 + with: + header: nix-lockfile-check + number: ${{ steps.resolve.outputs.pr }} + message: | + ### ❌ Lockfile fix failed + + See the [workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) for logs. diff --git a/reference/hermes-agent-2026.5.16/.github/workflows/nix.yml b/reference/hermes-agent-2026.5.16/.github/workflows/nix.yml new file mode 100755 index 0000000..9a8f45a --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/workflows/nix.yml @@ -0,0 +1,117 @@ +name: Nix + +on: + push: + branches: [main] + pull_request: + +permissions: + contents: read + pull-requests: write + +concurrency: + group: nix-${{ github.ref }} + cancel-in-progress: true + +jobs: + nix: + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + runs-on: ${{ matrix.os }} + timeout-minutes: 30 + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - uses: ./.github/actions/nix-setup + with: + cachix-auth-token: ${{ secrets.CACHIX_AUTH_TOKEN }} + + - name: Resolve head SHA + if: github.event_name == 'pull_request' + id: sha + shell: bash + run: | + FULL="${{ github.event.pull_request.head.sha || github.sha }}" + echo "full=$FULL" >> "$GITHUB_OUTPUT" + echo "short=${FULL:0:7}" >> "$GITHUB_OUTPUT" + + - name: Check flake + id: flake + if: runner.os == 'Linux' + continue-on-error: true + run: nix flake check --print-build-logs + + - name: Build package + id: build + if: runner.os == 'Linux' + continue-on-error: true + run: nix build --print-build-logs + + # When the real Nix build fails, run a targeted diagnostic to see if + # the failure is specifically a stale npm lockfile hash in one of the + # known npm subpackages (tui / web). This avoids surfacing a generic + # "build failed" message when the fix is a single known command. + - name: Diagnose npm lockfile hashes + id: hash_check + if: (steps.flake.outcome == 'failure' || steps.build.outcome == 'failure') && runner.os == 'Linux' + continue-on-error: true + env: + LINK_SHA: ${{ steps.sha.outputs.full }} + run: nix run .#fix-lockfiles -- --check + + # If fix-lockfiles itself crashes (infrastructure blip, cache throttle, + # etc.) it won't set stale=true/false. Treat that as a distinct failure + # mode rather than silently ignoring it. + - name: Fail if hash check crashed without reporting + if: steps.hash_check.outcome == 'failure' && steps.hash_check.outputs.stale != 'true' && steps.hash_check.outputs.stale != 'false' + run: | + echo "::error::fix-lockfiles exited without reporting stale status — likely an infrastructure or script failure" + exit 1 + + - name: Post sticky PR comment (stale hashes) + if: steps.hash_check.outputs.stale == 'true' && github.event_name == 'pull_request' + uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 # v2.9.1 + with: + header: nix-lockfile-check + message: | + ### ⚠️ npm lockfile hash out of date + + Checked against commit [`${{ steps.sha.outputs.short }}`](${{ github.server_url }}/${{ github.repository }}/commit/${{ steps.sha.outputs.full }}) (PR head at check time). + + The `hash = "sha256-..."` line in these nix files no longer matches the committed `package-lock.json`: + + ${{ steps.hash_check.outputs.report }} + + #### Apply the fix + + - [ ] **Apply lockfile fix** — tick to push a commit with the correct hashes to this PR branch + - Or [run the Nix Lockfile Fix workflow](${{ github.server_url }}/${{ github.repository }}/actions/workflows/nix-lockfile-fix.yml) manually (pass PR `#${{ github.event.pull_request.number }}`) + - Or locally: `nix run .#fix-lockfiles` and commit the diff + + # Clear the sticky comment when either the build passed outright (no + # hash check needed) or the hash check explicitly returned stale=false + # (build failed for a non-hash reason). + - name: Clear sticky PR comment (resolved) + if: | + github.event_name == 'pull_request' && + runner.os == 'Linux' && + (steps.hash_check.outputs.stale == 'false' || + (steps.flake.outcome == 'success' && steps.build.outcome == 'success')) + uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 # v2.9.1 + with: + header: nix-lockfile-check + delete: true + + - name: Final fail if build or flake failed + if: steps.flake.outcome == 'failure' || steps.build.outcome == 'failure' + run: | + if [ "${{ steps.hash_check.outputs.stale }}" == "true" ]; then + echo "::error::Nix build failed due to stale npm lockfile hash. Run: nix run .#fix-lockfiles" + else + echo "::error::Nix build/flake check failed. See logs above." + fi + exit 1 + + - name: Evaluate flake (macOS) + if: runner.os == 'macOS' + run: nix flake show --json > /dev/null diff --git a/reference/hermes-agent-2026.5.16/.github/workflows/osv-scanner.yml b/reference/hermes-agent-2026.5.16/.github/workflows/osv-scanner.yml new file mode 100755 index 0000000..db8c3d7 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/workflows/osv-scanner.yml @@ -0,0 +1,67 @@ +name: OSV-Scanner + +# Scans lockfiles (uv.lock, package-lock.json) against the OSV vulnerability +# database. Runs on every PR that touches a lockfile and on a weekly schedule +# against main. +# +# This is detection-only — OSV-Scanner does NOT open PRs or modify pins. +# It reports known CVEs in currently-pinned dependency versions so we can +# decide when and how to patch on our own schedule. Our pinning strategy +# (full SHA / exact version) is preserved; only the notification signal +# is added. +# +# Complements the existing supply-chain-audit.yml workflow (which scans +# for malicious code patterns in PR diffs) by covering the orthogonal +# "currently-pinned dep became known-vulnerable" case. +# +# Uses Google's officially-recommended reusable workflow, pinned by SHA. +# Findings land in the repo's Security tab (Code Scanning > OSV-Scanner). +# fail-on-vuln is disabled so the job does not block merges on pre-existing +# vulnerabilities in pinned deps that we may need to patch deliberately. + +on: + pull_request: + branches: [main] + paths: + - 'uv.lock' + - 'pyproject.toml' + - 'package.json' + - 'package-lock.json' + - 'ui-tui/package.json' + - 'ui-tui/package-lock.json' + - 'website/package.json' + - 'website/package-lock.json' + - '.github/workflows/osv-scanner.yml' + push: + branches: [main] + paths: + - 'uv.lock' + - 'pyproject.toml' + - 'package.json' + - 'package-lock.json' + - 'ui-tui/package-lock.json' + - 'website/package-lock.json' + schedule: + # Weekly scan against main — catches CVEs published after merge for + # deps that haven't changed since. + - cron: '0 9 * * 1' + workflow_dispatch: + +permissions: + # Required by the reusable workflow to upload SARIF to the Security tab. + actions: read + contents: read + security-events: write + +jobs: + scan: + name: Scan lockfiles + uses: google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@c51854704019a247608d928f370c98740469d4b5 # v2.3.5 + with: + # Scan explicit lockfiles rather than recursing, so we only look at + # the three sources of truth and skip vendored / test / worktree dirs. + scan-args: |- + --lockfile=uv.lock + --lockfile=ui-tui/package-lock.json + --lockfile=website/package-lock.json + fail-on-vuln: false diff --git a/reference/hermes-agent-2026.5.16/.github/workflows/skills-index.yml b/reference/hermes-agent-2026.5.16/.github/workflows/skills-index.yml new file mode 100755 index 0000000..8beda19 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/workflows/skills-index.yml @@ -0,0 +1,101 @@ +name: Build Skills Index + +on: + schedule: + # Run twice daily: 6 AM and 6 PM UTC + - cron: '0 6,18 * * *' + workflow_dispatch: # Manual trigger + push: + branches: [main] + paths: + - 'scripts/build_skills_index.py' + - '.github/workflows/skills-index.yml' + +permissions: + contents: read + +jobs: + build-index: + # Only run on the upstream repository, not on forks + if: github.repository == 'NousResearch/hermes-agent' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + with: + python-version: '3.11' + + - name: Install dependencies + run: pip install httpx==0.28.1 pyyaml==6.0.2 + + - name: Build skills index + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: python scripts/build_skills_index.py + + - name: Upload index artifact + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: skills-index + path: website/static/api/skills-index.json + retention-days: 7 + + deploy-with-index: + needs: build-index + runs-on: ubuntu-latest + permissions: + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deploy.outputs.page_url }} + # Only deploy on schedule or manual trigger (not on every push to the script) + if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 + with: + name: skills-index + path: website/static/api/ + + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: 20 + cache: npm + cache-dependency-path: website/package-lock.json + + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + with: + python-version: '3.11' + + - name: Install PyYAML for skill extraction + run: pip install pyyaml==6.0.2 + + - name: Extract skill metadata for dashboard + run: python3 website/scripts/extract-skills.py + + - name: Install dependencies + run: npm ci + working-directory: website + + - name: Build Docusaurus + run: npm run build + working-directory: website + + - name: Stage deployment + run: | + mkdir -p _site/docs + cp -r landingpage/* _site/ + cp -r website/build/* _site/docs/ + echo "hermes-agent.nousresearch.com" > _site/CNAME + + - name: Upload artifact + uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3 + with: + path: _site + + - name: Deploy to GitHub Pages + id: deploy + uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4 diff --git a/reference/hermes-agent-2026.5.16/.github/workflows/supply-chain-audit.yml b/reference/hermes-agent-2026.5.16/.github/workflows/supply-chain-audit.yml new file mode 100755 index 0000000..69a9a11 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/workflows/supply-chain-audit.yml @@ -0,0 +1,205 @@ +name: Supply Chain Audit + +on: + pull_request: + types: [opened, synchronize, reopened] + paths: + - '**/*.py' + - '**/*.pth' + - '**/setup.py' + - '**/setup.cfg' + - '**/sitecustomize.py' + - '**/usercustomize.py' + - '**/__init__.pth' + - 'pyproject.toml' + +permissions: + pull-requests: write + contents: read + +# Narrow, high-signal scanner. Only fires on critical indicators of supply +# chain attacks (e.g. the litellm-style payloads). Low-signal heuristics +# (plain base64, plain exec/eval, dependency/Dockerfile/workflow edits, +# Actions version unpinning, outbound POST/PUT) were intentionally +# removed — they fired on nearly every PR and trained reviewers to ignore +# the scanner. Keep this file's checks ruthlessly narrow: if you find +# yourself adding WARNING-tier patterns here again, make a separate +# advisory-only workflow instead. + +jobs: + scan: + name: Scan PR for critical supply chain risks + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + fetch-depth: 0 + + - name: Scan diff for critical patterns + id: scan + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + set -euo pipefail + + BASE="${{ github.event.pull_request.base.sha }}" + HEAD="${{ github.event.pull_request.head.sha }}" + + # Added lines only, excluding lockfiles. + DIFF=$(git diff "$BASE".."$HEAD" -- . ':!uv.lock' ':!*.lock' ':!package-lock.json' ':!yarn.lock' || true) + + FINDINGS="" + + # --- .pth files (auto-execute on Python startup) --- + # The exact mechanism used in the litellm supply chain attack: + # https://github.com/BerriAI/litellm/issues/24512 + PTH_FILES=$(git diff --name-only "$BASE".."$HEAD" | grep '\.pth$' || true) + if [ -n "$PTH_FILES" ]; then + FINDINGS="${FINDINGS} + ### 🚨 CRITICAL: .pth file added or modified + Python \`.pth\` files in \`site-packages/\` execute automatically when the interpreter starts — no import required. + + **Files:** + \`\`\` + ${PTH_FILES} + \`\`\` + " + fi + + # --- base64 decode + exec/eval on the same line (the litellm attack pattern) --- + B64_EXEC_HITS=$(echo "$DIFF" | grep -n '^\+' | grep -iE 'base64\.(b64decode|decodebytes|urlsafe_b64decode)' | grep -iE 'exec\(|eval\(' | head -10 || true) + if [ -n "$B64_EXEC_HITS" ]; then + FINDINGS="${FINDINGS} + ### 🚨 CRITICAL: base64 decode + exec/eval combo + Base64-decoded strings passed directly to exec/eval — the signature of hidden credential-stealing payloads. + + **Matches:** + \`\`\` + ${B64_EXEC_HITS} + \`\`\` + " + fi + + # --- subprocess with encoded/obfuscated command argument --- + PROC_HITS=$(echo "$DIFF" | grep -n '^\+' | grep -E 'subprocess\.(Popen|call|run)\s*\(' | grep -iE 'base64|\\x[0-9a-f]{2}|chr\(' | head -10 || true) + if [ -n "$PROC_HITS" ]; then + FINDINGS="${FINDINGS} + ### 🚨 CRITICAL: subprocess with encoded/obfuscated command + Subprocess calls whose command strings are base64- or hex-encoded are a strong indicator of payload execution. + + **Matches:** + \`\`\` + ${PROC_HITS} + \`\`\` + " + fi + + # --- Install-hook files (setup.py/sitecustomize/usercustomize/__init__.pth) --- + # These execute during pip install or interpreter startup. + SETUP_HITS=$(git diff --name-only "$BASE".."$HEAD" | grep -E '(^|/)(setup\.py|setup\.cfg|sitecustomize\.py|usercustomize\.py|__init__\.pth)$' || true) + if [ -n "$SETUP_HITS" ]; then + FINDINGS="${FINDINGS} + ### 🚨 CRITICAL: Install-hook file added or modified + These files can execute code during package installation or interpreter startup. + + **Files:** + \`\`\` + ${SETUP_HITS} + \`\`\` + " + fi + + if [ -n "$FINDINGS" ]; then + echo "found=true" >> "$GITHUB_OUTPUT" + echo "$FINDINGS" > /tmp/findings.md + else + echo "found=false" >> "$GITHUB_OUTPUT" + fi + + - name: Post critical finding comment + if: steps.scan.outputs.found == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + BODY="## 🚨 CRITICAL Supply Chain Risk Detected + + This PR contains a pattern that has been used in real supply chain attacks. A maintainer must review the flagged code carefully before merging. + + $(cat /tmp/findings.md) + + --- + *Scanner only fires on high-signal indicators: .pth files, base64+exec/eval combos, subprocess with encoded commands, or install-hook files. Low-signal warnings were removed intentionally — if you're seeing this comment, the finding is worth inspecting.*" + + gh pr comment "${{ github.event.pull_request.number }}" --body "$BODY" || echo "::warning::Could not post PR comment (expected for fork PRs — GITHUB_TOKEN is read-only)" + + - name: Fail on critical findings + if: steps.scan.outputs.found == 'true' + run: | + echo "::error::CRITICAL supply chain risk patterns detected in this PR. See the PR comment for details." + exit 1 + + dep-bounds: + name: Check PyPI dependency upper bounds + runs-on: ubuntu-latest + if: contains(github.event.pull_request.changed_files_url, 'pyproject.toml') || true + steps: + - name: Checkout + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + fetch-depth: 0 + + - name: Check for unbounded PyPI deps + id: bounds + run: | + set -euo pipefail + + BASE="${{ github.event.pull_request.base.sha }}" + HEAD="${{ github.event.pull_request.head.sha }}" + + # Only check added lines in pyproject.toml + ADDED=$(git diff "$BASE".."$HEAD" -- pyproject.toml | grep '^+' | grep -v '^+++' || true) + + if [ -z "$ADDED" ]; then + echo "found=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + + # Match PyPI dep specs that have >= but no < ceiling. + # Pattern: "package>=version" without a following ",<" bound. + # Excludes git+ URLs (which use commit SHAs) and comments. + UNBOUNDED=$(echo "$ADDED" | grep -oE '"[a-zA-Z0-9_-]+(\[[^\]]*\])?>=[ 0-9.]+"' | grep -v ',<' || true) + + if [ -n "$UNBOUNDED" ]; then + echo "found=true" >> "$GITHUB_OUTPUT" + echo "$UNBOUNDED" > /tmp/unbounded.txt + else + echo "found=false" >> "$GITHUB_OUTPUT" + fi + + - name: Post unbounded dep warning + if: steps.bounds.outputs.found == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + BODY="## ⚠️ Unbounded PyPI Dependency Detected + + This PR adds PyPI dependencies without a \`=floor,=1.2.0,<2\"\` + + --- + *See PR #2810 and CONTRIBUTING.md for the full policy rationale.*" + + gh pr comment "${{ github.event.pull_request.number }}" --body "$BODY" || echo "::warning::Could not post PR comment (expected for fork PRs)" + + - name: Fail on unbounded deps + if: steps.bounds.outputs.found == 'true' + run: | + echo "::error::PyPI dependencies without upper bounds detected. Add /dev/null 2>&1; then + echo "Release $GITHUB_REF_NAME found" + exit 0 + fi + echo "Waiting for release... ($i/30)" + sleep 10 + done + echo "::warning::Release $GITHUB_REF_NAME not found after 5 minutes — skipping signature upload" + echo "skip_sign=true" >> "$GITHUB_ENV" + + - name: Sign with Sigstore + if: env.skip_sign != 'true' + uses: sigstore/gh-action-sigstore-python@f514d46b907ebcd5bedc05145c03b69c1edd8b46 # v3.0.0 + with: + inputs: >- + ./dist/*.tar.gz + ./dist/*.whl + + - name: Attach signed artifacts to GitHub Release + if: env.skip_sign != 'true' + env: + GITHUB_TOKEN: ${{ github.token }} + # release.py already created the GitHub Release — just upload + # the Sigstore signatures alongside the existing assets. + run: >- + gh release upload + "$GITHUB_REF_NAME" dist/*.sigstore.json + --repo "$GITHUB_REPOSITORY" + --clobber diff --git a/reference/hermes-agent-2026.5.16/.github/workflows/uv-lockfile-check.yml b/reference/hermes-agent-2026.5.16/.github/workflows/uv-lockfile-check.yml new file mode 100755 index 0000000..190a162 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.github/workflows/uv-lockfile-check.yml @@ -0,0 +1,119 @@ +name: uv.lock check + +# Verify uv.lock is in sync with pyproject.toml. Blocking check — PRs +# that modify pyproject.toml without regenerating uv.lock (or vice versa) +# must not merge, because the Docker build's `uv sync --frozen` step will +# fail on a stale lockfile and we'd rather catch it here than in the +# docker-publish workflow on main. +# +# ───────────────────────────────────────────────────────────────────────── +# IMPORTANT: this check runs against the MERGED state, not just your branch +# ───────────────────────────────────────────────────────────────────────── +# +# For `pull_request` events, GitHub checks out `refs/pull//merge` by +# default — a synthetic commit that merges your PR branch into the CURRENT +# state of `main`. That means the pyproject.toml evaluated here is +# `main's pyproject.toml + your PR's changes to pyproject.toml`, not just +# what's on your branch. +# +# Failure mode this creates: if `main` has advanced since you branched +# (e.g. someone merged a PR that added a dep to pyproject.toml + its +# corresponding uv.lock entries), your branch's uv.lock is missing those +# new entries. `uv lock --check` resolves against the merged pyproject +# and sees a lockfile that doesn't cover all the current deps → fails +# with "The lockfile at uv.lock needs to be updated." +# +# This can be confusing: `uv lock --check` passes locally (your branch +# is internally consistent) but fails in CI (merged state isn't). +# +# Fix is to sync your branch with main and regenerate the lockfile: +# +# git fetch origin main +# git rebase origin/main # or merge, whatever the repo prefers +# uv lock # regenerates uv.lock against new pyproject.toml +# git add uv.lock +# git commit -m "chore: refresh uv.lock after rebase onto main" +# git push --force-with-lease # if you rebased +# +# If you also changed pyproject.toml in your PR, `uv lock` handles that +# at the same time — one regeneration covers both your changes and the +# drift from main. +# +# This is the correct behavior! The check is protecting main's Docker +# build: a post-merge build would see the same merged state and fail +# the same way. Better to catch it here than after merge. + +on: + push: + branches: [main] + paths: + - 'pyproject.toml' + - 'uv.lock' + - '.github/workflows/uv-lockfile-check.yml' + pull_request: + branches: [main] + paths: + - 'pyproject.toml' + - 'uv.lock' + - '.github/workflows/uv-lockfile-check.yml' + +permissions: + contents: read + +concurrency: + group: uv-lockfile-check-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +jobs: + check: + name: uv lock --check + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Checkout code + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + + - name: Install uv + uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5 + + # `uv lock --check` re-resolves the project from pyproject.toml and + # compares the result to uv.lock, exiting non-zero if they disagree. + # No network writes, no file modifications. + # + # On PRs this runs against the merge commit (see comment at the top + # of this file) — failures often mean "your branch is behind main, + # rebase and regenerate uv.lock." + - name: Verify uv.lock is up-to-date + run: | + if ! uv lock --check; then + cat <<'EOF' >> "$GITHUB_STEP_SUMMARY" + ## ❌ uv.lock is out of sync with pyproject.toml + + **If this is a PR:** this check runs against the merged state + (your branch + current `main`), not just your branch. If + `uv lock --check` passes locally, your branch is likely behind + `main` — recent changes to `pyproject.toml` on `main` aren't + reflected in your branch's `uv.lock` yet. + + To fix, sync with main and regenerate the lockfile: + + ```bash + git fetch origin main + git rebase origin/main # or `git merge origin/main` + uv lock # regenerate against new pyproject.toml + git add uv.lock + git commit -m "chore: refresh uv.lock after syncing with main" + git push --force-with-lease # drop --force-with-lease if you merged + ``` + + **If you only changed pyproject.toml:** run `uv lock` locally + and commit the result. + + This check is blocking because the Docker image build uses + `uv sync --frozen --extra all`, which rejects stale lockfiles + — catching it here avoids a ~15 min failed docker-publish run + on `main` post-merge. + EOF + echo "::error title=uv.lock out of sync::Run \`uv lock\` locally and commit the result. If on a PR, sync with main first." + exit 1 + fi diff --git a/reference/hermes-agent-2026.5.16/.gitignore b/reference/hermes-agent-2026.5.16/.gitignore new file mode 100755 index 0000000..37b1f60 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.gitignore @@ -0,0 +1,75 @@ +.DS_Store +/venv/ +/_pycache/ +*.pyc* +__pycache__/ +.venv/ +.vscode/ +.env +.env.local +.env.development.local +.env.test.local +.env.production.local +.env.development +.env.test +export* +__pycache__/model_tools.cpython-310.pyc +__pycache__/web_tools.cpython-310.pyc +logs/ +data/ +.pytest_cache/ +tmp/ +temp_vision_images/ +hermes-*/* +examples/ +tests/quick_test_dataset.jsonl +tests/sample_dataset.jsonl +run_datagen_kimik2-thinking.sh +run_datagen_megascience_glm4-6.sh +run_datagen_sonnet.sh +source-data/* +run_datagen_megascience_glm4-6.sh +data/* +node_modules/ +browser-use/ +agent-browser/ +# Private keys +*.ppk +*.pem +privvy* +images/ +__pycache__/ +hermes_agent.egg-info/ +wandb/ +testlogs + +# CLI config (may contain sensitive SSH paths) +cli-config.yaml + +# Skills Hub state (lives in ~/.hermes/skills/.hub/ at runtime, but just in case) +skills/.hub/ +ignored/ +.worktrees/ +environments/benchmarks/evals/ + +# Web UI build output +hermes_cli/web_dist/ + +# Web UI assets — synced from @nous-research/ui at build time via +# `npm run sync-assets` (see web/package.json). +web/public/fonts/ +web/public/ds-assets/ + +# Release script temp files +.release_notes.md +mini-swe-agent/ + +# Nix +.direnv/ +.nix-stamps/ +result +website/static/api/skills-index.json +models-dev-upstream/ +hermes_cli/tui_dist/* +hermes_cli/scripts/ +docs/superpowers/* \ No newline at end of file diff --git a/reference/hermes-agent-2026.5.16/.gitkeep b/reference/hermes-agent-2026.5.16/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/reference/hermes-agent-2026.5.16/.mailmap b/reference/hermes-agent-2026.5.16/.mailmap new file mode 100755 index 0000000..3f093fb --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.mailmap @@ -0,0 +1,108 @@ +# .mailmap — canonical author mapping for git shortlog / git log / GitHub +# Format: Canonical Name +# See: https://git-scm.com/docs/gitmailmap +# +# This maps commit emails to GitHub noreply addresses so that: +# 1. `git shortlog -sn` shows deduplicated contributor counts +# 2. GitHub's contributor graph can attribute commits correctly +# 3. Contributors with personal/work emails get proper credit +# +# When adding entries: use the contributor's GitHub noreply email as canonical +# so GitHub can link commits to their profile. + +# === Teknium (multiple emails) === +Teknium <127238744+teknium1@users.noreply.github.com> +Teknium <127238744+teknium1@users.noreply.github.com> + +# === Contributors — personal/work emails mapped to GitHub noreply === +# Format: Canonical Name + +# Verified via GH API email search +luyao618 <364939526@qq.com> <364939526@qq.com> +ethernet8023 +nicoloboschi +cherifya +BongSuCHOI +dsocolobsky +pefontana +Helmi +hata1234 + +# Verified via PR investigation / salvage PR bodies +DeployFaith +flobo3 +gaixianggeng +KUSH42 +konsisumer +WorldInnovationsDepartment +m0n5t3r +sprmn24 +fancydirty +fxfitz +limars874 +AaronWong1999 +dippwho +duerzy +geoffwellman +hcshen0111 +jamesarch +stephenschoettler +Tranquil-Flow +Dusk1e +Awsh1 +WAXLYY +donrhmexe +hqhq1025 <1506751656@qq.com> <1506751656@qq.com> +BlackishGreen33 +tomqiaozc +MagicRay1217 +aaronagent <1115117931@qq.com> <1115117931@qq.com> +YoungYang963 +LongOddCode +Cafexss +Cygra +DomGrieco + +# Duplicate email mapping (same person, multiple emails) +Sertug17 <104278804+Sertug17@users.noreply.github.com> +yyovil +DomGrieco +dsocolobsky +olafthiele + +# Verified via git display name matching GH contributor username +cokemine +dalianmao000 +emozilla +jjovalle99 +kagura-agent +spniyant +olafthiele +r266-tech +xingkongliang +win4r +zhouboli +yongtenglei + +# Nous Research team +benbarclay +jquesnelle + +# GH contributor list verified +spideystreet +dorukardahan +MustafaKara7 +Hmbown +kamil-gwozdz +kira-ariaki +knopki +Unayung +SeeYangZhi +Julientalbot +lesterli +JiayuuWang +tesseracttars-creator +xinbenlv +SaulJWu +angelos +MestreY0d4-Uninter <241404605+MestreY0d4-Uninter@users.noreply.github.com> diff --git a/reference/hermes-agent-2026.5.16/.plans/openai-api-server.md b/reference/hermes-agent-2026.5.16/.plans/openai-api-server.md new file mode 100755 index 0000000..59038cb --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.plans/openai-api-server.md @@ -0,0 +1,291 @@ +# OpenAI-Compatible API Server for Hermes Agent + +## Motivation + +Every major chat frontend (Open WebUI 126k★, LobeChat 73k★, LibreChat 34k★, +AnythingLLM 56k★, NextChat 87k★, ChatBox 39k★, Jan 26k★, HF Chat-UI 8k★, +big-AGI 7k★) connects to backends via the OpenAI-compatible REST API with +SSE streaming. By exposing this endpoint, hermes-agent becomes instantly +usable as a backend for all of them — no custom adapters needed. + +## What It Enables + +``` +┌──────────────────┐ +│ Open WebUI │──┐ +│ LobeChat │ │ POST /v1/chat/completions +│ LibreChat │ ├──► Authorization: Bearer ┌─────────────────┐ +│ AnythingLLM │ │ {"messages": [...]} │ hermes-agent │ +│ NextChat │ │ │ gateway │ +│ Any OAI client │──┘ ◄── SSE streaming response │ (API server) │ +└──────────────────┘ └─────────────────┘ +``` + +A user would: +1. Set `API_SERVER_ENABLED=true` in `~/.hermes/.env` +2. Run `hermes gateway` (API server starts alongside Telegram/Discord/etc.) +3. Point Open WebUI (or any frontend) at `http://localhost:8642/v1` +4. Chat with hermes-agent through any OpenAI-compatible UI + +## Endpoints + +| Method | Path | Purpose | +|--------|------|---------| +| POST | `/v1/chat/completions` | Chat with the agent (streaming + non-streaming) | +| GET | `/v1/models` | List available "models" (returns hermes-agent as a model) | +| GET | `/health` | Health check | + +## Architecture + +### Option A: Gateway Platform Adapter (recommended) + +Create `gateway/platforms/api_server.py` as a new platform adapter that +extends `BasePlatformAdapter`. This is the cleanest approach because: + +- Reuses all gateway infrastructure (session management, auth, context building) +- Runs in the same async loop as other adapters +- Gets message handling, interrupt support, and session persistence for free +- Follows the established pattern (like Telegram, Discord, etc.) +- Uses `aiohttp.web` (already a dependency) for the HTTP server + +The adapter would start an `aiohttp.web.Application` server in `connect()` +and route incoming HTTP requests through the standard `handle_message()` pipeline. + +### Option B: Standalone Component + +A separate HTTP server class in `gateway/api_server.py` that creates its own +AIAgent instances directly. Simpler but duplicates session/auth logic. + +**Recommendation: Option A** — fits the existing architecture, less code to +maintain, gets all gateway features for free. + +## Request/Response Format + +### Chat Completions (non-streaming) + +``` +POST /v1/chat/completions +Authorization: Bearer hermes-api-key-here +Content-Type: application/json + +{ + "model": "hermes-agent", + "messages": [ + {"role": "system", "content": "You are a helpful assistant."}, + {"role": "user", "content": "What files are in the current directory?"} + ], + "stream": false, + "temperature": 0.7 +} +``` + +Response: +```json +{ + "id": "chatcmpl-abc123", + "object": "chat.completion", + "created": 1710000000, + "model": "hermes-agent", + "choices": [{ + "index": 0, + "message": { + "role": "assistant", + "content": "Here are the files in the current directory:\n..." + }, + "finish_reason": "stop" + }], + "usage": { + "prompt_tokens": 50, + "completion_tokens": 200, + "total_tokens": 250 + } +} +``` + +### Chat Completions (streaming) + +Same request with `"stream": true`. Response is SSE: + +``` +data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]} + +data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Here "},"finish_reason":null}]} + +data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"are "},"finish_reason":null}]} + +data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]} + +data: [DONE] +``` + +### Models List + +``` +GET /v1/models +Authorization: Bearer hermes-api-key-here +``` + +Response: +```json +{ + "object": "list", + "data": [{ + "id": "hermes-agent", + "object": "model", + "created": 1710000000, + "owned_by": "hermes-agent" + }] +} +``` + +## Key Design Decisions + +### 1. Session Management + +The OpenAI API is stateless — each request includes the full conversation. +But hermes-agent sessions have persistent state (memory, skills, tool context). + +**Approach: Hybrid** +- Default: Stateless. Each request is independent. The `messages` array IS + the conversation. No session persistence between requests. +- Opt-in persistent sessions via `X-Session-ID` header. When provided, the + server maintains session state across requests (conversation history, + memory context, tool state). This enables richer agent behavior. +- The session ID also enables interrupt support — a subsequent request with + the same session ID while one is running triggers an interrupt. + +### 2. Streaming + +The agent's `run_conversation()` is synchronous and returns the full response. +For real SSE streaming, we need to emit chunks as they're generated. + +**Phase 1 (MVP):** Run agent in a thread, return the complete response as +a single SSE chunk + `[DONE]`. This works with all frontends — they just see +a fast single-chunk response. Not true streaming but functional. + +**Phase 2:** Add a response callback to AIAgent that emits text chunks as the +LLM generates them. The API server captures these via a queue and streams them +as SSE events. This gives real token-by-token streaming. + +**Phase 3:** Stream tool execution progress too — emit tool call/result events +as the agent works, giving frontends visibility into what the agent is doing. + +### 3. Tool Transparency + +Two modes: +- **Opaque (default):** Frontends see only the final response. Tool calls + happen server-side and are invisible. Best for general-purpose UIs. +- **Transparent (opt-in via header):** Tool calls are emitted as OpenAI-format + tool_call/tool_result messages in the stream. Useful for agent-aware frontends. + +### 4. Authentication + +- Bearer token via `Authorization: Bearer ` header +- Token configured via `API_SERVER_KEY` env var +- Optional: allow unauthenticated local-only access (127.0.0.1 bind) +- Follows the same pattern as other platform adapters + +### 5. Model Mapping + +Frontends send `"model": "hermes-agent"` (or whatever). The actual LLM model +used is configured server-side in config.yaml. The API server maps any +requested model name to the configured hermes-agent model. + +Optionally, allow model passthrough: if the frontend sends +`"model": "anthropic/claude-sonnet-4"`, the agent uses that model. Controlled +by a config flag. + +## Configuration + +```yaml +# In config.yaml +api_server: + enabled: true + port: 8642 + host: "127.0.0.1" # localhost only by default + key: "your-secret-key" # or via API_SERVER_KEY env var + allow_model_override: false # let clients choose the model + max_concurrent: 5 # max simultaneous requests +``` + +Environment variables: +```bash +API_SERVER_ENABLED=true +API_SERVER_PORT=8642 +API_SERVER_HOST=127.0.0.1 +API_SERVER_KEY=your-secret-key +``` + +## Implementation Plan + +### Phase 1: MVP (non-streaming) — PR + +1. `gateway/platforms/api_server.py` — new adapter + - aiohttp.web server with endpoints: + - `POST /v1/chat/completions` — Chat Completions API (universal compat) + - `POST /v1/responses` — Responses API (server-side state, tool preservation) + - `GET /v1/models` — list available models + - `GET /health` — health check + - Bearer token auth middleware + - Non-streaming responses (run agent, return full result) + - Chat Completions: stateless, messages array is the conversation + - Responses API: server-side conversation storage via previous_response_id + - Store full internal conversation (including tool calls) keyed by response ID + - On subsequent requests, reconstruct full context from stored chain + - Frontend system prompt layered on top of hermes-agent's core prompt + +2. `gateway/config.py` — add `Platform.API_SERVER` enum + config + +3. `gateway/run.py` — register adapter in `_create_adapter()` + +4. Tests in `tests/gateway/test_api_server.py` + +### Phase 2: SSE Streaming + +1. Add response streaming to both endpoints + - Chat Completions: `choices[0].delta.content` SSE format + - Responses API: semantic events (response.output_text.delta, etc.) + - Run agent in thread, collect output via callback queue + - Handle client disconnect (cancel agent) + +2. Add `stream_callback` parameter to `AIAgent.run_conversation()` + +### Phase 3: Enhanced Features + +1. Tool call transparency mode (opt-in) +2. Model passthrough/override +3. Concurrent request limiting +4. Usage tracking / rate limiting +5. CORS headers for browser-based frontends +6. GET /v1/responses/{id} — retrieve stored response +7. DELETE /v1/responses/{id} — delete stored response + +## Files Changed + +| File | Change | +|------|--------| +| `gateway/platforms/api_server.py` | NEW — main adapter (~300 lines) | +| `gateway/config.py` | Add Platform.API_SERVER + config (~20 lines) | +| `gateway/run.py` | Register adapter in _create_adapter() (~10 lines) | +| `tests/gateway/test_api_server.py` | NEW — tests (~200 lines) | +| `cli-config.yaml.example` | Add api_server section | +| `README.md` | Mention API server in platform list | + +## Compatibility Matrix + +Once implemented, hermes-agent works as a drop-in backend for: + +| Frontend | Stars | How to Connect | +|----------|-------|---------------| +| Open WebUI | 126k | Settings → Connections → Add OpenAI API, URL: `http://localhost:8642/v1` | +| NextChat | 87k | BASE_URL env var | +| LobeChat | 73k | Custom provider endpoint | +| AnythingLLM | 56k | LLM Provider → Generic OpenAI | +| Oobabooga | 42k | Already a backend, not a frontend | +| ChatBox | 39k | API Host setting | +| LibreChat | 34k | librechat.yaml custom endpoint | +| Chatbot UI | 29k | Custom API endpoint | +| Jan | 26k | Remote model config | +| AionUI | 18k | Custom API endpoint | +| HF Chat-UI | 8k | OPENAI_BASE_URL env var | +| big-AGI | 7k | Custom endpoint | diff --git a/reference/hermes-agent-2026.5.16/.plans/streaming-support.md b/reference/hermes-agent-2026.5.16/.plans/streaming-support.md new file mode 100755 index 0000000..cb4ec11 --- /dev/null +++ b/reference/hermes-agent-2026.5.16/.plans/streaming-support.md @@ -0,0 +1,705 @@ +# Streaming LLM Response Support for Hermes Agent + +## Overview + +Add token-by-token streaming of LLM responses across all platforms. When enabled, +users see the response typing out live instead of waiting for the full generation. +Streaming is opt-in via config, defaults to off, and all existing non-streaming +code paths remain intact as the default. + +## Design Principles + +1. **Feature-flagged**: `streaming.enabled: true` in config.yaml. Off by default. + When off, all existing code paths are unchanged — zero risk to current behavior. +2. **Callback-based**: A simple `stream_callback(text_delta: str)` function injected + into AIAgent. The agent doesn't know or care what the consumer does with tokens. +3. **Graceful degradation**: If the provider doesn't support streaming, or streaming + fails for any reason, silently fall back to the non-streaming path. +4. **Platform-agnostic core**: The streaming mechanism in AIAgent works the same + regardless of whether the consumer is CLI, Telegram, Discord, or the API server. + +--- + +## Architecture + +``` + stream_callback(delta) + │ + ┌─────────────┐ ┌─────────────▼──────────────┐ + │ LLM API │ │ queue.Queue() │ + │ (stream) │───►│ thread-safe bridge between │ + │ │ │ agent thread & consumer │ + └─────────────┘ └─────────────┬──────────────┘ + │ + ┌──────────────┼──────────────┐ + │ │ │ + ┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼─────┐ + │ CLI │ │ Gateway │ │ API Server│ + │ print to │ │ edit msg │ │ SSE event │ + │ terminal │ │ on Tg/Dc │ │ to client │ + └───────────┘ └───────────┘ └───────────┘ +``` + +The agent runs in a thread. The callback puts tokens into a thread-safe queue. +Each consumer reads the queue in its own context (async task, main thread, etc.). + +--- + +## Configuration + +### config.yaml + +```yaml +streaming: + enabled: false # Master switch. Default off. + # Per-platform overrides (optional): + # cli: true # Override for CLI only + # telegram: true # Override for Telegram only + # discord: false # Keep Discord non-streaming + # api_server: true # Override for API server +``` + +### Environment variables + +``` +HERMES_STREAMING_ENABLED=true # Master switch via env +``` + +### How the flag is read + +- **CLI**: `load_cli_config()` reads `streaming.enabled`, sets env var. AIAgent + checks at init time. +- **Gateway**: `_run_agent()` reads config, decides whether to pass + `stream_callback` to the AIAgent constructor. +- **API server**: For Chat Completions `stream=true` requests, always uses streaming + regardless of config (the client is explicitly requesting it). For non-stream + requests, uses config. + +### Precedence + +1. API server: client's `stream` field overrides everything +2. Per-platform config override (e.g., `streaming.telegram: true`) +3. Master `streaming.enabled` flag +4. Default: off + +--- + +## Implementation Plan + +### Phase 1: Core streaming infrastructure in AIAgent + +**File: run_agent.py** + +#### 1a. Add stream_callback parameter to __init__ (~5 lines) + +```python +def __init__(self, ..., stream_callback: callable = None, ...): + self.stream_callback = stream_callback +``` + +No other init changes. The callback is optional — when None, everything +works exactly as before. + +#### 1b. Add _run_streaming_chat_completion() method (~65 lines) + +New method for Chat Completions API streaming: + +```python +def _run_streaming_chat_completion(self, api_kwargs: dict): + """Stream a chat completion, emitting text tokens via stream_callback. + + Returns a fake response object compatible with the non-streaming code path. + Falls back to non-streaming on any error. + """ + stream_kwargs = dict(api_kwargs) + stream_kwargs["stream"] = True + stream_kwargs["stream_options"] = {"include_usage": True} + + accumulated_content = [] + accumulated_tool_calls = {} # index -> {id, name, arguments} + final_usage = None + + try: + stream = self.client.chat.completions.create(**stream_kwargs) + + for chunk in stream: + if not chunk.choices: + # Usage-only chunk (final) + if chunk.usage: + final_usage = chunk.usage + continue + + delta = chunk.choices[0].delta + + # Text content — emit via callback + if delta.content: + accumulated_content.append(delta.content) + if self.stream_callback: + try: + self.stream_callback(delta.content) + except Exception: + pass + + # Tool call deltas — accumulate silently + if delta.tool_calls: + for tc_delta in delta.tool_calls: + idx = tc_delta.index + if idx not in accumulated_tool_calls: + accumulated_tool_calls[idx] = { + "id": tc_delta.id or "", + "name": "", "arguments": "" + } + if tc_delta.function: + if tc_delta.function.name: + accumulated_tool_calls[idx]["name"] = tc_delta.function.name + if tc_delta.function.arguments: + accumulated_tool_calls[idx]["arguments"] += tc_delta.function.arguments + + # Build fake response compatible with existing code + tool_calls = [] + for idx in sorted(accumulated_tool_calls): + tc = accumulated_tool_calls[idx] + if tc["name"]: + tool_calls.append(SimpleNamespace( + id=tc["id"], type="function", + function=SimpleNamespace(name=tc["name"], arguments=tc["arguments"]), + )) + + return SimpleNamespace( + choices=[SimpleNamespace( + message=SimpleNamespace( + content="".join(accumulated_content) or "", + tool_calls=tool_calls or None, + role="assistant", + ), + finish_reason="tool_calls" if tool_calls else "stop", + )], + usage=final_usage, + model=self.model, + ) + + except Exception as e: + logger.debug("Streaming failed, falling back to non-streaming: %s", e) + return self.client.chat.completions.create(**api_kwargs) +``` + +#### 1c. Modify _run_codex_stream() for Responses API (~10 lines) + +The method already iterates the stream. Add callback emission: + +```python +def _run_codex_stream(self, api_kwargs: dict): + with self.client.responses.stream(**api_kwargs) as stream: + for event in stream: + # Emit text deltas if streaming callback is set + if self.stream_callback and hasattr(event, 'type'): + if event.type == 'response.output_text.delta': + try: + self.stream_callback(event.delta) + except Exception: + pass + return stream.get_final_response() +``` + +#### 1d. Modify _interruptible_api_call() (~5 lines) + +Add the streaming branch: + +```python +def _call(): + try: + if self.api_mode == "codex_responses": + result["response"] = self._run_codex_stream(api_kwargs) + elif self.stream_callback is not None: + result["response"] = self._run_streaming_chat_completion(api_kwargs) + else: + result["response"] = self.client.chat.completions.create(**api_kwargs) + except Exception as e: + result["error"] = e +``` + +#### 1e. Signal end-of-stream to consumers (~5 lines) + +After the API call returns, signal the callback that streaming is done +so consumers can finalize (remove cursor, close SSE, etc.): + +```python +# In run_conversation(), after _interruptible_api_call returns: +if self.stream_callback: + try: + self.stream_callback(None) # None = end of stream signal + except Exception: + pass +``` + +Consumers check: `if delta is None: finalize()` + +**Tests for Phase 1:** (~150 lines) +- Test _run_streaming_chat_completion with mocked stream +- Test fallback to non-streaming on error +- Test tool_call accumulation during streaming +- Test stream_callback receives correct deltas +- Test None signal at end of stream +- Test streaming disabled when callback is None + +--- + +### Phase 2: Gateway consumers (Telegram, Discord, etc.) + +**File: gateway/run.py** + +#### 2a. Read streaming config (~15 lines) + +In `_run_agent()`, before creating the AIAgent: + +```python +# Read streaming config +_streaming_enabled = False +try: + # Check per-platform override first + platform_key = source.platform.value if source.platform else "" + _stream_cfg = {} # loaded from config.yaml streaming section + if _stream_cfg.get(platform_key) is not None: + _streaming_enabled = bool(_stream_cfg[platform_key]) + else: + _streaming_enabled = bool(_stream_cfg.get("enabled", False)) +except Exception: + pass +# Env var override +if os.getenv("HERMES_STREAMING_ENABLED", "").lower() in ("true", "1", "yes"): + _streaming_enabled = True +``` + +#### 2b. Set up queue + callback (~15 lines) + +```python +_stream_q = None +_stream_done = None +_stream_msg_id = [None] # mutable ref for the async task + +if _streaming_enabled: + import queue as _q + _stream_q = _q.Queue() + _stream_done = threading.Event() + + def _on_token(delta): + if delta is None: + _stream_done.set() + else: + _stream_q.put(delta) +``` + +Pass `stream_callback=_on_token` to the AIAgent constructor. + +#### 2c. Telegram/Discord stream preview task (~50 lines) + +```python +async def stream_preview(): + """Progressively edit a message with streaming tokens.""" + if not _stream_q: + return + adapter = self.adapters.get(source.platform) + if not adapter: + return + + accumulated = [] + token_count = 0 + last_edit = 0.0 + MIN_TOKENS = 20 # Don't show until enough context + EDIT_INTERVAL = 1.5 # Respect Telegram rate limits + + try: + while not _stream_done.is_set(): + try: + chunk = _stream_q.get(timeout=0.1) + accumulated.append(chunk) + token_count += 1 + except queue.Empty: + continue + + now = time.monotonic() + if token_count >= MIN_TOKENS and (now - last_edit) >= EDIT_INTERVAL: + preview = "".join(accumulated) + " ▌" + if _stream_msg_id[0] is None: + r = await adapter.send( + chat_id=source.chat_id, + content=preview, + metadata=_thread_metadata, + ) + if r.success and r.message_id: + _stream_msg_id[0] = r.message_id + else: + await adapter.edit_message( + chat_id=source.chat_id, + message_id=_stream_msg_id[0], + content=preview, + ) + last_edit = now + + # Drain remaining tokens + while not _stream_q.empty(): + accumulated.append(_stream_q.get_nowait()) + + # Final edit — remove cursor, show complete text + if _stream_msg_id[0] and accumulated: + await adapter.edit_message( + chat_id=source.chat_id, + message_id=_stream_msg_id[0], + content="".join(accumulated), + ) + + except asyncio.CancelledError: + # Clean up on cancel + if _stream_msg_id[0] and accumulated: + try: + await adapter.edit_message( + chat_id=source.chat_id, + message_id=_stream_msg_id[0], + content="".join(accumulated), + ) + except Exception: + pass + except Exception as e: + logger.debug("stream_preview error: %s", e) +``` + +#### 2d. Skip final send if already streamed (~10 lines) + +In `_process_message_background()` (base.py), after getting the response, +if streaming was active and `_stream_msg_id[0]` is set, the final response +was already delivered via progressive edits. Skip the normal `self.send()` +call to avoid duplicating the message. + +This is the most delicate integration point — we need to communicate from +the gateway's `_run_agent` back to the base adapter's response sender that +the response was already delivered. Options: + +- **Option A**: Return a special marker in the result dict: + `result["_streamed_msg_id"] = _stream_msg_id[0]` + The base adapter checks this and skips `send()`. + +- **Option B**: Edit the already-sent message with the final response + (which may differ slightly from accumulated tokens due to think-block + stripping, etc.) and don't send a new one. + +- **Option C**: The stream preview task handles the FULL final response + (including any post-processing), and the handler returns None to skip + the normal send path. + +Recommended: **Option A** — cleanest separation. The result dict already +carries metadata; adding one more field is low-risk. + +**Platform-specific considerations:** + +| Platform | Edit support | Rate limits | Streaming approach | +|----------|-------------|-------------|-------------------| +| Telegram | ✅ edit_message_text | ~20 edits/min | Edit every 1.5s | +| Discord | ✅ message.edit | 5 edits/5s per message | Edit every 1.2s | +| Slack | ✅ chat.update | Tier 3 (~50/min) | Edit every 1.5s | +| WhatsApp | ❌ no edit support | N/A | Skip streaming, use normal path | +| HomeAssistant | ❌ no edit | N/A | Skip streaming | +| API Server | ✅ SSE native | No limit | Real SSE events | + +WhatsApp and HomeAssistant fall back to non-streaming automatically because +they don't support message editing. + +**Tests for Phase 2:** (~100 lines) +- Test stream_preview sends/edits correctly +- Test skip-final-send when streaming delivered +- Test WhatsApp/HA graceful fallback +- Test streaming disabled per-platform config +- Test thread_id metadata forwarded in stream messages + +--- + +### Phase 3: CLI streaming + +**File: cli.py** + +#### 3a. Set up callback in the CLI chat loop (~20 lines) + +In `_chat_once()` or wherever the agent is invoked: + +```python +if streaming_enabled: + _stream_q = queue.Queue() + _stream_done = threading.Event() + + def _cli_stream_callback(delta): + if delta is None: + _stream_done.set() + else: + _stream_q.put(delta) + + agent.stream_callback = _cli_stream_callback +``` + +#### 3b. Token display thread/task (~30 lines) + +Start a thread that reads the queue and prints tokens: + +```python +def _stream_display(): + """Print tokens to terminal as they arrive.""" + first_token = True + while not _stream_done.is_set(): + try: + delta = _stream_q.get(timeout=0.1) + except queue.Empty: + continue + if first_token: + # Print response box top border + _cprint(f"\n{top}") + first_token = False + sys.stdout.write(delta) + sys.stdout.flush() + # Drain remaining + while not _stream_q.empty(): + sys.stdout.write(_stream_q.get_nowait()) + sys.stdout.flush() + # Print bottom border + _cprint(f"\n\n{bot}") +``` + +**Integration challenge: prompt_toolkit** + +The CLI uses prompt_toolkit which controls the terminal. Writing directly +to stdout while prompt_toolkit is active can cause display corruption. +The existing KawaiiSpinner already solves this by using prompt_toolkit's +`patch_stdout` context. The streaming display would need to do the same. + +Alternative: use `_cprint()` for each token chunk (routes through +prompt_toolkit's renderer). But this might be slow for individual tokens. + +Recommended approach: accumulate tokens in small batches (e.g., every 50ms) +and `_cprint()` the batch. This balances display responsiveness with +prompt_toolkit compatibility. + +**Tests for Phase 3:** (~50 lines) +- Test CLI streaming callback setup +- Test response box borders with streaming +- Test fallback when streaming disabled + +--- + +### Phase 4: API Server real streaming + +**File: gateway/platforms/api_server.py** + +Replace the pseudo-streaming `_write_sse_chat_completion()` with real +token-by-token SSE when the agent supports it. + +#### 4a. Wire streaming callback for stream=true requests (~20 lines) + +```python +if stream: + _stream_q = queue.Queue() + + def _api_stream_callback(delta): + _stream_q.put(delta) # None = done + + # Pass callback to _run_agent + result, usage = await self._run_agent( + ..., stream_callback=_api_stream_callback, + ) +``` + +#### 4b. Real SSE writer (~40 lines) + +```python +async def _write_real_sse(self, request, completion_id, model, stream_q): + response = web.StreamResponse( + headers={"Content-Type": "text/event-stream", "Cache-Control": "no-cache"}, + ) + await response.prepare(request) + + # Role chunk + await response.write(...) + + # Stream content chunks as they arrive + while True: + try: + delta = await asyncio.get_event_loop().run_in_executor( + None, lambda: stream_q.get(timeout=0.1) + ) + except queue.Empty: + continue + + if delta is None: # End of stream + break + + chunk = {"id": completion_id, "object": "chat.completion.chunk", ... + "choices": [{"delta": {"content": delta}, ...}]} + await response.write(f"data: {json.dumps(chunk)}\n\n".encode()) + + # Finish + [DONE] + await response.write(...) + await response.write(b"data: [DONE]\n\n") + return response +``` + +**Challenge: concurrent execution** + +The agent runs in a thread executor. SSE writing happens in the async event +loop. The queue bridges them. But `_run_agent()` currently awaits the full +result before returning. For real streaming, we need to start the agent in +the background and stream tokens while it runs: + +```python +# Start agent in background +agent_task = asyncio.create_task(self._run_agent_async(...)) + +# Stream tokens while agent runs +await self._write_real_sse(request, ..., stream_q) + +# Agent is done by now (stream_q received None) +result, usage = await agent_task +``` + +This requires splitting `_run_agent` into an async version that doesn't +block waiting for the result, or running it in a separate task. + +**Responses API SSE format:** + +For `/v1/responses` with `stream=true`, the SSE events are different: + +``` +event: response.output_text.delta +data: {"type":"response.output_text.delta","delta":"Hello"} + +event: response.completed +data: {"type":"response.completed","response":{...}} +``` + +This needs a separate SSE writer that emits Responses API format events. + +**Tests for Phase 4:** (~80 lines) +- Test real SSE streaming with mocked agent +- Test SSE event format (Chat Completions vs Responses) +- Test client disconnect during streaming +- Test fallback to pseudo-streaming when callback not available + +--- + +## Integration Issues & Edge Cases + +### 1. Tool calls during streaming + +When the model returns tool calls instead of text, no text tokens are emitted. +The stream_callback is simply never called with text. After tools execute, the +next API call may produce the final text response — streaming picks up again. + +The stream preview task needs to handle this: if no tokens arrive during a +tool-call round, don't send/edit any message. The tool progress messages +continue working as before. + +### 2. Duplicate messages + +The biggest risk: the agent sends the final response normally (via the +existing send path) AND the stream preview already showed it. The user +sees the response twice. + +Prevention: when streaming is active and tokens were delivered, the final +response send must be suppressed. The `result["_streamed_msg_id"]` marker +tells the base adapter to skip its normal send. + +### 3. Response post-processing + +The final response may differ from the accumulated streamed tokens: +- Think block stripping (`...` removed) +- Trailing whitespace cleanup +- Tool result media tag appending + +The stream preview shows raw tokens. The final edit should use the +post-processed version. This means the final edit (removing the cursor) +should use the post-processed `final_response`, not just the accumulated +stream text. + +### 4. Context compression during streaming + +If the agent triggers context compression mid-conversation, the streaming +tokens from BEFORE compression are from a different context than those +after. This isn't a problem in practice — compression happens between +API calls, not during streaming. + +### 5. Interrupt during streaming + +User sends a new message while streaming → interrupt. The stream is killed +(HTTP connection closed), accumulated tokens are shown as-is (no cursor), +and the interrupt message is processed normally. This is already handled by +`_interruptible_api_call` closing the client. + +### 6. Multi-model / fallback + +If the primary model fails and the agent falls back to a different model, +streaming state resets. The fallback call may or may not support streaming. +The graceful fallback in `_run_streaming_chat_completion` handles this. + +### 7. Rate limiting on edits + +Telegram: ~20 edits/minute (~1 every 3 seconds to be safe) +Discord: 5 edits per 5 seconds per message +Slack: ~50 API calls/minute + +The 1.5s edit interval is conservative enough for all platforms. If we get +429 rate limit errors on edits, just skip that edit cycle and try next time. + +--- + +## Files Changed Summary + +| File | Phase | Changes | +|------|-------|---------| +| `run_agent.py` | 1 | +stream_callback param, +_run_streaming_chat_completion(), modify _run_codex_stream(), modify _interruptible_api_call() | +| `gateway/run.py` | 2 | +streaming config reader, +queue/callback setup, +stream_preview task, +skip-final-send logic | +| `gateway/platforms/base.py` | 2 | +check for _streamed_msg_id in response handler | +| `cli.py` | 3 | +streaming setup, +token display, +response box integration | +| `gateway/platforms/api_server.py` | 4 | +real SSE writer, +streaming callback wiring | +| `hermes_cli/config.py` | 1 | +streaming config defaults | +| `cli-config.yaml.example` | 1 | +streaming section | +| `tests/test_streaming.py` | 1-4 | NEW — ~380 lines of tests | + +**Total new code**: ~500 lines across all phases +**Total test code**: ~380 lines + +--- + +## Rollout Plan + +1. **Phase 1** (core): Merge to main. Streaming disabled by default. + Zero impact on existing behavior. Can be tested with env var. + +2. **Phase 2** (gateway): Merge to main. Test on Telegram manually. + Enable per-platform: `streaming.telegram: true` in config. + +3. **Phase 3** (CLI): Merge to main. Test in terminal. + Enable: `streaming.cli: true` or `streaming.enabled: true`. + +4. **Phase 4** (API server): Merge to main. Test with Open WebUI. + Auto-enabled when client sends `stream: true`. + +Each phase is independently mergeable and testable. Streaming stays +off by default throughout. Once all phases are stable, consider +changing the default to enabled. + +--- + +## Config Reference (final state) + +```yaml +# config.yaml +streaming: + enabled: false # Master switch (default: off) + cli: true # Per-platform override + telegram: true + discord: true + slack: true + api_server: true # API server always streams when client requests it + edit_interval: 1.5 # Seconds between message edits (default: 1.5) + min_tokens: 20 # Tokens before first display (default: 20) +``` + +```bash +# Environment variable override +HERMES_STREAMING_ENABLED=true +``` diff --git a/reference/openai-codex/.bazelignore b/reference/openai-codex/.bazelignore new file mode 100644 index 0000000..2e90753 --- /dev/null +++ b/reference/openai-codex/.bazelignore @@ -0,0 +1,4 @@ +# Without this, Bazel will consider BUILD.bazel files in +# .git/sl/origbackups (which can be populated by Sapling SCM). +.git +codex-rs/target diff --git a/reference/openai-codex/.bazelrc b/reference/openai-codex/.bazelrc new file mode 100644 index 0000000..6357eb8 --- /dev/null +++ b/reference/openai-codex/.bazelrc @@ -0,0 +1,202 @@ +common --repo_env=BAZEL_DO_NOT_DETECT_CPP_TOOLCHAIN=1 +common --repo_env=BAZEL_NO_APPLE_CPP_TOOLCHAIN=1 +# Dummy xcode config so we don't need to build xcode_locator in repo rule. +common --xcode_version_config=//:disable_xcode + +common --disk_cache=~/.cache/bazel-disk-cache +common --repo_contents_cache=~/.cache/bazel-repo-contents-cache +common --repository_cache=~/.cache/bazel-repo-cache +common --remote_cache_compression +startup --experimental_remote_repo_contents_cache + +common --experimental_platform_in_output_dir + +# Runfiles strategy rationale: codex-rs/utils/cargo-bin/README.md +common --noenable_runfiles + +common --enable_platform_specific_config +common:linux --host_platform=//:local_linux +common:windows --host_platform=//:local_windows +common --@rules_cc//cc/toolchains/args/archiver_flags:use_libtool_on_macos=False +common --@llvm//config:experimental_stub_libgcc_s + +# TODO(zbarsky): rules_rust doesn't implement this flag properly with remote exec... +# common --@rules_rust//rust/settings:pipelined_compilation + +common --incompatible_strict_action_env +# Not ideal, but We need to allow dotslash to be found +common:linux --test_env=PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin +common:macos --test_env=PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin + +# Pass through some env vars Windows needs to use powershell? +common:windows --test_env=SYSTEMROOT +common:windows --test_env=COMSPEC +common:windows --test_env=WINDIR +# Rust's libtest harness runs test bodies on std-spawned threads. The default +# 2 MiB stack can be too small for large async test futures on Windows CI; see +# https://github.com/openai/codex/pull/19067 for the motivating failure. +common --test_env=RUST_MIN_STACK=8388608 # 8 MiB + +common --test_output=errors +common --bes_results_url=https://app.buildbuddy.io/invocation/ +common --bes_backend=grpcs://remote.buildbuddy.io +common --remote_cache=grpcs://remote.buildbuddy.io +common --remote_download_toplevel +common --nobuild_runfile_links +common --remote_timeout=3600 +common --noexperimental_throttle_remote_action_building +common --experimental_remote_execution_keepalive +common --grpc_keepalive_time=30s +common --experimental_remote_downloader=grpcs://remote.buildbuddy.io + +# This limits both in-flight executions and concurrent downloads. Even with high number +# of jobs execution will still be limited by CPU cores, so this just pays a bit of +# memory in exchange for higher download concurrency. +common --jobs=30 + +common:remote --extra_execution_platforms=//:rbe +common:remote --remote_executor=grpcs://remote.buildbuddy.io +common:remote --jobs=800 +# TODO(team): Evaluate if this actually helps, zbarsky is not sure, everything seems bottlenecked on `core` either way. +# Enable pipelined compilation since we are not bound by local CPU count. +#common:remote --@rules_rust//rust/settings:pipelined_compilation + +# GitHub Actions CI configs. +common:ci --remote_download_minimal +common:ci --keep_going +common:ci --verbose_failures +common:ci --build_metadata=REPO_URL=https://github.com/openai/codex.git +common:ci --build_metadata=ROLE=CI +common:ci --build_metadata=VISIBILITY=PUBLIC +# rules_rust derives debug level from Bazel toolchain/compilation-mode settings, +# not Cargo profiles. Keep CI Rust actions explicit and lean. +common:ci --@rules_rust//rust/settings:extra_rustc_flag=-Cdebuginfo=0 +common:ci --@rules_rust//rust/settings:extra_exec_rustc_flag=-Cdebuginfo=0 + +# Disable disk cache in CI since we have a remote one and aren't using persistent workers. +common:ci --disk_cache= + +# Shared config for the main Bazel CI workflow. +common:ci-bazel --config=ci +common:ci-bazel --build_metadata=TAG_workflow=bazel +# Bazel CI cross-compiles in several legs, and the V8-backed code-mode tests +# are not stable in that setup yet. Keep running the rest of the Rust +# integration suites through the workspace-root launcher. +common:ci-bazel --test_env=CODEX_BAZEL_TEST_SKIP_FILTERS=suite::code_mode:: + +# Shared config for Bazel-backed Rust linting. +build:clippy --aspects=@rules_rust//rust:defs.bzl%rust_clippy_aspect +build:clippy --output_groups=+clippy_checks +build:clippy --@rules_rust//rust/settings:clippy.toml=//codex-rs:clippy.toml +# Keep this deny-list in sync with `codex-rs/Cargo.toml` `[workspace.lints.clippy]`. +# Cargo applies those lint levels to member crates that opt into `[lints] workspace = true` +# in their own `Cargo.toml`, but `rules_rust` Bazel clippy does not read Cargo lint levels. +# `clippy.toml` can configure lint behavior, but it cannot set allow/warn/deny/forbid levels. +build:clippy --@rules_rust//rust/settings:clippy_flag=-Dwarnings +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::await_holding_invalid_type +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::await_holding_lock +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::expect_used +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::identity_op +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::manual_clamp +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::manual_filter +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::manual_find +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::manual_flatten +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::manual_map +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::manual_memcpy +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::manual_non_exhaustive +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::manual_ok_or +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::manual_range_contains +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::manual_retain +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::manual_strip +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::manual_try_fold +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::manual_unwrap_or +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::needless_borrow +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::needless_borrowed_reference +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::needless_collect +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::needless_late_init +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::needless_option_as_deref +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::needless_question_mark +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::needless_update +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::redundant_clone +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::redundant_closure +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::redundant_closure_for_method_calls +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::redundant_static_lifetimes +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::trivially_copy_pass_by_ref +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::uninlined_format_args +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::unnecessary_filter_map +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::unnecessary_lazy_evaluations +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::unnecessary_sort_by +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::unnecessary_to_owned +build:clippy --@rules_rust//rust/settings:clippy_flag=--deny=clippy::unwrap_used + +# Shared config for Bazel-backed argument-comment-lint. +build:argument-comment-lint --aspects=//tools/argument-comment-lint:lint_aspect.bzl%rust_argument_comment_lint_aspect +build:argument-comment-lint --output_groups=argument_comment_lint_checks +build:argument-comment-lint --@rules_rust//rust/toolchain/channel=nightly + +# Rearrange caches on Windows so they're on the same volume as the checkout. +common:ci-windows --config=ci-bazel +common:ci-windows --build_metadata=TAG_os=windows +common:ci-windows --repo_contents_cache=D:/a/.cache/bazel-repo-contents-cache + +# We prefer to run the build actions entirely remotely so we can dial up the concurrency. +# We have platform-specific tests, so we want to execute the tests on all platforms using the strongest sandboxing available on each platform. + +# On linux, we can do a full remote build/test, by targeting the right (x86/arm) runners, so we have coverage of both. +# Linux crossbuilds don't work until we untangle the libc constraint mess. +common:ci-linux --config=ci-bazel +common:ci-linux --build_metadata=TAG_os=linux +common:ci-linux --config=remote +common:ci-linux --strategy=remote +common:ci-linux --platforms=//:rbe + +# On mac, we can run all the build actions remotely but test actions locally. +common:ci-macos --config=ci-bazel +common:ci-macos --build_metadata=TAG_os=macos +common:ci-macos --config=remote +common:ci-macos --strategy=remote +common:ci-macos --strategy=TestRunner=darwin-sandbox,local + +# On Windows, use Linux remote execution for build actions but keep test actions +# on the Windows runner so Bazel's normal test sharding and flaky-test retries +# still run against Windows binaries. +common:ci-windows-cross --config=ci-windows +common:ci-windows-cross --build_metadata=TAG_windows_cross_compile=true +common:ci-windows-cross --config=remote +common:ci-windows-cross --host_platform=//:rbe +common:ci-windows-cross --strategy=remote +common:ci-windows-cross --strategy=TestRunner=local +common:ci-windows-cross --local_test_jobs=4 +common:ci-windows-cross --test_env=RUST_TEST_THREADS=1 +# Native Windows CI still covers the PowerShell tests. The cross-built gnullvm +# binaries currently hang in PowerShell AST parser tests when those binaries are +# run on the Windows runner. +common:ci-windows-cross --test_env=CODEX_BAZEL_TEST_SKIP_FILTERS=suite::code_mode::,powershell +common:ci-windows-cross --platforms=//:windows_x86_64_gnullvm +common:ci-windows-cross --extra_execution_platforms=//:rbe,//:windows_x86_64_msvc +common:ci-windows-cross --extra_toolchains=//:windows_gnullvm_tests_on_msvc_host_toolchain + +# Linux-only V8 CI config. +common:ci-v8 --config=ci +common:ci-v8 --build_metadata=TAG_workflow=v8 +common:ci-v8 --build_metadata=TAG_os=linux +common:ci-v8 --config=remote +common:ci-v8 --strategy=remote + +# Source-built Bazel V8 artifacts use the in-process sandbox by default. This +# does not affect Cargo's default prebuilt rusty_v8 path. +common --@v8//:v8_enable_pointer_compression=True +common --@v8//:v8_enable_sandbox=True + +# Keep currently published rusty_v8 release artifacts non-sandboxed until the +# artifact migration ships matching Rust feature selection for Cargo consumers. +common:v8-release-compat --@v8//:v8_enable_pointer_compression=False +common:v8-release-compat --@v8//:v8_enable_sandbox=False + +# Match rusty_v8's upstream GN release contract for published artifacts: every +# target object uses Chromium's custom libc++ headers and the archive folds in +# the matching runtime objects. +common:rusty-v8-upstream-libcxx --@v8//:v8_use_rusty_v8_custom_libcxx=True + +# Optional per-user local overrides. +try-import %workspace%/user.bazelrc diff --git a/reference/openai-codex/.bazelversion b/reference/openai-codex/.bazelversion new file mode 100644 index 0000000..f7ee066 --- /dev/null +++ b/reference/openai-codex/.bazelversion @@ -0,0 +1 @@ +9.0.0 diff --git a/reference/openai-codex/.codespellignore b/reference/openai-codex/.codespellignore new file mode 100644 index 0000000..23924fe --- /dev/null +++ b/reference/openai-codex/.codespellignore @@ -0,0 +1,6 @@ +iTerm +iTerm2 +psuedo +SOM +te +TE diff --git a/reference/openai-codex/.codespellrc b/reference/openai-codex/.codespellrc new file mode 100644 index 0000000..838b7e8 --- /dev/null +++ b/reference/openai-codex/.codespellrc @@ -0,0 +1,6 @@ +[codespell] +# Ref: https://github.com/codespell-project/codespell#using-a-config-file +skip = .git*,vendor,*-lock.yaml,*.lock,.codespellrc,*test.ts,*.jsonl,frame*.txt,*.snap,*.snap.new +check-hidden = true +ignore-regex = ^\s*"image/\S+": ".*|\b(afterAll)\b +ignore-words-list = ratatui,ser,iTerm,iterm2,iterm,te,TE,PASE,SEH diff --git a/reference/openai-codex/.codex/environments/environment.toml b/reference/openai-codex/.codex/environments/environment.toml new file mode 100644 index 0000000..f67f198 --- /dev/null +++ b/reference/openai-codex/.codex/environments/environment.toml @@ -0,0 +1,11 @@ +# THIS IS AUTOGENERATED. DO NOT EDIT MANUALLY +version = 1 +name = "codex" + +[setup] +script = "" + +[[actions]] +name = "Run" +icon = "run" +command = "cargo +1.93.0 run --manifest-path=codex-rs/Cargo.toml --bin codex -- -c mcp_oauth_credentials_store=file" diff --git a/reference/openai-codex/.codex/skills/babysit-pr/SKILL.md b/reference/openai-codex/.codex/skills/babysit-pr/SKILL.md new file mode 100644 index 0000000..1b95144 --- /dev/null +++ b/reference/openai-codex/.codex/skills/babysit-pr/SKILL.md @@ -0,0 +1,194 @@ +--- +name: babysit-pr +description: Babysit a GitHub pull request after creation by continuously polling review comments, CI checks/workflow runs, and mergeability state until the PR is merged/closed or user help is required. Diagnose failures, retry likely flaky failures up to 3 times, auto-fix/push branch-related issues when appropriate, and keep watching open PRs so fresh review feedback is surfaced promptly. Use when the user asks Codex to monitor a PR, watch CI, handle review comments, or keep an eye on failures and feedback on an open PR. +--- + +# PR Babysitter + +## Objective +Babysit a PR persistently until one of these terminal outcomes occurs: + +- The PR is merged or closed. +- A situation requires user help (for example CI infrastructure issues, repeated flaky failures after retry budget is exhausted, permission problems, or ambiguity that cannot be resolved safely). +- Optional handoff milestone: the PR is currently green + mergeable + review-clean. Treat this as a progress state, not a watcher stop, so late-arriving review comments are still surfaced promptly while the PR remains open. + +Do not stop merely because a single snapshot returns `idle` while checks are still pending. + +## Inputs +Accept any of the following: + +- No PR argument: infer the PR from the current branch (`--pr auto`) +- PR number +- PR URL + +## Core Workflow + +1. When the user asks to "monitor"/"watch"/"babysit" a PR, start with the watcher's continuous mode (`--watch`) unless you are intentionally doing a one-shot diagnostic snapshot. +2. Run the watcher script to snapshot PR/review/CI state (or consume each streamed snapshot from `--watch`). +3. Inspect the `actions` list in the JSON response. +4. If `diagnose_ci_failure` is present, inspect failed run logs and classify the failure. +5. If the failure is likely caused by the current branch, patch code locally, commit, and push. Do not patch random flaky tests, CI infrastructure, dependency outages, runner issues, or other failures that are unrelated to the branch. +6. If `process_review_comment` is present, inspect surfaced review items and decide whether to address them. +7. If a review item is actionable and correct, patch code locally, commit, push, and then mark the associated review thread/comment as resolved once the fix is on GitHub. +8. Do not post replies to human-authored review comments/threads unless the user explicitly confirms the exact response. If a human review item is non-actionable, already addressed, or not valid, surface the item and recommended response to the user instead of replying on GitHub. +9. If the failure is likely flaky/unrelated and `retry_failed_checks` is present, rerun failed jobs with `--retry-failed-now`. +10. If both actionable review feedback and `retry_failed_checks` are present, prioritize review feedback first; a new commit will retrigger CI, so avoid rerunning flaky checks on the old SHA unless you intentionally defer the review change. +11. On every loop, look for newly surfaced review feedback before acting on CI failures or mergeability state, then verify mergeability / merge-conflict status (for example via `gh pr view`) alongside CI. +12. After any push or rerun action, immediately return to step 1 and continue polling on the updated SHA/state. +13. If you had been using `--watch` before pausing to patch/commit/push, relaunch `--watch` yourself in the same turn immediately after the push (do not wait for the user to re-invoke the skill). +14. Repeat polling until `stop_pr_closed` appears or a user-help-required blocker is reached. A green + review-clean + mergeable PR is a progress milestone, not a reason to stop the watcher while the PR is still open. +15. Maintain terminal/session ownership: while babysitting is active, keep consuming watcher output in the same turn; do not leave a detached `--watch` process running and then end the turn as if monitoring were complete. + +## Commands + +### One-shot snapshot + +```bash +python3 .codex/skills/babysit-pr/scripts/gh_pr_watch.py --pr auto --once +``` + +### Continuous watch (JSONL) + +```bash +python3 .codex/skills/babysit-pr/scripts/gh_pr_watch.py --pr auto --watch +``` + +### Trigger flaky retry cycle (only when watcher indicates) + +```bash +python3 .codex/skills/babysit-pr/scripts/gh_pr_watch.py --pr auto --retry-failed-now +``` + +### Explicit PR target + +```bash +python3 .codex/skills/babysit-pr/scripts/gh_pr_watch.py --pr --once +``` + +## CI Failure Classification +Use `gh` commands to inspect failed runs before deciding to rerun. + +- `gh run view --json jobs,name,workflowName,conclusion,status,url,headSha` +- `gh api repos///actions/runs//jobs -X GET -f per_page=100` +- `gh api repos///actions/jobs//logs > /tmp/codex-gh-job--logs.zip` +- `gh run view --log-failed` as a fallback after the overall workflow run is complete + +`gh run view --log-failed` is workflow-run scoped and may not expose failed-job logs until the overall run finishes. For faster diagnosis, poll the run's jobs first and, as soon as a specific job has failed, fetch that job's logs directly from the Actions job logs endpoint. The watcher includes a `failed_jobs` list with each failed job's `job_id` and `logs_endpoint` when GitHub exposes one. + +Prefer treating failures as branch-related when failed-job logs point to changed code (compile/test/lint/typecheck/snapshots/static analysis in touched areas). + +Prefer treating failures as flaky/unrelated when logs show transient infra/external issues (timeouts, runner provisioning failures, registry/network outages, GitHub Actions infra errors). + +Do not attempt to fix flaky/unrelated failures by changing tests, build scripts, CI configuration, dependency pins, or infrastructure-adjacent code unless the logs clearly connect the failure to the PR branch. For flaky/unrelated failures, rerun only when the watcher recommends `retry_failed_checks`; otherwise wait or stop for user help. + +If classification is ambiguous, perform one manual diagnosis attempt before choosing rerun. + +Read `.codex/skills/babysit-pr/references/heuristics.md` for a concise checklist. + +## Review Comment Handling +The watcher surfaces review items from: + +- PR issue comments +- Inline review comments +- Review submissions (COMMENT / APPROVED / CHANGES_REQUESTED) + +It intentionally surfaces Codex reviewer bot feedback (for example comments/reviews from `chatgpt-codex-connector[bot]`) in addition to human reviewer feedback. Most unrelated bot noise should still be ignored. +For safety, the watcher only auto-surfaces trusted human review authors (for example repo OWNER/MEMBER/COLLABORATOR, plus the authenticated operator) and approved review bots such as Codex. +On a fresh watcher state file, existing pending review feedback may be surfaced immediately (not only comments that arrive after monitoring starts). This is intentional so already-open review comments are not missed. + +When you agree with a comment and it is actionable: + +1. Patch code locally. +2. Commit with `codex: address PR review feedback (#)`. +3. Push to the PR head branch. +4. After the push succeeds, mark the associated GitHub review thread/comment as resolved. +5. Resume watching on the new SHA immediately (do not stop after reporting the push). +6. If monitoring was running in `--watch` mode, restart `--watch` immediately after the push in the same turn; do not wait for the user to ask again. + +Do not post replies to human-authored GitHub review comments/threads automatically. If you disagree with a human comment, believe it is non-actionable/already addressed, or need to answer a question, report the item to the user with a suggested response and wait for explicit confirmation before posting anything on GitHub. If the user approves a response, prefix it with `[codex]` so it is clear the response is automated and not from the human user. +If the watcher later surfaces your own approved reply because the authenticated operator is treated as a trusted review author, treat that self-authored item as already handled and do not reply again. +If a code review comment/thread is already marked as resolved in GitHub, treat it as non-actionable and safely ignore it unless new unresolved follow-up feedback appears. + +## Git Safety Rules + +- Work only on the PR head branch. +- Avoid destructive git commands. +- Do not switch branches unless necessary to recover context. +- Before editing, check for unrelated uncommitted changes. If present, stop and ask the user. +- After each successful fix, commit and `git push`, then re-run the watcher. +- If you interrupted a live `--watch` session to make the fix, restart `--watch` immediately after the push in the same turn. +- Do not run multiple concurrent `--watch` processes for the same PR/state file; keep one watcher session active and reuse it until it stops or you intentionally restart it. +- A push is not a terminal outcome; continue the monitoring loop unless a strict stop condition is met. + +Commit message defaults: + +- `codex: fix CI failure on PR #` +- `codex: address PR review feedback (#)` + +## Monitoring Loop Pattern +Use this loop in a live Codex session: + +1. Run `--once`. +2. Read `actions`. +3. First check whether the PR is now merged or otherwise closed; if so, report that terminal state and stop polling immediately. +4. Check CI summary, new review items, and mergeability/conflict status. +5. Diagnose CI failures and classify branch-related vs flaky/unrelated. If the overall run is still pending but `failed_jobs` already includes a failed job, fetch that job's logs and diagnose immediately instead of waiting for the whole workflow run to finish. Patch only when the failure is branch-related. +6. For each surfaced review item from another author, patch/commit/push and then resolve it if it is actionable. If it is non-actionable, already addressed, or requires a written answer, surface it to the user with a suggested response instead of posting automatically. If a later snapshot surfaces your own approved reply, treat it as informational and continue without responding again. +7. Process actionable review comments before flaky reruns when both are present; if a review fix requires a commit, push it and skip rerunning failed checks on the old SHA. +8. Retry failed checks only when `retry_failed_checks` is present and you are not about to replace the current SHA with a review/CI fix commit. Do not make code changes for unrelated flakes or infrastructure failures just to get CI green. +9. If you pushed a commit, resolved a review thread, or triggered a rerun, report the action briefly and continue polling (do not stop). If a human review comment needs a written GitHub response, stop and ask for confirmation before posting. +10. After a review-fix push, proactively restart continuous monitoring (`--watch`) in the same turn unless a strict stop condition has already been reached. +11. If everything is passing, mergeable, not blocked on required review approval, and there are no unaddressed review items, report that the PR is currently ready to merge but keep the watcher running so new review comments are surfaced quickly while the PR remains open. +12. If blocked on a user-help-required issue (infra outage, exhausted flaky retries, unclear reviewer request, permissions), report the blocker and stop. +13. Otherwise sleep according to the polling cadence below and repeat. + +When the user explicitly asks to monitor/watch/babysit a PR, prefer `--watch` so polling continues autonomously in one command. Use repeated `--once` snapshots only for debugging, local testing, or when the user explicitly asks for a one-shot check. +Do not stop to ask the user whether to continue polling; continue autonomously until a strict stop condition is met or the user explicitly interrupts. +Do not hand control back to the user after a review-fix push just because a new SHA was created; restarting the watcher and re-entering the poll loop is part of the same babysitting task. +If a `--watch` process is still running and no strict stop condition has been reached, the babysitting task is still in progress; keep streaming/consuming watcher output instead of ending the turn. + +## Polling Cadence +Keep review polling aggressive and continue monitoring even after CI turns green: + +- While CI is not green (pending/running/queued or failing): poll every 1 minute. +- After CI turns green: keep polling at the base cadence while the PR remains open so newly posted review comments are surfaced promptly instead of waiting on a long green-state backoff. +- Reset the cadence immediately whenever anything changes (new commit/SHA, check status changes, new review comments, mergeability changes, review decision changes). +- If CI stops being green again (new commit, rerun, or regression): stay on the base polling cadence. +- If any poll shows the PR is merged or otherwise closed: stop polling immediately and report the terminal state. + +## Stop Conditions (Strict) +Stop only when one of the following is true: + +- PR merged or closed (stop as soon as a poll/snapshot confirms this). +- User intervention is required and Codex cannot safely proceed alone. + +Keep polling when: + +- `actions` contains only `idle` but checks are still pending. +- CI is still running/queued. +- Review state is quiet but CI is not terminal. +- CI is green but mergeability is unknown/pending. +- CI is green and mergeable, but the PR is still open and you are waiting for possible new review comments or merge-conflict changes. +- The PR is green but blocked on review approval (`REVIEW_REQUIRED` / similar); continue polling at the base cadence and surface any new review comments without asking for confirmation to keep watching. + +## Output Expectations +Provide concise progress updates while monitoring and a final summary that includes: + +- During long unchanged monitoring periods, avoid emitting a full update on every poll; summarize only status changes plus occasional heartbeat updates. +- Treat push confirmations, intermediate CI snapshots, ready-to-merge snapshots, and review-action updates as progress updates only; do not emit the final summary or end the babysitting session unless a strict stop condition is met. +- A user request to "monitor" is not satisfied by a couple of sample polls; remain in the loop until a strict stop condition or an explicit user interruption. +- A review-fix commit + push is not a completion event; immediately resume live monitoring (`--watch`) in the same turn and continue reporting progress updates. +- When CI first transitions to all green for the current SHA, emit a one-time celebratory progress update (do not repeat it on every green poll). Preferred style: `🚀 CI is all green! 33/33 passed. Still on watch for review approval.` +- Do not send the final summary while a watcher terminal is still running unless the watcher has emitted/confirmed a strict stop condition; otherwise continue with progress updates. + +- Final PR SHA +- CI status summary +- Mergeability / conflict status +- Fixes pushed +- Flaky retry cycles used +- Remaining unresolved failures or review comments + +## References + +- Heuristics and decision tree: `.codex/skills/babysit-pr/references/heuristics.md` +- GitHub CLI/API details used by the watcher: `.codex/skills/babysit-pr/references/github-api-notes.md` diff --git a/reference/openai-codex/.codex/skills/babysit-pr/agents/openai.yaml b/reference/openai-codex/.codex/skills/babysit-pr/agents/openai.yaml new file mode 100644 index 0000000..c6946cf --- /dev/null +++ b/reference/openai-codex/.codex/skills/babysit-pr/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "PR Babysitter" + short_description: "Watch PR review comments, CI, and merge conflicts" + default_prompt: "Babysit the current PR: monitor reviewer comments, CI, and merge-conflict status (prefer the watcher’s --watch mode for live monitoring); surface new review feedback before acting on CI or mergeability work, fix valid issues, push updates, and rerun flaky failures up to 3 times. Do not post replies to human-authored review comments unless the user explicitly confirms the exact response. Do not patch unrelated flaky tests, CI infrastructure, dependency outages, runner issues, or other failures that are not caused by the branch. Keep exactly one watcher session active for the PR (do not leave duplicate --watch terminals running). If you pause monitoring to patch review/CI feedback, restart --watch yourself immediately after the push in the same turn. If a watcher is still running and no strict stop condition has been reached, the task is still in progress: keep consuming watcher output and sending progress updates instead of ending the turn. Do not treat a green + mergeable PR as a terminal stop while it is still open; continue polling autonomously after any push/rerun so newly posted review comments are surfaced until a strict terminal stop condition is reached or the user interrupts." diff --git a/reference/openai-codex/.codex/skills/babysit-pr/references/github-api-notes.md b/reference/openai-codex/.codex/skills/babysit-pr/references/github-api-notes.md new file mode 100644 index 0000000..8c0a7c8 --- /dev/null +++ b/reference/openai-codex/.codex/skills/babysit-pr/references/github-api-notes.md @@ -0,0 +1,82 @@ +# GitHub CLI / API Notes For `babysit-pr` + +## Primary commands used + +### PR metadata + +- `gh pr view --json number,url,state,mergedAt,closedAt,headRefName,headRefOid,headRepository,headRepositoryOwner` + +Used to resolve PR number, URL, branch, head SHA, and closed/merged state. + +### PR checks summary + +- `gh pr checks --json name,state,bucket,link,workflow,event,startedAt,completedAt` + +Used to compute pending/failed/passed counts and whether the current CI round is terminal. + +### Workflow runs for head SHA + +- `gh api repos/{owner}/{repo}/actions/runs -X GET -f head_sha= -f per_page=100` + +Used to discover failed workflow runs and rerunnable run IDs. + +### Failed log inspection + +- `gh run view --json jobs,name,workflowName,conclusion,status,url,headSha` +- `gh api repos/{owner}/{repo}/actions/runs/{run_id}/jobs -X GET -f per_page=100` +- `gh api repos/{owner}/{repo}/actions/jobs/{job_id}/logs > /tmp/codex-gh-job-{job_id}-logs.zip` +- `gh run view --log-failed` + +Used by Codex to classify branch-related vs flaky/unrelated failures. Prefer the direct job log endpoint as soon as a job has failed because `gh run view --log-failed` may not produce failed-job logs until the overall workflow run completes. + +### Retry failed jobs only + +- `gh run rerun --failed` + +Reruns only failed jobs (and dependencies) for a workflow run. + +## Review-related endpoints + +- Issue comments on PR: + - `gh api repos/{owner}/{repo}/issues//comments?per_page=100` +- Inline PR review comments: + - `gh api repos/{owner}/{repo}/pulls//comments?per_page=100` +- Review submissions: + - `gh api repos/{owner}/{repo}/pulls//reviews?per_page=100` + +## JSON fields consumed by the watcher + +### `gh pr view` + +- `number` +- `url` +- `state` +- `mergedAt` +- `closedAt` +- `headRefName` +- `headRefOid` + +### `gh pr checks` + +- `bucket` (`pass`, `fail`, `pending`, `skipping`) +- `state` +- `name` +- `workflow` +- `link` + +### Actions runs API (`workflow_runs[]`) + +- `id` +- `name` +- `status` +- `conclusion` +- `html_url` +- `head_sha` + +### Actions run jobs API (`jobs[]`) + +- `id` +- `name` +- `status` +- `conclusion` +- `html_url` diff --git a/reference/openai-codex/.codex/skills/babysit-pr/references/heuristics.md b/reference/openai-codex/.codex/skills/babysit-pr/references/heuristics.md new file mode 100644 index 0000000..ee44c4a --- /dev/null +++ b/reference/openai-codex/.codex/skills/babysit-pr/references/heuristics.md @@ -0,0 +1,66 @@ +# CI / Review Heuristics + +## CI classification checklist + +Treat as **branch-related** when logs clearly indicate a regression caused by the PR branch: + +- Compile/typecheck/lint failures in files or modules touched by the branch +- Deterministic unit/integration test failures in changed areas +- Snapshot output changes caused by UI/text changes in the branch +- Static analysis violations introduced by the latest push +- Build script/config changes in the PR causing a deterministic failure + +Treat as **likely flaky or unrelated** when evidence points to transient or external issues: + +- DNS/network/registry timeout errors while fetching dependencies +- Runner image provisioning or startup failures +- GitHub Actions infrastructure/service outages +- Cloud/service rate limits or transient API outages +- Non-deterministic failures in unrelated integration tests with known flake patterns + +Do not patch likely flaky/unrelated failures. Use the retry budget for rerunnable failures, wait for pending jobs, or stop and report the blocker when the failure is persistent or infrastructure-owned. + +If uncertain, inspect failed logs once before choosing rerun. + +## Decision tree (fix vs rerun vs stop) + +1. If PR is merged/closed: stop. +2. If there are failed checks: + - Diagnose first. + - If checks are still pending but an individual job has already failed: fetch that job's logs and diagnose now. + - If branch-related: fix locally, commit, push. + - If likely flaky/unrelated and all checks for the current SHA are terminal: rerun failed jobs. + - If likely flaky/unrelated and not safely rerunnable: stop and report the blocker; do not edit unrelated tests, build scripts, CI configuration, dependency pins, or infrastructure code. + - If checks are still pending and no failed job is available yet: wait. +3. If flaky reruns for the same SHA reach the configured limit (default 3): stop and report persistent failure. +4. Independently, process any new human review comments. + +## Review comment agreement criteria + +Address the comment when: + +- The comment is technically correct. +- The change is actionable in the current branch. +- The requested change does not conflict with the user’s intent or recent guidance. +- The change can be made safely without unrelated refactors. + +Fix valid human review feedback in code when possible, but do not post a GitHub reply to a human-authored comment/thread unless the user explicitly confirms the exact response. + +Do not auto-fix when: + +- The comment is ambiguous and needs clarification. +- The request conflicts with explicit user instructions. +- The proposed change requires product/design decisions the user has not made. +- The codebase is in a dirty/unrelated state that makes safe editing uncertain. +- The comment only needs a written answer or disagreement response; propose the reply to the user instead of posting it automatically. + +## Stop-and-ask conditions + +Stop and ask the user instead of continuing automatically when: + +- The local worktree has unrelated uncommitted changes. +- `gh` auth/permissions fail. +- The PR branch cannot be pushed. +- CI failures persist after the flaky retry budget. +- Reviewer feedback requires a product decision or cross-team coordination. +- A human review comment requires a written GitHub reply instead of a code change. diff --git a/reference/openai-codex/.codex/skills/babysit-pr/scripts/gh_pr_watch.py b/reference/openai-codex/.codex/skills/babysit-pr/scripts/gh_pr_watch.py new file mode 100755 index 0000000..face4e6 --- /dev/null +++ b/reference/openai-codex/.codex/skills/babysit-pr/scripts/gh_pr_watch.py @@ -0,0 +1,869 @@ +#!/usr/bin/env python3 +"""Watch GitHub PR CI and review activity for Codex PR babysitting workflows.""" + +import argparse +import json +import os +import re +import subprocess +import sys +import tempfile +import time +from pathlib import Path +from urllib.parse import urlparse + +FAILED_RUN_CONCLUSIONS = { + "failure", + "timed_out", + "cancelled", + "action_required", + "startup_failure", + "stale", +} +PENDING_CHECK_STATES = { + "QUEUED", + "IN_PROGRESS", + "PENDING", + "WAITING", + "REQUESTED", +} +REVIEW_BOT_LOGIN_KEYWORDS = { + "codex", +} +TRUSTED_AUTHOR_ASSOCIATIONS = { + "OWNER", + "MEMBER", + "COLLABORATOR", +} +MERGE_BLOCKING_REVIEW_DECISIONS = { + "REVIEW_REQUIRED", + "CHANGES_REQUESTED", +} +MERGE_CONFLICT_OR_BLOCKING_STATES = { + "BLOCKED", + "DIRTY", + "DRAFT", + "UNKNOWN", +} + + +class GhCommandError(RuntimeError): + pass + + +def parse_args(): + parser = argparse.ArgumentParser( + description=( + "Normalize PR/CI/review state for Codex PR babysitting and optionally " + "trigger flaky reruns." + ) + ) + parser.add_argument("--pr", default="auto", help="auto, PR number, or PR URL") + parser.add_argument("--repo", help="Optional OWNER/REPO override") + parser.add_argument("--poll-seconds", type=int, default=30, help="Watch poll interval") + parser.add_argument( + "--max-flaky-retries", + type=int, + default=3, + help="Max rerun cycles per head SHA before stop recommendation", + ) + parser.add_argument("--state-file", help="Path to state JSON file") + parser.add_argument("--once", action="store_true", help="Emit one snapshot and exit") + parser.add_argument("--watch", action="store_true", help="Continuously emit JSONL snapshots") + parser.add_argument( + "--retry-failed-now", + action="store_true", + help="Rerun failed jobs for current failed workflow runs when policy allows", + ) + parser.add_argument( + "--json", + action="store_true", + help="Emit machine-readable output (default behavior for --once and --retry-failed-now)", + ) + args = parser.parse_args() + + if args.poll_seconds <= 0: + parser.error("--poll-seconds must be > 0") + if args.max_flaky_retries < 0: + parser.error("--max-flaky-retries must be >= 0") + if args.watch and args.retry_failed_now: + parser.error("--watch cannot be combined with --retry-failed-now") + if not args.once and not args.watch and not args.retry_failed_now: + args.once = True + return args + + +def _format_gh_error(cmd, err): + stdout = (err.stdout or "").strip() + stderr = (err.stderr or "").strip() + parts = [f"GitHub CLI command failed: {' '.join(cmd)}"] + if stdout: + parts.append(f"stdout: {stdout}") + if stderr: + parts.append(f"stderr: {stderr}") + return "\n".join(parts) + + +def gh_text(args, repo=None): + cmd = ["gh"] + # `gh api` does not accept `-R/--repo` on all gh versions. The watcher's + # API calls use explicit endpoints (e.g. repos/{owner}/{repo}/...), so the + # repo flag is unnecessary there. + if repo and (not args or args[0] != "api"): + cmd.extend(["-R", repo]) + cmd.extend(args) + try: + proc = subprocess.run(cmd, check=True, capture_output=True, text=True) + except FileNotFoundError as err: + raise GhCommandError("`gh` command not found") from err + except subprocess.CalledProcessError as err: + raise GhCommandError(_format_gh_error(cmd, err)) from err + return proc.stdout + + +def gh_json(args, repo=None): + raw = gh_text(args, repo=repo).strip() + if not raw: + return None + try: + return json.loads(raw) + except json.JSONDecodeError as err: + raise GhCommandError(f"Failed to parse JSON from gh output for {' '.join(args)}") from err + + +def parse_pr_spec(pr_spec): + if pr_spec == "auto": + return {"mode": "auto", "value": None} + if re.fullmatch(r"\d+", pr_spec): + return {"mode": "number", "value": pr_spec} + parsed = urlparse(pr_spec) + if parsed.scheme and parsed.netloc and "/pull/" in parsed.path: + return {"mode": "url", "value": pr_spec} + raise ValueError("--pr must be 'auto', a PR number, or a PR URL") + + +def pr_view_fields(): + return ( + "number,url,state,mergedAt,closedAt,headRefName,headRefOid," + "headRepository,headRepositoryOwner,mergeable,mergeStateStatus,reviewDecision" + ) + + +def checks_fields(): + return "name,state,bucket,link,workflow,event,startedAt,completedAt" + + +def resolve_pr(pr_spec, repo_override=None): + parsed = parse_pr_spec(pr_spec) + cmd = ["pr", "view"] + if parsed["value"] is not None: + cmd.append(parsed["value"]) + cmd.extend(["--json", pr_view_fields()]) + data = gh_json(cmd, repo=repo_override) + if not isinstance(data, dict): + raise GhCommandError("Unexpected PR payload from `gh pr view`") + + pr_url = str(data.get("url") or "") + repo = ( + repo_override + or extract_repo_from_pr_url(pr_url) + or extract_repo_from_pr_view(data) + ) + if not repo: + raise GhCommandError("Unable to determine OWNER/REPO for the PR") + + state = str(data.get("state") or "") + merged = bool(data.get("mergedAt")) + closed = bool(data.get("closedAt")) or state.upper() == "CLOSED" + + return { + "number": int(data["number"]), + "url": pr_url, + "repo": repo, + "head_sha": str(data.get("headRefOid") or ""), + "head_branch": str(data.get("headRefName") or ""), + "state": state, + "merged": merged, + "closed": closed, + "mergeable": str(data.get("mergeable") or ""), + "merge_state_status": str(data.get("mergeStateStatus") or ""), + "review_decision": str(data.get("reviewDecision") or ""), + } + + +def extract_repo_from_pr_view(data): + head_repo = data.get("headRepository") + head_owner = data.get("headRepositoryOwner") + owner = None + name = None + if isinstance(head_owner, dict): + owner = head_owner.get("login") or head_owner.get("name") + elif isinstance(head_owner, str): + owner = head_owner + if isinstance(head_repo, dict): + name = head_repo.get("name") + repo_owner = head_repo.get("owner") + if not owner and isinstance(repo_owner, dict): + owner = repo_owner.get("login") or repo_owner.get("name") + elif isinstance(head_repo, str): + name = head_repo + if owner and name: + return f"{owner}/{name}" + return None +def extract_repo_from_pr_url(pr_url): + parsed = urlparse(pr_url) + parts = [p for p in parsed.path.split("/") if p] + if len(parts) >= 4 and parts[2] == "pull": + return f"{parts[0]}/{parts[1]}" + return None + + +def load_state(path): + if path.exists(): + try: + data = json.loads(path.read_text()) + except json.JSONDecodeError as err: + raise RuntimeError(f"State file is not valid JSON: {path}") from err + if not isinstance(data, dict): + raise RuntimeError(f"State file must contain an object: {path}") + return data, False + return { + "pr": {}, + "started_at": None, + "last_seen_head_sha": None, + "retries_by_sha": {}, + "seen_issue_comment_ids": [], + "seen_review_comment_ids": [], + "seen_review_ids": [], + "last_snapshot_at": None, + }, True + + +def save_state(path, state): + path.parent.mkdir(parents=True, exist_ok=True) + payload = json.dumps(state, indent=2, sort_keys=True) + "\n" + fd, tmp_name = tempfile.mkstemp(prefix=f"{path.name}.", suffix=".tmp", dir=path.parent) + tmp_path = Path(tmp_name) + try: + with os.fdopen(fd, "w", encoding="utf-8") as tmp_file: + tmp_file.write(payload) + os.replace(tmp_path, path) + except Exception: + try: + tmp_path.unlink(missing_ok=True) + except OSError: + pass + raise + + +def default_state_file_for(pr): + repo_slug = pr["repo"].replace("/", "-") + return Path(f"/tmp/codex-babysit-pr-{repo_slug}-pr{pr['number']}.json") + + +def get_pr_checks(pr_spec, repo): + parsed = parse_pr_spec(pr_spec) + cmd = ["pr", "checks"] + if parsed["value"] is not None: + cmd.append(parsed["value"]) + cmd.extend(["--json", checks_fields()]) + data = gh_json(cmd, repo=repo) + if data is None: + return [] + if not isinstance(data, list): + raise GhCommandError("Unexpected payload from `gh pr checks`") + return data + + +def is_pending_check(check): + bucket = str(check.get("bucket") or "").lower() + state = str(check.get("state") or "").upper() + return bucket == "pending" or state in PENDING_CHECK_STATES + + +def summarize_checks(checks): + pending_count = 0 + failed_count = 0 + passed_count = 0 + for check in checks: + bucket = str(check.get("bucket") or "").lower() + if is_pending_check(check): + pending_count += 1 + if bucket == "fail": + failed_count += 1 + if bucket == "pass": + passed_count += 1 + return { + "pending_count": pending_count, + "failed_count": failed_count, + "passed_count": passed_count, + "all_terminal": pending_count == 0, + } + + +def get_workflow_runs_for_sha(repo, head_sha): + endpoint = f"repos/{repo}/actions/runs" + data = gh_json( + ["api", endpoint, "-X", "GET", "-f", f"head_sha={head_sha}", "-f", "per_page=100"], + repo=repo, + ) + if not isinstance(data, dict): + raise GhCommandError("Unexpected payload from actions runs API") + runs = data.get("workflow_runs") or [] + if not isinstance(runs, list): + raise GhCommandError("Expected `workflow_runs` to be a list") + return runs + + +def failed_runs_from_workflow_runs(runs, head_sha): + failed_runs = [] + for run in runs: + if not isinstance(run, dict): + continue + if str(run.get("head_sha") or "") != head_sha: + continue + conclusion = str(run.get("conclusion") or "") + if conclusion not in FAILED_RUN_CONCLUSIONS: + continue + failed_runs.append( + { + "run_id": run.get("id"), + "workflow_name": run.get("name") or run.get("display_title") or "", + "status": str(run.get("status") or ""), + "conclusion": conclusion, + "html_url": str(run.get("html_url") or ""), + } + ) + failed_runs.sort(key=lambda item: (str(item.get("workflow_name") or ""), str(item.get("run_id") or ""))) + return failed_runs + + +def get_jobs_for_run(repo, run_id): + endpoint = f"repos/{repo}/actions/runs/{run_id}/jobs" + data = gh_json(["api", endpoint, "-X", "GET", "-f", "per_page=100"], repo=repo) + if not isinstance(data, dict): + raise GhCommandError("Unexpected payload from actions run jobs API") + jobs = data.get("jobs") or [] + if not isinstance(jobs, list): + raise GhCommandError("Expected `jobs` to be a list") + return jobs + + +def failed_jobs_from_workflow_runs(repo, runs, head_sha): + failed_jobs = [] + for run in runs: + if not isinstance(run, dict): + continue + if str(run.get("head_sha") or "") != head_sha: + continue + run_id = run.get("id") + if run_id in (None, ""): + continue + run_status = str(run.get("status") or "") + run_conclusion = str(run.get("conclusion") or "") + if run_status.lower() == "completed" and run_conclusion not in FAILED_RUN_CONCLUSIONS: + continue + jobs = get_jobs_for_run(repo, run_id) + for job in jobs: + if not isinstance(job, dict): + continue + conclusion = str(job.get("conclusion") or "") + if conclusion not in FAILED_RUN_CONCLUSIONS: + continue + job_id = job.get("id") + logs_endpoint = None + if job_id not in (None, ""): + logs_endpoint = f"repos/{repo}/actions/jobs/{job_id}/logs" + failed_jobs.append( + { + "run_id": run_id, + "workflow_name": run.get("name") or run.get("display_title") or "", + "run_status": run_status, + "run_conclusion": run_conclusion, + "job_id": job_id, + "job_name": str(job.get("name") or ""), + "status": str(job.get("status") or ""), + "conclusion": conclusion, + "html_url": str(job.get("html_url") or ""), + "logs_endpoint": logs_endpoint, + } + ) + failed_jobs.sort( + key=lambda item: ( + str(item.get("workflow_name") or ""), + str(item.get("job_name") or ""), + str(item.get("job_id") or ""), + ) + ) + return failed_jobs + + +def get_authenticated_login(): + data = gh_json(["api", "user"]) + if not isinstance(data, dict) or not data.get("login"): + raise GhCommandError("Unable to determine authenticated GitHub login from `gh api user`") + return str(data["login"]) + + +def comment_endpoints(repo, pr_number): + return { + "issue_comment": f"repos/{repo}/issues/{pr_number}/comments", + "review_comment": f"repos/{repo}/pulls/{pr_number}/comments", + "review": f"repos/{repo}/pulls/{pr_number}/reviews", + } + + +def gh_api_list_paginated(endpoint, repo=None, per_page=100): + items = [] + page = 1 + while True: + sep = "&" if "?" in endpoint else "?" + page_endpoint = f"{endpoint}{sep}per_page={per_page}&page={page}" + payload = gh_json(["api", page_endpoint], repo=repo) + if payload is None: + break + if not isinstance(payload, list): + raise GhCommandError(f"Unexpected paginated payload from gh api {endpoint}") + items.extend(payload) + if len(payload) < per_page: + break + page += 1 + return items + + +def normalize_issue_comments(items): + out = [] + for item in items: + if not isinstance(item, dict): + continue + out.append( + { + "kind": "issue_comment", + "id": str(item.get("id") or ""), + "author": extract_login(item.get("user")), + "author_association": str(item.get("author_association") or ""), + "created_at": str(item.get("created_at") or ""), + "body": str(item.get("body") or ""), + "path": None, + "line": None, + "url": str(item.get("html_url") or ""), + } + ) + return out + + +def normalize_review_comments(items): + out = [] + for item in items: + if not isinstance(item, dict): + continue + line = item.get("line") + if line is None: + line = item.get("original_line") + out.append( + { + "kind": "review_comment", + "id": str(item.get("id") or ""), + "author": extract_login(item.get("user")), + "author_association": str(item.get("author_association") or ""), + "created_at": str(item.get("created_at") or ""), + "body": str(item.get("body") or ""), + "path": item.get("path"), + "line": line, + "url": str(item.get("html_url") or ""), + } + ) + return out + + +def normalize_reviews(items): + out = [] + for item in items: + if not isinstance(item, dict): + continue + out.append( + { + "kind": "review", + "id": str(item.get("id") or ""), + "author": extract_login(item.get("user")), + "author_association": str(item.get("author_association") or ""), + "created_at": str(item.get("submitted_at") or item.get("created_at") or ""), + "body": str(item.get("body") or ""), + "path": None, + "line": None, + "url": str(item.get("html_url") or ""), + } + ) + return out + + +def extract_login(user_obj): + if isinstance(user_obj, dict): + return str(user_obj.get("login") or "") + return "" + + +def is_bot_login(login): + return bool(login) and login.endswith("[bot]") + + +def is_actionable_review_bot_login(login): + if not is_bot_login(login): + return False + lower_login = login.lower() + return any(keyword in lower_login for keyword in REVIEW_BOT_LOGIN_KEYWORDS) + + +def is_trusted_human_review_author(item, authenticated_login): + author = str(item.get("author") or "") + if not author: + return False + if authenticated_login and author == authenticated_login: + return True + association = str(item.get("author_association") or "").upper() + return association in TRUSTED_AUTHOR_ASSOCIATIONS + + +def fetch_new_review_items(pr, state, fresh_state, authenticated_login=None): + repo = pr["repo"] + pr_number = pr["number"] + endpoints = comment_endpoints(repo, pr_number) + + issue_payload = gh_api_list_paginated(endpoints["issue_comment"], repo=repo) + review_comment_payload = gh_api_list_paginated(endpoints["review_comment"], repo=repo) + review_payload = gh_api_list_paginated(endpoints["review"], repo=repo) + + issue_items = normalize_issue_comments(issue_payload) + review_comment_items = normalize_review_comments(review_comment_payload) + review_items = normalize_reviews(review_payload) + all_items = issue_items + review_comment_items + review_items + + seen_issue = {str(x) for x in state.get("seen_issue_comment_ids") or []} + seen_review_comment = {str(x) for x in state.get("seen_review_comment_ids") or []} + seen_review = {str(x) for x in state.get("seen_review_ids") or []} + + # On a brand-new state file, surface existing review activity instead of + # silently treating it as seen. This avoids missing already-pending review + # feedback when monitoring starts after comments were posted. + + new_items = [] + for item in all_items: + item_id = item.get("id") + if not item_id: + continue + author = item.get("author") or "" + if not author: + continue + if is_bot_login(author): + if not is_actionable_review_bot_login(author): + continue + elif not is_trusted_human_review_author(item, authenticated_login): + continue + + kind = item["kind"] + if kind == "issue_comment" and item_id in seen_issue: + continue + if kind == "review_comment" and item_id in seen_review_comment: + continue + if kind == "review" and item_id in seen_review: + continue + + new_items.append(item) + if kind == "issue_comment": + seen_issue.add(item_id) + elif kind == "review_comment": + seen_review_comment.add(item_id) + elif kind == "review": + seen_review.add(item_id) + + new_items.sort(key=lambda item: (item.get("created_at") or "", item.get("kind") or "", item.get("id") or "")) + state["seen_issue_comment_ids"] = sorted(seen_issue) + state["seen_review_comment_ids"] = sorted(seen_review_comment) + state["seen_review_ids"] = sorted(seen_review) + return new_items + + +def current_retry_count(state, head_sha): + retries = state.get("retries_by_sha") or {} + value = retries.get(head_sha, 0) + try: + return int(value) + except (TypeError, ValueError): + return 0 + + +def set_retry_count(state, head_sha, count): + retries = state.get("retries_by_sha") + if not isinstance(retries, dict): + retries = {} + retries[head_sha] = int(count) + state["retries_by_sha"] = retries + + +def unique_actions(actions): + out = [] + seen = set() + for action in actions: + if action not in seen: + out.append(action) + seen.add(action) + return out + + +def is_pr_ready_to_merge(pr, checks_summary, new_review_items): + if pr["closed"] or pr["merged"]: + return False + if not checks_summary["all_terminal"]: + return False + if checks_summary["failed_count"] > 0 or checks_summary["pending_count"] > 0: + return False + if new_review_items: + return False + if str(pr.get("mergeable") or "") != "MERGEABLE": + return False + if str(pr.get("merge_state_status") or "") in MERGE_CONFLICT_OR_BLOCKING_STATES: + return False + if str(pr.get("review_decision") or "") in MERGE_BLOCKING_REVIEW_DECISIONS: + return False + return True + + +def recommend_actions(pr, checks_summary, failed_runs, failed_jobs, new_review_items, retries_used, max_retries): + actions = [] + if pr["closed"] or pr["merged"]: + if new_review_items: + actions.append("process_review_comment") + actions.append("stop_pr_closed") + return unique_actions(actions) + + if is_pr_ready_to_merge(pr, checks_summary, new_review_items): + actions.append("ready_to_merge") + return unique_actions(actions) + + if new_review_items: + actions.append("process_review_comment") + + has_failed_pr_checks = checks_summary["failed_count"] > 0 or bool(failed_jobs) + if has_failed_pr_checks: + if checks_summary["all_terminal"] and retries_used >= max_retries: + actions.append("stop_exhausted_retries") + else: + actions.append("diagnose_ci_failure") + if checks_summary["all_terminal"] and failed_runs and retries_used < max_retries: + actions.append("retry_failed_checks") + + if not actions: + actions.append("idle") + return unique_actions(actions) + + +def collect_snapshot(args): + pr = resolve_pr(args.pr, repo_override=args.repo) + state_path = Path(args.state_file) if args.state_file else default_state_file_for(pr) + state, fresh_state = load_state(state_path) + + if not state.get("started_at"): + state["started_at"] = int(time.time()) + + authenticated_login = get_authenticated_login() + new_review_items = fetch_new_review_items( + pr, + state, + fresh_state=fresh_state, + authenticated_login=authenticated_login, + ) + # Surface review feedback before drilling into CI and mergeability details. + # That keeps the babysitter responsive to new comments even when other + # actions are also available. + # `gh pr checks -R ` requires an explicit PR/branch/url argument. + # After resolving `--pr auto`, reuse the concrete PR number. + checks = get_pr_checks(str(pr["number"]), repo=pr["repo"]) + checks_summary = summarize_checks(checks) + workflow_runs = get_workflow_runs_for_sha(pr["repo"], pr["head_sha"]) + failed_runs = failed_runs_from_workflow_runs(workflow_runs, pr["head_sha"]) + failed_jobs = failed_jobs_from_workflow_runs(pr["repo"], workflow_runs, pr["head_sha"]) + + retries_used = current_retry_count(state, pr["head_sha"]) + actions = recommend_actions( + pr, + checks_summary, + failed_runs, + failed_jobs, + new_review_items, + retries_used, + args.max_flaky_retries, + ) + + state["pr"] = {"repo": pr["repo"], "number": pr["number"]} + state["last_seen_head_sha"] = pr["head_sha"] + state["last_snapshot_at"] = int(time.time()) + save_state(state_path, state) + + snapshot = { + "pr": pr, + "checks": checks_summary, + "failed_runs": failed_runs, + "failed_jobs": failed_jobs, + "new_review_items": new_review_items, + "actions": actions, + "retry_state": { + "current_sha_retries_used": retries_used, + "max_flaky_retries": args.max_flaky_retries, + }, + } + return snapshot, state_path + + +def retry_failed_now(args): + snapshot, state_path = collect_snapshot(args) + pr = snapshot["pr"] + checks_summary = snapshot["checks"] + failed_runs = snapshot["failed_runs"] + retries_used = snapshot["retry_state"]["current_sha_retries_used"] + max_retries = snapshot["retry_state"]["max_flaky_retries"] + + result = { + "snapshot": snapshot, + "state_file": str(state_path), + "rerun_attempted": False, + "rerun_count": 0, + "rerun_run_ids": [], + "reason": None, + } + + if pr["closed"] or pr["merged"]: + result["reason"] = "pr_closed" + return result + if checks_summary["failed_count"] <= 0: + result["reason"] = "no_failed_pr_checks" + return result + if not failed_runs: + result["reason"] = "no_failed_runs" + return result + if not checks_summary["all_terminal"]: + result["reason"] = "checks_still_pending" + return result + if retries_used >= max_retries: + result["reason"] = "retry_budget_exhausted" + return result + + for run in failed_runs: + run_id = run.get("run_id") + if run_id in (None, ""): + continue + gh_text(["run", "rerun", str(run_id), "--failed"], repo=pr["repo"]) + result["rerun_run_ids"].append(run_id) + + if result["rerun_run_ids"]: + state, _ = load_state(state_path) + new_count = current_retry_count(state, pr["head_sha"]) + 1 + set_retry_count(state, pr["head_sha"], new_count) + state["last_snapshot_at"] = int(time.time()) + save_state(state_path, state) + result["rerun_attempted"] = True + result["rerun_count"] = len(result["rerun_run_ids"]) + result["reason"] = "rerun_triggered" + else: + result["reason"] = "failed_runs_missing_ids" + + return result + + +def print_json(obj): + sys.stdout.write(json.dumps(obj, sort_keys=True) + "\n") + sys.stdout.flush() + + +def print_event(event, payload): + print_json({"event": event, "payload": payload}) + + +def is_ci_green(snapshot): + checks = snapshot.get("checks") or {} + return ( + bool(checks.get("all_terminal")) + and int(checks.get("failed_count") or 0) == 0 + and int(checks.get("pending_count") or 0) == 0 + ) + + +def snapshot_change_key(snapshot): + pr = snapshot.get("pr") or {} + checks = snapshot.get("checks") or {} + review_items = snapshot.get("new_review_items") or [] + return ( + str(pr.get("head_sha") or ""), + str(pr.get("state") or ""), + str(pr.get("mergeable") or ""), + str(pr.get("merge_state_status") or ""), + str(pr.get("review_decision") or ""), + int(checks.get("passed_count") or 0), + int(checks.get("failed_count") or 0), + int(checks.get("pending_count") or 0), + tuple( + (str(item.get("kind") or ""), str(item.get("id") or "")) + for item in review_items + if isinstance(item, dict) + ), + tuple(snapshot.get("actions") or []), + ) + + +def run_watch(args): + poll_seconds = args.poll_seconds + last_change_key = None + while True: + snapshot, state_path = collect_snapshot(args) + print_event( + "snapshot", + { + "snapshot": snapshot, + "state_file": str(state_path), + "next_poll_seconds": poll_seconds, + }, + ) + actions = set(snapshot.get("actions") or []) + if ( + "stop_pr_closed" in actions + or "stop_exhausted_retries" in actions + ): + print_event("stop", {"actions": snapshot.get("actions"), "pr": snapshot.get("pr")}) + return 0 + + current_change_key = snapshot_change_key(snapshot) + changed = current_change_key != last_change_key + green = is_ci_green(snapshot) + pr = snapshot.get("pr") or {} + pr_open = not bool(pr.get("closed")) and not bool(pr.get("merged")) + + if not green or pr_open: + poll_seconds = args.poll_seconds + elif changed or last_change_key is None: + poll_seconds = args.poll_seconds + + last_change_key = current_change_key + time.sleep(poll_seconds) + + +def main(): + args = parse_args() + try: + if args.retry_failed_now: + print_json(retry_failed_now(args)) + return 0 + if args.watch: + return run_watch(args) + snapshot, state_path = collect_snapshot(args) + snapshot["state_file"] = str(state_path) + print_json(snapshot) + return 0 + except (GhCommandError, RuntimeError, ValueError) as err: + sys.stderr.write(f"gh_pr_watch.py error: {err}\n") + return 1 + except KeyboardInterrupt: + sys.stderr.write("gh_pr_watch.py interrupted\n") + return 130 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/reference/openai-codex/.codex/skills/babysit-pr/scripts/test_gh_pr_watch.py b/reference/openai-codex/.codex/skills/babysit-pr/scripts/test_gh_pr_watch.py new file mode 100644 index 0000000..b636ee4 --- /dev/null +++ b/reference/openai-codex/.codex/skills/babysit-pr/scripts/test_gh_pr_watch.py @@ -0,0 +1,217 @@ +import argparse +import importlib.util +from pathlib import Path + +import pytest + + +MODULE_PATH = Path(__file__).with_name("gh_pr_watch.py") +MODULE_SPEC = importlib.util.spec_from_file_location("gh_pr_watch", MODULE_PATH) +gh_pr_watch = importlib.util.module_from_spec(MODULE_SPEC) +assert MODULE_SPEC.loader is not None +MODULE_SPEC.loader.exec_module(gh_pr_watch) + + +def sample_pr(): + return { + "number": 123, + "url": "https://github.com/openai/codex/pull/123", + "repo": "openai/codex", + "head_sha": "abc123", + "head_branch": "feature", + "state": "OPEN", + "merged": False, + "closed": False, + "mergeable": "MERGEABLE", + "merge_state_status": "CLEAN", + "review_decision": "", + } + + +def sample_checks(**overrides): + checks = { + "pending_count": 0, + "failed_count": 0, + "passed_count": 12, + "all_terminal": True, + } + checks.update(overrides) + return checks + + +def test_collect_snapshot_fetches_review_items_before_ci(monkeypatch, tmp_path): + call_order = [] + pr = sample_pr() + + monkeypatch.setattr(gh_pr_watch, "resolve_pr", lambda *args, **kwargs: pr) + monkeypatch.setattr(gh_pr_watch, "load_state", lambda path: ({}, True)) + monkeypatch.setattr( + gh_pr_watch, + "get_authenticated_login", + lambda: call_order.append("auth") or "octocat", + ) + monkeypatch.setattr( + gh_pr_watch, + "fetch_new_review_items", + lambda *args, **kwargs: call_order.append("review") or [], + ) + monkeypatch.setattr( + gh_pr_watch, + "get_pr_checks", + lambda *args, **kwargs: call_order.append("checks") or [], + ) + monkeypatch.setattr( + gh_pr_watch, + "summarize_checks", + lambda checks: call_order.append("summarize") or sample_checks(), + ) + monkeypatch.setattr( + gh_pr_watch, + "get_workflow_runs_for_sha", + lambda *args, **kwargs: call_order.append("workflow") or [], + ) + monkeypatch.setattr( + gh_pr_watch, + "failed_runs_from_workflow_runs", + lambda *args, **kwargs: call_order.append("failed_runs") or [], + ) + monkeypatch.setattr( + gh_pr_watch, + "failed_jobs_from_workflow_runs", + lambda *args, **kwargs: call_order.append("failed_jobs") or [], + ) + monkeypatch.setattr( + gh_pr_watch, + "recommend_actions", + lambda *args, **kwargs: call_order.append("recommend") or ["idle"], + ) + monkeypatch.setattr(gh_pr_watch, "save_state", lambda *args, **kwargs: None) + + args = argparse.Namespace( + pr="123", + repo=None, + state_file=str(tmp_path / "watcher-state.json"), + max_flaky_retries=3, + ) + + gh_pr_watch.collect_snapshot(args) + + assert call_order.index("review") < call_order.index("checks") + assert call_order.index("review") < call_order.index("workflow") + + +def test_recommend_actions_prioritizes_review_comments(): + actions = gh_pr_watch.recommend_actions( + sample_pr(), + sample_checks(failed_count=1), + [{"run_id": 99}], + [], + [{"kind": "review_comment", "id": "1"}], + 0, + 3, + ) + + assert actions == [ + "process_review_comment", + "diagnose_ci_failure", + "retry_failed_checks", + ] + + +def test_run_watch_keeps_polling_open_ready_to_merge_pr(monkeypatch): + sleeps = [] + events = [] + snapshot = { + "pr": sample_pr(), + "checks": sample_checks(), + "failed_runs": [], + "failed_jobs": [], + "new_review_items": [], + "actions": ["ready_to_merge"], + "retry_state": { + "current_sha_retries_used": 0, + "max_flaky_retries": 3, + }, + } + + monkeypatch.setattr( + gh_pr_watch, + "collect_snapshot", + lambda args: (snapshot, Path("/tmp/codex-babysit-pr-state.json")), + ) + monkeypatch.setattr( + gh_pr_watch, + "print_event", + lambda event, payload: events.append((event, payload)), + ) + + class StopWatch(Exception): + pass + + def fake_sleep(seconds): + sleeps.append(seconds) + if len(sleeps) >= 2: + raise StopWatch + + monkeypatch.setattr(gh_pr_watch.time, "sleep", fake_sleep) + + with pytest.raises(StopWatch): + gh_pr_watch.run_watch(argparse.Namespace(poll_seconds=30)) + + assert sleeps == [30, 30] + assert [event for event, _ in events] == ["snapshot", "snapshot"] + + +def test_failed_jobs_include_direct_logs_endpoint(monkeypatch): + jobs_by_run = { + 99: [ + { + "id": 555, + "name": "unit tests", + "status": "completed", + "conclusion": "failure", + "html_url": "https://github.com/openai/codex/actions/runs/99/job/555", + }, + { + "id": 556, + "name": "lint", + "status": "completed", + "conclusion": "success", + }, + ] + } + + monkeypatch.setattr( + gh_pr_watch, + "get_jobs_for_run", + lambda repo, run_id: jobs_by_run[run_id], + ) + + failed_jobs = gh_pr_watch.failed_jobs_from_workflow_runs( + "openai/codex", + [ + { + "id": 99, + "name": "CI", + "status": "in_progress", + "conclusion": "", + "head_sha": "abc123", + } + ], + "abc123", + ) + + assert failed_jobs == [ + { + "run_id": 99, + "workflow_name": "CI", + "run_status": "in_progress", + "run_conclusion": "", + "job_id": 555, + "job_name": "unit tests", + "status": "completed", + "conclusion": "failure", + "html_url": "https://github.com/openai/codex/actions/runs/99/job/555", + "logs_endpoint": "repos/openai/codex/actions/jobs/555/logs", + } + ] diff --git a/reference/openai-codex/.codex/skills/code-review-breaking-changes/SKILL.md b/reference/openai-codex/.codex/skills/code-review-breaking-changes/SKILL.md new file mode 100644 index 0000000..d0bddf2 --- /dev/null +++ b/reference/openai-codex/.codex/skills/code-review-breaking-changes/SKILL.md @@ -0,0 +1,12 @@ +--- +name: code-breaking-changes +description: Breaking changes +--- + +Search for breaking changes in external integration surfaces: +- app-server APIs +- CLI parameters +- configuration loading +- resuming sessions from existing rollouts + +Do not stop after finding one issue; analyze all possible ways breaking changes can happen. diff --git a/reference/openai-codex/.codex/skills/code-review-change-size/SKILL.md b/reference/openai-codex/.codex/skills/code-review-change-size/SKILL.md new file mode 100644 index 0000000..4e8048d --- /dev/null +++ b/reference/openai-codex/.codex/skills/code-review-change-size/SKILL.md @@ -0,0 +1,11 @@ +--- +name: code-review-change-size +description: Change size guidance (800 lines) +--- + +Unless the change is mechanical the total number of changed lines should not exceed 800 lines. +For complex logic changes the size should be under 500 lines. + +If the change is larger, explain whether it can be split into reviewable stages and identify the smallest coherent stage to land first. +Base the staging suggestion on the actual diff, dependencies, and affected call sites. + diff --git a/reference/openai-codex/.codex/skills/code-review-context/SKILL.md b/reference/openai-codex/.codex/skills/code-review-context/SKILL.md new file mode 100644 index 0000000..7faf3d7 --- /dev/null +++ b/reference/openai-codex/.codex/skills/code-review-context/SKILL.md @@ -0,0 +1,13 @@ +--- +name: code-review-context +description: Model visible context +--- + +Codex maintains a context (history of messages) that is sent to the model in inference requests. + +1. No history rewrite - the context must be built up incrementally. +2. Avoid frequent changes to context that cause cache misses. +3. No unbounded items - everything injected in the model context must have a bounded size and a hard cap. +4. No items larger than 10K tokens. +5. Highlight new individual items that can cross >1k tokens as P0. These need an additional manual review. +6. All injected fragments must be defined as structs in `core/context` and implement ContextualUserFragment trait \ No newline at end of file diff --git a/reference/openai-codex/.codex/skills/code-review-testing/SKILL.md b/reference/openai-codex/.codex/skills/code-review-testing/SKILL.md new file mode 100644 index 0000000..c8d99e1 --- /dev/null +++ b/reference/openai-codex/.codex/skills/code-review-testing/SKILL.md @@ -0,0 +1,14 @@ +--- +name: code-review-testing +description: Test authoring guidance +--- + +For agent changes prefer integration tests over unit tests. Integration tests are under `core/suite` and use `test_codex` to set up a test instance of codex. + +Features that change the agent logic MUST add an integration test: +- Provide a list of major logic changes and user-facing behaviors that need to be tested. + +If unit tests are needed, put them in a dedicated test file (*_tests.rs). +Avoid test-only functions in the main implementation. + +Check whether there are existing helpers to make tests more streamlined and readable. diff --git a/reference/openai-codex/.codex/skills/code-review/SKILL.md b/reference/openai-codex/.codex/skills/code-review/SKILL.md new file mode 100644 index 0000000..eec0787 --- /dev/null +++ b/reference/openai-codex/.codex/skills/code-review/SKILL.md @@ -0,0 +1,14 @@ +--- +name: code-review +description: Run a final code review on a pull request +--- + +Use subagents to review code using all code-review-* skills in this repository other than this orchestrator. One subagent per skill. Pass full skill path to subagents. Use xhigh reasoning. + +You must return every single issue from every subagent. You can return an unlimited number of findings. +Use raw Markdown to report findings. +Number findings for ease of reference. +Each finding must include a specific file path and line number. + +If the GitHub user running the review is the owner of the pull request add a `code-reviewed` label. +Do not leave GitHub comments unless explicitly asked. diff --git a/reference/openai-codex/.codex/skills/codex-bug/SKILL.md b/reference/openai-codex/.codex/skills/codex-bug/SKILL.md new file mode 100644 index 0000000..c7a688e --- /dev/null +++ b/reference/openai-codex/.codex/skills/codex-bug/SKILL.md @@ -0,0 +1,48 @@ +--- +name: codex-bug +description: Diagnose GitHub bug reports in openai/codex. Use when given a GitHub issue URL from openai/codex and asked to decide next steps such as verifying against the repo, requesting more info, or explaining why it is not a bug; follow any additional user-provided instructions. +--- + +# Codex Bug + +## Overview + +Diagnose a Codex GitHub bug report and decide the next action: verify against sources, request more info, or explain why it is not a bug. + +## Workflow + +1. Confirm the input + +- Require a GitHub issue URL that points to `github.com/openai/codex/issues/…`. +- If the URL is missing or not in the right repo, ask the user for the correct link. + +2. Network access + +- Always access the issue over the network immediately, even if you think access is blocked or unavailable. +- Prefer the GitHub API over HTML pages because the HTML is noisy: + - Issue: `https://api.github.com/repos/openai/codex/issues/` + - Comments: `https://api.github.com/repos/openai/codex/issues//comments` +- If the environment requires explicit approval, request it on demand via the tool and continue without additional user prompting. +- Only if the network attempt fails after requesting approval, explain what you can do offline (e.g., draft a response template) and ask how to proceed. + +3. Read the issue + +- Use the GitHub API responses (issue + comments) as the source of truth rather than scraping the HTML issue page. +- Extract: title, body, repro steps, expected vs actual, environment, logs, and any attachments. +- Note whether the report already includes logs or session details. +- If the report includes a thread ID, mention it in the summary and use it to look up the logs and session details if you have access to them. + +4. Summarize the bug before investigating + +- Before inspecting code, docs, or logs in depth, write a short summary of the report in your own words. +- Include the reported behavior, expected behavior, repro steps, environment, and what evidence is already attached or missing. + +5. Decide the course of action + +- **Verify with sources** when the report is specific and likely reproducible. Inspect relevant Codex files (or mention the files to inspect if access is unavailable). +- **Request more information** when the report is vague, missing repro steps, or lacks logs/environment. +- **Explain not a bug** when the report contradicts current behavior or documented constraints (cite the evidence from the issue and any local sources you checked). + +6. Respond + +- Provide a concise report of your findings and next steps. diff --git a/reference/openai-codex/.codex/skills/codex-issue-digest/SKILL.md b/reference/openai-codex/.codex/skills/codex-issue-digest/SKILL.md new file mode 100644 index 0000000..bae4bf9 --- /dev/null +++ b/reference/openai-codex/.codex/skills/codex-issue-digest/SKILL.md @@ -0,0 +1,127 @@ +--- +name: codex-issue-digest +description: Run a GitHub issue digest for openai/codex by feature-area labels, all areas, and configurable time windows. Use when asked to summarize recent Codex bug reports or enhancement requests, especially for owner-specific labels such as tui, exec, app, or similar areas. +--- + +# Codex Issue Digest + +## Objective + +Produce a headline-first, insight-oriented digest of `openai/codex` issues for the requested feature-area labels over the previous 24 hours by default. Honor a different duration when the user asks for one, for example "past week" or "48 hours". Default to a summary-only response; include details only when requested. + +Include only issues that currently have `bug` or `enhancement` plus at least one requested owner label. If the user asks for all areas or all labels, collect `bug`/`enhancement` issues across all labels. + +## Inputs + +- Feature-area labels, for example `tui exec` +- `all areas` / `all labels` to scan all current feature labels +- Optional repo override, default `openai/codex` +- Optional time window, default previous 24 hours; examples: `48h`, `7d`, `1w`, `past week` + +## Workflow + +1. Run the collector from a current Codex repo checkout: + +```bash +python3 .codex/skills/codex-issue-digest/scripts/collect_issue_digest.py --labels tui exec --window-hours 24 +``` + +Use `--window "past week"` or `--window-hours 168` when the user asks for a non-default duration. Use `--all-labels` when the user says all areas or all labels. + +2. Use the JSON as the source of truth. It includes new issues, new issue comments, new reactions/upvotes, current labels, current reaction counts, model-ready `summary_inputs`, and detailed `digest_rows`. +3. Choose the output mode from the user's request: + - Default mode: start the report with `## Summary` and do not emit `## Details`. + - Details-upfront mode: if the user asks for details, a table, a full digest, "include details", or similar, start with `## Summary`, then include `## Details`. + - Follow-up details mode: if the user asks for more detail after a summary-only digest, produce `## Details` from the existing collector JSON when it is still available; otherwise rerun the collector. +4. In `## Summary`, write a headline-first executive summary: + - The first nonblank line under `## Summary` must be a single-line headline or judgment, not a bullet. It should be useful even if the reader stops there. + - On quiet days, prefer exactly: `No major issues reported by users.` Use this when there are no elevated rows, no newly repeated theme, and nothing that needs owner action. + - When users are surfacing notable issues, make the headline name the count or theme, for example `Two issues are being surfaced by users:`. + - Immediately under an active headline, list only the issues or themes driving attention, ordered by importance. Start each line with the row's `attention_marker` when present, then a concise owner-readable description and inline issue refs. + - Treat `🔥🔥` as headline-worthy and `🔥` as elevated. Do not add fire emoji yourself; only copy the row's `attention_marker`. + - Keep any extra summary detail after the headline to 1-3 terse lines, only when it adds a decision-relevant caveat, repeated theme, or owner action. + - Do not include routine counts, broad stats, or low-signal table summaries in `## Summary` unless they change the headline. Put metadata and optional counts in `## Details` or the footer. + - In default mode, end the report with a concise prompt such as `Want details? I can expand this into the issue table.` Keep this separate from the summary headline so the headline stays clean. + - Cluster and name themes yourself from `summary_inputs`; the collector intentionally does not hard-code issue categories. + - Use a cluster only when the issues genuinely share the same product problem. If several issues merely share a broad platform or label, describe them individually. + - Do not omit a repeated theme just because its individual issues fall below the details table cutoff. Several similar reports should be called out as a repeated customer concern. + - For single-issue rows, summarize the concern directly instead of calling it a cluster. + - Use inline numbered issue links from each relevant row's `ref_markdown`. + - Example quiet summary: + +```markdown +## Summary +No major issues reported by users. + +Source: collector v5, git `abc123def456`, window `2026-04-27T00:00:00Z` to `2026-04-28T00:00:00Z`. +Want details? I can expand this into the issue table. +``` + + - Example active summary: + +```markdown +## Summary +Two issues are being surfaced by users: +🔥🔥 Terminal launch hangs on startup [1](https://github.com/openai/codex/issues/123) +🔥 Resume switches model providers unexpectedly [2](https://github.com/openai/codex/issues/456) + +Source: collector v5, git `abc123def456`, window `2026-04-27T00:00:00Z` to `2026-04-28T00:00:00Z`. +Want details? I can expand this into the issue table. +``` +5. In `## Details`, when details are requested, include a compact table only when useful: + - Prefer rows from `digest_rows`; include a `Refs` column using each row's `ref_markdown`. + - Keep the table short; omit low-signal rows when the summary already covers them. + - Use compact columns such as marker, area, type, description, interactions, and refs. + - The `Description` cell should be a short owner-readable phrase. Use row `description`, title, body excerpts, and recent comments, but do not mechanically copy the raw GitHub issue title when it contains incidental details. + - A clear quiet/no-concern sentence when there is no meaningful signal. +6. Use the JSON `attention_marker` exactly. It is empty for normal rows, `🔥` for elevated rows, and `🔥🔥` for very high-attention rows. The actual cutoffs are in `attention_thresholds`. +7. Use inline numbered references where a row or bullet points to issues, for example `Compaction bugs [1](https://github.com/openai/codex/issues/123), [2](https://github.com/openai/codex/issues/456)`. Do not add a separate footnotes section. +8. Label `interactions` as `Interactions`; it counts unique human GitHub users who created a new issue, added a new comment, or reacted during the requested window. Multiple posts/reactions from the same user on the same issue count once. +9. Mention the collector `script_version`, repo checkout `git_head`, and time window in one compact source line. In default mode, put this before the details prompt so the final line still asks whether the user wants details. In details-upfront mode, it can be the footer. + +## Reaction Handling + +The collector uses GitHub reactions endpoints, which include `created_at`, to count reactions created during the digest window for hydrated issues. It reports both in-window reaction counts and current reaction totals. Treat current reaction totals as standing engagement, and treat `new_reactions` / `new_upvotes` as windowed activity. + +By default, the collector fetches issue comments with `since=` and caps the number of comment pages per issue. This keeps very long historical threads from dominating a digest run and focuses the report on recent posts. Use `--fetch-all-comments` only when exhaustive comment history is more important than runtime. + +GitHub issue search is still seeded by issue `updated_at`, so a purely reaction-only issue may be missed if reactions do not bump `updated_at`. Covering every reaction-only case would require either a persisted snapshot store or a broader scan of labeled issues. + +## Attention Markers + +The collector scales attention markers by the requested time window. The baseline is 5 unique human users for `🔥` and 10 unique human users for `🔥🔥` over 24 hours; longer or shorter windows scale those cutoffs linearly and round up. For example, a one-week report uses 35 and 70 interactions. Unique human users are users who authored a new issue, authored a new comment, or reacted during the window, including upvotes. Multiple actions from the same user on the same issue count once. Bot posts and bot reactions are excluded. In prose, explain this as high user interaction rather than naming the emoji. + +## Freshness + +The automation should run from a repo checkout that contains this skill. For shared daily use, prefer one of these patterns: + +- Run the automation in a checkout that is refreshed before the automation starts, for example with `git pull --ff-only`. +- If the automation cannot safely mutate the checkout, have it report the current `git_head` from the collector output so readers know which skill/script version produced the digest. + +## Sample Owner Prompt + +```text +Use $codex-issue-digest to run the Codex issue digest for labels tui and exec over the previous 24 hours. +``` + +```text +Use $codex-issue-digest to run the Codex issue digest for all areas over the past week. +``` + +## Validation + +Dry run the collector against recent issues: + +```bash +python3 .codex/skills/codex-issue-digest/scripts/collect_issue_digest.py --labels tui exec --window-hours 24 +``` + +```bash +python3 .codex/skills/codex-issue-digest/scripts/collect_issue_digest.py --all-labels --window "past week" --limit-issues 10 +``` + +Run the focused script tests: + +```bash +pytest .codex/skills/codex-issue-digest/scripts/test_collect_issue_digest.py +``` diff --git a/reference/openai-codex/.codex/skills/codex-issue-digest/agents/openai.yaml b/reference/openai-codex/.codex/skills/codex-issue-digest/agents/openai.yaml new file mode 100644 index 0000000..706ce5e --- /dev/null +++ b/reference/openai-codex/.codex/skills/codex-issue-digest/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "Codex Issue Digest" + short_description: "Summarize Codex issues by labels or all areas" + default_prompt: "Use $codex-issue-digest to run the Codex issue digest for labels tui and exec over the previous 24 hours." diff --git a/reference/openai-codex/.codex/skills/codex-issue-digest/scripts/collect_issue_digest.py b/reference/openai-codex/.codex/skills/codex-issue-digest/scripts/collect_issue_digest.py new file mode 100755 index 0000000..80b54d6 --- /dev/null +++ b/reference/openai-codex/.codex/skills/codex-issue-digest/scripts/collect_issue_digest.py @@ -0,0 +1,1013 @@ +#!/usr/bin/env python3 +"""Collect recent openai/codex issue activity for owner-focused digests.""" + +import argparse +import json +import math +import re +import subprocess +import sys +from datetime import datetime, timedelta, timezone +from pathlib import Path +from urllib.parse import quote + +SCRIPT_VERSION = 5 +QUALIFYING_KIND_LABELS = ("bug", "enhancement") +REACTION_KEYS = ("+1", "-1", "laugh", "hooray", "confused", "heart", "rocket", "eyes") +BASE_ATTENTION_WINDOW_HOURS = 24.0 +ONE_ATTENTION_INTERACTION_THRESHOLD = 5 +TWO_ATTENTION_INTERACTION_THRESHOLD = 10 +ALL_LABEL_PHRASES = {"all", "all areas", "all labels", "all-areas", "all-labels", "*"} + + +class GhCommandError(RuntimeError): + pass + + +def parse_args(): + parser = argparse.ArgumentParser( + description="Collect recent GitHub issue activity for a Codex owner digest." + ) + parser.add_argument( + "--repo", default="openai/codex", help="OWNER/REPO, default openai/codex" + ) + parser.add_argument( + "--labels", + nargs="+", + default=[], + help="Feature-area labels owned by the digest recipient, for example: tui exec", + ) + parser.add_argument( + "--all-labels", + action="store_true", + help="Collect bug/enhancement issues across all feature-area labels", + ) + parser.add_argument( + "--window", + help='Lookback duration such as "24h", "7d", "1w", or "past week"', + ) + parser.add_argument( + "--window-hours", type=float, default=24.0, help="Lookback window" + ) + parser.add_argument( + "--since", help="UTC ISO timestamp override for the window start" + ) + parser.add_argument("--until", help="UTC ISO timestamp override for the window end") + parser.add_argument( + "--limit-issues", + type=int, + default=200, + help="Maximum candidate issues to hydrate after search", + ) + parser.add_argument( + "--body-chars", type=int, default=1200, help="Issue body excerpt length" + ) + parser.add_argument( + "--comment-chars", type=int, default=900, help="Comment excerpt length" + ) + parser.add_argument( + "--max-comment-pages", + type=int, + default=3, + help=( + "Maximum pages of issue comments to hydrate per issue after applying the " + "window filter. Use 0 with --fetch-all-comments for no page cap." + ), + ) + parser.add_argument( + "--fetch-all-comments", + action="store_true", + help="Hydrate complete issue comment histories instead of only window-updated comments.", + ) + return parser.parse_args() + + +def parse_timestamp(value, arg_name): + if value is None: + return None + normalized = value.strip() + if not normalized: + return None + if normalized.endswith("Z"): + normalized = f"{normalized[:-1]}+00:00" + try: + parsed = datetime.fromisoformat(normalized) + except ValueError as err: + raise ValueError(f"{arg_name} must be an ISO timestamp") from err + if parsed.tzinfo is None: + parsed = parsed.replace(tzinfo=timezone.utc) + return parsed.astimezone(timezone.utc) + + +def format_timestamp(value): + return ( + value.astimezone(timezone.utc) + .replace(microsecond=0) + .isoformat() + .replace("+00:00", "Z") + ) + + +def resolve_window(args): + until = parse_timestamp(args.until, "--until") or datetime.now(timezone.utc) + since = parse_timestamp(args.since, "--since") + if since is None: + hours = parse_duration_hours(getattr(args, "window", None)) + if hours is None: + hours = getattr(args, "window_hours", 24.0) + if hours <= 0: + raise ValueError("window duration must be > 0") + since = until - timedelta(hours=hours) + if since >= until: + raise ValueError("--since must be before --until") + return since, until + + +def parse_duration_hours(value): + if value is None: + return None + text = value.strip().casefold().replace("_", " ") + if not text: + return None + text = re.sub(r"^(past|last)\s+", "", text) + aliases = { + "day": 24.0, + "24h": 24.0, + "week": 168.0, + "7d": 168.0, + } + if text in aliases: + return aliases[text] + match = re.fullmatch(r"(\d+(?:\.\d+)?)\s*(h|hr|hrs|hour|hours)", text) + if match: + return float(match.group(1)) + match = re.fullmatch(r"(\d+(?:\.\d+)?)\s*(d|day|days)", text) + if match: + return float(match.group(1)) * 24.0 + match = re.fullmatch(r"(\d+(?:\.\d+)?)\s*(w|week|weeks)", text) + if match: + return float(match.group(1)) * 168.0 + raise ValueError(f"Unsupported duration: {value}") + + +def normalize_requested_labels(labels, all_labels=False): + out = [] + seen = set() + for raw in labels: + for piece in raw.split(","): + label = piece.strip() + if not label: + continue + key = label.casefold() + if key not in seen: + out.append(label) + seen.add(key) + phrase = " ".join(label.casefold() for label in out) + if all_labels or phrase in ALL_LABEL_PHRASES: + return [], True + if not out: + raise ValueError( + "At least one feature-area label is required, or use --all-labels" + ) + return out, False + + +def quote_label(label): + if re.fullmatch(r"[A-Za-z0-9_.:-]+", label): + return f"label:{label}" + escaped = label.replace('"', '\\"') + return f'label:"{escaped}"' + + +def build_search_queries( + repo, owner_labels, since, kind_labels=QUALIFYING_KIND_LABELS, all_labels=False +): + since_date = since.date().isoformat() + queries = [] + if all_labels: + for kind_label in kind_labels: + queries.append( + " ".join( + [ + f"repo:{repo}", + "is:issue", + f"updated:>={since_date}", + quote_label(kind_label), + ] + ) + ) + return queries + for owner_label in owner_labels: + for kind_label in kind_labels: + queries.append( + " ".join( + [ + f"repo:{repo}", + "is:issue", + f"updated:>={since_date}", + quote_label(owner_label), + quote_label(kind_label), + ] + ) + ) + return queries + + +def _format_gh_error(cmd, err): + stdout = (err.stdout or "").strip() + stderr = (err.stderr or "").strip() + parts = [f"GitHub CLI command failed: {' '.join(cmd)}"] + if stdout: + parts.append(f"stdout: {stdout}") + if stderr: + parts.append(f"stderr: {stderr}") + return "\n".join(parts) + + +def gh_json(args): + cmd = ["gh", *args] + try: + proc = subprocess.run(cmd, check=True, capture_output=True, text=True) + except FileNotFoundError as err: + raise GhCommandError("`gh` command not found") from err + except subprocess.CalledProcessError as err: + raise GhCommandError(_format_gh_error(cmd, err)) from err + raw = proc.stdout.strip() + if not raw: + return None + try: + return json.loads(raw) + except json.JSONDecodeError as err: + raise GhCommandError( + f"Failed to parse JSON from gh output for {' '.join(args)}" + ) from err + + +def gh_text(args): + cmd = ["gh", *args] + try: + proc = subprocess.run(cmd, check=True, capture_output=True, text=True) + except (FileNotFoundError, subprocess.CalledProcessError): + return "" + return proc.stdout.strip() + + +def git_head(): + try: + proc = subprocess.run( + ["git", "rev-parse", "--short=12", "HEAD"], + check=True, + capture_output=True, + text=True, + ) + except (FileNotFoundError, subprocess.CalledProcessError): + return None + return proc.stdout.strip() or None + + +def skill_relative_path(): + try: + return str(Path(__file__).resolve().relative_to(Path.cwd().resolve())) + except ValueError: + return str(Path(__file__).resolve()) + + +def gh_api_list_paginated(endpoint, per_page=100, max_pages=None, with_metadata=False): + items = [] + page = 1 + truncated = False + while True: + sep = "&" if "?" in endpoint else "?" + page_endpoint = f"{endpoint}{sep}per_page={per_page}&page={page}" + payload = gh_json(["api", page_endpoint]) + if payload is None: + break + if not isinstance(payload, list): + raise GhCommandError(f"Unexpected paginated payload from gh api {endpoint}") + items.extend(payload) + if len(payload) < per_page: + break + if max_pages is not None and page >= max_pages: + truncated = True + break + page += 1 + if with_metadata: + return { + "items": items, + "truncated": truncated, + "pages": page, + "max_pages": max_pages, + } + return items + + +def search_issue_numbers(queries, limit): + numbers = {} + for query in queries: + page = 1 + seen_for_query = 0 + while True: + payload = gh_json( + [ + "api", + "search/issues", + "-X", + "GET", + "-f", + f"q={query}", + "-f", + "sort=updated", + "-f", + "order=desc", + "-f", + "per_page=100", + "-f", + f"page={page}", + ] + ) + if not isinstance(payload, dict): + raise GhCommandError("Unexpected payload from GitHub issue search") + items = payload.get("items") or [] + if not isinstance(items, list): + raise GhCommandError("Expected search `items` to be a list") + for item in items: + if not isinstance(item, dict): + continue + number = item.get("number") + if isinstance(number, int): + numbers[number] = str(item.get("updated_at") or "") + seen_for_query += 1 + if len(items) < 100 or seen_for_query >= limit: + break + page += 1 + ordered = sorted( + numbers, key=lambda number: (numbers[number], number), reverse=True + ) + return ordered[:limit] + + +def fetch_issue(repo, number): + payload = gh_json(["api", f"repos/{repo}/issues/{number}"]) + if not isinstance(payload, dict): + raise GhCommandError(f"Unexpected issue payload for #{number}") + return payload + + +def fetch_comments(repo, number, since=None, max_pages=None): + endpoint = f"repos/{repo}/issues/{number}/comments" + if since is not None: + endpoint = f"{endpoint}?since={quote(format_timestamp(since), safe='')}" + return gh_api_list_paginated( + endpoint, + max_pages=max_pages, + with_metadata=True, + ) + + +def fetch_reactions_for_item(endpoint, item): + if reaction_summary(item)["total"] <= 0: + return [] + return gh_api_list_paginated(endpoint) + + +def fetch_comment_reactions(repo, comments): + reactions_by_comment_id = {} + for comment in comments: + comment_id = comment.get("id") + if comment_id in (None, ""): + continue + endpoint = f"repos/{repo}/issues/comments/{comment_id}/reactions" + reactions_by_comment_id[comment_id] = fetch_reactions_for_item( + endpoint, comment + ) + return reactions_by_comment_id + + +def extract_login(user_obj): + if isinstance(user_obj, dict): + return str(user_obj.get("login") or "") + return "" + + +def is_bot_login(login): + return bool(login) and login.lower().endswith("[bot]") + + +def human_login_key(user_obj): + login = extract_login(user_obj) + if not login or is_bot_login(login): + return "" + return login.casefold() + + +def is_human_user(user_obj): + return bool(human_login_key(user_obj)) + + +def label_names(issue): + labels = [] + for label in issue.get("labels") or []: + if isinstance(label, dict) and label.get("name"): + labels.append(str(label["name"])) + return sorted(labels, key=str.casefold) + + +def matching_labels(labels, requested): + labels_by_key = {label.casefold(): label for label in labels} + return [label for label in requested if label.casefold() in labels_by_key] + + +def area_labels(labels): + kind_keys = {label.casefold() for label in QUALIFYING_KIND_LABELS} + return [label for label in labels if label.casefold() not in kind_keys] + + +def attention_thresholds_for_window(window_hours): + if window_hours <= 0: + raise ValueError("window_hours must be > 0") + window_hours = round(window_hours, 6) + scale = window_hours / BASE_ATTENTION_WINDOW_HOURS + elevated = max(1, math.ceil(ONE_ATTENTION_INTERACTION_THRESHOLD * scale)) + very_high = max( + elevated + 1, math.ceil(TWO_ATTENTION_INTERACTION_THRESHOLD * scale) + ) + return { + "base_window_hours": BASE_ATTENTION_WINDOW_HOURS, + "window_hours": round(window_hours, 3), + "scale": round(scale, 3), + "elevated": elevated, + "very_high": very_high, + } + + +def attention_level_for(user_interactions, attention_thresholds=None): + thresholds = attention_thresholds or attention_thresholds_for_window( + BASE_ATTENTION_WINDOW_HOURS + ) + if user_interactions >= thresholds["very_high"]: + return 2 + if user_interactions >= thresholds["elevated"]: + return 1 + return 0 + + +def attention_marker_for(user_interactions, attention_thresholds=None): + return "🔥" * attention_level_for(user_interactions, attention_thresholds) + + +def reaction_summary(item): + reactions = item.get("reactions") + if not isinstance(reactions, dict): + return {"total": 0, "counts": {}} + counts = {} + for key in REACTION_KEYS: + value = reactions.get(key, 0) + if isinstance(value, int) and value: + counts[key] = value + total = reactions.get("total_count") + if not isinstance(total, int): + total = sum(counts.values()) + return {"total": total, "counts": counts} + + +def reaction_event_summary(reactions, since, until): + counts = {} + total = 0 + users = set() + for reaction in reactions or []: + if not isinstance(reaction, dict): + continue + if not is_in_window(str(reaction.get("created_at") or ""), since, until): + continue + user_key = human_login_key(reaction.get("user")) + if not user_key: + continue + content = str(reaction.get("content") or "") + if not content: + continue + counts[content] = counts.get(content, 0) + 1 + total += 1 + users.add(user_key) + return { + "total": total, + "counts": counts, + "upvotes": counts.get("+1", 0), + "users": sorted(users, key=str.casefold), + } + + +def compact_text(value, limit): + text = re.sub(r"\s+", " ", str(value or "")).strip() + if limit <= 0: + return "" + if len(text) <= limit: + return text + return f"{text[: max(limit - 1, 0)].rstrip()}..." + + +def clean_title_for_description(title): + cleaned = re.sub(r"\s+", " ", str(title or "")).strip() + cleaned = re.sub( + r"^(codex(?: desktop| app|\.app| cli)?|desktop|windows codex app)\s*[:,-]\s*", + "", + cleaned, + flags=re.IGNORECASE, + ) + cleaned = re.sub(r"^on windows,\s*", "Windows: ", cleaned, flags=re.IGNORECASE) + cleaned = cleaned.strip(" -:;") + return compact_text(cleaned, 80) or "Issue needs owner review" + + +def issue_description(issue): + return clean_title_for_description(issue.get("title")) + + +def is_in_window(timestamp, since, until): + parsed = parse_timestamp(timestamp, "timestamp") + if parsed is None: + return False + return since <= parsed < until + + +def summarize_comment( + comment, comment_chars, reaction_events=None, since=None, until=None +): + reactions = reaction_summary(comment) + new_reactions = ( + reaction_event_summary(reaction_events, since, until) + if since is not None and until is not None + else {"total": 0, "counts": {}, "upvotes": 0} + ) + human_user_interaction = is_human_user(comment.get("user")) + return { + "id": comment.get("id"), + "author": extract_login(comment.get("user")), + "author_association": str(comment.get("author_association") or ""), + "created_at": str(comment.get("created_at") or ""), + "updated_at": str(comment.get("updated_at") or ""), + "url": str(comment.get("html_url") or ""), + "human_user_interaction": human_user_interaction, + "reactions": reactions["counts"], + "reaction_total": reactions["total"], + "new_reactions": new_reactions["total"], + "new_upvotes": new_reactions["upvotes"], + "new_reaction_counts": new_reactions["counts"], + "body_excerpt": compact_text(comment.get("body"), comment_chars), + } + + +def summarize_issue( + issue, + comments, + requested_labels, + since, + until, + body_chars, + comment_chars, + issue_reaction_events=None, + comment_reactions_by_id=None, + all_labels=False, + comments_hydration=None, + attention_thresholds=None, +): + labels = label_names(issue) + labels_by_key = {label.casefold() for label in labels} + kind_labels = [ + label for label in QUALIFYING_KIND_LABELS if label.casefold() in labels_by_key + ] + if all_labels: + owner_labels = area_labels(labels) or ["unlabeled"] + else: + owner_labels = matching_labels(labels, requested_labels) + if not kind_labels or not owner_labels: + return None + + updated_at = str(issue.get("updated_at") or "") + if not is_in_window(updated_at, since, until): + return None + + new_issue = is_in_window(str(issue.get("created_at") or ""), since, until) + comment_reactions_by_id = comment_reactions_by_id or {} + new_comments = [ + summarize_comment( + comment, + comment_chars, + reaction_events=comment_reactions_by_id.get(comment.get("id")), + since=since, + until=until, + ) + for comment in comments + if is_in_window(str(comment.get("created_at") or ""), since, until) + ] + new_comments.sort(key=lambda item: (item["created_at"], str(item["id"]))) + + issue_reactions = reaction_summary(issue) + issue_reaction_events_summary = reaction_event_summary( + issue_reaction_events, since, until + ) + comment_reaction_events_summary = reaction_event_summary( + [ + reaction + for reactions in comment_reactions_by_id.values() + for reaction in reactions + ], + since, + until, + ) + new_reactions = ( + issue_reaction_events_summary["total"] + + comment_reaction_events_summary["total"] + ) + new_upvotes = ( + issue_reaction_events_summary["upvotes"] + + comment_reaction_events_summary["upvotes"] + ) + all_comment_reaction_total = sum( + reaction_summary(comment)["total"] for comment in comments + ) + new_comment_reaction_total = sum( + comment["reaction_total"] for comment in new_comments + ) + new_issue_user_key = human_login_key(issue.get("user")) if new_issue else "" + new_issue_user_interaction = bool(new_issue_user_key) + new_comment_user_interactions = sum( + 1 for comment in new_comments if comment["human_user_interaction"] + ) + interaction_user_keys = set(issue_reaction_events_summary["users"]) + interaction_user_keys.update(comment_reaction_events_summary["users"]) + if new_issue_user_key: + interaction_user_keys.add(new_issue_user_key) + interaction_user_keys.update( + comment["author"].casefold() + for comment in new_comments + if comment["human_user_interaction"] + ) + user_interactions = len(interaction_user_keys) + attention_level = attention_level_for(user_interactions, attention_thresholds) + attention_marker = attention_marker_for(user_interactions, attention_thresholds) + updated_without_visible_new_post = ( + not new_issue and not new_comments and new_reactions == 0 + ) + + engagement_score = ( + len(new_comments) * 3 + + new_reactions + + issue_reactions["total"] + + new_comment_reaction_total + + min(int(issue.get("comments") or len(comments) or 0), 10) + ) + + return { + "number": issue.get("number"), + "title": str(issue.get("title") or ""), + "description": issue_description(issue), + "url": str(issue.get("html_url") or ""), + "state": str(issue.get("state") or ""), + "author": extract_login(issue.get("user")), + "author_association": str(issue.get("author_association") or ""), + "created_at": str(issue.get("created_at") or ""), + "updated_at": updated_at, + "labels": labels, + "kind_labels": kind_labels, + "owner_labels": owner_labels, + "comments_total": int(issue.get("comments") or len(comments) or 0), + "comments_hydration": comments_hydration + or { + "fetched": len(comments), + "since": None, + "truncated": False, + "max_pages": None, + }, + "issue_reactions": issue_reactions["counts"], + "issue_reaction_total": issue_reactions["total"], + "comment_reaction_total": all_comment_reaction_total, + "new_comment_reaction_total": new_comment_reaction_total, + "new_issue_reactions": issue_reaction_events_summary["total"], + "new_issue_upvotes": issue_reaction_events_summary["upvotes"], + "new_comment_reactions": comment_reaction_events_summary["total"], + "new_comment_upvotes": comment_reaction_events_summary["upvotes"], + "new_reactions": new_reactions, + "new_upvotes": new_upvotes, + "user_interactions": user_interactions, + "attention": attention_level > 0, + "attention_level": attention_level, + "attention_marker": attention_marker, + "engagement_score": engagement_score, + "activity": { + "new_issue": new_issue, + "new_comments": len(new_comments), + "new_human_comments": new_comment_user_interactions, + "new_reactions": new_reactions, + "new_upvotes": new_upvotes, + "updated_without_visible_new_post": updated_without_visible_new_post, + }, + "body_excerpt": compact_text(issue.get("body"), body_chars), + "new_comments": new_comments, + } + + +def count_by_label(issues, labels): + out = {} + for label in labels: + matching = [issue for issue in issues if label in issue["owner_labels"]] + out[label] = { + "issues": len(matching), + "new_issues": sum( + 1 for issue in matching if issue["activity"]["new_issue"] + ), + "new_comments": sum( + issue["activity"]["new_comments"] for issue in matching + ), + } + return out + + +def count_by_kind(issues): + out = {} + for kind in QUALIFYING_KIND_LABELS: + matching = [issue for issue in issues if kind in issue["kind_labels"]] + out[kind] = { + "issues": len(matching), + "new_issues": sum( + 1 for issue in matching if issue["activity"]["new_issue"] + ), + "new_comments": sum( + issue["activity"]["new_comments"] for issue in matching + ), + } + return out + + +def hot_items(issues, limit=8): + ranked = sorted( + issues, + key=lambda issue: ( + issue["attention"], + issue["attention_level"], + issue["user_interactions"], + issue["engagement_score"], + issue["activity"]["new_comments"], + issue["issue_reaction_total"] + issue["comment_reaction_total"], + issue["updated_at"], + ), + reverse=True, + ) + return [ + { + "number": issue["number"], + "title": issue["title"], + "url": issue["url"], + "owner_labels": issue["owner_labels"], + "kind_labels": issue["kind_labels"], + "attention": issue["attention"], + "attention_level": issue["attention_level"], + "attention_marker": issue["attention_marker"], + "user_interactions": issue["user_interactions"], + "new_reactions": issue["new_reactions"], + "new_upvotes": issue["new_upvotes"], + "engagement_score": issue["engagement_score"], + "new_comments": issue["activity"]["new_comments"], + "reaction_total": issue["issue_reaction_total"] + + issue["comment_reaction_total"], + } + for issue in ranked[:limit] + if issue["engagement_score"] > 0 + ] + + +def ranked_digest_issues(issues): + return sorted( + issues, + key=lambda issue: ( + issue["attention"], + issue["attention_level"], + issue["user_interactions"], + issue["engagement_score"], + issue["activity"]["new_comments"], + issue["updated_at"], + ), + reverse=True, + ) + + +def digest_rows(issues, limit=10, ref_map=None): + ranked = ranked_digest_issues(issues) + if ref_map is None: + ref_map = {issue["number"]: ref for ref, issue in enumerate(ranked, start=1)} + rows = [] + for issue in ranked[:limit]: + ref = ref_map[issue["number"]] + reaction_total = issue["issue_reaction_total"] + issue["comment_reaction_total"] + rows.append( + { + "ref": ref, + "ref_markdown": f"[{ref}]({issue['url']})", + "marker": issue["attention_marker"], + "attention_marker": issue["attention_marker"], + "number": issue["number"], + "description": issue["description"], + "title": issue["title"], + "url": issue["url"], + "area": ", ".join(issue["owner_labels"]), + "kind": ", ".join(issue["kind_labels"]), + "state": issue["state"], + "interactions": issue["user_interactions"], + "user_interactions": issue["user_interactions"], + "new_reactions": issue["new_reactions"], + "new_upvotes": issue["new_upvotes"], + "current_reactions": reaction_total, + } + ) + return rows + + +def issue_ref_markdown(issue, ref_map): + ref = ref_map[issue["number"]] + return f"[{ref}]({issue['url']})" + + +def summary_inputs(issues, limit=80, ref_map=None): + ranked = ranked_digest_issues(issues) + if ref_map is None: + ref_map = {issue["number"]: ref for ref, issue in enumerate(ranked, start=1)} + rows = [] + for issue in ranked[:limit]: + rows.append( + { + "ref": ref_map[issue["number"]], + "ref_markdown": issue_ref_markdown(issue, ref_map), + "number": issue["number"], + "title": issue["title"], + "description": issue["description"], + "url": issue["url"], + "labels": issue["labels"], + "owner_labels": issue["owner_labels"], + "kind_labels": issue["kind_labels"], + "state": issue.get("state", ""), + "attention_marker": issue.get("attention_marker", ""), + "interactions": issue["user_interactions"], + "new_comments": issue["activity"].get("new_comments", 0), + "new_reactions": issue.get("new_reactions", 0), + "new_upvotes": issue.get("new_upvotes", 0), + "current_reactions": issue.get("issue_reaction_total", 0) + + issue.get("comment_reaction_total", 0), + } + ) + return rows + + +def collect_digest(args): + since, until = resolve_window(args) + window_hours = (until - since).total_seconds() / 3600 + attention_thresholds = attention_thresholds_for_window(window_hours) + requested_labels, all_labels = normalize_requested_labels( + args.labels, all_labels=args.all_labels + ) + queries = build_search_queries( + args.repo, requested_labels, since, all_labels=all_labels + ) + numbers = search_issue_numbers(queries, args.limit_issues) + gh_version_output = gh_text(["--version"]) + + issues = [] + max_comment_pages = None if args.max_comment_pages <= 0 else args.max_comment_pages + for number in numbers: + issue = fetch_issue(args.repo, number) + comments_since = None if args.fetch_all_comments else since + comments_payload = fetch_comments( + args.repo, + number, + since=comments_since, + max_pages=max_comment_pages, + ) + comments = comments_payload["items"] + issue_reaction_events = fetch_reactions_for_item( + f"repos/{args.repo}/issues/{number}/reactions", issue + ) + comment_reactions_by_id = fetch_comment_reactions(args.repo, comments) + comments_hydration = { + "fetched": len(comments), + "total": int(issue.get("comments") or len(comments) or 0), + "since": format_timestamp(comments_since) if comments_since else None, + "truncated": comments_payload["truncated"], + "max_pages": comments_payload["max_pages"], + "fetch_all_comments": args.fetch_all_comments, + } + summary = summarize_issue( + issue, + comments, + requested_labels, + since, + until, + args.body_chars, + args.comment_chars, + issue_reaction_events=issue_reaction_events, + comment_reactions_by_id=comment_reactions_by_id, + all_labels=all_labels, + comments_hydration=comments_hydration, + attention_thresholds=attention_thresholds, + ) + if summary is not None: + issues.append(summary) + + issues.sort( + key=lambda issue: (issue["updated_at"], int(issue["number"] or 0)), reverse=True + ) + totals = { + "candidate_issues": len(numbers), + "included_issues": len(issues), + "new_issues": sum(1 for issue in issues if issue["activity"]["new_issue"]), + "issues_with_new_comments": sum( + 1 for issue in issues if issue["activity"]["new_comments"] > 0 + ), + "new_comments": sum(issue["activity"]["new_comments"] for issue in issues), + "comments_fetched": sum( + issue["comments_hydration"]["fetched"] for issue in issues + ), + "issues_with_truncated_comment_hydration": sum( + 1 for issue in issues if issue["comments_hydration"]["truncated"] + ), + "updated_without_visible_new_post": sum( + 1 + for issue in issues + if issue["activity"]["updated_without_visible_new_post"] + ), + "issue_reactions_current_total": sum( + issue["issue_reaction_total"] for issue in issues + ), + "comment_reactions_current_total": sum( + issue["comment_reaction_total"] for issue in issues + ), + "new_reactions": sum(issue["new_reactions"] for issue in issues), + "new_upvotes": sum(issue["new_upvotes"] for issue in issues), + "user_interactions": sum(issue["user_interactions"] for issue in issues), + } + ranked = ranked_digest_issues(issues) + ref_map = {issue["number"]: ref for ref, issue in enumerate(ranked, start=1)} + filter_label = "all" if all_labels else requested_labels + + return { + "generated_at": format_timestamp(datetime.now(timezone.utc)), + "source": { + "repo": args.repo, + "skill": "codex-issue-digest", + "collector": skill_relative_path(), + "script_version": SCRIPT_VERSION, + "git_head": git_head(), + "gh_version": gh_version_output.splitlines()[0] + if gh_version_output + else None, + }, + "window": { + "since": format_timestamp(since), + "until": format_timestamp(until), + "hours": round(window_hours, 3), + }, + "attention_thresholds": attention_thresholds, + "filters": { + "owner_labels": filter_label, + "all_labels": all_labels, + "kind_labels": list(QUALIFYING_KIND_LABELS), + }, + "collection_notes": [ + "Issues are selected when they currently have bug or enhancement plus at least one requested owner label and were updated during the window.", + "By default, issue comments are fetched with since=window_start and a max page cap to avoid long historical threads; use --fetch-all-comments when exhaustive comment history is needed.", + "New issue comments are filtered by comment creation time within the window from the fetched comment set.", + "Reaction events are counted by GitHub reaction created_at timestamps for hydrated issues and fetched comments.", + "Current reaction totals are standing engagement signals; new_reactions and new_upvotes are windowed activity.", + "user_interactions counts unique human users per issue across new issues, new comments, and new reactions; repeated actions by the same user count once.", + "The collector does not assign semantic clusters; use summary_inputs as model-ready evidence for report-time clustering.", + "Pure reaction-only issues may be missed if GitHub issue search does not surface them via updated_at.", + "Issues updated during the window without a new issue body or new comment are retained because label/status edits can still be useful owner signals.", + ], + "totals": totals, + "by_owner_label": count_by_label( + issues, + sorted( + {area for issue in issues for area in issue["owner_labels"]}, + key=str.casefold, + ) + if all_labels + else requested_labels, + ), + "by_kind_label": count_by_kind(issues), + "hot_items": hot_items(issues), + "summary_inputs": summary_inputs(issues, ref_map=ref_map), + "digest_rows": digest_rows(issues, ref_map=ref_map), + "issues": issues, + } + + +def main(): + args = parse_args() + try: + digest = collect_digest(args) + except (GhCommandError, RuntimeError, ValueError) as err: + sys.stderr.write(f"collect_issue_digest.py error: {err}\n") + return 1 + sys.stdout.write(json.dumps(digest, indent=2, sort_keys=True) + "\n") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/reference/openai-codex/.codex/skills/codex-issue-digest/scripts/test_collect_issue_digest.py b/reference/openai-codex/.codex/skills/codex-issue-digest/scripts/test_collect_issue_digest.py new file mode 100644 index 0000000..f1ba54e --- /dev/null +++ b/reference/openai-codex/.codex/skills/codex-issue-digest/scripts/test_collect_issue_digest.py @@ -0,0 +1,749 @@ +import importlib.util +from datetime import timezone +from pathlib import Path + + +MODULE_PATH = Path(__file__).with_name("collect_issue_digest.py") +MODULE_SPEC = importlib.util.spec_from_file_location( + "collect_issue_digest", MODULE_PATH +) +collect_issue_digest = importlib.util.module_from_spec(MODULE_SPEC) +assert MODULE_SPEC.loader is not None +MODULE_SPEC.loader.exec_module(collect_issue_digest) + + +def test_build_search_queries_uses_each_owner_and_kind_label(): + since = collect_issue_digest.parse_timestamp("2026-04-25T12:34:56Z", "--since") + + queries = collect_issue_digest.build_search_queries( + "openai/codex", ["tui", "exec"], since + ) + + assert queries == [ + "repo:openai/codex is:issue updated:>=2026-04-25 label:tui label:bug", + "repo:openai/codex is:issue updated:>=2026-04-25 label:tui label:enhancement", + "repo:openai/codex is:issue updated:>=2026-04-25 label:exec label:bug", + "repo:openai/codex is:issue updated:>=2026-04-25 label:exec label:enhancement", + ] + + +def test_build_search_queries_can_scan_all_labels(): + since = collect_issue_digest.parse_timestamp("2026-04-25T12:34:56Z", "--since") + + queries = collect_issue_digest.build_search_queries( + "openai/codex", [], since, all_labels=True + ) + + assert queries == [ + "repo:openai/codex is:issue updated:>=2026-04-25 label:bug", + "repo:openai/codex is:issue updated:>=2026-04-25 label:enhancement", + ] + + +def test_normalize_requested_labels_accepts_all_area_phrases(): + assert collect_issue_digest.normalize_requested_labels(["all", "areas"]) == ( + [], + True, + ) + assert collect_issue_digest.normalize_requested_labels(["all-labels"]) == ( + [], + True, + ) + + +def test_search_issue_numbers_requests_updated_sort(monkeypatch): + calls = [] + + def fake_gh_json(args): + calls.append(args) + return { + "items": [ + {"number": 1, "updated_at": "2026-04-25T00:00:00Z"}, + ] + } + + monkeypatch.setattr(collect_issue_digest, "gh_json", fake_gh_json) + + assert collect_issue_digest.search_issue_numbers(["query"], limit=10) == [1] + assert "-f" in calls[0] + assert "sort=updated" in calls[0] + assert "order=desc" in calls[0] + + +def test_search_issue_numbers_applies_limit_per_query(monkeypatch): + calls = [] + + def fake_gh_json(args): + calls.append(args) + query = next( + value.removeprefix("q=") for value in args if value.startswith("q=") + ) + page = int( + next( + value.removeprefix("page=") + for value in args + if value.startswith("page=") + ) + ) + base = 10_000 if query == "first" else 20_000 + offset = (page - 1) * 100 + return { + "items": [ + { + "number": base + offset + idx, + "updated_at": f"2026-04-25T00:{idx:02d}:00Z", + } + for idx in range(100) + ] + } + + monkeypatch.setattr(collect_issue_digest, "gh_json", fake_gh_json) + + collect_issue_digest.search_issue_numbers(["first", "second"], limit=150) + + queried_pages = [ + ( + next( + value.removeprefix("q=") for value in args if value.startswith("q=") + ), + next( + value.removeprefix("page=") + for value in args + if value.startswith("page=") + ), + ) + for args in calls + ] + assert queried_pages == [ + ("first", "1"), + ("first", "2"), + ("second", "1"), + ("second", "2"), + ] + + +def test_summarize_issue_keeps_new_comments_and_reaction_signals(): + since = collect_issue_digest.parse_timestamp("2026-04-25T00:00:00Z", "--since") + until = collect_issue_digest.parse_timestamp("2026-04-26T00:00:00Z", "--until") + issue = { + "number": 123, + "title": "TUI does not redraw", + "html_url": "https://github.com/openai/codex/issues/123", + "state": "open", + "created_at": "2026-04-24T20:00:00Z", + "updated_at": "2026-04-25T10:00:00Z", + "user": {"login": "alice"}, + "author_association": "NONE", + "comments": 2, + "body": "The terminal freezes after resize.", + "labels": [{"name": "bug"}, {"name": "tui"}], + "reactions": {"total_count": 3, "+1": 2, "rocket": 1}, + } + comments = [ + { + "id": 1, + "created_at": "2026-04-25T11:00:00Z", + "updated_at": "2026-04-25T11:00:00Z", + "html_url": "https://github.com/openai/codex/issues/123#issuecomment-1", + "user": {"login": "bob"}, + "author_association": "MEMBER", + "body": "I can reproduce this on main.", + "reactions": {"total_count": 4, "heart": 1, "+1": 3}, + }, + { + "id": 2, + "created_at": "2026-04-24T11:00:00Z", + "updated_at": "2026-04-24T11:00:00Z", + "html_url": "https://github.com/openai/codex/issues/123#issuecomment-2", + "user": {"login": "carol"}, + "author_association": "NONE", + "body": "Older comment.", + "reactions": {"total_count": 1, "eyes": 1}, + }, + ] + + summary = collect_issue_digest.summarize_issue( + issue, + comments, + ["tui", "exec"], + since, + until, + body_chars=200, + comment_chars=200, + ) + + assert summary == { + "number": 123, + "title": "TUI does not redraw", + "description": "TUI does not redraw", + "url": "https://github.com/openai/codex/issues/123", + "state": "open", + "author": "alice", + "author_association": "NONE", + "created_at": "2026-04-24T20:00:00Z", + "updated_at": "2026-04-25T10:00:00Z", + "labels": ["bug", "tui"], + "kind_labels": ["bug"], + "owner_labels": ["tui"], + "comments_total": 2, + "comments_hydration": { + "fetched": 2, + "since": None, + "truncated": False, + "max_pages": None, + }, + "issue_reactions": {"+1": 2, "rocket": 1}, + "issue_reaction_total": 3, + "comment_reaction_total": 5, + "new_comment_reaction_total": 4, + "new_issue_reactions": 0, + "new_issue_upvotes": 0, + "new_comment_reactions": 0, + "new_comment_upvotes": 0, + "new_reactions": 0, + "new_upvotes": 0, + "user_interactions": 1, + "attention": False, + "attention_level": 0, + "attention_marker": "", + "engagement_score": 12, + "activity": { + "new_issue": False, + "new_comments": 1, + "new_human_comments": 1, + "new_reactions": 0, + "new_upvotes": 0, + "updated_without_visible_new_post": False, + }, + "body_excerpt": "The terminal freezes after resize.", + "new_comments": [ + { + "id": 1, + "author": "bob", + "author_association": "MEMBER", + "created_at": "2026-04-25T11:00:00Z", + "updated_at": "2026-04-25T11:00:00Z", + "url": "https://github.com/openai/codex/issues/123#issuecomment-1", + "human_user_interaction": True, + "reactions": {"+1": 3, "heart": 1}, + "reaction_total": 4, + "new_reactions": 0, + "new_upvotes": 0, + "new_reaction_counts": {}, + "body_excerpt": "I can reproduce this on main.", + } + ], + } + + +def test_summarize_issue_filters_non_owner_or_non_kind_labels(): + since = collect_issue_digest.parse_timestamp("2026-04-25T00:00:00Z", "--since") + until = collect_issue_digest.parse_timestamp("2026-04-26T00:00:00Z", "--until") + base_issue = { + "number": 1, + "title": "Question", + "created_at": "2026-04-25T01:00:00Z", + "updated_at": "2026-04-25T01:00:00Z", + "labels": [{"name": "question"}, {"name": "tui"}], + } + + assert ( + collect_issue_digest.summarize_issue( + base_issue, + [], + ["tui"], + since, + until, + body_chars=100, + comment_chars=100, + ) + is None + ) + + issue_without_owner = dict(base_issue) + issue_without_owner["labels"] = [{"name": "bug"}, {"name": "app"}] + + assert ( + collect_issue_digest.summarize_issue( + issue_without_owner, + [], + ["tui"], + since, + until, + body_chars=100, + comment_chars=100, + ) + is None + ) + + +def test_resolve_window_defaults_to_previous_hours(): + class Args: + since = None + until = "2026-04-26T12:00:00Z" + window_hours = 24 + + since, until = collect_issue_digest.resolve_window(Args()) + + assert since.isoformat() == "2026-04-25T12:00:00+00:00" + assert until.tzinfo == timezone.utc + + +def test_parse_duration_hours_accepts_common_phrases(): + assert collect_issue_digest.parse_duration_hours("past week") == 168 + assert collect_issue_digest.parse_duration_hours("48h") == 48 + assert collect_issue_digest.parse_duration_hours("2 days") == 48 + assert collect_issue_digest.parse_duration_hours("1w") == 168 + + +def test_attention_thresholds_scale_by_window_length(): + one_day = collect_issue_digest.attention_thresholds_for_window(24) + assert one_day["elevated"] == 5 + assert one_day["very_high"] == 10 + + half_day = collect_issue_digest.attention_thresholds_for_window(12) + assert half_day["elevated"] == 3 + assert half_day["very_high"] == 5 + + week = collect_issue_digest.attention_thresholds_for_window(168) + assert week["elevated"] == 35 + assert week["very_high"] == 70 + assert collect_issue_digest.attention_marker_for(34, week) == "" + assert collect_issue_digest.attention_marker_for(35, week) == "🔥" + assert collect_issue_digest.attention_marker_for(70, week) == "🔥🔥" + + +def test_fetch_comments_uses_since_filter_and_page_cap(monkeypatch): + calls = [] + + def fake_gh_json(args): + calls.append(args) + return [{"id": idx} for idx in range(100)] + + monkeypatch.setattr(collect_issue_digest, "gh_json", fake_gh_json) + since = collect_issue_digest.parse_timestamp("2026-04-25T00:00:00Z", "--since") + + payload = collect_issue_digest.fetch_comments( + "openai/codex", 123, since=since, max_pages=1 + ) + + assert len(payload["items"]) == 100 + assert payload["truncated"] is True + assert payload["max_pages"] == 1 + assert calls == [ + [ + "api", + "repos/openai/codex/issues/123/comments?since=2026-04-25T00%3A00%3A00Z&per_page=100&page=1", + ] + ] + + +def test_issue_description_prefers_title_over_body_noise(): + issue = { + "title": "Codex.app GUI: MCP child processes not reaped after task completion", + "body": "A later crash mention should not override the title-level symptom.", + "labels": [{"name": "app"}, {"name": "bug"}], + } + + description = collect_issue_digest.issue_description(issue) + assert "MCP child processes" in description + assert "crash" not in description.casefold() + + +def test_attention_markers_count_human_user_interactions(): + since = collect_issue_digest.parse_timestamp("2026-04-25T00:00:00Z", "--since") + until = collect_issue_digest.parse_timestamp("2026-04-26T00:00:00Z", "--until") + issue = { + "number": 456, + "title": "Agent context is exploding", + "html_url": "https://github.com/openai/codex/issues/456", + "state": "open", + "created_at": "2026-04-25T01:00:00Z", + "updated_at": "2026-04-25T12:00:00Z", + "user": {"login": "alice"}, + "labels": [{"name": "bug"}, {"name": "agent"}], + } + comments = [ + { + "id": idx, + "created_at": "2026-04-25T02:00:00Z", + "updated_at": "2026-04-25T02:00:00Z", + "user": {"login": f"user-{idx}"}, + "body": "same here", + } + for idx in range(4) + ] + comments.append( + { + "id": 99, + "created_at": "2026-04-25T02:00:00Z", + "updated_at": "2026-04-25T02:00:00Z", + "user": {"login": "github-actions[bot]"}, + "body": "duplicate bot note", + } + ) + + summary = collect_issue_digest.summarize_issue( + issue, + comments, + ["agent"], + since, + until, + body_chars=100, + comment_chars=100, + ) + + assert summary["user_interactions"] == 5 + assert summary["activity"]["new_human_comments"] == 4 + assert summary["attention"] is True + assert summary["attention_level"] == 1 + assert summary["attention_marker"] == "🔥" + + issue["created_at"] = "2026-04-24T01:00:00Z" + comments.extend( + { + "id": idx, + "created_at": "2026-04-25T03:00:00Z", + "updated_at": "2026-04-25T03:00:00Z", + "user": {"login": f"extra-user-{idx}"}, + "body": "also seeing this", + } + for idx in range(100, 106) + ) + + summary = collect_issue_digest.summarize_issue( + issue, + comments, + ["agent"], + since, + until, + body_chars=100, + comment_chars=100, + ) + + assert summary["user_interactions"] == 10 + assert summary["attention_level"] == 2 + assert summary["attention_marker"] == "🔥🔥" + + +def test_reactions_count_toward_attention_markers(): + since = collect_issue_digest.parse_timestamp("2026-04-25T00:00:00Z", "--since") + until = collect_issue_digest.parse_timestamp("2026-04-26T00:00:00Z", "--until") + issue = { + "number": 789, + "title": "Support 1M token context", + "html_url": "https://github.com/openai/codex/issues/789", + "state": "open", + "created_at": "2026-04-24T01:00:00Z", + "updated_at": "2026-04-25T12:00:00Z", + "user": {"login": "alice"}, + "labels": [{"name": "enhancement"}, {"name": "context"}], + "reactions": {"total_count": 20, "+1": 20}, + } + comments = [ + { + "id": 1, + "created_at": "2026-04-25T02:00:00Z", + "updated_at": "2026-04-25T02:00:00Z", + "user": {"login": "commenter"}, + "body": "please", + "reactions": {"total_count": 2, "+1": 2}, + } + ] + issue_reactions = [ + { + "content": "+1", + "created_at": "2026-04-25T03:00:00Z", + "user": {"login": f"reactor-{idx}"}, + } + for idx in range(18) + ] + comment_reactions_by_id = { + 1: [ + { + "content": "heart", + "created_at": "2026-04-25T04:00:00Z", + "user": {"login": "human-reactor"}, + }, + { + "content": "+1", + "created_at": "2026-04-25T04:00:00Z", + "user": {"login": "github-actions[bot]"}, + }, + ] + } + + summary = collect_issue_digest.summarize_issue( + issue, + comments, + ["context"], + since, + until, + body_chars=100, + comment_chars=100, + issue_reaction_events=issue_reactions, + comment_reactions_by_id=comment_reactions_by_id, + ) + + assert summary["new_reactions"] == 19 + assert summary["new_upvotes"] == 18 + assert summary["user_interactions"] == 20 + assert summary["attention_level"] == 2 + assert summary["attention_marker"] == "🔥🔥" + assert summary["new_comments"][0]["new_reactions"] == 1 + assert summary["new_comments"][0]["new_upvotes"] == 0 + + +def test_user_interactions_are_deduped_by_human_login(): + since = collect_issue_digest.parse_timestamp("2026-04-25T00:00:00Z", "--since") + until = collect_issue_digest.parse_timestamp("2026-04-26T00:00:00Z", "--until") + + def comment(comment_id, login): + return { + "id": comment_id, + "created_at": f"2026-04-25T0{comment_id + 1}:00:00Z", + "updated_at": f"2026-04-25T0{comment_id + 1}:00:00Z", + "user": {"login": login}, + "body": "same issue", + } + + def reaction(content, login, created_at="2026-04-25T10:00:00Z"): + return { + "content": content, + "created_at": created_at, + "user": {"login": login}, + } + + issue = { + "number": 790, + "title": "Repeated pings should not boost attention", + "html_url": "https://github.com/openai/codex/issues/790", + "state": "open", + "created_at": "2026-04-25T01:00:00Z", + "updated_at": "2026-04-25T12:00:00Z", + "user": {"login": "Alice"}, + "labels": [{"name": "bug"}, {"name": "tui"}], + } + comments = [comment(1, "alice"), comment(2, "ALICE"), comment(3, "bob")] + comments.append(comment(4, "github-actions[bot]")) + issue_reactions = [ + reaction("+1", "alice"), + reaction("rocket", "Alice"), + reaction("+1", "bob"), + reaction("+1", "github-actions[bot]"), + reaction("+1", "carol", created_at="2026-04-24T23:00:00Z"), + ] + comment_reactions_by_id = { + 1: [reaction("heart", "alice")], + 2: [reaction("+1", "bob")], + 3: [reaction("eyes", "carol")], + } + + summary = collect_issue_digest.summarize_issue( + issue, + comments, + ["tui"], + since, + until, + body_chars=100, + comment_chars=100, + issue_reaction_events=issue_reactions, + comment_reactions_by_id=comment_reactions_by_id, + ) + + assert summary["activity"]["new_human_comments"] == 3 + assert summary["new_reactions"] == 6 + assert summary["user_interactions"] == 3 + assert summary["attention"] is False + assert summary["attention_marker"] == "" + + +def test_digest_rows_are_table_ready_with_concise_descriptions(): + rows = collect_issue_digest.digest_rows( + [ + { + "number": 1, + "title": "Quiet bug", + "description": "Quiet bug", + "url": "https://github.com/openai/codex/issues/1", + "owner_labels": ["context"], + "kind_labels": ["bug"], + "state": "open", + "attention": False, + "attention_level": 0, + "attention_marker": "", + "user_interactions": 1, + "new_reactions": 0, + "new_upvotes": 0, + "engagement_score": 3, + "issue_reaction_total": 0, + "comment_reaction_total": 0, + "updated_at": "2026-04-25T01:00:00Z", + "activity": { + "new_issue": True, + "new_comments": 0, + "new_reactions": 0, + "updated_without_visible_new_post": False, + }, + }, + { + "number": 2, + "title": "Busy bug", + "description": "High-volume bug report", + "url": "https://github.com/openai/codex/issues/2", + "owner_labels": ["agent"], + "kind_labels": ["bug"], + "state": "open", + "attention": True, + "attention_level": 1, + "attention_marker": "🔥", + "user_interactions": 17, + "new_reactions": 3, + "new_upvotes": 2, + "engagement_score": 20, + "issue_reaction_total": 5, + "comment_reaction_total": 2, + "updated_at": "2026-04-25T02:00:00Z", + "activity": { + "new_issue": False, + "new_comments": 16, + "new_reactions": 3, + "updated_without_visible_new_post": False, + }, + }, + ] + ) + + assert rows[0] == { + "ref": 1, + "ref_markdown": "[1](https://github.com/openai/codex/issues/2)", + "marker": "🔥", + "attention_marker": "🔥", + "number": 2, + "description": "High-volume bug report", + "title": "Busy bug", + "url": "https://github.com/openai/codex/issues/2", + "area": "agent", + "kind": "bug", + "state": "open", + "interactions": 17, + "user_interactions": 17, + "new_reactions": 3, + "new_upvotes": 2, + "current_reactions": 7, + } + + +def test_summary_inputs_are_model_ready_without_preclustering(): + issues = [ + { + "number": 20, + "title": "Windows app Browser Use external navigation fails", + "description": "Browser Use navigation or app-server failure", + "url": "https://github.com/openai/codex/issues/20", + "labels": ["app", "bug"], + "owner_labels": ["app"], + "kind_labels": ["bug"], + "attention": False, + "attention_level": 0, + "attention_marker": "", + "user_interactions": 3, + "new_reactions": 1, + "engagement_score": 8, + "updated_at": "2026-04-25T04:00:00Z", + "activity": {"new_comments": 2}, + }, + { + "number": 21, + "title": "On Windows, cmake output waits until timeout", + "description": "Windows command timeout/capture problem", + "url": "https://github.com/openai/codex/issues/21", + "labels": ["app", "bug"], + "owner_labels": ["app"], + "kind_labels": ["bug"], + "attention": False, + "attention_level": 0, + "attention_marker": "", + "user_interactions": 3, + "new_reactions": 0, + "engagement_score": 7, + "updated_at": "2026-04-25T03:00:00Z", + "activity": {"new_comments": 3}, + }, + { + "number": 22, + "title": "Windows computer use tool fails to click buttons", + "description": "Computer-use workflow failure", + "url": "https://github.com/openai/codex/issues/22", + "labels": ["app", "bug"], + "owner_labels": ["app"], + "kind_labels": ["bug"], + "attention": False, + "attention_level": 0, + "attention_marker": "", + "user_interactions": 3, + "new_reactions": 0, + "engagement_score": 6, + "updated_at": "2026-04-25T02:00:00Z", + "activity": {"new_comments": 3}, + }, + ] + + rows = collect_issue_digest.summary_inputs(issues, ref_map={20: 1, 21: 2, 22: 3}) + + assert rows == [ + { + "ref": 1, + "ref_markdown": "[1](https://github.com/openai/codex/issues/20)", + "number": 20, + "title": "Windows app Browser Use external navigation fails", + "description": "Browser Use navigation or app-server failure", + "url": "https://github.com/openai/codex/issues/20", + "labels": ["app", "bug"], + "owner_labels": ["app"], + "kind_labels": ["bug"], + "state": "", + "attention_marker": "", + "interactions": 3, + "new_comments": 2, + "new_reactions": 1, + "new_upvotes": 0, + "current_reactions": 0, + }, + { + "ref": 2, + "ref_markdown": "[2](https://github.com/openai/codex/issues/21)", + "number": 21, + "title": "On Windows, cmake output waits until timeout", + "description": "Windows command timeout/capture problem", + "url": "https://github.com/openai/codex/issues/21", + "labels": ["app", "bug"], + "owner_labels": ["app"], + "kind_labels": ["bug"], + "state": "", + "attention_marker": "", + "interactions": 3, + "new_comments": 3, + "new_reactions": 0, + "new_upvotes": 0, + "current_reactions": 0, + }, + { + "ref": 3, + "ref_markdown": "[3](https://github.com/openai/codex/issues/22)", + "number": 22, + "title": "Windows computer use tool fails to click buttons", + "description": "Computer-use workflow failure", + "url": "https://github.com/openai/codex/issues/22", + "labels": ["app", "bug"], + "owner_labels": ["app"], + "kind_labels": ["bug"], + "state": "", + "attention_marker": "", + "interactions": 3, + "new_comments": 3, + "new_reactions": 0, + "new_upvotes": 0, + "current_reactions": 0, + }, + ] diff --git a/reference/openai-codex/.codex/skills/codex-pr-body/SKILL.md b/reference/openai-codex/.codex/skills/codex-pr-body/SKILL.md new file mode 100644 index 0000000..76b37b8 --- /dev/null +++ b/reference/openai-codex/.codex/skills/codex-pr-body/SKILL.md @@ -0,0 +1,59 @@ +--- +name: codex-pr-body +description: Update the title and body of one or more pull requests. +--- + +## Determining the PR(s) + +When this skill is invoked, the PR(s) to update may be specified explicitly, but in the common case, the PR(s) to update will be inferred from the branch / commit that the user is currently working on. For ordinary Git usage (i.e., not Sapling as discussed below), you may have to use a combination of `git branch` and `gh pr view --repo openai/codex --json number --jq '.number'` to determine the PR associated with the current branch / commit. + +## PR Body Contents + +When invoked, use `gh` to edit the pull request body and title to reflect the contents of the specified PR. Make sure to check the existing pull request body to see if there is key information that should be preserved. For example, NEVER remove an image in the existing pull request body, as the author may have no way to recover it if you remove it. + +It is critically important to explain _why_ the change is being made. If the current conversation in which this skill is invoked has discussed the motivation, be sure to capture this in the pull request body. + +The body should also explain _what_ changed, but this should appear after the _why_. + +Limit discussion to the _net change_ of the commit. It is generally frowned upon to discuss changes that were attempted but later undone in the course of the development of the pull request. When rewriting the pull request body, you may need to eliminate details such as these when they are no longer appropriate / of interest to future readers. + +Avoid references to absolute paths on my local disk. When talking about a path that is within the repository, simply use the repo-relative path. + +It is generally helpful to discuss how the change was verified. That said, it is unnecessary to mention things that CI checks automatically, e.g., do not include "ran `just fmt`" as part of the test plan. Though identifying the new tests that were purposely introduced to verify the new behavior introduced by the pull request is often appropriate. + +Make use of Markdown to format the pull request professionally. Ensure "code things" appear in single backticks when referenced inline. Fenced code blocks are useful when referencing code or showing a shell transcript. Also, make use of GitHub permalinks when citing existing pieces of code that are relevant to the change. + +Make sure to reference any relevant pull requests or issues, though there should be no need to reference the pull request in its own PR body. + +If there is documentation that should be updated on https://developers.openai.com/codex as a result of this change, please note that in a separate section near the end of the pull request. Omit this section if there is no documentation that needs to be updated. + +## Working with Stacks + +Sometimes a pull request is composed of a stack of commits that build on one another. In these cases, the PR body should reflect the _net_ change introduced by the stack as a whole, rather than the individual commits that make up the stack. + +Similarly, sometimes a user may be using a tool like Sapling to leverage _stacked pull requests_, in which case the `base` of the PR may be the a branch that is the `head` of another PR in the stack rather than `main`. In this case, be sure to discuss only the net change between the `base` and `head` of the PR that is being opened against that stacked base, rather than the changes relative to `main`. + +## Sapling + +If `.git/sl/store` is present, then this Git repository is governed by Sapling SCM (https://sapling-scm.com). + +In Sapling, run the following to see if there is a GitHub pull request associated with the current revision: + +```shell +sl log --template '{github_pull_request_url}' -r . +``` + +Alternatively, you can run `sl sl` to see the current development branch and whether there is a GitHub pull request associated with the current commit. For example, if the output were: + +``` + @ cb032b31cf 72 minutes ago mbolin #11412 +╭─╯ tui: show non-file layer content in /debug-config +│ +o fdd0cd1de9 Today at 20:09 origin/main +│ +~ +``` + +- `@` indicates the current commit is `cb032b31cf` +- it is a development branch containing a single commit branched off of `origin/main` +- it is associated with GitHub pull request #11412 diff --git a/reference/openai-codex/.codex/skills/remote-tests/SKILL.md b/reference/openai-codex/.codex/skills/remote-tests/SKILL.md new file mode 100644 index 0000000..ee35fc2 --- /dev/null +++ b/reference/openai-codex/.codex/skills/remote-tests/SKILL.md @@ -0,0 +1,16 @@ +--- +name: remote-tests +description: How to run tests using remote executor. +--- + +Some codex integration tests support a running against a remote executor. +This means that when CODEX_TEST_REMOTE_ENV environment variable is set they will attempt to start an executor process in a docker container CODEX_TEST_REMOTE_ENV points to and use it in tests. + +Docker container is built and initialized via ./scripts/test-remote-env.sh + +Currently running remote tests is only supported on Linux, so you need to use a devbox to run them + +You can list devboxes via `applied_devbox ls`, pick the one with `codex` in the name. +Connect to devbox via `ssh `. +Reuse the same checkout of codex in `~/code/codex`. Reset files if needed. Multiple checkouts take longer to build and take up more space. +Check whether the SHA and modified files are in sync between remote and local. diff --git a/reference/openai-codex/.codex/skills/test-tui/SKILL.md b/reference/openai-codex/.codex/skills/test-tui/SKILL.md new file mode 100644 index 0000000..e58e677 --- /dev/null +++ b/reference/openai-codex/.codex/skills/test-tui/SKILL.md @@ -0,0 +1,14 @@ +--- +name: test-tui +description: Guide for testing Codex TUI interactively +--- + +You can start and use Codex TUI to verify changes. + +Important notes: + +Start interactively. +Always set RUST_LOG="trace" when starting the process. +Pass `-c log_dir=` argument to have logs written to a specific directory to help with debugging. +When sending a test message programmatically, send text first, then send Enter in a separate write (do not send text + Enter in one burst). +Use `just codex` target to run - `just codex -c ...` diff --git a/reference/openai-codex/.codex/skills/update-v8-version/SKILL.md b/reference/openai-codex/.codex/skills/update-v8-version/SKILL.md new file mode 100644 index 0000000..512cc0d --- /dev/null +++ b/reference/openai-codex/.codex/skills/update-v8-version/SKILL.md @@ -0,0 +1,72 @@ +--- +name: update-v8-version +description: Update Codex's pinned `v8` / `rusty_v8` versions, validate the release-candidate path, and investigate failed V8 canary or artifact builds. Use when asked to bump V8, update `rusty_v8` artifacts, prepare or validate a V8 release candidate, check `v8-canary`, or diagnose why a V8 version update no longer builds. +--- + +# Update V8 Version + +## Core Workflow + +1. Read `third_party/v8/README.md` and follow its version-bump sequence. Treat + that document as the release-process source of truth. +2. Inspect and update the concrete repo surfaces that carry the pin: + - `codex-rs/Cargo.toml` + - `codex-rs/Cargo.lock` + - `MODULE.bazel` + - `third_party/v8/BUILD.bazel` + - `third_party/v8/README.md` + - the matching `third_party/v8/rusty_v8_.sha256` manifest when the + remaining prebuilt inputs change +3. Keep the existing checksum helpers in the loop: + + ```bash + python3 .github/scripts/rusty_v8_bazel.py update-module-bazel + python3 .github/scripts/rusty_v8_bazel.py check-module-bazel + python3 -m unittest discover -s .github/scripts -p test_rusty_v8_bazel.py + ``` + +4. Validate the release-candidate path before broadening the work: + - Prefer checking the `v8-canary` CI result for the candidate branch or PR + when one exists, using GitHub check tooling or `gh` as appropriate. + - If CI is unavailable or the user asked for a local-only check, run the + closest local validation that is practical for the changed surface and say + explicitly that it is a local substitute, not the full hosted canary. +5. If the canary path passes, stop there. Summarize the result and encourage the + user to commit the candidate changes or proceed with the release flow they + requested. Do not publish tags, releases, or pushes unless the user asked. + +## Failure Path + +Enter this path only when the canary or local build path fails. + +1. Capture the failing target, workflow job, and first actionable error. +2. Compare the currently pinned version with the target version at the relevant + upstream tag or SHA. Inspect both: + - `denoland/rusty_v8` + - upstream V8 source at the target Bazel-pinned version +3. Track build-relevant deltas rather than broad source churn: + - generated binding layout changes + - archive or asset naming changes + - GN/Bazel target changes + - custom libc++ / libc++abi / llvm-libc inputs + - sandbox or pointer-compression feature relationships + - patch hunks in `patches/` that no longer apply or no longer match upstream +4. Trace each failing delta back into Codex's build graph: + - `MODULE.bazel` + - `third_party/v8/BUILD.bazel` + - `.github/scripts/rusty_v8_bazel.py` + - `.github/workflows/v8-canary.yml` + - `.github/workflows/rusty-v8-release.yml` +5. Update only the pieces required to restore the target version's build and + artifact contract. Keep patch explanations and doc changes close to the + affected files. +6. Re-run the focused validation. If it becomes green, return to the normal + workflow and stop with a concise summary plus the remaining release step. + +## Reporting + +- Say whether validation came from hosted `v8-canary` or from a local + substitute. +- Distinguish "version bump complete" from "release published". +- When blocked, report the upstream delta that matters, the Codex file it hits, + and the next concrete fix to try. diff --git a/reference/openai-codex/.codex/skills/update-v8-version/agents/openai.yaml b/reference/openai-codex/.codex/skills/update-v8-version/agents/openai.yaml new file mode 100644 index 0000000..36e7af8 --- /dev/null +++ b/reference/openai-codex/.codex/skills/update-v8-version/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "Update V8 Version" + short_description: "Guide V8 bumps and release validation" + default_prompt: "Use $update-v8-version to update Codex to a new v8 release and validate the release-candidate path." diff --git a/reference/openai-codex/.devcontainer/Dockerfile b/reference/openai-codex/.devcontainer/Dockerfile new file mode 100644 index 0000000..8c3a859 --- /dev/null +++ b/reference/openai-codex/.devcontainer/Dockerfile @@ -0,0 +1,27 @@ +FROM ubuntu:24.04 + +ARG DEBIAN_FRONTEND=noninteractive +# enable 'universe' because musl-tools & clang live there +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + software-properties-common && \ + add-apt-repository --yes universe + +# now install build deps +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + build-essential curl git ca-certificates \ + pkg-config libcap-dev clang musl-tools libssl-dev just && \ + rm -rf /var/lib/apt/lists/* + +# Ubuntu 24.04 ships with user 'ubuntu' already created with UID 1000. +USER ubuntu + +# install Rust + musl target as dev user +RUN curl -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal && \ + ~/.cargo/bin/rustup target add aarch64-unknown-linux-musl && \ + ~/.cargo/bin/rustup component add clippy rustfmt + +ENV PATH="/home/ubuntu/.cargo/bin:${PATH}" + +WORKDIR /workspace diff --git a/reference/openai-codex/.devcontainer/Dockerfile.secure b/reference/openai-codex/.devcontainer/Dockerfile.secure new file mode 100644 index 0000000..6c1878e --- /dev/null +++ b/reference/openai-codex/.devcontainer/Dockerfile.secure @@ -0,0 +1,82 @@ +FROM mcr.microsoft.com/devcontainers/base:ubuntu-24.04 + +ARG TZ +ARG DEBIAN_FRONTEND=noninteractive +ARG NODE_MAJOR=22 +ARG RUST_TOOLCHAIN=1.92.0 +# Keep this in sync with .devcontainer/codex-install/package.json and pnpm-lock.yaml. +ARG CODEX_NPM_VERSION=0.121.0 + +ENV TZ="$TZ" +ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +# Devcontainers run as a non-root user, so enable bubblewrap's setuid mode. +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + build-essential \ + curl \ + git \ + ca-certificates \ + pkg-config \ + clang \ + musl-tools \ + libssl-dev \ + libsqlite3-dev \ + just \ + python3 \ + python3-pip \ + jq \ + less \ + man-db \ + unzip \ + ripgrep \ + fzf \ + fd-find \ + zsh \ + dnsutils \ + iproute2 \ + ipset \ + iptables \ + aggregate \ + bubblewrap \ + && chmod u+s /usr/bin/bwrap \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +COPY .devcontainer/codex-install/package.json \ + .devcontainer/codex-install/pnpm-lock.yaml \ + .devcontainer/codex-install/pnpm-workspace.yaml \ + /opt/codex-install/ + +RUN curl -fsSL "https://deb.nodesource.com/setup_${NODE_MAJOR}.x" | bash - \ + && apt-get update \ + && apt-get install -y --no-install-recommends nodejs \ + && test "$(node -p "require('/opt/codex-install/package.json').dependencies['@openai/codex']")" = "${CODEX_NPM_VERSION}" \ + && cd /opt/codex-install \ + && corepack pnpm install --prod --frozen-lockfile \ + && ln -s /opt/codex-install/node_modules/.bin/codex /usr/local/bin/codex \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +COPY .devcontainer/init-firewall.sh /usr/local/bin/init-firewall.sh +COPY .devcontainer/post_install.py /opt/post_install.py +COPY .devcontainer/post-start.sh /opt/post_start.sh + +RUN chmod 500 /usr/local/bin/init-firewall.sh \ + && chmod 755 /opt/post_start.sh \ + && chmod 644 /opt/post_install.py \ + && chown vscode:vscode /opt/post_install.py + +RUN install -d -m 0775 -o vscode -g vscode /commandhistory /workspace \ + && touch /commandhistory/.bash_history /commandhistory/.zsh_history \ + && chown vscode:vscode /commandhistory/.bash_history /commandhistory/.zsh_history + +USER vscode +ENV PATH="/home/vscode/.cargo/bin:${PATH}" +WORKDIR /workspace + +RUN curl -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain "${RUST_TOOLCHAIN}" \ + && rustup component add clippy rustfmt rust-src \ + && rustup target add x86_64-unknown-linux-musl aarch64-unknown-linux-musl diff --git a/reference/openai-codex/.devcontainer/README.md b/reference/openai-codex/.devcontainer/README.md new file mode 100644 index 0000000..3b07f2b --- /dev/null +++ b/reference/openai-codex/.devcontainer/README.md @@ -0,0 +1,49 @@ +# Containerized Development + +We provide two container paths: + +- `devcontainer.json` keeps the existing Codex contributor setup for working on this repository. +- `devcontainer.secure.json` adds a customer-oriented profile with stricter outbound network controls. + +## Codex contributor profile + +Use `devcontainer.json` when you are developing Codex itself. This is the same lightweight arm64 container that already exists in the repo. + +## Secure customer profile + +Use `devcontainer.secure.json` when you want a stricter runtime profile for running Codex inside a project container: + +- installs the Codex CLI plus common build tools +- installs bubblewrap in setuid mode for Codex's Linux sandbox +- disables Docker's outer seccomp and AppArmor profiles so bubblewrap can construct Codex's inner sandbox +- enables firewall startup with an allowlist-driven outbound policy +- blocks IPv6 by default so the allowlist cannot be bypassed over AAAA routes +- requires `NET_ADMIN` and `NET_RAW` so the firewall can be installed at startup + +This profile keeps the stricter networking isolated to the customer path instead of changing the default Codex contributor container. + +Start it from the CLI with: + +```bash +devcontainer up --workspace-folder . --config .devcontainer/devcontainer.secure.json +``` + +In VS Code, choose **Dev Containers: Open Folder in Container...** and select `.devcontainer/devcontainer.secure.json`. + +## Docker + +To build the contributor image locally for x64 and then run it with the repo mounted under `/workspace`: + +```shell +CODEX_DOCKER_IMAGE_NAME=codex-linux-dev +docker build --platform=linux/amd64 -t "$CODEX_DOCKER_IMAGE_NAME" ./.devcontainer +docker run --platform=linux/amd64 --rm -it -e CARGO_TARGET_DIR=/workspace/codex-rs/target-amd64 -v "$PWD":/workspace -w /workspace/codex-rs "$CODEX_DOCKER_IMAGE_NAME" +``` + +Note that `/workspace/target` will contain the binaries built for your host platform, so we include `-e CARGO_TARGET_DIR=/workspace/codex-rs/target-amd64` in the `docker run` command so that the binaries built inside your container are written to a separate directory. + +For arm64, specify `--platform=linux/arm64` instead for both `docker build` and `docker run`. + +Currently, the contributor `Dockerfile` works for both x64 and arm64 Linux, though you need to run `rustup target add x86_64-unknown-linux-musl` yourself to install the musl toolchain for x64. + +The secure profile's capability, seccomp, and AppArmor options are required when you want Codex's bubblewrap sandbox to run inside Docker as the non-root devcontainer user. Without them, Docker's default runtime profile can block bubblewrap's namespace setup before Codex's own seccomp filter is installed. This keeps the Docker relaxation explicit in the profile that is meant to run Codex inside a project container, while the default contributor profile stays lightweight. diff --git a/reference/openai-codex/.devcontainer/codex-install/package.json b/reference/openai-codex/.devcontainer/codex-install/package.json new file mode 100644 index 0000000..453054e --- /dev/null +++ b/reference/openai-codex/.devcontainer/codex-install/package.json @@ -0,0 +1,13 @@ +{ + "name": "codex-devcontainer-install", + "private": true, + "description": "Locked Codex CLI install boundary for the secure devcontainer.", + "dependencies": { + "@openai/codex": "0.121.0" + }, + "engines": { + "node": ">=22", + "pnpm": ">=10.33.0" + }, + "packageManager": "pnpm@10.33.0+sha512.10568bb4a6afb58c9eb3630da90cc9516417abebd3fabbe6739f0ae795728da1491e9db5a544c76ad8eb7570f5c4bb3d6c637b2cb41bfdcdb47fa823c8649319" +} diff --git a/reference/openai-codex/.devcontainer/codex-install/pnpm-lock.yaml b/reference/openai-codex/.devcontainer/codex-install/pnpm-lock.yaml new file mode 100644 index 0000000..70e7608 --- /dev/null +++ b/reference/openai-codex/.devcontainer/codex-install/pnpm-lock.yaml @@ -0,0 +1,85 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@openai/codex': + specifier: 0.121.0 + version: 0.121.0 + +packages: + + '@openai/codex@0.121.0': + resolution: {integrity: sha512-kCJ2NeATd4QBQRmqV04ymdN1ZU3MSwnJQDm/KzjpuzGvCuUVEn7no/T2mRyxQ2x77AACqriNOyPPoM/yufyvNg==} + engines: {node: '>=16'} + hasBin: true + + '@openai/codex@0.121.0-darwin-arm64': + resolution: {integrity: sha512-ZyBqIB6Fb4I0hGb/h65Vu7ePYjHSmGiqqfm+/1djEuxDPkqjfi4wkxYxNYNY+6najyNGN4UijOSTTf19eDCrqw==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + + '@openai/codex@0.121.0-darwin-x64': + resolution: {integrity: sha512-1/OAtdkAZ5yPI3xqaEFlHuPziS1yCqL2gOZdswE7HTmmwpIxi6Z3FCo60JWDPluIp89z4tftdjq73/OCN0YVcw==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + + '@openai/codex@0.121.0-linux-arm64': + resolution: {integrity: sha512-2UgMmdo237o7SCMsfb529cOSEM2HFUgN6OBkv5SBLwfNY1NO2Ex6JnUjlppEXlX6/4cXfZ5qjDghVz5j/+B9zw==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + + '@openai/codex@0.121.0-linux-x64': + resolution: {integrity: sha512-vlpNJXIqss800J+32Vy7TUZzv31n61b45OLxmsVQGFkTNLJcjFrj9jDUC7I62eC4F16gLioilefNfv4CdJQOEw==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + + '@openai/codex@0.121.0-win32-arm64': + resolution: {integrity: sha512-m88q4f3XI5npn1t6OG0nWGHWWAjO5FgjRwxh4hdujbLO6t9CiCNfhfPZIOSsoATbrCNwLC+6S77m3cjbNToPNg==} + engines: {node: '>=16'} + cpu: [arm64] + os: [win32] + + '@openai/codex@0.121.0-win32-x64': + resolution: {integrity: sha512-Fp0ecVOyM+VcBi/y4HVvRzhifO9YqRiHzhV3rhtAppC7flh22WPguLC4kmvXYAR0p3RPzbo35M2CedWnkOT+cw==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + +snapshots: + + '@openai/codex@0.121.0': + optionalDependencies: + '@openai/codex-darwin-arm64': '@openai/codex@0.121.0-darwin-arm64' + '@openai/codex-darwin-x64': '@openai/codex@0.121.0-darwin-x64' + '@openai/codex-linux-arm64': '@openai/codex@0.121.0-linux-arm64' + '@openai/codex-linux-x64': '@openai/codex@0.121.0-linux-x64' + '@openai/codex-win32-arm64': '@openai/codex@0.121.0-win32-arm64' + '@openai/codex-win32-x64': '@openai/codex@0.121.0-win32-x64' + + '@openai/codex@0.121.0-darwin-arm64': + optional: true + + '@openai/codex@0.121.0-darwin-x64': + optional: true + + '@openai/codex@0.121.0-linux-arm64': + optional: true + + '@openai/codex@0.121.0-linux-x64': + optional: true + + '@openai/codex@0.121.0-win32-arm64': + optional: true + + '@openai/codex@0.121.0-win32-x64': + optional: true diff --git a/reference/openai-codex/.devcontainer/codex-install/pnpm-workspace.yaml b/reference/openai-codex/.devcontainer/codex-install/pnpm-workspace.yaml new file mode 100644 index 0000000..3b901a0 --- /dev/null +++ b/reference/openai-codex/.devcontainer/codex-install/pnpm-workspace.yaml @@ -0,0 +1,12 @@ +packages: + - "." + +minimumReleaseAge: 10080 +minimumReleaseAgeExclude: [] + +blockExoticSubdeps: true +strictDepBuilds: true +trustPolicy: no-downgrade +trustPolicyIgnoreAfter: 10080 +trustPolicyExclude: [] +allowBuilds: {} diff --git a/reference/openai-codex/.devcontainer/devcontainer.json b/reference/openai-codex/.devcontainer/devcontainer.json new file mode 100644 index 0000000..1bed79c --- /dev/null +++ b/reference/openai-codex/.devcontainer/devcontainer.json @@ -0,0 +1,27 @@ +{ + "name": "Codex", + "build": { + "dockerfile": "Dockerfile", + "context": "..", + "platform": "linux/arm64" + }, + + /* Force VS Code to run the container as arm64 in + case your host is x86 (or vice-versa). */ + "runArgs": ["--platform=linux/arm64"], + + "containerEnv": { + "RUST_BACKTRACE": "1", + "CARGO_TARGET_DIR": "${containerWorkspaceFolder}/codex-rs/target-arm64" + }, + + "remoteUser": "ubuntu", + "customizations": { + "vscode": { + "settings": { + "terminal.integrated.defaultProfile.linux": "bash" + }, + "extensions": ["rust-lang.rust-analyzer", "tamasfe.even-better-toml"] + } + } +} diff --git a/reference/openai-codex/.devcontainer/devcontainer.secure.json b/reference/openai-codex/.devcontainer/devcontainer.secure.json new file mode 100644 index 0000000..5d5808e --- /dev/null +++ b/reference/openai-codex/.devcontainer/devcontainer.secure.json @@ -0,0 +1,83 @@ +{ + "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.schema.json", + "name": "Codex (Secure)", + "build": { + "dockerfile": "Dockerfile.secure", + "context": "..", + "args": { + "TZ": "${localEnv:TZ:UTC}", + "NODE_MAJOR": "22", + "RUST_TOOLCHAIN": "1.92.0", + "CODEX_NPM_VERSION": "0.121.0" + } + }, + "runArgs": [ + "--cap-add=SYS_ADMIN", + "--cap-add=SYS_CHROOT", + "--cap-add=SETUID", + "--cap-add=SETGID", + "--cap-add=SYS_PTRACE", + "--security-opt=seccomp=unconfined", + "--security-opt=apparmor=unconfined", + "--cap-add=NET_ADMIN", + "--cap-add=NET_RAW" + ], + "init": true, + "updateRemoteUserUID": true, + "remoteUser": "vscode", + "workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=delegated", + "workspaceFolder": "/workspace", + "mounts": [ + "source=codex-commandhistory-${devcontainerId},target=/commandhistory,type=volume", + "source=codex-home-${devcontainerId},target=/home/vscode/.codex,type=volume", + "source=codex-gh-${devcontainerId},target=/home/vscode/.config/gh,type=volume", + "source=codex-cargo-registry-${devcontainerId},target=/home/vscode/.cargo/registry,type=volume", + "source=codex-cargo-git-${devcontainerId},target=/home/vscode/.cargo/git,type=volume", + "source=codex-rustup-${devcontainerId},target=/home/vscode/.rustup,type=volume", + "source=${localEnv:HOME}/.gitconfig,target=/home/vscode/.gitconfig,type=bind,readonly" + ], + "containerEnv": { + "RUST_BACKTRACE": "1", + "CODEX_UNSAFE_ALLOW_NO_SANDBOX": "1", + "CODEX_ENABLE_FIREWALL": "1", + "CODEX_INCLUDE_GITHUB_META_RANGES": "1", + "OPENAI_ALLOWED_DOMAINS": "api.openai.com auth.openai.com github.com api.github.com codeload.github.com raw.githubusercontent.com objects.githubusercontent.com crates.io index.crates.io static.crates.io static.rust-lang.org registry.npmjs.org pypi.org files.pythonhosted.org", + "CARGO_TARGET_DIR": "/workspace/.cache/cargo-target", + "GIT_CONFIG_GLOBAL": "/home/vscode/.gitconfig.local", + "COREPACK_ENABLE_DOWNLOAD_PROMPT": "0", + "PYTHONDONTWRITEBYTECODE": "1", + "PIP_DISABLE_PIP_VERSION_CHECK": "1" + }, + "remoteEnv": { + "OPENAI_API_KEY": "${localEnv:OPENAI_API_KEY}" + }, + "postCreateCommand": "python3 /opt/post_install.py", + "postStartCommand": "bash /opt/post_start.sh", + "waitFor": "postStartCommand", + "customizations": { + "vscode": { + "settings": { + "terminal.integrated.defaultProfile.linux": "zsh", + "terminal.integrated.profiles.linux": { + "bash": { + "path": "bash", + "icon": "terminal-bash" + }, + "zsh": { + "path": "zsh" + } + }, + "files.trimTrailingWhitespace": true, + "files.insertFinalNewline": true, + "files.trimFinalNewlines": true + }, + "extensions": [ + "openai.chatgpt", + "rust-lang.rust-analyzer", + "tamasfe.even-better-toml", + "vadimcn.vscode-lldb", + "ms-azuretools.vscode-docker" + ] + } + } +} diff --git a/reference/openai-codex/.devcontainer/init-firewall.sh b/reference/openai-codex/.devcontainer/init-firewall.sh new file mode 100644 index 0000000..9275724 --- /dev/null +++ b/reference/openai-codex/.devcontainer/init-firewall.sh @@ -0,0 +1,170 @@ +#!/usr/bin/env bash +set -euo pipefail +IFS=$'\n\t' + +allowed_domains_file="/etc/codex/allowed_domains.txt" +include_github_meta_ranges="${CODEX_INCLUDE_GITHUB_META_RANGES:-1}" + +if [ -f "$allowed_domains_file" ]; then + mapfile -t allowed_domains < <(sed '/^\s*#/d;/^\s*$/d' "$allowed_domains_file") +else + allowed_domains=("api.openai.com") +fi + +if [ "${#allowed_domains[@]}" -eq 0 ]; then + echo "ERROR: No allowed domains configured" + exit 1 +fi + +add_ipv4_cidr_to_allowlist() { + local source="$1" + local cidr="$2" + + if [[ ! "$cidr" =~ ^[0-9]{1,3}(\.[0-9]{1,3}){3}/[0-9]{1,2}$ ]]; then + echo "ERROR: Invalid ${source} CIDR range: $cidr" + exit 1 + fi + + ipset add allowed-domains "$cidr" -exist +} + +configure_ipv6_default_deny() { + if ! command -v ip6tables >/dev/null 2>&1; then + echo "ERROR: ip6tables is required to enforce IPv6 default-deny policy" + exit 1 + fi + + ip6tables -F + ip6tables -X + ip6tables -t mangle -F + ip6tables -t mangle -X + ip6tables -t nat -F 2>/dev/null || true + ip6tables -t nat -X 2>/dev/null || true + + ip6tables -A INPUT -i lo -j ACCEPT + ip6tables -A OUTPUT -o lo -j ACCEPT + ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT + ip6tables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT + + ip6tables -P INPUT DROP + ip6tables -P FORWARD DROP + ip6tables -P OUTPUT DROP + + echo "IPv6 firewall policy configured (default-deny)" +} + +# Preserve docker-managed DNS NAT rules before clearing tables. +docker_dns_rules="$(iptables-save -t nat | grep "127\\.0\\.0\\.11" || true)" + +iptables -F +iptables -X +iptables -t nat -F +iptables -t nat -X +iptables -t mangle -F +iptables -t mangle -X +ipset destroy allowed-domains 2>/dev/null || true + +if [ -n "$docker_dns_rules" ]; then + echo "Restoring Docker DNS NAT rules" + iptables -t nat -N DOCKER_OUTPUT 2>/dev/null || true + iptables -t nat -N DOCKER_POSTROUTING 2>/dev/null || true + while IFS= read -r rule; do + [ -z "$rule" ] && continue + iptables -t nat $rule + done <<< "$docker_dns_rules" +fi + +# Allow DNS resolution and localhost communication. +iptables -A OUTPUT -p udp --dport 53 -j ACCEPT +iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT +iptables -A INPUT -p udp --sport 53 -j ACCEPT +iptables -A INPUT -p tcp --sport 53 -j ACCEPT +iptables -A INPUT -i lo -j ACCEPT +iptables -A OUTPUT -o lo -j ACCEPT + +ipset create allowed-domains hash:net + +for domain in "${allowed_domains[@]}"; do + echo "Resolving $domain" + ips="$(dig +short A "$domain" | sed '/^\s*$/d')" + if [ -z "$ips" ]; then + echo "ERROR: Failed to resolve $domain" + exit 1 + fi + + while IFS= read -r ip; do + if [[ ! "$ip" =~ ^[0-9]{1,3}(\.[0-9]{1,3}){3}$ ]]; then + echo "ERROR: Invalid IPv4 address from DNS for $domain: $ip" + exit 1 + fi + ipset add allowed-domains "$ip" -exist + done <<< "$ips" +done + +if [ "$include_github_meta_ranges" = "1" ]; then + echo "Fetching GitHub meta ranges" + github_meta="$(curl -fsSL --connect-timeout 10 https://api.github.com/meta)" + + if ! echo "$github_meta" | jq -e '.web and .api and .git' >/dev/null; then + echo "ERROR: GitHub meta response missing expected fields" + exit 1 + fi + + while IFS= read -r cidr; do + [ -z "$cidr" ] && continue + if [[ "$cidr" == *:* ]]; then + # Current policy enforces IPv4-only ipset entries. + continue + fi + add_ipv4_cidr_to_allowlist "GitHub" "$cidr" + done < <(echo "$github_meta" | jq -r '((.web // []) + (.api // []) + (.git // []))[]' | sort -u) +fi + +host_ip="$(ip route | awk '/default/ {print $3; exit}')" +if [ -z "$host_ip" ]; then + echo "ERROR: Failed to detect host IP" + exit 1 +fi + +host_network="$(echo "$host_ip" | sed 's/\.[0-9]*$/.0\/24/')" +iptables -A INPUT -s "$host_network" -j ACCEPT +iptables -A OUTPUT -d "$host_network" -j ACCEPT + +iptables -P INPUT DROP +iptables -P FORWARD DROP +iptables -P OUTPUT DROP + +iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT +iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT +iptables -A OUTPUT -m set --match-set allowed-domains dst -j ACCEPT + +# Reject rather than silently drop to make policy failures obvious. +iptables -A INPUT -j REJECT --reject-with icmp-admin-prohibited +iptables -A OUTPUT -j REJECT --reject-with icmp-admin-prohibited +iptables -A FORWARD -j REJECT --reject-with icmp-admin-prohibited + +configure_ipv6_default_deny + +echo "Firewall configuration complete" + +if curl --connect-timeout 5 https://example.com >/dev/null 2>&1; then + echo "ERROR: Firewall verification failed - was able to reach https://example.com" + exit 1 +fi + +if ! curl --connect-timeout 5 https://api.openai.com >/dev/null 2>&1; then + echo "ERROR: Firewall verification failed - unable to reach https://api.openai.com" + exit 1 +fi + +if [ "$include_github_meta_ranges" = "1" ] && ! curl --connect-timeout 5 https://api.github.com/zen >/dev/null 2>&1; then + echo "ERROR: Firewall verification failed - unable to reach https://api.github.com" + exit 1 +fi + +if curl --connect-timeout 5 -6 https://example.com >/dev/null 2>&1; then + echo "ERROR: Firewall verification failed - was able to reach https://example.com over IPv6" + exit 1 +fi + +echo "Firewall verification passed" diff --git a/reference/openai-codex/.devcontainer/post-start.sh b/reference/openai-codex/.devcontainer/post-start.sh new file mode 100644 index 0000000..fcc42ad --- /dev/null +++ b/reference/openai-codex/.devcontainer/post-start.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [ "${CODEX_ENABLE_FIREWALL:-1}" != "1" ]; then + echo "[devcontainer] Firewall mode: permissive (CODEX_ENABLE_FIREWALL=${CODEX_ENABLE_FIREWALL:-unset})." + exit 0 +fi + +echo "[devcontainer] Firewall mode: strict" + +domains_raw="${OPENAI_ALLOWED_DOMAINS:-api.openai.com}" +mapfile -t domains < <(printf '%s\n' "$domains_raw" | tr ', ' '\n\n' | sed '/^$/d' | sort -u) + +if [ "${#domains[@]}" -eq 0 ]; then + echo "[devcontainer] No allowed domains configured." + exit 1 +fi + +tmp_file="$(mktemp)" +for domain in "${domains[@]}"; do + if [[ ! "$domain" =~ ^[a-zA-Z0-9][a-zA-Z0-9.-]*\.[a-zA-Z]{2,}$ ]]; then + echo "[devcontainer] Invalid domain in OPENAI_ALLOWED_DOMAINS: $domain" + rm -f "$tmp_file" + exit 1 + fi + printf '%s\n' "$domain" >> "$tmp_file" +done + +sudo install -d -m 0755 /etc/codex +sudo cp "$tmp_file" /etc/codex/allowed_domains.txt +sudo chown root:root /etc/codex/allowed_domains.txt +sudo chmod 0444 /etc/codex/allowed_domains.txt +rm -f "$tmp_file" + +echo "[devcontainer] Applying firewall policy for domains: ${domains[*]}" +sudo --preserve-env=CODEX_INCLUDE_GITHUB_META_RANGES /usr/local/bin/init-firewall.sh diff --git a/reference/openai-codex/.devcontainer/post_install.py b/reference/openai-codex/.devcontainer/post_install.py new file mode 100644 index 0000000..205e57c --- /dev/null +++ b/reference/openai-codex/.devcontainer/post_install.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python3 +"""Post-install configuration for the Codex devcontainer.""" + +from __future__ import annotations + +import os +import subprocess +import sys +from pathlib import Path + + +def ensure_history_files() -> None: + command_history_dir = Path("/commandhistory") + command_history_dir.mkdir(parents=True, exist_ok=True) + + for filename in (".bash_history", ".zsh_history"): + (command_history_dir / filename).touch(exist_ok=True) + + +def fix_directory_ownership() -> None: + uid = os.getuid() + gid = os.getgid() + + paths = [ + Path.home() / ".codex", + Path.home() / ".config" / "gh", + Path.home() / ".cargo", + Path.home() / ".rustup", + Path("/commandhistory"), + ] + + for path in paths: + if not path.exists(): + continue + + stat_info = path.stat() + if stat_info.st_uid == uid and stat_info.st_gid == gid: + continue + + try: + subprocess.run( + ["sudo", "chown", "-R", f"{uid}:{gid}", str(path)], + check=True, + capture_output=True, + text=True, + ) + print(f"[post_install] fixed ownership: {path}", file=sys.stderr) + except subprocess.CalledProcessError as err: + print( + f"[post_install] warning: could not fix ownership of {path}: {err.stderr.strip()}", + file=sys.stderr, + ) + + +def setup_git_config() -> None: + home = Path.home() + host_gitconfig = home / ".gitconfig" + local_gitconfig = home / ".gitconfig.local" + gitignore_global = home / ".gitignore_global" + + gitignore_global.write_text( + """# Codex +.codex/ + +# Rust +/target/ + +# Node +node_modules/ + +# Python +__pycache__/ +*.pyc + +# Editors +.vscode/ +.idea/ + +# macOS +.DS_Store +""", + encoding="utf-8", + ) + + include_line = ( + f"[include]\n path = {host_gitconfig}\n\n" if host_gitconfig.exists() else "" + ) + + local_gitconfig.write_text( + f"""# Container-local git configuration +{include_line}[core] + excludesfile = {gitignore_global} + +[merge] + conflictstyle = diff3 + +[diff] + colorMoved = default +""", + encoding="utf-8", + ) + + +def main() -> None: + print("[post_install] configuring devcontainer...", file=sys.stderr) + ensure_history_files() + fix_directory_ownership() + setup_git_config() + print("[post_install] complete", file=sys.stderr) + + +if __name__ == "__main__": + main() diff --git a/reference/openai-codex/.gitattributes b/reference/openai-codex/.gitattributes new file mode 100644 index 0000000..57c5fe6 --- /dev/null +++ b/reference/openai-codex/.gitattributes @@ -0,0 +1,2 @@ +codex-rs/app-server-protocol/schema/** linguist-generated +codex-rs/hooks/schema/generated/** linguist-generated diff --git a/reference/openai-codex/.github/CODEOWNERS b/reference/openai-codex/.github/CODEOWNERS new file mode 100644 index 0000000..322aad4 --- /dev/null +++ b/reference/openai-codex/.github/CODEOWNERS @@ -0,0 +1,6 @@ +# Core crate ownership. +/codex-rs/core/ @openai/codex-core-agent-team +/codex-rs/ext/extension-api/ @openai/codex-core-agent-team + +# Keep ownership changes reviewed by the same team. +/.github/CODEOWNERS @openai/codex-core-agent-team diff --git a/reference/openai-codex/.github/ISSUE_TEMPLATE/1-codex-app.yml b/reference/openai-codex/.github/ISSUE_TEMPLATE/1-codex-app.yml new file mode 100644 index 0000000..6e294ee --- /dev/null +++ b/reference/openai-codex/.github/ISSUE_TEMPLATE/1-codex-app.yml @@ -0,0 +1,54 @@ +name: 🖥️ Codex App Bug +description: Report an issue with the Codex App +labels: + - app +body: + - type: markdown + attributes: + value: | + Before submitting a new issue, please search for existing issues to see if your issue has already been reported. + If it has, please add a 👍 reaction (no need to leave a comment) to the existing issue instead of creating a new one. + + - type: input + id: version + attributes: + label: What version of the Codex App are you using (From “About Codex” dialog)? + validations: + required: true + - type: input + id: plan + attributes: + label: What subscription do you have? + validations: + required: true + - type: input + id: platform + attributes: + label: What platform is your computer? + description: | + For macOS and Linux: copy the output of `uname -mprs` + For Windows: copy the output of `"$([Environment]::OSVersion | ForEach-Object VersionString) $(if ([Environment]::Is64BitOperatingSystem) { "x64" } else { "x86" })"` in the PowerShell console + - type: textarea + id: actual + attributes: + label: What issue are you seeing? + description: Please include the full error messages and prompts with PII redacted. If possible, please provide text instead of a screenshot. + validations: + required: true + - type: textarea + id: steps + attributes: + label: What steps can reproduce the bug? + description: Explain the bug and provide a code snippet that can reproduce it. Please include session id, token limit usage, context window usage if applicable. + validations: + required: true + - type: textarea + id: expected + attributes: + label: What is the expected behavior? + description: If possible, please provide text instead of a screenshot. + - type: textarea + id: notes + attributes: + label: Additional information + description: Is there anything else you think we should know? diff --git a/reference/openai-codex/.github/ISSUE_TEMPLATE/2-extension.yml b/reference/openai-codex/.github/ISSUE_TEMPLATE/2-extension.yml new file mode 100644 index 0000000..599bc08 --- /dev/null +++ b/reference/openai-codex/.github/ISSUE_TEMPLATE/2-extension.yml @@ -0,0 +1,61 @@ +name: 🧑‍💻 IDE Extension Bug +description: Report an issue with the IDE extension +labels: + - extension +body: + - type: markdown + attributes: + value: | + Before submitting a new issue, please search for existing issues to see if your issue has already been reported. + If it has, please add a 👍 reaction (no need to leave a comment) to the existing issue instead of creating a new one. + + - type: input + id: version + attributes: + label: What version of the IDE extension are you using? + validations: + required: true + - type: input + id: plan + attributes: + label: What subscription do you have? + validations: + required: true + - type: input + id: ide + attributes: + label: Which IDE are you using? + description: Like `VS Code`, `Cursor`, `Windsurf`, etc. + validations: + required: true + - type: input + id: platform + attributes: + label: What platform is your computer? + description: | + For macOS and Linux: copy the output of `uname -mprs` + For Windows: copy the output of `"$([Environment]::OSVersion | ForEach-Object VersionString) $(if ([Environment]::Is64BitOperatingSystem) { "x64" } else { "x86" })"` in the PowerShell console + - type: textarea + id: actual + attributes: + label: What issue are you seeing? + description: Please include the full error messages and prompts with PII redacted. If possible, please provide text instead of a screenshot. + validations: + required: true + - type: textarea + id: steps + attributes: + label: What steps can reproduce the bug? + description: Explain the bug and provide a code snippet that can reproduce it. + validations: + required: true + - type: textarea + id: expected + attributes: + label: What is the expected behavior? + description: If possible, please provide text instead of a screenshot. + - type: textarea + id: notes + attributes: + label: Additional information + description: Is there anything else you think we should know? diff --git a/reference/openai-codex/.github/ISSUE_TEMPLATE/3-cli.yml b/reference/openai-codex/.github/ISSUE_TEMPLATE/3-cli.yml new file mode 100644 index 0000000..cfd368c --- /dev/null +++ b/reference/openai-codex/.github/ISSUE_TEMPLATE/3-cli.yml @@ -0,0 +1,81 @@ +name: 💻 CLI Bug +description: Report an issue in the Codex CLI +labels: + - bug +body: + - type: markdown + attributes: + value: | + Before submitting a new issue, please search for existing issues to see if your issue has already been reported. + If it has, please add a 👍 reaction (no need to leave a comment) to the existing issue instead of creating a new one. + + Make sure you are running the [latest](https://npmjs.com/package/@openai/codex) version of Codex CLI. The bug you are experiencing may already have been fixed. + + If your version supports it, please run `codex doctor --json` and paste the output in the "Codex doctor report" field below. This helps us diagnose install, config, auth, terminal, MCP, network, and local state issues. + + - type: input + id: version + attributes: + label: What version of Codex CLI is running? + description: use `codex --version` + validations: + required: true + - type: input + id: plan + attributes: + label: What subscription do you have? + validations: + required: true + - type: input + id: model + attributes: + label: Which model were you using? + description: Like `gpt-5.2`, `gpt-5.2-codex`, etc. + - type: input + id: platform + attributes: + label: What platform is your computer? + description: | + For macOS and Linux: copy the output of `uname -mprs` + For Windows: copy the output of `"$([Environment]::OSVersion | ForEach-Object VersionString) $(if ([Environment]::Is64BitOperatingSystem) { "x64" } else { "x86" })"` in the PowerShell console + - type: input + id: terminal + attributes: + label: What terminal emulator and version are you using (if applicable)? + description: | + Also note any multiplexer in use (screen / tmux / zellij). + E.g., VS Code, Terminal.app, iTerm2, Ghostty, Windows Terminal (WSL / PowerShell) + - type: textarea + id: doctor + attributes: + label: Codex doctor report + description: | + If available, run `codex doctor --json` and paste the full output here. + + The report is designed to redact secrets, but please review it before submitting. + If your Codex version does not support `doctor`, write `not available`. + render: json + - type: textarea + id: actual + attributes: + label: What issue are you seeing? + description: Please include the full error messages and prompts with PII redacted. If possible, please provide text instead of a screenshot. + validations: + required: true + - type: textarea + id: steps + attributes: + label: What steps can reproduce the bug? + description: Explain the bug and provide a code snippet that can reproduce it. Please include thread id if applicable. + validations: + required: true + - type: textarea + id: expected + attributes: + label: What is the expected behavior? + description: If possible, please provide text instead of a screenshot. + - type: textarea + id: notes + attributes: + label: Additional information + description: Is there anything else you think we should know? diff --git a/reference/openai-codex/.github/ISSUE_TEMPLATE/4-bug-report.yml b/reference/openai-codex/.github/ISSUE_TEMPLATE/4-bug-report.yml new file mode 100644 index 0000000..4de8841 --- /dev/null +++ b/reference/openai-codex/.github/ISSUE_TEMPLATE/4-bug-report.yml @@ -0,0 +1,37 @@ +name: 🪲 Other Bug +description: Report an issue in Codex Web, integrations, or other Codex components +labels: + - bug +body: + - type: markdown + attributes: + value: | + Before submitting a new issue, please search for existing issues to see if your issue has already been reported. + If it has, please add a 👍 reaction (no need to leave a comment) to the existing issue instead of creating a new one. + + If you need help or support using Codex and are not reporting a bug, please post on [codex/discussions](https://github.com/openai/codex/discussions), where you can ask questions or engage with others on ideas for how to improve codex. + + - type: textarea + id: actual + attributes: + label: What issue are you seeing? + description: Please include the full error messages and prompts with PII redacted. If possible, please provide text instead of a screenshot. + validations: + required: true + - type: textarea + id: steps + attributes: + label: What steps can reproduce the bug? + description: Explain the bug and provide a code snippet that can reproduce it. + validations: + required: true + - type: textarea + id: expected + attributes: + label: What is the expected behavior? + description: If possible, please provide text instead of a screenshot. + - type: textarea + id: notes + attributes: + label: Additional information + description: Is there anything else you think we should know? diff --git a/reference/openai-codex/.github/ISSUE_TEMPLATE/5-feature-request.yml b/reference/openai-codex/.github/ISSUE_TEMPLATE/5-feature-request.yml new file mode 100644 index 0000000..745c347 --- /dev/null +++ b/reference/openai-codex/.github/ISSUE_TEMPLATE/5-feature-request.yml @@ -0,0 +1,32 @@ +name: 🎁 Feature Request +description: Propose a new feature for Codex +labels: + - enhancement +body: + - type: markdown + attributes: + value: | + Is Codex missing a feature that you'd like to see? Feel free to propose it here. + + Before you submit a feature: + 1. Search existing issues for similar features. If you find one, 👍 it rather than opening a new one. + 2. The Codex team will try to balance the varying needs of the community when prioritizing or rejecting new features. Not all features will be accepted. See [Contributing](https://github.com/openai/codex/blob/main/docs/contributing.md) for more details. + + - type: input + id: variant + attributes: + label: What variant of Codex are you using? + description: (e.g., App, IDE Extension, CLI, Web) + validations: + required: true + - type: textarea + id: feature + attributes: + label: What feature would you like to see? + validations: + required: true + - type: textarea + id: notes + attributes: + label: Additional information + description: Is there anything else you think we should know? diff --git a/reference/openai-codex/.github/ISSUE_TEMPLATE/6-docs-issue.yml b/reference/openai-codex/.github/ISSUE_TEMPLATE/6-docs-issue.yml new file mode 100644 index 0000000..1957b60 --- /dev/null +++ b/reference/openai-codex/.github/ISSUE_TEMPLATE/6-docs-issue.yml @@ -0,0 +1,27 @@ +name: 📗 Documentation Issue +description: Tell us if there is missing or incorrect documentation +labels: [documentation] +body: + - type: markdown + attributes: + value: | + Thank you for submitting a documentation request. It helps make Codex better. + - type: dropdown + attributes: + label: What is the type of issue? + multiple: true + options: + - Documentation is missing + - Documentation is incorrect + - Documentation is confusing + - Example code is not working + - Something else + - type: textarea + attributes: + label: What is the issue? + validations: + required: true + - type: textarea + attributes: + label: Where did you find it? + description: If possible, please provide the URL(s) where you found this issue. diff --git a/reference/openai-codex/.github/actions/linux-code-sign/action.yml b/reference/openai-codex/.github/actions/linux-code-sign/action.yml new file mode 100644 index 0000000..f8efb82 --- /dev/null +++ b/reference/openai-codex/.github/actions/linux-code-sign/action.yml @@ -0,0 +1,49 @@ +name: linux-code-sign +description: Sign Linux artifacts with cosign. +inputs: + target: + description: Target triple for the artifacts to sign. + required: true + artifacts-dir: + description: Absolute path to the directory containing built binaries to sign. + required: true + binaries: + description: Space-delimited binary basenames to sign. + default: "codex codex-responses-api-proxy" + +runs: + using: composite + steps: + - name: Install cosign + uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da # v3.7.0 + + - name: Cosign Linux artifacts + shell: bash + env: + ARTIFACTS_DIR: ${{ inputs.artifacts-dir }} + BINARIES: ${{ inputs.binaries }} + COSIGN_EXPERIMENTAL: "1" + COSIGN_YES: "true" + COSIGN_OIDC_CLIENT_ID: "sigstore" + COSIGN_OIDC_ISSUER: "https://oauth2.sigstore.dev/auth" + run: | + set -euo pipefail + + dest="$ARTIFACTS_DIR" + if [[ ! -d "$dest" ]]; then + echo "Destination $dest does not exist" + exit 1 + fi + + for binary in ${BINARIES}; do + artifact="${dest}/${binary}" + if [[ ! -f "$artifact" ]]; then + echo "Binary $artifact not found" + exit 1 + fi + + cosign sign-blob \ + --yes \ + --bundle "${artifact}.sigstore" \ + "$artifact" + done diff --git a/reference/openai-codex/.github/actions/macos-code-sign/action.yml b/reference/openai-codex/.github/actions/macos-code-sign/action.yml new file mode 100644 index 0000000..0e19fa1 --- /dev/null +++ b/reference/openai-codex/.github/actions/macos-code-sign/action.yml @@ -0,0 +1,259 @@ +name: macos-code-sign +description: Configure, sign, notarize, and clean up macOS code signing artifacts. +inputs: + target: + description: Rust compilation target triple (e.g. aarch64-apple-darwin). + required: true + binaries: + description: Space-delimited binary basenames to sign and notarize. + default: "codex codex-responses-api-proxy" + sign-binaries: + description: Whether to sign and notarize the macOS binaries. + required: false + default: "true" + sign-dmg: + description: Whether to sign and notarize the macOS dmg. + required: false + default: "true" + apple-certificate: + description: Base64-encoded Apple signing certificate (P12). + required: true + apple-certificate-password: + description: Password for the signing certificate. + required: true + apple-notarization-key-p8: + description: Base64-encoded Apple notarization key (P8). + required: true + apple-notarization-key-id: + description: Apple notarization key ID. + required: true + apple-notarization-issuer-id: + description: Apple notarization issuer ID. + required: true +runs: + using: composite + steps: + - name: Configure Apple code signing + shell: bash + env: + KEYCHAIN_PASSWORD: actions + APPLE_CERTIFICATE: ${{ inputs.apple-certificate }} + APPLE_CERTIFICATE_PASSWORD: ${{ inputs.apple-certificate-password }} + run: | + set -euo pipefail + + if [[ -z "${APPLE_CERTIFICATE:-}" ]]; then + echo "APPLE_CERTIFICATE is required for macOS signing" + exit 1 + fi + + if [[ -z "${APPLE_CERTIFICATE_PASSWORD:-}" ]]; then + echo "APPLE_CERTIFICATE_PASSWORD is required for macOS signing" + exit 1 + fi + + cert_path="${RUNNER_TEMP}/apple_signing_certificate.p12" + echo "$APPLE_CERTIFICATE" | base64 -d > "$cert_path" + + keychain_path="${RUNNER_TEMP}/codex-signing.keychain-db" + security create-keychain -p "$KEYCHAIN_PASSWORD" "$keychain_path" + security set-keychain-settings -lut 21600 "$keychain_path" + security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$keychain_path" + + keychain_args=() + cleanup_keychain() { + if ((${#keychain_args[@]} > 0)); then + security list-keychains -s "${keychain_args[@]}" || true + security default-keychain -s "${keychain_args[0]}" || true + else + security list-keychains -s || true + fi + if [[ -f "$keychain_path" ]]; then + security delete-keychain "$keychain_path" || true + fi + } + + while IFS= read -r keychain; do + [[ -n "$keychain" ]] && keychain_args+=("$keychain") + done < <(security list-keychains | sed 's/^[[:space:]]*//;s/[[:space:]]*$//;s/"//g') + + if ((${#keychain_args[@]} > 0)); then + security list-keychains -s "$keychain_path" "${keychain_args[@]}" + else + security list-keychains -s "$keychain_path" + fi + + security default-keychain -s "$keychain_path" + security import "$cert_path" -k "$keychain_path" -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign -T /usr/bin/security + security set-key-partition-list -S apple-tool:,apple: -s -k "$KEYCHAIN_PASSWORD" "$keychain_path" > /dev/null + + codesign_hashes=() + while IFS= read -r hash; do + [[ -n "$hash" ]] && codesign_hashes+=("$hash") + done < <(security find-identity -v -p codesigning "$keychain_path" \ + | sed -n 's/.*\([0-9A-F]\{40\}\).*/\1/p' \ + | sort -u) + + if ((${#codesign_hashes[@]} == 0)); then + echo "No signing identities found in $keychain_path" + cleanup_keychain + rm -f "$cert_path" + exit 1 + fi + + if ((${#codesign_hashes[@]} > 1)); then + echo "Multiple signing identities found in $keychain_path:" + printf ' %s\n' "${codesign_hashes[@]}" + cleanup_keychain + rm -f "$cert_path" + exit 1 + fi + + APPLE_CODESIGN_IDENTITY="${codesign_hashes[0]}" + + rm -f "$cert_path" + + echo "APPLE_CODESIGN_IDENTITY=$APPLE_CODESIGN_IDENTITY" >> "$GITHUB_ENV" + echo "APPLE_CODESIGN_KEYCHAIN=$keychain_path" >> "$GITHUB_ENV" + echo "::add-mask::$APPLE_CODESIGN_IDENTITY" + + - name: Sign macOS binaries + if: ${{ inputs.sign-binaries == 'true' }} + shell: bash + env: + TARGET: ${{ inputs.target }} + BINARIES: ${{ inputs.binaries }} + run: | + set -euo pipefail + + if [[ -z "${APPLE_CODESIGN_IDENTITY:-}" ]]; then + echo "APPLE_CODESIGN_IDENTITY is required for macOS signing" + exit 1 + fi + + keychain_args=() + if [[ -n "${APPLE_CODESIGN_KEYCHAIN:-}" && -f "${APPLE_CODESIGN_KEYCHAIN}" ]]; then + keychain_args+=(--keychain "${APPLE_CODESIGN_KEYCHAIN}") + fi + + entitlements_path="$GITHUB_ACTION_PATH/codex.entitlements.plist" + + for binary in ${BINARIES}; do + path="codex-rs/target/${TARGET}/release/${binary}" + codesign --force --options runtime --timestamp --entitlements "$entitlements_path" --sign "$APPLE_CODESIGN_IDENTITY" "${keychain_args[@]}" "$path" + done + + - name: Notarize macOS binaries + if: ${{ inputs.sign-binaries == 'true' }} + shell: bash + env: + TARGET: ${{ inputs.target }} + BINARIES: ${{ inputs.binaries }} + APPLE_NOTARIZATION_KEY_P8: ${{ inputs.apple-notarization-key-p8 }} + APPLE_NOTARIZATION_KEY_ID: ${{ inputs.apple-notarization-key-id }} + APPLE_NOTARIZATION_ISSUER_ID: ${{ inputs.apple-notarization-issuer-id }} + run: | + set -euo pipefail + + for var in APPLE_NOTARIZATION_KEY_P8 APPLE_NOTARIZATION_KEY_ID APPLE_NOTARIZATION_ISSUER_ID; do + if [[ -z "${!var:-}" ]]; then + echo "$var is required for notarization" + exit 1 + fi + done + + notary_key_path="${RUNNER_TEMP}/notarytool.key.p8" + echo "$APPLE_NOTARIZATION_KEY_P8" | base64 -d > "$notary_key_path" + cleanup_notary() { + rm -f "$notary_key_path" + } + trap cleanup_notary EXIT + + source "$GITHUB_ACTION_PATH/notary_helpers.sh" + + notarize_binary() { + local binary="$1" + local source_path="codex-rs/target/${TARGET}/release/${binary}" + local archive_path="${RUNNER_TEMP}/${binary}.zip" + + if [[ ! -f "$source_path" ]]; then + echo "Binary $source_path not found" + exit 1 + fi + + rm -f "$archive_path" + ditto -c -k --keepParent "$source_path" "$archive_path" + + notarize_submission "$binary" "$archive_path" "$notary_key_path" + } + + for binary in ${BINARIES}; do + notarize_binary "${binary}" + done + + - name: Sign and notarize macOS dmg + if: ${{ inputs.sign-dmg == 'true' }} + shell: bash + env: + TARGET: ${{ inputs.target }} + APPLE_NOTARIZATION_KEY_P8: ${{ inputs.apple-notarization-key-p8 }} + APPLE_NOTARIZATION_KEY_ID: ${{ inputs.apple-notarization-key-id }} + APPLE_NOTARIZATION_ISSUER_ID: ${{ inputs.apple-notarization-issuer-id }} + run: | + set -euo pipefail + + for var in APPLE_CODESIGN_IDENTITY APPLE_NOTARIZATION_KEY_P8 APPLE_NOTARIZATION_KEY_ID APPLE_NOTARIZATION_ISSUER_ID; do + if [[ -z "${!var:-}" ]]; then + echo "$var is required" + exit 1 + fi + done + + notary_key_path="${RUNNER_TEMP}/notarytool.key.p8" + echo "$APPLE_NOTARIZATION_KEY_P8" | base64 -d > "$notary_key_path" + cleanup_notary() { + rm -f "$notary_key_path" + } + trap cleanup_notary EXIT + + source "$GITHUB_ACTION_PATH/notary_helpers.sh" + + dmg_name="codex-${TARGET}.dmg" + dmg_path="codex-rs/target/${TARGET}/release/${dmg_name}" + + if [[ ! -f "$dmg_path" ]]; then + echo "dmg $dmg_path not found" + exit 1 + fi + + keychain_args=() + if [[ -n "${APPLE_CODESIGN_KEYCHAIN:-}" && -f "${APPLE_CODESIGN_KEYCHAIN}" ]]; then + keychain_args+=(--keychain "${APPLE_CODESIGN_KEYCHAIN}") + fi + + codesign --force --timestamp --sign "$APPLE_CODESIGN_IDENTITY" "${keychain_args[@]}" "$dmg_path" + notarize_submission "$dmg_name" "$dmg_path" "$notary_key_path" + xcrun stapler staple "$dmg_path" + + - name: Remove signing keychain + if: ${{ always() }} + shell: bash + env: + APPLE_CODESIGN_KEYCHAIN: ${{ env.APPLE_CODESIGN_KEYCHAIN }} + run: | + set -euo pipefail + if [[ -n "${APPLE_CODESIGN_KEYCHAIN:-}" ]]; then + keychain_args=() + while IFS= read -r keychain; do + [[ "$keychain" == "$APPLE_CODESIGN_KEYCHAIN" ]] && continue + [[ -n "$keychain" ]] && keychain_args+=("$keychain") + done < <(security list-keychains | sed 's/^[[:space:]]*//;s/[[:space:]]*$//;s/"//g') + if ((${#keychain_args[@]} > 0)); then + security list-keychains -s "${keychain_args[@]}" + security default-keychain -s "${keychain_args[0]}" + fi + + if [[ -f "$APPLE_CODESIGN_KEYCHAIN" ]]; then + security delete-keychain "$APPLE_CODESIGN_KEYCHAIN" + fi + fi diff --git a/reference/openai-codex/.github/actions/macos-code-sign/codex.entitlements.plist b/reference/openai-codex/.github/actions/macos-code-sign/codex.entitlements.plist new file mode 100644 index 0000000..d35e43a --- /dev/null +++ b/reference/openai-codex/.github/actions/macos-code-sign/codex.entitlements.plist @@ -0,0 +1,8 @@ + + + + + com.apple.security.cs.allow-jit + + + diff --git a/reference/openai-codex/.github/actions/macos-code-sign/notary_helpers.sh b/reference/openai-codex/.github/actions/macos-code-sign/notary_helpers.sh new file mode 100644 index 0000000..ad9757f --- /dev/null +++ b/reference/openai-codex/.github/actions/macos-code-sign/notary_helpers.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +notarize_submission() { + local label="$1" + local path="$2" + local notary_key_path="$3" + + if [[ -z "${APPLE_NOTARIZATION_KEY_ID:-}" || -z "${APPLE_NOTARIZATION_ISSUER_ID:-}" ]]; then + echo "APPLE_NOTARIZATION_KEY_ID and APPLE_NOTARIZATION_ISSUER_ID are required for notarization" + exit 1 + fi + + if [[ -z "$notary_key_path" || ! -f "$notary_key_path" ]]; then + echo "Notary key file $notary_key_path not found" + exit 1 + fi + + if [[ ! -f "$path" ]]; then + echo "Notarization payload $path not found" + exit 1 + fi + + local submission_json + submission_json=$(xcrun notarytool submit "$path" \ + --key "$notary_key_path" \ + --key-id "$APPLE_NOTARIZATION_KEY_ID" \ + --issuer "$APPLE_NOTARIZATION_ISSUER_ID" \ + --output-format json \ + --wait) + + local status submission_id + status=$(printf '%s\n' "$submission_json" | jq -r '.status // "Unknown"') + submission_id=$(printf '%s\n' "$submission_json" | jq -r '.id // ""') + + if [[ -z "$submission_id" ]]; then + echo "Failed to retrieve submission ID for $label" + exit 1 + fi + + echo "::notice title=Notarization::$label submission ${submission_id} completed with status ${status}" + + if [[ "$status" != "Accepted" ]]; then + echo "Notarization failed for ${label} (submission ${submission_id}, status ${status})" + exit 1 + fi +} diff --git a/reference/openai-codex/.github/actions/prepare-bazel-ci/action.yml b/reference/openai-codex/.github/actions/prepare-bazel-ci/action.yml new file mode 100644 index 0000000..b41d80e --- /dev/null +++ b/reference/openai-codex/.github/actions/prepare-bazel-ci/action.yml @@ -0,0 +1,64 @@ +name: prepare-bazel-ci +description: Prepare a Bazel CI job with shared setup, repository cache restore, and execution logs. +inputs: + target: + description: Target triple used for setup and cache namespacing. + required: true + cache-scope: + description: Logical namespace used to keep concurrent Bazel jobs from reserving the same repository cache key. + required: true + install-test-prereqs: + description: Install DotSlash for Bazel-backed test jobs. + required: false + default: "false" +outputs: + repository-cache-path: + description: Filesystem path used for the Bazel repository cache. + value: ${{ steps.setup_bazel.outputs.repository-cache-path }} + repository-cache-key: + description: Primary actions/cache key for the Bazel repository cache. + value: ${{ steps.cache_bazel_repository_key.outputs.repository-cache-key }} + repository-cache-hit: + description: Whether the Bazel repository cache restore found an exact key match. + value: ${{ steps.cache_bazel_repository_restore.outputs.cache-hit }} + +runs: + using: composite + steps: + - name: Set up Bazel CI + id: setup_bazel + uses: ./.github/actions/setup-bazel-ci + with: + target: ${{ inputs.target }} + install-test-prereqs: ${{ inputs.install-test-prereqs }} + + - name: Compute bazel repository cache key + id: cache_bazel_repository_key + shell: bash + env: + CACHE_SCOPE: ${{ inputs.cache-scope }} + TARGET: ${{ inputs.target }} + CACHE_HASH: ${{ hashFiles('MODULE.bazel', 'codex-rs/Cargo.lock', 'codex-rs/Cargo.toml') }} + run: | + echo "repository-cache-key=bazel-cache-${CACHE_SCOPE}-${TARGET}-${CACHE_HASH}" >> "${GITHUB_OUTPUT}" + echo "repository-cache-restore-key=bazel-cache-${CACHE_SCOPE}-${TARGET}-" >> "${GITHUB_OUTPUT}" + + # Restore the Bazel repository cache explicitly so external dependencies + # do not need to be re-downloaded on every CI run. Keep restore failures + # non-fatal so transient cache-service errors degrade to a cold build + # instead of failing the job. + - name: Restore bazel repository cache + id: cache_bazel_repository_restore + continue-on-error: true + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: ${{ steps.setup_bazel.outputs.repository-cache-path }} + key: ${{ steps.cache_bazel_repository_key.outputs.repository-cache-key }} + restore-keys: | + ${{ steps.cache_bazel_repository_key.outputs.repository-cache-restore-key }} + + - name: Set up Bazel execution logs + shell: bash + run: | + mkdir -p "${RUNNER_TEMP}/bazel-execution-logs" + echo "CODEX_BAZEL_EXECUTION_LOG_COMPACT_DIR=${RUNNER_TEMP}/bazel-execution-logs" >> "${GITHUB_ENV}" diff --git a/reference/openai-codex/.github/actions/run-argument-comment-lint/action.yml b/reference/openai-codex/.github/actions/run-argument-comment-lint/action.yml new file mode 100644 index 0000000..80fb23d --- /dev/null +++ b/reference/openai-codex/.github/actions/run-argument-comment-lint/action.yml @@ -0,0 +1,54 @@ +name: Run argument comment lint +description: Run argument-comment-lint on codex-rs via Bazel. + +inputs: + target: + description: Runner target passed to setup-bazel-ci. + required: true + buildbuddy-api-key: + description: BuildBuddy API key used by Bazel CI. + required: false + default: "" + +runs: + using: composite + steps: + - uses: ./.github/actions/setup-bazel-ci + with: + target: ${{ inputs.target }} + install-test-prereqs: true + + - name: Install Linux sandbox build dependencies + if: ${{ runner.os == 'Linux' }} + shell: bash + run: | + sudo DEBIAN_FRONTEND=noninteractive apt-get update + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends pkg-config libcap-dev + + - name: Run argument comment lint on codex-rs via Bazel + if: ${{ runner.os != 'Windows' }} + env: + BUILDBUDDY_API_KEY: ${{ inputs.buildbuddy-api-key }} + shell: bash + run: | + bazel_targets="$(./tools/argument-comment-lint/list-bazel-targets.sh)" + ./.github/scripts/run-bazel-ci.sh \ + -- \ + build \ + --config=argument-comment-lint \ + --keep_going \ + --build_metadata=COMMIT_SHA=${GITHUB_SHA} \ + -- \ + ${bazel_targets} + + - name: Run argument comment lint on codex-rs via Bazel + if: ${{ runner.os == 'Windows' }} + env: + BUILDBUDDY_API_KEY: ${{ inputs.buildbuddy-api-key }} + shell: bash + run: | + ./.github/scripts/run-argument-comment-lint-bazel.sh \ + --config=argument-comment-lint \ + --platforms=//:local_windows \ + --keep_going \ + --build_metadata=COMMIT_SHA=${GITHUB_SHA} diff --git a/reference/openai-codex/.github/actions/setup-bazel-ci/action.yml b/reference/openai-codex/.github/actions/setup-bazel-ci/action.yml new file mode 100644 index 0000000..bb757aa --- /dev/null +++ b/reference/openai-codex/.github/actions/setup-bazel-ci/action.yml @@ -0,0 +1,127 @@ +name: setup-bazel-ci +description: Prepare a Bazel CI runner with shared caches and optional test prerequisites. +inputs: + target: + description: Target triple used for cache namespacing. + required: true + install-test-prereqs: + description: Install DotSlash for Bazel-backed test jobs. + required: false + default: "false" +outputs: + repository-cache-path: + description: Filesystem path used for the Bazel repository cache. + value: ${{ steps.configure_bazel_repository_cache.outputs.repository-cache-path }} + +runs: + using: composite + steps: + # Some integration tests rely on DotSlash being installed. + # See https://github.com/openai/codex/pull/7617. + - name: Install DotSlash + if: inputs.install-test-prereqs == 'true' + uses: facebook/install-dotslash@1e4e7b3e07eaca387acb98f1d4720e0bee8dbb6a # v2 + + - name: Make DotSlash available in PATH (Unix) + if: inputs.install-test-prereqs == 'true' && runner.os != 'Windows' + shell: bash + run: cp "$(which dotslash)" /usr/local/bin + + - name: Make DotSlash available in PATH (Windows) + if: inputs.install-test-prereqs == 'true' && runner.os == 'Windows' + shell: pwsh + run: Copy-Item (Get-Command dotslash).Source -Destination "$env:LOCALAPPDATA\Microsoft\WindowsApps\dotslash.exe" + + - name: Set up Bazel + uses: bazel-contrib/setup-bazel@c5acdfb288317d0b5c0bbd7a396a3dc868bb0f86 # 0.19.0 + + - name: Configure Bazel repository cache + id: configure_bazel_repository_cache + shell: pwsh + run: | + # Keep the repository cache under HOME on all runners. Windows `D:\a` + # cache paths match `.bazelrc`, but `actions/cache/restore` currently + # returns HTTP 400 for that path in the Windows clippy job. + $repositoryCachePath = Join-Path $HOME '.cache/bazel-repo-cache' + "repository-cache-path=$repositoryCachePath" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append + "BAZEL_REPOSITORY_CACHE=$repositoryCachePath" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + + - name: Configure Bazel output root (Windows) + if: runner.os == 'Windows' + shell: pwsh + run: | + # Use the shortest available drive to reduce argv/path length issues, + # but avoid the drive root because some Windows test launchers mis-handle + # MANIFEST paths there. + $hasDDrive = Test-Path 'D:\' + $bazelOutputUserRoot = if ($hasDDrive) { 'D:\b' } else { 'C:\b' } + $repoContentsCache = Join-Path $env:RUNNER_TEMP "bazel-repo-contents-cache-$env:GITHUB_RUN_ID-$env:GITHUB_JOB" + "BAZEL_OUTPUT_USER_ROOT=$bazelOutputUserRoot" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + "BAZEL_REPO_CONTENTS_CACHE=$repoContentsCache" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + + - name: Expose MSVC SDK environment (Windows) + if: runner.os == 'Windows' + shell: pwsh + run: | + # Bazel exec-side Rust build scripts do not reliably inherit the MSVC developer + # shell on GitHub-hosted Windows runners, so discover the latest VS install and + # ask `VsDevCmd.bat` to materialize the x64/x64 compiler + SDK environment. + $vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" + if (-not (Test-Path $vswhere)) { + throw "vswhere.exe not found" + } + + $installPath = & $vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath 2>$null + if (-not $installPath) { + throw "Could not locate a Visual Studio installation with VC tools" + } + + $vsDevCmd = Join-Path $installPath 'Common7\Tools\VsDevCmd.bat' + if (-not (Test-Path $vsDevCmd)) { + throw "VsDevCmd.bat not found at $vsDevCmd" + } + + # Keep the export surface explicit: these are the paths and SDK roots that the + # MSVC toolchain probes need later when Bazel runs Windows exec-platform build + # scripts such as `aws-lc-sys`. + $varsToExport = @( + 'INCLUDE', + 'LIB', + 'LIBPATH', + 'PATH', + 'UCRTVersion', + 'UniversalCRTSdkDir', + 'VCINSTALLDIR', + 'VCToolsInstallDir', + 'WindowsLibPath', + 'WindowsSdkBinPath', + 'WindowsSdkDir', + 'WindowsSDKLibVersion', + 'WindowsSDKVersion' + ) + + # `VsDevCmd.bat` is a batch file, so invoke it under `cmd.exe`, suppress its + # banner, then dump the resulting environment with `set`. Re-export only the + # approved keys into `GITHUB_ENV` so later steps inherit the same MSVC context. + $envLines = & cmd.exe /c ('"{0}" -no_logo -arch=x64 -host_arch=x64 >nul && set' -f $vsDevCmd) + foreach ($line in $envLines) { + if ($line -notmatch '^(.*?)=(.*)$') { + continue + } + + $name = $matches[1] + $value = $matches[2] + if ($varsToExport -contains $name) { + "$name=$value" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + } + } + + - name: Compute cache-stable Windows Bazel PATH + if: runner.os == 'Windows' + shell: pwsh + run: ./.github/scripts/compute-bazel-windows-path.ps1 + + - name: Enable Git long paths (Windows) + if: runner.os == 'Windows' + shell: pwsh + run: git config --global core.longpaths true diff --git a/reference/openai-codex/.github/actions/setup-msvc-env/action.yml b/reference/openai-codex/.github/actions/setup-msvc-env/action.yml new file mode 100644 index 0000000..287cb7f --- /dev/null +++ b/reference/openai-codex/.github/actions/setup-msvc-env/action.yml @@ -0,0 +1,17 @@ +name: setup-msvc-env +description: Expose an MSVC developer environment for the requested Windows target. +inputs: + target: + description: Rust target triple that will be built on this Windows runner. + required: true + host-arch: + description: Optional Visual Studio host architecture override. + required: false + default: "" + +runs: + using: composite + steps: + - name: Expose MSVC SDK environment + shell: pwsh + run: '& "$env:GITHUB_ACTION_PATH/setup-msvc-env.ps1" -Target "${{ inputs.target }}" -HostArch "${{ inputs.host-arch }}"' diff --git a/reference/openai-codex/.github/actions/setup-msvc-env/setup-msvc-env.ps1 b/reference/openai-codex/.github/actions/setup-msvc-env/setup-msvc-env.ps1 new file mode 100644 index 0000000..e2706d9 --- /dev/null +++ b/reference/openai-codex/.github/actions/setup-msvc-env/setup-msvc-env.ps1 @@ -0,0 +1,257 @@ +param( + [Parameter(Mandatory = $true)] + [string]$Target, + + [string]$HostArch = "" +) + +# Cargo can cross-compile the Rust code for Windows ARM64 on a Windows x64 +# runner, but rustup alone does not expose the matching MSVC/UCRT include and +# library paths. Ask Visual Studio for the target-specific developer +# environment, then persist the relevant variables through GITHUB_ENV so the +# later Cargo step sees the same environment as a normal VsDevCmd shell. +switch ($Target) { + "x86_64-pc-windows-msvc" { + $TargetArch = "x64" + $RequiredComponent = "Microsoft.VisualStudio.Component.VC.Tools.x86.x64" + } + "aarch64-pc-windows-msvc" { + $TargetArch = "arm64" + $RequiredComponent = "Microsoft.VisualStudio.Component.VC.Tools.ARM64" + } + default { + throw "Unsupported Windows MSVC target: $Target" + } +} + +# VsDevCmd needs both sides of the cross compile: the architecture of the +# machine running the tools and the architecture of the binaries being linked. +# Infer the host from the runner unless a caller needs to override it. +if (-not $HostArch) { + $HostArch = if ($env:PROCESSOR_ARCHITEW6432 -eq "ARM64" -or $env:PROCESSOR_ARCHITECTURE -eq "ARM64") { + "arm64" + } else { + "x64" + } +} + +$VsWhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" +if (-not (Test-Path $VsWhere)) { + throw "vswhere.exe not found" +} + +# Require the target VC tools component, not merely any Visual Studio install, +# so an x64 archive producer cannot silently link ARM64 tests with the wrong +# SDK/toolchain layout. +$InstallPath = & $VsWhere -latest -products * -requires $RequiredComponent -property installationPath 2>$null +if (-not $InstallPath) { + throw "Could not locate a Visual Studio installation with component $RequiredComponent" +} + +$VsDevCmd = Join-Path $InstallPath "Common7\Tools\VsDevCmd.bat" +if (-not (Test-Path $VsDevCmd)) { + throw "VsDevCmd.bat not found at $VsDevCmd" +} + +$VarsToExport = @( + "INCLUDE", + "LIB", + "LIBPATH", + "PATH", + "UCRTVersion", + "UniversalCRTSdkDir", + "VCINSTALLDIR", + "VCToolsInstallDir", + "WindowsLibPath", + "WindowsSdkBinPath", + "WindowsSdkDir", + "WindowsSDKLibVersion", + "WindowsSDKVersion" +) + +# Run VsDevCmd inside cmd.exe because it is a batch file, then copy just the +# variables Cargo/rustc need into the GitHub Actions environment file. PowerShell +# cannot mutate the parent composite-action environment directly. +$EnvLines = & cmd.exe /c ('"{0}" -no_logo -arch={1} -host_arch={2} >nul && set' -f $VsDevCmd, $TargetArch, $HostArch) +$VcToolsInstallDir = $null +foreach ($Line in $EnvLines) { + if ($Line -notmatch "^(.*?)=(.*)$") { + continue + } + + $Name = $Matches[1] + $Value = $Matches[2] + if ($VarsToExport -contains $Name) { + if ($Name -ieq "Path") { + $Name = "PATH" + } + if ($Name -eq "VCToolsInstallDir") { + $VcToolsInstallDir = $Value + } + "$Name=$Value" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + } +} + +if (-not $VcToolsInstallDir) { + throw "VCToolsInstallDir was not exported by VsDevCmd.bat" +} + +# Prefer Rust's bundled linker when rustup provides one, then Visual Studio's +# LLVM linker, and finally MSVC link.exe. This keeps the cross-compile path close +# to Rust's normal Windows MSVC behavior while still working on runner images +# where one of those linkers is absent. +$Linker = $null +$Rustc = Get-Command rustc -ErrorAction SilentlyContinue +if ($Rustc) { + $Sysroot = (& rustc --print sysroot 2>$null).Trim() + $RustHost = & rustc -vV 2>$null | Select-String "^host: " | ForEach-Object { $_.Line.Substring(6) } + if ($RustHost) { + $RustHost = $RustHost.Trim() + } + if ($Sysroot -and $RustHost) { + $RustLld = Join-Path $Sysroot "lib\rustlib\$RustHost\bin\rust-lld.exe" + if (Test-Path $RustLld) { + $Linker = $RustLld + } + } +} +if (-not $Linker) { + $Linker = Join-Path $InstallPath "VC\Tools\Llvm\x64\bin\lld-link.exe" +} +if (-not (Test-Path $Linker)) { + $Linker = Join-Path $VcToolsInstallDir "bin\Host${HostArch}\${TargetArch}\link.exe" +} +if (-not (Test-Path $Linker)) { + throw "Windows linker not found at $Linker" +} + +# rustc passes `/arm64hazardfree` for ARM64 MSVC links. The lld variants on our +# Windows x64 archive producers reject that flag, including when rustc places it +# inside a response file. Compile a tiny forwarding wrapper that strips only +# that unsupported flag, then delegate every other argument to the real linker. +if ($TargetArch -eq "arm64" -and (Split-Path -Leaf $Linker) -match "lld") { + $WrapperDir = Join-Path $env:RUNNER_TEMP "msvc-lld-wrapper" + New-Item -Path $WrapperDir -ItemType Directory -Force | Out-Null + $WrapperPath = Join-Path $WrapperDir "lld-link-wrapper.exe" + $WrapperSource = @' +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; + +internal static class Program +{ + private static int Main(string[] args) + { + var linker = Environment.GetEnvironmentVariable("MSVC_REAL_LINKER"); + if (string.IsNullOrEmpty(linker)) + { + Console.Error.WriteLine("MSVC_REAL_LINKER is not set"); + return 1; + } + + var startInfo = new ProcessStartInfo(linker) + { + UseShellExecute = false, + }; + var filteredArgs = new List { "-flavor", "link", "/defaultlib:ucrt", "/nodefaultlib:libucrt" }; + foreach (var arg in args) + { + if (!string.Equals(arg, "/arm64hazardfree", StringComparison.OrdinalIgnoreCase)) + { + filteredArgs.Add(QuoteArgument(FilterResponseFile(arg))); + } + } + startInfo.Arguments = string.Join(" ", filteredArgs); + + using var process = Process.Start(startInfo); + if (process is null) + { + Console.Error.WriteLine($"Failed to start linker: {linker}"); + return 1; + } + + process.WaitForExit(); + return process.ExitCode; + } + + private static string FilterResponseFile(string argument) + { + if (argument.Length < 2 || argument[0] != '@') + { + return argument; + } + + var responsePath = argument.Substring(1); + if (!File.Exists(responsePath)) + { + return argument; + } + + var filteredResponsePath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + ".rsp"); + var responseContents = Regex.Replace( + File.ReadAllText(responsePath), + "/arm64hazardfree", + string.Empty, + RegexOptions.IgnoreCase); + File.WriteAllText(filteredResponsePath, responseContents); + return "@" + filteredResponsePath; + } + + private static string QuoteArgument(string argument) + { + if (argument.Length == 0) + { + return "\"\""; + } + if (argument.IndexOfAny(new[] { ' ', '\t', '"' }) < 0) + { + return argument; + } + + var quoted = new StringBuilder("\""); + var backslashes = 0; + foreach (var character in argument) + { + if (character == '\\') + { + backslashes++; + continue; + } + if (character == '"') + { + quoted.Append('\\', (backslashes * 2) + 1); + quoted.Append(character); + backslashes = 0; + continue; + } + + quoted.Append('\\', backslashes); + backslashes = 0; + quoted.Append(character); + } + quoted.Append('\\', backslashes * 2); + quoted.Append('"'); + return quoted.ToString(); + } +} +'@ + $WrapperSourcePath = Join-Path $WrapperDir "lld-link-wrapper.cs" + $WrapperSource | Out-File -FilePath $WrapperSourcePath -Encoding utf8 + $Csc = Join-Path $InstallPath "MSBuild\Current\Bin\Roslyn\csc.exe" + if (-not (Test-Path $Csc)) { + throw "csc.exe not found at $Csc" + } + & $Csc /nologo /target:exe /out:$WrapperPath $WrapperSourcePath + if ($LASTEXITCODE -ne 0) { + throw "Failed to compile lld-link wrapper" + } + "MSVC_REAL_LINKER=$Linker" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + $Linker = $WrapperPath +} + +Write-Output "Using Windows linker: $Linker" +$CargoTarget = $Target.ToUpperInvariant().Replace("-", "_") +"CARGO_TARGET_${CargoTarget}_LINKER=$Linker" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append diff --git a/reference/openai-codex/.github/actions/setup-rusty-v8/action.yml b/reference/openai-codex/.github/actions/setup-rusty-v8/action.yml new file mode 100644 index 0000000..d9c4484 --- /dev/null +++ b/reference/openai-codex/.github/actions/setup-rusty-v8/action.yml @@ -0,0 +1,42 @@ +name: setup-rusty-v8 +description: Download and verify Codex-built rusty_v8 artifacts for Cargo builds. +inputs: + target: + description: Rust target triple with Codex-built V8 release artifacts. + required: true + +runs: + using: composite + steps: + - name: Configure rusty_v8 artifact overrides and verify checksums + shell: bash + env: + TARGET: ${{ inputs.target }} + run: | + set -euo pipefail + + version="$(python3 "${GITHUB_WORKSPACE}/.github/scripts/rusty_v8_bazel.py" resolved-v8-crate-version)" + release_tag="rusty-v8-v${version}" + base_url="https://github.com/openai/codex/releases/download/${release_tag}" + binding_dir="${RUNNER_TEMP}/rusty_v8" + archive_path="${binding_dir}/librusty_v8_release_${TARGET}.a.gz" + binding_path="${binding_dir}/src_binding_release_${TARGET}.rs" + checksums_path="${binding_dir}/rusty_v8_release_${TARGET}.sha256" + + mkdir -p "${binding_dir}" + curl -fsSL "${base_url}/librusty_v8_release_${TARGET}.a.gz" -o "${archive_path}" + curl -fsSL "${base_url}/src_binding_release_${TARGET}.rs" -o "${binding_path}" + curl -fsSL "${base_url}/rusty_v8_release_${TARGET}.sha256" -o "${checksums_path}" + + if [[ "$(wc -l < "${checksums_path}")" -ne 2 ]]; then + echo "Expected exactly two checksums for ${TARGET} in ${checksums_path}" >&2 + exit 1 + fi + + if command -v sha256sum >/dev/null 2>&1; then + (cd "${binding_dir}" && sha256sum -c "${checksums_path}") + else + (cd "${binding_dir}" && shasum -a 256 -c "${checksums_path}") + fi + echo "RUSTY_V8_ARCHIVE=${archive_path}" >> "${GITHUB_ENV}" + echo "RUSTY_V8_SRC_BINDING_PATH=${binding_path}" >> "${GITHUB_ENV}" diff --git a/reference/openai-codex/.github/actions/windows-code-sign/action.yml b/reference/openai-codex/.github/actions/windows-code-sign/action.yml new file mode 100644 index 0000000..634d647 --- /dev/null +++ b/reference/openai-codex/.github/actions/windows-code-sign/action.yml @@ -0,0 +1,73 @@ +name: windows-code-sign +description: Sign Windows binaries with Azure Trusted Signing. +inputs: + target: + description: Target triple for the artifacts to sign. + required: true + binaries: + description: Space-delimited binary basenames to sign. + default: "codex codex-responses-api-proxy codex-windows-sandbox-setup codex-command-runner" + client-id: + description: Azure Trusted Signing client ID. + required: true + tenant-id: + description: Azure tenant ID for Trusted Signing. + required: true + subscription-id: + description: Azure subscription ID for Trusted Signing. + required: true + endpoint: + description: Azure Trusted Signing endpoint. + required: true + account-name: + description: Azure Trusted Signing account name. + required: true + certificate-profile-name: + description: Certificate profile name for signing. + required: true + +runs: + using: composite + steps: + - name: Azure login for Trusted Signing (OIDC) + uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0 + with: + client-id: ${{ inputs.client-id }} + tenant-id: ${{ inputs.tenant-id }} + subscription-id: ${{ inputs.subscription-id }} + + - name: Prepare file list + id: prepare + shell: bash + env: + TARGET: ${{ inputs.target }} + BINARIES: ${{ inputs.binaries }} + run: | + set -euo pipefail + + { + echo "files<> "$GITHUB_OUTPUT" + + - name: Sign Windows binaries with Azure Trusted Signing + uses: azure/trusted-signing-action@1d365fec12862c4aa68fcac418143d73f0cea293 # v0.5.11 + with: + endpoint: ${{ inputs.endpoint }} + trusted-signing-account-name: ${{ inputs.account-name }} + certificate-profile-name: ${{ inputs.certificate-profile-name }} + exclude-environment-credential: true + exclude-workload-identity-credential: true + exclude-managed-identity-credential: true + exclude-shared-token-cache-credential: true + exclude-visual-studio-credential: true + exclude-visual-studio-code-credential: true + exclude-azure-cli-credential: false + exclude-azure-powershell-credential: true + exclude-azure-developer-cli-credential: true + exclude-interactive-browser-credential: true + cache-dependencies: false + files: ${{ steps.prepare.outputs.files }} diff --git a/reference/openai-codex/.github/blob-size-allowlist.txt b/reference/openai-codex/.github/blob-size-allowlist.txt new file mode 100644 index 0000000..9375b49 --- /dev/null +++ b/reference/openai-codex/.github/blob-size-allowlist.txt @@ -0,0 +1,10 @@ +# Paths are matched exactly, relative to the repository root. +# Keep this list short and limited to intentional large checked-in assets. + +.github/codex-cli-splash.png +MODULE.bazel.lock +codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json +codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json +codex-rs/tui/tests/fixtures/oss-story.jsonl +codex-rs/tui_app_server/tests/fixtures/oss-story.jsonl +codex-rs/tui/src/app.rs diff --git a/reference/openai-codex/.github/codex-cli-splash.png b/reference/openai-codex/.github/codex-cli-splash.png new file mode 100644 index 0000000..d0f50e5 Binary files /dev/null and b/reference/openai-codex/.github/codex-cli-splash.png differ diff --git a/reference/openai-codex/.github/codex/home/config.toml b/reference/openai-codex/.github/codex/home/config.toml new file mode 100644 index 0000000..7b06521 --- /dev/null +++ b/reference/openai-codex/.github/codex/home/config.toml @@ -0,0 +1,3 @@ +model = "gpt-5.1" + +# Consider setting [mcp_servers] here! diff --git a/reference/openai-codex/.github/codex/labels/codex-attempt.md b/reference/openai-codex/.github/codex/labels/codex-attempt.md new file mode 100644 index 0000000..b2a3e93 --- /dev/null +++ b/reference/openai-codex/.github/codex/labels/codex-attempt.md @@ -0,0 +1,9 @@ +Attempt to solve the reported issue. + +If a code change is required, create a new branch, commit the fix, and open a pull request that resolves the problem. + +Here is the original GitHub issue that triggered this run: + +### {CODEX_ACTION_ISSUE_TITLE} + +{CODEX_ACTION_ISSUE_BODY} diff --git a/reference/openai-codex/.github/codex/labels/codex-review.md b/reference/openai-codex/.github/codex/labels/codex-review.md new file mode 100644 index 0000000..7c6c14a --- /dev/null +++ b/reference/openai-codex/.github/codex/labels/codex-review.md @@ -0,0 +1,7 @@ +Review this PR and respond with a very concise final message, formatted in Markdown. + +There should be a summary of the changes (1-2 sentences) and a few bullet points if necessary. + +Then provide the **review** (1-2 sentences plus bullet points, friendly tone). + +{CODEX_ACTION_GITHUB_EVENT_PATH} contains the JSON that triggered this GitHub workflow. It contains the `base` and `head` refs that define this PR. Both refs are available locally. diff --git a/reference/openai-codex/.github/codex/labels/codex-rust-review.md b/reference/openai-codex/.github/codex/labels/codex-rust-review.md new file mode 100644 index 0000000..ae74953 --- /dev/null +++ b/reference/openai-codex/.github/codex/labels/codex-rust-review.md @@ -0,0 +1,139 @@ +Review this PR and respond with a very concise final message, formatted in Markdown. + +There should be a summary of the changes (1-2 sentences) and a few bullet points if necessary. + +Then provide the **review** (1-2 sentences plus bullet points, friendly tone). + +Things to look out for when doing the review: + +## General Principles + +- **Make sure the pull request body explains the motivation behind the change.** If the author has failed to do this, call it out, and if you think you can deduce the motivation behind the change, propose copy. +- Ideally, the PR body also contains a small summary of the change. For small changes, the PR title may be sufficient. +- Each PR should ideally do one conceptual thing. For example, if a PR does a refactoring as well as introducing a new feature, push back and suggest the refactoring be done in a separate PR. This makes things easier for the reviewer, as refactoring changes can often be far-reaching, yet quick to review. +- When introducing new code, be on the lookout for code that duplicates existing code. When found, propose a way to refactor the existing code such that it should be reused. + +## Code Organization + +- Each crate in the Cargo workspace in `codex-rs` has a specific purpose: make a note if you believe new code is not introduced in the correct crate. +- When possible, try to keep the `core` crate as small as possible. Non-core but shared logic is often a good candidate for `codex-rs/common`. +- Be wary of large files and offer suggestions for how to break things into more reasonably-sized files. +- Rust files should generally be organized such that the public parts of the API appear near the top of the file and helper functions go below. This is analogous to the "inverted pyramid" structure that is favored in journalism. + +## Assertions in Tests + +Assert the equality of the entire objects instead of doing "piecemeal comparisons," performing `assert_eq!()` on individual fields. + +Note that unit tests also function as "executable documentation." As shown in the following example, "piecemeal comparisons" are often more verbose, provide less coverage, and are not as useful as executable documentation. + +For example, suppose you have the following enum: + +```rust +#[derive(Debug, PartialEq)] +enum Message { + Request { + id: String, + method: String, + params: Option, + }, + Notification { + method: String, + params: Option, + }, +} +``` + +This is an example of a _piecemeal_ comparison: + +```rust +// BAD: Piecemeal Comparison + +#[test] +fn test_get_latest_messages() { + let messages = get_latest_messages(); + assert_eq!(messages.len(), 2); + + let m0 = &messages[0]; + match m0 { + Message::Request { id, method, params } => { + assert_eq!(id, "123"); + assert_eq!(method, "subscribe"); + assert_eq!( + *params, + Some(json!({ + "conversation_id": "x42z86" + })) + ) + } + Message::Notification { .. } => { + panic!("expected Request"); + } + } + + let m1 = &messages[1]; + match m1 { + Message::Request { .. } => { + panic!("expected Notification"); + } + Message::Notification { method, params } => { + assert_eq!(method, "log"); + assert_eq!( + *params, + Some(json!({ + "level": "info", + "message": "subscribed" + })) + ) + } + } +} +``` + +This is a _deep_ comparison: + +```rust +// GOOD: Verify the entire structure with a single assert_eq!(). + +use pretty_assertions::assert_eq; + +#[test] +fn test_get_latest_messages() { + let messages = get_latest_messages(); + + assert_eq!( + vec![ + Message::Request { + id: "123".to_string(), + method: "subscribe".to_string(), + params: Some(json!({ + "conversation_id": "x42z86" + })), + }, + Message::Notification { + method: "log".to_string(), + params: Some(json!({ + "level": "info", + "message": "subscribed" + })), + }, + ], + messages, + ); +} +``` + +## More Tactical Rust Things To Look Out For + +- Do not use `unsafe` (unless you have a really, really good reason like using an operating system API directly and no safe wrapper exists). For example, there are cases where it is tempting to use `unsafe` in order to use `std::env::set_var()`, but this indeed `unsafe` and has led to race conditions on multiple occasions. (When this happens, find a mechanism other than environment variables to use for configuration.) +- Encourage the use of small enums or the newtype pattern in Rust if it helps readability without adding significant cognitive load or lines of code. +- If you see opportunities for the changes in a diff to use more idiomatic Rust, please make specific recommendations. For example, favor the use of expressions over `return`. +- When modifying a `Cargo.toml` file, make sure that dependency lists stay alphabetically sorted. Also consider whether a new dependency is added to the appropriate place (e.g., `[dependencies]` versus `[dev-dependencies]`) + +## Pull Request Body + +- If the nature of the change seems to have a visual component (which is often the case for changes to `codex-rs/tui`), recommend including a screenshot or video to demonstrate the change, if appropriate. +- References to existing GitHub issues and PRs are encouraged, where appropriate, though you likely do not have network access, so may not be able to help here. + +# PR Information + +{CODEX_ACTION_GITHUB_EVENT_PATH} contains the JSON that triggered this GitHub workflow. It contains the `base` and `head` refs that define this PR. Both refs are available locally. diff --git a/reference/openai-codex/.github/codex/labels/codex-triage.md b/reference/openai-codex/.github/codex/labels/codex-triage.md new file mode 100644 index 0000000..46ed362 --- /dev/null +++ b/reference/openai-codex/.github/codex/labels/codex-triage.md @@ -0,0 +1,7 @@ +Troubleshoot whether the reported issue is valid. + +Provide a concise and respectful comment summarizing the findings. + +### {CODEX_ACTION_ISSUE_TITLE} + +{CODEX_ACTION_ISSUE_BODY} diff --git a/reference/openai-codex/.github/dependabot.yaml b/reference/openai-codex/.github/dependabot.yaml new file mode 100644 index 0000000..9eeb8f1 --- /dev/null +++ b/reference/openai-codex/.github/dependabot.yaml @@ -0,0 +1,42 @@ +# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/dependabot-options-reference#package-ecosystem- + +version: 2 +updates: + - package-ecosystem: bun + directory: .github/actions/codex + schedule: + interval: weekly + cooldown: + default-days: 7 + - package-ecosystem: cargo + directories: + - codex-rs + - codex-rs/* + schedule: + interval: weekly + cooldown: + default-days: 7 + - package-ecosystem: devcontainers + directory: / + schedule: + interval: weekly + cooldown: + default-days: 7 + - package-ecosystem: docker + directory: codex-cli + schedule: + interval: weekly + cooldown: + default-days: 7 + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + cooldown: + default-days: 7 + - package-ecosystem: rust-toolchain + directory: codex-rs + schedule: + interval: weekly + cooldown: + default-days: 7 diff --git a/reference/openai-codex/.github/dotslash-argument-comment-lint-config.json b/reference/openai-codex/.github/dotslash-argument-comment-lint-config.json new file mode 100644 index 0000000..19a2a48 --- /dev/null +++ b/reference/openai-codex/.github/dotslash-argument-comment-lint-config.json @@ -0,0 +1,24 @@ +{ + "outputs": { + "argument-comment-lint": { + "platforms": { + "macos-aarch64": { + "regex": "^argument-comment-lint-aarch64-apple-darwin\\.tar\\.gz$", + "path": "argument-comment-lint/bin/argument-comment-lint" + }, + "linux-x86_64": { + "regex": "^argument-comment-lint-x86_64-unknown-linux-gnu\\.tar\\.gz$", + "path": "argument-comment-lint/bin/argument-comment-lint" + }, + "linux-aarch64": { + "regex": "^argument-comment-lint-aarch64-unknown-linux-gnu\\.tar\\.gz$", + "path": "argument-comment-lint/bin/argument-comment-lint" + }, + "windows-x86_64": { + "regex": "^argument-comment-lint-x86_64-pc-windows-msvc\\.zip$", + "path": "argument-comment-lint/bin/argument-comment-lint.exe" + } + } + } + } +} diff --git a/reference/openai-codex/.github/dotslash-config.json b/reference/openai-codex/.github/dotslash-config.json new file mode 100644 index 0000000..78ea6b3 --- /dev/null +++ b/reference/openai-codex/.github/dotslash-config.json @@ -0,0 +1,124 @@ +{ + "outputs": { + "codex": { + "platforms": { + "macos-aarch64": { + "regex": "^codex-package-aarch64-apple-darwin\\.tar\\.zst$", + "path": "bin/codex" + }, + "macos-x86_64": { + "regex": "^codex-package-x86_64-apple-darwin\\.tar\\.zst$", + "path": "bin/codex" + }, + "linux-x86_64": { + "regex": "^codex-package-x86_64-unknown-linux-musl\\.tar\\.zst$", + "path": "bin/codex" + }, + "linux-aarch64": { + "regex": "^codex-package-aarch64-unknown-linux-musl\\.tar\\.zst$", + "path": "bin/codex" + }, + "windows-x86_64": { + "regex": "^codex-package-x86_64-pc-windows-msvc\\.tar\\.zst$", + "path": "bin/codex.exe" + }, + "windows-aarch64": { + "regex": "^codex-package-aarch64-pc-windows-msvc\\.tar\\.zst$", + "path": "bin/codex.exe" + } + } + }, + "codex-app-server": { + "platforms": { + "macos-aarch64": { + "regex": "^codex-app-server-package-aarch64-apple-darwin\\.tar\\.zst$", + "path": "bin/codex-app-server" + }, + "macos-x86_64": { + "regex": "^codex-app-server-package-x86_64-apple-darwin\\.tar\\.zst$", + "path": "bin/codex-app-server" + }, + "linux-x86_64": { + "regex": "^codex-app-server-package-x86_64-unknown-linux-musl\\.tar\\.zst$", + "path": "bin/codex-app-server" + }, + "linux-aarch64": { + "regex": "^codex-app-server-package-aarch64-unknown-linux-musl\\.tar\\.zst$", + "path": "bin/codex-app-server" + }, + "windows-x86_64": { + "regex": "^codex-app-server-package-x86_64-pc-windows-msvc\\.tar\\.zst$", + "path": "bin/codex-app-server.exe" + }, + "windows-aarch64": { + "regex": "^codex-app-server-package-aarch64-pc-windows-msvc\\.tar\\.zst$", + "path": "bin/codex-app-server.exe" + } + } + }, + "codex-responses-api-proxy": { + "platforms": { + "macos-aarch64": { + "regex": "^codex-responses-api-proxy-aarch64-apple-darwin\\.zst$", + "path": "codex-responses-api-proxy" + }, + "macos-x86_64": { + "regex": "^codex-responses-api-proxy-x86_64-apple-darwin\\.zst$", + "path": "codex-responses-api-proxy" + }, + "linux-x86_64": { + "regex": "^codex-responses-api-proxy-x86_64-unknown-linux-musl\\.zst$", + "path": "codex-responses-api-proxy" + }, + "linux-aarch64": { + "regex": "^codex-responses-api-proxy-aarch64-unknown-linux-musl\\.zst$", + "path": "codex-responses-api-proxy" + }, + "windows-x86_64": { + "regex": "^codex-responses-api-proxy-x86_64-pc-windows-msvc\\.exe\\.zst$", + "path": "codex-responses-api-proxy.exe" + }, + "windows-aarch64": { + "regex": "^codex-responses-api-proxy-aarch64-pc-windows-msvc\\.exe\\.zst$", + "path": "codex-responses-api-proxy.exe" + } + } + }, + "bwrap": { + "platforms": { + "linux-x86_64": { + "regex": "^bwrap-x86_64-unknown-linux-musl\\.zst$", + "path": "bwrap" + }, + "linux-aarch64": { + "regex": "^bwrap-aarch64-unknown-linux-musl\\.zst$", + "path": "bwrap" + } + } + }, + "codex-command-runner": { + "platforms": { + "windows-x86_64": { + "regex": "^codex-command-runner-x86_64-pc-windows-msvc\\.exe\\.zst$", + "path": "codex-command-runner.exe" + }, + "windows-aarch64": { + "regex": "^codex-command-runner-aarch64-pc-windows-msvc\\.exe\\.zst$", + "path": "codex-command-runner.exe" + } + } + }, + "codex-windows-sandbox-setup": { + "platforms": { + "windows-x86_64": { + "regex": "^codex-windows-sandbox-setup-x86_64-pc-windows-msvc\\.exe\\.zst$", + "path": "codex-windows-sandbox-setup.exe" + }, + "windows-aarch64": { + "regex": "^codex-windows-sandbox-setup-aarch64-pc-windows-msvc\\.exe\\.zst$", + "path": "codex-windows-sandbox-setup.exe" + } + } + } + } +} diff --git a/reference/openai-codex/.github/dotslash-zsh-config.json b/reference/openai-codex/.github/dotslash-zsh-config.json new file mode 100644 index 0000000..37285f1 --- /dev/null +++ b/reference/openai-codex/.github/dotslash-zsh-config.json @@ -0,0 +1,28 @@ +{ + "outputs": { + "codex-zsh": { + "platforms": { + "macos-aarch64": { + "name": "codex-zsh-aarch64-apple-darwin.tar.gz", + "format": "tar.gz", + "path": "codex-zsh/bin/zsh" + }, + "macos-x86_64": { + "name": "codex-zsh-x86_64-apple-darwin.tar.gz", + "format": "tar.gz", + "path": "codex-zsh/bin/zsh" + }, + "linux-x86_64": { + "name": "codex-zsh-x86_64-unknown-linux-musl.tar.gz", + "format": "tar.gz", + "path": "codex-zsh/bin/zsh" + }, + "linux-aarch64": { + "name": "codex-zsh-aarch64-unknown-linux-musl.tar.gz", + "format": "tar.gz", + "path": "codex-zsh/bin/zsh" + } + } + } + } +} diff --git a/reference/openai-codex/.github/pull_request_template.md b/reference/openai-codex/.github/pull_request_template.md new file mode 100644 index 0000000..4ea424c --- /dev/null +++ b/reference/openai-codex/.github/pull_request_template.md @@ -0,0 +1,8 @@ +# External (non-OpenAI) Pull Request Requirements + +External code contributions are by invitation only. Please read the dedicated "Contributing" markdown file for details: +https://github.com/openai/codex/blob/main/docs/contributing.md + +If your PR conforms to our contribution guidelines, replace this text with a detailed and high quality description of your changes. + +Include a link to a bug report or enhancement request. diff --git a/reference/openai-codex/.github/scripts/build-codex-package-archive.sh b/reference/openai-codex/.github/scripts/build-codex-package-archive.sh new file mode 100644 index 0000000..80da4cf --- /dev/null +++ b/reference/openai-codex/.github/scripts/build-codex-package-archive.sh @@ -0,0 +1,172 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + cat <<'EOF' +Usage: build-codex-package-archive.sh \ + --target \ + --bundle \ + --entrypoint-dir

\ + --archive-dir \ + [--bwrap-bin ] \ + [--codex-command-runner-bin ] \ + [--codex-windows-sandbox-setup-bin ] \ + [--target-suffixed-entrypoint] +EOF +} + +target="" +bundle="" +entrypoint_dir="" +archive_dir="" +target_suffixed_entrypoint="false" +resource_args=() +bwrap_bin_provided="false" +command_runner_bin_provided="false" +sandbox_setup_bin_provided="false" + +while [[ $# -gt 0 ]]; do + case "$1" in + --target) + target="${2:?--target requires a value}" + shift 2 + ;; + --bundle) + bundle="${2:?--bundle requires a value}" + shift 2 + ;; + --entrypoint-dir) + entrypoint_dir="${2:?--entrypoint-dir requires a value}" + shift 2 + ;; + --archive-dir) + archive_dir="${2:?--archive-dir requires a value}" + shift 2 + ;; + --bwrap-bin) + resource_args+=(--bwrap-bin "${2:?--bwrap-bin requires a value}") + bwrap_bin_provided="true" + shift 2 + ;; + --codex-command-runner-bin) + resource_args+=( + --codex-command-runner-bin + "${2:?--codex-command-runner-bin requires a value}" + ) + command_runner_bin_provided="true" + shift 2 + ;; + --codex-windows-sandbox-setup-bin) + resource_args+=( + --codex-windows-sandbox-setup-bin + "${2:?--codex-windows-sandbox-setup-bin requires a value}" + ) + sandbox_setup_bin_provided="true" + shift 2 + ;; + --target-suffixed-entrypoint) + target_suffixed_entrypoint="true" + shift + ;; + -h|--help) + usage + exit 0 + ;; + *) + echo "Unexpected argument: $1" >&2 + usage >&2 + exit 1 + ;; + esac +done + +if [[ -z "$target" || -z "$bundle" || -z "$entrypoint_dir" || -z "$archive_dir" ]]; then + usage >&2 + exit 1 +fi + +case "$bundle" in + primary) + variant="codex" + entrypoint="codex" + archive_stem="codex-package" + ;; + app-server) + variant="codex-app-server" + entrypoint="codex-app-server" + archive_stem="codex-app-server-package" + ;; + *) + echo "No Codex package variant for bundle: $bundle" >&2 + exit 1 + ;; +esac + +exe_suffix="" +case "$target" in + *windows*) + exe_suffix=".exe" + ;; +esac + +entrypoint_name="$entrypoint" +if [[ "$target_suffixed_entrypoint" == "true" ]]; then + entrypoint_name="${entrypoint_name}-${target}" +fi + +case "$target" in + *linux*) + bwrap_bin="${entrypoint_dir%/}/bwrap" + if [[ "$bwrap_bin_provided" == "false" && -f "$bwrap_bin" ]]; then + resource_args+=(--bwrap-bin "$bwrap_bin") + fi + ;; + *windows*) + command_runner_bin="${entrypoint_dir%/}/codex-command-runner.exe" + sandbox_setup_bin="${entrypoint_dir%/}/codex-windows-sandbox-setup.exe" + if [[ "$command_runner_bin_provided" == "false" && -f "$command_runner_bin" ]]; then + resource_args+=(--codex-command-runner-bin "$command_runner_bin") + fi + if [[ "$sandbox_setup_bin_provided" == "false" && -f "$sandbox_setup_bin" ]]; then + resource_args+=(--codex-windows-sandbox-setup-bin "$sandbox_setup_bin") + fi + ;; +esac + +repo_root="${GITHUB_WORKSPACE:-}" +if [[ -z "$repo_root" ]]; then + repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +fi + +if command -v python3 >/dev/null 2>&1; then + python_bin="python3" +else + python_bin="python" +fi + +if ! command -v zstd >/dev/null 2>&1 && [[ -x "${repo_root}/.github/workflows/zstd" ]]; then + export PATH="${repo_root}/.github/workflows:${PATH}" +fi + +mkdir -p "$archive_dir" +package_dir="${RUNNER_TEMP:-/tmp}/${archive_stem}-${target}" +gzip_archive_path="${archive_dir}/${archive_stem}-${target}.tar.gz" +zstd_archive_path="${archive_dir}/${archive_stem}-${target}.tar.zst" +rm -rf "$package_dir" + +python_args=( + "${repo_root}/scripts/build_codex_package.py" + --target "$target" + --variant "$variant" + --entrypoint-bin "${entrypoint_dir%/}/${entrypoint_name}${exe_suffix}" + --cargo-profile release + --package-dir "$package_dir" + --archive-output "$gzip_archive_path" + --archive-output "$zstd_archive_path" +) +if ((${#resource_args[@]} > 0)); then + python_args+=("${resource_args[@]}") +fi +python_args+=(--force) + +"$python_bin" "${python_args[@]}" diff --git a/reference/openai-codex/.github/scripts/build-zsh-release-artifact.sh b/reference/openai-codex/.github/scripts/build-zsh-release-artifact.sh new file mode 100755 index 0000000..4fc3db3 --- /dev/null +++ b/reference/openai-codex/.github/scripts/build-zsh-release-artifact.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash + +set -euo pipefail + +if [[ "$#" -ne 1 ]]; then + echo "usage: $0 " >&2 + exit 1 +fi + +archive_path="$1" +workspace="${GITHUB_WORKSPACE:?missing GITHUB_WORKSPACE}" +zsh_commit="${ZSH_COMMIT:?missing ZSH_COMMIT}" +zsh_patch="${ZSH_PATCH:?missing ZSH_PATCH}" +temp_root="${RUNNER_TEMP:-/tmp}" +work_root="$(mktemp -d "${temp_root%/}/codex-zsh-release.XXXXXX")" +trap 'rm -rf "$work_root"' EXIT + +source_root="${work_root}/zsh" +package_root="${work_root}/codex-zsh" +wrapper_path="${work_root}/exec-wrapper" +stdout_path="${work_root}/stdout.txt" +wrapper_log_path="${work_root}/wrapper.log" + +git clone https://git.code.sf.net/p/zsh/code "$source_root" +cd "$source_root" +git checkout "$zsh_commit" +git apply "${workspace}/${zsh_patch}" +./Util/preconfig +./configure + +cores="$(command -v nproc >/dev/null 2>&1 && nproc || getconf _NPROCESSORS_ONLN)" +make -j"${cores}" + +cat > "$wrapper_path" <<'EOF' +#!/usr/bin/env bash +set -euo pipefail +: "${CODEX_WRAPPER_LOG:?missing CODEX_WRAPPER_LOG}" +printf '%s\n' "$@" > "$CODEX_WRAPPER_LOG" +file="$1" +shift +if [[ "$#" -eq 0 ]]; then + exec "$file" +fi +arg0="$1" +shift +exec -a "$arg0" "$file" "$@" +EOF +chmod +x "$wrapper_path" + +CODEX_WRAPPER_LOG="$wrapper_log_path" \ +EXEC_WRAPPER="$wrapper_path" \ +"${source_root}/Src/zsh" -fc '/bin/echo smoke-zsh' > "$stdout_path" + +grep -Fx "smoke-zsh" "$stdout_path" +grep -Fx "/bin/echo" "$wrapper_log_path" + +mkdir -p "$package_root/bin" "$(dirname "${workspace}/${archive_path}")" +cp "${source_root}/Src/zsh" "$package_root/bin/zsh" +chmod +x "$package_root/bin/zsh" + +(cd "$work_root" && tar -czf "${workspace}/${archive_path}" codex-zsh) diff --git a/reference/openai-codex/.github/scripts/compute-bazel-windows-path.ps1 b/reference/openai-codex/.github/scripts/compute-bazel-windows-path.ps1 new file mode 100644 index 0000000..81fd668 --- /dev/null +++ b/reference/openai-codex/.github/scripts/compute-bazel-windows-path.ps1 @@ -0,0 +1,113 @@ +<# +BuildBuddy cache keys include the action and test environment, so Bazel should +not inherit the full hosted-runner PATH on Windows. That PATH includes volatile +tool entries, such as Maven, that can change independently of this repo and +cause avoidable cache misses. + +This script derives a smaller, cache-stable PATH that keeps the Windows +toolchain entries Bazel-backed CI tasks need: MSVC and Windows SDK paths, +MinGW runtime DLL paths for gnullvm-built tests, Git, PowerShell, Node, Python, +DotSlash, and the standard Windows system directories. +`setup-bazel-ci` runs this after exporting the MSVC environment, and the script +publishes the result via `GITHUB_ENV` as `CODEX_BAZEL_WINDOWS_PATH` so later +steps can pass that explicit PATH to Bazel. +#> + +$stablePathEntries = New-Object System.Collections.Generic.List[string] +$seenEntries = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::OrdinalIgnoreCase) +$windowsAppsPath = if ([string]::IsNullOrWhiteSpace($env:LOCALAPPDATA)) { + $null +} else { + "$($env:LOCALAPPDATA)\Microsoft\WindowsApps" +} +$windowsDir = if ($env:WINDIR) { + $env:WINDIR +} elseif ($env:SystemRoot) { + $env:SystemRoot +} else { + $null +} + +function Add-StablePathEntry { + param([string]$PathEntry) + + if ([string]::IsNullOrWhiteSpace($PathEntry)) { + return + } + + if ($seenEntries.Add($PathEntry)) { + [void]$stablePathEntries.Add($PathEntry) + } +} + +foreach ($pathEntry in ($env:PATH -split ';')) { + if ([string]::IsNullOrWhiteSpace($pathEntry)) { + continue + } + + if ( + $pathEntry -like '*Microsoft Visual Studio*' -or + $pathEntry -like '*Windows Kits*' -or + $pathEntry -like '*Microsoft SDKs*' -or + $pathEntry -eq 'C:\mingw64\bin' -or + $pathEntry -like 'C:\msys64\*\bin' -or + $pathEntry -like 'C:\Program Files\Git\*' -or + $pathEntry -like 'C:\Program Files\PowerShell\*' -or + $pathEntry -like 'C:\hostedtoolcache\windows\node\*' -or + $pathEntry -like 'C:\hostedtoolcache\windows\Python\*' -or + $pathEntry -eq 'D:\a\_temp\install-dotslash\bin' -or + ($windowsDir -and ($pathEntry -eq $windowsDir -or $pathEntry -like "${windowsDir}\*")) + ) { + Add-StablePathEntry $pathEntry + } +} + +$gitCommand = Get-Command git -ErrorAction SilentlyContinue +if ($gitCommand) { + Add-StablePathEntry (Split-Path $gitCommand.Source -Parent) +} + +$nodeCommand = Get-Command node -ErrorAction SilentlyContinue +if ($nodeCommand) { + Add-StablePathEntry (Split-Path $nodeCommand.Source -Parent) +} + +$python3Command = Get-Command python3 -ErrorAction SilentlyContinue +if ($python3Command) { + Add-StablePathEntry (Split-Path $python3Command.Source -Parent) +} + +$pythonCommand = Get-Command python -ErrorAction SilentlyContinue +if ($pythonCommand) { + Add-StablePathEntry (Split-Path $pythonCommand.Source -Parent) +} + +$pwshCommand = Get-Command pwsh -ErrorAction SilentlyContinue +if ($pwshCommand) { + Add-StablePathEntry (Split-Path $pwshCommand.Source -Parent) +} + +foreach ($mingwPath in @('C:\mingw64\bin', 'C:\msys64\mingw64\bin', 'C:\msys64\ucrt64\bin')) { + if (Test-Path $mingwPath) { + Add-StablePathEntry $mingwPath + } +} + +if ($windowsAppsPath) { + Add-StablePathEntry $windowsAppsPath +} + +if ($stablePathEntries.Count -eq 0) { + throw 'Failed to derive cache-stable Windows PATH.' +} + +if ([string]::IsNullOrWhiteSpace($env:GITHUB_ENV)) { + throw 'GITHUB_ENV must be set.' +} + +$stablePath = $stablePathEntries -join ';' +Write-Host 'Derived CODEX_BAZEL_WINDOWS_PATH entries:' +foreach ($pathEntry in $stablePathEntries) { + Write-Host " $pathEntry" +} +"CODEX_BAZEL_WINDOWS_PATH=$stablePath" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append diff --git a/reference/openai-codex/.github/scripts/install-musl-build-tools.sh b/reference/openai-codex/.github/scripts/install-musl-build-tools.sh new file mode 100644 index 0000000..e4c6683 --- /dev/null +++ b/reference/openai-codex/.github/scripts/install-musl-build-tools.sh @@ -0,0 +1,279 @@ +#!/usr/bin/env bash +set -euo pipefail + +: "${TARGET:?TARGET environment variable is required}" +: "${GITHUB_ENV:?GITHUB_ENV environment variable is required}" + +apt_update_args=() +if [[ -n "${APT_UPDATE_ARGS:-}" ]]; then + # shellcheck disable=SC2206 + apt_update_args=(${APT_UPDATE_ARGS}) +fi + +apt_install_args=() +if [[ -n "${APT_INSTALL_ARGS:-}" ]]; then + # shellcheck disable=SC2206 + apt_install_args=(${APT_INSTALL_ARGS}) +fi + +sudo apt-get update "${apt_update_args[@]}" +sudo apt-get install -y "${apt_install_args[@]}" ca-certificates curl musl-tools pkg-config libcap-dev g++ clang libc++-dev libc++abi-dev lld xz-utils + +case "${TARGET}" in + x86_64-unknown-linux-musl) + arch="x86_64" + ;; + aarch64-unknown-linux-musl) + arch="aarch64" + ;; + *) + echo "Unexpected musl target: ${TARGET}" >&2 + exit 1 + ;; +esac + +libcap_version="2.75" +libcap_sha256="de4e7e064c9ba451d5234dd46e897d7c71c96a9ebf9a0c445bc04f4742d83632" +libcap_tarball_name="libcap-${libcap_version}.tar.xz" +libcap_download_url="https://mirrors.edge.kernel.org/pub/linux/libs/security/linux-privs/libcap2/${libcap_tarball_name}" + +# Use the musl toolchain as the Rust linker to avoid Zig injecting its own CRT. +if command -v "${arch}-linux-musl-gcc" >/dev/null; then + musl_linker="$(command -v "${arch}-linux-musl-gcc")" +elif command -v musl-gcc >/dev/null; then + musl_linker="$(command -v musl-gcc)" +else + echo "musl gcc not found after install; arch=${arch}" >&2 + exit 1 +fi + +zig_target="${TARGET/-unknown-linux-musl/-linux-musl}" +runner_temp="${RUNNER_TEMP:-/tmp}" +tool_root="${runner_temp}/codex-musl-tools-${TARGET}" +mkdir -p "${tool_root}" + +libcap_root="${tool_root}/libcap-${libcap_version}" +libcap_src_root="${libcap_root}/src" +libcap_prefix="${libcap_root}/prefix" +libcap_pkgconfig_dir="${libcap_prefix}/lib/pkgconfig" + +if [[ ! -f "${libcap_prefix}/lib/libcap.a" ]]; then + mkdir -p "${libcap_src_root}" "${libcap_prefix}/lib" "${libcap_prefix}/include/sys" "${libcap_prefix}/include/linux" "${libcap_pkgconfig_dir}" + libcap_tarball="${libcap_root}/${libcap_tarball_name}" + + curl -fsSL "${libcap_download_url}" -o "${libcap_tarball}" + echo "${libcap_sha256} ${libcap_tarball}" | sha256sum -c - + + tar -xJf "${libcap_tarball}" -C "${libcap_src_root}" + libcap_source_dir="${libcap_src_root}/libcap-${libcap_version}" + make -C "${libcap_source_dir}/libcap" -j"$(nproc)" \ + CC="${musl_linker}" \ + AR=ar \ + RANLIB=ranlib + + cp "${libcap_source_dir}/libcap/libcap.a" "${libcap_prefix}/lib/libcap.a" + cp "${libcap_source_dir}/libcap/include/uapi/linux/capability.h" "${libcap_prefix}/include/linux/capability.h" + cp "${libcap_source_dir}/libcap/../libcap/include/sys/capability.h" "${libcap_prefix}/include/sys/capability.h" + + cat > "${libcap_pkgconfig_dir}/libcap.pc" </dev/null; then + zig_bin="$(command -v zig)" + cc="${tool_root}/zigcc" + cxx="${tool_root}/zigcxx" + + cat >"${cc}" <"${cxx}" </dev/null || true)" +else + cc="${musl_linker}" + + if command -v "${arch}-linux-musl-g++" >/dev/null; then + cxx="$(command -v "${arch}-linux-musl-g++")" + elif command -v musl-g++ >/dev/null; then + cxx="$(command -v musl-g++)" + else + cxx="${cc}" + fi +fi + +if [[ -n "${sysroot}" && "${sysroot}" != "/" ]]; then + echo "BORING_BSSL_SYSROOT=${sysroot}" >> "$GITHUB_ENV" + boring_sysroot_var="BORING_BSSL_SYSROOT_${TARGET}" + boring_sysroot_var="${boring_sysroot_var//-/_}" + echo "${boring_sysroot_var}=${sysroot}" >> "$GITHUB_ENV" +fi + +cflags="-pthread" +cxxflags="-pthread" +if [[ "${TARGET}" == "aarch64-unknown-linux-musl" ]]; then + # BoringSSL enables -Wframe-larger-than=25344 under clang and treats warnings as errors. + cflags="${cflags} -Wno-error=frame-larger-than" + cxxflags="${cxxflags} -Wno-error=frame-larger-than" +fi + +echo "CFLAGS=${cflags}" >> "$GITHUB_ENV" +echo "CXXFLAGS=${cxxflags}" >> "$GITHUB_ENV" +echo "CC=${cc}" >> "$GITHUB_ENV" +echo "TARGET_CC=${cc}" >> "$GITHUB_ENV" +target_cc_var="CC_${TARGET}" +target_cc_var="${target_cc_var//-/_}" +echo "${target_cc_var}=${cc}" >> "$GITHUB_ENV" +echo "CXX=${cxx}" >> "$GITHUB_ENV" +echo "TARGET_CXX=${cxx}" >> "$GITHUB_ENV" +target_cxx_var="CXX_${TARGET}" +target_cxx_var="${target_cxx_var//-/_}" +echo "${target_cxx_var}=${cxx}" >> "$GITHUB_ENV" + +cargo_linker_var="CARGO_TARGET_${TARGET^^}_LINKER" +cargo_linker_var="${cargo_linker_var//-/_}" +echo "${cargo_linker_var}=${musl_linker}" >> "$GITHUB_ENV" + +echo "CMAKE_C_COMPILER=${cc}" >> "$GITHUB_ENV" +echo "CMAKE_CXX_COMPILER=${cxx}" >> "$GITHUB_ENV" +echo "CMAKE_ARGS=-DCMAKE_HAVE_THREADS_LIBRARY=1 -DCMAKE_USE_PTHREADS_INIT=1 -DCMAKE_THREAD_LIBS_INIT=-pthread -DTHREADS_PREFER_PTHREAD_FLAG=ON" >> "$GITHUB_ENV" + +# Allow pkg-config resolution during cross-compilation. +echo "PKG_CONFIG_ALLOW_CROSS=1" >> "$GITHUB_ENV" +pkg_config_path="${libcap_pkgconfig_dir}" +if [[ -n "${PKG_CONFIG_PATH:-}" ]]; then + pkg_config_path="${pkg_config_path}:${PKG_CONFIG_PATH}" +fi +echo "PKG_CONFIG_PATH=${pkg_config_path}" >> "$GITHUB_ENV" +pkg_config_path_var="PKG_CONFIG_PATH_${TARGET}" +pkg_config_path_var="${pkg_config_path_var//-/_}" +echo "${pkg_config_path_var}=${libcap_pkgconfig_dir}" >> "$GITHUB_ENV" + +if [[ -n "${sysroot}" && "${sysroot}" != "/" ]]; then + echo "PKG_CONFIG_SYSROOT_DIR=${sysroot}" >> "$GITHUB_ENV" + pkg_config_sysroot_var="PKG_CONFIG_SYSROOT_DIR_${TARGET}" + pkg_config_sysroot_var="${pkg_config_sysroot_var//-/_}" + echo "${pkg_config_sysroot_var}=${sysroot}" >> "$GITHUB_ENV" +fi diff --git a/reference/openai-codex/.github/scripts/run-argument-comment-lint-bazel.sh b/reference/openai-codex/.github/scripts/run-argument-comment-lint-bazel.sh new file mode 100755 index 0000000..fddca4c --- /dev/null +++ b/reference/openai-codex/.github/scripts/run-argument-comment-lint-bazel.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash + +set -euo pipefail + +bazel_lint_args=("$@") +if [[ "${RUNNER_OS:-}" == "Windows" ]]; then + has_host_platform_override=0 + for arg in "${bazel_lint_args[@]}"; do + if [[ "$arg" == --host_platform=* ]]; then + has_host_platform_override=1 + break + fi + done + + if [[ $has_host_platform_override -eq 0 ]]; then + # The nightly Windows lint toolchain is registered with an MSVC exec + # platform even though the lint target platform stays on `windows-gnullvm`. + # Override the host platform here so the exec-side helper binaries actually + # match the registered toolchain set. + bazel_lint_args+=("--host_platform=//:local_windows_msvc") + fi + + # Native Windows lint runs need exec-side Rust helper binaries and proc-macros + # to use rust-lld instead of the C++ linker path. The default `none` + # preference resolves to `cc` when a cc_toolchain is present, which currently + # routes these exec actions through clang++ with an argument shape it cannot + # consume. + bazel_lint_args+=("--@rules_rust//rust/settings:toolchain_linker_preference=rust") + + # Some Rust top-level targets are still intentionally incompatible with the + # local Windows MSVC exec platform. Skip those explicit targets so the native + # lint aspect can run across the compatible crate graph instead of failing the + # whole build after analysis. + bazel_lint_args+=("--skip_incompatible_explicit_targets") +fi + +read_query_labels() { + local query="$1" + local query_stdout + local query_stderr + query_stdout="$(mktemp)" + query_stderr="$(mktemp)" + + if ! ./.github/scripts/run-bazel-query-ci.sh \ + --keep_going \ + --output=label \ + -- "$query" >"$query_stdout" 2>"$query_stderr"; then + cat "$query_stderr" >&2 + rm -f "$query_stdout" "$query_stderr" + exit 1 + fi + + cat "$query_stdout" + rm -f "$query_stdout" "$query_stderr" +} + +final_build_targets=(//codex-rs/...) +if [[ "${RUNNER_OS:-}" == "Windows" ]]; then + # Bazel's local Windows platform currently lacks a default test toolchain for + # `rust_test`, so target the concrete Rust crate rules directly. The lint + # aspect still walks their crate graph, which preserves incremental reuse for + # non-test code while avoiding non-Rust wrapper targets such as platform_data. + final_build_targets=() + while IFS= read -r label; do + [[ -n "$label" ]] || continue + final_build_targets+=("$label") + done < <(read_query_labels 'kind("rust_(library|binary|proc_macro) rule", //codex-rs/...)') + + if [[ ${#final_build_targets[@]} -eq 0 ]]; then + echo "Failed to discover Windows Bazel lint targets." >&2 + exit 1 + fi +fi + +./.github/scripts/run-bazel-ci.sh \ + -- \ + build \ + "${bazel_lint_args[@]}" \ + -- \ + "${final_build_targets[@]}" diff --git a/reference/openai-codex/.github/scripts/run-bazel-ci.sh b/reference/openai-codex/.github/scripts/run-bazel-ci.sh new file mode 100755 index 0000000..f98e4d8 --- /dev/null +++ b/reference/openai-codex/.github/scripts/run-bazel-ci.sh @@ -0,0 +1,453 @@ +#!/usr/bin/env bash + +set -euo pipefail + +print_failed_bazel_test_logs=0 +print_failed_bazel_action_summary=0 +remote_download_toplevel=0 +windows_msvc_host_platform=0 +windows_cross_compile=0 + +while [[ $# -gt 0 ]]; do + case "$1" in + --print-failed-test-logs) + print_failed_bazel_test_logs=1 + shift + ;; + --print-failed-action-summary) + print_failed_bazel_action_summary=1 + shift + ;; + --remote-download-toplevel) + remote_download_toplevel=1 + shift + ;; + --windows-msvc-host-platform) + windows_msvc_host_platform=1 + shift + ;; + --windows-cross-compile) + windows_cross_compile=1 + shift + ;; + --) + shift + break + ;; + *) + echo "Unknown option: $1" >&2 + exit 1 + ;; + esac +done + +if [[ $# -eq 0 ]]; then + echo "Usage: $0 [--print-failed-test-logs] [--print-failed-action-summary] [--remote-download-toplevel] [--windows-msvc-host-platform] [--windows-cross-compile] -- -- " >&2 + exit 1 +fi + +bazel_startup_args=() +if [[ -n "${BAZEL_OUTPUT_USER_ROOT:-}" ]]; then + bazel_startup_args+=("--output_user_root=${BAZEL_OUTPUT_USER_ROOT}") +fi + +run_bazel() { + if [[ "${RUNNER_OS:-}" == "Windows" ]]; then + MSYS2_ARG_CONV_EXCL='*' bazel "$@" + return + fi + + bazel "$@" +} + +ci_config=ci-linux +case "${RUNNER_OS:-}" in + macOS) + ci_config=ci-macos + ;; + Windows) + if [[ $windows_cross_compile -eq 1 ]]; then + ci_config=ci-windows-cross + else + ci_config=ci-windows + fi + ;; +esac + +print_bazel_test_log_tails() { + local console_log="$1" + local testlogs_dir + local -a bazel_info_cmd=(bazel) + local -a bazel_info_args=(info) + + if (( ${#bazel_startup_args[@]} > 0 )); then + bazel_info_cmd+=("${bazel_startup_args[@]}") + fi + + # `bazel info` needs the same CI config as the failed test invocation so + # platform-specific output roots match. On Windows, omitting `ci-windows` + # would point at `local_windows-fastbuild` even when the test ran with the + # MSVC host platform under `local_windows_msvc-fastbuild`. + if [[ -n "${BUILDBUDDY_API_KEY:-}" ]]; then + bazel_info_args+=( + "--config=${ci_config}" + "--remote_header=x-buildbuddy-api-key=${BUILDBUDDY_API_KEY}" + ) + fi + # Only pass flags that affect Bazel's output-root selection or repository + # lookup. Test/build-only flags such as execution logs or remote download + # mode can make `bazel info` fail, which would hide the real test log path. + for arg in "${post_config_bazel_args[@]}"; do + case "$arg" in + --host_platform=* | --repo_contents_cache=* | --repository_cache=*) + bazel_info_args+=("$arg") + ;; + esac + done + + testlogs_dir="$(run_bazel "${bazel_info_cmd[@]:1}" \ + --noexperimental_remote_repo_contents_cache \ + "${bazel_info_args[@]}" \ + bazel-testlogs 2>/dev/null || echo bazel-testlogs)" + + local failed_targets=() + while IFS= read -r target; do + failed_targets+=("$target") + done < <( + grep -E '^(FAIL: //|ERROR: .* Testing //)' "$console_log" \ + | sed -E 's#^FAIL: (//[^ ]+).*#\1#; s#^ERROR: .* Testing (//[^ ]+) failed:.*#\1#' \ + | sort -u + ) + + if [[ ${#failed_targets[@]} -eq 0 ]]; then + echo "No failed Bazel test targets were found in console output." + return + fi + + for target in "${failed_targets[@]}"; do + local rel_path="${target#//}" + rel_path="${rel_path/://}" + local test_log="${testlogs_dir}/${rel_path}/test.log" + local reported_test_log + reported_test_log="$(grep -F "FAIL: ${target} " "$console_log" | sed -nE 's#.* \(see (.*[\\/]test\.log)\).*#\1#p' | head -n 1 || true)" + if [[ -n "$reported_test_log" ]]; then + reported_test_log="${reported_test_log//\\//}" + test_log="$reported_test_log" + fi + + echo "::group::Bazel test log tail for ${target}" + if [[ -f "$test_log" ]]; then + tail -n 200 "$test_log" + else + echo "Missing test log: $test_log" + fi + echo "::endgroup::" + done +} + +print_bazel_action_failure_summary() { + local console_log="$1" + local escaped_summary + local summary + + summary="$( + awk ' + function clean(line) { + gsub(sprintf("%c", 27) "\\[[0-9;]*m", "", line) + sub(/^.*\t[^\t]*\t[0-9TZ:._-]+ /, "", line) + return line + } + + function is_diagnostic(line) { + return line ~ /^(error(\[[^]]+\])?:|warning:|note:|help:)/ || + line ~ /^[[:space:]]+-->/ || + line ~ /^[[:space:]]*[0-9]+[[:space:]]+\|/ || + line ~ /^[[:space:]]*\|/ || + line ~ /^[[:space:]]+= (note|help):/ || + line ~ /^[[:space:]]*\^[[:space:]^~-]*$/ || + line ~ /^For more information/ || + line ~ /^error: aborting/ + } + + { + line = clean($0) + } + + line ~ /^ERROR: .* failed:/ { + if (printed) { + print "" + } + print line + in_failure = 1 + seen_diagnostic = 0 + printed = 1 + next + } + + in_failure && is_diagnostic(line) { + print line + seen_diagnostic = 1 + next + } + + in_failure && seen_diagnostic && line == "" { + print "" + next + } + + in_failure && seen_diagnostic { + in_failure = 0 + seen_diagnostic = 0 + next + } + ' "$console_log" + )" + + if [[ -z "$summary" ]]; then + summary="$(grep -E '^ERROR: |^FAILED: ' "$console_log" | tail -n 50 || true)" + fi + + if [[ -z "$summary" ]]; then + echo "No Bazel action failures were found in the captured console output." + return + fi + + if [[ "${GITHUB_ACTIONS:-}" == "true" ]]; then + escaped_summary="$( + printf '%s' "$summary" \ + | awk 'BEGIN { ORS = "" } { + gsub(/%/, "%25") + gsub(/\r/, "%0D") + print sep $0 + sep = "%0A" + }' + )" + echo "::error title=Bazel failed action diagnostics::${escaped_summary}" + fi + + echo + echo "Bazel failed action diagnostics:" + echo "--------------------------------" + printf '%s\n' "$summary" + echo "--------------------------------" +} + +bazel_args=() +bazel_targets=() +found_target_separator=0 +for arg in "$@"; do + if [[ "$arg" == "--" && $found_target_separator -eq 0 ]]; then + found_target_separator=1 + continue + fi + + if [[ $found_target_separator -eq 0 ]]; then + bazel_args+=("$arg") + else + bazel_targets+=("$arg") + fi +done + +if [[ ${#bazel_args[@]} -eq 0 || ${#bazel_targets[@]} -eq 0 ]]; then + echo "Expected Bazel args and targets separated by --" >&2 + exit 1 +fi + +if [[ "${RUNNER_OS:-}" == "Windows" && $windows_cross_compile -eq 1 && -z "${BUILDBUDDY_API_KEY:-}" ]]; then + # Fork PRs do not receive the BuildBuddy secret needed for the remote + # cross-compile config. Preserve the previous local Windows build shape. + windows_msvc_host_platform=1 +fi + +post_config_bazel_args=() +if [[ "${RUNNER_OS:-}" == "Windows" && $windows_msvc_host_platform -eq 1 ]]; then + has_host_platform_override=0 + for arg in "${bazel_args[@]}"; do + if [[ "$arg" == --host_platform=* ]]; then + has_host_platform_override=1 + break + fi + done + + if [[ $has_host_platform_override -eq 0 ]]; then + # Use the MSVC Windows platform for jobs that need helper binaries like + # Rust test wrappers and V8 generators to resolve a compatible toolchain. + # Callers that need a different Windows target platform should pass an + # explicit `--platforms=...` flag. + post_config_bazel_args+=("--host_platform=//:local_windows_msvc") + fi +fi + +if [[ $remote_download_toplevel -eq 1 ]]; then + # Override the CI config's remote_download_minimal setting when callers need + # the built artifact to exist on disk after the command completes. + post_config_bazel_args+=(--remote_download_toplevel) +fi + +if [[ "${RUNNER_OS:-}" == "Windows" && $windows_cross_compile -eq 1 && -n "${BUILDBUDDY_API_KEY:-}" ]]; then + # `--enable_platform_specific_config` expands `common:windows` on Windows + # hosts after ordinary rc configs, which can override `ci-windows-cross`'s + # RBE host platform. Repeat the host platform on the command line so V8 and + # other genrules execute on Linux RBE workers instead of Git Bash locally. + # + # Bazel also derives the default genrule shell from the client host. Without + # an explicit shell executable, remote Linux actions can be asked to run + # `C:\Program Files\Git\usr\bin\bash.exe`. + post_config_bazel_args+=(--host_platform=//:rbe --shell_executable=/bin/bash) +fi + +if [[ "${RUNNER_OS:-}" == "Windows" && $windows_cross_compile -eq 1 && -z "${BUILDBUDDY_API_KEY:-}" ]]; then + # The Windows cross-compile config depends on remote execution. Fork PRs do + # not receive the BuildBuddy secret, so fall back to the existing local build + # shape and keep its lower concurrency cap. + post_config_bazel_args+=(--jobs=8) +fi + +if [[ -n "${BAZEL_REPO_CONTENTS_CACHE:-}" ]]; then + # Windows self-hosted runners can run multiple Bazel jobs concurrently. Give + # each job its own repo contents cache so they do not fight over the shared + # path configured in `ci-windows`. + post_config_bazel_args+=("--repo_contents_cache=${BAZEL_REPO_CONTENTS_CACHE}") +fi + +if [[ -n "${BAZEL_REPOSITORY_CACHE:-}" ]]; then + post_config_bazel_args+=("--repository_cache=${BAZEL_REPOSITORY_CACHE}") +fi + +if [[ -n "${CODEX_BAZEL_EXECUTION_LOG_COMPACT_DIR:-}" ]]; then + post_config_bazel_args+=( + "--execution_log_compact_file=${CODEX_BAZEL_EXECUTION_LOG_COMPACT_DIR}/execution-log-${bazel_args[0]}-${GITHUB_JOB:-local}-$$.zst" + ) +fi + +if [[ "${RUNNER_OS:-}" == "Windows" ]]; then + pass_windows_build_env=1 + if [[ $windows_cross_compile -eq 1 && -n "${BUILDBUDDY_API_KEY:-}" ]]; then + # Remote build actions execute on Linux RBE workers. Passing the Windows + # runner's build environment there makes Bazel genrules try to execute + # C:\Program Files\Git\usr\bin\bash.exe on Linux. + pass_windows_build_env=0 + fi + + if [[ $pass_windows_build_env -eq 1 ]]; then + windows_action_env_vars=( + INCLUDE + LIB + LIBPATH + UCRTVersion + UniversalCRTSdkDir + VCINSTALLDIR + VCToolsInstallDir + WindowsLibPath + WindowsSdkBinPath + WindowsSdkDir + WindowsSDKLibVersion + WindowsSDKVersion + ) + + for env_var in "${windows_action_env_vars[@]}"; do + if [[ -n "${!env_var:-}" ]]; then + post_config_bazel_args+=("--action_env=${env_var}" "--host_action_env=${env_var}") + fi + done + fi + + if [[ -z "${CODEX_BAZEL_WINDOWS_PATH:-}" ]]; then + echo "CODEX_BAZEL_WINDOWS_PATH must be set for Windows Bazel CI." >&2 + exit 1 + fi + + if [[ $pass_windows_build_env -eq 1 ]]; then + post_config_bazel_args+=( + "--action_env=PATH=${CODEX_BAZEL_WINDOWS_PATH}" + "--host_action_env=PATH=${CODEX_BAZEL_WINDOWS_PATH}" + ) + elif [[ $windows_cross_compile -eq 1 ]]; then + # Remote build actions run on Linux RBE workers. Give their shell snippets + # a Linux PATH while preserving CODEX_BAZEL_WINDOWS_PATH below for local + # Windows test execution. + post_config_bazel_args+=( + "--action_env=PATH=/usr/bin:/bin" + "--host_action_env=PATH=/usr/bin:/bin" + ) + fi + post_config_bazel_args+=("--test_env=PATH=${CODEX_BAZEL_WINDOWS_PATH}") +fi + +bazel_console_log="$(mktemp)" +trap 'rm -f "$bazel_console_log"' EXIT + +bazel_cmd=(bazel) +if (( ${#bazel_startup_args[@]} > 0 )); then + bazel_cmd+=("${bazel_startup_args[@]}") +fi + +if [[ -n "${BUILDBUDDY_API_KEY:-}" ]]; then + echo "BuildBuddy API key is available; using remote Bazel configuration." + # Work around Bazel 9 remote repo contents cache / overlay materialization failures + # seen in CI (for example "is not a symlink" or permission errors while + # materializing external repos such as rules_perl). We still use BuildBuddy for + # remote execution/cache; this only disables the startup-level repo contents cache. + bazel_run_args=( + "${bazel_args[@]}" + "--config=${ci_config}" + "--remote_header=x-buildbuddy-api-key=${BUILDBUDDY_API_KEY}" + ) + if (( ${#post_config_bazel_args[@]} > 0 )); then + bazel_run_args+=("${post_config_bazel_args[@]}") + fi + set +e + run_bazel "${bazel_cmd[@]:1}" \ + --noexperimental_remote_repo_contents_cache \ + "${bazel_run_args[@]}" \ + -- \ + "${bazel_targets[@]}" \ + 2>&1 | tee "$bazel_console_log" + bazel_status=${PIPESTATUS[0]} + set -e +else + echo "BuildBuddy API key is not available; using local Bazel configuration." + # Keep fork/community PRs on Bazel but disable remote services that are + # configured in .bazelrc and require auth. + # + # Flag docs: + # - Command-line reference: https://bazel.build/reference/command-line-reference + # - Remote caching overview: https://bazel.build/remote/caching + # - Remote execution overview: https://bazel.build/remote/rbe + # - Build Event Protocol overview: https://bazel.build/remote/bep + # + # --noexperimental_remote_repo_contents_cache: + # disable remote repo contents cache enabled in .bazelrc startup options. + # https://bazel.build/reference/command-line-reference#startup_options-flag--experimental_remote_repo_contents_cache + # --remote_cache= and --remote_executor=: + # clear remote cache/execution endpoints configured in .bazelrc. + # https://bazel.build/reference/command-line-reference#common_options-flag--remote_cache + # https://bazel.build/reference/command-line-reference#common_options-flag--remote_executor + bazel_run_args=( + "${bazel_args[@]}" + --remote_cache= + --remote_executor= + ) + if (( ${#post_config_bazel_args[@]} > 0 )); then + bazel_run_args+=("${post_config_bazel_args[@]}") + fi + set +e + run_bazel "${bazel_cmd[@]:1}" \ + --noexperimental_remote_repo_contents_cache \ + "${bazel_run_args[@]}" \ + -- \ + "${bazel_targets[@]}" \ + 2>&1 | tee "$bazel_console_log" + bazel_status=${PIPESTATUS[0]} + set -e +fi + +if [[ ${bazel_status:-0} -ne 0 ]]; then + if [[ $print_failed_bazel_action_summary -eq 1 ]]; then + print_bazel_action_failure_summary "$bazel_console_log" + fi + if [[ $print_failed_bazel_test_logs -eq 1 ]]; then + print_bazel_test_log_tails "$bazel_console_log" + fi + exit "$bazel_status" +fi diff --git a/reference/openai-codex/.github/scripts/run-bazel-query-ci.sh b/reference/openai-codex/.github/scripts/run-bazel-query-ci.sh new file mode 100755 index 0000000..dd03b67 --- /dev/null +++ b/reference/openai-codex/.github/scripts/run-bazel-query-ci.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# Run Bazel queries with the same CI startup settings as the main build/test +# invocation so target-discovery queries can reuse the same Bazel server. + +query_args=() +windows_cross_compile=0 +while [[ $# -gt 0 ]]; do + case "$1" in + --windows-cross-compile) + windows_cross_compile=1 + shift + ;; + --) + shift + break + ;; + *) + query_args+=("$1") + shift + ;; + esac +done + +if [[ $# -ne 1 ]]; then + echo "Usage: $0 [--windows-cross-compile] [...] -- " >&2 + exit 1 +fi + +query_expression="$1" + +ci_config=ci-linux +case "${RUNNER_OS:-}" in + macOS) + ci_config=ci-macos + ;; + Windows) + if [[ $windows_cross_compile -eq 1 ]]; then + ci_config=ci-windows-cross + else + ci_config=ci-windows + fi + ;; +esac + +bazel_startup_args=() +if [[ -n "${BAZEL_OUTPUT_USER_ROOT:-}" ]]; then + bazel_startup_args+=("--output_user_root=${BAZEL_OUTPUT_USER_ROOT}") +fi + +run_bazel() { + if [[ "${RUNNER_OS:-}" == "Windows" ]]; then + MSYS2_ARG_CONV_EXCL='*' bazel "$@" + return + fi + + bazel "$@" +} + +bazel_query_args=(--noexperimental_remote_repo_contents_cache query) +if [[ -n "${BUILDBUDDY_API_KEY:-}" ]]; then + bazel_query_args+=( + "--config=${ci_config}" + "--remote_header=x-buildbuddy-api-key=${BUILDBUDDY_API_KEY}" + ) +fi + +if [[ -n "${BAZEL_REPO_CONTENTS_CACHE:-}" ]]; then + bazel_query_args+=("--repo_contents_cache=${BAZEL_REPO_CONTENTS_CACHE}") +fi + +if [[ -n "${BAZEL_REPOSITORY_CACHE:-}" ]]; then + bazel_query_args+=("--repository_cache=${BAZEL_REPOSITORY_CACHE}") +fi + +bazel_query_args+=("${query_args[@]}" "$query_expression") + +if (( ${#bazel_startup_args[@]} > 0 )); then + run_bazel "${bazel_startup_args[@]}" "${bazel_query_args[@]}" +else + run_bazel "${bazel_query_args[@]}" +fi diff --git a/reference/openai-codex/.github/scripts/rusty_v8_bazel.py b/reference/openai-codex/.github/scripts/rusty_v8_bazel.py new file mode 100644 index 0000000..2f46daf --- /dev/null +++ b/reference/openai-codex/.github/scripts/rusty_v8_bazel.py @@ -0,0 +1,412 @@ +#!/usr/bin/env python3 + +from __future__ import annotations + +import argparse +import gzip +import hashlib +import os +import re +import shutil +import subprocess +import sys +import tomllib +from pathlib import Path + +from rusty_v8_module_bazel import ( + RustyV8ChecksumError, + check_module_bazel, + rusty_v8_http_file_versions, + update_module_bazel, +) + + +ROOT = Path(__file__).resolve().parents[2] +MODULE_BAZEL = ROOT / "MODULE.bazel" +RUSTY_V8_CHECKSUMS_DIR = ROOT / "third_party" / "v8" +RELEASE_ARTIFACT_PROFILE = "release" +SANDBOX_ARTIFACT_PROFILE = "ptrcomp_sandbox_release" +ARTIFACT_BAZEL_CONFIGS = ["rusty-v8-upstream-libcxx"] + + +def bazel_remote_args() -> list[str]: + buildbuddy_api_key = os.environ.get("BUILDBUDDY_API_KEY") + if not buildbuddy_api_key: + return [] + return [f"--remote_header=x-buildbuddy-api-key={buildbuddy_api_key}"] + + +def bazel_execroot() -> Path: + result = subprocess.run( + ["bazel", "info", "execution_root"], + cwd=ROOT, + check=True, + capture_output=True, + text=True, + ) + return Path(result.stdout.strip()) + + +def bazel_output_base() -> Path: + result = subprocess.run( + ["bazel", "info", "output_base"], + cwd=ROOT, + check=True, + capture_output=True, + text=True, + ) + return Path(result.stdout.strip()) + + +def bazel_output_path(path: str) -> Path: + if path.startswith("external/"): + return bazel_output_base() / path + return bazel_execroot() / path + + +def bazel_output_files( + platform: str, + labels: list[str], + compilation_mode: str = "fastbuild", + bazel_configs: list[str] | None = None, +) -> list[Path]: + expression = "set(" + " ".join(labels) + ")" + bazel_configs = bazel_configs or [] + result = subprocess.run( + [ + "bazel", + "cquery", + "-c", + compilation_mode, + f"--platforms=@llvm//platforms:{platform}", + *[f"--config={config}" for config in bazel_configs], + *bazel_remote_args(), + "--output=files", + expression, + ], + cwd=ROOT, + check=True, + capture_output=True, + text=True, + ) + return [bazel_output_path(line.strip()) for line in result.stdout.splitlines() if line.strip()] + + +def bazel_build( + platform: str, + labels: list[str], + compilation_mode: str = "fastbuild", + bazel_configs: list[str] | None = None, + download_toplevel: bool = False, +) -> None: + bazel_configs = bazel_configs or [] + download_args = ["--remote_download_toplevel"] if download_toplevel else [] + subprocess.run( + [ + "bazel", + "build", + "-c", + compilation_mode, + f"--platforms=@llvm//platforms:{platform}", + *[f"--config={config}" for config in bazel_configs], + *bazel_remote_args(), + *download_args, + *labels, + ], + cwd=ROOT, + check=True, + ) + + +def ensure_bazel_output_files( + platform: str, + labels: list[str], + compilation_mode: str = "fastbuild", + bazel_configs: list[str] | None = None, +) -> list[Path]: + # Bazel output paths can be reused across config flips, so existence alone + # does not prove the files match the requested flags. + bazel_build( + platform, + labels, + compilation_mode, + bazel_configs, + download_toplevel=True, + ) + outputs = bazel_output_files(platform, labels, compilation_mode, bazel_configs) + missing = [str(path) for path in outputs if not path.exists()] + if missing: + raise SystemExit(f"missing built outputs for {labels}: {missing}") + return outputs + + +def artifact_bazel_configs(bazel_configs: list[str] | None = None) -> list[str]: + configured = list(ARTIFACT_BAZEL_CONFIGS) + for config in bazel_configs or []: + if config not in configured: + configured.append(config) + return configured + + +def release_pair_label(target: str, sandbox: bool = False) -> str: + target_suffix = target.replace("-", "_") + pair_kind = "sandbox_release_pair" if sandbox else "release_pair" + return f"//third_party/v8:rusty_v8_{pair_kind}_{target_suffix}" + + +def resolved_v8_crate_version() -> str: + cargo_lock = tomllib.loads((ROOT / "codex-rs" / "Cargo.lock").read_text()) + versions = sorted( + { + package["version"] + for package in cargo_lock["package"] + if package["name"] == "v8" + } + ) + if len(versions) == 1: + return versions[0] + if len(versions) > 1: + raise SystemExit(f"expected exactly one resolved v8 version, found: {versions}") + + module_bazel = (ROOT / "MODULE.bazel").read_text() + matches = sorted( + set( + re.findall( + r'https://static\.crates\.io/crates/v8/v8-([0-9]+\.[0-9]+\.[0-9]+)\.crate', + module_bazel, + ) + ) + ) + if len(matches) != 1: + raise SystemExit( + "expected exactly one pinned v8 crate version in MODULE.bazel, " + f"found: {matches}" + ) + return matches[0] + + +def rusty_v8_checksum_manifest_path(version: str) -> Path: + return RUSTY_V8_CHECKSUMS_DIR / f"rusty_v8_{version.replace('.', '_')}.sha256" + + +def command_version(version: str | None) -> str: + if version is not None: + return version + + manifest_versions = rusty_v8_http_file_versions(MODULE_BAZEL.read_text()) + if len(manifest_versions) == 1: + return manifest_versions[0] + if len(manifest_versions) > 1: + raise SystemExit( + "expected at most one rusty_v8 http_file version in MODULE.bazel, " + f"found: {manifest_versions}; pass --version explicitly" + ) + + return resolved_v8_crate_version() + + +def command_manifest_path(manifest: Path | None, version: str) -> Path: + if manifest is None: + return rusty_v8_checksum_manifest_path(version) + if manifest.is_absolute(): + return manifest + return ROOT / manifest + + +def staged_archive_name(target: str, source_path: Path, artifact_profile: str) -> str: + if target.endswith("-pc-windows-msvc"): + return f"rusty_v8_{artifact_profile}_{target}.lib.gz" + return f"librusty_v8_{artifact_profile}_{target}.a.gz" + + +def staged_binding_name(target: str, artifact_profile: str) -> str: + return f"src_binding_{artifact_profile}_{target}.rs" + + +def staged_checksums_name(target: str, artifact_profile: str) -> str: + return f"rusty_v8_{artifact_profile}_{target}.sha256" + + +def stage_artifacts( + target: str, + lib_path: Path, + binding_path: Path, + output_dir: Path, + sandbox: bool, +) -> None: + missing_paths = [str(path) for path in [lib_path, binding_path] if not path.exists()] + if missing_paths: + raise SystemExit(f"missing release outputs for {target}: {missing_paths}") + + output_dir.mkdir(parents=True, exist_ok=True) + artifact_profile = SANDBOX_ARTIFACT_PROFILE if sandbox else RELEASE_ARTIFACT_PROFILE + staged_library = output_dir / staged_archive_name(target, lib_path, artifact_profile) + staged_binding = output_dir / staged_binding_name(target, artifact_profile) + + with lib_path.open("rb") as src, staged_library.open("wb") as dst: + with gzip.GzipFile( + filename="", + mode="wb", + fileobj=dst, + compresslevel=6, + mtime=0, + ) as gz: + shutil.copyfileobj(src, gz) + + shutil.copyfile(binding_path, staged_binding) + + staged_checksums = output_dir / staged_checksums_name(target, artifact_profile) + with staged_checksums.open("w", encoding="utf-8") as checksums: + for path in [staged_library, staged_binding]: + digest = hashlib.sha256() + with path.open("rb") as artifact: + for chunk in iter(lambda: artifact.read(1024 * 1024), b""): + digest.update(chunk) + checksums.write(f"{digest.hexdigest()} {path.name}\n") + + print(staged_library) + print(staged_binding) + print(staged_checksums) + + +def upstream_release_pair_paths(source_root: Path, target: str) -> tuple[Path, Path]: + lib_name = "rusty_v8.lib" if target.endswith("-pc-windows-msvc") else "librusty_v8.a" + gn_out = source_root / "target" / target / "release" / "gn_out" + return gn_out / "obj" / lib_name, gn_out / "src_binding.rs" + + +def stage_upstream_release_pair( + source_root: Path, + target: str, + output_dir: Path, + sandbox: bool = False, +) -> None: + lib_path, binding_path = upstream_release_pair_paths(source_root, target) + stage_artifacts(target, lib_path, binding_path, output_dir, sandbox) + + +def stage_release_pair( + platform: str, + target: str, + output_dir: Path, + compilation_mode: str = "fastbuild", + bazel_configs: list[str] | None = None, + sandbox: bool = False, +) -> None: + bazel_configs = artifact_bazel_configs(bazel_configs) + outputs = ensure_bazel_output_files( + platform, + [release_pair_label(target, sandbox)], + compilation_mode, + bazel_configs, + ) + + try: + lib_path = next(path for path in outputs if path.suffix in {".a", ".lib"}) + except StopIteration as exc: + raise SystemExit(f"missing static library output for {target}") from exc + + try: + binding_path = next(path for path in outputs if path.suffix == ".rs") + except StopIteration as exc: + raise SystemExit(f"missing Rust binding output for {target}") from exc + + stage_artifacts(target, lib_path, binding_path, output_dir, sandbox) + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers(dest="command", required=True) + + stage_release_pair_parser = subparsers.add_parser("stage-release-pair") + stage_release_pair_parser.add_argument("--platform", required=True) + stage_release_pair_parser.add_argument("--target", required=True) + stage_release_pair_parser.add_argument("--output-dir", required=True) + stage_release_pair_parser.add_argument("--sandbox", action="store_true") + stage_release_pair_parser.add_argument( + "--bazel-config", + action="append", + default=[], + dest="bazel_configs", + ) + stage_release_pair_parser.add_argument( + "--compilation-mode", + default="fastbuild", + choices=["fastbuild", "opt", "dbg"], + ) + + stage_upstream_release_pair_parser = subparsers.add_parser( + "stage-upstream-release-pair" + ) + stage_upstream_release_pair_parser.add_argument("--source-root", type=Path, required=True) + stage_upstream_release_pair_parser.add_argument("--target", required=True) + stage_upstream_release_pair_parser.add_argument("--output-dir", required=True) + stage_upstream_release_pair_parser.add_argument("--sandbox", action="store_true") + + subparsers.add_parser("resolved-v8-crate-version") + + check_module_bazel_parser = subparsers.add_parser("check-module-bazel") + check_module_bazel_parser.add_argument("--version") + check_module_bazel_parser.add_argument("--manifest", type=Path) + check_module_bazel_parser.add_argument( + "--module-bazel", + type=Path, + default=MODULE_BAZEL, + ) + + update_module_bazel_parser = subparsers.add_parser("update-module-bazel") + update_module_bazel_parser.add_argument("--version") + update_module_bazel_parser.add_argument("--manifest", type=Path) + update_module_bazel_parser.add_argument( + "--module-bazel", + type=Path, + default=MODULE_BAZEL, + ) + + return parser.parse_args() + + +def main() -> int: + args = parse_args() + if args.command == "stage-release-pair": + stage_release_pair( + platform=args.platform, + target=args.target, + output_dir=Path(args.output_dir), + compilation_mode=args.compilation_mode, + bazel_configs=args.bazel_configs, + sandbox=args.sandbox, + ) + return 0 + if args.command == "stage-upstream-release-pair": + stage_upstream_release_pair( + source_root=args.source_root, + target=args.target, + output_dir=Path(args.output_dir), + sandbox=args.sandbox, + ) + return 0 + if args.command == "resolved-v8-crate-version": + print(resolved_v8_crate_version()) + return 0 + if args.command == "check-module-bazel": + version = command_version(args.version) + manifest_path = command_manifest_path(args.manifest, version) + try: + check_module_bazel(args.module_bazel, manifest_path, version) + except RustyV8ChecksumError as exc: + raise SystemExit(str(exc)) from exc + return 0 + if args.command == "update-module-bazel": + version = command_version(args.version) + manifest_path = command_manifest_path(args.manifest, version) + try: + update_module_bazel(args.module_bazel, manifest_path, version) + except RustyV8ChecksumError as exc: + raise SystemExit(str(exc)) from exc + return 0 + raise SystemExit(f"unsupported command: {args.command}") + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/reference/openai-codex/.github/scripts/rusty_v8_module_bazel.py b/reference/openai-codex/.github/scripts/rusty_v8_module_bazel.py new file mode 100644 index 0000000..5d5dec0 --- /dev/null +++ b/reference/openai-codex/.github/scripts/rusty_v8_module_bazel.py @@ -0,0 +1,243 @@ +#!/usr/bin/env python3 + +from __future__ import annotations + +import re +from dataclasses import dataclass +from pathlib import Path + + +SHA256_RE = re.compile(r"[0-9a-f]{64}") +HTTP_FILE_BLOCK_RE = re.compile(r"(?ms)^http_file\(\n.*?^\)\n?") +HTTP_FILE_VERSION_RE = re.compile(r"^rusty_v8_([0-9]+)_([0-9]+)_([0-9]+)_") + + +class RustyV8ChecksumError(ValueError): + pass + + +@dataclass(frozen=True) +class RustyV8HttpFile: + start: int + end: int + block: str + name: str + downloaded_file_path: str + sha256: str | None + + +def parse_checksum_manifest(path: Path) -> dict[str, str]: + try: + lines = path.read_text(encoding="utf-8").splitlines() + except FileNotFoundError as exc: + raise RustyV8ChecksumError(f"missing checksum manifest: {path}") from exc + + checksums: dict[str, str] = {} + for line_number, line in enumerate(lines, 1): + if not line.strip(): + continue + parts = line.split() + if len(parts) != 2: + raise RustyV8ChecksumError( + f"{path}:{line_number}: expected ' '" + ) + checksum, filename = parts + if not SHA256_RE.fullmatch(checksum): + raise RustyV8ChecksumError( + f"{path}:{line_number}: invalid SHA-256 digest for {filename}" + ) + if not filename or filename in {".", ".."} or "/" in filename: + raise RustyV8ChecksumError( + f"{path}:{line_number}: expected a bare artifact filename" + ) + if filename in checksums: + raise RustyV8ChecksumError( + f"{path}:{line_number}: duplicate checksum for {filename}" + ) + checksums[filename] = checksum + + if not checksums: + raise RustyV8ChecksumError(f"empty checksum manifest: {path}") + return checksums + + +def string_field(block: str, field: str) -> str | None: + # Matches one-line string fields inside http_file blocks, e.g. `sha256 = "...",`. + match = re.search(rf'^\s*{re.escape(field)}\s*=\s*"([^"]+)",\s*$', block, re.M) + if match: + return match.group(1) + return None + + +def rusty_v8_http_files(module_bazel: str, version: str) -> list[RustyV8HttpFile]: + version_slug = version.replace(".", "_") + name_prefix = f"rusty_v8_{version_slug}_" + entries = [] + for match in HTTP_FILE_BLOCK_RE.finditer(module_bazel): + block = match.group(0) + name = string_field(block, "name") + if not name or not name.startswith(name_prefix): + continue + downloaded_file_path = string_field(block, "downloaded_file_path") + if not downloaded_file_path: + raise RustyV8ChecksumError( + f"MODULE.bazel {name} is missing downloaded_file_path" + ) + entries.append( + RustyV8HttpFile( + start=match.start(), + end=match.end(), + block=block, + name=name, + downloaded_file_path=downloaded_file_path, + sha256=string_field(block, "sha256"), + ) + ) + return entries + + +def rusty_v8_http_file_versions(module_bazel: str) -> list[str]: + versions = set() + for match in HTTP_FILE_BLOCK_RE.finditer(module_bazel): + name = string_field(match.group(0), "name") + if not name: + continue + version_match = HTTP_FILE_VERSION_RE.match(name) + if version_match: + versions.add(".".join(version_match.groups())) + return sorted(versions) + + +def module_entry_set_errors( + entries: list[RustyV8HttpFile], + checksums: dict[str, str], + version: str, +) -> list[str]: + errors = [] + if not entries: + errors.append(f"MODULE.bazel has no rusty_v8 http_file entries for {version}") + return errors + + module_files: dict[str, RustyV8HttpFile] = {} + duplicate_files = set() + for entry in entries: + if entry.downloaded_file_path in module_files: + duplicate_files.add(entry.downloaded_file_path) + module_files[entry.downloaded_file_path] = entry + + for filename in sorted(duplicate_files): + errors.append(f"MODULE.bazel has duplicate http_file entries for {filename}") + + for filename in sorted(set(module_files) - set(checksums)): + entry = module_files[filename] + errors.append(f"MODULE.bazel {entry.name} has no checksum in the manifest") + + for filename in sorted(set(checksums) - set(module_files)): + errors.append(f"manifest has {filename}, but MODULE.bazel has no http_file") + + return errors + + +def module_checksum_errors( + entries: list[RustyV8HttpFile], + checksums: dict[str, str], +) -> list[str]: + errors = [] + for entry in entries: + expected = checksums.get(entry.downloaded_file_path) + if expected is None: + continue + if entry.sha256 is None: + errors.append(f"MODULE.bazel {entry.name} is missing sha256") + elif entry.sha256 != expected: + errors.append( + f"MODULE.bazel {entry.name} has sha256 {entry.sha256}, " + f"expected {expected}" + ) + return errors + + +def raise_checksum_errors(message: str, errors: list[str]) -> None: + if errors: + formatted_errors = "\n".join(f"- {error}" for error in errors) + raise RustyV8ChecksumError(f"{message}:\n{formatted_errors}") + + +def check_module_bazel_text( + module_bazel: str, + checksums: dict[str, str], + version: str, +) -> None: + entries = rusty_v8_http_files(module_bazel, version) + errors = [ + *module_entry_set_errors(entries, checksums, version), + *module_checksum_errors(entries, checksums), + ] + raise_checksum_errors("rusty_v8 MODULE.bazel checksum drift", errors) + + +def block_with_sha256(block: str, checksum: str) -> str: + sha256_line_re = re.compile(r'(?m)^(\s*)sha256\s*=\s*"[0-9a-f]+",\s*$') + if sha256_line_re.search(block): + return sha256_line_re.sub( + lambda match: f'{match.group(1)}sha256 = "{checksum}",', + block, + count=1, + ) + + downloaded_file_path_match = re.search( + r'(?m)^(\s*)downloaded_file_path\s*=\s*"[^"]+",\n', + block, + ) + if not downloaded_file_path_match: + raise RustyV8ChecksumError("http_file block is missing downloaded_file_path") + insert_at = downloaded_file_path_match.end() + indent = downloaded_file_path_match.group(1) + return f'{block[:insert_at]}{indent}sha256 = "{checksum}",\n{block[insert_at:]}' + + +def update_module_bazel_text( + module_bazel: str, + checksums: dict[str, str], + version: str, +) -> str: + entries = rusty_v8_http_files(module_bazel, version) + errors = module_entry_set_errors(entries, checksums, version) + raise_checksum_errors("cannot update rusty_v8 MODULE.bazel checksums", errors) + + updated = [] + previous_end = 0 + for entry in entries: + updated.append(module_bazel[previous_end : entry.start]) + updated.append( + block_with_sha256(entry.block, checksums[entry.downloaded_file_path]) + ) + previous_end = entry.end + updated.append(module_bazel[previous_end:]) + return "".join(updated) + + +def check_module_bazel( + module_bazel_path: Path, + manifest_path: Path, + version: str, +) -> None: + checksums = parse_checksum_manifest(manifest_path) + module_bazel = module_bazel_path.read_text(encoding="utf-8") + check_module_bazel_text(module_bazel, checksums, version) + print(f"{module_bazel_path} rusty_v8 {version} checksums match {manifest_path}") + + +def update_module_bazel( + module_bazel_path: Path, + manifest_path: Path, + version: str, +) -> None: + checksums = parse_checksum_manifest(manifest_path) + module_bazel = module_bazel_path.read_text(encoding="utf-8") + updated_module_bazel = update_module_bazel_text(module_bazel, checksums, version) + if updated_module_bazel == module_bazel: + print(f"{module_bazel_path} rusty_v8 {version} checksums are already current") + return + module_bazel_path.write_text(updated_module_bazel, encoding="utf-8") + print(f"updated {module_bazel_path} rusty_v8 {version} checksums") diff --git a/reference/openai-codex/.github/scripts/setup-dev-drive.ps1 b/reference/openai-codex/.github/scripts/setup-dev-drive.ps1 new file mode 100644 index 0000000..2b94e1b --- /dev/null +++ b/reference/openai-codex/.github/scripts/setup-dev-drive.ps1 @@ -0,0 +1,62 @@ +# Configure a fast drive for Windows CI jobs. +# +# GitHub-hosted Windows runners do not always expose a secondary D: volume. When +# they do not, try to create a Dev Drive VHD and fall back to C: if the runner +# image does not allow that provisioning path. + +function Use-FallbackDrive { + param([string]$Reason) + + Write-Warning "$Reason Falling back to C:" + return "C:" +} + +function Invoke-BestEffort { + param([scriptblock]$Script, [string]$Description) + + try { + & $Script + } catch { + Write-Warning "$Description failed: $($_.Exception.Message)" + } +} + +if (Test-Path "D:\") { + Write-Output "Using existing drive at D:" + $Drive = "D:" +} else { + try { + $VhdPath = Join-Path $env:RUNNER_TEMP "codex-dev-drive.vhdx" + $SizeBytes = 64GB + + if (Test-Path $VhdPath) { + Remove-Item -Path $VhdPath -Force + } + + New-VHD -Path $VhdPath -SizeBytes $SizeBytes -Dynamic -ErrorAction Stop | Out-Null + $Mounted = Mount-VHD -Path $VhdPath -Passthru -ErrorAction Stop + $Disk = $Mounted | Get-Disk -ErrorAction Stop + $Disk | Initialize-Disk -PartitionStyle GPT -ErrorAction Stop + $Partition = $Disk | New-Partition -AssignDriveLetter -UseMaximumSize -ErrorAction Stop + $Volume = $Partition | Format-Volume -FileSystem ReFS -NewFileSystemLabel "CodexDevDrive" -DevDrive -Confirm:$false -Force -ErrorAction Stop + + $Drive = "$($Volume.DriveLetter):" + + Invoke-BestEffort { fsutil devdrv trust $Drive } "Trusting Dev Drive $Drive" + Invoke-BestEffort { fsutil devdrv enable /disallowAv } "Disabling AV filter attachment for Dev Drives" + Invoke-BestEffort { fsutil devdrv query $Drive } "Querying Dev Drive $Drive" + + Write-Output "Using Dev Drive at $Drive" + } catch { + $Drive = Use-FallbackDrive "Failed to create Dev Drive: $($_.Exception.Message)" + } +} + +$Tmp = "$Drive\codex-tmp" +New-Item -Path $Tmp -ItemType Directory -Force | Out-Null + +@( + "DEV_DRIVE=$Drive" + "TMP=$Tmp" + "TEMP=$Tmp" +) | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append diff --git a/reference/openai-codex/.github/scripts/test_rusty_v8_bazel.py b/reference/openai-codex/.github/scripts/test_rusty_v8_bazel.py new file mode 100644 index 0000000..19690db --- /dev/null +++ b/reference/openai-codex/.github/scripts/test_rusty_v8_bazel.py @@ -0,0 +1,413 @@ +#!/usr/bin/env python3 + +from __future__ import annotations + +import textwrap +import unittest +from os import environ +from pathlib import Path +from tempfile import TemporaryDirectory +from unittest.mock import patch + +import rusty_v8_bazel +import rusty_v8_module_bazel + + +class RustyV8BazelTest(unittest.TestCase): + def test_consumer_selectors_track_resolved_crate_version(self) -> None: + build_bazel = ( + rusty_v8_bazel.ROOT / "third_party" / "v8" / "BUILD.bazel" + ).read_text() + version_suffix = rusty_v8_bazel.resolved_v8_crate_version().replace(".", "_") + + for selector in [ + "aarch64_apple_darwin_bazel", + "aarch64_pc_windows_gnullvm", + "aarch64_pc_windows_msvc", + "aarch64_unknown_linux_gnu_bazel", + "aarch64_unknown_linux_musl_release_base", + "x86_64_apple_darwin_bazel", + "x86_64_pc_windows_gnullvm", + "x86_64_pc_windows_msvc", + "x86_64_unknown_linux_gnu_bazel", + "x86_64_unknown_linux_musl_release", + ]: + self.assertIn( + f":v8_{version_suffix}_{selector}", + build_bazel, + ) + + for selector in [ + "aarch64_apple_darwin", + "aarch64_pc_windows_gnullvm", + "aarch64_pc_windows_msvc", + "aarch64_unknown_linux_gnu", + "aarch64_unknown_linux_musl", + "x86_64_apple_darwin", + "x86_64_pc_windows_gnullvm", + "x86_64_pc_windows_msvc", + "x86_64_unknown_linux_gnu", + "x86_64_unknown_linux_musl", + ]: + self.assertIn( + f":src_binding_release_{selector}_{version_suffix}_release", + build_bazel, + ) + + def test_command_version_tracks_remaining_http_file_assets(self) -> None: + with TemporaryDirectory() as temp_dir: + module_bazel = Path(temp_dir) / "MODULE.bazel" + module_bazel.write_text( + textwrap.dedent( + """\ + http_file( + name = "rusty_v8_146_4_0_x86_64_unknown_linux_gnu_archive", + downloaded_file_path = "librusty_v8_release_x86_64-unknown-linux-gnu.a.gz", + urls = ["https://example.test/archive.gz"], + ) + """ + ) + ) + + with patch.object(rusty_v8_bazel, "MODULE_BAZEL", module_bazel): + self.assertEqual("146.4.0", rusty_v8_bazel.command_version(None)) + + def test_artifact_bazel_configs_always_enable_upstream_libcxx(self) -> None: + self.assertEqual( + ["rusty-v8-upstream-libcxx"], + rusty_v8_bazel.artifact_bazel_configs(), + ) + self.assertEqual( + ["rusty-v8-upstream-libcxx", "v8-release-compat"], + rusty_v8_bazel.artifact_bazel_configs(["v8-release-compat"]), + ) + self.assertEqual( + ["rusty-v8-upstream-libcxx", "v8-release-compat"], + rusty_v8_bazel.artifact_bazel_configs( + ["rusty-v8-upstream-libcxx", "v8-release-compat"] + ), + ) + + def test_bazel_remote_args_include_buildbuddy_header_when_present(self) -> None: + with patch.dict(environ, {"BUILDBUDDY_API_KEY": "token"}, clear=False): + self.assertEqual( + ["--remote_header=x-buildbuddy-api-key=token"], + rusty_v8_bazel.bazel_remote_args(), + ) + + with patch.dict(environ, {}, clear=True): + self.assertEqual([], rusty_v8_bazel.bazel_remote_args()) + + def test_release_pair_labels_and_staged_names_distinguish_sandbox_artifacts(self) -> None: + self.assertEqual( + "//third_party/v8:rusty_v8_release_pair_x86_64_unknown_linux_musl", + rusty_v8_bazel.release_pair_label("x86_64-unknown-linux-musl"), + ) + self.assertEqual( + "//third_party/v8:rusty_v8_sandbox_release_pair_x86_64_unknown_linux_musl", + rusty_v8_bazel.release_pair_label("x86_64-unknown-linux-musl", sandbox=True), + ) + self.assertEqual( + "//third_party/v8:rusty_v8_sandbox_release_pair_x86_64_apple_darwin", + rusty_v8_bazel.release_pair_label("x86_64-apple-darwin", sandbox=True), + ) + self.assertEqual( + "librusty_v8_release_x86_64-unknown-linux-musl.a.gz", + rusty_v8_bazel.staged_archive_name( + "x86_64-unknown-linux-musl", + Path("libv8.a"), + rusty_v8_bazel.RELEASE_ARTIFACT_PROFILE, + ), + ) + self.assertEqual( + "rusty_v8_ptrcomp_sandbox_release_x86_64-pc-windows-msvc.lib.gz", + rusty_v8_bazel.staged_archive_name( + "x86_64-pc-windows-msvc", + Path("v8.a"), + rusty_v8_bazel.SANDBOX_ARTIFACT_PROFILE, + ), + ) + self.assertEqual( + "src_binding_ptrcomp_sandbox_release_x86_64-unknown-linux-musl.rs", + rusty_v8_bazel.staged_binding_name( + "x86_64-unknown-linux-musl", + rusty_v8_bazel.SANDBOX_ARTIFACT_PROFILE, + ), + ) + self.assertEqual( + "rusty_v8_ptrcomp_sandbox_release_x86_64-unknown-linux-musl.sha256", + rusty_v8_bazel.staged_checksums_name( + "x86_64-unknown-linux-musl", + rusty_v8_bazel.SANDBOX_ARTIFACT_PROFILE, + ), + ) + + def test_stage_artifacts(self) -> None: + with TemporaryDirectory() as source_dir, TemporaryDirectory() as output_dir: + source_root = Path(source_dir) + archive = source_root / "librusty_v8.a" + binding = source_root / "src_binding.rs" + archive.write_bytes(b"archive") + binding.write_text("binding") + + rusty_v8_bazel.stage_artifacts( + "aarch64-apple-darwin", + archive, + binding, + Path(output_dir), + sandbox=True, + ) + + self.assertEqual( + { + "librusty_v8_ptrcomp_sandbox_release_aarch64-apple-darwin.a.gz", + "src_binding_ptrcomp_sandbox_release_aarch64-apple-darwin.rs", + "rusty_v8_ptrcomp_sandbox_release_aarch64-apple-darwin.sha256", + }, + {path.name for path in Path(output_dir).iterdir()}, + ) + + def test_upstream_release_pair_paths(self) -> None: + self.assertEqual( + ( + Path( + "/tmp/rusty_v8/target/x86_64-apple-darwin/release/gn_out/obj/" + "librusty_v8.a" + ), + Path( + "/tmp/rusty_v8/target/x86_64-apple-darwin/release/gn_out/" + "src_binding.rs" + ), + ), + rusty_v8_bazel.upstream_release_pair_paths( + Path("/tmp/rusty_v8"), + "x86_64-apple-darwin", + ), + ) + self.assertEqual( + ( + Path( + "/tmp/rusty_v8/target/x86_64-pc-windows-msvc/release/gn_out/" + "obj/rusty_v8.lib" + ), + Path( + "/tmp/rusty_v8/target/x86_64-pc-windows-msvc/release/gn_out/" + "src_binding.rs" + ), + ), + rusty_v8_bazel.upstream_release_pair_paths( + Path("/tmp/rusty_v8"), + "x86_64-pc-windows-msvc", + ), + ) + + def test_stage_upstream_release_pair(self) -> None: + with TemporaryDirectory() as source_dir, TemporaryDirectory() as output_dir: + source_root = Path(source_dir) + gn_out = ( + source_root + / "target" + / "x86_64-pc-windows-msvc" + / "release" + / "gn_out" + ) + (gn_out / "obj").mkdir(parents=True) + (gn_out / "obj" / "rusty_v8.lib").write_bytes(b"archive") + (gn_out / "src_binding.rs").write_text("binding") + + rusty_v8_bazel.stage_upstream_release_pair( + source_root, + "x86_64-pc-windows-msvc", + Path(output_dir), + sandbox=True, + ) + + self.assertEqual( + { + "rusty_v8_ptrcomp_sandbox_release_x86_64-pc-windows-msvc.lib.gz", + "src_binding_ptrcomp_sandbox_release_x86_64-pc-windows-msvc.rs", + "rusty_v8_ptrcomp_sandbox_release_x86_64-pc-windows-msvc.sha256", + }, + {path.name for path in Path(output_dir).iterdir()}, + ) + + def test_ensure_bazel_output_files_rebuilds_existing_outputs(self) -> None: + with TemporaryDirectory() as output_dir: + output = Path(output_dir) / "libv8.a" + output.write_bytes(b"archive") + + with ( + patch.object(rusty_v8_bazel, "bazel_build") as bazel_build, + patch.object( + rusty_v8_bazel, + "bazel_output_files", + return_value=[output], + ) as bazel_output_files, + ): + self.assertEqual( + [output], + rusty_v8_bazel.ensure_bazel_output_files( + "macos_arm64", + ["//third_party/v8:pair"], + "opt", + ["rusty-v8-upstream-libcxx"], + ), + ) + + bazel_build.assert_called_once_with( + "macos_arm64", + ["//third_party/v8:pair"], + "opt", + ["rusty-v8-upstream-libcxx"], + download_toplevel=True, + ) + bazel_output_files.assert_called_once_with( + "macos_arm64", + ["//third_party/v8:pair"], + "opt", + ["rusty-v8-upstream-libcxx"], + ) + + def test_update_module_bazel_replaces_and_inserts_sha256(self) -> None: + module_bazel = textwrap.dedent( + """\ + http_file( + name = "rusty_v8_146_4_0_x86_64_unknown_linux_gnu_archive", + downloaded_file_path = "librusty_v8_release_x86_64-unknown-linux-gnu.a.gz", + sha256 = "0000000000000000000000000000000000000000000000000000000000000000", + urls = [ + "https://example.test/librusty_v8_release_x86_64-unknown-linux-gnu.a.gz", + ], + ) + + http_file( + name = "rusty_v8_146_4_0_x86_64_unknown_linux_musl_binding", + downloaded_file_path = "src_binding_release_x86_64-unknown-linux-musl.rs", + urls = [ + "https://example.test/src_binding_release_x86_64-unknown-linux-musl.rs", + ], + ) + + http_file( + name = "rusty_v8_145_0_0_x86_64_unknown_linux_gnu_archive", + downloaded_file_path = "librusty_v8_release_x86_64-unknown-linux-gnu.a.gz", + sha256 = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + urls = [ + "https://example.test/old.gz", + ], + ) + """ + ) + checksums = { + "librusty_v8_release_x86_64-unknown-linux-gnu.a.gz": ( + "1111111111111111111111111111111111111111111111111111111111111111" + ), + "src_binding_release_x86_64-unknown-linux-musl.rs": ( + "2222222222222222222222222222222222222222222222222222222222222222" + ), + } + + updated = rusty_v8_module_bazel.update_module_bazel_text( + module_bazel, + checksums, + "146.4.0", + ) + + self.assertEqual( + textwrap.dedent( + """\ + http_file( + name = "rusty_v8_146_4_0_x86_64_unknown_linux_gnu_archive", + downloaded_file_path = "librusty_v8_release_x86_64-unknown-linux-gnu.a.gz", + sha256 = "1111111111111111111111111111111111111111111111111111111111111111", + urls = [ + "https://example.test/librusty_v8_release_x86_64-unknown-linux-gnu.a.gz", + ], + ) + + http_file( + name = "rusty_v8_146_4_0_x86_64_unknown_linux_musl_binding", + downloaded_file_path = "src_binding_release_x86_64-unknown-linux-musl.rs", + sha256 = "2222222222222222222222222222222222222222222222222222222222222222", + urls = [ + "https://example.test/src_binding_release_x86_64-unknown-linux-musl.rs", + ], + ) + + http_file( + name = "rusty_v8_145_0_0_x86_64_unknown_linux_gnu_archive", + downloaded_file_path = "librusty_v8_release_x86_64-unknown-linux-gnu.a.gz", + sha256 = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + urls = [ + "https://example.test/old.gz", + ], + ) + """ + ), + updated, + ) + rusty_v8_module_bazel.check_module_bazel_text(updated, checksums, "146.4.0") + + def test_check_module_bazel_rejects_manifest_drift(self) -> None: + module_bazel = textwrap.dedent( + """\ + http_file( + name = "rusty_v8_146_4_0_x86_64_unknown_linux_gnu_archive", + downloaded_file_path = "librusty_v8_release_x86_64-unknown-linux-gnu.a.gz", + sha256 = "1111111111111111111111111111111111111111111111111111111111111111", + urls = [ + "https://example.test/librusty_v8_release_x86_64-unknown-linux-gnu.a.gz", + ], + ) + """ + ) + checksums = { + "librusty_v8_release_x86_64-unknown-linux-gnu.a.gz": ( + "1111111111111111111111111111111111111111111111111111111111111111" + ), + "orphan.gz": ( + "2222222222222222222222222222222222222222222222222222222222222222" + ), + } + + with self.assertRaisesRegex( + rusty_v8_module_bazel.RustyV8ChecksumError, + "manifest has orphan.gz", + ): + rusty_v8_module_bazel.check_module_bazel_text( + module_bazel, + checksums, + "146.4.0", + ) + + def test_rusty_v8_http_file_versions(self) -> None: + module_bazel = textwrap.dedent( + """\ + http_file( + name = "rusty_v8_146_4_0_x86_64_unknown_linux_gnu_archive", + downloaded_file_path = "archive.gz", + urls = ["https://example.test/archive.gz"], + ) + + http_file( + name = "rusty_v8_147_4_0_x86_64_unknown_linux_gnu_archive", + downloaded_file_path = "new-archive.gz", + urls = ["https://example.test/new-archive.gz"], + ) + + http_file( + name = "unrelated_archive", + downloaded_file_path = "other.gz", + urls = ["https://example.test/other.gz"], + ) + """ + ) + + self.assertEqual( + ["146.4.0", "147.4.0"], + rusty_v8_module_bazel.rusty_v8_http_file_versions(module_bazel), + ) + + +if __name__ == "__main__": + unittest.main() diff --git a/reference/openai-codex/.github/scripts/verify_bazel_clippy_lints.py b/reference/openai-codex/.github/scripts/verify_bazel_clippy_lints.py new file mode 100644 index 0000000..6b27973 --- /dev/null +++ b/reference/openai-codex/.github/scripts/verify_bazel_clippy_lints.py @@ -0,0 +1,234 @@ +#!/usr/bin/env python3 + +from __future__ import annotations + +import argparse +import re +import sys +import tomllib +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[2] +DEFAULT_CARGO_TOML = ROOT / "codex-rs" / "Cargo.toml" +DEFAULT_BAZELRC = ROOT / ".bazelrc" +BAZEL_CLIPPY_FLAG_PREFIX = "build:clippy --@rules_rust//rust/settings:clippy_flag=" +BAZEL_SPECIAL_FLAGS = {"-Dwarnings"} +VALID_LEVELS = {"allow", "warn", "deny", "forbid"} +LONG_FLAG_RE = re.compile( + r"^--(?Pallow|warn|deny|forbid)=clippy::(?P[a-z0-9_]+)$" +) +SHORT_FLAG_RE = re.compile(r"^-(?P[AWDF])clippy::(?P[a-z0-9_]+)$") +SHORT_LEVEL_NAMES = { + "A": "allow", + "W": "warn", + "D": "deny", + "F": "forbid", +} + + +def main() -> int: + parser = argparse.ArgumentParser( + description=( + "Verify that Bazel clippy flags in .bazelrc stay in sync with " + "codex-rs/Cargo.toml [workspace.lints.clippy]." + ) + ) + parser.add_argument( + "--cargo-toml", + type=Path, + default=DEFAULT_CARGO_TOML, + help="Path to the workspace Cargo.toml to inspect.", + ) + parser.add_argument( + "--bazelrc", + type=Path, + default=DEFAULT_BAZELRC, + help="Path to the .bazelrc file to inspect.", + ) + args = parser.parse_args() + + cargo_toml = args.cargo_toml.resolve() + bazelrc = args.bazelrc.resolve() + + cargo_lints = load_workspace_clippy_lints(cargo_toml) + bazel_lints = load_bazel_clippy_lints(bazelrc) + + missing = sorted(cargo_lints.keys() - bazel_lints.keys()) + extra = sorted(bazel_lints.keys() - cargo_lints.keys()) + mismatched = sorted( + lint + for lint in cargo_lints.keys() & bazel_lints.keys() + if cargo_lints[lint] != bazel_lints[lint] + ) + + if missing or extra or mismatched: + print_sync_error( + cargo_toml=cargo_toml, + bazelrc=bazelrc, + cargo_lints=cargo_lints, + bazel_lints=bazel_lints, + missing=missing, + extra=extra, + mismatched=mismatched, + ) + return 1 + + print( + "Bazel clippy flags in " + f"{display_path(bazelrc)} match " + f"{display_path(cargo_toml)} [workspace.lints.clippy]." + ) + return 0 + + +def load_workspace_clippy_lints(cargo_toml: Path) -> dict[str, str]: + workspace = tomllib.loads(cargo_toml.read_text())["workspace"] + clippy_lints = workspace["lints"]["clippy"] + parsed: dict[str, str] = {} + for lint, level in clippy_lints.items(): + if not isinstance(level, str): + raise SystemExit( + f"expected string lint level for clippy::{lint} in {cargo_toml}, got {level!r}" + ) + normalized = level.strip().lower() + if normalized not in VALID_LEVELS: + raise SystemExit( + f"unsupported lint level {level!r} for clippy::{lint} in {cargo_toml}" + ) + parsed[lint] = normalized + return parsed + + +def load_bazel_clippy_lints(bazelrc: Path) -> dict[str, str]: + parsed: dict[str, str] = {} + line_numbers: dict[str, int] = {} + + for lineno, line in enumerate(bazelrc.read_text().splitlines(), start=1): + if not line.startswith(BAZEL_CLIPPY_FLAG_PREFIX): + continue + + flag = line.removeprefix(BAZEL_CLIPPY_FLAG_PREFIX).strip() + if flag in BAZEL_SPECIAL_FLAGS: + continue + + parsed_flag = parse_bazel_lint_flag(flag) + if parsed_flag is None: + continue + + lint, level = parsed_flag + if lint in parsed: + raise SystemExit( + f"duplicate Bazel clippy entry for clippy::{lint} at " + f"{bazelrc}:{line_numbers[lint]} and {bazelrc}:{lineno}" + ) + parsed[lint] = level + line_numbers[lint] = lineno + + return parsed + + +def parse_bazel_lint_flag(flag: str) -> tuple[str, str] | None: + long_match = LONG_FLAG_RE.match(flag) + if long_match: + return long_match["lint"], long_match["level"] + + short_match = SHORT_FLAG_RE.match(flag) + if short_match: + return short_match["lint"], SHORT_LEVEL_NAMES[short_match["level"]] + + return None + + +def print_sync_error( + *, + cargo_toml: Path, + bazelrc: Path, + cargo_lints: dict[str, str], + bazel_lints: dict[str, str], + missing: list[str], + extra: list[str], + mismatched: list[str], +) -> None: + cargo_toml_display = display_path(cargo_toml) + bazelrc_display = display_path(bazelrc) + example_manifest = find_workspace_lints_example_manifest() + + print( + "ERROR: Bazel clippy flags are out of sync with Cargo workspace clippy lints.", + file=sys.stderr, + ) + print(file=sys.stderr) + print( + f"Cargo defines the source of truth in {cargo_toml_display} " + "[workspace.lints.clippy].", + file=sys.stderr, + ) + if example_manifest is not None: + print( + "Cargo applies those lint levels to member crates that opt into " + f"`[lints] workspace = true`, for example {example_manifest}.", + file=sys.stderr, + ) + print( + "Bazel clippy does not ingest Cargo lint levels automatically, and " + "`clippy.toml` can configure lint behavior but cannot set allow/warn/deny/forbid.", + file=sys.stderr, + ) + print( + f"Update {bazelrc_display} so its `build:clippy` " + "`clippy_flag` entries match Cargo.", + file=sys.stderr, + ) + + if missing: + print(file=sys.stderr) + print("Missing Bazel entries:", file=sys.stderr) + for lint in missing: + print(f" {render_bazelrc_line(lint, cargo_lints[lint])}", file=sys.stderr) + + if mismatched: + print(file=sys.stderr) + print("Mismatched lint levels:", file=sys.stderr) + for lint in mismatched: + cargo_level = cargo_lints[lint] + bazel_level = bazel_lints[lint] + print( + f" clippy::{lint}: Cargo has {cargo_level}, Bazel has {bazel_level}", + file=sys.stderr, + ) + print( + f" expected: {render_bazelrc_line(lint, cargo_level)}", + file=sys.stderr, + ) + + if extra: + print(file=sys.stderr) + print("Extra Bazel entries with no Cargo counterpart:", file=sys.stderr) + for lint in extra: + print(f" {render_bazelrc_line(lint, bazel_lints[lint])}", file=sys.stderr) + + +def render_bazelrc_line(lint: str, level: str) -> str: + return f"{BAZEL_CLIPPY_FLAG_PREFIX}--{level}=clippy::{lint}" + + +def display_path(path: Path) -> str: + try: + return str(path.relative_to(ROOT)) + except ValueError: + return str(path) + + +def find_workspace_lints_example_manifest() -> str | None: + for cargo_toml in sorted((ROOT / "codex-rs").glob("**/Cargo.toml")): + if cargo_toml == DEFAULT_CARGO_TOML: + continue + data = tomllib.loads(cargo_toml.read_text()) + if data.get("lints", {}).get("workspace") is True: + return str(cargo_toml.relative_to(ROOT)) + return None + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/reference/openai-codex/.github/scripts/verify_cargo_workspace_manifests.py b/reference/openai-codex/.github/scripts/verify_cargo_workspace_manifests.py new file mode 100644 index 0000000..93b41ea --- /dev/null +++ b/reference/openai-codex/.github/scripts/verify_cargo_workspace_manifests.py @@ -0,0 +1,391 @@ +#!/usr/bin/env python3 + +"""Verify that codex-rs Cargo manifests follow workspace manifest policy. + +Checks: +- Crates inherit `[workspace.package]` metadata. +- Crates opt into `[lints] workspace = true`. +- Crate names follow the codex-rs directory naming conventions. +- Workspace manifests do not introduce workspace crate feature toggles. +""" + +from __future__ import annotations + +import sys +import tomllib +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[2] +CARGO_RS_ROOT = ROOT / "codex-rs" +WORKSPACE_PACKAGE_FIELDS = ("version", "edition", "license") +TOP_LEVEL_NAME_EXCEPTIONS = { + "windows-sandbox-rs": "codex-windows-sandbox", +} +UTILITY_NAME_EXCEPTIONS = { + "path-utils": "codex-utils-path", +} +MANIFEST_FEATURE_EXCEPTIONS = { + "codex-rs/code-mode/Cargo.toml": {"sandbox": ("v8/v8_enable_sandbox",)}, + "codex-rs/v8-poc/Cargo.toml": {"sandbox": ("v8/v8_enable_sandbox",)}, +} +OPTIONAL_DEPENDENCY_EXCEPTIONS = set() +INTERNAL_DEPENDENCY_FEATURE_EXCEPTIONS = {} + + +def main() -> int: + internal_package_names = workspace_package_names() + used_manifest_feature_exceptions: set[str] = set() + used_optional_dependency_exceptions: set[tuple[str, str, str]] = set() + used_internal_dependency_feature_exceptions: set[tuple[str, str, str]] = set() + failures_by_path: dict[str, list[str]] = {} + + for path in manifests_to_verify(): + if errors := manifest_errors( + path, + internal_package_names, + used_manifest_feature_exceptions, + used_optional_dependency_exceptions, + used_internal_dependency_feature_exceptions, + ): + failures_by_path[manifest_key(path)] = errors + + add_unused_exception_errors( + failures_by_path, + used_manifest_feature_exceptions, + used_optional_dependency_exceptions, + used_internal_dependency_feature_exceptions, + ) + + if not failures_by_path: + return 0 + + print( + "Cargo manifests under codex-rs must inherit workspace package metadata, " + "opt into workspace lints, and avoid introducing new workspace crate " + "features." + ) + print( + "Workspace crate features are disallowed because our Bazel build setup " + "does not honor them today, which can let issues hidden behind feature " + "gates go unnoticed, and because they add extra crate build " + "permutations we want to avoid." + ) + print( + "Cargo only applies `codex-rs/Cargo.toml` `[workspace.lints.clippy]` " + "entries to a crate when that crate declares:" + ) + print() + print("[lints]") + print("workspace = true") + print() + print( + "Without that opt-in, `cargo clippy` can miss violations that Bazel clippy " + "catches." + ) + print() + print( + "Package-name checks apply to `codex-rs//Cargo.toml` and " + "`codex-rs/utils//Cargo.toml`." + ) + print( + "Workspace crate features are forbidden; add a targeted exception here " + "only if there is a deliberate temporary migration in flight." + ) + print() + for path in sorted(failures_by_path): + errors = failures_by_path[path] + print(f"{path}:") + for error in errors: + print(f" - {error}") + + return 1 + + +def manifest_errors( + path: Path, + internal_package_names: set[str], + used_manifest_feature_exceptions: set[str], + used_optional_dependency_exceptions: set[tuple[str, str, str]], + used_internal_dependency_feature_exceptions: set[tuple[str, str, str]], +) -> list[str]: + manifest = load_manifest(path) + package = manifest.get("package") + if not isinstance(package, dict) and path != CARGO_RS_ROOT / "Cargo.toml": + return [] + + errors = [] + if isinstance(package, dict): + for field in WORKSPACE_PACKAGE_FIELDS: + if not is_workspace_reference(package.get(field)): + errors.append(f"set `{field}.workspace = true` in `[package]`") + + lints = manifest.get("lints") + if not (isinstance(lints, dict) and lints.get("workspace") is True): + errors.append("add `[lints]` with `workspace = true`") + + expected_name = expected_package_name(path) + if expected_name is not None: + actual_name = package.get("name") + if actual_name != expected_name: + errors.append( + f"set `[package].name` to `{expected_name}` (found `{actual_name}`)" + ) + + path_key = manifest_key(path) + features = manifest.get("features") + if features is not None: + normalized_features = normalize_feature_mapping(features) + expected_features = MANIFEST_FEATURE_EXCEPTIONS.get(path_key) + if expected_features is None: + errors.append( + "remove `[features]`; new workspace crate features are not allowed" + ) + else: + used_manifest_feature_exceptions.add(path_key) + if normalized_features != expected_features: + errors.append( + "limit `[features]` to the existing exception list while " + "workspace crate features are being removed " + f"(expected {render_feature_mapping(expected_features)})" + ) + + for section_name, dependencies in dependency_sections(manifest): + for dependency_name, dependency in dependencies.items(): + if not isinstance(dependency, dict): + continue + + if dependency.get("optional") is True: + exception_key = (path_key, section_name, dependency_name) + if exception_key in OPTIONAL_DEPENDENCY_EXCEPTIONS: + used_optional_dependency_exceptions.add(exception_key) + else: + errors.append( + "remove `optional = true` from " + f"`{dependency_entry_label(section_name, dependency_name)}`; " + "new optional dependencies are not allowed because they " + "create crate features" + ) + + if not is_internal_dependency(path, dependency_name, dependency, internal_package_names): + continue + + dependency_features = dependency.get("features") + if dependency_features is not None: + normalized_dependency_features = normalize_string_list( + dependency_features + ) + exception_key = (path_key, section_name, dependency_name) + expected_dependency_features = ( + INTERNAL_DEPENDENCY_FEATURE_EXCEPTIONS.get(exception_key) + ) + if expected_dependency_features is None: + errors.append( + "remove `features = [...]` from workspace dependency " + f"`{dependency_entry_label(section_name, dependency_name)}`; " + "new workspace crate feature activations are not allowed" + ) + else: + used_internal_dependency_feature_exceptions.add(exception_key) + if normalized_dependency_features != expected_dependency_features: + errors.append( + "limit workspace dependency features on " + f"`{dependency_entry_label(section_name, dependency_name)}` " + "to the existing exception list while workspace crate " + "features are being removed " + f"(expected {render_string_list(expected_dependency_features)})" + ) + + if dependency.get("default-features") is False: + errors.append( + "remove `default-features = false` from workspace dependency " + f"`{dependency_entry_label(section_name, dependency_name)}`; " + "new workspace crate feature toggles are not allowed" + ) + + return errors + + +def expected_package_name(path: Path) -> str | None: + parts = path.relative_to(CARGO_RS_ROOT).parts + if len(parts) == 2 and parts[1] == "Cargo.toml": + directory = parts[0] + return TOP_LEVEL_NAME_EXCEPTIONS.get( + directory, + directory if directory.startswith("codex-") else f"codex-{directory}", + ) + if len(parts) == 3 and parts[0] == "utils" and parts[2] == "Cargo.toml": + directory = parts[1] + return UTILITY_NAME_EXCEPTIONS.get(directory, f"codex-utils-{directory}") + return None + + +def is_workspace_reference(value: object) -> bool: + return isinstance(value, dict) and value.get("workspace") is True + + +def manifest_key(path: Path) -> str: + return str(path.relative_to(ROOT)) + + +def normalize_feature_mapping(value: object) -> dict[str, tuple[str, ...]] | None: + if not isinstance(value, dict): + return None + + normalized = {} + for key, features in value.items(): + if not isinstance(key, str): + return None + normalized_features = normalize_string_list(features) + if normalized_features is None: + return None + normalized[key] = normalized_features + return normalized + + +def normalize_string_list(value: object) -> tuple[str, ...] | None: + if not isinstance(value, list) or not all(isinstance(item, str) for item in value): + return None + return tuple(value) + + +def render_feature_mapping(features: dict[str, tuple[str, ...]]) -> str: + entries = [ + f"{name} = {render_string_list(items)}" for name, items in features.items() + ] + return ", ".join(entries) + + +def render_string_list(items: tuple[str, ...]) -> str: + return "[" + ", ".join(f'"{item}"' for item in items) + "]" + + +def dependency_sections(manifest: dict) -> list[tuple[str, dict]]: + sections = [] + for section_name in ("dependencies", "dev-dependencies", "build-dependencies"): + dependencies = manifest.get(section_name) + if isinstance(dependencies, dict): + sections.append((section_name, dependencies)) + + workspace = manifest.get("workspace") + if isinstance(workspace, dict): + workspace_dependencies = workspace.get("dependencies") + if isinstance(workspace_dependencies, dict): + sections.append(("workspace.dependencies", workspace_dependencies)) + + target = manifest.get("target") + if not isinstance(target, dict): + return sections + + for target_name, tables in target.items(): + if not isinstance(tables, dict): + continue + for section_name in ("dependencies", "dev-dependencies", "build-dependencies"): + dependencies = tables.get(section_name) + if isinstance(dependencies, dict): + sections.append((f"target.{target_name}.{section_name}", dependencies)) + + return sections + + +def dependency_entry_label(section_name: str, dependency_name: str) -> str: + return f"[{section_name}].{dependency_name}" + + +def is_internal_dependency( + manifest_path: Path, + dependency_name: str, + dependency: dict, + internal_package_names: set[str], +) -> bool: + package_name = dependency.get("package", dependency_name) + if isinstance(package_name, str) and package_name in internal_package_names: + return True + + dependency_path = dependency.get("path") + if not isinstance(dependency_path, str): + return False + + resolved_dependency_path = (manifest_path.parent / dependency_path).resolve() + try: + resolved_dependency_path.relative_to(CARGO_RS_ROOT) + except ValueError: + return False + return True + + +def add_unused_exception_errors( + failures_by_path: dict[str, list[str]], + used_manifest_feature_exceptions: set[str], + used_optional_dependency_exceptions: set[tuple[str, str, str]], + used_internal_dependency_feature_exceptions: set[tuple[str, str, str]], +) -> None: + for path_key in sorted( + set(MANIFEST_FEATURE_EXCEPTIONS) - used_manifest_feature_exceptions + ): + add_failure( + failures_by_path, + path_key, + "remove the stale `[features]` exception from " + "`MANIFEST_FEATURE_EXCEPTIONS`", + ) + + for path_key, section_name, dependency_name in sorted( + OPTIONAL_DEPENDENCY_EXCEPTIONS - used_optional_dependency_exceptions + ): + add_failure( + failures_by_path, + path_key, + "remove the stale optional-dependency exception for " + f"`{dependency_entry_label(section_name, dependency_name)}` from " + "`OPTIONAL_DEPENDENCY_EXCEPTIONS`", + ) + + for path_key, section_name, dependency_name in sorted( + set(INTERNAL_DEPENDENCY_FEATURE_EXCEPTIONS) + - used_internal_dependency_feature_exceptions + ): + add_failure( + failures_by_path, + path_key, + "remove the stale internal dependency feature exception for " + f"`{dependency_entry_label(section_name, dependency_name)}` from " + "`INTERNAL_DEPENDENCY_FEATURE_EXCEPTIONS`", + ) + + +def add_failure(failures_by_path: dict[str, list[str]], path_key: str, error: str) -> None: + failures_by_path.setdefault(path_key, []).append(error) + + +def workspace_package_names() -> set[str]: + package_names = set() + for path in cargo_manifests(): + manifest = load_manifest(path) + package = manifest.get("package") + if not isinstance(package, dict): + continue + package_name = package.get("name") + if isinstance(package_name, str): + package_names.add(package_name) + return package_names + + +def load_manifest(path: Path) -> dict: + return tomllib.loads(path.read_text()) + + +def cargo_manifests() -> list[Path]: + return sorted( + path + for path in CARGO_RS_ROOT.rglob("Cargo.toml") + if path != CARGO_RS_ROOT / "Cargo.toml" + ) + + +def manifests_to_verify() -> list[Path]: + return [CARGO_RS_ROOT / "Cargo.toml", *cargo_manifests()] + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/reference/openai-codex/.github/scripts/verify_tui_core_boundary.py b/reference/openai-codex/.github/scripts/verify_tui_core_boundary.py new file mode 100644 index 0000000..e66afec --- /dev/null +++ b/reference/openai-codex/.github/scripts/verify_tui_core_boundary.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 + +"""Verify codex-tui does not depend on or import codex-core directly.""" + +from __future__ import annotations + +import re +import sys +import tomllib +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[2] +TUI_ROOT = ROOT / "codex-rs" / "tui" +TUI_MANIFEST = TUI_ROOT / "Cargo.toml" +FORBIDDEN_PACKAGE = "codex-core" +FORBIDDEN_SOURCE_PATTERNS = ( + re.compile(r"\bcodex_core::"), + re.compile(r"\buse\s+codex_core\b"), + re.compile(r"\bextern\s+crate\s+codex_core\b"), +) + + +def main() -> int: + failures = [] + failures.extend(manifest_failures()) + failures.extend(source_failures()) + + if not failures: + return 0 + + print("codex-tui must not depend on or import codex-core directly.") + print( + "Use the app-server protocol/client boundary instead; temporary embedded " + "startup gaps belong behind codex_app_server_client::legacy_core." + ) + print() + for failure in failures: + print(f"- {failure}") + + return 1 + + +def manifest_failures() -> list[str]: + manifest = tomllib.loads(TUI_MANIFEST.read_text()) + failures = [] + for section_name, dependencies in dependency_sections(manifest): + if FORBIDDEN_PACKAGE in dependencies: + failures.append( + f"{relative_path(TUI_MANIFEST)} declares `{FORBIDDEN_PACKAGE}` " + f"in `[{section_name}]`" + ) + return failures + + +def dependency_sections(manifest: dict) -> list[tuple[str, dict]]: + sections: list[tuple[str, dict]] = [] + for section_name in ("dependencies", "dev-dependencies", "build-dependencies"): + dependencies = manifest.get(section_name) + if isinstance(dependencies, dict): + sections.append((section_name, dependencies)) + + for target_name, target in manifest.get("target", {}).items(): + if not isinstance(target, dict): + continue + for section_name in ("dependencies", "dev-dependencies", "build-dependencies"): + dependencies = target.get(section_name) + if isinstance(dependencies, dict): + sections.append((f'target.{target_name}.{section_name}', dependencies)) + + return sections + + +def source_failures() -> list[str]: + failures = [] + for path in sorted(TUI_ROOT.glob("**/*.rs")): + text = path.read_text() + for line_number, line in enumerate(text.splitlines(), start=1): + if any(pattern.search(line) for pattern in FORBIDDEN_SOURCE_PATTERNS): + failures.append(f"{relative_path(path)}:{line_number} imports `codex_core`") + return failures + + +def relative_path(path: Path) -> str: + return str(path.relative_to(ROOT)) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/reference/openai-codex/.github/workflows/Dockerfile.bazel b/reference/openai-codex/.github/workflows/Dockerfile.bazel new file mode 100644 index 0000000..51c199d --- /dev/null +++ b/reference/openai-codex/.github/workflows/Dockerfile.bazel @@ -0,0 +1,20 @@ +FROM ubuntu:24.04 + +# TODO(mbolin): Published to docker.io/mbolin491/codex-bazel:latest for +# initial debugging, but we should publish to a more proper location. +# +# docker buildx create --use +# docker buildx build --platform linux/amd64,linux/arm64 -f .github/workflows/Dockerfile.bazel -t mbolin491/codex-bazel:latest --push . + +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + curl git python3 ca-certificates && \ + rm -rf /var/lib/apt/lists/* + +# Install dotslash. +RUN curl -LSfs "https://github.com/facebook/dotslash/releases/download/v0.5.8/dotslash-ubuntu-22.04.$(uname -m).tar.gz" | tar fxz - -C /usr/local/bin + +# Ubuntu 24.04 ships with user 'ubuntu' already created with UID 1000. +USER ubuntu + +WORKDIR /workspace diff --git a/reference/openai-codex/.github/workflows/README.md b/reference/openai-codex/.github/workflows/README.md new file mode 100644 index 0000000..b2403b7 --- /dev/null +++ b/reference/openai-codex/.github/workflows/README.md @@ -0,0 +1,34 @@ +# Workflow Strategy + +The workflows in this directory are split so that pull requests get fast, review-friendly signal while `main` still gets the full cross-platform verification pass. + +## Pull Requests + +- `bazel.yml` is the main pre-merge verification path for Rust code. + It runs Bazel `test` and Bazel `clippy` on the supported Bazel targets, + including the generated Rust test binaries needed to lint inline `#[cfg(test)]` + code. +- `rust-ci.yml` keeps the Cargo-native PR checks intentionally small: + - `cargo fmt --check` + - `cargo shear` + - `argument-comment-lint` on Linux, macOS, and Windows + - `tools/argument-comment-lint` package tests when the lint or its workflow wiring changes + +## Post-Merge On `main` + +- `bazel.yml` also runs on pushes to `main`. + This re-verifies the merged Bazel path and helps keep the BuildBuddy caches warm. +- `rust-ci-full.yml` is the full Cargo-native verification workflow. + It keeps the heavier checks off the PR path while still validating them after merge: + - the full Cargo `clippy` matrix + - the full Cargo `nextest` matrix via per-platform archive-backed shards + - Windows ARM64 nextest archives cross-compiled on Windows x64, then replayed on native Windows ARM64 shards + - release-profile Cargo builds + - cross-platform `argument-comment-lint` + - Linux remote-env tests + +## Rule Of Thumb + +- If a build/test/clippy check can be expressed in Bazel, prefer putting the PR-time version in `bazel.yml`. +- Keep `rust-ci.yml` fast enough that it usually does not dominate PR latency. +- Reserve `rust-ci-full.yml` for heavyweight Cargo-native coverage that Bazel does not replace yet. diff --git a/reference/openai-codex/.github/workflows/bazel.yml b/reference/openai-codex/.github/workflows/bazel.yml new file mode 100644 index 0000000..11c0988 --- /dev/null +++ b/reference/openai-codex/.github/workflows/bazel.yml @@ -0,0 +1,518 @@ +name: Bazel + +# Note this workflow was originally derived from: +# https://github.com/cerisier/toolchains_llvm_bootstrapped/blob/main/.github/workflows/ci.yaml + +on: + pull_request: {} + push: + branches: + - main + workflow_dispatch: + +concurrency: + # Cancel previous actions from the same PR or branch except 'main' branch. + # See https://docs.github.com/en/actions/using-jobs/using-concurrency and https://docs.github.com/en/actions/learn-github-actions/contexts for more info. + group: concurrency-group::${{ github.workflow }}::${{ github.event.pull_request.number > 0 && format('pr-{0}', github.event.pull_request.number) || github.ref_name }}${{ github.ref_name == 'main' && format('::{0}', github.run_id) || ''}} + cancel-in-progress: ${{ github.ref_name != 'main' }} +jobs: + test: + # PRs use the sharded Windows cross-compiled test jobs below. Post-merge + # pushes to main also run the native Windows test job for broader Windows + # signal without putting PR latency back on the critical path. Cargo CI + # owns V8/code-mode test coverage for now. + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + include: + # macOS + - os: macos-15-xlarge + target: aarch64-apple-darwin + - os: macos-15-xlarge + target: x86_64-apple-darwin + + # Linux + - os: ubuntu-24.04 + target: x86_64-unknown-linux-gnu + - os: ubuntu-24.04 + target: x86_64-unknown-linux-musl + # 2026-02-27 Bazel tests have been flaky on arm in CI. + # Disable until we can investigate and stabilize them. + # - os: ubuntu-24.04-arm + # target: aarch64-unknown-linux-musl + # - os: ubuntu-24.04-arm + # target: aarch64-unknown-linux-gnu + + runs-on: ${{ matrix.os }} + + # Configure a human readable name for each job + name: Bazel test on ${{ matrix.os }} for ${{ matrix.target }} + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + + - name: Check rusty_v8 MODULE.bazel checksums + if: matrix.os == 'ubuntu-24.04' && matrix.target == 'x86_64-unknown-linux-gnu' + shell: bash + run: | + python3 .github/scripts/rusty_v8_bazel.py check-module-bazel + python3 -m unittest discover -s .github/scripts -p test_rusty_v8_bazel.py + + - name: Prepare Bazel CI + id: prepare_bazel + uses: ./.github/actions/prepare-bazel-ci + with: + target: ${{ matrix.target }} + cache-scope: bazel-${{ github.job }} + install-test-prereqs: "true" + - name: Check MODULE.bazel.lock is up to date + if: matrix.os == 'ubuntu-24.04' && matrix.target == 'x86_64-unknown-linux-gnu' + shell: bash + run: ./scripts/check-module-bazel-lock.sh + + - name: bazel test //... + env: + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + shell: bash + run: | + bazel_targets=( + //... + # Keep standalone V8 library targets out of the ordinary Bazel CI + # path. V8 consumers under `//codex-rs/...` still participate + # transitively through `//...`. + -//third_party/v8:all + # V8-backed code-mode tests are covered by Cargo CI. Bazel CI + # cross-compiles in several legs, and those tests are not stable in + # that setup yet. + -//codex-rs/code-mode:code-mode-unit-tests + -//codex-rs/v8-poc:v8-poc-unit-tests + ) + + bazel_wrapper_args=( + --print-failed-action-summary + --print-failed-test-logs + ) + bazel_test_args=( + test + --test_tag_filters=-argument-comment-lint + --test_verbose_timeout_warnings + --build_metadata=COMMIT_SHA=${GITHUB_SHA} + ) + ./.github/scripts/run-bazel-ci.sh \ + "${bazel_wrapper_args[@]}" \ + -- \ + "${bazel_test_args[@]}" \ + -- \ + "${bazel_targets[@]}" + + - name: Upload Bazel execution logs + if: always() && !cancelled() + continue-on-error: true + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: bazel-execution-logs-test-${{ matrix.target }} + path: ${{ runner.temp }}/bazel-execution-logs + if-no-files-found: ignore + + # Save the job-scoped Bazel repository cache after cache misses. Keep the + # upload non-fatal so cache service issues never fail the job itself. + - name: Save bazel repository cache + if: always() && !cancelled() && steps.prepare_bazel.outputs.repository-cache-hit != 'true' + continue-on-error: true + uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: ${{ steps.prepare_bazel.outputs.repository-cache-path }} + key: ${{ steps.prepare_bazel.outputs.repository-cache-key }} + + test-windows-shard: + # Split the Windows Bazel test leg across separate Windows + # hosts. Each shard still uses Linux RBE for build actions, but the test + # execution itself happens on its own Windows runner. + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + shard: + - 1 + - 2 + - 3 + - 4 + runs-on: windows-latest + name: Bazel test on windows-latest for x86_64-pc-windows-gnullvm shard ${{ matrix.shard }}/4 + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + + - name: Prepare Bazel CI + id: prepare_bazel + uses: ./.github/actions/prepare-bazel-ci + with: + target: x86_64-pc-windows-gnullvm + # Reuse the former monolithic Windows test cache for restores. Do + # not save it from every shard below; duplicate uploads would sit on + # the PR-blocking critical path after the useful test work is done. + cache-scope: bazel-test + install-test-prereqs: "true" + + - name: bazel test shard + env: + BAZEL_TEST_SHARD: ${{ matrix.shard }} + BAZEL_TEST_SHARD_COUNT: 4 + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + shell: bash + run: | + set -euo pipefail + + bazel_test_query='tests(//...) except tests(//third_party/v8:all) except //codex-rs/code-mode:code-mode-unit-tests except //codex-rs/v8-poc:v8-poc-unit-tests except attr(tags, "manual", tests(//...))' + mapfile -t bazel_targets < <( + MSYS2_ARG_CONV_EXCL='*' bazel query --output=label "${bazel_test_query}" \ + | LC_ALL=C sort + ) + + selected_targets=() + for bazel_target in "${bazel_targets[@]}"; do + target_bucket="$( + printf '%s\n' "${bazel_target}" \ + | cksum \ + | awk -v shard_count="${BAZEL_TEST_SHARD_COUNT}" '{ print ($1 % shard_count) + 1 }' + )" + if [[ "${target_bucket}" == "${BAZEL_TEST_SHARD}" ]]; then + selected_targets+=("${bazel_target}") + fi + done + + if [[ ${#selected_targets[@]} -eq 0 ]]; then + echo "No Bazel test targets selected for Windows shard ${BAZEL_TEST_SHARD}/${BAZEL_TEST_SHARD_COUNT}." >&2 + exit 1 + fi + + echo "Selected ${#selected_targets[@]} of ${#bazel_targets[@]} Bazel test targets for Windows shard ${BAZEL_TEST_SHARD}/${BAZEL_TEST_SHARD_COUNT}." + + bazel_test_args=( + test + --skip_incompatible_explicit_targets + --test_tag_filters=-argument-comment-lint + --test_verbose_timeout_warnings + --build_metadata=COMMIT_SHA=${GITHUB_SHA} + --build_metadata=TAG_windows_test_shard=${BAZEL_TEST_SHARD} + ) + + ./.github/scripts/run-bazel-ci.sh \ + --print-failed-action-summary \ + --print-failed-test-logs \ + --windows-cross-compile \ + --remote-download-toplevel \ + -- \ + "${bazel_test_args[@]}" \ + -- \ + "${selected_targets[@]}" + + - name: Upload Bazel execution logs + if: always() && !cancelled() + continue-on-error: true + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: bazel-execution-logs-test-x86_64-pc-windows-gnullvm-shard-${{ matrix.shard }} + path: ${{ runner.temp }}/bazel-execution-logs + if-no-files-found: ignore + + test-windows: + # Preserve the existing required-check surface while the real work happens + # in the sharded Windows jobs above. + if: always() + needs: test-windows-shard + runs-on: ubuntu-24.04 + name: Bazel test on windows-latest for x86_64-pc-windows-gnullvm + + steps: + - name: Confirm Windows Bazel test shards passed + shell: bash + run: | + if [[ "${{ needs.test-windows-shard.result }}" != "success" ]]; then + echo "Windows Bazel test shards finished with result: ${{ needs.test-windows-shard.result }}" >&2 + exit 1 + fi + + test-windows-native-main: + # Native Windows Bazel tests are slower and frequently approach the + # 30-minute PR budget. Run this only for post-merge commits to main and give + # it a larger timeout. + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + timeout-minutes: 40 + runs-on: windows-latest + name: Bazel test on windows-latest for x86_64-pc-windows-gnullvm (native main) + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + + - name: Prepare Bazel CI + id: prepare_bazel + uses: ./.github/actions/prepare-bazel-ci + with: + target: x86_64-pc-windows-gnullvm + cache-scope: bazel-${{ github.job }} + install-test-prereqs: "true" + + - name: bazel test //... + env: + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + shell: bash + run: | + bazel_targets=( + //... + # Keep standalone V8 library targets out of the ordinary Bazel CI + # path. V8 consumers under `//codex-rs/...` still participate + # transitively through `//...`. + -//third_party/v8:all + # Keep this aligned with the main Bazel job. The native Windows + # job preserves broad post-merge coverage, but code-mode/V8 tests + # are covered by Cargo CI rather than Bazel for now. + -//codex-rs/code-mode:code-mode-unit-tests + -//codex-rs/v8-poc:v8-poc-unit-tests + ) + + bazel_test_args=( + test + --test_tag_filters=-argument-comment-lint + --test_verbose_timeout_warnings + --build_metadata=COMMIT_SHA=${GITHUB_SHA} + --build_metadata=TAG_windows_native_main=true + ) + + ./.github/scripts/run-bazel-ci.sh \ + --print-failed-action-summary \ + --print-failed-test-logs \ + -- \ + "${bazel_test_args[@]}" \ + -- \ + "${bazel_targets[@]}" + + - name: Upload Bazel execution logs + if: always() && !cancelled() + continue-on-error: true + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: bazel-execution-logs-test-windows-native-x86_64-pc-windows-gnullvm + path: ${{ runner.temp }}/bazel-execution-logs + if-no-files-found: ignore + + # Save the job-scoped Bazel repository cache after cache misses. Keep the + # upload non-fatal so cache service issues never fail the job itself. + - name: Save bazel repository cache + if: always() && !cancelled() && steps.prepare_bazel.outputs.repository-cache-hit != 'true' + continue-on-error: true + uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: ${{ steps.prepare_bazel.outputs.repository-cache-path }} + key: ${{ steps.prepare_bazel.outputs.repository-cache-key }} + + clippy: + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + include: + # Keep Linux lint coverage on x64 and add the arm64 macOS path that + # the Bazel test job already exercises. Add Windows gnullvm as well + # so PRs get Bazel-native lint signal on the same Windows toolchain + # that the Bazel test job uses. + - os: ubuntu-24.04 + target: x86_64-unknown-linux-gnu + - os: macos-15-xlarge + target: aarch64-apple-darwin + - os: windows-latest + target: x86_64-pc-windows-gnullvm + runs-on: ${{ matrix.os }} + name: Bazel clippy on ${{ matrix.os }} for ${{ matrix.target }} + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + + - name: Prepare Bazel CI + id: prepare_bazel + uses: ./.github/actions/prepare-bazel-ci + with: + target: ${{ matrix.target }} + cache-scope: bazel-${{ github.job }} + + - name: bazel build --config=clippy lint targets + env: + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + shell: bash + run: | + bazel_clippy_args=( + --config=clippy + --build_metadata=COMMIT_SHA=${GITHUB_SHA} + --build_metadata=TAG_job=clippy + ) + bazel_wrapper_args=() + bazel_target_list_args=() + if [[ "${RUNNER_OS}" == "Windows" ]]; then + # Keep this aligned with the fast Windows Bazel test job: use + # Linux RBE for clippy build actions while targeting Windows + # gnullvm. Fork/community PRs without the BuildBuddy secret fall + # back inside `run-bazel-ci.sh` to the previous local Windows MSVC + # host-platform shape. + bazel_wrapper_args+=(--windows-cross-compile) + bazel_target_list_args+=(--windows-cross-compile) + if [[ -z "${BUILDBUDDY_API_KEY:-}" ]]; then + # The fork fallback can see incompatible explicit Windows-cross + # internal test binaries in the generated target list. Preserve + # the old local-fallback behavior there. + bazel_clippy_args+=(--skip_incompatible_explicit_targets) + fi + fi + + bazel_target_lines="$(./scripts/list-bazel-clippy-targets.sh "${bazel_target_list_args[@]}")" + bazel_targets=() + while IFS= read -r target; do + bazel_targets+=("${target}") + done <<< "${bazel_target_lines}" + + ./.github/scripts/run-bazel-ci.sh \ + --print-failed-action-summary \ + "${bazel_wrapper_args[@]}" \ + -- \ + build \ + "${bazel_clippy_args[@]}" \ + -- \ + "${bazel_targets[@]}" + + - name: Upload Bazel execution logs + if: always() && !cancelled() + continue-on-error: true + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: bazel-execution-logs-clippy-${{ matrix.target }} + path: ${{ runner.temp }}/bazel-execution-logs + if-no-files-found: ignore + + # Save the job-scoped Bazel repository cache after cache misses. Keep the + # upload non-fatal so cache service issues never fail the job itself. + - name: Save bazel repository cache + if: always() && !cancelled() && steps.prepare_bazel.outputs.repository-cache-hit != 'true' + continue-on-error: true + uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: ${{ steps.prepare_bazel.outputs.repository-cache-path }} + key: ${{ steps.prepare_bazel.outputs.repository-cache-key }} + + verify-release-build: + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-24.04 + target: x86_64-unknown-linux-gnu + - os: macos-15-xlarge + target: aarch64-apple-darwin + - os: windows-latest + target: x86_64-pc-windows-gnullvm + runs-on: ${{ matrix.os }} + name: Verify release build on ${{ matrix.os }} for ${{ matrix.target }} + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + + - name: Prepare Bazel CI + id: prepare_bazel + uses: ./.github/actions/prepare-bazel-ci + with: + target: ${{ matrix.target }} + cache-scope: bazel-${{ github.job }} + + - name: bazel build verify-release-build targets + env: + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + shell: bash + run: | + # This job exists to compile Rust code behind + # `cfg(not(debug_assertions))` so PR CI catches failures that would + # otherwise show up only in a release build. We do not need the full + # optimizer and debug-info work that normally comes with a release + # build to get that signal, so keep Bazel in `fastbuild` and disable + # Rust debug assertions explicitly. + bazel_wrapper_args=() + if [[ "${RUNNER_OS}" == "Windows" ]]; then + # This is build-only signal, so use the same Linux-RBE + # cross-compile path as the fast Windows test and clippy jobs. + # Fork/community PRs without the BuildBuddy secret fall back + # inside `run-bazel-ci.sh` to the previous local Windows MSVC + # host-platform shape. + bazel_wrapper_args+=(--windows-cross-compile) + fi + + bazel_build_args=( + --compilation_mode=fastbuild + --@rules_rust//rust/settings:extra_rustc_flag=-Cdebug-assertions=no + --@rules_rust//rust/settings:extra_exec_rustc_flag=-Cdebug-assertions=no + --build_metadata=COMMIT_SHA=${GITHUB_SHA} + --build_metadata=TAG_job=verify-release-build + --build_metadata=TAG_rust_debug_assertions=off + ) + + bazel_target_lines="$(bash ./scripts/list-bazel-release-targets.sh)" + bazel_targets=() + while IFS= read -r target; do + bazel_targets+=("${target}") + done <<< "${bazel_target_lines}" + + ./.github/scripts/run-bazel-ci.sh \ + "${bazel_wrapper_args[@]}" \ + -- \ + build \ + "${bazel_build_args[@]}" \ + -- \ + "${bazel_targets[@]}" + + - name: Verify Bazel builds bwrap + if: runner.os == 'Linux' + env: + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + shell: bash + run: | + ./.github/scripts/run-bazel-ci.sh \ + --remote-download-toplevel \ + --print-failed-action-summary \ + -- \ + build \ + --build_metadata=COMMIT_SHA=${GITHUB_SHA} \ + --build_metadata=TAG_job=verify-bwrap \ + -- \ + //codex-rs/bwrap:bwrap + + - name: Upload Bazel execution logs + if: always() && !cancelled() + continue-on-error: true + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: bazel-execution-logs-verify-release-build-${{ matrix.target }} + path: ${{ runner.temp }}/bazel-execution-logs + if-no-files-found: ignore + + # Save the job-scoped Bazel repository cache after cache misses. Keep the + # upload non-fatal so cache service issues never fail the job itself. + - name: Save bazel repository cache + if: always() && !cancelled() && steps.prepare_bazel.outputs.repository-cache-hit != 'true' + continue-on-error: true + uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: ${{ steps.prepare_bazel.outputs.repository-cache-path }} + key: ${{ steps.prepare_bazel.outputs.repository-cache-key }} diff --git a/reference/openai-codex/.github/workflows/blob-size-policy.yml b/reference/openai-codex/.github/workflows/blob-size-policy.yml new file mode 100644 index 0000000..779198e --- /dev/null +++ b/reference/openai-codex/.github/workflows/blob-size-policy.yml @@ -0,0 +1,34 @@ +name: blob-size-policy + +on: + pull_request: {} + +jobs: + check: + name: Blob size policy + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + fetch-depth: 0 + persist-credentials: false + + - name: Determine PR comparison range + id: range + shell: bash + run: | + set -euo pipefail + echo "base=${{ github.event.pull_request.base.sha }}" >> "$GITHUB_OUTPUT" + echo "head=${{ github.event.pull_request.head.sha }}" >> "$GITHUB_OUTPUT" + + - name: Check changed blob sizes + env: + BASE_SHA: ${{ steps.range.outputs.base }} + HEAD_SHA: ${{ steps.range.outputs.head }} + run: | + python3 scripts/check_blob_size.py \ + --base "$BASE_SHA" \ + --head "$HEAD_SHA" \ + --max-bytes 512000 \ + --allowlist .github/blob-size-allowlist.txt diff --git a/reference/openai-codex/.github/workflows/cargo-deny.yml b/reference/openai-codex/.github/workflows/cargo-deny.yml new file mode 100644 index 0000000..f20d09e --- /dev/null +++ b/reference/openai-codex/.github/workflows/cargo-deny.yml @@ -0,0 +1,29 @@ +name: cargo-deny + +on: + pull_request: + push: + branches: + - main + +jobs: + cargo-deny: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./codex-rs + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + + - name: Run cargo-deny + uses: EmbarkStudios/cargo-deny-action@82eb9f621fbc699dd0918f3ea06864c14cc84246 # v2 + with: + rust-version: 1.93.0 + manifest-path: ./codex-rs/Cargo.toml diff --git a/reference/openai-codex/.github/workflows/ci.yml b/reference/openai-codex/.github/workflows/ci.yml new file mode 100644 index 0000000..b1ee139 --- /dev/null +++ b/reference/openai-codex/.github/workflows/ci.yml @@ -0,0 +1,78 @@ +name: ci + +on: + pull_request: {} + push: { branches: [main] } + +jobs: + build-test: + runs-on: ubuntu-latest + timeout-minutes: 10 + env: + NODE_OPTIONS: --max-old-space-size=4096 + steps: + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + + - name: Verify codex-rs Cargo manifests inherit workspace settings + run: python3 .github/scripts/verify_cargo_workspace_manifests.py + + - name: Verify codex-tui does not import codex-core directly + run: python3 .github/scripts/verify_tui_core_boundary.py + + - name: Verify Bazel clippy flags match Cargo workspace lints + run: python3 .github/scripts/verify_bazel_clippy_lints.py + + - name: Test Codex package builder + run: python3 -m unittest discover -s scripts/codex_package -p 'test_*.py' + + - name: Setup pnpm + uses: pnpm/action-setup@a8198c4bff370c8506180b035930dea56dbd5288 # v5 + with: + run_install: false + + - name: Setup Node.js + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: 22 + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Stage npm package + id: stage_npm_package + env: + GH_TOKEN: ${{ github.token }} + run: | + set -euo pipefail + # Use a recent successful rust-release run that published the full + # cross-platform native payload required by the npm package layout. + # Passing the workflow URL directly avoids relying on old rust-v* + # branches remaining discoverable via `gh run list --branch ...`. + CODEX_VERSION=0.133.0-alpha.4 + WORKFLOW_URL="https://github.com/openai/codex/actions/runs/26201494185" + OUTPUT_DIR="${RUNNER_TEMP}" + python3 ./scripts/stage_npm_packages.py \ + --release-version "$CODEX_VERSION" \ + --workflow-url "$WORKFLOW_URL" \ + --package codex \ + --output-dir "$OUTPUT_DIR" + PACK_OUTPUT="${OUTPUT_DIR}/codex-npm-${CODEX_VERSION}.tgz" + echo "pack_output=$PACK_OUTPUT" >> "$GITHUB_OUTPUT" + + - name: Upload staged npm package artifact + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: codex-npm-staging + path: ${{ steps.stage_npm_package.outputs.pack_output }} + + - name: Ensure root README.md contains only ASCII and certain Unicode code points + run: ./scripts/asciicheck.py README.md + - name: Check root README ToC + run: python3 scripts/readme_toc.py README.md + + - name: Prettier (run `pnpm run format:fix` to fix) + run: pnpm run format diff --git a/reference/openai-codex/.github/workflows/cla.yml b/reference/openai-codex/.github/workflows/cla.yml new file mode 100644 index 0000000..b48fd36 --- /dev/null +++ b/reference/openai-codex/.github/workflows/cla.yml @@ -0,0 +1,49 @@ +name: CLA Assistant +on: + issue_comment: + types: [created] + pull_request_target: + types: [opened, closed, synchronize] + +permissions: + actions: write + contents: write + pull-requests: write + statuses: write + +jobs: + cla: + # Only run the CLA assistant for the canonical openai repo so forks are not blocked + # and contributors who signed previously do not receive duplicate CLA notifications. + if: ${{ github.repository_owner == 'openai' }} + runs-on: ubuntu-latest + steps: + - uses: contributor-assistant/github-action@ca4a40a7d1004f18d9960b404b97e5f30a505a08 # v2.6.1 + # Run on close only if the PR was merged. This will lock the PR to preserve + # the CLA agreement. We don't want to lock PRs that have been closed without + # merging because the contributor may want to respond with additional comments. + # This action has a "lock-pullrequest-aftermerge" option that can be set to false, + # but that would unconditionally skip locking even in cases where the PR was merged. + if: | + ( + github.event_name == 'pull_request_target' && + ( + github.event.action == 'opened' || + github.event.action == 'synchronize' || + (github.event.action == 'closed' && github.event.pull_request.merged == true) + ) + ) || + ( + github.event_name == 'issue_comment' && + ( + github.event.comment.body == 'recheck' || + github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA' + ) + ) + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + path-to-document: https://github.com/openai/codex/blob/main/docs/CLA.md + path-to-signatures: signatures/cla.json + branch: cla-signatures + allowlist: codex,dependabot,dependabot[bot],github-actions[bot] diff --git a/reference/openai-codex/.github/workflows/close-stale-contributor-prs.yml b/reference/openai-codex/.github/workflows/close-stale-contributor-prs.yml new file mode 100644 index 0000000..e8cea82 --- /dev/null +++ b/reference/openai-codex/.github/workflows/close-stale-contributor-prs.yml @@ -0,0 +1,107 @@ +name: Close stale contributor PRs + +on: + workflow_dispatch: + schedule: + - cron: "0 6 * * *" + +permissions: + contents: read + issues: write + pull-requests: write + +jobs: + close-stale-contributor-prs: + # Prevent scheduled runs on forks + if: github.repository == 'openai/codex' + runs-on: ubuntu-latest + steps: + - name: Close inactive PRs from contributors + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const DAYS_INACTIVE = 14; + const cutoff = new Date(Date.now() - DAYS_INACTIVE * 24 * 60 * 60 * 1000); + const { owner, repo } = context.repo; + const dryRun = false; + const stalePrs = []; + + core.info(`Dry run mode: ${dryRun}`); + + const prs = await github.paginate(github.rest.pulls.list, { + owner, + repo, + state: "open", + per_page: 100, + sort: "updated", + direction: "asc", + }); + + for (const pr of prs) { + const lastUpdated = new Date(pr.updated_at); + if (lastUpdated > cutoff) { + core.info(`PR ${pr.number} is fresh`); + continue; + } + + if (!pr.user || pr.user.type !== "User") { + core.info(`PR ${pr.number} wasn't created by a user`); + continue; + } + + let permission; + try { + const permissionResponse = await github.rest.repos.getCollaboratorPermissionLevel({ + owner, + repo, + username: pr.user.login, + }); + permission = permissionResponse.data.permission; + } catch (error) { + if (error.status === 404) { + core.info(`Author ${pr.user.login} is not a collaborator; skipping #${pr.number}`); + continue; + } + throw error; + } + + const hasContributorAccess = ["admin", "maintain", "write"].includes(permission); + if (!hasContributorAccess) { + core.info(`Author ${pr.user.login} has ${permission} access; skipping #${pr.number}`); + continue; + } + + stalePrs.push(pr); + } + + if (!stalePrs.length) { + core.info("No stale contributor pull requests found."); + return; + } + + for (const pr of stalePrs) { + const issue_number = pr.number; + const closeComment = `Closing this pull request because it has had no updates for more than ${DAYS_INACTIVE} days. If you plan to continue working on it, feel free to reopen or open a new PR.`; + + if (dryRun) { + core.info(`[dry-run] Would close contributor PR #${issue_number} from ${pr.user.login}`); + continue; + } + + await github.rest.issues.createComment({ + owner, + repo, + issue_number, + body: closeComment, + }); + + await github.rest.pulls.update({ + owner, + repo, + pull_number: issue_number, + state: "closed", + }); + + core.info(`Closed contributor PR #${issue_number} from ${pr.user.login}`); + } diff --git a/reference/openai-codex/.github/workflows/codespell.yml b/reference/openai-codex/.github/workflows/codespell.yml new file mode 100644 index 0000000..aaa15cf --- /dev/null +++ b/reference/openai-codex/.github/workflows/codespell.yml @@ -0,0 +1,30 @@ +# Codespell configuration is within .codespellrc +--- +name: Codespell + +on: + push: + branches: [main] + pull_request: + branches: [main] + +permissions: + contents: read + +jobs: + codespell: + name: Check for spelling errors + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + - name: Annotate locations with typos + uses: codespell-project/codespell-problem-matcher@b80729f885d32f78a716c2f107b4db1025001c42 # v1.1.0 + - name: Codespell + uses: codespell-project/actions-codespell@8f01853be192eb0f849a5c7d721450e7a467c579 # v2.2 + with: + ignore_words_file: .codespellignore diff --git a/reference/openai-codex/.github/workflows/issue-deduplicator.yml b/reference/openai-codex/.github/workflows/issue-deduplicator.yml new file mode 100644 index 0000000..f15c190 --- /dev/null +++ b/reference/openai-codex/.github/workflows/issue-deduplicator.yml @@ -0,0 +1,420 @@ +name: Issue Deduplicator + +on: + issues: + types: + - opened + - labeled + +jobs: + gather-duplicates-all: + name: Identify potential duplicates (all issues) + # Prevent runs on forks (requires OpenAI API key, wastes Actions minutes) + if: github.repository == 'openai/codex' && (github.event.action == 'opened' || (github.event.action == 'labeled' && github.event.label.name == 'codex-deduplicate')) + runs-on: ubuntu-latest + permissions: + contents: read + outputs: + codex_output: ${{ steps.codex-all.outputs.final-message }} + steps: + - name: Prepare Codex inputs + env: + GH_TOKEN: ${{ github.token }} + REPO: ${{ github.repository }} + ISSUE_NUMBER: ${{ github.event.issue.number }} + run: | + set -eo pipefail + + CURRENT_ISSUE_FILE=codex-current-issue.json + EXISTING_ALL_FILE=codex-existing-issues-all.json + + gh issue list --repo "$REPO" \ + --json number,title,body,createdAt,updatedAt,state,labels \ + --limit 1000 \ + --state all \ + --search "sort:created-desc" \ + | jq '[.[] | { + number, + title, + body: ((.body // "")[0:4000]), + createdAt, + updatedAt, + state, + labels: ((.labels // []) | map(.name)) + }]' \ + > "$EXISTING_ALL_FILE" + + gh issue view "$ISSUE_NUMBER" \ + --repo "$REPO" \ + --json number,title,body \ + | jq '{number, title, body: ((.body // "")[0:4000])}' \ + > "$CURRENT_ISSUE_FILE" + + echo "Prepared duplicate detection input files." + echo "all_issue_count=$(jq 'length' "$EXISTING_ALL_FILE")" + + # Prompt instructions are intentionally inline in this workflow. The old + # .github/prompts/issue-deduplicator.txt file is obsolete and removed. + - id: codex-all + name: Find duplicates (pass 1, all issues) + uses: openai/codex-action@5c3f4ccdb2b8790f73d6b21751ac00e602aa0c02 # v1.7 + with: + openai-api-key: ${{ secrets.CODEX_OPENAI_API_KEY }} + allow-users: "*" + safety-strategy: drop-sudo + sandbox: read-only + prompt: | + You are an assistant that triages new GitHub issues by identifying potential duplicates. + + You will receive the following JSON files located in the current working directory: + - `codex-current-issue.json`: JSON object describing the newly created issue (fields: number, title, body). + - `codex-existing-issues-all.json`: JSON array of recent issues with states, timestamps, and labels. + + Instructions: + - Compare the current issue against the existing issues to find up to five that appear to describe the same underlying problem or request. + - Prioritize concrete overlap in symptoms, reproduction details, error signatures, and user intent. + - Prefer active unresolved issues when confidence is similar. + - Closed issues can still be valid duplicates if they clearly match. + - Return fewer matches rather than speculative ones. + - If confidence is low, return an empty list. + - Include at most five issue numbers. + - After analysis, provide a short reason for your decision. + + output-schema: | + { + "type": "object", + "properties": { + "issues": { + "type": "array", + "items": { + "type": "string" + } + }, + "reason": { "type": "string" } + }, + "required": ["issues", "reason"], + "additionalProperties": false + } + + normalize-duplicates-all: + name: Normalize pass 1 output + needs: gather-duplicates-all + if: ${{ needs.gather-duplicates-all.result == 'success' }} + runs-on: ubuntu-latest + permissions: {} + outputs: + issues_json: ${{ steps.normalize-all.outputs.issues_json }} + reason: ${{ steps.normalize-all.outputs.reason }} + has_matches: ${{ steps.normalize-all.outputs.has_matches }} + steps: + - id: normalize-all + name: Normalize pass 1 output + env: + CODEX_OUTPUT: ${{ needs.gather-duplicates-all.outputs.codex_output }} + CURRENT_ISSUE_NUMBER: ${{ github.event.issue.number }} + run: | + set -eo pipefail + + raw=${CODEX_OUTPUT//$'\r'/} + parsed=false + issues='[]' + reason='' + + if [ -n "$raw" ] && printf '%s' "$raw" | jq -e 'type == "object" and (.issues | type == "array")' >/dev/null 2>&1; then + parsed=true + issues=$(printf '%s' "$raw" | jq -c '[.issues[] | tostring]') + reason=$(printf '%s' "$raw" | jq -r '.reason // ""') + else + reason='Pass 1 output was empty or invalid JSON.' + fi + + filtered=$(jq -cn --argjson issues "$issues" --arg current "$CURRENT_ISSUE_NUMBER" '[ + $issues[] + | tostring + | select(. != $current) + ] | reduce .[] as $issue ([]; if index($issue) then . else . + [$issue] end) | .[:5]') + + has_matches=false + if [ "$(jq 'length' <<< "$filtered")" -gt 0 ]; then + has_matches=true + fi + + echo "Pass 1 parsed: $parsed" + echo "Pass 1 matches after filtering: $(jq 'length' <<< "$filtered")" + echo "Pass 1 reason: $reason" + + { + echo "issues_json=$filtered" + echo "reason<> "$GITHUB_OUTPUT" + + gather-duplicates-open: + name: Identify potential duplicates (open issues fallback) + # Pass 1 Codex execution drops sudo on its runner, so run the fallback in a fresh job. + needs: normalize-duplicates-all + if: ${{ needs.normalize-duplicates-all.result == 'success' && needs.normalize-duplicates-all.outputs.has_matches != 'true' }} + runs-on: ubuntu-latest + permissions: + contents: read + outputs: + codex_output: ${{ steps.codex-open.outputs.final-message }} + steps: + - name: Prepare Codex inputs + env: + GH_TOKEN: ${{ github.token }} + REPO: ${{ github.repository }} + ISSUE_NUMBER: ${{ github.event.issue.number }} + run: | + set -eo pipefail + + CURRENT_ISSUE_FILE=codex-current-issue.json + EXISTING_OPEN_FILE=codex-existing-issues-open.json + + gh issue list --repo "$REPO" \ + --json number,title,body,createdAt,updatedAt,state,labels \ + --limit 1000 \ + --state open \ + --search "sort:created-desc" \ + | jq '[.[] | { + number, + title, + body: ((.body // "")[0:4000]), + createdAt, + updatedAt, + state, + labels: ((.labels // []) | map(.name)) + }]' \ + > "$EXISTING_OPEN_FILE" + + gh issue view "$ISSUE_NUMBER" \ + --repo "$REPO" \ + --json number,title,body \ + | jq '{number, title, body: ((.body // "")[0:4000])}' \ + > "$CURRENT_ISSUE_FILE" + + echo "Prepared fallback duplicate detection input files." + echo "open_issue_count=$(jq 'length' "$EXISTING_OPEN_FILE")" + + - id: codex-open + name: Find duplicates (pass 2, open issues) + uses: openai/codex-action@5c3f4ccdb2b8790f73d6b21751ac00e602aa0c02 # v1.7 + with: + openai-api-key: ${{ secrets.CODEX_OPENAI_API_KEY }} + allow-users: "*" + safety-strategy: drop-sudo + sandbox: read-only + prompt: | + You are an assistant that triages new GitHub issues by identifying potential duplicates. + + This is a fallback pass because a broad search did not find convincing matches. + + You will receive the following JSON files located in the current working directory: + - `codex-current-issue.json`: JSON object describing the newly created issue (fields: number, title, body). + - `codex-existing-issues-open.json`: JSON array of open issues only. + + Instructions: + - Search only these active unresolved issues for duplicates of the current issue. + - Prioritize concrete overlap in symptoms, reproduction details, error signatures, and user intent. + - Prefer fewer, higher-confidence matches. + - If confidence is low, return an empty list. + - Include at most five issue numbers. + - After analysis, provide a short reason for your decision. + + output-schema: | + { + "type": "object", + "properties": { + "issues": { + "type": "array", + "items": { + "type": "string" + } + }, + "reason": { "type": "string" } + }, + "required": ["issues", "reason"], + "additionalProperties": false + } + + normalize-duplicates-open: + name: Normalize pass 2 output + needs: gather-duplicates-open + if: ${{ needs.gather-duplicates-open.result == 'success' }} + runs-on: ubuntu-latest + permissions: {} + outputs: + issues_json: ${{ steps.normalize-open.outputs.issues_json }} + reason: ${{ steps.normalize-open.outputs.reason }} + has_matches: ${{ steps.normalize-open.outputs.has_matches }} + steps: + - id: normalize-open + name: Normalize pass 2 output + env: + CODEX_OUTPUT: ${{ needs.gather-duplicates-open.outputs.codex_output }} + CURRENT_ISSUE_NUMBER: ${{ github.event.issue.number }} + run: | + set -eo pipefail + + raw=${CODEX_OUTPUT//$'\r'/} + parsed=false + issues='[]' + reason='' + + if [ -n "$raw" ] && printf '%s' "$raw" | jq -e 'type == "object" and (.issues | type == "array")' >/dev/null 2>&1; then + parsed=true + issues=$(printf '%s' "$raw" | jq -c '[.issues[] | tostring]') + reason=$(printf '%s' "$raw" | jq -r '.reason // ""') + else + reason='Pass 2 output was empty or invalid JSON.' + fi + + filtered=$(jq -cn --argjson issues "$issues" --arg current "$CURRENT_ISSUE_NUMBER" '[ + $issues[] + | tostring + | select(. != $current) + ] | reduce .[] as $issue ([]; if index($issue) then . else . + [$issue] end) | .[:5]') + + has_matches=false + if [ "$(jq 'length' <<< "$filtered")" -gt 0 ]; then + has_matches=true + fi + + echo "Pass 2 parsed: $parsed" + echo "Pass 2 matches after filtering: $(jq 'length' <<< "$filtered")" + echo "Pass 2 reason: $reason" + + { + echo "issues_json=$filtered" + echo "reason<> "$GITHUB_OUTPUT" + + select-final: + name: Select final duplicate set + needs: + - normalize-duplicates-all + - normalize-duplicates-open + if: ${{ always() && needs.normalize-duplicates-all.result == 'success' && (needs.normalize-duplicates-open.result == 'success' || needs.normalize-duplicates-open.result == 'skipped') }} + runs-on: ubuntu-latest + permissions: + contents: read + outputs: + codex_output: ${{ steps.select-final.outputs.codex_output }} + steps: + - id: select-final + name: Select final duplicate set + env: + PASS1_ISSUES: ${{ needs.normalize-duplicates-all.outputs.issues_json }} + PASS1_REASON: ${{ needs.normalize-duplicates-all.outputs.reason }} + PASS2_ISSUES: ${{ needs.normalize-duplicates-open.outputs.issues_json }} + PASS2_REASON: ${{ needs.normalize-duplicates-open.outputs.reason }} + PASS1_HAS_MATCHES: ${{ needs.normalize-duplicates-all.outputs.has_matches }} + PASS2_HAS_MATCHES: ${{ needs.normalize-duplicates-open.outputs.has_matches }} + run: | + set -eo pipefail + + selected_issues='[]' + selected_reason='No plausible duplicates found.' + selected_pass='none' + + if [ "$PASS1_HAS_MATCHES" = "true" ]; then + selected_issues=${PASS1_ISSUES:-'[]'} + selected_reason=${PASS1_REASON:-'Pass 1 found duplicates.'} + selected_pass='all' + fi + + if [ "$PASS2_HAS_MATCHES" = "true" ]; then + selected_issues=${PASS2_ISSUES:-'[]'} + selected_reason=${PASS2_REASON:-'Pass 2 found duplicates.'} + selected_pass='open-fallback' + fi + + final_json=$(jq -cn \ + --argjson issues "$selected_issues" \ + --arg reason "$selected_reason" \ + --arg pass "$selected_pass" \ + '{issues: $issues, reason: $reason, pass: $pass}') + + echo "Final pass used: $selected_pass" + echo "Final duplicate count: $(jq '.issues | length' <<< "$final_json")" + echo "Final reason: $(jq -r '.reason' <<< "$final_json")" + + { + echo "codex_output<> "$GITHUB_OUTPUT" + + comment-on-issue: + name: Comment with potential duplicates + needs: select-final + if: ${{ always() && needs.select-final.result == 'success' }} + runs-on: ubuntu-latest + permissions: + contents: read + issues: write + steps: + - name: Comment on issue + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + env: + CODEX_OUTPUT: ${{ needs.select-final.outputs.codex_output }} + with: + github-token: ${{ github.token }} + script: | + const raw = process.env.CODEX_OUTPUT ?? ''; + let parsed; + try { + parsed = JSON.parse(raw); + } catch (error) { + core.info(`Codex output was not valid JSON. Raw output: ${raw}`); + core.info(`Parse error: ${error.message}`); + return; + } + + const issues = Array.isArray(parsed?.issues) ? parsed.issues : []; + const currentIssueNumber = String(context.payload.issue.number); + const passUsed = typeof parsed?.pass === 'string' ? parsed.pass : 'unknown'; + const reason = typeof parsed?.reason === 'string' ? parsed.reason : ''; + + console.log(`Current issue number: ${currentIssueNumber}`); + console.log(`Pass used: ${passUsed}`); + if (reason) { + console.log(`Reason: ${reason}`); + } + console.log(issues); + + const filteredIssues = [...new Set(issues.map((value) => String(value)))].filter((value) => value !== currentIssueNumber).slice(0, 5); + + if (filteredIssues.length === 0) { + core.info('Codex reported no potential duplicates.'); + return; + } + + const lines = [ + 'Potential duplicates detected. Please review them and close your issue if it is a duplicate.', + '', + ...filteredIssues.map((value) => `- #${String(value)}`), + '', + '*Powered by [Codex Action](https://github.com/openai/codex-action)*']; + + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.payload.issue.number, + body: lines.join("\n"), + }); + + - name: Remove codex-deduplicate label + if: ${{ always() && github.event.action == 'labeled' && github.event.label.name == 'codex-deduplicate' }} + env: + GH_TOKEN: ${{ github.token }} + GH_REPO: ${{ github.repository }} + ISSUE_NUMBER: ${{ github.event.issue.number }} + run: | + gh issue edit "$ISSUE_NUMBER" --remove-label codex-deduplicate || true + echo "Attempted to remove label: codex-deduplicate" diff --git a/reference/openai-codex/.github/workflows/issue-labeler.yml b/reference/openai-codex/.github/workflows/issue-labeler.yml new file mode 100644 index 0000000..77fe5d0 --- /dev/null +++ b/reference/openai-codex/.github/workflows/issue-labeler.yml @@ -0,0 +1,151 @@ +name: Issue Labeler + +on: + issues: + types: + - opened + - labeled + +jobs: + gather-labels: + name: Generate label suggestions + # Prevent runs on forks (requires OpenAI API key, wastes Actions minutes) + if: github.repository == 'openai/codex' && (github.event.action == 'opened' || (github.event.action == 'labeled' && github.event.label.name == 'codex-label')) + runs-on: ubuntu-latest + permissions: + contents: read + outputs: + codex_output: ${{ steps.codex.outputs.final-message }} + steps: + - id: codex + uses: openai/codex-action@5c3f4ccdb2b8790f73d6b21751ac00e602aa0c02 # v1.7 + with: + openai-api-key: ${{ secrets.CODEX_OPENAI_API_KEY }} + allow-users: "*" + safety-strategy: drop-sudo + sandbox: read-only + prompt: | + You are an assistant that reviews GitHub issues for the repository. + + Your job is to choose the most appropriate labels for the issue described later in this prompt. + Follow these rules: + + - Add one (and only one) of the following three labels to distinguish the type of issue. Default to "bug" if unsure. + 1. bug — Reproducible defects in Codex products (CLI, VS Code extension, web, auth). + 2. enhancement — Feature requests or usability improvements that ask for new capabilities, better ergonomics, or quality-of-life tweaks. + 3. documentation — Updates or corrections needed in docs/README/config references (broken links, missing examples, outdated keys, clarification requests). + + - If applicable, add one of the following labels to specify which sub-product or product surface the issue relates to. + 1. CLI — the Codex command line interface. + 2. extension — VS Code (or other IDE) extension-specific issues. + 3. app - Issues related to the Codex desktop application. + 4. codex-web — Issues targeting the Codex web UI/Cloud experience. + 5. github-action — Issues with the Codex GitHub action. + 6. iOS — Issues with the Codex iOS app. + + - Additionally add zero or more of the following labels that are relevant to the issue content. Prefer a small set of precise labels over many broad ones. + - For agent-area issues, prefer the most specific applicable label. Use "agent" only as a fallback for agent-related issues that do not fit a more specific agent-area label. Prefer "app-server" over "session" or "config" when the issue is about app-server protocol, API, RPC, schema, launch, or bridge behavior. Use "memory" for agentic memory storage/retrieval and "performance" for high process memory utilization or memory leaks. + 1. windows-os — Bugs or friction specific to Windows environments (always when PowerShell is mentioned, path handling, copy/paste, OS-specific auth or tooling failures). + 2. mcp — Topics involving Model Context Protocol servers/clients. + 3. mcp-server — Problems related to the codex mcp-server command, where codex runs as an MCP server. + 4. azure — Problems or requests tied to Azure OpenAI deployments. + 5. model-behavior — Undesirable LLM behavior: forgetting goals, refusing work, hallucinating environment details, quota misreports, or other reasoning/performance anomalies. + 6. code-review — Issues related to the code review feature or functionality. + 7. safety-check - Issues related to cyber risk detection or trusted access verification. + 8. auth - Problems related to authentication, login, or access tokens. + 9. exec - Problems related to the "codex exec" command or functionality. + 10. hooks - Problems related to event hooks + 11. context - Problems related to compaction, context windows, or available context reporting. + 12. skills - Problems related to skills or plugins + 13. custom-model - Problems that involve using custom model providers, local models, or OSS models. + 14. rate-limits - Problems related to token limits, rate limits, or token usage reporting. + 15. sandbox - Issues related to local sandbox environments or tool call approvals to override sandbox restrictions. + 16. tool-calls - Problems related to specific tool call invocations including unexpected errors, failures, or hangs. + 17. TUI - Problems with the terminal user interface (TUI) including keyboard shortcuts, copy & pasting, menus, or screen update issues. + 18. app-server - Issues involving the app-server protocol or interfaces, including SDK/API payloads, thread/* and turn/* RPCs, app-server launch behavior, external app/controller bridges, and app-server protocol/schema behavior. + 19. connectivity - Network connectivity or endpoint issues, including reconnecting messages, stream dropped/disconnected errors, websocket/SSE/transport failures, timeout/network/VPN/proxy/API endpoint failures, and related retry behavior. + 20. subagent - Issues involving subagents, sub-agents, or multi-agent behavior, including spawn_agent, wait_agent, close_agent, worker/explorer roles, delegation, agent teams, lifecycle, model/config inheritance, quotas, and orchestration. + 21. session - Issues involving session or thread management, including resume, fork, archive, rename/title, thread history, rollout persistence, compaction, checkpoints, retention, and cross-session state. + 22. config - Issues involving config.toml, config keys, config key merging, config updates, profiles, hooks config, project config, agent role TOMLs, instruction/personality config, and config schema behavior. + 23. plan - Issues involving plan mode, planning workflows, or plan-specific tools/behavior. + 24. computer-use - Issues involving agentic computer use or SkyComputerUseService. + 25. browser - Issues involving agentic browser use, IAB, or the built-in browser within the Codex app. + 26. memory - Issues involving agentic memory storage and retrieval. + 27. imagen - Issues involving image generation. + 28. remote - Issues involving remote access, remote control, or SSH. + 29. performance - Issues involving slow, laggy performance, high memory utilization, or memory leaks. + 30. automations - Issues involving scheduled automation tasks or heartbeats. + 31. pets - Issues involving pets avatars and animations. + 32. agent - Fallback only for core agent loop or agent-related issues that do not fit app-server, connectivity, subagent, session, config, plan, computer-use, browser, memory, imagen, remote, performance, automations, or pets. + + Issue number: ${{ github.event.issue.number }} + + Issue title: + ${{ github.event.issue.title }} + + Issue body: + ${{ github.event.issue.body }} + + Repository full name: + ${{ github.repository }} + + output-schema: | + { + "type": "object", + "properties": { + "labels": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["labels"], + "additionalProperties": false + } + + apply-labels: + name: Apply labels from Codex output + needs: gather-labels + if: ${{ needs.gather-labels.result != 'skipped' }} + runs-on: ubuntu-latest + permissions: + contents: read + issues: write + env: + GH_TOKEN: ${{ github.token }} + GH_REPO: ${{ github.repository }} + ISSUE_NUMBER: ${{ github.event.issue.number }} + CODEX_OUTPUT: ${{ needs.gather-labels.outputs.codex_output }} + steps: + - name: Apply labels + run: | + json=${CODEX_OUTPUT//$'\r'/} + if [ -z "$json" ]; then + echo "Codex produced no output. Skipping label application." + exit 0 + fi + + if ! printf '%s' "$json" | jq -e 'type == "object" and (.labels | type == "array")' >/dev/null 2>&1; then + echo "Codex output did not include a labels array. Raw output: $json" + exit 0 + fi + + labels=$(printf '%s' "$json" | jq -r '.labels[] | tostring') + if [ -z "$labels" ]; then + echo "Codex returned an empty array. Nothing to do." + exit 0 + fi + + cmd=(gh issue edit "$ISSUE_NUMBER") + while IFS= read -r label; do + cmd+=(--add-label "$label") + done <<< "$labels" + + "${cmd[@]}" || true + + - name: Remove codex-label trigger + if: ${{ always() && github.event.action == 'labeled' && github.event.label.name == 'codex-label' }} + run: | + gh issue edit "$ISSUE_NUMBER" --remove-label codex-label || true + echo "Attempted to remove label: codex-label" diff --git a/reference/openai-codex/.github/workflows/rust-ci-full-nextest-platform.yml b/reference/openai-codex/.github/workflows/rust-ci-full-nextest-platform.yml new file mode 100644 index 0000000..7dc39d3 --- /dev/null +++ b/reference/openai-codex/.github/workflows/rust-ci-full-nextest-platform.yml @@ -0,0 +1,464 @@ +name: rust-ci-full nextest platform + +on: + workflow_call: + inputs: + runner: + required: true + type: string + runner_group: + required: false + default: "" + type: string + runner_labels: + required: false + default: "" + type: string + archive_runner: + required: false + default: "" + type: string + archive_runner_group: + required: false + default: "" + type: string + archive_runner_labels: + required: false + default: "" + type: string + target: + required: true + type: string + profile: + required: true + type: string + artifact_id: + required: true + type: string + remote_env: + required: false + default: false + type: boolean + test_threads: + required: false + default: 0 + type: number + use_sccache: + required: false + default: false + type: boolean + +# Caller workflow-level env does not flow through workflow_call, so keep the +# Cargo git transport hardening on the archive and shard jobs directly here. +env: + CARGO_NET_GIT_FETCH_WITH_CLI: "true" + +jobs: + archive: + name: Build nextest archive + runs-on: ${{ inputs.archive_runner_group != '' && fromJSON(format('{{"group":"{0}","labels":"{1}"}}', inputs.archive_runner_group, inputs.archive_runner_labels)) || inputs.archive_runner != '' && inputs.archive_runner || inputs.runner_group != '' && fromJSON(format('{{"group":"{0}","labels":"{1}"}}', inputs.runner_group, inputs.runner_labels)) || inputs.runner }} + timeout-minutes: 60 + defaults: + run: + working-directory: codex-rs + env: + # Windows ARM64 archives are built on Windows x64, while their shards run + # on native Windows ARM64. Key producer-side caches by the archive runner + # so the cross-compile build reuses the Windows x64 cache lineage. + ARCHIVE_CACHE_RUNNER: ${{ inputs.archive_runner != '' && inputs.archive_runner || inputs.runner }} + USE_SCCACHE: ${{ inputs.use_sccache && 'true' || 'false' }} + CARGO_INCREMENTAL: "0" + SCCACHE_CACHE_SIZE: 10G + NEXTEST_ARCHIVE_FILE: nextest-${{ inputs.artifact_id }}.tar.zst + TEST_HELPERS_ARTIFACT: nextest-test-helpers-${{ inputs.artifact_id }} + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Configure Dev Drive (Windows) + if: ${{ runner.os == 'Windows' }} + shell: pwsh + run: ../.github/scripts/setup-dev-drive.ps1 + + - name: Install Linux build dependencies + if: ${{ runner.os == 'Linux' }} + shell: bash + run: | + set -euo pipefail + if command -v apt-get >/dev/null 2>&1; then + sudo apt-get update -y + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends pkg-config libcap-dev bubblewrap + fi + + - name: Install DotSlash + uses: facebook/install-dotslash@1e4e7b3e07eaca387acb98f1d4720e0bee8dbb6a # v2 + + - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + with: + targets: ${{ inputs.target }} + + - name: Expose MSVC SDK environment (Windows) + if: ${{ runner.os == 'Windows' && inputs.target == 'aarch64-pc-windows-msvc' }} + uses: ./.github/actions/setup-msvc-env + with: + target: ${{ inputs.target }} + + - name: Compute lockfile hash + id: lockhash + shell: bash + run: | + set -euo pipefail + echo "hash=$(sha256sum Cargo.lock | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" + echo "toolchain_hash=$(sha256sum rust-toolchain.toml | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" + + - name: Restore cargo home cache + id: cache_cargo_home_restore + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + key: cargo-home-${{ env.ARCHIVE_CACHE_RUNNER }}-${{ inputs.target }}-${{ inputs.profile }}-${{ steps.lockhash.outputs.hash }}-${{ steps.lockhash.outputs.toolchain_hash }} + restore-keys: | + cargo-home-${{ env.ARCHIVE_CACHE_RUNNER }}-${{ inputs.target }}-${{ inputs.profile }}- + + - name: Install sccache + if: ${{ env.USE_SCCACHE == 'true' }} + uses: taiki-e/install-action@44c6d64aa62cd779e873306675c7a58e86d6d532 # v2.62.49 + with: + tool: sccache + version: 0.7.5 + + - name: Configure sccache backend + if: ${{ env.USE_SCCACHE == 'true' }} + shell: bash + run: | + set -euo pipefail + if [[ -n "${ACTIONS_CACHE_URL:-}" && -n "${ACTIONS_RUNTIME_TOKEN:-}" ]]; then + echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV" + echo "Using sccache GitHub backend" + else + echo "SCCACHE_GHA_ENABLED=false" >> "$GITHUB_ENV" + if [[ -n "${DEV_DRIVE:-}" ]]; then + echo "SCCACHE_DIR=${DEV_DRIVE}\\.sccache" >> "$GITHUB_ENV" + else + echo "SCCACHE_DIR=${{ github.workspace }}/.sccache" >> "$GITHUB_ENV" + fi + echo "Using sccache local disk + actions/cache fallback" + fi + + - name: Enable sccache wrapper + if: ${{ env.USE_SCCACHE == 'true' }} + shell: bash + run: | + set -euo pipefail + wrapper="$(command -v sccache)" + if [[ "${RUNNER_OS}" == "Windows" ]] && command -v cygpath >/dev/null 2>&1; then + wrapper="$(cygpath -w "${wrapper}")" + fi + echo "RUSTC_WRAPPER=${wrapper}" >> "$GITHUB_ENV" + echo "CARGO_BUILD_RUSTC_WRAPPER=${wrapper}" >> "$GITHUB_ENV" + + - name: Restore sccache cache (fallback) + if: ${{ env.USE_SCCACHE == 'true' && env.SCCACHE_GHA_ENABLED != 'true' }} + id: cache_sccache_restore + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: ${{ env.SCCACHE_DIR }} + key: sccache-${{ env.ARCHIVE_CACHE_RUNNER }}-${{ inputs.target }}-${{ inputs.profile }}-${{ steps.lockhash.outputs.hash }}-${{ github.run_id }} + restore-keys: | + sccache-${{ env.ARCHIVE_CACHE_RUNNER }}-${{ inputs.target }}-${{ inputs.profile }}-${{ steps.lockhash.outputs.hash }}- + sccache-${{ env.ARCHIVE_CACHE_RUNNER }}-${{ inputs.target }}-${{ inputs.profile }}- + + - uses: taiki-e/install-action@44c6d64aa62cd779e873306675c7a58e86d6d532 # v2.62.49 + with: + tool: nextest + version: 0.9.103 + + - name: Enable unprivileged user namespaces (Linux) + if: runner.os == 'Linux' + run: | + sudo sysctl -w kernel.unprivileged_userns_clone=1 + if sudo sysctl -a 2>/dev/null | grep -q '^kernel.apparmor_restrict_unprivileged_userns'; then + sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 + fi + + - name: Build nextest archive + shell: bash + run: | + set -euo pipefail + archive_dir="${RUNNER_TEMP}/nextest-archive" + mkdir -p "${archive_dir}" + cargo nextest archive \ + --target ${{ inputs.target }} \ + --cargo-profile ${{ inputs.profile }} \ + --timings \ + --archive-file "${archive_dir}/${NEXTEST_ARCHIVE_FILE}" + + - name: Build runtime test helpers + if: ${{ runner.os == 'Linux' || runner.os == 'Windows' }} + shell: bash + run: | + set -euo pipefail + helper_dir="${RUNNER_TEMP}/${TEST_HELPERS_ARTIFACT}" + mkdir -p "${helper_dir}" + + if [[ "${RUNNER_OS}" == "Linux" ]]; then + cargo build \ + --target ${{ inputs.target }} \ + --profile ${{ inputs.profile }} \ + -p codex-linux-sandbox \ + --bin codex-linux-sandbox + cp "target/${{ inputs.target }}/${{ inputs.profile }}/codex-linux-sandbox" "${helper_dir}/" + else + cargo build \ + --target ${{ inputs.target }} \ + --profile ${{ inputs.profile }} \ + -p codex-windows-sandbox \ + --bin codex-windows-sandbox-setup \ + --bin codex-command-runner + cp "target/${{ inputs.target }}/${{ inputs.profile }}/codex-windows-sandbox-setup.exe" "${helper_dir}/" + cp "target/${{ inputs.target }}/${{ inputs.profile }}/codex-command-runner.exe" "${helper_dir}/" + fi + + - name: Upload Cargo timings (nextest) + if: always() + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: cargo-timings-rust-ci-nextest-${{ inputs.target }}-${{ inputs.profile }} + path: codex-rs/target/**/cargo-timings/cargo-timing.html + if-no-files-found: warn + + - name: Upload nextest archive + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: nextest-archive-${{ inputs.artifact_id }} + path: ${{ runner.temp }}/nextest-archive/${{ env.NEXTEST_ARCHIVE_FILE }} + if-no-files-found: error + retention-days: 1 + + - name: Upload runtime test helpers + if: ${{ runner.os == 'Linux' || runner.os == 'Windows' }} + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: ${{ env.TEST_HELPERS_ARTIFACT }} + path: ${{ runner.temp }}/${{ env.TEST_HELPERS_ARTIFACT }}/* + if-no-files-found: error + retention-days: 1 + + - name: Save cargo home cache + if: always() && !cancelled() && steps.cache_cargo_home_restore.outputs.cache-hit != 'true' + continue-on-error: true + uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + key: cargo-home-${{ env.ARCHIVE_CACHE_RUNNER }}-${{ inputs.target }}-${{ inputs.profile }}-${{ steps.lockhash.outputs.hash }}-${{ steps.lockhash.outputs.toolchain_hash }} + + - name: Save sccache cache (fallback) + if: always() && !cancelled() && env.USE_SCCACHE == 'true' && env.SCCACHE_GHA_ENABLED != 'true' + continue-on-error: true + uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: ${{ env.SCCACHE_DIR }} + key: sccache-${{ env.ARCHIVE_CACHE_RUNNER }}-${{ inputs.target }}-${{ inputs.profile }}-${{ steps.lockhash.outputs.hash }}-${{ github.run_id }} + + - name: sccache stats + if: always() && env.USE_SCCACHE == 'true' + continue-on-error: true + run: sccache --show-stats || true + + - name: sccache summary + if: always() && env.USE_SCCACHE == 'true' + shell: bash + run: | + { + echo "### sccache stats — ${{ inputs.target }} (tests)"; + echo; + echo '```'; + sccache --show-stats || true; + echo '```'; + } >> "$GITHUB_STEP_SUMMARY" + + shard: + name: Tests shard ${{ matrix.shard }}/4 + needs: archive + runs-on: ${{ inputs.runner_group != '' && fromJSON(format('{{"group":"{0}","labels":"{1}"}}', inputs.runner_group, inputs.runner_labels)) || inputs.runner }} + timeout-minutes: 60 + defaults: + run: + working-directory: codex-rs + env: + NEXTEST_ARCHIVE_FILE: nextest-${{ inputs.artifact_id }}.tar.zst + TEST_HELPERS_ARTIFACT: nextest-test-helpers-${{ inputs.artifact_id }} + strategy: + fail-fast: false + matrix: + shard: [1, 2, 3, 4] + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Install Linux build dependencies + if: ${{ runner.os == 'Linux' }} + shell: bash + run: | + set -euo pipefail + if command -v apt-get >/dev/null 2>&1; then + sudo apt-get update -y + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends pkg-config libcap-dev bubblewrap + fi + + - name: Install DotSlash + uses: facebook/install-dotslash@1e4e7b3e07eaca387acb98f1d4720e0bee8dbb6a # v2 + + - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + with: + targets: ${{ inputs.target }} + + - uses: taiki-e/install-action@44c6d64aa62cd779e873306675c7a58e86d6d532 # v2.62.49 + with: + tool: nextest + version: 0.9.103 + + - name: Enable unprivileged user namespaces (Linux) + if: runner.os == 'Linux' + run: | + sudo sysctl -w kernel.unprivileged_userns_clone=1 + if sudo sysctl -a 2>/dev/null | grep -q '^kernel.apparmor_restrict_unprivileged_userns'; then + sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 + fi + + - name: Set up remote test env (Docker) + if: ${{ runner.os == 'Linux' && inputs.remote_env }} + shell: bash + run: | + set -euo pipefail + export CODEX_TEST_REMOTE_ENV_CONTAINER_NAME="codex-remote-test-env-${{ github.run_id }}-${{ matrix.shard }}" + source "${GITHUB_WORKSPACE}/scripts/test-remote-env.sh" + echo "CODEX_TEST_REMOTE_ENV=${CODEX_TEST_REMOTE_ENV}" >> "$GITHUB_ENV" + echo "CODEX_TEST_REMOTE_EXEC_SERVER_URL=${CODEX_TEST_REMOTE_EXEC_SERVER_URL}" >> "$GITHUB_ENV" + + - name: Download nextest archive + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: nextest-archive-${{ inputs.artifact_id }} + path: ${{ runner.temp }}/nextest-archive + + - name: Download runtime test helpers + if: ${{ runner.os == 'Linux' || runner.os == 'Windows' }} + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: ${{ env.TEST_HELPERS_ARTIFACT }} + path: ${{ runner.temp }}/${{ env.TEST_HELPERS_ARTIFACT }} + + - name: tests + id: test + shell: bash + run: | + set -euo pipefail + archive_file="${RUNNER_TEMP}/nextest-archive/${NEXTEST_ARCHIVE_FILE}" + workspace_root="$(pwd)" + + if [[ "${RUNNER_OS}" == "Windows" ]]; then + archive_file="$(cygpath -w "${archive_file}")" + workspace_root="$(cygpath -w "${workspace_root}")" + fi + + if [[ "${RUNNER_OS}" == "Linux" ]]; then + helper_dir="${RUNNER_TEMP}/${TEST_HELPERS_ARTIFACT}" + helper_target_dir="$(pwd)/target/${{ inputs.target }}/${{ inputs.profile }}" + mkdir -p "${helper_target_dir}" + cp "${helper_dir}/codex-linux-sandbox" "${helper_target_dir}/" + chmod +x "${helper_target_dir}/codex-linux-sandbox" + elif [[ "${RUNNER_OS}" == "Windows" ]]; then + helper_dir="${RUNNER_TEMP}/${TEST_HELPERS_ARTIFACT}" + helper_target_dir="$(pwd)/target/${{ inputs.target }}/${{ inputs.profile }}" + mkdir -p "${helper_target_dir}" + cp "${helper_dir}/codex-windows-sandbox-setup.exe" "${helper_target_dir}/" + cp "${helper_dir}/codex-command-runner.exe" "${helper_target_dir}/" + fi + + nextest_args=( + run + --no-fail-fast + --archive-file "${archive_file}" + --workspace-remap "${workspace_root}" + --partition "hash:${{ matrix.shard }}/4" + ) + if [[ "${{ inputs.test_threads }}" != "0" ]]; then + nextest_args+=(--test-threads "${{ inputs.test_threads }}") + fi + + test_command=(cargo nextest "${nextest_args[@]}") + if [[ "${RUNNER_OS}" == "Linux" ]]; then + sandbox_helper="${helper_target_dir}/codex-linux-sandbox" + test_command=( + env + "CARGO_BIN_EXE_codex-linux-sandbox=${sandbox_helper}" + "CARGO_BIN_EXE_codex_linux_sandbox=${sandbox_helper}" + cargo nextest "${nextest_args[@]}" + ) + elif [[ "${RUNNER_OS}" == "Windows" ]]; then + setup_helper="$(cygpath -w "${helper_target_dir}/codex-windows-sandbox-setup.exe")" + command_runner="$(cygpath -w "${helper_target_dir}/codex-command-runner.exe")" + test_command=( + env + "CARGO_BIN_EXE_codex_windows_sandbox_setup=${setup_helper}" + "CARGO_BIN_EXE_codex_command_runner=${command_runner}" + cargo nextest "${nextest_args[@]}" + ) + fi + + "${test_command[@]}" + env: + RUST_BACKTRACE: 1 + RUST_MIN_STACK: "8388608" # 8 MiB + NEXTEST_STATUS_LEVEL: leak + + - name: Upload nextest JUnit report + if: always() + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: nextest-junit-rust-ci-${{ inputs.artifact_id }}-shard-${{ matrix.shard }} + path: codex-rs/target/nextest/default/junit.xml + if-no-files-found: warn + + - name: Tear down remote test env + if: ${{ always() && runner.os == 'Linux' && inputs.remote_env }} + shell: bash + run: | + set +e + if [[ "${STEPS_TEST_OUTCOME}" != "success" ]]; then + docker logs "${CODEX_TEST_REMOTE_ENV}" || true + fi + docker rm -f "${CODEX_TEST_REMOTE_ENV}" >/dev/null 2>&1 || true + env: + STEPS_TEST_OUTCOME: ${{ steps.test.outcome }} + + - name: verify tests passed + if: steps.test.outcome == 'failure' + run: | + echo "Tests failed. See logs for details." + exit 1 + + result: + name: Platform result + needs: shard + if: always() + runs-on: ubuntu-24.04 + steps: + - name: Confirm test shards passed + shell: bash + run: | + if [[ "${{ needs.shard.result }}" != "success" ]]; then + echo "Nextest shards finished with result: ${{ needs.shard.result }}" >&2 + exit 1 + fi diff --git a/reference/openai-codex/.github/workflows/rust-ci-full.yml b/reference/openai-codex/.github/workflows/rust-ci-full.yml new file mode 100644 index 0000000..c4a9329 --- /dev/null +++ b/reference/openai-codex/.github/workflows/rust-ci-full.yml @@ -0,0 +1,643 @@ +name: rust-ci-full +on: + push: + branches: + - main + - "**full-ci**" + workflow_dispatch: + +# CI builds in debug (dev) for faster signal. +env: + # Cargo's libgit2 transport has been flaky on macOS when fetching git + # dependencies with nested submodules. Use the system git CLI, which has + # better network/proxy behavior and matches Cargo's own suggested fallback. + CARGO_NET_GIT_FETCH_WITH_CLI: "true" + +jobs: + # --- CI that doesn't need specific targets --------------------------------- + general: + name: Format / etc + runs-on: ubuntu-24.04 + defaults: + run: + working-directory: codex-rs + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + with: + components: rustfmt + - uses: taiki-e/install-action@44c6d64aa62cd779e873306675c7a58e86d6d532 # v2.62.49 + with: + tool: just + - name: cargo fmt + run: cargo fmt -- --config imports_granularity=Item --check + - name: Rust benchmark smoke test + run: just bench-smoke + + cargo_shear: + name: cargo shear + runs-on: ubuntu-24.04 + defaults: + run: + working-directory: codex-rs + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + - uses: taiki-e/install-action@44c6d64aa62cd779e873306675c7a58e86d6d532 # v2.62.49 + with: + tool: cargo-shear@1.11.2 + - name: cargo shear + run: cargo shear --deny-warnings + + argument_comment_lint_package: + name: Argument comment lint package + runs-on: ubuntu-24.04 + env: + CARGO_DYLINT_VERSION: 5.0.0 + DYLINT_LINK_VERSION: 5.0.0 + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + with: + toolchain: nightly-2025-09-18 + components: llvm-tools-preview, rustc-dev, rust-src + - name: Cache cargo-dylint tooling + id: cargo_dylint_cache + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + ~/.cargo/bin/cargo-dylint + ~/.cargo/bin/dylint-link + ~/.cargo/registry/index + ~/.cargo/registry/cache + ~/.cargo/git/db + key: argument-comment-lint-${{ runner.os }}-${{ env.CARGO_DYLINT_VERSION }}-${{ env.DYLINT_LINK_VERSION }}-${{ hashFiles('tools/argument-comment-lint/Cargo.lock', 'tools/argument-comment-lint/rust-toolchain', '.github/workflows/rust-ci.yml', '.github/workflows/rust-ci-full.yml') }} + - name: Install cargo-dylint tooling + if: ${{ steps.cargo_dylint_cache.outputs.cache-hit != 'true' }} + shell: bash + run: | + cargo install --locked cargo-dylint --version "$CARGO_DYLINT_VERSION" + cargo install --locked dylint-link --version "$DYLINT_LINK_VERSION" + - name: Check Python wrapper syntax + run: python3 -m py_compile tools/argument-comment-lint/wrapper_common.py tools/argument-comment-lint/run.py tools/argument-comment-lint/run-prebuilt-linter.py tools/argument-comment-lint/test_wrapper_common.py + - name: Test Python wrapper helpers + run: python3 -m unittest discover -s tools/argument-comment-lint -p 'test_*.py' + - name: Test argument comment lint package + working-directory: tools/argument-comment-lint + run: cargo test + env: + RUST_MIN_STACK: "8388608" # 8 MiB + + argument_comment_lint_prebuilt: + name: Argument comment lint - ${{ matrix.name }} + runs-on: ${{ matrix.runs_on || matrix.runner }} + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + include: + - name: Linux + runner: ubuntu-24.04 + - name: macOS + runner: macos-15-xlarge + - name: Windows + runner: windows-x64 + runs_on: + group: codex-runners + labels: codex-windows-x64 + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - uses: ./.github/actions/setup-bazel-ci + with: + target: ${{ runner.os }} + install-test-prereqs: true + - name: Install Linux sandbox build dependencies + if: ${{ runner.os == 'Linux' }} + shell: bash + run: | + sudo DEBIAN_FRONTEND=noninteractive apt-get update + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends pkg-config libcap-dev + - name: Run argument comment lint on codex-rs via Bazel + if: ${{ runner.os != 'Windows' }} + env: + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + shell: bash + run: | + bazel_targets="$(./tools/argument-comment-lint/list-bazel-targets.sh)" + ./.github/scripts/run-bazel-ci.sh \ + -- \ + build \ + --config=argument-comment-lint \ + --keep_going \ + --build_metadata=COMMIT_SHA=${GITHUB_SHA} \ + -- \ + ${bazel_targets} + - name: Run argument comment lint on codex-rs via Bazel + if: ${{ runner.os == 'Windows' }} + env: + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + shell: bash + run: | + ./.github/scripts/run-argument-comment-lint-bazel.sh \ + --config=argument-comment-lint \ + --platforms=//:local_windows \ + --keep_going \ + --build_metadata=COMMIT_SHA=${GITHUB_SHA} + + # --- CI to validate on different os/targets -------------------------------- + lint_build: + name: Lint/Build — ${{ matrix.runner }} - ${{ matrix.target }}${{ matrix.profile == 'release' && ' (release)' || '' }} + runs-on: ${{ matrix.runs_on || matrix.runner }} + timeout-minutes: 30 + defaults: + run: + working-directory: codex-rs + env: + # Speed up repeated builds across CI runs by caching compiled objects, except on + # arm64 macOS runners cross-targeting x86_64 where ring/cc-rs can produce + # mixed-architecture archives under sccache. + USE_SCCACHE: ${{ (startsWith(matrix.runner, 'windows') || (matrix.runner == 'macos-15-xlarge' && matrix.target == 'x86_64-apple-darwin')) && 'false' || 'true' }} + CARGO_INCREMENTAL: "0" + SCCACHE_CACHE_SIZE: 10G + # In rust-ci, representative release-profile checks use thin LTO for faster feedback. + CARGO_PROFILE_RELEASE_LTO: ${{ matrix.profile == 'release' && 'thin' || 'fat' }} + + strategy: + fail-fast: false + matrix: + include: + - runner: macos-15-xlarge + target: aarch64-apple-darwin + profile: dev + - runner: macos-15-xlarge + target: x86_64-apple-darwin + profile: dev + - runner: ubuntu-24.04 + target: x86_64-unknown-linux-musl + profile: dev + runs_on: + group: codex-runners + labels: codex-linux-x64 + - runner: ubuntu-24.04 + target: x86_64-unknown-linux-gnu + profile: dev + runs_on: + group: codex-runners + labels: codex-linux-x64 + - runner: ubuntu-24.04-arm + target: aarch64-unknown-linux-musl + profile: dev + runs_on: + group: codex-runners + labels: codex-linux-arm64 + - runner: ubuntu-24.04-arm + target: aarch64-unknown-linux-gnu + profile: dev + runs_on: + group: codex-runners + labels: codex-linux-arm64 + - runner: windows-x64 + target: x86_64-pc-windows-msvc + profile: dev + runs_on: + group: codex-runners + labels: codex-windows-x64 + - runner: windows-arm64 + target: aarch64-pc-windows-msvc + profile: dev + runs_on: + group: codex-runners + labels: codex-windows-arm64 + + # Also run representative release builds on Mac and Linux because + # there could be release-only build errors we want to catch. + # Hopefully this also pre-populates the build cache to speed up + # releases. + - runner: macos-15-xlarge + target: aarch64-apple-darwin + profile: release + - runner: ubuntu-24.04 + target: x86_64-unknown-linux-musl + profile: release + runs_on: + group: codex-runners + labels: codex-linux-x64 + - runner: ubuntu-24.04-arm + target: aarch64-unknown-linux-musl + profile: release + runs_on: + group: codex-runners + labels: codex-linux-arm64 + - runner: windows-x64 + target: x86_64-pc-windows-msvc + profile: release + runs_on: + group: codex-runners + labels: codex-windows-x64 + - runner: windows-arm64 + target: aarch64-pc-windows-msvc + profile: release + runs_on: + group: codex-runners + labels: codex-windows-arm64 + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - name: Install Linux build dependencies + if: ${{ runner.os == 'Linux' }} + shell: bash + run: | + set -euo pipefail + if command -v apt-get >/dev/null 2>&1; then + sudo apt-get update -y + packages=(pkg-config libcap-dev) + if [[ "${{ matrix.target }}" == 'x86_64-unknown-linux-musl' || "${{ matrix.target }}" == 'aarch64-unknown-linux-musl' ]]; then + packages+=(libubsan1) + fi + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends "${packages[@]}" + fi + - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + with: + targets: ${{ matrix.target }} + components: clippy + + - if: ${{ matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'}} + name: Use hermetic Cargo home (musl) + shell: bash + run: | + set -euo pipefail + cargo_home="${GITHUB_WORKSPACE}/.cargo-home" + mkdir -p "${cargo_home}/bin" + echo "CARGO_HOME=${cargo_home}" >> "$GITHUB_ENV" + echo "${cargo_home}/bin" >> "$GITHUB_PATH" + : > "${cargo_home}/config.toml" + + - name: Compute lockfile hash + id: lockhash + working-directory: codex-rs + shell: bash + run: | + set -euo pipefail + echo "hash=$(sha256sum Cargo.lock | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" + echo "toolchain_hash=$(sha256sum rust-toolchain.toml | cut -d' ' -f1)" >> "$GITHUB_OUTPUT" + + # Explicit cache restore: split cargo home vs target, so we can + # avoid caching the large target dir on the gnu-dev job. + - name: Restore cargo home cache + id: cache_cargo_home_restore + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + ${{ github.workspace }}/.cargo-home/bin/ + ${{ github.workspace }}/.cargo-home/registry/index/ + ${{ github.workspace }}/.cargo-home/registry/cache/ + ${{ github.workspace }}/.cargo-home/git/db/ + key: cargo-home-${{ matrix.runner }}-${{ matrix.target }}-${{ matrix.profile }}-${{ steps.lockhash.outputs.hash }}-${{ steps.lockhash.outputs.toolchain_hash }} + restore-keys: | + cargo-home-${{ matrix.runner }}-${{ matrix.target }}-${{ matrix.profile }}- + + # Install and restore sccache cache + - name: Install sccache + if: ${{ env.USE_SCCACHE == 'true' }} + uses: taiki-e/install-action@44c6d64aa62cd779e873306675c7a58e86d6d532 # v2.62.49 + with: + tool: sccache + version: 0.7.5 + + - name: Configure sccache backend + if: ${{ env.USE_SCCACHE == 'true' }} + shell: bash + run: | + set -euo pipefail + if [[ -n "${ACTIONS_CACHE_URL:-}" && -n "${ACTIONS_RUNTIME_TOKEN:-}" ]]; then + echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV" + echo "Using sccache GitHub backend" + else + echo "SCCACHE_GHA_ENABLED=false" >> "$GITHUB_ENV" + echo "SCCACHE_DIR=${{ github.workspace }}/.sccache" >> "$GITHUB_ENV" + echo "Using sccache local disk + actions/cache fallback" + fi + + - name: Enable sccache wrapper + if: ${{ env.USE_SCCACHE == 'true' }} + shell: bash + run: echo "RUSTC_WRAPPER=sccache" >> "$GITHUB_ENV" + + - name: Restore sccache cache (fallback) + if: ${{ env.USE_SCCACHE == 'true' && env.SCCACHE_GHA_ENABLED != 'true' }} + id: cache_sccache_restore + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: ${{ github.workspace }}/.sccache/ + key: sccache-${{ matrix.runner }}-${{ matrix.target }}-${{ matrix.profile }}-${{ steps.lockhash.outputs.hash }}-${{ github.run_id }} + restore-keys: | + sccache-${{ matrix.runner }}-${{ matrix.target }}-${{ matrix.profile }}-${{ steps.lockhash.outputs.hash }}- + sccache-${{ matrix.runner }}-${{ matrix.target }}-${{ matrix.profile }}- + + - if: ${{ matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'}} + name: Disable sccache wrapper (musl) + shell: bash + run: | + set -euo pipefail + echo "RUSTC_WRAPPER=" >> "$GITHUB_ENV" + echo "RUSTC_WORKSPACE_WRAPPER=" >> "$GITHUB_ENV" + + - if: ${{ matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'}} + name: Prepare APT cache directories (musl) + shell: bash + run: | + set -euo pipefail + sudo mkdir -p /var/cache/apt/archives /var/lib/apt/lists + sudo chown -R "$USER:$USER" /var/cache/apt /var/lib/apt/lists + + - if: ${{ matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'}} + name: Restore APT cache (musl) + id: cache_apt_restore + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + /var/cache/apt + key: apt-${{ matrix.runner }}-${{ matrix.target }}-v1 + + - if: ${{ matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'}} + name: Install Zig + uses: mlugg/setup-zig@d1434d08867e3ee9daa34448df10607b98908d29 # v2.2.1 + with: + version: 0.14.0 + + - if: ${{ matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'}} + name: Install musl build tools + env: + DEBIAN_FRONTEND: noninteractive + TARGET: ${{ matrix.target }} + APT_UPDATE_ARGS: -o Acquire::Retries=3 + APT_INSTALL_ARGS: --no-install-recommends + shell: bash + run: bash "${GITHUB_WORKSPACE}/.github/scripts/install-musl-build-tools.sh" + + - if: ${{ matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'}} + name: Configure rustc UBSan wrapper (musl host) + shell: bash + run: | + set -euo pipefail + ubsan="" + if command -v ldconfig >/dev/null 2>&1; then + ubsan="$(ldconfig -p | grep -m1 'libubsan\.so\.1' | sed -E 's/.*=> (.*)$/\1/')" + fi + wrapper_root="${RUNNER_TEMP:-/tmp}" + wrapper="${wrapper_root}/rustc-ubsan-wrapper" + cat > "${wrapper}" <> "$GITHUB_ENV" + echo "RUSTC_WORKSPACE_WRAPPER=" >> "$GITHUB_ENV" + + - if: ${{ matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'}} + name: Clear sanitizer flags (musl) + shell: bash + run: | + set -euo pipefail + # Clear global Rust flags so host/proc-macro builds don't pull in UBSan. + echo "RUSTFLAGS=" >> "$GITHUB_ENV" + echo "CARGO_ENCODED_RUSTFLAGS=" >> "$GITHUB_ENV" + echo "RUSTDOCFLAGS=" >> "$GITHUB_ENV" + # Override any runner-level Cargo config rustflags as well. + echo "CARGO_BUILD_RUSTFLAGS=" >> "$GITHUB_ENV" + echo "CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS=" >> "$GITHUB_ENV" + echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS=" >> "$GITHUB_ENV" + echo "CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS=" >> "$GITHUB_ENV" + echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS=" >> "$GITHUB_ENV" + + sanitize_flags() { + local input="$1" + input="${input//-fsanitize=undefined/}" + input="${input//-fno-sanitize-recover=undefined/}" + input="${input//-fno-sanitize-trap=undefined/}" + echo "$input" + } + + cflags="$(sanitize_flags "${CFLAGS-}")" + cxxflags="$(sanitize_flags "${CXXFLAGS-}")" + echo "CFLAGS=${cflags}" >> "$GITHUB_ENV" + echo "CXXFLAGS=${cxxflags}" >> "$GITHUB_ENV" + + - if: ${{ !contains(matrix.target, 'windows') }} + name: Configure rusty_v8 artifact overrides and verify checksums + uses: ./.github/actions/setup-rusty-v8 + with: + target: ${{ matrix.target }} + + - name: Install cargo-chef + if: ${{ matrix.profile == 'release' }} + uses: taiki-e/install-action@44c6d64aa62cd779e873306675c7a58e86d6d532 # v2.62.49 + with: + tool: cargo-chef + version: 0.1.71 + + - name: Pre-warm dependency cache (cargo-chef) + if: ${{ matrix.profile == 'release' }} + shell: bash + run: | + set -euo pipefail + RECIPE="${RUNNER_TEMP}/chef-recipe.json" + cargo chef prepare --recipe-path "$RECIPE" + cargo chef cook --recipe-path "$RECIPE" --target ${{ matrix.target }} --release + + - name: cargo clippy + run: cargo clippy --target ${{ matrix.target }} --tests --profile ${{ matrix.profile }} --timings -- -D warnings + + - name: Upload Cargo timings (clippy) + if: always() + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: cargo-timings-rust-ci-clippy-${{ matrix.target }}-${{ matrix.profile }} + path: codex-rs/target/**/cargo-timings/cargo-timing.html + if-no-files-found: warn + + # Save caches explicitly; make non-fatal so cache packaging + # never fails the overall job. Only save when key wasn't hit. + - name: Save cargo home cache + if: always() && !cancelled() && steps.cache_cargo_home_restore.outputs.cache-hit != 'true' + continue-on-error: true + uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + ${{ github.workspace }}/.cargo-home/bin/ + ${{ github.workspace }}/.cargo-home/registry/index/ + ${{ github.workspace }}/.cargo-home/registry/cache/ + ${{ github.workspace }}/.cargo-home/git/db/ + key: cargo-home-${{ matrix.runner }}-${{ matrix.target }}-${{ matrix.profile }}-${{ steps.lockhash.outputs.hash }}-${{ steps.lockhash.outputs.toolchain_hash }} + + - name: Save sccache cache (fallback) + if: always() && !cancelled() && env.USE_SCCACHE == 'true' && env.SCCACHE_GHA_ENABLED != 'true' + continue-on-error: true + uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: ${{ github.workspace }}/.sccache/ + key: sccache-${{ matrix.runner }}-${{ matrix.target }}-${{ matrix.profile }}-${{ steps.lockhash.outputs.hash }}-${{ github.run_id }} + + - name: sccache stats + if: always() && env.USE_SCCACHE == 'true' + continue-on-error: true + run: sccache --show-stats || true + + - name: sccache summary + if: always() && env.USE_SCCACHE == 'true' + shell: bash + run: | + { + echo "### sccache stats — ${{ matrix.target }} (${{ matrix.profile }})"; + echo; + echo '```'; + sccache --show-stats || true; + echo '```'; + } >> "$GITHUB_STEP_SUMMARY" + + - name: Save APT cache (musl) + if: always() && !cancelled() && (matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl') && steps.cache_apt_restore.outputs.cache-hit != 'true' + continue-on-error: true + uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + /var/cache/apt + key: apt-${{ matrix.runner }}-${{ matrix.target }}-v1 + + tests_macos_aarch64: + name: Tests — macos-15-xlarge - aarch64-apple-darwin + uses: ./.github/workflows/rust-ci-full-nextest-platform.yml + with: + runner: macos-15-xlarge + target: aarch64-apple-darwin + profile: ci-test + artifact_id: macos-aarch64 + use_sccache: true + secrets: inherit + + tests_linux_x64_remote: + name: Tests — ubuntu-24.04 - x86_64-unknown-linux-gnu (remote) + uses: ./.github/workflows/rust-ci-full-nextest-platform.yml + with: + runner: ubuntu-24.04 + runner_group: codex-runners + runner_labels: codex-linux-x64 + target: x86_64-unknown-linux-gnu + profile: ci-test + artifact_id: linux-x64-remote + remote_env: true + use_sccache: true + secrets: inherit + + tests_linux_arm64: + name: Tests — ubuntu-24.04-arm - aarch64-unknown-linux-gnu + uses: ./.github/workflows/rust-ci-full-nextest-platform.yml + with: + runner: ubuntu-24.04-arm + runner_group: codex-runners + runner_labels: codex-linux-arm64 + target: aarch64-unknown-linux-gnu + profile: ci-test + artifact_id: linux-arm64 + use_sccache: true + secrets: inherit + + tests_windows_x64: + name: Tests — windows-x64 - x86_64-pc-windows-msvc + uses: ./.github/workflows/rust-ci-full-nextest-platform.yml + with: + runner: windows-x64 + runner_group: codex-runners + runner_labels: codex-windows-x64 + target: x86_64-pc-windows-msvc + profile: ci-test + artifact_id: windows-x64 + test_threads: 8 + secrets: inherit + + tests_windows_arm64: + name: Tests — windows-arm64 - aarch64-pc-windows-msvc + uses: ./.github/workflows/rust-ci-full-nextest-platform.yml + with: + runner: windows-arm64 + runner_group: codex-runners + runner_labels: codex-windows-arm64 + archive_runner: windows-x64 + archive_runner_group: codex-runners + archive_runner_labels: codex-windows-x64 + target: aarch64-pc-windows-msvc + profile: ci-test + artifact_id: windows-arm64 + test_threads: 8 + use_sccache: true + secrets: inherit + + # --- Gatherer job for the full post-merge workflow -------------------------- + results: + name: Full CI results + needs: + [ + general, + cargo_shear, + argument_comment_lint_package, + argument_comment_lint_prebuilt, + lint_build, + tests_macos_aarch64, + tests_linux_x64_remote, + tests_linux_arm64, + tests_windows_x64, + tests_windows_arm64, + ] + if: always() + runs-on: ubuntu-24.04 + steps: + - name: Summarize + shell: bash + run: | + echo "argpkg : ${{ needs.argument_comment_lint_package.result }}" + echo "arglint: ${{ needs.argument_comment_lint_prebuilt.result }}" + echo "general: ${{ needs.general.result }}" + echo "shear : ${{ needs.cargo_shear.result }}" + echo "lint : ${{ needs.lint_build.result }}" + echo "test macos : ${{ needs.tests_macos_aarch64.result }}" + echo "test linux : ${{ needs.tests_linux_x64_remote.result }}" + echo "test arm64 : ${{ needs.tests_linux_arm64.result }}" + echo "test winx64: ${{ needs.tests_windows_x64.result }}" + echo "test winarm: ${{ needs.tests_windows_arm64.result }}" + [[ '${{ needs.argument_comment_lint_package.result }}' == 'success' ]] || { echo 'argument_comment_lint_package failed'; exit 1; } + [[ '${{ needs.argument_comment_lint_prebuilt.result }}' == 'success' ]] || { echo 'argument_comment_lint_prebuilt failed'; exit 1; } + [[ '${{ needs.general.result }}' == 'success' ]] || { echo 'general failed'; exit 1; } + [[ '${{ needs.cargo_shear.result }}' == 'success' ]] || { echo 'cargo_shear failed'; exit 1; } + [[ '${{ needs.lint_build.result }}' == 'success' ]] || { echo 'lint_build failed'; exit 1; } + [[ '${{ needs.tests_macos_aarch64.result }}' == 'success' ]] || { echo 'tests_macos_aarch64 failed'; exit 1; } + [[ '${{ needs.tests_linux_x64_remote.result }}' == 'success' ]] || { echo 'tests_linux_x64_remote failed'; exit 1; } + [[ '${{ needs.tests_linux_arm64.result }}' == 'success' ]] || { echo 'tests_linux_arm64 failed'; exit 1; } + [[ '${{ needs.tests_windows_x64.result }}' == 'success' ]] || { echo 'tests_windows_x64 failed'; exit 1; } + [[ '${{ needs.tests_windows_arm64.result }}' == 'success' ]] || { echo 'tests_windows_arm64 failed'; exit 1; } + + - name: sccache summary note + if: always() + run: | + echo "Per-job sccache stats are attached to each matrix job's Step Summary." diff --git a/reference/openai-codex/.github/workflows/rust-ci.yml b/reference/openai-codex/.github/workflows/rust-ci.yml new file mode 100644 index 0000000..029b6f2 --- /dev/null +++ b/reference/openai-codex/.github/workflows/rust-ci.yml @@ -0,0 +1,245 @@ +name: rust-ci +on: + pull_request: {} + workflow_dispatch: + +jobs: + # --- Detect what changed so the fast PR workflow only runs relevant jobs ---- + changed: + name: Detect changed areas + runs-on: ubuntu-24.04 + outputs: + argument_comment_lint: ${{ steps.detect.outputs.argument_comment_lint }} + argument_comment_lint_package: ${{ steps.detect.outputs.argument_comment_lint_package }} + codex: ${{ steps.detect.outputs.codex }} + workflows: ${{ steps.detect.outputs.workflows }} + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + fetch-depth: 0 + persist-credentials: false + - name: Detect changed paths (no external action) + id: detect + shell: bash + run: | + set -euo pipefail + + if [[ "${{ github.event_name }}" == "pull_request" ]]; then + BASE_SHA='${{ github.event.pull_request.base.sha }}' + HEAD_SHA='${{ github.event.pull_request.head.sha }}' + echo "Base SHA: $BASE_SHA" + echo "Head SHA: $HEAD_SHA" + mapfile -t files < <(git diff --name-only --no-renames "$BASE_SHA" "$HEAD_SHA") + else + # On manual runs, default to the full fast-PR bundle. + files=("codex-rs/force" "tools/argument-comment-lint/force" ".github/force") + fi + + codex=false + argument_comment_lint=false + argument_comment_lint_package=false + workflows=false + for f in "${files[@]}"; do + [[ $f == codex-rs/* ]] && codex=true + [[ $f == codex-rs/* || $f == tools/argument-comment-lint/* || $f == justfile ]] && argument_comment_lint=true + [[ $f == defs.bzl || $f == workspace_root_test_launcher.sh.tpl || $f == workspace_root_test_launcher.bat.tpl ]] && argument_comment_lint=true + [[ $f == tools/argument-comment-lint/* || $f == .github/workflows/rust-ci.yml || $f == .github/workflows/rust-ci-full.yml ]] && argument_comment_lint_package=true + [[ $f == .github/* ]] && workflows=true + done + + echo "argument_comment_lint=$argument_comment_lint" >> "$GITHUB_OUTPUT" + echo "argument_comment_lint_package=$argument_comment_lint_package" >> "$GITHUB_OUTPUT" + echo "codex=$codex" >> "$GITHUB_OUTPUT" + echo "workflows=$workflows" >> "$GITHUB_OUTPUT" + + # --- Fast Cargo-native PR checks ------------------------------------------- + general: + name: Format / etc + runs-on: ubuntu-24.04 + needs: changed + if: ${{ needs.changed.outputs.codex == 'true' || needs.changed.outputs.workflows == 'true' }} + defaults: + run: + working-directory: codex-rs + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + with: + components: rustfmt + - uses: taiki-e/install-action@44c6d64aa62cd779e873306675c7a58e86d6d532 # v2.62.49 + with: + tool: just + - name: cargo fmt + run: cargo fmt -- --config imports_granularity=Item --check + - name: Rust benchmark smoke test + run: just bench-smoke + + cargo_shear: + name: cargo shear + runs-on: ubuntu-24.04 + needs: changed + if: ${{ needs.changed.outputs.codex == 'true' || needs.changed.outputs.workflows == 'true' }} + defaults: + run: + working-directory: codex-rs + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + - uses: taiki-e/install-action@44c6d64aa62cd779e873306675c7a58e86d6d532 # v2.62.49 + with: + tool: cargo-shear@1.11.2 + - name: cargo shear + run: cargo shear --deny-warnings + + argument_comment_lint_package: + name: Argument comment lint package + runs-on: ubuntu-24.04 + needs: changed + if: ${{ needs.changed.outputs.argument_comment_lint_package == 'true' }} + env: + CARGO_DYLINT_VERSION: 5.0.0 + DYLINT_LINK_VERSION: 5.0.0 + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + - name: Install nightly argument-comment-lint toolchain + shell: bash + run: | + rustup toolchain install nightly-2025-09-18 \ + --profile minimal \ + --component llvm-tools-preview \ + --component rustc-dev \ + --component rust-src \ + --no-self-update + rustup default nightly-2025-09-18 + - name: Cache cargo-dylint tooling + id: cargo_dylint_cache + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + ~/.cargo/bin/cargo-dylint + ~/.cargo/bin/dylint-link + ~/.cargo/registry/index + ~/.cargo/registry/cache + ~/.cargo/git/db + key: argument-comment-lint-${{ runner.os }}-${{ env.CARGO_DYLINT_VERSION }}-${{ env.DYLINT_LINK_VERSION }}-${{ hashFiles('tools/argument-comment-lint/Cargo.lock', 'tools/argument-comment-lint/rust-toolchain', '.github/workflows/rust-ci.yml', '.github/workflows/rust-ci-full.yml') }} + - name: Install cargo-dylint tooling + if: ${{ steps.cargo_dylint_cache.outputs.cache-hit != 'true' }} + shell: bash + run: | + cargo install --locked cargo-dylint --version "$CARGO_DYLINT_VERSION" + cargo install --locked dylint-link --version "$DYLINT_LINK_VERSION" + - name: Check Python wrapper syntax + run: python3 -m py_compile tools/argument-comment-lint/wrapper_common.py tools/argument-comment-lint/run.py tools/argument-comment-lint/run-prebuilt-linter.py tools/argument-comment-lint/test_wrapper_common.py + - name: Test Python wrapper helpers + run: python3 -m unittest discover -s tools/argument-comment-lint -p 'test_*.py' + - name: Test argument comment lint package + working-directory: tools/argument-comment-lint + run: cargo test + env: + RUST_MIN_STACK: "8388608" # 8 MiB + + argument_comment_lint_prebuilt: + name: Argument comment lint - ${{ matrix.name }} + runs-on: ${{ matrix.runs_on || matrix.runner }} + timeout-minutes: ${{ matrix.timeout_minutes }} + needs: changed + strategy: + fail-fast: false + matrix: + include: + - name: Linux + runner: ubuntu-24.04 + timeout_minutes: 30 + - name: macOS + runner: macos-15-xlarge + timeout_minutes: 30 + - name: Windows + runner: windows-x64 + timeout_minutes: 30 + runs_on: + group: codex-runners + labels: codex-windows-x64 + steps: + - name: Check whether argument comment lint should run + id: argument_comment_lint_gate + shell: bash + env: + ARGUMENT_COMMENT_LINT: ${{ needs.changed.outputs.argument_comment_lint }} + WORKFLOWS: ${{ needs.changed.outputs.workflows }} + run: | + if [[ "$ARGUMENT_COMMENT_LINT" == "true" || "$WORKFLOWS" == "true" ]]; then + echo "run=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + + echo "No argument-comment-lint relevant changes." + echo "run=false" >> "$GITHUB_OUTPUT" + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + if: ${{ steps.argument_comment_lint_gate.outputs.run == 'true' }} + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + - name: Run argument comment lint on codex-rs via Bazel + if: ${{ steps.argument_comment_lint_gate.outputs.run == 'true' }} + uses: ./.github/actions/run-argument-comment-lint + with: + target: ${{ runner.os }} + buildbuddy-api-key: ${{ secrets.BUILDBUDDY_API_KEY }} + + # --- Gatherer job that you mark as the ONLY required status ----------------- + results: + name: CI results (required) + needs: + [ + changed, + general, + cargo_shear, + argument_comment_lint_package, + argument_comment_lint_prebuilt, + ] + if: always() + runs-on: ubuntu-24.04 + steps: + - name: Summarize + shell: bash + run: | + echo "argpkg : ${{ needs.argument_comment_lint_package.result }}" + echo "arglint: ${{ needs.argument_comment_lint_prebuilt.result }}" + echo "general: ${{ needs.general.result }}" + echo "shear : ${{ needs.cargo_shear.result }}" + + # If nothing relevant changed (PR touching only root README, etc.), + # declare success regardless of other jobs. + if [[ "${NEEDS_CHANGED_OUTPUTS_ARGUMENT_COMMENT_LINT}" != 'true' && "${NEEDS_CHANGED_OUTPUTS_CODEX}" != 'true' && "${NEEDS_CHANGED_OUTPUTS_WORKFLOWS}" != 'true' ]]; then + echo 'No relevant changes -> CI not required.' + exit 0 + fi + + if [[ "${NEEDS_CHANGED_OUTPUTS_ARGUMENT_COMMENT_LINT_PACKAGE}" == 'true' ]]; then + [[ '${{ needs.argument_comment_lint_package.result }}' == 'success' ]] || { echo 'argument_comment_lint_package failed'; exit 1; } + fi + + if [[ "${NEEDS_CHANGED_OUTPUTS_ARGUMENT_COMMENT_LINT}" == 'true' || "${NEEDS_CHANGED_OUTPUTS_WORKFLOWS}" == 'true' ]]; then + [[ '${{ needs.argument_comment_lint_prebuilt.result }}' == 'success' ]] || { echo 'argument_comment_lint_prebuilt failed'; exit 1; } + fi + + if [[ "${NEEDS_CHANGED_OUTPUTS_CODEX}" == 'true' || "${NEEDS_CHANGED_OUTPUTS_WORKFLOWS}" == 'true' ]]; then + [[ '${{ needs.general.result }}' == 'success' ]] || { echo 'general failed'; exit 1; } + [[ '${{ needs.cargo_shear.result }}' == 'success' ]] || { echo 'cargo_shear failed'; exit 1; } + fi + env: + NEEDS_CHANGED_OUTPUTS_ARGUMENT_COMMENT_LINT: ${{ needs.changed.outputs.argument_comment_lint }} + NEEDS_CHANGED_OUTPUTS_CODEX: ${{ needs.changed.outputs.codex }} + NEEDS_CHANGED_OUTPUTS_WORKFLOWS: ${{ needs.changed.outputs.workflows }} + NEEDS_CHANGED_OUTPUTS_ARGUMENT_COMMENT_LINT_PACKAGE: ${{ needs.changed.outputs.argument_comment_lint_package }} diff --git a/reference/openai-codex/.github/workflows/rust-release-argument-comment-lint.yml b/reference/openai-codex/.github/workflows/rust-release-argument-comment-lint.yml new file mode 100644 index 0000000..f654bd9 --- /dev/null +++ b/reference/openai-codex/.github/workflows/rust-release-argument-comment-lint.yml @@ -0,0 +1,108 @@ +name: rust-release-argument-comment-lint + +on: + workflow_call: + inputs: + publish: + required: true + type: boolean + +jobs: + skip: + if: ${{ !inputs.publish }} + runs-on: ubuntu-latest + steps: + - run: echo "Skipping argument-comment-lint release assets for prerelease tag" + + build: + if: ${{ inputs.publish }} + name: Build - ${{ matrix.runner }} - ${{ matrix.target }} + runs-on: ${{ matrix.runs_on || matrix.runner }} + timeout-minutes: 60 + env: + CARGO_DYLINT_VERSION: 5.0.0 + DYLINT_LINK_VERSION: 5.0.0 + + strategy: + fail-fast: false + matrix: + include: + - runner: macos-15-xlarge + target: aarch64-apple-darwin + archive_name: argument-comment-lint-aarch64-apple-darwin.tar.gz + lib_name: libargument_comment_lint@nightly-2025-09-18-aarch64-apple-darwin.dylib + runner_binary: argument-comment-lint + cargo_dylint_binary: cargo-dylint + - runner: ubuntu-24.04 + target: x86_64-unknown-linux-gnu + archive_name: argument-comment-lint-x86_64-unknown-linux-gnu.tar.gz + lib_name: libargument_comment_lint@nightly-2025-09-18-x86_64-unknown-linux-gnu.so + runner_binary: argument-comment-lint + cargo_dylint_binary: cargo-dylint + - runner: ubuntu-24.04-arm + target: aarch64-unknown-linux-gnu + archive_name: argument-comment-lint-aarch64-unknown-linux-gnu.tar.gz + lib_name: libargument_comment_lint@nightly-2025-09-18-aarch64-unknown-linux-gnu.so + runner_binary: argument-comment-lint + cargo_dylint_binary: cargo-dylint + - runner: windows-x64 + target: x86_64-pc-windows-msvc + archive_name: argument-comment-lint-x86_64-pc-windows-msvc.zip + lib_name: argument_comment_lint@nightly-2025-09-18-x86_64-pc-windows-msvc.dll + runner_binary: argument-comment-lint.exe + cargo_dylint_binary: cargo-dylint.exe + runs_on: + group: codex-runners + labels: codex-windows-x64 + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + with: + toolchain: nightly-2025-09-18 + targets: ${{ matrix.target }} + components: llvm-tools-preview, rustc-dev, rust-src + + - name: Install tooling + shell: bash + run: | + install_root="${RUNNER_TEMP}/argument-comment-lint-tools" + cargo install --locked cargo-dylint --version "$CARGO_DYLINT_VERSION" --root "$install_root" + cargo install --locked dylint-link --version "$DYLINT_LINK_VERSION" + echo "INSTALL_ROOT=$install_root" >> "$GITHUB_ENV" + + - name: Cargo build + working-directory: tools/argument-comment-lint + shell: bash + run: cargo build --release --target ${{ matrix.target }} + + - name: Stage artifact + shell: bash + run: | + dest="dist/argument-comment-lint/${{ matrix.target }}" + mkdir -p "$dest" + package_root="${RUNNER_TEMP}/argument-comment-lint" + rm -rf "$package_root" + mkdir -p "$package_root/bin" "$package_root/lib" + + cp "tools/argument-comment-lint/target/${{ matrix.target }}/release/${{ matrix.runner_binary }}" \ + "$package_root/bin/${{ matrix.runner_binary }}" + cp "${INSTALL_ROOT}/bin/${{ matrix.cargo_dylint_binary }}" \ + "$package_root/bin/${{ matrix.cargo_dylint_binary }}" + cp "tools/argument-comment-lint/target/${{ matrix.target }}/release/${{ matrix.lib_name }}" \ + "$package_root/lib/${{ matrix.lib_name }}" + + archive_path="$dest/${{ matrix.archive_name }}" + if [[ "${{ runner.os }}" == "Windows" ]]; then + (cd "${RUNNER_TEMP}" && 7z a "$GITHUB_WORKSPACE/$archive_path" argument-comment-lint >/dev/null) + else + (cd "${RUNNER_TEMP}" && tar -czf "$GITHUB_WORKSPACE/$archive_path" argument-comment-lint) + fi + + - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: argument-comment-lint-${{ matrix.target }} + path: dist/argument-comment-lint/${{ matrix.target }}/* diff --git a/reference/openai-codex/.github/workflows/rust-release-prepare.yml b/reference/openai-codex/.github/workflows/rust-release-prepare.yml new file mode 100644 index 0000000..67e542e --- /dev/null +++ b/reference/openai-codex/.github/workflows/rust-release-prepare.yml @@ -0,0 +1,57 @@ +name: rust-release-prepare +on: + workflow_dispatch: + schedule: + - cron: "0 */4 * * *" + +concurrency: + group: ${{ github.workflow }} + cancel-in-progress: false + +permissions: + contents: write + pull-requests: write + +jobs: + prepare: + # Prevent scheduled runs on forks (no secrets, wastes Actions minutes) + if: github.repository == 'openai/codex' + environment: + name: rust-release-prepare + deployment: false + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: main + fetch-depth: 0 + persist-credentials: false + + - name: Update models.json + env: + OPENAI_API_KEY: ${{ secrets.CODEX_OPENAI_API_KEY }} + run: | + set -euo pipefail + + client_version="99.99.99" + terminal_info="github-actions" + user_agent="codex_cli_rs/99.99.99 (Linux $(uname -r); $(uname -m)) ${terminal_info}" + base_url="${OPENAI_BASE_URL:-https://chatgpt.com/backend-api/codex}" + + headers=( + -H "Authorization: Bearer ${OPENAI_API_KEY}" + -H "User-Agent: ${user_agent}" + ) + + url="${base_url%/}/models?client_version=${client_version}" + curl --http1.1 --fail --show-error --location "${headers[@]}" "${url}" | jq '.' > codex-rs/models-manager/models.json + + - name: Open pull request (if changed) + uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0 + with: + commit-message: "Update models.json" + title: "Update models.json" + body: "Automated update of models.json." + branch: "bot/update-models-json" + reviewers: "pakrym-oai,aibrahim-oai" + delete-branch: true diff --git a/reference/openai-codex/.github/workflows/rust-release-windows.yml b/reference/openai-codex/.github/workflows/rust-release-windows.yml new file mode 100644 index 0000000..51412be --- /dev/null +++ b/reference/openai-codex/.github/workflows/rust-release-windows.yml @@ -0,0 +1,342 @@ +name: rust-release-windows + +on: + workflow_call: + inputs: + release-lto: + required: true + type: string + secrets: + AZURE_TRUSTED_SIGNING_CLIENT_ID: + required: true + AZURE_TRUSTED_SIGNING_TENANT_ID: + required: true + AZURE_TRUSTED_SIGNING_SUBSCRIPTION_ID: + required: true + AZURE_TRUSTED_SIGNING_ENDPOINT: + required: true + AZURE_TRUSTED_SIGNING_ACCOUNT_NAME: + required: true + AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE_NAME: + required: true + +jobs: + build-windows-binaries: + name: Build Windows binaries - ${{ matrix.runner }} - ${{ matrix.target }} - ${{ matrix.bundle }} + runs-on: ${{ matrix.runs_on }} + # Windows release builds can exceed an hour on fat-LTO mainline releases, + # so keep the timeout aligned with the top-level release build headroom. + timeout-minutes: 90 + permissions: + contents: read + defaults: + run: + working-directory: codex-rs + env: + CARGO_PROFILE_RELEASE_LTO: ${{ inputs.release-lto }} + + strategy: + fail-fast: false + matrix: + include: + - runner: windows-x64 + target: x86_64-pc-windows-msvc + bundle: primary + binaries: "codex codex-responses-api-proxy" + runs_on: + group: codex-runners + labels: codex-windows-x64 + - runner: windows-arm64 + target: aarch64-pc-windows-msvc + bundle: primary + binaries: "codex codex-responses-api-proxy" + runs_on: + group: codex-runners + labels: codex-windows-arm64 + - runner: windows-x64 + target: x86_64-pc-windows-msvc + bundle: helpers + binaries: "codex-windows-sandbox-setup codex-command-runner" + runs_on: + group: codex-runners + labels: codex-windows-x64 + - runner: windows-arm64 + target: aarch64-pc-windows-msvc + bundle: helpers + binaries: "codex-windows-sandbox-setup codex-command-runner" + runs_on: + group: codex-runners + labels: codex-windows-arm64 + - runner: windows-x64 + target: x86_64-pc-windows-msvc + bundle: app-server + binaries: "codex-app-server" + runs_on: + group: codex-runners + labels: codex-windows-x64 + - runner: windows-arm64 + target: aarch64-pc-windows-msvc + bundle: app-server + binaries: "codex-app-server" + runs_on: + group: codex-runners + labels: codex-windows-arm64 + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - name: Print runner specs (Windows) + shell: powershell + run: | + $computer = Get-CimInstance Win32_ComputerSystem + $cpu = Get-CimInstance Win32_Processor | Select-Object -First 1 + $ramGiB = [math]::Round($computer.TotalPhysicalMemory / 1GB, 1) + Write-Host "Runner: $env:RUNNER_NAME" + Write-Host "OS: $([System.Environment]::OSVersion.VersionString)" + Write-Host "CPU: $($cpu.Name)" + Write-Host "Logical CPUs: $($computer.NumberOfLogicalProcessors)" + Write-Host "Physical CPUs: $($computer.NumberOfProcessors)" + Write-Host "Total RAM: $ramGiB GiB" + Write-Host "Disk usage:" + Get-PSDrive -PSProvider FileSystem | Format-Table -AutoSize Name, @{Name='Size(GB)';Expression={[math]::Round(($_.Used + $_.Free) / 1GB, 1)}}, @{Name='Free(GB)';Expression={[math]::Round($_.Free / 1GB, 1)}} + - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + with: + targets: ${{ matrix.target }} + + - name: Cargo build (Windows binaries) + shell: bash + run: | + build_args=() + for binary in ${{ matrix.binaries }}; do + build_args+=(--bin "$binary") + done + cargo build --target ${{ matrix.target }} --release --timings "${build_args[@]}" + + - name: Upload Cargo timings + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: cargo-timings-rust-release-windows-${{ matrix.target }}-${{ matrix.bundle }} + path: codex-rs/target/**/cargo-timings/cargo-timing.html + if-no-files-found: warn + + - name: Stage Windows binaries + shell: bash + run: | + output_dir="target/${{ matrix.target }}/release/staged-${{ matrix.bundle }}" + mkdir -p "$output_dir" + for binary in ${{ matrix.binaries }}; do + cp "target/${{ matrix.target }}/release/${binary}.exe" "$output_dir/${binary}.exe" + done + + - name: Upload Windows binaries + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: windows-binaries-${{ matrix.target }}-${{ matrix.bundle }} + path: | + codex-rs/target/${{ matrix.target }}/release/staged-${{ matrix.bundle }}/* + + build-windows: + needs: + - build-windows-binaries + name: Build - ${{ matrix.runner }} - ${{ matrix.target }} + runs-on: ${{ matrix.runs_on }} + timeout-minutes: 90 + permissions: + contents: read + id-token: write + defaults: + run: + working-directory: codex-rs + env: + WINDOWS_BINARIES: "codex codex-responses-api-proxy codex-windows-sandbox-setup codex-command-runner codex-app-server" + + strategy: + fail-fast: false + matrix: + include: + - runner: windows-x64 + target: x86_64-pc-windows-msvc + runs_on: + group: codex-runners + labels: codex-windows-x64 + - runner: windows-arm64 + target: aarch64-pc-windows-msvc + runs_on: + group: codex-runners + labels: codex-windows-arm64 + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Download prebuilt Windows primary binaries + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: windows-binaries-${{ matrix.target }}-primary + path: codex-rs/target/${{ matrix.target }}/release + + - name: Download prebuilt Windows helper binaries + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: windows-binaries-${{ matrix.target }}-helpers + path: codex-rs/target/${{ matrix.target }}/release + + - name: Download prebuilt Windows app-server binary + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: windows-binaries-${{ matrix.target }}-app-server + path: codex-rs/target/${{ matrix.target }}/release + + - name: Verify binaries + shell: bash + run: | + set -euo pipefail + for binary in ${WINDOWS_BINARIES}; do + ls -lh "target/${{ matrix.target }}/release/${binary}.exe" + done + + - name: Sign Windows binaries with Azure Trusted Signing + uses: ./.github/actions/windows-code-sign + with: + target: ${{ matrix.target }} + binaries: ${{ env.WINDOWS_BINARIES }} + client-id: ${{ secrets.AZURE_TRUSTED_SIGNING_CLIENT_ID }} + tenant-id: ${{ secrets.AZURE_TRUSTED_SIGNING_TENANT_ID }} + subscription-id: ${{ secrets.AZURE_TRUSTED_SIGNING_SUBSCRIPTION_ID }} + endpoint: ${{ secrets.AZURE_TRUSTED_SIGNING_ENDPOINT }} + account-name: ${{ secrets.AZURE_TRUSTED_SIGNING_ACCOUNT_NAME }} + certificate-profile-name: ${{ secrets.AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE_NAME }} + + - name: Stage artifacts + shell: bash + run: | + dest="dist/${{ matrix.target }}" + mkdir -p "$dest" + + for binary in ${WINDOWS_BINARIES}; do + cp "target/${{ matrix.target }}/release/${binary}.exe" \ + "$dest/${binary}-${{ matrix.target }}.exe" + done + + - name: Install DotSlash + uses: facebook/install-dotslash@1e4e7b3e07eaca387acb98f1d4720e0bee8dbb6a # v2 + + - name: Build Codex package archives + shell: bash + run: | + set -euo pipefail + for bundle in primary app-server; do + bash "${GITHUB_WORKSPACE}/.github/scripts/build-codex-package-archive.sh" \ + --target "${{ matrix.target }}" \ + --bundle "$bundle" \ + --entrypoint-dir "target/${{ matrix.target }}/release" \ + --archive-dir "dist/${{ matrix.target }}" + done + + - name: Build Python runtime wheel + shell: bash + run: | + set -euo pipefail + + case "${{ matrix.target }}" in + aarch64-pc-windows-msvc) + platform_tag="win_arm64" + ;; + x86_64-pc-windows-msvc) + platform_tag="win_amd64" + ;; + *) + echo "No Python runtime wheel platform tag for ${{ matrix.target }}" + exit 1 + ;; + esac + + python -m venv "${RUNNER_TEMP}/python-runtime-build-venv" + "${RUNNER_TEMP}/python-runtime-build-venv/Scripts/python.exe" -m pip install build + + stage_dir="${RUNNER_TEMP}/openai-codex-cli-bin-${{ matrix.target }}" + wheel_dir="${GITHUB_WORKSPACE}/python-runtime-dist/${{ matrix.target }}" + python "${GITHUB_WORKSPACE}/sdk/python/scripts/update_sdk_artifacts.py" \ + stage-runtime \ + "$stage_dir" \ + "dist/${{ matrix.target }}/codex-package-${{ matrix.target }}.tar.gz" \ + --codex-version "${GITHUB_REF_NAME}" \ + --platform-tag "$platform_tag" + "${RUNNER_TEMP}/python-runtime-build-venv/Scripts/python.exe" -m build --wheel --outdir "$wheel_dir" "$stage_dir" + + - name: Upload Python runtime wheel + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: python-runtime-wheel-${{ matrix.target }} + path: python-runtime-dist/${{ matrix.target }}/*.whl + if-no-files-found: error + + - name: Compress artifacts + shell: bash + run: | + # Path that contains the uncompressed binaries for the current + # ${{ matrix.target }} + dest="dist/${{ matrix.target }}" + repo_root=$PWD + + # For compatibility with environments that lack the `zstd` tool we + # additionally create a `.tar.gz` and `.zip` for every Windows binary. + # The end result is: + # codex-.zst + # codex-.tar.gz + # codex-.zip + for f in "$dest"/*; do + base="$(basename "$f")" + # Skip files that are already archives (shouldn't happen, but be + # safe). + if [[ "$base" == *.tar.gz || "$base" == *.tar.zst || "$base" == *.zip || "$base" == *.dmg ]]; then + continue + fi + + # Don't try to compress signature bundles. + if [[ "$base" == *.sigstore ]]; then + continue + fi + + # Create per-binary tar.gz + tar -C "$dest" -czf "$dest/${base}.tar.gz" "$base" + + # Create zip archive for Windows binaries. + # Must run from inside the dest dir so 7z won't embed the + # directory path inside the zip. + if [[ "$base" == "codex-${{ matrix.target }}.exe" ]]; then + # Bundle the sandbox helper binaries into the main codex zip so + # WinGet installs include the required helpers next to codex.exe. + # Fall back to the single-binary zip if the helpers are missing + # to avoid breaking releases. + bundle_dir="$(mktemp -d)" + runner_src="$dest/codex-command-runner-${{ matrix.target }}.exe" + setup_src="$dest/codex-windows-sandbox-setup-${{ matrix.target }}.exe" + if [[ -f "$runner_src" && -f "$setup_src" ]]; then + cp "$dest/$base" "$bundle_dir/$base" + cp "$runner_src" "$bundle_dir/codex-command-runner.exe" + cp "$setup_src" "$bundle_dir/codex-windows-sandbox-setup.exe" + # Use an absolute path so bundle zips land in the real dist + # dir even when 7z runs from a temp directory. + (cd "$bundle_dir" && 7z a "$repo_root/$dest/${base}.zip" .) + else + echo "warning: missing sandbox binaries; falling back to single-binary zip" + echo "warning: expected $runner_src and $setup_src" + (cd "$dest" && 7z a "${base}.zip" "$base") + fi + rm -rf "$bundle_dir" + else + (cd "$dest" && 7z a "${base}.zip" "$base") + fi + + # Keep raw executables and produce .zst alongside them. + "${GITHUB_WORKSPACE}/.github/workflows/zstd" -T0 -19 "$dest/$base" + done + + - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: ${{ matrix.target }} + path: | + codex-rs/dist/${{ matrix.target }}/* diff --git a/reference/openai-codex/.github/workflows/rust-release-zsh.yml b/reference/openai-codex/.github/workflows/rust-release-zsh.yml new file mode 100644 index 0000000..b55d2e7 --- /dev/null +++ b/reference/openai-codex/.github/workflows/rust-release-zsh.yml @@ -0,0 +1,103 @@ +name: rust-release-zsh + +on: + workflow_call: + +env: + ZSH_COMMIT: 77045ef899e53b9598bebc5a41db93a548a40ca6 + ZSH_PATCH: codex-rs/shell-escalation/patches/zsh-exec-wrapper.patch + +jobs: + linux: + name: Build zsh (Linux) - ${{ matrix.variant }} - ${{ matrix.target }} + runs-on: ${{ matrix.runner }} + timeout-minutes: 30 + container: + image: ${{ matrix.image }} + + strategy: + fail-fast: false + matrix: + include: + - runner: ubuntu-24.04 + target: x86_64-unknown-linux-musl + variant: ubuntu-24.04 + image: ubuntu:24.04 + archive_name: codex-zsh-x86_64-unknown-linux-musl.tar.gz + - runner: ubuntu-24.04-arm + target: aarch64-unknown-linux-musl + variant: ubuntu-24.04 + image: arm64v8/ubuntu:24.04 + archive_name: codex-zsh-aarch64-unknown-linux-musl.tar.gz + + steps: + - name: Install build prerequisites + shell: bash + run: | + set -euo pipefail + apt-get update + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + autoconf \ + bison \ + build-essential \ + ca-certificates \ + gettext \ + git \ + libncursesw5-dev + + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Build, smoke-test, and stage zsh artifact + shell: bash + run: | + "${GITHUB_WORKSPACE}/.github/scripts/build-zsh-release-artifact.sh" \ + "dist/zsh/${{ matrix.target }}/${{ matrix.archive_name }}" + + - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: codex-zsh-${{ matrix.target }} + path: dist/zsh/${{ matrix.target }}/* + + darwin: + name: Build zsh (macOS) - ${{ matrix.variant }} - ${{ matrix.target }} + runs-on: ${{ matrix.runner }} + timeout-minutes: 30 + + strategy: + fail-fast: false + matrix: + include: + - runner: macos-15-large + target: x86_64-apple-darwin + variant: macos-15 + archive_name: codex-zsh-x86_64-apple-darwin.tar.gz + - runner: macos-15-xlarge + target: aarch64-apple-darwin + variant: macos-15 + archive_name: codex-zsh-aarch64-apple-darwin.tar.gz + + steps: + - name: Install build prerequisites + shell: bash + run: | + set -euo pipefail + if ! command -v autoconf >/dev/null 2>&1; then + brew install autoconf + fi + + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Build, smoke-test, and stage zsh artifact + shell: bash + run: | + "${GITHUB_WORKSPACE}/.github/scripts/build-zsh-release-artifact.sh" \ + "dist/zsh/${{ matrix.target }}/${{ matrix.archive_name }}" + + - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: codex-zsh-${{ matrix.target }} + path: dist/zsh/${{ matrix.target }}/* diff --git a/reference/openai-codex/.github/workflows/rust-release.yml b/reference/openai-codex/.github/workflows/rust-release.yml new file mode 100644 index 0000000..2cd11e6 --- /dev/null +++ b/reference/openai-codex/.github/workflows/rust-release.yml @@ -0,0 +1,1562 @@ +# Release workflow for codex-rs. +# To release, follow a workflow like: +# ``` +# git tag -a rust-v0.1.0 -m "Release 0.1.0" +# git push origin rust-v0.1.0 +# ``` +# +# To use external macOS signing, manually dispatch `release_mode=build_unsigned`, +# sign the unsigned macOS artifacts in a secure enclave, upload the signed handoff +# archive as a GitHub Release asset, then manually dispatch +# `release_mode=promote_signed` with `unsigned_run_id` and `signed_macos_asset`. +# The signed handoff archive should contain target or artifact directories such +# as `aarch64-apple-darwin/` with signed binaries. + +name: rust-release +on: + push: + tags: + - "rust-v*.*.*" + workflow_dispatch: + inputs: + release_mode: + description: "build_unsigned creates unsigned macOS handoff artifacts; promote_signed finishes a release from signed macOS handoff artifacts." + required: false + type: choice + default: build_unsigned + options: + - build_unsigned + - promote_signed + sign_macos: + description: "Deprecated compatibility input; use release_mode instead." + required: false + type: boolean + default: false + unsigned_run_id: + description: "For promote_signed: workflow run id from the build_unsigned run." + required: false + type: string + signed_macos_asset: + description: "For promote_signed: exact GitHub Release asset name containing signed macOS handoff artifacts." + required: false + type: string + signed_macos_sha256: + description: "For promote_signed: optional SHA-256 of signed_macos_asset." + required: false + type: string + +concurrency: + group: ${{ github.workflow }} + cancel-in-progress: true + +jobs: + tag-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + - name: Validate tag matches Cargo.toml version + shell: bash + env: + RELEASE_MODE: ${{ github.event_name == 'workflow_dispatch' && inputs.release_mode || 'signed' }} + REQUESTED_SIGN_MACOS: ${{ inputs.sign_macos }} + SIGNED_MACOS_ASSET: ${{ inputs.signed_macos_asset }} + UNSIGNED_RUN_ID: ${{ inputs.unsigned_run_id }} + run: | + set -euo pipefail + echo "::group::Tag validation" + + case "${RELEASE_MODE}" in + signed) + if [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" ]]; then + echo "❌ Manual rust-release runs must use release_mode=build_unsigned or release_mode=promote_signed" + exit 1 + fi + ;; + build_unsigned) + if [[ "${GITHUB_EVENT_NAME}" != "workflow_dispatch" ]]; then + echo "❌ release_mode=build_unsigned is only valid for manual runs" + exit 1 + fi + ;; + promote_signed) + if [[ "${GITHUB_EVENT_NAME}" != "workflow_dispatch" ]]; then + echo "❌ release_mode=promote_signed is only valid for manual runs" + exit 1 + fi + if [[ ! "${UNSIGNED_RUN_ID}" =~ ^[0-9]+$ ]]; then + echo "❌ release_mode=promote_signed requires unsigned_run_id to be a workflow run id" + exit 1 + fi + if [[ -z "${SIGNED_MACOS_ASSET}" ]]; then + echo "❌ release_mode=promote_signed requires signed_macos_asset" + exit 1 + fi + if [[ "${SIGNED_MACOS_ASSET}" == */* || "${SIGNED_MACOS_ASSET}" == *"*"* || "${SIGNED_MACOS_ASSET}" == *"?"* || "${SIGNED_MACOS_ASSET}" == *"["* ]]; then + echo "❌ signed_macos_asset must be an exact release asset name, not a path or glob" + exit 1 + fi + if [[ "${UNSIGNED_RUN_ID}" == "${GITHUB_RUN_ID}" ]]; then + echo "❌ unsigned_run_id must refer to the earlier build_unsigned run, not this run" + exit 1 + fi + ;; + *) + echo "❌ Unknown release_mode '${RELEASE_MODE}'" + exit 1 + ;; + esac + + if [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" && "${REQUESTED_SIGN_MACOS}" == "true" ]]; then + echo "::warning title=Deprecated sign_macos input ignored::Use release_mode=build_unsigned or release_mode=promote_signed instead." + fi + + # 1. Must be a tag and match the regex + [[ "${GITHUB_REF_TYPE}" == "tag" ]] \ + || { echo "❌ Not a tag push"; exit 1; } + [[ "${GITHUB_REF_NAME}" =~ ^rust-v[0-9]+\.[0-9]+\.[0-9]+(-(alpha|beta)(\.[0-9]+)?)?$ ]] \ + || { echo "❌ Tag '${GITHUB_REF_NAME}' doesn't match expected format"; exit 1; } + + # 2. Extract versions + tag_ver="${GITHUB_REF_NAME#rust-v}" + cargo_ver="$(grep -m1 '^version' codex-rs/Cargo.toml \ + | sed -E 's/version *= *"([^"]+)".*/\1/')" + + # 3. Compare + [[ "${tag_ver}" == "${cargo_ver}" ]] \ + || { echo "❌ Tag ${tag_ver} ≠ Cargo.toml ${cargo_ver}"; exit 1; } + + echo "✅ Tag and Cargo.toml agree (${tag_ver})" + echo "::endgroup::" + + build: + if: ${{ github.event_name != 'workflow_dispatch' || inputs.release_mode != 'promote_signed' }} + needs: tag-check + name: Build - ${{ matrix.runner }} - ${{ matrix.target }} - ${{ matrix.bundle }} + runs-on: ${{ matrix.runs_on || matrix.runner }} + # Release builds can take a long time, so leave some headroom to avoid + # having to restart the full workflow due to a timeout. + timeout-minutes: 90 + permissions: + contents: read + id-token: write + defaults: + run: + working-directory: codex-rs + env: + # 2026-03-04: temporarily change releases to use thin LTO because + # Ubuntu ARM is timing out at 60 minutes. + CARGO_PROFILE_RELEASE_LTO: ${{ contains(github.ref_name, '-alpha') && 'thin' || 'thin' }} + SIGN_MACOS: ${{ github.event_name != 'workflow_dispatch' }} + + strategy: + fail-fast: false + matrix: + include: + - runner: macos-15-xlarge + target: aarch64-apple-darwin + bundle: primary + artifact_name: aarch64-apple-darwin + binaries: "codex codex-responses-api-proxy" + build_dmg: "true" + - runner: macos-15-xlarge + target: aarch64-apple-darwin + bundle: app-server + artifact_name: aarch64-apple-darwin-app-server + binaries: "codex-app-server" + build_dmg: "false" + - runner: macos-15-xlarge + target: x86_64-apple-darwin + bundle: primary + artifact_name: x86_64-apple-darwin + binaries: "codex codex-responses-api-proxy" + build_dmg: "true" + - runner: macos-15-xlarge + target: x86_64-apple-darwin + bundle: app-server + artifact_name: x86_64-apple-darwin-app-server + binaries: "codex-app-server" + build_dmg: "false" + # Release artifacts intentionally ship MUSL-linked Linux binaries. + - runner: codex-linux-x64-xl + target: x86_64-unknown-linux-musl + bundle: primary + artifact_name: x86_64-unknown-linux-musl + binaries: "codex codex-responses-api-proxy bwrap" + build_dmg: "false" + - runner: codex-linux-x64-xl + target: x86_64-unknown-linux-musl + bundle: app-server + artifact_name: x86_64-unknown-linux-musl-app-server + binaries: "codex-app-server" + build_dmg: "false" + - runner: codex-linux-arm64 + target: aarch64-unknown-linux-musl + bundle: primary + artifact_name: aarch64-unknown-linux-musl + binaries: "codex codex-responses-api-proxy bwrap" + build_dmg: "false" + - runner: codex-linux-arm64 + target: aarch64-unknown-linux-musl + bundle: app-server + artifact_name: aarch64-unknown-linux-musl-app-server + binaries: "codex-app-server" + build_dmg: "false" + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + - name: Print runner specs (Linux) + if: ${{ runner.os == 'Linux' }} + shell: bash + run: | + set -euo pipefail + cpu_model="$(lscpu | awk -F: '/Model name/ {gsub(/^[ \t]+/, "", $2); print $2; exit}')" + total_ram="$(awk '/MemTotal/ {printf "%.1f GiB\n", $2 / 1024 / 1024}' /proc/meminfo)" + echo "Runner: ${RUNNER_NAME:-unknown}" + echo "OS: $(uname -a)" + echo "CPU model: ${cpu_model}" + echo "Logical CPUs: $(nproc)" + echo "Total RAM: ${total_ram}" + echo "Disk usage:" + df -h . + - name: Print runner specs (macOS) + if: ${{ runner.os == 'macOS' }} + shell: bash + run: | + set -euo pipefail + total_ram="$(sysctl -n hw.memsize | awk '{printf "%.1f GiB\n", $1 / 1024 / 1024 / 1024}')" + echo "Runner: ${RUNNER_NAME:-unknown}" + echo "OS: $(sw_vers -productName) $(sw_vers -productVersion)" + echo "Hardware model: $(sysctl -n hw.model)" + echo "CPU architecture: $(uname -m)" + echo "Logical CPUs: $(sysctl -n hw.logicalcpu)" + echo "Physical CPUs: $(sysctl -n hw.physicalcpu)" + echo "Total RAM: ${total_ram}" + echo "Disk usage:" + df -h . + - name: Install Linux bwrap build dependencies + if: ${{ runner.os == 'Linux' }} + shell: bash + run: | + set -euo pipefail + sudo apt-get update -y + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends pkg-config libcap-dev + - name: Install UBSan runtime (musl) + if: ${{ matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl' }} + shell: bash + run: | + set -euo pipefail + if command -v apt-get >/dev/null 2>&1; then + sudo apt-get update -y + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libubsan1 + fi + - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + with: + targets: ${{ matrix.target }} + + - if: ${{ matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'}} + name: Use hermetic Cargo home (musl) + shell: bash + run: | + set -euo pipefail + cargo_home="${GITHUB_WORKSPACE}/.cargo-home" + mkdir -p "${cargo_home}/bin" + echo "CARGO_HOME=${cargo_home}" >> "$GITHUB_ENV" + echo "${cargo_home}/bin" >> "$GITHUB_PATH" + : > "${cargo_home}/config.toml" + + - if: ${{ matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'}} + name: Install Zig + uses: mlugg/setup-zig@d1434d08867e3ee9daa34448df10607b98908d29 # v2.2.1 + with: + version: 0.14.0 + use-cache: false + + - if: ${{ matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'}} + name: Install musl build tools + env: + TARGET: ${{ matrix.target }} + run: bash "${GITHUB_WORKSPACE}/.github/scripts/install-musl-build-tools.sh" + + - if: ${{ matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'}} + name: Configure rustc UBSan wrapper (musl host) + shell: bash + run: | + set -euo pipefail + ubsan="" + if command -v ldconfig >/dev/null 2>&1; then + ubsan="$(ldconfig -p | grep -m1 'libubsan\.so\.1' | sed -E 's/.*=> (.*)$/\1/')" + fi + wrapper_root="${RUNNER_TEMP:-/tmp}" + wrapper="${wrapper_root}/rustc-ubsan-wrapper" + cat > "${wrapper}" <> "$GITHUB_ENV" + echo "RUSTC_WORKSPACE_WRAPPER=" >> "$GITHUB_ENV" + + - if: ${{ matrix.target == 'x86_64-unknown-linux-musl' || matrix.target == 'aarch64-unknown-linux-musl'}} + name: Clear sanitizer flags (musl) + shell: bash + run: | + set -euo pipefail + # Avoid problematic aws-lc jitter entropy code path on musl builders. + echo "AWS_LC_SYS_NO_JITTER_ENTROPY=1" >> "$GITHUB_ENV" + target_no_jitter="AWS_LC_SYS_NO_JITTER_ENTROPY_${{ matrix.target }}" + target_no_jitter="${target_no_jitter//-/_}" + echo "${target_no_jitter}=1" >> "$GITHUB_ENV" + + # Clear global Rust flags so host/proc-macro builds don't pull in UBSan. + echo "RUSTFLAGS=" >> "$GITHUB_ENV" + echo "CARGO_ENCODED_RUSTFLAGS=" >> "$GITHUB_ENV" + echo "RUSTDOCFLAGS=" >> "$GITHUB_ENV" + # Override any runner-level Cargo config rustflags as well. + echo "CARGO_BUILD_RUSTFLAGS=" >> "$GITHUB_ENV" + echo "CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS=" >> "$GITHUB_ENV" + echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS=" >> "$GITHUB_ENV" + echo "CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS=" >> "$GITHUB_ENV" + echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS=" >> "$GITHUB_ENV" + + sanitize_flags() { + local input="$1" + input="${input//-fsanitize=undefined/}" + input="${input//-fno-sanitize-recover=undefined/}" + input="${input//-fno-sanitize-trap=undefined/}" + echo "$input" + } + + cflags="$(sanitize_flags "${CFLAGS-}")" + cxxflags="$(sanitize_flags "${CXXFLAGS-}")" + echo "CFLAGS=${cflags}" >> "$GITHUB_ENV" + echo "CXXFLAGS=${cxxflags}" >> "$GITHUB_ENV" + + - name: Configure rusty_v8 artifact overrides and verify checksums + uses: ./.github/actions/setup-rusty-v8 + with: + target: ${{ matrix.target }} + + - if: ${{ contains(matrix.target, 'linux') }} + name: Build bwrap and export digest + shell: bash + run: | + set -euo pipefail + target="${{ matrix.target }}" + cargo build --target "$target" --release --timings --bin bwrap + + bwrap_path="target/${target}/release/bwrap" + if [[ ! -f "$bwrap_path" ]]; then + echo "bwrap binary ${bwrap_path} not found" + exit 1 + fi + + digest="$(sha256sum "$bwrap_path" | awk '{print $1}')" + echo "CODEX_BWRAP_SHA256=${digest}" >> "$GITHUB_ENV" + echo "Built bwrap ${bwrap_path} with sha256:${digest}" + + - name: Cargo build + shell: bash + run: | + build_args=() + for binary in ${{ matrix.binaries }}; do + build_args+=(--bin "$binary") + done + echo "CARGO_PROFILE_RELEASE_LTO: ${CARGO_PROFILE_RELEASE_LTO}" + cargo build --target ${{ matrix.target }} --release --timings "${build_args[@]}" + + - name: Upload Cargo timings + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: cargo-timings-rust-release-${{ matrix.target }}-${{ matrix.bundle }} + path: codex-rs/target/**/cargo-timings/cargo-timing.html + if-no-files-found: warn + + - if: ${{ runner.os == 'macOS' && env.SIGN_MACOS != 'true' }} + name: Stage unsigned macOS artifacts + shell: bash + run: | + set -euo pipefail + + target="${{ matrix.target }}" + release_dir="target/${target}/release" + dest="unsigned-dist/${target}" + mkdir -p "$dest" + + for binary in ${{ matrix.binaries }}; do + binary_path="${release_dir}/${binary}" + unsigned_name="${binary}-${target}-unsigned" + unsigned_path="${dest}/${unsigned_name}" + if [[ ! -f "${binary_path}" ]]; then + echo "Binary ${binary_path} not found" + exit 1 + fi + + cp "${binary_path}" "${unsigned_path}" + tar -C "$dest" -czf "${unsigned_path}.tar.gz" "${unsigned_name}" + zstd -T0 -19 --rm "${unsigned_path}" + done + + - if: ${{ runner.os == 'macOS' && env.SIGN_MACOS != 'true' }} + name: Upload unsigned macOS artifacts + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: ${{ matrix.artifact_name }}-unsigned + path: codex-rs/unsigned-dist/${{ matrix.target }}/* + if-no-files-found: error + + - if: ${{ contains(matrix.target, 'linux') }} + name: Cosign Linux artifacts + uses: ./.github/actions/linux-code-sign + with: + target: ${{ matrix.target }} + artifacts-dir: ${{ github.workspace }}/codex-rs/target/${{ matrix.target }}/release + binaries: ${{ matrix.binaries }} + + - if: ${{ runner.os == 'macOS' && env.SIGN_MACOS == 'true' }} + name: MacOS code signing (binaries) + uses: ./.github/actions/macos-code-sign + with: + target: ${{ matrix.target }} + binaries: ${{ matrix.binaries }} + sign-binaries: "true" + sign-dmg: "false" + apple-certificate: ${{ secrets.APPLE_CERTIFICATE_P12 }} + apple-certificate-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + apple-notarization-key-p8: ${{ secrets.APPLE_NOTARIZATION_KEY_P8 }} + apple-notarization-key-id: ${{ secrets.APPLE_NOTARIZATION_KEY_ID }} + apple-notarization-issuer-id: ${{ secrets.APPLE_NOTARIZATION_ISSUER_ID }} + + - if: ${{ runner.os == 'macOS' && matrix.build_dmg == 'true' && env.SIGN_MACOS == 'true' }} + name: Build macOS dmg + shell: bash + run: | + set -euo pipefail + + target="${{ matrix.target }}" + release_dir="target/${target}/release" + dmg_root="${RUNNER_TEMP}/codex-dmg-root" + volname="Codex (${target})" + dmg_path="${release_dir}/codex-${target}.dmg" + + # The previous "MacOS code signing (binaries)" step signs + notarizes the + # built artifacts in `${release_dir}`. This step packages *those same* + # signed binaries into a dmg. + rm -rf "$dmg_root" + mkdir -p "$dmg_root" + + for binary in ${{ matrix.binaries }}; do + binary_path="${release_dir}/${binary}" + if [[ ! -f "${binary_path}" ]]; then + echo "Binary ${binary_path} not found" + exit 1 + fi + ditto "${binary_path}" "${dmg_root}/${binary}" + done + + rm -f "$dmg_path" + hdiutil create \ + -volname "$volname" \ + -srcfolder "$dmg_root" \ + -format UDZO \ + -ov \ + "$dmg_path" + + if [[ ! -f "$dmg_path" ]]; then + echo "dmg $dmg_path not found after build" + exit 1 + fi + + - if: ${{ runner.os == 'macOS' && matrix.build_dmg == 'true' && env.SIGN_MACOS == 'true' }} + name: MacOS code signing (dmg) + uses: ./.github/actions/macos-code-sign + with: + target: ${{ matrix.target }} + sign-binaries: "false" + sign-dmg: "true" + apple-certificate: ${{ secrets.APPLE_CERTIFICATE_P12 }} + apple-certificate-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + apple-notarization-key-p8: ${{ secrets.APPLE_NOTARIZATION_KEY_P8 }} + apple-notarization-key-id: ${{ secrets.APPLE_NOTARIZATION_KEY_ID }} + apple-notarization-issuer-id: ${{ secrets.APPLE_NOTARIZATION_ISSUER_ID }} + + - name: Stage artifacts + if: ${{ runner.os != 'macOS' || env.SIGN_MACOS == 'true' }} + shell: bash + run: | + dest="dist/${{ matrix.target }}" + mkdir -p "$dest" + + for binary in ${{ matrix.binaries }}; do + cp "target/${{ matrix.target }}/release/${binary}" "$dest/${binary}-${{ matrix.target }}" + if [[ "${{ matrix.target }}" == *linux* ]]; then + cp "target/${{ matrix.target }}/release/${binary}.sigstore" \ + "$dest/${binary}-${{ matrix.target }}.sigstore" + fi + done + + if [[ "${{ matrix.target }}" == *linux* && "${{ matrix.bundle }}" == "primary" ]]; then + bundle_root="${RUNNER_TEMP}/codex-${{ matrix.target }}-bundle" + rm -rf "$bundle_root" + mkdir -p "$bundle_root/codex-resources" + cp "$dest/codex-${{ matrix.target }}" "$bundle_root/codex" + cp "$dest/bwrap-${{ matrix.target }}" "$bundle_root/codex-resources/bwrap" + chmod 0755 "$bundle_root/codex" "$bundle_root/codex-resources/bwrap" + tar -C "$bundle_root" -cf - codex codex-resources/bwrap | + zstd -T0 -19 -o "$dest/codex-${{ matrix.target }}-bundle.tar.zst" + fi + + if [[ "${{ matrix.build_dmg }}" == "true" ]]; then + cp target/${{ matrix.target }}/release/codex-${{ matrix.target }}.dmg "$dest/codex-${{ matrix.target }}.dmg" + fi + + - name: Build Codex package archive + if: ${{ runner.os != 'macOS' || env.SIGN_MACOS == 'true' }} + shell: bash + env: + TARGET: ${{ matrix.target }} + BUNDLE: ${{ matrix.bundle }} + run: | + set -euo pipefail + bash "${GITHUB_WORKSPACE}/.github/scripts/build-codex-package-archive.sh" \ + --target "$TARGET" \ + --bundle "$BUNDLE" \ + --entrypoint-dir "target/${TARGET}/release" \ + --archive-dir "dist/${TARGET}" + + - name: Build Python runtime wheel + if: ${{ matrix.bundle == 'primary' && (runner.os != 'macOS' || env.SIGN_MACOS == 'true') }} + shell: bash + run: | + set -euo pipefail + + case "${{ matrix.target }}" in + aarch64-apple-darwin) + platform_tag="macosx_11_0_arm64" + ;; + x86_64-apple-darwin) + platform_tag="macosx_10_9_x86_64" + ;; + aarch64-unknown-linux-musl) + platform_tag="manylinux_2_17_aarch64" + ;; + x86_64-unknown-linux-musl) + platform_tag="manylinux_2_17_x86_64" + ;; + *) + echo "No Python runtime wheel platform tag for ${{ matrix.target }}" + exit 1 + ;; + esac + + python3 -m venv "${RUNNER_TEMP}/python-runtime-build-venv" + # Do not install into the runner's system Python; macOS runners mark + # the Homebrew Python as externally managed under PEP 668. + "${RUNNER_TEMP}/python-runtime-build-venv/bin/python" -m pip install build + + stage_dir="${RUNNER_TEMP}/openai-codex-cli-bin-${{ matrix.target }}" + wheel_dir="${GITHUB_WORKSPACE}/python-runtime-dist/${{ matrix.target }}" + stage_runtime_args=( + "${GITHUB_WORKSPACE}/sdk/python/scripts/update_sdk_artifacts.py" + stage-runtime + "$stage_dir" + "dist/${{ matrix.target }}/codex-package-${{ matrix.target }}.tar.gz" + --codex-version "${GITHUB_REF_NAME}" + --platform-tag "$platform_tag" + ) + python3 "${stage_runtime_args[@]}" + "${RUNNER_TEMP}/python-runtime-build-venv/bin/python" -m build --wheel --outdir "$wheel_dir" "$stage_dir" + + - name: Upload Python runtime wheel + if: ${{ matrix.bundle == 'primary' && (runner.os != 'macOS' || env.SIGN_MACOS == 'true') }} + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: python-runtime-wheel-${{ matrix.target }} + path: python-runtime-dist/${{ matrix.target }}/*.whl + if-no-files-found: error + + - name: Compress artifacts + if: ${{ runner.os != 'macOS' || env.SIGN_MACOS == 'true' }} + shell: bash + run: | + # Path that contains the uncompressed binaries for the current + # ${{ matrix.target }} + dest="dist/${{ matrix.target }}" + + # For compatibility with environments that lack the `zstd` tool we + # additionally create a `.tar.gz` alongside every binary we publish. + # The end result is: + # codex-.zst (existing) + # codex-.tar.gz (new) + + # 1. Produce a .tar.gz for every file in the directory *before* we + # run `zstd --rm`, because that flag deletes the original files. + for f in "$dest"/*; do + base="$(basename "$f")" + # Skip files that are already archives (shouldn't happen, but be + # safe). + if [[ "$base" == *.tar.gz || "$base" == *.tar.zst || "$base" == *.zip || "$base" == *.dmg ]]; then + continue + fi + + # Don't try to compress signature bundles. + if [[ "$base" == *.sigstore ]]; then + continue + fi + + # Create per-binary tar.gz + tar -C "$dest" -czf "$dest/${base}.tar.gz" "$base" + + # Also create .zst and remove the uncompressed binaries to keep + # non-Windows artifact directories small. + zstd -T0 -19 --rm "$dest/$base" + done + + - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + if: ${{ runner.os != 'macOS' || env.SIGN_MACOS == 'true' }} + with: + name: ${{ matrix.artifact_name }} + # Upload the per-binary .zst files, .tar.gz equivalents, and any + # prebuilt archives staged above. + path: | + codex-rs/dist/${{ matrix.target }}/* + + stage-signed-macos: + if: ${{ github.event_name == 'workflow_dispatch' && inputs.release_mode == 'promote_signed' }} + needs: tag-check + name: Stage signed macOS handoff - ${{ matrix.target }} - ${{ matrix.bundle }} + runs-on: macos-15-xlarge + timeout-minutes: 30 + permissions: + contents: read + defaults: + run: + working-directory: codex-rs + + strategy: + fail-fast: false + matrix: + include: + - target: aarch64-apple-darwin + bundle: primary + artifact_name: aarch64-apple-darwin + binaries: "codex codex-responses-api-proxy" + build_dmg: "false" + - target: aarch64-apple-darwin + bundle: app-server + artifact_name: aarch64-apple-darwin-app-server + binaries: "codex-app-server" + build_dmg: "false" + - target: x86_64-apple-darwin + bundle: primary + artifact_name: x86_64-apple-darwin + binaries: "codex codex-responses-api-proxy" + build_dmg: "false" + - target: x86_64-apple-darwin + bundle: app-server + artifact_name: x86_64-apple-darwin-app-server + binaries: "codex-app-server" + build_dmg: "false" + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Download signed macOS handoff + shell: bash + env: + GH_TOKEN: ${{ github.token }} + SIGNED_MACOS_ASSET: ${{ inputs.signed_macos_asset }} + SIGNED_MACOS_SHA256: ${{ inputs.signed_macos_sha256 }} + run: | + set -euo pipefail + + download_dir="${RUNNER_TEMP}/signed-macos-download" + handoff_dir="${RUNNER_TEMP}/signed-macos-handoff" + rm -rf "$download_dir" "$handoff_dir" + mkdir -p "$download_dir" "$handoff_dir" + + gh release download "$GITHUB_REF_NAME" \ + --repo "$GITHUB_REPOSITORY" \ + --pattern "$SIGNED_MACOS_ASSET" \ + --dir "$download_dir" + + asset_count="$(find "$download_dir" -maxdepth 1 -type f | wc -l | tr -d '[:space:]')" + if [[ "$asset_count" != "1" ]]; then + echo "Expected exactly one signed macOS handoff asset named ${SIGNED_MACOS_ASSET}; found ${asset_count}" + find "$download_dir" -maxdepth 1 -type f -print + exit 1 + fi + + asset_path="$(find "$download_dir" -maxdepth 1 -type f -print -quit)" + if [[ -n "${SIGNED_MACOS_SHA256}" ]]; then + expected_sha="$(printf '%s' "$SIGNED_MACOS_SHA256" | tr '[:upper:]' '[:lower:]')" + actual_sha="$(shasum -a 256 "$asset_path" | awk '{print $1}')" + if [[ "$actual_sha" != "$expected_sha" ]]; then + echo "signed_macos_sha256 mismatch for ${SIGNED_MACOS_ASSET}" + echo "expected: ${expected_sha}" + echo "actual: ${actual_sha}" + exit 1 + fi + fi + + asset_name="$(basename "$asset_path")" + case "$asset_name" in + *.tar.zst) + zstd -dc "$asset_path" | tar -C "$handoff_dir" -xf - + ;; + *.tar.gz|*.tgz) + tar -C "$handoff_dir" -xzf "$asset_path" + ;; + *.zip) + ditto -x -k "$asset_path" "$handoff_dir" + ;; + *) + echo "Unsupported signed macOS handoff archive format: ${asset_name}" + exit 1 + ;; + esac + + echo "SIGNED_MACOS_HANDOFF_DIR=$handoff_dir" >> "$GITHUB_ENV" + + - name: Stage signed macOS artifacts + shell: bash + run: | + set -euo pipefail + + target="${{ matrix.target }}" + artifact_name="${{ matrix.artifact_name }}" + source_dir="${SIGNED_MACOS_HANDOFF_DIR}/${artifact_name}" + if [[ ! -d "$source_dir" && -d "${SIGNED_MACOS_HANDOFF_DIR}/dist/${artifact_name}" ]]; then + source_dir="${SIGNED_MACOS_HANDOFF_DIR}/dist/${artifact_name}" + fi + if [[ ! -d "$source_dir" && -d "${SIGNED_MACOS_HANDOFF_DIR}/${target}" ]]; then + source_dir="${SIGNED_MACOS_HANDOFF_DIR}/${target}" + fi + if [[ ! -d "$source_dir" && -d "${SIGNED_MACOS_HANDOFF_DIR}/dist/${target}" ]]; then + source_dir="${SIGNED_MACOS_HANDOFF_DIR}/dist/${target}" + fi + if [[ ! -d "$source_dir" ]]; then + echo "Signed macOS handoff is missing ${artifact_name}/" + echo "Expected either:" + echo " ${SIGNED_MACOS_HANDOFF_DIR}/${artifact_name}" + echo " ${SIGNED_MACOS_HANDOFF_DIR}/dist/${artifact_name}" + echo " ${SIGNED_MACOS_HANDOFF_DIR}/${target}" + echo " ${SIGNED_MACOS_HANDOFF_DIR}/dist/${target}" + find "$SIGNED_MACOS_HANDOFF_DIR" -maxdepth 3 -type f -print + exit 1 + fi + + dest="dist/${target}" + mkdir -p "$dest" + + for binary in ${{ matrix.binaries }}; do + source_path="${source_dir}/${binary}" + if [[ ! -f "$source_path" ]]; then + source_path="${source_dir}/${binary}-${target}" + fi + if [[ ! -f "$source_path" ]]; then + echo "Signed macOS handoff is missing ${binary} for ${artifact_name}" + exit 1 + fi + + release_path="${dest}/${binary}-${target}" + ditto "$source_path" "$release_path" + chmod 0755 "$release_path" + codesign --verify --strict --verbose=2 "$release_path" + done + + # DMG staging is disabled for signed promotion because we no longer + # distribute DMGs from this release path. Keep the branch here so the + # handoff can opt back in by flipping matrix.build_dmg if needed. + if [[ "${{ matrix.build_dmg }}" == "true" ]]; then + dmg_name="codex-${target}.dmg" + dmg_source="${source_dir}/${dmg_name}" + if [[ ! -f "$dmg_source" ]]; then + echo "Signed macOS handoff is missing ${dmg_name} for ${artifact_name}" + exit 1 + fi + + codesign --verify --strict --verbose=2 "$dmg_source" + xcrun stapler validate "$dmg_source" + cp "$dmg_source" "$dest/$dmg_name" + fi + + - name: Build Codex package archive + shell: bash + env: + TARGET: ${{ matrix.target }} + BUNDLE: ${{ matrix.bundle }} + run: | + set -euo pipefail + bash "${GITHUB_WORKSPACE}/.github/scripts/build-codex-package-archive.sh" \ + --target "$TARGET" \ + --bundle "$BUNDLE" \ + --entrypoint-dir "dist/${TARGET}" \ + --archive-dir "dist/${TARGET}" \ + --target-suffixed-entrypoint + + - name: Build Python runtime wheel + if: ${{ matrix.bundle == 'primary' }} + shell: bash + run: | + set -euo pipefail + + case "${{ matrix.target }}" in + aarch64-apple-darwin) + platform_tag="macosx_11_0_arm64" + ;; + x86_64-apple-darwin) + platform_tag="macosx_10_9_x86_64" + ;; + *) + echo "No Python runtime wheel platform tag for ${{ matrix.target }}" + exit 1 + ;; + esac + + python3 -m venv "${RUNNER_TEMP}/python-runtime-build-venv" + "${RUNNER_TEMP}/python-runtime-build-venv/bin/python" -m pip install build + + stage_dir="${RUNNER_TEMP}/openai-codex-cli-bin-${{ matrix.target }}" + wheel_dir="${GITHUB_WORKSPACE}/python-runtime-dist/${{ matrix.target }}" + python3 \ + "${GITHUB_WORKSPACE}/sdk/python/scripts/update_sdk_artifacts.py" \ + stage-runtime \ + "$stage_dir" \ + "dist/${{ matrix.target }}/codex-package-${{ matrix.target }}.tar.gz" \ + --codex-version "${GITHUB_REF_NAME}" \ + --platform-tag "$platform_tag" + "${RUNNER_TEMP}/python-runtime-build-venv/bin/python" -m build --wheel --outdir "$wheel_dir" "$stage_dir" + + - name: Upload Python runtime wheel + if: ${{ matrix.bundle == 'primary' }} + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: python-runtime-wheel-${{ matrix.target }} + path: python-runtime-dist/${{ matrix.target }}/*.whl + if-no-files-found: error + + - name: Compress artifacts + shell: bash + run: | + set -euo pipefail + + dest="dist/${{ matrix.target }}" + for f in "$dest"/*; do + base="$(basename "$f")" + if [[ "$base" == *.tar.gz || "$base" == *.tar.zst || "$base" == *.zip || "$base" == *.dmg ]]; then + continue + fi + + tar -C "$dest" -czf "$dest/${base}.tar.gz" "$base" + zstd -T0 -19 --rm "$dest/$base" + done + + - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: ${{ matrix.artifact_name }} + path: | + codex-rs/dist/${{ matrix.target }}/* + + build-windows: + if: ${{ github.event_name != 'workflow_dispatch' || inputs.release_mode != 'promote_signed' }} + needs: tag-check + uses: ./.github/workflows/rust-release-windows.yml + with: + release-lto: ${{ contains(github.ref_name, '-alpha') && 'thin' || 'fat' }} + secrets: inherit + + argument-comment-lint-release-assets: + if: ${{ github.event_name != 'workflow_dispatch' || inputs.release_mode != 'promote_signed' }} + name: argument-comment-lint release assets + needs: tag-check + uses: ./.github/workflows/rust-release-argument-comment-lint.yml + with: + publish: true + + zsh-release-assets: + if: ${{ github.event_name != 'workflow_dispatch' || inputs.release_mode != 'promote_signed' }} + name: zsh release assets + needs: tag-check + uses: ./.github/workflows/rust-release-zsh.yml + + release: + needs: + - tag-check + - build + - stage-signed-macos + - build-windows + - argument-comment-lint-release-assets + - zsh-release-assets + if: >- + ${{ + always() && + needs.tag-check.result == 'success' && + ( + ( + github.event_name == 'workflow_dispatch' && + inputs.release_mode == 'promote_signed' && + needs.stage-signed-macos.result == 'success' && + needs.build.result == 'skipped' && + needs.build-windows.result == 'skipped' && + needs.argument-comment-lint-release-assets.result == 'skipped' && + needs.zsh-release-assets.result == 'skipped' + ) || + ( + (github.event_name != 'workflow_dispatch' || inputs.release_mode != 'promote_signed') && + needs.build.result == 'success' && + needs.stage-signed-macos.result == 'skipped' && + needs.build-windows.result == 'success' && + needs.argument-comment-lint-release-assets.result == 'success' && + needs.zsh-release-assets.result == 'success' + ) + ) + }} + name: release + runs-on: ubuntu-latest + permissions: + contents: write + actions: read + env: + RELEASE_MODE: ${{ github.event_name == 'workflow_dispatch' && inputs.release_mode || 'signed' }} + SIGN_MACOS: ${{ github.event_name != 'workflow_dispatch' || inputs.release_mode == 'promote_signed' }} + SIGNED_MACOS_ASSET: ${{ inputs.signed_macos_asset }} + UNSIGNED_RUN_ID: ${{ inputs.unsigned_run_id }} + outputs: + version: ${{ steps.release_name.outputs.name }} + tag: ${{ github.ref_name }} + sign_macos: ${{ steps.release_mode.outputs.sign_macos }} + should_publish_npm: ${{ steps.npm_publish_settings.outputs.should_publish }} + npm_tag: ${{ steps.npm_publish_settings.outputs.npm_tag }} + should_publish_python_runtime: ${{ steps.python_runtime_publish_settings.outputs.should_publish }} + + steps: + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Define release mode + id: release_mode + run: | + echo "release_mode=${RELEASE_MODE}" >> "$GITHUB_OUTPUT" + echo "sign_macos=${SIGN_MACOS}" >> "$GITHUB_OUTPUT" + + - name: Generate release notes from tag commit message + id: release_notes + shell: bash + run: | + set -euo pipefail + + # On tag pushes, GITHUB_SHA may be a tag object for annotated tags; + # peel it to the underlying commit. + commit="$(git rev-parse "${GITHUB_SHA}^{commit}")" + notes_path="${RUNNER_TEMP}/release-notes.md" + + # Use the commit message for the commit the tag points at (not the + # annotated tag message). + git log -1 --format=%B "${commit}" > "${notes_path}" + # Ensure trailing newline so GitHub's markdown renderer doesn't + # occasionally run the last line into subsequent content. + echo >> "${notes_path}" + + echo "path=${notes_path}" >> "${GITHUB_OUTPUT}" + + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + path: dist + + - name: Validate unsigned build run + if: ${{ env.RELEASE_MODE == 'promote_signed' }} + env: + GH_TOKEN: ${{ github.token }} + run: | + set -euo pipefail + + run_summary="$(gh run view "$UNSIGNED_RUN_ID" \ + --repo "$GITHUB_REPOSITORY" \ + --json conclusion,event,headBranch,headSha,status,workflowName,url \ + --jq '[.workflowName, .event, .headBranch, .headSha, .status, .conclusion, .url] | @tsv')" + IFS=$'\t' read -r workflow_name event head_branch head_sha status conclusion run_url <<< "$run_summary" + expected_head_sha="$(git rev-parse "${GITHUB_SHA}^{commit}")" + + if [[ "$workflow_name" != "$GITHUB_WORKFLOW" ]]; then + echo "unsigned_run_id ${UNSIGNED_RUN_ID} is for workflow '${workflow_name}', expected '${GITHUB_WORKFLOW}'" + echo "Run URL: ${run_url}" + exit 1 + fi + + if [[ "$event" != "workflow_dispatch" ]]; then + echo "unsigned_run_id ${UNSIGNED_RUN_ID} was triggered by '${event}', expected 'workflow_dispatch'" + echo "Run URL: ${run_url}" + exit 1 + fi + + if [[ "$head_branch" != "$GITHUB_REF_NAME" ]]; then + echo "unsigned_run_id ${UNSIGNED_RUN_ID} used ref '${head_branch}', expected '${GITHUB_REF_NAME}'" + echo "Run URL: ${run_url}" + exit 1 + fi + + if [[ "$head_sha" != "$expected_head_sha" ]]; then + echo "unsigned_run_id ${UNSIGNED_RUN_ID} used head SHA '${head_sha}', expected '${expected_head_sha}'" + echo "Run URL: ${run_url}" + exit 1 + fi + + if [[ "$status" != "completed" || "$conclusion" != "success" ]]; then + echo "unsigned_run_id ${UNSIGNED_RUN_ID} is ${status}/${conclusion}, expected completed/success" + echo "Run URL: ${run_url}" + exit 1 + fi + + - name: Download artifacts from unsigned build run + if: ${{ env.RELEASE_MODE == 'promote_signed' }} + env: + GH_TOKEN: ${{ github.token }} + run: | + set -euo pipefail + gh run download "$UNSIGNED_RUN_ID" \ + --repo "$GITHUB_REPOSITORY" \ + --dir dist + + - name: Remove unsigned macOS staging artifacts + if: ${{ env.RELEASE_MODE == 'promote_signed' }} + run: | + set -euo pipefail + find dist -mindepth 1 -maxdepth 1 -type d \ + -name '*-apple-darwin*-unsigned' \ + -exec rm -rf {} + + + - name: Re-upload promoted Linux x64 artifacts + if: ${{ env.RELEASE_MODE == 'promote_signed' }} + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: x86_64-unknown-linux-musl + path: dist/x86_64-unknown-linux-musl/* + if-no-files-found: error + + - name: Re-upload promoted Linux arm64 artifacts + if: ${{ env.RELEASE_MODE == 'promote_signed' }} + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: aarch64-unknown-linux-musl + path: dist/aarch64-unknown-linux-musl/* + if-no-files-found: error + + - name: Re-upload promoted Windows x64 artifacts + if: ${{ env.RELEASE_MODE == 'promote_signed' }} + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: x86_64-pc-windows-msvc + path: dist/x86_64-pc-windows-msvc/* + if-no-files-found: error + + - name: Re-upload promoted Windows arm64 artifacts + if: ${{ env.RELEASE_MODE == 'promote_signed' }} + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: aarch64-pc-windows-msvc + path: dist/aarch64-pc-windows-msvc/* + if-no-files-found: error + + - name: List + run: ls -R dist/ + + - name: Prune artifacts excluded from unsigned macOS release + if: ${{ env.SIGN_MACOS == 'false' }} + run: | + find dist -mindepth 1 -maxdepth 1 -type d \ + ! -name '*-apple-darwin*-unsigned' \ + ! -name 'aarch64-unknown-linux-musl' \ + ! -name 'aarch64-unknown-linux-musl-app-server' \ + ! -name 'x86_64-unknown-linux-musl' \ + ! -name 'x86_64-unknown-linux-musl-app-server' \ + ! -name 'aarch64-pc-windows-msvc' \ + ! -name 'x86_64-pc-windows-msvc' \ + -exec rm -rf {} + + + if ! find dist -type f -name '*-apple-darwin*-unsigned*' | grep -q .; then + echo "No unsigned macOS artifacts found in downloaded workflow artifacts." + exit 1 + fi + + - name: Delete entries from dist/ that should not go in the release + run: | + rm -rf dist/windows-binaries* + # cargo-timing.html appears under multiple target-specific directories. + # If included in files: dist/**, release upload races on duplicate + # asset names and can fail with 404s. + find dist -type f -name 'cargo-timing.html' -delete + find dist -type d -empty -delete + + ls -R dist/ + + - name: Add Codex package checksum manifest + run: | + set -euo pipefail + + manifest="dist/codex-package_SHA256SUMS" + tmp_manifest="$(mktemp)" + find dist -type f \ + \( -name 'codex-package-*.tar.gz' -o -name 'codex-app-server-package-*.tar.gz' \) \ + -print | + sort | + while IFS= read -r archive; do + sha256sum "$archive" | + awk -v name="$(basename "$archive")" '{ print $1 " " name }' + done > "$tmp_manifest" + + if [[ ! -s "$tmp_manifest" ]]; then + echo "No Codex package archives found for checksum manifest" + exit 1 + fi + + mv "$tmp_manifest" "$manifest" + cat "$manifest" + + - name: Add config schema release asset + run: | + cp codex-rs/core/config.schema.json dist/config-schema.json + + - name: Define release name + id: release_name + run: | + # Extract the version from the tag name, which is in the format + # "rust-v0.1.0". + version="${GITHUB_REF_NAME#rust-v}" + echo "name=${version}" >> $GITHUB_OUTPUT + + - name: Determine npm publish settings + id: npm_publish_settings + env: + VERSION: ${{ steps.release_name.outputs.name }} + run: | + set -euo pipefail + version="${VERSION}" + + if [[ "${SIGN_MACOS}" != "true" ]]; then + echo "should_publish=false" >> "$GITHUB_OUTPUT" + echo "npm_tag=" >> "$GITHUB_OUTPUT" + exit 0 + fi + + if [[ "${version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "should_publish=true" >> "$GITHUB_OUTPUT" + echo "npm_tag=" >> "$GITHUB_OUTPUT" + elif [[ "${version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+-alpha\.[0-9]+$ ]]; then + echo "should_publish=true" >> "$GITHUB_OUTPUT" + echo "npm_tag=alpha" >> "$GITHUB_OUTPUT" + else + echo "should_publish=false" >> "$GITHUB_OUTPUT" + echo "npm_tag=" >> "$GITHUB_OUTPUT" + fi + + - name: Determine Python runtime publish settings + id: python_runtime_publish_settings + env: + VERSION: ${{ steps.release_name.outputs.name }} + run: | + set -euo pipefail + version="${VERSION}" + + if [[ "${SIGN_MACOS}" != "true" ]]; then + echo "should_publish=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + + if [[ "${version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "should_publish=true" >> "$GITHUB_OUTPUT" + elif [[ "${version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+-alpha\.[0-9]+$ ]]; then + echo "should_publish=true" >> "$GITHUB_OUTPUT" + else + echo "should_publish=false" >> "$GITHUB_OUTPUT" + fi + + - name: Setup pnpm + if: ${{ env.SIGN_MACOS == 'true' }} + uses: pnpm/action-setup@a8198c4bff370c8506180b035930dea56dbd5288 # v5 + with: + run_install: false + + - name: Setup Node.js for npm packaging + if: ${{ env.SIGN_MACOS == 'true' }} + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: 22 + + - name: Install dependencies + if: ${{ env.SIGN_MACOS == 'true' }} + run: pnpm install --frozen-lockfile + + - name: Stage npm packages + if: ${{ env.SIGN_MACOS == 'true' }} + env: + GH_TOKEN: ${{ github.token }} + RELEASE_VERSION: ${{ steps.release_name.outputs.name }} + run: | + workflow_url="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}" + ./scripts/stage_npm_packages.py \ + --release-version "$RELEASE_VERSION" \ + --workflow-url "$workflow_url" \ + --package codex \ + --package codex-responses-api-proxy \ + --package codex-sdk + + - name: Stage installer scripts + if: ${{ env.SIGN_MACOS == 'true' }} + run: | + cp scripts/install/install.sh dist/install.sh + cp scripts/install/install.ps1 dist/install.ps1 + + - name: Create GitHub Release + uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1 + with: + name: ${{ steps.release_name.outputs.name }} + tag_name: ${{ github.ref_name }} + body_path: ${{ steps.release_notes.outputs.path }} + files: dist/** + overwrite_files: true + make_latest: ${{ env.SIGN_MACOS == 'true' && !contains(steps.release_name.outputs.name, '-') }} + # Mark as prerelease only when the version has a suffix after x.y.z + # (e.g. -alpha, -beta). Otherwise publish a normal release. + prerelease: ${{ contains(steps.release_name.outputs.name, '-') }} + + - name: Clean up signed promotion handoff assets + if: ${{ env.RELEASE_MODE == 'promote_signed' }} + env: + GH_TOKEN: ${{ github.token }} + run: | + set -euo pipefail + + release_id="$(gh api "repos/${GITHUB_REPOSITORY}/releases/tags/${GITHUB_REF_NAME}" --jq '.id')" + gh api --paginate "repos/${GITHUB_REPOSITORY}/releases/${release_id}/assets" \ + --jq '.[] | [.id, .name] | @tsv' | + while IFS=$'\t' read -r asset_id asset_name; do + if [[ -z "$asset_id" || -z "$asset_name" ]]; then + continue + fi + + delete_asset=false + if [[ "$asset_name" == *unsigned* || "$asset_name" == "$SIGNED_MACOS_ASSET" ]]; then + delete_asset=true + fi + + if [[ "$delete_asset" == "true" ]]; then + echo "Deleting release asset ${asset_name}" + gh api -X DELETE "repos/${GITHUB_REPOSITORY}/releases/assets/${asset_id}" + fi + done + + - if: ${{ env.SIGN_MACOS == 'true' }} + uses: facebook/dotslash-publish-release@9c9ec027515c34db9282a09a25a9cab5880b2c52 # v2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag: ${{ github.ref_name }} + config: .github/dotslash-config.json + + - if: ${{ env.SIGN_MACOS == 'true' }} + uses: facebook/dotslash-publish-release@9c9ec027515c34db9282a09a25a9cab5880b2c52 # v2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag: ${{ github.ref_name }} + config: .github/dotslash-zsh-config.json + + - if: ${{ env.SIGN_MACOS == 'true' }} + uses: facebook/dotslash-publish-release@9c9ec027515c34db9282a09a25a9cab5880b2c52 # v2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag: ${{ github.ref_name }} + config: .github/dotslash-argument-comment-lint-config.json + + - name: Trigger developers.openai.com deploy + # Only trigger the deploy if the release is not a pre-release. + # The deploy is used to update the developers.openai.com website with the new config schema json file. + if: ${{ env.SIGN_MACOS == 'true' && !contains(steps.release_name.outputs.name, '-') }} + continue-on-error: true + env: + DEV_WEBSITE_VERCEL_DEPLOY_HOOK_URL: ${{ secrets.DEV_WEBSITE_VERCEL_DEPLOY_HOOK_URL }} + run: | + if ! curl -sS -f -o /dev/null -X POST "$DEV_WEBSITE_VERCEL_DEPLOY_HOOK_URL"; then + echo "::warning title=developers.openai.com deploy hook failed::Vercel deploy hook POST failed for ${GITHUB_REF_NAME}" + exit 1 + fi + + # Publish to npm using OIDC authentication. + # July 31, 2025: https://github.blog/changelog/2025-07-31-npm-trusted-publishing-with-oidc-is-generally-available/ + # npm docs: https://docs.npmjs.com/trusted-publishers + publish-npm: + # Publish to npm for stable releases and alpha pre-releases with numeric suffixes. + # promote_signed intentionally skips build jobs that are ancestors of release; + # include the !cancelled() status function so Actions does not apply its implicit + # success() check to the whole dependency chain before evaluating release outputs. + if: >- + ${{ + !cancelled() && + needs.release.result == 'success' && + needs.release.outputs.should_publish_npm == 'true' + }} + name: publish-npm + needs: release + runs-on: ubuntu-latest + permissions: + id-token: write # Required for OIDC + contents: read + + steps: + - name: Setup Node.js + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + # Node 24 bundles npm >= 11.5.1, which trusted publishing requires. + node-version: 24 + registry-url: "https://registry.npmjs.org" + scope: "@openai" + + - name: Download npm tarballs from release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RELEASE_TAG: ${{ needs.release.outputs.tag }} + RELEASE_VERSION: ${{ needs.release.outputs.version }} + run: | + set -euo pipefail + version="$RELEASE_VERSION" + tag="$RELEASE_TAG" + mkdir -p dist/npm + patterns=( + "codex-npm-${version}.tgz" + "codex-npm-linux-*-${version}.tgz" + "codex-npm-darwin-*-${version}.tgz" + "codex-npm-win32-*-${version}.tgz" + "codex-responses-api-proxy-npm-${version}.tgz" + "codex-sdk-npm-${version}.tgz" + ) + for pattern in "${patterns[@]}"; do + gh release download "$tag" \ + --repo "${GITHUB_REPOSITORY}" \ + --pattern "$pattern" \ + --dir dist/npm + done + + # No NODE_AUTH_TOKEN needed because we use OIDC. + - name: Publish to npm + env: + VERSION: ${{ needs.release.outputs.version }} + NPM_TAG: ${{ needs.release.outputs.npm_tag }} + run: | + set -euo pipefail + prefix="" + if [[ -n "${NPM_TAG}" ]]; then + prefix="${NPM_TAG}-" + fi + + root_tarball="dist/npm/codex-npm-${VERSION}.tgz" + sdk_tarball="dist/npm/codex-sdk-npm-${VERSION}.tgz" + # Keep this list in sync with CODEX_PLATFORM_PACKAGES in + # codex-cli/scripts/build_npm_package.py. The root wrapper advances + # @openai/codex@latest as soon as it publishes, so every platform + # package it aliases must already exist in the registry first. + platform_tarballs=( + "dist/npm/codex-npm-linux-x64-${VERSION}.tgz" + "dist/npm/codex-npm-linux-arm64-${VERSION}.tgz" + "dist/npm/codex-npm-darwin-x64-${VERSION}.tgz" + "dist/npm/codex-npm-darwin-arm64-${VERSION}.tgz" + "dist/npm/codex-npm-win32-x64-${VERSION}.tgz" + "dist/npm/codex-npm-win32-arm64-${VERSION}.tgz" + ) + + for required_tarball in "${platform_tarballs[@]}" "${root_tarball}"; do + if [[ ! -f "${required_tarball}" ]]; then + echo "Missing npm tarball: ${required_tarball}" + exit 1 + fi + done + + shopt -s nullglob + other_tarballs=() + for tarball in dist/npm/*-"${VERSION}".tgz; do + if [[ "${tarball}" == "${root_tarball}" || "${tarball}" == "${sdk_tarball}" ]]; then + continue + fi + + is_platform_tarball=false + for platform_tarball in "${platform_tarballs[@]}"; do + if [[ "${tarball}" == "${platform_tarball}" ]]; then + is_platform_tarball=true + break + fi + done + if [[ "${is_platform_tarball}" == true ]]; then + continue + fi + + other_tarballs+=("${tarball}") + done + + # Publish the platform packages before the root CLI wrapper. The root + # wrapper advances @openai/codex@latest, so it should only publish + # after the optional dependency versions it references exist. + tarballs=( + "${platform_tarballs[@]}" + "${other_tarballs[@]}" + "${root_tarball}" + ) + if [[ -f "${sdk_tarball}" ]]; then + tarballs+=("${sdk_tarball}") + fi + + for tarball in "${tarballs[@]}"; do + filename="$(basename "${tarball}")" + tag="" + + case "${filename}" in + codex-npm-linux-*-"${VERSION}".tgz|codex-npm-darwin-*-"${VERSION}".tgz|codex-npm-win32-*-"${VERSION}".tgz) + platform="${filename#codex-npm-}" + platform="${platform%-${VERSION}.tgz}" + tag="${prefix}${platform}" + ;; + codex-npm-"${VERSION}".tgz|codex-responses-api-proxy-npm-"${VERSION}".tgz|codex-sdk-npm-"${VERSION}".tgz) + tag="${NPM_TAG}" + ;; + *) + echo "Unexpected npm tarball: ${filename}" + exit 1 + ;; + esac + + publish_cmd=(npm publish "${GITHUB_WORKSPACE}/${tarball}") + if [[ -n "${tag}" ]]; then + publish_cmd+=(--tag "${tag}") + fi + + echo "+ ${publish_cmd[*]}" + set +e + publish_output="$("${publish_cmd[@]}" 2>&1)" + publish_status=$? + set -e + + echo "${publish_output}" + if [[ ${publish_status} -eq 0 ]]; then + continue + fi + + if grep -qiE "previously published|cannot publish over|version already exists" <<< "${publish_output}"; then + echo "Skipping already-published package version for ${filename}" + continue + fi + + exit "${publish_status}" + done + + # Publish the platform-specific Python runtime wheels using PyPI trusted publishing. + # PyPI project configuration must trust this workflow and job. Keep this + # non-blocking while the Python runtime publishing path is new; failures still + # need release follow-up, but should not invalidate the Rust release itself. + publish-python-runtime: + # Publish to PyPI for stable releases and alpha pre-releases with numeric suffixes. + if: >- + ${{ + !cancelled() && + needs.release.result == 'success' && + needs.release.outputs.should_publish_python_runtime == 'true' + }} + name: publish-python-runtime + needs: release + runs-on: ubuntu-latest + continue-on-error: true + environment: pypi + permissions: + id-token: write # Required for PyPI trusted publishing. + contents: read + + steps: + - name: Download Python runtime wheels from release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RELEASE_TAG: ${{ needs.release.outputs.tag }} + RELEASE_VERSION: ${{ needs.release.outputs.version }} + run: | + set -euo pipefail + python_version="$RELEASE_VERSION" + python_version="${python_version/-alpha./a}" + python_version="${python_version/-beta./b}" + python_version="${python_version/-rc./rc}" + + mkdir -p dist/python-runtime + gh release download "$RELEASE_TAG" \ + --repo "${GITHUB_REPOSITORY}" \ + --pattern "openai_codex_cli_bin-${python_version}-*.whl" \ + --dir dist/python-runtime + ls -lh dist/python-runtime + + - name: Publish Python runtime wheels to PyPI + uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 + with: + packages-dir: dist/python-runtime + skip-existing: true + + winget: + name: winget + needs: release + # Only publish stable/mainline releases to WinGet; pre-releases include a + # '-' in the semver string (e.g., 1.2.3-alpha.1). + if: >- + ${{ + !cancelled() && + needs.release.result == 'success' && + needs.release.outputs.sign_macos == 'true' && + !contains(needs.release.outputs.version, '-') + }} + # This job only invokes a GitHub Action to open/update the winget-pkgs PR; + # it does not execute Windows-only tooling, so Linux is sufficient. + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - name: Publish to WinGet + uses: vedantmgoyal9/winget-releaser@7bd472be23763def6e16bd06cc8b1cdfab0e2fd5 + with: + identifier: OpenAI.Codex + version: ${{ needs.release.outputs.version }} + release-tag: ${{ needs.release.outputs.tag }} + fork-user: openai-oss-forks + installers-regex: '^codex-(?:x86_64|aarch64)-pc-windows-msvc\.exe\.zip$' + token: ${{ secrets.WINGET_PUBLISH_PAT }} + + update-branch: + name: Update latest-alpha-cli branch + if: >- + ${{ + !cancelled() && + needs.release.result == 'success' && + needs.release.outputs.sign_macos == 'true' + }} + permissions: + contents: write + needs: release + runs-on: ubuntu-latest + + steps: + - name: Update latest-alpha-cli branch + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + set -euo pipefail + gh api \ + repos/${GITHUB_REPOSITORY}/git/refs/heads/latest-alpha-cli \ + -X PATCH \ + -f sha="${GITHUB_SHA}" \ + -F force=true diff --git a/reference/openai-codex/.github/workflows/rusty-v8-release.yml b/reference/openai-codex/.github/workflows/rusty-v8-release.yml new file mode 100644 index 0000000..3b56a1e --- /dev/null +++ b/reference/openai-codex/.github/workflows/rusty-v8-release.yml @@ -0,0 +1,313 @@ +name: rusty-v8-release + +on: + push: + tags: + - "rusty-v8-v*.*.*" + +concurrency: + group: ${{ github.workflow }}::${{ github.ref_name }} + cancel-in-progress: false + +jobs: + metadata: + runs-on: ubuntu-latest + outputs: + release_tag: ${{ steps.release_tag.outputs.release_tag }} + v8_version: ${{ steps.v8_version.outputs.version }} + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Set up Python + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + with: + python-version: "3.12" + + - name: Resolve exact v8 crate version + id: v8_version + shell: bash + run: | + set -euo pipefail + version="$(python3 .github/scripts/rusty_v8_bazel.py resolved-v8-crate-version)" + echo "version=${version}" >> "$GITHUB_OUTPUT" + + - name: Resolve release tag + id: release_tag + env: + GITHUB_REF_NAME: ${{ github.ref_name }} + V8_VERSION: ${{ steps.v8_version.outputs.version }} + shell: bash + run: | + set -euo pipefail + + expected_release_tag="rusty-v8-v${V8_VERSION}" + release_tag="${GITHUB_REF_NAME}" + if [[ "${release_tag}" != "${expected_release_tag}" ]]; then + echo "Tag ${release_tag} does not match expected release tag ${expected_release_tag}." >&2 + exit 1 + fi + + echo "release_tag=${release_tag}" >> "$GITHUB_OUTPUT" + + build: + name: Build ${{ matrix.variant }} ${{ matrix.target }} + needs: metadata + runs-on: ${{ matrix.runner }} + permissions: + contents: read + actions: read + strategy: + fail-fast: false + matrix: + include: + - runner: ubuntu-24.04 + bazel_config: ci-v8 + platform: linux_amd64 + sandbox: false + target: x86_64-unknown-linux-gnu + variant: release + - runner: ubuntu-24.04 + bazel_config: ci-v8 + platform: linux_amd64 + sandbox: true + target: x86_64-unknown-linux-gnu + variant: ptrcomp-sandbox + - runner: ubuntu-24.04-arm + bazel_config: ci-v8 + platform: linux_arm64 + sandbox: false + target: aarch64-unknown-linux-gnu + variant: release + - runner: ubuntu-24.04-arm + bazel_config: ci-v8 + platform: linux_arm64 + sandbox: true + target: aarch64-unknown-linux-gnu + variant: ptrcomp-sandbox + - runner: macos-15-xlarge + bazel_config: ci-macos + platform: macos_amd64 + sandbox: false + target: x86_64-apple-darwin + variant: release + - runner: macos-15-xlarge + bazel_config: ci-macos + platform: macos_amd64 + sandbox: true + target: x86_64-apple-darwin + variant: ptrcomp-sandbox + - runner: macos-15-xlarge + bazel_config: ci-macos + platform: macos_arm64 + sandbox: false + target: aarch64-apple-darwin + variant: release + - runner: macos-15-xlarge + bazel_config: ci-macos + platform: macos_arm64 + sandbox: true + target: aarch64-apple-darwin + variant: ptrcomp-sandbox + - runner: ubuntu-24.04 + bazel_config: ci-v8 + platform: linux_amd64_musl + sandbox: false + target: x86_64-unknown-linux-musl + variant: release + - runner: ubuntu-24.04-arm + bazel_config: ci-v8 + platform: linux_arm64_musl + sandbox: false + target: aarch64-unknown-linux-musl + variant: release + - runner: ubuntu-24.04 + bazel_config: ci-v8 + platform: linux_amd64_musl + sandbox: true + target: x86_64-unknown-linux-musl + variant: ptrcomp-sandbox + - runner: ubuntu-24.04-arm + bazel_config: ci-v8 + platform: linux_arm64_musl + sandbox: true + target: aarch64-unknown-linux-musl + variant: ptrcomp-sandbox + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Set up Bazel + uses: ./.github/actions/setup-bazel-ci + with: + target: ${{ matrix.target }} + + - name: Set up Python + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + with: + python-version: "3.12" + + - name: Set up Rust toolchain for Cargo smoke + uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + with: + toolchain: "1.93.0" + + - name: Build Bazel V8 release pair + env: + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + PLATFORM: ${{ matrix.platform }} + SANDBOX: ${{ matrix.sandbox }} + TARGET: ${{ matrix.target }} + shell: bash + run: | + set -euo pipefail + + target_suffix="${TARGET//-/_}" + pair_kind="release_pair" + if [[ "${SANDBOX}" == "true" ]]; then + pair_kind="sandbox_release_pair" + fi + pair_target="//third_party/v8:rusty_v8_${pair_kind}_${target_suffix}" + + bazel_args=( + build + -c + opt + "--platforms=@llvm//platforms:${PLATFORM}" + --config=rusty-v8-upstream-libcxx + "${pair_target}" + --build_metadata=COMMIT_SHA=$(git rev-parse HEAD) + ) + if [[ "${SANDBOX}" != "true" ]]; then + bazel_args+=(--config=v8-release-compat) + fi + + bazel \ + --noexperimental_remote_repo_contents_cache \ + "${bazel_args[@]}" \ + "--config=${{ matrix.bazel_config }}" \ + "--remote_header=x-buildbuddy-api-key=${BUILDBUDDY_API_KEY}" + + - name: Stage release pair + env: + BAZEL_CONFIG: ${{ matrix.bazel_config }} + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + PLATFORM: ${{ matrix.platform }} + SANDBOX: ${{ matrix.sandbox }} + TARGET: ${{ matrix.target }} + shell: bash + run: | + set -euo pipefail + + stage_args=( + --platform "${PLATFORM}" + --target "${TARGET}" + --compilation-mode opt + --output-dir "dist/${TARGET}" + --bazel-config "${BAZEL_CONFIG}" + ) + if [[ "${SANDBOX}" == "true" ]]; then + stage_args+=(--sandbox) + else + stage_args+=(--bazel-config v8-release-compat) + fi + + python3 .github/scripts/rusty_v8_bazel.py stage-release-pair "${stage_args[@]}" + + - name: Smoke test staged artifact with Cargo + env: + SANDBOX: ${{ matrix.sandbox }} + TARGET: ${{ matrix.target }} + shell: bash + run: | + set -euo pipefail + + host_arch="$(uname -m)" + case "${TARGET}:${host_arch}" in + x86_64-apple-darwin:x86_64|aarch64-apple-darwin:arm64|x86_64-unknown-linux-gnu:x86_64|aarch64-unknown-linux-gnu:aarch64) + ;; + *) + echo "Skipping non-native Cargo smoke for ${TARGET} on ${host_arch}." + exit 0 + ;; + esac + + archive="$(find "dist/${TARGET}" -maxdepth 1 -type f -name 'librusty_v8_*.a.gz' -print -quit)" + binding="$(find "dist/${TARGET}" -maxdepth 1 -type f -name 'src_binding_*.rs' -print -quit)" + if [[ -z "${archive}" || -z "${binding}" ]]; then + echo "Missing staged archive or binding for ${TARGET}." >&2 + exit 1 + fi + + cargo_args=(test -p codex-v8-poc) + if [[ "${SANDBOX}" == "true" ]]; then + cargo_args+=(--features sandbox) + fi + + ( + cd codex-rs + CARGO_TARGET_DIR="${RUNNER_TEMP}/rusty-v8-cargo-smoke-${TARGET}-${SANDBOX}" \ + RUSTY_V8_ARCHIVE="${GITHUB_WORKSPACE}/${archive}" \ + RUSTY_V8_SRC_BINDING_PATH="${GITHUB_WORKSPACE}/${binding}" \ + cargo "${cargo_args[@]}" + ) + + - name: Upload staged artifacts + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: rusty-v8-${{ needs.metadata.outputs.v8_version }}-${{ matrix.variant }}-${{ matrix.target }} + path: dist/${{ matrix.target }}/* + + publish-release: + needs: + - metadata + - build + runs-on: ubuntu-latest + permissions: + contents: write + actions: read + + steps: + - name: Check whether release already exists + id: release + env: + GH_TOKEN: ${{ github.token }} + RELEASE_TAG: ${{ needs.metadata.outputs.release_tag }} + shell: bash + run: | + set -euo pipefail + + if gh release view "${RELEASE_TAG}" --repo "${GITHUB_REPOSITORY}" > /dev/null 2>&1; then + echo "exists=true" >> "${GITHUB_OUTPUT}" + else + echo "exists=false" >> "${GITHUB_OUTPUT}" + fi + + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + path: dist + + - name: Create GitHub Release + if: ${{ steps.release.outputs.exists != 'true' }} + uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1 + with: + tag_name: ${{ needs.metadata.outputs.release_tag }} + name: ${{ needs.metadata.outputs.release_tag }} + files: dist/** + # Keep V8 artifact releases out of Codex's normal "latest release" channel. + prerelease: true + + - name: Amend existing GitHub Release + if: ${{ steps.release.outputs.exists == 'true' }} + uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1 + with: + tag_name: ${{ needs.metadata.outputs.release_tag }} + name: ${{ needs.metadata.outputs.release_tag }} + files: dist/** + overwrite_files: true + # Keep V8 artifact releases out of Codex's normal "latest release" channel. + prerelease: true diff --git a/reference/openai-codex/.github/workflows/sdk.yml b/reference/openai-codex/.github/workflows/sdk.yml new file mode 100644 index 0000000..54ed8dc --- /dev/null +++ b/reference/openai-codex/.github/workflows/sdk.yml @@ -0,0 +1,160 @@ +name: sdk + +on: + push: + branches: [main] + pull_request: {} + +jobs: + python-sdk: + runs-on: + group: codex-runners + labels: codex-linux-x64 + timeout-minutes: 10 + steps: + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + + - name: Test Python SDK + shell: bash + run: | + set -euo pipefail + + # Run inside Alpine so dependency resolution exercises the pinned + # runtime wheel on the same Linux wheel family that CI installs. + docker run --rm \ + --user "$(id -u):$(id -g)" \ + -e HOME=/tmp/codex-python-sdk-home \ + -e UV_LINK_MODE=copy \ + -v "${GITHUB_WORKSPACE}:${GITHUB_WORKSPACE}" \ + -w "${GITHUB_WORKSPACE}/sdk/python" \ + python:3.12-alpine \ + sh -euxc ' + python -m venv /tmp/uv + /tmp/uv/bin/python -m pip install uv==0.11.3 + /tmp/uv/bin/uv sync --extra dev --frozen + /tmp/uv/bin/uv run --extra dev ruff check --output-format=github . + /tmp/uv/bin/uv run --extra dev ruff format --check . + /tmp/uv/bin/uv run --extra dev pytest + ' + + sdks: + runs-on: + group: codex-runners + labels: codex-linux-x64 + timeout-minutes: 10 + steps: + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + + - name: Install Linux bwrap build dependencies + shell: bash + run: | + set -euo pipefail + sudo apt-get update -y + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends pkg-config libcap-dev + + - name: Setup pnpm + uses: pnpm/action-setup@a8198c4bff370c8506180b035930dea56dbd5288 # v5 + with: + run_install: false + + - name: Setup Node.js + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: 22 + cache: pnpm + + - name: Set up Bazel CI + id: setup_bazel + uses: ./.github/actions/setup-bazel-ci + with: + target: x86_64-unknown-linux-gnu + + - name: Build codex with Bazel + env: + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + shell: bash + run: | + set -euo pipefail + # Use the shared CI wrapper so fork PRs fall back cleanly when + # BuildBuddy credentials are unavailable. This workflow needs the + # built `codex` binary on disk afterwards, so ask the wrapper to + # override CI's default remote_download_minimal behavior. + ./.github/scripts/run-bazel-ci.sh \ + --remote-download-toplevel \ + -- \ + build \ + --build_metadata=COMMIT_SHA=${GITHUB_SHA} \ + --build_metadata=TAG_job=sdk \ + -- \ + //codex-rs/cli:codex + + # Resolve the exact output file using the same wrapper/config path as + # the build instead of guessing which Bazel convenience symlink is + # available on the runner. + cquery_output="$( + ./.github/scripts/run-bazel-ci.sh \ + -- \ + cquery \ + --output=files \ + -- \ + //codex-rs/cli:codex \ + | grep -E '^(/|bazel-out/)' \ + | tail -n 1 + )" + if [[ "${cquery_output}" = /* ]]; then + codex_bazel_output_path="${cquery_output}" + else + codex_bazel_output_path="${GITHUB_WORKSPACE}/${cquery_output}" + fi + if [[ -z "${codex_bazel_output_path}" ]]; then + echo "Bazel did not report an output path for //codex-rs/cli:codex." >&2 + exit 1 + fi + if [[ ! -e "${codex_bazel_output_path}" ]]; then + echo "Unable to locate the Bazel-built codex binary at ${codex_bazel_output_path}." >&2 + exit 1 + fi + + # Stage the binary into the workspace and point the SDK tests at that + # stable path. The tests spawn `codex` directly many times, so using a + # normal executable path is more reliable than invoking Bazel for each + # test process. + install_dir="${GITHUB_WORKSPACE}/.tmp/sdk-ci" + mkdir -p "${install_dir}" + install -m 755 "${codex_bazel_output_path}" "${install_dir}/codex" + echo "CODEX_EXEC_PATH=${install_dir}/codex" >> "$GITHUB_ENV" + + - name: Warm up Bazel-built codex + shell: bash + run: | + set -euo pipefail + "${CODEX_EXEC_PATH}" --version + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Build SDK packages + run: pnpm -r --filter ./sdk/typescript run build + + - name: Lint SDK packages + run: pnpm -r --filter ./sdk/typescript run lint + + - name: Test SDK packages + run: pnpm -r --filter ./sdk/typescript run test + + - name: Save bazel repository cache + if: always() && !cancelled() && steps.setup_bazel.outputs.cache-hit != 'true' + continue-on-error: true + uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + ~/.cache/bazel-repo-cache + key: bazel-cache-x86_64-unknown-linux-gnu-${{ hashFiles('MODULE.bazel', 'codex-rs/Cargo.lock', 'codex-rs/Cargo.toml') }} diff --git a/reference/openai-codex/.github/workflows/v8-canary.yml b/reference/openai-codex/.github/workflows/v8-canary.yml new file mode 100644 index 0000000..979e991 --- /dev/null +++ b/reference/openai-codex/.github/workflows/v8-canary.yml @@ -0,0 +1,411 @@ +name: v8-canary + +on: + pull_request: + paths: + - ".bazelrc" + - ".github/actions/setup-bazel-ci/**" + - ".github/scripts/rusty_v8_bazel.py" + - ".github/scripts/rusty_v8_module_bazel.py" + - ".github/workflows/rusty-v8-release.yml" + - ".github/workflows/v8-canary.yml" + - "MODULE.bazel" + - "MODULE.bazel.lock" + - "codex-rs/Cargo.toml" + - "patches/BUILD.bazel" + - "patches/llvm_*.patch" + - "patches/rules_cc_*.patch" + - "patches/v8_*.patch" + - "third_party/v8/**" + push: + branches: + - main + paths: + - ".bazelrc" + - ".github/actions/setup-bazel-ci/**" + - ".github/scripts/rusty_v8_bazel.py" + - ".github/scripts/rusty_v8_module_bazel.py" + - ".github/workflows/rusty-v8-release.yml" + - ".github/workflows/v8-canary.yml" + - "MODULE.bazel" + - "MODULE.bazel.lock" + - "codex-rs/Cargo.toml" + - "patches/BUILD.bazel" + - "patches/llvm_*.patch" + - "patches/rules_cc_*.patch" + - "patches/v8_*.patch" + - "third_party/v8/**" + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}::${{ github.event.pull_request.number > 0 && format('pr-{0}', github.event.pull_request.number) || github.ref_name }} + cancel-in-progress: ${{ github.ref_name != 'main' }} + +jobs: + metadata: + runs-on: ubuntu-latest + outputs: + v8_version: ${{ steps.v8_version.outputs.version }} + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + + - name: Set up Python + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + with: + python-version: "3.12" + + - name: Resolve exact v8 crate version + id: v8_version + shell: bash + run: | + set -euo pipefail + version="$(python3 .github/scripts/rusty_v8_bazel.py resolved-v8-crate-version)" + echo "version=${version}" >> "$GITHUB_OUTPUT" + + build: + name: Build ${{ matrix.variant }} ${{ matrix.target }} + needs: metadata + runs-on: ${{ matrix.runner }} + permissions: + contents: read + actions: read + strategy: + fail-fast: false + matrix: + include: + - runner: ubuntu-24.04 + bazel_config: ci-v8 + platform: linux_amd64 + sandbox: false + target: x86_64-unknown-linux-gnu + variant: release + - runner: ubuntu-24.04 + bazel_config: ci-v8 + platform: linux_amd64 + sandbox: true + target: x86_64-unknown-linux-gnu + variant: ptrcomp-sandbox + - runner: ubuntu-24.04-arm + bazel_config: ci-v8 + platform: linux_arm64 + sandbox: false + target: aarch64-unknown-linux-gnu + variant: release + - runner: ubuntu-24.04-arm + bazel_config: ci-v8 + platform: linux_arm64 + sandbox: true + target: aarch64-unknown-linux-gnu + variant: ptrcomp-sandbox + - runner: macos-15-xlarge + bazel_config: ci-macos + platform: macos_amd64 + sandbox: false + target: x86_64-apple-darwin + variant: release + - runner: macos-15-xlarge + bazel_config: ci-macos + platform: macos_amd64 + sandbox: true + target: x86_64-apple-darwin + variant: ptrcomp-sandbox + - runner: macos-15-xlarge + bazel_config: ci-macos + platform: macos_arm64 + sandbox: false + target: aarch64-apple-darwin + variant: release + - runner: macos-15-xlarge + bazel_config: ci-macos + platform: macos_arm64 + sandbox: true + target: aarch64-apple-darwin + variant: ptrcomp-sandbox + - runner: ubuntu-24.04 + bazel_config: ci-v8 + platform: linux_amd64_musl + sandbox: false + target: x86_64-unknown-linux-musl + variant: release + - runner: ubuntu-24.04 + bazel_config: ci-v8 + platform: linux_amd64_musl + sandbox: true + target: x86_64-unknown-linux-musl + variant: ptrcomp-sandbox + - runner: ubuntu-24.04-arm + bazel_config: ci-v8 + platform: linux_arm64_musl + sandbox: false + target: aarch64-unknown-linux-musl + variant: release + - runner: ubuntu-24.04-arm + bazel_config: ci-v8 + platform: linux_arm64_musl + sandbox: true + target: aarch64-unknown-linux-musl + variant: ptrcomp-sandbox + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + + - name: Set up Bazel + uses: ./.github/actions/setup-bazel-ci + with: + target: ${{ matrix.target }} + + - name: Set up Python + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + with: + python-version: "3.12" + + - name: Set up Rust toolchain for Cargo smoke + uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + with: + toolchain: "1.93.0" + + - name: Build Bazel V8 release pair + env: + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + PLATFORM: ${{ matrix.platform }} + SANDBOX: ${{ matrix.sandbox }} + TARGET: ${{ matrix.target }} + shell: bash + run: | + set -euo pipefail + + target_suffix="${TARGET//-/_}" + pair_kind="release_pair" + if [[ "${SANDBOX}" == "true" ]]; then + pair_kind="sandbox_release_pair" + fi + pair_target="//third_party/v8:rusty_v8_${pair_kind}_${target_suffix}" + + bazel_args=( + build + "--platforms=@llvm//platforms:${PLATFORM}" + --config=rusty-v8-upstream-libcxx + "${pair_target}" + --build_metadata=COMMIT_SHA=$(git rev-parse HEAD) + ) + if [[ "${SANDBOX}" != "true" ]]; then + bazel_args+=(--config=v8-release-compat) + fi + + bazel \ + --noexperimental_remote_repo_contents_cache \ + "${bazel_args[@]}" \ + "--config=${{ matrix.bazel_config }}" \ + "--remote_header=x-buildbuddy-api-key=${BUILDBUDDY_API_KEY}" + + - name: Stage release pair + env: + BAZEL_CONFIG: ${{ matrix.bazel_config }} + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + PLATFORM: ${{ matrix.platform }} + SANDBOX: ${{ matrix.sandbox }} + TARGET: ${{ matrix.target }} + shell: bash + run: | + set -euo pipefail + + stage_args=( + --platform "${PLATFORM}" + --target "${TARGET}" + --output-dir "dist/${TARGET}" + --bazel-config "${BAZEL_CONFIG}" + ) + if [[ "${SANDBOX}" == "true" ]]; then + stage_args+=(--sandbox) + else + stage_args+=(--bazel-config v8-release-compat) + fi + + python3 .github/scripts/rusty_v8_bazel.py stage-release-pair "${stage_args[@]}" + + - name: Smoke test staged artifact with Cargo + env: + SANDBOX: ${{ matrix.sandbox }} + TARGET: ${{ matrix.target }} + shell: bash + run: | + set -euo pipefail + + host_arch="$(uname -m)" + case "${TARGET}:${host_arch}" in + x86_64-apple-darwin:x86_64|aarch64-apple-darwin:arm64|x86_64-unknown-linux-gnu:x86_64|aarch64-unknown-linux-gnu:aarch64) + ;; + *) + echo "Skipping non-native Cargo smoke for ${TARGET} on ${host_arch}." + exit 0 + ;; + esac + + archive="$(find "dist/${TARGET}" -maxdepth 1 -type f -name 'librusty_v8_*.a.gz' -print -quit)" + binding="$(find "dist/${TARGET}" -maxdepth 1 -type f -name 'src_binding_*.rs' -print -quit)" + if [[ -z "${archive}" || -z "${binding}" ]]; then + echo "Missing staged archive or binding for ${TARGET}." >&2 + exit 1 + fi + + cargo_args=(test -p codex-v8-poc) + if [[ "${SANDBOX}" == "true" ]]; then + cargo_args+=(--features sandbox) + fi + + ( + cd codex-rs + CARGO_TARGET_DIR="${RUNNER_TEMP}/rusty-v8-cargo-smoke-${TARGET}-${SANDBOX}" \ + RUSTY_V8_ARCHIVE="${GITHUB_WORKSPACE}/${archive}" \ + RUSTY_V8_SRC_BINDING_PATH="${GITHUB_WORKSPACE}/${binding}" \ + cargo "${cargo_args[@]}" + ) + + - name: Upload staged artifacts + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: v8-canary-${{ needs.metadata.outputs.v8_version }}-${{ matrix.variant }}-${{ matrix.target }} + path: dist/${{ matrix.target }}/* + + build-windows-source: + name: Build ptrcomp-sandbox ${{ matrix.target }} from source + needs: metadata + runs-on: ${{ matrix.runner }} + permissions: + contents: read + strategy: + fail-fast: false + matrix: + include: + - runner: windows-2022 + target: x86_64-pc-windows-msvc + - runner: windows-2022 + target: aarch64-pc-windows-msvc + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + - name: Configure git for upstream checkout + shell: bash + run: git config --global core.symlinks true + + - name: Check out upstream rusty_v8 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + repository: denoland/rusty_v8 + ref: v${{ needs.metadata.outputs.v8_version }} + path: upstream-rusty-v8 + submodules: recursive + + - name: Set up Python + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 + with: + python-version: "3.11" + architecture: x64 + + - name: Set up Codex Rust toolchain for Cargo smoke + uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0 + with: + toolchain: "1.93.0" + targets: ${{ matrix.target }} + + - name: Install rusty_v8 Rust toolchain + env: + TARGET: ${{ matrix.target }} + shell: bash + run: | + set -euo pipefail + rustup toolchain install 1.91.0 --profile minimal --no-self-update + rustup target add --toolchain 1.91.0 "${TARGET}" + + - name: Write upstream submodule status + shell: bash + working-directory: upstream-rusty-v8 + run: git submodule status --recursive > git_submodule_status.txt + + - name: Restore upstream source-build cache + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5 + with: + path: | + upstream-rusty-v8/target/sccache + upstream-rusty-v8/target/${{ matrix.target }}/release/gn_out + key: rusty-v8-source-${{ matrix.target }}-sandbox-${{ hashFiles('upstream-rusty-v8/Cargo.lock', 'upstream-rusty-v8/build.rs', 'upstream-rusty-v8/git_submodule_status.txt') }} + restore-keys: | + rusty-v8-source-${{ matrix.target }}-sandbox- + + - name: Install and start sccache + shell: pwsh + env: + SCCACHE_CACHE_SIZE: 256M + SCCACHE_DIR: ${{ github.workspace }}/upstream-rusty-v8/target/sccache + SCCACHE_IDLE_TIMEOUT: 0 + run: | + $version = "v0.8.2" + $platform = "x86_64-pc-windows-msvc" + $basename = "sccache-$version-$platform" + $url = "https://github.com/mozilla/sccache/releases/download/$version/$basename.tar.gz" + cd ~ + curl -LO $url + tar -xzvf "$basename.tar.gz" + . $basename/sccache --start-server + echo "$(pwd)/$basename" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + + - name: Install Chromium clang for ARM64 MSVC cross build + if: matrix.target == 'aarch64-pc-windows-msvc' + shell: bash + working-directory: upstream-rusty-v8 + run: python3 tools/clang/scripts/update.py + + - name: Build upstream rusty_v8 sandbox release pair + env: + SCCACHE_IDLE_TIMEOUT: 0 + TARGET: ${{ matrix.target }} + V8_FROM_SOURCE: "1" + shell: bash + working-directory: upstream-rusty-v8 + run: cargo +1.91.0 build --locked --release --target "${TARGET}" --features v8_enable_sandbox + + - name: Stage upstream sandbox release pair + env: + TARGET: ${{ matrix.target }} + shell: bash + run: | + set -euo pipefail + python3 .github/scripts/rusty_v8_bazel.py stage-upstream-release-pair \ + --source-root upstream-rusty-v8 \ + --target "${TARGET}" \ + --output-dir "dist/${TARGET}" \ + --sandbox + + - name: Smoke link staged artifact with Cargo + env: + TARGET: ${{ matrix.target }} + shell: bash + run: | + set -euo pipefail + + archive="$(find "dist/${TARGET}" -maxdepth 1 -type f -name 'rusty_v8_*.lib.gz' -print -quit)" + binding="$(find "dist/${TARGET}" -maxdepth 1 -type f -name 'src_binding_*.rs' -print -quit)" + if [[ -z "${archive}" || -z "${binding}" ]]; then + echo "Missing staged archive or binding for ${TARGET}." >&2 + exit 1 + fi + + ( + cd codex-rs + RUSTY_V8_ARCHIVE="${GITHUB_WORKSPACE}/${archive}" \ + RUSTY_V8_SRC_BINDING_PATH="${GITHUB_WORKSPACE}/${binding}" \ + cargo +1.93.0 test -p codex-v8-poc --target "${TARGET}" --features sandbox --no-run + ) + + - name: Upload staged artifacts + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 + with: + name: v8-canary-${{ needs.metadata.outputs.v8_version }}-ptrcomp-sandbox-${{ matrix.target }} + path: dist/${{ matrix.target }}/* diff --git a/reference/openai-codex/.github/workflows/zstd b/reference/openai-codex/.github/workflows/zstd new file mode 100755 index 0000000..7c601a5 --- /dev/null +++ b/reference/openai-codex/.github/workflows/zstd @@ -0,0 +1,46 @@ +#!/usr/bin/env dotslash + +// This DotSlash file wraps zstd for Windows runners. +// The upstream release provides win32/win64 binaries; for windows-aarch64 we +// use the win64 artifact via Windows x64 emulation. +{ + "name": "zstd", + "platforms": { + "windows-x86_64": { + "size": 1747181, + "hash": "sha256", + "digest": "acb4e8111511749dc7a3ebedca9b04190e37a17afeb73f55d4425dbf0b90fad9", + "format": "zip", + "path": "zstd-v1.5.7-win64/zstd.exe", + "providers": [ + { + "url": "https://github.com/facebook/zstd/releases/download/v1.5.7/zstd-v1.5.7-win64.zip" + }, + { + "type": "github-release", + "repo": "facebook/zstd", + "tag": "v1.5.7", + "name": "zstd-v1.5.7-win64.zip" + } + ] + }, + "windows-aarch64": { + "size": 1747181, + "hash": "sha256", + "digest": "acb4e8111511749dc7a3ebedca9b04190e37a17afeb73f55d4425dbf0b90fad9", + "format": "zip", + "path": "zstd-v1.5.7-win64/zstd.exe", + "providers": [ + { + "url": "https://github.com/facebook/zstd/releases/download/v1.5.7/zstd-v1.5.7-win64.zip" + }, + { + "type": "github-release", + "repo": "facebook/zstd", + "tag": "v1.5.7", + "name": "zstd-v1.5.7-win64.zip" + } + ] + } + } +} diff --git a/reference/openai-codex/.gitignore b/reference/openai-codex/.gitignore new file mode 100644 index 0000000..f792773 --- /dev/null +++ b/reference/openai-codex/.gitignore @@ -0,0 +1,94 @@ +# deps +# Node.js dependencies +node_modules +.pnpm-store +.pnpm-debug.log + +# Keep pnpm-lock.yaml +!pnpm-lock.yaml + +# build +dist/ +bazel-* +user.bazelrc +build/ +out/ +storybook-static/ + +# ignore README for publishing +codex-cli/README.md + +# ignore Nix derivation results +result + +# editor +.vscode/ +.idea/ +.history/ +.zed/ +*.swp +*~ + +# cli tools +CLAUDE.md +.claude/ +AGENTS.override.md + +# caches +.cache/ +.turbo/ +.parcel-cache/ +.eslintcache +.nyc_output/ +.jest/ +*.tsbuildinfo + +# logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# env +.env* +!.env.example +.venv/ + +# package +*.tgz + +# ci +.vercel/ +.netlify/ + +# patches +apply_patch/ + +# coverage +coverage/ + +# personal files +personal/ + +# os +.DS_Store +Thumbs.db +Icon? +.Spotlight-V100/ + +# Unwanted package managers +.yarn/ +yarn.lock + +# release +package.json-e +session.ts-e +CHANGELOG.ignore.md + +# nix related +.direnv +.envrc + +# Python bytecode files +__pycache__/ +*.pyc diff --git a/reference/openai-codex/.gitkeep b/reference/openai-codex/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/reference/openai-codex/.markdownlint-cli2.yaml b/reference/openai-codex/.markdownlint-cli2.yaml new file mode 100644 index 0000000..15b472c --- /dev/null +++ b/reference/openai-codex/.markdownlint-cli2.yaml @@ -0,0 +1,6 @@ +config: + MD013: + line_length: 100 + +globs: + - "docs/tui-chat-composer.md" diff --git a/reference/openai-codex/.npmrc b/reference/openai-codex/.npmrc new file mode 100644 index 0000000..4153fe8 --- /dev/null +++ b/reference/openai-codex/.npmrc @@ -0,0 +1,4 @@ +shamefully-hoist=true +strict-peer-dependencies=false +node-linker=hoisted +prefer-workspace-packages=true diff --git a/reference/openai-codex/.prettierignore b/reference/openai-codex/.prettierignore new file mode 100644 index 0000000..f5b50f6 --- /dev/null +++ b/reference/openai-codex/.prettierignore @@ -0,0 +1,7 @@ +/codex-cli/dist +/codex-cli/node_modules +pnpm-lock.yaml + +prompt.md +*_prompt.md +*_instructions.md diff --git a/reference/openai-codex/.prettierrc.toml b/reference/openai-codex/.prettierrc.toml new file mode 100644 index 0000000..4c58c58 --- /dev/null +++ b/reference/openai-codex/.prettierrc.toml @@ -0,0 +1,8 @@ +printWidth = 80 +quoteProps = "consistent" +semi = true +tabWidth = 2 +trailingComma = "all" + +# Preserve existing behavior for markdown/text wrapping. +proseWrap = "preserve" diff --git a/reference/opencode-1.15.5/.editorconfig b/reference/opencode-1.15.5/.editorconfig new file mode 100755 index 0000000..aada95f --- /dev/null +++ b/reference/opencode-1.15.5/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +insert_final_newline = true +end_of_line = lf +indent_style = space +indent_size = 2 +max_line_length = 80 diff --git a/reference/opencode-1.15.5/.github/CODEOWNERS b/reference/opencode-1.15.5/.github/CODEOWNERS new file mode 100755 index 0000000..3aeef82 --- /dev/null +++ b/reference/opencode-1.15.5/.github/CODEOWNERS @@ -0,0 +1,5 @@ +# web + desktop packages +packages/app/ @adamdotdevin +packages/tauri/ @adamdotdevin +packages/desktop/src-tauri/ @brendonovich +packages/desktop/ @adamdotdevin diff --git a/reference/opencode-1.15.5/.github/ISSUE_TEMPLATE/bug-report.yml b/reference/opencode-1.15.5/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100755 index 0000000..96234eb --- /dev/null +++ b/reference/opencode-1.15.5/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,66 @@ +name: Bug report +description: Report an issue that should be fixed +body: + - type: textarea + id: description + attributes: + label: Description + description: Describe the bug you encountered + placeholder: What happened? + validations: + required: true + + - type: input + id: plugins + attributes: + label: Plugins + description: What plugins are you using? + validations: + required: false + + - type: input + id: opencode-version + attributes: + label: OpenCode version + description: What version of OpenCode are you using? + validations: + required: false + + - type: textarea + id: reproduce + attributes: + label: Steps to reproduce + description: How can we reproduce this issue? + placeholder: | + 1. + 2. + 3. + validations: + required: false + + - type: textarea + id: screenshot-or-link + attributes: + label: Screenshot and/or share link + description: Run `/share` to get a share link, or attach a screenshot + placeholder: Paste link or drag and drop screenshot here + validations: + required: false + + - type: input + id: os + attributes: + label: Operating System + description: what OS are you using? + placeholder: e.g., macOS 26.0.1, Ubuntu 22.04, Windows 11 + validations: + required: false + + - type: input + id: terminal + attributes: + label: Terminal + description: what terminal are you using? + placeholder: e.g., iTerm2, Ghostty, Alacritty, Windows Terminal + validations: + required: false diff --git a/reference/opencode-1.15.5/.github/ISSUE_TEMPLATE/config.yml b/reference/opencode-1.15.5/.github/ISSUE_TEMPLATE/config.yml new file mode 100755 index 0000000..52eec90 --- /dev/null +++ b/reference/opencode-1.15.5/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: 💬 Discord Community + url: https://discord.gg/opencode + about: For quick questions or real-time discussion. Note that issues are searchable and help others with the same question. diff --git a/reference/opencode-1.15.5/.github/ISSUE_TEMPLATE/feature-request.yml b/reference/opencode-1.15.5/.github/ISSUE_TEMPLATE/feature-request.yml new file mode 100755 index 0000000..42f1d3c --- /dev/null +++ b/reference/opencode-1.15.5/.github/ISSUE_TEMPLATE/feature-request.yml @@ -0,0 +1,19 @@ +name: 🚀 Feature Request +description: Suggest an idea, feature, or enhancement +title: "[FEATURE]:" + +body: + - type: checkboxes + id: verified + attributes: + label: Feature hasn't been suggested before. + options: + - label: I have verified this feature I'm about to request hasn't been suggested before. + required: true + + - type: textarea + attributes: + label: Describe the enhancement you want to request + description: What do you want to change or add? What are the benefits of implementing this? Try to be detailed so we can understand your request better :) + validations: + required: true diff --git a/reference/opencode-1.15.5/.github/ISSUE_TEMPLATE/question.yml b/reference/opencode-1.15.5/.github/ISSUE_TEMPLATE/question.yml new file mode 100755 index 0000000..8930ba6 --- /dev/null +++ b/reference/opencode-1.15.5/.github/ISSUE_TEMPLATE/question.yml @@ -0,0 +1,10 @@ +name: Question +description: Ask a question +body: + - type: textarea + id: question + attributes: + label: Question + description: What's your question? + validations: + required: true diff --git a/reference/opencode-1.15.5/.github/TEAM_MEMBERS b/reference/opencode-1.15.5/.github/TEAM_MEMBERS new file mode 100755 index 0000000..a662c7c --- /dev/null +++ b/reference/opencode-1.15.5/.github/TEAM_MEMBERS @@ -0,0 +1,16 @@ +adamdotdevin +Brendonovich +fwang +Hona +iamdavidhill +jayair +jlongster +kitlangton +kommander +MrMushrooooom +nexxeln +R44VC0RP +rekram1-node +thdxr +simonklee +vimtor diff --git a/reference/opencode-1.15.5/.github/actions/setup-bun/action.yml b/reference/opencode-1.15.5/.github/actions/setup-bun/action.yml new file mode 100755 index 0000000..5b44517 --- /dev/null +++ b/reference/opencode-1.15.5/.github/actions/setup-bun/action.yml @@ -0,0 +1,66 @@ +name: "Setup Bun" +description: "Setup Bun with caching and install dependencies" +inputs: + install-flags: + description: "Additional flags to pass to 'bun install'" + required: false + default: "" +runs: + using: "composite" + steps: + - name: Get baseline download URL + id: bun-url + shell: bash + run: | + if [ "$RUNNER_ARCH" = "X64" ]; then + V=$(node -p "require('./package.json').packageManager.split('@')[1]") + case "$RUNNER_OS" in + macOS) OS=darwin ;; + Linux) OS=linux ;; + Windows) OS=windows ;; + esac + echo "url=https://github.com/oven-sh/bun/releases/download/bun-v${V}/bun-${OS}-x64-baseline.zip" >> "$GITHUB_OUTPUT" + fi + + - name: Setup Bun + uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + bun-version-file: ${{ !steps.bun-url.outputs.url && 'package.json' || '' }} + bun-download-url: ${{ steps.bun-url.outputs.url }} + + - name: Get cache directory + id: cache + shell: bash + run: echo "dir=$(bun pm cache)" >> "$GITHUB_OUTPUT" + + - name: Restore Bun dependencies + id: bun-cache + uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 + with: + path: ${{ steps.cache.outputs.dir }} + key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }} + restore-keys: | + ${{ runner.os }}-bun- + + - name: Install setuptools for distutils compatibility + run: python3 -m pip install setuptools || pip install setuptools || true + shell: bash + + - name: Install dependencies + run: | + # Workaround for patched peer variants + # e.g. ./patches/ for standard-openapi + # https://github.com/oven-sh/bun/issues/28147 + if [ "$RUNNER_OS" = "Windows" ]; then + bun install --linker hoisted ${{ inputs.install-flags }} + else + bun install ${{ inputs.install-flags }} + fi + shell: bash + + - name: Save Bun dependencies + if: steps.bun-cache.outputs.cache-hit != 'true' && github.event_name != 'pull_request' && github.event_name != 'pull_request_target' + uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 + with: + path: ${{ steps.cache.outputs.dir }} + key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }} diff --git a/reference/opencode-1.15.5/.github/actions/setup-git-committer/action.yml b/reference/opencode-1.15.5/.github/actions/setup-git-committer/action.yml new file mode 100755 index 0000000..65c974c --- /dev/null +++ b/reference/opencode-1.15.5/.github/actions/setup-git-committer/action.yml @@ -0,0 +1,43 @@ +name: "Setup Git Committer" +description: "Create app token and configure git user" +inputs: + opencode-app-id: + description: "OpenCode GitHub App ID" + required: true + opencode-app-secret: + description: "OpenCode GitHub App private key" + required: true +outputs: + token: + description: "GitHub App token" + value: ${{ steps.apptoken.outputs.token }} + app-slug: + description: "GitHub App slug" + value: ${{ steps.apptoken.outputs.app-slug }} +runs: + using: "composite" + steps: + - name: Create app token + id: apptoken + uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # v2.2.2 + with: + app-id: ${{ inputs.opencode-app-id }} + private-key: ${{ inputs.opencode-app-secret }} + owner: ${{ github.repository_owner }} + + - name: Configure git user + run: | + slug="${{ steps.apptoken.outputs.app-slug }}" + git config --global user.name "${slug}[bot]" + git config --global user.email "${slug}[bot]@users.noreply.github.com" + shell: bash + + - name: Clear checkout auth + run: | + git config --local --unset-all http.https://github.com/.extraheader || true + shell: bash + + - name: Configure git remote + run: | + git remote set-url origin https://x-access-token:${{ steps.apptoken.outputs.token }}@github.com/${{ github.repository }} + shell: bash diff --git a/reference/opencode-1.15.5/.github/publish-python-sdk.yml b/reference/opencode-1.15.5/.github/publish-python-sdk.yml new file mode 100755 index 0000000..151ecb9 --- /dev/null +++ b/reference/opencode-1.15.5/.github/publish-python-sdk.yml @@ -0,0 +1,71 @@ +# +# This file is intentionally in the wrong dir, will move and add later.... +# + +# name: publish-python-sdk + +# on: +# release: +# types: [published] +# workflow_dispatch: + +# jobs: +# publish: +# runs-on: ubuntu-latest +# permissions: +# contents: read +# steps: +# - name: Checkout repository +# uses: actions/checkout@v4 + +# - name: Setup Bun +# uses: oven-sh/setup-bun@v1 +# with: +# bun-version: 1.2.21 + +# - name: Install dependencies (JS/Bun) +# run: bun install + +# - name: Install uv +# shell: bash +# run: curl -LsSf https://astral.sh/uv/install.sh | sh + +# - name: Generate Python SDK from OpenAPI (CLI) +# shell: bash +# run: | +# ~/.local/bin/uv run --project packages/sdk/python python packages/sdk/python/scripts/generate.py --source cli + +# - name: Sync Python dependencies +# shell: bash +# run: | +# ~/.local/bin/uv sync --dev --project packages/sdk/python + +# - name: Set version from release tag +# shell: bash +# run: | +# TAG="${GITHUB_REF_NAME:-}" +# if [ -z "$TAG" ]; then +# TAG="$(git describe --tags --abbrev=0 || echo 0.0.0)" +# fi +# echo "Using version: $TAG" +# VERSION="$TAG" ~/.local/bin/uv run --project packages/sdk/python python - <<'PY' +# import os, re, pathlib +# root = pathlib.Path('packages/sdk/python') +# pt = (root / 'pyproject.toml').read_text() +# version = os.environ.get('VERSION','0.0.0').lstrip('v') +# pt = re.sub(r'(?m)^(version\s*=\s*")[^"]+("\s*)$', f"\\1{version}\\2", pt) +# (root / 'pyproject.toml').write_text(pt) +# # Also update generator config override for consistency +# cfgp = root / 'openapi-python-client.yaml' +# if cfgp.exists(): +# cfg = cfgp.read_text() +# cfg = re.sub(r'(?m)^(package_version_override:\s*)\S+$', f"\\1{version}", cfg) +# cfgp.write_text(cfg) +# PY + +# - name: Build and publish to PyPI +# env: +# PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} +# shell: bash +# run: | +# ~/.local/bin/uv run --project packages/sdk/python python packages/sdk/python/scripts/publish.py diff --git a/reference/opencode-1.15.5/.github/pull_request_template.md b/reference/opencode-1.15.5/.github/pull_request_template.md new file mode 100755 index 0000000..393bf90 --- /dev/null +++ b/reference/opencode-1.15.5/.github/pull_request_template.md @@ -0,0 +1,29 @@ +### Issue for this PR + +Closes # + +### Type of change + +- [ ] Bug fix +- [ ] New feature +- [ ] Refactor / code improvement +- [ ] Documentation + +### What does this PR do? + +Please provide a description of the issue, the changes you made to fix it, and why they work. It is expected that you understand why your changes work and if you do not understand why at least say as much so a maintainer knows how much to value the PR. + +**If you paste a large clearly AI generated description here your PR may be IGNORED or CLOSED!** + +### How did you verify your code works? + +### Screenshots / recordings + +_If this is a UI change, please include a screenshot or recording._ + +### Checklist + +- [ ] I have tested my changes locally +- [ ] I have not included unrelated changes in this PR + +_If you do not follow this template your PR will be automatically rejected._ diff --git a/reference/opencode-1.15.5/.github/workflows/beta.yml b/reference/opencode-1.15.5/.github/workflows/beta.yml new file mode 100755 index 0000000..e93d5fb --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/beta.yml @@ -0,0 +1,37 @@ +name: beta + +on: + workflow_dispatch: + schedule: + - cron: "0 * * * *" + +jobs: + sync: + runs-on: blacksmith-4vcpu-ubuntu-2404 + permissions: + contents: write + pull-requests: write + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + fetch-depth: 0 + + - name: Setup Bun + uses: ./.github/actions/setup-bun + + - name: Setup Git Committer + id: setup-git-committer + uses: ./.github/actions/setup-git-committer + with: + opencode-app-id: ${{ vars.OPENCODE_APP_ID }} + opencode-app-secret: ${{ secrets.OPENCODE_APP_SECRET }} + + - name: Install OpenCode + run: bun i -g opencode-ai + + - name: Sync beta branch + env: + GH_TOKEN: ${{ steps.setup-git-committer.outputs.token }} + OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + run: bun script/beta.ts diff --git a/reference/opencode-1.15.5/.github/workflows/close-issues.yml b/reference/opencode-1.15.5/.github/workflows/close-issues.yml new file mode 100755 index 0000000..b8a2e3f --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/close-issues.yml @@ -0,0 +1,24 @@ +name: close-issues + +on: + schedule: + - cron: "0 2 * * *" # Daily at 2:00 AM + workflow_dispatch: + +jobs: + close: + runs-on: ubuntu-latest + permissions: + contents: read + issues: write + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + + - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + bun-version: latest + + - name: Close stale issues + env: + GITHUB_TOKEN: ${{ github.token }} + run: bun script/github/close-issues.ts diff --git a/reference/opencode-1.15.5/.github/workflows/close-prs.yml b/reference/opencode-1.15.5/.github/workflows/close-prs.yml new file mode 100755 index 0000000..a1e603a --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/close-prs.yml @@ -0,0 +1,50 @@ +name: close-prs + +on: + schedule: + - cron: "0 22 * * *" # Daily at 10:00 PM UTC + workflow_dispatch: + inputs: + dry-run: + description: "Log matching PRs without closing them" + type: boolean + default: true + max-close: + description: "Maximum matching PRs to close" + type: string + required: false + default: "50" + +jobs: + close: + runs-on: ubuntu-latest + timeout-minutes: 240 + permissions: + contents: read + issues: write + pull-requests: write + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + + - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 + with: + bun-version: latest + + - name: Close old PRs without enough positive reactions + env: + GITHUB_TOKEN: ${{ github.token }} + run: | + max_close="${{ inputs['max-close'] }}" + if [ -z "$max_close" ]; then + max_close="50" + fi + + args=("--threshold" "2" "--age-months" "1" "--sleep-ms" "20000" "--max-close" "$max_close") + + if [ "${{ github.event_name }}" = "schedule" ]; then + args+=("--execute") + elif [ "${{ inputs['dry-run'] }}" = "false" ]; then + args+=("--execute") + fi + + bun script/github/close-prs.ts "${args[@]}" diff --git a/reference/opencode-1.15.5/.github/workflows/compliance-close.yml b/reference/opencode-1.15.5/.github/workflows/compliance-close.yml new file mode 100755 index 0000000..14e6870 --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/compliance-close.yml @@ -0,0 +1,95 @@ +name: compliance-close + +on: + schedule: + # Run every 30 minutes to check for expired compliance windows + - cron: "*/30 * * * *" + workflow_dispatch: + +permissions: + contents: read + issues: write + pull-requests: write + +jobs: + close-non-compliant: + runs-on: ubuntu-latest + steps: + - name: Close non-compliant issues and PRs after 2 hours + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 + with: + script: | + const { data: items } = await github.rest.issues.listForRepo({ + owner: context.repo.owner, + repo: context.repo.repo, + labels: 'needs:compliance', + state: 'open', + per_page: 100, + }); + + if (items.length === 0) { + core.info('No open issues/PRs with needs:compliance label'); + return; + } + + const now = Date.now(); + const twoHours = 2 * 60 * 60 * 1000; + + for (const item of items) { + const isPR = !!item.pull_request; + const kind = isPR ? 'PR' : 'issue'; + + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: item.number, + }); + + const complianceComment = comments.find(c => c.body.includes('')); + if (!complianceComment) continue; + + const commentAge = now - new Date(complianceComment.created_at).getTime(); + if (commentAge < twoHours) { + core.info(`${kind} #${item.number} still within 2-hour window (${Math.round(commentAge / 60000)}m elapsed)`); + continue; + } + + const closeMessage = isPR + ? 'This pull request has been automatically closed because it was not updated to meet our [contributing guidelines](../blob/dev/CONTRIBUTING.md) within the 2-hour window.\n\nFeel free to open a new pull request that follows our guidelines.' + : 'This issue has been automatically closed because it was not updated to meet our [contributing guidelines](../blob/dev/CONTRIBUTING.md) within the 2-hour window.\n\nFeel free to open a new issue that follows our issue templates.'; + + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: item.number, + body: closeMessage, + }); + + try { + await github.rest.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: item.number, + name: 'needs:compliance', + }); + } catch (e) {} + + if (isPR) { + await github.rest.pulls.update({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: item.number, + state: 'closed', + }); + } else { + await github.rest.issues.update({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: item.number, + state: 'closed', + state_reason: 'not_planned', + }); + } + + core.info(`Closed non-compliant ${kind} #${item.number} after 2-hour window`); + } diff --git a/reference/opencode-1.15.5/.github/workflows/containers.yml b/reference/opencode-1.15.5/.github/workflows/containers.yml new file mode 100755 index 0000000..15bf078 --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/containers.yml @@ -0,0 +1,45 @@ +name: containers + +on: + push: + branches: + - dev + paths: + - packages/containers/** + - .github/workflows/containers.yml + - package.json + workflow_dispatch: + +permissions: + contents: read + packages: write + +jobs: + build: + runs-on: blacksmith-4vcpu-ubuntu-2404 + env: + REGISTRY: ghcr.io/${{ github.repository_owner }} + TAG: "24.04" + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + + - uses: ./.github/actions/setup-bun + + - name: Set up QEMU + uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 + + - name: Login to GHCR + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push containers + run: bun ./packages/containers/script/build.ts --push + env: + REGISTRY: ${{ env.REGISTRY }} + TAG: ${{ env.TAG }} diff --git a/reference/opencode-1.15.5/.github/workflows/deploy.yml b/reference/opencode-1.15.5/.github/workflows/deploy.yml new file mode 100755 index 0000000..7b4f53a --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/deploy.yml @@ -0,0 +1,45 @@ +name: deploy + +on: + push: + branches: + - dev + - production + workflow_dispatch: + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + + - uses: ./.github/actions/setup-bun + + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + with: + node-version: "24" + + # Workaround for Pulumi version conflict: + # GitHub runners have Pulumi 3.212.0+ pre-installed, which removed the -root flag + # from pulumi-language-nodejs (see https://github.com/pulumi/pulumi/pull/21065). + # SST 3.17.x uses Pulumi SDK 3.210.0 which still passes -root, causing a conflict. + # Removing the system language plugin forces SST to use its bundled compatible version. + # TODO: Remove when sst supports Pulumi >3.210.0 + - name: Fix Pulumi version conflict + run: sudo rm -f /usr/local/bin/pulumi-language-nodejs + + - run: bun sst deploy --stage=${{ github.ref_name }} + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + PLANETSCALE_SERVICE_TOKEN_NAME: ${{ secrets.PLANETSCALE_SERVICE_TOKEN_NAME }} + PLANETSCALE_SERVICE_TOKEN: ${{ secrets.PLANETSCALE_SERVICE_TOKEN }} + STRIPE_SECRET_KEY: ${{ github.ref_name == 'production' && secrets.STRIPE_SECRET_KEY_PROD || secrets.STRIPE_SECRET_KEY_DEV }} + HONEYCOMB_API_KEY: ${{ secrets.HONEYCOMB_API_KEY }} + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_ORG: ${{ vars.SENTRY_ORG }} + SENTRY_PROJECT: ${{ vars.WEB_SENTRY_PROJECT }} + SENTRY_RELEASE: web@${{ github.sha }} + VITE_SENTRY_DSN: ${{ vars.WEB_SENTRY_DSN }} + VITE_SENTRY_RELEASE: web@${{ github.sha }} diff --git a/reference/opencode-1.15.5/.github/workflows/docs-locale-sync.yml b/reference/opencode-1.15.5/.github/workflows/docs-locale-sync.yml new file mode 100755 index 0000000..5f921e8 --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/docs-locale-sync.yml @@ -0,0 +1,100 @@ +name: docs-locale-sync + +on: + push: + branches: + - dev + paths: + - packages/web/src/content/docs/*.mdx + +jobs: + sync-locales: + if: false + #if: github.actor != 'opencode-agent[bot]' + runs-on: blacksmith-4vcpu-ubuntu-2404 + permissions: + contents: write + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + persist-credentials: false + fetch-depth: 0 + ref: ${{ github.ref_name }} + + - name: Setup Bun + uses: ./.github/actions/setup-bun + + - name: Setup git committer + id: committer + uses: ./.github/actions/setup-git-committer + with: + opencode-app-id: ${{ vars.OPENCODE_APP_ID }} + opencode-app-secret: ${{ secrets.OPENCODE_APP_SECRET }} + + - name: Compute changed English docs + id: changes + run: | + FILES=$(git diff --name-only "${{ github.event.before }}" "${{ github.sha }}" -- ':(glob)packages/web/src/content/docs/*.mdx' || true) + if [ -z "$FILES" ]; then + echo "has_changes=false" >> "$GITHUB_OUTPUT" + echo "No English docs changed in push range" + exit 0 + fi + echo "has_changes=true" >> "$GITHUB_OUTPUT" + { + echo "files<> "$GITHUB_OUTPUT" + + - name: Install OpenCode + if: steps.changes.outputs.has_changes == 'true' + run: curl -fsSL https://opencode.ai/install | bash + + - name: Sync locale docs with OpenCode + if: steps.changes.outputs.has_changes == 'true' + env: + OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + OPENCODE_CONFIG_CONTENT: | + { + "permission": { + "*": "deny", + "read": "allow", + "edit": "allow", + "glob": "allow", + "task": "allow" + } + } + run: | + opencode run --agent docs --model opencode/gpt-5.3-codex <<'EOF' + Update localized docs to match the latest English docs changes. + + Changed English doc files: + + ${{ steps.changes.outputs.files }} + + + Requirements: + 1. Update all relevant locale docs under packages/web/src/content/docs// so they reflect these English page changes. + 2. You MUST use the Task tool for translation work and launch subagents with subagent_type `translator` (defined in .opencode/agent/translator.md). + 3. Do not translate directly in the primary agent. Use translator subagent output as the source for locale text updates. + 4. Run translator subagent Task calls in parallel whenever file/locale translation work is independent. + 5. Use only the minimum tools needed for this task (read/glob, file edits, and translator Task). Do not use shell, web, search, or GitHub tools for translation work. + 6. Preserve frontmatter keys, internal links, code blocks, and existing locale-specific metadata unless the English change requires an update. + 7. Keep locale docs structure aligned with their corresponding English pages. + 8. Do not modify English source docs in packages/web/src/content/docs/*.mdx. + 9. If no locale updates are needed, make no changes. + EOF + + - name: Commit and push locale docs updates + if: steps.changes.outputs.has_changes == 'true' + run: | + if [ -z "$(git status --porcelain)" ]; then + echo "No locale docs changes to commit" + exit 0 + fi + git add -A + git commit -m "docs(i18n): sync locale docs from english changes" + git pull --rebase --autostash origin "$GITHUB_REF_NAME" + git push origin HEAD:"$GITHUB_REF_NAME" diff --git a/reference/opencode-1.15.5/.github/workflows/docs-update.yml b/reference/opencode-1.15.5/.github/workflows/docs-update.yml new file mode 100755 index 0000000..4767dec --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/docs-update.yml @@ -0,0 +1,72 @@ +name: docs-update + +on: + schedule: + - cron: "0 */12 * * *" + workflow_dispatch: + +env: + LOOKBACK_HOURS: 4 + +jobs: + update-docs: + if: github.repository == 'sst/opencode' + runs-on: blacksmith-4vcpu-ubuntu-2404 + permissions: + id-token: write + contents: write + pull-requests: write + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + fetch-depth: 0 # Fetch full history to access commits + + - name: Setup Bun + uses: ./.github/actions/setup-bun + + - name: Get recent commits + id: commits + run: | + COMMITS=$(git log --since="${{ env.LOOKBACK_HOURS }} hours ago" --pretty=format:"- %h %s" 2>/dev/null || echo "") + if [ -z "$COMMITS" ]; then + echo "No commits in the last ${{ env.LOOKBACK_HOURS }} hours" + echo "has_commits=false" >> $GITHUB_OUTPUT + else + echo "has_commits=true" >> $GITHUB_OUTPUT + { + echo "list<> $GITHUB_OUTPUT + fi + + - name: Run opencode + if: steps.commits.outputs.has_commits == 'true' + uses: sst/opencode/github@2c14fc5586fe0b88e5c04732d2e846769cc35671 # latest + env: + OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + with: + model: opencode/gpt-5.2 + agent: docs + prompt: | + Review the following commits from the last ${{ env.LOOKBACK_HOURS }} hours and identify any new features that may need documentation. + + + ${{ steps.commits.outputs.list }} + + + Steps: + 1. For each commit that looks like a new feature or significant change: + - Read the changed files to understand what was added + - Check if the feature is already documented in packages/web/src/content/docs/* + 2. If you find undocumented features: + - Update the relevant documentation files in packages/web/src/content/docs/* + - Follow the existing documentation style and structure + - Make sure to document the feature clearly with examples where appropriate + 3. If all new features are already documented, report that no updates are needed + 4. If you are creating a new documentation file be sure to update packages/web/astro.config.mjs too. + + Focus on user-facing features and API changes. Skip internal refactors, bug fixes, and test updates unless they affect user-facing behavior. + Don't feel the need to document every little thing. It is perfectly okay to make 0 changes at all. + Try to keep documentation only for large features or changes that already have a good spot to be documented. diff --git a/reference/opencode-1.15.5/.github/workflows/duplicate-issues.yml b/reference/opencode-1.15.5/.github/workflows/duplicate-issues.yml new file mode 100755 index 0000000..4648a2d --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/duplicate-issues.yml @@ -0,0 +1,177 @@ +name: duplicate-issues + +on: + issues: + types: [opened, edited] + +jobs: + check-duplicates: + if: github.event.action == 'opened' + runs-on: blacksmith-4vcpu-ubuntu-2404 + permissions: + contents: read + issues: write + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + fetch-depth: 1 + + - uses: ./.github/actions/setup-bun + + - name: Install opencode + run: curl -fsSL https://opencode.ai/install | bash + + - name: Check duplicates and compliance + env: + OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + OPENCODE_PERMISSION: | + { + "bash": { + "*": "deny", + "gh issue*": "allow" + }, + "webfetch": "deny" + } + run: | + opencode run -m opencode/claude-sonnet-4-6 "A new issue has been created: + + Issue number: ${{ github.event.issue.number }} + + Lookup this issue with gh issue view ${{ github.event.issue.number }}. + + You have TWO tasks. Perform both, then post a SINGLE comment (if needed). + + --- + + TASK 1: CONTRIBUTING GUIDELINES COMPLIANCE CHECK + + Check whether the issue follows our contributing guidelines and issue templates. + + This project has three issue templates that every issue MUST use one of: + + 1. Bug Report - requires a Description field with real content + 2. Feature Request - requires a verification checkbox and description, title should start with [FEATURE]: + 3. Question - requires the Question field with real content + + Additionally check: + - No AI-generated walls of text (long, AI-generated descriptions are not acceptable) + - The issue has real content, not just template placeholder text left unchanged + - Bug reports should include some context about how to reproduce + - Feature requests should explain the problem or need + - We want to push for having the user provide system description & information + + Do NOT be nitpicky about optional fields. Only flag real problems like: no template used, required fields empty or placeholder text only, obviously AI-generated walls of text, or completely empty/nonsensical content. + + --- + + TASK 2: DUPLICATE CHECK + + Search through existing issues (excluding #${{ github.event.issue.number }}) to find potential duplicates. + Consider: + 1. Similar titles or descriptions + 2. Same error messages or symptoms + 3. Related functionality or components + 4. Similar feature requests + + Additionally, if the issue mentions keybinds, keyboard shortcuts, or key bindings, note the pinned keybinds issue #4997. + + --- + + POSTING YOUR COMMENT: + + Based on your findings, post a SINGLE comment on issue #${{ github.event.issue.number }}. Build the comment as follows: + + If the issue is NOT compliant, start the comment with: + + Then explain what needs to be fixed and that they have 2 hours to edit the issue before it is automatically closed. Also add the label needs:compliance to the issue using: gh issue edit ${{ github.event.issue.number }} --add-label needs:compliance + + If duplicates were found, include a section about potential duplicates with links. + + If the issue mentions keybinds/keyboard shortcuts, include a note about #4997. + + If the issue IS compliant AND no duplicates were found AND no keybind reference, do NOT comment at all. + + Use this format for the comment: + + [If not compliant:] + + This issue doesn't fully meet our [contributing guidelines](../blob/dev/CONTRIBUTING.md). + + **What needs to be fixed:** + - [specific reasons] + + Please edit this issue to address the above within **2 hours**, or it will be automatically closed. + + [If duplicates found, add:] + --- + This issue might be a duplicate of existing issues. Please check: + - #[issue_number]: [brief description of similarity] + + [If keybind-related, add:] + For keybind-related issues, please also check our pinned keybinds documentation: #4997 + + [End with if not compliant:] + If you believe this was flagged incorrectly, please let a maintainer know. + + Remember: post at most ONE comment combining all findings. If everything is fine, post nothing." + + recheck-compliance: + if: github.event.action == 'edited' && contains(github.event.issue.labels.*.name, 'needs:compliance') + runs-on: blacksmith-4vcpu-ubuntu-2404 + permissions: + contents: read + issues: write + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + fetch-depth: 1 + + - uses: ./.github/actions/setup-bun + + - name: Install opencode + run: curl -fsSL https://opencode.ai/install | bash + + - name: Recheck compliance + env: + OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + OPENCODE_PERMISSION: | + { + "bash": { + "*": "deny", + "gh issue*": "allow" + }, + "webfetch": "deny" + } + run: | + opencode run -m opencode/claude-sonnet-4-6 "Issue #${{ github.event.issue.number }} was previously flagged as non-compliant and has been edited. + + Lookup this issue with gh issue view ${{ github.event.issue.number }}. + + Re-check whether the issue now follows our contributing guidelines and issue templates. + + This project has three issue templates that every issue MUST use one of: + + 1. Bug Report - requires a Description field with real content + 2. Feature Request - requires a verification checkbox and description, title should start with [FEATURE]: + 3. Question - requires the Question field with real content + + Additionally check: + - No AI-generated walls of text (long, AI-generated descriptions are not acceptable) + - The issue has real content, not just template placeholder text left unchanged + - Bug reports should include some context about how to reproduce + - Feature requests should explain the problem or need + - We want to push for having the user provide system description & information + + Do NOT be nitpicky about optional fields. Only flag real problems like: no template used, required fields empty or placeholder text only, obviously AI-generated walls of text, or completely empty/nonsensical content. + + If the issue is NOW compliant: + 1. Remove the needs:compliance label: gh issue edit ${{ github.event.issue.number }} --remove-label needs:compliance + 2. Find and delete the previous compliance comment (the one containing ) using: gh api repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/comments --jq '.[] | select(.body | contains(\"\")) | .id' then delete it with: gh api -X DELETE repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/comments/{id} + 3. Post a short comment thanking them for updating the issue. + + If the issue is STILL not compliant: + Post a comment explaining what still needs to be fixed. Keep the needs:compliance label." diff --git a/reference/opencode-1.15.5/.github/workflows/generate.yml b/reference/opencode-1.15.5/.github/workflows/generate.yml new file mode 100755 index 0000000..324cfec --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/generate.yml @@ -0,0 +1,51 @@ +name: generate + +on: + push: + branches: + - dev + +jobs: + generate: + runs-on: blacksmith-4vcpu-ubuntu-2404 + permissions: + contents: write + pull-requests: write + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + + - name: Setup Bun + uses: ./.github/actions/setup-bun + + - name: Setup git committer + id: committer + uses: ./.github/actions/setup-git-committer + with: + opencode-app-id: ${{ vars.OPENCODE_APP_ID }} + opencode-app-secret: ${{ secrets.OPENCODE_APP_SECRET }} + + - name: Generate + run: ./script/generate.ts + + - name: Commit and push + run: | + if [ -z "$(git status --porcelain)" ]; then + echo "No changes to commit" + exit 0 + fi + git add -A + git commit -m "chore: generate" --allow-empty + git push origin HEAD:${{ github.ref_name }} --no-verify + # if ! git push origin HEAD:${{ github.event.pull_request.head.ref || github.ref_name }} --no-verify; then + # echo "" + # echo "============================================" + # echo "Failed to push generated code." + # echo "Please run locally and push:" + # echo "" + # echo " ./script/generate.ts" + # echo " git add -A && git commit -m \"chore: generate\" && git push" + # echo "" + # echo "============================================" + # exit 1 + # fi diff --git a/reference/opencode-1.15.5/.github/workflows/nix-eval.yml b/reference/opencode-1.15.5/.github/workflows/nix-eval.yml new file mode 100755 index 0000000..7533269 --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/nix-eval.yml @@ -0,0 +1,95 @@ +name: nix-eval + +on: + push: + branches: [dev] + pull_request: + branches: [dev] + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + nix-eval: + runs-on: blacksmith-4vcpu-ubuntu-2404 + timeout-minutes: 15 + steps: + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Setup Nix + uses: nixbuild/nix-quick-install-action@2c9db80fb984ceb1bcaa77cdda3fdf8cfba92035 # v34 + + - name: Evaluate flake outputs (all systems) + run: | + set -euo pipefail + nix --version + + echo "=== Flake metadata ===" + nix flake metadata + + echo "" + echo "=== Flake structure ===" + nix flake show --all-systems + + SYSTEMS="x86_64-linux aarch64-linux x86_64-darwin aarch64-darwin" + PACKAGES="opencode" + # TODO: move 'desktop' to PACKAGES when #11755 is fixed + OPTIONAL_PACKAGES="desktop" + + echo "" + echo "=== Evaluating packages for all systems ===" + for system in $SYSTEMS; do + echo "" + echo "--- $system ---" + for pkg in $PACKAGES; do + printf " %s: " "$pkg" + if output=$(nix eval ".#packages.$system.$pkg.drvPath" --raw 2>&1); then + echo "✓" + else + echo "✗" + echo "::error::Evaluation failed for packages.$system.$pkg" + echo "$output" + exit 1 + fi + done + done + + echo "" + echo "=== Evaluating optional packages ===" + for system in $SYSTEMS; do + echo "" + echo "--- $system ---" + for pkg in $OPTIONAL_PACKAGES; do + printf " %s: " "$pkg" + if output=$(nix eval ".#packages.$system.$pkg.drvPath" --raw 2>&1); then + echo "✓" + else + echo "✗" + echo "::warning::Evaluation failed for packages.$system.$pkg" + echo "$output" + fi + done + done + + echo "" + echo "=== Evaluating devShells for all systems ===" + for system in $SYSTEMS; do + printf "%s: " "$system" + if output=$(nix eval ".#devShells.$system.default.drvPath" --raw 2>&1); then + echo "✓" + else + echo "✗" + echo "::error::Evaluation failed for devShells.$system.default" + echo "$output" + exit 1 + fi + done + + echo "" + echo "=== All evaluations passed ===" diff --git a/reference/opencode-1.15.5/.github/workflows/nix-hashes.yml b/reference/opencode-1.15.5/.github/workflows/nix-hashes.yml new file mode 100755 index 0000000..085f889 --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/nix-hashes.yml @@ -0,0 +1,152 @@ +name: nix-hashes + +permissions: + contents: write + +on: + workflow_dispatch: + push: + branches: [dev, beta] + paths: + - "bun.lock" + - "package.json" + - "packages/*/package.json" + - "flake.lock" + - "nix/node_modules.nix" + - "nix/scripts/**" + - "patches/**" + - ".github/workflows/nix-hashes.yml" + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + # Native runners required: bun install cross-compilation flags (--os/--cpu) + # do not produce byte-identical node_modules as native installs. + compute-hash: + strategy: + fail-fast: false + matrix: + include: + - system: x86_64-linux + runner: blacksmith-4vcpu-ubuntu-2404 + - system: aarch64-linux + runner: blacksmith-4vcpu-ubuntu-2404-arm + - system: x86_64-darwin + runner: macos-15-intel + - system: aarch64-darwin + runner: macos-latest + runs-on: ${{ matrix.runner }} + + steps: + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Setup Nix + uses: nixbuild/nix-quick-install-action@2c9db80fb984ceb1bcaa77cdda3fdf8cfba92035 # v34 + + - name: Compute node_modules hash + id: hash + env: + SYSTEM: ${{ matrix.system }} + run: | + set -euo pipefail + + BUILD_LOG=$(mktemp) + trap 'rm -f "$BUILD_LOG"' EXIT + + # Build with fakeHash to trigger hash mismatch and reveal correct hash + nix build ".#packages.${SYSTEM}.node_modules_updater" --no-link 2>&1 | tee "$BUILD_LOG" || true + + # Extract hash from build log with portability + HASH="$(nix run --inputs-from . nixpkgs#gnugrep -- -oP 'got:\s*\Ksha256-[A-Za-z0-9+/=]+' "$BUILD_LOG" | tail -n1 || true)" + + if [ -z "$HASH" ]; then + echo "::error::Failed to compute hash for ${SYSTEM}" + cat "$BUILD_LOG" + exit 1 + fi + + echo "$HASH" > hash.txt + echo "Computed hash for ${SYSTEM}: $HASH" + + - name: Upload hash + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: hash-${{ matrix.system }} + path: hash.txt + retention-days: 1 + + update-hashes: + needs: compute-hash + if: github.event_name != 'pull_request' + runs-on: blacksmith-4vcpu-ubuntu-2404 + + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + persist-credentials: false + fetch-depth: 0 + ref: ${{ github.ref_name }} + + - name: Setup git committer + uses: ./.github/actions/setup-git-committer + with: + opencode-app-id: ${{ vars.OPENCODE_APP_ID }} + opencode-app-secret: ${{ secrets.OPENCODE_APP_SECRET }} + + - name: Pull latest changes + run: | + git pull --rebase --autostash origin "$GITHUB_REF_NAME" + + - name: Download hash artifacts + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + path: hashes + pattern: hash-* + + - name: Update hashes.json + run: | + set -euo pipefail + + HASH_FILE="nix/hashes.json" + + [ -f "$HASH_FILE" ] || echo '{"nodeModules":{}}' > "$HASH_FILE" + + for SYSTEM in x86_64-linux aarch64-linux x86_64-darwin aarch64-darwin; do + FILE="hashes/hash-${SYSTEM}/hash.txt" + if [ -f "$FILE" ]; then + HASH="$(tr -d '[:space:]' < "$FILE")" + echo "${SYSTEM}: ${HASH}" + jq --arg sys "$SYSTEM" --arg h "$HASH" '.nodeModules[$sys] = $h' "$HASH_FILE" > tmp.json + mv tmp.json "$HASH_FILE" + else + echo "::warning::Missing hash for ${SYSTEM}" + fi + done + + cat "$HASH_FILE" + + - name: Commit changes + run: | + set -euo pipefail + + HASH_FILE="nix/hashes.json" + + if [ -z "$(git status --short -- "$HASH_FILE")" ]; then + echo "No changes to commit" + echo "### Nix hashes" >> "$GITHUB_STEP_SUMMARY" + echo "Status: no changes" >> "$GITHUB_STEP_SUMMARY" + exit 0 + fi + + git add "$HASH_FILE" + git commit -m "chore: update nix node_modules hashes" + + git pull --rebase --autostash origin "$GITHUB_REF_NAME" + git push origin HEAD:"$GITHUB_REF_NAME" + + echo "### Nix hashes" >> "$GITHUB_STEP_SUMMARY" + echo "Status: committed $(git rev-parse --short HEAD)" >> "$GITHUB_STEP_SUMMARY" diff --git a/reference/opencode-1.15.5/.github/workflows/notify-discord.yml b/reference/opencode-1.15.5/.github/workflows/notify-discord.yml new file mode 100755 index 0000000..0b2b1cd --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/notify-discord.yml @@ -0,0 +1,14 @@ +name: notify-discord + +on: + release: + types: [released] # fires when a draft release is published + +jobs: + notify: + runs-on: blacksmith-4vcpu-ubuntu-2404 + steps: + - name: Send nicely-formatted embed to Discord + uses: SethCohen/github-releases-to-discord@24d166886aee4646d448c8a389ff9e1ebcab3682 # v1.20.0 + with: + webhook_url: ${{ secrets.DISCORD_WEBHOOK }} diff --git a/reference/opencode-1.15.5/.github/workflows/opencode.yml b/reference/opencode-1.15.5/.github/workflows/opencode.yml new file mode 100755 index 0000000..3469c21 --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/opencode.yml @@ -0,0 +1,34 @@ +name: opencode + +on: + issue_comment: + types: [created] + pull_request_review_comment: + types: [created] + +jobs: + opencode: + if: | + contains(github.event.comment.body, ' /oc') || + startsWith(github.event.comment.body, '/oc') || + contains(github.event.comment.body, ' /opencode') || + startsWith(github.event.comment.body, '/opencode') + runs-on: blacksmith-4vcpu-ubuntu-2404 + permissions: + id-token: write + contents: read + pull-requests: read + issues: read + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + + - uses: ./.github/actions/setup-bun + + - name: Run opencode + uses: anomalyco/opencode/github@2c14fc5586fe0b88e5c04732d2e846769cc35671 # latest + env: + OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + OPENCODE_PERMISSION: '{"bash": "deny"}' + with: + model: opencode/claude-opus-4-5 diff --git a/reference/opencode-1.15.5/.github/workflows/pr-management.yml b/reference/opencode-1.15.5/.github/workflows/pr-management.yml new file mode 100755 index 0000000..b6aa4e5 --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/pr-management.yml @@ -0,0 +1,95 @@ +name: pr-management + +on: + pull_request_target: + types: [opened] + +jobs: + check-duplicates: + runs-on: blacksmith-4vcpu-ubuntu-2404 + permissions: + contents: read + pull-requests: write + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + fetch-depth: 1 + + - name: Check team membership + id: team-check + run: | + LOGIN="${{ github.event.pull_request.user.login }}" + if [ "$LOGIN" = "opencode-agent[bot]" ] || grep -qxF "$LOGIN" .github/TEAM_MEMBERS; then + echo "is_team=true" >> "$GITHUB_OUTPUT" + echo "Skipping: $LOGIN is a team member or bot" + else + echo "is_team=false" >> "$GITHUB_OUTPUT" + fi + + - name: Setup Bun + if: steps.team-check.outputs.is_team != 'true' + uses: ./.github/actions/setup-bun + + - name: Install dependencies + if: steps.team-check.outputs.is_team != 'true' + run: bun install + + - name: Install opencode + if: steps.team-check.outputs.is_team != 'true' + run: curl -fsSL https://opencode.ai/install | bash + + - name: Build prompt + if: steps.team-check.outputs.is_team != 'true' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.pull_request.number }} + run: | + { + echo "Check for duplicate PRs related to this new PR:" + echo "" + echo "CURRENT_PR_NUMBER: $PR_NUMBER" + echo "" + echo "Title: $(gh pr view "$PR_NUMBER" --json title --jq .title)" + echo "" + echo "Description:" + gh pr view "$PR_NUMBER" --json body --jq .body + } > pr_info.txt + + - name: Check for duplicate PRs + if: steps.team-check.outputs.is_team != 'true' + env: + OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.pull_request.number }} + run: | + COMMENT=$(bun script/duplicate-pr.ts -f pr_info.txt "Check the attached file for PR details and search for duplicates") + + if [ "$COMMENT" != "No duplicate PRs found" ]; then + gh pr comment "$PR_NUMBER" --body "_The following comment was made by an LLM, it may be inaccurate:_ + + $COMMENT" + fi + + add-contributor-label: + runs-on: ubuntu-latest + permissions: + pull-requests: write + issues: write + steps: + - name: Add Contributor Label + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + with: + script: | + const isPR = !!context.payload.pull_request; + const issueNumber = isPR ? context.payload.pull_request.number : context.payload.issue.number; + const authorAssociation = isPR ? context.payload.pull_request.author_association : context.payload.issue.author_association; + + if (authorAssociation === 'CONTRIBUTOR') { + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + labels: ['contributor'] + }); + } diff --git a/reference/opencode-1.15.5/.github/workflows/pr-standards.yml b/reference/opencode-1.15.5/.github/workflows/pr-standards.yml new file mode 100755 index 0000000..0683808 --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/pr-standards.yml @@ -0,0 +1,351 @@ +name: pr-standards + +on: + pull_request_target: + types: [opened, edited, synchronize] + +jobs: + check-standards: + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - name: Check PR standards + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 + with: + script: | + const pr = context.payload.pull_request; + const login = pr.user.login; + + // Skip PRs older than Feb 18, 2026 at 6PM EST (Feb 19, 2026 00:00 UTC) + const cutoff = new Date('2026-02-19T00:00:00Z'); + const prCreated = new Date(pr.created_at); + if (prCreated < cutoff) { + console.log(`Skipping: PR #${pr.number} was created before cutoff (${prCreated.toISOString()})`); + return; + } + + // Check if author is a team member or bot + if (login === 'opencode-agent[bot]') return; + const { data: file } = await github.rest.repos.getContent({ + owner: context.repo.owner, + repo: context.repo.repo, + path: '.github/TEAM_MEMBERS', + ref: 'dev' + }); + const members = Buffer.from(file.content, 'base64').toString().split('\n').map(l => l.trim()).filter(Boolean); + if (members.includes(login)) { + console.log(`Skipping: ${login} is a team member`); + return; + } + + const title = pr.title; + + async function addLabel(label) { + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pr.number, + labels: [label] + }); + } + + async function removeLabel(label) { + try { + await github.rest.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pr.number, + name: label + }); + } catch (e) { + // Label wasn't present, ignore + } + } + + async function comment(marker, body) { + const markerText = ``; + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pr.number + }); + + const existing = comments.find(c => c.body.includes(markerText)); + if (existing) return; + + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pr.number, + body: markerText + '\n' + body + }); + } + + // Step 1: Check title format + // Matches: feat:, feat(scope):, feat (scope):, etc. + const titlePattern = /^(feat|fix|docs|chore|refactor|test)\s*(\([a-zA-Z0-9-]+\))?\s*:/; + const hasValidTitle = titlePattern.test(title); + + if (!hasValidTitle) { + await addLabel('needs:title'); + await comment('title', `Hey! Your PR title \`${title}\` doesn't follow conventional commit format. + + Please update it to start with one of: + - \`feat:\` or \`feat(scope):\` new feature + - \`fix:\` or \`fix(scope):\` bug fix + - \`docs:\` or \`docs(scope):\` documentation changes + - \`chore:\` or \`chore(scope):\` maintenance tasks + - \`refactor:\` or \`refactor(scope):\` code refactoring + - \`test:\` or \`test(scope):\` adding or updating tests + + Where \`scope\` is the package name (e.g., \`app\`, \`desktop\`, \`opencode\`). + + See [CONTRIBUTING.md](../blob/dev/CONTRIBUTING.md#pr-titles) for details.`); + return; + } + + await removeLabel('needs:title'); + + // Step 2: Check for linked issue (skip for docs/refactor/feat PRs) + const skipIssueCheck = /^(docs|refactor|feat)\s*(\([a-zA-Z0-9-]+\))?\s*:/.test(title); + if (skipIssueCheck) { + await removeLabel('needs:issue'); + console.log('Skipping issue check for docs/refactor/feat PR'); + return; + } + const query = ` + query($owner: String!, $repo: String!, $number: Int!) { + repository(owner: $owner, name: $repo) { + pullRequest(number: $number) { + closingIssuesReferences(first: 1) { + totalCount + } + } + } + } + `; + + const result = await github.graphql(query, { + owner: context.repo.owner, + repo: context.repo.repo, + number: pr.number + }); + + const linkedIssues = result.repository.pullRequest.closingIssuesReferences.totalCount; + + if (linkedIssues === 0) { + await addLabel('needs:issue'); + await comment('issue', `Thanks for your contribution! + + This PR doesn't have a linked issue. All PRs must reference an existing issue. + + Please: + 1. Open an issue describing the bug/feature (if one doesn't exist) + 2. Add \`Fixes #\` or \`Closes #\` to this PR description + + See [CONTRIBUTING.md](../blob/dev/CONTRIBUTING.md#issue-first-policy) for details.`); + return; + } + + await removeLabel('needs:issue'); + console.log('PR meets all standards'); + + check-compliance: + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - name: Check PR template compliance + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0 + with: + script: | + const pr = context.payload.pull_request; + const login = pr.user.login; + + // Skip PRs older than Feb 18, 2026 at 6PM EST (Feb 19, 2026 00:00 UTC) + const cutoff = new Date('2026-02-19T00:00:00Z'); + const prCreated = new Date(pr.created_at); + if (prCreated < cutoff) { + console.log(`Skipping: PR #${pr.number} was created before cutoff (${prCreated.toISOString()})`); + return; + } + + // Check if author is a team member or bot + if (login === 'opencode-agent[bot]') return; + const { data: file } = await github.rest.repos.getContent({ + owner: context.repo.owner, + repo: context.repo.repo, + path: '.github/TEAM_MEMBERS', + ref: 'dev' + }); + const members = Buffer.from(file.content, 'base64').toString().split('\n').map(l => l.trim()).filter(Boolean); + if (members.includes(login)) { + console.log(`Skipping: ${login} is a team member`); + return; + } + + const body = pr.body || ''; + const title = pr.title; + const isDocsRefactorOrFeat = /^(docs|refactor|feat)\s*(\([a-zA-Z0-9-]+\))?\s*:/.test(title); + + const issues = []; + + // Check: template sections exist + const hasWhatSection = /### What does this PR do\?/.test(body); + const hasTypeSection = /### Type of change/.test(body); + const hasVerifySection = /### How did you verify your code works\?/.test(body); + const hasChecklistSection = /### Checklist/.test(body); + const hasIssueSection = /### Issue for this PR/.test(body); + + if (!hasWhatSection || !hasTypeSection || !hasVerifySection || !hasChecklistSection || !hasIssueSection) { + issues.push('PR description is missing required template sections. Please use the [PR template](../blob/dev/.github/pull_request_template.md).'); + } + + // Check: "What does this PR do?" has real content (not just placeholder text) + if (hasWhatSection) { + const whatMatch = body.match(/### What does this PR do\?\s*\n([\s\S]*?)(?=###|$)/); + const whatContent = whatMatch ? whatMatch[1].trim() : ''; + const placeholder = 'Please provide a description of the issue'; + const onlyPlaceholder = whatContent.includes(placeholder) && whatContent.replace(placeholder, '').replace(/[*\s]/g, '').length < 20; + if (!whatContent || onlyPlaceholder) { + issues.push('"What does this PR do?" section is empty or only contains placeholder text. Please describe your changes.'); + } + } + + // Check: at least one "Type of change" checkbox is checked + if (hasTypeSection) { + const typeMatch = body.match(/### Type of change\s*\n([\s\S]*?)(?=###|$)/); + const typeContent = typeMatch ? typeMatch[1] : ''; + const hasCheckedBox = /- \[x\]/i.test(typeContent); + if (!hasCheckedBox) { + issues.push('No "Type of change" checkbox is checked. Please select at least one.'); + } + } + + // Check: issue reference (skip for docs/refactor/feat) + if (!isDocsRefactorOrFeat && hasIssueSection) { + const issueMatch = body.match(/### Issue for this PR\s*\n([\s\S]*?)(?=###|$)/); + const issueContent = issueMatch ? issueMatch[1].trim() : ''; + const hasIssueRef = /(closes|fixes|resolves)\s+#\d+/i.test(issueContent) || /#\d+/.test(issueContent); + if (!hasIssueRef) { + issues.push('No issue referenced. Please add `Closes #` linking to the relevant issue.'); + } + } + + // Check: "How did you verify" has content + if (hasVerifySection) { + const verifyMatch = body.match(/### How did you verify your code works\?\s*\n([\s\S]*?)(?=###|$)/); + const verifyContent = verifyMatch ? verifyMatch[1].trim() : ''; + if (!verifyContent) { + issues.push('"How did you verify your code works?" section is empty. Please explain how you tested.'); + } + } + + // Check: checklist boxes are checked + if (hasChecklistSection) { + const checklistMatch = body.match(/### Checklist\s*\n([\s\S]*?)(?=###|$)/); + const checklistContent = checklistMatch ? checklistMatch[1] : ''; + const unchecked = (checklistContent.match(/- \[ \]/g) || []).length; + const checked = (checklistContent.match(/- \[x\]/gi) || []).length; + if (checked < 2) { + issues.push('Not all checklist items are checked. Please confirm you have tested locally and have not included unrelated changes.'); + } + } + + // Helper functions + async function addLabel(label) { + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pr.number, + labels: [label] + }); + } + + async function removeLabel(label) { + try { + await github.rest.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pr.number, + name: label + }); + } catch (e) {} + } + + const hasComplianceLabel = pr.labels.some(l => l.name === 'needs:compliance'); + + if (issues.length > 0) { + // Non-compliant + if (!hasComplianceLabel) { + await addLabel('needs:compliance'); + } + + const marker = ''; + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pr.number + }); + const existing = comments.find(c => c.body.includes(marker)); + + const body_text = `${marker} + This PR doesn't fully meet our [contributing guidelines](../blob/dev/CONTRIBUTING.md) and [PR template](../blob/dev/.github/pull_request_template.md). + + **What needs to be fixed:** + ${issues.map(i => `- ${i}`).join('\n')} + + Please edit this PR description to address the above within **2 hours**, or it will be automatically closed. + + If you believe this was flagged incorrectly, please let a maintainer know.`; + + if (existing) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: existing.id, + body: body_text + }); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pr.number, + body: body_text + }); + } + + console.log(`PR #${pr.number} is non-compliant: ${issues.join(', ')}`); + } else if (hasComplianceLabel) { + // Was non-compliant, now fixed + await removeLabel('needs:compliance'); + + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pr.number + }); + const marker = ''; + const existing = comments.find(c => c.body.includes(marker)); + if (existing) { + await github.rest.issues.deleteComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: existing.id + }); + } + + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pr.number, + body: 'Thanks for updating your PR! It now meets our contributing guidelines. :+1:' + }); + + console.log(`PR #${pr.number} is now compliant, label removed`); + } else { + console.log(`PR #${pr.number} is compliant`); + } diff --git a/reference/opencode-1.15.5/.github/workflows/publish-github-action.yml b/reference/opencode-1.15.5/.github/workflows/publish-github-action.yml new file mode 100755 index 0000000..e5ca91b --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/publish-github-action.yml @@ -0,0 +1,30 @@ +name: publish-github-action + +on: + workflow_dispatch: + push: + tags: + - "github-v*.*.*" + - "!github-v1" + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +permissions: + contents: write + +jobs: + publish: + runs-on: blacksmith-4vcpu-ubuntu-2404 + steps: + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + with: + fetch-depth: 0 + + - run: git fetch --force --tags + + - name: Publish + run: | + git config --global user.email "opencode@sst.dev" + git config --global user.name "opencode" + ./script/publish + working-directory: ./github diff --git a/reference/opencode-1.15.5/.github/workflows/publish-vscode.yml b/reference/opencode-1.15.5/.github/workflows/publish-vscode.yml new file mode 100755 index 0000000..00c7e26 --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/publish-vscode.yml @@ -0,0 +1,37 @@ +name: publish-vscode + +on: + workflow_dispatch: + push: + tags: + - "vscode-v*.*.*" + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +permissions: + contents: write + +jobs: + publish: + runs-on: blacksmith-4vcpu-ubuntu-2404 + steps: + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + with: + fetch-depth: 0 + + - uses: ./.github/actions/setup-bun + + - run: git fetch --force --tags + - run: bun install -g @vscode/vsce + + - name: Install extension dependencies + run: bun install + working-directory: ./sdks/vscode + + - name: Publish + run: | + ./script/publish + working-directory: ./sdks/vscode + env: + VSCE_PAT: ${{ secrets.VSCE_PAT }} + OPENVSX_TOKEN: ${{ secrets.OPENVSX_TOKEN }} diff --git a/reference/opencode-1.15.5/.github/workflows/publish.yml b/reference/opencode-1.15.5/.github/workflows/publish.yml new file mode 100755 index 0000000..9887cbe --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/publish.yml @@ -0,0 +1,491 @@ +name: publish +run-name: "${{ format('release {0}', inputs.bump) }}" + +on: + push: + branches: + - ci + - dev + - beta + - fix/npm-native-binary-install + - snapshot-* + workflow_dispatch: + inputs: + bump: + description: "Bump major, minor, or patch" + required: false + type: choice + options: + - major + - minor + - patch + version: + description: "Override version (optional)" + required: false + type: string + +concurrency: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.version || inputs.bump }} + +permissions: + id-token: write + contents: write + packages: write + +jobs: + version: + runs-on: blacksmith-4vcpu-ubuntu-2404 + if: github.repository == 'anomalyco/opencode' + steps: + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + with: + fetch-depth: 0 + + - uses: ./.github/actions/setup-bun + + - name: Setup git committer + id: committer + uses: ./.github/actions/setup-git-committer + with: + opencode-app-id: ${{ vars.OPENCODE_APP_ID }} + opencode-app-secret: ${{ secrets.OPENCODE_APP_SECRET }} + + - name: Install OpenCode + if: inputs.bump || inputs.version + run: bun i -g opencode-ai + + - id: version + run: | + ./script/version.ts + env: + GH_TOKEN: ${{ steps.committer.outputs.token }} + OPENCODE_BUMP: ${{ inputs.bump }} + OPENCODE_VERSION: ${{ inputs.version }} + OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + GH_REPO: ${{ (github.ref_name == 'beta' && 'anomalyco/opencode-beta') || github.repository }} + outputs: + version: ${{ steps.version.outputs.version }} + release: ${{ steps.version.outputs.release }} + tag: ${{ steps.version.outputs.tag }} + repo: ${{ steps.version.outputs.repo }} + + build-cli: + needs: version + runs-on: blacksmith-4vcpu-ubuntu-2404 + if: github.repository == 'anomalyco/opencode' + steps: + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + with: + fetch-tags: true + + - uses: ./.github/actions/setup-bun + + - name: Setup git committer + id: committer + uses: ./.github/actions/setup-git-committer + with: + opencode-app-id: ${{ vars.OPENCODE_APP_ID }} + opencode-app-secret: ${{ secrets.OPENCODE_APP_SECRET }} + + - name: Build + id: build + run: | + ./packages/opencode/script/build.ts ${{ (github.ref_name == 'beta' && '--sourcemaps') || '' }} + env: + OPENCODE_VERSION: ${{ needs.version.outputs.version }} + OPENCODE_RELEASE: ${{ needs.version.outputs.release }} + GH_REPO: ${{ needs.version.outputs.repo }} + GH_TOKEN: ${{ steps.committer.outputs.token }} + + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: opencode-cli + path: | + packages/opencode/dist/opencode-darwin* + packages/opencode/dist/opencode-linux* + + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: opencode-cli-windows + path: packages/opencode/dist/opencode-windows* + outputs: + version: ${{ needs.version.outputs.version }} + + sign-cli-windows: + needs: + - build-cli + - version + runs-on: blacksmith-4vcpu-windows-2025 + if: github.repository == 'anomalyco/opencode' + env: + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + AZURE_TRUSTED_SIGNING_ACCOUNT_NAME: ${{ secrets.AZURE_TRUSTED_SIGNING_ACCOUNT_NAME }} + AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE: ${{ secrets.AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE }} + AZURE_TRUSTED_SIGNING_ENDPOINT: ${{ secrets.AZURE_TRUSTED_SIGNING_ENDPOINT }} + steps: + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + name: opencode-cli-windows + path: packages/opencode/dist + + - name: Setup git committer + id: committer + uses: ./.github/actions/setup-git-committer + with: + opencode-app-id: ${{ vars.OPENCODE_APP_ID }} + opencode-app-secret: ${{ secrets.OPENCODE_APP_SECRET }} + + - name: Azure login + uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0 + with: + client-id: ${{ env.AZURE_CLIENT_ID }} + tenant-id: ${{ env.AZURE_TENANT_ID }} + subscription-id: ${{ env.AZURE_SUBSCRIPTION_ID }} + + - uses: azure/artifact-signing-action@b443cf8ea4124818d2ea9f043cba29fc3ec47b16 # v1.2.0 + with: + endpoint: ${{ env.AZURE_TRUSTED_SIGNING_ENDPOINT }} + signing-account-name: ${{ env.AZURE_TRUSTED_SIGNING_ACCOUNT_NAME }} + certificate-profile-name: ${{ env.AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE }} + files: | + ${{ github.workspace }}\packages\opencode\dist\opencode-windows-arm64\bin\opencode.exe + ${{ github.workspace }}\packages\opencode\dist\opencode-windows-x64\bin\opencode.exe + ${{ github.workspace }}\packages\opencode\dist\opencode-windows-x64-baseline\bin\opencode.exe + exclude-environment-credential: true + exclude-workload-identity-credential: true + exclude-managed-identity-credential: true + exclude-shared-token-cache-credential: true + exclude-visual-studio-credential: true + exclude-visual-studio-code-credential: true + exclude-azure-cli-credential: false + exclude-azure-powershell-credential: true + exclude-azure-developer-cli-credential: true + exclude-interactive-browser-credential: true + + - name: Verify Windows CLI signatures + shell: pwsh + run: | + $files = @( + "${{ github.workspace }}\packages\opencode\dist\opencode-windows-arm64\bin\opencode.exe", + "${{ github.workspace }}\packages\opencode\dist\opencode-windows-x64\bin\opencode.exe", + "${{ github.workspace }}\packages\opencode\dist\opencode-windows-x64-baseline\bin\opencode.exe" + ) + + foreach ($file in $files) { + $sig = Get-AuthenticodeSignature $file + if ($sig.Status -ne "Valid") { + throw "Invalid signature for ${file}: $($sig.Status)" + } + } + + - name: Repack Windows CLI archives + working-directory: packages/opencode/dist + shell: pwsh + run: | + Compress-Archive -Path "opencode-windows-arm64\bin\*" -DestinationPath "opencode-windows-arm64.zip" -Force + Compress-Archive -Path "opencode-windows-x64\bin\*" -DestinationPath "opencode-windows-x64.zip" -Force + Compress-Archive -Path "opencode-windows-x64-baseline\bin\*" -DestinationPath "opencode-windows-x64-baseline.zip" -Force + + - name: Upload signed Windows CLI release assets + if: needs.version.outputs.release != '' + shell: pwsh + env: + GH_TOKEN: ${{ steps.committer.outputs.token }} + run: | + gh release upload "v${{ needs.version.outputs.version }}" ` + "${{ github.workspace }}\packages\opencode\dist\opencode-windows-arm64.zip" ` + "${{ github.workspace }}\packages\opencode\dist\opencode-windows-x64.zip" ` + "${{ github.workspace }}\packages\opencode\dist\opencode-windows-x64-baseline.zip" ` + --clobber ` + --repo "${{ needs.version.outputs.repo }}" + + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: opencode-cli-signed-windows + path: | + packages/opencode/dist/opencode-windows-arm64 + packages/opencode/dist/opencode-windows-x64 + packages/opencode/dist/opencode-windows-x64-baseline + + build-electron: + needs: + - build-cli + - version + if: github.repository == 'anomalyco/opencode' + continue-on-error: false + env: + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + AZURE_TRUSTED_SIGNING_ACCOUNT_NAME: ${{ secrets.AZURE_TRUSTED_SIGNING_ACCOUNT_NAME }} + AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE: ${{ secrets.AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE }} + AZURE_TRUSTED_SIGNING_ENDPOINT: ${{ secrets.AZURE_TRUSTED_SIGNING_ENDPOINT }} + strategy: + fail-fast: false + matrix: + settings: + - host: macos-26-intel + target: x86_64-apple-darwin + platform_flag: --mac --x64 + bun_install_flags: --os=darwin --cpu=x64 + - host: macos-26 + target: aarch64-apple-darwin + platform_flag: --mac --arm64 + bun_install_flags: --os=darwin --cpu=arm64 + # github-hosted: blacksmith lacks ARM64 MSVC cross-compilation toolchain + - host: "windows-2025" + target: aarch64-pc-windows-msvc + platform_flag: --win --arm64 + - host: "blacksmith-4vcpu-windows-2025" + target: x86_64-pc-windows-msvc + platform_flag: --win + - host: "blacksmith-4vcpu-ubuntu-2404" + target: x86_64-unknown-linux-gnu + platform_flag: --linux + - host: "blacksmith-4vcpu-ubuntu-2404-arm" + target: aarch64-unknown-linux-gnu + platform_flag: --linux --arm64 + runs-on: ${{ matrix.settings.host }} + steps: + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + + - uses: apple-actions/import-codesign-certs@8f3fb608891dd2244cdab3d69cd68c0d37a7fe93 # v2.0.0 + if: runner.os == 'macOS' + with: + keychain: build + p12-file-base64: ${{ secrets.APPLE_CERTIFICATE }} + p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + + - name: Setup Apple API Key + if: runner.os == 'macOS' + run: echo "${{ secrets.APPLE_API_KEY_PATH }}" > $RUNNER_TEMP/apple-api-key.p8 + + - uses: ./.github/actions/setup-bun + with: + install-flags: ${{ matrix.settings.bun_install_flags }} + + - name: Azure login + if: runner.os == 'Windows' + uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0 + with: + client-id: ${{ env.AZURE_CLIENT_ID }} + tenant-id: ${{ env.AZURE_TENANT_ID }} + subscription-id: ${{ env.AZURE_SUBSCRIPTION_ID }} + + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + with: + node-version: "24" + + - name: Cache apt packages + if: contains(matrix.settings.host, 'ubuntu') + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 + with: + path: ~/apt-cache + key: ${{ runner.os }}-${{ matrix.settings.target }}-apt-electron-${{ hashFiles('.github/workflows/publish.yml') }} + restore-keys: | + ${{ runner.os }}-${{ matrix.settings.target }}-apt-electron- + + - name: Install dependencies (ubuntu only) + if: contains(matrix.settings.host, 'ubuntu') + run: | + mkdir -p ~/apt-cache && chmod -R a+rw ~/apt-cache + sudo apt-get update + sudo apt-get install -y --no-install-recommends -o dir::cache::archives="$HOME/apt-cache" rpm + sudo chmod -R a+rw ~/apt-cache + + - name: Setup git committer + id: committer + uses: ./.github/actions/setup-git-committer + with: + opencode-app-id: ${{ vars.OPENCODE_APP_ID }} + opencode-app-secret: ${{ secrets.OPENCODE_APP_SECRET }} + + - name: Prepare + run: bun ./scripts/prepare.ts + working-directory: packages/desktop + env: + OPENCODE_VERSION: ${{ needs.version.outputs.version }} + OPENCODE_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }} + OPENCODE_CLI_ARTIFACT: ${{ (runner.os == 'Windows' && 'opencode-cli-windows') || 'opencode-cli' }} + RUST_TARGET: ${{ matrix.settings.target }} + GH_TOKEN: ${{ github.token }} + GITHUB_RUN_ID: ${{ github.run_id }} + + - name: Build + run: bun run build + working-directory: packages/desktop + env: + OPENCODE_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }} + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_ORG: ${{ vars.SENTRY_ORG }} + SENTRY_PROJECT: ${{ vars.WEB_SENTRY_PROJECT }} + SENTRY_RELEASE: desktop@${{ needs.version.outputs.version }} + VITE_SENTRY_DSN: ${{ vars.WEB_SENTRY_DSN }} + VITE_SENTRY_ENVIRONMENT: ${{ (github.ref_name == 'beta' && 'beta') || 'production' }} + VITE_SENTRY_RELEASE: desktop@${{ needs.version.outputs.version }} + + - name: Package and publish + if: needs.version.outputs.release + run: npx electron-builder ${{ matrix.settings.platform_flag }} --publish always --config electron-builder.config.ts + working-directory: packages/desktop + timeout-minutes: 60 + env: + OPENCODE_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }} + GH_TOKEN: ${{ steps.committer.outputs.token }} + CSC_LINK: ${{ secrets.APPLE_CERTIFICATE }} + CSC_KEY_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + APPLE_API_KEY: ${{ runner.temp }}/apple-api-key.p8 + APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY }} + APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }} + + - name: Package (no publish) + if: ${{ !needs.version.outputs.release }} + run: npx electron-builder ${{ matrix.settings.platform_flag }} --publish never --config electron-builder.config.ts + working-directory: packages/desktop + timeout-minutes: 60 + env: + OPENCODE_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }} + + - name: Create and upload macOS .app.tar.gz + if: runner.os == 'macOS' && needs.version.outputs.release + working-directory: packages/desktop/dist + env: + GH_TOKEN: ${{ steps.committer.outputs.token }} + run: | + if [[ "${{ matrix.settings.target }}" == "x86_64-apple-darwin" ]]; then + APP_DIR="mac" + OUT_NAME="opencode-desktop-mac-x64.app.tar.gz" + elif [[ "${{ matrix.settings.target }}" == "aarch64-apple-darwin" ]]; then + APP_DIR="mac-arm64" + OUT_NAME="opencode-desktop-mac-arm64.app.tar.gz" + else + echo "Unknown macOS target: ${{ matrix.settings.target }}" + exit 1 + fi + APP_PATH=$(find "$APP_DIR" -maxdepth 1 -name "*.app" -type d | head -1) + if [ -z "$APP_PATH" ]; then + echo "No .app bundle found in $APP_DIR" + exit 1 + fi + tar -czf "$OUT_NAME" -C "$(dirname "$APP_PATH")" "$(basename "$APP_PATH")" + gh release upload "v${{ needs.version.outputs.version }}" "$OUT_NAME" --clobber --repo "${{ needs.version.outputs.repo }}" + + - name: Verify signed Windows Electron artifacts + if: runner.os == 'Windows' + shell: pwsh + run: | + $files = @() + $files += Get-ChildItem "${{ github.workspace }}\packages\desktop\dist\*.exe" | Select-Object -ExpandProperty FullName + $files += Get-ChildItem "${{ github.workspace }}\packages\desktop\dist\*unpacked\*.exe" | Select-Object -ExpandProperty FullName + $files += Get-ChildItem "${{ github.workspace }}\packages\desktop\dist\*unpacked\resources\opencode-cli.exe" -ErrorAction SilentlyContinue | Select-Object -ExpandProperty FullName + + foreach ($file in $files | Select-Object -Unique) { + $sig = Get-AuthenticodeSignature $file + if ($sig.Status -ne "Valid") { + throw "Invalid signature for ${file}: $($sig.Status)" + } + } + + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: opencode-desktop-${{ matrix.settings.target }} + path: packages/desktop/dist/* + + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + if: needs.version.outputs.release + with: + name: latest-yml-${{ matrix.settings.target }} + path: packages/desktop/dist/latest*.yml + + publish: + needs: + - version + - build-cli + - sign-cli-windows + - build-electron + if: always() && !failure() && !cancelled() + runs-on: blacksmith-4vcpu-ubuntu-2404 + steps: + - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + + - uses: ./.github/actions/setup-bun + + - name: Login to GitHub Container Registry + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up QEMU + uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0 + + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + with: + node-version: "24" + registry-url: "https://registry.npmjs.org" + + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + name: opencode-cli + path: packages/opencode/dist + + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + name: opencode-cli-windows + path: packages/opencode/dist + + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + name: opencode-cli-signed-windows + path: packages/opencode/dist + + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + if: needs.version.outputs.release + with: + pattern: latest-yml-* + path: /tmp/latest-yml + + - name: Setup git committer + id: committer + uses: ./.github/actions/setup-git-committer + with: + opencode-app-id: ${{ vars.OPENCODE_APP_ID }} + opencode-app-secret: ${{ secrets.OPENCODE_APP_SECRET }} + + - name: Cache apt packages (AUR) + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 + with: + path: /var/cache/apt/archives + key: ${{ runner.os }}-apt-aur-${{ hashFiles('.github/workflows/publish.yml') }} + restore-keys: | + ${{ runner.os }}-apt-aur- + + - name: Setup SSH for AUR + run: | + sudo apt-get update + sudo apt-get install -y pacman-package-manager + mkdir -p ~/.ssh + echo "${{ secrets.AUR_KEY }}" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + git config --global user.email "opencode@sst.dev" + git config --global user.name "opencode" + ssh-keyscan -H aur.archlinux.org >> ~/.ssh/known_hosts || true + + - run: ./script/publish.ts + env: + OPENCODE_VERSION: ${{ needs.version.outputs.version }} + OPENCODE_RELEASE: ${{ needs.version.outputs.release }} + AUR_KEY: ${{ secrets.AUR_KEY }} + GITHUB_TOKEN: ${{ steps.committer.outputs.token }} + GH_REPO: ${{ needs.version.outputs.repo }} + NPM_CONFIG_PROVENANCE: false + LATEST_YML_DIR: /tmp/latest-yml + TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} + TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} diff --git a/reference/opencode-1.15.5/.github/workflows/release-github-action.yml b/reference/opencode-1.15.5/.github/workflows/release-github-action.yml new file mode 100755 index 0000000..4a1d721 --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/release-github-action.yml @@ -0,0 +1,29 @@ +name: release-github-action + +on: + push: + branches: + - dev + paths: + - "github/**" + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +permissions: + contents: write + +jobs: + release: + runs-on: blacksmith-4vcpu-ubuntu-2404 + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + fetch-depth: 0 + + - run: git fetch --force --tags + + - name: Release + run: | + git config --global user.email "opencode@sst.dev" + git config --global user.name "opencode" + ./github/script/release diff --git a/reference/opencode-1.15.5/.github/workflows/review.yml b/reference/opencode-1.15.5/.github/workflows/review.yml new file mode 100755 index 0000000..00a4fba --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/review.yml @@ -0,0 +1,83 @@ +name: review + +on: + issue_comment: + types: [created] + +jobs: + check-guidelines: + if: | + github.event.issue.pull_request && + startsWith(github.event.comment.body, '/review') && + contains(fromJson('["OWNER","MEMBER"]'), github.event.comment.author_association) + runs-on: blacksmith-4vcpu-ubuntu-2404 + permissions: + contents: read + pull-requests: write + steps: + - name: Get PR number + id: pr-number + run: | + if [ "${{ github.event_name }}" = "pull_request_target" ]; then + echo "number=${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT + else + echo "number=${{ github.event.issue.number }}" >> $GITHUB_OUTPUT + fi + + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + fetch-depth: 1 + + - uses: ./.github/actions/setup-bun + + - name: Install opencode + run: curl -fsSL https://opencode.ai/install | bash + + - name: Get PR details + id: pr-details + run: | + gh api /repos/${{ github.repository }}/pulls/${{ steps.pr-number.outputs.number }} > pr_data.json + echo "title=$(jq -r .title pr_data.json)" >> $GITHUB_OUTPUT + echo "sha=$(jq -r .head.sha pr_data.json)" >> $GITHUB_OUTPUT + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Check PR guidelines compliance + env: + OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + OPENCODE_PERMISSION: '{ "bash": { "*": "deny", "gh*": "allow", "gh pr review*": "deny" } }' + PR_TITLE: ${{ steps.pr-details.outputs.title }} + run: | + PR_BODY=$(jq -r .body pr_data.json) + opencode run -m opencode/gpt-5.5 --variant medium "A new pull request has been created: '${PR_TITLE}' + + + ${{ steps.pr-number.outputs.number }} + + + + $PR_BODY + + + Please check all the code changes in this pull request against the style guide, also look for any bugs if they exist. Diffs are important but make sure you read the entire file to get proper context. Make it clear the suggestions are merely suggestions and the human can decide what to do + + When critiquing code against the style guide, be sure that the code is ACTUALLY in violation, don't complain about else statements if they already use early returns there. You may complain about excessive nesting though, regardless of else statement usage. + When critiquing code style don't be a zealot, we don't like "let" statements but sometimes they are the simplest option, if someone does a bunch of nesting with let, they should consider using iife (see packages/opencode/src/util.iife.ts) + + Use the gh cli to create comments on the files for the violations. Try to leave the comment on the exact line number. If you have a suggested fix include it in a suggestion code block. + If you are writing suggested fixes, BE SURE THAT the change you are recommending is actually valid typescript, often I have seen missing closing "}" or other syntax errors. + Generally, write a comment instead of writing suggested change if you can help it. + + Command MUST be like this. + \`\`\` + gh api \ + --method POST \ + -H \"Accept: application/vnd.github+json\" \ + -H \"X-GitHub-Api-Version: 2022-11-28\" \ + /repos/${{ github.repository }}/pulls/${{ steps.pr-number.outputs.number }}/comments \ + -f 'body=[summary of issue]' -f 'commit_id=${{ steps.pr-details.outputs.sha }}' -f 'path=[path-to-file]' -F \"line=[line]\" -f 'side=RIGHT' + \`\`\` + + Only create comments for actual violations. If the code follows all guidelines, comment on the issue using gh cli: 'lgtm' AND NOTHING ELSE!!!!." diff --git a/reference/opencode-1.15.5/.github/workflows/stats.yml b/reference/opencode-1.15.5/.github/workflows/stats.yml new file mode 100755 index 0000000..bc97cfc --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/stats.yml @@ -0,0 +1,35 @@ +name: stats + +on: + schedule: + - cron: "0 12 * * *" # Run daily at 12:00 UTC + workflow_dispatch: # Allow manual trigger + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +jobs: + stats: + if: github.repository == 'anomalyco/opencode' + runs-on: blacksmith-4vcpu-ubuntu-2404 + permissions: + contents: write + + steps: + - name: Checkout + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + + - name: Setup Bun + uses: ./.github/actions/setup-bun + + - name: Run stats script + run: bun script/stats.ts + + - name: Commit stats + run: | + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add STATS.md + git diff --staged --quiet || git commit -m "ignore: update download stats $(date -I)" + git push + env: + POSTHOG_KEY: ${{ secrets.POSTHOG_KEY }} diff --git a/reference/opencode-1.15.5/.github/workflows/storybook.yml b/reference/opencode-1.15.5/.github/workflows/storybook.yml new file mode 100755 index 0000000..1e65210 --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/storybook.yml @@ -0,0 +1,38 @@ +name: storybook + +on: + push: + branches: [dev] + paths: + - ".github/workflows/storybook.yml" + - "package.json" + - "bun.lock" + - "packages/storybook/**" + - "packages/ui/**" + pull_request: + branches: [dev] + paths: + - ".github/workflows/storybook.yml" + - "package.json" + - "bun.lock" + - "packages/storybook/**" + - "packages/ui/**" + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + name: storybook build + runs-on: blacksmith-4vcpu-ubuntu-2404 + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + + - name: Setup Bun + uses: ./.github/actions/setup-bun + + - name: Build Storybook + run: bun --cwd packages/storybook build diff --git a/reference/opencode-1.15.5/.github/workflows/sync-zed-extension.yml b/reference/opencode-1.15.5/.github/workflows/sync-zed-extension.yml new file mode 100755 index 0000000..6e4b440 --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/sync-zed-extension.yml @@ -0,0 +1,35 @@ +name: "sync-zed-extension" + +on: + workflow_dispatch: + release: + types: [published] + +jobs: + zed: + name: Release Zed Extension + runs-on: blacksmith-4vcpu-ubuntu-2404 + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + fetch-depth: 0 + + - uses: ./.github/actions/setup-bun + + - name: Get version tag + id: get_tag + run: | + if [ "${{ github.event_name }}" = "release" ]; then + TAG="${{ github.event.release.tag_name }}" + else + TAG=$(git tag --list 'v[0-9]*.*' --sort=-version:refname | head -n 1) + fi + echo "tag=${TAG}" >> $GITHUB_OUTPUT + echo "Using tag: ${TAG}" + + - name: Sync Zed extension + run: | + ./script/sync-zed.ts ${{ steps.get_tag.outputs.tag }} + env: + ZED_EXTENSIONS_PAT: ${{ secrets.ZED_EXTENSIONS_PAT }} + ZED_PR_PAT: ${{ secrets.ZED_PR_PAT }} diff --git a/reference/opencode-1.15.5/.github/workflows/test.yml b/reference/opencode-1.15.5/.github/workflows/test.yml new file mode 100755 index 0000000..4a65b99 --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/test.yml @@ -0,0 +1,166 @@ +name: test + +on: + push: + branches: + - dev + pull_request: + workflow_dispatch: + +concurrency: + # Keep every run on dev so cancelled checks do not pollute the default branch + # commit history. PRs and other branches still share a group and cancel stale runs. + group: ${{ case(github.ref == 'refs/heads/dev', format('{0}-{1}', github.workflow, github.run_id), format('{0}-{1}', github.workflow, github.event.pull_request.number || github.ref)) }} + cancel-in-progress: true + +permissions: + contents: read + checks: write + +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + +jobs: + unit: + name: unit (${{ matrix.settings.name }}) + strategy: + fail-fast: false + matrix: + settings: + - name: linux + host: blacksmith-4vcpu-ubuntu-2404 + - name: windows + host: blacksmith-4vcpu-windows-2025 + runs-on: ${{ matrix.settings.host }} + defaults: + run: + shell: bash + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup Node + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + with: + node-version: "24" + + - name: Setup Bun + uses: ./.github/actions/setup-bun + + - name: Configure git identity + run: | + git config --global user.email "bot@opencode.ai" + git config --global user.name "opencode" + + - name: Cache Turbo + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 + with: + path: node_modules/.cache/turbo + key: turbo-${{ runner.os }}-${{ hashFiles('turbo.json', '**/package.json') }}-${{ github.sha }} + restore-keys: | + turbo-${{ runner.os }}-${{ hashFiles('turbo.json', '**/package.json') }}- + turbo-${{ runner.os }}- + + - name: Run unit tests + run: bun turbo test:ci + env: + OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }} + + - name: Run HttpApi exerciser gates + if: runner.os == 'Linux' + working-directory: packages/opencode + run: bun run test:httpapi + + - name: Publish unit reports + if: always() + uses: mikepenz/action-junit-report@bccf2e31636835cf0874589931c4116687171386 # v6.4.0 + with: + report_paths: packages/*/.artifacts/unit/junit.xml + check_name: "unit results (${{ matrix.settings.name }})" + detailed_summary: true + include_time_in_summary: true + fail_on_failure: false + + - name: Upload unit artifacts + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: unit-${{ matrix.settings.name }}-${{ github.run_attempt }} + include-hidden-files: true + if-no-files-found: ignore + retention-days: 7 + path: packages/*/.artifacts/unit/junit.xml + + e2e: + name: e2e (${{ matrix.settings.name }}) + strategy: + fail-fast: false + matrix: + settings: + - name: linux + host: blacksmith-4vcpu-ubuntu-2404 + - name: windows + host: blacksmith-4vcpu-windows-2025 + runs-on: ${{ matrix.settings.host }} + env: + PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/.playwright-browsers + defaults: + run: + shell: bash + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup Node + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + with: + node-version: "24" + + - name: Setup Bun + uses: ./.github/actions/setup-bun + + - name: Read Playwright version + id: playwright-version + run: | + version=$(node -e 'console.log(require("./package.json").workspaces.catalog["@playwright/test"])') + echo "version=$version" >> "$GITHUB_OUTPUT" + + - name: Cache Playwright browsers + id: playwright-cache + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 + with: + path: ${{ github.workspace }}/.playwright-browsers + key: ${{ runner.os }}-${{ runner.arch }}-playwright-${{ steps.playwright-version.outputs.version }}-chromium + + - name: Install Playwright system dependencies + if: runner.os == 'Linux' + working-directory: packages/app + run: bunx playwright install-deps chromium + + - name: Install Playwright browsers + if: steps.playwright-cache.outputs.cache-hit != 'true' + working-directory: packages/app + run: bunx playwright install chromium + + - name: Run app e2e tests + run: bun --cwd packages/app test:e2e:local + env: + CI: true + PLAYWRIGHT_JUNIT_OUTPUT: e2e/junit-${{ matrix.settings.name }}.xml + timeout-minutes: 30 + + - name: Upload Playwright artifacts + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: playwright-${{ matrix.settings.name }}-${{ github.run_attempt }} + if-no-files-found: ignore + retention-days: 7 + path: | + packages/app/e2e/junit-*.xml + packages/app/e2e/test-results + packages/app/e2e/playwright-report diff --git a/reference/opencode-1.15.5/.github/workflows/triage.yml b/reference/opencode-1.15.5/.github/workflows/triage.yml new file mode 100755 index 0000000..27852a1 --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/triage.yml @@ -0,0 +1,37 @@ +name: triage + +on: + issues: + types: [opened] + +jobs: + triage: + runs-on: blacksmith-4vcpu-ubuntu-2404 + permissions: + contents: read + issues: write + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + fetch-depth: 1 + + - name: Setup Bun + uses: ./.github/actions/setup-bun + + - name: Install opencode + run: curl -fsSL https://opencode.ai/install | bash + + - name: Triage issue + env: + OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + ISSUE_NUMBER: ${{ github.event.issue.number }} + ISSUE_TITLE: ${{ github.event.issue.title }} + ISSUE_BODY: ${{ github.event.issue.body }} + run: | + opencode run --agent triage "The following issue was just opened, triage it: + + Title: $ISSUE_TITLE + + $ISSUE_BODY" diff --git a/reference/opencode-1.15.5/.github/workflows/typecheck.yml b/reference/opencode-1.15.5/.github/workflows/typecheck.yml new file mode 100755 index 0000000..fc9a527 --- /dev/null +++ b/reference/opencode-1.15.5/.github/workflows/typecheck.yml @@ -0,0 +1,21 @@ +name: typecheck + +on: + push: + branches: [dev] + pull_request: + branches: [dev] + workflow_dispatch: + +jobs: + typecheck: + runs-on: blacksmith-4vcpu-ubuntu-2404 + steps: + - name: Checkout repository + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + + - name: Setup Bun + uses: ./.github/actions/setup-bun + + - name: Run typecheck + run: bun typecheck diff --git a/reference/opencode-1.15.5/.gitignore b/reference/opencode-1.15.5/.gitignore new file mode 100755 index 0000000..19198a7 --- /dev/null +++ b/reference/opencode-1.15.5/.gitignore @@ -0,0 +1,32 @@ +.DS_Store +node_modules +.worktrees +.sst +.env +.env.local +.idea +.vscode +.codex +*~ +playground +tmp +dist +ts-dist +.turbo +**/.serena +.serena/ +/result +refs +Session.vim +/opencode.json +a.out +target +.scripts +.direnv/ + +# Local dev files +opencode-dev +UPCOMING_CHANGELOG.md +logs/ +*.bun-build +tsconfig.tsbuildinfo diff --git a/reference/opencode-1.15.5/.gitkeep b/reference/opencode-1.15.5/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/reference/opencode-1.15.5/.gitleaksignore b/reference/opencode-1.15.5/.gitleaksignore new file mode 100755 index 0000000..cc01a28 --- /dev/null +++ b/reference/opencode-1.15.5/.gitleaksignore @@ -0,0 +1,5 @@ +# Fake secret-looking strings used by HTTP recorder redaction tests. +afa57acfda894e0ebf3c637dd710310b705c0a2f:packages/http-recorder/test/record-replay.test.ts:generic-api-key:69 +afa57acfda894e0ebf3c637dd710310b705c0a2f:packages/http-recorder/test/record-replay.test.ts:generic-api-key:92 +afa57acfda894e0ebf3c637dd710310b705c0a2f:packages/http-recorder/test/record-replay.test.ts:generic-api-key:146 +afa57acfda894e0ebf3c637dd710310b705c0a2f:packages/http-recorder/test/record-replay.test.ts:gcp-api-key:71 diff --git a/reference/opencode-1.15.5/.husky/pre-push b/reference/opencode-1.15.5/.husky/pre-push new file mode 100755 index 0000000..5d3cc53 --- /dev/null +++ b/reference/opencode-1.15.5/.husky/pre-push @@ -0,0 +1,20 @@ +#!/bin/sh +set -e +# Check if bun version matches package.json +# keep in sync with packages/script/src/index.ts semver qualifier +bun -e ' +import { semver } from "bun"; +const pkg = await Bun.file("package.json").json(); +const expectedBunVersion = pkg.packageManager?.split("@")[1]; +if (!expectedBunVersion) { + throw new Error("packageManager field not found in root package.json"); +} +const expectedBunVersionRange = `^${expectedBunVersion}`; +if (!semver.satisfies(process.versions.bun, expectedBunVersionRange)) { + throw new Error(`This script requires bun@${expectedBunVersionRange}, but you are using bun@${process.versions.bun}`); +} +if (process.versions.bun !== expectedBunVersion) { + console.warn(`Warning: Bun version ${process.versions.bun} differs from expected ${expectedBunVersion}`); +} +' +bun typecheck diff --git a/reference/opencode-1.15.5/.opencode/agent/duplicate-pr.md b/reference/opencode-1.15.5/.opencode/agent/duplicate-pr.md new file mode 100755 index 0000000..c9c932e --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/agent/duplicate-pr.md @@ -0,0 +1,26 @@ +--- +mode: primary +hidden: true +model: opencode/claude-haiku-4-5 +color: "#E67E22" +tools: + "*": false + "github-pr-search": true +--- + +You are a duplicate PR detection agent. When a PR is opened, your job is to search for potentially duplicate or related open PRs. + +Use the github-pr-search tool to search for PRs that might be addressing the same issue or feature. + +IMPORTANT: The input will contain a line `CURRENT_PR_NUMBER: NNNN`. This is the current PR number, you should not mark that the current PR as a duplicate of itself. + +Search using keywords from the PR title and description. Try multiple searches with different relevant terms. + +If you find potential duplicates: + +- List them with their titles and URLs +- Briefly explain why they might be related + +If no duplicates are found, say so clearly. BUT ONLY SAY "No duplicate PRs found" (don't say anything else if no dups) + +Keep your response concise and actionable. diff --git a/reference/opencode-1.15.5/.opencode/agent/triage.md b/reference/opencode-1.15.5/.opencode/agent/triage.md new file mode 100755 index 0000000..03df339 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/agent/triage.md @@ -0,0 +1,43 @@ +--- +mode: primary +hidden: true +model: opencode/gpt-5.4-nano +color: "#44BA81" +tools: + "*": false + "github-triage": true +--- + +You are a triage agent responsible for triaging github issues. + +Use your github-triage tool to triage issues. + +This file is the source of truth for ownership/routing rules. + +Assign issues by choosing the team with the strongest overlap. The github-triage tool will assign a random member from that team. + +Do not add labels to issues. Only assign an owner. + +When calling github-triage, pass one of these team values: tui, desktop_web, core, inference, windows. + +## Teams + +### TUI + +Terminal UI issues, including rendering, keybindings, scrolling, terminal compatibility, SSH behavior, crashes in the TUI, and low-level TUI performance. + +### Desktop / Web + +Desktop application and browser-based app issues, including `opencode web`, desktop-specific UI behavior, packaging, and web view problems. + +### Core + +Core opencode server and harness issues, including sqlite, snapshots, memory, API behavior, agent context construction, tool execution, provider integrations, model behavior, documentation, and larger architectural features. + +### Inference + +OpenCode Zen, OpenCode Go, and billing issues. + +### Windows + +Windows-specific issues, including native Windows behavior, WSL interactions, path handling, shell compatibility, and installation or runtime problems that only happen on Windows. diff --git a/reference/opencode-1.15.5/.opencode/command/ai-deps.md b/reference/opencode-1.15.5/.opencode/command/ai-deps.md new file mode 100755 index 0000000..83783d5 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/command/ai-deps.md @@ -0,0 +1,24 @@ +--- +description: "Bump AI sdk dependencies minor / patch versions only" +--- + +Please read @package.json and @packages/opencode/package.json. + +Your job is to look into AI SDK dependencies, figure out if they have versions that can be upgraded (minor or patch versions ONLY no major ignore major changes). + +I want a report of every dependency and the version that can be upgraded to. +What would be even better is if you can give me brief summary of the changes for each dep and a link to the changelog for each dependency, or at least some reference info so I can see what bugs were fixed or new features were added. + +Consider using subagents for each dep to save your context window. + +Here is a short list of some deps (please be comprehensive tho): + +- "ai" +- "@ai-sdk/openai" +- "@ai-sdk/anthropic" +- "@openrouter/ai-sdk-provider" +- etc, etc + +DO NOT upgrade the dependencies yet, just make a list of all dependencies and their versions that can be upgraded to minor or patch versions only. + +Write up your findings to ai-sdk-updates.md diff --git a/reference/opencode-1.15.5/.opencode/command/changelog.md b/reference/opencode-1.15.5/.opencode/command/changelog.md new file mode 100755 index 0000000..b28d963 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/command/changelog.md @@ -0,0 +1,49 @@ +--- +model: opencode/gpt-5.4 +--- + +Create `UPCOMING_CHANGELOG.md` from the structured changelog input below. +If `UPCOMING_CHANGELOG.md` already exists, ignore its current contents completely. +Do not preserve, merge, or reuse text from the existing file. + +The input already contains the exact commit range since the last non-draft release. +The commits are already filtered to the release-relevant packages and grouped into +the release sections. Do not fetch GitHub releases, PRs, or build your own commit list. +The input may also include a `## Community Contributors Input` section. + +Before writing any entry you keep, inspect the real diff with +`git show --stat --format='' ` or `git show --format='' ` so you can +understand the actual code changes and not just the commit message (they may be misleading). +Do not use `git log` or author metadata when deciding attribution. + +Rules: + +- Write the final file with release sections in this order: + `## Core`, `## TUI`, `## Desktop`, `## SDK`, `## Extensions` +- Only include sections that have at least one notable entry +- Within each release section, keep bug fixes grouped under `### Bugfixes` +- Keep other notable entries under `### Improvements` when a section has bug fixes too +- Omit empty subsections +- Keep one bullet per commit you keep +- Skip commits that are entirely internal, CI, tests, refactors, or otherwise not user-facing +- Start each bullet with a capital letter +- Prefer what changed for users over what code changed internally +- Do not copy raw commit prefixes like `fix:` or `feat:` or trailing PR numbers like `(#123)` +- Community attribution is deterministic: only preserve an existing `(@username)` suffix from the changelog input +- If an input bullet has no `(@username)` suffix, do not add one +- Never add a new `(@username)` suffix from `git show`, commit authors, names, or email addresses +- If no notable entries remain and there is no contributor block, write exactly `No notable changes.` +- If no notable entries remain but there is a contributor block, omit all release sections and return only the contributor block +- If the input contains `## Community Contributors Input`, append the block below that heading to the end of the final file verbatim +- Do not add, remove, rewrite, or reorder contributor names or commit titles in that block +- Do not derive the thank-you section from the main summary bullets +- Do not include the heading `## Community Contributors Input` in the final file +- Focus on writing the least words to get your point across - users will skim read the changelog, so we should be precise + +**Importantly, the changelog is for users (who are at least slightly technical), they may use the TUI, Desktop, SDK, Plugins and so forth. Be thorough in understanding flow on effects may not be immediately apparent. e.g. a package upgrade looks internal but may patch a bug. Or a refactor may also stabilise some race condition that fixes bugs for users. The PR title/body + commit message will give you the authors context, usually containing the outcome not just technical detail** + + + +!`bun script/raw-changelog.ts $ARGUMENTS` + + diff --git a/reference/opencode-1.15.5/.opencode/command/commit.md b/reference/opencode-1.15.5/.opencode/command/commit.md new file mode 100755 index 0000000..e88932a --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/command/commit.md @@ -0,0 +1,37 @@ +--- +description: git commit and push +model: opencode/kimi-k2.5 +subtask: true +--- + +commit and push + +make sure it includes a prefix like +docs: +tui: +core: +ci: +ignore: +wip: + +For anything in the packages/web use the docs: prefix. + +prefer to explain WHY something was done from an end user perspective instead of +WHAT was done. + +do not do generic messages like "improved agent experience" be very specific +about what user facing changes were made + +if there are conflicts DO NOT FIX THEM. notify me and I will fix them + +## GIT DIFF + +!`git diff` + +## GIT DIFF --cached + +!`git diff --cached` + +## GIT STATUS --short + +!`git status --short` diff --git a/reference/opencode-1.15.5/.opencode/command/issues.md b/reference/opencode-1.15.5/.opencode/command/issues.md new file mode 100755 index 0000000..75b5961 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/command/issues.md @@ -0,0 +1,23 @@ +--- +description: "find issue(s) on github" +model: opencode/claude-haiku-4-5 +--- + +Search through existing issues in anomalyco/opencode using the gh cli to find issues matching this query: + +$ARGUMENTS + +Consider: + +1. Similar titles or descriptions +2. Same error messages or symptoms +3. Related functionality or components +4. Similar feature requests + +Please list any matching issues with: + +- Issue number and title +- Brief explanation of why it matches the query +- Link to the issue + +If no clear matches are found, say so. diff --git a/reference/opencode-1.15.5/.opencode/command/learn.md b/reference/opencode-1.15.5/.opencode/command/learn.md new file mode 100755 index 0000000..fe4965a --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/command/learn.md @@ -0,0 +1,42 @@ +--- +description: Extract non-obvious learnings from session to AGENTS.md files to build codebase understanding +--- + +Analyze this session and extract non-obvious learnings to add to AGENTS.md files. + +AGENTS.md files can exist at any directory level, not just the project root. When an agent reads a file, any AGENTS.md in parent directories are automatically loaded into the context of the tool read. Place learnings as close to the relevant code as possible: + +- Project-wide learnings → root AGENTS.md +- Package/module-specific → packages/foo/AGENTS.md +- Feature-specific → src/auth/AGENTS.md + +What counts as a learning (non-obvious discoveries only): + +- Hidden relationships between files or modules +- Execution paths that differ from how code appears +- Non-obvious configuration, env vars, or flags +- Debugging breakthroughs when error messages were misleading +- API/tool quirks and workarounds +- Build/test commands not in README +- Architectural decisions and constraints +- Files that must change together + +What NOT to include: + +- Obvious facts from documentation +- Standard language/framework behavior +- Things already in an AGENTS.md +- Verbose explanations +- Session-specific details + +Process: + +1. Review session for discoveries, errors that took multiple attempts, unexpected connections +2. Determine scope - what directory does each learning apply to? +3. Read existing AGENTS.md files at relevant levels +4. Create or update AGENTS.md at the appropriate level +5. Keep entries to 1-3 lines per insight + +After updating, summarize which AGENTS.md files were created/updated and how many learnings per file. + +$ARGUMENTS diff --git a/reference/opencode-1.15.5/.opencode/command/rmslop.md b/reference/opencode-1.15.5/.opencode/command/rmslop.md new file mode 100755 index 0000000..02c9fc0 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/command/rmslop.md @@ -0,0 +1,15 @@ +--- +description: Remove AI code slop +--- + +Check the diff against dev, and remove all AI generated slop introduced in this branch. + +This includes: + +- Extra comments that a human wouldn't add or is inconsistent with the rest of the file +- Extra defensive checks or try/catch blocks that are abnormal for that area of the codebase (especially if called by trusted / validated codepaths) +- Casts to any to get around type issues +- Any other style that is inconsistent with the file +- Unnecessary emoji usage + +Report at the end with only a 1-3 sentence summary of what you changed diff --git a/reference/opencode-1.15.5/.opencode/command/spellcheck.md b/reference/opencode-1.15.5/.opencode/command/spellcheck.md new file mode 100755 index 0000000..0abf23c --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/command/spellcheck.md @@ -0,0 +1,5 @@ +--- +description: spellcheck all markdown file changes +--- + +Look at all the unstaged changes to markdown (.md, .mdx) files, pull out the lines that have changed, and check for spelling and grammar errors. diff --git a/reference/opencode-1.15.5/.opencode/command/translate.md b/reference/opencode-1.15.5/.opencode/command/translate.md new file mode 100755 index 0000000..ed185b1 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/command/translate.md @@ -0,0 +1,14 @@ +--- +description: translate English to other languages +model: opencode/claude-opus-4-7 +--- + +run git diff and translate changed english doc and UI copy files to other international languages. Translate all languages in parallel to save time. + +Requirements: + +- Preserve meaning, intent, tone, and formatting (including Markdown/MDX structure). +- Preserve all technical terms and artifacts exactly: product/company names, API names, identifiers, code, commands/flags, file paths, URLs, versions, error messages, config keys/values, and anything inside inline code or code blocks. +- Also preserve every term listed in the Do-Not-Translate glossary below. +- Also apply locale-specific guidance from `.opencode/glossary/.md` when available (for example, `zh-cn.md`). +- Do not modify fenced code blocks. diff --git a/reference/opencode-1.15.5/.opencode/env.d.ts b/reference/opencode-1.15.5/.opencode/env.d.ts new file mode 100755 index 0000000..f2b13a9 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/env.d.ts @@ -0,0 +1,4 @@ +declare module "*.txt" { + const content: string + export default content +} diff --git a/reference/opencode-1.15.5/.opencode/glossary/README.md b/reference/opencode-1.15.5/.opencode/glossary/README.md new file mode 100755 index 0000000..9839003 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/README.md @@ -0,0 +1,63 @@ +# Locale Glossaries + +Use this folder for locale-specific translation guidance that supplements `.opencode/agent/translator.md`. + +The global glossary in `translator.md` remains the source of truth for shared do-not-translate terms (commands, code, paths, product names, etc.). These locale files capture community learnings about phrasing and terminology preferences. + +## File Naming + +- One file per locale +- Use lowercase locale slugs that match docs locales when possible (for example, `zh-cn.md`, `zh-tw.md`) +- If only language-level guidance exists, use the language code (for example, `fr.md`) +- Some repo locale slugs may be aliases/non-BCP47 for consistency (for example, `br` for Brazilian Portuguese / `pt-BR`) + +## What To Put In A Locale File + +- **Sources**: PRs/issues/discussions that motivated the guidance +- **Do Not Translate (Locale Additions)**: locale-specific terms or casing decisions +- **Preferred Terms**: recurring UI/docs words with preferred translations +- **Guidance**: tone, style, and consistency notes +- **Avoid** (optional): common literal translations or wording we should avoid +- If the repo uses a locale alias slug, document the alias in **Guidance** (for example, prose may mention `pt-BR` while config/examples use `br`) + +Prefer guidance that is: + +- Repeated across multiple docs/screens +- Easy to apply consistently +- Backed by a community contribution or review discussion + +## Template + +```md +# Glossary + +## Sources + +- PR #12345: https://github.com/anomalyco/opencode/pull/12345 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing) + +## Preferred Terms + +| English | Preferred | Notes | +| ------- | --------- | --------- | +| prompt | ... | preferred | +| session | ... | preferred | + +## Guidance + +- Prefer natural phrasing over literal translation + +## Avoid + +- Avoid ... when ... +``` + +## Contribution Notes + +- Mark entries as preferred when they may evolve +- Keep examples short +- Add or update the `Sources` section whenever you add a new rule +- Prefer PR-backed guidance over invented term mappings; start with general guidance if no term-level corrections exist yet diff --git a/reference/opencode-1.15.5/.opencode/glossary/ar.md b/reference/opencode-1.15.5/.opencode/glossary/ar.md new file mode 100755 index 0000000..3735552 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/ar.md @@ -0,0 +1,28 @@ +# ar Glossary + +## Sources + +- PR #9947: https://github.com/anomalyco/opencode/pull/9947 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) +- `OpenCode CLI` +- `CLI`, `TUI`, `MCP`, `OAuth` +- Commands, flags, file paths, and code literals (keep exactly as written) + +## Preferred Terms + +No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections. + +## Guidance + +- Prefer natural Arabic phrasing over literal translation +- Keep tone clear and direct in UI labels and docs prose +- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths +- For RTL text, treat code, commands, and paths as LTR artifacts and keep their character order unchanged + +## Avoid + +- Avoid translating product and protocol names that are fixed identifiers +- Avoid mixing multiple Arabic terms for the same recurring UI action once a preferred term is established diff --git a/reference/opencode-1.15.5/.opencode/glossary/br.md b/reference/opencode-1.15.5/.opencode/glossary/br.md new file mode 100755 index 0000000..fd3e725 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/br.md @@ -0,0 +1,34 @@ +# br Glossary + +## Sources + +- PR #10086: https://github.com/anomalyco/opencode/pull/10086 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) +- `OpenCode CLI` +- `CLI`, `TUI`, `MCP`, `OAuth` +- Locale code `br` in repo config, code, and paths (repo alias for Brazilian Portuguese) + +## Preferred Terms + +These are PR-backed locale naming preferences and may evolve. + +| English / Context | Preferred | Notes | +| ---------------------------------------- | ------------------------------ | ------------------------------------------------------------- | +| Brazilian Portuguese (prose locale name) | `pt-BR` | Use standard locale naming in prose when helpful | +| Repo locale slug (code/config) | `br` | PR #10086 uses `br` for consistency/simplicity | +| Browser locale detection | `pt`, `pt-br`, `pt-BR` -> `br` | Preserve this mapping in docs/examples about locale detection | + +## Guidance + +- This file covers Brazilian Portuguese (`pt-BR`), but the repo locale code is `br` +- Use natural Brazilian Portuguese phrasing over literal translation +- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths +- Keep repo locale identifiers as implemented in code/config (`br`) even when prose mentions `pt-BR` + +## Avoid + +- Avoid changing repo locale code references from `br` to `pt-br` in code snippets, paths, or config examples +- Avoid mixing Portuguese variants when a Brazilian Portuguese form is established diff --git a/reference/opencode-1.15.5/.opencode/glossary/bs.md b/reference/opencode-1.15.5/.opencode/glossary/bs.md new file mode 100755 index 0000000..aa3bd96 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/bs.md @@ -0,0 +1,33 @@ +# bs Glossary + +## Sources + +- PR #12283: https://github.com/anomalyco/opencode/pull/12283 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) +- `OpenCode CLI` +- `CLI`, `TUI`, `MCP`, `OAuth` +- Commands, flags, file paths, and code literals (keep exactly as written) + +## Preferred Terms + +These are PR-backed locale naming preferences and may evolve. + +| English / Context | Preferred | Notes | +| ---------------------------------- | ---------- | ------------------------------------------------- | +| Bosnian language label (UI) | `Bosanski` | PR #12283 tested switching language to `Bosanski` | +| Repo locale slug (code/config) | `bs` | Preserve in code, config, paths, and examples | +| Browser locale detection (Bosnian) | `bs` | PR #12283 added `bs` locale auto-detection | + +## Guidance + +- Use natural Bosnian phrasing over literal translation +- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths +- Keep repo locale references as `bs` in code/config, and use `Bosanski` for the user-facing language name when applicable + +## Avoid + +- Avoid changing repo locale references from `bs` to another slug in code snippets or config examples +- Avoid translating product and protocol names that are fixed identifiers diff --git a/reference/opencode-1.15.5/.opencode/glossary/da.md b/reference/opencode-1.15.5/.opencode/glossary/da.md new file mode 100755 index 0000000..e632221 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/da.md @@ -0,0 +1,27 @@ +# da Glossary + +## Sources + +- PR #9821: https://github.com/anomalyco/opencode/pull/9821 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) +- `OpenCode CLI` +- `CLI`, `TUI`, `MCP`, `OAuth` +- Commands, flags, file paths, and code literals (keep exactly as written) + +## Preferred Terms + +No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections. + +## Guidance + +- Prefer natural Danish phrasing over literal translation +- Keep tone clear and direct in UI labels and docs prose +- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths + +## Avoid + +- Avoid translating product and protocol names that are fixed identifiers +- Avoid mixing multiple Danish terms for the same recurring UI action once a preferred term is established diff --git a/reference/opencode-1.15.5/.opencode/glossary/de.md b/reference/opencode-1.15.5/.opencode/glossary/de.md new file mode 100755 index 0000000..0d2c49f --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/de.md @@ -0,0 +1,27 @@ +# de Glossary + +## Sources + +- PR #9817: https://github.com/anomalyco/opencode/pull/9817 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) +- `OpenCode CLI` +- `CLI`, `TUI`, `MCP`, `OAuth` +- Commands, flags, file paths, and code literals (keep exactly as written) + +## Preferred Terms + +No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections. + +## Guidance + +- Prefer natural German phrasing over literal translation +- Keep tone clear and direct in UI labels and docs prose +- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths + +## Avoid + +- Avoid translating product and protocol names that are fixed identifiers +- Avoid mixing multiple German terms for the same recurring UI action once a preferred term is established diff --git a/reference/opencode-1.15.5/.opencode/glossary/es.md b/reference/opencode-1.15.5/.opencode/glossary/es.md new file mode 100755 index 0000000..dc9b977 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/es.md @@ -0,0 +1,27 @@ +# es Glossary + +## Sources + +- PR #9817: https://github.com/anomalyco/opencode/pull/9817 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) +- `OpenCode CLI` +- `CLI`, `TUI`, `MCP`, `OAuth` +- Commands, flags, file paths, and code literals (keep exactly as written) + +## Preferred Terms + +No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections. + +## Guidance + +- Prefer natural Spanish phrasing over literal translation +- Keep tone clear and direct in UI labels and docs prose +- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths + +## Avoid + +- Avoid translating product and protocol names that are fixed identifiers +- Avoid mixing multiple Spanish terms for the same recurring UI action once a preferred term is established diff --git a/reference/opencode-1.15.5/.opencode/glossary/fr.md b/reference/opencode-1.15.5/.opencode/glossary/fr.md new file mode 100755 index 0000000..074c4de --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/fr.md @@ -0,0 +1,27 @@ +# fr Glossary + +## Sources + +- PR #9821: https://github.com/anomalyco/opencode/pull/9821 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) +- `OpenCode CLI` +- `CLI`, `TUI`, `MCP`, `OAuth` +- Commands, flags, file paths, and code literals (keep exactly as written) + +## Preferred Terms + +No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections. + +## Guidance + +- Prefer natural French phrasing over literal translation +- Keep tone clear and direct in UI labels and docs prose +- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths + +## Avoid + +- Avoid translating product and protocol names that are fixed identifiers +- Avoid mixing multiple French terms for the same recurring UI action once a preferred term is established diff --git a/reference/opencode-1.15.5/.opencode/glossary/ja.md b/reference/opencode-1.15.5/.opencode/glossary/ja.md new file mode 100755 index 0000000..f0159ca --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/ja.md @@ -0,0 +1,33 @@ +# ja Glossary + +## Sources + +- PR #9821: https://github.com/anomalyco/opencode/pull/9821 +- PR #13160: https://github.com/anomalyco/opencode/pull/13160 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) +- `OpenCode CLI` +- `CLI`, `TUI`, `MCP`, `OAuth` +- Commands, flags, file paths, and code literals (keep exactly as written) + +## Preferred Terms + +These are PR-backed wording preferences and may evolve. + +| English / Context | Preferred | Notes | +| --------------------------- | ----------------------- | ------------------------------------- | +| WSL integration (UI label) | `WSL連携` | PR #13160 prefers this over `WSL統合` | +| WSL integration description | `WindowsのWSL環境で...` | PR #13160 improved phrasing naturally | + +## Guidance + +- Prefer natural Japanese phrasing over literal translation +- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths +- In WSL integration text, follow PR #13160 wording direction for more natural Japanese phrasing + +## Avoid + +- Avoid `WSL統合` in the WSL integration UI context where `WSL連携` is the reviewed wording +- Avoid translating product and protocol names that are fixed identifiers diff --git a/reference/opencode-1.15.5/.opencode/glossary/ko.md b/reference/opencode-1.15.5/.opencode/glossary/ko.md new file mode 100755 index 0000000..71385c8 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/ko.md @@ -0,0 +1,27 @@ +# ko Glossary + +## Sources + +- PR #9817: https://github.com/anomalyco/opencode/pull/9817 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) +- `OpenCode CLI` +- `CLI`, `TUI`, `MCP`, `OAuth` +- Commands, flags, file paths, and code literals (keep exactly as written) + +## Preferred Terms + +No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections. + +## Guidance + +- Prefer natural Korean phrasing over literal translation +- Keep tone clear and direct in UI labels and docs prose +- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths + +## Avoid + +- Avoid translating product and protocol names that are fixed identifiers +- Avoid mixing multiple Korean terms for the same recurring UI action once a preferred term is established diff --git a/reference/opencode-1.15.5/.opencode/glossary/no.md b/reference/opencode-1.15.5/.opencode/glossary/no.md new file mode 100755 index 0000000..d7159dc --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/no.md @@ -0,0 +1,38 @@ +# no Glossary + +## Sources + +- PR #10018: https://github.com/anomalyco/opencode/pull/10018 +- PR #12935: https://github.com/anomalyco/opencode/pull/12935 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) +- `OpenCode CLI` +- `CLI`, `TUI`, `MCP`, `OAuth` +- Sound names (PR #10018 notes these were intentionally left untranslated) + +## Preferred Terms + +These are PR-backed corrections and may evolve. + +| English / Context | Preferred | Notes | +| ----------------------------------- | ------------ | ----------------------------- | +| Save (data persistence action) | `Lagre` | Prefer over `Spare` | +| Disabled (feature/state) | `deaktivert` | Prefer over `funksjonshemmet` | +| API keys | `API Nøkler` | Prefer over `API Taster` | +| Cost (noun) | `Kostnad` | Prefer over verb form `Koste` | +| Show/View (imperative button label) | `Vis` | Prefer over `Utsikt` | + +## Guidance + +- Prefer natural Norwegian Bokmal (Bokmål) wording over literal translation +- Keep tone clear and practical in UI labels +- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths +- Keep recurring UI terms consistent once a preferred term is chosen + +## Avoid + +- Avoid `Spare` for save actions in persistence contexts +- Avoid `funksjonshemmet` for disabled feature states +- Avoid `API Taster`, `Koste`, and `Utsikt` in the corrected contexts above diff --git a/reference/opencode-1.15.5/.opencode/glossary/pl.md b/reference/opencode-1.15.5/.opencode/glossary/pl.md new file mode 100755 index 0000000..e9bad7a --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/pl.md @@ -0,0 +1,27 @@ +# pl Glossary + +## Sources + +- PR #9884: https://github.com/anomalyco/opencode/pull/9884 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) +- `OpenCode CLI` +- `CLI`, `TUI`, `MCP`, `OAuth` +- Commands, flags, file paths, and code literals (keep exactly as written) + +## Preferred Terms + +No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections. + +## Guidance + +- Prefer natural Polish phrasing over literal translation +- Keep tone clear and direct in UI labels and docs prose +- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths + +## Avoid + +- Avoid translating product and protocol names that are fixed identifiers +- Avoid mixing multiple Polish terms for the same recurring UI action once a preferred term is established diff --git a/reference/opencode-1.15.5/.opencode/glossary/ru.md b/reference/opencode-1.15.5/.opencode/glossary/ru.md new file mode 100755 index 0000000..6fee0f9 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/ru.md @@ -0,0 +1,27 @@ +# ru Glossary + +## Sources + +- PR #9882: https://github.com/anomalyco/opencode/pull/9882 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) +- `OpenCode CLI` +- `CLI`, `TUI`, `MCP`, `OAuth` +- Commands, flags, file paths, and code literals (keep exactly as written) + +## Preferred Terms + +No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections. + +## Guidance + +- Prefer natural Russian phrasing over literal translation +- Keep tone clear and direct in UI labels and docs prose +- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths + +## Avoid + +- Avoid translating product and protocol names that are fixed identifiers +- Avoid mixing multiple Russian terms for the same recurring UI action once a preferred term is established diff --git a/reference/opencode-1.15.5/.opencode/glossary/th.md b/reference/opencode-1.15.5/.opencode/glossary/th.md new file mode 100755 index 0000000..7b5a31d --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/th.md @@ -0,0 +1,34 @@ +# th Glossary + +## Sources + +- PR #10809: https://github.com/anomalyco/opencode/pull/10809 +- PR #11496: https://github.com/anomalyco/opencode/pull/11496 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose; keep `opencode` only in commands, package names, paths, or code) +- `OpenCode CLI` +- `CLI`, `TUI`, `MCP`, `OAuth` +- Commands, flags, file paths, and code literals (keep exactly as written) + +## Preferred Terms + +These are PR-backed preferences and may evolve. + +| English / Context | Preferred | Notes | +| ------------------------------------- | --------------------- | -------------------------------------------------------------------------------- | +| Thai language label in language lists | `ไทย` | PR #10809 standardized this across locales | +| Language names in language pickers | Native names (static) | PR #11496: keep names like `English`, `Deutsch`, `ไทย` consistent across locales | + +## Guidance + +- Prefer natural Thai phrasing over literal translation +- Keep tone short and clear for buttons and labels +- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths +- Keep language names static/native in language pickers instead of translating them per current locale (PR #11496) + +## Avoid + +- Avoid translating language names differently per current locale in language lists +- Avoid changing `ไทย` to another display form for the Thai language option unless the product standard changes diff --git a/reference/opencode-1.15.5/.opencode/glossary/tr.md b/reference/opencode-1.15.5/.opencode/glossary/tr.md new file mode 100755 index 0000000..72b1cdf --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/tr.md @@ -0,0 +1,38 @@ +# tr Glossary + +## Sources + +- PR #15835: https://github.com/anomalyco/opencode/pull/15835 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose, docs, and UI copy) +- Keep lowercase `opencode` in commands, package names, paths, URLs, and other exact identifiers +- `` stays the literal key token in code blocks; use `Tab` for the nearby explanatory label in prose +- Commands, flags, file paths, and code literals (keep exactly as written) + +## Preferred Terms + +These are PR-backed wording preferences and may evolve. + +| English / Context | Preferred | Notes | +| ------------------------- | --------------------------------------- | ------------------------------------------------------------- | +| available in beta | `beta olarak mevcut` | Prefer this over `beta olarak kullanılabilir` | +| privacy-first | `Gizlilik öncelikli tasarlandı` | Prefer this over `Önce gizlilik için tasarlandı` | +| connect your local models | `yerel modellerinizi bağlayabilirsiniz` | Use the fuller, more direct action phrase | +| `` key label | `Tab` | Use `Tab` in prose; keep `` in literal UI or code blocks | +| cross-platform | `cross-platform (tüm platformlarda)` | Keep the English term, add a short clarification when helpful | + +## Guidance + +- Prefer natural Turkish phrasing over literal translation +- Merge broken sentence fragments into one clear sentence when the source is a single thought +- Keep product naming consistent: `OpenCode` in prose, `opencode` only for exact technical identifiers +- When an English technical term is intentionally kept, add a short Turkish clarification only if it improves readability + +## Avoid + +- Avoid `beta olarak kullanılabilir` when `beta olarak mevcut` fits +- Avoid `Önce gizlilik için tasarlandı`; use the more natural reviewed wording instead +- Avoid `Sekme` for the translated key label in prose when referring to `` +- Avoid changing `opencode` to `OpenCode` inside commands, URLs, package names, or code literals diff --git a/reference/opencode-1.15.5/.opencode/glossary/zh-cn.md b/reference/opencode-1.15.5/.opencode/glossary/zh-cn.md new file mode 100755 index 0000000..054e94b --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/zh-cn.md @@ -0,0 +1,42 @@ +# zh-cn Glossary + +## Sources + +- PR #13942: https://github.com/anomalyco/opencode/pull/13942 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose; keep `opencode` only when it is part of commands, package names, paths, or code) +- `OpenCode Zen` +- `OpenCode CLI` +- `CLI`, `TUI`, `MCP`, `OAuth` +- `Model Context Protocol` (prefer the English expansion when introducing `MCP`) + +## Preferred Terms + +These are preferred terms for docs/UI prose and may evolve. + +| English | Preferred | Notes | +| ----------------------- | --------- | ------------------------------------------- | +| prompt | 提示词 | Keep `--prompt` unchanged in flags/code | +| session | 会话 | | +| provider | 提供商 | | +| share link / shared URL | 分享链接 | Prefer `分享` for user-facing share actions | +| headless (server) | 无界面 | Docs wording | +| authentication | 认证 | Prefer in auth/OAuth contexts | +| cache | 缓存 | | +| keybind / shortcut | 快捷键 | User-facing docs wording | +| workflow | 工作流 | e.g. GitHub Actions workflow | + +## Guidance + +- Prefer natural, concise phrasing over literal translation +- Keep the tone direct and friendly (PR #13942 consistently moved wording in this direction) +- Preserve technical artifacts exactly: commands, flags, code, inline code, URLs, file paths, model IDs +- Keep enum-like values in English when they are literals (for example, `default`, `json`) +- Prefer consistent terminology across pages once a term is chosen (`会话`, `提供商`, `提示词`, etc.) + +## Avoid + +- Avoid `opencode` in prose when referring to the product name; use `OpenCode` +- Avoid mixing alternative terms for the same concept across docs when a preferred term is already established diff --git a/reference/opencode-1.15.5/.opencode/glossary/zh-tw.md b/reference/opencode-1.15.5/.opencode/glossary/zh-tw.md new file mode 100755 index 0000000..283660e --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/glossary/zh-tw.md @@ -0,0 +1,42 @@ +# zh-tw Glossary + +## Sources + +- PR #13942: https://github.com/anomalyco/opencode/pull/13942 + +## Do Not Translate (Locale Additions) + +- `OpenCode` (preserve casing in prose; keep `opencode` only when it is part of commands, package names, paths, or code) +- `OpenCode Zen` +- `OpenCode CLI` +- `CLI`, `TUI`, `MCP`, `OAuth` +- `Model Context Protocol` (prefer the English expansion when introducing `MCP`) + +## Preferred Terms + +These are preferred terms for docs/UI prose and may evolve. + +| English | Preferred | Notes | +| ----------------------- | --------- | ------------------------------------------- | +| prompt | 提示詞 | Keep `--prompt` unchanged in flags/code | +| session | 工作階段 | | +| provider | 供應商 | | +| share link / shared URL | 分享連結 | Prefer `分享` for user-facing share actions | +| headless (server) | 無介面 | Docs wording | +| authentication | 認證 | Prefer in auth/OAuth contexts | +| cache | 快取 | | +| keybind / shortcut | 快捷鍵 | User-facing docs wording | +| workflow | 工作流程 | e.g. GitHub Actions workflow | + +## Guidance + +- Prefer natural, concise phrasing over literal translation +- Keep the tone direct and friendly (PR #13942 consistently moved wording in this direction) +- Preserve technical artifacts exactly: commands, flags, code, inline code, URLs, file paths, model IDs +- Keep enum-like values in English when they are literals (for example, `default`, `json`) +- Prefer consistent terminology across pages once a term is chosen (`工作階段`, `供應商`, `提示詞`, etc.) + +## Avoid + +- Avoid `opencode` in prose when referring to the product name; use `OpenCode` +- Avoid mixing alternative terms for the same concept across docs when a preferred term is already established diff --git a/reference/opencode-1.15.5/.opencode/opencode.jsonc b/reference/opencode-1.15.5/.opencode/opencode.jsonc new file mode 100755 index 0000000..0ae2fbe --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/opencode.jsonc @@ -0,0 +1,10 @@ +{ + "$schema": "https://opencode.ai/config.json", + "provider": {}, + "permission": {}, + "mcp": {}, + "tools": { + "github-triage": false, + "github-pr-search": false, + }, +} diff --git a/reference/opencode-1.15.5/.opencode/plugins/smoke-theme.json b/reference/opencode-1.15.5/.opencode/plugins/smoke-theme.json new file mode 100755 index 0000000..6e4595d --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/plugins/smoke-theme.json @@ -0,0 +1,223 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "nord0": "#2E3440", + "nord1": "#3B4252", + "nord2": "#434C5E", + "nord3": "#4C566A", + "nord4": "#D8DEE9", + "nord5": "#E5E9F0", + "nord6": "#ECEFF4", + "nord7": "#8FBCBB", + "nord8": "#88C0D0", + "nord9": "#81A1C1", + "nord10": "#5E81AC", + "nord11": "#BF616A", + "nord12": "#D08770", + "nord13": "#EBCB8B", + "nord14": "#A3BE8C", + "nord15": "#B48EAD" + }, + "theme": { + "primary": { + "dark": "nord10", + "light": "nord9" + }, + "secondary": { + "dark": "nord9", + "light": "nord9" + }, + "accent": { + "dark": "nord7", + "light": "nord7" + }, + "error": { + "dark": "nord11", + "light": "nord11" + }, + "warning": { + "dark": "nord12", + "light": "nord12" + }, + "success": { + "dark": "nord14", + "light": "nord14" + }, + "info": { + "dark": "nord8", + "light": "nord10" + }, + "text": { + "dark": "nord6", + "light": "nord0" + }, + "textMuted": { + "dark": "#8B95A7", + "light": "nord1" + }, + "background": { + "dark": "nord0", + "light": "nord6" + }, + "backgroundPanel": { + "dark": "nord1", + "light": "nord5" + }, + "backgroundElement": { + "dark": "nord2", + "light": "nord4" + }, + "border": { + "dark": "nord2", + "light": "nord3" + }, + "borderActive": { + "dark": "nord3", + "light": "nord2" + }, + "borderSubtle": { + "dark": "nord2", + "light": "nord3" + }, + "diffAdded": { + "dark": "nord14", + "light": "nord14" + }, + "diffRemoved": { + "dark": "nord11", + "light": "nord11" + }, + "diffContext": { + "dark": "#8B95A7", + "light": "nord3" + }, + "diffHunkHeader": { + "dark": "#8B95A7", + "light": "nord3" + }, + "diffHighlightAdded": { + "dark": "nord14", + "light": "nord14" + }, + "diffHighlightRemoved": { + "dark": "nord11", + "light": "nord11" + }, + "diffAddedBg": { + "dark": "#36413C", + "light": "#E6EBE7" + }, + "diffRemovedBg": { + "dark": "#43393D", + "light": "#ECE6E8" + }, + "diffContextBg": { + "dark": "nord1", + "light": "nord5" + }, + "diffLineNumber": { + "dark": "nord2", + "light": "nord4" + }, + "diffAddedLineNumberBg": { + "dark": "#303A35", + "light": "#DDE4DF" + }, + "diffRemovedLineNumberBg": { + "dark": "#3C3336", + "light": "#E4DDE0" + }, + "markdownText": { + "dark": "nord4", + "light": "nord0" + }, + "markdownHeading": { + "dark": "nord8", + "light": "nord10" + }, + "markdownLink": { + "dark": "nord9", + "light": "nord9" + }, + "markdownLinkText": { + "dark": "nord7", + "light": "nord7" + }, + "markdownCode": { + "dark": "nord14", + "light": "nord14" + }, + "markdownBlockQuote": { + "dark": "#8B95A7", + "light": "nord3" + }, + "markdownEmph": { + "dark": "nord12", + "light": "nord12" + }, + "markdownStrong": { + "dark": "nord13", + "light": "nord13" + }, + "markdownHorizontalRule": { + "dark": "#8B95A7", + "light": "nord3" + }, + "markdownListItem": { + "dark": "nord8", + "light": "nord10" + }, + "markdownListEnumeration": { + "dark": "nord7", + "light": "nord7" + }, + "markdownImage": { + "dark": "nord9", + "light": "nord9" + }, + "markdownImageText": { + "dark": "nord7", + "light": "nord7" + }, + "markdownCodeBlock": { + "dark": "nord4", + "light": "nord0" + }, + "syntaxComment": { + "dark": "#8B95A7", + "light": "nord3" + }, + "syntaxKeyword": { + "dark": "nord9", + "light": "nord9" + }, + "syntaxFunction": { + "dark": "nord8", + "light": "nord8" + }, + "syntaxVariable": { + "dark": "nord7", + "light": "nord7" + }, + "syntaxString": { + "dark": "nord14", + "light": "nord14" + }, + "syntaxNumber": { + "dark": "nord15", + "light": "nord15" + }, + "syntaxType": { + "dark": "nord7", + "light": "nord7" + }, + "syntaxOperator": { + "dark": "nord9", + "light": "nord9" + }, + "syntaxPunctuation": { + "dark": "nord4", + "light": "nord0" + } + } +} diff --git a/reference/opencode-1.15.5/.opencode/plugins/tui-smoke.tsx b/reference/opencode-1.15.5/.opencode/plugins/tui-smoke.tsx new file mode 100755 index 0000000..2d3095a --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/plugins/tui-smoke.tsx @@ -0,0 +1,1019 @@ +/** @jsxImportSource @opentui/solid */ +import { useTerminalDimensions, type JSX } from "@opentui/solid" +import { useBindings, useKeymapSelector } from "@opentui/keymap/solid" +import { RGBA, VignetteEffect, type KeyEvent, type Renderable } from "@opentui/core" +import { createBindingLookup, type BindingConfig } from "@opentui/keymap/extras" +import type { TuiPlugin, TuiPluginApi, TuiPluginMeta, TuiPluginModule, TuiSlotPlugin } from "@opencode-ai/plugin/tui" + +const tabs = ["overview", "counter", "help"] +const command = { + modal: "smoke_modal", + screen: "smoke_screen", + alert: "smoke_alert", + confirm: "smoke_confirm", + prompt: "smoke_prompt", + select: "smoke_select", + host: "smoke_host", + home: "smoke_home", + toast: "smoke_toast", + dialog_close: "smoke_dialog_close", + local_push: "smoke_local_push", + local_pop: "smoke_local_pop", + screen_home: "smoke_screen_home", + screen_left: "smoke_screen_left", + screen_right: "smoke_screen_right", + screen_up: "smoke_screen_up", + screen_down: "smoke_screen_down", + screen_modal: "smoke_screen_modal", + screen_local: "smoke_screen_local", + screen_host: "smoke_screen_host", + screen_alert: "smoke_screen_alert", + screen_confirm: "smoke_screen_confirm", + screen_prompt: "smoke_screen_prompt", + screen_select: "smoke_screen_select", + modal_accept: "smoke_modal_accept", + modal_close: "smoke_modal_close", +} + +type SmokeBindings = BindingConfig + +const defaultKeymap = { + [command.modal]: "ctrl+shift+m", + [command.screen]: "ctrl+shift+o", + [command.dialog_close]: "escape", + [command.local_push]: "enter,return", + [command.local_pop]: "escape,q,backspace", + [command.screen_home]: "escape,ctrl+h", + [command.screen_left]: "left,h", + [command.screen_right]: "right,l", + [command.screen_up]: "up,k", + [command.screen_down]: "down,j", + [command.screen_modal]: "ctrl+shift+m", + [command.screen_local]: "x", + [command.screen_host]: "z", + [command.screen_alert]: "a", + [command.screen_confirm]: "c", + [command.screen_prompt]: "p", + [command.screen_select]: "s", + [command.modal_accept]: "enter,return", + [command.modal_close]: "escape", +} + +const pick = (value: unknown, fallback: string) => { + if (typeof value !== "string") return fallback + if (!value.trim()) return fallback + return value +} + +const num = (value: unknown, fallback: number) => { + if (typeof value !== "number") return fallback + return value +} + +const record = (value: unknown): value is Record => + !!value && typeof value === "object" && !Array.isArray(value) + +type Cfg = { + label: string + route: string + vignette: number + keybinds: SmokeBindings | undefined +} + +type Route = { + modal: string + screen: string +} + +type State = { + tab: number + count: number + source: string + note: string + selected: string + local: number +} + +const cfg = (options: Record | undefined) => { + return { + label: pick(options?.label, "smoke"), + route: pick(options?.route, "workspace-smoke"), + vignette: Math.max(0, num(options?.vignette, 0.35)), + keybinds: record(options?.keybinds) ? (options.keybinds as SmokeBindings) : undefined, + } +} + +const names = (input: Cfg) => { + return { + modal: `${input.route}.modal`, + screen: `${input.route}.screen`, + } +} + +function createKeys(input: SmokeBindings | undefined) { + return createBindingLookup({ ...defaultKeymap, ...input }) +} + +type Keys = ReturnType + +const ui = { + panel: "#1d1d1d", + border: "#4a4a4a", + text: "#f0f0f0", + muted: "#a5a5a5", + accent: "#5f87ff", +} + +type Color = RGBA | string + +const ink = (map: Record, name: string, fallback: string): Color => { + const value = map[name] + if (typeof value === "string") return value + if (value instanceof RGBA) return value + return fallback +} + +const look = (map: Record) => { + return { + panel: ink(map, "backgroundPanel", ui.panel), + border: ink(map, "border", ui.border), + text: ink(map, "text", ui.text), + muted: ink(map, "textMuted", ui.muted), + accent: ink(map, "primary", ui.accent), + selected: ink(map, "selectedListItemText", ui.text), + } +} + +const tone = (api: TuiPluginApi) => { + return look(api.theme.current) +} + +type Skin = { + panel: Color + border: Color + text: Color + muted: Color + accent: Color + selected: Color +} + +const Btn = (props: { txt: string; run: () => void; skin: Skin; on?: boolean }) => { + return ( + { + props.run() + }} + backgroundColor={props.on ? props.skin.accent : props.skin.border} + paddingLeft={1} + paddingRight={1} + > + {props.txt} + + ) +} + +const parse = (params: Record | undefined) => { + const tab = typeof params?.tab === "number" ? params.tab : 0 + const count = typeof params?.count === "number" ? params.count : 0 + const source = typeof params?.source === "string" ? params.source : "unknown" + const note = typeof params?.note === "string" ? params.note : "" + const selected = typeof params?.selected === "string" ? params.selected : "" + const local = typeof params?.local === "number" ? params.local : 0 + return { + tab: Math.max(0, Math.min(tab, tabs.length - 1)), + count, + source, + note, + selected, + local: Math.max(0, local), + } +} + +const current = (api: TuiPluginApi, route: Route) => { + const value = api.route.current + const ok = Object.values(route).includes(value.name) + if (!ok) return parse(undefined) + if (!("params" in value)) return parse(undefined) + return parse(value.params) +} + +const opts = [ + { + title: "Overview", + value: 0, + description: "Switch to overview tab", + }, + { + title: "Counter", + value: 1, + description: "Switch to counter tab", + }, + { + title: "Help", + value: 2, + description: "Switch to help tab", + }, +] + +const host = (api: TuiPluginApi, input: Cfg, skin: Skin) => { + api.ui.dialog.setSize("medium") + api.ui.dialog.replace(() => ( + + + {input.label} host overlay + + Using api.ui.dialog stack with built-in backdrop + esc closes · depth {api.ui.dialog.depth} + + api.ui.dialog.clear()} skin={skin} on /> + + + )) +} + +const warn = (api: TuiPluginApi, route: Route, value: State) => { + const DialogAlert = api.ui.DialogAlert + api.ui.dialog.setSize("medium") + api.ui.dialog.replace(() => ( + api.route.navigate(route.screen, { ...value, source: "alert" })} + /> + )) +} + +const check = (api: TuiPluginApi, route: Route, value: State) => { + const DialogConfirm = api.ui.DialogConfirm + api.ui.dialog.setSize("medium") + api.ui.dialog.replace(() => ( + api.route.navigate(route.screen, { ...value, count: value.count + 1, source: "confirm" })} + onCancel={() => api.route.navigate(route.screen, { ...value, source: "confirm-cancel" })} + /> + )) +} + +const entry = (api: TuiPluginApi, route: Route, value: State) => { + const DialogPrompt = api.ui.DialogPrompt + api.ui.dialog.setSize("medium") + api.ui.dialog.replace(() => ( + { + api.ui.dialog.clear() + api.route.navigate(route.screen, { ...value, note, source: "prompt" }) + }} + onCancel={() => { + api.ui.dialog.clear() + api.route.navigate(route.screen, value) + }} + /> + )) +} + +const picker = (api: TuiPluginApi, route: Route, value: State) => { + const DialogSelect = api.ui.DialogSelect + api.ui.dialog.setSize("medium") + api.ui.dialog.replace(() => ( + { + api.ui.dialog.clear() + api.route.navigate(route.screen, { + ...value, + tab: typeof item.value === "number" ? item.value : value.tab, + selected: item.title, + source: "select", + }) + }} + /> + )) +} + +const Screen = (props: { + api: TuiPluginApi + input: Cfg + route: Route + keys: Keys + meta: TuiPluginMeta + params?: Record +}) => { + const dim = useTerminalDimensions() + const value = parse(props.params) + const skin = tone(props.api) + const set = (local: number, base?: State) => { + const next = base ?? current(props.api, props.route) + props.api.route.navigate(props.route.screen, { ...next, local: Math.max(0, local), source: "local" }) + } + const push = (base?: State) => { + const next = base ?? current(props.api, props.route) + set(next.local + 1, next) + } + const open = () => { + const next = current(props.api, props.route) + if (next.local > 0) return + set(1, next) + } + const pop = (base?: State) => { + const next = base ?? current(props.api, props.route) + set(Math.max(0, next.local - 1), next) + } + const show = () => { + setTimeout(() => { + open() + }, 0) + } + const screenActive = () => props.api.route.current.name === props.route.screen + + useBindings(() => ({ + enabled: () => screenActive() && props.api.ui.dialog.open, + commands: [ + { + name: command.dialog_close, + run() { + props.api.ui.dialog.clear() + }, + }, + ], + bindings: props.keys.gather("smoke.dialog", [command.dialog_close]), + })) + + useBindings(() => ({ + enabled: () => screenActive() && !props.api.ui.dialog.open && current(props.api, props.route).local > 0, + commands: [ + { + name: command.local_push, + run() { + push(current(props.api, props.route)) + }, + }, + { + name: command.local_pop, + run() { + pop(current(props.api, props.route)) + }, + }, + ], + bindings: props.keys.gather("smoke.local", [command.local_push, command.local_pop]), + })) + + useBindings(() => ({ + enabled: () => screenActive() && !props.api.ui.dialog.open && current(props.api, props.route).local === 0, + commands: [ + { + name: command.screen_home, + run() { + props.api.route.navigate("home") + }, + }, + { + name: command.screen_left, + run() { + const next = current(props.api, props.route) + props.api.route.navigate(props.route.screen, { ...next, tab: (next.tab - 1 + tabs.length) % tabs.length }) + }, + }, + { + name: command.screen_right, + run() { + const next = current(props.api, props.route) + props.api.route.navigate(props.route.screen, { ...next, tab: (next.tab + 1) % tabs.length }) + }, + }, + { + name: command.screen_up, + run() { + const next = current(props.api, props.route) + props.api.route.navigate(props.route.screen, { ...next, count: next.count + 1 }) + }, + }, + { + name: command.screen_down, + run() { + const next = current(props.api, props.route) + props.api.route.navigate(props.route.screen, { ...next, count: next.count - 1 }) + }, + }, + { + name: command.screen_modal, + run() { + props.api.route.navigate(props.route.modal, current(props.api, props.route)) + }, + }, + { + name: command.screen_local, + run() { + open() + }, + }, + { + name: command.screen_host, + run() { + host(props.api, props.input, skin) + }, + }, + { + name: command.screen_alert, + run() { + warn(props.api, props.route, current(props.api, props.route)) + }, + }, + { + name: command.screen_confirm, + run() { + check(props.api, props.route, current(props.api, props.route)) + }, + }, + { + name: command.screen_prompt, + run() { + entry(props.api, props.route, current(props.api, props.route)) + }, + }, + { + name: command.screen_select, + run() { + picker(props.api, props.route, current(props.api, props.route)) + }, + }, + ], + bindings: props.keys.gather("smoke.screen", [ + command.screen_home, + command.screen_left, + command.screen_right, + command.screen_up, + command.screen_down, + command.screen_modal, + command.screen_local, + command.screen_host, + command.screen_alert, + command.screen_confirm, + command.screen_prompt, + command.screen_select, + ]), + })) + const shortcuts = useKeymapSelector((keymap) => { + const bindings = keymap.getCommandBindings({ + visibility: "registered", + commands: [ + command.screen_home, + command.screen_up, + command.screen_down, + command.screen_modal, + command.screen_alert, + command.screen_confirm, + command.screen_prompt, + command.screen_select, + command.screen_local, + command.screen_host, + command.local_push, + command.local_pop, + ], + }) + + return { + screen_home: props.api.keys.formatBindings(bindings.get(command.screen_home)) ?? "", + screen_up: props.api.keys.formatBindings(bindings.get(command.screen_up)) ?? "", + screen_down: props.api.keys.formatBindings(bindings.get(command.screen_down)) ?? "", + screen_modal: props.api.keys.formatBindings(bindings.get(command.screen_modal)) ?? "", + screen_alert: props.api.keys.formatBindings(bindings.get(command.screen_alert)) ?? "", + screen_confirm: props.api.keys.formatBindings(bindings.get(command.screen_confirm)) ?? "", + screen_prompt: props.api.keys.formatBindings(bindings.get(command.screen_prompt)) ?? "", + screen_select: props.api.keys.formatBindings(bindings.get(command.screen_select)) ?? "", + screen_local: props.api.keys.formatBindings(bindings.get(command.screen_local)) ?? "", + screen_host: props.api.keys.formatBindings(bindings.get(command.screen_host)) ?? "", + local_push: props.api.keys.formatBindings(bindings.get(command.local_push)) ?? "", + local_pop: props.api.keys.formatBindings(bindings.get(command.local_pop)) ?? "", + } + }) + + return ( + + + + + {props.input.label} screen + plugin route + + {shortcuts().screen_home} home + + + + {tabs.map((item, i) => { + const on = value.tab === i + return ( + props.api.route.navigate(props.route.screen, { ...value, tab: i })} + skin={skin} + on={on} + /> + ) + })} + + + + {value.tab === 0 ? ( + + Route: {props.route.screen} + plugin state: {props.meta.state} + + first: {props.meta.state === "first" ? "yes" : "no"} · updated:{" "} + {props.meta.state === "updated" ? "yes" : "no"} · loads: {props.meta.load_count} + + plugin source: {props.meta.source} + source: {value.source} + note: {value.note || "(none)"} + selected: {value.selected || "(none)"} + local stack depth: {value.local} + host stack open: {props.api.ui.dialog.open ? "yes" : "no"} + + ) : null} + + {value.tab === 1 ? ( + + Counter: {value.count} + + {shortcuts().screen_up} / {shortcuts().screen_down} change value + + + ) : null} + + {value.tab === 2 ? ( + + + {shortcuts().screen_modal} modal | {shortcuts().screen_alert} alert | {shortcuts().screen_confirm}{" "} + confirm | {shortcuts().screen_prompt} prompt | {shortcuts().screen_select} select + + + {shortcuts().screen_local} local stack | {shortcuts().screen_host} host stack + + + local open: {shortcuts().local_push} push nested · {shortcuts().local_pop} close + + {shortcuts().screen_home} returns home + + ) : null} + + + + props.api.route.navigate("home")} skin={skin} /> + props.api.route.navigate(props.route.modal, value)} skin={skin} on /> + + host(props.api, props.input, skin)} skin={skin} /> + warn(props.api, props.route, value)} skin={skin} /> + check(props.api, props.route, value)} skin={skin} /> + entry(props.api, props.route, value)} skin={skin} /> + picker(props.api, props.route, value)} skin={skin} /> + + + + 0} + width={dim().width} + height={dim().height} + alignItems="center" + position="absolute" + zIndex={3000} + paddingTop={dim().height / 4} + left={0} + top={0} + backgroundColor={RGBA.fromInts(0, 0, 0, 160)} + onMouseUp={() => { + pop() + }} + > + { + evt.stopPropagation() + }} + width={60} + maxWidth={dim().width - 2} + backgroundColor={skin.panel} + border + borderColor={skin.border} + paddingTop={1} + paddingBottom={1} + paddingLeft={2} + paddingRight={2} + gap={1} + flexDirection="column" + > + + {props.input.label} local overlay + + Plugin-owned stack depth: {value.local} + + {shortcuts().local_push} push nested · {shortcuts().local_pop} pop/close + + + + + + + + + ) +} + +const Modal = (props: { + api: TuiPluginApi + input: Cfg + route: Route + keys: Keys + params?: Record +}) => { + const Dialog = props.api.ui.Dialog + const value = parse(props.params) + const skin = tone(props.api) + + useBindings(() => ({ + enabled: () => props.api.route.current.name === props.route.modal, + commands: [ + { + name: command.modal_accept, + run() { + props.api.route.navigate(props.route.screen, { ...parse(props.params), source: "modal" }) + }, + }, + { + name: command.modal_close, + run() { + props.api.route.navigate("home") + }, + }, + ], + bindings: props.keys.gather("smoke.modal", [command.modal_accept, command.modal_close]), + })) + const shortcuts = useKeymapSelector((keymap) => { + const bindings = keymap.getCommandBindings({ + visibility: "registered", + commands: [command.modal, command.screen, command.modal_accept, command.modal_close], + }) + + return { + modal: props.api.keys.formatBindings(bindings.get(command.modal)) ?? "", + screen: props.api.keys.formatBindings(bindings.get(command.screen)) ?? "", + modal_accept: props.api.keys.formatBindings(bindings.get(command.modal_accept)) ?? "", + modal_close: props.api.keys.formatBindings(bindings.get(command.modal_close)) ?? "", + } + }) + + return ( + + props.api.route.navigate("home")}> + + + {props.input.label} modal + + {shortcuts().modal} modal command + {shortcuts().screen} screen command + + {shortcuts().modal_accept} opens screen · {shortcuts().modal_close} closes + + + props.api.route.navigate(props.route.screen, { ...value, source: "modal" })} + skin={skin} + on + /> + props.api.route.navigate("home")} skin={skin} /> + + + + + ) +} + +const home = (api: TuiPluginApi, input: Cfg) => ({ + slots: { + home_logo(ctx) { + const map = ctx.theme.current + const skin = look(map) + const art = [ + " $$\\", + " $$ |", + " $$$$$$$\\ $$$$$$\\$$$$\\ $$$$$$\\ $$ | $$\\ $$$$$$\\", + "$$ _____|$$ _$$ _$$\\ $$ __$$\\ $$ | $$ |$$ __$$\\", + "\\$$$$$$\\ $$ / $$ / $$ |$$ / $$ |$$$$$$ / $$$$$$$$ |", + " \\____$$\\ $$ | $$ | $$ |$$ | $$ |$$ _$$< $$ ____|", + "$$$$$$$ |$$ | $$ | $$ |\\$$$$$$ |$$ | \\$$\\ \\$$$$$$$\\", + "\\_______/ \\__| \\__| \\__| \\______/ \\__| \\__| \\_______|", + ] + const fill = [ + skin.accent, + skin.muted, + ink(map, "info", ui.accent), + skin.text, + ink(map, "success", ui.accent), + ink(map, "warning", ui.accent), + ink(map, "secondary", ui.accent), + ink(map, "error", ui.accent), + ] + + return ( + + {art.map((line, i) => ( + {line} + ))} + + ) + }, + home_prompt(ctx, value) { + const skin = look(ctx.theme.current) + const Prompt = api.ui.Prompt + const Slot = api.ui.Slot + const normal = [ + `[SMOKE] route check for ${input.label}`, + "[SMOKE] confirm home_prompt slot override", + "[SMOKE] verify prompt-right slot passthrough", + ] + const shell = ["printf '[SMOKE] home prompt\n'", "git status --short", "bun --version"] + const hint = ( + + + smoke home prompt + + + ) + + return ( + + + + + } + placeholders={{ normal, shell }} + /> + ) + }, + home_prompt_right(ctx, value) { + const skin = look(ctx.theme.current) + const id = value.workspace_id?.slice(0, 8) ?? "none" + return ( + + {input.label} home:{id} + + ) + }, + session_prompt_right(ctx, value) { + const skin = look(ctx.theme.current) + return ( + + {input.label} session:{value.session_id.slice(0, 8)} + + ) + }, + smoke_prompt_right(ctx, value) { + const skin = look(ctx.theme.current) + const id = typeof value.workspace_id === "string" ? value.workspace_id.slice(0, 8) : "none" + const label = typeof value.label === "string" ? value.label : input.label + return ( + + {label} custom:{id} + + ) + }, + home_bottom(ctx) { + const skin = look(ctx.theme.current) + const text = "extra content in the unified home bottom slot" + + return ( + + + + {input.label} {text} + + + + ) + }, + }, +}) + +const block = (input: Cfg, order: number, title: string, text: string): TuiSlotPlugin => ({ + order, + slots: { + sidebar_content(ctx, value) { + const skin = look(ctx.theme.current) + + return ( + + + {title} + + {text} + + {input.label} order {order} · session {value.session_id.slice(0, 8)} + + + ) + }, + }, +}) + +const slot = (api: TuiPluginApi, input: Cfg): TuiSlotPlugin[] => [ + home(api, input), + block(input, 50, "Smoke above", "renders above internal sidebar blocks"), + block(input, 250, "Smoke between", "renders between internal sidebar blocks"), + block(input, 650, "Smoke below", "renders below internal sidebar blocks"), +] + +const reg = (api: TuiPluginApi, input: Cfg, keys: Keys) => { + const route = names(input) + api.keymap.registerLayer({ + commands: [ + { + name: command.modal, + title: `${input.label} modal`, + category: "Plugin", + namespace: "palette", + slashName: "smoke", + run() { + api.route.navigate(route.modal, { source: "command" }) + }, + }, + { + name: command.screen, + title: `${input.label} screen`, + category: "Plugin", + namespace: "palette", + slashName: "smoke-screen", + run() { + api.route.navigate(route.screen, { source: "command", tab: 0, count: 0 }) + }, + }, + { + name: command.alert, + title: `${input.label} alert dialog`, + category: "Plugin", + namespace: "palette", + slashName: "smoke-alert", + run() { + warn(api, route, current(api, route)) + }, + }, + { + name: command.confirm, + title: `${input.label} confirm dialog`, + category: "Plugin", + namespace: "palette", + slashName: "smoke-confirm", + run() { + check(api, route, current(api, route)) + }, + }, + { + name: command.prompt, + title: `${input.label} prompt dialog`, + category: "Plugin", + namespace: "palette", + slashName: "smoke-prompt", + run() { + entry(api, route, current(api, route)) + }, + }, + { + name: command.select, + title: `${input.label} select dialog`, + category: "Plugin", + namespace: "palette", + slashName: "smoke-select", + run() { + picker(api, route, current(api, route)) + }, + }, + { + name: command.host, + title: `${input.label} host overlay`, + category: "Plugin", + namespace: "palette", + slashName: "smoke-host", + run() { + host(api, input, tone(api)) + }, + }, + { + name: command.home, + title: `${input.label} go home`, + category: "Plugin", + namespace: "palette", + enabled: () => api.route.current.name !== "home", + run() { + api.route.navigate("home") + }, + }, + { + name: command.toast, + title: `${input.label} toast`, + category: "Plugin", + namespace: "palette", + run() { + api.ui.toast({ + variant: "info", + title: "Smoke", + message: "Plugin toast works", + duration: 2000, + }) + }, + }, + ], + bindings: keys.gather("smoke.global", [ + command.modal, + command.screen, + command.alert, + command.confirm, + command.prompt, + command.select, + command.host, + command.home, + command.toast, + ]), + }) +} + +const tui: TuiPlugin = async (api, options, meta) => { + if (options?.enabled === false) return + + await api.theme.install("./smoke-theme.json") + api.theme.set("smoke-theme") + + const value = cfg(options) + const route = names(value) + const keys = createKeys(value.keybinds) + const fx = new VignetteEffect(value.vignette) + const post = fx.apply.bind(fx) + api.renderer.addPostProcessFn(post) + api.lifecycle.onDispose(() => { + api.renderer.removePostProcessFn(post) + }) + + api.route.register([ + { + name: route.screen, + render: ({ params }) => , + }, + { + name: route.modal, + render: ({ params }) => , + }, + ]) + + reg(api, value, keys) + for (const item of slot(api, value)) { + api.slots.register(item) + } +} + +const plugin: TuiPluginModule & { id: string } = { + id: "tui-smoke", + tui, +} + +export default plugin diff --git a/reference/opencode-1.15.5/.opencode/skills/effect/SKILL.md b/reference/opencode-1.15.5/.opencode/skills/effect/SKILL.md new file mode 100755 index 0000000..3a44fa8 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/skills/effect/SKILL.md @@ -0,0 +1,38 @@ +--- +name: effect +description: Work with Effect v4 / effect-smol TypeScript code in this repo +--- + +# Effect + +This codebase uses Effect for typed, composable TypeScript services, schemas, and workflows. + +## Source Of Truth + +Use the current Effect v4 / effect-smol source, not memory or older Effect v2/v3 examples. + +1. If `.opencode/references/effect-smol` is missing, clone `https://github.com/Effect-TS/effect-smol` there. Do this in the project, not in the skill folder. +2. Search `.opencode/references/effect-smol` for exact APIs, examples, tests, and naming patterns before answering or implementing Effect-specific code. +3. Also inspect existing repo code for local house style before introducing new patterns. +4. Prefer answers and implementations backed by specific source files or nearby repo examples. + +## Guidelines + +- Prefer current Effect v4 APIs and project-local patterns over old blog posts, examples, or package-memory guesses. +- Use `Effect.gen(function* () { ... })` for multi-step workflows. +- Use `Effect.fn("Name")` or `Effect.fnUntraced(...)` for named effects when adding reusable service methods or important workflows. +- Prefer Effect `Schema` for API and domain data shapes. Use branded schemas for IDs and `Schema.TaggedErrorClass` for typed domain errors when modeling new error surfaces. +- Keep HTTP handlers thin: decode input, read request context, call services, and map transport errors. Put business rules in services. +- In Effect service code, prefer Effect-aware platform abstractions and dependencies over ad hoc promises where the surrounding code already does so. +- Keep layer composition explicit. Avoid broad hidden provisioning that makes missing dependencies hard to see. +- In tests, prefer the repo's existing Effect test helpers and live tests for filesystem, git, child process, locks, or timing behavior. +- Do not introduce `any`, non-null assertions, unchecked casts, or older Effect APIs just to satisfy types. +- Do not answer from memory. Verify against `.opencode/references/effect-smol` or nearby code first. + +## Testing Patterns + +- Use `testEffect(...)` from `packages/opencode/test/lib/effect.ts` for tests that exercise Effect services, layers, runtime context, scoped resources, or platform integrations. +- Use `it.live(...)` for filesystem, git repositories, HTTP servers, sockets, child processes, locks, real time, and other live platform behavior. +- Run tests from package directories such as `packages/opencode`; never run package tests from the repo root. +- Prefer explicit test layers over ad hoc managed runtimes. Keep dependency provisioning visible in the test file. +- Use scoped fixtures and finalizers for resources that must be cleaned up, including temporary directories, flags, databases, fibers, servers, and global state. diff --git a/reference/opencode-1.15.5/.opencode/skills/improve-codebase-architecture/DEEPENING.md b/reference/opencode-1.15.5/.opencode/skills/improve-codebase-architecture/DEEPENING.md new file mode 100755 index 0000000..c52fdfd --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/skills/improve-codebase-architecture/DEEPENING.md @@ -0,0 +1,37 @@ +# Deepening + +How to deepen a cluster of shallow modules safely, given its dependencies. Assumes the vocabulary in [LANGUAGE.md](LANGUAGE.md) — **module**, **interface**, **seam**, **adapter**. + +## Dependency categories + +When assessing a candidate for deepening, classify its dependencies. The category determines how the deepened module is tested across its seam. + +### 1. In-process + +Pure computation, in-memory state, no I/O. Always deepenable — merge the modules and test through the new interface directly. No adapter needed. + +### 2. Local-substitutable + +Dependencies that have local test stand-ins (PGLite for Postgres, in-memory filesystem). Deepenable if the stand-in exists. The deepened module is tested with the stand-in running in the test suite. The seam is internal; no port at the module's external interface. + +### 3. Remote but owned (Ports & Adapters) + +Your own services across a network boundary (microservices, internal APIs). Define a **port** (interface) at the seam. The deep module owns the logic; the transport is injected as an **adapter**. Tests use an in-memory adapter. Production uses an HTTP/gRPC/queue adapter. + +Recommendation shape: _"Define a port at the seam, implement an HTTP adapter for production and an in-memory adapter for testing, so the logic sits in one deep module even though it's deployed across a network."_ + +### 4. True external (Mock) + +Third-party services (Stripe, Twilio, etc.) you don't control. The deepened module takes the external dependency as an injected port; tests provide a mock adapter. + +## Seam discipline + +- **One adapter means a hypothetical seam. Two adapters means a real one.** Don't introduce a port unless at least two adapters are justified (typically production + test). A single-adapter seam is just indirection. +- **Internal seams vs external seams.** A deep module can have internal seams (private to its implementation, used by its own tests) as well as the external seam at its interface. Don't expose internal seams through the interface just because tests use them. + +## Testing strategy: replace, don't layer + +- Old unit tests on shallow modules become waste once tests at the deepened module's interface exist — delete them. +- Write new tests at the deepened module's interface. The **interface is the test surface**. +- Tests assert on observable outcomes through the interface, not internal state. +- Tests should survive internal refactors — they describe behaviour, not implementation. If a test has to change when the implementation changes, it's testing past the interface. diff --git a/reference/opencode-1.15.5/.opencode/skills/improve-codebase-architecture/INTERFACE-DESIGN.md b/reference/opencode-1.15.5/.opencode/skills/improve-codebase-architecture/INTERFACE-DESIGN.md new file mode 100755 index 0000000..3197723 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/skills/improve-codebase-architecture/INTERFACE-DESIGN.md @@ -0,0 +1,44 @@ +# Interface Design + +When the user wants to explore alternative interfaces for a chosen deepening candidate, use this parallel sub-agent pattern. Based on "Design It Twice" (Ousterhout) — your first idea is unlikely to be the best. + +Uses the vocabulary in [LANGUAGE.md](LANGUAGE.md) — **module**, **interface**, **seam**, **adapter**, **leverage**. + +## Process + +### 1. Frame the problem space + +Before spawning sub-agents, write a user-facing explanation of the problem space for the chosen candidate: + +- The constraints any new interface would need to satisfy +- The dependencies it would rely on, and which category they fall into (see [DEEPENING.md](DEEPENING.md)) +- A rough illustrative code sketch to ground the constraints — not a proposal, just a way to make the constraints concrete + +Show this to the user, then immediately proceed to Step 2. The user reads and thinks while the sub-agents work in parallel. + +### 2. Spawn sub-agents + +Spawn 3+ sub-agents in parallel using the Agent tool. Each must produce a **radically different** interface for the deepened module. + +Prompt each sub-agent with a separate technical brief (file paths, coupling details, dependency category from [DEEPENING.md](DEEPENING.md), what sits behind the seam). The brief is independent of the user-facing problem-space explanation in Step 1. Give each agent a different design constraint: + +- Agent 1: "Minimize the interface — aim for 1–3 entry points max. Maximise leverage per entry point." +- Agent 2: "Maximise flexibility — support many use cases and extension." +- Agent 3: "Optimise for the most common caller — make the default case trivial." +- Agent 4 (if applicable): "Design around ports & adapters for cross-seam dependencies." + +Include both [LANGUAGE.md](LANGUAGE.md) vocabulary and CONTEXT.md vocabulary in the brief so each sub-agent names things consistently with the architecture language and the project's domain language. + +Each sub-agent outputs: + +1. Interface (types, methods, params — plus invariants, ordering, error modes) +2. Usage example showing how callers use it +3. What the implementation hides behind the seam +4. Dependency strategy and adapters (see [DEEPENING.md](DEEPENING.md)) +5. Trade-offs — where leverage is high, where it's thin + +### 3. Present and compare + +Present designs sequentially so the user can absorb each one, then compare them in prose. Contrast by **depth** (leverage at the interface), **locality** (where change concentrates), and **seam placement**. + +After comparing, give your own recommendation: which design you think is strongest and why. If elements from different designs would combine well, propose a hybrid. Be opinionated — the user wants a strong read, not a menu. diff --git a/reference/opencode-1.15.5/.opencode/skills/improve-codebase-architecture/LANGUAGE.md b/reference/opencode-1.15.5/.opencode/skills/improve-codebase-architecture/LANGUAGE.md new file mode 100755 index 0000000..dd9b60f --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/skills/improve-codebase-architecture/LANGUAGE.md @@ -0,0 +1,53 @@ +# Language + +Shared vocabulary for every suggestion this skill makes. Use these terms exactly — don't substitute "component," "service," "API," or "boundary." Consistent language is the whole point. + +## Terms + +**Module** +Anything with an interface and an implementation. Deliberately scale-agnostic — applies equally to a function, class, package, or tier-spanning slice. +_Avoid_: unit, component, service. + +**Interface** +Everything a caller must know to use the module correctly. Includes the type signature, but also invariants, ordering constraints, error modes, required configuration, and performance characteristics. +_Avoid_: API, signature (too narrow — those refer only to the type-level surface). + +**Implementation** +What's inside a module — its body of code. Distinct from **Adapter**: a thing can be a small adapter with a large implementation (a Postgres repo) or a large adapter with a small implementation (an in-memory fake). Reach for "adapter" when the seam is the topic; "implementation" otherwise. + +**Depth** +Leverage at the interface — the amount of behaviour a caller (or test) can exercise per unit of interface they have to learn. A module is **deep** when a large amount of behaviour sits behind a small interface. A module is **shallow** when the interface is nearly as complex as the implementation. + +**Seam** _(from Michael Feathers)_ +A place where you can alter behaviour without editing in that place. The _location_ at which a module's interface lives. Choosing where to put the seam is its own design decision, distinct from what goes behind it. +_Avoid_: boundary (overloaded with DDD's bounded context). + +**Adapter** +A concrete thing that satisfies an interface at a seam. Describes _role_ (what slot it fills), not substance (what's inside). + +**Leverage** +What callers get from depth. More capability per unit of interface they have to learn. One implementation pays back across N call sites and M tests. + +**Locality** +What maintainers get from depth. Change, bugs, knowledge, and verification concentrate at one place rather than spreading across callers. Fix once, fixed everywhere. + +## Principles + +- **Depth is a property of the interface, not the implementation.** A deep module can be internally composed of small, mockable, swappable parts — they just aren't part of the interface. A module can have **internal seams** (private to its implementation, used by its own tests) as well as the **external seam** at its interface. +- **The deletion test.** Imagine deleting the module. If complexity vanishes, the module wasn't hiding anything (it was a pass-through). If complexity reappears across N callers, the module was earning its keep. +- **The interface is the test surface.** Callers and tests cross the same seam. If you want to test _past_ the interface, the module is probably the wrong shape. +- **One adapter means a hypothetical seam. Two adapters means a real one.** Don't introduce a seam unless something actually varies across it. + +## Relationships + +- A **Module** has exactly one **Interface** (the surface it presents to callers and tests). +- **Depth** is a property of a **Module**, measured against its **Interface**. +- A **Seam** is where a **Module**'s **Interface** lives. +- An **Adapter** sits at a **Seam** and satisfies the **Interface**. +- **Depth** produces **Leverage** for callers and **Locality** for maintainers. + +## Rejected framings + +- **Depth as ratio of implementation-lines to interface-lines** (Ousterhout): rewards padding the implementation. We use depth-as-leverage instead. +- **"Interface" as the TypeScript `interface` keyword or a class's public methods**: too narrow — interface here includes every fact a caller must know. +- **"Boundary"**: overloaded with DDD's bounded context. Say **seam** or **interface**. diff --git a/reference/opencode-1.15.5/.opencode/skills/improve-codebase-architecture/SKILL.md b/reference/opencode-1.15.5/.opencode/skills/improve-codebase-architecture/SKILL.md new file mode 100755 index 0000000..05984a6 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/skills/improve-codebase-architecture/SKILL.md @@ -0,0 +1,71 @@ +--- +name: improve-codebase-architecture +description: Find deepening opportunities in a codebase, informed by the domain language in CONTEXT.md and the decisions in docs/adr/. Use when the user wants to improve architecture, find refactoring opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable. +--- + +# Improve Codebase Architecture + +Surface architectural friction and propose **deepening opportunities** — refactors that turn shallow modules into deep ones. The aim is testability and AI-navigability. + +## Glossary + +Use these terms exactly in every suggestion. Consistent language is the point — don't drift into "component," "service," "API," or "boundary." Full definitions in [LANGUAGE.md](LANGUAGE.md). + +- **Module** — anything with an interface and an implementation (function, class, package, slice). +- **Interface** — everything a caller must know to use the module: types, invariants, error modes, ordering, config. Not just the type signature. +- **Implementation** — the code inside. +- **Depth** — leverage at the interface: a lot of behaviour behind a small interface. **Deep** = high leverage. **Shallow** = interface nearly as complex as the implementation. +- **Seam** — where an interface lives; a place behaviour can be altered without editing in place. (Use this, not "boundary.") +- **Adapter** — a concrete thing satisfying an interface at a seam. +- **Leverage** — what callers get from depth. +- **Locality** — what maintainers get from depth: change, bugs, knowledge concentrated in one place. + +Key principles (see [LANGUAGE.md](LANGUAGE.md) for the full list): + +- **Deletion test**: imagine deleting the module. If complexity vanishes, it was a pass-through. If complexity reappears across N callers, it was earning its keep. +- **The interface is the test surface.** +- **One adapter = hypothetical seam. Two adapters = real seam.** + +This skill is _informed_ by the project's domain model. The domain language gives names to good seams; ADRs record decisions the skill should not re-litigate. + +## Process + +### 1. Explore + +Read the project's domain glossary and any ADRs in the area you're touching first. + +Then use the Agent tool with `subagent_type=Explore` to walk the codebase. Don't follow rigid heuristics — explore organically and note where you experience friction: + +- Where does understanding one concept require bouncing between many small modules? +- Where are modules **shallow** — interface nearly as complex as the implementation? +- Where have pure functions been extracted just for testability, but the real bugs hide in how they're called (no **locality**)? +- Where do tightly-coupled modules leak across their seams? +- Which parts of the codebase are untested, or hard to test through their current interface? + +Apply the **deletion test** to anything you suspect is shallow: would deleting it concentrate complexity, or just move it? A "yes, concentrates" is the signal you want. + +### 2. Present candidates + +Present a numbered list of deepening opportunities. For each candidate: + +- **Files** — which files/modules are involved +- **Problem** — why the current architecture is causing friction +- **Solution** — plain English description of what would change +- **Benefits** — explained in terms of locality and leverage, and also in how tests would improve + +**Use CONTEXT.md vocabulary for the domain, and [LANGUAGE.md](LANGUAGE.md) vocabulary for the architecture.** If `CONTEXT.md` defines "Order," talk about "the Order intake module" — not "the FooBarHandler," and not "the Order service." + +**ADR conflicts**: if a candidate contradicts an existing ADR, only surface it when the friction is real enough to warrant revisiting the ADR. Mark it clearly (e.g. _"contradicts ADR-0007 — but worth reopening because…"_). Don't list every theoretical refactor an ADR forbids. + +Do NOT propose interfaces yet. Ask the user: "Which of these would you like to explore?" + +### 3. Grilling loop + +Once the user picks a candidate, drop into a grilling conversation. Walk the design tree with them — constraints, dependencies, the shape of the deepened module, what sits behind the seam, what tests survive. + +Side effects happen inline as decisions crystallize: + +- **Naming a deepened module after a concept not in `CONTEXT.md`?** Add the term to `CONTEXT.md` — same discipline as `/grill-with-docs` (see [CONTEXT-FORMAT.md](../grill-with-docs/CONTEXT-FORMAT.md)). Create the file lazily if it doesn't exist. +- **Sharpening a fuzzy term during the conversation?** Update `CONTEXT.md` right there. +- **User rejects the candidate with a load-bearing reason?** Offer an ADR, framed as: _"Want me to record this as an ADR so future architecture reviews don't re-suggest it?"_ Only offer when the reason would actually be needed by a future explorer to avoid re-suggesting the same thing — skip ephemeral reasons ("not worth it right now") and self-evident ones. See [ADR-FORMAT.md](../grill-with-docs/ADR-FORMAT.md). +- **Want to explore alternative interfaces for the deepened module?** See [INTERFACE-DESIGN.md](INTERFACE-DESIGN.md). diff --git a/reference/opencode-1.15.5/.opencode/themes/mytheme.json b/reference/opencode-1.15.5/.opencode/themes/mytheme.json new file mode 100755 index 0000000..0e6b948 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/themes/mytheme.json @@ -0,0 +1,223 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "nord0": "#2E3440", + "nord1": "#3B4252", + "nord2": "#434C5E", + "nord3": "#4C566A", + "nord4": "#D8DEE9", + "nord5": "#E5E9F0", + "nord6": "#ECEFF4", + "nord7": "#8FBCBB", + "nord8": "#88C0D0", + "nord9": "#81A1C1", + "nord10": "#5E81AC", + "nord11": "#BF616A", + "nord12": "#D08770", + "nord13": "#EBCB8B", + "nord14": "#A3BE8C", + "nord15": "#B48EAD" + }, + "theme": { + "primary": { + "dark": "nord8", + "light": "nord10" + }, + "secondary": { + "dark": "nord9", + "light": "nord9" + }, + "accent": { + "dark": "nord7", + "light": "nord7" + }, + "error": { + "dark": "nord11", + "light": "nord11" + }, + "warning": { + "dark": "nord12", + "light": "nord12" + }, + "success": { + "dark": "nord14", + "light": "nord14" + }, + "info": { + "dark": "nord8", + "light": "nord10" + }, + "text": { + "dark": "nord4", + "light": "nord0" + }, + "textMuted": { + "dark": "nord3", + "light": "nord1" + }, + "background": { + "dark": "nord0", + "light": "nord6" + }, + "backgroundPanel": { + "dark": "nord1", + "light": "nord5" + }, + "backgroundElement": { + "dark": "nord1", + "light": "nord4" + }, + "border": { + "dark": "nord2", + "light": "nord3" + }, + "borderActive": { + "dark": "nord3", + "light": "nord2" + }, + "borderSubtle": { + "dark": "nord2", + "light": "nord3" + }, + "diffAdded": { + "dark": "nord14", + "light": "nord14" + }, + "diffRemoved": { + "dark": "nord11", + "light": "nord11" + }, + "diffContext": { + "dark": "nord3", + "light": "nord3" + }, + "diffHunkHeader": { + "dark": "nord3", + "light": "nord3" + }, + "diffHighlightAdded": { + "dark": "nord14", + "light": "nord14" + }, + "diffHighlightRemoved": { + "dark": "nord11", + "light": "nord11" + }, + "diffAddedBg": { + "dark": "#3B4252", + "light": "#E5E9F0" + }, + "diffRemovedBg": { + "dark": "#3B4252", + "light": "#E5E9F0" + }, + "diffContextBg": { + "dark": "nord1", + "light": "nord5" + }, + "diffLineNumber": { + "dark": "#abafb7", + "light": "textMuted" + }, + "diffAddedLineNumberBg": { + "dark": "#3B4252", + "light": "#E5E9F0" + }, + "diffRemovedLineNumberBg": { + "dark": "#3B4252", + "light": "#E5E9F0" + }, + "markdownText": { + "dark": "nord4", + "light": "nord0" + }, + "markdownHeading": { + "dark": "nord8", + "light": "nord10" + }, + "markdownLink": { + "dark": "nord9", + "light": "nord9" + }, + "markdownLinkText": { + "dark": "nord7", + "light": "nord7" + }, + "markdownCode": { + "dark": "nord14", + "light": "nord14" + }, + "markdownBlockQuote": { + "dark": "nord3", + "light": "nord3" + }, + "markdownEmph": { + "dark": "nord12", + "light": "nord12" + }, + "markdownStrong": { + "dark": "nord13", + "light": "nord13" + }, + "markdownHorizontalRule": { + "dark": "nord3", + "light": "nord3" + }, + "markdownListItem": { + "dark": "nord8", + "light": "nord10" + }, + "markdownListEnumeration": { + "dark": "nord7", + "light": "nord7" + }, + "markdownImage": { + "dark": "nord9", + "light": "nord9" + }, + "markdownImageText": { + "dark": "nord7", + "light": "nord7" + }, + "markdownCodeBlock": { + "dark": "nord4", + "light": "nord0" + }, + "syntaxComment": { + "dark": "nord3", + "light": "nord3" + }, + "syntaxKeyword": { + "dark": "nord9", + "light": "nord9" + }, + "syntaxFunction": { + "dark": "nord8", + "light": "nord8" + }, + "syntaxVariable": { + "dark": "nord7", + "light": "nord7" + }, + "syntaxString": { + "dark": "nord14", + "light": "nord14" + }, + "syntaxNumber": { + "dark": "nord15", + "light": "nord15" + }, + "syntaxType": { + "dark": "nord7", + "light": "nord7" + }, + "syntaxOperator": { + "dark": "nord9", + "light": "nord9" + }, + "syntaxPunctuation": { + "dark": "nord4", + "light": "nord0" + } + } +} diff --git a/reference/opencode-1.15.5/.opencode/tool/github-pr-search.ts b/reference/opencode-1.15.5/.opencode/tool/github-pr-search.ts new file mode 100755 index 0000000..8bc8c55 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/tool/github-pr-search.ts @@ -0,0 +1,64 @@ +/// +import { tool } from "@opencode-ai/plugin" +async function githubFetch(endpoint: string, options: RequestInit = {}) { + const response = await fetch(`https://api.github.com${endpoint}`, { + ...options, + headers: { + Authorization: `Bearer ${process.env.GITHUB_TOKEN}`, + Accept: "application/vnd.github+json", + "Content-Type": "application/json", + ...(options.headers instanceof Headers ? Object.fromEntries(options.headers.entries()) : options.headers), + }, + }) + if (!response.ok) { + throw new Error(`GitHub API error: ${response.status} ${response.statusText}`) + } + return response.json() +} + +interface PR { + title: string + html_url: string +} + +export default tool({ + description: `Use this tool to search GitHub pull requests by title and description. + +This tool searches PRs in the anomalyco/opencode repository and returns LLM-friendly results including: +- PR number and title +- Author +- State (open/closed/merged) +- Labels +- Description snippet + +Use the query parameter to search for keywords that might appear in PR titles or descriptions.`, + args: { + query: tool.schema.string().describe("Search query for PR titles and descriptions"), + limit: tool.schema.number().describe("Maximum number of results to return").default(10), + offset: tool.schema.number().describe("Number of results to skip for pagination").default(0), + }, + async execute(args) { + const owner = "anomalyco" + const repo = "opencode" + + const page = Math.floor(args.offset / args.limit) + 1 + const searchQuery = encodeURIComponent(`${args.query} repo:${owner}/${repo} type:pr state:open`) + const result = await githubFetch( + `/search/issues?q=${searchQuery}&per_page=${args.limit}&page=${page}&sort=updated&order=desc`, + ) + + if (result.total_count === 0) { + return `No PRs found matching "${args.query}"` + } + + const prs = result.items as PR[] + + if (prs.length === 0) { + return `No other PRs found matching "${args.query}"` + } + + const formatted = prs.map((pr) => `${pr.title}\n${pr.html_url}`).join("\n\n") + + return `Found ${result.total_count} PRs (showing ${prs.length}):\n\n${formatted}` + }, +}) diff --git a/reference/opencode-1.15.5/.opencode/tool/github-triage.ts b/reference/opencode-1.15.5/.opencode/tool/github-triage.ts new file mode 100755 index 0000000..35db446 --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/tool/github-triage.ts @@ -0,0 +1,60 @@ +/// +import { tool } from "@opencode-ai/plugin" + +const TEAM = { + tui: ["kommander", "simonklee"], + desktop_web: ["Hona", "Brendonovich"], + core: ["jlongster", "rekram1-node", "nexxeln", "kitlangton"], + inference: ["fwang", "MrMushrooooom"], + windows: ["Hona"], +} as const + +function pick(items: readonly T[]) { + return items[Math.floor(Math.random() * items.length)]! +} + +function getIssueNumber(): number { + const issue = parseInt(process.env.ISSUE_NUMBER ?? "", 10) + if (!issue) throw new Error("ISSUE_NUMBER env var not set") + return issue +} + +async function githubFetch(endpoint: string, options: RequestInit = {}) { + const response = await fetch(`https://api.github.com${endpoint}`, { + ...options, + headers: { + Authorization: `Bearer ${process.env.GITHUB_TOKEN}`, + Accept: "application/vnd.github+json", + "Content-Type": "application/json", + ...(options.headers instanceof Headers ? Object.fromEntries(options.headers.entries()) : options.headers), + }, + }) + if (!response.ok) { + throw new Error(`GitHub API error: ${response.status} ${response.statusText}`) + } + return response.json() +} + +export default tool({ + description: `Use this tool to assign a GitHub issue. + +Provide the team that should own the issue. This tool picks a random assignee from that team and does not apply labels.`, + args: { + team: tool.schema + .enum(Object.keys(TEAM) as [keyof typeof TEAM, ...(keyof typeof TEAM)[]]) + .describe("The owning team"), + }, + async execute(args) { + const issue = getIssueNumber() + const owner = "anomalyco" + const repo = "opencode" + const assignee = pick(TEAM[args.team]) + + await githubFetch(`/repos/${owner}/${repo}/issues/${issue}/assignees`, { + method: "POST", + body: JSON.stringify({ assignees: [assignee] }), + }) + + return `Assigned @${assignee} from ${args.team} to issue #${issue}` + }, +}) diff --git a/reference/opencode-1.15.5/.opencode/tui.json b/reference/opencode-1.15.5/.opencode/tui.json new file mode 100755 index 0000000..b92e58d --- /dev/null +++ b/reference/opencode-1.15.5/.opencode/tui.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://opencode.ai/tui.json", + "plugin": [ + [ + "./plugins/tui-smoke.tsx", + { + "enabled": false, + "label": "workspace", + "keybinds": { + "smoke_modal": "ctrl+alt+m", + "smoke_screen": "ctrl+alt+o", + "smoke_screen_home": "escape,ctrl+shift+h", + "smoke_screen_modal": "ctrl+alt+m", + "smoke_dialog_close": "escape,q" + } + } + ] + ] +} diff --git a/reference/opencode-1.15.5/.oxlintrc.json b/reference/opencode-1.15.5/.oxlintrc.json new file mode 100755 index 0000000..f1ca1ff --- /dev/null +++ b/reference/opencode-1.15.5/.oxlintrc.json @@ -0,0 +1,51 @@ +{ + "$schema": "https://raw.githubusercontent.com/nicolo-ribaudo/oxc-project.github.io/refs/heads/json-schema/src/public/.oxlintrc.schema.json", + "options": { + "typeAware": true + }, + "categories": { + "suspicious": "warn" + }, + "rules": { + "typescript/no-base-to-string": "warn", + // Effect uses `function*` with Effect.gen/Effect.fnUntraced that don't always yield + "require-yield": "off", + // SolidJS uses `let ref: T | undefined` for JSX ref bindings assigned at runtime + "no-unassigned-vars": "off", + // SolidJS tracks reactive deps by reading properties inside createEffect + "no-unused-expressions": "off", + // Intentional control char matching (ANSI escapes, null byte sanitization) + "no-control-regex": "off", + // SST and plugin tools require triple-slash references + "triple-slash-reference": "off", + + // Suspicious category: suppress noisy rules + // Effect's nested function* closures inherently shadow outer scope + "no-shadow": "off", + // Namespace-heavy codebase makes this too noisy + "unicorn/consistent-function-scoping": "off", + // Opinionated — .sort()/.reverse() mutation is fine in this codebase + "unicorn/no-array-sort": "off", + "unicorn/no-array-reverse": "off", + // Not relevant — this isn't a DOM event handler codebase + "unicorn/prefer-add-event-listener": "off", + // Bundler handles module resolution + "unicorn/require-module-specifiers": "off", + // postMessage target origin not relevant for this codebase + "unicorn/require-post-message-target-origin": "off", + // Side-effectful constructors are intentional in some places + "no-new": "off", + + // Type-aware: catch unhandled promises + "typescript/no-floating-promises": "warn", + // Warn when spreading non-plain objects (Headers, class instances, etc.) + "typescript/no-misused-spread": "warn" + }, + "options": { + "typeAware": true + }, + "options": { + "typeAware": true + }, + "ignorePatterns": ["**/node_modules", "**/dist", "**/.build", "**/.sst", "**/*.d.ts", "**/sdk.gen.ts"] +} diff --git a/reference/opencode-1.15.5/.prettierignore b/reference/opencode-1.15.5/.prettierignore new file mode 100755 index 0000000..a2a2776 --- /dev/null +++ b/reference/opencode-1.15.5/.prettierignore @@ -0,0 +1,2 @@ +sst-env.d.ts +packages/desktop/src/bindings.ts diff --git a/reference/opencode-1.15.5/.zed/settings.json b/reference/opencode-1.15.5/.zed/settings.json new file mode 100755 index 0000000..a3a5e1e --- /dev/null +++ b/reference/opencode-1.15.5/.zed/settings.json @@ -0,0 +1,9 @@ +{ + "format_on_save": "on", + "formatter": { + "external": { + "command": "bunx", + "arguments": ["prettier", "--stdin-filepath", "{buffer_path}"] + } + } +}