From a4fa06acbcfa7bdcadf0f5065ff650b79dfc21f6 Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Tue, 20 Oct 2026 09:30:55 +0300 Subject: [PATCH 01/11] chore: ignore paper/support_info and local runtime artifacts Keep main minimal; paper lives on release/paper branch. support_info/ excluded per owner request. Refs N/A - docs minimize setup. --- .gitignore | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.gitignore b/.gitignore index de12bb1..441f16b 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,14 @@ backups/ # Per-user runtime settings, including temporary and corrupt recovery copies backend_api/runtime_settings.json* + +# Paper + support — never on main (paper lives on release/paper branch) +paper/ +support_info/ +*.Zone.Identifier +# Local runtime artifacts +backend_api/runtime_settings.json +backend_api/runtime_settings.json.corrupt +data/*.backup +data/*.db-shm +data/*.db-wal From 1e9daacab666755c149c25a47428830116102afc Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Tue, 20 Oct 2026 09:31:01 +0300 Subject: [PATCH 02/11] docs: add canonical Mermaid sources for C1/C2/C3/sequence/state/deployment Mermaid (.mmd) canonical per Starter; Excalidraw never canonical. Validated flowchart syntax; mermaid-cli render on verify. Refs N/A - Starter arch baseline. --- docs/architecture/c1-system-context.mmd | 18 +++++++++ docs/architecture/c2-containers.mmd | 45 +++++++++++++++++++++ docs/architecture/c3-components.mmd | 53 +++++++++++++++++++++++++ docs/architecture/deployment.mmd | 29 ++++++++++++++ docs/architecture/sequence.mmd | 39 ++++++++++++++++++ docs/architecture/state.mmd | 31 +++++++++++++++ 6 files changed, 215 insertions(+) create mode 100644 docs/architecture/c1-system-context.mmd create mode 100644 docs/architecture/c2-containers.mmd create mode 100644 docs/architecture/c3-components.mmd create mode 100644 docs/architecture/deployment.mmd create mode 100644 docs/architecture/sequence.mmd create mode 100644 docs/architecture/state.mmd diff --git a/docs/architecture/c1-system-context.mmd b/docs/architecture/c1-system-context.mmd new file mode 100644 index 0000000..d8ebe30 --- /dev/null +++ b/docs/architecture/c1-system-context.mmd @@ -0,0 +1,18 @@ +flowchart TB + User["Person
Single local user
Browser operator"] + Browser["Browser
localStorage holds user_id
No server session"] + + subgraph System["Smart Cloud Optimizer
Local single-user system"] + App["Next.js UI + FastAPI API + SQLite
Demo data: aws-SYNTHETIC-001"] + end + + AWS["AWS
Cost Explorer + CloudWatch
via boto3"] + Gemini["Google Gemini
AI recommendations
gemini-2.5-flash"] + + User -->|"Uses
localhost:3000"| Browser + Browser -->|"HTTP JSON, trust-based user_id
CORS: 127.0.0.1:3000, localhost:3000"| App + App -.->|"Real mode: STS + collectors
Stored plaintext keys"| AWS + App -.->|"Advisor prompts
GOOGLE_API_KEY, 4000-char limit"| Gemini + + classDef ext stroke-dasharray:5 5,stroke:#888,color:#444; + class AWS,Gemini ext; diff --git a/docs/architecture/c2-containers.mmd b/docs/architecture/c2-containers.mmd new file mode 100644 index 0000000..dbf485a --- /dev/null +++ b/docs/architecture/c2-containers.mmd @@ -0,0 +1,45 @@ +flowchart LR + Browser["Browser
localStorage user_id
No Next.js middleware guard"] + + subgraph FE["Frontend container
optimizer-frontend :3000"] + NextUI["Next.js UI
Routes, Plotly charts
NEXT_PUBLIC_API_BASE_URL
http://localhost:8000 build-time"] + end + + subgraph BE["Backend container
optimizer-backend :8000
uvicorn backend_api.main:app"] + API["FastAPI routers
trust-based user_id query param
traceparent + X-Request-ID"] + Storage["storage facade
shared data API
get_connection + ensure_schema"] + Optimizer["optimizer
PuLP right-sizing + rules
Replaces recommendations"] + ML["ml_engine
forecaster + data_prep
anomaly + evaluator"] + AImod["ai_module
Gemini advisor
Questionnaire prompt"] + Collector["aws_collector
CollectorRunner + collectors
Background thread sync"] + end + + DB[("SQLite
data/cloud_optimizer.db
WAL, 30 tables")] + Synthetic["data_generation.synthetic
Seed CLI, demo fixtures"] + Streamlit["Streamlit UI :8501
profile full only
Calls Python directly"] + AWS["AWS
Cost Explorer + CloudWatch
boto3"] + Gemini["Google Gemini
gemini-2.5-flash"] + + Browser -->|"HTTP JSON
browser-side"| NextUI + NextUI -->|"HTTP JSON
in-network via host URL"| API + API --> Storage + API --> Optimizer + API --> ML + API --> AImod + API --> Collector + Streamlit --> Storage + Streamlit --> Optimizer + Streamlit --> ML + Streamlit --> AImod + Optimizer --> Storage + ML --> Storage + AImod --> Storage + Collector --> Storage + Storage --> DB + API -.->|"Route-specific direct SQL
forecast, recommendations, connections"| DB + Synthetic -.->|"Demo seed
INSERT OR REPLACE"| Storage + Collector -.->|"Real mode
Stored keys or role"| AWS + AImod -.->|"Advisor calls
GOOGLE_API_KEY"| Gemini + + classDef ext stroke-dasharray:5 5,stroke:#888,color:#444; + class AWS,Gemini,Synthetic ext; diff --git a/docs/architecture/c3-components.mmd b/docs/architecture/c3-components.mmd new file mode 100644 index 0000000..7904bad --- /dev/null +++ b/docs/architecture/c3-components.mmd @@ -0,0 +1,53 @@ +flowchart TB + subgraph API["FastAPI app backend_api/main.py
lifespan: ensure_schema + ensure_user SYNTHETIC-001
CORS localhost:3000 + 127.0.0.1:3000, allow_credentials False
GET /health liveness, GET /ready DB check"] + Auth["auth router
/api/auth login signup demo logout
PBKDF2 verify, no token issued
Per-IP throttle 10 per 300s"] + Conn["connections router
/api/connections test save list delete sync
STS resolve, _SYNCING guard
Thread + CollectorRunner.from_connection"] + Costs["costs router
/api/costs preset range
get_daily_costs + get_service_costs"] + Dash["dashboard router
/api/dashboard/home
daily + service + recs + anomalies
30-day rollup"] + Forecast["forecast router
/api/forecast + /compare
Direct SQLite + ml_engine
forecaster, data_prep, evaluator"] + Recs["recommendations router
/api/recommendations GET + POST generate
Direct SQL read, optimizer.engine.optimize"] + Settings["settings router
/api/settings GET PUT POST reset
runtime_settings.json file
Engines do not read file"] + Onboard["ai-onboarding router
/api/ai-onboarding questions
build-prompt generate
4000-char guard, 502 on Gemini fail
X-API-Token when set"] + end + + subgraph Store["storage facade storage/db.py
Preferred shared interface, not enforced"] + ConnMgmt["Connection helpers
get_connection WAL + busy_timeout
ensure_schema additive only
create_schema destructive fixtures only
register authenticate get_user
add get delete connections
update status + clear_user_data"] + Writes["Write API insert_*
daily service region costs
ec2 rds elasticache ecs lambda
ebs s3 dynamodb nat elb metrics
instance_pricing ai_recs forecasts
recommendations anomalies
No commit inside, caller commits"] + Reads["Read API get_*
daily service costs
metrics by user resource time
recommendations forecasts anomalies
_query_metrics ORDER BY time"] + end + + subgraph Engines["Compute engines"] + Opt["optimizer/engine.py
Inventory + metrics + pricing
LP + rules, replaces user recs"] + MLEng["ml_engine
forecaster data_prep anomaly evaluator
Reads history via storage or SQL"] + AIMod["ai_module/recommender.py
Questionnaire to Gemini prompt
Writes ai_recommendations"] + Coll["aws_collector
CollectorRunner 12 months newest-first
Per-service collectors
clear_user_data then incremental commit"] + end + + DB[("SQLite data/cloud_optimizer.db
users aws_connections
costs inventory metrics pricing results")] + + Auth --> ConnMgmt + Conn --> ConnMgmt + Conn --> Coll + Costs --> Reads + Dash --> Reads + Forecast --> Reads + Forecast -.->|"Direct SQL on storage connection"| DB + Recs --> Reads + Recs --> Opt + Recs -.->|"Direct SQL read"| DB + Conn -.->|"Inline UPDATE access_verified
Direct SELECT by id in sync thread"| DB + Settings -.->|"File only
backend_api/runtime_settings.json"| Settings + Onboard --> AIMod + Opt --> Writes + Opt --> Reads + MLEng --> Reads + MLEng --> Writes + AIMod --> Writes + Coll --> Writes + Coll --> ConnMgmt + ConnMgmt --> DB + Writes --> DB + Reads --> DB + + classDef ext stroke-dasharray:5 5,stroke:#888,color:#444; + class Settings ext; diff --git a/docs/architecture/deployment.mmd b/docs/architecture/deployment.mmd new file mode 100644 index 0000000..038f353 --- /dev/null +++ b/docs/architecture/deployment.mmd @@ -0,0 +1,29 @@ +flowchart TB + Dev["Developer laptop
Docker Compose
smart-cloud-optimizer project"] + Browser["Browser
http://localhost:3000
http://127.0.0.1:3000"] + + subgraph Net["Bridge network optimizer-net
In-network DNS: backend, frontend"] + subgraph BackendC["backend service
image optimizer-backend
python:3.12-slim + uvicorn :8000"] + BE["FastAPI backend_api.main:app
--host 0.0.0.0 --port 8000
lifespan ensure_schema
Health GET /health"] + end + subgraph FrontendC["frontend service
image optimizer-frontend
Next.js :3000"] + FE["Next.js UI
NEXT_PUBLIC_API_BASE_URL build arg
http://localhost:8000 host-reachable
depends_on backend healthy"] + end + subgraph StreamlitC["streamlit service
profile full only
Reuses optimizer-backend image"] + ST["Streamlit dashboard/app.py :8501
--server.address 0.0.0.0
depends_on backend healthy"] + end + end + + Vol[("Named volume optimizer-data
Mounted at /app/data
Seeded from image, appuser uid 10001
SQLite WAL writable
down -v resets demo DB")] + EnvFile[".env optional
DEMO_MODE GOOGLE_API_KEY MODEL
AWS_REGION ACCOUNT_ID
ONBOARDING_API_TOKEN
Base AWS keys for CLI role path"] + SettingsNote["runtime_settings.json
Not in image, not in volume
Lost on container recreate"] + + Browser -->|"127.0.0.1:3000 loopback"| FE + Browser -->|"127.0.0.1:8000 loopback
Docs /docs, health /health"| BE + Browser -->|"127.0.0.1:8501 loopback
full profile only"| ST + FE -.->|"Browser-side fetch only
Never backend service name"| BE + BE -->|"Read write
data/cloud_optimizer.db"| Vol + ST -->|"Shares same DB file"| Vol + EnvFile -.->|"env_file + environment override"| BE + EnvFile -.->|"env_file + environment override"| ST + BE -.->|"Writes, excluded from Git + image"| SettingsNote diff --git a/docs/architecture/sequence.mmd b/docs/architecture/sequence.mmd new file mode 100644 index 0000000..f1d9bad --- /dev/null +++ b/docs/architecture/sequence.mmd @@ -0,0 +1,39 @@ +flowchart TB + Browser["Browser
localStorage user_id
Defaults to aws-SYNTHETIC-001"] + Next["Next.js :3000
Account Settings, dashboard
recommendations, forecast pages"] + API["FastAPI :8000
Routers validate + scope by user_id
Trust-based, no server auth"] + Storage["storage facade
get_connection ensure_schema
insert_* get_* no-commit"] + Collector["CollectorRunner thread
from_connection keys or role
12 months newest-first"] + DB[("SQLite
data/cloud_optimizer.db")] + AWS["AWS via boto3
STS Cost Explorer CloudWatch"] + Gemini["Gemini
Advisor completions"] + + Browser -->|"1 HTTP GET with user_id
Page load or refresh"| Next + Next -->|"2 HTTP JSON user_id query
NEXT_PUBLIC_API_BASE_URL"| API + API -->|"3 ensure_schema
Open WAL connection"| Storage + Storage -->|"4 SELECT scoped by user_id"| DB + DB -->|"5 Rows"| Storage + Storage -->|"6 Dicts"| API + API -->|"7 JSON costs recs forecast"| Next + Next -->|"8 Render Plotly + tables"| Browser + + Browser -->|"A Save keys in Account Settings"| Next + Next -->|"B POST /api/connections
Keys + region + optional account_id"| API + API -->|"C Validate AKIA-ASIA + format
STS resolve when account missing
ensure_user + add_aws_connection"| Storage + Storage -->|"D INSERT aws_connections
Plaintext keys, UNIQUE user account"| DB + + Browser -->|"E POST sync"| Next + Next -->|"F POST /api/connections/id/sync"| API + API -->|"G 409 when _SYNCING or in_progress
Else mark in_progress + 202
Spawn daemon thread"| Collector + Collector -->|"H Fresh thread connection
clear_user_data + collectors
Costs EC2 RDS Lambda S3 DynamoDB
ElastiCache ECS NAT ELB pricing
Commit per month"| Storage + Storage -->|"I INSERT OR REPLACE
Partial data when failure"| DB + Collector -->|"J success or failed + message
last_sync_at now"| DB + Collector -.->|"K Live read when real mode"| AWS + Next -->|"L Poll GET /api/connections
sync_status badge"| API + + Browser -->|"M Build advisor prompt"| Next + Next -->|"N POST /api/ai-onboarding/generate
4000-char guard"| API + API -->|"O Prompt to Gemini
502 when key missing or fail"| Gemini + Gemini -->|"P Recommendation text"| API + API -->|"Q INSERT ai_recommendations"| Storage + Storage -->|"R Commit"| DB diff --git a/docs/architecture/state.mmd b/docs/architecture/state.mmd new file mode 100644 index 0000000..438a28c --- /dev/null +++ b/docs/architecture/state.mmd @@ -0,0 +1,31 @@ +flowchart LR + subgraph SyncStatus["aws_connections.sync_status
CHECK never success failed in_progress
Default never"] + Never["never
Saved, not yet synced
Fresh row default"] + InProg["in_progress
Thread live
_SYNCING holds id"] + Success["success
12-month run committed
last_sync_at set"] + Failed["failed
Exception truncated 500 chars
error_message set, partial data kept"] + Never -->|"POST sync
202 + thread start"| InProg + Success -->|"POST sync again
Full clear + re-collect"| InProg + Failed -->|"POST sync retry
Full clear + re-collect"| InProg + InProg -->|"Runner completes"| Success + InProg -->|"Exception in thread"| Failed + InProg -.->|"Second POST sync
409 sync already in progress"| InProg + end + + subgraph ConnLife["Connection row lifecycle
user_id aws-account_id UNIQUE"] + Test["Test keys
POST /test STS GetCallerIdentity
ok True sets access_verified 1
ok False returns 200 reason"] + Save["Save
POST / save, format checks
STS resolve when account missing
409 on duplicate account"] + List["List
GET user_id scoped
Secrets omitted, key last4 only"] + Delete["Delete
DELETE id + user_id
404 when not owned"] + Test --> Save + Save --> List + List --> Delete + Save --> Never + List --> Never + end + + subgraph Identity["Identity workspace switch"] + Reg["usr identity
POST /api/auth/signup
PBKDF2 stored, no token"] + Ws["aws-account workspace
ensure_user aws-account_id
Web save switches to it
Collector writes into it"] + Reg -->|"Save connection
Owner becomes aws-account"| Ws + end From 319f451cf603dd388f3d77111e46315994a85a1b Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Tue, 20 Oct 2026 09:31:05 +0300 Subject: [PATCH 03/11] docs: add threat-model, data-model generator, ultra-minimal ADR Auth/sensitive fires so threat-model required. data-model generator from storage/db.py + compat proof. ADR 0001 records 10-file decision. Refs N/A - Starter docs baseline. --- docs/architecture/data-model.md | 36 +++-- .../0001-starter-base-with-extra-docs.md | 36 +++++ docs/security/threat-model.md | 123 ++++++++++++++++++ 3 files changed, 187 insertions(+), 8 deletions(-) create mode 100644 docs/decisions/0001-starter-base-with-extra-docs.md create mode 100644 docs/security/threat-model.md diff --git a/docs/architecture/data-model.md b/docs/architecture/data-model.md index 6b14828..3df3b86 100644 --- a/docs/architecture/data-model.md +++ b/docs/architecture/data-model.md @@ -41,15 +41,35 @@ It does not reconcile arbitrary older table definitions. User IDs represent both registered identities (`usr-…`) and AWS workspaces (`aws-`). Web connections belong to the AWS workspace; legacy Streamlit connections belong to the registered owner. Collection writes data -into the AWS workspace. See -[Connection identity and verification](README.md#connection-identity-and-verification). -Demo data uses `aws-SYNTHETIC-001`. Filtering these IDs is not HTTP authorization. +into the AWS workspace. Demo data uses `aws-SYNTHETIC-001`. Filtering these IDs is not HTTP authorization. Passwords use PBKDF2-HMAC-SHA256. Connection access keys and session tokens are stored in plaintext, and storage reads expose those columns to Python callers. -See the [security limitations](../security/README.md). +See `docs/security/threat-model.md`. -For insert/query behavior and commit ownership, see [Storage API](../api/storage.md). -For data replacement during sync or seeding, see [Data pipeline](data-pipeline.md). -Runtime settings are a separate JSON file, described in -[Architecture](README.md#runtime-settings). +## Schema compatibility check + +`ensure_schema()` is additive only: it creates missing tables/indexes and adds +the supported AWS credential columns +(`aws_access_key_id`, `aws_secret_access_key`, `aws_session_token`, +`auth_type`) to older databases. It never drops data or reconciles arbitrary +older table definitions. `create_schema()` drops and recreates all tables and +belongs only in disposable fixtures. + +Recorded proof (2026-10-20, `main`): + +```bash +python scripts/verify_schema_restore.py +``` + +- Fresh `:memory:` init: 30 tables; `aws_connections` carries all 16 columns. +- Temp copy of `data/cloud_optimizer.db` (old schema without key columns): + migration adds exactly the 4 supported columns, preserves both users + (`aws-SYNTHETIC-001`, `usr-89386f1d428a`), `integrity_check` ok. +- Backup/restore round-trip via the SQLite backup API on temp paths outside + the repo: `integrity_check` ok, demo workspace present with 365 daily rows. + +Re-run the script after any schema or migration change. + +For insert/query behavior see `storage/db.py` and `storage/__init__.py`. +Runtime settings are a separate JSON file `backend_api/runtime_settings.json`, lost on container recreation. diff --git a/docs/decisions/0001-starter-base-with-extra-docs.md b/docs/decisions/0001-starter-base-with-extra-docs.md new file mode 100644 index 0000000..6cd4f52 --- /dev/null +++ b/docs/decisions/0001-starter-base-with-extra-docs.md @@ -0,0 +1,36 @@ +# ADR 0001: Ultra-minimal docs — root README + 9 required files + +- Status: Accepted +- Date: 2026-10-20 +- Branch: `main` +- Supersedes: Starter-base draft with engines/pipeline/local-runtime companions + +## Context + +`main` is a substantive single-user localhost system (persistent SQLite, Auth/sensitive firing, no prod). Starter requires for substantive: `README.md`, 6x `.mmd` + `data-model.md`, `threat-model.md` (Auth fires), verbs, `verify.yml`. Operations `runbook/slo/recovery` absent until prod. Template wants ~6 pages heuristic, merge over add, absent over stub. + +Previous detail pages (`engines/`, `data-pipeline.md`, `local-runtime.md`, `api/`, `reference/configuration.md`, `development/`, `security/README.md`, `arch/README.md`, `report.pdf`) duplicated code facts and inflated review burden. Root README can carry run/verify/ops as pointers with code canonical. + +## Decision + +Keep 10 versioned docs only: + +- `README.md` — pointer + run + verify + index, code links only, no pastes +- `docs/architecture/c1-system-context.mmd`, `c2-containers.mmd`, `c3-components.mmd`, `sequence.mmd`, `state.mmd`, `deployment.mmd` +- `docs/architecture/data-model.md` — generator from `storage/db.py`, compat proof +- `docs/security/threat-model.md` — Auth fires +- This ADR + +Delete: `docs/README.md`, `arch/README.md`, `api/http.md`, `api/storage.md`, `data-pipeline.md`, `engines/*`, `development/*`, `operations/local-runtime.md`, `runbook.md` (N/A pre-prod), `reference/configuration.md`, `security/README.md`, `project-report.pdf` (release asset). Fold essential facts into root README; code is canonical for schemas, contracts, config, identity, sync order, LP formulation. + +## Consequences + +- One home per fact: intent in root, diagrams in `.mmd`, schemas in `storage/db.py`, decisions here. +- Fewer files to rot; docs PRs touch root or 1 `.mmd`. +- Risk: root grows; mitigate by links not copies, 150-line cap. Engine LP detail lives in `optimizer/engine.py`, sync order in `aws_collector/runner.py`, identity in `backend_api/routers/connections.py`. + +## Verification + +- `git ls-files docs/` = 9 files above. +- `python3 scripts/check_no_pasted_diagrams.py` green (no fences). +- `python3 scripts/check_secrets.py` + `verify_schema_restore.py` green. diff --git a/docs/security/threat-model.md b/docs/security/threat-model.md new file mode 100644 index 0000000..e0a34fb --- /dev/null +++ b/docs/security/threat-model.md @@ -0,0 +1,123 @@ +# Threat model — Smart Cloud Optimizer (`main`) + +Scope: single-user localhost demo with synthetic data. This is a tailoring +record for the implemented trust limits, not a production security claim. +See [security boundaries](README.md) and [vulnerability reporting](../../SECURITY.md). + +## Assets + +- AWS access keys / session tokens submitted via the connection form and + persisted in SQLite (`aws_connections`). +- Account identifiers: AWS account id, IAM role ARN, `user_id` values + (`usr-…`, `aws-`). +- Personal data in the committed fixture: `data/cloud_optimizer.db` ships a + real personal email, a real AWS account id, and a real IAM role ARN + alongside the synthetic `aws-SYNTHETIC-001` workspace. +- Password verifiers: PBKDF2-HMAC-SHA256 `salt:hash` in `users.password_hash`. +- Cost / inventory / metric history, optimizer and forecast output. +- Gemini prompts and generated advice; `.env` values (`GOOGLE_API_KEY`, + `ONBOARDING_API_TOKEN`). + +## Trust boundaries + +- Browser `localStorage` holds session identity with no server session; + any `/dashboard` route is reachable and falls back to the synthetic demo user. +- Every data and settings HTTP endpoint trusts a client-supplied `user_id` + query parameter with no server-side authorization check + (`backend_api/routers/auth.py` issues no token; `dashboard.py`, `costs.py`, + `connections.py`, `forecast.py`, `recommendations.py`, `settings.py` + filter by the supplied id only). +- SQLite file `data/cloud_optimizer.db` is the trust store; `storage/db.py` + is the preferred accessor but some routes issue direct SQL. +- Loopback binding (`127.0.0.1`) limits network reachability but does not + authenticate callers. +- External: AWS via boto3 with stored credentials; Gemini via questionnaire + prompt. Generated advice is unvalidated. +- Build / runtime: `.env` and `backend_api/runtime_settings.json` are excluded + from Git and the image context, but the committed demo DB is intentionally + included in the backend image. Backups inherit DB contents and must stay out + of Git. + +## Threats (in scope for this deployment model) + +- Any local client can read or mutate another user's rows by supplying their + `user_id` (cross-workspace read/write, connection delete, sync trigger). +- Stolen DB file, backup, or image layer exposes plaintext AWS keys (when + key-based connections exist), account ids, role ARNs, emails, and password + hashes (offline brute force is the only barrier; PBKDF2 slows but does not + prevent it). +- Committed PII / account identifiers in `data/cloud_optimizer.db` leak via + clone, fork, image, or log redaction failure. +- Credential capture via logs, diagnostics, or AI prompts (questionnaire text + sent to Gemini; backend JSON logs redact secrets/PII but callers can still + paste them into prompts or public issues). +- Unverified save: `POST /api/connections` with a supplied `aws_account_id` + stores without re-verifying keys against that account; `GET /test` and save + are separate operations. +- Login enumeration / brute force is only blunted by an in-process per-IP + throttle (10 failures / 300 s → 429); no distributed or durable lockout. +- Sync race / stale `in_progress` blocks retry; interrupted daemon thread + leaves persisted status without automatic resume. + +Out of scope (explicit non-goals): multi-tenant isolation, public hosting, +encryption at rest, token/session auth, server-side authorization, durable +rate limiting, and automatic secret rotation. Do not deploy this build +multi-user or off-localhost without fixing those first. + +## Controls (implemented) + +- Passwords: PBKDF2-HMAC-SHA256, 260k iterations, 16-byte salt, constant-time + compare; generic auth errors to avoid enumeration. +- Throttle: in-process per-IP 10/300 s on `/api/auth/*`. +- Input validation before AWS calls: `AKIA|ASIA` + 16 chars, 12-digit account + id; STS-derived account id when none is supplied. +- Secret minimization in API: `ConnectionOut` omits secret, token, + `external_id`, `iam_role_arn`; only last 4 of the access key id is exposed. + Sync reads credentials server-side from the stored row. +- AI guard: prompt > 4000 chars → 400; Gemini failure → 502; optional + `ONBOARDING_API_TOKEN` (`X-API-Token`) gate, off by default for demo. +- Transport scope: Compose and manual runs bind to `127.0.0.1`; CORS allows + only the two local port-3000 origins. +- Logging: single-line JSON to stdout with `timestamp`/`level`/`service`/ + `msg`/`trace` (W3C `traceparent` where propagated); secrets/PII redaction + (`[REDACTED]`) covered by `tests/test_service_standards.py`. +- Hygiene: `.gitignore` excludes `.env`, runtime settings, `data/real/`, + backups, WAL/SHM sidecars; `git diff --check`, `compileall`, frontend lint, + and `check:secrets` (working tree + full history) run in CI with push + protection via the pre-push hook. + +## Accepted risks (tailoring) + +- Auth remains trust-based (`user_id` query param, no token). Accepted only + for single-user localhost with synthetic data. +- AWS keys persist in plaintext in SQLite when key-based connections are + used (`storage/db.py` `aws_access_key_id` / `aws_secret_access_key` / + `aws_session_token`, with inline `SECURITY` comments). Accepted only for + the localhost demo with no machine-side key store; must be encrypted before + any shared or public use. +- Committed `data/cloud_optimizer.db` contains real PII / account identifiers + in plaintext. Accepted as a known fixture limitation; do not add more real + account data, do not distribute rebuilt images containing real data, and + keep backups and diagnostics redacted and out of Git. + +## Sensitive handling rules + +- Never commit `.env`, `runtime_settings.json`, backups, WAL/SHM files, or + real AWS data under `data/real/`. +- Never paste secrets, account ids, emails, prompts, or exploit details into + public issues; use the private route in `SECURITY.md` (ack in 2 days, + status in 7 days, monthly review). +- When sharing diagnostics, redact identifiers, credentials, prompts, and + personal data; query `aws_connections` by id columns only, never dump + credential columns. +- Schema changes stay additive: `ensure_schema()` creates missing objects and + adds supported credential columns; `create_schema()` (drop/recreate) belongs + only in disposable fixtures. See `docs/architecture/data-model.md` and + `storage/db.py`. + +## Review triggers + +Recheck this model whenever identity, connection storage, browser state, +external prompts, network exposure, persistence, or the committed fixture +changes. Secret scan (`check:secrets`), schema compat, and restore proof must +stay green; see `README.md` Verify and `pyproject.toml [tool.poe.tasks]`. From af2b2ea700abd45f4d9cf6f707c2ba616019ea33 Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Tue, 20 Oct 2026 09:31:10 +0300 Subject: [PATCH 04/11] docs: rewrite root README as pointer-run-verify-index Starter pointer-only; code canonical for schemas/contracts/config. Index links .mmd/data-model/threat-model/ADR only. No pastes. Refs N/A - ultra-minimal index. --- README.md | 154 +++++++++++++++++++++++++++--------------------------- 1 file changed, 77 insertions(+), 77 deletions(-) diff --git a/README.md b/README.md index 7d727e2..124bb6a 100644 --- a/README.md +++ b/README.md @@ -1,113 +1,113 @@ # Smart Cloud Optimizer (OptiCloud) -An AWS cost-analysis and recommendation application: a Next.js dashboard calls a -FastAPI backend for collection, forecasting, anomaly detection, and optimization. -It recommends changes; it does not apply them to AWS. +Next.js UI + FastAPI backend for AWS cost collection, forecasting, anomaly detection, and optimization. Recommends changes; never applies them. -**Use this build on a single-user local machine with synthetic data.** The HTTP -API trusts client-supplied identities and stored AWS keys are plaintext. Read the -[security boundaries](docs/security/README.md) before connecting an account. +App work targets **`main`**. Default `release/ccpe-v1.0` is a separate paper artifact: +`git clone --branch main https://github.com/G1DO/smart-cloud-optimizer.git` -Application development targets **`main`**. GitHub's default -`release/ccpe-v1.0` is a separate paper software artifact; clone `main` explicitly: - -```bash -git clone --branch main https://github.com/G1DO/smart-cloud-optimizer.git -cd smart-cloud-optimizer -``` - -Start with the [technical documentation](docs/README.md), -[development guide](docs/development/README.md), or [project report (PDF)](docs/project-report.pdf). +> Single-user localhost + synthetic data only. +> HTTP trusts client `user_id`; AWS keys stored plaintext in SQLite. +> Read `docs/security/threat-model.md` before connecting a real account. ## Prerequisites -Python 3.12+, Node.js 20.9+, npm, and Git for manual setup; Docker with Compose -for the container setup. Python dependencies are in [requirements.txt](requirements.txt), -and frontend dependencies/scripts in [package.json](frontend/package.json) and -its committed lockfile. The Python image uses 3.12; the frontend uses Next.js 16, -React 19, and TypeScript. - -## Quick start - -### Option A — Docker (simplest) +Python 3.12+, Node 20.9+, npm, Git. Docker + Compose for containers. +Python pins: `requirements.txt`. Frontend pins: `frontend/package.json` + `frontend/package-lock.json`. +Templates: `.env.example`, `.env.docker.example`, `frontend/.env.local.example`. -Runs the stack with the demo SQLite DB baked into the backend image. Published -ports bind to `127.0.0.1`. Exploring stored demo data needs no external credentials; -Gemini-backed recommendations require an API key. +## Run — Docker ```bash docker compose up --build +# docker compose --profile full up --build # adds legacy Streamlit on :8501 ``` -| Service | URL | -| --- | --- | -| Frontend | http://localhost:3000 | -| Backend API docs | http://localhost:8000/docs | -| Backend health | http://localhost:8000/health | - -Add the optional legacy Streamlit dashboard (the `full` profile reuses the backend image): +Frontend http://localhost:3000 · API docs http://localhost:8000/docs · liveness http://localhost:8000/health · readiness http://localhost:8000/ready. +DB in named volume `optimizer-data`; `down -v` destroys it. `NEXT_PUBLIC_API_BASE_URL` is a frontend build arg, must be host-reachable (`http://localhost:8000`). ```bash -docker compose --profile full up --build # adds Streamlit on http://localhost:8501 +cp .env.docker.example .env # only for Gemini / real AWS ``` -To set env vars (e.g. `GOOGLE_API_KEY`), copy the template and edit it: +## Run — manual ```bash -cp .env.docker.example .env +python3 -m venv venv && source venv/bin/activate +pip install -r requirements.txt +cp .env.example .env # optional +uvicorn backend_api.main:app --reload --host 127.0.0.1 --port 8000 +cd frontend && npm ci && cp .env.local.example .env.local && npm run dev -- --hostname 127.0.0.1 ``` -Notes: -- The DB lives in a **named volume** `optimizer-data` (not a host bind mount). The destructive `docker compose down -v` removes the database volume; the next start seeds it again from the image. Runtime settings have a separate lifetime described in [local operations](docs/operations/local-runtime.md#runtime-settings-recovery). -- `NEXT_PUBLIC_API_BASE_URL` is a frontend **build** arg (Next.js inlines it into the browser bundle), so it must be host-reachable (`http://localhost:8000`) — never the in-network service name `backend`. - -### Option B — Manual (backend + frontend) +## First use -Commands below are for **macOS/Linux**. On **Windows PowerShell**, swap `source venv/bin/activate` for `.\venv\Scripts\Activate.ps1` and `cp` for `Copy-Item`. +Open http://localhost:3000 → Try Demo Mode (`aws-SYNTHETIC-001`). New users start empty. +Connections: Test and Save are separate — save with supplied account ID does not re-verify keys; sync can still fail. Sync clears prior account data then collects newest-month-first incrementally. Forecasts via UI/API. Optimizer: run on disposable DB copy, see `optimizer/engine.py`. -**1. Backend** (from the repo root): +## Verify ```bash -python3 -m venv venv -source venv/bin/activate -pip install -r requirements.txt -cp .env.example .env # optional: only needed for AI / real AWS -uvicorn backend_api.main:app --reload --host 127.0.0.1 --port 8000 +python3 -m pip check +python3 -m pytest tests/ -v +git diff --check +python3 scripts/check_secrets.py +python3 scripts/verify_schema_restore.py +python3 scripts/check_no_placeholders.py +python3 scripts/check_no_pasted_diagrams.py +cd frontend && npm ci && npm run lint && npm run build ``` -Backend health: http://127.0.0.1:8000/health · API docs: http://127.0.0.1:8000/docs +`/health` = liveness cheap. `/ready` = readiness with DB check (503 when down). +OpenAPI without server: `python3 -c "from backend_api.main import app; import json; print(json.dumps(app.openapi(),indent=2))"`. +Same checks run in CI `verify` job, required for merge. Verbs: `pyproject.toml [tool.poe.tasks]`, `Makefile`. -**2. Frontend** (second terminal): +## Security -```bash -cd frontend -npm ci -cp .env.local.example .env.local -npm run dev -- --hostname 127.0.0.1 # http://localhost:3000 -``` +- No tokens: login verifies PBKDF2 hash, issues nothing; all data routes trust `user_id` query — localhost only. +- AWS keys plaintext in `storage/db.py`; API exposes last 4 only; save ≠ verified. +- Tracked `data/cloud_optimizer.db` contains real PII + account ID/ARN + synthetic demo — add nothing real, distribute no rebuilt images with real data. +- AI: prompt >4000 → 400, Gemini fail → 502, optional `ONBOARDING_API_TOKEN`; advice unvalidated. +- Browser identity `localStorage` only; settings `backend_api/runtime_settings.json` unwired to engines, lost on recreate. Reports: `SECURITY.md` private only. -> Run Python commands from the repo root with the venv active — `cloud_optimizer` and the other application packages resolve from there. +## Architecture -## First use +Code is canonical. Diagrams: Mermaid `.mmd` validated with mermaid-cli, Excalidraw never canonical. + +| View | Source | +|---|---| +| Context | `docs/architecture/c1-system-context.mmd` | +| Containers | `docs/architecture/c2-containers.mmd` | +| Components | `docs/architecture/c3-components.mmd` | +| Sequence | `docs/architecture/sequence.mmd` | +| State | `docs/architecture/state.mmd` | +| Deployment | `docs/architecture/deployment.mmd` | +| Data model | `docs/architecture/data-model.md` — generator from `storage/db.py`, additive `ensure_schema`, compat proof via `scripts/verify_schema_restore.py` | + +`storage/` is preferred facade but forecast/recommendation/connection routes also issue direct SQL. Identity: `usr-…` on register, web save switches to `aws-`; legacy Streamlit stays on `usr-…`. + +Active env: `GOOGLE_API_KEY`, `GOOGLE_MODEL`, `ONBOARDING_API_TOKEN`, `NEXT_PUBLIC_API_BASE_URL`, `AWS_DEFAULT_REGION`, `DEMO_MODE`. See `cloud_optimizer/config.py`, `aws_collector/config.py`, `docker-compose.yml`. + +## Operations + +Single-user localhost. No prod, no SLO, no on-call. `docs/operations/runbook.md` absent until prod. -Open http://localhost:3000 and choose **Try Demo Mode** to view the existing -`aws-SYNTHETIC-001` workspace. New registrations begin with empty dashboards. -**Account Settings → Connections** can test/save AWS keys and start a sync; -[testing, saving, and workspace selection are distinct](docs/architecture/README.md#connection-identity-and-verification). -Collection replaces prior account data incrementally, so read the -[data pipeline](docs/architecture/data-pipeline.md) before syncing. +| Symptom | Check | +|---|---| +| Empty dashboard | Workspace selected? Demo data only in `aws-SYNTHETIC-001` | +| Sync 409 | Stale `in_progress` — stop writers, set `failed` via `storage.update_aws_connection_status`, restart, retry | +| AI 502 / settings no-op | Key set? Logs? Settings are prefs, not engine inputs | -Forecasting runs from the Forecasts page or HTTP API; the ML CLI is a placeholder. -Use the [optimizer guide](docs/architecture/engines/optimizer.md#usage) for a -command-line experiment on a disposable database copy. +Preserve: SQLite backup API to temp dir outside repo, `integrity_check` ok, keep WAL/SHM with DB, never commit snapshots. Restore: stop writers, preserve current + sidecars, restore verified snapshot, verify workspace/dates. `down -v` destroys compose volume — preserve first. -## Develop and maintain +Engines: `optimizer/engine.py` (PuLP + rules, replaces per-user recs), `ml_engine/forecaster.py` (30d default, 1–180d, null-on-fail), `ai_module/recommender.py` (questionnaire → Gemini, router does not persist). Collection: `aws_collector/runner.py` newest-first. -- [Development checks](docs/development/README.md): Python tests, frontend lint/build, and contract verification. -- [Architecture](docs/architecture/README.md): components, identity, persistence, and engine boundaries. -- [API contracts](docs/api/http.md) and [configuration](docs/reference/configuration.md): generated reference and active inputs. -- [Local operations](docs/operations/local-runtime.md): diagnostics, data preservation, and recovery. -- [Security](docs/security/README.md) and [vulnerability reporting](SECURITY.md): current trust limits and reporting route. +## Index -Keep runtime data, credentials, and `.env` files out of commits. Environment -examples and dependency manifests/lockfiles are tracked for reproducible setup. +| Need | Go here, not a copy | +|---|---| +| Run/verify | This file; `pyproject.toml`, `Makefile`, `.github/workflows/verify.yml` | +| HTTP | `backend_api/main.py`, `backend_api/routers/`, live `/docs` | +| Storage/schema | `storage/db.py`, `storage/__init__.py`, `docs/architecture/data-model.md` | +| Decisions | `docs/decisions/` | +| Security | `docs/security/threat-model.md`, `SECURITY.md`, `CODEOWNERS` | +| Changes | `CONTRIBUTING.md`, `.github/pull_request_template.md` | From 03d207e09b10407aaac568916b70f3cd999f68cb Mon Sep 17 00:00:00 2001 From: Ibrahim Date: Tue, 20 Oct 2026 09:31:10 +0300 Subject: [PATCH 05/11] docs: remove obsolete companions, report PDF now release asset Folded into root README; code canonical. runbook absent pre-prod. report.pdf stays on release. Refs N/A - ultra-minimal fold. --- docs/README.md | 22 --- docs/api/http.md | 48 ----- docs/api/storage.md | 125 ------------ docs/architecture/README.md | 151 --------------- docs/architecture/data-pipeline.md | 63 ------ docs/architecture/engines/ai-advisor.md | 68 ------- docs/architecture/engines/forecasting.md | 48 ----- docs/architecture/engines/optimizer.md | 232 ----------------------- docs/development/README.md | 74 -------- docs/development/streamlit.md | 75 -------- docs/operations/local-runtime.md | 129 ------------- docs/project-report.pdf | Bin 1256267 -> 0 bytes docs/reference/configuration.md | 166 ---------------- docs/security/README.md | 30 --- 14 files changed, 1231 deletions(-) delete mode 100644 docs/README.md delete mode 100644 docs/api/http.md delete mode 100644 docs/api/storage.md delete mode 100644 docs/architecture/README.md delete mode 100644 docs/architecture/data-pipeline.md delete mode 100644 docs/architecture/engines/ai-advisor.md delete mode 100644 docs/architecture/engines/forecasting.md delete mode 100644 docs/architecture/engines/optimizer.md delete mode 100644 docs/development/README.md delete mode 100644 docs/development/streamlit.md delete mode 100644 docs/operations/local-runtime.md delete mode 100644 docs/project-report.pdf delete mode 100644 docs/reference/configuration.md delete mode 100644 docs/security/README.md diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index ce1c1d0..0000000 --- a/docs/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Technical documentation - -These guides describe the implemented application on **`main`**. -Start with the [README](../README.md#quick-start) for installation and first use, -or the [development guide](development/README.md) for checks and contribution -conventions. - -| Responsibility | Start here | -| --- | --- | -| Architecture | [System boundaries and source map](architecture/README.md), [data pipeline](architecture/data-pipeline.md), [data model](architecture/data-model.md) | -| Engine behavior | [Forecasting](architecture/engines/forecasting.md), [optimizer](architecture/engines/optimizer.md), [AI advisor](architecture/engines/ai-advisor.md) | -| Development | [Checks and conventions](development/README.md), [legacy Streamlit UI](development/streamlit.md) | -| API / contracts | [Generated HTTP reference and compatibility](api/http.md), [storage contracts and signatures](api/storage.md) | -| Operations | [Local diagnostics, persistence, and recovery](operations/local-runtime.md) | -| Security | [Trust boundaries and data handling](security/README.md), [vulnerability reporting](../SECURITY.md) | -| Reference | [Environment variables and active configuration](reference/configuration.md) | - -## Project report - -[Project report (PDF)](project-report.pdf) is exported from the latest corrected -graduation report. It records the project at the time it was written; use the -guides above for current application behavior. diff --git a/docs/api/http.md b/docs/api/http.md deleted file mode 100644 index 54745f3..0000000 --- a/docs/api/http.md +++ /dev/null @@ -1,48 +0,0 @@ -# HTTP contracts - -The [FastAPI app](../../backend_api/main.py) and its -[routers](../../backend_api/routers/) own endpoint and Pydantic model definitions. -With the backend running, use http://localhost:8000/docs for interactive reference -and http://localhost:8000/openapi.json for the machine-readable schema. - -Generate the same schema without starting the server or running its database -initialization, from the repository root with Python dependencies installed: - -```bash -python - <<'PYTHON' -import json -from backend_api.main import app -print(json.dumps(app.openapi(), indent=2)) -PYTHON -``` - -Do not maintain a handwritten endpoint/schema inventory alongside this output. -Generated schemas describe input/output shapes; the important behavioral -contracts are linked below. - -## Behavioral contracts - -- [Identity and connections](../architecture/README.md#connection-identity-and-verification): registration identity, AWS workspace selection, and separate test/save behavior. -- [Security boundaries](../security/README.md): client-supplied user IDs, optional onboarding token, and plaintext credentials. -- [Data pipeline](../architecture/data-pipeline.md): sync is asynchronous and replaces prior account data incrementally. -- [Forecasting](../architecture/engines/forecasting.md): history requirements, caching, and comparison versus offline accuracy evaluation. -- [Optimization](../architecture/engines/optimizer.md): replacement writes, budget scope, and recommendation limits. -- [AI advisor](../architecture/engines/ai-advisor.md): failure responses, prompt guard, and persistence differences. -- [Runtime settings](../architecture/README.md#runtime-settings): saved preferences are not active engine inputs. - -`GET /health` returns a static `{"ok": true}` response. It establishes HTTP -liveness, not database integrity or AWS/Gemini readiness. Use the -[operations guide](../operations/local-runtime.md) for diagnosis. - -## Compatibility and verification - -The browser UI and API are developed together on `main`. Routes use `/api/` -without a version segment; there is no published external-client compatibility -or deprecation policy. Do not infer a stable third-party contract from OpenAPI's -default version field. - -When changing request/response behavior, update the affected frontend consumers, -[contract tests](../../tests/test_frontend_backend_contract.py), and behavioral -docs in the same PR. Describe consumer impact and any migration needed for saved -state; exercise the affected page with the backend running. The -[development guide](../development/README.md) owns check commands. diff --git a/docs/api/storage.md b/docs/api/storage.md deleted file mode 100644 index 2480b57..0000000 --- a/docs/api/storage.md +++ /dev/null @@ -1,125 +0,0 @@ -# Storage API Reference - -The `storage` package exports the shared SQLite interface from -[storage/__init__.py](../../storage/__init__.py). Implementations, accepted row fields, -and SQL live in [storage/db.py](../../storage/db.py). Some HTTP routes also issue -SQL directly; see [Architecture](../architecture/README.md). - -## Current signatures - -Generate the public function reference from the checked-out code: - -```bash -python - <<'PYTHON' -import inspect -import storage - -for name in storage.__all__: - value = getattr(storage, name) - if inspect.isfunction(value): - print(f"{name}{inspect.signature(value)}") -PYTHON -``` - -For a function's field requirements and behavior, use, for example, -`python -m pydoc storage.insert_ec2_instances`. Get exact table keys and types -from the [generated schema](../architecture/data-model.md). - -Filters are function-specific: inventory reads accept only `conn` and `user_id`; -cost queries use `start_date`/`end_date`; EC2/RDS metrics use `start`/`end`. -Other metric getters accept a resource filter but no time range. -ElastiCache uses `cache_cluster_id`, ECS uses `service_name`, and Lambda metrics -use `date`. Pricing reads accept `service` and `instance_type`, without a user ID. -Do not assume every getter accepts arbitrary keyword filters. - -## Transaction contract - -- Data `insert_*` functions return an inserted-row count and do not commit. - Data `get_*` functions return lists of dictionaries and do not commit. -- Commit after batching data inserts; roll back on failure and close the - connection when finished. SQLite's connection context manager does not close it. -- Schema, user, authentication/profile, and AWS connection mutation helpers - manage their own commits. These calls are not part of a caller-controlled - batch of data inserts. -- `ensure_schema()` creates missing objects and applies supported additive - credential migrations. `create_schema()` drops and recreates all tables; - use it only for disposable fixtures. -- `clear_user_data()` commits deletion of a user's data/results while retaining - `users`, `aws_connections`, and global `instance_pricing`. - -`get_connection(db_path=None)` defaults to the configured demo DB, enables WAL -and foreign keys, and sets a 10-second busy timeout. Many inventory/metric/cost -inserts use `INSERT OR REPLACE`; result inserts have their own semantics in the -source. Sync and optimization can delete previous results; see -[Data pipeline](../architecture/data-pipeline.md) and [Optimizer](../architecture/engines/optimizer.md#usage). - -## Disposable example - -This example creates a temporary database, inserts cost data, reads it back, -and closes the connection without touching the tracked database: - -```python -from contextlib import closing -from pathlib import Path -from tempfile import TemporaryDirectory -from storage import ( - get_connection, ensure_schema, ensure_user, - insert_daily_costs, get_daily_costs, -) - -with TemporaryDirectory() as directory: - with closing(get_connection(Path(directory) / "example.db")) as conn: - ensure_schema(conn) - user_id = ensure_user(conn, "EXAMPLE-001") - insert_daily_costs(conn, user_id, [ - {"date": "2024-01-15", "total_cost": 125.50}, - ]) - conn.commit() - print(get_daily_costs( - conn, user_id, start_date="2024-01-01", end_date="2024-01-31", - )) -``` - -## Identity and credentials - -`register_user()` creates a `usr-` identity; `ensure_user()` creates an -`aws-` workspace. Connection rows link the caller-supplied owner to -an AWS account; the web and Streamlit flows choose different owners. See -[Connection identity and verification](../architecture/README.md#connection-identity-and-verification). -`get_aws_connections()` returns stored credentials to Python callers; HTTP -routes must remove secrets before returning responses. User-scoped queries -filter the supplied ID but do not authenticate it. See the -[security notes](../security/README.md). - -`INSTANCE_SPECS` and `SERVICE_NAME_MAP` are also exported by `storage`; their -canonical definitions are in [cloud_optimizer/config.py](../../cloud_optimizer/config.py). - -## Loading data for analysis - -[`ml_engine.data_prep`](../../ml_engine/data_prep.py) converts storage results into -DataFrames. For example, read cost data without running schema initialization or -writing the committed fixture: - -```python -import sqlite3 -from contextlib import closing -from pathlib import Path -from ml_engine.data_prep import load_cost_data - -path = Path("data/cloud_optimizer.db").resolve() -with closing(sqlite3.connect(path.as_uri() + "?mode=ro", uri=True)) as conn: - conn.row_factory = sqlite3.Row - frame = load_cost_data(conn, user_id="aws-SYNTHETIC-001") -print(frame[["date", "total_cost"]].head()) -``` - -A schema column does not prove a metric was observed. Check the -[collectors](../../aws_collector/collectors/) and mappings: the current EC2 and RDS -collectors do not fetch memory utilization. Numeric coercion may turn missing or -invalid inputs into zero; other fields remain NULL. Interpret availability before -using these values for sizing or model training. - -Service totals are not resource-level costs. Joining `service_costs` to inventory -by `user_id` alone multiplies rows and does not attribute spend to resources. -See [forecasting evaluation](../architecture/engines/forecasting.md#reproducible-evaluation) -for training/evaluation boundaries. diff --git a/docs/architecture/README.md b/docs/architecture/README.md deleted file mode 100644 index 28d8d27..0000000 --- a/docs/architecture/README.md +++ /dev/null @@ -1,151 +0,0 @@ -# Architecture - -The application on `main` uses a TypeScript/Next.js browser UI and a Python -FastAPI backend. The optional Streamlit UI calls the Python engines directly. - -```mermaid -flowchart LR - Browser["Browser"] - NextUI["Next.js UI
(port 3000)"] - - subgraph BE["FastAPI backend (port 8000)"] - API["FastAPI routers
(trust-based user_id)"] - Storage["storage facade
(shared data API)"] - Optimizer["optimizer
(PuLP right-sizing + rules)"] - ML["ml_engine
(forecasts / anomalies)"] - AImod["ai_module
(Gemini advisor)"] - Collector["aws_collector
(boto3 pipeline)"] - end - - DB[("SQLite DB
data/cloud_optimizer.db")] - Synthetic["data_generation.synthetic
(demo seed)"] - AWS["AWS
(Cost Explorer / CloudWatch via boto3)"] - Gemini["Google Gemini
(AI recommendations)"] - - Browser --> NextUI - NextUI -->|"HTTP / JSON"| API - API --> Storage - API --> Optimizer - API --> ML - API --> AImod - API --> Collector - Optimizer --> Storage - ML --> Storage - AImod --> Storage - Collector --> Storage - Storage --> DB - API -->|"route-specific SQL"| DB - - Collector -. "real mode" .-> AWS - AImod -. "AI calls" .-> Gemini - Synthetic -. "demo mode" .-> Storage - - classDef ext stroke-dasharray:5 5,stroke:#888,color:#444; - class AWS,Gemini,Synthetic ext; -``` - -## Boundaries - -| Component | Responsibility | -| --- | --- | -| [`frontend/`](../../frontend/) | Next.js routes, client state, Plotly charts, HTTP calls to the backend | -| [`backend_api/`](../../backend_api/) | FastAPI routes for auth, connections/sync, costs, dashboard, forecasting, recommendations, settings, and AI onboarding | -| [`cloud_optimizer/`](../../cloud_optimizer/) | Shared Python configuration, paths, root `.env` loading | -| [`storage/`](../../storage/) | SQLite schema, migrations, authentication helpers, connection and data APIs | -| [`aws_collector/`](../../aws_collector/) | boto3 clients and per-service collectors for live AWS data | -| [`data_generation/`](../../data_generation/) | Synthetic fixtures and a CLI that seeds SQLite | -| [`ml_engine/`](../../ml_engine/) | Time-series preparation, forecasting, anomaly detection, evaluation | -| [`optimizer/`](../../optimizer/) | Inventory/metrics/pricing-based LP and rule recommendations | -| [`ai_module/`](../../ai_module/) | Questionnaire-based recommendations using Gemini | -| [`dashboard/`](../../dashboard/) | Optional legacy Streamlit application | - -Use the running backend's generated http://localhost:8000/docs for HTTP contracts. -See [HTTP contracts](../api/http.md) and -[Configuration](../reference/configuration.md) for generated reference and settings. - -## Persistence and computation - -Most Python components access `data/cloud_optimizer.db` through `storage`. -The forecast router currently opens SQLite directly; recommendations and -connections also execute SQL on storage-created connections. The storage facade -is the preferred shared interface, but it is not an enforced access boundary. -Per-user runtime settings are stored separately; see [Runtime settings](#runtime-settings). - -`ensure_schema()` creates missing tables/indexes and adds missing AWS credential -columns for older databases. `create_schema()` is destructive. See -[Storage API](../api/storage.md) for transaction ownership and -[Data schemas](data-model.md) for table details. - -The optimizer reads observed inventory, metrics, and pricing; it does not consume -ML forecast output. Optimization replaces stored recommendations for the selected -user. Forecasting and Gemini recommendations are separate computations. See -[optimizer constraints and usage](engines/optimizer.md) before interpreting savings. - -## Data sources - -The demo workspace uses existing synthetic data in SQLite. The current tracked -generator creates fixtures for tests and demos without downloading external -research datasets. It does not reproduce the historical committed fixture -byte-for-byte. - -The Next.js connection form stores access keys in SQLite; see -[connection identity and verification](#connection-identity-and-verification) -for the separate test, save, and workspace-selection behavior. The collector -supports both key-based connections and legacy IAM-role connections. Sync runs -in a background thread, clears the selected account's previous data, then -collects month ranges newest first. See [Data pipeline](data-pipeline.md) for -write behavior. - -## Connection identity and verification - -Registration creates a `usr-…` identity. In the primary web flow, -[the connection router](../../backend_api/routers/connections.py) saves a connection -under `aws-`, the same workspace ID used for collected data. After -save, [the frontend session helper](../../frontend/app/lib/session.ts) switches the -stored active identity to that workspace. Web connections are not attached to -the registered `usr-…` identity. The legacy -[Streamlit settings page](../../dashboard/settings.py) instead attaches role-based -connections to its authenticated owner and selects an AWS workspace separately. - -**Test connection** calls STS to resolve the supplied keys' account. Testing and -saving are separate operations: save resolves the account through STS only when -no account ID is supplied. With a supplied account ID, save validates its format -and stores the connection without rechecking the keys against that account. -A saved connection is therefore not proof of verified AWS access or ownership. -Sync creates an AWS session from the stored credentials and can fail later. - -## Trust boundary - -The API accepts client-supplied identity. Its `user_id` filters are not server-side -authorization. See [security boundaries](../security/README.md) for password, -credential, browser-session, and external-service limits. The -[operations guide](../operations/local-runtime.md) covers local exposure, -diagnostics, and recovery. - -## Runtime settings - -[backend_api/routers/settings.py](../../backend_api/routers/settings.py) stores -per-user preferences in `backend_api/runtime_settings.json`. The settings API -validates and saves them, but engines and the collector do not read that file: -saving a budget, collection interval, retention period, or model preference does -not change their current behavior. Request parameters and Python configuration -remain the active inputs. - -The file is excluded from Git and the image build context. Compose persists only -`/app/data`, so settings are lost on container recreation. See -[runtime settings recovery](../operations/local-runtime.md#runtime-settings-recovery) -for file lifetime, locking limits, and corrupt-file handling. - -## Engine entry points - -| Subsystem | Current behavior and source | -| --- | --- | -| Collection | [Pipeline](data-pipeline.md); [`CollectorRunner`](../../aws_collector/runner.py) and [service collectors](../../aws_collector/collectors/) | -| Forecasting | [Models and evaluation](engines/forecasting.md); [`forecaster.py`](../../ml_engine/forecaster.py), [`data_prep.py`](../../ml_engine/data_prep.py), [`evaluator.py`](../../ml_engine/evaluator.py) | -| Optimization | [LP/rule contracts and usage](engines/optimizer.md); [`engine.py`](../../optimizer/engine.py) | -| AI advisor | [Questionnaire and Gemini contract](engines/ai-advisor.md); [`recommender.py`](../../ai_module/recommender.py) | -| Legacy UI | [Streamlit startup](../development/streamlit.md); [`dashboard/app.py`](../../dashboard/app.py) | - -The [data model](data-model.md) explains relationships; the -[storage contract](../api/storage.md) explains transaction ownership and generated -signatures. Exact function and table inventories come from those sources. diff --git a/docs/architecture/data-pipeline.md b/docs/architecture/data-pipeline.md deleted file mode 100644 index 8ea5ba5..0000000 --- a/docs/architecture/data-pipeline.md +++ /dev/null @@ -1,63 +0,0 @@ -# Data Pipeline - -## Live AWS collection - -The Next.js **Account Settings → Connections** flow saves access keys; testing -and account resolution are described in -[Connection identity and verification](README.md#connection-identity-and-verification). -Sync starts a background -`CollectorRunner.from_connection()`, using stored keys or legacy role -credentials. The standalone `python -m aws_collector.main` entry point uses -boto3's configured credentials. - -The runner clears previous data for the selected account before collecting -12 months of history. It processes month ranges **newest first**, collecting -costs, service inventory/metrics, and pricing, with incremental commits. A -failure can leave partial data; sync is not an atomic replacement. - -Per-service collectors live in [aws_collector/collectors/](../../aws_collector/collectors). -Their writes use `storage.insert_*()`. Many data tables use -`INSERT OR REPLACE` on composite primary keys to update matching observations. -Global instance pricing has no `user_id`; account data is keyed by user. -See [Storage API](../api/storage.md) for transaction ownership and -[Data schemas](data-model.md) for keys. - -Collectors log individual API failures where they can continue. Consult sync -status and backend logs if data is incomplete. See [local recovery](../operations/local-runtime.md#interrupted-sync-recovery) -for interrupted workers and partial collection. Runtime AWS credentials and -account data must stay out of commits; see the -[security notes](../security/README.md). - -## Synthetic data - -[data_generation/synthetic.py](../../data_generation/synthetic.py) is tracked and -used by tests and the demo seeder. Its functions generate inventory, metrics, -costs, and pricing; the CLI maps generator columns into storage records and -commits the results. Current fixtures are generated in code without downloading -external research datasets. - -```bash -python -m data_generation.synthetic --help -``` - -The CLI writes to the configured `data/cloud_optimizer.db`; it has no -`--db-path` option. Seeding overwrites matching target-user rows and global -instance-pricing rows. It leaves unmatched rows and other users' data in place, -so running it on an existing database is not a clean reset. Use a disposable -checkout/database for experiments. - -Dates are relative to the execution date. The same seed and day count reproduce -random values for that date; a later execution shifts timestamps. The committed -historical demo fixture is not a byte-for-byte output contract for this generator. - -## Consumers - -The TypeScript UI reads JSON from FastAPI. The API routes call storage helpers -and engines; some routes also use direct SQL as described in -[Architecture](README.md). The legacy Streamlit UI calls Python modules -directly. - -Forecasting reads historical series. Optimization reads inventory, observed -metrics, and prices and replaces stored recommendations. Its write and budget -semantics are documented in [Optimizer](engines/optimizer.md#usage). These consumers -share the same database schema regardless of how observations were collected. diff --git a/docs/architecture/engines/ai-advisor.md b/docs/architecture/engines/ai-advisor.md deleted file mode 100644 index 83d941c..0000000 --- a/docs/architecture/engines/ai-advisor.md +++ /dev/null @@ -1,68 +0,0 @@ -# AI Module - -The AI module builds a questionnaire prompt and calls Gemini for architecture -advice. This is separate from the inventory-based [cost optimizer](optimizer.md). -The configured model is `GOOGLE_MODEL`; see [Configuration](../../reference/configuration.md). -A valid `GOOGLE_API_KEY` is needed even for the synthetic demo workspace. - -## Entry points and persistence - -| Entry point | Behavior | -| --- | --- | -| Next.js guided questions → [FastAPI onboarding router](../../../backend_api/routers/on_boarding.py) | Fetches questions, builds a prompt, and returns generated recommendations and raw text. The router does not persist them to SQLite. | -| Legacy [Streamlit Home](../../../dashboard/home.py) | Offers the questionnaire during cold start and stores generated recommendations for the selected user. | -| Standalone [ai_module/ui.py](../../../ai_module/ui.py) | Writes recommendations to the synthetic user; running it can modify the tracked demo DB. Use a disposable checkout/database for experiments. | -| Python callers | Decide whether to store the returned result through `storage.insert_ai_recommendations()`. | - -HTTP request/response schemas are generated at http://localhost:8000/docs and -http://localhost:8000/openapi.json when the backend runs. The generate endpoint -caps prompts at 4000 characters (HTTP 400), returns HTTP 502 for in-band Gemini -errors, and optionally requires `X-API-Token` when `ONBOARDING_API_TOKEN` is set. -The current Next.js client does not send that header. These guards do not provide -session authentication or validate the factual correctness of AI advice. - -## Python contract - -- [guided_questions.py](../../../ai_module/guided_questions.py) owns the question IDs, - text, and options. Use `get_guided_questions()` instead of maintaining another - questionnaire definition. -- [prompt_builder.py](../../../ai_module/prompt_builder.py) maps answers to a prompt - requesting `recommended_setup`, `estimated_cost`, and `explanation`. -- [recommender.py](../../../ai_module/recommender.py) creates `google.genai.Client`, - calls `client.models.generate_content()` with the configured model and - temperature `0.3`, extracts the text between the first `{` and last `}`, and - parses JSON. -- `get_ai_recommendations(prompt)` returns `(parsed_result, raw_response_text)`. - Missing credentials, API failures, empty responses, and JSON failures return - `({"error": message}, "")`. Parsing does not enforce the requested output - fields or prove that the recommendation or price is correct. - -A Python caller can construct the prompt without making an external request: - -```python -from ai_module import get_guided_questions, build_prompt - -questions = get_guided_questions() -answers = { - question["id"]: question["options"][0] if question["options"] else "" - for question in questions -} -prompt = build_prompt(answers) -print(prompt) -``` - -Calling `get_ai_recommendations(prompt)` then uses the configured Gemini service. -Check the error result before consuming fields. For persistence, -`recommended_setup` is JSON-serialized into a TEXT column; include the input -profile, prompt, estimated cost, model identifier, and raw response according to -`insert_ai_recommendations()` in [storage/db.py](../../../storage/db.py). -The caller commits and closes the connection; see [Storage API](../../api/storage.md). - -## Verification - -```bash -python -m pytest tests/test_ai_module.py tests/test_home.py tests/test_frontend_backend_contract.py -v -``` - -These tests use mocks and local fixtures. They verify integration/error behavior, -not live Gemini availability, generated advice, or forecast/optimizer accuracy. diff --git a/docs/architecture/engines/forecasting.md b/docs/architecture/engines/forecasting.md deleted file mode 100644 index d8c31f3..0000000 --- a/docs/architecture/engines/forecasting.md +++ /dev/null @@ -1,48 +0,0 @@ -# Forecasting Models - -## Current application behavior - -[ml_engine/forecaster.py](../../../ml_engine/forecaster.py) implements Naive, -Seasonal Naive, ETS, Prophet, and SARIMAX. The primary Next.js UI calls -[backend_api/routers/forecast.py](../../../backend_api/routers/forecast.py): - -- `GET /api/forecast` defaults to Prophet and a 30-day horizon. It accepts - horizons of 1–180 days and requires at least 30 normalized daily observations. -- The router loads the latest 365 stored daily observations. - It applies anomaly filtering, retaining the original series if filtering - leaves fewer than 30 observations. -- `GET /api/forecast/compare` runs the five models and compares forecast spend - with the historical daily average. `vs_historical_pct` is not prediction - accuracy, MAPE, or walk-forward validation. A failed model produces null - forecast values in the comparison response. -- Responses are cached in process by user, horizon, series fingerprint, and - model where applicable. These HTTP routes do not save forecasts to SQLite. - The legacy Streamlit page runs models directly and offers CSV export; it - also does not save forecasts to SQLite. - -There is no automatic data-age-based model selection in the HTTP router. -Use the running backend's generated http://localhost:8000/docs for the current -HTTP contract. The CLI remains a placeholder; use the UI or Python API. - -## Reproducible evaluation - -[ml_engine/evaluator.py](../../../ml_engine/evaluator.py) provides `time_series_cv()` -and `compare_models()` for expanding-window validation against held-out values. -They report MAPE, RMSE, and MAE; MAPE excludes zero actuals. These routines are -separate from the HTTP model-comparison endpoint. - -For a local evaluation, load the selected workspace through -`ml_engine.data_prep.load_cost_data()`, choose explicit initial/horizon/step -parameters, and call `compare_models()` with the forecasters under test. Close -the database connection after loading. The synthetic demo workspace is -`aws-SYNTHETIC-001`. Preserve the data snapshot, parameters, code revision, -dependency versions, and output when using results to make a model decision. - -Anomaly detection in [ml_engine/anomaly.py](../../../ml_engine/anomaly.py) combines -rolling Z-score and IQR flags by default. For offline evaluation, document any -filtering and fit preprocessing on training data so future observations do not -influence a fold's training set. - -```bash -python -m pytest tests/test_ml_utils.py tests/test_frontend_backend_contract.py -v -``` diff --git a/docs/architecture/engines/optimizer.md b/docs/architecture/engines/optimizer.md deleted file mode 100644 index 2e959f6..0000000 --- a/docs/architecture/engines/optimizer.md +++ /dev/null @@ -1,232 +0,0 @@ -# Optimizer Module - -## Overview - -The optimizer analyzes AWS resource inventory and metrics to produce cost-saving recommendations. It uses two complementary approaches: a **Linear Programming (LP) solver** for compute right-sizing and a **rule engine** for everything else. - -It reads observed metrics and pricing; ML forecasts are not inputs to the current -optimizer. Recommendation generation writes SQLite and does not apply AWS changes. - -``` - ┌─────────────────────┐ - │ engine.optimize() │ single entry point - └──────────┬──────────┘ - │ - ┌────────────────┼────────────────┐ - ▼ ▼ - ┌─────────────────┐ ┌─────────────────┐ - │ compute_lp.py │ │ rules.py │ - │ LP solver │ │ threshold │ - │ │ │ checks │ - │ EC2 rightsize │ │ EC2 pricing │ - │ RDS rightsize │ │ RDS pricing │ - └─────────────────┘ │ Lambda memory │ - │ EBS volumes │ - │ S3 tiering │ - │ DynamoDB mode │ - │ NAT endpoints │ - │ ELB idle │ - └─────────────────┘ -``` - -**Why two systems?** The problems are structurally different: - -- **Right-sizing** = "which of these 20 instance types is cheapest while still handling my load?" — a menu of alternatives with quantifiable specs. Perfect for LP. -- **Everything else** = "is this thing wasting money? yes/no" — threshold decisions with no alternatives to choose between. Rules are simpler and more transparent. - -## LP Solver (`compute_lp.py`) - -### Formulation - -Binary LP that assigns each instance the cheapest candidate type from the pricing catalog. - -``` -Variables: x[instance, candidate] ∈ {0, 1} - -Objective: minimize Σ cost(candidate) × x[instance, candidate] - -Constraints: - 1. Assignment: Σ x[i, c] = 1 each instance gets exactly one type - 2. CPU: Σ vcpus(c) × x[i,c] ≥ min_vcpus[i] - 3. Memory: Σ memory(c) × x[i,c] ≥ min_memory[i] (when data available) - 4. Budget: Σ total cost ≤ budget_cap (optional) -``` - -### How requirements are computed - -``` - P95 CPU utilization (from metrics) - │ - ▼ - actual_vcpus_needed = (p95_cpu / 100) × current_vcpus - │ - ▼ - min_vcpus = actual_vcpus_needed × headroom (default 1.3) -``` - -Example: instance with 4 vCPUs running at P95 CPU = 40% -- Actual need: 0.40 × 4 = 1.6 vCPUs -- With 30% headroom: 1.6 × 1.3 = 2.08 vCPUs -- A candidate must have at least 2.08 vCPUs, so a 2-vCPU instance is insufficient. - -### EC2 vs RDS differences - -| | EC2 | RDS | -|---|---|---| -| CPU constraint | P95 from metrics | P95 from metrics | -| Memory constraint | P95 when available | Skipped (the implemented RDS collector does not fetch memory) | -| Multi-AZ | N/A | Doubles candidate cost | -| Pricing source | `instance_pricing` table (service=EC2) | `instance_pricing` table (service=RDS) | - -### Edge cases - -- **No metrics** → instance skipped (can't compute requirements) -- **Stopped instances** → skipped (not running, no need to optimize) -- **LP infeasible** → logged warning, returns empty (e.g., instance needs more vCPUs than any candidate offers) -- **Optimal = current type** → no recommendation (already optimal) -- **Optimal costs more** → no recommendation (only recommend savings) - -## Rule Engine (`rules.py`) - -### Rule summary - -| # | Function | Service | Trigger condition | Recommendation | -|---|----------|---------|-------------------|----------------| -| 1 | `check_ec2_pricing` | EC2 | on-demand + currently running + metric timestamps span 60+ days + cheaper RI pricing | Switch to reserved-1yr | -| 2 | `check_rds_pricing` | RDS | on-demand + metric timestamps span 60+ days + cheaper RI pricing | Switch to reserved-1yr | -| 3 | `check_lambda_memory` | Lambda | avg memory < 50% of allocation | Downsize to next lower tier | -| 4 | `check_ebs_volumes` | EBS | gp2 type, OR unattached, OR idle >90% | Upgrade gp2→gp3, delete unused | -| 5 | `check_s3_buckets` | S3 | STANDARD class + <100 daily requests | Switch to INTELLIGENT_TIERING | -| 6 | `check_dynamodb_tables` | DynamoDB | PROVISIONED + both RCU/WCU utilization <50% | Switch to ON_DEMAND | -| 7 | `check_nat_gateways` | VPC | monthly cost ≥$30 | Add VPC gateway endpoints | -| 8 | `check_elb_idle` | ELB | 0 targets AND traffic check does not establish ≥100 average daily requests (see limits below) | Delete load balancer | - -### Key thresholds and constants - -``` -EBS: gp2 = $0.10/GB/mo gp3 = $0.08/GB/mo (20% savings) -S3: STANDARD = $0.023/GB/mo IT monitoring = $0.0025/1000 objects -DynamoDB: RCU = $0.09/mo WCU = $0.47/mo (provisioned) -NAT: $0.045/hr + $0.045/GB processed -Lambda: tiers = [128, 256, 512, 1024, 2048, 3008] MB -``` - -### Checks and limits - -- **Lambda**: skips downsizing when `avg + 2×std > new_tier`. This is a statistical - estimate from observed memory usage, not a guarantee against out-of-memory failures. -- **EBS idle**: requires at least 168 metric rows (assumed hourly) before flagging; - row count alone does not establish continuous coverage. -- **ELB**: requires zero targets, but checks traffic only with at least 168 metric - rows and a `request_count` column. Missing or shorter history leaves the traffic - flag false and can still produce a high-confidence deletion recommendation. - With sufficient history, the rule skips deletion at ≥100 average daily requests. - Independently check workload use and telemetry before acting on a deletion recommendation. -- **DynamoDB**: requires BOTH read AND write utilization below threshold -- **EC2/RDS pricing**: requires a 60-day span between the earliest and latest metric - timestamps; it does not verify uninterrupted operation or future commitment needs. - -## Orchestrator (`engine.py`) - -### Flow - -``` -optimize(conn, user_id) - │ - ├── 1. DELETE old recommendations for user_id - │ - ├── 2. Run LP solver - │ ├── optimize_ec2() - │ └── optimize_rds() - │ - ├── 3. Run rule checks - │ ├── check_ec2_pricing() - │ ├── check_rds_pricing() - │ ├── check_lambda_memory() - │ ├── check_ebs_volumes() - │ ├── check_s3_buckets() - │ ├── check_dynamodb_tables() - │ ├── check_nat_gateways() - │ └── check_elb_idle() - │ - ├── 4. Deduplicate by (resource_id, recommendation_type) - │ └── keep highest monthly_savings - │ - └── 5. INSERT into recommendations table + COMMIT -``` - -### Parameters - -| Parameter | Default | Description | -|-----------|---------|-------------| -| `budget_cap` | `config.DEFAULT_BUDGET_CAP` (5000.0) | Cap applied separately to each EC2/RDS LP, not one combined account budget | -| `services` | all 8 services | Select checks; see `ALL_SERVICES` in [engine.py](../../../optimizer/engine.py) | - -Every run deletes **all** previous recommendations for the selected user before -generating replacements, including when `services` selects only some checks. -An infeasible LP contributes no sizing recommendations; independent rules can -still produce results. Rule recommendations are outside the LP budget constraint. - -### Deduplication - -If the LP and a rule both produce a recommendation for the same `(resource_id, recommendation_type)`, only the one with higher `monthly_savings` is kept. This prevents duplicate entries in the DB. - -Different action types for one resource remain separate. Their savings may -overlap, so the CLI's summed savings are not a validated combined execution plan. - -## Usage - -Run from the repository root with dependencies installed. Stop writers to the -source database before copying it; if it is live, use SQLite's backup API to -include committed WAL contents. Keep the committed fixture unchanged: - -```bash -optimizer_tmp=$(mktemp -d) -cp data/cloud_optimizer.db "$optimizer_tmp/cloud_optimizer.db" -python -m optimizer --user-id aws-SYNTHETIC-001 \ - --db-path "$optimizer_tmp/cloud_optimizer.db" -``` - -The disposable copy receives the recommendations. Inspect it before removing -the temporary directory. Use `python -m optimizer --help` for service and budget -arguments. Library callers can pass a connection from -`storage.get_connection(copy_path)` to `optimizer.optimize()`; close it afterward. - -The LP code explicitly uses PuLP's `PULP_CBC_CMD`. Verify that solver in the -active Python environment: - -```bash -python -c "from pulp import PULP_CBC_CMD; print(PULP_CBC_CMD().available())" -``` - -An available executable path is expected. Installing a system `cbc` executable -alone does not change the solver selected by this code. - -### Each recommendation dict contains - -```python -{ - "service": "EC2", - "resource_id": "i-abc123", - "recommendation_type": "rightsize", # or pricing_plan_switch, delete_unused, etc. - "current_config": "c5.xlarge, on-demand", - "recommended_config": "c5.large, on-demand", - "current_monthly_cost": 124.00, - "estimated_monthly_cost": 62.00, - "monthly_savings": 62.00, - "savings_percent": 50.0, - "confidence": "high", # high, medium, or low - "reasoning": "P95 CPU requires 1.8 vCPUs ..." -} -``` - -## Design rationale - -| Decision | Choice | Why | -|----------|--------|-----| -| LP for compute, rules for rest | Approach C | LP needs a menu of alternatives with specs — only compute has this. Rules handle threshold checks. | -| P95 metric (not avg or max) | P95 | Avg hides spikes. Max is one-off outliers. P95 balances real workload. | -| 1.3x headroom | Default | 30% buffer for unexpected traffic. Configurable per call. | -| Clear + replace recs | DELETE before INSERT | Fresh results each run. No stale recs from previous configs. | -| RDS: CPU only | No memory constraint | Original rationale: `FreeableMemory` is bytes, not utilization %. The current collector does not fetch this metric. | -| Confidence levels | high/medium/low | Rule-specific heuristic labels; see [`compute_lp.py`](../../../optimizer/compute_lp.py) and [`rules.py`](../../../optimizer/rules.py). They are not calibrated probabilities or proof an action is safe. | diff --git a/docs/development/README.md b/docs/development/README.md deleted file mode 100644 index 22b0101..0000000 --- a/docs/development/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# Development Guide - -Use the [README](../../README.md#quick-start) for setup. Run Python commands from -the repository root with the virtual environment active. - -Application PRs target **`main`**; the default `release/ccpe-v1.0` branch contains -the separate paper artifact. Keep changes focused, update affected technical -documentation, and describe what changed, why, and the verification actually run. -Report pre-existing failures separately from regressions and respect any target -branch checks or review requirements. Use [SECURITY.md](../../SECURITY.md) for -vulnerability reporting. - -## Checks - -```bash -python -m pip check -python -m pytest tests/ -v -python -m compileall -q backend_api cloud_optimizer aws_collector storage \ - data_generation ml_engine optimizer ai_module dashboard -git diff --check -``` - -The pytest suite covers storage/authentication, AWS configuration and connections, -synthetic generation, forecasting, optimization, AI helpers, legacy dashboard -behavior, and frontend/backend contracts. Discover the current test inventory -with `python -m pytest --collect-only -q`. Tests use local fixtures and mocked -services; they require no live AWS or AI credentials. - -For the TypeScript frontend, use the committed lockfile: - -```bash -cd frontend -npm ci -npm run lint -npm run build -``` - -The scripts are defined in [package.json](../../frontend/package.json). For changes -to request/response behavior, also exercise the affected page with the backend -running. FastAPI generates the current endpoint and model reference at -http://localhost:8000/docs and http://localhost:8000/openapi.json. - -There is currently no repository CI or documentation validation tool configured. -Use the [schema generator](../architecture/data-model.md) and -[storage signature lookup](../api/storage.md#current-signatures) when changing those -contracts; [HTTP reference generation](../api/http.md) also works without starting -the server or touching the tracked database. -Check changed Markdown links and anchors, preview rendering, and verify commands -against the implementation. Report commands and outcomes in the PR, including -any baseline failure; keep existing tests and validation intact. - -## Project patterns - -- Follow the surrounding Python or TypeScript style. Python uses type hints and - module loggers; lazy imports also occur for optional or expensive integrations. -- Shared paths, `.env` loading, and constants live in - [cloud_optimizer/config.py](../../cloud_optimizer/config.py). AWS session/client - construction lives in [aws_collector/config.py](../../aws_collector/config.py). -- Prefer the `storage` facade for database access. Some API routes currently use - SQL directly; see [Architecture](../architecture/README.md). Data keyed by `user_id` - does not provide server-side authorization. -- Use `ensure_schema()` for additive initialization. `create_schema()` drops and - recreates tables and belongs only in disposable fixtures. See the - [storage contract](../api/storage.md#transaction-contract) for commit ownership. -- Keep tests independent of external services. Use pytest temporary paths for - writes and mocks for AWS/AI calls. Do not regenerate the tracked database as - part of routine testing. -- Read [optimizer usage](../architecture/engines/optimizer.md#usage) before running a write operation; - both optimization and collection can replace existing stored results. - -Python dependencies live in [requirements.txt](../../requirements.txt); -[pyproject.toml](../../pyproject.toml) configures pytest and coverage. Update the -numeric/ML pins together when changing that stack, then verify imports and the -relevant forecasting tests. diff --git a/docs/development/streamlit.md b/docs/development/streamlit.md deleted file mode 100644 index 3623f15..0000000 --- a/docs/development/streamlit.md +++ /dev/null @@ -1,75 +0,0 @@ -# Legacy Streamlit Startup - -The primary TypeScript/FastAPI application starts with the -[README quick start](../../README.md#quick-start). This guide covers the optional -legacy Python UI in `dashboard/`. - -## Prerequisites - -- Python 3.12+ -- pip - -## 1. Create virtual environment & install dependencies - -```bash -python3 -m venv venv -source venv/bin/activate -pip install -r requirements.txt -``` - -## 2. Environment variables (optional) - -The project runs in **demo mode** by default (pre-loaded synthetic data, no AWS credentials needed). - -For real collection, configure boto3 credentials for the principal that assumes -the connection's role; see [Configuration](../reference/configuration.md#environment-variables). -Set the default boto3 region before running: - -```bash -export AWS_DEFAULT_REGION=us-east-1 -``` - -For AI recommendations, separately set `GOOGLE_API_KEY` in the environment or -root `.env`. Gemini requires this key even when using synthetic data. - -## 3. Launch the dashboard - -```bash -python -m streamlit run dashboard/app.py --server.address=127.0.0.1 -``` - -Opens at `http://localhost:8501` with a **login screen**: - -- **Login** -- Sign in with email and password -- **Register** -- Create a new account (password hashed with PBKDF2-HMAC-SHA256) -- **Try Demo Mode** -- Explore with pre-loaded synthetic data (no account required) - -After authentication, the sidebar shows 5 pages: Home, Costs, Forecasts, Recommendations, Settings. An **account switcher** in the sidebar lets you select which AWS account to view. - -## 4. Connecting an AWS account - -After registering, go to **Settings** and use the "Add AWS Account" form: - -1. Enter your AWS Account ID and IAM Role ARN -2. Click "Test Connection" to verify access -3. Click "Add Account" to save - -The caller needs `sts:AssumeRole`, and the role needs permissions for the AWS -services being collected. This form tests role access with STS. The primary -Next.js UI instead accepts access keys; see [Configuration](../reference/configuration.md). - -## 5. CLI tools - -Use the [optimizer example](../architecture/engines/optimizer.md#usage) to generate recommendations in a -disposable database copy. Optimization replaces existing recommendations. - -Run forecasting from the Forecasts page. The ML CLI is a placeholder that prints -a notice and exits with status 1 when a user ID is supplied. - -## 6. Run tests - -```bash -python -m pytest tests/ -v -``` - -See [Development](README.md) for the full application checks. diff --git a/docs/operations/local-runtime.md b/docs/operations/local-runtime.md deleted file mode 100644 index 0b326a1..0000000 --- a/docs/operations/local-runtime.md +++ /dev/null @@ -1,129 +0,0 @@ -# Local operations and recovery - -This guide covers the single-user development/demo stack. Start it with the -[README](../../README.md#quick-start). Host ports bind to `127.0.0.1`; container -listeners and the Compose network remain accessible within the stack. This does -not repair the [application's trust boundaries](../security/README.md). - -## Diagnose the running stack - -```bash -docker compose --profile full ps -docker compose logs --tail=100 backend frontend -# If the optional legacy UI is running: -docker compose logs --tail=100 streamlit -``` - -Open http://127.0.0.1:3000, http://127.0.0.1:8000/health, and, for the `full` -profile, http://127.0.0.1:8501. `/health` is a static liveness response: it does not -verify database contents, AWS permissions, or Gemini availability. Check the -specific failed page/request and backend logs. Redact account identifiers, -credentials, prompts, and personal data before sharing diagnostics. - -| Symptom | Checks and next action | -| --- | --- | -| Browser cannot reach API | Check backend health and the frontend's build-time `NEXT_PUBLIC_API_BASE_URL`; it must be browser-reachable. Rebuild the frontend after changing it. CORS permits the two local port-3000 origins. | -| Empty account dashboard | Confirm the selected workspace, stored dates, and sync state. Registration alone does not populate data; demo data belongs to `aws-SYNTHETIC-001`. | -| Incomplete AWS data | Inspect sync status and collector logs for service-level failures. Successful completion does not prove every AWS read succeeded. Review [collection/write behavior](../architecture/data-pipeline.md) before retrying. | -| Sync returns 409 after a restart | An interrupted daemon thread can leave persisted `in_progress`; use the stopped-worker procedure below. | -| AI returns 502 | Check the API key and upstream error in backend logs. Synthetic data does not remove the Gemini key requirement. Enabling the optional token gate also requires a client that sends the token. | -| Settings saved but behavior unchanged | Settings are stored preferences; engines and collection do not consume them. See [active configuration](../reference/configuration.md). | - -## State and lifetime - -| State | Location | Lifetime | -| --- | --- | --- | -| Manual-run database | `data/cloud_optimizer.db` | Local tracked fixture, modified by application writes; keep runtime changes out of Git | -| Compose database | `/app/data/cloud_optimizer.db` on `optimizer-data` | Seeded from the image when the volume is empty; survives container recreation | -| Web runtime settings | `backend_api/runtime_settings.json` (`/app/backend_api/` in the container) | Separate from SQLite; lost on container recreation in the supplied Compose setup | -| Browser identity | Browser localStorage | Client state, not an authenticated server session | - -A rebuild does not replace an existing database volume with the image's fixture. -`docker compose down` retains the volume. **`docker compose down -v` destroys the -Compose database volume**; use it only for an intentional disposable-demo reset -after preserving anything needed. The next start seeds the volume from the image. -The synthetic generator updates matching rows and is not a clean database reset. - -## Preserve and restore state - -Before collection or other replacement writes, preserve data you need. For a -manual-run database, use SQLite's backup API so committed WAL contents are -included. This example creates a new private directory outside the repository: - -```bash -backup_dir=$(mktemp -d) -python - "$backup_dir/cloud_optimizer.db" <<'PYTHON' -import sqlite3 -import sys -from contextlib import closing -from pathlib import Path - -source = Path("data/cloud_optimizer.db").resolve() -with closing(sqlite3.connect(source.as_uri() + "?mode=ro", uri=True)) as src: - with closing(sqlite3.connect(sys.argv[1])) as dst: - src.backup(dst) - assert dst.execute("PRAGMA integrity_check").fetchone()[0] == "ok" -print(sys.argv[1]) -PYTHON -``` - -For Compose, execute the same backup operation against `/app/data/cloud_optimizer.db` -inside the backend container, write the snapshot to a temporary container path, -and copy that snapshot out with `docker compose cp` before recreating the container. -Copy runtime settings separately if needed. Store snapshots privately: the database -can contain plaintext credentials and account data. An integrity check proves -SQLite structural consistency, not collection completeness or correct values. - -To restore, stop every database writer (backend, optional Streamlit, and standalone -collectors/engines), preserve the current database and any WAL/SHM sidecars as a -separate recovery copy, then restore the verified snapshot to the configured path. -Do not pair a restored snapshot with old WAL/SHM files. In Compose retain writable -ownership for UID 10001 on `/app/data`. Restart and verify the intended workspace, -connection state, and data dates through the application. Do not commit snapshots. - -## Interrupted sync recovery - -Sync runs in a daemon thread in the backend process. It clears previous account -data and commits incrementally. Restarting the backend can stop that thread while -leaving `sync_status = 'in_progress'`, which blocks a new sync. There is no durable -queue or automatic resume; retry starts a fresh replacement collection. - -1. Confirm the old worker is no longer running; stop the backend and all other - writers. Do not clear the status of an active sync. -2. Preserve state as above. Identify the exact connection and workspace from - `aws_connections`, selecting only `id`, `user_id`, `aws_account_id`, and - `sync_status`; do not dump its credential columns. -3. On that database, call the existing storage helper with the confirmed ID: - - ```python - from contextlib import closing - from storage import get_connection, update_aws_connection_status - - # Use the verified database path and connection ID from the preceding step. - with closing(get_connection(database_path)) as conn: - update_aws_connection_status( - conn, connection_id, "failed", "Interrupted sync; worker stopped", - ) - ``` - - The helper commits and updates `last_sync_at` to the repair time; that timestamp - is not evidence of a successful collection. -4. Restart the backend, confirm the failed status, and decide whether to retry - through Account Settings. Inspect backend logs and data coverage afterward; - changing the status alone does not recover deleted or partial data. - -## Runtime settings recovery - -The [settings router](../../backend_api/routers/settings.py) replaces the JSON -file atomically and serializes access within one process. It does not coordinate -multiple backend processes. Malformed JSON is renamed to -`runtime_settings.json.corrupt`; reads then use defaults until valid settings are -saved. A syntactically valid file with invalid setting values can still fail model -validation. - -Stop the backend, preserve the current file and any corrupt copy outside Git, -then repair or restore a valid user-to-settings mapping. Validate values against -`RuntimeSettings` in the router, restart, and read the affected user's settings. -Repeated malformed reads can replace the previous `.corrupt` copy, so preserve it -before trying recovery. The database volume does not preserve this file; copy it -out before container recreation and restore it into the replacement container. diff --git a/docs/project-report.pdf b/docs/project-report.pdf deleted file mode 100644 index 563c222266506a2e3fc6924cf08765086f78ab4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1256267 zcmb5V1yEhh(k{F=?rb!;dvJGmcZcBaF2SAP?(Xgm!7T)L3-0cL0GFKep7Y(R|5p9? zPR&}oclXS!RlR1WpP8N}R}>YeW1{DPBOfRl=o)Al$c1AjVkELRvV!B~Wso(sGk38d zV)@`GGl*N-xR^RIh}#&tn2MSj+nbp3^TRp2IGGyS!g*x<)YAHfD*^Ids%vS&~6Q<2iI~g~f$MGuU*o>*M`-RFRk>E-%(%=VTwKG4pzUsyL~XX+TV~|8{!+ zy7Xvo|HX$b(|lv+Tm3LQrVg5u1ta8~m&Gc~!Q0QBeTIWMBZ)>D>!S|8*5!5DX~W$h zDeTO7Gw0h?-OE0I4i5WwU2V<2*`1Tfw@wWD>efE-Oq(CO=>$t(cgK^W&(Bgq?=44a zA1c4w`Rbh6VNS(PhJ?!%Ijh+0jI|rsf&n17Tv|H{-n~!zM7HGkM4tf+j6}c_Etj^5 zyXliE+B{3d=-IRCetB*k!Pzq7d;r|hBzMQ94SyJ}Ei3ivaCRU+7@M$pb=|>3QD$Hh zourr_KACXyg1fEO&XHp;qxDc+CMe1}^J}CvsitHqEm38C5Zx=j{rk(|OXpgw!Zd&1 z!+z%XTmyaj+FVzK*5MlU%=7E`Ej|=x@q!HxGIIF&e}AddjijSYlbxd2hKu@k3L?zl zI!6i9^ls>njg+_*R5Z4Y>(7vZ<8TT*Cn#W*f{SBr4a%+R-;1>9c<7L0t@B|jzbUd# z2ccoTu5@1tCP0cYausp1MGW1bq_E^*_p1LCwASDtq}N1$P4p0j640Z2`Wc)o0i8h@ZDciEV``oacf3jd}({;_o*76I@ zyIzLolqT2MJ%P~?jIb?kEjtXF(Z-BhF#E&(k6!ud4n>sOdUTZyw6(m}IP z5>ip!Nh`gvw(aSOe(3xHi1HRm;$2ISctYr&Tsk+UoQ^vMx(cVjL8(%fTd@ZHDOF4E-5?2}SJkJWljosLbClpj zttc+Ftc=Oa2qBWFnPl1);-yzxl*gAa5%bq`1l3j)!pOMl<3Y(l6wXRGao;5$9BFmW zHt2F`5a-_mTl$lYStYryh(%9lQq$Wtz&F^4!&U#AuO7U&SY15k* zqZd^YKKy#bsn;7T4NXFoaIipwXRg+PwV=$#YNaSXE=Dz-L|Q-}HG>JA_zJ3pmz%s& zKCkJ50Z$CCJ|pZuF@`>F5B=Rcqb9p@F+XP6`tFw9cXP$58o;5{+x12LwqsWnoSOAb z^;h7_VT_oo-oS8+>5P12WP>9zRtj?62m~YER<tD*k=|5U)~9N)=^P=z0Xop$e0D9kxm0X&C0Md%(=^XIg`H7pJY_JMzy- zOb<=_d}8(@8UOkY?#ziSH+iWZ(>`T5l|RCACO$Ya&Vnblt&5&38dfEQ`Ui&H-6_lr z&B+aihcQ*DJ!)#e_orkN*8|**H?!WaM1-t#M@um7-{O>m46&Xp^d&X3CXvyRe|LIF z7G!t&0&I;p+Q}O}EBkDDK;mm%ST~j*;JJ0qmA)}%(-)lo`u=kG_S0Zkd6JLg%TZ2b zo2U;K2Rj!VwfPB4J+>dmQ~vgRVi#cv&OrgkR(7?%&~ zuRVhMYli+3OzcdYf5rc1a{iCGQuTB&WzbYGvNAPxVNh{3a{2pT%GS`_ltIJN1E1Eiq*xNeT+nL(A5OESQh}hfMJE=Gr8k;hRnz~sU zn<`5P|Ht@=im3kE^!>*)GO@5Tv;L1Ad|!Uw0)V8&rNjY1AP}$)SOWmw*8m~_a4@jH z`6EGmWJnlDNC*f>IA~}n7z8*31b8@jctj*r5F!!^5j)8%Jfcyyy6CDc` z9RvMuBS7$vIuMYskdUzGi13K$|Ig{YAAkY_I0CGJ14#g2C_r!&;QJr|9{>b=yxPa> z{x?CvKtg{!4Gi`}jPoJ*5dLpc01ylU91`k%6@UQ#Q56IZ0sw%`M1N~rb*fl#9<=_q zp@CT*@M1mz`Vm{WWLw7bJ*SKRh}6S1)+yJo$y+6Em+sIeH#V7V{}DmsT}5hOBn?o+o)WF+$1;tZ@fMDqFDI{2Z|K{HZS_6k*sjymt#aNj8NX{A20MC0Nusk(5t z{U0805*}yytMj;rKE6+fwmo;D7bC6lIv;hJJoK!Wf}O{R63&N^Lv-mxh*WLIQ+__$+@1YPFnQ(l{x3(YRPXHbM)i7lpoysG*l1MTm7`AN6!Xns<^wUJ7dm) z|HqvB`LoW1_Hnt{#{Qgl434iA)MLe4YUX^_?u%)R*X`yc`?tICx`vU*v5r%wcK})D zS(N9^ayIWPHrB62d}Ug{%z{ShLF2*19lFGb-+d-8cTW8;FJHSYy_uVbM?7a%_!t+nPXM!$1>r9zmQM{Pf} zAgf~Sb9$JnOJ*l=D`T!Ss4X6It@`Ar4#=<%h5$x-XD25a-eyI{kK^Kn8p8hJp#p>i zdk2j1v@?niJVeGvN#3xVbn^Q5Ks5d&N)R|wi z_rhb{`5^TjFTiWyft~F_fMYjEZe}g?&+Z6;@tbRhR-{j zV>iQk=6Phv>(1_j9o+3IP$A+L!Q5JIf=y@4h>n;b^vSfOzNN`pX>m@*E7wV??=o?8 zH6`7xb*A2krXG9c80)*;UTbbCs*gtly9`mXex*UiP~HGby-5I(O zsnhXSYfH9iMANjqrGldNLn%aBbl4F#zZgRKDrO;;)73bY0ZiMYcRZn2 zKEQ>LE=Y9?qaw6q7UD3FqD68?l8?dKbg6|Xo&{g-hwyZG)q0`TXq%E(>CJg3c&HHX z=nu!lw$Uwc(=R3K!2yU1Z=3Zh&$q(IHNPURIA&AtvAg+5mgp92T1={)V2IclzE@x= zKE4CuLZ;w~^-5xMe$zbtA~$=@V6W0no#X5jzVy4dsuAzaz37K03^-t3R_FDL*f&r=MMFrDk08X`b@o zRPC&%;isFQlh$4?ABFo%+(Q>m$3EzJNV;CBy5V^K0qf8vhitfFIgP!~^Fbi^XxVCn z1#gE4%9Gt8AJwH8U&9FL)rDqe; zH+I2<v0x!e@nc2;WhpvAc1f@~*`j#<$`;Rgh{CTcIPE^71AAu)>mC z!SZB}qD=a+gZJjd>2toCyz?I&aF*YFpqZtf87= zF>*~KuO%Csx?%C2H2kwf_Iz=9EIH91YHTW&5fxctJ7J$V^Sk6UcOBV8EH-JJ3#>*^ zJjy34EAgDJ(fG*bqrIg{@nm;0p(qMmD?0KYDUrD&J4$-XG9u>9K|E_i$oFBdA+k^&f()z_0wh`-geDrPMmg4}+d3V&N|cs8X~4@6Dq zQ$J6)XoHA}Ge2G8-obKGqHvNLiEFouiq}k*N+GtSWE55~8f+bD|5TxgD7;<^#jk!n zlRhGLh=-l!qEFw(Ko?MRl5{VWTyZ_)k+Iw~Cf3_L7;3RvAApY@vozej?xOG5=Q#p- zi2o_eL0_UO+S&+;A7M9e>2p-M8eLeSm-xv*f*mIVw~2yF$?htpm%N!*bfrh&FLe98 z4Uh9Ruv)TepMu11?my!aTvpD;^od`y8`eSDDgif+j0!*YfHsCTJ{J`Mkx(AR{ zNirQUnTCjqeU0Js0LUlsaCCWsgGCEe_U5N=ZP`l7ISec%larr+$^DpdDNz96A1DLr zFD&_IA_jt?fD@ylp))cmK?s3Jh?s>9|25fuKobGro0|03$L6)le%A8#U!5Adz6vpG zlisy2xww~|Z?Un5t*WJC+>O4ly0X)&A(eEy&E<9v!gJ+c#WST_NxyETIf)&bFE4!0 zXI9>Ckt%%sp=l;nL;j~$i7tfA`%}Sd+V%|bg{8pyLRS58myL|m;O*}U<%Y=`>4iwj zJ<(e5#SA}lZcY!W{dd5uuFU8?`GtIg4u<77ZIf(M1;W@w&sWeLHN5mlsV|aRto(#w zWQGo&s^d~(%y8yLnnmPpR`PX8jt;l!*|A1rvHoPb_g~UvkHMVSn+xWjpJ;w$sDp#u z9VT(?9>kwNr8$+Y9C5|- zebJEs+E%qSd|8ioA~xSW{ZWaF7V@D!Pj14d;zxvSx#GSe7rT*gXB?@htQ&G7FinF)b8IS7}*PK|~ac2<*Wc3##?`+#HXez^m-A zmwyL=Q&pD|-&?IR{m_{=IHMXG9<}z?;mG4?k@(9>l-%afmv5aYmdnN zv`48D(i+51ymOFuYQ)ZF_8W_7_mc(`t$|Wj76~a09GaqSVNGaRmkQM^#7S)Ve6C74 zf2p#Me9?2Zikj+Su1b!NyyrdF;rs_#X7QWtcM8Rv1&#I(G|Q${TYl!jdRWxKdRpE3 zmlX1Fm=y8|Yg!r9LAJj-mis^jA2=8S93C1L683K|{Qw032ozK_VkSruAtiLfcn~Qw zE1RIOV?bg)nX*xR-^>*T5hII}b3wzlu}fe=KNPu$sG^EVmMV&VVH@w;AoQ#xd^`}3$?8-;W*@pks>CYFmbJz#xh z&~L3Y3+;CT;m(`$!OsF2q)JCQ3)7pqP?e^BvN&nBDvQ*av2=+x{G#G?8$R%t~rj) zrl*@rRISu^{ugpxn0Yu<&pY*$R6(*@At7F&eip&pk@`VON}5SoPNu()2kE3$WVUsi z?|riJc&M(N4=HCAsyt)J21ZRWihrdnzTy92`p>`veDsII& zjN3&!mtn`Yht)!AOEv6mSX~6Wx(CnV@pQ!GvTb>OJL-nh;!uv1m1}7VA)259d3+%B zK9b;c9*A!iP5~ze$`VZJd5hT6?957YSuI|(HTPnsBhEPv?ZCzy<~6PmdcDEQ`$KKC z;gSxCeRX#3UoOx_@`HM~WUK0y4|J zemJX;=i{@`gT49ka=C)uW99)4PYj*Gz|TsXa1T-41`>NxrS^v2H!N^>(=LRu8prxBL|rY@>NxThMe+(X!X{IliB^Mf zjSDGyq2#NX@v2dcCbftow=TETExT9vMhJ_;%j1Kv^(>z;nt(^hkOEk_t7u4^H!G>? z&#@SG$On`w$Tc}=hpSX1?tcg;N$h$O1(9z{Fgr>)RI5S_RjbwRsK4w)1htFlNP}lo zcG}N0v|CRF+mhYT<<_uA`qk5%O`V16Ntd-t1!lwmg$s9*-3FWHFDBHN5~bQpttC|C zrRBeJ4m2h-Sh666kdKLV2IJK-3c+pXLs#I&Wi2Nnbo5oSX+h#0N!BjGexOPU)rQdN z=EY}3@ob;mLgivC)xAD_ED@uY%4212NtuW>CmZ)+)S4U1ZR99f+tP=^VLAHciB6#Q z6$B1Ku**hKPbOpcR&tQgX-x?gsmFQ4takil1(>3V`mIdH zK0H6tZ#%)IJS^mLwU|HN)p!=s($bWdC?k9~5j&sswschDKz`uJ9#DT++^3iAHnL|< zNg+FqFTI{=nXmTEBV&o)b7UWM(*YOek)+}l{7U1z)Y|67{{yY+N}DkMAyRa5=IGed zS>An2P66*ZKd>L%mbYT!#{`d~gtjEkKvgSUWR!{FwmnrO&b-&|*c|`SunxQR2G)(u zQU?>Clo<2QfZJUXdeNo%RTZ|4_}a=4?iMPZcDwInoST+uJGD4k8+vEGg%d{YPCNr0 zQ^T4(7Od_-A~@3t##GyE@gaVqXQGFSQLC#;6uoQH)V3|=*?=~fL-hQQYS!5-*NE&y z{)ypfQ<-Dm-ssERYKXVnLn)hRQ`G?4#5P z_(d!g*D?_?%W2zf)4%1o=DKPHyK#T{q~l0#FgHQjfdmOT-Wa<*v$2D|-0uLUp`t~- znulMNxviaUUU-9Q8YuCln!7-)nV!yu4uKC+z-$ z=8$S*3~g|rdVMxuJY#_fL_TrDHkWcx@TY|2kI}Rx=X!eO61H)9h(XMmmVIS8oUM53 zfeg{6E{8`Dzc1NTx1U5^yz7D@jnI)FTvY7_-m_D~b#>9mI#w7>vyC9f^4zN8aB^~i z8E5fla>pwS?dcH4mLD}50wVALTUl_zQHjt*hAerTJE5n;+#XpKrxxMy=Z{KlA}SU7 zHXGV%k^#>)lM2d9zPL4=6HmG5)#)$VDB4&unZK^>NJGlYLXyf&Nt&j@g{Ph+Y|K5S z15=`2aVWBoC!d6M)pmK0Dl&|8in$y^YoyN|=ZUlrAsuHi7{AR{*7d{I>Uk4SZBm}7 z(k}61zX?F$qf;WR)zs$*`)|0hhP^*_vA%#0mACxg1TRn=|*r1mr^?KJ)^nA04AQG&zxEeOpr7xqN zpJH2E+fK*gUFx!jznf>NN_HSOFeiF=8vD;)f2-FIymze@1(_UBxo$4)V#0o^`rSNEcf_DGUVw4K6@BjB{4^w* zxRpcn4$!>*)G6x8_bZr22Y&+2*L9pAf%JZsK5-b8Oew_RzeH8YEioP#M z^_)ov42g1aMOl5e>aji84w!1RtvXge*g zp}9;3>cYHu46m5-q%mtoXuFofzXJ~NS20_eXhMN?UCM%B72`>i7Z;!OlT4S8DwQE+ zi9aVA3e{U#1$1ypgv-3t6A&|840;5A??l-_eLMRX3yXPnHu~FTVU=#iZLzq+59vh1 zg_gL4olFc3T~B_U4Vas+-#bAq(*va4+klpn3>3u^h%aG5Z;Kcq`~rn4uUR(KA01yIV5+R`!68P|67!=+SJ(M;^$8BB1{FXAenPjI6*>W)`H z|2D+3kkpBpV20(^@_BKs_ba3@)U?#DtqCIAbK)Lci)jhnPuHGCN0*K+O(xD~ z{(?_MEmv&SMvGHUQxZ`iM#UBGQ&R0v)euZRq(ohPF94J5*^9c~L4kg1+mY{RYk;j4+m%qqS=G5Cf{s$?l@THuG*gRg=-_!;QOw)2zBi z#9d37vW%KyQUwBGU$#?|>8HlEWhVR^<30;pRDEwkY0|>7nPQfa)J8hDfrEZ3EXXe% zyp0sL&Gx#B48aY+_#GLR(eN0#X8(CHzD?C4?sGrpR+5Neit=rlOF7L|5+d_6uaT8K zWJ5nbZA+Z0x|&b={!|hqwk#_o74?17c@qF+X)9j(rw*wZk9Y^fbKLGHIgMNfLv{30 zOw3hw#DX7}x!f^hXT=q{#P7RotEsADO-~jm2Fu38X3Fz2v>uuq24*@7HUx9B7!-Fe zD003-h8w1IK-`%I*GR1Fxy0{z8w^^8gjb0;QLa?EX4F%rw_pz@&N|0TCbaAFl#r4E z@Hy&vO_pRkEF-LiQYBzk1dKP&RbYZLAgRjk6RXH2lLeLKlwBJiJiSS=ZBZa-e{ETztbby)tGZ0(8jy+C9&o0=K_)8{q!<(WoUeaF*gCkR&ZpAuHu=iLltH{upK354N!GWh6|qs zZPmyYNZP;3^2-2r-|AFn^ru?Dt!6GxINx5dxdA#!GKQtS&`tS3gHyPpd*_;aUFu$Z5@3_E2tH3ekBTMyyjblnV zM#m)#o2mI?Vd{v2*U;GA`?c{hjKDbtk~SQ(u%`X$m7(&=H7(jJ^K2tSJJ6KX#$2zhEgCD2S57nQh_|1S~-utXXr6O5)9X`Iegc-szzO*zqo`#iAp1}IV3HxoH6q~J* zZ3;1z9Gq5W1bTU)QD|)T>IDEZ8{m>2Zz_sbk8d6tK&B@lQNofN(XZ%F0&Utpx@Jqq z+%a32Wv&5flN5gkrIkiC#RPX59DGHMSR5fqbf^-}gy<=gj3|#o;Lu?!6s(vai6!G= zfGV^BJl(~4d!$>+fe9fg<9ITUEiwouH$-jeVzyIn!weMPD!RAEK)YxP)_j75%VK{V zd3Xmn+9}~8cmSmwnW|Cb(Wu=9V$uD>lhd#6`!owjgCpWg*<+p5U}00(hfpTmFb}To ziH52Q>>@{#;W}d$RqIk(D2DemLS9a9 zc@E*Qs=HY6^~7OOXFC!bKwyZIoa@hdzx%g<9Q}Bz5W$TC;b}Txc(vqC5<8@*p&vAt&3e%5xS%RQjxp1*y1|DA0`2 zn0m^%YuTJ^mtFkPrm1SY+o#bHEk#lc|55Cr)u- zim1uac2Xe9;HYQ0JS-Cj3!g<4O5<;Nc`o{P(P#ALMV|f7CYjC+|Jmc<**@_zcUgv4ZU zBxQQcSsuB%FT5PB#5{%54=jkv-HE2(dV{@4e`Xl={c)YhrWRIO@V7fj z_L0R^KVbs_{krSTOC|8)b76x#5;-uDa5mxmm;5Z|yX+RB@kk@JVuQ+JO{r(>A;?(pPw*xWMDW=2!FQxK3cN8m5kh4?zIAb%nRtBJoaK_VIs5A-H_vu- zV&4at_6CN<^_GbIj~e0E#e)u0;2zx^=wVeRStJb-SfHz!P9vTng7G8C@_Xysaf8Ve zlld+QL~2No!#;{>Y<4^`#Dnm)R)?D%ff^m7+dELx4T zrsQt{2J@LY0DBI-*4Gz<=}=J<@2xGyQE1;bIwLF-w=TuXhKB6U!>nsFi&pQk9fu@* zmrctns#p}x0xWf9KH|e4#Qk8{NSRX}N~e5Yn+lGo*opGDol+6O&pWG%PXOnQOcg4N z`(HLd?G9EK-mnt4vwVSzFAj<#yL)_$5JR4@r(HsbWDei@uT-c|zf#r* zrQ2a6VJ5NAH~ZGxgKbtu78CLKQxz)$g6oVI zRc!|)oSgCacog0vN4*B^qUz+9VpA{E!J=C@bMfr?gDu6}_(yUh4~q!)K@+yfZIZxD zB*k5GDt2$T$SB&L20V*>V@+$=i@;d>V?YEaAow(L&kZ3h97Dldb88nzPL-@}FyhJe ziXifx6;)_cDH{@7LaLVm;mz4oJpUieTp9HbNhLZVpPKwsjdAN9bll4O8dK6hN- zVJPx(wg$HWAh-Z`r-%8?2Ru*B2m7Wwr$l2gc<>lDo32}*Qmrzp`|_VZ^5<2p}{slbq+Lo(+TO}Y&)DKE(&on6-^8$ z&4@I><(>B##W3BFpj6Ot=JExM#S`S27aR7Y!OsbWX|&ij9fi)q#tD1^rqP};F2qxI zTt{z=w~;2%X5*Z4%mn1zNtNmuHk*1D1xBH$qZ_5VN7NAikkE4d7MfcSt{vO)AU=?dg_xauL!b%QAhryoldQ=Sr#~w8g29|oZITxU z<3XK>Nj0l?H;)5Bczd_E;x(Y{*|Y@&Yw{@35gT`M?*u|5N($lfBrEmLW$z_AcGp0Z+){w1C3=GcP3F`OH z20O|x5pZ!b!i%B2sI?XZam-d_0H9Nl6z+U|334#9)lg}~sKg`@e|1by2R(rMn zMMJQypLF^CEwFRGY$Za;^3hJHZJl8=hzsksZ)HdtL+Fn-*~p&(q}TPOhSCT6cR=S= zBz;W(1=32X7VCDCnnw-3{DSnOIx=O}3OIj-na)4YnBu)b{=mKDD1T2w0U?0kkpDO* zfdCX@MkXOcB@j`)WBiAkXZyddNzh9G#;+=mHWIZM>wp9fFi`c9zlw!pOVE48%x`t~azsBoSR-OyX8%+&auJ zLTyp?LC0-*Y%zxM`1_ez(rhx~OjoGs?NmX;CC2TW#y}#o&HM9_AKl027r+^tKeb+u zt=-;BJ*1K1Yi^KZp!QAZP-fHbxOVjCU6+IMH$Jm(wj$}*EIa0VsiLM`Yrnf^_O-A$ zI>22|-vJ*=qCoj)aqu4PB)tS{bL9S`VRKNnL(sw0tBx#UYHjpWO{kS2*)bte|-lm8}^c|h?>^hLv3ufFD4eDo>yW-^g?8o#||S%Kk8XDh6>#0G)Mm$XgbDer2VnC z`Jq87&_^%(SYLg37(Wi+{mZ|I0wDhP@(LuFf5jNzS5Gu^{g3MqC;)oXCUozM2gg-s zCcFb@@;~8uDFD>XYXhTn2~%j!lg}4IrZu7bDWcqI3N>4w%Tg+`(_A0n5fX~g!0?(s zV}HE|G}_iQ9HT-294>I&0sX}>_o&5-Jn{PM);*(ZBjMOyIq$AjBE_ zIQoA7Qk;zCH@(lid2@M|*XA}5hfI9GqyKT@=Qq?``ik$W+)gc5=2rcFnGmqdLF?dc#9bBl2k+? zcJlDoSWRU4xCdLnX_rKyr~4>w(@H3%Ck@mep!jT(29E6{NLDO#8RKrE>9IfIDm(}+ z^z-jQ4DFbOioXmbcQ;`vC7X`5Gug3S49G&Ql@#^{^4Z|*cB za4HS)>fCo<4V9EE2brOIBe7sNJYJiLqC;~ikS%hl)Namu~zwLO~ z6|_`!l&KLQF;dvpIY;cag196gMc{x^;Jk|B$N&lROX6sPq##?cM7Gl0=mcp9;lcnb zmt>0KX_Ro?q+hpG)=*Q$f!pFFvp*sN$pu}SVBo$Qkfr(415?!4M3Dpvf{06LHA9S) z&S=96)YQBgVuI-T$MG6b{Xukn6pmmD0HU~4Z{zavOjf9ybRL^b1a15iArxqZEZ%-l zvl@veEQT)SpHb=vt27sCgfDB#g9{jeh+mmDmZN7Q9MBnqu;T(rMIR@>#~XI>szTxB z-!wH4yJ6x4VW%mk)RF!W8hNNGX=*~ex#Do$c_fs)g~=nI!R(JWhpR)H4Inv~{Ssh* z9ZXE|V=Dht1X2&qR2zbZD&?Y1UYa4zA4o*8R;@z4PTBW;5sJBBtYurg=%TUi3r4#{}lv_N+25Xqd-e=oS))fJgrahd8dYTCQvobZv5>M{{EF#k~ZemPTMN`(J zq2RD*Z3_URQ5Mxzz)=MtOUc_GN#ZDqjJoRd(B%jr_`S)rmE-cV)d(55C773U4euw_Eohve>DL~2~yj)x7#!NB4 zNl%Thg+6F%)f@`*nne;jv855Drayn@9#lnIA&$g(%wHuoCzJ5>y+6-h^HtLfKQhlj zQ_<2#9uX)gJ4lAQ>|G=ZeRb1}>= zyqTi1VMt}LT^A5Oknt%mKdzX?O*6irpWlZZUHb=w8qx9azpNe^1opPQfxsQkaC(N%+zFN#e1pjy%{*3cr?2%vPK@*Ff7?z6pjwwHhrW zD+Awdmlq@0%~j~MFfWc`eYyDP2y+3KP)cv-PZk8D=q()xWZ=l3v2i>fJNjuNWO&MQ z@OCYFlxKDe2a{ep-9Y(f%_F^hO@2oNMo{m?7kyXD@v6a?SvFMoU)_xEP%0QMdF8(g zJrY^!#D5Bla!b>=GK~~{No5liMFy)_%)49JXUTEwv`_;Nz)TIJ-oDLwdjK-g!B}`I zKx-0NUmCyeDpNrpejYr8LK3LNVY{St4=6(*fnO8i4`vhOacsq^D2wd~#p5$&-c83N zGC?jNP>^!f{2al<;{ci6@-x8sH36s&p&zt{mXVBCT&bf70iJ4e)hDGH;d7@DQkV-S zMJEIbxH)g%rl7HcK!B00H3n|fzVh+k(4lyvqS|>Hfgp~Y+1a-=1%2Z zgq-VvX)bGdgQU$jJIB{asQOES6f=`=%xU6_(aS5^A@Kcs{S(0njPsH%wWS>P<(S_M zDvLRoX~20H328p|9~%;)!zop4dX;k6UDd%Bh4W_cOg28_AX!@xp#*uR3Zp~f`(JkN zIBa(=g;Nt_i)gwhd%o^+5!c*PAe}eTNn*^QLVJ%FaZ(_b;J`VBDlrhZ^*dn&#_eHQ zq*J8ypAy3HNx-JE(hQ^rfgP<>>Hm(wt^r96G>gKQMhEyC7t!hmReNGhhd&fR2$6Ij z3x!az4Q~p9)rp9RkhS$lC&7lGY}@dC8>iX=ObA0LT8bV*`N#%?hec{{>Rl@3&cWe? zN#>~*adp0-qeR|hw|H@iFm_L+qaWd4(X=7z5?6x}aS`}1sfC`_Fw`LCX9mEP&A6;W zKKcVG%Y$Sxq_B$Aw!++|4VZ{;sG(+dVxt5~fN)Jbo0B(0Fp`{@+dW-vA*=C<(O(7m zz1!L_KzfG^wi~)I$%6gK8j;n!>j^((e#F4@$?CN-4JlKmm0w+wC*?j-MjRQHb6?cf zyaOKXv($$fuHr8o{i@XbelW6p*Q5`Qt_oWE!)v4`^9eIskKKb83zba~vi}Ydl*Ma~ zxE!00_>}R-NQS1Nw=fah7dnb0#UFTse+u`E-CV%UO0_S@vAagfA~J0|XD=ZUg-R}p zT48zcy*AH4gjza-*cbA!_%`w_xvsMe=eHxzgQ$wdQ+M`me;rT+?5iO24{Amt|AQj= zp$^@>H+w)~h-yi?oFQ{+*3(qfudH8LnUe^yOZ-fN>wN?)TG&;K)@*l+BIqpojPS!M zoSc0uS#}1~YO6+Eq;<<7#6QvLsSPxI%)6#Mb8h(#^eCl7^MVu^jJBkvRlak6ZfDN; z`TEJUnGP{&d_sFfTQd(t78OVbRKw!SdLQrSeBHNItiZ(wGL;y|`h$Zx^ER9pH9phVC%0 zNub`SNP|k|)26RRRY5}BhM}MqW!ff$S-XIJJQCVI7mU0u1E!Y5fGiNUgrK8kd&w!D z94cngqK(*Z(fwdxQ;f4WI#Rd45(W(Hm@G9lO{Y3491Rt0IuZwE0GSFT40(-3Wy5I_ zQ`m|lIm(%r!?6}EE3i~*5KBBsD4L`$h2)Ynkh%>E?w1>wl;dUjg(cW|wRQm%lZ^2l z$>&qAD#(BtxnMGBn5;auVe%sg*6==3Bx9ibA;DS2X2$yrl7 zv&eKNc!{EM6l_KCm)da{qeT;<;CAl{t3A)hcAKnG(vjjp5VZM3^hC!@fw8FgG)iWW zWG6%!eYZsDGf^ct!m5Q5fpSQF#-=B z6|NA1Pj2nBGqJIhbC_vgr*#;_O`I7qaxrp=owN*E8PnclWjp65o=+(o3l=dhF-6$( z5V2PE>*s#IY<Des_bX^5vkJDth0vG;o@v&2`hVXu^%a<65B%e zvTzh_F6&orvD7AKg97=|j?e-zuXOkcTRh8zN6y!uzPEK7XDxcIZ8!`Ry*-2_Xe8)x zFisX%f`hg4@GG-RNwHEFfY!iqGF~qv>?E2f(p7Ccw`WWqv!lTuvE#KFJvrZa!DEf| z!TJcrP)L3=XL;`nPoL%B`E8fT-jZ)ZmfjZU=NW&aMoN(}-GrysN^fG}5~j+0#mq3F z53_l6btS62(p_cy16`W8wD5oW`u~YSXJz5|Z>%3H+yA#qu>W6liF0k4SiDx0o~c?3 zA`b91l5Zv)xSF(#wQ@$i&@1qJ277r`>J3qPV_IV{HKNZ?VvcPeb2lnqZ&Q&kH`o1+kp%GE-!Ej%y};|?RgMf1^zK?>gU)jZ-QJ&SUfOte zb!zPdy53)ZZ$CdTAdh^{<#u*<=EQd|K^~S5!Y*{*=(yVb;)tP(t?^9o{?_rWA7i>2&+F0+oQ9z`1_wVpBuO`O&Z27yKv@_2J4ra1cy4KsX6|c&Cqxp{inq*;xubzI4r_y{)us^6Ju+U?_>t*k z^SJqcqa+8DVpoW!>0d^+k~g8oKIFkdmuJEo5>gTzP=fnI0W1MKpHcPsy{tE0-z5(g z%vx(hTwTsW+#^M}`CL@-42fgp(kMpEl!#9Qj0+*AK(5HXOx@_bWDkL!zCtB-KFz^d zd{3`>Z44nWjf0mo2R^xA=e);`$X%y3-kq^}Zd`i?zB7stUbqRG!yULyZF)Smc)Ol* zTX%H2FAZ<5zjpBaD)xLcQz?NSyZa)Leqg;44&_b?;YOhUg9N5+ajGe;yJa!J@vd*6 z+V#N0*|au*z@KRbFPg<1eZu8-s`K*m&rP4_r~Q++>z|kQgf%&Y{O=FPyN6+wem-6= zzl!QA(I-!${8thB9@#6{r?tLVqFH$UA*}fcNNMU*nDO%E#j=M=qClH4&{6>>TSNIS zqww%FX+!UYg_x&=D|bbQ2H;x?Wh0e@C93AN=1&_ttL7&YA|Qm-XHXX+(wnLqxlFKws}UMk}nS^}XjHA1{^MT^Y2zu6}vOgVFSyg4#g}!7mazLxH z!x2bwcUfD2Z}^1-wyBS|8YAe8zmnaTK*bVz;#u{y`(0a1g9pR{&{+xkt zS!J8s@!4g2h{%+a+@307xRl~Mcp1?krGdElS~Bm_tcHX&p_@XM*h-B=E(}Tnax7Dg z;GI^yJ&Vcz#n?MGi4t&YmSx+vZQHi%lx^F#eag0N+qP|6bKX1AeJ7%CM9(kCi2Rak z?_B$NP|ec1j|Qp<XT*rO^ZMw=i9p%t1d%RVH}u82%fa}D^*fhe;B#{Gu)dNoPS z%Z(Gnh^Ms_rS6(k^@St9GmILfov5l?4hS-714PAF>yF@U#e$uUgk*y_C>YchXqvF; z$7@})Yu_1|ENn?N3c?RStc{pJud8_DbiP%Di}LyD*5o<8E4-=C1f;?(3=IVh7jwC%*&io*_F zQ!O@Crdk6|ML6k^R$^=(=xz@q%LP7zLy;&6ym~R0Tt4=3?NOUG!Vw0g@W1^7oJY6^ z*W}#OiJpt?S_amPAzWdGR?IBBK*mqTEr|cf^gxk;UCs*}q#v=HGl2yxF5Zqcqjjh1 zuji=bd#G^QFA-}55tt-$qUh;WX7uUY?S_XnMgxJu@b#hs20>B)hlAf0PGhh%w&B~{ zZu;Ii?ZZ-P>fwcGM!Yux%G_?w*@8d8Gu1_G@o3(`kfk9j6+|jzp|%F0%xlH%tvk+? ziYJ3)Llu!qYE>q@VLCzS%{O$g%(mgCgs2XgY4Z3diznpM;kW^ zvncZ&UKBi4qLE`W@BHl}_EfSkE4krRf**=0DyZ}?c+@;+dP7C}Yc(pd6jz$erJ{)` z=dI>RtVS-=e8BQvWfD0;l7|qXmZ3(aFbR5Qijg^*+;>(C_!5JvL51}O@oUMOiUj~= zo3EmkyCLJ~q-?DFc#CdaZ;O8iMz$^0o!j0jnMt6zK?bL{!C}5nFw>1W_goVWyq9`O zw9_ujKJA#I&5VIuSqt1jrRD^hXkJmRK@o!jhQ$nQ@`{<#z<3{r3Y77Jn{qtO1&DR1 zgjIsV^0?&mGGm$JAxb1^&D?j{1X41Vy#v}ujH*x|71=1jddUQ>v|vKu7{ksgwb5b6 za?DfOtS(a?uqaCP=_HGKc|)q|lNqCDm)@uU=2|#?sw|`(HZa@zJ9KiYa0+Hn^7bbu z)maOb$6ct{sb6}dsh?M z4k=ZaA#>R!%c@v=j1`OT#f^8rFw^YI(b)=R{Z;PCnAmw} zT9T%gd%IKdEA%t3#z3w_nL3nZZPe>5m)LVT%hZ-4xy9Q7v~AoL7iJT}n`!HE_vR{3 z$VDotU4}~lbwR50N-x$XqfW-rCYz>-1>x&5hoNI5RacpoB3qe(d2{AAM~>NRFA(By zLBFcoEt_isUDEL@-=T!tzc>$~e9I^C)_%2-Kroqx&IDTK| zFW)wUTK2f!pRZkceqNrg_n(KjOa0i<$7e?dBL>%4Q>h);%^1HQShM~Nhmza7-(9%z zXkU8=77ILGxc(0ZxFG1m=jLy( zIrknKtiMijnO9=?O*6?;dY^ojs(2O1HhVe8>kSTx^G3iV}S`XijZ*SA;?cj5l z%fcVa-CLU9xfacSY^%hent~ggdy^ZyzYn9e52FPO+ZGS5dygQ$`9it5aQ|@2veS%> z&j(|Nr=$Px{`p~0z~Q1@*rqbx=`9;IZ}`G(uFUrz*BmkAP{{q92V*qFzVV;uy=VvV zPk@n*!`4)?(%!}h_eFQ3bIqZbm<@Gb4$Y`(KYpK8jDMdfw_ZQ@*K=XEW!4fjVX{6a zwi1qwBGW#7-pl~tfgo6(pYa_T21FiRQLlZk`EZZ%8M1!suX}CxIj^0WVs!nu@Za2+ z(pM+=uB5jZCb%tQI;Z@QdE+N4>^#%GI+Fs3{k5kRXz!`QgRh(^@SDsbjGhqc^mV-R zFm>*>cbhGu=n+~6;9fAKywlBG{nHu3%#VIM^~fiU?DNm~F$k(a6RY(0ADosV_gM5TQ08 zxLj|4J+`Ydzv|rkC&NfCMVnB2A!@WyVbPvZ#U4r|-er_ckayY)2v9vJ^(gb(Q`g(o=y{33-9!vI&kb$IiBc_6w(y zl=#~zEF3eaW;NcFO~GEASGb-XLPVj%Bj{*T*=Yq1GZECK`BZ6RSJuTNpNXtliA8lm z0VQH`mk5Dj3RoLZ-qpqjHN~hU*O^n6nK#zO#&ce(70-A!<2E5{=XSppO(NPETbRG- z`BVR)@a^KdT`SL@8djk)Q-0)ws-ZrWCL<3IdmJBLklZ+QDcnGG2Ia<>*~Bp11GE}Z z9ax)*8p^=#!l5KUz9=A9(#USUsP>%Od4O`)wssnDnH%sC8#uH=-FWHLN}mCmG%K^2 zeb+|jxKpI*6e_3(u3_CgGla2JhoK#aMcyJAp{PPcpOK>+2@3(4kC3uWgB%!*=uQ=M zG#@@17fMU*b3WB~ii~2!Vq&FA%;q}w2;M%L+dJzCOUwE_`zWIv z1;HvSJ0Bjj>`Gj=ywROy+RU;+1qzU)>(*t9wS1zX^4b_Fdu4B$N99szU_7#-k-Pv$ zQg6ntz1#{xX(5b>VD17f`i9~dvL-Uwm-mukwXV3DMzLHctXHIHOAY5|(;cX2gh?Ly z=M7%2n|4JxO0fRDtt`&wGfCIhrH^nj#81FIq`Tz7V2*W^E|G{{!n4Nh8suHV9=X3_B@Bml6apqoze4 zyy(hfRU}mpX3L(_ym_8JYB2cs{FJyW77NLU;hqubcr1D)Ez4A!iKCvSQ^fbl?H;PcTv3t zIda*!Bx7a5i&daq$jxNU)N^p`fr5~>EPQ5-UtiM8-u6uC7Rhs+>fK+}y{+~zk}7>&(Eaj!m$tF5zPJDTivXb(UdFi0X4tk4Dw z$7Es*+OL>OfCbC1@1ewvBWfLzIg&Qc%R5oWKmzaGRtwthFlWT;>T+Znq<&tN)7X~s*(DI8kGGBAZA`0fWLUaJ5zoyMiM zPBf?|FpE_zH~6-wjh&1xIS5VwpXFHgJ>PdPl7w^ z>DRc_1|M-bBxpI`pP0U$&1AyGN$}FmtiRB7DErqETCMan_+;PF>cx|cXLiN%j84m^0@xJ^$FZ4 zR}uPVX)053Y#}NyTCR01jkc%B$R5w7Kg#~-Ki3`DHvVo!GJROnOfOY>op?{UL4}>} zSq;e|y{FHGe|hW7Mqb~$_4c1IwyD5KK}2#!OWgT8ChEa9P;n*N2?U$EW?S^pt3)Z)&}@Ld`?fpzPZdpnUP%z2k~E zX->Z|k+iHQ+>QGK-=+t1`9HASe<9j`u^bB{^MA7(`~S&u{|V0ezp~sP$=d&H&U*Fc zPXVy%+mPKc_NFs4NWi@9X$ZiH!3A{8}!o&OhEeVK3=F+d8f;&NhNwH9Rv0uagyqIl)x{YM_4D|YWjGY{jqsx<} zoev5F_)!@+?yJ~;`F_0YXU^vkcnyg7@%=pMEAy-~cz88*O*ww~{vBOM#d{y`Oqyg0 z4-k7==Ki6~>HADNEI&VTPrjg7^oM(e3wu8z!*@rS7fq-Y;{kJ>|fsA+LZ+Le9e(UzNgT8fS z3GHyrp|PzAgJ214VZoa(QLb7Y=UJG1A0LsDYv+J7DhATU5f3m!>c8-JSLvYNmEUy8 zDP8OX(^1!u@LEZU@A1Sl?Z#`K0M#8*F`W!J`b(oA<9Yn8eMhz{b0vQVuXQ$=2` z#4<5vBuB5G*#G_u0UyQb(C)ll@@@M1D~?^y#q9G%&(3dovHix`#;(qNfngX&KK^pY z6^Pzz^pW~9=n$SSgF;@2<)NQr51!7Q8o#SrulVQ^XOG;OX3xi9V(6je5d0~v=NiIn z3*^=!VygC!&)&OHUblzl7u)=BBjpo}n|p!TL#H*JOq`jg^ReEJc>*`SkmSSD&7z&% zZtwekZ!X?#>*uye)azr~Eg!ZlLo0J&F9=b)y8*9}5I` z;}S5jouYuhSV!L?$N-c6^1aL$1$cu(}_=&aSKVlYGhN5**_hVAkxV5 z5)l9zrsdPdtrJuA6Ji}9sI1NCQCpB;Y26DYE4slcFCzt_Tg`6EUJ|M$RJVFa6d%9G z-UJHSg!zSyG^65XYgdSz5?eUe=QMt}uOubOi|M0bK**s$!h|CzxF5awF`+m^ES>3t zu^=Y&yKiKY>uSi^PZ1kV;o60;0LBo{Fw&ZWFQ6v5_LH1M31(bq2MFWg;!6~E4`u|`@yU&J^zZUYlZLapVQ^aX14=Tb^i?Pa ziT6jbM=NRKZipuH$KkmCOlZbn5!jQ9v1R^})(BuQd?=|LNU6N+0q!C?!NUF!%E54U zXRfwJx7qaG9NDs2dJ?(RmPJY-fNa8Alkk5@TJpY`Wc|~}QtWQpA7H7Jr;DM$K7GW& zPTT*2$Q%2J@u;AtiXKTssh^!KZtC^=ecpQ&n_3CcLfAv?0 zOc^c*Lo+5+EO%&QV|%=|>#X?qVZscDdXogT9B^&KC~xhj*25X7BGvBMHgfwR4ITF& zSOvrpStJz30}lc5A@||q#<6(#r0Ktk#(_?6-(y`V;1~t4WTFT|2;Ge0iw>y zQ_c<8sfpB`tIYz4(rsi6mVJzsrpT13KdQi26kWI6kq}7_R)b-@IpU4pV$}w=o2eK) z5MMxx;9=Yn&qpzmo)wg#TgU~sW;i==p^~)<+~mk+t0~w(bhIq5akn8igjN|cr0hE4 zMBv6Ib-Vu;XpjdUA=#2s+uM?~&9tk(+v1Ojg?=arQBZ^m#+a?zwb$73LqRj@Lk(t+ z)lZpfjlm)Sn(|fzl|=1|d<+;7l4DTqBxM%>QK53>X4VEb?En?pm4k{Ge~T7Saj}XR zk4ZwK3a!eTm<=veh#BCnmqr)!bVdd#@yZ7>O`J3Q7~#$u420WdL;UUojGii-6y5*X z4Y&>W&mu1mkufK{QflzI0#UsyaqtogcC--A!QVjecTfYMV1mFSam6tPb$pg9F9FX} zITwhoDoB>eE`$Wuvx!w@xd1y45J7a?^gQ=SCWjiZy>LKr`%q!+VYxeY!VmIf@u#zr zS>$lw+zipcV#Hu&Xm1TqsOs>#sPa5ax1plvD`L^9HG6Cl-25EGl&Pu9m^j@v48DM~M0$u%>tg3Z~fkk|kQT(p<4tN9= z0L!ItWnInvV8T6)bSBv}JZ|Z)&^Ba1xP@KB#SxB)Y?nd;B#BhNo*u*SN$F?d*pSH4 zKyR(OwSaIX=3Re!Y*x9=!0TTV`uH{M$mE^p#)`eEJmj@f_EJbH3b$w}=EMk;X=}Eb z=wqFw8((R#bioJ`y3Oq^mJB+$7sEt;AI^eMNi4jc49{04&>op+?YykTDh>vemP!Ps za*Vm4T&NjiOPKpvg!KskhpsV}gRLcDCL7gkon)oIl4QFcrQr*fp7WT&j_v}OyQY_T z2UhRQjH3Ceq$^m3M^T}9>Y~KTpdQLbPnbBM8H0Eo7vhbCpj*X*9@uW&V3uD|APTuKsJTbe2r@0$!9%`rAP4x6`$?_k*EGxSlxk(rVu} zZ&y?{SIGG(tvu4&r7l&e0{RM6k-sTfzX^LmknM5CieV+N+@&TtZ;|MCv+$hG2;eY& z29>xU$1=1#Vrbhy_hK0bd@uH=BpjkhYfn`_ZImFQXGP;)u2-zbnrXhLl6|V{-yLm= zV&fr4bVWmF^e0TA>FC)OX+>XjYIS7s6m>Ah$kwBqvuX8;t4T@MRcmDW;&-;&4P$Ur ze3nWqY?^7SV~j?3WMj1^ba0evmQfTFOPpd$T|z}>{iZ>N^U{@rwa1~p0X_KKu-izj z&=MB?(-U$Xf#i{f;E50NJ-D!%9?RLx8NQZGS8Hz-fAE(acO{k|rL< z;GNg?N@NT{jaT1@Q9cHG5%4kWpNOs5x|E3228!w*ll&4w1bGk85Y~Rc;*ug^pMw2! zEt#vXQ)tfzk9LSjo(QE0CV-tx18cN2P2fnL3(G$vT1&O-cnzEAadh@ev^4cge6~JJ zk?U9*Af(fXGufivmQ19Abdrf)Vhqvny>Yr?&C1JkUD-9uwAe(QK~P^e(V$e~R*NTxRWo)P%~^l&1RQX< zo4>IxQ+~&5Xjoxkf{iKJhyD|rxr5~%%o-mXuUD9QS_Js z33O60NL1dN)jS+%&C6(?S?`<}00=M6*)#*3}#jj5PZ;IOez zR!|?b%7w)aa0(GaKh?_>%%;FVwxfk$|NBE+*IrpYsSWb$K`F@&LtIAbH(a^i?d(q2 zT2eR6cmWf&)ih6Q ziVvXIg(+~i4zX3C)9x~-`w{XF=dPQ_ELnkp9{RP>Uy9pav6(o704jo!pNel0n5R`f zdPTnp^9Q%e$UME}Af;xuYWvy%G;BnSV=}n;cVAh%ph<4x-NHwfRovmANX+JCM!F&+~IK=LH4BYF6plm~VQ%i1oVJ5qJx88Sz$IUKk80U=3e$T@k(o9dxHLhWWObBZw z8J&C$}D@ZlX!BBgP0yX93{3r+NpFgc6nid#W_hla=^yihXInl}!n=6Gb z;_hc2ze4KG?A#&<97kHrM$+@QM1+%eqtR`?;lZH^sKp=gr+{+4S)Op(G*`U6V}-q% zTVy;=r7FAX`PKOgp6kgN89uyodi*dz9Ax--=pMH>;!sy%5_6oBwTV|q`g;jhZqpmy zCw1aUxTjB`1Csq-LpEO}m{z1&bf-BAqp;333^;hXx?g{zSni(;D!{Eo|(A1VSMUQ9Uvj;kx6jgYnbOs>$<-Z|fE({!*RH!3m3E z)MhQF8qgYW`Z$fDKI3Bf3vZ#lM41_tdeLu(%^j9k%2N-tWj9l2Myxi)_Ghq#xMZl= zit8QUq|h#yp`eRy*IdW{O=L^)=j_r+1|X4JdFr((-Wk;Q<1G%7YY(|`G3|ZTs?ogV|$QYKUaw6?nj}DKu)2TfFOOrbM zzLEB@b!=5-Wj6X;sl9w85ay}7-tMERL6>x7s59=RsCb=xa;6%}V0=*@3{%himt|-m zequ&jX@{z|8Evi2E*lMWn=QHDDnZ%~ntmPs^J{dA!rajd{D_HN>$!Xp&Ar0bc9+{C zkjQeK{Ivt=&o!={q=v;$xXZZ1O35WZyb}e<-NkWNBz_otDwPBG({J=aGd?(C=uXns z=|xue9G>82G2_cV!p~`KA&98hPD#`7-u}*E{?(^4t$mW-Afccz_k$C1f=26%3ULkK z&lW?&s@Q}b0%J78##qm*CDAi(41{NulTn)C`5&Oxf^zZhBjZS1G`QkeQ4etZQC1gi_+cQfwPM_|_B z1r!hb%OJiyx8m&`d3RM6%y&0<`^gUv7VL@g>K8$=j`gqEaBt>scu$1`ng3}?^S?sN zSy-5u{`ZoG^M5%{|J}U7`TwVSgx53o{Nu)4pUM3&fjWX8-AakyPHz>+|F(I z&*j?eGZA`~GwY`AhZbnDm;Uja#m(j2p356G@wUt5=djn`?P^gL>I+l3T~}gUXOanLu~#mJeHx{=Wo%CrQ+=7*bG2Qo0`CGKB#w4= zflytykp%(?kf`K*ZeqCpq0E$2H2fx(0~@zEXBLP>3DFBx;)KysLUjr70^DsZbInjw z|D`qrBH(JJN4EsFzA(z-g{P7yn;%_KtYXp0CATvam>hD0ghb(02GL`$v{dBqi74i5 zM+GDu}zfWZ4gsd?ph-%igrouU`{clV0ICzYQX8sD7NFIy_`v}4`0*_3;upBEnU zqoN-i8s{189@`200sM7yotY^@xj-%3@hm%ETiqQi*(lr7oy`oHnR;rYnOn0zyKcF= zJ3c?N_{ndJo4LL}_OE=}zQd`%2J+9;zIMV28x`jM3T66AUg?1VBT%?0O>{-$9-u#S zn({QI?HO`h>6^Q&a@I#1lBHR$BkR+s3butSGvq|pXHdS;wo$?P@a_h!@1xVNNh#mQ zgWJ6iT2IEbgLL;I&R3#4B+HV*$cRWEYGR(4!)p6gB(ee+fL17f`6nq}-y}Pd@^3po z3>3!ys^h86OVM2ye+RbEeV34Yr%uaABCL9Hvm-6eSnH(pl?{6_(Y7*GKwK2AEY!6? zkm6XRuSt$lk-SKRPNxVpZ_>|^n|bNsV7(l9d@XzIYem!AM8G}Ic&F5}aXnOlVrRU8 zMU(7M31@-Q5m~W&^4g=*hZI-Q!hc(1Y#Q2_*R`}!imh-*xvY3f=h@9@75ZoA)oOC$ zatKC6yD~9zO%Ols&^-9A0NhZ*enh8lm{y_C&ZN4E;bV1=b6FYGZUe1UShe)#wVPJ~ zQs|bO%#94;?HPD%k-NpEy&N~WP>`rfe?ld8uB^gdSB|2pSwXGiRr;)34d7?0qOL7O z#s|Wb0LaoVj8jOGM>Tpl^66|mT4R4G$C82^k4q_m)d%mevXtS;X_QmcI|p*bmGOh{ zN*XnRY3WQ>@8@lu)8?VXAbMp5%vRSuNB|_KNG8zn>L#I>`A#$rWGkn=ytl$mQ-B*u zGD9f^{hfyxHD<(vF2f|VoFF>cK^e~jTZ1Xt74COptp}-Da>6+6Mchu?A(IBomIiodio}u#7;sKx3qcJ-vjV8l ztF4Gk!%*_9(n2_%j9sSs>l9G&bmi z+G)T$9=wsH$*G$f?qeYR*B?No02c=^Lm~E91>xxo0Cl}<7ma|L6oESBG{VyvEMi;wlePtRb2E}pD)BA;XSoo* z`sm8sbBTY7Be@X%Iv8I#!6y_k6EI-{_Yza%l2MuvXqQ1V`X45(^JRR4f%tM zC{T$)&mA!lCAuWVwODO;=9cL@8-gll_$Nj8SF(5^{Pv>L7s&QSxp(Gh_&@)8@++0~ z(HVKO3V$E6_5M5Er__$tYd{WrG~iZ|Z{ zfrdAU=n{U=#hZ~}5>MOYBBYkCK3{BZ6YJG1(urrWx1*E!I4_2COMkR}c;9ocB)SsB zcBF{Q-g}Y=S0QX)2ihY&Tg{1J6nyote*~ipFkPm7%4<)-mh)CNf`$(}ZBQB~Nh(29 z0r3%gxVbu)>yICWIeT?pej5?4R;fw}21}i5B|~7n^7RWOAML2<>Jz0cSS`wk86&p8 z7=c&g(_aLyD%wIO-*R(FYy3OV#tF-r{v5wX*})oO^khz%VB0I|w^LMzu?Ufmzz!3$fl%Vi+BI2Mxsq?vi8DY~an_ z;SxeMSo_`h$~aCT z56R54T!_*#%p@5nW?$hSbE=n&t&Gw+^RF}TGpVE;{Ze=wpRP^r{(3)}6Uc5I#@tUBfq#i;nGQ|Qis?pN}5VO@Pc^i6QW&=XRgZWj`itR>n zq0)nKj8GV==QEaaDbsRd2V^GG(}tm%c!xoG-yu(17gkIbnk{>wGGhtl3ZEvIrF*+* zm-w*9Q}nFQ<%K4xQ=)z8ejst|Zbm)DP{u$>W03wdG!~av<#KI)J`ZZIQhig|BqWrk zkT+JJ=$@&sKOMae8lM66WKZ{Mp7H+FsP^>nYjO1E`U(Qt-TO$)&ViDeiye!Xsgo|& z_VmY}JDuBNe&)Bv$sG5O;46A>f8!6zQpx`hp!{F_`(J-E+1dUZlo>hyPc@B^^Z%Ed zrXy{K)Bc}JfU`#++r~FC1`K^&sD?4TEYx`6c;US&_8krAp?@ja{8dEjahMH7sVnmm zSTHj1UTfYgy)_lJ8bu=T+kWb|t$Kc+U+1^@ewVKNSL(kvBIKTgK4yXE#mw2Ob6(Kf ztGQ}^?=_z;F44t1yWT(V{Ca*`wY$G{zlZtAnbS9QdJ#Ji5NaH?s;e_!@9_00YmV0E zpKrhP)byU)l$+4_9i1tF+u)0oi(%=%3*T)Y3RcKUnREN6m$TI8*7UNaCiLZhJ$|Iw zPr9L!7qiv6A1IArPwqK`m;(B0W&2s z;;2Ev>{yl#(r#$1$`g`D|Kw?*no4~x9YHD%H!nDE9Z74HJ^0-Tm| zW^}So`%(5z3RK&BjJbTujf_Z>!<^`sak(mX?40boPo(sp%WZsdEcO|#oRlJf<2i*& z9RN>aW)(8L-%GpYyc#)7Nhn{)Du>&g{5^Q2{mw6^*O_h$2S)U0P!3yQfK)gJgu%Ro z4lLRGJiSb zPkM_$@^tG=EK@G9UJV}E^mD$oQvomN{BA-sb^4sVaM!+gUp&?ORW4atbTE%ZLK|C%+X@a*x1j&01(l7&No+( zap_RgnF|M|_0*$U#0A*z!(;cffp^9K-PSm49)551cd|}ly#ece&*a#YTM#wk{kA(S z))3MR3k%=8TQP_d2KAPlOyHyqeXm}p{9QP}Um^BIQ7>+%qP zl9`c3%)YA%CfG4$$&BUgq*GEzH+Vk&XKo<&%s|D0Ls-cy6vKmf`Z8EpC>&}QNRsah zj-}sU%07TcdF_)0t^GXM#Nud#Z|2jF#CZ zHU&hrl8um1jYg9MCXrtjf7-afYQ1@HIC^4!$;2VYUigtdDp5c^@UI}bTKUS6#+drQ zo~0ocDc40KGBg-280^9>5bV7JBrq`-FK)rc7-F=)4K_~Vc}+I9fhP$hqkGgCgskZV zoe?@rh`6%&L6L4ee>5r2gex=C`m$=ryXip2F*aZTx(_a_u{TBpH|NA;IuAiIZy~aR zOjV3&Z+Vx|lA~vHGC+KFE35o9@)a#v=ua=B z2y2N8dZu*cD(x>wWYiH=ev1Glmrt`mvLZ{h<`x zw}J2x=uTEc9S9HnGtfqQOizZLUYad8SGm?&d}Nhz%X4=LIi-1QPBJsKR_4JNb;%WT z)Dx`!`0PtDf~BRa(bES|c5eswV;jjc`$H#IHrmKroo>9a7;tPX`tk#zZ}}!`9%+?r zjKbS%;(}#{PGQTd7TrM{7XU0pgj772BOmS0K<85yRPl{SGf2|&8ZZo}Pr;M{jee?Z z?$^Xvac=)TxAlp0bwt*JF7Pmv5+St=(i^6ePzae#Qz#y1zVF3a^u zWJX5JA9!Ca-&<9?%J|secgD^(og2MwT1)1$Krx(YG-N38LBVu12-n!3?v~Dj&B)n<2mgp%l$s{$_`r(Rp!W) z^+23an?$1#afi96b$dm+s$Sz0bW{+R@L=GE zfG&En0*>;#IBdSPD$lE#Bn#*qacb1Y!RmzQHBhF&V(9wE+Fi5q>Jy7eutHLB`3G~X z`O$!iY>GcAA&Ct9sgQ&?VH2tO`7=Pi&w~$HwO_+QmjFoyN3><9odgl1lWHloCem__ zRD1Tp_zgBOoVVC;PSKR)IB2l;-aPO! z9bf0Sy{w+pg!RfXThgk%+iuiK>`5Y9cC`Yr!=SAry902W!!f^csx28`0A+S*9)f)- zvB@mL-MMk7R%uQqsb13VbhUo^92;1I^;We7{fH#)nRO!D*ej~KZC#@e3~`I}P~Vh; z_JI*vjiCQ+vxW1VZs6;~U!I9(t8^E3uvqK65(_)|G^RO8_R|+6TlrdiIN|*)!vi>N zfeHX&Fq!6cc4I33IqMU)3iVulV;PyR5}R60$@oGtn}Vgy zT{;a!)fIgxALy%1=kKK!IfTYKk1T}cHjwhgKRJ5?>Wo)2)aE`%9vdv)X49CQW~+!9 zlV%Ugr!D&|LYI@LgN7`}Y^5)=l9p#^dM&lV&Dty`M?|?H&v80EORq^mOuFua`w4`N zF%TZwY>_b;LJ65nfDM40RyrhKWCwCa^S&(*ocIEyQ|Ek+_!&f0V*;5`NwU(E`O&g| zPVBi|eGp!duHMlz8O#mCA%Mx*NOoHyAdU`WsYOJRh}CM21%>#qtoYYCQqv_I&JKwV z?HOxVCPBe_06oVmx;>h|f(>ABfXn%atCwXv`BqH{0D7hcLK{W#+HHP~FVC_Hvo_q4 zx)%l=h<;F(tC|`TRF_5{x1i2V$fpu~VXpP#hi@kBZ8i{vGF`kg7v*zerL4Rdo^$wL zyLwK7`_YAMDi)8HeHgQ9rmefokux2splql!h6vE<~Je9NWxmwK5Bw6S2!4;B>t_Tewtoep^imGLfg+4YhA0I|UH&LUC zbhO=$15vsasD#fqtSTd0055S_O$q_y0OnN5vk|;x81Yp+t+8t z_vTNX_ID|A_E`v2c1(-DZWZWO0ACuy)%arTr3sh96tlu@+_dMcb88hcvV6&`Y99>WGI3eihe|5?iUb39I zj)2T-ZEo?f-8a$2QVhs6CotQX^-wci+7=e~g3_$MS8@%pRQo(9L@5=FNtdNm>gn+R z?o6%nY%whXPfB7H*c9kl^`f4DywgurEO&T*8THf?EG>>rsJNY>sAgm8(vytl=S2Q( z;X9Bi(zwmIju$SEVue?VTLEyxvWmIyLyBQ0C}!yXJ?GJ&1DAQ?#8ER?!;A`Y$Icc$ zf{&ebABc-6v94WkOBP7Q7tm-VBs!1t?WfuEcbn*0;q9%6aJ2hVtug* z`G+v=-ywMKH+S4~2kdZ6Hp(utTJ$_ ztF+y@x^$ca_bLzXVi#h!niLL%)Sb>{S*wdETk(Max`1rVnK0dyvr;16+xJM-w$I$n z4sO;n7WS0{D=$?sv5E7>It3e-N%t^yPEFolA-rDEYS%=l@VoiRr@CQqR9}1$m3<}D zcTTf6Q(s4EJy?xo*v;uRjH-nwdww-27ak9mIflly18o1E-XlF7g%%38fJIA9CBdMg z0t9@ph-yzR zn5r9{V-x?XCu+HivU^wpv|SXyd0Z^fP^AQGY6vz>c^lBfU}U80K!_C}!GviLHh`ND zWvGU6jGSdAT&^!K~(lX6ZzvP(?_2=NkQvN)xWq@VZoO zABTXQ1v~0$>bzuFSekrzmbtM|u!@TJ~D^mT_6^_!OqzX zokvBr!k+NfY$Pa^tZ~DPw&7g6l6V7)5Yu;LQc;@wbEHs3u8vkDq0y=63EP-kX>FXz z&BLj+dMo4iU9pJk1VtwGJc0`@VizK13`#z^nB{oy#t(XCffei-p@H948MQeIiUGE; z?n9q?uy#ISWjvk5rfdwJZm$|uq)@p<@}vR6GIpr zEmCP?@Fu75K#7T^P&sbrY&f!60*iQ3`hTwR<7lKAz=$#6kcw+`VaKortY{NaK0#Ef zn>RF@OfX^8}7nDrYiDRRnyRGj@^V4>4Ahy{i zsI|Ouf@@6Z&5ALRI@Suy<^cex0Ys`4H!cXk3zJHtPyCCr+LosASV(1PC~9q&31toe1}PYoOFG+l;US5mucv|Y$9h)Jf6@gD$u`Q1DkWotctp2x#8VXvy{ zy%;3X)|@*QVxzo7?9OSci(?p4Qh9ZSJ~rCavLb7|CSy+1`x3*DbRv#u z0BJ2Gcp_g-tpojrGA2w z0`9e5$xh7(bLwFq$O{X79mPAN(Vbs~8IO{P9n~@C;2YH%J*a$aBiR*}q;D%7ZnF+` zeFY?f-C)H&Lfy?6wcl{CZzwmp;7)p(eH#Gn^hxs`?%|BS@zamw3Cxr{7mU>hcoX+? z$6Z4oc>bZcF0M~YJ*MS^zZk(11PwS9)GrIBqvlJ&^@qW6udS80ic@DZh~E(p!#udC!T`{pfsC zKm1PCvM*>$$V+`ls*=v;a68eAIZ`(0T$O+`E9!&UrKB{*mVsBG9XuI4$>4g#M(D9T z)AcJIavijUT^3l6Z|^z z7`WV8E8Av43od&bFIHw+pz@fm>fhsXkGN=+^4yrUUIj%_hVdPO)6wfa9tOB)rtPsZIy zQRykW&v+Xg(Jurw0mtFGKS<-HWj1)H4n0QFw7)-ZU~KOM7NU{mCuX!qL#$VC$Rk>b zdq1i1*UF=B_KKb!gb$+Gl{E1<(5uPvxK<$U`b)fe`jY|Wkt30>7HiX)8C_|%d(LZa zwHPegIJixAa|KB2^bD_mfM;{&PAa3b2VN^y-UvJOSEH=J+*@9>aTo@qH0bdlj(@E& zunV4x9rn_S`oPX_)Jh(r1SHWoPZcfY547p`TSJ!BUlu$iO#rg3-=(;?jCQ9>K;6j; z92i{#939U>wn7-YxGQh!C+MPA9#`ZKdjYFu+r{^qdpua zy=$!x($!PpF)^ahiq>7IG9BwSh4tMIBmB5x2S*f7FTlGVnh~S!G$0q3-Df7nFaJhn z-?`_C%KhB0;%;kpatj>~o{4RJ4W0dPsB-MJZkjNY;Ox%1LGC!Vv6obU%?kuG=5L4c zlro0DbZ>le{+ zP)*x!M;k7i)Uc-R0w)jI_{Z&!aj%WG=+?7enO)W8nRp~|fy?sy_)|JD;|)AAXVRm0 zDhEVn_`uQ7VZ)4#CMD zxodW8jC@yJp_teoDcBTnTYV?MXzaWBH&(?zroul~#dn7PGo|Nide8q@c*Vl>A5H2} zU$tKQj_9@c^NPdQ2>ucj9cHMe!E}ndiE%0<7a<6zQ05%Ks&Mzn#r)@w@{bYiJN;Hw z+N4$zg*N;N4k3vK!VgQC)>nGAMLr!bB$LaR0~ewo%Y5h_(N$_25r!#nh@B6i+g_aO zW~{2YN!#gF=UrQ zH`2N;Uji{u9~bc|UA|d{Hk3Q8n1U@wAFwAe1eHqKj*m+fA5hNgo{37*XhTEzF&IUf zRyI^`&NT4QJRE%1)v%lE7h==|VK@$=$9zTUG!nrL#CxVe?P9apfp@FCr?Ox<D=cB_J@|1o6Y~|8=<*wCTPhYZ`wd%U2Ta}@ge35~^;+NT?J)Hq=lI$tl$6&> z6Zt_F^^kAHb3=$w;8+cGiEll*>&9#B_c7f#a} z-n<<`^f9AXM_os&rCl#DVsRp%opFIbBSEvcMVLdfI+$8=bruWyX)$D|@q!#>tSbh0MzDS#;LjY4`Ddcn2_1PwnVB0HzLsL_yoghG zow1X=Jk=}Sw+x6ZC2MCb6AfqSwx*}j>(LA9A)y7OUleqYJIzL0jL$#oS@`je(NvLV z-l=Dlm8H2%jJ-OPX2Hp71X)0C>CI2BZ5C$q;^&)%AuzA>s8p6ApGj-yqv`ICk+rki zb2H8us%ll=j`yN~cuvk0LgdfdHe}Zi1vn}snabG_C}+ncz527MIkE>}qcnuI|sXvR0k5i}@ttCOIk`w4|i`tT&V2)hB=~B{|YUR7I`<(o4 zn=%9oqOlVL3l2QXUOb@%#}8{}{H-idLFD$AC|2JrcE2l_OCj3pUm_eqDUTB)@$`3Uv z+WPK8%!JDy5bwfYOZn0x`ys`ax$Ie~&Z^^f%eB_*Oi^pNlwU;@+ci752(f1d3<5Rq zo28;3e@C0GCl)1kkS1!Z!2Pjb#1&?&yKYMnxE>WXup+lI=JZP_6GqDr zkRb8+kT8iF5qB7JBR2g5rD1vMgFRbTCUSorUNMGPac-@)sb8YV`u35z;V}#A4|#W@ z!e z1iEQ1S4CI{K4UmzaI{*aqpHg8{rC_ckvto?m{E+#f!unMU?Gs;ldPG}{y@zee)u>z zS?zC6%^VNc8KKOB6Wyn&WOPNtJ5u#u(MHdbozto&ESa(V}<4IAVb$DFHn5x{FXZ{v#gM&S}eWYeLO;Q>LlV?&Wm>Fl^)A3aBbtE zrAx``zAu;8bi7l)vTI5sAj45=^&|T(()C0TKOZuER^>-PgTG(^F$nyHzwVq02R$il zuE}0sjea;N9W+cP!Cg<23PcrZd?1$c&OFo5o1hv)w7(Q%RD9AeNX&B-Bup}?v;%4? z{!ptxX;-VZiCa~uQ3FiuO?jfYLqcwnrRD-e#-kbu3h0qxjvyn&i3IlUnqpuwnV|?W zj546N=#qs!b-bM>HWOdoSLw=F4jfsfP28Ba7hLl^7|A{sdM>bp8B~FN;4^-#TK|=u zS9#40?qZ%;f=w53wpMA`2YRa2LqY2ha0Ciu+yb#EUcXL&*n}muYAo zEwmvI=<;)!xu%y2QK{0dqIqSj9akp}T9xHVt|1zpg2azau2~Q|2HJA|efSjEB52`< z{D$tWC%Cx+rU=G&4%@9`bJ$!U76)dj+1<+0SrsJ$>kIFLCQF(MJPZC6r2xB?emn~H zZNo!@vd51&SF66_sDYfqV)B9^q^NOng5NxWRQLuVbZ6 zeYx7t;mIvC-RZJ(!uX@3t(nr`OWv>fUL)T5Dtd2dL-v;+Ma{XY?Nl@MR5Lr~Z1>b< zZUV8&_hD>JCG5@it@o%!S?XG){eQfGm{_8dN+`dDxtC6~Nze_yD}ct(x^nq7XUxFa zfuDr;oi7stz6&s*we0qvAARi>>E!b;Nf%K#O2$i^oQd096j7nc*)OTRS7fabA{k13 zLq+8^1Wu)gFRoLg8iO|Ki4GVgH|QY!>$a$c?QkVY4cV+Hw1HjKlZXtu~g~myn;h zzX8bJmV_`Q7osb*w z@q0+YlZIKol$HO@baKH1H9Msc*vY-a^>N0FHm>c0)#LprUu70s+A6}hP5I2~d50CW zmOEVajFYX(c)+HQ02L(`S^MCojmT8KVgt2P=t=(7*2q!fy^-)+885m^vZ4PFsL0}J za?hNyS(|+UOWQaqUnvj-4i?A0rCEUQ2uf}agmySK`%m>u_2eY^3^_vn5gtO=eC3H+ zMBr`|dv4}kjNTKw@W*Z7cxE?drPX(t8*LYr&X$%?uSC`k+_rS|>y$@|apVB_m$%wuJY8Xwn8WwJI7 zs`mU2xCA>py7k+FrMO&@{|-)VBan|;)2yC{!FRb^?sa5-uWOo}-)L4MR#9w*Z9rYk zVKK3_q9lbN>;`tKfg-EvI+VD4e}dP)#X8*@wi`oeh@f9BHXO?o1|eWt#r1djE-#qn z3w^Iom+0%qFr5lQg@-|X;|3#<9wY{9Me#5rtmlgA2*?s`bkAaeu*a`GmZrA2UbQqN zMIw9E+GS>%o(Kjrp66zUOAknkeujdjm zfqg*rDq*aVy;dFKoMK2qWt?soN?m=#qx2CDBCH;b7!wi0uVP@GyVY(!51$GaZkI`% z#N0Ykq7^QdrASiElJR6H8S4o=)&btN)`aQsKEG`32Xf?wto{KWK>Zv`wK8!`=70MwqIM>xf<(2P{I@wc+4$bb%yhbIogvyVt5>FU;+&j)J(uZuraul> zK#oI`qwBym)I&;>6EV#Ey_TTvb-w+=>gM)(Psv+&9>$42Da4-lS$> z(i`^pF-4#mB58}sht$hj4W)>4kTDn0?@cr1&Jj(yt_ron_X-LQd$}BRY!=8VSL(D3 z44W7^5VyTcoZ2B9F=@Q~R2mfC#We?@nc;@wB1i7|+>G;P?J3;KP%z%Ix?-|*h)UUF zEN&6Oa7esn`#3k)R-BuQ9e)Zb-2p!=o`SmzX}KB$U07o`gtCY3K4&aLjXGB&vS}?{ z%UudTKuknUSO1-S{ab4OJvL%u`|n-xSpQ9&ko7-{6KZNiX#TxS$1W4jW9|_q)Gs4r znG~Fl9es~zPhcp?fCP&e_2yAg*^6(MhbN@0+fPrgo@Z8ZUB_wuXEHBI!_7V)f=y0lXLlAoAD?P9X5LS# zcVf`DQVhDEPfy8NNimz;>3Zg`0^8>$4_=_jQi15l{^b=ZHrh!2_}g&M#wyhyK@Xk*FKF^-$l7^R3uWF2&?MiBbWr{# z8~v<>2tvh~s|?eRxdI1siE@#ZXJ{69Po;c-tdyrb{Mi5!RAc^6?Tzdy?|Kh8%JzTA zHge((B|MbAedm|KUzM?g91BE=-l!{bW0Pzs-=R<1DV?Egfq@(6Rj3= z4e+mB1%Vq239^Zy_xSrZwxT!jO>H|E8wZpBY1GutBfI-~W&>ZxId6%iO@OHH+zf(w#cBDZ_)*uZ zMLq#MxO&#Pna!TgPG0t4B53aE=l$D&V6gV!r)GCdA9Zinr;bK)1Pfy{=psu(T>fkn z(gHjm^^xCI-H-~X&5{`4*;bg_8U#mqRUl{%5*G4s3^jIpw!Uev0HL96B9A{Jwp%RG zN2KM0WIbEG0fCM~+j29`biu*sPzJbe@zi#)3x#9^wr8f6rX?h*;m*E!z=6ThawAun z6kw`9V}#eVc|H<0LNG1X?ipihzR&`c3#CnQuW7LxC1@m?UJOP{LU=ta5KJMNehzRy+Zg{=DY78K}ee>Xa+g)!&ICRl6yS+GV-*mrh z+;}a2^!|TkKRO>YHs4YTGYcVkCL0P4lIYQUf@R29A$AJl)z!)2W8{=QoCkK)?S_zk z=Spf|zVyqSr4-=qD&Z8&_|lNuZLx_wBj{{?KJ32I^A%VPUo^0=YDQLRvUr-J6ciDjV%^zlwHyo1>C% zxZaD`@=%6Q>}PA+9w-4dR04)*1%PJcLCo?1L8GT(nu|f!RgZI_<5L`B)j;eQ84-}A z%P4~T-4(lahx#7u(*E1B&ik*X@A`qn!Iv5JDUkbRK4aGFL+iNA)>#(9J<{wI4uF9# zEG%I5i*4L*VhCcP06tys=KevBOQ8jEm0-7%U)FMYB%{qvw{+za1$4s6Lf$)K!sty> zvpHnk0%(1j@<7v7U_a*88o|4Vp}$EJ#!XYosm+JzO-Y@I=0K@9v28P@`co^A zYGn;{+E@BM9IwZ=yn6aKM^WGYV9Fg(p?w>KX&*)q2Wplw%GNaoKdEY@t^}IxS|2y> zZ{!35rdgU2$A)I0ddVN;bq7IU2J9idd%!Y>>yd>sQB`i- z$>8XgtOhAmsa0A4EMRe)HRrTydwc&-LtGP9b%t2M7$yu&sOt_D*MZn2mP=A!$GGTb z$q;Q25jWROOy_`#7db^l=?@w!`zdvKW-b9Dev98tE`x%=q#i}lW6B=yvVa2EK2Z1< zv^H0t44zecAAC)~8F|oM4K!uAj5C)mA9X$|WeaqfbX=-)f>*5v#Zas^B^S1SXGj^daUJrHHZ zRnhXI3Fh{@blB1GXa;OyezJinR)mESv6ONuSTi65HN{)ncPSJ@as~O1zJ$uIklkpU zrRFx#9Z(z_!j4(wLD?Y;xU8;R`{JZg;&=%rA_%d~GG^h^->pW#{ono4^K?i}SQK#s z($)tUYbL7(;!FO}{!mrANA^4wei$}^fxVF{+m!3T-^<}`6|N9=g)g4=V_9OOdDy<4 zi!BkGhzcJvH$O_@3zA?g&$5p@bEwJD0Q7t5P3)M`@0nLAYFd+bPL4_Dwp^JdN%6Y# z{`vEQIva)Sqzzri+^l>qQCKEp2QTxiAeaId#gIYMso_>MIX^HxD?rN)s2iR!x}Xf2 zxk$-a8beUdYHIGksZcY~*bpeed~wxY(q)>L^6TPpT~;Lhqd2Cj=%v`-kZpJ^$ZSaG zDx*BpI1Ey|uVTGS?E97?C<_4;-kI7{Yz-T`G&`@WnrY4beQ&SyrL<(1e1xD*6K(En zCRnVCvjw5kI54MWFG@MAiJV*cw8%+WQDAt)z$i1KHWmD#j#h~cTz9kwc)eO%(S^T%%|8g`-N1RCMAlJE;_IZCV4Wzm-OsD1J?p=0e;WSVpG=9K$JrDSpW7W2iU z#MK?udt}!V7AVTm_151x)iXt57h2Cb-v;C()qpwf?>3;W3CfjX~CKX}8U&(h(C}Q?jbpP{OT(7%y zV5PG9XQAW!?o2f0xt99pBm3+2v%6*D{R21O7Vn`$^nH=7^HOo7td|#UQys*NTdPgq(8d_yK+!-z^rUWLIbviWWlO~4-bs4RLK3L_GRfp7 zW~1NUC1rlL6_T>`bH!JYT%jc(!rx?5MtxH`T&V_9X_gTG7~|moSp&ye^dFTORG=Ok zE=WC6tTei_T~%e^qF^q%HPe{zcAV#4o%E&RKxbTgm9dDYR(oL;;}WkXGS))N>?wlN zDmU;?(M+4@q8K@rm?cjVEu(6f((veH+g)nO z#Xjgpl@&jNYjuS7mPR)aQ5xYH3g*G7R?f5NY3zf&_$7U- zBhm4`zWI*;!->kDWHAJvxxiujWuJ`3<@W*Ks*1%D33PumrsFZ-dP|{NYzuVk7l4|) zf)*aT8_;qbn6WlIIO>^wbFA?C7+jTNBV-O9+jT9Bp>Q2a?j^e}Q@nT?D=31-8$y`m zOx)617gJfBU8i6_dG&u=+4t%`i2J#Z_eD(Tv{V-;3d*$aWqTk+TQV=C)9UB2DZ z#peUaerf7;#K$p~`s#-Z(D{eBU0qw5p&i5v^EFM^%8as{J5jmz51(S_|TH)7t*sz;P>@2oH!FIfFM?Xr5&2!RS`(n$ z^BX#aUyLd{UruLFkKn0JR6o@g2|DMGqsl74dg@ODJLsp-AXt=_QCdrua`(RqBdDno zP~3^py58I`();lGY*5?uj~}zs9PrmTKzOFJ@=RsZF|UC?YyK;2p(~ma05v7E{bJrErfn02s@8aasNXoMudm9HEZYA zF~2Kuzf^j6q}q(MM!SnZeP)LskyW>HNT6fgxw*-^nOuOOFw2Fmyw4i0rAxS=M2}ikKwUror`V)Q z9s|WFL+}*4uEA4@Hb<-&N{5q)`*T>*yP8K4hwNBUeP3Y50j<%5C7+;#ZjTJ^03o6? z$%}>gZdr_5<(LrfmC_}!Y!>3VK|`%)p?AwnEIFwP5sHA@PD+ZgI8=Ca2NRBxQ9t=< zI{N%~u#R0Dr`x#0Pfw?NTib`{HK<50FgZNVqJ8L^N--cxiNo002F?vp@%R%3^-xl0q znsJ$m^~h}LggxW!(|h&o^+?^e(p9hRM1icn5TFJpcj0mZL-w+CgeoJlw@Z70xur0! zLyIeZJv?i^Wka}SHDHmTb9B}c+cR+YP6>U`^;?YZVo9(l6;DWAOjuy0!UvhPdV%UB z3tiD%xy2aJfl4J#{9ye-$^ggyN0^g4UYHc=2QuT-gyThm;$hjJr0)G}9eY;W+8v4E z=$|1B%jRQF=hfDan@MsefhZnN)RZ(#RTIOIt?>|AlcjuWioz{9xw*^iM$XwJ@m*t+x11w1%#7vcnqr@S+bNvdGTIDP1wKfp+|qUQUL9vZktFEj0PV z6o$32r{C^OWZFp$%aE6_1Xt->h&>^}TWmo0RFMu$mab;Jy#Ob3BShZWNG>Kmj$112}Jj2#WP9Crfvn9b%Xl#b&S> zspacV+JRF$7EBq0E+s_2jk0_n?`(ZNw!!FC|IHn z!EXHX<%%iVD*ic@no%`KJus7PDj zFe0{}eg!t<)bc75yJ%S&X31lPu!RuvLw3l`{MQwJ&2(<2Opml$a6vWi%b{C#CK_+F zVT})olDsMZdR!fRU9~9{V{cC{-qh_fH9!f(t+N6qjo}mtJdb+u1m>Ifcb1;GxcsoR zDVQDJKl6kyu#!DwHgaV6oo5#Ba>ep==cgK)@|*7HRe&syr>RJKq)HyBeF8{xD&-2h zVt$@chBh7Y&GItADz^csZC+(9@*3McT@!t;o9kQwh>>9@Kk>H$=!OM_2F^JsE1o1Q zdlOpsAG{|*QdkAuJtGt2aA1`YJ>6cyNDFpfd2wjtg#JIf`!sw&S5Q!yrrO0YHx*~%df?cEsEBg35g15oS}+_5l8;1xK{yTFvI=SVbkDi>9EV$W>w)s4JV>1)u z1&K#Gme7#RXptmfhRsZ@xTr2=H2V25!$-LcyLx9v4#5$xT)R1Ri9H*J&0?+)T!Q8CxcfwIsPCzBwFp%&N-ZO|H`gofj`=h5nB*UollY=f(?*KetYxlU=i@+A zB+rYc(C|uz1dcgb9p%x3biyE~(cXd2B;v4gY_dShfB*yk_5DhqUtcgtFfdS1FlYz}a7b8aSXdZn7#KKsWJEZ4BzPDYM07+X z6jU@cG*|=-OmtLCWK=ZNzZwAo`Kkj71_cHNg$f4)hx-4WK6?O2kbrt1We^}@05B2| z2olg|9{?8s1ONv4>vI230*CmzL=fP=sMufs|KG%~!k}P4;GZi1Sdg!ph#-gn08k;s z%$x3C^?}@NvQk#4$D$E6SQ0;7G2_)P3z$_`(D9(pF1!skbb28vIb9rY-q5g z=Tz4orxJkhaNM&0ZUKbqg6492mjqY)9)DzKa4OAOTCU<}h6d+u&kEQt92zsNC_u?MZumwK5mzo7WW(+00YqnrRCKjhxn6wSCp{ypx3Hfd&e_6Sd~0F>K#gxFxls zvY`;`+uoMrlM8hC>54GmV5Q(?7CivuFIQ&DY{Ar~pz)HsGLP5H-9wq;yOWT+;1FEv z?zv2$j-rfKW|yBQ>lPIM*OObn$T6gLA9;VF`QqPNW|?f9DDPNcM)a5TbVn>8-PFm>7siGB5TdI0cJ>9-b^@taaE z3IegSr~!KsqMS~8(dJKpu~zjEO969$U`sHF73$Wa|LxGPTVwpfB&ycmU#Hl?KWE)U z0J`-3s}%t381s5T*%kg106Ahb#R|67ktPmnZ?T!V#nIKgF;rt5vnI4tHWWGZ@6vz& z05P@XGV{7YQUvdJSUk(YG^ot!Kzo;hiB6(UZWnRxXEH?A$vENZ<|UMC%ZkBN zYvOO{rBlzq6sr|IjODAqLS2pe`UIPjqo+j~BGhtmNILt~CB1C{kttxr{x%_)OD}4g z9U!Xs>)nquC_|&_+La@VkT-A5ffCB{xPq0|rE%NOcl|j*%{8jS8rA3&7(Wd;npgi! zuxDv?Pl~{KF7vR_&4i=-r2R0)(nuzYD|a&X>K8e`peDwv=u)U!TB+7)f*>Av{naLB zX-TemZHS}yt`SAMd9v1N1F!yJv_xF6SYB(IKSd5B&B+m^HBp}iCCL%k#)?MTpx@HM z>bFAjd;K_K0%qgP(Ap=GIwkXq+H!LC>fvIcQr$I(*z@rTU}a)7bZ|ANlaeQ0#Tn&N z$d4>Tz&_dND(FSJA*$ri!!qOe1SFrNlqY2w9Vg9Xqx;pA@~E{ago`%p=VzBB8~HD@ z7u39}x^ZMLdU-eX$B)l{kNE=LQPF4WCaD28E;y~U$lQ&Oodbz{9Voq5(e$g!9r#vY zD79It2sC|1neFyKZ9JeTQ3(#T`?-{GF8}i{i!6 zyrJ-J57b)iL+5snYX`b{O?IyZ?{e$0(%aJ(2rR{f#7_W@PV?6-!kkixtjc^7_76I4 z=nU35t!NBBanF|h{8DgPlex{?ggvRr! zJWk;U?x^-qP7qg0XGlTeagilweX8kNbj2UKJ`%e}@y%IiRyikQ1$$WAVvF9mURlQR z63pH=;^FOH5&Dm~0LWppQ#+M}{7~Uld*C=1)@t|@9Cl@{N7803=kfx#hPeY!prPtw z>kxB1{{VEx`7#*@cdi=J$j#LW%MrEoHeU{OhI}d*e^em22>tu2mVV2+1cPD>Z0&EA zcbRHL)Qemvti>zz%B9iunUd`3HmoURfos&TN*dwQKK!oq-ygcc7_GxYcOCXw)dB7zb{(bXMf+5g(s}JMPy^aOj4fDLD}@R`0@*9L73f zjH0n@LEA+W;YVTm;zdvDVGZh6NA@=IQoavwuvYVKM$#r)hFE*be=!01tN}-iQ8m8# z0|d^b2K4+{-#{|AZEAfa`3Nl4+SkPw9p^=(i$e`|?IX+FoWv%Q-7c6TMha%5U$s{L z`LL=F$XlpsN{S-UhTdv8Lc(g4-_fym30$!>;m~O1fZyMi#v76E8Heh&pIJlG*KiDW z^Q!8Z~H z;Dt{>u?%w2F_k{jk`;;RnbB{_U&b_JxB4C5%*bd*`MS&NSk>nET9g}jN*a>SRt&Pf zWGW5PmrMl$28H;NnEwb~AYcFp5-2hv3K1hJAu$7!fFM5!v%H?)--7jP1jGmQKr>2F zqMn9>D-R3{xtBERF=A^}9}F1Jh81n1pL6++n@LqPX$Ov=Hll59^a>g zef@8cI&8O5$q8IF5xS+nSnBKnDihsV!L_nTPOfjIhDzQ(4XXX*8PJC`XuC z?d^;e<|@m0@G5G<&l)V;_L)ERt11r$Z8NhE~`f2q^IyB_3kb^0$|k4(gfi1J?@ zFaJ-k1OMIY1jctGs|xqVbN2ea;2YO#!k#Eh`U^jlAsIO9*|&P*>Mrmw6Ft2~JCNgk zv1F(VpRolcqH`d{7BW;&CpcUj)?J~Sj67?Veh3-oLlPIs`<*eHVKJ;ttzg;Cv_f|| z&~aEw7h}EpO|Y_PpfwzgVWg}rULQbQxT_0t|?>b+L9-XcYs_)GBYW)ZBbg zs=mV1a4eiQ$d?625o?xNxE_z>D}fqS3??PDVe#<#>5-oRxH2heF>L+mxVCBmt$lv< z&8JF`6n@;hukPXh8tnjmnHZo@(BNP8#aH?|0(@~M5elP#JR-549U%h~vqD_X^c5-z z3%{VgUv>937^#q)V*IbX>)ihu2Z8eezXaMwmrZ3Wgd}qga|;Ue{?5Z{jy#DPbCrtd zr}Nwpwq$8!p2oGkPr|u>B8c$Ovoy>QaU2PE$=vXxOAhO9-fvys>PDL43i^Io3J1ny z&J1HF$`M;hzO}xoIUXtf$GPfc4P@-q)DKiZ)AX7Wq7569Nz_;u?Q3aB6cBa*SZ?2Cnu8Y`(4s1#SB9I;dDM^&|O{+<;84Hc$HpfhDxr#)O z^2rlEQiHL11?dS6jF63-N#Ss}Ax>HN7w?wL#q3Wrbot@gbx{nYT)b!SuNT88EL^>@q9A}s!;$7}c-_5F%cwA z*{*%HSvRc>LTS{heNNTtrU&H%zeKNZyNj~0U1z^HnXXu{#Em%pscn;I#`t$2 ze4EM?-WKj6-z#R9Me4-!G>+JS6vmY3oZEvS65djHuTI@d52~rphZpHP8WeM)9+#d% z`X;`o=uqc;1)=|h;=$kR*-3;4));k;Z|pj?zr(?fI`LMyg)=md_p93Bq3rOER0tHj zegX~~GTm(AI25HBTM6XOvd8Gd>=r3Pj4-Rt2#_6{<|r=3kfJBD)Ao23UFMU>BVQyB zK30^CS42OgE-q)gVvxce5?gv$cetdP2C>2>4q>HBXQMh71TM>_ImfZ~rD&;=uw3Cr zHVMi-qgA-rZe4gK-j7NFBaVb~acl{ZN~?MM>`fOT<2k!4?xaD(&^v=v)nzAXYV0hj ztNA%8)`bgPB2pp7u!^Bq4+^Kj4)(6ahr(s$M0d(?@AW?M6%!jWUN)OjSZyeHzzsVd z2!0{S=QR8GF{`=kG3h)emqoT+Cx^_cR|NPYnqx}B-&^de@qopzcG=fdlNu}Y^|Vyr z=vN23LS`Z@C%0cUvImJngxauueht=6b}E>QJB~RixMKelGFG%T=TLe6dflh`VG@#s zmc#}R>*Gm2Aan`-}2gI-+j)Zv2_2}fHs2M-QSKxv>Z<;i3Ji5e1>E<|5 zk-qF>9S+}E>iy4m;*?*sC+rl7)+eK=H^QxF(PIA2Ol?0m+BIBHvvf-(Xe=q>_Wdf0Z$yYz zs_JQwKjkS%g9)-pUAsZ3U*e+D50h%O22R4e+~+tjtwk(hC7n+;qdbVX%&YZR@dhe` z2sVn7A`)!Zx<4rV1jt{ORaLL3?_-*C!gD|wSwP^&SkYE9N?^!|*lG$!xA_#6*Adc@ z`aB8&w)QOUHQe!&1kXvsEmas>Qfx>4wd^=1O?%*+B(koj*P8wJdpf(ruvwgieK!1?4R9f!X^L`nIwZMLG1yc%R zozOIv>a0O@HAE$m_X3M^x@>Z+`n{wQ94Q0hae1_>t6(&#}6UB>sM$k z$^Ujr7_z6yZ*=NmmbU-R`2ehByf(Rhab4RQ;hy*9_JFMYrhoqZO^s3V8s&)f|00q~ zlHiADH#T&{{nmakLT#1ZzBpN|i-SS1>FgTj)ZUPS+o=R6($JcLG20XomLj}M>~F8X zo#NJiXvTJbBl`P+XD>BNHRj--e1XMbzUKLak!?XAygQy`zT9oukbMG#?g3A;8J&HF z0vo1hIngwiLk-uolCI6E>JuLVuVxh)6xu!VQOIv|n?VwmZ*mDsp&#dVDE0gN-0|zyocDqgW2b zlh!~AA(5qK_VOqa!X-n}`EJaa!Qpxz2bUt@B5F31$1rE{nKG96$wIXorVR zVZrt^clvabixiB?BdYzx(oZ z?XjqZ8FR*a7bj8eg}E%_hQDZj0&WNpLC}A}4e)Bs)%11mTJ@<+d#=6P48{!F2-h|| zay9#yra_O1gK)xwWF1giwIYH9_O3#nW6&EVR?1T{eU{ zp6dX6re1(0~Y;GmOEG55?D*FONZHDHPO@e7*=xjnAKGy$#K z$IkN){QkbaFhHU;(2G!9td5wmE=kS2R|Q;jfz?$Gj>V;$@c`6*!5uV+cM~|Z7Kz%- zpz5Em!v4lsVY|_vfMwz_bOSFh?u{4>a_S)l<8wHMD{%I%0+)6Yb3^{tl|NVDh+E*v z{&0ux&MY>ny?S$@ZmX#I44G0Am=t3igKL~|YsErU?L8Nx3I|dwL9$tx{j{RrLrjL! zHA}(;(qRHEV$_7mpaOeN7P1i+9^HVn%ehswrS$iLD$lzlKwWHqtx=s70n-I}PIY5} z_D@D`zIgADNY6(Atma#Dx~_bGsQrkJ=Pn_{fF_k-FGJqR2F=L56Uc8DSFj+0$#R&? zJx?}QmG_t&2>@D>#_uk!A1r%tmt7VAq0nUXr zle(Olvluq!7QjP&9lG)LB!-kk!P-bRt*A}9Vg1PO+gT@Fc2}wo zna7Cv+^=kkkas|NQ0RRcMXO|GUuW_KsDJ?8;+_f~_V4n@NumCFpc#Yx%pdDHkIDTSnEf>}$UhcXti$9z4jz-QC@TySsZJxVyWB0KwfYxCRaG&YfB7tiAWS z_uO&cG4A{2r9ZS((Oum&YIgO%p66G@H<0MR#22N?)w;1+SgcsQ)Zp33KIt5fX;Z@W zVW;v$6m*c*AxtEzjn3W(mRa%; zobG)G1iL?#ZF^W)!UTn~^=4LyiwpoeC?>k!`~sK?iXp^t^!Gkkgksy{psQ7#!`UKc z3Y|vJtm4sPc$rZc;ed~y=&yRQ+T3A0yNux~MvG7Ls4y|&wg%+1&-}6?-RQ7gC}4Ox zLYub?Az`CflMxigW!wRy_SwaoBGOKSvBp;l6PmYw{U(8!#gdI~FVQ}QR$szRUj&^< zYd?x<0g!>y1Dq{p>*KmWFCferDKICV?@-%EA|VKdXJ<;^lr_4!!;EEG2S%$BOPz`r zp^MF+npx%ox9~>#J;TEG4x3txT{LZ8&M*4!_PGXL7>7jXxUG-G_<>FsFpN;FB(0Eo zt-pEo!w&N$GgVCKG$n@+=?1z$Ge=CE#v#w10+j&c9AU7*c##J~RESi17+&(Q+L5RV z7C*_P=&qnYW0e;&t;_to{Il*$1Rk^nJdR?WVDhT>-l0ihRSy<#c%bbkS%(M6P4QF`PDf zHm48P$n7vVMOhZ+w#=ls2H6mjIggH;NfV z)XkU~romL+=^Ej`w5gviL5*LL)XSod!#dit5)qF4pv>?pX06kPI?4p9cfI7v(*y|IL-e*RyamBO(*dqyQI2j9@^mdKc4c~oKYvOb%jVJ9=$2#!q%14aDLlx&{v&Je4~(jIe1#_(oJNvjL}&QH@3DHTh(0Ne@@1f&jx3Ml6;b0G5m*o$jBw*upCI z#Pu6Rmkr`?{CvWHT2;uE$Uv>L;x4v}Q~8=4{$8y1GBbfc`)Wj^$RJF1EgiH2%L56W;qtp zu*H?ER-i}dA^b80e8RSWQ>7sO-KtD-HqDUFDTF%c{&bP{Fb6v#qn&}Zt`OB=gZSHf zXP@yWcb)*-H;kknzceHS1rcIL0S;4ADXRIPdiGuvMgDC{v( zO>L9BaweUKUv$fu5ct8FKLm4ar@?C8xkTS9DniV@d=S_*Txsj*srMnSlVttT92r-e z@hW(&@XNGVZ?j3YY#8y}`t`^44Y6U(!Cm4UmB|Xr-#3Yk{Q<*2vVmmXDoa82=DH_Mracw-6 zT%Ikee8JS>WRds3`*wR~M@98*p@xBqDh1rak3fcbAld=ck@`zB0Du66^-$jd|6T;& z0WU`e|K9&+>kw|@&*qRWD8qkW-Xl&=4Sg^ z(DpOx8w%mI!aJZ@5JYMC@z1#*vhP3Jjy)2BGBE#h?ClXfd(%*Y`G$cF! zb&>yj@*9aisEbOA22xmn!q71P?xF(FKwVVO$S-JUBJskper6k(-*fq|K?>9}T$^_Q zDfi+NRFgE`b9_+FBN&2lLdn=|KO{7q51e1NGd!oXRwpIuBm|c00h1EVZbvZ_EA-D( za5ypXUZjDRr_AjzIr_QPT`q#IL#)EQLQ|})1kM5ukCP}Zu3bE{%frajCS(b9S=p0= zBe0pvw%8@0{^utQag-^Knbf2nge6axLRQ1fOG0U#ej&{cR@xE+?FT{D7%&*o*1=DO zHgyO-JP>2|_@t$!(Y8K!A>ZncU^{K&+=(^c0aSDv@pAZsj1u!d=C|t^QU#rS;11xc zM3YzX7rj)=cHESfWsMsI+cprzY^)u;_hAj&=aCcm1$_gZ#V=I|eKoFmjIN*4WiOtj z;nD`apMIXQ1REHV?bY`OhrvvMW{f?62{-Ij7E4n>TWI_oeh{*W^Bd6;!wxk3YZ+Da zJHeQnMc_n2gYA^_!8TcJWDO~GW*cHk`Co;S>Jp z63ObE?yztrElWePZ-!|h5-1n)Cl(lKqXeY0y{Qbyx!XLgXohWGe`=HBPi=x!JRr5r z-vbXIg#z9tl# zMYXW7IDkH%`9a^H(##6DiG1p23zuM@e|!|MmxWB!S znC`ZqkrW-e35be_wxEZA9YL_6MQUOBiq5DSfWOCVEIcP79QHuZ(HzB`d1agUdauZQYD|taaG4CjwDSspMag+y2N-hVc*ALxm zAnFx;1w@2>#(Du5b9($Xv?HkO%@VqG7I zOJ7t0*)r!tWcv{AY;Rc@s%Z@lE)N4fCLaw4g}t+}S$&WYGVOwnbIo^!;6(L>HsLFy z`u7nS!vNGeb>34SjD9_c%{!8pENQqPJit}40bQ4eNSP)ES2lSId63}H%a`c_f`{f>$WQk>+(KY^EEhJb z^!kPczTo(sm>xZW-C?gH3DDtSIS38V!S5yBLcKTz3ir-cd(r8U9ve1>Zj37Haq^b9{AHPB7xvU`%-(SaGn zhhj(`()W)8G{OEXvP6$U!xU8s8#Z1`yI~>SV?jNLZE}Rbjd%x0#)#t19wV{-3d&L1 z4HghKtkn-H|Fv2f5~C)<3L`2Rzru0Z9t|L=7EPAPvSb)QQm=?CtGT6DL?4A0y%JKO zxg38@fZZ>$hHdxcE;Yr6J*3}4EeR0}f9?6rER@3bqffcIL2g;a_$kIs2{y?KKiKFixk@JQLEt8+hWk;v^u>9sK+96~y&_CzkZ7YQm zvD6JvUykAA@5l@H}35;`7)eaKt9Wn1`{1w8Ws{dPjupAeIq>_9BFyAl4 znuxO%D}DUoxx*kg9L35|LLy(5gxVS(9^eYDW(Z>gU#Z^bh@JrmR}MsQsThWb!=~W} zn;beJQXh9B1CvCU_1sA`&KrjeDwT1W;O;Nw&DI-_Q$1`a6b{nNlNA+}cY!w&vUEZ2 zlTwn{1E+gY zhPna&5u$`9TB;PnmZMxIQDmIxNzi~p%haS8FToel8#^1|4P@X_tmXY0*!>n^u&Sn} zjtd+OXjGJ+v8;iJ;j#iRUlS&IlBU=qYFOmlULt0gjz{O6)wILcvp$atcd=N4BHcqH zu=FW7NW+@NRSpOe5hh2k+~5iixnd9}iF;NKdI$KgF>aM?Xe_}8mC?Yt@XS18K!}h- zNEiZeU2wUG25G@AlQ)palj||LBZeN$ih^?WD5j5bWxPZuux^aWUe1E zBTUEzuOv?^(HdPM$+FV*(n0eP5$KaaS_gZ(x9 z^T5=)v4GoXJc=Z0TM+QdYTNs?B3~r{P#W=g$!4n6Rc&%yZNwqbhRu!iE8ntTjV$Dj za8WJ4WN)JJz@u(sHbvc%q(94ZVf;3h4Z)p)6dS^nOFQnb{VwA zEVI^;M;kjW%)ASGr9z+@AEcagIj=tE#>qogr!SGXm-e5j0|lEa%v^G%uto z_^~5^m>9+TP=8I42Kd0&3lHw0@Ww7pMzcxbVs$57R`=CvS=2zg7!@2-h_SbM5mGh5 z3X+U$UNU%45GJjdL6lI`m`@u^;1SdRqZj)0)&myW&pSWW-#3Yn6xdSn&}zzGa)MTz z^wI{%Ra6igQNmzbR3P=CiV7lT1p~@gM3%bc8!DJky0-^QA<#tI9lTWQ!Wr1q2Jnai zre$K(ZKNmbXwJZtv}$Ko1qvw8<-jnI&~d_Zg0=iL!2m1(fIuGver9F$1&KKTS{}}H zPEQ!Q8xykKm#7B^vP5>me^B28R%EJ&zvn)@c!?^5f*f z=qYY%X^myHjeb!ylvYjHN_=9ajq1~ji&{4_MPsc-oj6wzs#gcC`I9(|ss#$G7$Oi6 zK=OfJ2JI1#3L%;NC*P77dqoqNVjB||(m^ch_eaB;=3Vgrc}LS$3PXKU?bAH zg$RQgf$6zG7vxZ}9r=GJhqS&D0*8e4^qwYlMASYB^{7UKiIQ1bng(InhRT>0i3ej` zyv+NJN~8J9sZJa9X<A|_4D#r!d76@NyoZRs;m0DRadCZgFh6#an;>ES3cx27 z;ry{8v1rnY(tPc>fq^EcEA_gt9_e6^i4;Pz_^h1=G&~#q-)#;6^(S6uq8D~w6DfJ` zNNFp4a0LxO7o{393XHA-+sLcdA1Q%FjbVXE&H6{bTfL+rJgO$t3!&yS_6*&4l(Hr~ z6=sYD0-?O&5tpc_gs3P+PT%HLcBDfa5kxq4NyUPv&6=e#R-lO_L(PvXfdR;RQC749$1Jx~GRlfMY&a$Hl%Ca^iUsY8idyn~p)yU~a~l&a z+_WnaSXV$k1U&h{8%|^%uJA{oEN)n8sHX!KT^&HpVC9T^R-zfW2D8-!^w>w}Ivpu<0x3d(;QeCA7=}VD@J=I6W0X!bK_u|> z1tA2GMoNyIB(QYb$zrBZdRRST8q;6*6z2m*X(NV7!wE@4C_*SG(l>b8e;*&$UVlkMq!(XVD!XBXjeRM)IoLN;qKroNQZg+qMd>z8K zEg~5}&a|>9@yL(l1`DiSQzWpN<_w{hO<{p_WCQ1r{B;hU;ep*~^||YaEsR*8S5~=n z{v2AM2fwT-H8>_e+$v3J@KJ~V2fp@tS7LYsX+&6>+QF07C+Nz~WYDzbu;UEEkp`~s zaSNw|QoX4C*=a_~ujSfdz6T-n9ioW*J`s3SRnzem_FD?yqBCPi!?D`T%pa9FkZQFD z~sO*-e z`E=d)zGdo&gE}+(0ejc5O=66xZS}z{gNU`GIumS9Y5?s!0pr=z>?dsxzU1&mi!6Z& z!f4X!ru-BnAMVOb5#I0hsYXW~E$G#`k+cpe#~T+Ig?#dz`Vy7faXD;K zvjepyR_3JbQls;3@9#-r`@1(NMV4(BExn-tLuRZ2!C%ox`(%HJ_pNj-;g; zqsO#e%_63^%h%ja@?wag+zw}qrCi;OARg8P zysp@2Tj0?uthf5X+?j!>oc$Qi#fgyUia3>yp)h0W3Iz&dJAo!HP$Pc>j9rMmkl>bb z&XZFGf8q5>L7XX(;ac>J0h(*jFSDTV;BPsqu>ymcw2>R ziou%uOikE@Yc?%4LVYx{@tP<{P$_TXK{D^-);AsBr@^vJJ+91I;T<@X`IeY;Z44DrbZQi)hELTMhi|7J3DP*$tZ)M~(B&uT<=s)3CmdpZX z7*44QeTs+o7_Kpqs9-6bd{kXq!(pmpS?FpimP;_3uV!5>=OrUo@e3qq|muN~KjjJ7>u*&&lS|NZf{OKQl5TH)|K0{HDNXlJ+yziJ%@y zo4vb)P&h<)U)|XcXp>(6u~JU;D138odQ)le{pbW3Br}Cnsq%fIaI90tOAMnAjrij) zvglfvLaI4epc_9D$6{!MBX0WG2*Ughhindwd=(Fb&L=4d(>7`TIkklP?cSo~7+>z<6S^=TN^@hHFBh(Lhak(cGM_S+e zac^{TL@D`|hIWwi{&+x5><77gz?2oV#)eP*6m6v=GP-X_#BP?S3|L?`DHQHPx!_wT zSwT~H5llnZ0lCj$wyO$rE?UB@^p`!bkE!;Ifj1t6VVLKxELozyu!YjuRXrS;@S$(| zYB|A>=dQ5=eO&42!2F=Kh2VD4xfpFL1c@3U5vw4H)ML=hp*V?aIq3}t-Q6Z6JrCac ze8JK0US9)$4tJN(e|YzPvrQPN4rm{Ce#FHI!|tvmg#FUL$btTiMYQzo;^&QgLrvyH z<)&x2;+05b?d$bY-g!4SrsVu-4uW7yr@D(rZkBvkj~{IbYkb{@UjD^liSb*vQy&XQ zq0lMTg@Ik>_BBY2Z&)yH4@t+@t1r4gpWl^`PZ)a9a@{5et25C*y{udw?lwH{${L?r zXVblUue+4niNdpUt6#3nZavX|-M;;5Y{o6uN0CDquM(Rvl4MqQ2`1N9sjFo^t$DUP z$~Md`tmMFLkg}J|a*Nx=AlK8}6Dd`AgH>$#fMBrQKlPPi^>@XCO?1E4ny;lb_d$|N zb54Uh9pY!49V6ROuG398Dv9T zC`>#|j6OzZ4UbKs5gTp)gd~3g-CsRcwgLU~EO+f!zr!hM*6H)g!1cCYPvTPStcLZ# z0Hq7BX@!FYK7^glwA8d6uC2w-HB(2k-z7~*s>98;bDKOeVOP}yI~DEL zoEH%DgKlVFkwcbO_cK~F9Z^?bRSy782zazSoHp$B#J2ff$X=B%TQ;$L^U#4&o};TC zFAP2bKZsm8RcGNp3X4>uqdvi;x!*yl2pE2g^3jgR49JvIY9Cyx;8JFQZ$64FSI*fO z4Xgzlb}r++o@wzDkx-9TqmM3BQZr2OA;u5f9yker!g^N<{XEalsztjw@bQCS?c%Um zKORo#%Y3*tMC^oSWG)HUz7OK1c>b#L{C7V-1LU+cJ_X2TFNf7cz@F-e;ui*}EY$Kl z^RlKZEaiP%iq@d)rEsv(qtM?1)B2DN?pp{U&-Qd`k*Bukt`>x9&n$y53IwT#RJU7j z_8+FB@{kK#Rd7-Qd_xerAX?JdE+rL&+AK2PV8;;b)iJE?06peD2#%s5a5*}q!XOaujAY0gt=If0m+trw9APNduW zf`6yS1!g8r?o;9lxv8Voi!Qhmt9wA`M}hyjW#s+?P4mtl)KAcAaT0 zz=D0PpIvMR!AD|kgjp=!Ker+DK6K@ZP2-D|{OyDNev~vQf{l;gSWXkiF&NKniePss zX50%_J;3~3zxe)R;tIyk^?B*Z{js|r2<^WuHTj~1uMLr!@u&#H#R_o&I&d~EUAhd9 zCqmTZ)j2S2Q~8W}eT^k96iQ~c%0Eg(P(#T1jLqN{5qW&`yNUThBJ7|9B_uDj&w;;M zbk2Ss6Smre6*Z)DXek?p-x5KarrES46YB;BH{S`xQj#PfO84EawI3=rM=S*KLrLwu z#r%3L&;I>`77a7To`gM1_7}k`4teV@%O;kaw{E_{G1sL+Jej6*SN5F%V%D~I2aH)* zPdkXn6fNATt9Wnf&}Pj+3xf$&IjIaX%4^a`OcHB5h184UFZ5vM$CzNQSrd>=Uc-f6 zz``2T6B41*Wo%^!UJ|lR8SBx)yV_TWlO-q5(IwR$WiZ2pHZ(l@_;Yz4W*{oDa?0RZ zjKMVBNCdag_9#YYb5URtU4QBodsUXCdPGhnH!!yx{|s0Hcl@AG)OnRH3FG(88+Vz7 zov!^O5qdK(*(#2o4khqp+G4&GFcCNoCs~-`Mq|Osb1WLe3#GhmZopWm%&)C`*~nD5 z-z!l{tennnty&|c>?6NZVw;5KZI(T*Psq;I#9gxKwF7bZJ)*64WSP@w0* z?WW!~?Tb*FxqmlGcT*HWl5jw7;Y&zNtT!1t>Lh?sPO&2aodJ`6F#THoDXPwE$tdCIc|5y#j~+tUyR-3`NQ{8Dd-?mq+0tDOwP()d7#TlsTZpmZBGYzk|G?^A0Syw($`TrC8;FT4Vrr=7+U2o5N< z(dbq3LLS2?OiYT2_mhMiANJz=)x(;hkr|QTN**qR`VFo46VeTV(ICDualTA^6D#yG5pkM9FB$8$$Pn2=N@x(iHrW$V$k7R{xiw6?6;Nzq&O_^x zs8)*U0qkQ|Q(dBr13e%ZUUKHt>DuY1_;2*9x)e;5N_mGL1567y!WNj-Y8hdhhl_E2 zmrD0^PJ>g$)Dhq4=N8L@UtDD?@0 z`YzNwCPMo~%respE%{lph=nDwf(75q92h&4YedN>ZSV5mmAW1yEVVX~rZPeDpYBpueC%;fJTOqi-QbTWa+EERC-i9=B$dGL6r`RqZ$nTO5 z>O-jOWIn6(kKkum^7l_2?w(cwy3}zmxitHvb6UNn8p3bz=0Bd;s4#pYfa^}C;GBi3 zF4bh&(7QY%#VApaz$DIyQcK*o5X>ab>VjG8ZjuHsI@oeoSQ& zNTN$p=g2FTuJx>uu<|&s#x-=CS2J1KH9( zTBiPWZzr^yn1@hGnN8m@*O`tC zNmd#Dw=?X)2fV_L;;1wbAhJpM;QO{vwwi@cQfcbf`wb2yDt{IQ+NiCpZ;rb@qdmpP zb@yCcPrEKEoC*;aewAFW-ZZC^*eb=d2ot+eF61216C(;8m3T=-1eBy&s*4dVQ z^46vRv-dez$m#e~KGV5=7JlR9&uXQ1SOe8#VS}rmf9)hQ#vP=yG)nr}g|+k#{rrrD zz=^C5D>B3ucctWTrQRYLc`DFL|C+We$VkbPZ|>yOmvVG|Er@h>@&#-Hv>fXvJpq;6{x!rK z=-7J)IM9NKJ*d)?$FZh&1$|-kC0R&rW}8t0Zx>%@ygGS|US1rGS53)vUTtDl-RKey zD_)RHZci#yL`LT|4D?JKboexqPkbztb@tu>uVtJr)%A)`CpY4O7f=qIT%>zxo)4ZL z+H!iqs?fbUlSUuOS-3V3C((QDevI$qVpc_dRH^oQ^XYIxye-H$B+^!u_pVTb5Q{_t)oaPL_E5I(F!$F_LC;o75x%}O?>};sF#>SaYs}uh0nonX)-eYESB8{JxjkmP%w^oQ0 zri6F$4@Wji@(9<}(Zla)@z32msbwvNah*{MZ!JSe>=+DHsy_42xM@-b-gqeNT?F64 zQFhD;*4R3bf2XXb|H!kagMW`(CZ8}=v?lFJ`sL{W@rk%4zo(1{VZiI-xQM_ zN6jmz`WYlKS4u|@!sj;vsv$moUkDto7jcIRYYT!;UeS9Gi!{t5Hi=@-4&{^>4NMUzksp$1}L{ zk<-YZxt%n};VTE=9Rs#5y$6&%&1cq*zj>AwYPv1=N9T^*t=lv!lEx!7&?=0;WR%p? zuR}sKd~&GwVOVskq-;kfIY9sL<@ot`op#=Duq*ZoxvX>M*3VR2m_pbAX2f2J`K|@ezJ4Rpk(ZrZ|^xU?3|n zP6&0RN`gJdtW{gD zbj8*e3Zoca4_b^0AJGEO3UY|aLPDj((zlFJI5-q`gv5Gg_eYJ@?BbM;@(?RO%arvM z1x-FI&M*B8X0V3MZ=&8;tEXmGW&Tdy`863(>7_7H-NWT*<&|N-E2-J1j}W1M^D!;xUz{m$2#_`l?{Cc1f209GlqnE_>c3H@QU~r= zvl%S$J?@A14`}=21#(=GN}pte_~m`QFZ~(6E!;40ayT`FRU&X4)cfjQt~m&H%wJ=D za34_fyjFM3(4#7Aq}OZmQ+*MvVUm=^GA;_UQsdq4t7W3`N0(%6IR3$(aGnQe)J5^q zQy(-XNqZW?$w;JU0(-`{U+m1y4;sV9gG#hKYURmPokzYeI6LsbQ2(pUD4q5FbvD6n zg(awyF(cW|Q(jEDRc96p@qP@mpbTKQk8+-86PxLo60z<%r!YA=u5XVG#NH@{?cupK z7DEH=piFQbq*K1ky6T&-pUsR@=x#t3ODj;=FV8*$f8TAeuVPMUPE|Y=p9kEl`_DCD z#825*v#OUmk-U`LorMR0e+~iw4D>!z3x&o|Yg=ca5#2w)1Mekfv%8Jf=Dts_^B{8KjDoO5nO4E9qSg7o#TqM?><#lGFHOc zNEH*ud^wS9pK$ctE_d!z-g3o+qFg{XF7?L7dW)_oTPdg6N8bu3N3UtYvi9Pn=UXh4 zvZo7Ebzp{RNC6A>R;J(X?Ci6^xx?iUUw%nit#p8JR;h^ywP^jKJlJCtRNmIWK;KC6 zlbk`Ge@P3xPTh^7$v%qLMY3hzacH7#a%CS#iGrrmQzc%b=$pFZM9V< zzIx@yvp*1-W=qEFWJm6`^I$uUCYFj$bKvoZxZsT5*Ip zr?kA@W;mej)*33}RLfE-YRq95@oR%4xa6?2F-54%00W)`&6(yT(6NCiqMmW8YKR>D ztnxQc<14j;Y43-vil@oX?*OSs+Gz9zXKMxtxkvVWxNy&=tdQ2*KWfpxI28a$5Cq|0 zYEclP1QHGX52u2ZO$n1lNSN%en){1RG8?~1JF1{aLx7Aujcfk>qNK~{ya^u1s)K{{ zC9CL`c(3Z{tFFz7TQ1oT$9g(G6a7={pDG>o97IyjM2{vZb(*_(Ocd_`VV|hiq5k-N zj9ljhj&s|DE?qK08sxDGXLQ^03cA&K->)s5;moO z-OOLmjfqsNd3%R1p1t2Cm$pp~QNMWh>3C<0-($DooZVE? zFu0p8$St$HcBdI~UGJ5aHpGt}6&fE)Kl*n%Sz{m!4+8JCzv%|AYdSXcamf1Crc zU>1g(*o>GpQ77%|A%D><+5NH5UNg+{%K#UM_ zkoY>WhwUR!CGbmr{R|W)1-r1av7?i7P+`ONg@{RT(%*t?FaQWc@g2mTX!sV5j#wX` zQ5{~ge&^5a&A4fC9p2Cr76bQzJB2utXb^X&#vMB&st&Of9I009!b%`u>sBj2-LkLj z=A4WBLTO!KpcM`}k!mqnW2WY&PJ-M_1NiwxY<5*G4*R_Ev2WS#Sul$~rPA(8oQ1tv zE4K++DccIIjpvcXvyLZv8k{)Ifmu`?T^~4dQ7n{R>@)+Zto-L8t6v_i-#=wgVLhE_ zrxt)jo$cNCbBx=bL`pEDCPLP2=MrC?&CGo)iqtZvD@tWm>H9# zV=WsDZywj)0h6|JXCd==A)N^Xa_Q_WXg)UPJ}GS8N9TmRybaCNu@;1{BXtBdJ42=g zIayU8%P4mcSL%V6#y6$(`t*VIs6xX9KR86&8EZLkx!ID_F6zf0&1s^MfF)<6m#1p2 zVo$%BF>j{Gq78FtXs?5DUu-lPqNTuXNo35!CjEmRRVXNhnbFJ*GV^#_`f#;?42m=r z3&>0#g=>EsW!OcqsdWPOhI&r|bOqWHKjd|#*Wue-NX-J}D^36cgUq`5{NB@AQYZN8ZX#zHemAl!O z?8B&vXZJl#Xq7Vi|NK<7zn(M-O=4bUeLGYeArG<>%g~#X92-KrqAu;#TbJ@> zEp}*lWvdp*(rPZ(#Rc;W-7qd()}LfpSu8y60FdO$P>!k9|2@>2M3R9MQ+7i5Qn*W6V8f8FJ}mwF&nO>b25J^~48%#SL~V`T|bt>c9&kj5C#mN~ssYG7qK* z)pZTpjPsaeHIe*UiteM3M8jy z6#{_d)FA&XOJe>7uzp6dXZxSF047LEX6uU0@RdPFM#rRZ=?9w-)H0Jk~x`{Ij4JgO0ahBCq}y1cOA zDcYcJ6Fa+dxHgO!Sei=bt=;;CV;B1Aam!7@>xyV#`|iLO6A+7#HMcPFxne zAclOv?OkHW#kH!LG|t7B{v4y=e^hwIrc8A}G8P5drYZ21-KOj=CTrt`3n`6%Ou&^L z2*!5SND2zqN0G| zzMD|?5?QY?gprN;c9PmKYMQ5;`G23L90B1gdKJF3^aiKmis(?$TRkjUe`o3AF(k0B zVYU__0!K?1tQLe}=%W5*nuoM5ke;BnR7-wWarR3;gRIZ^zLKVuAtr zF$yNhPXdjk-<;R1+yq%Hs#9C9=9@#pOmk^H?Hc8-pm3G(N+~JHNqf{JI{g z++2l!x|e?&l2rSuyuDuTh9+wDYMlvWxt9LR<8yE#_-}j8%k^*6&A)fwvVWg;dH<8t z={ykgANk$^V*dXm{aJ%tNB`{i11SG;f`CK+cP9wzA18tksPW_{*7yAFI{))(N0nw- zyWEfaK!^(Ex5h_X#S|;bBK1WUg(F4iA$v9u!RlfH&H0-~xiRAzEmp2Xhp~3G0jmxn zC&MiyV`(3_QtL6f3NsD8sGJ!gBXM*xYsYZ9`?lie>|4(Bsr__Knz;O}Fq}|Qn_3S2 z<UlR29$Hl_> zr|3$KiSK2RM7@p%6bHm?)T0pHYj;l=#W9yxj=-A{dxDbl zLs-H_{4e}OxXm-t9i9$Y@K~2>v#=m^r0g#>EGyjV3&0EF?*@`_<2}6G7=_`suG-JC zZw?TU%bY$Fbo#4}QJH@JlS`#gYKO<5@{#{-^8mfS|LO1kW%E!%1wC34AjsLD|4(;U z5cNpJC|@3AABH_3A^HUlL1fzAY)ax~9BO-uMw2o3BQfrd(18Jk-W&=Qc-uT{k50}a3KMk#%}hFhSWp_mcJnH zUGbr9o#Joi5sI+|3c7Hh7{bp)81s`q2(g_+K>_K)Z@G_VqA+OTiXOaBkf<2@LkO_i zl%dYr=37)g(F_KjkEz*weF}K6Dh?>YtANoXPi z_0A0~ledFPJt!UF%QZj&a;I`O3hK5SuDl`dJ$c3o$lggp2xnjyP`53s;Sr=Z9MpuL*AsQXXouH7Zsjb970sO$@n;n#sq{?nQ zc*-n&ndFHfYD#cl=Gy8nGd{@|44&DA8;f90P*(b;;CUeW95%6Kt(r{B991+ zqAtF$79n-W=Zaz0{H<2LY}@c^amL zbV>_@&{bUyW%sb+P;{rF4JI||*QXnw0Zdj^2SCMz4HRn{m~<6Hu-7f5jtmV}U{LVk zr@Nc3e)B%wIo**Jr$&+?;ov4rD037vv)s%02Zg3xHK0yDjH)8A&C3EdUz-FZ$j(U$ zJ49mK1XUPMSAh6jQB!_tV#0;PB^GTNcr&1)@S|>pY70tkJwAB>8QiGfP6+=dc<0BD zYkbY%!g_?+)tJ?U+TifDm z^RSy~)4CS2-~r`hqml5@X4gPNnCAZ%S>k_80Q|oaj`@#h%>NLK`L`_buQ`POcgYg7 z{1q|P2)j3l1hFDSpwL*vorgv7(0F9|&0Pi=WRsf8@vN!jPGPo0w-KEq6JpB~s5lMp zBzWRDL{!YfwoOTwB&opr;_WE1GDw?T82pGqld_(kfvs8lH`H|8N){I$Qv(HC3a9UXFw{mLGXJd!SSeKAIxeF`y>|n0Df%wlo?j` zGZvSd3<*sf6rf)h*jz;`D;MJjXv64wl0Yd^U_uD_H9Hlhz*r?TkQ23&iGOP>I$cos z4kSQQJBdO-2$;te!_m!C=5?-67Vw=O|LRS!l^FYo_GVltX(d}WV#=ARkdm5;lle1@ z&MehIJoM&go0PBYrwOx;5s8k(k&x4ZFi&@u;%9Zm@^jjaVSkiFbpy7&lCZ=Ph>mz8 zO#`))1-b|=c^b6o)Vyk=-EaxMM0q-l>0AlT_k3=$@||jFtd2h-dx=hJjm;?qB zy%K88eyS2a8J5B`LS1kC9(;>%=Sk``=QGstC$S)`lsJl04v#canzK-aj0ec-(vLeY z;rCb~RRrPjk4(edzS)~CSsol<{(iKSP4?`zmDE3LJ@J|+t$n}6f$&2^6JC~)9uzFC ztDg2Yc2zKH5Gz^A^A)#oOqQ;V-%ryvPuxB^NU!}kZdnan6tRA`2>7MyD5s*@FF#@* zcxT8Y!F_zndw+&@;L9@&TeBCCF-jWCv`w_s*cfZe*#@SNGi_KsChypiLQP;|BQwBA zG_yzC1y3%Iqt2+KZyG#ZVbCDc!PJpYs7_SUN7IFd?`;cBW_PzbI^cP7*(;TJ5(SVC zPT_+>A*%>)9Tr`2qrXW`i_tk;A-pdQwD%sc8shN#)C57@WHTlFcr~}F6wyQ+lH;hS zER-pn9P-iU8MV~b&-la@kE^YE8uFA81#4YGbTN&*i1fOVj@Mxfo^N2NgQwj!VsoW} zYR!vv)l4<3v6h(r>g@J<$Q?G>XKrmH-i}!e_uNNf@Q~>(2(`-N9#HtB^IMfBJGbAF zc=(DX3Yr~X3X;G4mS84F#V7R+kDor!*>8$ns9@f>&J7{}%*>9NnVFdxWB<;~?A?Fw&U<_BllmN$+LF3U z-Lk$@QdNm0%X-7q1k=MrlaJ_fKiECKCpIJ#CGD%3J7u;*eDXymK`RcVqc2 zo|l8>unbaY0aru3{=zx0ws{oOxP81@E>)MI_z}`Hful2|HJ3s)r*-ZdNT?q?6R!8^ zJ_+JlZJ`IK@ljP08fBP2dMdn?VtxTYrp$=?(`hcS`8Vt0dy7;R@mx@2h}Ydmo6o8fhaqkOrSkDm1NeHxu+v3x+WIFBe z7Npjz0y0_#9b&gv2DuAwtjf^G+(ww?+fPHClVXuJ!1k5^CU-f|F;Vkoknnz84uaA6 z#Tvj05p=w0iApm*>7~xdq?Xx(KG(g-wPxl4y(kqS5}mh{#)P8hE*1*_Kf5YL0;y3N zXz%Lb73Sy)ihk8wDQ1{YJ~p69N3D%!T{|c0`|#Cn=pQi1lkuK|xb^S7yvMGhyjqz> z^b-$)UyRU>VjY|J$~gw!33jV16iFSD0ds;4op}2PuXI|zJDA^atE@UFH`feIHiWsX zbkaK$t%eGi%q@6tr#$&zU(2tL6zC^1^-rf7o6f%8t0PRx!Wj*~L&bK~zhaqVu9=xf3oRvuJ2h z`l66BD>pYA74AA3k6pZQ@DhDK=%bv9bz{)VfIm?2QS!Rftvd$*4D4mG*IlKwu7IbK1YSyTs2)#(!&JQ3% zl2%Rr9xccaXq%O+TD2ace&c%&NJ~PQ8B*Kfa-)g>SjFMyz*j*=wIQMTJRoJgGX`H`CHxVVN$f)Bp?`Stm9Ow6?(@ZCafC)+Zv_hsr; zr58W?LFdp^C|Cyir(Wr_Vb z+@7UdVVJPLvQPi=#`0F}+0(@WDT@b|EYk>wz%HIavN(UBM8p<>I1Xs5;{d7KRrM{~PC%@h7ZzHt zNW>L}IP>_4y~3vpVpom{7C9%<k`k0C8(#ma%&2$*ggZpYiuYVeTGpDtxZY6*m<% z2`#r<2G@oneX$kF0bw>+Kdi`Si>>HBci5%3+hdRk0k z!D-ewFh<`=WkTN4J|kR2R}Mn2MkJmv32;jjDFzb2&DX)mAAX!%54p5~f)9ylf;e`4 zG&g?q&0l|?7J^6p3TTe*mzB8v{NdJ4iB~4&y1ch8@C@Q3kR$)d&E9JRjvpHNcp0*2 z`(`k1_pv?LQ3Kw_{(klNdg+?<%CwrLJMB5>@$vdxqHpi;eXsB+Y_6VYF9L@8!rO&B z3;q#bJ?Yk>g=?9|R_0-MBP3uotqzt>)AmA!ts8GVBWeH>{)28{xq4|Mgg&dQ)5GoM zxal#bDih!L*J9FS7hmVgVAA6Utw|s&vzz>alFD~Xo9b_h?S7bSczS?|;+~AtB=w=D7ovKlEg1KYp za?z2iz+*(3X<|r6vwC~4;#awaZ@<3aWL1iNF1BcqNl($BqkjcPcZacc-pJSf7M1q1 zkVkRp?x%kPDqB6Cg0z4pOMLZ6J-xWZXWOrw-LS~k__AYYkVH>leXGdZ*GYNWV<7Bq zgUPdvr}cGVcg-A;^gSp*QN(9P_H}DonfqaJbykp1e%6AUEZGs4OW#KN!zr5#(;FG( zGV7ni+YM5$K(~h9_Yiw2$nvFhfrwOy5bIL=>v_L=3Z$-iOlXID1>KeQ@(P~j%G>h_XyGmdIXXhv;?vAw<0 z&zc^ZuE`J%F@SkN?@7lU*D<9-1LYJVRwa;iD&vMf9>691dN|sS1_XR&oEBYch*a}! z5oZHCqVmpV%1IfrcU}@i2;0CYAqCQl_(+5(%Fx;b*0@& z=El5THed)A5DT^wv#Z1%p;yl#!H*^8?3<)77iZcs5IRFlxyGZXyj; zZciM&))%#4!2J*r$7!r~`yH9NzL~2*WLOYbT$nteD zwD6mH6m4pggtu9Xtb7Y>K!oknCx+9P>@#_xrY-3gL)_T3pcaRj3=RI6@AkP9R@9(5 zk4$L1)+^F91Js@KX#D|0*t#M*9uMsRUz(yATxg&#!ZWIOK#}<(_!G4kMdwt*L`uZB zj)ZCzg6K2Cvck+K3Miuypo=st(+Jpx-!oREX#28@yNLrLv@TO_aN$ZuN`sKw?WIXj<2*BY&dn=|xwysgN>@;Rq zqhb#a3+U1#I_okD#P#(jUcl~w^}DK8;@SqgwGl!yDnfgUuCSvB$qbYsW$Ce|RZ!5sy%@fF zH45FS#L3GQbhBnDwSF&@So;nYX^HxyCxML$=rGxsiakWGBSsySuC*i`Z%!0Vw9cZX zQxkVHa@pl}Z&!vqM!h9ewY+R&^^2tMThA2EF^e=(49lTzumkQHt))GqJ~fEsG9qps zeAt|JVMTrhtxhId}ZQYMHka zFL{r-h~#-ueburlt_Kk;)p!_VsR?2Kkdbne+Z9G9T%k{uoUl`8P|H(AC73asgjiYc9(B zarom{j%9Q~{m&&hnQJ;^ZRc`*Eer?7k8i=u`reaMS!1;bk4dfZl#tn$#@e`{ZH#L? zH?Ts%7za{N>!eD9KaREt=PXf+l`s=Y*1oo*u~!^YgdHf2ObfLJkvKJOUOb%-^kLTB z6c(c&V1t%(!zl+zQ|lE>&lkne)ko?{MRvlMvbJ#)J31uPE?6q``_oryb%>B2sYY%@ z?z?as7S-Q4m{mN(oIh1JR-LZT+{`QGEbYwEls=!f827a1-wRh1==51X+9W=TZL(dR zbTp3(51@Cv>86|asQ2#!`C=Az@yprwHB~=hX=dg?Pkdh~=NGEuqTV#|Bi;Y7bX|2X zuk+qf)U>)C6{JhBCD}H2cXF(DVaUr;N|qU0o>r$jfN|u)#sq05Dofqo-5P}9t-8i@ za&v>82qBvfhmF;XOR{I)S-;}8hK7hvU+go@>clL&Xs_2u(aqkc-ukR*Y_Xc8eL>;S>0L>Kxohb_nK#p@rSa3%Qz5SycipU z^Puk;*A^hQ56$p60S(_eqe8G#?6E4qWX(gUB_P<+tEq1@r8 z273p+L@!>96A38JxFBFfW|;E><7x!@ukmH9eNGirzCxL-3~|3ohvl?(R2}YJQ>Qwo z)=Ph`%GrDzet0_h1DL?7-=NRcOv2zcHJq8*ta?T za3}$8uP_B9s7mU0B5zE{R*b#Az6tk*L}YS+Fcx5W+@2Se^f*z#pDE-{nt2o>q{d}+D3 zz5a)EkgUL(MRZGJaRX*F`XgcZwulTweK5$SQ3nkE_(+F`?z4yP?;3;1$PPF(+|rzl zW4g(rj@M^AuR%~s^U8&UpG)h;I|PXcDkMKss4PYz}jz5!CeDLt!bR#yruIS7bLMRl+E0@XQILq`HT-Va17 z{f(>JLo10UX?EMfg$#2O zscm}7pxS;KD=GE&Q|pi)HbUxP=rGLWl+(%Z{HA$yUzb%2RZh>F<-DXLfL#?Wt4bY2 zmDwX&t43^BRgdT6mk5%8QY;$N#sVT0fJu$%-zJh|I|bE zC_t?j!my&;jpohcCse73HEEJ2Hbp^er9FJmw&rY;+Haw6YQ#d4@jL22D0e!9J3K*d zG^Z8OICh$AOmB2SEs>rb*I_3~Y9~#=YN+o(ix+P3EliB_b1zk^U`)~)$b@}hn+Ho;&_YWmAk{R#P;1SZo{W%vJ3S1cvPpmqJ$|(OS+p7?<6kJ$^TJ9J?>-?v5gHi3m@` z{$2q&_UsH(euG?XbCs;GKKi@?I~>?`rBK1CxSl_S*5 zDyl|-dk}cyUiEsOD+>P_iBuV5h~udU_3|2PaTwqs8q>>(r^@uP?mw`GK zSO)D15-ch7vDj$e^|Yx~$)^8Culj?NRk#Wd?_8mfP2r*wmWpuBX|2=9(jsVne58j4 z#1Z5yoi+Xjr9LNii)uLG&~#Zx0>dyY=)J#aQk;okr<7#*xeBUG=_R@x^AAIed)*it zDk;=OuJAV|<0@*S1?uDw*5RpW>rNylvI)5o&i7%8#n?##;?_&#^ort6Oxs?<12I#R9Mlo|fR{Q$p#=&WUC1S{M1ECF*o3CWR4mJIQJ5Jp~rFppu;4QevJih+$Gwt_Kj|T6y0Ax z{SE&56IA_yznGa>{)xXnx9t8K{$l(sZ~GtMuNa&r#NYUffE}2dD8h;jk_Iff2$`6R zLXRMX09=z^T0?R|O6F_UUUA zy}mcD%j9F3FRTfJC9pllY;&+VPHxjF#@W@C$^GMHuzVTugolgA$Hig@dsEY7=H-V2 z#+XSR_nEp0FIJj=O0H|~Za|lJOxxB(^DO++YcEx51HO(%T5@nq+4PGu7C3t)a`a^g zzB;{!r`GZ;+}-8&I#gkGu>Dmvm|h|7Cj2c&YacPcTa$|-*q407b&vj-T#${bPXx9Q zE&d~#2v(w5og?zo-9apSjv$Wtp1Vmd?bj=d{WA&p==R-Tc8oCXVUgzXZmQw|?fkYa zx%PYZTP3mcH#C4zCZcW_n$qNtNZ1D9_Yf-W9$s0O!aKT^Q5BWA;6KOf5Qw9!G_gbj z&2d#ShVshO@d=7KMeT9G8i1&x^I}cox}5|}<4e;Xd-pjeX3YVN^wgujKg=aeb!y`A zz0j1tfKnOWRf`fR{=lWe&V~^h!&BkjoGfeFq=kad9z29FZ+Kmret*nAzofl`5Tuh? z0ofWHy?P_YL+>{dJSIzP$Kc4?;ukquUxz}n;O3Z|aC`J{b8!e@?Ok8>UBhatX);-R zyS)gRzox5tSj@U$-UGQUK zn54hqJIvi?aadc)dhPXPOr&$B-+F7o1DT!O&XP=8*pX?&=DBAB$9!f(3-1PijXe?1 zzM8kLcXcwWbECc0_xbdcogLn`^X=w&Hi?~`-`nR`7ERveFoavFk5y10(N}@kp*;$v zTF>QFpPta9bHGdd>w)PVTjXn zhe@hts>pS4@V5y}ARGmkG?dx{u=98dRVhiSj*ttQ&hn{mzz=st} zTccMl!TG*GlM}95=@>EBCgXf07CbCtj!n4T;ifjD@_L=ppWz>omTEtM@#1(rt(}$~ zWqHIoT7^&y@0i!%;x|du*@an47sY%UM*7MtF(ro$XUNC=!hDj2A`i~|>)=W5*V91! z%7|tV`-?ch!NA78Q{fM${ezel_k) zB1Cim3!6s=L#ZIJ#?XLQdG(M%;F&Gka%Q^r*Z)q19D+s$R3++L8!@aLiFo208gXRi>@uTiXv~8*N?vtw zaBxn0ryFZm<|gSD=h%Z9q4kv{X`)3GMIeLdODj4*fF!9CV7To$h2K%?didf9470m* z*E6B#RyqN^)pOif0j5o^aaiEbF#Bvs9|ml(bzrQ-#Dv}WvxWjcGX8d;{>IS|jEF%F zMpa)dv{kw=#2;+bO(LUYO-7rD%7jdpiuCj(X9l#-6q~ICI!CzRB!(N;Dq%vS@lh}; zm5e`nNhcN8^7lDx+V1*62`ttrGznXZF)@&~8guo-9jk;BhNziHPGK3S_)RYx&$RLV{ekuVlr*%fDlU=1k0{juL?hLp#GC#kuX z*AaQyLQ-hrB3rUjE=gcapDZS~hMN!znGAXD6>47)vwW=>E^kGKxpIsyAG4wZm4%8Y z(0Y`-VaZUvc+IRpcFGhwRV<#K^_V!U4^Ytabm*5$P`%Otw6O@}MKMp9vQDr`WmO=C zPVXFDmyyis0={$ zS8GrndL750OyrAkvd1)V{$-S!WD zS2p{>##N}pld(^g?n1hiGwMvTWxeOKI`8+<$XaGaLh@~nX)4^e0rI2#6Fifsuo8SZ$)U;Pe5^%nTJloo@JoYXztz6AkFDzXHY-NW z)aIxtC2v1Y(g31vE4b29w>d+bp2_p#_v0J94fw?Qk-j8~b?VWQjGeJbHc|K3zVxi< zcT??1G$`o;P+T6yRVT{Ol?iYk-YN5PCHN&3T{v?{JEau)TDbE%k(h#;CEbtQt>UR! zXHD3=qF$tdHSDA4-emi!0P1*G&YvxOz@fwq_t>0NftD|7_GH&u z{e8J6tIh zy(DqoVMK4~Y?J*^Lgv~d!uOsvn$Ols?%ypM=p-eMW9J$6SY7cU7k+BmUh`u(YI*su z&y9O5VQ}x$rVmB+xrTX|B=ri@INJ>GX`91?h<7z}a%evnt7s@Z4ymZG)LZz-suj{b z+{4Ps85BTJc$$hAdDv=ym45h{yiqWNYO!(*$v9O2W!SyNy-(-Lwbd955Ys-OXQATzJ)2+v^~Of_qk~RI$Xh(7p$0CF?omcz>i=9bVADys`O#&9d_fnQ+NZH0l}O zmc8eF`@E5l^z+2dj*A0F@Zi>1Z==NK5uN}p`X1)bPU; zE)9O89icEcIYI&jau1NKVZJ;@(bhpxl5$F=4>EhBn73!1cOJ3|Gi97V$I``vfao;8I z35Q*CXGO9Y_n~ic%(#8i2UxucM6x)JnY{q*`UU7({iD87h|`+(cbjdqcV_jDA`yaE=}IIyw~q zPGzVFKl@q6xh&H3MQnFPS#13HJ3##hO8x^-vvYF(6Hv4MLpSgLC(va5LmBQrE>=t1 zVv8en-m1e?Hv!;1dbR=z0Z1xFz_Nkcf}DM+0T)li1&_-}z@_<=XLh_WGRtbI&~btQ zQLq*1tLpy7(|KaNZ?3ln zu=%W`r%vz32jRPT*KM1sd^z6EJrvZ{Ur&3*qV$eY=1?+l<=Ee^)iprXf)hGJKDw-O zvDOWGiw&{x*!9{NpSxce1z*2B+20m66&|qO`}xY_vzb8UT?a7d<(MCwhvYQo$<8?h z)a6C3LEvdW9YqKCz@=l;I%kMUS4e6hVmG&Nn+;6EP0SK4h2m*Pdywh)W4mIP@xtBJ z@AOt%fN2G;E=jSJ^^56cC9WB8D{(6PS6-MUMzIkUu*Z({r0^rVy$=U z>V(ko7>|4ABR2n6UJD-4kW>LPxR*}bVb;4_EI(R&rsxlL;C|#M;J}Sd8yO&T@Y5j- z+fCRi+q3L>yVrMp?SiU1wV*QJO`k5#jf3S4-}k%EjR(D}n;Yw09<3iYr-$cQ2V5h+Jbq<5i@LKo5tXzw=J8+q~-b>la&PZ}Tksbjz&dY)B&dGUN zbr&sD9ho%_NQM}=vXy4jxGqBagvg13KiQk|xCGmR9k6Tb7V-Ms)fOrvdR}8qEtXNN z+wDM1!n2IR1@D&Etjliw`q`MbGKxY1P(hF;ThDb)hk-CmxlBuMM8^-diqk7Jyzo7P zHr~n{xY%;Vh5|d#yVpik@orWw9#bTNMe^H)-t)D3^C1ckEm+yxv6qgVul16g2g1WhdhzBC zu$JM=Uo^&eE1ky3q_7~xBH&of`qeX#@EE}gB9+{UTfixrP7s2j;{lH##I~=_Y|yn0 zIVzaY#X4$5w8p||xYvAZ;h)V<9P9u?8f0GzVSbCU$RGx;%QU9t9 z0a2wPoLx0x8S?AImW6)L@q{^yd~ScN0a(FOYY!g$UNOnl@o)o8dph_>_X0$}Va3Ef0L~B0%cB9;8#r|G5ew6e?YrBKJnR|G^}3b_ z*W^4mKmm#uaM5MS0*#yk2HHYmY~gW} zjI)`s^*tX@!$u~_%Wf1);E6fXT&88fdmuk>_elAs3NRfgx|PNa1dlwv2`Xvdgc$C8 zZAlS?U_UTL-uAr5!x_OPA*SG)j73KV#zR71p{M}-wpkG-|QYGrQR6W;t)&S(YMM8DXGeqjew4|pyi+zJ|=wQeSy%?$5wYBK!* z42`cB>epJ`^kn)rSY69~WJ2tvWj6w=c{mh%_8D#)I60|b#9V&xm$U(xJ^)>2HS8}g zU+0o6Iz~xgOuRbF;z1Mqe#UEU(xj9iGiRnc#mh#nv3vSx3m7bl!lTd|OcAp;Yg96K zZ-P}?@-31>uOgmA%&E9UU+ml1^_qx_P_UrFz@35KIB-VBh0hd;!A8Gq?Rs#NPuewl zjNa2rDwZ$7wRkD}52*%m!Xn!CdmG|eD-Xm*B&-<2=c~V~IM=7wu zlrrhJ50Qep4cDG3aLXkxOd*|~Ed@)^yziswp~UHLZ=A`7AQc?_u51WiXjgt*5F7@q zvwW`k#;JRsUHhx_BsMdK-*g18uEkkdm;^@>hI)dbS|+^)1qf}QdS%|ZGL8iUWNqxL zh1k~vP>i{%AOK#-&az}sFwS{~s=}MlX22)2g1FGaV4O-M_%BFm_%&(jL|jjp$Z{{4 zxHHum4UiN4&YuS7yGg{=9g9XS4c$qV*pr}ielgFV$jZ($=r?kDj;bT4Selp!6#OU* zrdSpeqb{LfohKngY{{KN2~t#+8)@u-B6H3O8B|LubK)O$uZf$yf zGz#y(B*C}-xAPHu2AXaHB4vn(2ET`O8?L# zg`C>2AJ^LIW1lrCQ!?SLK{qg89_vM@50pz>-IZ{|Q_x`95GrQkM61qgNvdP9evf5m zzFOB5r~%<|InHKlcFZB-wI8|(l|k12IL3cvnREN@10?0AOQ!VG=)IeQso)(U6%~lK zOC4N#oD59=CS2xZVE&&7 zmo+7AvDr~NPt_5QX#EEFc9}>BAf^u3L>(oJvO}`L2WybQ6El|J!rxyzgK#Dy#a!l< z;Y9sJY$ZDPJ*hF*G42=7oSv_o9KG$I^VMt@>TIQ`*Udsl$TtN}RhS=D0*l=$%A`GbFFqB`z;7U zR>iO~F_b7vbRslb27Ci+nPw0RK^683Q*DCU0uu1l03WDk2cNh00%1-3q1g|2aZrkO zitR8aTuT+i6|%36M9TdfMFd|t`t3-B#QYU!BTV!vOT3!l5Ni z4g#OhyqE4p=W)=@LMJBBg8F3OJ~wHK2Wk)%<9lV9E>=ZL!DsKX3I{Kola+tOmj9Yo zilG|9%MSoqJ1;u?cy?3ab5Zq}lHH)XAb$dpL7+MI0A zOm4A3_s#s^TFpeaIgO~2XMc1pI0``dWjmMKE*-}rfq`%6x8VK;>r4m@o2rWhOFVA) zLrSzX!%`!CYctWOwI6b3}>^BfDo0pz{x3LwUmwhDT^=s7r1<>h6j9GxwFr*Au# zd$Y%zhwr1C^Ue1A?xv`N=M+o?AU2dlb|mum2^NfyPIf@&D-TE1*#w*&bYB}_{%vqBJP=v>`tF5J{Wv3ce+M~w<3Dn1{pzVD5g zuf=nTPff$Nm3p+jd=El5Pk64WF6^y7Amj2+F#0~W5gkHqbpx@`gAoY9qsJ{b$fS=%m;y_D8FjKW0%n!F=z3={hZgvc01ne}7 zb{uzuDFVNc7c?q?8wmi(E+GdVsN+tdL?5y#en>Rva14bf`ZrzDR9X+_S-|B&L0)=! zB3cY1NG~f|sDrt#n#=GlZUCKYMx(r(_ga%@%^wTN9c8lIu}!$M3X1aT#Pg zP70|9F4wG(b3iruC5t&{?%JEJ5}zr8Hf9g{c1trahqTv7>%T}g>|_WJ;A zpml*q<3xY8%6x2p2Jlq9tf`*K4qJpxtwz*zd62l4LCHx&<<79&d`)xSbsEkw2tV?^ z2V0NrGPW5LKnt^r%MDK5InBz!3s-3rtAsn>?($g>*`pP0N;+aoVz!~z@@q`PR|kd> zjC;ZvVdzu0iH_!v09e-(h8qgKq2XrDtJ4qY3|D``z+BqEpEXo-ob^peqD zFngyrCRT4Y?%LXqRX=g2le^a5hI~JOXAu7Jb%FiP=gZft zw)AN|^o`+Zvb{N=FTLoLRz$d;!whK2SY}M28 z*JlFL@>WE9UQ*MJpe)|ldMjV~{`4#OeJ~L397>naz3d&3vaj%u)m=v?2jef+|0S0C zbK3nqLo;%){&V{sC-XlvE+ zUk()hQsZD_Wch>+f7y)UWd38_`TuM)$`!yB0N`U4Ko|h{(=^cM@fkoq4^RkDP!JGM zC~$Bv2pA|B7-%SHXjnKT1XwskIA~}DGz7#?gF&dMF!1OYXeby+D5xmE8~OBV2m%TM z3JD4di2@4^i}Jq?A3Xqw5P%K9pZ-CK0Duqyfe`^eb-8gqb;|)k|4Y&Qx3W11ASf6( z#2-eZuztJo`yGCt|1$sreR2Ty54C;-V1!TY^bP0dMZEA%d}-cU*fFT~ZKgvSI-Znu z2JE|CQt6F)Em_^Nz_EYajkD^Ji1;_qe&+tYp2v;d$Dsl~|x_j{pwg$leF7FEi_nc^HN z%nC}W(k_;JshP6F#T05Oh5MaOi~0&0_xr8KgHDA4ntLgQ5)rj{p-k%+H$^%qi%b6L z+v+EEPn|u_;7$99_L=(DzO$rJeD0bCy@h!flU8i+ZA>eS)KjXt`8IsS(K^%pmxJ3` zOiPU6$B9&V7jqd)XSc_j^Fc9F3^~Wcb9TBurc3e6h6-CAbgfL$ue#?`|1aBptdF7tY@~78( ziJM2M+ufB(su(_>Ohoxy`6!=&!PJ+z=UMz#3)!M#hmq^uQ)9}zoZC;ew=Aw#&6}dt z;qALC_oA8n;!hu)Z`QMV4hI(Z`&IY?eO66vTv4@x=bY91>+xfQ@703imyV#JE)f`#LUs`y_id}F_7vt*037K^x)I%Duo)!J34r4qwu@Y-LhSSpPAEd`}ws219J6$&im zS?-0$MGAP~nTfn^I?Gk|7v8GFsx9@_7>>BXGVCkgpYM^uo=xj@EgvU+7A&Y6y&viT zTlZCxCbOziyp)dxZ(o!q%jP*fDW&GFPvTMT`1mPR0y(95M6&jI-92i-XGEdJBj#!9 z^mx?{50Q**%;*&NRMYq;o@j1O=BZDzgb%N>bS_9n7A(g!@5c*NwLX2mB_zh^iD#)O zbsE+emEN9o8g{CddfZTIc~BtvDKGvQo!O*U5ez=A2eat`vl^_$^OZ{YNp+g3 z4s>hcD+7IDQcgr!O<8H%5dYHcBbmjz;n8I=(^6m5#pS^$^Fu{_ll3ZhCDS6~LeA=Or_JFC?F#MBN)2W)E)f&Ml9w~`X z7%2;%W-6rL8ae$GCu>xXP)E4Sltex?Q8j74ZMd@5HU*7aKInhlIo`OdRV-Uf6NR3f z8Pw=-uT>je85Vjx7*)Du#(l<=MlbpCT&sU`-Ty16|NUb7j^dBu5Ainut^X3>WFmyf9=!7{XCLCiNd-b&UfFq;h zJh!C$g?y2q{;+)kN8I!jN;ZgHLTD{mzdaz@4%_*qcVRq;4VAu;HYA}F_g$Z|EVKP_ z?ua>iXvCT`Q>|Q?rBA}~i|h&1$=!5eykYywq|MFk#~GR<_M`IWBspb`=#?}m zE0!V3@9ObEvu}g5nK14<7t=czY4ADOfA9d-v)B?%(uHXKoCvt6oIMdhrs!NVa!9YC zx-xAASzUMzrJ|kC($L608vXUlV;i|N7t9gM1oNVP*~W4FW0z^}=h(w}9tn0c7VM~)q9`wtnjvKIGOe_xFBmb$MJ zXMd)jYg{d*y6~ds{&2kw)arVWsoEJH9v3K1ZWqq9E1qZhEy)8gygfa1=K) zQ{&Gn&P3Y@*CYO{7#;hiH|;f~=76pZ|*7p*{Uag*ig|=N^$cQqy1bqwCx^*LpPPd^E@U`U!_eHsrGoueXQN z>umHR4Z4k1baS+yk74B(?Fg^xRne5!#TKC9;LXr4PD4%l4OQ>v*@_n6<7+>@CWSwq z*1vs?dw3>ug&Y_S;<(789Q3kE&O`ze{^F6X z(;6#z7aRS|H9U74lTF391Z#ZxtUQ4~Spj@F>tsLYPe_XyJ-vC_h;&GN=55xg;xMs| zy1t-J{o-4+hs*YFTz}d{ERwrLm-A}(=BTP~-pwUh>3EqqICbT$-?FT?qUZXhjtz1s z4ay-XhoBsYvi+}wLm8HAo37BUZ2KIstr3Q>5|ra~Gi48yoqsw(5ybxk!K9aQuo3&5 z{Mg@7)Sp3-a>t&bN&ncz$DrLls@jF0(0i^ixw8LQ4&glYCo6cZ(sIs+BkMsvy`8Ep z)lm1lSq3R;`k8B#hb%oG0McVDf5S4&Wa0CVf_D>=Yf}q*y~(EjJN8CK{fe$=hb4S& zFC8CsZTB77T+px8o%)Wa*HK5UTkdq6We85$pKSp$S2qvH$F4;SRZTkYejn7+;xxrw zd$i&EiSjpBV&+RZ&`W-Hiyg#`>F*$!qi*W5PaDMD%`n(}+3H^9-nVHqb^W2*_$zzi ztnN#yAmqyU|M5ks;iB&5=wF$Dqjag>NwWN(CH273xX!zpd%@RJeCx78u62Kn;Qw}& z%sW#Sr>3#KPMUK)s^!bR%beLu+5W@H3{~4TSCARl45ubVk2SWTdA&NTBw1Ih71uF2 zSKAEqRei$W1~7jIT+M2Ca!)U~G(dlzm5C*S|9o7x2_4|9D0^M-cs4sdE`T@x*$@C` zlC-0|wAX|q$7*eJnR&6ktC%qn98_uq1tDaykOe|&AX(1;fM_JsKiJK~9#4$4 zWz54KGaI_umiKVE1XS`59mCjKOeE?QmCh?yp(CvSW*EU3@N+ zvx?GedaX^fmP)5`i3@EjzyAmQR{)GPsw3m}T_BJ3QFn;doXc0FM3E9jiWT{bC~tyh ztFtJYvDH(0o^-ygn!4TP!@ZO8%14=1x5GCX`pQRq_7w9kB#&rn zTVQJA-?zcUmv|@_{+wQ^qqy>>I4gNY^7>-hMZxcb8LOc}Nfb-9TUCd{?Zhtd*Zu#M z@U?m3pXjIU&(RJ%cXn{B8OgC@%tj5c?Ak~D_l)Gg7@v2up~tQLA@*_q?)lMQ{UDv@ zA$)M%ZqIII&sX2F%C{+8I29J59PNl7Onx+Gw0dTrA~xv5%8uNk?J-sVua_U?a*e8d zm&Z5Zgx%THLgJiwa_c^M!z8r$5?Z#`}J75%au8uVb|QChg1$b$)q_*;MgX zSYtKRP^HcHoKk?fA!(EC@oi!J&&lrZ-=Tlb9)C=r|2q6=(x{oUJ3DC|dvgYPxN!b1 z!Pap40wJ$w^3RtZ<}~NIDUZ(;Cm@X5G4x{N&AT&1GGXH>DT|Fq*j;OH&N7&NQ?roU z8sGO@>A&{L?;LO$r@Zkq$33$4>y!5bwJvPhFL z{=qm{&oQiUrw=-}*3s3;LMyb^5v^r*L#6-UlF2@GUKXbza@wF~BhSu@Yc*?L^7l=) z_)30Yy3=0A)0yyeioG3!eYfQzi(UC7(~vAevIsv!{?~*T8ywVt3$k9zc;I5*7uKUC zSr0a3y{P|`=`#GG>kP?S_WQD!;G$-*zqW6U-&oh$S-HWd{v0#^VEb=VOj{AhE}Z6vHdoaz9}q^E*0^iAqLEMwdi=e*cco7V=0?GNO_>7?hkPf5bA*GR6`f zS}aXcXSC5(BJV)7@I zp~%^H5;o8H8Idc07d2%5EHux!i2S=^4qn|k2^Tpb9N*^qonF?=;yTzSF`Y)v7knPHK>XfNkW5nr7Y4`Hh zWG#^wPBJpHB)!+o-mA2ya$h5ixhNOWgB?3>~j;M z{Su3GNfyco0QiIZG4lFlz(hA$n1%g?07PBPn4MWH6{LqQsTSL85cO?6;)QhOEoiBB9w zqL^Q0XLqoS#zz~z25rxncib`>4YEQ9NNvW)G z!9Bxg#JDKbQzbS0FnGnG{7GCw$tb0q^iB@PJ~`5}t+h%JO4l1cushc|A$NGBIuLF* zA+6q^t|I?hC7fj*RWyX(QA3)*G@*BqJv# zBYxwu52wD+&ml{=_KDA^Msl%P*!AEd%qDr~2S}cxA*b0$nPiW60ZQ9dBaf!WW47p6 zc6nB6k?)5(WKC(LgCrUN;D@V~JAFl!mD_5-~}3vDQMS&e%>sqcc33i4x+RkOf<2W7&dW z(l-8Nj>dkXRP!#(lAofUWikzw9>$ zD@~%*xf~YKJDrKuq?HsTv+URJ)J5H1-|*EJD^d4;{8$(6!AzT$ha?`6<-Xw zk?!?O37$<{5ICK#tdo&67ER`54OmggRw1Ncii3@AW~3?}5@X?_P2c-F*{2Rqny6Lh z`mSWgL%vyn)bL_rEI>NdU^wD%23l^Th%^Iju^HytmDFKt0mksee6x`JO+K0#X~u@j zgf^%rMOg&O*MK$7fK;2^aB7A_itKBE#G%4D;4k@iC&8o>b%mC}Dv$f|Q~+wF!z1|>K|?%Cnsuq1~F)y#1<5Dvi0 z!GxD{j{{Q8j8y+3lFeckxu!)~xX9N~3p2RLv-L{F@W9i7s+^jbIe2L?7J+JT$~Zk^ z%vvViJ)_)My{uCszgXo|MMmFBtWLc03A>@hzUx)07xLya(K+>mC~Bh^W4j))Qz6k| zK8MVzLy?S%Q4RU14Hlf+Mnom!I^%j|QS+q1)sM+fJ>gAUMb)w<&{bz%78zjBEXitU z4*$6EMj4T1SToquwF$)Hom&bclv2(fz{(+RYTwvbnbUlFI8D=LFql}@OqANxTCr2U zQ@6_GEUXzQoP1_~6`syD*FUM!;cCXCTl@rILM^OG5j2QxG1Pk*nao&`rZlY>xz{0L z6#ZoW!1XHa+YTo2vtdp)ub9Hj1)@pJcIL8Nj+$YKf@qcFjC>g4-fZw4g0>fBu%3jc zjf8@pszX;wF}&vQ63ONS*G=MMDy8fw7AUu?q%s@y0Xvp@w$h1{;q1c^HYN9}5A znXiVTWy6`hBVJMG)K?!|^FjJ~CSxCJERAet=I#*8e6YMK))h83>s5lsFdNW3?d0QF zJvh^u1;}znR-Snom%G6AZ~lg^@LAFTgR+AONd)tx+*YtzpY#~`s1Xm9@5iSK4$ zs5G$IHNfDNJt%ssvL7>toAin#;gWScU`COW8@7?a;;0nln+_OXsK$(vT$M+j9{boU z^WqLcE?c?Q2G2*szDQ!!?&kXB2{J&RO&g~<7JoA@vm?6+Z0_o{I3C9p4q+ zoW&fqP*zPc^#zZ*?1=6908FLwM5FQ?U*%BZ1$wBg$QV^V*Xj4pZ&tH0VE&gJrE@O3 zbk<*-(dA#~Cv(pJ4^-)lJ?^DQ>c6TAhNcPKF*^wTyn!h<@wvB|TFJ?X^ue z&T6(BuiF99n*yg+y*64xrVj^!?ZGO%x}{54VfRQ~mejzsGjm&dOM2ydL$DjqycL~2!UdT<}Kbx&| z{v*Obu0SzkMisfL2*X-~VzCO?Y84;2z=73lLF@esjXrMWmWA=RGyfmb{;wiX1j;%! zsIVJ-;UzU1!)QL-TXLY`N9Wyn9QAMu1 z<;H+@P`}}VG+T1ORE0W0FW;s;qV89?{c{VNc%{O1l020f~!B4Z7YMguZ}mP!z$8dim9yqeysFU(m8YK zb#@cVe8`_i%Y$#PZ*Al*)^puW!W0X9^l$4P4u(@{P_6|9aXaiPS7=j`jlpD;)j=k8 zqONNF<`E-#vb4B@p{8t8!cZe3FkNYq399#K8sC?14!AlKU_YHKf-m1x3n)SdAs;$9 zPEQ?2+{GGSONmcTIhK_wxBlpqREkaT=gH8xDMYLkE*OUFZUSjzC6|gc4#z&YXC@`& zY1Gm7tr*v4_Zeu}Ysiu}+=wMGlC4Ot{<`1HM||h$m_PHoxkVD{Dl~?Na@AO}6$EGE zkPXWTB`J*>K=uV|A>CTDf@M>$^|Gxah8)sL$_dw+2OZI)3nD8l;(G@BFXCzvgYwwG zF!StgrM$`vwj92sw5uyuz$PGCDzo_@#KQU89!IsrOp&4~ULQ>f z0EfeR25c42AIoJs6+%#cuW){`CGW^qu9$p2t2CHuzNkrvd`2(HroCYvFGQFo47Zmj zds}C2lY2;Mj+}%|)tFkX8h;!k0wxCpRF$m8m>TWTn9Wo>z^YdC4O3(`O{B1>=^Ezx zFM|?1M5!riH|VoiM&vWtM45-;a%OQc9&eiMEXSCfh7QJau(Ee6#SefZD=WYSiSMTE zRtU^b-LYu&p0cS?hiux=Q$QNc%``UEyR+Q~jUwF!QICWu%Y_HXE7B9#@Z`1pkt;+jXF(ROKg`O-qgBgAug+DsK^J>`W< zHAW&1@+d>(c})VAlw@(!oJKL)a+27D|8u0$_8VBZzL7=owAvklye*e?7Co&?#L1>f zvBnJDsET@M+~jD@V2B7_crs7iBHOdQ{zuW`c=pSp6)=!^zS9BRgBtW@3z{am!zK-SozR}oPsVy}kg`hqTn zx-r6Zj04ea#2!LO;+jA548$M*2+Z}j0dSLPHl^@(Xu_Jq4t!7l&5ppIXQ~?{fhzJ zh7pmq@r}@VcVc3%h?$go$LB=Su%_cBNP49{p*c6dw8U z>zGlmJoRZAV>Yc(EAOt!zWBb(LO;>lLb5DPN!gZ-#Lgvlqu|LT7DK1rxPJ-kvear# zU(emYOy)I>NzWro)-iS$778+0HCd6${hB4%rB>-VUCyb^FO@^YkUn*wUJTX9sVa2QCAdE~x#x7Bd$8$I_X{T;$aCI}-YK z#wN-pnY$M1lgWBh4Fpw@rllAtZl5VIa3#oQ{E56TPNQ@G77)Li0nq!*uo zk=l%ebSrTDs~|DxMgXiwXnlnuw)u*zNRO^so;l4xxGNwUgN8y$Iw$V`_au4FBFp&2 zbyNVkLLpmG)AVi=&?eo~B@oJfM4g#4J+i4sIku!a>IX%{+!V=_v790*ha{X`Nn$-rQVNhgSPxDzInBLG)3q-CUyiptds1Bl9$GknAu(|KuWrXrU37ZQVwL2KbaLG zzip(j?NrEAFEPy;t0@Mb@&)UqL0ADtjB>$WijBPSYdnTrKdWKG0G(iWfu68pOcnVW z*ki?9o*g=prde|2c?pXWTfQF=NXmBzRTT_#{dAQ#B=6>rZ9NBj?-0Z|Zt(w8nDX39 zJVrfjU!flD5Tq?q6pO6)htmn(%gy5pnhFXg|95gh%6Ylt^|$xKR)3Bqb?0?n zO4>uZkq=g(JYm;~nI~x3ozftc6Y9<5v7lY{myTla-6D=cMapOe}3t(cN9&!DQP zo%9SkXI5?OYr1|;gNAJuTsdI1iw{EHCYzZ#w6*`Y1g$pxU?qz@TaxTv@Ero6BkYU_ zRXdY%c4T2#Ju&E8<}*;<>t)quEEVBbIaOXYe!buu0kmCtki#aa=V-WWN3`Dm9j}{j zJ3`CscA9*2qv8K5FM)ha{NLBXqGU|=Ei;<@i$lmvy5AoTrx^wJ;}Ej&8anm(weainvBHe*P>+1U`oY3dOM81*7!e_W9W6WTM(?8y`-2kT7c){Fmu*I%uNjLD z9vXbd@#hm-wJ&{qdNM(LWhuX2N}|JGN6tf)fH>Vp`i>x^nVejaxB2SB z;YFj8@DElTQxYsbf6bLQW(k=qB)FjOC~L|SeDSHVAt{IBKmq%`&wdSFAko%>>~RhC zkIemP;lkT5)+{9YjISPXhRZibyts}s#Zr03b)faA(GH(G)IV1uGF%*{>q}e4r1`Z} z6~2)&F(dq>MoFy={h<^%laTCxK&bgD9H0QV!4!Eyw0}WIUpmQ*fkDiSP9dm|F7G%B zHyHnfT;Z8eqR|5iQ^=d_6$?>0L0XXkC9%!6+B+fuhz`l8P~0Sff28nx4Tuc zz!+$rmxjKZ;hKxNOXiwOxJi<>fBT?=e2}!#=z^go{2*n-gY_ zzv3VfT^64SzzY{m<*-t)_?a=Y8B&96#}RNbwzr9lB|FD*u!bqMQU8JZ#imeAL^k&V zL#{%mqq#sgjc}{9w^sx&oIg`Cnnu+YOVH6^&U?4J9yzIQ%XeEY6?ly0^s13Wby@N{ zKs%iFklaJKxFh=FuTgIo8>cnl63E2ENrXcWFauuwg6^ZBC-0`@sp8vFSFM@FzXc7| zy!j{2=P`}P;l%m(^oSbjvaq1XeGBgSVW?M#_l%nR zgqWSt-=uOFp2Gp$MGLBv3y*unLL#a!-V=ZmPRdMXC>-2zk0O4Xz!8dLFB!cu*llW7 zVO%2m4Y;G!Y-y5(;i~*Dek#{{Zd97$G*5>Erifgh_XjbfarzEHlrn>ZVUc|kuA&(C z$f4oaohGu2HkSQ^fPl_MfbcCP#q|xwc|!cr@jr`xZl8B+HPh%nogg${fgav{Ji1@daBooW_m>Rt?&FdCD-29xg~utp0A;eZ;4sBhb$BC}7lhUZ-S!PgQOu^o=zYnzz;vXN?u4*^S+ z*;MnG+dC^iy7gr%JtcWM0jxJ~B38+&0m7$ANAQ>LI&+lJcYBn?jYuTX{73?Gq;7Jy z;jct1FqSQ+>G5iXFNC!RZFI$%gHv;T-u}>Ka$$NCa9#4n{iU}@9@)3&r3%lWm= zlI_ICF-h&bK7RhX1*7h%vQ;wPsaFO9?Kus5EhCA&18(=1 zyYTGXqWukBLcTo~t_1x4j{4Y`+Z>p?jK)@zAy;sY+YT-Q9^^ogofmlg_vr&PVct#N z2$|S<{hU!2T#|JEw_lJ5PZbXp6~)4H(>q26mraZh*;t)XRqDx+;IzNtz4DH@Ww)un zB@MJqBcIskY_r#CjnBhml z)4CF55%(V7f7yq1#0g@;D>{%d8U_B1{ole-=S0fW9X5>RTR{^d53*}_b0aqS5cEFf z0OD)!T!qLA`OqIDj=T4YzNsbQL(1_aMpFWOy%ng+_H5G5mh8Mk06y9^CbF)7*gunI zUipi2uR<4D9_zU|6ST*;7#Q_u-Q|xmM=S)eb^aKq#L!3p+F1W15I()}C0cY;Lhw(T z-*oGXoHuKm=rM6&!8<_IGozgfdZ}k({zyCM(4K%#*d>pwGg2`yj*T<-pNj${^E{Q` zjV(4_bAv2&X_NO3;g>13S7uq`IP*6SM|oiWv#h+tUS%Fgo+F#mu1W69sA6?qwymMwM#i_(Fj?O%@EBW`V7|2Bgv&AQ z<0F(a@RBLui$~UeNvKeOTcc*}5~2pE=jUAaP;h9pZGD@y#VgXY@3E*38E2|l{WFR* zp`rKU*&4}@M2xu&kxT9{(#*4~P(AHsUm!olKkZ57alZx}s~&R8?%eu#62tKOG59lk zMWi5sv20ijCNvr&N>%kDQgJ5?MkCcZxwib7J(sa8n{ae;q`bna`#t09`g=N@w;xW= zaQiFXzY;VvqFkMmZ_OQ8$%bX|OKx@Yeg3%q>VzwJ0J(}Q{!36*q-v23ACBbVOY9y! zc>EX%842mhWB6x*@GtNlK0<%|iX{Srn2D8ySwKEKGIj9DOH4K$>-2@ix1{fdK7T1K zBYP((r(k27rfb(Uw2!6eRsOLVQI9<8;E&~Za6{-*E~;;em^RcUmk6WVXoFSX92YTZ z=nYl1S_dv+weisg|EB*&g-P1a zwLL5rtQ5kV+M|qF&)#8=cQIXx={DS#+Mze#ca^ZtN~`OVQW`^gAFNaYvcDBsdG|pV zwccTChx-nJ#22UT`S~Pi3u{5lxn;JTG}PEF?dXT2rRFkUSHE%QESCD2!8WOy&TQuIUd4cI)p(siE4JCt!D3kM;5%+SA*X@P zoa`wm$TY)>QC`Soa2@Iu1R7oj@;#_(-oyX~T0#aSh_W$$nm!Stjw>pi{-A#80D@)h;O&&Pqy3LE7EVzzTg-nn#0l6$l zv`5Eu-%_d5t5>F!z1(89RUIZ-w}!Vgt($;=gCqL4`ER^KC_! z>GOP|oLkCeAzefAGL_c+_-HZOC*1_;X?~U#jo99R?#>IzeIq|JP!dTPP@o&wxSj@W zFFA<6ri^c05IvH7x^#>twh1FWHrL|w0LX@!uq}(EM)q^;uXh8O-OJo%xFKWPA6Mlk zuPN~%I!(hr7`0Bk$$d}y58BkuuY(+qhdp!lFafJiS8Vn@FP!cWsAS7Ki#WKpi9v2C z;3c;4G{Dhdq1fvQx<}%B(tbe$Y{if75EkzcCY0uT=3CV~g%WqnMOJ6Wi^uZr5S~td zIu?@4)JKgj3Jb|F=k-9oLukE2C^-*G5(2SDmQejbsA)G!vAv+~9{R1C>+AynsY+D= zx~DaKDbKd-*Js^E7fqWhcL+&7=oDqGN0x9Xa{=w}&_kiX%&D$j#LBC?Bk{3!@>38y z=Pf`NQ;Wc23Iv|on-OO68Cm_nutBheJWE=y!;|4yfHA}~I{vU_;{c?wzLJ?Zu3cXL zW|uoP^$ez{9Vo_%ZoSG((1)Q{wWKn3!$xzPp1gb+9y*9Y5xisCD)^;W-?C>KX~3() zRFXpMF_1;kj|-oYDAM8d z;uP53DBOuO76tyRR`Cvj#S=^Cgy_e4es}-Uz8+DtsrUOe+7P&HKnj)4~qe6<+hTm~aN_ctp4goT1R5n={o|x9NNHDOI zXG&{{!k02*?34;#F8*0Ze5)nfRgk>EKs2NH)2fyV-cC9cuhGr&&EJ_A?8&rH1anmlGzl9t{Mg|6;{nlT>MQ25fDihi`wL7p zxs%F>kiO>+!9-SHEm*gosU@PSlP=dP@S9ZVYQ42MdNfrk#Pk%EjN zb$N3gONg!m;qQLV9K%;~P+}dHlg8&2hc+H5Fm<)0*OC^!c3N4F_%`HqM1 zkyL(;%CiTpYvt!1!r{TKTw!|L4wav&lGYzBFt;(TF|gDI{v>L1(c)b9rKMId?G|;M zYx{*Y0q!5maE>F60~LV$wd6%-9MMrtpzlO`VpN#VIn{RIlFTmrv42>uwjnrXRqs~c zKy^)tRLd&!VA<9N3k(fZK2>9MA+Q@o6E4ENmfmj-`fTi_zIzyIzaS-NK1&=NzEN9z zhGp;7hl)*b(X|BN(r{d(4ZdDc1+UTS7I)cBwZZn5I8lv$u!ff&PddXujq)(XlNX_) z$ZvK;im*_`o=f{Ax8ND`s#5xLO|Z>|r*;;Y3W1(HdY|%uQ*Ha8$<-p{GfZQSLW(?z zvTKem^dp&jPMPr}tI?@G7Sdehs;R~# z>dr@$ye%m_hoO!=4ek~{CY5So)OV9}tAs9}D@~x)XHtpJjXqIf`vr#>*SryG^q!eY z&OnbN^`*4>oLf}rGFowz68eVl4I}Hw_>PLa3iEYD=?rS6;`U$}RZw>P8WQWzo7@Pd za3~&i0_^+Ipy;K-kwEr9J%Dj=Y3ak%kd{vARYTNp`|{0=yXqUa&D# z(MZ;&1ha0D{8T0K+i^2qqLZgdcnu|05v5?`h1}(45sG~Y!pFZxOecdOM3*2$$ zr`>8(l@nuExbu4I+otXzmZgQKYqvro{1-}H}S4Sjk znm}+~_fH~E;UYgDcC4$w3x!`WxTMKMKY~Y3Y;fL$rRBL!YsgRpV@-6*==q=;@nJ0> z3S{S~yD*}iN!ygo$o)lt&cWXhaXDNCQW5fz2tTP2qeZJD4)1wbgiw>I=L&`f<)=w$ zLv5Pe!OtLD71*dGwdNgyVyR}p7crs)-dFF7vTUnNru-lC3~{*uZ&RM5PYOfYh;EEa%%nlRV?kZM~F!|sCBVf*A~X@{kZ@Y%F2Vu9xKOe#QDxdHZFK#b_^-|)tC50J!zzUhobDC} zcmj5gkEJ2eZ0R8n+5NbAK8H7af()Ky|13!MJS0l*%wpl?uH3E^N{d%TgmJ?T2a2C` znX@-{6Mu@Q{y4Z#t-$HgAVL`3Tl*&cO&cOxsk-WAu3EG}_fo)eKDHQvwtBRn>?ALMr z*8Wfpotq*o`(rdbKvsVjuUvx>Un$#oKuBenh@d&0i@1J_njtfW>l!L5f<0%{)VFqK zHM*TLf8SL3w=b}L8;pqX8~gg3<^YJ3({wvuo*R2rFhk(CV` zyiPwtBPdM6j?)^c*-@R;A8IGhQ(GBUfjYxCM32@yT#1?O3K3Uxy?d>X%ehzEkF$L-AX-%~^+iEI0YBC%>HYlH~ zkRCWZ6Epr;^=SP?Xl$%^wJ7k@QWp{_?gpiNR% z$~dsmVIsO6-GJYx^O@5*j*wZq6GmiV=}Xs__8Xh522E!|U>R-Di!!GEa&5ZTVbuDC z9`a3BZrb+qQRfSEEZ=unt+@_4U)~}!)==j~9Usz?Z3m8%ImGuEB#2L6zW>QN?jUzW zt4DXXQ{KuO4hw-Yh1LvKY+yMu^jZFHwbJENk5>*k5p=DL^*q6C>EW7<)UbHcLY<#M zQIGe*lH2&3y<`+lB+gOcEYqrOP3qq_QCG)r{oe_$gFyI?vdm!k3%!{9)W7;h>0zxw zRUg|BSwZ$@`iI0u`dR&%*qdtuRz=%c^?|bn6a(5QL{yMMR6UDP80L6Ig8$3*Zc-uE za(0K;&?=SKr${dSfoN+)VIkvid&kDpH^)S;! z9*P&^eY4s|zgzpuI&n*CE6((2I8s5t}Syz_i~SgtxzF}yz5N2l^(u5EpN`b>&iDvBYK?T{KERQ_i6 zyz7CWMeGhQ)~{BjslXf*=Wl6_)lh)(%zKNMD7X=I{* zD`KEGHA{f!v0*S>33inm@A$UH6b=hUFXKFAOCMj1y_h`bX~oZ?09uWUQRT}Pg7CKp z5-JAxoxMB7wsLq~Hjk+%*&=!w5--K7<{uxKS&eW#bQ7iervLm^*VJ6ZdP-4^om0xK z_4)bF@`_F)i%)a_{to0+bp0ql3qgFm`$x=zzIV7ueN&`XllaL6M}Muf%P;~CRI9 zIa`F77VCk~mW^A;7wUx7nS#nH{ycQyv3A4H5S~kn<^m2MR8H*><ngBZG_}>>;n-aKV+Wq(GIbUdQ{&D?ArP0l@8UJq8*UJUq ze{TLheWTb6T{$cLA7A_Nz{j93RP29W9|@1q<){A>eTlRo<=G$peHmVM=yGQNQTL-? zkv`0^mufEnC^+@7BE%4(E|Mj!k90#h&4Hy|TRh)1R=;w}WYY^w6 X4ZNNrV2F@o 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�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