From 00587b6024897785e9452d75171bcfacf2ff5a1c Mon Sep 17 00:00:00 2001 From: Kurt Tometich Date: Wed, 22 Oct 2025 16:37:14 -0600 Subject: [PATCH 1/4] moving GH actions workflow to root to test --- .github/workflows/surgical-event-pipeline.yml | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 .github/workflows/surgical-event-pipeline.yml diff --git a/.github/workflows/surgical-event-pipeline.yml b/.github/workflows/surgical-event-pipeline.yml new file mode 100644 index 00000000..f1d1ed4c --- /dev/null +++ b/.github/workflows/surgical-event-pipeline.yml @@ -0,0 +1,85 @@ + +# Store an IAM user access key in GitHub Actions secrets named `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`. +# See the documentation for each action used below for the recommended IAM policies for this IAM user, +# and best practices on handling the access key credentials. +# +# This needs to be copied to and run from the root directory of the repository using the existing directory structure .github/workflows + +name: Update API Gateway model with latest schema + +on: + + # Uncomment the next two lines to run the GitHub Actions workflow on pushes to main branch + push: + branches: [ "main" ] + + # allows you to run workflow manually - https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/manually-running-a-workflow + workflow_dispatch: + +env: + AWS_REGION: "us-west-2" # Replace with your AWS Region + REGISTRY_NAME: "discovered-schemas" + SCHEMA_NAME: "scheduling.event@Surgical" + API_ID: "ao5s48kjth" # Replace with your API Gateway ID + API_MODEL_NAME: "surgical" + TEST_FILE_PREFIX: "stage1" + +permissions: + contents: read + +jobs: + + deploy: + name: Update API Gateway model with latest schema + runs-on: ubuntu-latest + container: node:20 + + defaults: + run: + working-directory: apigw-eventbridge-schema-validation/cicd-driven-solution + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ env.AWS_REGION }} + + - name: Install dependencies + run: | + npm install + + - name: Update schema + env: + SchemaName: ${{ env.SCHEMA_NAME }} + ApiId: ${{ env.API_ID }} + ApiModelName: ${{ env.API_MODEL_NAME }} + SchemaRegistry: ${{ env.REGISTRY_NAME }} + run: node src/updateSchema.mjs + + - name: Wait for API Gateway deployment to stage + run: sleep 60 + + - name: integration-tests + continue-on-error: true + id: integration-tests + run: npm test __tests__/${{ env.TEST_FILE_PREFIX }}-integration.test.mjs + + # If any tests fail in previous step, rollback schema + - name: Rollback Schema + if: steps.integration-tests.outcome == 'failure' + continue-on-error: true + env: + SchemaName: ${{ env.SCHEMA_NAME }} + ApiId: ${{ env.API_ID }} + ApiModelName: ${{ env.API_MODEL_NAME }} + SchemaRegistry: ${{ env.REGISTRY_NAME }} + Rollback: true + run: node src/updateSchema.mjs + + + From 5b77ce9294516068c984540750bc841aa1bad000 Mon Sep 17 00:00:00 2001 From: Kurt Tometich Date: Wed, 22 Oct 2025 16:39:43 -0600 Subject: [PATCH 2/4] fixing GH actions syntax --- .github/workflows/surgical-event-pipeline.yml | 2 +- .../.github/workflows/surgical-event-pipeline.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/surgical-event-pipeline.yml b/.github/workflows/surgical-event-pipeline.yml index f1d1ed4c..84346abd 100644 --- a/.github/workflows/surgical-event-pipeline.yml +++ b/.github/workflows/surgical-event-pipeline.yml @@ -10,7 +10,7 @@ name: Update API Gateway model with latest schema on: # Uncomment the next two lines to run the GitHub Actions workflow on pushes to main branch - push: + push: branches: [ "main" ] # allows you to run workflow manually - https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/manually-running-a-workflow diff --git a/apigw-eventbridge-schema-validation/cicd-driven-solution/.github/workflows/surgical-event-pipeline.yml b/apigw-eventbridge-schema-validation/cicd-driven-solution/.github/workflows/surgical-event-pipeline.yml index c426b4bf..6934b1d6 100644 --- a/apigw-eventbridge-schema-validation/cicd-driven-solution/.github/workflows/surgical-event-pipeline.yml +++ b/apigw-eventbridge-schema-validation/cicd-driven-solution/.github/workflows/surgical-event-pipeline.yml @@ -10,8 +10,8 @@ name: Update API Gateway model with latest schema on: # Uncomment the next two lines to run the GitHub Actions workflow on pushes to main branch - # push: - # branches: [ "main" ] + #push: + #branches: [ "main" ] # allows you to run workflow manually - https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/manually-running-a-workflow workflow_dispatch: From d51718cfcc7ec94166808a799b2ac3ac6844190b Mon Sep 17 00:00:00 2001 From: Kurt Tometich Date: Wed, 22 Oct 2025 16:52:40 -0600 Subject: [PATCH 3/4] testing stage 2 --- .github/workflows/surgical-event-pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/surgical-event-pipeline.yml b/.github/workflows/surgical-event-pipeline.yml index 84346abd..767f46c0 100644 --- a/.github/workflows/surgical-event-pipeline.yml +++ b/.github/workflows/surgical-event-pipeline.yml @@ -22,7 +22,7 @@ env: SCHEMA_NAME: "scheduling.event@Surgical" API_ID: "ao5s48kjth" # Replace with your API Gateway ID API_MODEL_NAME: "surgical" - TEST_FILE_PREFIX: "stage1" + TEST_FILE_PREFIX: "stage2" permissions: contents: read From 6243ea89ffc8303f7e948b4548393bef0609b659 Mon Sep 17 00:00:00 2001 From: boomtown15 Date: Mon, 10 Aug 2026 15:18:40 -0600 Subject: [PATCH 4/4] adding mTLS sample project and tests --- README.md | 6 + apigw-mtls-multi-tenant/README.md | 286 ++++++ .../apigw-mtls-multi-tenant-architecture.png | Bin 0 -> 300171 bytes apigw-mtls-multi-tenant/config.env.example | 21 + apigw-mtls-multi-tenant/demo/app.py | 908 ++++++++++++++++++ apigw-mtls-multi-tenant/demo/requirements.txt | 3 + .../demo/static/index.html | 709 ++++++++++++++ apigw-mtls-multi-tenant/scripts/deploy.sh | 111 +++ .../scripts/generate-certs.sh | 83 ++ apigw-mtls-multi-tenant/scripts/run-demo.sh | 33 + apigw-mtls-multi-tenant/scripts/teardown.sh | 66 ++ apigw-mtls-multi-tenant/scripts/test-mtls.sh | 429 +++++++++ apigw-mtls-multi-tenant/src/authorizer.py | 160 +++ apigw-mtls-multi-tenant/src/handler.py | 34 + apigw-mtls-multi-tenant/src/tenant_handler.py | 87 ++ apigw-mtls-multi-tenant/template.yaml | 183 ++++ 16 files changed, 3119 insertions(+) create mode 100644 apigw-mtls-multi-tenant/README.md create mode 100644 apigw-mtls-multi-tenant/apigw-mtls-multi-tenant-architecture.png create mode 100644 apigw-mtls-multi-tenant/config.env.example create mode 100644 apigw-mtls-multi-tenant/demo/app.py create mode 100644 apigw-mtls-multi-tenant/demo/requirements.txt create mode 100644 apigw-mtls-multi-tenant/demo/static/index.html create mode 100755 apigw-mtls-multi-tenant/scripts/deploy.sh create mode 100755 apigw-mtls-multi-tenant/scripts/generate-certs.sh create mode 100755 apigw-mtls-multi-tenant/scripts/run-demo.sh create mode 100755 apigw-mtls-multi-tenant/scripts/teardown.sh create mode 100755 apigw-mtls-multi-tenant/scripts/test-mtls.sh create mode 100644 apigw-mtls-multi-tenant/src/authorizer.py create mode 100644 apigw-mtls-multi-tenant/src/handler.py create mode 100644 apigw-mtls-multi-tenant/src/tenant_handler.py create mode 100644 apigw-mtls-multi-tenant/template.yaml diff --git a/README.md b/README.md index 8972d00b..daeca7a6 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,12 @@ This is example implementation of the Amazon API Gateway routing rules based on [[README]](./apigw-vtl-editor/) +## [apigw-mtls-multi-tenant](./apigw-mtls-multi-tenant) + This sample demonstrates how to build and operate multi-tenant mTLS on Amazon API Gateway at scale. It covers full certificate chain validation, intermediate CA rotation without downtime, expiry enforcement behavior, and tenant routing via Lambda Authorizer. The project includes a deployable SAM stack, an automated CLI test suite validating 7 scenarios, and an interactive demo web app for visual presentation of each mTLS behavior. + + [[README]](./apigw-mtls-multi-tenant) + + ## [das-lambda-java-sam](./das-lambda-java-sam) This sample demonstrates an end-to-end pipeline for processing Amazon Aurora (PostgreSQL-compatible) Database Activity Streams (DAS) using AWS SAM. A Java AWS Lambda function consumes the Database Activity Streams, decrypts the records with AWS KMS, and delivers the audit events to Amazon S3 and Amazon OpenSearch Service for search and visualization. It includes a CloudFront + Application Load Balancer + private Amazon EC2 reverse-proxy architecture for secure access to OpenSearch Dashboards, along with deployment and cleanup automation scripts. diff --git a/apigw-mtls-multi-tenant/README.md b/apigw-mtls-multi-tenant/README.md new file mode 100644 index 00000000..b3a3b2ac --- /dev/null +++ b/apigw-mtls-multi-tenant/README.md @@ -0,0 +1,286 @@ +# Operating multi-tenant mTLS on API Gateway at scale + +A deployable SAM project for building and operating multi-tenant mTLS on API Gateway. Covers full certificate chain validation, intermediate CA rotation without downtime, expiry enforcement behavior, and tenant routing via Lambda Authorizer. Includes an interactive demo web app for validating each scenario. + +## Background + +In standard TLS (what happens when you visit any HTTPS site), only the server proves its identity to the client. Mutual TLS (mTLS) adds the reverse: the client also presents a certificate to prove its identity to the server. Both sides authenticate each other. + +Certificates are organized in a chain of trust: + +``` +┌─────────────────────────────────────────────────────┐ +│ Root CA │ +│ (Self-signed, ultimate trust anchor) │ +│ Stored offline, rarely used │ +└──────────────────────┬──────────────────────────────┘ + │ signs + ▼ +┌─────────────────────────────────────────────────────┐ +│ Intermediate CA │ +│ (Signed by Root, issues leaf certs) │ +│ Operationally active, can be rotated │ +└──────────────────────┬──────────────────────────────┘ + │ signs + ▼ +┌─────────────────────────────────────────────────────┐ +│ Leaf (Client) Certificate │ +│ (Presented by the client during TLS handshake) │ +│ Contains: subject CN, issuer, validity dates │ +└─────────────────────────────────────────────────────┘ +``` + +Each certificate is signed by the one above it. To verify a leaf certificate, the server needs to walk up this chain and confirm every link. The truststore is the file that tells the server which CAs to trust — in API Gateway's case, a PEM file in S3 containing the intermediate and root CA certificates. +For a deeper introduction to PKI and certificate chains, see the [AWS documentation on mutual TLS authentication](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-mutual-tls.html). + +API Gateway mTLS requires the **full chain of trust** in the truststore — it does not auto-discover intermediate CAs from a root-only truststore. This creates operational considerations around how you build and maintain the truststore over time. + +### This project addresses three areas: + +**Building** — Setting up mTLS with a multi-tenant architecture where tenant identity is determined by client certificate, not URL path. + +**Validating** — Proving the chain validation behavior: what works, what doesn't, and where the documented limits are. + +**Operating** — Demonstrating certificate lifecycle operations: intermediate CA rotation with zero downtime, expiry enforcement behavior, truststore update propagation, and where to integrate revocation checks. + +Reference: [Configuring your truststore](https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-mutual-tls.html) — *"You must include the complete chain of trust, starting from the issuing CA certificate, up to the root CA certificate, in your truststore."* + + +## Test Scenarios + +| # | Scenario | Expected | Area | +|---|----------|----------|------| +| 1 | Full-chain truststore (intermediate + root) | ✅ 200 | Validation | +| 2 | Root-only truststore | ❌ 403 | Validation | +| 3 | Expired leaf cert | ❌ 403 | Operations (expiry) | +| 4 | Intermediate CA rotation (both in truststore) | ✅ 200 | Operations (rotation) | +| 5 | No client cert | ❌ Rejected | Validation | +| 6 | Untrusted self-signed cert | ❌ 403 | Validation | +| 7 | Max chain depth (root + 3 intermediates) | ✅ 200 | Limits | + +## Prerequisites + +- AWS CLI v2 with permissions for API Gateway, Lambda, S3, Route 53, CloudWatch Logs, IAM +- [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) installed +- `openssl` and `curl` available locally +- Python 3.12+ (for SAM build and the demo web app) +- A custom domain with: + - A Route 53 hosted zone + - An ACM certificate (publicly trusted) covering the domain name + +## Getting Started + +> **Security Note:** Running the test scenarios will generate private keys (`*.key` files) in the certs/ directory that can issue trusted certificates against this projects truststore. Do not share, commit, or display these files. You can cleanup by deleting these files after completion of tests. + +### 1. Configure + +```bash +cp config.env.example config.env +``` + +Edit `config.env` with your values: + +| Variable | Description | +|----------|-------------| +| `DOMAIN_NAME` | Custom domain for the API (e.g., `mtls-demo.example.com`) | +| `HOSTED_ZONE_ID` | Route 53 hosted zone ID for the domain | +| `CERTIFICATE_ARN` | ACM certificate ARN for server-side TLS | +| `TRUSTSTORE_BUCKET` | S3 bucket name for the truststore (will be created) | +| `STACK_NAME` | CloudFormation stack name (default: `mtls-demo`) | +| `AWS_REGION` | Deployment region (default: `us-east-1`) | + +### 2. Deploy + +```bash +bash scripts/deploy.sh +``` + +This will: +1. Generate a 3-tier PKI (Root → Intermediate → Leaf) plus tenant certs in `./certs/` +2. Create an S3 bucket and upload the truststore (intermediate + root) +3. Build and deploy the SAM stack + +### 3. Wait for the domain + +The custom domain takes 1-2 minutes to become available after deployment: + +```bash +source config.env +aws apigatewayv2 get-domain-name --domain-name ${DOMAIN_NAME} --region ${AWS_REGION} \ + --query 'DomainNameConfigurations[0].DomainNameStatus' --output text +``` + +Wait for `AVAILABLE` before testing. + +### 4. Run tests + +**CLI test suite (7 automated tests):** + +```bash +bash scripts/test-mtls.sh +``` + +**Visual demo web app:** + +```bash +bash scripts/run-demo.sh +# Open http://localhost:5001 +``` + +### 5. Cleanup + +```bash +bash scripts/teardown.sh +``` + +Removes the CloudFormation stack, empties and deletes the S3 bucket. Local certs are not removed. + +## Demo Web App + +The web app at `demo/` provides a visual interface for running each test scenario interactively: + +- **Left sidebar** — tabbed test scenarios plus multi-tenant demo +- **Certificate panel** — shows truststore contents and client cert being presented (appears immediately when a test starts) +- **Live terminal** — streams real-time output via Server-Sent Events +- **Pass/Fail results** — color-coded badges with summary of what each test proves + +### Multi-Tenant Tab + +Demonstrates certificate-based tenant routing through a shared endpoint: + +- **Tenant A** and **Tenant B** each have unique client certs (both issued by the same intermediate CA) +- Both tenants hit the **same endpoint** (`/api`) — routing is determined by cert identity, not URL path +- The Lambda Authorizer extracts the cert, logs details to CloudWatch, maps the CN to a tenant context +- The backend handler returns tenant-specific data based on the authorizer context +- **Authorizer Logs** button fetches CloudWatch logs showing the full cert processing flow + +## Architecture + + +``` +Client (curl) + │ + │ TLS handshake with client cert + ▼ +API Gateway (Custom Domain + mTLS) + │ + │ Validates client cert against truststore in S3 + │ (full chain required: intermediate + root) + │ + ├── GET / → Handler (no authorizer, returns cert details) + │ + └── GET /api → Lambda Authorizer + │ Extracts cert (subject, issuer, serial, validity) + │ Logs to CloudWatch (revocation check point) + │ Maps CN → tenant identity + ▼ + Tenant Handler + Returns tenant-specific response +``` + +![API Gateway Multi-Tenant Architecture](./apigw-mtls-multi-tenant-architecture.png) + + +## Project Structure + +``` +. +├── template.yaml # SAM template (HTTP API, Lambda Authorizer, mTLS) +├── samconfig.toml # SAM CLI defaults +├── config.env.example # Configuration template +├── src/ +│ ├── handler.py # Basic handler (returns cert details from mTLS) +│ ├── authorizer.py # Lambda Authorizer (cert logging + tenant mapping) +│ └── tenant_handler.py # Tenant-specific response handler +├── scripts/ +│ ├── generate-certs.sh # Generates PKI: root, intermediate, leaf, tenant certs +│ ├── deploy.sh # Full deployment orchestration +│ ├── test-mtls.sh # Automated CLI test suite (7 scenarios) +│ ├── run-demo.sh # Launches the demo web app +│ └── teardown.sh # Removes all deployed resources +├── demo/ +│ ├── app.py # Flask backend with SSE streaming +│ ├── requirements.txt # Python dependencies (flask, cryptography) +│ └── static/ +│ └── index.html # Single-page frontend +└── certs/ # Generated certs (gitignored) +``` + +## Certificate Chain + +``` +┌──────────────────────────────────────┐ +│ Root CA (self-signed, 10 years) │ +│ CN=Demo Root CA │ +└──────────────────┬───────────────────┘ + │ signs +┌──────────────────▼───────────────────┐ +│ Intermediate CA (5 years) │ +│ CN=Demo Intermediate CA │ +│ CA:TRUE, pathlen:0 │ +└────┬──────────┬──────────┬───────────┘ + │ │ │ +┌────▼────┐ ┌──▼─────┐ ┌──▼─────┐ +│ Leaf │ │Tenant A│ │Tenant B│ +│ (1yr) │ │ (1yr) │ │ (1yr) │ +└─────────┘ └────────┘ └────────┘ +``` + +**Truststore** = Intermediate CA + Root CA (2 certs). Clients present their leaf cert only. + +## Empirical Limits + +These limits were tested empirically against the API Gateway service. Understanding them is critical for planning truststore operations at scale: + +| Limit | Value | Operational Impact | +|-------|-------|-------------------| +| Max chain depth | 4 (root + 3 intermediates) | Plan PKI hierarchy accordingly | +| Max truststore file size | < 1000 KB | ~500-900 unique CAs depending on key size | +| Max certs tested in truststore | 929 (at 999 KB) | No separate cert-count limit observed | +| Duplicate subject DNs | Not allowed | Each CA must have a unique subject | +| Expired intermediate in truststore | Accepted with warning, leaf rejected | Rotate intermediates before expiry | +| Truststore propagation | 60-90 seconds | Factor into rotation runbooks | +| Typical capacity (4096-bit CAs) | ~500-550 unique CAs | ~1.8 KB per PEM entry | +| Typical capacity (2048-bit CAs) | ~900 unique CAs | ~1.1 KB per PEM entry | + +## API Gateway mTLS Validation Behavior + +Understanding what API Gateway does and does not check is key to designing your operational procedures: + +| Check | Behavior | Operational Note | +|-------|----------|-----------------| +| X.509 syntax | Enforced | — | +| Signature chain integrity | Full chain must be resolvable via truststore | Include all intermediates | +| Leaf certificate expiry | Enforced | Clients must renew before NotAfter | +| Intermediate CA expiry | Enforced (expired intermediate breaks the chain) | Rotate before expiry — hard failure | +| Max chain depth | 4 levels (root + up to 3 intermediates) | Design PKI within this constraint | +| CRL / OCSP revocation | **Not checked natively** — use Lambda Authorizer | See revocation pattern below | +| Auto-walk from root-only truststore | **Not supported** | Must include full chain explicitly | +| Duplicate subjects in truststore | Rejected at import | Use unique CNs per CA | + +## Lambda Authorizer — Revocation Check Pattern + +API Gateway does not perform CRL or OCSP revocation checking natively. The Lambda Authorizer in this project demonstrates the integration point where these operational checks can be added: + +```python +# Production implementation points (see src/authorizer.py): +# 1. Download CRL from CA's distribution point, check serial number +# 2. Send OCSP request to responder URL from cert's AIA extension +# 3. Query internal denylist (DynamoDB/Redis) for revoked serials +# +# if is_revoked(serial, issuer_dn): +# return {"isAuthorized": False, "context": {"reason": "Certificate revoked"}} +``` + +For a detailed writeup on client certificate revocation, see [How to implement client certificate revocation list checks at scale with API Gateway blog.](https://aws.amazon.com/blogs/security/how-to-implement-client-certificate-revocation-list-checks-at-scale-with-api-gateway/) + +The authorizer logs full cert details (subject, issuer, serial, validity) to CloudWatch on every request, providing an audit trail and the data needed for operational monitoring (e.g., alerting on certs approaching expiry). + +## References + +- [API Gateway mTLS documentation](https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-mutual-tls.html) +- [Using a third-party client certificate with mTLS](https://repost.aws/knowledge-center/api-gateway-tls-certificate) +- [Use ACM Private CA for API Gateway mTLS](https://aws.amazon.com/blogs/security/use-acm-private-ca-for-amazon-api-gateway-mutual-tls/) +- [aws-samples/api-gateway-auth](https://github.com/aws-samples/api-gateway-auth) +- [How to implement client certificate revocation list checks at scale with API Gateway blog.](https://aws.amazon.com/blogs/security/how-to-implement-client-certificate-revocation-list-checks-at-scale-with-api-gateway/) + diff --git a/apigw-mtls-multi-tenant/apigw-mtls-multi-tenant-architecture.png b/apigw-mtls-multi-tenant/apigw-mtls-multi-tenant-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..cc931fd259e4c9c73e440fbae90034746fd567cc GIT binary patch literal 300171 zcmeFZWmsILW^!_1G;d{SFvxc(VDEo}yuHER;ebK@Q3eB(euw)%W#xBN|AGMr z0}HkUgZLMW_S^mUOY-gW*7{%f_c`zWx5pgt|AvO-&w2mfWeCLI&DdD31>SBj_L5po zU|?{lzd!H5(lW5#degF0)pXXBljSzHvtckau`@DdaJRAl-3pA?o%^k5W9n>3%{HONAd>*_gndQH6sbpA0W;EJ`zniMIsS9M^hqphEEKiNcdrih=_O{P0YBJMaBQs z{OubbiG{PXJvSqxo0}Vh8w-P-qd6lJ7Z(@fCuT-wX8Jb>dM6KCXG3>-TPM>0>g2!s z5jAx(cC@s2wzRV)`rWUgk)4Y(9|_6tf&S<9U-NXfH2dF?Y@PnKthWU+{{DrLiQyCD z|MdOVl=pWnw}PXk>D$P^`{!rk{R8q(b^jWNm+|-D|IcLpYo&kGzAcp>mY4B=(8dpo zt-tXB3``JAN>oVI{oPUK2XDNA#X-V-`3^T3TgMN#VK(qsD%PICNJKCJfe_FE)5K)N zNZf%)L}$q0fwsc3d-(7W_5&RnEs~94b^N*K5vEW8L2lzh&2+kwtoMF2pC%h+lheGrZ zSI*gpmp_E$KV3uz(292vtumwUV*hz6ig(+5|GXA5Bo_!OZ}C;~U;h6%jQ< zWZdE#Yg7E2+zqgM|JG zvrMua1p}QbfGxD)b*@#p&b+@`-9e3y78pPJUW9qB-Y^?D^jVy=`I zEP(brlUb=2(_BpA$xayku5Q=F-miX34zvg%Z!37%5BJkH)rbQko3XKW^iCD8u-w1O z)!oVd4L5I!85H=s*2dh7*K54Q!b#HdI!E8h4Zv;e`1GZY59O{B)xN*+GhDT`Jll@9 zX289|0`X5c;sUSob7}ZciCoert=Wuo${L0dmM5+>Y7MG5Zd zs?($5;pr?xqBlvm`kW`!&+!`NJNGYtp+1zdcRFU}IN1+B942 z+3tGwL;olVqa51>^?OhJjiF{1)M+RC3?7WEKOMn8_><^|fYXGt67V8YGxekL-o^_@ zI;~c4rycsv&OB*%~HOM|&Jvb)A6)N~W5GLfk$MCo$hlf7y<0Hmd<$FyXonV_~ zx6i*y*-~hq4O-0b)6&x9l2!3WCPoH_H@6<+-!d!L!-2{5W`?RB{KQt8YAmzY&otL zVfgUNc7i)8yj5xr73wv@relLkWHZ$Dpja0tK~c6d{9rVGWc@rEeeL?!Et{p;*|0@} zi6LA&KmX-dI~>JESV>w@BUh5AgYQ;_U%(sQr3$pQC_iWg%uVrVJP1IdBH~BqGC&rd zM%~q}f9Qph`pF~PeZR`K@ZtQ5{;=lE2AR+64k<3X?0Ol!XHxxC_gtZtu4XFnx}2mD ze6LWvzhYkRP^wk02VgLFgmbcR&k&N$y@PfBVr_$g0N$4Sg?E4Lx7RnAE_Y=L_V+%XG_!gOUBxEXTs! zZ@%+mb?vn{1+?m$<%F4$;f%b9sDp%ooLy>F70opU9|i{{f3}GV`sL=<@26#*^6CV+ z5mHG=$MX8AUe%+GR^M5a#Go`OtdL|i*M=8^*liOV!YvAc)z(X9?Kf;ZB$cLpi50C` z%{qPW@vYW{o>LIH0ohgNvaRU5T{e0@CuJW3x-fLk~ z-)I`wNJFfo#X<4DMlU-oNez(_>leA4wC?QlV?oKiv7IbI$rsM=Je7=@4XDwXUC2@$ zzuah|@vp(zh=udxc^`W=eR?&;j^Im7CP@w~a}x<2>S48yQ#|87qsK5liaM=s+b=O} z=G&~(oZ!q@1kxLWCO$6LEkO^t)exSD=1=HZOTkrQANJ!Ni*Sy`?`k@;^mW{jgS(^$ zY?${O&mzYEj7}DA)U+u*|Et+Qy$>zgaJH`-sj=>jS(IUq@PIHT>ZnYT242BTkEhA| zNSfo0$H05@8SVBcDnFl0rJ%9$BRM(l`F8!3|HU^f_M1Z=T%kcF1stQAmyNEsd~ZE!f2Xcp`nMY6~E&B?qMW^O-&T-ZC!se(lE+ zs&^9sX4XrpLDA;peYM!9!_A0d86g=5&(vO+G97AnTOwUON2202g!FQiFBa&HiM$%6b&%XuoR;V?v~D|exmhV;AFSbP_ z-=yRkZAO!u_~MP1ooKuUq?^ihR{5DQBAHYs=*{898#fxvO@j|x9NP3nb-fPQ%`;Q- ze4x!eF6ISAJM49fI+~6mdbkktiMonB2V|r`Atl4_|KeK^q$EMQ?%gfQp6c#*^8NO* zSQ}I{MafvhR9tD(y^~qtzUL;;m%>CkQ)Z5sUsOaQUl<9n_z00NOAoBnvje{GIJgL& zzV3F;FCxQ698q6{uuQa;W!_zoV6y60j77=h3*vbhtXx<1r-AKtplsH}Mh>1@Oy}NTK)vF)9da_!4Dz2}GciNfk)ARGdDdVu~d-pBX z0z(1BneCoAvFM*{-~m>Y>CJ0!#Pd=+Ljog;WDikqQ-IL?n7?r57HbV!W)VhlPGo<> z?l%rQYMBT)TF0Gn^}Ut(kmf`yN~tYZ-L7L;{l|?rnF$D_O|S9TvR!qxPHlIctzhr$ z@oh#`_u7aOA0+2nVH?ZhTKdrR4Vu8}O)7*vnv8lK7a~y@BnKi(gu_w&4N8kBkP>@~ zwy0Yyov?lHF3V~x7Nt$hi>vqh;;xtNuL2G4t{0LwtG^C;=%*}qMYX2JgcZ51zCy1( z-h#s)s1T_P>C{+yp-1s};}Nt!-tH;KG$|BDd=TAkzX)32`YzBJD3sSWR(UCOU;kOo zgXQIXT8`6oG*(iov0Zifv?H0H@N)SL^dsE>`5w^_=Qv~YR`5I>GTpHZv3V!B z#f6I6HFi0bG(h_KQd8V9JUvwpt!raso6B;I>BW+i-SQyA4WAFo@i(4QrBJTtc$VFH zc^0Kdq{-UJm1b>d31@$^yb^0Iuj?b8S)}Bj6RdI*yrb8dvbo3UI%~y|h zN6hv6^ZdNf2lyOiI}&x=HZzP72RfQo$&A)NU-p)*#ZH!0UxJtSmO!npt}+@~R&5es zQU3x}=zKLjWG7YwK99@E^jtOV=AHTrM-Xt0C)hpC+M?Y4{0ZH3>UTxW&~@VrkE0&q zACl#Q5IH{;@VX$yU=mpQA(N+2d6x5W3+a!Nw@r%d& zeGi6T?_2SJqf3|X>9}*% zf52qa3m95|;dlslE4(rMmFD<#Qe?jQVaq|(H#5GH!bB^EEUp!=?$iiiy%VQ?scuxurEk|}%Xa;U#8!8?KEe`xxsYo? zQgp@R<5G)yR*@8FhrvcNN@tRrN#gD7UTmj|w_n#g5!a6ns=)u%^_-b5s0x$)P+P7a zg`TLE!sW#u;|k_X;x4Dh7sX=?PJ!=Q-J)${Q0lge!tFvahIT0uh5a>XP~3w9Lu+Oo z^%9d_%tcNw7&e&v5JXzPBa=UhlU0j}tcc&;vd)92DSL3;4woX^9H^})m!+DPs#)rFo1F?_?D*vD zZBC42{$HEGvS%Uz;!!)5?k_st+wkN8RH*zFfNDL__9-*^IO^j?v(|?}Q(XH|2MHod zo@KNjEHl%da12Mv{&n))H~_Jut4E)`HAcAXDQ*AJ(b101cUNKt-f_I#*m-%G|gdhTyeAL>u?! zcM$F_E5qJrAR$(+4j->II+>Yt9uTk`L3!+L7*DMLYb`-`pk0txhAZqEEPT`X1?Xg3 zfv)J3eS@7sDfMDwcGi8upc{|vxhdc*nAD2SKtq>5bVI z$!XprOEiVW)2zFufjSEpM{K8zwhfSX7t2D|&RhN^!HKFkDB)Te{22!%P!2t ze^r>Hxc@bbw3iQ&D}Co&Ddh9@2)y2-C?tV@F{D^5&Wn_sd|+hl@U%altS0sgMvYDX z@PcWrxY-9fX!EWDj_``O*<+GYiX~hM@=^Jt7IEj*^hq8PL2WAGYs$dWmBj1u1e?04RNmuN)knjh zOR>J3Qy+>FY8In>G*affs7H!gh%MMZFJo?+M<}FC`v&vuB005UM;$IQJV%=BV=(>V zohNbEEZ}WP`7AhLZO&mjmIym1Kt0I6p48pfK1#9~O( zZYoTnU54In>c-KHXF~jEJU=D*U|tKk1stqaaT(wfK}DNQIHZ(6#0vntk-;3IRg!6n zcDh8%u00Y0lXy0CK(C))s`eWnI)YA`NHIM?Or@dRy__WXlFAw&q2t11fiO|O66NEQ zad62<)|P#XmlCqQtqFl+a%?!&MfJ9aq!vT!UN*&7iD z0NHa(RhfEz)E`>*{w8)?u76o&lZV{`30i!=V*lNrDEZS*sN3WD*`U5-YDrc>M&u-h z!NTfeb6a+Dk`2@G@r0^vk!_1C94H4Dk&T@_Z%RmS;Hz>`*QuWUQPF7qlaPXci*Q6SJ>i#1&r*c_vvT25Q8d)qY zv0YqMf<=pK?k0Q^BXtGb8l3aWH6*r;tU)oUn87Sn)V+p9yFVkw!atpVp_@;Jc$X<$ z30@pjg)Sghs3vNC@cIBBdLFFU#1ulxFxg+6H@guXEu`P%p5d)UFze`TQHj_?X{o)Y z2~8Unw@tR>A+MX8wj2Hdr}3L2=ckWF2FZ~%l!Y62;dM+;`DCo>!_A_qk=v#VmnlrH zog~p(x|3*^A{g#xIZC0-86oUkc5t$8<%$Yj8%uY~SUllr8 z+X~8>f7}dsxK(BVXIfo0J??kB<_30%SU+ehHr9PKhPn|K_gp$jx!+-KWKPXa4mbR2 zVw`6aE^F`zzaN14a!rtyW};sb$hY4GbP8N>IRw7fF(XxKS4|&yMBNK7AD5-C9cq*_ z{VlvYQw25kF0EW_eBJZ||hV^4JO~b0yxHiNIw$KSg2|8 zU0uOD<1!Ewu&HZR@!9nLs6TFTI24Um?{wNps*@j|;Sa1^VNnVH@K;akq!dwUpn?uZ zLZtu2Cx<7=gbH1|O6k{=MfdxPXr)@iEq#N61psg>R70RQfbTLQMX|#dS9~n$oTl-_ zMiEBXEehmtMR!7717GKAp{xwP|{8D4DvMg5$A^-UK!Ra{Md-gmzd~`6W{rS17;#+&^bfm=7V+JQJBwi zWmH{@ymj)oPv>#08Lny{Ys1UgBIUGdzGvkRg#=p~DMwtn`GsW9&OpDIQStuOv+K+Z z{*Z>tCM3p#{ty!5nBy5dVceaM^-AlvkFgbVI1KNw(6)RpsQn4UA@tiefD;?0F z_d!dtqMjN(ZeYJAE)Kbg;dThIq-02wn2Zekomu#L0$|~Ey$NxUfD4AF^iV7Zo}|hE znZSLUIw8r1&1c5p#CEzy+gjLtEA#ez)QONtfJaaNXkai2Ru+o`c2dWM zegZ+L)}x6{pf8Y!jSug}ZMXcYC;rVrsi{nj2Y702WoQRqKcS+^53_X48C;cmG*Ib) zECzm+2-sV5GkD}vM%`(#$0-kpI0aji)mNZT)V_F&PqBC%i@tvKR=>3)x2tHPG0&x)J>*qZ;m{eogRec(a)L`UQB)SzV@-rGqthQ zCpBnY6I(P-77%TT+;f!!k@0HJAH~ZECuIo~kcn&%qI=9;OHi8=^VxKGT1d61hzmiB zm8gd20awIr3`$v`ZPQHACX=Bz3HuRj&sE0#cYGw?|I`d7v+mGf9e{rCd~kDfK=1Ab zMAa{u{m6Wug4U;8Hg3v5JdQqjrhrTzz$e3KHi8bGkhJTCKcQ_3BI#e$Wr=gjZuR5!6BRr4A!CY$@-o>AE9068{(wKW+|BqM0@G$B(f8x$=73{XvyZ(s71 zr@d53l;Mn!vx!}On9iikbcN}ZYkl^Zr=#D0lo{OE4U_Z|hpL6!qO()ncUow~@V*-dg2T=EVd;Z(@m2rj=<0x z0jf=FLS*B%s~TQ~itqw9?7s;jpuT&osAO@uPk$_B>^^`@$V?1Sk>`a{;JslG{zgoC za6Ki{;n~;P5FR(8A0kq|DKnt~lpS@k23lyS0GNX0QG%b4%Q#W+{Wd%~TFk1D(2_*C6@M-(9CNpJvBCYa$5Az@fv7?8S*+S$$SdjFw{NJdD#<)SaBZH{b|m@Ik$-Ra=BCJrdRzMBWkbm(Z@p}tRHKW5RoWto5uq^|}ue+k`Dtb?vB*;{KEK52^Tx#u(v?P-mROnJEI zI=eJj|9X&_IE)g@PL(TdDMsJ<+Oc&Oo~=g&cqUJm=Q%!khPDWJGpy*}UEe*OVUKOi zA#+}18&9r6ydB)AC%J>uWxzs|j5ZZj@E}%(7l7jmJIx9fQcTo)D^z*>$%}2)^Dg2u zb~;{fZ}LG+Nx43+s3}v-IA=elmde-yDGT)iErU?huT zKu=^m<|v-ieWJL#{nAA`X}gvJNt4{JmKnJ_1h*U#56x$w9qh*ZI@;#hT!jlC+u@wX z==sI9P7J$XJIQ-x1|^)B!UfbiTOFkDX;^3q(t_)T)O!LX2nY8iy+u>2`}nm$b0inF z3M%v-r(Y{L8L#WcBA%Q#mCnP%rNqHL_HLDO!+ zB$LhDplg)XT7G{_yQQcHZe)Qi`Y8o^+z}bVeV~)xCF_s+Ycl3at~845B<-JjW6DfM zweG1_5=XV_2n2s~n&AS9QTRK0_0(Jt`0tP4o-VK5J~>Sa*CEGtwjJ=4ds##%PiOos-fg!QIWYLWmU>#N zD3hpnAL~3#cBcFzoZM_MWH`oFOY+M%Ml;`U$LMNWbYeH+R_b}NZc)7u@|Z^U5H<=R%pius6#QG?=Es) z$Jq|nDbv#3*TPQecEQ99#aTr@tdwOi9HQ^O*Af|6W@Z3dv(9T0bCKu|77P*Ph06nO zN!iBifE(pimSSIJ6RQ~P#41A4D{6_AGRiAsV<_f+6lA;9Vk>*MBX%Il2@XIZOPE7O z5S32lsMjo#H8$uPxzaIT&@)bLJC{}3>Z8WfiF@Uw6D z_$TcOq`0J*_bX=Io{Q0xm#67^?H~sg2%-Rtk2UUo@`B>63@|_S3>3qdf2SR>y+h}> zOKAtI?XN5lO*1ICZmW+d+otTnD@VOmjlT{)4#LtJ6cL?@Q-|kfM;BscJ&s_cAyxhJQ-beSUw3n@@jA zjXDxJdQwwsO-0}U5+{#vU-*r0PF$jVtQHAY9A7WyY zBb-y&v*M5_rGVkB`U>bTsPn}4R4c?xn>D^x%Xh?ZBLrCh-V62<}dN%g)WC?`j@w6w= zA;g9?CELJgWT9xoA@xY2eG|8Tl&2smb}IDt;LLQ`EZB>K8`r4%@TGjamy`oly7jiy+eA}nLs^K?GtKR1{@I=)7h45lCJ#T?t{xngp3@=JoDPkoBDALS3)+!|1J8}|K`bdKYZSI zw|hv|Wb%qE4+r6ES&pP|m7!&~ze0cHF=_aTV`(hlG74rV^cHrro%=u(+_UFZm1w2~Nz( zjWx0cD{3*wc+wU3g=y7p2OmA?(;nJ1&WBeQMeiHDDXDV{ z(VN7fdmJ>_9;+^yN{9FRPa6d$mZS)zrL zT_m^+6;GYu>WPrq8=KW^ZR{%r^wH*xjm7dNG1`aYHX~vLDSLu)E}1 z8pQE)%u;QShXUq9*awTa^4EO`59{H2cYss=!Er@#iM3E&NFB~*KPs!5tLxNwe1m{# zm~RGj+D6S-c8-a3r)SQA?HLY+uW~r(B({Nffko}1;P8tpAwhIq<(PxFU%q10IO^@AQJ(qR@0h6@e2RaSy z-zPJ>pf%R+K6uyIlYiVxGX}OsB=0ZF?9dIFYUuepb-HnX#Nk_kcE|VNy3)J5WHb-m z-NVap0$T1-fEydU5Lg?xENlPeEGZ^t~zOZ7zfi(Gz2psE7-a4m;cDjUu+YixI0plLKD>>4e%E{o4~4|Y%DrPB1N zAYMvV#NBzktXhLzgUSB8sMQ@ouv6Jr@TuoxF=U~~4PbUw6e$IMkb|-KW|#~kb2?7R zJ9C_NrX4QMXV=b5x}na?`*=(Lq7!>?O!%f@$w?S zkCqm{^&O$wOA0yq0znquROqSi`Bh#HM19quM*l;9DWW1Br^Z%^FG&s{7~h;)i1}#J zA&+cQXH@Mg^gfAi*`L3NJm>U|3=N%f;r^37LKpy+Smo6`Bu!4shnLK0}0VtxYYzI+7NxjLq2r%V$0Mh9O8#_S*Y5H|~MySjg#v;-B&XCe-eZxsxk_7x+G zQ2Cx5%k@31TY?X6T~ehUFc8F*mRZ{SEnIB5P8}PxlJ2x{-MkkB9oQt5tZfb8UL=IK z;!epos8P&K5_WjgAN1F;GAOarFRz3dQs!^10KC$u_gZlu;oNMxH>XOGX-P~b(sHcB zC=T6jVySmmw_+;iCQYrpblaPGrKg9YDnVL|b6aJN4LMdmv{s<8*1pZaRBf_!3@HH} zF@I-OiR{W{YFAtnzNsC0VzN=y8+a`MYsa*?LSnQFpQ;OKJ_Rx#fYucD2}o3G>h|z( zTpMIA1Rv)jahIg|bhifXyiX1nAf0k8&$iZHhH_3)ec+jUZS;C~So=wSa5oT=5VWxx z?3OE*Rb+-ro?f#FU$<}~&MzgGMJaXpzJXY_g%_Wca&BvGW9%<1dM^Tk`z^g8Br;M? zuKBg+wJ#F15{mo*QK;gmy^=&v+YE!C^^k+px>wVQKI7u?pqEa&7O!db5~=Xz+2#sI zIna5LT2D-N2IZ5V2$y0j*f9P#R764(;8jF;JmkSPWSbTchJLjcp~|mDb#xr66~6CG z|GsuaQL->`NYiNli*knJB=TLKoQ82s`9g`ILBvpP32?v|&__W^(RBsf#hRy`LUAp# z`gGU*&i#PVEl(0izKZEH4aAltT7uE+-Q@*DDolOWQ(_R#sY__C7B^3>h2&nP?y$0@ zrFcu~E_!J%D)+L)ezNj}eDR!wGKs`ckX2#;U}w(EOOvZ;}W6Acc9sjamAya!M-r33ObpeRwM?*XT=4fGEA~r@`yS6 zoZr|`=`2O`mus>fK^soTN^w4y^12~RC%(CAFDB5T2S+b89;~h>f(pbN`1pQor1vWv z>x7qo=N5Bw$rj$2GaUTetz1xb+ci~lqv$$M`(Ub)B~*+$qw;M~ZIkb+rw`;Ms^HV| zv1`w@f1u_U*rFg+VAT#|KO4ttz&=Z|(R7MY9gC+7fR^1Z86gs=w)G`kp_fVGgJ#e|+`CslxN( zWOz77M8X7>*rrDHit><66GL3x(lUPzgvMkV;5J%nqyL#Yl%hB43l=CUI*xbP*9JNf ztSn#fxU;du*J9kpVf29X^XI4elqC0Eg{K)6)hR16A8I%aF zog&SKMu@ME+v%1YLW?6lBS(>(FCj2@Kes6Dhv+$ej?XEu<6>N+2`PbaCL|TuvgsCk zI?SUhYx(!6yiX%k?3X7%TYdXe8^wKtVUaEu$^@+J;g>8*+S*}+&leQlT!*xCA9Psk zhZdD6Y5ZxnUVOYZmJIaZ-)mZ%{r7(X7&w-OkkA(=BcwwSIz#xL*F7>l(w=`deakZX z0RZ3e*qH(9ewUkFaU$)M8mBkkwZN8w4}(ti)udZ%_M!zc#;>}Q^^*^LK1#4&q~=q1 zRYW9aTMzy=1^iy0zqWmNa`g41j94G@`KBtOOanPV)ZvTB#yb@;(PvG9 zEL#aWt?84LbR1-jK4pcYgQ!d5<)j+wn@BlJ(6$u+HY({_T5G!3c@NAmJsLAO@Z`mWZl{hI`DV*KepTG^16i|skO_V3wc z!P6g#+i=N`4PPn}{zSM)f3i4WN9I-&f(S#D?3<3CQ|wYwlR4j`gEc(gT`&_NnqW+j z3ugX!MT|6Uo>nMXja!|jwB=gsw24u}!dfXta?lW|W7_8fg4I@-wP68Tl!wSi+xf(OxWLLamET3A@if3yd~wF&xcp#?B-NjBqcwGm3qpiFvFT> zxuV3yqeKqx$*!L4g@1Pi93Gq(1-}L%u02YNPN4xr3I-`Wq^A1IqE|x+Gn|4_XDjU{ zAA~E?Y4;@#8*d#h@RV3t`0&?xp2^NXKcGHbA20xt*>S!z@v*_kBq#m!we)JUF05x9 z+S>!8#OJ{7x?7;u)UNHT2l25$GPd6{nN4KcO*f*$bEn z)EO65-ZYaB&UqPW?DcYO_(gKG2m8S){gcx)+U&Xd%gr`(G<);EA1E46u3#Dj4&_uU zd|B+4bn{`}XhBi6FU=9Q9IoRMsK0%@_GE_By0L> z@sC{L%})5Lu6qK47C#!OkJM<4l8ceeokE34g_|QEY|*19V9c64NJSTgcTa8xki{mj z@=rE`qlTWF)&s4`Qc89v0@UI8a}?X9vU?BhIsxNpuC7f1ueljFVm3vEWLrlp3L@&Z zP}(Ntp)d}`npy!G>+T@y&h3OpMp?hZumdbSht>|e2@n!S@iO6;3o8J?;LM@2rK#$; zA@5$^{^6wmc1LH~?cvPD^#(nB)$;N1;i^J9S!dKU?b|m_QsB2dLnZmyUg0dgvEO`8 zw^F9e+sv=J58vuksAQO{JKEn}>Yz3C*I~L+%Y^a=mdmXe5D&qGsq!MGZI3Dj56()S z%jSNtt} z*lCT|E5u#7)(Mr)a^Q7cx`{CvQ=Yb;m(O)QGL!OL{amvvhc`n~e$sVz7R#Tk!9R>c zXMOPXhfJ%hZ>;LB+*M_O?p=d%RrJv#Z+(WfED1aT6qP7`@9bHP8MS2t`a=)?mm?Xf zy=>aKiCn9%G4ge$L#fEZ1S=rTNJ>)&2az;I#j{xqg_h2md)kq>ybF z$vs+ShRjZRPTZDm=}k#Q9I%_S+HoH}`-iJifO- zGF(P2{%Y{Ep`DKuOygKuO-=27LX?PrP+rckIPIp=N?Efe&}^bRmt1DLO@mP@o6RSg zi3il~xGO(yPz~nN;3A23x)s|eLBzuYNWSpmW+=*h%W#~Vyg6Pj=&IQRHC1^(G@Bjb z;#6xV8DmXXF>Y>c$*p@i$FrHSu-vvXPByqcY_eNrbMEt$mA(mK5>*Y2F*D6`EN*9L zSUA|5W}hM3STvx%nT?mPU{X1Ht4yma$mJfs- zFW^DZ0yuJ;0WC(p*e`dxW%k=-01@)tf)>&xw?SsZ6|5D%KC!!nU$@3ThlQO{PsbG2 z?!ixeIPnMg{J^@_De1NcRxzl#b8Uu#mgJ;mVUdqO+u+H@&~|`>ylpJ@dAxgY!gP3Qvi};S8#$9F{w%?3B~i5j(vv9aN@uql zT)llkuG^iEh(1|WY&3-{wE{Twp(k(Et0*uDn~RA-1|eWa*4AEAQ4J4OhYlGH^2~j5 z9mjI2;%uz1Xgs#cf_erza5)qiyuLiav4)>{zJ;&l^s3BDfOC#C?k^{ZP2UR(G2Z?~ zs`lLvZo{;w^vVv5U;@YI~fOxMm5LT$}utyb$)@1(7WIeE7041O&j_n6YXc0?ut z?R#^&w?xQGy>t1}zyXD_Le+Rr^^%+rPyWUEVk;3iX%IWshRVR;7u!(H6>R{SkkVC6 zUinNZ-B7)%z-Fy!X?vSV)k0cBY;0J7?R#JgPW`e|zrrdWwK_XlEz9_@F!Qy(hW2!B zl0_+HVJ?2t6uu5g!rNx0!TJ=||{HN)#Uict$O?2PO9 zO9c~#C2Z&WFyDlHJo*~qH1%}V3upg==u33iM-iIxMC|+gsB<=){TgAb*ETxH_%6S& z5Gz`74pJ?Rw+H$7K$NcI_T_{9k2{Cv3k{9owiw%#%-&S;4e4TK=UA-IL$ z9-Iccf#B}$?(Uw15S+%{-QC@xA-KDHaA+JJch<}sx%tVjW__nl)vjH;_PKqz@C#4o zAW%)6rvNgIDm%|BiwnBERg+(_Y7DUZoZKt4zEb_xEb^jyb`^|56F(0#eL{1=yjW)) zuOMnN*ErpJML!Cry~b**IhunnutnHu4IHOwe6~C~OMa!drQ`d(ciQFJcY$EA z!q0xC4ypGyTK}`ZABMmqBv1mYA|fKflioclj7JQ~3 zRz;DSFBuxfbC>W=#wb^;RmL5y6IKc(dokIhy*HGf#=uhYk&yT_sogJ4L8`@8NTn`i zDqHs=ZtOc@Lu!jzARWW-J``TE(I(`2^Rdif?ChLehct&SsTLW3r-f26LS`j^OJ zvaWlDjyf&`;9G{Qz+V;mX&ez z?9Z>}(pQymTRM(sNWA_ozCLTa1(`AFgeQ}AFx=`^H19wA2}JT6VP$x4ir)8jNm2Ne z%ooG&XOxwdebp)m)duw5S}qpS`d37qnaDZAknhMUM1{!OSBDUo*qe3&1+7}3`ak@j=GlAh#{;EMO!i1g#pKz&lf6B)li zJPhO`_ zVhT~*{1jtK!hXq{-fh@40%}kMukZL8t`bim`Itk;7JteInW; z{fV`E1miuvtZueKCr2axK0d_oBoq3vl%$`|hTs@qjQ|Y^iK%r}pA2)-PqVht;B}X$ zeQeMHG|vL45oJ#dev>)+)8&-(gzVh>%mkEIvnNz$9|x?6 z^O-xOF%O<*RfIoCHkE6uNEppcRDS>A;8xQ-E%IudZ#>TJlmG{Bc20<`-?zF?8ydRmR!-QX)^YsS;*}xA3l&SQ(j2&?3ticazPs5FCzFOKPZAgdh-3a^sHqUoTSxKBD>7vqjInBqzFsx{F4)!Wse zSmvi>P0$9}^h;o-o>Q^R_`1<$Vx`6pM+A~zkiyKsw|!5$Hhb6hiH8RusDa-D>0THIa^uOH7{fG->Bob_9Vykb@pdQwFNmHe;aV(dEq-7 zD5k}U2wAU6MTd@+4GJEaGjHimpQn4b^39O7NTxMf)zTb`X;$czskgZ21;WEGiVs+e z1VDE?(ofgo`=3F^>oWE8XaF1J)}34j3o;H4u2ffn{&nPhwr2qjC;e)Byg`s$ok-+r zJa6~{&25I4<(k9EY}3`+qr*kKx^b2bN1k2_Jx_*9&xM$vP387jy{i2PYiuOe_z{A(x99Chf^acl+4g8P|ubj7)+Wl%Gh@GvQex66u#8!hcl!Mjw0A-M9Bf zSa5})O3E%dWzB${DvGa8Gl(dpJPHK`G+Vz@{Q}lsp^aM~js|rs&zAIG;g9DM4Stn5 zdkx)P1joL}03K+a?eQs~**?o|ny>5|k@L&qIMK7Yb4a!Qsn-qKe(0-klHB3E$KmV_ zSLOa)Z>-4{y=El`U~%cY`H?Tfg?r8_(wa=Wp(MyR{!#`hl}3 z=*YFm{K)nYb0KX#4HD}V>7GM0UsK>^0@N*K*PH8+Nuc{HXHga_!c-wU>|P^d?EcMI z7g?(>mrbq>#EB0c{&Z1tt$C{->k-79sT@XKot=}1bjj%U^VCqKr2rFDZ2UkW+wY2L ze|LZ5#PXQUSK|!?-S}C=-v}sA`yTMI&DJpp58^H+udeIPrN(z2-1ToZR;#^WY+iG# z5~>NQ@v#)b;Aoz-aU@@o(lkmsq|SsT3QR4KEC*(ejy!y1XIJa&zM3YW`Ii=$`^UNV zWupi2k!uKbvQ(N!nnwl%01t`N@!ej#75b2v_yTw@jP?h^vFj4;FV&jQk!Q)zNcEzl zgEgKWH7lu_V7-2$j@i0oO1&fo>EXWjbxLrRb-vW^09&fR|JwN74Z(P9wvV&6fGZf5 zXsz|tl2%WiYoOcioIE}cx5q&=FK3Du&=q>Ucw`fbiu}9nUjObemRD?f5VWYQnxHwi zxni{WTY)e45Zd3CaA9TP_L)?geNKx{<5H`|Kn&}DEz#b3oZR?cW}m% z)Y+Eaf`S&j?x0ElblF}$%zeoXKQF%!68EA~R9MJu0eFrmLItX0I$vz%^PI*hUu=q# z5mlO||L#;sD%a}lM$8oQ9!$^PLOPb|<#y|BNo@>yU2KjlWC~h63@=~R6s4+Z+$yZ7 zw&Z%9)E#ftgl!>Q*Q4iy1;k|O9EYc!M;^G=fAN|7jgiPe^>a=u(@#^IogAVBa80?l z1}EhBMF0JmnSHP3e)BRll0}v&BYjI1Y(Yn?k~PaIjOVKn_Q8Hmgg@3ug$k!OI}|_d zasONLPkY^=`%Ja%^dPsP7=jj0#i8ILR8=7k?%=}a1*wr}|BUb)y4$FOy$CiOKXXrH zwyWnFT+6aDL&BhsiyK3qSb;SU2Rhghnl;6B=ECmVa%=M;nFR%=i#5alrBsai&+NH< z*KfpoZ3*iuP^G%MBOB@cz>P>uS$~tjPrH{NDa~dNb^$WZ;+G00A&B*zKRf!YCrDbN z6D+yhl;lgwIbFqkR>+`j*Thoqf zgxwS~0oDnatjHo8{AR-@I!vj=vfeM6n3q!L-9co@k$g8CImcdp*B35NhuNJQfyJ+1 z_5M`0LE&E>`eHr)+RLY`F4d>aIToy#hu*b`^a;_dTA#(r3-nf2w07?RtbI~~eS>il z+n1JjIXXYNV8u!P0=b#p?r0Ys+DJF0y`NKgMUpi+*nKHJ7M%%{@B@6mn9PI z8+m|KKVqp?Wr++IQ%TKfv&jXT?8ud-Z)}CSyO&9tsW!c~egK}L|NloM9JmP)ia91;C9keAmewN``5L1E=7$T z+qvx6P7~Vl$h&jj{wCpbGgw)uWI0Yk?POX1i@zJ0lB`nc221wE&$q&*NHRjlQ+i^)wseF!;!m6)`JoMMD zlw@Ki!%;Qf(N9X*B~SCz2Z@m+TQ2F>R-uirYlNyTVn7O~XY&0Y5DJ=R@Z(sJv%JjT zEe1L|2@GU;sC>coQwWRGAuCabtG2X#{{U|2TZJ)JK39B@JB)FYS`Obii6HXhGCyYc zv$W$mU{DcMebD}178d;<0*G+I!t=X2J?mXp6}<*)({u=PbF!EqYuO3jdF0+HBJS=o z!<(r@TuT3Axwcx#B7Q;c@*}UeoPY}Bh>WzDaBW$0q5WwD3_H`q@sX=Y%XGu3Lqjya$Jqz-mGD$>@m;uC%4W_NFM#==X}MqK)a8PMrwal>UCfm$2hOtPU#By-JI!T zGd7#Mxaj*Py_pvr9}H{q8b?((p6M3fJR1jv1%}~mzfY!rk=9gqd8#txIZZN_<%i$ohDH=J|gUq42 za5!;m-r5gt4Y%r0|FL%Vt34(I!5`-d&aUf!(w950)^^!D0k;`%J?BQeKd|uf6E5zS zs?qS;n&-GYTAPdiF8X@0V=3}=_uAfi(mj)>yM6^R(}ip7o_}({q4EFb_AUKMGVDsI&3sp-oH97998jIwm$%r2`Z=Hvj zMrR$Y>9LO$nGAGd&C`Q%D~6vwUUdA4Ga@(#2xw-s_A~L4+@d|1CMbTDG(bOZqcLX} zeeXi~dKB!SOsZ8-!2~=37CKua4j|1!?yWCjc}~!a@jazVth|?xc-uVvVcIZZO2R@F zSBV#@GL|bfHpD%P8;-6gY93E1augdi`2?I4aZ>T-vrAN7sbei6j~lgH3hMY({2i%( zRr9Y6!KrP~BZmF$FtPb^pS=&YY=Dn2-lb@wp}ij)+L&zm*ncUHr&lm%ab=6i*ur_$vf-+NQdy>4do`p z7kYNy_FoqeRZwKtlXT?fpVW5V<5t(L_MRIGJHD`t)k5JSs0IZa*IgT(RQg<39)kov zGs*e~RkrR~QAT6ub%I`aYzY)A`v&;z+Eq`4hJE?2W*}<*fHC9OZDDln$XK~lexwig ztrv^tncJZw%v7Z^>O<}3(zAsY%@0KO9f9MZ*KbUR;QVJx`#iUC9^cTLnj97YvJypWPxnM(Nzb2@;$hZ zHHC2;+c?*$`D} zqH(uMP-TZWgq>fVw_o+@++xeYN8VcX;9sZe5{fIwylOY z>s2WxAEM7>ZxY@OJoDnvWTaR0O|@~>d)!p4T4W`1Plm{G%sPR7c1KK0elG`ka~U6B zdR>#o6g^BgICD%rHc!q7qSYu-RPBz4*#OJYo-HA5u@Af!I{a#WVvjoyb?j88K&wB= zd+uFNvW{t@vNu~2?!5Ti)87~cMhSOl|DU-2Pmpg)eNW4~Qr@2=&~Vw_?T}7n9yGY* z2R`*FD@yek$Ib_lSi30|T5j`1X<`C9NK?AhB3dV0?=0_*PRuRzM;d592YqF%Lm>c$ zv{`c-jSe{dNxAqWN60Rv+3xs?X8x7Hhuxf1j`#L;q84bI_Qw5d(-U2s9Q)I3T4RK0 zpn4q0gSWfauR!4D>%j!)pim@mB|Iz1V~(#BaY#9HnN}4V80d#?m*z&r6zj&oAURDR z#TKNh(1Kj;)Vea965q&fu*YjL$Zr$UT-o&v)jqImi!RKCs_t)kI*6*Te|qXtMpeW< zKC3^k{W$AEa>yM02!vJnJi~=7_SoUfh!uS&=Xvjkhl4{w#YqryabblFKTVEtHhEak zk+dDmaSBfKV`r?n)CiT5QdCzLUq6GEFlAN;+2sx9a?mz3nUII}YpphZce2S#OyOpr zk@l%ru8W8$z(T0rfHKgR&NQI>T?qN`?Pc^bBU{QeSFO2Ri%{H82&P8DWiJsW!o+oC z8gu@HQm8y+A*B`@c~Y*Vv7$mR{)PcTqM_mTw>N&}1eWasd4FDIW{u zc6zPRl|#J_BGa3-wmK2`YvS);6pta{@z;p7pkVx#-s?`RjixMC6kkNKGM6#oZsuzz zLS+9NRX>-%L}8X-H{ow3ewde|*RX9qb8>l^N52!{dTH6(+YSROhK?{$$pDxS=Yb@5 zPt{m?*E#FV{fE|p10`lI#8?rfWCuT+OdcZtT6CTAV_j??e2}K}%_NjWEWgP4Ucus1 z`VmJ|ug`2s4aLSsavghCU_18M`pcjsMFI6@9YZaq;m&ss&%2Xj}gLl-2cBzcfoX)wHbc#TB_$m(JGg5}I{V ziQ>MY!1)t&le2~8G^zX1o!Rr2`Ufo^xtiz0p5Hk;09jn(7>wz=94m@*B5f6n6qJ)$ zW?kj5OCc0=2D1oD?-(RXiq@vTEw1kqW}$^;ucwS;c-?J8bDREwD;D6M+0VGP?4;<}V=-2VQHD~oJzvFgn<$g+<6}f&;ek!fxxuPX!UL>oh^g@Hk^uaDq*x|IuTe}(8ML;pE7=amN zi>lTDZ3V$@yn=*P*)Aw?gF9woSo@;`DcWB922gx7>tXCRXrTX5=(N<9{R|T@Wk6qI z6*px4I>t_er)fMW5?v*YmS5n1PqJ!=;N@-`1k&}2337R0s$P(|ue%|?nX6&jS!Y`} zElEQYFuO1QB;2#TivI%%Y^t4OZYlJ>!z&vfiRSXzUTpV^z`!#Qo51$^C4(vuRpUtx z2dgE9#QPrjYk$ zKHX%{@_AH}>zF9TSMxQjojOVNQM66AS+&(2OtJaYgp-G!eIL_K~iXi_vDS zbRuzH;UVz(jvzg;C)ecz*U5EO95ES50)jhkx@9pis&I)b@r${Fz*ve;4b}o0XMjVo z{2?V}-8s;BGxP)A!)q0sUGJ0KLSXuP%Rg)K4WEGvppwnW#N*C-@6W#cQT$NWWZzeN z+vO4BNN2MR%0WH>My(L4(z((z;4Q=jrN2`iH!oLmX4En^B=Th0VCZ{B@J*Df-3f1s zN|CzN*N3bQYT`zhCIb`yt-=75RR&9>N5mSbzw9#O?``1tZnup-F88Q^IKz)$S` zlDH;||0caw%#^}4&sZdQ@mnkp&0�XWBh}pm#3&!}1ZtDiNwgJ$|$XFW@`AFsTBE zHN7ffj~6Jhd1%5a>S>W%)&CtLC5`1J;cteb4-QF&jrfcGH<$}3Jk_QEy zeH?g8F5zO26_XzOo8MGU$xAJ*0+6|5@rmLIegu-KMkCyb^i8onMgol|%#BcR+f`A` z;b$jdl5Ug$Eok9X-SdHWDm1?{6M}COee$FMgyWlcmlEm! zKW6;j0MbDOiFmfB@V+Z0bs3YT^Mb46-mF5)ZVbKPC?o|O^p!_q!TJkw{olV_R+3-U zN96*=&`7@D>OG^JuqjW}uUoW1H`RIe%jgc`Qk@aC*IVhY$lL2&&_T~$%uZhBF+ZTZQq^A z78T`Xv{w@|=YPiG!fpzG2G9w)CNT9cmejYEB#3Y!EScoxyl1jKo8-h>ZFQ-GMwm*E z3t~f@NE23m;{Kik$lD-%_M6%fm+qp#m>&yKEHvqsMGNBjyPy(~{7Nfkq_1@;3v2Wo z`HuRP73YN4n&kk8D&lT09*gptQrci?S(%A_A9}$3_sc~MZ6)UTvm3IesTIqGSL7@# zNZZDZkT{HPdTAo&p0@sv&m~T>hmjkpXGYFIy_Q8tCK};(D*D-%(jBuIwTCx>Tg;)* zc(mgIE2W-hg4+>xm~w@DuXN|IxDNM{ezGs2qyEq|AD_M!U*|_*8cK#qw}m{)vJB1A z%PLbVOFis8U!BO1#G^z-U$K6}!(b~L{i!VeMe!<}a?C%TF8UYki?zPY@utjXp1knZ z?AFn_|7UCPKacs>`yW*ppzUoVN5}_dM|gmKaeh0JtdI&Yne+g=n4JEv>Oh;_3X`A2 z-tG!yhbQDci~ZSZEnj-|jq-P5vVMa__p5mJ?3GABcSq4m5VV(g|2JytSO2|7d|tDf zi+34d#onNz{MnUtTCEnJZcp>gaJsk-0qhRkZIr{}WHDF859E^2U?X9*ied;vjjI;O zOn>w}Jt3`83-;P{{|tD>zBI8ATr+HCl3%!Sm;F3ht;@AkKPtur;Ibm{0CYY?oZAQf zq-t3lk64d>Yv{-mGOw|1X>Ychii;0G3ggO*E@MyfpticPR5uAxV^MaeNbo?Bq*tY; zo&8w2QCyS({(NL&08u%Stb;u)Xo-Dh1Z`(1CtkgIIs`xjmo}<#r}Ke0dbH`FL8soO z9aYoM4WBr0HI;CPh+osYhP;C{sOq%I%B_CuQ}^qz0-tA5@84wxhljA@r1KFODhIbC zlAzPV0fXtEydpG!cm&S|B2!0?Q}10V$_RPKY~MzUa2^&+_Dp7Bn}pZ~l;ExyaOtGE z3jdN@h|*j>g`B*|n$8ij{RreXIE9mj3a4?@7TV-W#<=41Md*JvdH?&ueumR}|07rH zuI~LF!ff9!o*VPdH$S~aPgIu0zl-e*)S13m31vE9nVOyr(+UknoMt$Lv&U9K%CxB2Tm4<6Teh4@Re>(B}IU<)npb)?wZ7OzK*4n2Az zTfe+K|7^diL&TGSE7NuwqK}s-0eo5#BCgz`kmA0fqQ-*;r_uP_Sd7J^`XwdVk5%N9 zDho4!97tZ<6)iI@d^d9@t7Qq9TQe)c{=yLQN2>1dQ~uHE3^$?eqo+b$xnxL*Rb&nL zN58_di0N2$$w-`hgpT7J#r`qY|J{TCkK_5=hIFp%qygt=u!}HDaWkl(alHfOt+Nli z8cPe`8V$4XYUl~B`88y)^aBaLT)ymAf=pV`)WFc!w` z6@_8*7XVL@sA~AcLb%uC94)+^0?_UqXmNy5ty{s39|6ME_q{sqtnqj zA9*H0A1e~JC=FutN<503=?5Z%zBs`aRnEGezsrG;V>TP-!acC_7W9qV7=Qpq!{fQY zFuHTU3>w|&@Fm&4#FyPrJ0hWx_2Vk>+DCUGJ2SBCPhq+# zsid9_c2!H(*%xr#u2eU}mv)wYlVKhe%3I>JeJ2MJz@BvEO)nS1Yt#900A*ByKW5_) zQ{|pN&1>h3|6qxXsT?625<|(QL_!L#NZcpGHMCTg$@MlNmwz^%R3!gOH~}n_ACnUG z<%0yY*_Ol18@>qVU9!nz$?EP97rQ895Cu)Q zb!TfhtkCH8fvu)(rbo=i8T<5gI<{_opFTc_rO~HI4GG~cd&J7RnrcLCYhd{`*n}JS zL%E-s?Ur#xBb&n-PaGipv7PjY_6}uP*w=&+W zImH98>S$c(Tdch~-Nvj0RobxY>u$~0!?vQAh3&l+l{b6c&+xjB&x<|7J_wQANtA0$ zn#Gl0(OD}t6qrbaMI*ZV)w*W%&M*+_&}6`!T!BWc+n~D=R;oPJtT&+ zBKN%jzkW!1>amKJQ44Z_T!gqV=}mgyWRZ@+^Q~)9@dR$(g(Pzw(Vh^6X1h}=eNlyD zd5d4ioKr@_pmvSA>rl|YsxuV~CJ6n!p}Nll7l8h-8y{Q6T&WR)cqr+pQR|6Nu;f~O@eN)JC`mI8m8u2v8WV2QUN4Vrk0N|7n?YkMQ)uOWp9o-pem;4aSV@BmCc5F?#WEhR2m zIuO2b6R>haun6&a7hn2x;Oqq}*II*`V{{`xv<#VYdW`YfRn178zN)!Z#G}kTgIqXp z@G8_YeJ7+J!7Zt;dusD(Cj&g^IG&cExG0k?_9`VQc{kS?3%ujk1i#~-PX{@ zuKPbc`&H`*rD$(e?7tGok17fSZ3lceUx6Hwy`ZhWUmhzLsg@e8rhIC4YriX!Ar`4A z-$`0OI*c;iZjKRE_E^Ra(t*$2U}k(~=3e;8=o)ED3v&} zyw%uJ+Wg{F=g9#Kvi0d12|1(_qYq$OI7=Bs#2>=nzVBo2$^=ov;4aPp=4E07S3@wz zNvzhguwO>GXYVK76vB5!iW7*R|7s|Lo5tikBo}sePm*mtDCBEU@~L)8{ffTV^3@Br zWX;M+5Us$@%2KCbv)CZ(EQDXih^fSRD5@>w9XYg6L`{wf%l$IKNGwXHa(tj+`P79e z9jJ=K0ndw;8WoBLG_ESF!i+an89b%t;GD=v-3g~_*QKoC6(c7Xou3r!*)8J^n-r8= z&VgV9wIgagtiv@_i9Tm@hZ1v@XQ&2LcV3f6r*Tr5dqgevMxfUE28UBbyOpEYt1|kC z(PMJaEq|~F&CVt#K&Sn)ZAO>q_&&Ij*|0?O*lAr`v+-v7{EN!=z{1$P`h1$YF0Urv z-m&>B}CP$uq$C1De5Z+NHcfh;pwyCCF;8{!$Z#ke*J>G!La?9VWte_ zVF8wxl=WPyT3?*auXQun`vgXkU`OMVm5az{t_RsQpIkHson}*=rWXUXdMv#axR2xh zgP1o(1w)+LsMB87wX={vx|tEa{%xgJ){Bw2G;REjzzmc;15ex1?N^ZvAr*XMf0 z&PG=xp@35Al2ecLjHYya$tqLpXXYexXrGeS*qS}rjl#0c;eG!|zXosmqqy|$sOf1O z?iWA83oR{>eod_;Qf9Rz8l_pwM(LhVltMC$N&>B^dUZGzgMvSK{>A56^C;7yCRKWM zp~D71{Pw>PN|r0e+xLBUntN~X*M(P6N$Yn?3h(t%O2BQyiHMpJBT^j5V};q}Ed9rL z$309XNPuMj$q8#LgAEM;AbF#wBPE=EZmDDlOMLzeQ(s+-)K8Va&|r%Idhp>|^E&i3 zaj|`ycun1Dl17N7dwL%^Je|80Q5)75HN_oCDFeA4UEZxGGQM3zVk)>e35(;A?%>R8 z+z&7GpP3gWw{mbno}3=WIGQSEQ*3vHZlIlCG)ne%5EfJVk0~>xsVfx(P%Ht->#GM? zkHcF}d>-ZyM!sCk%pD<@aAY*A*!|q!USuW1sa2+?sAdAS2sb+!z!XvW`uYM~G+)XJ zze^n$x82zs;ahyl0tJ$4=2i8Qyy}dEQFX6sXJwMTmqKFi2JYwsNJ7R+Z59vY#PTAx zGM0Yi$AFTgT7g+`I5}%#!*gDlL)6&vj9{+P?hqYTwWIrI*7!~Q-J7K5I;CXP$@$>v zZcwHZU4`_|e`R`sw@mN9Lz;r#YlB)>SVoMD%hY{MpucfnC;+b{dGJRv0GwddB8lNT zr6eZ+v?%Nw{Oqk^?$c<1wC4RxP|}VbNwog{5ONV5RzOvxqAsgT0#%taSi{@#BVdT0 zvi$l$GLMW(>E@)(Trwi$z3d4wDs|TSqL*=js^@pgq~mmR&*OWkK`h_}$2O&;Iz9?| z8Tv{o`IeP(f4@U^5sC)4=8H7HuYTHb$}p>cN&}Xp{wP3Unu(?$f0F~;#s))v?8ne* zJ*-KLbjABv)OA~GA##Wa;*vnH9}{*tH7;a0jfPU#Y>SX3PgWeF3vbO*!b(2+((0}J z`aSS2=FQ$r)U`Ukz>*GPY-HHr;Z3pD*^YSnJpj6S{kb>*+YXBk(A>cDeM(i&scT2r zhpezh#8xe#Xa;>Y{xja#__orI$ToC3a6d}hyd_*jVgO;7)|X0U&2yA0PTG0MpSxe< zbjfJE3L@KxdYt=8=|Pp!|Hqi@e|1nl9B4lG?1N6TZr;hruesi!CIOE5e6BC{JvNiU z-^+NeiRN(I*rp+RvyixwtTOog)T=kYh4-tqv6hR4?=_1h5284c^eXX0@9P*{O3`nA zf5tp<`||tcfg};F(K|+KYD|7d(ZyC=l8XK^G-`$p`^4f^0ZPB#s!O;6IP@?buxYzo z8BFrJ(0JNPn`S-j+m24cuM{(YdXn`R zDrcR*{uH(8BxGbkvn~7-=ZA(<{Hc9j&2MIWHnf%@w8$y=*0>Fg<%M4*vvG+`yq12> zqI??=a#pVSd}1a`X?eMvVHCx=BkWu7z6Ktj3+xtztxi|{1gRs0zgs>2Zj*BGMrTgF zpxmH2lh{LEQNNjP*eSxL1N>k+di3*}fQ@wQ^S^r7o|Ny1nM`(MXW0-V3W0Z(nyo@7 zt@rc(ZOBnH+aO`*xFX1*otKq&!BF_g=aOUsTNO#ng*oSp;+(vj*ww3=RX9=8oas0 zruh-UvJ?msl!Pg7=hFB~>?kR7Z4b_(RHmWMCFVm>7<70>Eiq1_$M8Gc_;)IJE#`o4 z1Kr*s@JF6@xx5y3&QuPdk|-v&!`F9~HEosEXfAp1JPnC=k|%(n;y0jbR=NDCi@<;6 z8!UipOQEe5lP{60C$=Q9R(xtDO#}_hQ#GWexD!yy5N~Qg?{L!XsBOH*VYPB9Bc;#w zSom?|pJ^^=#D{lInQ-bVa^B??&u6z*YDX*}G>q zgK)gKD65K?w09+#oI9gHCO*RI5M~z=VsIrXt*F$z8D)gaR;s%6gu4X&)KXPIwuR2k zJhR7r2ft0GdeF|A+{xzZ3|uq1nLi4qf~J1VcgX8Sn|Vm4S*7ZHxe|Xk?zTa+TH>_y z<*hQ98K2&d@C0BXDR8DsNbA1wH;9eZ!zShk;Y_vVC`c-<;`U2%5Vk80j0=eBW3}T$ zW=#vBz(?*_+7wCHQZOIkCstLkFrz^8`?x{;x0M9S7$<&>aCXUm<*%<)7((c4m%-+( zp3Cm11IR4xKM+pa6B+r%zu5|j2YYmmjt1iFsPf?4uAfVX3wWX|HCl%?E#PZg`f6#b zR}$l?s;e4p@7ZcpdjX+wiKWki_nRr{_LMZ#+4^Uv2TN3VAv@1NAQ1J!vD$mKU;4!T zWNgsgd4Cgvx0V<55^*p?qYO~q`a@b`z5A21>1B_>VcS(bM>|o@dzKvUjTgCF$1cjH zI^d3c8}{+2&Bf(exDKx{Ot)o~Q@Z~7BnjA~+^n_vfv(=RfMh&wC(iQid%1P#MIYz! z#3v!SxuI&sU0ea`m81~;l?ej0?O8R*Df}NVZZdtK*3aNLGmk9@A^WglK7(&mpVUny zjI2^O7b-x3tO!9&YNY9uJ|tG{=a@B^FsEQl>P8{ue(*7%rikG4_<37gM>gUC7YIJK z;*a3`i{r30f1-A47GdRTN2(s>Is1x+p zw7H1|30wug=Xay)C|)gQBU3{|5?*WE8C{1p#X`=Wj{rQwAd=LphOJ(3XIJldha6fA z;Y6t{+fnLMaDxu~q zUzv#tbyIQ^+MKmJ3d}y8mi6C~B^un^;?Ry<g+WKI`v7qWZhG-!kM>UO zO9o2girvM-2lbq;i{jaV!glfqQniwmIPIYtar{q* zeeqDfBSVYh8Ud=p&WT5M->fU9a6FE9(`5x`?>OpuP-S3f^9Uwd<#ZJ!j8i_PI@{!3pj=psX`=XD7a4mA8^j(4G~ z7==!L-bvHdv;P|LB!mLPQVA4ejdOFW|9Hk>;+r zh!*>n7cZvdSmc7$l>ARic6Etv=FcSz1NgL}n$jt_#%s_k6+5en2(&DeL(ou^-2bML5PX`rVF8&T~#G`c8u_y;xeISq+; zx~I@{TSKBPj1kzWQwQ%03GjOFY2+SjI<-XAdNHJL*Vm6HBbsWn#1RRLoRW=xW5)C- zVCAdo3(sC{K^RUlk=%Z=6$7k8KiqG6;Pw~WcdNe6I-^!hfYRjWUtnh7^S{n}$Isus zFVSE_daL>iNJ%~BaGE~!2*N8ltVj#y0SQ;q(mx{0L7uN8W5U}P{$Qw>PiO;Zy{ZgW zUZ)M_1+GQ~Jhf%6>-UbJSuu&9iKsoO;4>$KQ>Eja`lF)WR4}kVf|kKf@MVtICQUi0 z?e+*Wnm|yAB@q|v*(8MYZw;^VY9lq_wPrBZ3RkGR7ykSR$o`9bTXX=cX+t&j5#!nxT zt(pZAlb_}2KrhlrM$-@gNvAwpoZKpKTbbkkc<`7em|zs&;Hcs9kN=5cx#;q z6=8zv%x542w!DB7cO;o-T1#VF+fyf#rofaw?AlfAEzWM0O+USk|1w!Mojn6v?6xJb ziQ()-@WFyd+x2xXK9@(ABGn41rP@>m1`i=()wyS{gVxd5SVXu%Ncuye&2TXN%^;(| zed9Q+v92C_g=aRyZ}3Q+-}dsn`u1vJgW>Gk^LAEbKP<2aG*QavE_2;1*=q(wb9%FA zcih0@g?dOsHe?YzmuP3?42m>NEKkfEwVg*uwG*>Qr2#1Y$hT%K zGNpllRInovT(?4hNj?4;1|>fp>!vBl+K=kP*cZ`3IGfj0-WA@2df8~}2BjY#E7sH^ zaZ-Uitn04nzYy&?xq}Q+ zW`V-O!osgk;4}Ye+pZxB{u(kTs_gl_&w`lV&;8CDjz}Ulg;k-3k&i+9y3RTb>Xn1} z+$$kHKYb|s`ai$zLsTYp5;U&4emHGC<_->vsD=wTzYmp?4-`E9Z16D?^P-Me`<^3r zu|LUxvAWhY?e|OW7LBGKyhIerU&oEDPM5wRB-=P_^4NvQ2u=;IMmXoUM+j_dkD}S) z(r}~mskOsvES6-X2bU-`PkoOX<;aOoH#^3kx4E`3>BSdWGUphMNYD%a5K&6!{jkRqsz4aJ>e1L!Qv_SC4U7! zns!4n0B+9^8E2f~yzc^EA0r>1_cQqS{Hmr&TI@Np2+a&jEbk&nT>p8nC)TuLx0~#D z|5WbrTt4XV(rixbDh=)ZSmUCG_=NHn=4sO2K1x(iYJopZO)WBx!=8$#XBPc21ti;* z^;Xmoz8-ck%J2#x&?S@RQgVvInors}snu0rT?sJu{$?qe{InUw@cZ_d5;G2p>{>PN zs#P*3z3O?k@q74P$^M&Kl93x;mk7Mp8#7_8z!qbBzu<>T3QvE_GX-02ESa${n;!k0D9~~Ta8^Oq8HLY>2$f44#U!KDWDYfJ$a22D?naa zuyV8RQ>QLRjs;RH!NSPXtY*bl4EVuWxcA;IjXRpYst!}ub;|}fBQ)gAwZ+P%#a5RwOM;{RD`HzD{ zpM1@R2~4d~Jee*{zu}gsEvtb`ik6pML$8swZ#g>7PLsv-u$7ILUf@sLn<7S=Z?>!~ z{^(iBP}B&!V?mCP5Hu_yPw;rCD@PEA$miQQ3lx6x55fZl(XlzSBglMVkv8R)@KCHy zH^mRQV=Dop>$BNL&16V}fT3*6u*4mnV7N(mD+UFGCP)ki@92*^7d)k9kEm&OTwR3z zFS)*-jEo>}is~9O0~mKa%@n^|Ke~htbyW3_@igMnFg0qsUbBU~a3cpr(FINpYThe6 z^9XV(5ZShwXE#ictcla7{~FZ%V)$V!cDF;+mmmXvKFMs_PN11I*WlZ|@YwxH()64m z?Kn=-iT0SkQD88VahT}^{qXeg@HlbXq*oU%@ZFUUy0OPFHqh(egdH6%^rm!t-jeDJ z6l}sY*t}{nblx=CjD6wm=k*mEP9^W4BcDmI>2DTsu;tn}NM_cEoLaD|?f3)UdqBJ< zOnviZHDf>!L)y`yrF6hMsC;{-LM>L7HY@*t@5-vmTbs#^(YmXGAi`nq9R!%>;GHJ* zu6%u4-N;l*j#4Z$F?2JQEh+`aQdL`CE|jahs87A}Q}OOTj6Qpg#LRV-GR2XZZ8h2K z6|4lwsnBC|w8cDta1p@j5-y~alKM+A(aFTb=_`X>9+QOBN5ZPR5hq5^wOaZU2s zAyBkELTe?9yhVDk1p}V`gW2ifxbKmox zbM&5n;6Bg%zzpjfd+)VZ?X}hiRq7IEf)S=cI;;Z`C+BUR1T1rf-s^Y^mf;CikPLvH zZ8)!))7dhsnG;7@@3gg0R^?Dg-uvw4=-s^Sl1vO8-M$lC`s;3VZCA*A$tQWMw%!=`$Zl>x4|c--~Vw| z^q&Wb(4>!pCq&Ms9;`9!Q^9Be!Zoy(WXAC4IO0u~%UGbI4n0vRmhHq;=58Z*8wh(MKik ztdc$u6gfjuN=Sd6T$K#nHbhx;QPOyQ?|DfQ{6txQgaCWC8; zjJ2+-8S;;yV(ubZ52~fbFM1d}NHy#_bKL0Bul1EajccQHxX;m%brpb%vFquy~d+9O^B|1GzhQ{T5_x-w;k-kxIXw4P6t zq4LTZbTQ&k3uNU4QzvBDv}0>0=g2ImhT6++9-{G!Qy;kE(#<|9M))GrYRaMBnC`kN zr2&>eAdz}h;NhyOoVdiG@nQSIwYY3q z@$0DB*Jc1&Y_nv1*bVX^A~LRt?>BRYFlQAu*}SBdv!thIS7)xQfRiYw zjI>jJmt|$<%gh#KPu4uq?D#mZvxM{q-J}McN6XVbv>CdC)3kUbX!=XT3!qM0;OdE7 zlLeSqWwI+L+;vJDBf-NnL^*U2{;~rSs@Bl$W^BX1{=>go1I$B zu`m=P32x7P#Ub`B&7{u+ssWbU2WGDK;=*oDta@vG?dT7*QAt>SK{z#Ck#Nh4T&RSiI$Fp&Ee2s2DBNv5-49AFF z8%d~s=s(ONUQd$^{@oFVx@z{Ypt-g2s;h+>Ps*X@dyyC{9I~{|7O6%F+o4V-m#d(F z*O-`#G+jV@E(=XhzQ>QKsgE|-z)|mylxj449fhfmpRaDup-snRiU{2kp5Eo$fnvT? z+z>*DTpjaZ)Yd4`l))Kl3*+06LhQ5Ra~)-g8HISYrfRt#>2hJz&+PcEx`W5-=jMFR zPXYV>RiP=@#}-s*ZH-K@Lf)z0R`YUxNE~OQQ;KLz9??4{oPT<2#HaQv^WStC`GS)V z6_Ww{Aw9F83P80zmKpVN`Y^euTu=JN)<5qqaD8%gaT^Hw6M!s)~aCcNym5lm|j!6{uXf6kP9ENTki=N$-Cn_Qg2e z1tN`H7s7>du@MCA3U-Z8PlU1|fy*!End!XhUxi6|kzZv{T;VYo+V(RVC(VjS!>Jsl z{Lm>#<{k{T<7RZ+_9|>*SB;L97nj|*7yJZ_ z7%}*gy~=~``*_jskRS;3a1we$NFuNgjKssL;w$NOyhJ{ znzeO<`n!noXx6tjRETh!tU|e2zSLXgXZdWrsojSagf3Ks#H!41l@^OruBl#(q9Z8@ ziQjD8M#i_pdsGD&|G>13_5p#-%1zzqx6+k^F^2{_%gXW0hNWxv2;V2seYhhhrI|vE zSD)^C7*baVD_v%2E5w`3FMUOlS%g{sn&IXX^5!A8(vW9hLgsn7=D~*Ap{=mUbk=uP zF)3*j`G|m9y!xwO+vuZ$)rZ>lOE}u?z&}ohD6C)v=IYGd^Bwz7yTnbmeYHEI>@TF} z*6n)cTsig6f;KLjKyutSWnRxF{gklB_gJ{7Uw8N;!!=cJjPyoqeEaNilMX2J>|tO_ zn=(1YSLP7sc0WMZ(H+DG@#`N-!MiUs^x6T;y=Xq?sCQGx3JbZ<7;_C}6e4XcHcF>b zujKHtn??gVp8m0R8XY7gVNj{DU#Nn(n`TI8fsUL=mGULBls;3_FuWJV6<+`-@y{ zs155D8=mi%-kvOFxvN|dj^a!@hCzJznP4U2K)hw*%JQ*S*i!wjK+N-^X-feiA+jGoNYU!}`=EtUZ8DTPyB^{oj|3TFF=Ed-J`dqf=?rAv}eGR&}!2#8}L7@3^w z!7SFiZa4dkiRKh)tFYpL_@7qaKWcB$hv3wzPx`bL;~BKW5>i|$jx0p{c2Zhbd z>^PSzefM~f;OU;_kyH9~$;3>-)|-ljhJ9R`BFZl=QU1BDHGB_08Ek+JwMPUHsp_Rn z&B$j)j}^>a)xIG;q8{3M4qeg)4P(4Rc{?mt1NOd8Mho`8qt2tfKji~bqYaYmMWZzV zsbC%a=y;<88p~D#%;>xeUrEn#k(b9~zJ>|F;B%a8e|&L`HR(9pQ(%WDh0Dj5AWLUJ z$oiA)t=E{@v!n1o?on@8kW&HAa#C=x_y!IZ+1oJ?afYA-15cH8z)XUPHP%T0Sbfw{7^$|2izplZZ|EjP? zamjOIy`k7mu_)z}CTss`JB`VvA-pKRo!W-^tIwV_wV4u!n$pw4Tw&xzmvOd}+&M2< z3cbF4tmn9+Hh#Bb0AW4z3sur&!KicM-$Z*2M1k1-9x(gH_>XbaW)(NV3S+U^a1otA z?ssO`@e=W>S~r=nCBaiwF$NAp;y&@;WNN`d!G}sz4Ae@jUn3rRa0&5BehnlhzZ+#w zJLR&GEOU^XW4stiM9Z;^L7st|Z;xtrt6t{Fs;&(w?bcrj(LYYkTw9U+?bqf8V{3SCMst^p2`0RW?5C zl|xMF+#EvKXUjs#%)^=ak(}c2-76(LPkLxaS~fLJ1k1M$gfT{&ENW$InVSQlBIY%x zpI?O1HE|RYOTHKG*;M#L0mjb=fg)`FS$!@Vf=S=vY0*2i?vHQz8Kjpf&Ue}Gk7i|# z%I7ylUCVn5<4^cC3LAqg zY*1{Rtooyf{zf+^)(g)eGg?0#rYw=7q!H|c%YX{S>I2P)LcWN*xV7?TKEq88b&Yy%WFCC8*bZTpoVfX~m zT@oc;dVu0&F|)t5nLs~rNx^l{!>5^stlHSue(>Y>?Al={ux>99Pk&L(@4k>0G8C4t z)L@vRj-s56ui$ze6|rBjw`wPHq(k7*PJ{bhC1+-?9J)ClK64GVx0@{Xnsqtqh1kk! z(Wc8y1<#ANPwv6(kM|mHy&8#0NI3i;5+IgE!SyHBuEXGb`E7Uwq)Q33aO`S#xWSaP zY&PEdOh!f)6^R~^^bUhR7OcmiLGJ%gM-)S+oaw94e45aASs^K|g+XfcJ z?vV{Dt87)A1Ka%{aj*XQ{^m$Zh}W9o?t+FOx3A6b8$0@@CgWU{fwEi}|uNRkhW><{tyZ!A9g zLYF@R)X-d+N=vQV`q|8*qT)m(noOT_Oc4)2K`8=O8cnrWj*IyQn~Z=-w}-b^&LG3& zl;I{LM(fgLUXF7+5ADn3TQy>8#^c?-b;d=7@E8*gSn;GuHjj~nFTS%8AaMCbv|NUOU00!@2$6dDDM;8T&k zCkDQX(z#Y#JEBhdrc1UW8{-4&pMyb-;^kmV>&1ui_{ImP&>(n)J0NU zi!8-$I$Wy-ri-+Knres@c$_j7v1+Tc<~aIy3sLY`vI(8z?r`3GQ)19Z z7Lh@Dml7dQ|2kf+tRIj5v+doE((?)1!6c8?%!amrwANrj zjz0yb!Y>M}l+qcfZR9m_i1w0u`oDQ;0qc?uHxIVq6~K@Ec+;wwD@+_NeIQmMBGj!_ zt^{oI(qD$?m$n^5qW7B+c{;ZuM> zu1gg+=$Op>oBq__f)jwE_n|f-Z89jrqsmm6rM&_g-z5g)8#EWuZhwylBlw(jCLbI~gVMuDz0{bE0!<2)hB~OdD(ZI0fg(8o$Z1Gz<%p+EQ(&5C z`>}8XRA>E%0)yHDZ{XDOPD~Sak%<-nDw^J}A20i-1zz#Ze&4Zik>o?`0&#wIjO?N{ zYvR0%|CK4CTe!NyJW4i$W-5+As1G*-NukH&xf1KF>Vd44pT}piuLx-*5iB(bj8u%) zu+Eniv4#?UBF?^*!sDemx3g?6$>VJl%OA!o#dt$sBw4MK!bnr}Ny1{oV}kLHw`|z1 z;U~Jebe2-#7dPQ2bz8Etb9!JH{;p2ALf8jwc2Se}rd+7_eqHj;{J42)y<;q2AF=2j z1_FYf#JUn#m^q{WWC)s2z>)6g#sdKAmQ*wh!b>%W{X*77#5;lug4j|sXT_HD77ixU zTO{J*%23UWO5tO;jI%mBKb^61=SCipy*bH`!90nCZ`HN1ET0Y!>_NYN#eEf(Tl5~I&WO7j(l+W@U9ZBg$)7Np-(EPS ztRDgqa=|k_Xv%Myix3EUzHTkmo*gpRwpotUw*d41Hqd9szEY=HPps}WzUS63$kBRh zqXXw;4QkJO>g$Mi#>uE}1{}G-FF+v<%lTSNLA`5fx^j36>tpXOOevy(VHp#AWLB+( zrS|WNs-SUKF8X|iLWm+1t7F&5_foxDE#9Jfj7?o~+Po&Km`my9xPhX3?zVOdWd1-yplzZ0#*Zyr*d-&lCIS7|Be&m7Bp;RDxgkq`o4XV;W~Gh)W9crJ zk21Z-S+lNgX)HnY<3=e-2qOK9@N|vDH_)B2l7X1ONbEu0Z8`thhjDo>919rp!z~_w zLI7(M`7HR^gLJAm9_wBnC&Au%99EO!yhiO%!F{sR&gOx5$2zC=0r)i*Copy$abYgw9|wr=Gml(mVkH3tLdLS$aV$*m z_>juu8z4jNfhsN7+?zhK3)koQpfkPoLc5ra>7tzJTq<1hjIL&#g^{NN zoML+r#4ipZOjUK4oQeTo#ZuKWFEhxU5^5yTwByAtnD$0P76Ne{&)SP+k?LyT)RUsX z17@*^gCM<_fSxXO1eYHvJ0pBAO)W`xQzo_OUC!h_%H;kbS9zoXA@F3j;V3Uu zYRs3+W?~bkKFZ&u!mmP-3`aLdv{HAHW~g~3fbb1ncHX{>3J0~lqJbA9m5(({bt*L= zw}Fhw#uS>d`VVvX-$jcTEKK>$J>p1q;2#{AzsW^8V4C}8M;AqRQ~xI<Z9z?Jw1UOir+L5fItM?(G5RyX-l^Ef~ zu)L)w8sl~?w*`Fn_2=;M9Q$S0?fk}e>4)uUMy(9n&`16~=D)sN36og(L92Npa&zCY zz4LNW*3=F@@ckD0aqN0>*T{SLIPy)k)<@HQF zJ^6Tv(Nd)IVz;-`-nR--_}?$Ih`IjqEx2JG>CZjd&;6sd8WO@+$@rpJjSrqE24t*X zo3-!}o(Bv_0JlrTRH3y0tq*iybtye)e4>eWT9a9DTD>>qvMDHO<=&I=5gBf7=7Wla zbUz_7@IB$w?fgWFxw*9mWT53XCDv9{U{K`b>?{oop&vJ`AZmMRxA}{U>c5-amkkDT}1`6+b-vvWk z1!a{Nye68f1zN0idGGsX|1!1C5fjd(l^of$ye`@3v>K2dFTQtfpSN$?>Gpnk#N{(1 ze~CgExU;hp`Ldoaz!!`0{2WQ_v!%#9yQSCIy_}|kZ?*Z9d}E>Qi3ctYPQcM(qp!9G zv^dd;-syNq#dS`WXR*NvB^gJ}?AafZDxqnn3b4AhJ$bh_O9cuHN3HwPog+f`SE)QU zSBcxJe%`+nHIj;23*%Vs zq`=YqCd2>m#@lt{?Zo%Z?NAwhCA8~(4hw;6tHl*)D-g=Zdn&7jBQ>SrNSNp7fb=qz zRCxRLHxWQ+l=xSBIp@yNgYotWGFLyS9&bP>!@6$-47RC8Q?71AODi&p!jfB@c`&<8 zP&J(&xpQ8pR8BgkO%JrDGY6|Ixjct;R4LY-@W3^>0{P@h#`1q_}@H)4%O7jJL-3!^|m1G1uVnHJlf61}y@ zGlJj`sV4I!AT46?%Ve|@3t=^ZH61Hy(TbShijw0>k9qdE88t->SVnqnMv9{0&Q9_Q z`LTSdQQO^$O>#G_aIR(Vh*2`pq{RYNyg@d#pqDTE`e#gc?lc~U5d-Q3~Pl^gRA+k!vx_ZNv7_vHj| zv2wuoex>@tvFr+uvusCMlI->_*P9JV26#r2o8lJiCiaw2Ob1LjMVvD*{^9ejH3zJ+ z*2&bfj@H^J%6D+ylI(puzn;Kj&HwV^FpTRQXH8Fy-+NF=r7++&qEGGYdBxB`?&fwF zO2hqWRm_D98ed>oGW+VV3~vyEn~V3wuy>c^w3g5hgYZ3;>*S6?r6QZL?9;fNJ~Rm7 z+M3?!3E)^|4W?)C9(ArYMyPd^a;1y%$saQusHG~%cY2+70=XNv9SdB4Z#;_8B&jSX z^b$?p_37*e6WSiol4J!QcF<*gefT8)?x-6pUQ1l!V0$IDc3DJ3o;1w^l3u4fSN&N; z?;y+jj$kf2vdM0c`{HmB2@QJmOCG5d|I4QQ>H7>RhSmOHauym*bc=ee+e|oHZclks zx9uDl5+rD0LC1f$rQUS4z=Hc>-o&QPZ0?fNdymUN$~!mM`mN7}%9Ar$ZtLYcYLH6EJ!%oH?+l{xd6~uZ%5T&vTdJ|3KaSS>Ur-4>~d(kBC@om z`N@%gX3#E&jUV;pSI0rYV@1~bo#1s*{T>2Joh0X@ym%LP{;mSb3?YA*~fq>xukF>_45 zrp!_$S!Ko~J+r`1w_W9D54^v4* zCc7ReEtKt7UB+o5!^DfWKN0m$eo8Rvk9|YL1v=3&b|AGeI4d5gRvKei3T z8~4t@F|oxMOky{wth)F7en^!vzouysDf}MC%QP zx7U_yG2~HQ!=o$q=7G;SOTmiayXo;(QAwS~W%~8)LcKm^n&;z-1^XULGmqTOCbQ4{ z|F*yXR_6x+ZL7BDjp^N}(}rULLSKisRj@yCEO?+)R91=^&?%F)MfyCCk?l+L)B;HJ z-D!mK-I7e1R(=UKuMY&ADw5GhDr=8(~l{$A})TL!dP^_1I05uO@taK63p9( zPmoM>LClXP&YcBw!2{`0wjVaPqPnui*OlFU?6{u_1Pqz``oBM~1#jN!YA~{F#%{tm zrp`NZJK|xZ&e$^@yHCemJ%2D7x-R5ZXSBr!%#u3nPg&kT=B;fh=mCzhyyO#OUMW@D zR3Xn%s%n=cE7p=kKTt6GZS$u%E-|8;2fl79&0qAbOr8T#nuDHQ`aHjGOziIS@q^-z z)}_ZaKRs`)UuVF0``vc!G|To>xK(jCMWs{5?*l)yjf2FOZ6DIP#_Lu0W94ukmt>^J zMfTCNYb3@-*mTb;E~~mn?i1!~_C!20fVTa6EdYJg@UEU}P>lzo{*a}S7k|b3KHcpj zO@mMPei23kZ8+MVIa?ZO;Gq<^vMKoj1D6#Nc@IX6sN;|YIOPA>ALOu z<@k=^lFW|`Ov9?;WIs_gGEutf%oXv-Y0LhyiZ-{;8_WHoDP4Y za4Z(XNu|!WRB6SpHVgZ%Wz>W-3lGN`j(uWHeZ1u87erue-ER8;0~~0**ejwU(T(;S zj$3<9x=60^a>C1nT)pstn=%}b*ZGPV6X^%97b>06%e$v4{(~XL_j#yF@WY6_JvPu-u9n%gzv*~P zY+e1E<}X?T6!_sWE?&$+FX-(Vv#xkHs`BdnwpS3$8FigFYaMQ1HJw5B&G^?iTj}sw z+^T4_1Q~0{e|LhQ(u)%vww-eHd7tN-?Y__uIlXtzQNl7;M~~Cnk2!?T%6IxCcw~64 zc?Y!XdU1s-DIkd*c9Dj;;2gg;k25&nV>Tu<6XV0r?F|&y?qaTs3~SCQlGwIQ{8N$e8{&3zx@fuRu0IpjZTnBjPVe9!^PBpoBb_hpFrM@0@f{zv9&2gb6&1zc z>ZmCuzA}+^qd`R0qF}wq&N*xnrA9)(uZ>IzHn;|egD;&6-tB&`Xkwn#r59fl&jTAvRQ13IW`ekF8TRr&t zUQ>)jSSPapK%Hb=c05`@WZ{4OIB4Hg?8U7ba)s|f zXel%1zbD>>>HWxJG^zzAEG#TKK~yawZ6>_B!1BqfiPb7w@F0og}Qn^`u z^}+W>&dn-?@~^yk+U^f1xF3i7t?mv%E^7sOu?hfbs0ex$a;X(hxLp=-l~YtuptP;u zlNP!zn)(&NO?FvqDYPe)*e_&=_r;UjsW9(VZ--gX%~Pc__A@6e6~I%ec?HH|U1OsF z##c;?CgE3AZ>Zl;=X^eu|61#Z9gO3Ql=SQqf~~JhU?aGD>X66yDE02hz40~w%;3D| zlaHtK#z11?@?i7z;`z{k#azQ=?_2~?g_DtP=21R!mFeP~e?u&6MNqqR zVXSc-pKLo$UmMt>xZu6qd?V?UbWGPsWiG2PSaR^$+IKJMaX0uxTw^t68kdO19x?L}+rhbh6KICtBidYM99 zC60h`{?8FIY@Y0vW1YCnqA6}Kj~bt(6N9xw;UBLMa))oGEWVMGy4)=~+d@q9`XYp` z!HN(mm(xV!6TkaslOo8uUY;~y0odQW*JHg#Z%k{7Qa;aE3ckBK=15CJtk8`>{iJ;} zS!tScu+{Q`eQ0O4Il0M#1B+3nr;m-2QblVhq{%cPSm$`Dxx&jRWi(4+&5?U+jY48D z#NB?D!ZRYK=(RxDOFuo%Nyl@C;5-yH?L4o!f-Ra>&pRjm3(1(>q(_~*d~+)+tmlPC zKNsrcuqW*MTX&;&19mB@zoz>cE%zPTe!qa6AaB#lkt}thTB4!C(l4M*X zHRJ4c8$MooR$n&|G`hv@S6f0o{pAEou-eXdoCZX-28)#~w0Q&lxs5CVT0zGz4?-jg&z!)@-~yUfoiHxqf?c3j}2b+BR8uX zXez{o!|7Mkm)k7TzwsA37o1t>DvO;oo~Zb*e*z<(g?$A^0L-I*gP&4FgJsjR&yt-O zHyRKya(l_`U}DX_R%ZUwujRm8?WxKm$3lnI{ph+v!5!Jb*;(_s!t}|6l;5jYNFyzl z>KA*nn9EX$q&%q8ECdL<_zudot!U6L@|`oKEpdx;(}|iZ0sY-#50ER6?3A|5dZy<^ zJfM(Hap-E$O>g#0mgwBjvvq8Y8JZu*7YOYb9|b42vV&eWUAQD;G@KZ+u%KbA|Ms-a zf+0D_ad!c+;k*H*p(W2MGCVqw$7gAs;n6ciK!*2p_uN>wz@@oXXB z0q2KvHjp9yhhv3z3jC-_)BS`8oLBp$qxC|ftd?^d#=BezUR%FU;x{0SabEh#@wTqJ ziFQV<<-GqB?;WApWQpOPNlQ!FetL_>{^*wJ+|)b+PlZe}J5fj%=XRAST`Hd z!)3Bg{^>04s8hw7#!g}0D^We=CZiu@Y7Y}8D|OdJE_jdN2GaNl9GRIrIc0+hpnC4f zW9`$MdLH_D?#Had_`|GR%adyr?gLz)MJAzTJ*d+49DBiQn$M{69aiP08}ej&VpLF1 z`h9Jb5?M+Adng1Mp(pH>+CrHwnMjJ;E2CaCZg3oZ$JZC`vU1hDk%&&v!U9YfC}c=gy##$jWd&zJ7rL!v|t^)uBfTxCi5@y`*xye9zz zMj~bx6M&ERf*euq*S=_{H?3)HdZVolyBKt;6>!I%CopQ4y8-3v-FUY1Mmv0iTk5H5 zCD&vRw6@3KN9Ne+iV^p;t^M@oWxuKN%_lDi9-VeMX}-+=-IM>Zk$rkepcVW4gGd!A zm92CM7j30v-kMGI@ob@q zx01FAJKyTkAAg}0&_Z~PHS{#;8lKrsv-XSQ^DzU%ol36ft(zy$3kTvB$A|IRFoXgK zLtM{sGTduRw!HEh>!-~ZiM`!-bfHaUD)SE?pJiV^TMW}Ibw$B!eZXF)l z9VWGObYM|w4zU#qSSh3}iFB9m^%U{K?E`~*tQlJnRJ6S63$g%i+ItfPSyi_PFE0Qj zJe7HgEi>*(_^Ok>-E>*AfAs>;@@-Bx)c{}iWXSJE)7LWB94&d?MJhMeI1issPcxa8 zT|27x81##pi8KHB(5(ahCCL6`bzm?8kzqIKT_#-?;86+N;M2YQ^PWx<@cg77JkAfD zWm~=Y4i?JCaS{Ac2)?2o^62zWP_GTvi{*AWw*^AMamU#vvp(eo#l^hI63DGH_e5C& z*O;@Sdy_>2Ael?4_S?ffz0opPp=mVZLb*}<6V7bn2`iP9pBI6_l+&X6-3inMM25kS zC+p!tJc(MRjMsP9$2~aO;awi5{8AXh#kxZNdLwNaG zHePxFz(*omE$6O{m6Yp?5UW7&eH2)|v zX_j#f%k-3?vuHRm5<-L>G&cN+aVF@=fN{DbHbe8hxCezoL!-lPC}+Jhy>>Hp#G*6K zRtVDt$a(4YbE7tag6ZmJdrPe0n~SQsACw&gYPl}?!w-+}^~(n=ONVZZ$S7v!bl>l? z-AuXzSLN@10J|M_7x4VPx7uGb=-()kW#b#P54ly3<5~z~nfQ?*NUf^PbnSGmS)D_n28xLdJv?|5 zhHoSo&&G9}QaRe7L~Cl!y9EWpo$JvR3P=Lf6x*^o5K8_o3O~N|!DpJ()ZSq$R;$Lh zOkxvO?(kolZ8X2=sJod1W@hB0Yj)A@eJv{OiJjI8xFq0Mk5Q2B-i&`h#iaDw?=$ao zSDoV68PTDK&%FIU75^YH1O%vPJ5n6gKOLXR^N-`wPmX;i^8gOJ8aMcZ~AGqQ~D&DWa4UpmR_ALuhzU(7x=e^rp?M{IV#?2bJ5_C3XXhpTj}hg^R! zCSiL{Opm-3I%$+(Y$rJO{9>%_GU{Sh z@O@*$fQ0{*dX0r`gUV=KDux%-J|(1py=uu8bsy%r9$-0{3jpY)FVL=aKI6J;oZXpd z;bUmoA-!Mir!8~olOI=qcrAMETI*azyx5?>*>G96mIPd@WNi7y@cIXHb7zOg+X4&Y;{L<4p?)_`1{{>$8 z5yR(jGv36chsT^i^jW%G3aI#ce-D!iD(- z2ve!slV}{uoa{BTdUu#SwW0$?btH6!AT-@Q!W;4NdqzD$&Sh+`ZgEy}_e{1zHrwkctc{6{(Q5xDu>mDV1tzdeDulZ+ks8t9mPL zn)l&*H*?t7$ihY6m8S-WMBr$dp9Vt(WZMuTVoE`j?A)d*?1hC+= zt?6>)hjY>iBo=LwWSchKyhG_>e5q6Danhn3j8b{AsjD-)6VocvWUv)4b66 za1Lv`*HdBCppVTX}lZ;)iSjd*NzLf6lKd07@379ms=M;~S@10EkAE8}sGIQ5bg z7q3uyTJA9z%~W6u%{{z! zC{>#4Vc&8Hk^%^Z$&{)kzDdWWoQO#7-jLXDii2c1Rh&3l1lSA9X}8Lq zP;rU@p3nFg^*=piiLP@dzMLzS0a$w~uwn0CKv32`bwOP(^d-21W+C@_iMWQkldDLO)?9cg$;t*sM*#dQHv)d_P$lj$G&U~VbvU}LdNYE#+t)*DZ?R_uwK!bI zt9e9$_kjxm!8zWDHyaPvHe0)SA=BH^1FB`X)0*~SyM;BQQpj15JguW;4<5vLO^nC5M7-kG~h}?)OP<%$-MPl$|u9z zdUFDbic^I}?r@)(t1zgG<#X~@r_|hiBCYvqYF;mpSF2>5{9H(k{#Lgqjsv5#$5z|Z zPyMI~ep=HLs{+3ll4J)mztKDRZ12rwH6yDpU_oW*x!Ds5x!ml*Q`Np%Lt@0x*VpMo zSNL=kUw`YmLqmXv678M>JXlH%^A3UE4&%^ZJbdo@;ud$JwN=s>ICTFEleQboBCSnh z?!nFqWZm_gy;6vP=npu#5{`2}g&Ic9?Dw9ADR59>@gE-&I|R4|U$eG^OJVPxA)>9#S=79^gUFJ!PwYEK z?T_($J3F|i7QvO_(IS%Co%2(m^+R%t{XHgOWaOy~lf%3kjl5{BtNCTUsRJ%{FriX< z$$7z&3j0j_BY9#lzlnf%)9upT$R#&hv3e^^mX~8oQ{6EevEq8`{es2M2`TpLoyp2P z)2E`-A^dbXy{gHK?w16`y3^t3mb1HF?O*+N=*+#f&XPmQT>4#_&eqO*qo~XAuL67a ze^N+{NU-DTLInTHufYNoZk43gfZU9#_NNlU1dGF@vX_xu67 zbmMit9C13-Fko)X+n*TBl}bu5O~7oqN3LCPX?8Y>r_=V~uK+io?B&!u%)Wx==ABR6 zne-jtQBl#cs+x%@3gxtXIbN#7sa z8~k-EG6#KFEzBP9D>d`5|q zh=*!qN&_e3KD0D#5CiqzJYJsoGFw*GCh`|3@bNhAeT$=4!}VSIs0u96^@Y5XfrqSD z7|t}gRu(&Q$WCS2vk&$T4Rt#!DRb;7UCF!CKMeoWx(ye@X3zb#SHFMA|i`XUOzh#XPOLY=V~m;7@sIZ zVBU5F8cMk9_jvlv+HduDOC@sZ-kf%a&_Ita4)C8QrHA)#iawm3I~z&?#8eB3@nX4X)LVP2a zDCIZPvUMl-*tUpIJMLY32f?Dos@t{RtzJjX6g3N;86S_l6*gM(FWn2FRnElamUm7& z?=0Pp_r~fgM}ea3vdL6HI1m=vmA+wpgl$5j#I6`|FED|QrjOc z)m)$CoD(DB-Lru=m$&D5l)t&+`L}Se*2$9|#aB5l8-e2nueLqbv9cML_FimypHAX< zJXA7nvRej}-qMsdBC4m>NJh|<8fJPYS^I_+)#l;zDMf6}vV&6i%v$1#Qtn2KVw}fo|dHiMr z_~{V&V#ZF>YV-9i;8P!ueFK;Oli|E{SQTuh>7a^hBU5B-Wl!*iWg?#%-eJVcyPsBI zT5ibxOkHf{C5YeqwjBb6=;5O=-oM-5naikMxS`Zfkrfg&;hTpi{si4Rs4!2LZgs@> zF?VszQxDfKlAX((Eb2j7JqsSj3hbcu^v9$4Nv3Zvz3ao&@sgDv)TXtcba<=6V{4(e z|8`XmWw{J8rW6)roNxL2;aRE#%b!}$xVaE7Wpk~EQ^Ua zLDi9$M&fy@M3xqoi~vLx|5A(^?EeBPCIjAPIIC@2x#J3A|L*liw#kvmt|O=SM`{5@ z9~py+!&9&*ejm&~$5x2ugI`%McPTiO_Pa;V6{P*!eY;EwTI7T!nU-aZ;yT47bW*FQEA5|xppk_|GoQbSL60Pcc+Z$@1KC~v*zL_C1~ zdqWUf!cHlaWt1UEs1$d{9X3WLMFn*q&V_L3lInFfj^Oe~IEl`-h-MU5y`eZ$iA;|m zny=9v`U;R^tYqh|HV@m#{>T(Mb~onhkw!I6lm2(`3OB1cz~a(R{Kb?Ealp8MK*!2ahF# zo0Dlk@ykn-dtNijK$L&UyKm2-(ye2auI%5?&uwB5IQLy))oTtr4{k$7tCY-H&F0{8 zatteSjd$h#4|`t~6<61^86a2)1PSi$5TqfvTX6Tr-Q7L7dvJGmcemiK!QEY_^M0>= zYi2IyX0HBq`r@nutIzJ*<@HqUL(~*58ZfgcG`^N9SzqVf`lA)t;Mv7fRsD3F<437hz{NW-0~HO85Lb9?-tbJgU3y*+>NA~ zczR|rF&*8KdC+zfYDj1n4VTHs!en$@)bPf8DTJ*E=2l2!oH{3`1`EI4eX-ETqD|ArV)c8Iu z)ov{MAIafm1BXi}<#la)G@hU+;g^;!%M2KKdAieEU*jrNEMbu|;1a9K#uU)2QlV(D zT%_x-*VR*Dy3{3+{Ps=QFpWLG&DR&)e6bb6#NE}o8nTf<0)GpQA~0b1eH?5m%> zj2A2l^pl{Oby-d+`6_fKWjV{F2U@j_&czM8=o#)|c(mBRnhMf8mn+)L4|&|*xE7l9 zS{ha6ql#nu}i~vEVf*0ccgF&(#PQ9?fSRI zxgKq}5}T#Wa>&A?>4D8hEavQwX}X{OW+2hbkl*I9uX7RSpCA8Q(zmSol5dPDIDE)S zda)t&jXP#03d{rz&wlpBfC8OImp#3cSvW^#PTn=D*Xz%<~AUwX0kt9W5o}Lqd9hSD-K+N4WiL)0w?TTf8 zch&fnyxb%_Fh6Id>2`7x(`0!vCqh=hToiX~x<0#(SO;UK5QlinYN-`d38WFbvvpnF z0)DyZCjLzVs>t6qav&l39~((<4D%H)tW#=nf1f5KNyJx>}0v2^M-ZR)c#Px^#)n9)tV5`W8>_8 zIn4=l&PfK#T4vtn(ETZP#pVKvG{agpHmf<4-ot&{oy}8*Rc}rXepEXha^$SBJC7L| z(DRjTy8L!)I+D9P@T^tuW22Cekn`Tne5GrjEv6MSOPN-r7td>B?Ts?$#l4`zAFFHbzRTY&p#P(43hjUU zdhEI^e|vVk;J-w)m2ZK)1-T*UdZk9GA5ZeIe%i-o8Hl5A&F?*9jj7k8ed<;z1vYh~ z#KUeI%T(aqo-79*zX&a~7=4)28(1%)S(mS zW3kQhHtX$yP0tB+yl^3-Y~{Y-+qkb=>ME3l%1hxJv~py;+@UazaeX>rcSI&Wm9jsW z6JWUz>%y*R{m$Aa%3*&WY`oG)S>Aq(OoRSu>U%E<=SA;UHJWjjMB92WtJVuX&}&C% z3(&0h#1iJY!CgakkbeBKKV8mdtN-C`h*&sF$&{AUdK`D59e|yrJM(hB+EAspOvf-K ztaoy#cyD-&Zn!F6=W_U?o3=2Tm5vatZrW7uC_?ks9M^5&Kh~Nm{v9i8u|liDzaS^S z#0Xef(T9pC)1mc^>1Va`xEexV zq-(bP%7_dT78b@$lG5}ZU-yFch`zFxFE>ewknj|vaQ|`ltTFeI?I;RPmO0?B9l&??^axn$n;<==bT~4Byp^k ztY-85F>HFA^zs-Ph7a@Q*cLh9c|89PWukay|Nm4=GqN>>Ty@gDfk@Wr zY4v&&V#X0ru^u9oYAqFeuB>N;twx5VAq|5)S@LVW@hp~A+avN^xn{V7*<7~S zn@>J%8kAQnhC6GiIyE*FJQDGtEe?md^Fx=vYQ$2U1EvqS>XtnG((O9$4~N)Q!arP( zLY?>5NyO`%2rrsB0pU&T@B^v%4@Ay|6~413oX|(q@EOp=J?{S!<*fJD070i`w2=)y zk-~n4_y@I*>F8Q6@L2kQ7|P9-=$O9C zE@U@%DCUGnd3bJ970-|qSDr#Tf|Y1SH2$F-fe#E}rdEK%bVkKMcwgP-n9EdA zPjrg9Da*sbL=lPHd z{niBN?ozxszu_byBO8od9I6J>CyF5{-y2QupgNVxV-@K!$|E*}_{YzZX@l8EU;mmk z$8{Q7wLqSN>JV?T^YE}qN@bavM>@&q&o%PV_#vjxc(om3jwaPAELV4cSy=j}c4ouf zN9k-_F6`+ZLc?ooY)w2e!Q|`9XwAh|jL`mS3mo3#lK`V47j8w{bBqKR4+MEAdOns` z%MilF;l<*&k16U6mi;S>HGLdRur>LTLU+J6o1Z2*=W!Tc&f*@WU$0D_U(z|O<4fV$ zO`cg*hyq4ID6ooBE~+Dkkb*t6#j3VI^Y01;K+T7#jPIE1Qk~W{Koh+|32XcP8A$X9 zPDqc(+gO0q)|ZFn;C;Zo3Y!$~s_WiJbB=@cCMB`;j{lzSbLoR_YdFgmli#nua;kz9 zU}ntJ@q17Cw9Az`(@MuZBR&WuY4 z)Z~Xp5n>aXPE;5_5<5u3%3emszFnFQFK&PR&Ec6JU>4{B9F7KC;gJKsrtGAIgqtOZ z;|GFoc8h&2D`7#!#0);(j%UdXu1}OVSlK#CJs&u=4;YNhmGz-aFSd$Q z*l8x(#hPQ~;w3ut{b>B==rV3Pqryos&Bb<-UY|2Pe${7Md<4R{ElgmroXkse70(w) zVQP^c8PK5!nA)0BsnwhMu~;nYJk?u>M%(Mk#U!n@8+UP1nuVjuwYzLVeg2G=={CMr z{kn%xLny}@e3UN=xA)==$>UCsmm5A=qpWo?RZ0(~Q1Es%Uyhn%iGu~O1izWlXw&si zvaP@g>D!T?hgV!ZG)PX54vyFiZg!GpskdCD!OQWGrDwvl+ok!ecOa95)&ZQOl#IU- z>T%X1PQ0*GC3ZM^tov%IZM9Z%gHH|u;DTcLPI@Wr`BN^HYIndb`e#D%^qRUIT)y!1 zD&6N918a=#KwdGiqz4<-4!@IydR(`i7KQ0j*Zqn7ywY$wGlbbpP~HcgJqhQ-?=Mq; z1T)*n{Z&I{Tmz3>hyxzT>dwBF3=6y2O-X1!U<>fTn85AY1J%X2meAyk;d4Uc#B1QwYOqRv-`ZMZs5|^uj;IXkRuaZE)FZT!_(D7SShA5Uf}Z56G%x42Mk>>EyNuT zF%*HzQ&qdeaNTy&Tt4*{%UjnqKN$k#X0gk=F7tjdX^bO23H>&|06);Eo1=@Z;Tz+H zT1qSy6MawpnLVQ-PMI6kUPR#g>z344p^-Z}E)KS*Pui=+vlO(0LK%2z(ZCiZXNP;E z>j3#xFDOnW(tqORese`Ad+mk-7hE)=?fcjosMa4yFThbS@tDo_zT`%LNK1 zz5Jiaf$boP)?%H;C@Xn-$oa)&{yJ3kuQC~kKBMTG8Iu$194!$AyANBQm|o8^j6cy2 zy=|t3A5)YBasxuz-JhG$f^=DYMp-AeBIB70VpNSn- zjDP(zf)o7UlgC)+@lvn3KUI>rNHOs96~+@!cq-Z6gti~64#51(@) z?Sk?nC}HY(E8zi4O#`me-VIW#?L?6mo5|;)NPm`B@i0LLRlimGtO_DrXfuK3+3E@F z%4eCTjO5#+S?7J4)QsXY>&wR+OQl#EeSjHR|F{q%Tz=)0Dt@^%PebeT;$st*>VKzq zO^Lu5Jkf@(-5iK!6F))yX@`TD!9hq_BW+6{sPL)o&w|TNkf-$F8~@w`UA%$$<>lq* z(n1ro?Wk}7WcA`N`itioNfd{q)Zq^Xmna4GvZbN1ft+U!ej>Oc#uPCCr_|>SQWyRm zPt&DCMN2IDnHzU1hOZ}anPOLlqJ{AReYO!LZlIK2a|Yk-zgL$z4D*akZ>~6}$|Cru zd)n~@>*favDqg(4HQ5FQ^ekkCSAUcxFA~ zc6B{LGKC=&Y(7HrDT{B~)P8mhd%)v@63=CWdqygxdqH|&Lo1S7Kdfpge_l8UA?1u` zsWBsOTCFc5uX@+@DuK4jVGr+kcul@a1~9aPl`*?5Se5c${PTBYXk817GdR@uNXs$F zm*05A3i0>SSmKsKa?-w#f#O@udAxb|lh7L3+(QY8Fu;S292zbziazr!-u}5F9XlBmEW1*) zyraK=1QMI@Wqgr|K!oqwmr$ps!6?%4UpSmZMCJbhcJ!Nqh`aCW&6g>sm(8-2PShe8#?^?Z_nm5XX=OV2k};+TQXp7* zD7QNL102jI%JtkBe)ehiRqv>r_h>MMw^W(qEi}CGGDw6l$PcqvE%{QeOMUhOf-TjW zMV_{~il;eG=0Qy`>TPJW*%EvHV1jFVx)G^C3$M~SF&s_hMr~q)o@kdxw?CSk#z3AA z4m{i)OBp@g2}K`8A0hm5{T*d8QwKutBUhytPy4fdD+a;UWTOdF?yQtuY3@#cu9?({pFmCY8` z&uM%PWbjOg%ks>jDOG8FXL>9pDaKNYVADK8{lO2X3XbWYfb;Jp{(o*df59Fvq=naB z+YcZ*VO)6VHZC_b@P71x{$erJV7n3y^mxLK?0w)F?TO0rtK!cuE8#mk@ZyS~?|0YF zceYxshId+ZMM0xYC11<-zwc4(82E0Z*LO}f-QTB;PG26eT(7^CzHHTx#$e21x`JV* zWYO8?wBjp<(#|I(1cJZ*f3sCgip?BTpq&qu|x=`-`XW9H} zN|VZ}^)Zy;es_faBJrrA3xUDVlj|0a^X+Blkd|X6WuNgzQ!D2P6W7UDf(daD3LD|lx|6K393}HjTY||=@f<#SM=W}pM$oq`i%`6o;{)LO-810|L<-a%WJGM{iGq}Ef@ZEZsk+_>? z`&q#irhk+WKX|BrMdezbOy2_N~xP&ra{Awf2xDhB{CYW4~n|l@AIXS37{s( z?w5N$5h{kIK|tY~g#{7+{0axVl>fb?q65i74bWfti(FfKkEQW-cezqCEOLE3Eqo8? zDbOm19VBw7)JiNY4$y~!ta>Qwy78ZX3j~-cWr^+;iU%dS?C{WOhH1U+%1!Sf51lPE z!JXp1z+lal_$!((-9;pOJX3LGC3T+?FVp^*%b7P4XSK-pw5~ zKD|zUy_ks|Q+NqH>p+J_ICkP>(oD&bihQ$~1Ru?~<63inLz$_-jhr6m1R;oy17-J8 z$>k4X^#lAg6c6Rd=b{li5z zJvl3VZtf$A$$csJUI^DezTMwW9_Yp=N0^uO9TjbK(cET}b0vW8C9P#Q06V(K%zZe3 z&#QTdh4X5gN0x^gj(D6Ch0E=(4`i!)GauNLDl~$J);&WV)7XPV4Cu(DlY{KM9KcM6 zA}*Sm^7cuDyOb=Jh-C9U&d>!m1n$N0$kimv~eShNqXPvu%9At^ne ziVh6ZRV87bxh>)-(X#$oVcnx;iIQXB!|?IYHC@Z=0@E>wL3X()UP(MGGf}(fdaova zq)LC1s5b847|VXxOON3vi^W`b@9b8!)T*oDQY#kEe5t0N&%noMfH-JI!Dn`-lYpig zBbSJRVJ_AR#H+n=f!I>AP1MJx3#u_T>vwLfBleyQFsxRS$dgGolhu;g({K6JE4;3* zP?n8{whZk+pZXJy?6*w4QLM~YJ4IOy_zZ@siz$57Tm|1HpulJs8BZz?_-pmA74h5f ze^Qcvr^J8XY!o6-+yG{;9llEQEsFt^>dz+R=9Z6xbOx?_iipQMdn@{hWLcJyILydg z?+!v7j^=dsFUWPjV+dUJ*2v7C&D7DN^i9jOVLO<%NMR~V3$IQXjTI|4ZdX%ZY;gn6}`B9a3nTo31p0v%71b2OhEFXxq5%uH#`99ht|EPYfnn2o#;%43Tj z@Y~-I)M_pLYWfP3;|h=T*q3z2mNJ{KS|+LRk)!KtBV8E7+eP!&uvLfVYRin8Gd*Ie zcJ_9Oa-{OjElG~NzOgeAqu_gTiG`)p>aWh~+M`2Mm-A7{&cwopqf zJoA?3abL$UiQMKqWXx~w^@aszr0F}{gJL}PRMJ~eZ_@vUM*%&FU<5llaRQAy#G27H z*dn-ziX&z3t5o^!@epOQZ5AH=MR{|p;}QJrbzZ*lvDs{*!-zb0h>W+XiLKg3j>`4+ zAk-w5oRFsjrl_du$J+}Ir}MgIeyipa!al1uq7(}8p}JK^cjP0k$%j5o z`aeJF4bJYcZz)QZ1zS$kVsSAUeDL~a`yqh_NK!pHg;ps%2UbU@){vJN74^d#O?PGt zRp9JAR=UrHajv~ubuvZ>Zp?XfSLSr?rg?8l;v!75RvRy12&>>O%o8y~GTG3DFhU4Xom{K($%Xbl2RzipTm=%LCo72FqLvHUw-Gg0Dz zVt=-%-ujiv<}?W9yt&jUDK*CTf#;b3FY9SSb#CAN89#DsbStteQr&SYZdydgdEIiK zqNS}}DJH62={{LLxOmwOCQ!<>bo$JmxMCuThVzhBmBQoG zF7+GJS~hh8t&O&siK=l zcs($*qER?aGHZH~)m-J%;PI{n^G8Vvd>dXUEoy zeT9O#e#zv_4CmGM^IPcssWJ|3*E0(oCiBL{%woYg@UjEKZ!|3;*Jt(lejE4yk%5RX zZ*G?BU+sFzENl19ICNZl3Q62ChMtr&?x1MS=bSuK>otEoJuuD{e)3C6mODfFgO+R0 zTd9K7rC*cr`8-B@e z$q}KUUAGn-U(6mA7HcV%lH_RdBAU4kS`gAEONH$8u9pcJYlIAkHvRY4a?sU=l2bta zq-vlf9>XYnUo|PH`EA#Ev5ylWt=Un;h+*lVUvypazTfm8@P^0Ff$kL*#?dGxp}| zec!f4=r2MnCdo{0Wb8o$rYVjmV~@#x5x4|vCE}w}mu*k*h+9Urs^|{g%38^3`y4}R znLQCaV)=DO-*|3=6ZbwJjPU9k8V1dq6Skv!9P+h@IA)#A<&Xz}Tx|F-k#ddzzvrIW z8}a#ajqu)T@az30*^hk&hA%UIL4gJ=@EJNTY73OVBXt-pP{}ahtVw5FbVC$2ZdiOM zjP1(go>NYHRwW`}+|>PY!Qqep695lnayL!9Swx|>3}*D>pxFOZQ61gl?3eJvJzmyo z^x0k2i-}D*-z}6pA1#<(sA`aegx!Uz)D{xbK-eip0%HE)%G6n*M?+37PIaU@GgGA% zPp|KbswtHCejP<3+4zs;S<|!qv)GM zo-V}6YG}k=tF~I_agr)JdZ6dI;vFx<*$8EkVQ{C_s7~(x08QEZJD!%&1EtCJ0nWvH z{z=KC#M6Bjq@h0l7#U9na8n8S9DN;~qNMB-N;JQ$@*T2>J!G~2ng z+JR@zRmIgLStW{=)RNQyoakBi7kT2{*O$C}35OCNnVrqPmYKPEcfh5IS9TwJ(T)Ax z4KJ5!jeJyyZP0$RdD@YpM}}8d`ivd#Rts zofHDN_X`-ua<^q;{xit~VxUT`dXW25ePD;4Ex(LroI1oWaD?!OS3Jb~Vx1v12&S-vl)S?h}Y@WE>18GCOL$jN6`A|u;Inpazvg&GP9nLJr9 zHPxn~br&Izo|V-T?vl%A+OO?_5!B2UNya?pE4Mk>EVUA>!j}zMHasZH0f#dii2zK% z^Y2A^`m%BUwMd^qvP@6#N4IuYMVdz&$o6zjI9e=LLDw?%pj6C1l@4mc$KAG$wTviQxI^Z_x_tS1~Zz)2` z7{#WmOSq`y7@CVtEKZ#XE=Lf%b%Ne6t~tTek@=34v9CxaU*NzHJouuz+e?A7-fGRs7fz#}m>9;EX4hE*lDhy9< z<;kox7iBY73F~KB1qY%KDxyr}G5G(U44;HED4H~=509DoUB$9Pg(;)A7CCtC0$gzL(boE(kOiRH`Traeq-7m zuPg0-^A4ytZ$>^0v?ZWp4E7z0Q=$&oTb~fNvt=Be#tYLzR8+IG-Nx~Zr^|6SQ8qzS z^^G_iLPNhrX&pQJseL*-$0Kz6w{`)M`ZwHFmu~bw(c4#WaOMykFp`kp$nzj{)}NLq z>N#RLP@tAv_=GZz@a<;R!n6cmT?Tu!;4XPT;CyR+&vtGV_V1Pb_2CHx0d08T@Tvbs z{BDl$^oq_^*^} z#CH%hF3c*2Xfb*ezL^a(JUs#G&%FJA-V6u^y%um_4m$bqua%Hki-NO<;~LVA3xrht zH@?{PozFhj7bt{(sZ!Am7?{Gz*nd9(VafeL-x_V3&nESk)c-rU{o_7}0A%WfCx&)q zK*%D`R@JD#W&!-ykNR8g2;@MFf=OwVy!C%YVEe#;P@hKc)65a#|0S(|f5RU)|E~-C zpT+!ZN4SBPf1B2rL8Tu1&&Bt=Ap+{Xu%pF8QLGqaZy z+E%EV(-s*|f)ns*PAc5KBxNvSm7FC`+{iDzU{>dsyuQAE)GYmDP!UMm>4UllT z&pl%4*SaF1m*kF68B5hD%)s%%(z8ksqdL{szMtTEwM5A;2w(jV&iUR8c_Oe$0R%Bc zy7W4Scz!FY{!n5v|Dq-IY=Ye|Fkxxpsra4Z;k6U=cicKEZBWVkcLmYM4-p2?J(OZG zIjl&rR*f1I8cYA~Qia*7<)_}XOJe{xKZMC!4{M=NLuUnPp#}<-o??@T{Mc@M31Zb7?|*ubGTAY$1$OWcj`Xi^m` znB0gPDj^WR@~a_5O+^wdu2UKrX4RBUh%Q;Bz^XeO$W%B}e(YHJNrg6-{(BhE?+-5q zO67W6&Z;8%O{E29cJ=(om26ptC5%hN(sAdNG=8oK;>y4&k|-9^Q&9b7JvPwHGGMI1 zc8x*7M>!K|(zfwY=`|Bx#m5idVzzppB5vj^cxqe11wAI;0nxw|c2+wtRYCF%lv&Ep z(20lynS6KH1?Z0JO8q^$V|)$-HYTHN`yH$}T6G8#a)M$7{3uh+3G#RkLCEwUWcm11 zTk*?5#OP5BMEMgK5NWz8l(&j0Sr%d%Q!E28Cfyl(XzX&9{4H1$`y}=-`Q^$R#jz3< zlELf(*8VuOz$yTmasA=6->r~hBY@fPlH?>LDQJ=qCnqMxJ6{rUx*o789KkPfq_mlj zHd9y-j0D=}5ZE8f2^uVuwmPW0iP}BgI5Zd?&~B{g1V(KdM&-YzH4=9>?XI1jP|lKX zG@BwSmoupkP@krxS_qFQ z4#JW38pUgO*}B?4#xkDEIlq)k9(HC&WH zVa=_mC}dJ$nW8Lu25v0iDE0S@fGpGrZ{zTbT(g7!sXXSbCP7Z3Quw4d9tTf2)a z{brET^+%dSatGhyCRqCM(8e)wc4l#=R!(|38(>r^ZnXM9$)ONJw!mRg(2G=#sl7(K zX|lm^8z=o{>~!n4EJe{W_=D!SfKAUDMX0##8vQJ?8tC83l6(TjlU;ypR3M63lW$;g ziPzj|zbUV4uh-CLJ8x>ZJa50#{So?2oWZJYS7^okD+J>w-iLB+VEK;DZd{9BJbCu# zB<*yMQ;`SGq5>?5CUrgppH^NU00~rXt>oV98cXgY1Ym{xfjTIxII*mvPWcN z)|^+rfZ>^kO1>ORiSmwY#GY3-TkvTQl6>Sq+mh~!8(oOeDF4M1KGE%p9g@@OVvxz) z=uFMa`5_}e$nO;FY^@l)(NOzXs@jTg$FmR)&txYnClj!LPtltn;#>sudMt4I41Z}- zJ|q|1WRSe$@oSDV8o+3|QnIIUo_w_b88$l!zXVy)2oIdqfMuHpsT5PT*NxRoma+I*RE9f;zc2TIQ9(H2) zO{PEqi9H?3>SN~PY2nXfOJ(*8(Lt1Tj8|PnFad+7bJ`gWa@OL3XaTZ4=6yuOy4!KFz$YCYe;huv)<;0~T?i%En z^vm;DY7KNEsAxr)Hp*C=;Qm4Ma4sm(dlI>we5TgI!*^^+;4m9YVS0o8`MMcN2)-rs zMAhF`ox(bn9U{vA! z!tx|O!vE|MLw*dqGhYRL)(X8b!$>sG9f&%)-8yDwajI zTym>@JWSz~KZSvuQd9O@uRO@TVKN?V2gR@gQ8r3Uf^EN4L^KMR2WKL)6M_6gy}_c5 zr|iAy_P(*>(jXrE0Q=((HE9YMB_EOmI<;g4{WkM!`DfU=93*w|3auuk9dHDVpF3yR zKNU}l?@p=L()dnA+8dE#u`EgVHaweM>L*B6pF-RQDutG)r&$&E=B=jcM=8F>UC1Aq zhVxo4*-!Ba#aK^CwSci{sg*RvbE-xLR=`sem)HrCvT-_9&~?oOUQN0R!ZxQyd*?DI z^^*ncPrO3be)%i57fJH=E=;}Ein72j(z~sSYl$loNL^rXx#wYJW5AiFX09)|R;=Xmz@(*E z+KN-BA|yFF6a7P9>0Uz#S7}Xtdqf@(!I+V1xFjViF|3J1`vq3IK?n}2Pp=j zkKPTp3R_ErFT*H$eM`;-{~MyesX4+_p_-`%C~oOblS2ps>FQG0M(OTuRO+ge#}t{b zws-(ap@w;V_CG*KUH|O&0PD=qGO^Y<^s6cP1+KR!nVKlHVM}W zPT5xWi?xmXFq@@}iA$L)F85T-AuJpnW4IG;+qGDltzZ>$Gddq$iMYRsn^u=iL7hd( zGsuUZt~{u7>~3mfqcslB2<{OWUUAD*-mNIG5DSWT`kWi5v&i8;xT+ZPnn+GasAwwK z?-r`l`RPAigsC7e{^{XClNtQ*S{srI3)J8~g*+O|2n3Tz`oX1wBc9D}7VXq2lN?d9 zwO=eftX4W@OfBUVh;Tg*Qol+{U8W*j`b{C_hd90>DQkSnZx<`ce81l1Vkr))!z;(j z55ctDoHVYqX0k|kr0Vi%{Q^S9`t(eOStnawdM|yGVIv7W16+*F``n z4`v)y6g)JS7qs>e6sdk@k)rB9PQ1d+A@7*P{{H89Bp71wM?{nyBh^#7xb{2rxH5$t zBj`-$@GD+B+CU$pv}q?m02Jh2*FLxGDl+T%aC`|dWR|O<&(l?jJgtHiTN>5w(Foyo z8d3Dk0mXcK@zoIwW`Xi-sPiT=>}jC1U>z18{W$&6=b-|3S&Bt+XjM~!JQQRytw_;oZFq@3&DP#pVJj@)W$uWnF$X&X}UO&ZkkSD zMF`tjZ`IGBUTRHxzNl4cs2w%mNHj_QFxT>#yBTt|Xe0tYezCaUaX$=moNk}bMX|AN zv_S=(({Q;5RoO%2k}QM2z?_FcO^$l7)u-feeGVGJ_eXLef(7gaSym24!V^~I zfl#J|b~uDpv|`gQeSB%Gv*zc4J)1!Om3FPPt@0q-!nmzNE`dVDmHS-cJJ#=q4%5IY zG5n-fc}4uedPm3;vuJfo1XL_a2u5z3BJ`C{T1-@i*RG%*$O2LBJkO$5w*(8+vvIVb zj2rddvJASTlEaors=}t9qL&}!R|6N8kT#}7=$zSz0P>jvs*2NA+! zfHVWWsc<6Z@=72b+(p+uGA@Y#FQ>)QE1J5(3+csF|MY2i_HWzY7b;S%a-L`vn+ zZ;g3tUF0Xzdxf9kl4?zF4P5TXVo#_i${+M!Y}4_=MPZti&6=}ag(qmI8;AD`=5s;P z6fVg7TbTBWqOK6*6#|6LK5G}0zF<;gOC;Ip-JJiGauf;WEppcpMYNj^!K8S4L`y23 zP-+)Aj#&$WEIXnJ_@p;x>QzmD_f*Y7} z(FAA42WhFxR&ysDYtr`o3s@NpF6fA80K|fA?P1GJ(nXv9xcgx^7gn^?Y@L}ysV-B(JYU# zZM7v~1#V2NrO6iN8yx?e$5`A0os9HcNx|r;t}$rx?dsA2O&$Ph3V6c%jr}$pCOy~q+4vta{iOXN8T%ckmL-} z7!BI*_!UEvUL&c!>R=SlyO=+1^WP*)7rn4Cx)c--KHA5bY0W+?e>|x9KkBw0V0|!} z2@}XwDQLu&(=-Ltk9`#ZP*~h%`@uVvAn662zxyi!chK#WQn0}aGAK*ZZ=FEf4JU4o zyY88O#V0UV*|_AJECKy_=asHhkr=xRFqmHMwTnir&9;GZ2xd%u%>OW_~mE z4roKP|JabpVpDJzFd@s)!S}<8YQCT?0a(~Vc+hb@LVCGoi%=CyRfeqJ-t z>-1nLR)Gw?osUW7?lN_m-?{lmurK&;*dr}6Gz!;j+3UQ1iwQiYRS-9mnpX;;$8B$0 z&uCeI%m00c` z$YnsGl6qfGBr5vd5j!{!HsOlc6VzlV398)5iPjBW<6f9mqNUImyA)o?@^+}iN2vlth6!UyRn3d)VlMq%x60BJ(QE)ZQ6%u zfU&*LgUowtHymDZ{k9l;bNFD3t1~uHvV;Qx&01!_?IFy{Ni{ca)|Q+_{YsF3*fb~_=d=laf7e5< zJ5vk<`2uFiGyE=0@$#rO4#^Tu>x50*9uWapS7JRz;cW3Zpz#E}Ur{Ki2SrX7tPocP z(QfD{tnv8QVnx$AP&py}E;Ur&;2Jz)TwFXoeE6}ag*gSu(C*KNRFEdI5S^H)2T`&v zb=x^BCPIIZSH{|2JqJb!OGeX=qsMbMsjWP+lq~|4th+Hqj59QUF>2z_OF5PR>v8gy zZ+?w~G?zFpJscq0LL)WQH|_Ep0UnsELDEQHOXu@^bL_#}M-5M)f2Ld7(2eE{P&4@6 z^hfMQkSc7$499)0$D>4~z_gDPo2!L*b~kG>uc|S2mPzzSkTF@B7moUw$$}%~bNVoC zxpLjjtgZX1QIRgZ&6T&oi+O8KB_tM|T9W*l};YTUzS{Cs~zK8wI57Qv;n>5^~O7rB@?R|?WKZJ=J7?zd02)IuEVR2)(& zEwbOJkV4C<3lfoHS0rf-qOOK$14 zpdkwVRBCrC2{lag%}0fw{nsPGn)0e4LnPrR^*KOqvK>?-gc) z5I%E0)-pwcK$htSzF{ZFc`imcR{Zp{TFZ%mKyS3`he zi|aPXdrXY#kb{1PZ}@!mU8yUdhW7oZvNXttWW(uRb#ct}pPx@nb5>BdLz$6!hWmp% zwI2dywDb{p7PRXMq_IQp!?1$>ycPtpyd_OF-h+lc5U&ju(NLU&I4^QcomRXbz; zFfq6ydJM{9z7gfXg^)q8k7TX_2Q3_(Ck|F zo%EFJ+hkw22Pc;Fn?d~QswMz4_0Et9A_!|qp$IRqFTcrz${SKPK3WJwM%nJZ!PH!M zJ}OBvmh&5eUVd%^Re2K zrClKw@+0=px$>cRNB;CEidrSigT9T&+G89hsMGwT!0v*!Zm_e?Qa_jJ4}^2Xop0lf zW2=-@?Kx1{e_Sk0P`0FqU~}~LwW?XjDFqZjg)?VnGCH3I(I>EwuBr#hS_SYJ{q4+; zlx%~+l{YK><@;*F1fjIk?Qt1M6GA>mOi1vX2;)0uN=k--pC=xSgWxg)p_%c}Hi>xF ze?lWpUL3T)zrY2N4G~aT1?Z$bRf*4m8c@eYTS7)-f1j#C`6F*!Di^|%(roX7cP|uy zrmQ)-swlAK(erpp-WqTfME`dQp?OXwzFZV(U-$zr zk@&a2cW(3=&2;V-`zSo|O^X89m+L*;V3(W00>*P6Tzo(C_(MH&(Gr3Adm=-P=`3ix zeW--+B#{`AZts+wkW@pmNKY`tBP_2t_z&gO;&d=bHv>$tovKxG5sPDMzc1+YJN*`; zKd#RF$#>zOon%$Xb>|L5v*Zj%FaW+ffHGnRZ^~97cI&TL{M-UH>0*_mAK@>U+`|_U z&du9Ju8?SdPF3Ky6GB>c<_JCTk$$Ent|7mP_SOsveSX*X0lPD38N4gAuE9vwtwg3& z`adsAne}E{lJCn2_xUsv4vF~7{%fMIjc@wM^J9Xqs;hXB`>b;jyu4-q4^@ui3tkb9 z0&O)l^?+(|ya>fk2prxYXhk3nyi^uYFO8@6ez>grLf;TQ)ZGnIo6!Jj5ECYrKp+wu zbq~&C;;79KQ!@?e{uZV$SlUl8_R)ud3+ZwmiIOPmEK<`SYAh!6QE3m3K4USPN{2$> z)a%@8gQ%JN)XMu|gY-FEC5hQA>WdR#>L*!b1pDz=Tt(lF!9wx9eZG{Mp^R`4^q0dv zMh)v5Mg`iVq|+A7llV_4bSg<2jDPcEHWark{MR0|1u~{rgm;J(Umi@I()gI?&>Jz` z61tULe@cRAf4N)dzY~p5Q(>@IkOayzJm#f-?4y2Zc_5DMe`!-8SHE9W9<#T zXBoSch=U~9y=OGt>Yda!xz6KfGV~p@9sT^Hvvcs^eJ9$D1^g~X!?csVd;Rn$7A0y^ z0@F-*Q}6yTv>_}(KkBvks*)^l#$TG7T%ZS*-wLyWsV=q*8Ybv}G4<6! zZN9+NT46=ALNEavJjR8UjX9^8w?le9ak zV$8dJqLws96fd}N77%v2ktrBb17ZnrI5;$Zg&sP2CbtXkeG;A@3v;B^5Ixc}W6#>4 zqWDtqI(~0CP;H|r@$WC`!P;Qvsjc9J%Wv_u1w2-^XJYj{Nw zngP)0&?jMkrK2Xy+O`&oid`wk_<#LO5P?Mq0RqZ&&o|GG?&)S#nE($7q`C!s&Z?xm zhU;G_JId_1T5D#|>_fxX6Wp7M(fYMeC=>aT$t==s(=&_etCDgJJCYzMTb_UwY2#IL zbmDvr10VBU%5bI&QJpP#Q6j}7mo$@N%lWz#b%<%EM6iNBzM1B+b>_U>7;OQUg3H0- zBsJTyFcdG%{Y*OzTMr}zE^^MyD?pHpxwrWii0GIlFRBEw+6*bTzx z??otWzha=X_MqO2g~>$<8;St_wAew0B$2?Q@d!J%f{0I+GaRR%v$T#m;m(P&^ zSAh_|EUIh~LiS$WT;@M)i&Ek@v@fN3!70udhzy#Y^Ycnnz*x!oTDOvOi}>Fpdl8y| zcS^k4akcUIv6vgsp+y?=Nfx=UGP7()y&9u<|2eF;&xLqEi6;9OxZtqOCwe~yJt{a| zfXwWuKDoaxz=qv)N`6rpwBnq(CG*$;#pEr*$%c$$VZ$*w!@B7Hc<>n1KDRY8DhB+$ z$|wqXvx5;FpwDk_R^Ccj-Q6kKnx5nw>7JV5!&fUkI8{Too$*b0`C2*;*r-{X0G zLn0fV(3M)R@W9DR^7uoahblao99%;u`1EbM^LNO{*@o<`kdXd%98;%ZC_l20Fm)jH zmA4;LL|^(!Rd9KM_plbMbVinyFyZ~j)QqEryIGx#goikbgfO_O=XGM!d{JK6x^$|G zp=a5xdqQ=YdmNW-Dy1PF{UhiS*r;L6N3>lfvBQ9;m%xuEby6{$`(&}|(7ZtpMa`ir z`8qDIa=3-%gM);Ms{MzzAX#G-z2Bd|0yS**D(X#^O#!B^nuR)jhai1sX^Hul!5sN+ zn`;fkXsgydlXJ{}e*K?sr{xgNHu0@flY1hOx<{ivBS_T!0QQ3ALDw1&oswVmdW^Xo+C0MWjkpRJWJO{bNHkENYaltJp6 z$ED>=`vwmlar7Wa`aU5%p~|q+03$956dy32mGr#_2#}VjrOzefA)CR=TaFpfsI+WsH0ihNL-1$GYaDq2A{o9|q=N`T9jh_U;|a!h+av|{9@GySV$o`VimbZm8Lx_CF? za{@lN;d4|1!9)n_7!N3nam3`avgl>e`-;;t*OJ4)CGngbqVPF@6@6(fjwwthkH+5; z6S=f(L21&R15>sn*wn6mS#DU_P;$u2`tQjMvuMNn@*zOk_%9~nd%~sr!Xp-QE2~Hy z(S*TX`;Y6=NQ_PJD(> zf*ae<@uxzjdO$JIY)8n_5j&Jn*Z&;rJ!}&1mqyGyFQU_C)_V+QYUqHgrkLJ^foF_VtnFfpmZs z@%_qJyJiRKFxT4dZ-;4wsu{YX>7GtrdZ*_{>0!rSnUhRWDt+C}HUm>6DF6moxcU7m zKq%%PgiH`r9DgB{9J9wnM70v-6`GG5Uq=+mqxZ^}ZoHz4MbzK_$agfY2C!FIr-2#P zFw|6%sv}#$>$l=6_@dHRqN4OeZ5HlR*rRv8Kjr(-nWHCm_qOKVSie6=A>v>nRSHRu zrlwH70zGOWU8>3Sf~Z_Jg4`id@_lcNXy_&6|gfP4fA2pH}3BRHMnV#>s{~;3tVcaZuzMqs5Qt-xXuW zevgZ8q0BKk3U=_+W17gy*h;S07AU~oA71j+Ni@`#a%U%XWHy5-fLkmGBLv`+5O&<} z9cd};mmMs=T{}nA%o6esu6hNADN3yn!oJk6DDvM-G#pe zk_tj>GUyKsp8==`UM`+Sa6Y_5P-jfx7q;6gmaOYia8ChMObJNGx1$`GjmlV+> z^P+HCEXJaSODDS6Z3-)y=XWDpk9A-oc7W0{28dAl<^moLnqyUkah_JKEP`Lcma~B? z?j+i4r)5!Umnk`axE`psta*+sFtlQ&?`>$X2YTE~XOl9#8RJ-P{nP6)n_-n&fN<60VQzH^cZctsJupP5Y;En z9Vih2;sUrzxR3WiEZ(_>aHhFH&pShIoo4KP>QeJ?Bry3n2XtP=J2T{7I!DiB*#e@U z9+IdwGXzouX|~#90Kn@^oQ0|{;My@YBUNK-tej)xPiBCcgM|^#c1!+EB=OBYy*BEn z1d68IH2*2G*V_E}ejm+mPFq}ctlJxw+UyUilm%`9$4kbUgTiIf8*x*akV|vj&nr~x zdzMS#V|V8-nXn1EO$}Wvk5P5u5CUHXz{YB???a{Cd&O#(7!%qR>o6ZWAV9i9dgM~y;bsIQbl5l zMTxXoqSt?!<-_?%VK5&)sV35QxpCsf@W1lW;y1H_n-VtfD$jv@S8Nk!E34}W%kMco za}|`ecKel)tnKx)h`fPvu}Ronf7q-x0nzJO#t6V<16Q&WN|BlmI+C+`tK;YMdP4IW z5NBQB4bF!qz&Ag_y9CfD?znH77z)aJaBsoj$kT!PChWabv<~~KU7`jwNHv16dZb4y zsPWbnRBuN%%qFcjd--vzoDGvrKiJk)$C5f#h@!I}iFlVGvb_&@m`#QrB0@DJN5ffF zhE2%=%qhrK90L&V=&qyc(V_qw54=JRcYiA0CBT*1#Rqh|?X%WPfq5VbGX6hJS4X;^ z{l&r1e^RIE2)2iJL4C;R3<;VMQ_`&hXRwkOsjkj^KoIeubqkW^VoO-IzZWDsNG$4P zrS&*(2HcO{R{VW#nyxx-AvQ@_{+ug1`(@d)wfoom{rNgE@NyGS@25#^b1=gh-AZrR zRh%2`p;G2$S#!F4vNPwx;UdyIkO&_&tV^wYxsG|M-0t=T7QXQt@cj1}s93aVa4pc) z0wvxVhjWmKg`s}UBLy&RJHO*RZu@GbImXz8YYBf$3MyER{*+do7J~I)}P&S)O;8@pshFTR% z3Qjaz_zw(uH7c58N@9sxf-rE~{06?-sYlK13?3KxRI>h;E!m30vilIg9Hxo+zC{+o z(Ak4EfpE3$&`wXpwFX|?&mc88d}@L+jX&)}3;pkKwlEaC+24tvG1Ri&Fo%6)PH?_I zFhI!t5-?c(o;MyE2OhsLCs+EHv>-T!-3Y2`I^Gf{rv^!>45;ZNHY>)3ByRv}m%*zD z8HZRB^p6J24~C1VMx=xH!C(!PKyz3-9o=&$J$FU=xMPJjhT}))gi?Spj|oORLrH=q zQ+c%csm5pIyjkNPnhFE(hILx`IZR59HJGBTE%?llvz5)#Yx}8w3NCE&Rch^ndD2KE zhOJ2ok0d%gm+c=4xA}HW`X9qC`pOgf>0UJ$_(=3jja;hFyU5n1EXIeZL_yHc@RTP%DP- zzzFzr=~cF$htRv7>orNp(KdNVtYhF7*eyFRW`6CoE8w&sA7Szceub4tUPsZy^4e)= zv~Q!JEH3co%!U3&!5a)yjVl)RTou-&mQNY^OhiV;4kG#mwe$PJ-mEjo-Q7&%30w2? zx&?w93|d3GZJ@?A&%PZkF{^Uj*Vu4DVJp2Q@noFlU+p52WQ)WWAFbObufnJ)`)@4- zH>9$#uawI+CoRBOHS7-)?J&mFbM(D(-iRonMCE>6QQ+b?dZ0Lh4MhFsEak1C0zR>@ z2WcLryy0~UnNLq6Mm3;6*ZR;QO0l;6&v}&to3zUeiUDEmlBybmLEE{wuW__J2Xa!3 zM_a79HSwL$<^jcjZMme%$}eMV6BLAbadG}GeAKqnrg+pD7YEPR7GJe992;s} z82**>`sUC7ebLG7b(^dbsX*Kg3#!v|7rhL^?~@~KLVde%cD zW@(>N%x~U}uv*Q^B)!PgHhb#V(x--A%E5nVBZq0ho&)@65^9#$LyEbwgFCL>->2GW za-nBI9XFj-#Hr`kj%TIlXl}JQRiK&M8kWq=c zblQcd136EyHGl3RYheDawoO*wtM9(N##E`tk5PJWHisKcGAv0Hngpe_j{2AUT2VHe ziCFY4;rPc9(W?Y5DZGKZg3z2s=^MCn7C@(;2S?%&bnP`$4oN~l!KZ-RT`(+op2ksR zag6MqfLjQ277^Bvgwh*RjL#yJ8l`o+oY`ku3I-bAEE}L4rV_(00i-aBi{8NiP;0?= zpoDK|ntYS+t7%ilg}uBtheNIFgZVt11HFpFszn=H0wr~QUEn1kJ%d-19P9(D8zc4= z7H?v}BkagXVyew74| zsaTxs`kBYEknDD?S9x^O?Tk!dCC@&8vv6`nkq=)ll1Aix21WzkT5JgL+}@a5sDIi; zs7zJ;eKU8ll3r`+f1|lC@DkBQWEdYeM!OA%vYO@#urZJN!!|% zUL7tfN`w=U6Z5SN+IGTU?hY=wUCN1m6ZSYxaZqrJuv<1gi)?3w?19nzYgJozME@&o zSE%f_2_Ico(GaFKdcsH=AD`8$9Sqta38zUx?E2B^H@NuwktVhr$=efF>k*rIvmrcM zrq1n;pUg$MzYu3ktEpYw@SP5P+Vgo5T?q>dW8JTvHN6`npMWgb1k!rYIWy-dZt~ILpeWTVq|MWo*kY5pmM>BDl-hgTaiAiop+3n}ezYT~M97&U!j?JgDT80=hlvN@K- zptsO4oWQ_(>_w6;V$N&-iM~s!8fVw_X)FO8T_#W|J_I)BWpBv+Ie{f>Izc&T z`ci!j^kG# zqivaauZ*8t+WDyzbx+5fNu0Kgyof>?6~b1B2PVQ9f;RQPf4t0__s`k#K5`zIxLO~m z-glCg$F1sK7uSN8*IUnbw4H8+UdU;FZVy&n);nIb!(Zk$*EMi6G(D%XKW!ciF`pnI z88VLW-;m2DFvg|1%;^b=>F(V%UxOD-uL`27j^`?YfsMybOS{`~KkO2SOE+V#c*8gG zXaWkn6&nB+xo2@MX8P7KP89FkJ*Ry?p=!ef+H$yP_cNe_nNrXkiL2kKX(|UW(^0`X z+Ik`}#2E;{@FXWll{qC&$u}w;eCGzrJlNCtr@2etcWIkU+v>-5oOH5CCLvQG1iz-o zMc_fJacNSoTj9>@#z&DOeh%9}n`k02#3w=UpD=`?7U&zz2CZ6(@0VgZ@zFl110rHVbHk z`%<1VlfxWc8XqQuzFNq-+_=Gos(dgj2Mw~UxwRd0eBZ%jRm2-rrVLxS z)8^UtoCt}VoF^6r6vMX(D>?qwGz+`T6%&p$(X;%-BT5euEQp&;*I^ue`B_+^Ge+kB zfoGrly)1QmRb{{+jl4D|qX0iNmr){(5Mc5YZY)z7tEeWD1Aj{UlOAdBy)?O;C4Cxn zAyk{rOHSwUU08j60m5z)4tf{PUAO$jP#E3z^p9ebAF0s1E~iNQ(C`+9jtY?J9{X!D zZu=6clS_z4$tdWiFaH z?N!@@+q>#7K(yy0#EYeD^uac0SQ9Fu)C{2~jD|Cx%iKg`+*z}8#sCH;U*oe0WTq~p zQR*Dot?ypV5_$4z)Cqb{!OjIGQ*jyH-DVF5o{0|O9klk%0f1d>wnb6m!q&n6u&s9>A1YiBTb)dKBL#1ymL^q#w2P- z2`{JKptQ_H<}wC}{eWP!6XK#fr=5LO|8FLpHiB2{ z*h$tY3Xg1J^v0IAm;_ERzPV>cp&5I!GhufrN0VFK6~q!6dn1Q=tVBeZ-RkK)|mMa(in zQO&qn*Zpo|aF;esu<-u%AE9Y>Wo zmQ^5*x#sIn?u&=gcrkes6&_FWWpNv(^UL{z>xd!)wd*g;BszUTEX@=*Yrc`=OxPNP zmNc5;AMSc5w1Svkt;z3F4#H zpYBiO4sHeR>XLn5`C0efoweLLfzjy!T_L9EfIzdxwUSp5k%@^Zfw7Oyf<=YPiLf^> z=?@O>Iy?+LArk|G_t%Q;nz*OE9Gfoib)m-jeZ#1SOKIHg-JH?O%v9ahp+2AHV@`(% zrO5+i=_yOo7qezA6_+K?AM=jA#5p-R@1DgJ>P}i87OYwEN7QB@<=ahD$P#Lq!6zz> zX&%!HY&R^{tNlss0CYm?&NFo+cd|mcl2f)(0UF5C+Ck$8Aw~iBE2Xrf=H0T3m!$@+ zn;dohZmY3zR?j7ci9!{cQLoat-$@X#hC!{s$D>O_I7|zASDB>YN0uDWiB=YI8FOVP zCp@zyJA>3K+KZJ8tr4I9!C9U)awx(p8CRxkQmOFgi%#L(J~!=xQ9bqz-ltr?Cy64` zyZEgp6iLlXIqCSU-9t)FLd(ldL^h0n_1Oe}0yvrJg6Ryy$hRDSkgwlqh+q0gcufu2 zaRa#0?!S~U1qgdKOyz>iA{4~|n8#x_u6+-SBlmTG(HQWG*L@#9TnuVgGCKS)F|v}R zBd+-xNQw4I3mUG0kk3j+pA`SXzkdA#orqSa+TV`@s#*VRP$(Y21^z#zO_S*W)o3;y`XTJK*`-o-^K3-H7wMa|D_g4Xg6B2nl^fVG`Oh$0 z@w;QRDDhTumb*HZ)C_6#l=!yT;CvjL3lCI;yf1UJY@}I#)D;d6legnq)eprbojoS- zJ3W^(6VpSP>wH3;2PPL$Zt*Pwb}--khm?;Pac?SFR!?G8Hdr+**e zVJx1m+k89;#lPsVj@iCw_ucA57mCf(oZLP_W{U4bThM>}gNWr4x2x|e;xg}Mz8vnk zjLOybz2#p1e(~5V;l7QudDu1S;t7iz*SV&ogZoHwH;u`D)K!s@=hj9b`)V#bBA#p2 z9a&*W*=C`zO=XJEm4#B)hpncnS=G~Hesrtt@2wwYP3uwXYKzk&@%KLSaK5r>NBQ5H za$=|+zuDWszsfy6=MY8M&~XX{5j^g%Rrnq{dzvkzR<}lPn*JV^+Q{<}Mq?O6(PP)Y z;Ev^&A5%cxG#L~3Z@l_UipKEGz2GUpg zM(RO!iO#KsL~|1K6X(W>a#&g^3B_yPhH9~*8=-B{BQU2%?p?MoGn_+oOfZ!+s}jHY z>NRmVH#RIcZSqVGwZgBiParq!Z^zVWOs%Srl|@j+bos2vh{WXd3Z_!nC0H?j--PA1 zAdtfO6_q<7)sovrXyjZX|J_0nr>w0S*jB`FPbnz3RLBM>d=jdbK0Qe|y>F>%%|n0# zMMYKL(@+0pl3aQ+E6bFYBt&w7(<;W7#-vuath4HfIG{8^Isgb&Zn_`LO+9KWogdl) z&?=e4Z7h+1aTr%oT-wpYyE3O&fu#hTq_T5%o?UTLu1kBCO6~S-@L3sTTN&(EnGURK z+VTpLKF_vp^}q5{E;qW2AMZCA_;0O1!=&D3x38wB!A-QUNxph&|2qpn4piLVpkdhXn*L*s;W*%)X+3ip z)7;VN+5!`l^zs-?Gkwmp``mDFmC9ocMj_x9z8@EHn`iPQuUm2Wn=Z0|ZXT)UxUZ(F(GPK=?z=tDUK^}~!aiO}Kxuq0shiYE<0A2b~1=}ZKEzgubEQ#k6)jh0%s)oLc!ka4RVS0&Z9L+I`)Atk8P#9G%6a?^(1 z18p`4B0SAOau}cqWMN(*WR3^}RIw|>OoyjQ9jb;2r^2)=V_H%#AM9(qfVhlohw*XT zoQJ~8t50RkQ$9l{a@G9&bflHyWW;G161ap9_{156TG>(h|A|@%ID`+)z8LLdyjh{5 zWz@3YvczysysETC&$=5b8?|f;c7WT6B&RQ=LMJ__leo59@qwOwMht{UDdPh_FcsWn z_P+gzmWkSfz+vI^H_+z1O=ggHsiXy|)eLC%LL(GnJ!6<;0wXH;9{gJ_vF$=&tZ!tx zq)_+;EieX=+v95|{Gp$Z_(OYWni4Got7?vLxu3aVa_PH&b;ihJIoInSz>u@e6cWgHD&@6(u)2nO%oTS9+2m8!yAT z4Ma`b1Z&GE5PP8Ep=osF_%v3Im};T?{pXO5np>87#7jRMlO1Z8wRNF;Jor!daNe#+ zG70+!3UZJYHJAf=MwYvTXK%!uqA;vooS6nT6URaIbUaX5k6iubg@CpPwb$8$lY?V` zr0Ix$^>O5TP62|s<_2EnOR)Kw z^QPagzV%tC*DT3bD*fjPT=oR6Vz#SFT*C9vVRB#i!R6a!nxT|{l#Rg9WrcLt1KRu1 zYH^3M_zmit*)4mn6*8}fW&2zja7l*e!fU_tl7tro=8P5}`0tk)z7L!<9hZ4jN0@Pg z+_L#$O^xAWuu^?L*%o^@{}}%F57g+9jC|t`_oXZ-3nAWtkAhF|y>wJ-m(! zi73uNu~3BL3y5JJUl@nQy;W;0VhGy6h^SfTj!;5TwJvlOTA>rqv#Ci_58glP%9v+% zm_2HT+PDA&iuQ$;?|l8DKB897Gp}>vGNDr>eVyVoyJO_ z@|4XYmH%l@Bw+V4_DtC1`#Gq=q*rhY8W@{v`io)hRl{gk;Z?b;!RanQjqr4CTJL8C zYv`tdE1YjHc%8ETz^A((5jR|)g8eIzsYz$xEp>xFJV90^b%B5Ae^zo6<$I*(HFqU! zDm11D#-xjqx9m^dCiiP@zMM44O-F=>y>Z_1{?hTnM^D)$Y6v+nj}3w~%~+J$ZyG>< zVe>6L4f%ed0NQ#1-L%vot_}D_L2Wx)KASq-5O7YP>siwYkq;UeeCwq1=PDzCrhh*F zbu8O-F?3Ye1n!(hKDt`r)!S!20I!3QIzp|u1fGddtHsD4rQ`R=z;7pRr$Lq@i%3`p z*yr&;QZx;JyKk>Y>I%^!&+dcm@I++Vo1h=*9~!B9bHS#wAWe(Y_J!60jL-0VY|pOUsEZ7zEvAtpz*xcUQh|Aq=(aA34bWCBt$FQMAP@Nl3c9J&83XVD(EHKuUI4t zE5969Wf-n4&bjF>{y6JM2DYT1>40^FUgqK@(q%odx&ZLb>U^k!P%>Q)}{l$on>LCi%-1T)Z@-BkR17HV0tx z8j9L`migc)|4zWUl9*k@lBSjnPwq<1vjj?)@7v4nYI`!>o8GBmJJnyv-D7C%qqcfr zP0+VS*<-0UaFBH9EUiTbW_@$e*4MKT)B16fP}GAO(40OYGp(Ab{>RjC4s%lod6ZfL z;+Kt49lqt+YFRMNbDB;LIVy)_TecCEs*|$@9gIyXplSOIe$f9C&|^4e+=tDj$)(hS_5Hs8Bss`mvI> zEl#WH9rutviXPJ%K;7AJJ~BRosI9X?S+!Tzun7B?uSaKu2F{*7A|$2mn=suD*)Q-8 zEA$R`@bDzw)n9QP)W0T_3(P`hGarsF_WG9F%9G~ie-fw_SQF26o;K+$Z(-m1Smv?5 zM`;qm09L~0#pxtPs&ck(y$ts_FQ61?X*HqUE4UMd7e%y7CgpSvdU~u(*eak5kL*O} zL(!gyh*!>*7;xg|(i}PD)^@&WcDslPVT|rX6HvWbGDg?*M-Fvm0rKLdqvC~pNWgw9 zAt82?a07C?fnqlU?%!=W8h^A}n=F79@{y8D26ZNNRwz7SP6t8>1?3%?BW3tK!C~tv zZT{J>*CZ}xcnxW52*CzPb>B!DJn|x>kRf|L*Z7x91Nt|2ZYI_zxKDWslP>%iFn4bi zxaUJCliGrf}Y z9~Ghl%l>6&R?s>%8uz1Q-V2O*XhbqERYfa$Svv*hs9X|cAyN2yAf{iQVJg2l%{z!p zwl3CW!(SPXhP}8b$KZ&0-|0dc=o5!(DjFywz=&ATut^FWE9U!)8QG4IbrcP6ZPA5H z(J#ZoAdhSV?Yp#-01Sk!3}wX<#)I|J_Y2Yd)l#BI92^MU#{K$F@tFyLsQY3Z+i%hR zvI-yBjrTg`F1eD9d|`mSFk*-wybC@19BZC*5d#u`CI+Lc%MgjLqTVl% z&k&v7ge}WKl>Sp9eqbfzkoH5GqZ>wJPETVq|Ig9)Zm0JI`xW9@Z#s*cXHPEt1{L^{ zFN3m&pUYk*WGexm zOG!yU=P4fd2e-@nLzTR~f5ggy0+V+ajfu8 z(W&`@KG%}6BFNS~$5_QV=y|z#MbFmOn^C6&X&T=5ngLaeFZZ)QYIh2xDkl$A!I^WQ$3O0Lw6dT@R+17{Zya z1px$TLqOSB=Esz%yG54(eE9UcT<$6VMAhIqr8S3T!DB8$Xpu=MyaAR6ou`_4)sX^wZ8 z#2OmujBLn*3hBWK5Mi?rwE8=K4MBK>Q-;`qaxb;CbfUyvhhq2M(Vr4lWnBZKrS9vQ z_9)D9RMM6`NCT71HydzKU7CMB%1pxm(o1=S`g;PIz3ZvTtMK*_|>b zec(7fMjNw0dhQNbESfSB+p_-tv17U%(R>c{gfLZX1eP087bo$&p+P;@uJ=$g{QAs} znmpPfxz(;aaTbBWVJ&k0cXOK?JhE>m}D9E*IIE5YxZUJm=bqz z0`0Fk0xORVxkrk>eC{PCzg8)47yiXng+&|1M^z@vUhWs;96Qze7(4a%@sDcgDZ1b` z5d6HGbJ9&G5^mh!M0d7Bg!sw=I#bXX?5s5MEI*uiZH$5J;LejK0wcz>Ujd?B ze?Lb%_#1;*z1LP>(fM~an4iVYV^V4 zNmNHmJ!&QN4;gu?4~p|t=%t87=AR8HgR8})*{k7D_(gZ~S!PU9-^tS|B2PNu*S!hO z_gD}@-Xvwh9FexDhO6t3@T+;LzGytOyXJjV!PQC8`g3`rFE-U>LYtXsg?jdOyNau7F%vs~ZkGRcQNd%woW^i<;rr&sH;S-S;+!CpulF zaUz}p!2V52t2L}is9w}3g>V8M7%y|f?ro%{-{GWUd@c|)^reh4WU_(XU2XIs3?Zt2 z^`upW|K0}FVZSO>X~~ivXlwh*)q7eKgHnMD@IUTe%lPAZGG46C#B+L7tpi+bPD=Aa z$=NlP#7*}~_o%Umg3#XByt29^qtE;=bH-a^qG<6zZZ2fy?*T&km+%5Ku_NoqBLb3! zTO0%TfsrEblqaEXRJa$&GZi18aAlOfH9c zcVD=6&9UsvPZ3c+c;%ucZNS~*mBL@?_FaGSI2EM*)Qyhi zhJu5qfnMAH0F3m8o@++HZFPxE#$}9~z-*E=%xB2W8Jz)EP406aUg84BEXh27LZiXn z)!^^aV3QVf_sybZK*(-1p(%~r{}CE3NS9F{`LbMCB3r5aCgv523$MNf`2@NfrCFuu zpEXliBO=qlhT9^U-D}E_xKItpm`UYlq%%^T0Dycl{p<9_Xc>HZR^?AgTkwW_@FUx* z=C;hy$}at#VZ={lJ`h0Npt3@Q9UW6P!sGV1oH2@d-v$edJ?&qv%IYA^8kg8VEO7P% zBLFOTJ}^KyFv7j9__MAWL4=M7;$i~a>7BHK-uXeGu9Fl{vIF-O;6Pe!hLHhZ?jJ9m3zeBUuX*6R; znuRDCW%!Q4Y-P%w_E4D&)xpeVC09w$!=Yiw_3!W2-8Rjrn79zfMOLpRXz8z%GhU#r z?G|fX8Ow(GXxZKU^j?=35#!KFQEOou%dy#tlA0$lz}aG>wVf*Zg{Bc8W69nX`c6Hc za;T!l&V51)KfTTnKLg@c69GD;gQupmjA^wxcI4lGepRkyUn}mWbJ_Eij@n?xmbJ!*TyT9sPMrwwe&9$)9IqCqr zGJne9+R;(qbXJ|r@D-C(_nfG6t=V>0x$N`R<4660udbEy%ZS!)?@Hu!D|p$}Cqxg- z6?%$B%^}PBjH6CInHr--H_m!y3H9x`Qf4VN#m~n*-xTrxUla;ygTa~{ z%Of;S1!o46iw`OMn$`Qjwyf5YJ{MclKJxVL>&liM!mjl;rp9qUv;a6%P3ST;*5FWU z9OrM2^Wi$s5U6#>N|$O&U__WJl`cAgsCs&Dy6N zHQ%@wt*ZB=iB<+o{62AeK3R^O-Z_@nQ3wH&YdQ)utu=o3S;}D78O!4s5>e z2fprPh!6b87PE2t4voUua5>rk{_}GC!uXG2p^VyWnVzEmI$dk;Q(BnJ*aijiP}Y2e1&uf0@?da zJcHuSDq`0M%?O%SM@qe9l%+d(1P%`lO~?OqSDj@?nA{_M{mMXN4AMmuAq<}G=pWH` zRxdA$jw=TB|Bj=xU1)Q4S^C^|s9ZkdlTyKI58JJL@9U1WLYZmqO&I^9ale zI0cX@AZFfAzDwHyT2$+0X~Mo-$47*9Rp&&s`^&}N=CkTgU2tM)-x*>VMc1#60QodK zjEz&oK}+E)5DAU5gx+rZoXcV>hJqq18JfCHyC#yP`L0MGq0*&-TeajdG5cR>Vmegt>+ zMBi;FyUL5o;;o)+gVu)VxB%_BiAsYqPi>=!*0kE>7A(hBPZdFf?uIHB(edV zq^R%mh9&z*{l}$nOw>EmLF#zp^mNH z1((Fl;gMU%O)wdJ@+RO-i7PUPL9Tbtgy_?ywL91eeSf@c1Pf$nj3ee#z2x8x=A6xj zY6FpZQR4@mZ@bGgxid-id=GZ@W8F1ri(lPS*o`wsl`5ZIfbKoP6IVwu>FVkHeIZZF zq%@dX1(-u2xMEraW_`z(wcMrB0F$|78*Kmaj&uznLuQ0*go+4l#{uEHf;tsY zF&cq?@Bhy8-|ebKK0kHVoO*ktR7K%fAwQBSnpT_%pcH<2>A5D^f~iAnv3c2cWaIN^ zZ*biZS`QoQy-yv!o8*J@;T&OKf3o%=_2sIg%OY2IOKw-cbT9;Bjl4tc`&s%WSkx_e zjG|PSCg0rfzUt}YCw=4#Q?W;+^eq|7@C`6}L>fKgzUr=Z2 z;=IlVnP6XAOE`Jo4=sYm$Ion5knWtnbqFdXGZpPMG+%7dK>dAgEJ8D<%|%d^QBW>< zhPcae3f**&aN0AT>5xnj8$Kub`;j!X5((tD!_qr2m0%n%fAWM%S+Xf1~ktZNM6(Y#8t;`uTA_PJuCehpZy)~Jf8i|TnL~VQ1?OoY!H!%H*88r7? zyHYQ;_!CbD*4&eq;}u^Z7c`&TI;4s*8%+w(O}aV5vv4~NKG**yBC z-wXTo#yLmT`msJn^yTj6EnE7j6vOr-@lT-*(HXv1@W{Dt-)gt^->D^q8t65XMNbV@ zs5kr+?D@oiiOsT&0M$Y+jey09jI8H&9bSLI8Bv$=%c*t~-#jBEM2Em+=BV)C-QT0$ z-9c{%(TXncR55ES(@H2T{z})H9nP&&R)0s)@bo9dB@G zRit|qUZ|?p|3M5N!j2{ZU?z96SK@7vc4?59*5nVD&wG!_DzfDV*A|HwIYyr)4seH5 zH4JxGfZ)ykdIrq?RGwDXw2@Jduyp(d=1rW!ACH>borEiNE|1`Km9~&ogYmx<*#2Zs z=tRYOLeec^`-5YUrfoyGrOY9m?ZBZ$L!y(tf2~AswOfb~O zDqmvEURD@|2LoteEE+4nH@oVj3hdPWwlm^B0q(%QD%C@p=u0$j?Ez(yzd zB>wZ!KxYhETP(zJ9G>wiv-*A3fqsPark7sS(%m@sacg!-^D`RW6=EYnjq?%b#Noo~ zrp;g8eq(FLNy(60#~B;TR4zpV7IF)nW~t<}5ycGJ`;)Yfy_c}IX@6Zs{9sXdX`|cP zeSH0qWSH?NkpWcVJ}-#XFCEOt*Kwelti{yy9?aO7LY4gfG(~>O!SegR&L<`#tXsqN zUU!=rTlctnvA$^hO7=s!cJ(smjDjk>aPa6vpQ!5B2K-Gm$cI8mf-W(^LzjT10hy=u zh;UMMJv1%YRtcTtS_JK}$J@h{WQTA9L!t|Mubrd$i-j#($UstV zh8X4xlTU5u$cATC1|d&{yZZDILNE4jY7_o}*Po|NP7_?M3~c5jUAEnne~(BEtAi@e z6G^(j)TOnPX(}R#Hv*BIUj*4Vl#Uk-SPYX}^I7jLGUwTZW|y9+nrkA&0^8r$GMRQt zQrNumPsY^MqA%9I*9N7SzNFlF)}wjvwQ&h?t_QQf)DdWWKD1?Khtu&TKJe{g9M&J?q_~^ci%V3G48! zXvDlSmW7pu9G?>C_?ldfi|7OrHsjq%es)l*%<){Un!)F8M={qV`2x^l8E?MO@P1Kz zxJcNdI7-HYu$(iUwa>NvxR;O?*) zl5A-IX*N($VI%d0hH@Y`DnmdU^I&+XpujTrE7~nfnD7*mY}WWJaY{Yyiyqs9PSTx} zrftMwuBH_rj7I4zz=qvgJKOw{8H=_kK8nJyo|M(;YPR>0TVmbWw#+mkx{P!p<1Q(q zDCXuhD17wh6~C9@Z5B!mCh8d80Tg$Qlhqn)j1GrSSC1UGYeRo6G$0O1;sc^}+UFG7 z`fU+jhW=ch=(d9%9k-;b#s^#=kE7504oQU_!-8M6fclC@NZ**C2J7^v2G74aFJO4n z>-9hx$)|1ZtTwj{{>zvwycm>uJDcAhh%*K~FSQFBo=N&`$6+6pS+ef9M@F${YkQ^>;So{u#t z{LfF9PFwBp{qyFj=?|`RW!&BjU0q4dhm}UP;IbJ$!DTm_p7mIY>31m|H@@%#A?3{! zl#*f5c8MmFQBA{%<4&imuX*ld6yGZ60btTSo~ibQi57SYT?tD@`CSTa%1KC%J@B&2 zrN*St5t*3>Y^tJ=dY+V>LAW@3Ih+X~S@aTtrl_weD5w-hZcVfL~e zQ5>Xhfk37jL1F~t8v`$I4j0w8chD{M`S(rmSv(Tc2X%amojkp+r!R)8M+dqP@v_O9 zZyrqUcP#V!)0>Wp%z0WbdI+5kzs(LPmE4TpNOyT5K0j2_q|^73RFHbUD~>bQ|Ec?e z^jI~V$O2SRp@T@wA`|pH#cfH>^Qt;|RRvdb<7C`EijzXdfRv!8-pv zuzaXpDC{Xo^7C6mn0;fDe!J~ z(B|4fDm$40vF>NDcoxB-u%ckv8oAtExAF*uRKO7%FRW*DZkJ@|+ARohPaLYrX}B9S zL+zStaup^y$4#BO{E59<1R*tD#a$dnM8$nwyX)fo#&J_KfJfvCZ=*zBs&L7giq8u? zpw?&jwkbqu+WEZ`CfW`N9!vthjwsJP3L;>Ct@U9zfCps!Kc2ois0}aZ7AaP&6sJfj z?p}hXxO;JTDDG~>-L**Z;_eoT1PD%XcXti?@_XO+-t3>uWG3Y9?zwx{N+C+{o+?rC;7iGO)N3*F%{gC(6xT-(jAGn+g{Xye$cAqFn&Um6mK#k804mX zgC6NHtQi-5Kdb97&iP=&AFqx-wlKFAf={Fn!F##!ib9??I6Na!tHTwKCRYuI7(q^E zwtLIF>6}PgNpQ*%s&y&_hS54P2^@DnPheq+8lP7c`Q~*MKUxA)eFL&Tl`}B}8g)`c zZes4v!ApYPX=U$Ja>3EL`tu6`W^%tTUg=<`9W!66g>7VOn{wbh&pP;1J#9Adoh)qc zhM2}DiXftl1O_1%v1z=uI}Y!r%VAfBL7`+Va^WMgUJp}JyNz4{)B#Yj1wTf16j<@PpbKhM!=J*Kp=ymUo7<$^b zERQOE4-%zz8YyyUTJ)6sSIua;gCQ`rcOGn(XxnkR@b8Dxh&c2mO-#VV#myP2cz1E? z$fy#YXW-d=5*B&8Xqijb^RT;Hk2qejieQ=TTudisgL{;q=@YM3WlN$hRLL^7CW+V_ zQHr=+eLNGc!k+!Oz;4H= zHJ>-c`WZz58AShuCF2Ri-838j&_WqSW$>=T1LfV899#0bF*?6y6#v=|c=ok4$0z7{ zN2(N}+5I5#qH^+#&Xy7Yd=23jMt8HF*0w{vBz7kHl$x5tn8)V#dhI;#hdoqA=dT{e ze}&o=a`+k`_yyR#fdQM|QXH~|ZT5u?zhDc~o3;>B?GioV;S)jFJWev08ue;F4VEfLKdjgf8(A1SO4y8Da1uUue0;*)OAyHH~|5|%DEAZ3Ku3&8(% z>_sLt`Ta54ZsXTd=SQea?8r0GL4{y{?2azksPlh6^Ay3FUOT zoRw8ZV~!^3t8c$|!s0eZ#dlRMlfn}dzvr(A+b?o-;AaeD=6<`fipXdUe<$c`@onX` zFgxQ?V3_5w)PMWOCUKkH#*!EZ>UJm)> z1f38ij#JNj^W6~kqQFuNdPb@6=)Mjp z9o`TLHiJK)@Vl}mjz7oL{E@Ui*VmFJ1zVJ>3nNY}UJECf#tX~dEqhQLM$Ynm;%sdO zIL+%jeO>m2PH@E^G8XvVt?5ddUcE#cW?io=&FrMQx!)R4=-1y;SB2WemAy;a#V-*` zi(mLS+}9^B4kL9pL{#r09i)YN5ic@F;hD4?9fgifH#n5}ZZG+B-hr^{e_+vlPNR~% zjeQ`&TEp76bNfk%XM83w%X$0ANZjOs!gtx?SNxX236T1Q)N@G9g`7}oraJO&i^ohv z7_(EEf_g@fuJ)?8k3U@I%sTPHDcaIX;qN~2m*PgNOMIS-vPsa5$66wb_iYlVK~}`? zmy>5c=bglGx$~-KRq)nkI4R?s_akvx-`%yfLl4VxED2-BxrKiv3pg&dFdnufqWhI! zyWTAF3UyhRBRk=K#W$GLW=%b_^odjOV<_NJrZSLm&%$QxO!wFs~b{bduVywlAdS z$V}#UdQ`#AzW*d2X7Z8qjFU6D^UL({MEpM};3u#h{PaOSD&Ec|ET2ghWNa1?mu-Hn z-?6dCM+6bLS|{?g8`AyLatjmq%y0ZZ6`@GDuTFJA};(c=cLlXJ!iUiUBpE7ddl5UID1 z4;Vl1^b|MtHu68JSRaWro6pvU-f7IMC`z5N=Un5J+NHETvwBIKdlO!Mqj#F&$K9KZ z9uiK9fUgBmqDfxf+2I1U9=0}{>ZB;Njt}U_-M{cmCDxPPo^p4Pd`uY%+&3hDe+UW;QzQ@@cOp zgsM-=zlw|mHD-Ff_RMLcuDD|mofN$2C!gEPS3VpXJo?z^=#H+XLgdh`$D^bN6)Y#n-QIf`?JK)=~yC^fXdZN4oA; z+2UWX4IiiQw>^W|@@{zKKaLsIQqe}{)T+WvygkzT^1ZiNT84rhi{ikGzup38o6M?Oi(}6%2#SK$@b|HuYynOunt3ujLzA_z0sbAdRqi+`SwH~o~;xL$X(&xzyDXF@3Xv1?lX{=<6r1Dg~ zF0zoW9)l~2>pkFE1#5SUIvnAqbPqhD5E|&}KUO@8WO?0nBp>L@+!)^=e(7LL1tn;r zcYvJbQPMVOPE43#^t8gD`^)XQgrMNgPFp&%@VNdkym?i2a*=?y*MfnE>gdrd9^JdF zR`ljlk9q&>7Y{Yu!4Ig_0rMe#>~A^5=fj3?cf9&9i%8p9*o6MnFHbj^k5|ric_WC} zO9*#~Sr#1<)J{gCQNm(LWXMBIf6J!^AR3RRfscOD3Qr{!b#-O6D zrZ@LT9U5cXUyVAOL?R-un^#6$vjj^RD3a4scKupv)V^W)@LoSoM67#dW9I$* zSP8NPogN7l`QG@Cu*bg!GjTA1$!Kn89R9-LxR3&bT?P<~tS>RjvYv^WI~)+Ta7c@! zWNx{Dps8#voUA@1$>u$?lq3;&&)?TW*Q3fYWaW8p(J41wA3IK?RPM-Cudjrs+25QP z=vNV>_x3#c=+uDUO$uwCU9YZI<^`^zQ%$M2FEGh^5;tAk{BGO8k|A=xr| z#5SX=DTWS@lK9iR=cGS*l1xlw!@)m!+p9+p zi-3Jkm*#vYws6AP>ZrSfewS%#S+Jgw!h#p!>JQIlXZ-PVd%X`El9EsfP{4vCo`(Vs7gp$hbn?59T*iaVe<*+BOA1W)wN|x<&-jts0 zvIgb!dlaB(8Tu-+FTBp+ppc$FGxxBZpp#w>J7a zLk>4-ajP3h67)<=DQjYKyE&E>MU84f|5)sjsyvtyVV*@iJwLn(<^2#Ugzl>nu=GdY zPulC^K`wzORQf(_DRed3th;{spI;=9ch#^cV3u15>1^*mmRf1Fr?gTP#QWFX@~Sjgr%K2%$?l3Au%p9z3b)Z z9aH^#U4w%ch6U!6#E%GH~)Xt1*F>QUDL(t0W> zvmZy+m@_?P81Z##67Dz*8LwG??$?-fETtjI*L)c1gzk(ri#AniEyC2XnR9yMCwEws z9ae(+%YAxS+XH+zk>w6|4QQhQn>58zdKXIzXUQi8&*MBeTCXN4)g!?0eLL1*r)A=t zHu1((`E~MqZ@PPmPWJ6$?Gr=my-_2c>mgh5GC3XQH93j`r6f}RE-!x}t6v}%Z}oNZ z->2y%yPfR`@}(+SlY#$nL;ISG>^hlky#9A?5@gPtu;m!mQ(~0qX<$*5zaYcCk@eZ6 z1BoL;4)>*BEL<-m3^ zcp!470Zli9@a@5*tnFxCi#Y06!z|2wU`bqA&1ct|NcWDi9;>8Y@m>7>&bx`GzrH2$ z3nE#jwO(D}m}IorYksAIPtVuhX~c9Xa*oWs!Pr8~KID!GxqXB9iDHfwkI70xRU@02 zt=Pgh2{+5;*xFIcPQ+QQG2?MdE1x~1Sy~cY#(Tbv1NQX}*8>7E2DI}qU<0p^zQzhc zXyc})zCIQ9MrWgc$0?#e1izGc-EW`teK&1Zx?gSQ$-9j8*|=b-k(2xV1NS=*%hAAO z7lP)SiG*1|M;g|$ok!-MTdhXVNX4RxOH&Zj0s$0Gqv_0qt!gOk)>=-}lxgoJ9>@lK z+cw-S5g<>nKJTQvUdw}N)@&TV>L=zsmo9x}9M;&m$+c5qaU?5Xq|3L-XX0)P(TuQM zDiA&mW_z8w&tQqaM&dWqoEU=iTHYpX*G=)KOqo5p@q^B(U)>u9e3m23@UN~E3nG0^t=fsW_Lf~0to|Xg7*-^qo?%>G zg+O=9IZQp~U38OdA>l_KS!`N8k7FckKg>;*VqCD_hpS0N9^kXHentExH2 zm73#a&zM!D0#h;Vn(^5AzqPDdeDZo&^Vu=i)9QzHjpyDo-SxisN+BQm7`v6G27Jea zElqM#FsJ;rXAI;pU60m$Ax=^7g|ezq&%#LEic7G%5wqv*+HD%mGKC3yM9qK_osdP< zd&}|^o$EciV^Flo2EqOkiPza~x>G6D1hSsbuNG<;_MI%@*%&2=r}DlE)!ZGiaY#LO z=uxs5&!jugKfQQ}n6CfA!1^`Lf4~FtCyxt;FH6o?V<6l-tmnmF`-SCO_o_yt#kdC6 zOd(XBROiqQAco5f{6PbSVchaeH#!G#jvC8JgS)yb2s=zw-(}it!kvDOr6^EP@#f{lHzsSVRYt z)B-xbDArlIo_xnprxG!>umv<8$<&y*k}t?+)UC!!)KzJ_`iL7;@|PcKwazB{y3Q*D z_Pf)dv#`uw&h&Yp)b_p5bP{-iBeDiG*-8&9_%B?|KKF{2Jx}o#gBLBOgO<-QO7{!U z*%I40rl%>A))dVoC zgT!5?q$tXQZ(1~8kZ`BK#n`M>CL423_lpU4yBUg}*$Vv^4e1WtO|vDV18suNn^X47D5-biFzwy1ur#q4k8G?d!COMz$W7jhf(twMb( zkRQtZf?dHg%q8FgahWr_a8ZOTk)n4mM4#m;f04pBBK5b|^TV9NE3_tH7@O^Z_cr>JKg~kp5a>h&!c94 zKl5iarnFSu25O+TC1|rpVtiz zJ!|ze{wrtEIb6?747~`b4_8<1Vx?#rnC@U=K0_~lVB&Vx$7{Ql|IqL^7#cQ4xC&Xj zQmAUjxVUZ`&+uVRxC*XG*fJ2q?=U_LufMunm%ZN(K%lS)O~KBirwNvnc?rL+qau^y zjLu_l7tytCc-{Dxm;>IFb`i*Tdy^x0Ny(KF=%&C4|>>dS95;wU|W-CTdDb9 zp;(@U!{{Jsh>?&JK>yrL0ub0Vw*!3sP1e->FCJg7{{ua_3La@nqWDY7%Egy2ubyWL zSh^ZnU|Y&)ENJ-<;=COA)J53t!rA2pK}y!R=4|?O zl)|&rl8UuY+x4>8(R+;^3D+G@8;wmOUlt|O?xnH1YAA+NH4eK(ySnQ0A=DuUKGo20 z-?AEY*?4nhtk0{Ikk>lM^)JXPP(%-n)NL^m!woX5SkF0yDh(rHNGD^uGSBk<`xTV; z=BU88@*`(8PQg1jeHcBo6CtIHAsVZHF8ime=+_OU9QJZ1HRNNEU6?(Dye;7su+sSo zFWfLst29{ToO#l=Z&1%;UsVOVL|XYP6}~xyL$%W@a1N?EnJFUJZ!_?|lz3?Bk>7q6 zUb#vKBG!n{C|csBrjt2!_@V$r_#&&o_YwRg0LR}e7p1_F6yCLeE|L>`$IORe4GTo{ z`?%O^rMmTp->QOh$6COGIjr(8F6}v&lfl^2GK`1X0sO(Quk*jyYt2|>L`n^U@L;kL zIiBXhsNXHQ0Xne9IU2RKEJl5PwrsOYGdBS=Cu>@RMcmXLP5BWkLm4V-qto<CNG)U(eef z9^=_zCfdB?3uVZnL%#E z`a}~SP<#G62t`GxP+Kxji`9oT5g??=T%B&y%_~PRUY4wgi0)KP=lX61CcVH| z%NOYY zr=+JIXJ+>wuXfZhXFRs2Y?a*VkVeBOb3Q|UfQDn8RST2nrDvMKHO76N_P_q!cr|2TJ-Ux*E<`U4f+nZdlUWZL9 zfnHCmWqX3N!O)rbau*j2S9 zh|2U9;_(XfIfwr|@05);Ke`uzL;xr9ArlS<6*-VEQsg5IBZ_XxPjj`q#k64CV_QhG ztH)fu$PypnL=YB8E%&->+S?6#c%x~IWcr;a zF-Lt?XVqtCd6xB8d0=)tN5JIjnE(XE376s(A;WgI*NBrR?r~ScS`pdQQk6^V%)u_} z!h2r@Z?vyiG-V6<-x-Npj*NTLTw5meW%!RSK)pI2c<-aJ;gogAmO z&TPv2{B`dWX>tq+cJi{Eb|u9$(0QK@^4BAQZSkEIOtk6ybuvA(Jc&Djo4tkSH*zR; z1G8`H`!rP)xXLgJB)G`r6|3s872nTTpY2zEzv~TTU}mI>4zqTZlrKan)j`8bIYI^i zouKm9Lie)ZVZgsnAqqsJpf1hxZ|}GPe1V!j5i4ULwnRSw9mi1Mn;h|5MZ6reGrA}& zQYsR{%NZ0I8Xvs)lQR&Gi_FUY?qVS>CUo=zJvL4k2|iLSp{xI2Vs(Q_CSG8J=GjZf zgbbIZ!iQKUzQGOdrCRsY&d055cKE(K0(OZsWJTL<_glC2)6!J0e~8xX(t_tPYCF#j z&B%Iryr`>s(Ae{#S46R+9o5X4yy%rtKIu#=!V0Jc{D!d$o_PY+_6(j`Nl0_@brtOB>Cr+qvUZpwSXiv&UF35z2h-~J7t`)%w~T)G^apyurs^jg8sA6kAsJYMQvW-r*| zM7n=bAHYiR{QtZF8d`?MNc;;x4M1^~#Toym-+i~czwKb>mH?R%gx=Wy zdwY5qcgoCoak_pw|F)|2W*V=pCFR0)bh-M;UNiHMXd_A~fHs#fikIrzXP<@=#$YM3 zMNt5bPj_tmAaX+V?PvG+6?|L)OzdwX38U~6J^U}VY-pSKC%ARf3nCSd}uDP~0 z3dhjpI4@2b1zT+N2x=VHeWa8cvTx^vp?iiWsWJeeQ&hH0fO4`LYgTxBd)iZfobjUH zaY|#&HZ%_yTWi+dKAVzM4agh&L-BR;!X1;oc>Jsamv8glIzm;l% z6!A%GGKg&L$PXS6icm#_KCc*# zesza&lJrFGrSoL{viR9XIA8erG7?CgbhajyE1LI}#_qQz5WweEc!$!MZ;R_8c+r}s zK=Njq_I8=1dulE4U3f^6*c5uuxZ8I4cGng#kU3{LoVwnr5in%Bo+Uc{jmpZ1beodw zEo(|`CL93Pdls;KD#CRI--Yiq3!Epj9H&D{($uGQx-@<$5ao%YN%cb`qaz&+6J2w! zlBes^Y_BuS)f3UjBpRE|D}3^J%suiUyM!b5sbk z^%u5j;W;wAmt0w`mM5HR3`bvJciAcK!I#v$)r6kTIXzB?8~=v>YXuq^tq* zq;vfa8=p~?@5TUXdUilbHa1G0hcrh#ZU<|nc%+k`KemSQ^yL9->SgvHw949nP&JI) z@fl|AMrGE3?TVC|FAKp?zpin<1E&|C)vQ#9Ni zhgK{FiIFIN<%2gjTH3zu@PQ&(jvzeGK}s?gDV< z^2~W}Qy0v>H9ec)vGeJz3;)at*O4o4?hV;lhJU)#{T0nptM>Tu6uwY=KGn^lw+4 zTg}IusnkAz>W%g0-_#vvzfuCA2Z~S>zK|2_iPmUj%_o@O|M+M92U z$EUQ@X6Zy)=#!WPDFTedX$P66BYQ%JjVnzS^^;m&d%#0{=`8=MHkr-Nv1xZ8c`GbR zYXYn+0J`sQ-Fk=RDAA9MpRKR9cnYu8I2ym?eqSdS%`pq;+6i+#z+u9Oaq({ zTB%V4n3T$62r&U)#y#378WW_N8K^Nk|M7snwrx+*?X36Q3f=c1zV0Mh&wELyP+s4Oh&4Re=maS<2CsUE#ZrSv|aP%0(0Bn2D@a={| z!e%_($zP7xf3JPaZdfZHI}Zp!h0OY;U5bNe52(nv6I6=`M1wM@l@`oW3Hf2_J5?~A z^K%2|>xSF3^C-VQ%TgVbleps*aiKV<&J8V(WKWCV!x*VSc?a_NrlsL;A@Nm@nNRrB z8IuCOEXZS!rKF0Mls(e4TfI!M<0@ES)G4*RpK`ni);Ehr;gq2=RMdJK3@F@eLHw9=**sGsiyq|HHiCQ%OnNYA9~V;_FU?(fgbi0sS^RN=_gAZtgCXh>d$SD z-mUHM<8SmcZbF%z68oj+H5Suo)-uG$@%813oO_vZjq;^Hevx0rWcyclayEpI94$n# zJCCzYvo^#4TtLTNhQ!NzrTC(twt^tTXK3C`^Gr~~U>&nxb%fi3vukrrGUoBzK^m;&E6r)0v&NuVN zUC}O|D?{U$BKaCuSK~)vN74SudM_gcx3RL!k|Hfp02mI%NDkJz2pW5sf2(R_dBb%x zanEthkE!%Yl^23iWPnN0KfMo*TKAW7c&c>G@g~kLgcRG&T2K2=`4?A0#4#8q%ou2kV3NqiO(4IRs5K=a!@lVsmy{ah1U2WprzDx_LT%^TXB+>~0mt*u1L8Zti%3@2O zYQ6+V85Zj0Py2^T{W)gn84$;tJL-gujiAX6!6txH+dg-aE=&Ohb485MMy%zLQYKGX zN!G0dk4FWE_7(FH2}3C=vxBDqexuCGBG&#PZuz6(y5qeUZ)&$5?>}4X1GM;1W;lpD ziMUaif_Ew8n}eq=Dt6{P`Ip+%UEe1EjD{n+4i_L<9hvj(HqMw0l&5-!{cu6|zxl?M zlig3;Vx?twlXf|g!{1NWsPz8l@54#(KLOyT^>xIVoziq2x&H&%Lp^CiNaGf?`8Z@_ z1|<}(hf^igw4V9tPJVd(bxzR>a?Y08V0dcpY2aegVhiYyI(r?Buzj>@adkbGmvR^4 zW9+EOOL;}F`*?-6Lhy2>xabL=K4@Dt7s3> zqBijn(A~d&E^EL8?>k)}j;!pg(!cpXuuS+D(??rB2<>Oc)6zD~b-(+`hq0sH=imMQ zs0UCBdebSU$0ks88M#nPA$VtY&P54 zl`Yy5zho@tF_0c8j@T9ZSu|`L;YyTZnrineKzPERFmA~i=o@F-AyVS8h9O1O+@)aJT{aa*qR=^9HaU5gxA zUYy~h`k~*^;wNu^2cu zYsE&o4LPIHOkmDl<@9Bs}@M&KT!)1A^Wt6-`y-? z(X11ib$$?|Ab1Tq_Jj|VH_-bRmKuj&sr-`u_LzcknwJ#4*7*)=6!Ge1LYR(;^+$4X zgpg%L5 zs%A=FGojD@av99<>5HeR!x`K7Z_j~orD8J;QfW&)!3X7>ynltI#ktS-WC8f(xm`IS z-IX_rBmh;CjdiBCIpSw%hm>p@MYEnJ<_#f#+@of1TkV~7OglTa>Y{p>P!L6J5jnD}w@h`7Xvsp21@(;rKcfJ!WB za_H>R^ZibUS}5ILStnk>t3W1Y>h zjoHDH8{qZG7(mq~U@ht-b^gH2%G<7$0^z0-dc5Cj|6#Tt5Ue$QfTmY z3@li=T%xX0X-At2+~y2X3IG>#rT5$OKvPoO@r&JT2&_8vk(Kmv$>>k)VJ3YooYI;( z1%3I{RS@y+XW;!1HaTgsetayXd%0wHYyCV`0^H8>)`zI(eBKgPj9Vej^qX>j?={Q! zHUP*Jzb3?ZAK-(ks5I*4_)F-_N3S*oejsOl9bMsG1zlyaIiiaIQ7}C7(1L>t-hwixOYtQ)`q5^m6FgsJYYe~k(n<@@6 z`hKFGeBL;NKcnB2J?*TDiuqJH-nmPS$ukhTzel@?ckJmrex)8-#v680rC=20u_^r;RY?W$#u`jUoyDy^Q$ zKfm6mT@c|K(=K_XbPd*D<2G&DvzPK1;3Ly?6A~dslbhVUw&u_ROCCJMc&4Mk7cim< z;qPHRlET0e|ID=~z{pdSYn}(vf#c;gaSe(Cz>Fz_DYcfXc*i}LV`5BS%b3u1DDg1d z$m~sdTxr@;LQ5w0cB?)Y?>{*4Ul_c@GR}PUd51~h)BpRKRY}wGT#2h*S9gP>~K|^k~N<7YQDr4ie()y0ge(Wb>VKb2~ z@#fJ-ue}{lzinb~#_+XxS3+BhRSmo=hd}fgZ3>TM64Yuc01I>WXm}!%5s`R=2qUQ8 zOcR^jIv40$USagZuC&@0>kXP}c!SY?2nrxS;%(G2r?SDR_SkrRL-)NAr9J;tBTtbY zxs&!9bGvCbHhe=Ip>s+)xY0wh9PVWkp(V?snsqqGkRkzbLP3U!RZFX@4V_8U4K3<< zV^d}E{-B6lbF}`jV~2*RDXo0PeK#@!mp$xMp86<4K|lK0%+e=bV+&q?#kX|= zB4Z6&s-P+H(lpKOs`_DFX9?6Gu=-z$A1qz*TMw@OZhAk6MdRC=L$)2fdH&{576%fE zob3L=HR74~9l5!8{>Q#0*cpya6I-EB@0p@w8(o#mU0`QPWAiH%6BxYeL^ZTcfa^RV z`f$mMID1K>Fo|>-BV~mDB@S(OWK*j16GxN-d+2|C^}isLLbNba$ymxY3bY;hG%XB7 zWFJ%-?3Kwj*3yAT9_t|u|H529D6I3TPy6eqW)t0^Bv7N>Eu-~dnp@aXe^JbeYqa3C zKo6VGns?~Qf%%O-nD39vzyJPAm{)tKZb>UEP7LXpjbrsL8iMTSe|lg zN_ii{f&+EK#1~oXcdhggT=<83X)aJ;iWr1OP~RJttT#O0Q1TR&qjH8t$_LZ($Hi@M z^NT-|ZAn%fqAC?~rHBFO6r40pPSAa+460EP#p@aS$(`)+muI{vRm?kS<=AW!n|{@W z;0DF53)BdIuF^Wyc60gkO+Qjke#wQI&OIf5VQ|VIWJfIFAFfri7t+M%D-KiMzJ%&92H$vt}_+ ztmlyeA_sD{h?hdVWXEO~fCL*|U)a3G=j*ta7^^P^{my81ejw=_+CT6WqoV3tucE z;i5B~e}xG0((m3@6nhbmR~TPVk=p80blnRtUgrZ7R`)Rx_cx;@^a z1YMvL2Yh+>_SU@oU8H~7v~@HpKM?meMP_G&Uj@Irt)*ugxhaCFE5E3wQPgyT-YvH()e&G z{^GGIGZ3`YU1Lnlt<_^-%8wjuG?Idlq~lk3n8)lg`W$I&5++%Rp=FG!?lMo#~ww8i-m^O8J%Ohm$|G)7tg2QSg|H~f(e zqma_cRL9Klj+YPfaF7STdq{5l%iGl`107`2@>OPMXS>){P!hpxa+#)BZ4R%Om(HFY;5mB%y3b9?25!V-N!8Ol5du-Cl+N zBs`W|1T3$=#}jfWP89_esv|m@T;(}9l9aOIr8wxp$9uKyk{fto8S)X3=$))YLmVX% zSq;l>tlO*?9 zNvaI#FOSm1ySa=@XQu)r`Y+^1rC)^YPVgup5NA_A`iX+>p+%T3#qW!wV&ea+e?>u5 zh45K_3bdyiTRdsgHV-Ny;-~!Mq*5pf2&OIr@Gado@pHKD zcL;o@2K&$1u(saa#OXTrWPSv-{9ZdpV^e&+qO?U`MCa5i&|E+7NU9~*BQJdAMjY_q zJ;2bioisFKP$T8CRqF&=(Uav04$K-kQXvbBcf}pQedf*dJRu)rZkk9Q=L$em)WlQM z*+6}$+*X++Q+W@txB9S&^g^_Z&|MgRfmxMkFnqZvy>3x12WwKG>^ZnOT)t%qQ`nkv z?Hu}YVrZijk}H9acrd=gqB{0?1Ou<>M+3z`Ujj~eP+NBKfYyN5dT{-H&6`Hp>-KW} z{&rr1C98i0>BH(e0pGDNLzUJ~vM&o?el~ndMTV4Qlq5GCR;Ca4S9uH>WW(sJJpo#p zfmr^BOq^F^4w2c8wt)K?v_BJ_Dah`l#ESSNK;c#+X{-KRhX#Eimr6OE{m=Vj_^Iu zqFpd2&V}SE0CPpIyu1~PJpNxR*PHofMv!Cm12=$_3Fwpt{byh;@XA?vC#VT2k0VRS zU+xLJ=1OFCQVA#48Qij4bB#zFym7wU6zKUW&o3=E?KX`x9na4h1r#W0k`(w2zREb3>q10&zf4hkyUr7b`?r# z&12^YOBe2CJYy5oRogho9I{|=uWL4Cs}`(PhpEV;{2h#-23wl?#+MQNZ%%^(ry0F; zi;)MlGwGwU7W$XXt;e{_nW8Pq=o1PUItrtSKLLHL`PK@MGg`97%!wbmu!rqeriCv) z0UCW|TDbF^x`#eDyGr>U4q$_qYpfwGE-e0X8uYI2A+NCplyre4* z`LwG2wn8mDgvaIVhT%4Bj)cJ0e&vdHJMoP~!WW;*b|j^EsFfWrnp2J2dc$f4j-=mp z4gB8CXy0zZw@)`zCg!KZmWgkDEw(tT5u(6z+Sk*oN%87iC@;2 zyu#paKVgiXc;pg>ByLAMn?O6NM(i1}6RUer^G28eRGac3_k1cRGff{ z{)JEqNj2~rd9cj4tg8}p>~Q2+-fNUraK^g8Z27#x3a_IRPGw!8JS$gmh~EylW}Qh< z!bwn_Z&j>{xZ{7#nD;-3z5P@R0LR%cDK%-yn+FLo?fUj3V_f08uY%6LF0BI5e_BkSRE0 zWaVK|+4elM2K*vvb0Kz-oPaHu)sAPmQ|*9gQ6a3<@AVs^VLVGm7~yDMhTeOrMXw2| z+%nOEiItzbfCEQUPBaG#j&Y5ZexJrM{7_Aaa*0Vo^$-gBnKUq~s{MbXaee@M;%P~Q za$Deub^U)xXz(2q^kp|DmX?${N|d?}Q91k_Kf}13tglp|QhKCS{yVNKa+DbMzPaca zz>LNob*#Tz@oY9|B8`2GXKfHG9R3mk6IZgLHsLFv_=`|WpK0hH1LvZL-0_hs_QHup z2VCBNG(`=Mv&0^y@H1$*aYNF6s++fs^ur%0&ENm`uj9k4^$STW;#>NPiPtjofsTMA zSo_KxzH?e`6!U24tH)f&*5l9b)E3b##v76AgZWY++?i1jF>IOD?Dt zLTvtd+-{U{?2rA3oZfwOj_&&wqf#eV>Y!sYC7F6S8ABCkzZh6&vY z-IZIy*&~03Tl<7M-B$|Yb!gxgx7&8*MDzwouoeY4!a9uq@kn!0sw%4Rug)H1r_V4U z5^Q%%ui@vOdxy+x1QJ5mF=Xi_mmqH&PVOtKps@OhAw?_Kx=7M8a@Nl7BwMO%v_2o_-HmT8_dxv z0Gh=nCMwf*+DhrnT#acGrpN zEY%{A2iEPXAO3ZR0={vh$Fz=9SI3J+nvr21SIKTNz1L3SSPJsZBb*+Jg(f4-JQpRv zNK5|{?CIR!mWyd?KYuqP(8rR`(3RdCynFAur(9(r2zGqu>hCOQ5(5!ZC2Ln&YUxzu zpUXWNqLZroaZOS5K3-D|)6$9rSg71))hvYmceOK6cgf3sKXl=6lU0f&;90Ru&)X~l)VvazG7t=MgL~wbqZAyC++|VhJt+(V>gCUuf=(|SyPa*i@HZ;?nciRhnIuW~ zHHjTQV986qYuf)@12X_2YqPKTezz9stW1lSKn0=cTzO})X~Yj(HM&6@k5CaK5d)0?{>mlm1Q9lWum=_*>}2Ui<`wF+K0NWlN0>KnuB z?6$6BJ8A4Rwr$(CZQE#UHEwLXL1UYZvty%i(r>rVInR5(>;93S+1HwDO^h+-oX@|P zWh5<|Hhj+vo(EislH46H6N4$s%$F+cZyz4(lD*+iRsqpd*?zkzya%m;c!?i~^0((1 zrGOekL5=Bdvm`nBy|UFYwRfTjkQv{sYS;&-WrJl8 z82&CGpL$|keXU2nS=LKkfVdfurUu27o5e|V_t~{bK``MSmc?aXviNnQP4;IadWrW3 z%f{r#SC(r>%^e4DE;`8gnQ}SHAsDG0hc%64%E_|zq~r5XTFcEygY zOXNVuXcTV?ViAr>g(O83eV2l6Bw1m>>qO;L^%Wr{YI?>+vPb# zoQ)%~aATPUoi{(#a{JkXdRI?zvvg~nZt0aU$@}*OXUWkXys_q;c?yq^$ly(}9z=&H z$wDC@--#prCy&|N$E*1cSs=~)HaJ7ihVdP-$8_G1D#Ys#QVO*Th=19T8~WZ zbF%NZE)jC3Ui6PoIRi4B4=q1sFt;?Pn}7V^ufR6+N>Q-Gcifo*c z2v>{qc5p@x&ZFv1Uori6Kjnh<P1&}oR*Uv<c=|T)^HwtNIxaqrWw|!m_xK@UZ!gWrcDsz@*Mbl^Y^e}Y>a9Ys zLCx>@EW5kx9&sb-kaW}ap;YWk?bP5UR_Ik81@5E!b}j##*xnITK{dwBUcgX7BR@tx zpVP#_72&$w3*t%QxZ3M8blq1+1G+T-nTg{~&3%i)&og2q3ZqyY2UR@=kIR4Z={FI;iaD@2&%zZ-(V-7 zzJ4_>Lzenkia0MnaukEQu50deq)IXLr8_PE_Va7Qr3F#(D zjt{21@wDF5m2)O`RAcRBLdV&>nWgvrI_nYBpA8g zL(S7lv73E&DYuKJWT&%!PaneCLBYS-rU8KI=KiBnz}DAC>Blz;{)`k$cY$78v=|y0 z7Ix*7OLcSay7*iqu=e=R>D#-g(lJr$MN6c8ClJql+-65*X=$dJX#Y(pfxlh{oXrm( z>pDC^-jVHsXwGRfcu~SdP5};H#t((irs-z?0LL+@v}Zrn$nQv>#pid~4pSIO-OUC) zM3nN8n;ZA^VfrraK5`jXUejH11{w79;3*LE^sQ0Lle97B^yt5E{>8*o5o;>zTNk_a zp?t!BWm#-~LSb#ttihug5Q8A#PWEI%UfFjuX5{XqT$LZWJE?RcU@+|Xn~25x@N0?t zv-JE%la$ZaJ$p68cV(HH?$7D0-0;|j>JM9#Daigv-tQnL;^lFWNZZe_Bvg{2kwA}f z&B&$B_{XCl+4SXrcw17I{%+zHY{B)e!ca_%X}R}c>-)YBT1AD7TVKL235{FYaeFHc z?-SLQTWC3Sh)+gg6ht7_3=%J)DwECM*hv%14xu>=To3std$a2M1tF!Q3wx13%$6Nm z`?d&mu!`~Z(+L-sWz@5E=V%i{jaj4XNd4QhcfzSsue+)Ai{Ts{`hb&(iTTl`wYJGu@A>|>7u!R2P_&Y^tJcGBm<)MB!N_Gz+LL|&$Py`I?_nz<)e-UT`C0mNE1smzNghPM_!EQZ**1=(v`HwxGg3xK-$rP z3B!$a}J2AN3esLGoK=+G|OxW8|do6lJlwfQAjJ9N%4e?8ZH)UVJl>f?_Nd z-QbWcY}*(z;`nThVKSuSdNKB7<2eAu+ix>){57+5w6I`!=1Iim?R2WfFU+`$-EMZ>S!J&Vj!h0Wp9K%B$D3XY^~Fw{P25UaAF6M zlWSQAls+mUhmUovlqn5)bO*;tWY8;-Q6p31k&kvMZba5P`3Mv>O2~)c2|H@N7=7Vb7bpA>0t-=y#V)4?gohLX@Faq7G@o+=i8=0y9d~C?o-wLvY=^x zurLt0_EZH)P?}jdfZ$G~+qc`vyK`bzCMq~)sl>l)lDpmGctSiD;OI!(C?5EMc%h-i zrs>v77sTq;FkuO;c~FG1xtzf1rAAAB!UwwgG-LlOjbW!~5+$`FC2D5pTr9-3JCTC( zA&@H6OQsNcW=vEVV<#4bs7};1K%zL$9!MtqAz%M|_`-;0%ZSYEw#}jSk+?JPhv)hb zF*p3H$M@mD#X*$_d?fHdlxBV-vLqX3UvVSuQzp?c4(Ahj({Ng%h8u=684?pyz-mf7 zkq~sTxA#}KTsP)nv{eDati+_QUJ|Zx)oe_oAf*OSFgf=@IAuV86^GACuN1I|8;YJo zGS_AOAx6T!4{Ajo^ch2Cu*V$-o)^rBcCFD;- zpL}HoXjp0>&h{dpWl;NX;aYgWzjV4xL(66^1m8RK9RO2|DEV7I6-l7ru^ehu=xGjf zw4Yh0nLWE*-e)9l9@~R!X5Px5aN90)9CN0#Nf?p&a17YHVAMEHV8(ScJ^|Q{7CfNP zO3nVQ4}F@GkUePgaQfMF(!ySEQW)FwIj8zMq!{jsDoR|5Ld;c20NnGlg-gH-VbX>r zT;BJTey+V=A=8TF_lvB~3ibc>6hO$g1hlEzW;thwAODE*!Wm{flmpZCi%b*S{_Xu` zOuCjLC#l#RWtK->)Eq?O*y?fj9x~;)Os~7+ql!8H^w@_71~k zcIxu&^N)avy~qu4!w-GEWH-plumOH|aVUsGJ_{fGF4gHi28dMndL7f4VVSxwIkd zuE}~1%vz^&kegi{j1n>zr`tWiCj{E8tDt)a!k)(?iH#tV)zvO+k1A32%pNm`X{b$y z8i}yh0H8mFTn4D&URxkf(;>*+(3lCmhY{vC7=0dNd8UTC`e9@-_bjb9KY9Fy5NolA z%cA<(dZ&C2Fx&*Fjp4F?}hn@BK0S>#8688or>@KB`&!9^X;y=e!_N(1)QBklD}bDuL1@BP${zZ9pP`TNj$wUe z{hrX|>f>&9jq#-w{t->rK2$mjU|WE|N$&q8g)3}{+QL$$u$G!ucs{ zI>ZVSq!s7u4E}EL0UoTkj_{+9Al=)&;)M3A6QE?azN zPL$MN=dYCgLOo-!IF%qC&Bt{KqFTL9*TT@(k*7KSM4(CI`s=7s?n$UhF^cZ(IPUam zani@xr7`Io7}^Hy0f|7-$lFC}=U+WNGvaJvhIToVacOG(?TuL%Lk+t#l5m^^^1-O2 z-D1qQh)acvE!V1h|9eIAImI4zo7MGNS{~uyFJ2wr2?X5)NEHp8@={y#=viXT)!I=i zT(<4!ACHJKo*f4}xI2efX{eHoTdCUS5_Vf3EDe7lQRg<|>T=VRLb@^xx_l*Dy5j}z z)zhpf+x;nR-MIJ3jo?JwwJGwOad!S+3``B&fhzuk+6HS&*b)(u@yf{UUHYjX%wG3| zRL4A;?I%Zt-)t)TVkXhulJ;m%@Ugf-y5o0g3iunXp7cGKCfLY{#WMazT&e-R!0LmQ z4H-0m1t=@W}F1tt+ZraP@fYJP;R*o2DZ0_o4XLvrj@I zdNo-z&XQJDgz9VJP5D9Mf;E9o$ipTc@_h-5j{dq)rKL0%;*PUPsUO4*_dP_F#c#&b z%mrC5BPM&tDrekF%si}I+$O~SA|-`O@$RU^eu$bz?4XYUr*qfQiIy&zk8(t0`U^I; zFpZrcbqf)#DlbuLlKsk9_fQqF7+!02uYpAENaYM1GTzatyuk+U68&Ltw)LhGAtN0P z{i$e$0y7VUjlt)Vae1yh1iw8YLKxI45in^4s*Qv)B+VOBZoW{uu3Zx#tK(#7U8(ek z)!A4H%A)9Q{6b$`N(PcXmDP?jug)n{UYGxsW~4XU2DZWc;5m!f&Y)3DN3*8d5>)Dw zE_G_{P*#MBs`di?NQlM3EsizPCoLR8sJbJiwteA{CMULICrM4)XPE^OlpG2|+K7sv z<|A&-aAOO`)7e6(5V@5G1F0e^oYvATxjz{ph^fO@vwCAO0u8Is+7n_<+mvUISp3$G za(Qc_GHWspep+N&vcsdsFL=zRtsems>a?`MY#jwWE*N392x6s3La}59thH}y7VdhVvI+kujaLIt z8gpGnn70aBMrvgSVWqalJh_JNzfP;)AZr0fmgQ_MZDTxIcCnKWytD?=lNlw}A2M?6 z51?RMMreNwOGVa>QNBnq@7sSMBRaZcZ#b0n^>Np4+FWWk=PMN;Cn^}Vxbl1`{`nJ& z%f+X8_i@^K$iS>-f;J7F=?_tyo>Nh-1V4JfkGL3^j?N)I;wBAkWOC2;=sKmGUlk*< zm9yiNdGO$M^9J)B_GrXbn>a8HGCmr^Sns@Lg`_Vf#=Ky5^32{qd!dKtrk-ukA}6ldZ>_HVJXyfC*8J}B8SZC zG;}n$pAZViNn2F?wqpU+;htDzA()!#T5L5`KH*~wHb{!J#Q%lR&EAKZEoH3a>HeBn zC>odmmEanw-q4Ha(k^hs)GwbkuBGkd|2~oUS^Yr#E85m(fd1s7Hg1Hi_On7zqUKK7 zh39evtitG{U=BnNjUyf24cC)r$;n`px=OduK^W9PwID?<_=qCmcXds4%BTmj^^DGO ztKXv1?ONX|mX??gOQOv-QFB(kNbOHY3qWQ7Z^aLPVaY&Od@EOdy9Rvv$RlF?)bvNsNEY{Q)A+}e84o0 zv+2>`+97Hgl=7II#RqS;RN{P60e?@LWfrn0FS2o83N8qy^hsjiDYpOG)vN0@u3Q+Ng@@hU@K+g03d+6!gpv?u>PU;t#(Q1e3sfZ>pkk%;;vt z$9VW8LoaYBYkx4Nt?mWS--Uj~0Ypr01@C$TkI!xW9{Z9&tt9OcTc?sDq_#p0&zXxq zNkHi+t5j{iPq`X&g{C>J{eyPJqp@`;en_XuCdS^Q^!gk;<@Sv}Wj@d#CiUy8C>LQg z654?=BKzUUkF4o%5gcbhR4eJ^6hv;GCrZkU3PoS7I6dZ_y7$7;s6^y2Gtw|L0+jcd zMzP4FSJv8YBA-gq1L6DdwLMSs%61*m726j!M6u(x?(Wgp-2Cduhbr$I6`DWw6 z%9^+-fg*&}&f6P9!q?hkGOI60l(1j8d=^u0xkr*`=H328t4WPS94_ij%-h{p$HXy$b{G!+tg*)-LwHT(;tggs1hrvr? zn0T=e1SuwNKwK0YN^iJvhmpr_vR-ASzx;me_(qF$h1*o_&Mq>q^6jVuZEySXk{Q?ou zGc;EL9CMcem6>xDp!TZkbWimhj_*+HXl?W!bj~{aLE5Y-EYolwQ@v|cZTjCeFQ0}3 zyf2mIlx7*(+|!Cn@Mwi~od=;9QOgVHY|8DqNZdp-@ zFlqEnb+r4pB{I^b!`Fl(#qb4NraFM;{I8UhhFpp-D3(+ecNsZ!0Jn*3GU!g2_w-MP zvr-2==qZD)(pUeJT-SoOsAq+{4l9hnDX^_eST0*lAoc&D=$r@3?!TWC5HEfSN7xDg zc3QY&F_7v6TO(>{B$o+b8-qB)?2VA>7`WD{K@+9t-32JGr#q@upMcMd&dLW~Og~g3 zf@0D&eRT}Boa8tXQ&Z#1#xjlE^uXzO)t&eK=n|Tx**tm+i`{%@#=qf?QqND#5)AD` z$$BfmJ9JtsSl-O?rq66ok{a(j(foF4{N%@6-klc-UdWKNfXS3#yN38I6F(F2rlVT& zhnqdDhAPTmWDx~sUUnuixFG$!g1JeM26kCRUQ9j~n~Pewx~C#>{A3GE&1CKEFv8GS zY>@#NeYYT<=G4)$3&uP$xQ9v4rLfs*?p-x6W&g=P0``E}+pyFi^+m``9du>1SU@*S*B|ADUXSeuf z;nqlp`vaRYya;Q-kN#eJct zpG!+~cG*T7`X4sX$iYg89{XGiBga@(D9R?Ry}k-GbMDyb`xo5>Ph-62I_cMFboP|# z@qXPNGXW(XWy_Q^?^%nGHn0`O-qA#Sp(m+mE&)o6NCPm($*xc-xUS-;SwP8 zm1{@8ls`}7@cP}Q&HJz0mTWK^0;wc=`?GEG{m0+v8YO#sq%FH*9>Qmb6JN%i$Y?=e zCT97yy=eWVaB7c^c2NyOqNf!TmdmezsLP@w#}X~jV;N0b3tgytaoMKg@H9zynWO8f zfx>J(Yip9!6K9|~7-rNWO=;A|v%5A5LmBT7#C|vFl7w;vhZK2lorIxBzI(#}J^VR7 z8SO!_c{5)$rhZW2{EM=++g0rw)Mn-7cxB`Xad_5Sc=IRP;vIdZ?<7<3nZ-jj*)I2& zWBo{LxSSb5PPJ6DiCjSylMmvHOJo+=dq6C+2CABU_uvJ7C8F8ida>oL^C7}R-GO0Z z^tgG$>led`?goYbyZt{W{2Xc^h`nZt2hkVzQZ+EJ&uJpSbHCWgI?u7>th(Pn7`Lln~R$qy&K~ zR@sVx$bgB0brPE#Eg%T+-)|CF)A$L0=G0+YI|T`%jdhL6%E=$4`y~w5 zCMU({O&q|(C9LQcbx(VAOepgvN()jeZ@3Ki^^bP{{k?SkKV_KNFl96eE-$)OIWQ%s z0g;tDHz_y9!PtmY>3j~bgCDZq!X*7!oj4$$QZBV`9OkRd7axc|-L9B29Eq)A&@Lkr zgGC&J!P89r)~Jj8?M{=Ttk~nqV-~@;^@YKaPv1QioW&Rnr;X}@WeE{Jr@%Iz>s}CA z@9(iGf!o2?@?Vd^g6FLl(92svLDVA7CEalmmH&4Zz*MVxR;A2QW24^hgqg9&-#-P` zZhHi{FVgPJ*D49Q9n2Hl?yptAlDy${&CkN&f8D*+!g{|%lX$-s3U};RK?C|33mhY^seV18+}YO==9gf;S&ZDRKl4A^wKs3u~RJbaWbH5iPE8acxcj= zqnjVu*Rt}dreKT658Nk6b4^5h#n)gDJQIO^@&Eby^yY=^vaQOj>r9_B74J?B7$nh~ zJ^JEUWTyOCzB_hJb^%sOOxJjZatT-ILs#D87TZ6*4L^gzo*z6*@adH{wY|+X9>sD> zbyOMle@oaPF?}=)pGea9(Y}wbuxcVRQPvm-kr2TjPad=A3;{pTR}7fGA?$dUIa&7u z9oPD7Ppg>zpc<$$eD%ub5Hr$Xs%|&70tbc3Gg(g}R4Z2lM)Wp`#)5+&4eMGB2m6`& zk&X|KoEAvp9DJ4g^(Vvi8nY6LBQJ@o_O=lEn><*jT9sM#v&O8fZ<39C^h*LkKY?y| zJ){FQrly;0P&kxA4HJe-WA1pd2MC4%ENkis%W>9%UlMw8TxN{M?uSqOkK<2mwf&5h z7ZFyM(2AlyC?`gtOx35=adFaj;|KHZLyEE$ZFs*93c$K|-|SC?aXCk5)r*Os`&7l9 zL^Fu7`ZPkuGfr?JF}-IXmEyu(7dfc7)(hH&WmB&Ta znn(RWA&1|O{y*&R43K07IrQxs8=6#=gA%#X@BD?2p{ZIFbYiW`vF4Afv@7Au6T{(h z@;2eW0z%q;O$-a3rJKf|CH92de*{1zl+p?Vmk7!c{^aS>3bkq6QqR15ndAN%|KMassd^vB}tUSw(&`I-L1t zllQ}FC1`@n!+U9G(=Oz(^6|XQMBF@q1>5_W0jKK@Z@$@#b$VvQU8!d-6~24DnB%s+ z+1{t?KF2TVwnDuW(B~;oYw5de^KA#5Iz$iJGXRagR@RAcFZr9wBLzEqpyH65(H9p?TvjWoXbd5O@D0}t=M5rC|V6qfq$Arl8S^WmTBN4jzRKXo#{ zXC520{kkpcmfQWn17W6`&EOt0IUyAW>J$GhL||+Rjx$|bZ7q%{hY*(a$PVA=ei@-2 za_EWO)6ToUS=7jzy9q(nzBi|08CUT*m@%fMhwlnwA4W!*GwX-E+xzJF%y^T*$-na-uTia zplJ`>XxTRLnD+9sr>ksv66j4qGIV) z$T?tc^baxo{8QfjFEOl&>-6xsiRRDE7|))vXBVv@qHHCfES8OVF@HJHSHU|PBx2%v zHi$0Vn2UD?)3lq9-$$)(=^&~;t#yziMo>JnnJaauz67l0+1n!-cxmMMYm9)f*TRTX z8{bJNmGz5co0!3#u2XN0(_br&0f`+Qa4XDpBJHo#51Q*CE!@_kU>ZH&)rEy5i5Tyw zcdNIazs^SHYNd=dMDtze3VZM9ir)V6R-Cv^;W>!aWK4}KdmMZFKswQ%Es7uN`OwHg zU5}1Q)_VnRzL-su_A@!6=q+2D7he;}R&kx*dj&fq88w8TGbdx{Ie$`+5W&XDOz#Jl zuh;qmE;H<*x1q1YW-i$7;VI2HZOfjyK|i+P?&<j65FcHthhN1>R+NYyGny5zlbMm=wT)*^Hl8`Y@X}gLBe5z3S;}0Z5p%$sc zF;y?*ACx|sMNCwq8noO{pGP03HQ4r2EB@XTlsdB3wKFf;#gDj!<8YT47wso8jy@*2qi`<0cY`_?EG|U`k42KEF&(+^h_m*)=69lsVC%zO zsdp^YsDXDgo2>Z?A}^wk8kTdLjD9d`NsJcVb* zn}x%L4G@@K1Y4p0;i(ct<~}|W7XpMU8@d{@KN2D!0c=MGlVyq+M3i)=`rO!LO55s! zZ5=#N{~N(hcfic}RUR4;p?H}xWUFJopxbG_ImU&4KPYf=Vw=`g_meg)y|OvPU@ehE zKCM~*%9j%w33={p17m;PVLi*xwnw-6>#%p|Hc7eN!oXw(sMn^4P)5% zJO+2{06qK5q2sfi{D_gEj{@IgWSyb89@JH*PU%Vh`AG8kc;ddau{{q;5vDT-!Iwni z&*|}&s4X;@j?MIa%MUZ-Po`HX@$N^b<}&=chBu-U20zfWctq9XqrM{2gPCz0Q6|}0 zppzXgRpqL(ht`+Y?#i*NaP)-H?ecn#q<^!aYsD*gujoc=nV`7nNy z(6j2SP{7XUtQ$mZQLuhephSwXB{LjAid740_H-{p9tUTDBgOei;Z3G|6?MlOTdoQT zmxrZ`x8x)TzF~-HD^Wy=`v%?tk(R%MfMV3XGDZdlJPm{ue*_JdM&OV74s-$JXXxwo zi4L1dB;XAJV#nxG&=hSR5YK_NPB*X41K*JXzyFN1;nA}?A0;h1i(VBa`VvIj6l9!!TI2p_ z{hs;jb32*lkaoD}f6RvuG+znk0>}!4D+m4^tJj5~%xk6UZqpFXw}4;?y6Ut~p)8gfUX%wIEvlwGcY1QRLOt(85*F5Wbx5M5SIE6Q{y7)J)<>Pm0aT2{t@f&*SRPl|#okvV58cU}cmi zYvc6rrD&wkfZVz=?PuW}0pW=G9mPD9qZ<}HO?b6OoZGi5r5*SdK z2*@AfAp7m@bjr_rdz|#X)9LhFxeH! ziM=C1NI}WkdJmH0_pg(h02@uzPXl~roCu%=cY|a*$QwFnk8LbdO^9htdzP)Op|Us2b9%D zK4GycJthyPGU140BNBpL@%rvi;kEU?AqnINybj!uAW#W>zw?94VoP8R8)Or7A%-XE zG>a;SO#!=3)NtVRW2XyF7CjqO*tllH+|t?w+#vUEfrnQg(uPv&IwVvDo|2xJl)xL; zVCSmw)EoGa=7U=mH~>L{T|%{Qb`I|EGM{L_XkK3ME4B;yyHq`%ZBZ8Hg z(hS7X{1iDaqL@*DFX`r9HC+kwmR|;Gc`H~p1+x$z*DV2*dvO`p;;E( zQt>kqA0Dcke{-=MsKtUgT$aoOmtkdBjB}?moW6 ztwic%Uy95+rN8nYD_K)t(KC;lXYk;(l*3FxDUNX-pHYBpOyJhJ2+62I)X)b4MI zR91C`S5Eeto^79A^Kq`AFr30LoPsrEz=QuLmRW6!r0xR?6RY zV4bf$JMc8y@APD$aw)S2mYYS=8sdfdQp)Ax%|wg@G-Q_R=T+%jM>NBT;_gyDjjitK zlJORKws&Q;YVX-7I7D2k$$ap1tZJSz=bp1HiJb7L z|3sd9`_j%o2weAPHk5NmvoCsV0I|?em0^kj=-QQ&dk9Sdj;TFvw{=i{w)6( zFs+;@THAsMu(UwFH4l*V{I8d18?Pl7Z(>vJ3*>*b+XbKxD7BiSkBDKN4J~J}dVzof z?MGwlJqw7Q73K&(bARcEx;ehHbFe(jtU0AsoSV#Gr4e+nVZqeFXJ?#hBPmuW?!5r5 zDzk(fw(t+mLn1CHe=~9|%IM^BUC}<;W%~w!K~lw%B`=@Uaou2nLG0qI5pDtBOX@l1Ms+ z&);B+gb|6mM({@xc|jm~>j^@QGFPqK$nlZIBVx$|36)nF)$qU1y&1|X>_?pog|!)~ zK3kI-?gXJsVj&)(0j4WLFq3b#6_RK^Xa^T6XLYrZW=}FSsW?rlRVc*3Sg+oixR#m( zW?Xy3-l=&pNH&2J$XI6iqyhlDKlmG3bz@M5lamn}AuNIlP=G|W7~}}I2C~*dwsKh1 zehOv%NJKs1T1O|}UG5*jVdX_qV-=jKR$GE~lNfJ}6kUd|%)~_&tS3Zt45R@sltT$@o2r=w<7xuKCAxi8fOIE!cKO3WG}zDNeffGKy~((YaP} zBXuMtsKm%*0YxMug|;jq;pO7jaKsv5au$lTXhf)i87iGot0iP0)}-Fj;uPU%Q|-9= z9|y2}6+Nc5ISmQzP^bu)^PlS?m&T;3V;jctmG}Gzz^k*U8MNm3Q{2SVfBezSW4MMg-70t|`1r zNr$@8^_b4$?_IFlcrL0dB|ZuX|K(b-w88OtP2ZG;<4$VIdJSzvXQXN>SkX-|f#rtF zp)x2CmbBp@La@O`o_VgQ;wEVE<=H>g(&n4^*v-wi=w?liI>^aV&Qe~)^Dmj$#VgC1 zCjC+0$R3jPdEm&CosL~WK0#1WGrqwg^UqA`NzE*pzc)66UCF^dtu`Y!#@Dq}jOS-g zc@iqz+$36-G8}gjYP=CpZ`utORT8v)ZY{3jjloF#&$XRtK!z9(4gVxFxiT=zN<%(6 z?kPvW$k((-S{vMMFs$U$N0LBgoa4$gvFxl>LOMm8F70~NO)UCHw33V42SS9@Tyl0O z?QJlI3D!QG%uX$1BE~MTB(s%GRZxi~td2zmc zO#rv-e;i}D4-e=Kf?BN@F_hY&MHr5QP?Qtmj5!XNfp#awl)d@MrDKu{D+M!mPwg?# z%>SrVfH?jfn^KibMTvZN{LjxUAu6&L+^>%!Kex^%SLtX4UENg%yq>0KdZ$lWuo?S!s67RDO&p)+1q@~GG}~El?;{rgPm>?fs&xP4 zXd^|zxEb=sulL>XjENTMv&+fAIV#4Ddt?&_ML5aBjge?(#}SbkL-?Y^lX(=`1GAPw z9G!_AKzB(?1j8IV=JzGt9yrfO(*qUrW}*mHa{!qr4W$}A!VC)gY zNs}G!NXHUFt^Ks~=RTvw0x9L_>h5mQmxK$aD*go*#Y&EU`@evqTrL4f!NHblZt3hD z#gs8=cCG$y)2F_@=6t=DSSK~re18LA9Ar2EL~#Tz#0uq%5-6nnV&0yVkjQ%Q37f@((v+N#aX zz}Wu_@1NL@!>ml;fQo#Qd05~zZVdIegxk@jOCiUNE$L#pS+pu}AqQhFKqDtp10!>8 z2iP(j2FZ3=R_G;<>9cFMw&?rR?=^+E3M{}97#RPnn{_f{3%UUVs_sYe#|Dh?6-w9cE>Aq0a{3qLG)VM`?jE02TWbJod-I zn9~^ieFZ&9e)0S$CfF&@X!Jj^4-7G8u_LiaBL+86;@UBdNovqK=Ks6{A^huu=#5&1 z3WLBZx3^PAnV;in3}irnINk-Zeu|wv4KR3zH4&1+Yi5Hmtyrv|(pcsztctpbYdhN5 zN?;6FXI-lH#sQsAhpD4$T8;nI78U8XW4yf|>m|T=W`v=lDUnL_ggIgMMOY4Nu8dy< zQx?P|XF9{u8!sM9EG*S?G#ImG^Mho9m{q|Xfcx7~#TkuSS7nju^a@YW4`pS=w zp`8kRft6Q~)tFU)+tOlCFj@kV7?(SNKO=PF;2>zBslw0<0qH~?Ph2ApNd<5K!{0XS z1yqy&J7vOE4}7bbanR!t^6Hh|uA&FMN`P1Gl&K_+PA5tNYE)b_z9}s`_P;LvuLW2- zqUx06tk{a_X_FH&kth??sOIb{cL9d+qNtc@N#bO+g5sopx73OuGPaf%OWNGv6p}J!s*8Hn6lZ{A&V} ztDO(gk_apo`WhI}sMMhW+VKe<@b_qpf6QPA0Ggq0)HU7h?_+>s{xfj`Mw<>j%9&@I zQ`-RO?6pBYGP3J^ogCGt1FpcdJ9|`VRG%E?N4I*WfRl&*@%O-?KYegNaL-lFN}Eb9 z=!u5NC3)*BQ8Mtek`NB#L?otp!;e_Nr8RP~oC2W44qUyaXLgG3<>b<{07XqqP0!Vl zl+i`OTf79U_`@#u>1nPO(}Sw8h}zyySr!Nrd+si2o%KTmy{UWaU*@Ym5~OBKxJq{s z4*KeZMR5t)kFma1{)KZ#*n~tw(!%Baxfrk70`%8;R%8wuB*z%mTfb|N(xyk*uq*c-v|yY;hNlVI+ga{RGZf#r6tswLCiK^uE$yK;zh{l_DBf4 zP#}dD#Q8G9d#Ly8+M9~Ow|NXkVgHk1*Mb;|rV$(Vq@loweBtsCGP9BtU+!&?Z0)fy zcJW$&%rN+G66q=q?r^DUbCFs*u|+n8$B?$(_f5-smEhcu$r0lj5=fPpT0e37gx{d9 zN`3+2moK!&{gM@mfW8INx+mKt#P%ryK^IrOmH(ea)5YzBl;mUUw0~yN_FUm~%5kew z%lAX+ZQNa%LBb|+Od_QvELx-ExndJT{6y(%mCNe3ACxhaqY(5zmCEA*Gz2Zti5v{D zQpv1~OtRFIaxCi9j5i$S*~5)GGylvw^}zMSVB^HIGCW-3F(Ti1eP@`O7sI%iEc2H4 zcg&O$;;|#gYTodsbzQ&=?CmWwA?1wWh%B6q&tVxJRaeBPHd(YT4oh$0e5tPAgk+~Q zd<>|18#fJJUgF-|e6}aze8u1LM9AmdP-o00d5NfHH1fvLOa3`(Gln8X-!Qt7*%O=L z+ZqTms(s%bPv&k@9gcUk1ijn5l1`ye%ZAeb)-rz-t!#b55E^LdJ})Il{6rat?pQnB zGb5Yc`Q(#~kTq9#c?ILr_R(&p;HS=srp9OV zymwx{=|00wZ&0ZGczA$AG9(zrd|dfRN}YbAM*YlPYD$31UA(4G7T8tc@W;-sir^a$ zpjDgxKX|x}f6~wUkJ*;I9CK7$ZqS#I!#gd1)(GM#w0(Gh=Ag2Kn4;j$ocR*lgUg_4 zKc((BFfq&eeUJmm#hfj| z-JoSrZ*){q=4#w#bmkKRf>0uocxM+cROzmvZNBg21`gC^|k5yr8O7?iK_^BE?<*MB*=l(OAlTHYt8Hu!%Z`S$s!6WaNE74DS@GF&CFB z3%i4fGGJjwx&9}l+AjImL}e@B&U9?B4gyeaD_$wCJxr%%Sw;4TI=$tcoK>XRKe|6+fEb+ zeSx7y&pAE&Lz`&kJ2 zORB4I44kssmPvm_F0ZtbKD0ojzG^0k)H(r4+&B`zb>C^3C3Bk$r>ROZOZ1YqrnZTe zj7?vvd!;9qum5cJUXq3tB4L(?H4RlqlL@#0$eZdIRYKhZqoi__rZ)J2bcS1zSn*Xi zNUE}%s3^M2HuA;$6sq=?4*Q=Uh_47CMmk!k@S(%5Y`WOBdOKug7x)TXP0yD;H5yZo z>z>FN@gT^mFse_D*|M zQ+m6gibQJ6FV5lt5Fa9Bwwf)0v1z3PgmKQRwBN&GV69W~azY@0iuR!}LAW4*;g=(k zmyuM*G1|v(`=Al6pHW_ZMMZ)5f@-L%LL2p0ys*prsAx&)xO2Z8h9pBAW+ebBhko zFqZcSpLZCH%trKrFTtXzucJSWKyI5a;njEss;)5F&ZMbA`=e%vF+5CQfClfo5$&r` zO|gP!RKYf{y^Jg(SU3GyOuhPez$x`~4*t1`dhH9qHs@~S$7};j^FhE{{`U-a!)4pv z?&?R;I?J* z1m)s^MSxK5CBFd}lLSj&E@TRAz86_}d}zE01i)*^Z$=L7Kh6h5rqgfLG3~b<=bq#q zj+l3Ev+Suk9d38*QJoyuBh%C0>rspR`PZ07C3mWpnh|^54^I`{w{Oil8vu8A%XrTz zcY5TS?U^*xuk0C~7lCKTO9uDVQffU+P-$O>3vIr60T|JO*^&!Y9NSjX6Uqn>|6?dN zu-hKVu^B#P=ctQoBC)0aN7q}0#kFi*pb0L)EjYoQ1b2509z0m^#@*fBg1cLAhv4oO ztZ|yg-Q{-n{?9r0;ohfysjq9TT2sdybCzv%;RX$b4bW9O;|+Co$xhxl0ez37`Qs%B zw%XQzB=D53<;yf7=el##F3pt*y%?R?S@5oA5(7oMXT){j_QS;(3UQ>~>PI|}shr|_ zu-+H{XI`O7($nIKUaEyu2CiveJ=)lna&&Gt8h>OOA&QgRh-Y?!ApXWF$?WoLAc+K> z62PP#ij^Y)Hmeu%(NyoZw3i@KMHWi2Dapv3#ltG0Ug=l&T$r_vF`~pTe#KBm6wB_= zYIv&TOv!yuoN_e$C6r2_H@e$ERI?Ho?S35}q5wrkeGq#Mh!11JR#dfs|8#scZ5;vo zk4F66s!;TIm3NE%&_sKO#3*@_zyeT72pRlzy4Tqdwe|dw??x#qs5&Yxfc-jDm&8~O zRq3{Q3;`QmJ4T3UL|ex^UEV%w7)y-J(w@Bp7fY%)k*W~MEJtJ_=`pG6^Y&GePsbt; zWUt{11Uo3Q0M+s{-jKwkxuM?fNWVTE#VGdo_1_`l?@RC=!xo5MUn_oGzu;1_9-#yoWCIc|UIsnRVvykW^Ao#FCmx{YTLLTHt>S@h~xhNhRSQgS5x-y6Ry> z+R|vGyd&anJ*mj6x#uk7{YwD@^yS8#v-x#CX3B@7dxivfc&5169z~KTLpxLb@g^-2@cE)cF2qPnO=3i@=$tft_N-c10A@5y6 z3+3Jtfj}Yjvl>S%1syjf^$eAnvgI5R4NW?itttcbWK!HBk$sdc1@H)NVUJR6crxTIEBBKaDqYf;ABxl@On5RfW1AIM0Pbl`NSo?7>y1#N?LlA4%r_S{|jd9=FI zW$M3QunfVR2q)b2`MIRF6-&9Uzb@@6KLLLqlT>JVRElGqJ#C(3*{J^x?@wBFd8#3XYLd zq}t|Ur6*!YsS#H(BDY*9i_YS6F`PI|E>*5T-67Y?xzyptg^9Z7$4z34{zqC%K103w zb(>9*@IQ>#yS;)-ewlz()M_*)ZdPKKF0NRlc3!1I3zXM+!?yj}?M75O9&Y(sY|p>X z)5Mp3wiw0Mbs3@hcrjXW;CsSxnvDRffSywG%|F}wF;8PJ!p){%j#j_2C1aN;+}bYf zWDIf^igYm7%<(XN=?hk$Z6|HbH^30kKL4H>{o?16O`QDeo*6csE;fhdQqP|=-`^=r z8EfQptgNHNi3thPZQokGcy3SE1AlcGhDF5u&=QuF#YCKP5|EFY$ns9G4pTIXUgd8`60#hig1pQ$M};3>Z#j$zkA% zip<0D(wxkB;yaSHKUpFumaa7_Rjm<}O=8>w+Iqab@LEyNs;EvML={&@m#+r=N7du_ zFwid$kJnnE@18e=vFTJk!tNj|=d&g|`l(4>qqID5vfIqC&J`DSi&@mXS?~paEY`ck3Jc$wXTmf z&i(Q{8$_|Tvd74&CWgm3Ss3AUQgWufx0zNxIe*$3da}T-iT#}Zv}*m#>j+2Ub7^nA zUWX5A;KM@Jtdjf?zNH2rV#vCDa%WA(Dcz_U;~-DkkAWyc(S)(}lh&ZRv(;3;CsGfDbGpY>UTAY|C*m4kU?9zl3dGu zfolDi(-&k8j3tb03VpD%)zbI3E^ol4kk49d*oRo*D-D|#bU(So!GU==*#ZM^3)eL#(0AD+ zY?sJY3fA$^^be`L%kE0fEoEC`26H)86ro@asQMF)}bPwlZDc!DFJ;p^&VnWFGI` zsV@|X}Z`xte(R(oZoQ;?HcgdP@5Jx{q}Cr%l=B>5WkW3e2NvK0aS>OW0QTjkc*@!@6)b|tm^tN| zC#Tc3Sa53|d`Q?~+W`@njC?Ky9uw(qwp%5M^r4#(=}%(9cYGy# zpkUWMj7NH5OUJx$7&Lnl29STnrQ;`;Yl!vDO$l%HO00G5tZnQY?qAdW>9D{exbP{U zR!}Z9$B>G8+%1{HvSdal!Bxc4!vN^p9en*rZeAsqQG>B&ezR~b(FIuhHL}ob4K_+* zGI+24&33PRL1snL0onyCg-L&x(;9C)Csc2>xd0VJfoZpD6clU@0Uj+`oSUZ7Z?P>ud*X)%#+#MJ}Hu zDDacXpVRG^J&t9jM&J4zj95?*98g8=%jasN2ZxV#rb3umSaIW7YQZN& zYeM)}0*9(h$@rbIk+m#;qv$Gx;r${`$zF=fmT=xBG=59N_`H-9(ZE*~??e+x-ZY8j zNvA`*vQRg9$HaRz#a-1Alf$2r1%lb5nK5)C0qoI*=B!k*R456VNs4u|I<(dXoxL{a zyUr%XckB)4Td$~HFNboOo`$ZvD@RD>Z3^4Hrdg_ycM>AHX^fwF!V@S)z_iNbB+*K? z5npnAdz%vUoRN7uuN;n4n|vTC<-cL0l!)*V6kHVprE{4=e+ygCiPEWjq_y@Zmq4i(3gUv2h|C-VKU0o<~ESfSi#sSYYV=v5^CY81K@Bj z1Mat+(bB0v59_m+3nU8l*A00mGuZir)gqlHEEDvtgq4~vqi&$p<;0TR2H49K(4m04 z+?x<5xmoH6JQot#UGvt5-G-()-JG?9r4VJO3NE*xq;j1Bf=bbVV)ZU3S@oQ;B_=;` zdM+F3u5Wc}c1Fw$3ae^0O25`(7Re6gPpQ8UrIp`?btvq?#jaFIR_oLg+jd-%S9e`# z$OaBSywhapu>B_?`#1Bi6C=C&NLLi8VmkUApNeCB-)Q#Jnu1PlO@|N?o}NqmYEq@# z+!x~2W^plDON|Qs<+Kd<-R0EjnzwiRJYh^3T&)wce4+fp+x31K@QmqPc!XRh{i!)I zy%Ug&iN_wV9qK;XDrXdqY1wd3HcJjo63YiPuAX_a~4uf3D_J}{1dN9 z32)A^bP4NrJ%4L;NKTBQSD__&D{$Hm#?udj@Fl-86{4eBFZaCH7xUgHQ!(O$w?Qd| zm2tC7j}vAsFpnp{SIX(ShUz95IOsS3qdK)U0m^m||2?_h9)&Rcp+FBGsulHpe26F3 zt??R~ap|_is!oCr0(uY|_e1x+P$v;JNoyKTb`)$lX@OG$E+PuE?Pkd2p8w6MKbNWm zW0d0i+0PdH>}qtXF{sG;`{Whai1JFX@_XXqy8|pcGzIDvi;AYz-@86H@KqEzvi}m= zVqJlWbeJtqq~mdLe5?32_GyJiu6H-bM||jtr9T<^RnGC#jP4&w&`Pl6LH#es|Hdbf zq-xNi%$_D6BfPt%1!{6l9tMP1p;7fa^vp-x2Fb#+&~WPU=8q!OFUg6~Nqa+Z-5xEE z%+`?j3Utv|$pKk)T4HTK`_Qiq=JwV0v!#z+2z*VpeN^+?(?3esC6KTgg{4BBGrg5D zes=YjOtP090XEhEL`arUcO0U%o353hetg|OQ__qT#)Pu zP-cH0ha309Sz*}O0FrXHNdbsC|H-w*gpoZJm=`Pcj)q6d)fsjuR?gLim6F3R8VXAE zq%d-V&HJ#PT)EqMA~f}dx~*M-9z%L94Q6OgCtfiWER-{JEE9Nh__OV#K4G&(vg9H3 zxJ6}6wT3&AW;9ZJ-~M{LwMakUr=kd)0VY>q^s~LaB9ks>HR^Oj$niTX!vfcNA)Ien zIv=kOK{9z(TXuwq(+Neg1)@brBC~7_U0_uj!<*6MpS=UpNb38IrT4e(wsseL-qK;& zTc-=9%7HFowz<2Wm7Xl9`A#yyqv~Hf#J@17@Pi|KtMT%x>i;JOyHb7?5#MRpxi;0_ zsnWazXgE>RHr~2-zwL*0+y`7t*7&h=HB5dK03_7!&{b%YOPdmAinS9)&belqbNrsf8NcqANTdT+f9)vICl?^77G5o zfpv`POgV@V#|lQq>1A?Vi>?d4GF*>&ar5p+o_wDOBeT$fIe=8ZA2!| z_+;Gmf}~f*q0%BPSblU?3|(ACD<-3oLn|RJxRiRCOmBFbWN>~vtfZ{qNRZN=lP%GQai1iG=UM z?B)aT^7T7C4wl-{=ryZ@7@qX~s|8pFlb3F#a>iH+9zDLuKbvBbxZA_%`(E0sm4BPr zQ!2C^EoRbLcUO=V<=6y(Uc^p&n$@y2rSr?dLw4r#$aUk1T=C1 zs_1wcC2p$Es45BMvrLqA`2`~#9fhP!L00dJaFR&5cU*7m?Ul)V-e5UsCWtn#Tp%E#31pBxc?@CG1J4mFDM1m%!UPTp8YuQ06 zmFPdS0PaRBF7Es8C{E*t%J3cDDG5I2Qi$s`TAhWgxL<+z961HYXjapxB2uqeh{3Jj zf&8+NiF~NhA*jSrnP-(Xlq|stdiHE(8f; zny3fdm+I3qBBbQ+d_z701Y@a;Jp_}4KF_CCUT*_t=Bu}iyt=%*oN~>TT9aP>dMYWj zBjXD5A(0VCV)ctQpU>MWruWv6r^_eOCiCW=YPzB_;8E;t>`}2)@7h}>gOPCTdx}!G z_CVQ^28-R93NFcE507HZ*{GrM5 zu0j2(xaGX#iin)x_svW|r~GoA+kNd2_g7Lods80edyn~{`{yy1i-~6A0}&n^)6(A8 zo2Ro}tvNQRL_hvg1u-COnP5KI$kZeR_NX(JEwG0S*~^{>p0$DD$}5SoI_$##1-)co z8otN9R4=Ph-Ql7GjYRJ_+6^Ft;Dr{l3ups50It>jGSvgn$kDfT+XdZX@WTnmm59s3!!`xcQg+~#uYvOh$x%^@+ znUMqis2h<1=$>1iNf$6{vdW+o#C~Rd@d3AZuWDE?w+##&joGT6hd^q~|Cf8TLfUjj z6MW-{Cquz;v{Y1SO}x!5U%1onP6=-j(%G#}If=b-ZUi;;BHaKfU4q*Zh0_NPN`#QE_7S(!CKiFp?n!X_8F!w5`2aJj|tASZt8Z>RWBy(1)+B1+lo*paa z=cT2RAqgjmzSPYfHz2~pa^C}+U`k!Tk$|J@Fgs@n2<>pU{7PGGO5(1_**li-9fn@B zCMI>`>0^PQS87IKytM(B7ncRKpc_cR>`e89^l})BSy2_+kSttXCbzhdNPLf8{o;g$ z?R7$uYo=* zn{vfCXT44Vg_}bUQr+W1ZMTrKhhSK?51UwA0__GS@^}WE_BIrPHk7;apY*3@HGN!j-D^QkZKxf?_%+fBd+>Bq;-9CC_|uCw};eX{YiLM*+tH z^=f2Vwr;*LS5WpC&Q&y{5&h}-1M;#kqM&xVC&dmf%h8{&Lc$rdN@9B<)O@TaX zY_Q#9A*ry?i3{!WO0G}*ihOUqD_ZeK8Ca#o{C)azo(bK~e2RIK#H~{Ok)}E6+kviW zm3|lIOlZPPEGm zMw2S(fw|EAywSdWow3v_l7LP(f*<*z$UYK{Nf#;-u4sxNzwytO0u%XjZU?yzonOyW zLfvrK)!e;Q(Si|qL?piUK6ezh##6rW0iz!>G1Fq{me2fc=~^kROln4*onT zgTt**4y$$vyglh@=Q<5hP?U?Z+g!gaR zmsaB%LJjtZcXAiJnqK;{u63Xu?g=fJ0?u#A%xrM@AIngDsY=Hav+mi|@47E{nPUHW zC|}I?T++dDfupBrCa;^>CdKRl5@AR9y`g@66Z0J!iU_@w<`vy7Ja!3zdyzytP6cQW ziVA~96O){-2f}BGx$WEt_7oHpT*b?e-4C^Ud}$6wODJ$?zzAhorgt%_*+JeG%!(i+ z-)lt~dHxOs<{gYK(T#Q~X`|-(z%bRN&GH4iG`|8HTI!$vw zZ&7p?7-E$C$@wfQ&K;2V1ZLOi6V=0vUY-0wUE@^U(WOP0O167sZrnji!>WRX*r=?{ zUVY-v5x;@f-Tg^|k8lUSp==4)Hzt{*^YC&^6W^z`OWcf7;U?&|$5zMOyY*%*Y-;Us zw`v0-S9WXY)47HIWKlLpl z%?qskESvl2^}%NEp0D)@6LW3S6jDi>v=2Kz5Qp4lyMdrZgYH{EJ7$TnD+_b2qaGHK zfTzkeNoP#3&#f+E|pR&)R zeMz+%i1CTWCv%iP#jcRkG*#0S$)K@sh_Bu0e+4q`WsGTVJYwQWXG!u~`>Ic~N{3eu z$o)K3NK%J0#YLG2#a~eLTfGuBM-RzGQ;$ zj+X%@|s9Ulo6C*1Z+3uL6BTQqieT(>ch_6r!S{{*-cWPC~vmuZL09 zYs2zHcDyS;vyYb6^XkbkJZ`$2{EtY6KyY041M}Q;IhFvH?nhq9j`K`8d;Qq#7RSvh z?gAOCW@9?~tv@MKTJ+qgsaLp+zsG7iLQ->l0~@JwW!i7u%+J@&*UNF>*Ge}5J2@5+ za3IsM)HzA>PatCbLc5Ju==06Eo;aHO=nPK7gI}R>gIUWZp+W&$O8nuD?Jgo$#R}`c zNqEz^Q#@Wkzf!Tv8?Bb|B%|lnc6YyBY7;=>&vW$YGwIth)C<>Eqh+My<<8a4mIxdc ze+Qh=+5JT!v3Usxauy#Bj_)N$8@&c+`&ri{?Pg1WX0n9BkV272T&9SCi-#7s3$@WY z9lz%co7sGem$nJ?YUTOn=7F*9;HG4&zh)mIT;v$j_qd8|>~eT4eGn{bpq`~$8qNWa z`P7?gQt*x+luO(7RRjP-(jR0mwB24K$p1 z&FszUfApI3t<4686lr{MJ>_q(T*gc+mKPb@pOB$6X?pLN|CIM$BXIB7z_$+^O}MqN zv_WRr5=VlLX88IHdoW)MElBY2g}HOrXi2TR#am!sDBn;Y6%x0YI`8!#qdJPGW4+^Ylg#WF(3FK5ZC7PY5=$+^?hB0uiw%EHcJO<>ZTJs)L3x*9rOSqE(tPpV zT=BE4Qhjo!N4IUkIE$18_`2%jpzZ0fVo%#Uu-*;5hJlP5tkGgE}PI>gG~2V0uDq& zj4ijjWIX%3Y4|J@$H`1x-+4`z77fSAt>u@+g`Vpu1&!pAo76>#V*(I8aHwj`jp^*v zw(Fezv;(A1gWxdcTQkrXD-<1J8d_%@r5OR1qBbPH+IoR9(lC=mI@MfU#QjKMLrI1ig1w60Wrd zAn?)$90oN6;F4c+rWEW7mQs!g5(G>`1ZN9-m2dmR;vzIS8QdW}b3c%y4 zooW0Ww`+E>J)nnAypn^@sDuTDf2LpOR7OEru33|f2px)ZgtetxW+V|Bf4;CQ+VA-A zleW@~PcE4rC$1REuuYKUv@H`LS`d=@2vE#&KoML&@EBws}Lf!q3$pyNr?WaWoKD3l9-GXB!2i5 zKBU1Nh@6+@WE9k)X1wF=?ykPc;AfNPM7Kesua`~CvhHey%r#@y%4pzTxK~^NM9C95 zSr&;sPF{}vgeEX3A_bpxWW(Qb)IWrtO-d1AE0pLmzJt7%2~GXpTzHb6cbG1<59S34J36qkjIXxO zCYi23nuv(hgxF%GcJSiKil-w2o};xv&vVi}|6Ol3KwqUp6elHZpPkF) z>q-MTm#T3~_+ixoyYjnR`_85xH}qVScqJy~`!MMR<}W3+-YiR|6`EDM+C}W!$T%(+ z>5eTfpuM(OkWRC;B>7U%YBQjx+PjRIxz1chbE?V4v)1x~b#ktpOtE-j-atX#!5#v{ z;|X~kwLzRJ5h;w3QU1kV5ZzB6Ph87|O7QU5XH>hu(|aK^CCR|7-b);YnY*?l??(6P+w63QM8eJD<*Xy=pR<1wcA3M)y z$Lv58T={aKNk&`PM_s;mMUi-p{hI*PIu?N|_R(a9NEqf*PhB9P0wG859BFi~)g4+7 zPN!#U&n%6yYy5pC?Lm0Z^yAlm-Uib^I8SWH zB`-N<25#>Syk3ZTn{7jDv1sz0BU9Y2d*FYCA6`v$@}5PzG5XQ*(b* z9a0|t9`V9napfgc>Uid*!Y_y)7vBr|Bt|{BcwK}_?JlG%pPU_B7!<;s)6=n9 ze_XssJf^$`H<9Ld-}-_@ZwNS)Tg)-6*M5;e&>_hIdUfS4F9{ly{HCCg4yTdqoX7yt z;7B`+lu(;6sUmt)Wxq2f8Gy8@ z4oFTlI21LXn4(34v&X$gyU#l3_~`fv{HQK05bU+I)zy)h+HBv&$<;! z_Z^P?pP*WW;4(msL>{jBSSr(2d(&qd@w0(h3FLKA$-;Wh?pHdFwy*NXYyT?qZ}fXE zjOlMg7>H6UGNPBwI7f6Z_&xTJF?j)7x-{=5w3~m=!!oS74d(%?oEvcC1;+T{y$2Jk zD9b?XAh-0)V;eims(kxz0hl8V$g*R*G2gK54~E5n7c1z4_TKm!RobVNR6Og5gKQ(p zfjPd*2}R#T5ErzakBlB>sWRdFcV^&2xO-wwR-5ggm3~{D`Glzy$+b5rWwB!jOdUn| zXc|oLOhGkR&f&h;whWY2m;9Q@i6saJ<#<5hIUU6eAcGvUl@Y{31OlEPBHK83zGH&m z!1w!OQ(F4;K+hv*0IF1h%lf0aZZoRB_k~vTB$hINI^l@1*`!3)qjQ-^qR2f-qj8CO zAx2KgL0}^QAHt{%m-ULn*aevGfMsC3!93;GcxNuG|GTlb>=Www)ysLRF!f{e? zRfY~g^T2)abaws#f7a@M6ENnnGg$G+)BBkP{_#%myE~dt0NzgnxZgD6Izf*dN`3vY zKnVrRI;1?TfEz+i@^S}fS?-5fHT>+jMzR|9`jD}Lnk^-PU@uCmAv^RG?8Aqhp&dBP z@B*N3tT*EpHL(htuiNmt`TVbVoqJ!QSF<&T9h3vF$>p`>wWCql;&kbDP8&PDv$6P` z_5x_z)@22?1a1oq{M_?L9a}?|@KsHHub#3Vp}TFl?ACXR`94oJsBqoayc)01(Ddq+ zVRCp(y$`9nA;46l zov=Q<@wAOX&_xKn!7jSi@P)U5r=6`_d341v!z`fihSBV+u-Z9K=#&|YPohF+=j$R%(qO93eGlHAv7+1UkX6W4XTt|wNCe- zP1Ag-0BO;Eb>`(5jP7g&yp5*70VVEasq%N=G?pT^@t(`* zS;_d%AOT?Oa+XcW2)M@6a*#0gi8i^zDyy( z4L*ITJb>;hH9n{+f`O$wh&yTjr+qp_;**}!C&`YtFU+|LZ2v{oe~*Ot?Jw@`Nl(v! z8N?`0wC228GF({27j-@ z=Si$KDb_h2`UH1vZxX7K$q$IUq1;Qj$Ql6$=kP`9Y70n#w6+_D|(gaLvv9Kit5b5I;DfVA0_1 zFDBD^-#SbX+p^aY&!V4Um~_~Os5)zMQ506{48Jv6aunPD!hGNA2x2bxvlU~)bhhna z?bWmTC973Wgm-i7zdw=A+k4h9r`ShOZX)X-y9Jq+`{j9rhE7=xMlO|kpch}2ZFC2! z6BjXLNvZ=z#zE3N!?}-McfJ5Vea7%>k2U|e6;1t*GEB9(@t>3}5p`ZR%XK(dG)nd{ z=?RIdzX0nVnD22uheMxODpF%}+OCHHKslkPW?2JS)1o4c&N7U_a0_K*;a_0Nucs{Ou2j$LGb zvF^!l#F5UI-(L1=;I~`ZON3dJdfOV%=@Z>o^odI2?e3(R8Q2BEp+~7 z|D^WH+(^#bPSYkP?YJZFGi7TcG8b(#DsW7 z2n7JFR8$_y`HlsiO1q{45c?huPvVXl%YVT*;i9%F`U5uG%^n8O>G=7S_?6O!qSb9v zxLj4{ZiB7I?18~7fnpc;^(^)mvskeg-T6<}u<7V4R% z12@d9C0$n>K zJd693W{EI*itat4BBHE0miiDhHc32MfDqO$B5=Y6bN2IHvjNXtiyvmG|HPCrEiE?} z((ai zgGCav>g~MwDXEa(^Y%b- zq!f?V`{DEHM+X+cw*xWjl{#1sY1)prt~o5i_S?j$}= z_d6fuz@w~cIW3^p)bojqnijXRR<7L9vO<0d^5XiAkIAk(3V_tFA-{2+FDW^S5d8v1 zae0)ht?|dxp5^RVw>Fmg#k@WCqPgrXrn1#|Hui9V#yzD3GlYF2-nF;#890!^I>w$;Wa z+D?x0xi-vt!kCy2vJPS zR$k{R&{UA>k&6h@c~l@5{@F94Y9(|CqO3 zF_dcLja`|1Gi^nX;g1vDcH|9-`<8q+53M#385=7}v0_HzvVs1g%@yJ4u(P1TL5$u& zo}_#d&tZ386SKZ#p>oeU z1C|i`x9w^SvF=BX?P6s{JohAPDw0@%=XYcByPg$aKezs`s7C`0l}>8DtQ>aBkmw3n zup8rPYxX%rA_n5=5jbS0&)&kK;^#>$N zNXo4^LQ_BUFIw!n7nw|MEmBlU?}emPJ=MunKV#8E4Vh}{f?3;cw1FSFXk=wHNLvxd zWA~+1S`DOpq3j>F&j-h*<`n5{^6F!iu}2Smjc3sDsHIk_N@e|+oi@uPY`F;s~`dy*OW&BXc4tgvaYUh+* zq%bYyVlys1UxD49QqYEoD_d(_LWp9gU3`g&pLmcHU`jHvKWV^KbnaWeQ|DpQY4}|g z7@A9BGjU_R6wz<#oSG|+$UF%~c>wmf@)72>mEB4c)Fa5eH#?)YjsNbR7uf1cLP*Ah zr(#*BaHJt(q-Gj!O)O1U9@*v!Dl9_3bzE{5ezVHr?cT=Om6oXRdQWw(*(F;L5>NHZ$U10Ok1Z*hD=Y zI!eKfiOe-FZJ@9DJ6p0S$5*q^%W=w5U3ieHZ@iGL=AqgG&uhYiSp2**a!Y6%wa^7>LunQYKxiPD@V)-4Cf%ST|cp4YW$Gxw*U`__1t#ic(m4pvA7d849JuwmYQ}rx4B$3;K4W>#8 zV_e8%vX!(`6scmN_qJJY!!z!B!<}gLFU_^rxC*27&<9PIi~K=mjO^nd`WF2-^zo+@ zDm<6%N*J4TF>bE+89NH_lZZ*)B7VFza_EcvUd0RZ+aSv1asmZy+IkgX%f7u8@uXOi zqR16`)hd!Qu>t2$sNiJ~mR)?n&}kOpq}o?XDn;K60W7ZTP9iKHoiN@TOQW+cN~za2 zccom$8u5i9cmHM*Y$8E2{q^24xw40NSl$G7^nW_LKEu2c!#oGO>AZk@)O#}+)-N7YqLc0BuTeYG zfi7OrZ*!uf5m;_gu<|I*fr}3#hb_wX^@-JYd)k8kn&JYANbIi?qbnixc^uhG935#k z9?aFf32{;pMLYelQstERz6R-zcxq(whin^tSfO2y&@YrcaDlW&L?x5tb`cmH{pGNJ zDwCo>9J5+U=#D=`=qf6aEP0|6wJLqCSV5*)^_fF`QRwZSLNSSdL3zPGENVcKmp4I8 z3tH9%m6-LX_@SicOWhuWo#4s7!p{Sl>c^>Ri4_RdN)BV%R(V$sUvZH}F*`&8d0+W4 zQGdCWEG!%m#77@Ic%4&_WZaSQ=c)drBPw zuP{^VJz1CDxZG_S%U<9YvO3jS!rBM&hpu-&R5`52Q*-iIZLG_gILtjvZll049~XM% z)TOm`6~mwwF0!_lMKn(Ik==SnJKfFz++VarJaf_3c+dmSd=XsNzMyy393Ktqb=p4H z>9Rowm->3Z`J`z_jff=tzZHNC4gPA^q}(NyA=XUa7hZt3v9Do-?N?+v5n@Ahr`;A( zhgc#vA6KQTamS!k8hAy~Fw`_M)o6tLtlsH@b&@6JYl1_kPGFGH*5HJEprvG`bs))~ z9NGFW#?$-b^`$(x;6Yd4lf1_U#Wrtl3)EejXxGV)`ad+y)M8*fWwB=qe{*!-Z`hQ_>)zrvx1K> z9Rm-^kEc`bbtUzGh0}_nq}%jUhC8zR+8i{`$PKjy?n~o-ucv;Z_*dHvM1Pa|@#c7= zlC(Nv5zJCN{eEljD@#?P{)8`=VK*hjvsUI`fk;kQ(+2*5dW&3Zy(i14)e1*pA;g?w z;@^Qt;haH%o}>X?KMWHegF-O>x4aP~$l;ZHx&;}iPT*Vi*w2Zj;D)h>!z0^V3CFUO>!RHs*g&rvobqYkFp~B5Rw8mC z5})t1ubxLXEhjO2Eez=~pd5E%)#BG-y$J{A=;5yzT}ZFhW-Poo3DGk%Z%^r{(b}H& zm<2}YBWa>_J+QY@;&zr~Z_!I=zlAY7FMF%cpYjLX%=*VpJE%rBLiOG7Vb9vp2)S(S z_kiwq-}&EW$K3YAw;J445jCfKM*K2t2j*f0A{2@FHfM%%>>&THa_Kl6H+0^gh_=~# zHRZhbfJNpCp&ke`O9-E_@~|av-Si~Mrslomp$VNv?UDY;@w*W6iM93l7)a{#oYusA zr4pRMcKQ79*=hwF6t{V2V73!HL^}Ak&Na^SICIu+)2Drn+Wj+V+rkUpLnV9|xqD>m6zu|l=2_KAZEhj4kwz=tHX zgp?=(KF8w|nKI^Z#o!ml63fgZ(lPbv0Bf9)@5KM>+o55AA`qHt{}oEu+};F;7^`ku zoFMc`V~^+jT{DzX&_!9+I#}h&j)#9SzVnmcB0vYrTzVevsOeRX=Px?r%d|j+!#2^LBXdAAJjE zIwTl$fgo7`bzrgGVQcH?x#68Xi6gqYIr+)!P);6n;S)HmQzULJsq9xNlyXbM63)ST z6@#SD6~!T|e$QF=d3?x-i{+#V-+PBL$0a24^yJDpfjMWJQZ~`M|5~?&Fyxxd(2^IMJ?i!l!v}$Q>PM=kLcxDHMGfmZ{g`R?Ei;_%p4b z`&@?&npcIoIqFgq;<8yeE-Z^k(49uDd8~LH8S51NAfpXoaCyt<(^1a+Y$XycJ5vYy zQ3~0h(T80p=Uu~I@9Vdj(5-;xVk|H<=IoV=WO4M~)SHM{M~M7Jm+H0ZU5Hauk{f?S z&t+QpRdSbGBSZSXgZ!v{FF$A3e3K#AWC2tEkvhupIeL6K+ej6rJ4E~P7^$RO>4s?b z*}#S6X~VAmO1OF>5trt&|Fu^&R@JD!pIe^6G$y?&7xyX5`M7L=ts~EB~=y)LH2_*)l&W>3hr5^=OSv zC2$3ghb+;OHy__5HDwN*y^-)<0yf`Djy`M5lx$ zJOaA^AJ)D)EXpnFS5goq1*DsyK|ngCyStR`l#Zc9LRvr?q+7Z}knZm89J&YYa6BG4 z=lkyc>psss!|=kqd+n9Kz4qGc4No~pb=}6~Vy6n(E#3ovCI{_b>U&U4(-NS^ws-el9gly~IBVK9s~Klw}GVuRD00n3HU@1-l^uKP{D>MS7T zyO>bZdxY#pZ23bQReL~-q$^s%E5kOuw;1kbLLQJ@_nbhe;77@rWyR2ZF5(yb@tJ)fk89Kdt5 zARo^O$48^j!pN+t@vSh>U3gn0r)k$HG)&$ACu$+KfeW^S!2CK3x@n zg5rwF^6iZ)-R4g3&N?lcCl$_%oe@?P#D%n~h0>Q1Fe9&y;$aAV-#n~sWvyUY13x1F z1Sr{rPn-|c44nY$f%k?wVl*M)(hj%~9iy*xb2a@zw?Lr&{MuJeMB!> zU!Mfyt{4RMlUydUg;n$A%Z-izFS%>Zb)!5pfys9{T-EtFegQ9&HcxF$7^Sq6~ zc{k0T5?cQ7XJ(TF^HUA38PR<7>ffJWzxM(%PcH9dQiU)E<=elV#X*aVt7@;R`50oE zBl!^s*bkP>*Y#BOYL-jCQkMPBZ=bv7s8JpMN;wQmT-1XQjWp!9$H73jRr;BeKlUoi zZUD_}<)veIs^9iPO)*F4B3IoJ=Z7KHR)K&*gQ^i)L-zA}1T4zU9E}rdS*zou{DY3_ zjOGtBgd)LM=YfMQFs3`>RR~3+e?I zz=A__R%rF@;QfBnU9=-XUSafQBzX2v>#Ft@6j+xv9%~w4Uwmyg&iNyD7}(#(@>D`Z z{H;*b)-*lW8eAj!K0+LWR&WS%%nwEe7-cc86Va$Auy743dR)Dene{YQxE2f`M#ToB zw&jq7!n3^RK(vV37`oK8yq;54C7e>p)H84zA7-Wy>ol`Uq7Vgr`NVQDOvuaTu^}f3 z5k2(sXFG!=Tq=P%MGVdO1YpzzxrEVX_Bwx zyN*o00I#MY_xJ(Mfo!{^0V;a335)24KC!e}kvI;#^>l+KMRU4=8Dmh&hA>W6Ko!}P z8oP}mE;|$_UE_vo`j12tSEHS|)YM!)XM$Y0k<4^QlgW-Ddxz0lwA9*dGcCQ}HFJMO zm{|lDSX1*BzkGfu6#9wOx!z2XEm8{BP%$SrXXY3*Vs$?=nBAxJTrZikUQlvXMYo-l z9SU602!_DIp%vZL*8gB!k5LZLQiCmy89=dC=(znfxt!C*K@*BaRcxM8U#7w|=wN}m zF#X;+^QIOPuv`6?{Aw|M3QvLxCxKXT8KE_}qn>ZP`qj$tQp-v}rdijVx2$)=&A?0p z(YnI@uFry^b!0JLv_N=A@mi@3XMY`)|8?x{xlgl?z(lvRlZa7Dgo&&j-Ib8T?euB7 zE7&2@RI@LaP9oXODW9igJNP6>dRj&m_kLy&RGKL*Hg0ELGdy4m*?wRg73~Rl4U+IZ zQI943bk->@_q6=`BukWz=`x6yHvHu{3wqP^G}cLKOs<8=hQQ$0bweICKFqtxaxO(k z7tU31S=g5Y(+eH&wHB8ouUM~*-QNjPP8c8l^7MEXP0Jz!0O^u74|&yXLs zBP7J%Xul|rRlbEye(7=1T(bQGY_ho}9rlsDzZB9CB0o55#CqE+zd}daMEdM#qku7^ z*A+WWGc^B$GBNsC^q#UtSsb;!H4On}==Gszp+@;LxGn!QwME+DZ!%h&!Yw5ynJ^$& z)+wN_z5YeN^Wt)w9Dk=K7i7bzn7+=55AOvotH5&tE~>sHUOfIVf=@6X^mE|ye8nX> z8*`-qcn`Y;7krnfQd@-#zBIu{M{ussI|p>?=UIBCZcNn9xBW(wrv0BYs{k1xg^P#n zTO~u~vmXb9{d&%4vrow2_(OqnrJheyh+adpYflojn>LR_qbO)dKH4LX}8|o z?aMWP!@kg;D!0I1bM;yPH7{>)!z+A0>{9$lvndQa{kGRka4jok_+Y-?4oqLIe-c|% zb8|i`E-j|Np08p$+`y^p;tE^bR7OO=FQUJ23wL>X!ua~I;~u_oX(Q4Bk#F&vJ$gI8 zcTWsWy6JK&19;M)~xCp6MxSeaa%0AZuID=Qj1Pxw=hN#(j8Ptt=O37H!|;)EXm~?P?Km* z@n*V*2$zN=nF21nnR zSn~{bkdr)lD_s+Xnd%c&_tBI2QsnQPZYe)1Z#S~_NfZ+fvVj%u@jIkh?Z*I9vJ%}2 zpvF}M>2(W8Ic7e3rz*YHH;GlzhZ;_`xp*th4Cj*Gc~>XBWUeI4hDK)~bnEn$6hjl_ zF)Ke1QZ6|zt<+2P;p&p+slN&zX;oQ^{P2ZCqi2EF@Li!Wt1}tY{X(U{qptfJeL4KO zyEk&(rC7&18jyx}xzs;tD-N=EKR4~*=kg&9lK%D~4?j4#pv(GSq2Yv;^51%g;!R`> z#;8S&Njr@Ac*&wgD(WrPxzZBiu|b-mjCah87ce;w*wj>9U=CPZvuE&kF7VbXRC$Oz zuQ4NrG%FD-qrnNplt>WX9(b8w1|XqUNKqK|HH_Kml6|Wf<^D-L&3dW{hug`rvv^)Y z_Lzx=3*Us*CdjUQgX>#gG&--By%*`SqLR`)z@liy8j=YjK6-MK^cnmVod73J=Y9;d zig|iVO5I-TdSd*13rJ5XlL9$p5d4lPi$X*+KukEzE~Ddek=+0llVCR?>wLF7&KU7q z`~`9EyGa}#69x1^mD)NYkrg}8g6EzyX_eJt7&P39@42Aoh>}@bYinr;dc9J%TpL04 z{06y)$w11-O+61p_ly0_lm3u^v)znEOi%f`4`z@KI{1uD$Im3Dd%p5Hu(4TAd9%@L zEzMXI3+6>plp62jK5uY9O>tQx`NF8SP&tV<(ut&A0MLRZ|44vE7$AP9qwzQ9=+Z%e zz_9w1>a&Soj^VEyqfb)!lW95$J?nYMQG9X9ziVsus)f%`^thd@7ZmvfOD+0CVq zVgkDZk+_u|DE72>9y|k<%1`&XlR~4iq&O61D7nGMhRsR?_T=%Kk*3q*OIdPq{Qe$S zC#ylrgG&kbr^0Fz!;PC1xf=DzD^xh@^}0HeIf`%JyaO`dMBPo-hdl}F3R#z$eAly< z7q+JSf}}NHc3d;eeZ;Ky!|+JVy(P?@y%{-y8PI_{i$+S7?$ePHux(GoLR=t+G?IKD z3cVs~;)~8eZSTap*3Y$Hxq*mY$zZ(ed6!Rw2;AG8ndr5yTvk4k^Sm)5&B5sDSGzVy z->p|w8*aAQ!wfN1NhQFm&*!lS~xeI-jZ5{ zhh1Ot7S4T#36+ZDwvnmvCsPH|( zr*tuBV@cOJ#7Ni?_Hhs3{Ve+>bFRXOCpiJt_Vasn)QmN-1me9A6uVuu~@y?d-0~ zDKcY#Yn>Ukqi;Ni8)xA@*vELE444Z#AhstPZU?-;dz~&U!CI_?8Rrc8e6~Be>cj0L zSUul&ozKzQVCJXEQ7`1)a5hptpfMqTT*h0M^f4Hd)@`3Npt)!j*^41h9=KVC!|gZ$ znyS7RVA!s79Q`|JzJwy<6B_<=l>C>mU<7z8Cv7UJc&%t>qLCT}$aDH*ClNxoC0osWb(7a)?MIckGbRW`~W@&05r zPp$xYJTb)!_4Vsv)0uCGxU5|Bk!cSFN=F7jfyI=~)e|B>n#wGja)umAm6Gdye;Qj) zhnZ#JCYYy!;Y^Unk`P}Qef%y2llmpDXX{{rG973}zQUI0S;x9VYKXg&*rqH&(%8nT z9Dk@XR}zh44e@blxC}1aPkQ#ny(Dbc`~%mdE1#*USK(vEI9`FPuB;Lzkdvz?@$Hw@ zECeDIcc&*VJofjVfs7H0o=yjIVc~p`EjU%W%|)qKv7?ZO3BWPh+DUwT#teK8X&e6W zQb1?DH`d7rixxecYQ{%}N-}Aj$iJdfWNH#oFpW5Me*u<^PY&TyHSaH_2fTuCS?&<# z`_8{YEE>Y4Zy4YkD zOv%VjmiQZQ^cRx!l0%2tOsee6r-}tTwO1FVsP;xiy7r6_!)iooPCOV&Hjt5g?0x-a zvP`hhwmFeCo9roiV(E7^RlZd5ohd||q}dxa+~h&}KoSsyx+E}m6+fj>`oXA0ekNEp zpZA3rYaeIEnZI8(f2M#bubZ||qaN#QXQDkP)idmFQg`((CB^H`HGjc9Qv+89{z=dQ zsMlyIt`C7KmrsJ0_EKyuX01wspwDrh13%Mf)IFDsp@unn52;%fd~U^51saQ$4Qg;Al6|)(*t8N=gA^gf z^Ar1X&a<*9$&Wm;(5LUblkBVU;a#^6v%OP$=g*svNn*_hZnj>TY!(Zf*eDtW3D9=g zudX~>>bwu_nDd$(!jV%D`%Foh{T?Hki5^lUnO7$@a_SP5;n(rdXQj=JnM z0JgaZvS#hz1~q3??mD=q&y{V~z2|Vee*R&12JR#E`@)BM7*^BaX9QaW zd<+c81(St88X21dBIS5CRy+zqtq_)Ry$jxmmCmvN~6ZO1rj6gYb)?@$MVF&K|uqr2TrG1j*b8s!;qbd!z($A z;YJ}mZM*qUjz%*jOOxvx(5pZ}Wmm}A$`|AN>sE6)+S;XnQz;pVboLLfT!RvVgF+lS zE7 zPs~sn8>&r55E%JSD#-ZH*o*i;GmTFju<7hG9i70kGBWLHVnm%!8Tqh37i*NmZxm{W zo1}Omw@X+SlOMU7l-w`*08-wDVD%@T5?8;l-Sli5I%z1Liu;az@f_EmLMpC~*}vSE z@o1Z2@1a-T-yl);6|^hIGJ-UotU6wy{vW-D{DaS`zqcG)k!C#~j>PvR(t z-B|hx&{tpP^`6M*Feqgt=Y8>uS~zQY4{8M}!Wqannr9`AuudYs&)SR>ZnY&y zU7fo^Lbwqe%hSQjlJM?0p0=E6z**0QZ?>9s%5MT8ORB(gxAOIT5fqUO>1iq;s*(@o zrGAZQ)Dvq*xB|YpQ*e~3Y!p61XDwQqellJ@U+aKv+@B&6#q#_G-Wy@5`K?Kv>mM~OOcR`euX+|v&}84c(8o@`V~8Er3VrK3o5T}bKPD4xQ}z{ zyDJ`njw4U$i?W#)K1xq~lxIf%%0?dYCWl9zo+2#N~nv{kLT(5gdW4dds0vB8SC0eE~f+| z8={30TX37)w$=V{!K&=8y4Qe4vi^n;T7-3y@4Qw(C;i!9ZI_cstod<8N{iZAcCs-EOHpYwT+%JS(Y)Hy zQj&BGq=jDc0PWY_^Kx>AlE2g4%rxfR=b)iV21x8M%*XXe$x1pH(eND!BuM3C$hpy^ z_q^QB;}S`tj82NFcqdE33nrAH5<)Nec-%Q;Y~*$C6vlNuNPlW0?;issaCtQ6-G#tNvU_o-K7AB$T8J0Fy|3Xu!*Ny0+rgoR1Pkh$)JmaWLg;#*g%Nzc^?= zHDeLCq~r#0tyLf+xl$SDGo$bu%WHUD@kwk<+Nr+>?7(wVitz+}K(C0;zZs`dv!!YF za+gys4^y^Lz0FM7Gr)HnbLc);%|WE+w}?--yK{v!Xf3iSM#@*&!sHTJNs^zzI$wol zvvP>O@eZ9;^wy3{n>LN;MPJ%3y;oM~V}gNyT!;oI+|EPOitupgmVK*`(D*juh23pY4q0?tp6vxIP9gtRDIu zcgyL;fH{=SRQ?2*mPKL65}+9|&FG(|o>b+vF<3LTPKvK?P6ASlyG*YT@jhk^Zzd^M>u!|7NQz{KM$;4%Ajx1d53O6CT&aX2N6YOgG;QTCP@cIQ_wIt<)SUiaKJc@D(T zZ%cAr%-zQhEa+)ic<$cpgZIl07%FA$&oVtqpD@;)Y#DIxWw7ERjG^EY@VE>$;#Ty# z^U3A^V96{5nI)$rL_GyH%2A>ae0SvHVKrUYs@o8TCKveog%m0<_;#1+M(WQca(PsQ zAA>)9ylR&dde`ng5k}t})JaVg>)A9fEG)crAsV6J1xr zg!`6gImdd!ni4wEJJg1CUOMyEOQm?a zPRQG55UxCbTH*I4D0EXfVpx9n!@wJ(+3N0q@`)~RI1j@GXqt>nDz<0ENXp2?&`=j1 zAraxj`PoIc66Dw{HxG&yllvIUCMek<*C zx%^B`uR&#E#XywHY$(pzt!i;YL-P0BzcV2)9o8~Uu((V7z9azMNge^;rAntqQ&M*) zIb9Een{M262P|T_Uk;^ zFCjwSeK07NtiOH;mqJ;Rl^9;+NumS**1L7w4advc5f&!wHjUbSldeT>cxwt&dQXeH zuei*-)pD+|YLZJDw%PxlLPX0gNlVM-t%lm^m*0bV!^+Y^IRnz`ota<-~ScxrkjS#hK=u+ylu03jN>rDEOn4Tc^X+g*tm{k$$l=z3u-mto#y*u8}y2RzkB$%=Ht1igK z8vUVG0Qw|A;K;1kb(NWb;`g*3tjY(2ER6`-d`Tzez(D|D?5Fv!@Ay3dT_zFj2I>Bz zI1u&egM#w>1Xx_TA_=*RO5gmPe%2K~yJXl*QPW$-& z$&wIrmepZ74f%5$@pl6VTVw}Z1biOKcjp_khm{vNy`SuRZABmRN(J`Si<@_IQB3N%Y#y zz2A_EU*l#B@Muz7JkY$!o9Mj%sO?|!RT2^aoom;-t>?X#E%-A90cZjdZ)Xpuv7I!Q z$5(R_1j@UeJyOg&Djq3kvcQ9&)R9ho9&@GwZE1Bs=fxYmKO_3EJcyJfI5qUK!X{Zm zH>{p~z%X(DGnB0{gom!iHRURQTsg51i!g+!6p};B*gpfwvOvM}$+6h7i9Ke>1_C|- zL3BOHUEFx*jAav6i}DdGIOrkz!9)Lb8sRa|w% zdTd3qFCGSap{Dsqf>7vN0??Rw;x;I9KHRqBLll1q{^|hDvzzFU$@*AUL*1|m{j%p_ zO_Be&R*2DHLhid6OuqkEVf&Dv$0dz)FC_r~A|dPvOe&x=eC7|cAm$q=pp?MO$;%tg zll?C-0v;HSK_SNbhboB9i>2kLMwhD=MVQCr{5Y{*AAbMm&m6MQJgeNY?_NGup07Yy zn!BTO3Ms5!Ej?hy>Djp^;O*7zE*kG+zPh}I=4GU8ar<*Kh>mSxLA!Nsev3@E-bTI= zd@Q5q4`P31t1j~B;*ck7!fm1ZMUnD(;2#;!puSrwfAJFQG0Q$MLh&suH15Xol0i|V z0cVH!ZCUYNz~}?_4uOZJtO+AST&aN9f05#IK-nTTU+)esbAHUUhtJ>B5Ngz}RWk$B zw6?}(M=?gn&5Z<0-dRm~ozmcGMD##dbKW;sw{cAjjQBjh^}H4%N(Gt%r`;wg z(KOH*85q&WHo#N&3?7VML(EHggD&?L9D7q9Gwch3w5&`|HIa+5@s6Wf+r@1R!fPq$ zlQ{2%{XF2BdX-^mQnOj(>Dh!~T8Ub|3ijn#1^ip~_mVTVl-Ou-~AtRG6Zq#aEexMZ@QiKs}30y>J|tTP0P4IiJ>&=GS;XcULPJR*ON6n z5VI~77lHN{F)h#!NC8@7c#rbYtez0Mx8K~0b^?w!^$-JK#nTE9wm2rkU+LKYxMD8$ z8I&CNO%+4EY&g7iFjNP@ew22hYbxLx{5#|rLOe{LEtAk=)$WJAKGbcNs!9e_YW6!v zFMa@Rob@-+TSE8RnrvcuteKh{Ywnx{6l#=8Pb{~Ia%F+;w5PsIxj*Remh}V1xVSa~ z{Q(NzumZ$$)0KwZq*nuKIz;@o{)w#|5Q%@l@i}z7Xb%xxI}WMpTFzKye$7d-nbN2_ zpbLyWQw1Tc{{rnp;D<1I=h#R1C(1oRbb-d*+gewfujP#pn8ZLJV$cLmXln2<(~WDY zocf7fhb@ZwUAQ}e;aiX&zUB>yM*w!Xf0_JWk)@av_278nyLD(%xmW1eVagytC&gf*Eb5W?egl>b9H4A=mmCxij-Nu^>=7gsPs2dm za=(Yz#P^ekGCnpq{!c zw~$;V0-HoAbF%yOsrV&Mlp*eO>m78Zri|NVXBe`s(1*|mDrE^C0tkVY=3~FP#RPqJ z{dsSuadH7X`M!9V;1M@{I4L2@i4T*-`S_wNrTlWTUUGxm7TzC~?IU>zBB+!ykFEX# z--Da{H_sO<`Eo={1Bram%F7yNo4KrvU)KKX9U%S?LSV(-JSN~uEN$Ad zYwOZq+~Mv@HvDmb3JZq>sLsxik;gYVi4xPUtkY{o9yO0Ek3DqH$9&*m zgD8Yr`J>!kLkdsXyNA5dx-}3*ew3@c?0i(FSEEA z&5tSi&u2zS@9?^2D$-}aA}}2*bpOVl9&h}>JL7v3D0u(QUQ0Gt9lUZoKD6YC%3k!xL|#1v;j6lhtzV0i7HTpkE!1`O z7b)fhFP89a@Nk=XbqV%Y^CpJBmj$$iVVZ2AM=~N7zoq)C4#z85$B1&8Y+U)E?ev6_pdBSYeQ%;wy z@Aw=pxmm^4)nXGxIv78#%znJ#Xu7xpGqdqAjGG@hC5mQ{khKYw*|#4{0}N9H^~Nqx zS&_hcr5^Egx~%9wR}?j<%ZZ6-AkHnR(kbTo=_Xjs-C*lJr3#FF3Y3u|8b99ygGBDt zJ{hkn&Q71)@+nN1-S2KSdo3ALT#s5O6y4LR(fR3G+~=4Wf4{p(dtp`j^-Fp2{oP%Y z`YYcQ0|Q74$)-D<{cA_{`|j&!yLyw2%;MFdq8Zd+&&H*>8KBjNLETf}w=rO0Tzg1> z$fSwuNL9uCj=Os5d+_f0x4E9tQ`YP7vs7kPoL&Cg9T4pq5xm&&eWNe=#3ktgNQs$@2%-`-}OIcL+Lx=c{*~FEjaV zL`zk(pfBL3;o>%OnBl9za3<$uOQ*3Qms&VJA!5p}sR;>D&G&JP^~7N`??#sTezavA z`z?YgH9}fUh7fyUzB`ZddkV&qKFNY=WqN}K4^F>mkO`Q9A%F83y)eS=e2nj9P?X$rzhP zF!H6>7~I#l_b7z1)s1&C_Gr+l=_oTwFYsg_h{1&Ko??4<+vkF+9k_p=PPTP_(J&32 zs_@h+Z;=t7V`>CgnNupX55%2As*~esl;XQzw-GfqH?cR@gfzk-d04OJ=mhdDID&+Z zm%?%khTGbxwiT0OU>QeWMM;&UtaGL<|r#9Ok&=#pz zx7bl;1;hD{f;msuW(&)touz#lE%98^o{CANUV04cFr%}(ss{DxfSHv0CGY*y;D zpj)+){%drPn~iFs2m-l-VDRM9>Cd$a?V5Fb*Z$t(NSYbH`YHli_PN%O@J z;$2+*C*`(;Xv#E9K!}!m6usf@ZmuD~P^6S>e<|#EjryE+5i!@zjXi0B+9b04T^FN@ zn1S%R1gJGh_CUDOtwKSNNz8FZ#*JNH2&N!N@JtHEyAeUTD$y7O3`c^G{W7+YbWY^V zRJGkS@0hp{WMQ2Yd`I@x9BS?-QuUo&+WnSPef_i95+JtkZes790p4hp<|MGcYI7vN zVo&+$MRV9b|9%L(A}vDHIf?hQ^~h`0gXZmbJf;!jzNPywHU2?;L$Th3T4yMwn^ubq zZEbCLNwq~(NcG;{cdu`{I|<`_HZrxnx<5LRiPT#p${v{Cl>d}H|N49B)Iv=Oain%t z#&2Ar_y)KWwKaQ z7ZPhcUH~zH9`XbrRUCp}L6Bn{RvUHuRb(a`a*{Z4mXhNXQ0IsCy%pPuMhKUqR@EEV z!ra3`UVXU7G_s>o@r6vkXnarfpQ!h*U!Op5&zkY?MD2e<-@~s%jt^L{PNfI=u^0Qt zo&Ea2bl7e68=?K{_P;Ks?Ly`=?O5>TPipJ|3I6-_ZYg^9k)Qm}2oT7L23Z*Fs#0_R zqvijTY6#-2{`Xz~HHc3!86-zCS)}OnXbJg0==G7ahWTF@@q08KF-XiV*2>yLeZ=km z5)P9(2me2A{0EHIJuKCAswJmM{>z0&^uqJizW6T}9*y(i0Wj8E$CL^EKZt$qVUPFd zmj4}Xi|b+WFi&Ij>Hk42L_yeoPyT-y>i?61oPN*=pZdSC!v~pi=%v{T0P{W(Mr~Y~ zDX(|*P1e47qQkz>_tbN--qx2hqaG7Bsd<^Lf@aHfIG5TSy9vCHQ!#&-;KL%7HZ9Ol zPC2p*W3Tc3V5~ltEiM3d^f+#(y?dv5%t=-pc|gTmbH}l7sJ^GwV=EB?a%bFf|8Ht{ zID$xgnLXUj=l_ioAbh?b)ANIO1fSbqAN%cCZSdAe46#BA&4Mgds*G*yarBFOk@DBe z_|!(>3a{{ObgC*9u-wr|imX*>N3<(MaYIxkJq?SfnDYkdx|RSisp~HSUH>bzzo+6; zOO_U1IcXc0Bf6f_q_ws%7{YTXXm%hn%;AMqr?F@cP<9 zR7fIzBAo|TQ-!J0YF!iSg_{AN&AM4uPxjS2^>Cw`BQ*k_y3$;M+wuJN;;kMI{hUe}?Ay(=b6FMDAdv?is~EJI?R$#wdXnHcIDY!;P3@rWuiiKz*XutNt;#53HysOkF{q}; zERETxhQu>eYecXNKeLe(kPQDU4$AOi<5wo@0`wd6ap3iIRxb{GvX9?PZ?}FcpaIhx z<2QoO(R*;bR}bQU&l$F~`6-h#Fl`IE=H$e1aU0jv{?Vq^e`sd-KI!M|M(8Gr%ibuP zAoj$__66Vf3}@GsHc{N$w#=he%aJ7$%?Lw%W=dl9*vW4dd{f6pSd=n5(c~}vY|Y!Q z%--b63F~*nm@$ zqkeGnhoKOYFq!MQF}_LodJsSk$$$k^cJcjD&|glqWt(#7Aph>e%}~*P zQQ}PIq?z+(j;a<$(0psagy}~uQ~crj=&3R0F9}f?Z;mu>ZP}h(Wlo#2s1Glh^d_g~ z_Qea*UuGemsbMp$r}&mE4WDnYxa90ik2qg2N_nn3#m}9q=4=Vq+Yhvus1>U^1^)>p zzZ|zL9F(>+`&^C)jS8QD3k^b|jOS)LJUw06at3xz;cHw?t?ex__1Lk%!n1H#_I&SRD0;F@>BnQverrPo==l3Y6MYQa}p7!=#s~e6VSVVQa zB22CbS)W#s6_Y{7GhLhuc~+su&6_2W+qUu&q4V^7wo_04#>buRoi8lcS8vfPH&k=3 z(*{-$*aFF067EM;$Md8P(Xe{}g#J1LF^?PW+2+Bq&U}BMDFb1OlKzBy(NIEJWL5m%QutF&CD|JO&*^5sB}NcpS?{ zVlScb;V&c&*YifpsIj}u9=w_R^m#B5)tElfmGf(SSEr$Lu1_?IS3V;fAx8a2J>lulzc#>%AeXVb+X&hIX8k5S#8U4wr-=p_&-w|I!40v)@es&}&HW-fY zUeWw1P-UmLn)p>dP(Tt_v6kU01W5bFbTRx7&y$34sCLEj)Tt+u@%EnC>82T@k))KX zOvH`tg?M>bE<9n|07KO{B5*!QhtDM5)<;)+rh4koiH-`L>zvdH3C~FbRFM|_1{`JO zFIxJUEx5&JLbU#MWGoy}l0C^v?{Z-i^_wp_O=_^tE@8y^JPztRi+A70h_1e$>RzC2 z*RC`w;%LHc?1&9X-x@~24sbxtv!Tf(61KB{XbOlEZ%v0^0Bq-2j*h2$_g`in+$z@_ zw_%z00lrt{reeKRn((5M1vB}`N76yq^@6}}fe-6-SFZVRc3lSYH-UEWgNKk6Hd1u8 z=|D8XiD87}Cs9E!^=&QrsaKvm(&mEnBX>;KMcr7{@`y;lzTa^)$!E}7GjR{;zxcWj z4hm?*chag~z13%9-LIMZwvuTyqg4v#u5 zbv9|EB}ZyBouq~rXq^A4{G4iy?d|R%OskP=^qXGY0i-oH=@tnQya;h4KXJuu5wk_s z#T7q9SEtx>uUtAWOfaf6oI*x=IT}a8mu<#dqLC@j@YBYti%jMk=(l&C1^K-}uv|gj zVILu#>-p}UB6t+PWhz4O$WN^DdWhHxU3+QyyYxg|8arsed}j3F1I9Ui3dTX`=`I>ks;q`UJexfjJwosFA!0Nm=&P{Yctsm89tA-f@-P%vPHYNT zpJ$pVhvlLaI({0ozwW4wvqK^n&DW5o_Y{hWjag@@q{}##xH0G2!QMAC%4?_|9|KEZ z%gxW%Gw9mw;X-zCE>KNZwzBzUbK;)Fr|K?P79kyO%2quY|AK+Tk+*;Zeg&A+Gl8iX?4lQz$nfxRH`ylTwdX697o5D&!fZ8l(`l0 zq+DUKUS3D{nZ6A?&a*USpdKad&F+(zM-PIdFB9Z{mCx^6Z&fV?_DM9{z$2PeY%Ch1 z=LGo3l6&(1nd@RP+i3KV2)n5KCX%$bh>0r=fI3Bm}zXTJ5a$&cN|! zxJYNRMU@6#3zHjbZ5?7DX4(jJornTgm4H~Y8h8@rCp{93WY>^ z)oe@9qyXr|8z3O9O zK8l$=T7J(Hi!)GRf}<*87umCSBkjgpf=x_Q)Lhg2HhcVSUS^T>d$FvxrXhAbY}K6F zpN4frNc9=Sae?cS!{4Mb!N(M}{_KWMKg#N?62}JS>0*4KJlw`p>pnR~STKu0Lmnh& zqbJsMZH5ExX%-tg@$i6IrT+X;@cC07T>>_*MNLfJ9^3124d zZeR@c`EaryAXg~mqP$t330s4<7G6_%oj~KPjlcqKQ1<)*>F~wMwl(>%vm2Wnm}ymW ziBj#OD+UOhRI5j$PBf}_Reia_ef~mg5tgI`|78uik1VmgW$SR_F~?-Eev&ynKY{Ak z>2Wc$(E&pl97UJ*fH3XEw~5AWAZ$gvS6cBrUoyN1JWwzQUL6%T`lEg{#2Aq{AI5;=0R`!?dKs8)$!glwDIWjBjwfFb(BKbQ5`SX_} z%%3f8Efuv?0Gk2jgPqAl70MGd?~%BDKJcfx2L@NAzo;`VlmTamvc(hj6!OM&x>T2Y z(fegy8$RRe9K10xGVk51h1ZT(6HwTb`c?u(q%zzXJl!j8N>tG@4qu>&m8hVDsjzR} z-{h~g4T@VJx_`axx*w`ITY-p4lZl-B5`g|y3fj8f{4>!PGQH~xJe1J3sRh&zZB7MR z#RM0Qt1@iO#~V}jP$>@xfaAWG%P5g@-Lc2ZFgr^6y-@P_vuXqby0uD1+5XUYzAXdE4?e?7I8myAs@Gjew1d_V z6*={Iiv)goCIl607SC1lhN4{K#GeYLa;@I6q3CK^Ahh$rvE)i>ho2HD6#D^27Wkw!wEv%^A)1kvK$zLVT4 zt^((`5+mIKEKiEM)+%Qz^?eyEiUP_5zUctcug17($C=9uo_c{wZA=tE#?$VXoLA$F z4T8m5H;u;wQoy&xJex*}1*ffH-0i_uERYmv1jeDsS|~Ph*Ycp3Eb{$1Xn7;UM*J)v zFVp^Py#`^(XG3`o+97pvq=Jt69J70>y5}t^(S@~kPFTG0%L{jZ?d};{`WiQEm(P;J z+dq*u2_eLVrdvv0?ZOSrq9wa^MPn0 zMfeEZAn~S6lu*T>RpW1eM12z(FUbtSLmHaPSj!*C*T&g%Hr8imn9SIP8q3pzyK-@} zbFnZaYN<`(DCwAqJTy+pVjNeBgW!GXdC5kmZgBEI4LatV4Ojt}>16Glc|wSnGJGzR zPDvJ7L_+UTAqJA33bOb>y#8a5&@60!+{QP)|J}r?X9t#sNVl=+bLKj|a`kULtDlA` z$4SU7LSCO|CqL5_as@F<^%L0G?6Q0tl?*$VPWlU1`d%N)r1{L+>i6l0 zGwjPz?XtgRn$?~7ev>|t;W^fABQV|!YfvSe1y92Fy? zqH2m8tFs=jL|Gwsx)`Lxu=eZE(%>1Jp63S@`}bLT!Y!-#+CFA!J&W1-p$?=z(InnE zWFHbd&Z&P;BQ{Zm0cbzme(Gk^ZVuh0I=)g5Z6Lx`9Xo*Lc|MSfi!mUn(FyW;i=m5v zgh#~1^{!>MOPV6S75xS|$+kqtja z2T#9R<%yt-XF%eTrJ$JZj1iX&FYL?bFADeo=v%_j>!sdS+>lO#fh}|g{0+B9Px(tx z+UCFdP2OgnT6t02Q8FogMkYx0GQ}h1*HzNC3LY`vT6GBt+*wObjfkIjX%An}NC*Q@ zeaa;HVzkP0E;H|={jDSv^QIuvti*ue@VK<=3zJk5BS_3jFM~8lnyy!6Tys+9PcoS+ zUI3xc^DL6FYw+&O!bp4|R>n`Q*AOE-a(iBpLqF?j$8F0eH@$emEnk^^XNGW|yR09B zxtnky9;`*GeJI?oR+daVJJr`@`H!o#jb^H1Ub2`B&ob$pNzvbw3BME(!P87V5zw*! zIWYU7BRGxr14%@;dnaJ`lToG(oNRzDb!rm`hWQOIHUI4~ia3g2s$?Jr;u`F&K;raS z;oem;r0odz3 zWKcn})%`BA<2*+l-FzsBbGap!nIGO%&GpX9K@_@Eq-F7qI)9B)c52;=k`iwx4B(XM zw5)>lCtKdAj1ilh^rAA4dZa^+s-!$Nwhx~R-m}M8Y3A8XCck;{(3-U0x5=-9Vb*rXK6zKu`i>GElL<}@Lx6b7xqI{&zsc$!3W8jBS-Yd?OMz9kzH zcfz=ZYXzQzVn#`tH%Md+Fdv*+;(u8f zSL=zYzQ;P~`5BGo1k5J-B6yS;yQ8e)HmS$(l-~;zp7Rc2c+QUq`rG?Gp`Qe^l>+PY zq3pIx$JPL1K8W@jaQx3!gE1n9a*x=!sMIe|68#ZnjRj++4QSt>1&xtq6#r znNEHBOmn97*J&~km_NiuinT^Nsa8`gfW}Iiwpgs za#zEba?Z>7+|sDM7uvbsnK2Jxn6+vo_0|e6f8h5X|481mN$OX8vy)+5p+@6F8x+?x zLSOdz;+0X;lqTJDb$%wDMBRCMQXJ-ak_NvsQi&hjmon1SQpLu42g|oK7HU%9?PTU7 z+Ga{$M*}r=SA&nd+2TuC=!dg2r+2)};8Xr3KTWOgys}@NdN(kurGSY0C+T@*4Z7YY zN~8}9JMzD=3oBF9rVblDl9>tM=qX!Sc81LV;p!c@>+GVo(Z;qKrwtq1Xp+XZjmA!P zY&N#-G4gKg>m%_nO6t2!&Kkjooch3!d<@HIcweNACZahYiWQS`ye{o|MSp=v8+`v6 z$K|d-Xl*?W_}gQS66J>gljfd^koPxSB@Wy_-JP_z1q>Qmdrf*z8e<6^R#u%YSm&_M zMH2|Pf@LHG2tG|#M{t5>nblnsu_E`sBf23KG{iApy+dBlp-5A1)$LP(lU;(xiB{mA z44mZ#i&hEt;AN01FTp_sP`#FG9$jn4(2pcv9v@480#Tv!M_2N2ZImjgYg>cpA z%7X>|D-JA|>MgxEUljHH@S%ww&WumF2Y4$6cNU=coN@N(gPedPtrRbe=7>*l=w^Of z$s18*BPoL~A4?Og#@5&#yB(|6mwPypq!A%d(p~qZ#4n~UP|6>$K%H`ni>+K?2Q5g# z!K0g~#hY`@YiM2__(0quvrZe20PEdv=D~%lN&|0*Kd3I*yfnq4e+1s3C~J1b;aFKn z$A?%q>kTY+H<~NHoUTXQOeCe=x~X|^3T2@TXZl-HRs8*-Y=@{FfDkzbXHX)aZbkdM z#YWO!qnOvCs!EG#|)ptKu?o#QvQz z6omOyLCV)hN{#i`SO|l@AN8cckpxsCcw{IM@FZLgmA)~&HH14zs6=(q1XlBxQ&hj3jY z+yc$Tc>90&QNa?ut)GrmMr+vQf#6qCuOE&~MeW)^LZg4^T1Iwy&A6pL)wmDNBdntP zkOj=j_FVobarn6%K3k}(DQG4t_SAM`d#G~yUi!hIN#6X79D^D1>6|r)BK|yiSTT77Hu~< z1%FnXfnrwoWsoEr+drYQOaX?2D=m}uzG-N`}p;d%0g=?G2k;?ljps39^63=knn8lVRN+1+0m)RO?|;8FMl>OtjyCHHcg#sd>#a3*q6xqIDa0JAfqSqZdijx~SN$`2a*l6#)ijGM%-PY< z=W#36z&sR>4rNY<1yRu*Ali~Rg^;*sqBog z`e}boBbCUGl$|k?HWn(N7bkErw+lZ&kzf2|01OVo$mK<#okVTCGASvtzGnoJ z#x{)cllJHF7PF+G^BGbBojW8wx#V*gpWkdsOA!!)O%ZVwzWfv<*&LUndg%%vR=hTU z_Y@6$2Iolci&JkODojvGauuhxrYR>`?&nA_j%&nZ+||}`lJvt^Smuw$Hkf3K{;uMX zY1&2!iso7kZ9p!Xb)2deofbdUWWP=jcyqT=VQM!=C8K&KnlN+w(urjGIO{^waC7{# zINxlf2H&NG1n0QFg}D3I(CQGHw)5Me9-YssFJx@5P{?|}ovW2f-Sl#G){6a-bf00O;N6D>b%!QNRNh&or_w~AvD z=u1P!Bhw5OEwnNK)bT_AB|xk9M0JAxEw~e3MJ5RSPlpvYFD=o1hhef`TaUV zy2^UpY|!pKTe4GnjY}l`uFv;$CbtSHSeO(UZ`lOe7z8h%EDU}w07>Z4OkQGsrn54= zuA-#N&(U3yz|S?29hE42M>eh}3!}$FCT$dN?711ayp_SLc*adPg=y9Kg@EQ*OxYH! zV0`~cirpI~lkw6~K6+$Ud2stu7UUm^)P{XOLG@tvQr$g}{x#i=(+%z>&3Kc2cBLE4 zQ-ctA>P)Eq!t`}=Gz*i# zYe3;qBO#&KhH?ezU=^+&T3wg^E)&8?F2BH&p&Ms*?TX~eViDp`MB#d` z6wiUJ|B>N1{6dhGlN(8Odrh<e2!HtB zdJrulp%b2$cn4RTxMec{+>xRq@k@&KvD`5-rNZGl zQkEKp$;oM9aJA4VF}d`Kh#pf~mXEwhAf2Fob%BL@I`N@n-BIc&i?}%@a_~l&3x4 zL=r#LTq2nAxzN74)g4`X#BaHBiunG=-W=^-Nif+pI%G7?x&GU3 z8L3!7OuCE>6{c(gc)y|<`~v{mw=5rIn$@P4?vmY6B}Z^-4;iD!%HSwHbH31GMVg2p z$w0_5%)B7Jmj&)WWxJzHVL#BNy|i?RdvbPR09uY73GdL@Cd}FKur@-ah=#yy57%mO zM|z}L?ddESAdsb8@i^9pif$vJN+&Xi)uVkb6Op!S3H?3 zj^bwxirPAGPp+kz@Ye!lVnNrn(9d^1_7S|;M!iUx43po3(6>8N{&d(=Taul4^nN9k zYj+#%^5{Kkk zjnvtrYDg`WzwSfWd;9HcjZr~Xd{5ukEx5D2905Bb)%DHM-KSd?&D_EUqL5T{GV1e$>B_mQa7UI7w&dJA$1)gL)+x(rgW^?0U`Dx>Mei#+|fw4ATQ5 zs068`6!Ol<**gRlqjF8+A4EaKK8-QLwy={|dbL^vk89N9E!`;BL?}l|I6e)!aXr_V zQ*uhB-0m*7GuJq@D>io8W}@OlM681LZp?J{Ip#HOk{OBZ#eN_(;0)lsO*QmdxvR~K zL2-)j59Nb!li+|FU^ITx`xBu4BU=@AVFwM4z|b`Xsk^b~QDI$TA#$LrmC@r*kzYvk zz^Vn*4b|3af8QC^i?)fDwW>-r*==uXd6ASmOX7YMG;i>Cj|TcnuC-8-u%uh<D= zZRM54GHlZw$7x_Y8?q^TP4`XGu%(*K*Wr^X02lh>?rAqhxq4t~fUY4(w~`^)IsI!Y@b|gM&={PKKJ)*L2Y>{%>S}-lkG_;<5oNbLFUPje z9k66G-zHz$eiYHy)KCsj&?}qBCiXy*qd#&Ury+RdHPVw>h<_v0iHmNA6s4Pu`d16Z zOilz{(VFUZZ0g*Z`zNMh*ym=nB`NO5bn9P%?y*V-k=a%W!U6l3)Con_q?jIBMw41M z&MjBGR@~Q0GWUJRv75&*SpQKH%O$C1E^K35t=>AJc>4NKn4C>Vr8y^@QHMVqZ=F6C zG-Pa-#mgV=Wn3LhQT-y(L)i`6mDq1B$F#2;kM^a*7Z z%M!yxZn$l?n`-(^K-#(N5*NNL_D#BGic*(;4G^zmw*jcZ+z$5NPDw$(X6L+r!g|*( z*V=ft#6C03U5}5zeAJK$*^`GA>C}JG$*wjoJN3YLU!8M$#5qCQ_#>xA1LUL20y~12 zmJmO$F*oTF`B~ymfin%P{C&6!GqxKQmFW`8j+ zaO_^-P9t(PMY$gR1SnQ$Y9A0f{debr&**ZOWszV(-qj=l-LvKr+xnEW7SsK7y3!EG z-w0^=9Dh4$U*{Py?&g{Pk*F_`-Yg{O_j5W)zg2T|b73dA&Iyt3hm=h~0Dkyyv(h zim^ALm-;;yR*Cpf&&QMa0=~OB6cZMG28YF1Jr;*dPgXAf3hsNB zBQyRbRr8fY{a9>~Hrp3_;-0~B+)U1p=F>i-p0iJO0<%e8W-b1@2p0c+4&w8&H#1|` z@qox8C0H%_zv^!nT8K_^YLYqjkRVy^)RrJ6<*gg^nO&UskSzmWvN5J5EZ4;tJWd^& z>2IAhllwk=T2S)T&T~;LQl$kz^gA%SmR)pg2v>9eQ$AB~2) z&<#j|jo=47{{{kj=TM(kP_vxw9diEpM#afcN75{aGbv)YVVbp7`z(d7wvd=oJ}i~@vaq8J zFC*^ryl={j#)B*9rf($jw`r<4q@W z5*a<(x704-64Lk9)t_1eIENMy_A5WL*GQecVI#c_iXesMh?OBULOnbdi^Sxi3obfP z`?^TM%wPfcM1-m^9kWsV^OiJtM~I<{I~U!u^ytPIlmoBK>FUIU7-@g&F7{oOQ2jIL zN8cQrE1Bcuxu41xUEKX@1;@C27Y!sg2O}LNp2P35y+ZEnd_rV}Zq3S542rk4T?O3@ zn##CClrB3;HBEQdfbB4Q(%+E?yD-?I(p_8Q9?i296Q)fgViJ%4kExl;5DtfL7+WIa z?)!cP^P|L->YXZ_&^a{G6K!&ZDxJWSnqy_9Q8@?4>lKg@usX(+ zm?h0vB(dQQqnDyEnx3qp9~nyFk7&_8 z8|ja$Tf}k(EhZ?9_h4C}Ycoq!`p`ZMzq6Kw8!h7&!`;U(v=J{yIg{2BSs7Gu%8o)f zoFWl;Ea@VGmYkpIu-mx*_WZ=F(RBm+O!IExk9r5?{u)sWC~8@P&+pU}`1~%L@gm+r z8Tt0+l!?}%bLw=tGE}Qu|08BgV0nIPQ_S8Y;8$HHMhwd1i}rH+hM`aLhwm35K0%%F zcKkYBPB)Y_h2N*UCKRD?`7ES|sydkxkYo0gH=75etQTAt6L*BXBJv&kLD^v3n}yA< zK953LQh694b}mn4`20-py2mK9$X)v9Yn~_%>QA{N?3i}ORQT3Fr|$*) z9f86vXaUnp{)=dCvy>Z!)ZCk8cVtJ)KUPSW*yi`#?JESI@W;zyQq(knbGv?2iLu?2 zT|K(Qnv6jjzOh6;hye;BM_9lE;rb3W}~>A9Bol8)Y3fzA_`#2nvr*@A{Ti2)WhPT-sQY?orscg*@wA^*O`mF) z(13xh-5z}T{ocN`z|==eQzP|2OoiIC(=kN9bRh;htln?1oTYf$Ha| z6!nboA65Y*14=xzX$d3gK2GlDHL@0Uu=I|Obsp0p^|sSMv;8SvEf)6_dIHU_GO(%S z{ya3I?!izA58dDZ2~WMCRD!kdiY}hI;-#^pOLG`J{2q#^Q36b$A;8E*AsSGnu%(bl zaN7}G;E4WYne44eO!@aiZ^nikVq#i314?*Xmv+tiv%ic8BJ0y3>RLsS2fepXrE?&D zt_fIFr9Tscug;exX&8VtWrRU3wDn4J2Q@X{OenGMSel@PfA%*rY$`nY_^Nr(n2_<1 z76=kt4{*1%?KxNM=;TLY%C7`vGMl|yt{0i z=QJfR^xAH*ozn|X3G;tkOnh^Bh$YGK38L^TL~QYU;ax6(7!q6bDeyJZ^!4{oDIXz0 z@tGi@Pp7l=N*D;a-(D~b^HAj|LtAaLJwA%__he4|skmroP>38D*mO#mn}fbK`DJ{CORtm5ra)NV zRY@PeuiE(9%Jj-Ax&&6JYAOBRleQvgb5Q6349tV}IzOaJ?A>$ks=J9uf3DKMrFy51 zowcDjdG7B{Dy>92Hkf_QaB2@YN_!+lvIbJ9!gqs3;EIO4@_A#6(uL6?VD-rZ`|Lgz z7@p}0Tm~nL1Wb^l$1qs>D|E`Dsk$*sBkGcfxaH9W`aK8Kwi+&~>=KZiSA3b{j_B4W zsoG>>d+*_1YYx7a8eWiJbq#KO=RU@qnu@vR8Rm4duJJLPOsmb5%@l6WoZ@&7l@6X;Gw6F74%KgDKx zspE>}C9X#ozf6BBDnJoPAm6C~ab_b0!8^eEN*nRkho5&V+G~ zhn5?S*1XfP`wL|NdX~Qw2rdK=gx@%U;HMr!ZqiUdAvU*@th~C?AOiOIXvFT_W1&Z0 zt+)IkLuGr&kv9jew;=KghjX^KJ+A%XpBo{s=GaFPlWXhwb;oJ`#6{<5#q&nq!6;mQ z-nTWT2#~qFDEiN+YcMbE?i?&%tJOLRKQHn&+kcC8Oy(fPY=XfGXa;#QCFERb|HF3*9-+fM$cdPwouC7LOwwBM>&K(+z zlwy@F#1ZD}Nj5ioukX`H1TlF?)%ArBgRjHgy-N4bD`;=6NoTL`K6Ui@H&YT$r1~!E zgi-nS#CQ&^-97(7Fw^fHw{dY%sCduHAMRK}J`_JTVJbF`Ktk5;F8ZYDi~i;Bp&;2c z^HU9*fg7g=wxFJ)fw@*90zYB5i_I@+mwz;J)i(y(?W*Sr$%TpMN)a>tejaTwSTr;7zjd>FQ;%>n@G2xU>mfK%LhchaKIg(YH1y!xl6?ugL*G?gZ9SSUfz`p0>vEAv{g3+RwaeetsPK!9%$ zR;pu=mLz@o30WSOvjJ8ygi}{20V1saj-Q@}5742zqhkcN(cJzA0D$~MwBb4R$|ozv zjbm{tz&$R8+z^DeUM-{IL7y~avviTTJ3w80qRC_>y}LnEydf_rM|5P_fYTuaUG{ zErYXq0_4f_;BY&a6ed;94OPa*_IL73hgx4J$Rx*bU(c!@WQwPQwzjjKpuHXe_MW-A zUE8qBZAO_e{1Pwsl&j~ZBl!Fkf*#lqBM9jO_OR1KQv3u?(6LpdKm3(RjYzZkZ6u~f z@H^mKZqP4KiQ~kcSSw(8t>C?5km-|qH;j@P;){dmis0}*dmdW&8FV9W85@5#FgyQ^ zB8hT&auRltkZ)G+_}Am+rmChz;u6qx70lmp>g#d$2X6m&`@1d)k4tLSx?lR8D4=AU z=|@!ZsVGlRf^n29?XO>VKfWNfT5z27M+B@)k^W<@SRshjSmuslrCWo9#ay?RaN4Lk zb+tnS1_8bY$jA!yP|^t`f|4s@*^{)U-E7VlZ@PGl_|SjAcNF3{C05mKVST7yuN26N!UjIAIiG1kO)tx_#NecH(8kpV7WVqpYmngu=oA?53r z?9=zms1v z->k`xtfQ9~@WJ9EQ%GOJ=+)n(P`&#%zWMy-{hyfM%7T9wQ_l+bVBrz4b{-0*d%utz z>-~Y~mFaXW{7f%a!K~SfWv8Y)1aAk6-*M;4dR=7@e=w%Bhr$0>#Uj7+NJ2J`;68bS z0W6Cvi`w+cgb`FTx*B~PezNWMPq|k!g7@|$<`cEz8l2A_vs+TI_}TP7GtpTF_uMFm z0B8DrNpK8k9d9o@-{xez)j+2~$M+A5jDX%@Ss`@@j7?zx+Yg4m)NK7*hN@Lnp^zVF zcw++FhaCMc@t&vY{6y`zKRD{m-Z-@cD=*7OsC|OHH{%8BFR%2M{oHfU`0hH+1RGUy z`0w)geV+7}c|61Tqjqn7i4H*yqKCY%YeT=zxFa4KJMaL;^1vh>D3IpKP%PCIU(_ba zYx9=w_L*?}egER{i`eRZRx#d)mJH_zBENRC(+I8BANT0W&-x}4_ge$Tx1+WXpb44M zJ%e+f(zWhe#^1e zy_327XEA^baN$1^9Li-Jf;g1OpX93okJ0p(gf4!w&j8;(2|b46Ux;+EGML;-khaaG z{5_xgw_6EU9NNR;`rRUAP8~{Vq-UK8v2Jdb1u3lfJX-YlevUr8UeItPpNBPmo$Z~a z8$U_wJayiw&MX3)Gie)|Tm`0%42VNBJ_rSW8l4WE| zNM-lI+_e(ZQw}SbIB3F3rMS)=9$CB(MoZw#4sI5uCQqtbPo0~PJ8lYDUld5=PG-j8 zdoBXVR{H%`51R;gi@R`a@~~gU+lST`Dcr`1_F_A0l*%u1|Np=w7kCH()Z-#Jy|>(r zw<5I*d3hNgp2WH$;*-(X&eN79>ttUZ?r5z0m893<`EE-4jSk#o^zfURM`%9Y@`P zkiE`rB;oimUe0LIAe+e=O ze|MR^3US&x1*4Fj>FG0WpIw4r5}A(#MNP!<=xK&ZZQM_ZdbE3C*a>bh7ZAY^A@L2 zi3|xByLJ# z8N@j}#)bwQ2x=J_u5dn&rG;8GV8Sv8up%~ULDXj`S!B{5nuwD&(OqZT4Ak30;{0bk za~$)LGhQ6XPdNv4qAaFCP6b}%fGh3d9=HM4-n*bf@Rb~m#aMWf0iiyrtBsA_?ie1% zNNsmA6KD>svYRaq2;8)d3(*L@ocNK0l_0T~r#57oJS;qn3g@d|S_JMUTfJ^b)}}pb z_yv5KNC+ja>K3RYy_$y~x?J5Gp{T#&SZtwAz+Qx=_3nPA#fk~shbo4_^dVKHrRp>s zw%+>gC(uN@qD?MCM@Y}T^8LGuld)_U%L|^?3m8~PLOAI$R)9P)o{+UibG z%#c+4qQ;5-{iN8n^CZu7hG|rQ;03Yk76{D-v7)fCFka408Ukm z|Ma}<@v_A>%Kcza-U!ln6{TO4%bbrXme6_IfF(y)i^aS%YH>uhAqo}GkACQ0wwUu9 zYez2%sn8vmHm>IrQX^H!R`bk>tFvFD5KRTsaX!@v@8gS-A0a{%SdZSyv~NJNU~AOu zga_jpOy*yFymXPAqfh6TsR1$@WCB30o$8z0;>(i{jY0covvNkB8uy=N8qI9krcv$U zul$@_0H_1NQTXkC8Ym-Soz=ir444#=z7WXxul#nB!BI5e@*{x|=qgfitBXbCd&g$O zl0#F~R{N_|P21^I>s#}>*F>7|*!5xnbP($Ld{p`q?JUVFw@u}Jr}{&o>-ub*RkfeT z+w4>9Z~M4=pH!`@>Gct<)Z+t;R~*b=@8PK=PkqD+mY|hjKBI3j2?y0`WFg;$hpjhd zafO#c-$PU!Fao5`7b?`WwAX2Y=soj>ryKuhS}cRq$%`ieeoVirj@zBwgwqMHrmUtj zn^yIvc45B**KWqu1zjrAj}^G$1zjtHO8bi24a-Gb)(r@q0T;|4!djjMQ+C8@h5x)Q z*wANZ-0Kq0KEf=YSa5e~qIMNg29$|o-CaYEtm)Xx!VOrSdo!^AIA&mfZ~fffMTAs( ze3LSvdWXh$kg=*^kx7e9l{|0oyWsa!n<-czU%*Irdyt)>!I=8IV-5wFpytzb{xV)j zCR#)>onC+pxxyn);XsRUWDX1Z>vl*048)|`+7D#ILsI&;!3R{$FvPWU04?oC9wT3ggSr~h|1NvoE){x$h9 z+VIxH;_x0Zb3p0konC?D(}aXsVs>} z+b>8t6D##>jHEWms=mpGcmj-RW7EJS+#-|Jq$%+^7LQEfAr9kq9_-`42^XIkF14NA zn!c+ADo_=|@cv2B%j`mqT+&~*pAGnQ5nO|eCWQro+rCxjWY4g?O*KNZ&3NLiz6$sV z^2!gC!31YBw`rYnh8pm4&bcEqYr?XvKdg($NT(-ssF!l8Dfx}eWeHCiL&D7KspHxH zR!E!iE|w753PbSNtr6tc?H+O`#^GK*T~Py6R3Dnx??!&NLqwg(8yF~102 zosJwJ9aUl@X0cz9b^ExlcNwAt09^&Kf3~xrSxo@%$;kRo(j8PT(Ra2TvapOG-}I-4 z(lg?`@xf_h($AoHWU#LRg`Xhyk}%5e9$t>?6KhqrN1~NJiS8x5Fn#79blwCEa-KoL}(Mthu89;TKc5u!oIPrTF4x114 z8OnjcbdIFVrhTi_ck6KK4$G#HP4rJAAakwti6FfX z!c)APJ?-l>l3T9AY76e0((FnMD>pWXE?ZZhLot=evM>ja{w7YWuv!nSRitld%yH={ z5X=aC;6&Rb`Sd)!FsIFzayq}MUFbDv!7}=CY_ylhW~}hJ zH@2pYajp#gnYgR=6OY3duaMaa5;RMAn%;r>aaZi?xp?T~_eE5rOU#OHqCY$LaHJ=> zJG@=c4-Qn;#Oz;cY=Z^^^{@PZ&@GMRU<=o^?$9BUpgv=6ki{XW@~^ zTA`;#S^n#O_r14!cbp|-{I&-lR>#BAyhb8|!i{^Uumr~P-FY?EhDR2#Or@dK`YtSQ zl}=QnQ;(|qO^M$u%oza?gWlEPNefjIE+Ba}# zv~sQg7t~EG_X!T43kR-ZXR8>FHA^2)qyA#6f>%qm=Br7xlE-<7eTtbV-S}E3-({Qu zXiQ;Pl*wDBdI)c>^g8g|(FeapsPPa^B+EE2+QCp}wI!$)ui3n_rQ86lr?Z&CSm@~e z&%5LK{h?U%hnkG_pUjezLS?Zy0B{PpUk-%^Wb(PVzd4=FjlW!a=WM^db;avc5$uNY z<4KMl9HCzsJI*vXNn(;YHOc-}@b$$%>OoBpjE(*C1B#B|l zMy}vCnCL#nCnYCGlb;}I13&xv;XO!rMC#@Ap9*G3#0($h`bbl~-;zdDY6tjO*4?sX z;C|(0Fu=_k*;BIM6s62L znJU-HO^Hu^tBunA2)ZUB4<9I|HLkcr8D7%!qYkrsVcfe@QchaU&Xu(4MEo0U9%mc1 zJyChi+OX@E?!L!}-vx2G`THKYr6%Mb8~=(*!M^1ALoC1IP>y-a_Mf@5S6pWfv4v)W zO}A@n_n$-1_CJT9VSF8`7ywfkEWB+%7?2a7lDEHNLk2R3*0Zb+WT&|^o1Izb#sx4e zO1e6v-{m@&-x<6IxibvrZXtmm6`mUn*lUBRG!dF9@**&Mo#;-?r`rg98*>6H@H+2o zK@iaDAF4&9m*}XMVAB|Iwa!P5bx^d4VHVuehCX(e7L(3!LBA`LtH)c(Wft9HiT~x~ z226a-3*Z1)(7%HHDz5iZ*;HzONz2vL0c)8W_VXf13;PFrAHsHj(!~Pq2*3bGxxpK(*w4ngsLZVlskP(04AZ zW}J&_RA{?8%0~i_xzbjADCsvDuHlAjLlW)Loh3Xgb;<@=Ml+{aXi&?9D4WWLsd)um z?+8h7{PeI}%wKJTjd~}u8zW(MMg0NLx&?le-c=jKqQTtl1{$LSRFIcy0`~(!_xDn+ ze-ZJYuODST0NtV)aHu=RqY`YdgXWrv*-8mfm}2+X77Ov?)K?LH?Bd{^n@;?nwizux4-C+nGLTmVM?(zU?~l&%X4Ni;P!FH z?&L8361WmsNKTbyF#e(+A8*F`-h?LkMn+OPG}rz>gzvswBYArj#J#PJb#C#!uLSQ{ zrf^q~Ve)7qx4@)AF{ z!kT)A~|Q!~YNc_a%=Cv5;14K(0UT8qrwgR3aA1Q@Pyx(TF8IK8Ue){|5%( zzCn@5NBSM#4WggU?CKYw-AggUJyh=zsy3A)-jqI~eT2^EaC9uuk9_xW-Po<@SG%D7 z6U&-b1r=_8>5mbqAKkVFiK^5iG=;Pw5#Y)(9aJXljkwUeiJ836YdOOQb0=XK@IwTA zOWU8-)&R$-{M#8Cr$0MyXGy-OdHh7lMMyyT%{k)C9Vb6ObZ&k4@a0QYi?a!6^$YgZ z=E|L-;$}I(H`E$w2o6ugeR1JEz0|CK=GJt2Yo=A*+MUUw-x(h8mp1tfR?B7WOf$qN z{GOmF;*{)0Ns_iw=pQ1FAHXf|U4H&^4d(l20OJ$BIPRbdiqJAO`K5QJYO2xej{M}Y z-sI?$Nvu(&rQYdWS0lYff=IKfvU=^SO#C-GZTrd~ZD$*#q3U@sHQdSAd1#Z6<2+GE zcGUyumMIY|0r>35FMaFCq1Z0)Dma6Zq>-#pLfUC=_pD2q2Y^RNG)~j44vF?Cps-C7>M3cdwz8Q zVt-ehA-5dQ7W$EtcKXK++coBrAW=4sBs7ZelFz}pSE7>S0^mrfPXUUM`C%lOWb8qX zy{(TMUM;5g@9#Vf?T_bPxX_SN^lvRQ?Ev7}+1Z*c;Nt8om`Q5=L@3efRTE;(R=f(S z9EJZ%^i)NecULjdRk_`fvAIzG@57^P*06Wm+ysbcfpl&SQi(qg!+oqGz&&20AL4~f zKJt6paVdRP&%r@FRu7>n?!=DT)u*rnPP_qpqGpH80h_Av=iRNJRjY>)bZ*h_T9&uB zA9RkO{a2kgqYCRh(%I*8LgD5YNuou}BO?;z#AD;3j50@Y2!}d75l2tQyBV=V;V;~G zP34HC=-XS5inum*)Yos2Zi1PpzltJMI{;xt_n$+aR7Z}4ozR(HN#gio7^Qlch0#QZMv0gLaY8^NcOPFwpY=-`xz@~M>w&L$CxV7xoa8W!d>(FwXO6=7NV>u@_Y@g{QSLsK`{uDH2hVEzrFpEZ0K+gf z|MiQ{4o(7iLLJVewCo%dJ#{Xav(F7-hQ`O%^mKvS=z;nn=OxDKTx7K{p0E%L`3q9& zf>Sa9PLHW6(icuAcikVV4?T0Jk^mjPk3@HoG#dP^-cTU@|0yilgKAH4BA; z)gm~oF!Rs|2&!vS6EJzQbov~qkZevnPbRr2TAA-!EtC*bq8vpGRpfi$pxk~8Ob~p+ z_C6X*xnnViZ!?<=Qn$)b|GWVW&(A*qF;>^7AVSkRIpohJTlZt@q0U5ZP86bY-29tG za!bl)ruM!`ga++I05_aA9bCZyPIi)uHc|zl7L7BeNCp?sTK@pzE@wtBBa9jUo0ijZ z-Qwu*j^oW89NH+{szLm`nsu>`GQcu%g#^o>aE?nj5z=cIo>TyXRo1A`(f3(90meKX zBMn|}`f4nIy~dv`7bYqg0x5W4!~l|=HUYD?7)4}q^hI>)N*8$r%j|o5N@X! zP|v>J#SL^iqI#>N)>_wjSb1s0o^nDQEV+Kdf`kZybr9bCQjv!w21CUE!WrX$M%faE z(!oF5pVr&EGUjPQG#C(ENpGPbK*e#&lzIn2eboFow%f%-i6$Sfxay|JzN?MELxhT^ zhdv~Vb6wYJ1d=Y-<04+wo`geLPT)Law}^d54OD^`aiODcT%ga<^mRXi`fNH=J>ISb z#6U!CDf`0SBPDGcA`m=&&4mbO^lS}Njj-zhIrt>UeRrO5TAdoWrt5K+4_934!$*9$ zp0U*XhxT*@H_CXUKMV~>9xLz#FWax$yua zLYC4~z~VWhvA42vLZyDExGx9<+M7Sjov+=wrNY}GXPAI_qGuEuPnOeMuxC2zIC-%j zS!>z!-MuCJ8y!1QdS*mMsX~a2=1|$XZcjJpQT$0Rd6$? zPetOz<=K&_^lgg{BUMd$ph;UPEFp*BdPz?!daM3XJy93-VsD77!~fOhH9llm`#Mz@ z8fD-7$)8scmiu$>*ulR;LcbA9Ge~Cryx6+curJi_j3Yb4g4{SC|Eb5Boo|K8By<~NxZ-LJQclkw>~?^J#pd@6|7g6l$^Ev8g0 zFy4tdcQJIMp*=mAVl!)56}Ndv%7$SiKupVNY_P(>Cpy!HDO#12NI zHh00FOLl}=f|TLddwOv66yEP%^tSHi$=0={mSfo^BNu-KLDaJl-iu&~ON8EI2WlPs z!v)dtJ=BPf9Xj7g1s|2Lyn@96`>VN`G^9;vsP%Qda%`2^Q)D@^Ww+fg^BOTht%NZv}QpRs@R5I%a$F-DEiOY4_s@W2NEfoHx z9YhGR{j4F1st>7O)J>BVQnX!?CyRneJn%w_+`?hSL3i<}k>ub1_7y;;n46(v$$H*B zMQ|_3*;mqdlf)c65kdv>R}EDebjuSE5Sq?DoU;Np_<2sFn0`cub#28p9dMs5^kXag zf?iJd`fd%Idz|rW>Esr_Z<`g&*Geo!H;fsC)$xQpq*hJM6jLq@p6?7r3y9|samt3| z3>@zqmpV5>KWC$3yAv_?{c(YtY-Jz&8P|BS`}4`dDHO%x-X<>hm&j~M;Y!_RS3op+ zJm+N2UjRaC&yU>#2Qpf#tS{l?SjimlJ&FD-g%v;Qsq|_@6wIYA{VIz@`rAE8I6B%P zB`6z(R%OOdHg^k0VGm%d~MTg`TbgR6+A_%T} zB*61--uOvaqm>2ah)NVqRErgriIx20zq^DcMpi$q7TqE8>%lJ9o+u8S(QJddvIC^0 znjR&t(>*%+ft9<wWmBM{(>^n6j`LeWx zEu)+rwR?uqT;=`cPQInq#r9#nGv#@aE+dyQv#Y{ou9XI2a_M{KTl-LUliS%_qO9JU z1k3gKHKyW>`f25ewnxgJNjHiy(gUIm{++6x-A^FotaIMM(ny~g;L=1HGlVxq*jGb& z-#W5N(6hV16*GGqcS$giw#afsml&ixNX&%L>G=hYmsVey@PHw8P{0~pJ|$RKv{np7 zM9q5+A-D=R7egq+Un7`dc_9)(8*Z&CvZpVM{WbwdYW{kelpQ{3@5pE%au-irMQUZg0VPRi348(>!1Wt<3@41+4Ef=IR24u5)t7t*SK7Fz+J7vIs? z23v9m$CCOKn_ojIb8Q2sDhLW6glC7m^-dP#Q<>$>220g4mp5z<*|~L#Ln1B7XjNZ5hef9rP z^-k@1a9!JIY&N#d#)qAz=QI@k4DrCj(2|nw`o?|ZbiZFrUU&N4>)mdNISt27d*AMWSU9$`__T{NUDAyN z_fu?o1Hj9ZIN|z6j&#=v#I`y!7N^T|Ps{_Q<4+x4XRSjnDsJ1zR8N z5AP;gPheykwsd}UK5r$6N+nB_L}wY@*(Vt7_yJ2!e|^3ifAs|`Dl3zYC(|eN20{XW zSsqoZbm)fVvLmfe&kq9;`C=m@;TBP4I4-$&3*P9e|w+ZhtCQ^bU(93e2 zE>aDRPG<6YtdE+@%c;}&3_~i1pPurBA*4vG1Y9k|1-S{nW)I8t+CtW^6Y?I@Q}u#} zlP6YM&m_iVq+%?Fecr_&f}!>}aPmXJccF$Tal^g_`lbiqD3fecl%crhJ@l8M@B5`Ah;q$1{EkMEMS z(Q4X(L6Rgwb$VZ@8TP^*EqO-4@@ZZ-L@m?)Hw#8HA%NY7XH{KH%Kz=5So|p5X(-GW zu{f(xnNk0vO^qnmt~vCONw}|<^TQKiNIi&9*(_`N4(kQ*mfS_$MWkD-x|>y0Zv2y9 zy4EGiK&*<3Kf^;3x(Y!02S}o@i;lH9*>fOA4j3LlYAh2PZP`B%);mmgvam>hO%k~$ z&^)=_r@D}-{e?fo7Dv8vHb>x4CV=`(YJ~=nJEK(RDC!jd!aP;tP=i2=j+b>8ed)_0 z{|O+GC-C`<5MnRkd$UN(D2QAt9$^`wM=G1E!nHjzqTkrN4_N(uctCt!EU&mtQr@#1Sd6>2vsKZ#p zzy@cbQt)PG#nQ+lBjz3>y^NnHd+*}T9bCjXP7%PNn5ETy%|{FQBQGo(yda%JlqAPT z0e`OwD7B@4rq~xb@vu?v4>KQUWY?mbG{F^K<(niOB#@7W%9lPc?abuf3yyID?g3TE z6vIh`(w4nOP(1a*#tTsUfZ3mwu-zEsylHjlX`h~VMi(q z0Q!Z&XVp|R^@)Ojhy@005>oigD^~82MfFFS!%y1G`)E^A`K*|Iqa;BdaPD(}~C?yMITd&?? zV$aBoJO5${J{9E%NoeNvg7`en;QNMx#`bi+u1eo_LVUVh60>wSlPBze43^%mZkW*-=tj;g3?0TUe)V==ka()uGMf{X=HUc;8;&>Kc`3v%g=f7&C3 z(`z?r$#OrUqA5D?ajGf8fP+Q8zkHrmw;K;`a7q$Df89Gyj~=FIQ_Jz)!?DOD7!8E& z-Yur$XKWfC3J|cn6TUnP?{kJx###*GkOit z@&dXr5nQMd1C9$VVWXw9`*VLunuBKKO-pVr*-A>r+^*b3C+vx5QW<9uy(nj6bup@< z+TvpWynK(^L&}&gI}Yo1v>&!(tj(ECL(2@#(fJW+J4jFeVl{}!uJexrau1i|jYE%| zYKkux9u|W88dC@h9y;s0?Ly8^YeOMFCBPb+Z1KGa7evm&-K5BPycpE-;L5mpv{joS zcKOX}%Vm z6a}J#S>Ka|hE9CV!0sw|`B&ZbN0J(GBpeUc zXsC_d_^UdlP7Q8!VKxOUw-6;?nK2TVMJsX-%^<3Fz8GBJZKsxp)r)NuLU^ZneHG5^ z1N*q=+Yuqve(Zs{miUCirEVgubdg0L$#j^VoEr|9|Ps9DNW2 zjHin$&u_e>;~s)Hi$KfZ1OK?^xEFX#yD@J!#B=7o(cGa(2=OPtT&Z-K7L+=lrQRyL zv{C^$c{m0(lI0326BwcA*6842O0o0CXEgl<4T?WhP`v^N3^qmL6CH}Le*q*^9WM0^ zI#X3=M@3MaU}eh_h@wLmZ1?yU)3u(=a8B;vCa^?L)q-fk@d5~@rjHK~pC2TXb_Q1D zOb}O^k-eq@@`gMk*b+T-QW{l2I+ih*a)#8(9^s+Fh5yP{##7bjZCn@d{&ZQS%?(v@ z$36OUJrA_kG{8p5Ho_v^qyEZzeTR@HsO+!X++PZb)8fZ+vNd21ww_{^O}y@}A`APw zoAcG^VZ!bFS_odY zZQb`v2@8@=A-V1s$k=>IcFFlkm$#=>4&O4(=RF3kavsGso}C$9a09BxR0hAUSPXWN zn@11-QAfn#&7Ej1f19q)T|dFd8LMTH?lzxCD#~s5(~+iM)WUQV>f|>;tKYCz!?Hoj zV15#gQGe5>{2z(XCkh1OV8&+CYn}LTcW$(M76K_@P*ma>)HwLdU&s$&pCOMzo}!7~ zL2wYG{_Hn)g}}*#xVr+V2nJDD?6^9U>9KUX;YsmKH?Z-u%VwTziz)z;DQOA%3veYa zs(9}{U#Uq4D85@AGLB8&MAUe()YD3hx8g#VtC;0z7ORLK3^O94XcuViHjWGqr$>-i z0^5wkVBJ%Qi?19vIh=D^QU{URE{N1{MO~5g9@Cs7Y?Bt?CfLuN>{$0W=cegVcrtQLeI2Jr`&?ZPKf7$^W3tqDen)4 z8&^`kqB&AEIYklW)&nYxK!VCndN{a{MZ7vA#7M@i{D_9S5|MFIsPX=nO1<9td%fAR zrbDg)eAB+Gyv&?WYY9LH9f8M>riLo1KK++ju>ms54zpII^h5GAw)H&FIYVYTnvaGT za)%(Wz1&Zyui?z~9*@!~mTE90y4-Q|UPry?g%>u5 zJlILpgn*kO)jlK<2qL+JT~Wu}e(>b!Ku`tiIbx9w-#_>B&OA>P_=k)#=O%*iVxILn^>+B+K;G-9SM)%grZ6h2+3)dcR74KyHo?BT}%OnYROd z(iIt{Zexf>aiR}6&!$hc_`w1YXovtiKfW*}yTT0nz+jY>4L(J}JQ1-Q>Xt#|AxTPL zAJ;e65sQABsbr@*P;+bRDy{cTf)QT+&p29*4z;oI@k1%4Zo=u#mwM?`MtqP_t4j7( zKe}1#vr1xchp*Bzu>8mp$Bxsv)&^+d+LZ?Jx(;^7;*et@B==$MZl$~uu^mON4Q-P> zJEFEkR1$iuaJnm0$vHCr5CW!=aJXQHiO^!XG|wG0*`t{1=2G& zc`}`(D_DG8-o zqjhpe{jU3}|6TEcYn%e!bdrB?L6NYHxYg-sGMlD6MY#qQSL?4Ws1|U?5anpuc{Y2Bc%Z zL%&na>IT9&g7Fo5r@HG$f_1Fc5xzd;sJ2{;J8Q*092d#8B2$28#|!z9VLKLHqcnBh zXRX7OR@wWwl2MF>@fyo&)2W~bT*u{?!l4*6+5dI=+{Ld!iG4WP zjxI%sQJ=heIMCH z78u(U&W1I9HwkRQ>r!tgwvwM7P<%wV(CoWA31(EX^1coEK;)W;o(%*0Chn-a@FY;i zHae;?z52U6L6uS&)LU@=++D6rn6gYLm^B-t(;B9k}tW5 z4yF>LdfFX_5g3_N?=g1vH6$Ivt+rcn93|D3Dz{0^Iatc_JEXgwKd(nI^1#>rg|#&0 zMUjrI!Dq;a!mWbAk4{WD@Yeoq60q$)243wl?XFyJRF@ndGkR=`iU(Uy8|bvS^cWTE zT(()EZRJ?ZUfFa>Ug`%W!D-A$v8{^Od!wZ}LX_z%1L zAy=;VfR2gTiNNpUvyuX8gUw~{6JSF~S5`M7YLbi4R($ofDXc7y5h!fLOR8krA`i5% z5)~Y|`;-Mh1z*&8`g2avy`8CU5Gl84Dq$r$t%Qa9WrqG_jRIk6E8# zy%=S{6>MwWkQyk;4xqa#0VnU^HU$VQ=I50Gv*>a2un5suj@O}mGd41h->7`l;tthR z)=MMk!@ggQ!Pi&a39J9<(sU`n@2@i%lRIVTRIK|XL1XQqP|xPt2Fu*26YV+>k~rV! z4fj^us>SoF6+$KzA$RE?lvt_PEU?Dj`5aUwboo6RKAwcuJ^WKVfVjne!nzK*VE3#E z4&yaEGw7dKH4M|w<$=XKP|-Yyw!Ly^)8tbrE^Xen1x{AgG^im7yhNzGJOh0;0GLdY zzoLI@4!ThaF4Fj>l=E-UB$Z^7x%0nv8SOM`bHVU8*mTH_R{Tkjr)R6HloW!@yPyfH{CwCw+&GGAB- zE5)Vi)}Dpi_ZB7Y9fEy;O?#v@^s?0V_(on=AfR8Q zjt9zC6rHlz6-4rkfr*zjI)@!FX^#Sb*WjwspTi2B@ZkI{xPHn>{6RKF-_kLQnT508 z4YLNfR9T%HU(`*)e#tAX!D;X0`5ABnyu}|spqAc>_2&$|YhL?+37rP*u|FyXQDPbA zP5F|_<1Kd51tI%NavuN)cx>ttIZmZ?JbSgyN*T}*qbHt21HQfG5kS>J+@p0}3^pW1rccX_E|2w`r zQxacdzL_fZPGItk_=8T)h(>MR$A^SDB7Rk|Xe0}`7gb1!7& zsrLRSBA;v%HB3aA{rK@=JJJ@i;*Gt3dTkO~5|iZ;?x=Qy!Vuyq886B@z`zZ*$5Cef z-{tZFyET_Z_~RU??anT3C^~)+iL%J9fYXCG0u*}hP$aUc;Ce%aN%?vgoY084T{!oY z>GzF7>NplW-Lw|q`nU9)*at>Xj$D|LbD&>4>h0>wjbzpIJz1GIgH_Zujkz#=Qh2jX zz9i#~3eA)n_QYD>(+Ihj@+jpHuq1zSTbyYhY3M&Ju3LR7-(3sn!zYNS_WbwmrGm6! z+w&U3DD?6{8sF1-((xaU1kJ9Y3TdkxhUh@tnu*9k(~LPDmX1jtv&{Y||2P>E(Z zn=Jn<{FTC054$Yd_2=qDAY2nGQuy-#xDnQd1U)3aIuf5&iw0)A2qA1Exk2c=#?evH z(C+GD7bU!)tVeifk2xcS^0q(m(C9}7bXWS`m)AR~{VZ~`FxN~JJB9u%{L+W2@ z=ykN^i^K^6FHoTn9dcmJwdZZmZsm`Y_jtx9wX=vFkw0cEDmacfV3H?VVKp40ip>sD z7yO3?=Iod5qnNyk_og!0q$(wuMDPn;{*!FHor@1&m~DbUP|^9T%5#Dwc#Jjzz)vTH z>vZq&=oJ`ES*2aUcDb)*cKD2rEb-9Mv~O|v&cZz;jOhFc5(!5{`7IHSJIoG#lYcL% zS4E_+(LaxYDNdWV%v0z z>_@nOQznsLj&7KvKc|M#a82St{UL)eHRvvDG=$;XyNb;%m>UZg=)48ahPCOaL<>}n}FufRe-t$hSz}!cz{^_ z3vHA5^J&$pw`WUQ=0@9e=U{bEUUtY4t+^51g|69K^R>5qaA|Hk3ZTGcV0}Rn6Zba@ z-B51b>9{}0*7WsP+NL=$?e118mwXy273?&=PbXut9b(};o|r!{-$HtvCEsv;yP>jpuC{tYqyWm@?3SV-+!rd_~!MEEj|-=m>V4) z1Ig_A8s6UaPgub?`>~}~{252=dQ@>gZ8a@IxpTa{OX&_di1xfrNXhXO!}q?hPkV$w zpm@8?nghal)xx>WEn>*_&9<<*+U(LX>G*E)x(>lH+6;leJB%n93q<6lRn=iaTPtU+ zH`>KrZLseAi41UCZ8T4q$mZ636VkkkZ;%Vlns?zq!w=oZot^pWoKCThdDLlfO5*uG zq$xd4=fPYF&bs=u>#KDo=Olh&LP z1po1xv1{&z0EJeA2Adj`Ef^d;M~Zst0|{ovpC}$(e(AfbVA0e z;hH8N#Gv?pbIQ!sfwmm~zt@AR>;)wCHrmZ(yCRAg$9o72np|NiXx>>v&nE z6vNx4?n-y(ZkFB|J$Teu`62~+lX0De{a8SYsIo|j5scMp39Tr@;2o^)hsBBwrR$t$ zd7w~=?EQyB6sQYs_UR}W!HDhg{l#~hQ}>!VAo=7FR>;ldJ%Fbz*XY*Tn$}CfGT`lf zRQ0R~6K8I>yWQ7V#+$=VgK?F=k z&((TXDOaW1fWg*sX7e4uDstXy&Z!0dgSOT)pcBDR=@Q$?4{kuOl?ux%vba);R~$g3 zBHG~;EkBM<914ULgmlT27nqgqv@#u}OD9mUx&=YTrOkvsI&yYK!MhpmqoO>67rzvK zEPG1(BlL4O=L<^LO~;y__69w)FBk}MR(7qH zF4N_pXdz^{!00dZ$1yPmOlZs46C{S?R0&) zlAcYg&E*=;&vQcvHe1W0sZtgW@;I|mST)N61?v0JPcR0{&`FBO^AKxu?E9LeYM1{G zupmfe6C&t%#&^FvEm0V{wp*Dqb3c`f89AEFPzf7(B@xXjLw_gemKVrM4O80a4RtW{ zCC{H~tvz0?kh49VsgrNRa82p(N)Hs+7tv4>{_=4AmiN7c7$g`$T|?mbghT18buA%9GvaM9@CF7z-RgxHz2F3t`JK`&#-Yp9|H z4W;jQp@oK2%S%A);|wi_+fD9Wv9LZQ)s+savOhLhMzhr-IQON@>nliZ%m1)^&JR$JLu{ zo#jX+&2Lk?q_p;EJx$B}4p#3Uv$sA-=_D!~J-L<`4QgNFubPf+%Z33K>0QR$@(=Kg zVLSXQ<{oCTlWtHoROBSOg(p&d;|W}uV>+E)!9%xygY-S==8oaRJcqCYT;!oN;Vt>K zDF4mO0QgNv@A^h$98emrGysY6FPTs z-k?~i6mLl(EP|lx%2GAOJdW1UVvv=Vg+YP{da%NKcI2}e9fJMkXfLZa$|2K3Y0uxSN<)p9 zJ%iS-wsRJMekgnb^2_PVF=7kb{fc2U@>gd2S9dq^K~X40WxLYSU&9|2#9Kj=*?N<8 z;A?<6kM`HwIbmXbw0$51!U93T6z{M(GFRA0)>;nu>+9X3Wp!NtO1&I+v3i<`whWJx zwqC|tF-~{EDeBZ*6an|2>mcYO`l#1wozl(L?n3D`;TBE<0bASv>}25n+KkH5uz5Nc zAAN#9yqC&z_EKIb8qC(J20kX0%fJig!T;<*{j8wz%Tn;&K&L5?e1zUPH&XLq($Yw7 zGZ(Z}1C?ogbH= zJN5Y8%9Lv|%L3#i+Q=Ly$P`)MRZD5IsrZ6c!YwZg&U!Its-~HdDMk(ZbspopCGN`D z34uZG1c&zvBwfwCs}}=T7*~K_wrM|<%Qc?|y_(E6og?%2e?e}j#`&aPK4OSg+k ziRLgKellI}#6cBCm-_&-S4qXY6}NJY=2VTp4%fK}JDMLK#*Gdgw!nNA19Z1YN%md0PPon(0x@pxf()cUH`*=>fqy3$cZYicb{cLC{jkVr>mK|lZ0W{A?IUtV=CX_6uZ@6cbM?sxcDcq&?;;$+;aLHtBY%-lX z#g}5=ArdO--abYnpYY1pTrI&``uJBgGMg$x3hsD}L^UO9F^;7H3x9ebyS-llWVZm) znXyWM=16cKZ}g$f)$^!}Icghnh<@<>2i&{+DMjV`Zw9>kwhx4@VCamL6pTV{x1shA zpUm-T?s=Ts;2c*B6TZ*fQ0{%og~FNnL&ruA>@->ad2h^Q_r{iuOsm$jKIQ}8ZigSq z>>KplKSyyixP+^8?6p^R^2Ejl3r#1w1R=?DkeEwBofX;2oj}l`&HEqOz2Pmyt_0s4 zYJm4_alA~t^M-c(Ty+Nd()B8FQbQLNkr$yLB>PF7RMap@;$)x3oJEi+95+0HN^~He zz7M6oZzvV~%I~VocTaPUT7W$nhLEP?2O`nPM)+;0#tt@~R{mLDT`tD@6$;bbjr|e# zoV>x(&L|$F#MzAHL@}3D4I*xEj$n^l^uS*?*h0go6#p$kOgAKqmrh`kun4MJH1Pj= z^8@3)%Ky1AGC@<7ophkdG4^lwi2*w473ldddvgA|Vg~+JRWI_?<+rOy(Xgd^O`!Uk z4bsj`SQx!HdXMDXDOW|{Y0{ix#cgMj(e#zG>txKwa zHreRS>iKK4b>8<4hB{`e7KCMdPl4-z7v}y0ILx>0)RL`D_tt}klH--HfokS~_pE2; z687vYE)KjJTS^}oNI=!kp@21RB-`0XJa2FNc7GfpB96hz@sLNDbkL}r{~6Kl{z}qv z`+BX-dX$wr|wTYt0tSIR} zK5=pFYjiVR9xf&jeU2&R$T%Q$T1CKWgvH@Yjn%ORv0bVlMD=4U1Hw)})(MEl3cA_X zIv#33>>sjAu*L}=(c!T}34}rsNA&SJYIVB}iefSkB+$9(TV3@i(XDmHABH8#^7+tX zMlI<}^CBH4Y-mx?w~@0FR_oCl&#@#)#yzU-mVk=`GyC7~#@{5bDW(QSpAyD;{xP1& zIr>df6$3<@@1c$;8Nm#Ky^%*!y9`kBgJRIt{St)!a!tH{PA5KO&m0sN2%v;!%oaWK zi7CFx_+4&WpIDxhz;k?1R-iOB`=WsS4TMRUGmb5U{{&yCd;$ppA&)|!S2$!&KGm54%P zmla56^QFZX8gu&bd$M<^k7MQgp;OhKJ&nLlIy~2$?zG`*Qs#zFQ+%xKV7qo z#YI2B9d@HfC*$%Tr}Sxoj4!iKV6&Y%x4>HPftJ~y$?sz)j`M*ODU1_KXi_q@*R03p zF34!&m8TkyJ`(;lUW4)x=c}C@ z-Tg$|3nqxVF-K%;w&fWnSN@qk45${4Rrj!6;|>{JL`r0wsh*k8S21so{?b%#WQ}Vn)v6+oU9hnDRU`3#B*csmM~^#2eW!*n7e*@w3Mk=}fEFC`)*`$= zqwJ-$%tRbkQjxzvC~S4Lwda`Tc}{X>;u8{PdT`iLloo1)sO87NrRYnp7x*zT#4*d+ z-^)`DvagT?n}mJHtn&4pzj}jDjt5K2w(;7=IHaspuxq81DQh?{s#+Q_6$a=|a2|u^ z<;jNkW?b}@48D&mI&*yO1WmVw(^y*W&S@7lTakgOcmCTFN&%HkJtq$Sp<%SFKC5wU z>9}!T>HcXNkp(-^5mT-AN2AX+9SVPH)JZbnb3VHPJeylS&IZ2$3$D>rWbVUrn zn;z#xK$c6@Nry;64iy-ee_Ah(omUXL;jy!5{#4D;9rAiS#P;qVk%mq0Ls;Q>zO^17PB2f!BJ=>75h+T(E-3hu z$)r-w_Izo^$gNq5W@_Ygse*bx;1+`EdFkMr)+YL5AEoy2X*lNkt1Ql!s#50qi`o{e zfUz-oGRKPuc-$nKtX64p^n@)1x_#!5pSoMnqSh~tr!p8w-ciRV)EkUWV)KNUft-=L zIKTem{WY1=5c#9MrP+T+MsY+VV%PYQZ$-(FH$=gX0qNa` zp(-szqy+@9tp5$Yy__cOBmg$|p?BC(C1xf52 zDp{#!ajg-kt_K1$lFfOK(9voc!}ftjtURK0e>?~u9D16W%PlKQR@|;x#6V1X^y%<- z_p49QUjUh@c+hy~i$@NHO)Kzf4Q9<>a}8uwZiV=IiJV^^KOQ!rLg91Cn>^TaQm=}n zv0w(NDQI0`TsgNK;zd~7!RUp_7Y#`6AjZf3*AY$_e&IHxhTj}uOo?-7-1^Huw`|qp zH_G^L$n`bPP8E6YeHVQ6)nq`h5(FoT4E;iteyii#qb{InBSlA&GzsI_72>poh4mbv zS2|mz1_p^15#ElQ9s?cU`6j)Kw|pzSb%$5W1umD&n!CQ)Pws^qP2I`%Dz-l<&0!-D#NL@NO9-u3&)jT;a;*P#lebW;X2IX0 zNs8F+8&3QUWh(LJHyXe2PYwG?=mgrc@@D7ZFXAzvZHpakTxs4I2;nZkKc;WWR&@}EiQn-J6%A5;Hf zL$V$<^(HCM!eyE+2)k*(DMx|Md1{7gaaGAlphi`L-iBbza~4I<$6xNs9agn@VFTo$ z7ARi|?;9+T2a53%aNVMY8P)@ENIS%cS!|_RIkxb7*zT%@Lm-9Z=C0@HIj*%{37~Mx zCMEQDPV!|P=3{)RyI(gq>z!5|(7YTh+41HHeDA1E;V&oRg~_OqE|&h$>?E6eaLP7c zfEqsGu-VMrEN-{R%BFjCZP-t5T3|Rnl*ZjPZu(RMJ?)us;s>m#X8Znmx*7zT<$~cl zrPRv;?lpYA+B9A~W39(qzx8~eOlIHmlA8Y;_+YPzwOM1+DPz;VFZ+1C)hS;6GNyXi z)b0bhd(HLwB(t56Qs>OeIS4i7s(1b%s;WiRyzSh~cY))3BistnIB#MO-gMpIGw@9W zmfM)d=KbbW6biCvkxA||ZrwZ{$I#b=*5fF$Ho#ha6vC*nDzE$rYvG&onw^l>^ z&GY#vqRnQtQF>Z^g>9yvB7p(pHTjfO`ei7njo@m!c*!V{;}D>lpc;7eO9a1cRmLwj z#xv}jCFKV&2ZAqZ$P?L06frl+R;vm$22uvnFD7ZELhQ6^K_#m*g1m-otiy$0 zryL;+#bx9gthY?7L0v&(gkc2tIj2~Anf)$D>#`A0DTrF)9Z0K~42TS(gNQl;S4Kka zq??HgrHIA@-P+Fug*rc3K^Sqh5WQlbfaes*<3RHdL#Uwe|WZ5dLr1RRDI{r;QTrBtPcJ%cP$9CkjBwNyM zG|1)D$tsZla^VLgNN{PiVvhTvssPw50;gYZYZV++tN?t^8{iAEspP?#iH?WyWj*mi z6zd#t#a}((k|W zy9Fzjq`=B^kFNd?5vFF5`EYM-v4Ax5r2Kjn{KtKI&Oksy3lYf(t}EI>+Uo!%s^kK# zPXPB)k<0ME_$6;JSxfpp^YIkGX|k)naLki{zAsNJ4r=3(@cBLKXqs2j(Il?#UuA|i zSdnzDT6!0#IVYVK2q+f*x+y3!eY_xBr^SjAfJ^&Ts(=!a0I#6MQ6A26zOErGot!tq z9VLPuLaIQeU9z}|aex348}6e%D()#nXu;wR;b~ndtL=ZdhQbK&6T_up;bfD0lOD70 zyFDAHpFYI=Q^8y5f52M|GD1k7TE@~<%EK(Xo);s5G&bUOa=3bT3Q~!MmHo0$DJagk zzh(ZCX#q=OxblQAvPS+VQP9LM-rde^%(5Q^f_69Ej$~~h2`SpVFLc%PJ{b|S+?+>L z;)38Z;PJzgkmoYsE!iBNmQbzpK$!dYK$wp_;e?pr35ASG*2M@iD zrh;QZ5q2L2nG)AIn>ki~91YG;>(RVwj~W+0_mmI@O(Vh<7JJ0|&^PjX%ZHB4+}TOU z>-v7hc)@IzQcVa)ooqFT&$TECki zAc$ix?u3le!Oa98DnmkqWm+DR9H%kjX!3T1<=WKCbmKBT4bSC)JPxWwrPgsCJiJS) zsQDu!Wkcb6_CwMz&IqJl?+48*kcbJba4LO03?v|#bk8)+X4kh+LEDk`U9Ec-HSL=2QW_#|6x_^|F9NM{)-K1BAw-w<>_3fDvQET}Et;PElO)-i%?DFb-zHHgT zs)alK2)qJwt1glq@;5Tv&?9!X@E%(v?=!f*R-1=plQf;(`v&h4GvHW0JN7B7Dmn#RxfboLLbs}#1b4g;53Ts9Fk1M@sPwa{A3R*u~r$w zCOi)*@fm_xXaZ^-LM+bIw2at|`6LbvsX1W7dvM1{6P$w{+z!s64R(z#aT+$cv(w=g z*pFk1D^1gukvtPljano5e>=V%i=&?s47*LaSvU#;@q@`H8!8$GAOJCeu)lG46`th9 z1%~h3f)rkpjHK$GkZlg!(>UU&n0(V-T&CaZGy8rJ5PgvNoE`ATf~>#M&1S zMKA^}EEniK>ohv_#O%zb+n$NwaQk9;(5SCuJhk>6e_ElNkkZUgY#mo4yk=$|GzJm; z4;|MSyQA*V5>r|69>rv@2nNe7pIi6^frd=Q4H#I~L6E|{5GPZz^$+7rNSKKGVOx2c z$llE|8bpdZQW{KCEe$oZ^;4)|(TM3+>29mVqebiImFHm>x38s@*N}1)ak2(x00r%4 zr>~p9RtBH8EcdI(XdwK=ZzLOIj*{qYS>3a@~&vshj2#XKy|kax^bj}!b9mzUFwpevc{Y6r&VKekQaQxTqZWK z24f5a4(m7mW0a-}anh-dY)oU z+I4d46(nUQI`Naj<$(b~YqUq2>_!4RX3`5v4)t75IIL2J-6j>1a1xv^#NHxCLKbK4pFVGk@Qn+^w#!Gt7)W7l1=J+bv^(6b%?i9 z7XIHJC!?n?OTW*otVk|P!53`$dx@pKpsK25)u1ku&jt|zmqAiw|HhF36N7?bE7Tq@ zhpjUmLn|OkoF15?YuyH#XNU356YfZ~0s{X3Bq#g$K?sJgw3F>(PnJRJkSFCx^+t98 zw~OQ7^y(;Oyy;-TgQ#Wdcg#>4L?6-v;uw|V#O`owKTCimR)2Q2p%D_BVJf09zkTg? zhJqh3$41Lio?|6@-V5u`ew+ZhhJkC|gypz1(EhM!{7%0Wpx4w!5mDXO zj0lWxXfqLYlpY-;hY57vC! zPA(&8Ei6pZ)MGkwP&Yhsfq1+lU+`NaWz+L%?1N0o$ZxUF>+{-HU}Y6x(|L$~VJG`5 zd+%$(aT>f2$OR0BOX(8b$04{$1ezNa60H*!e!1n=qH~`jfxb^W`c6e(Jm>8O|{z*hqeY4}@wPP6`toq4&5+hr8rw=e@}RF778M7#-W9P8 zXQ^bVO=+(npspacmA!1R4(WS2OK`VD#}1J~x;fGW*+TQos^(UAV1au2A3?m|z8}o& ztPOP@{P&0DwS=He^uyVfN}JOarTY#0wKUG&ViWy75hHf)5I8hje63kQ)2jzoLC60C z{6GW08u-M*Pwe;z*Ke2PE)yh!CoHzMwt8&beL(P_GwuZ9fW!mu|ecLMs#M znv!$;H}IhYYM*eGE9XevN(dx#v7T+jhfu`%bVT|&5^$(l0)>$u-Xb{@E|Zkb10*TG zJ4|U@ijOL@(C;u1gex)67fJoP=cH=&e@W(WXnW$LN)}FmuU+vn(lF;^OFRo<&HO%2 zdg!zsJU}hAz0_}94Xw|480$`h&@>xD+b>A%;@^T+u6uC!BHsD@`QIP_*3VP;Nu*kc zVsDifJh`}wb0E%vI0xb!__uK&YLYh7p_zd(34#d92>jX2kBcPnCAbkmcv$w|4xIaYMw)zu{WWz*l%9EEFq#zSGJ^1cUtD`Ur=C@;SFxZ3CB_V&NO z@uocb+FP>v-8UeINs#(rYj>owv^I%*(M$T}GGehpjGhaNLdX(b%(hGt^ha~U-C zXeV<44v6{jEw{>Oz*1nFm6a)bAaHc$)j^}~P)P|6ZAy{TPB}@YLNIyq2`9p?W>0zj z?|+v!|N4qte(}XhLI&{e$Eof-oar#OHvjQYkIB1#e_hJ4{oRzED$7@Ikj1cVIubS? zsWrV}+jg~SdhEmr@^#R9Ar6U}1Usn9mM@o!zx7>t@6V5GULLq4RlChU106;l2%bV#a7(ha zlNpMdzcLSyd$m@&f;d}ub5o3plfEY8g}63S4_iX)hY1_4^f`a*{iw|o%Nt9$VZG%? zOl6MRx`574OWP-fck@0uQjKkz@2prSGZ!qE?wt$q5v;uw7j>3?y?Q`Po<{GC3tAnS zY5q++Cldb9DD`IjHk;mpW zG%jI74}t+4afiMJ;X`^msag6{sT(&{Qo0O=UAzLxoOF*Ie*QX~+}s^~^B}Z7`#~7- zHu5ilVBu5<8ggLI_adoT^as#D!3cW{`ml8o8cc)=MOa=+7ifIVma3(1O4hhbH8FF- zm!x(n%$?{5jYx%}1Sx=w#i^Msc&uO~f`u9Jvjaf{2P2qZZuHrZM#V324jj!Kh_qu+ z8MJST2H6w*IGY^6FwwOA=5ZhyyV07;*GlFwUy`(L5OTsbmhXc}jHgsyN!!1!w?yG! zZ19l-0qm0xL#L!{_R~^u;m;WX&GXZx;)7u@Z?i-~iO}f8dICovNacc8B)#8w2uoq> zv&U#j?SG2Yu73+C+GAJ&5|A9*$AM6tmf3U=A5ej3`p+f3|3r*4S(4gow50U^iqtN9 z5Fb`M1NLx)RX#sJ^Jf))l8}J!N>%H0bNptOG#y!yk2_0)C;x(DQVVW#G^s>}rhiOOPONAZ3df;x-ZDJ@B zj7q>?Jr)cd+l-eq2z2Svle6Ti$={Y9?fS_}*y^^nbeeQb9fQ{uZli}ZR9~hDY3qaA zKP~(unil5Vv%TudD$u@ zSDtaYvX6)NJoLz;a@Rfgs3zqo9QyJhY+QcpyWf|SPCOo`Iizvs002M$Nkl0V&De-sQcAK=rVNl19gUvY5H3)V~U&9IUzlWCU3opJX2M!#PXYc-vOdLO6 zai>Bn@v<-B01nj{)F`!)+OxR33AFI5882|v@xWBZ_Oz&h!;Ei1ijF}XuS~ym`LI}r zpfj;Uo+Nj|7FO~MKQ~4OtU^12)Hw+LQy#?;$(h`_lY}vLQiD{>Bf-$dY+ASuZ%AfK z8L4-UFpe(PBGhvrwx2;;j$8E^W+HHe=gdR6MqwSi!xI`bQo`x5cg(T?#rC9`5pvE5 za$E>^;ta+#8}G+y;RX#~8A&DdLL||Cw9xJR9=eb6#`evRg7f2#);y+ZI_~=vf3*K- ztqUpsw6w*-yKpMTM~+MR5bh_T?eE;PUp8;wEen^gm9{x^rAPN}GJH^9=~!3*TgnjL zqil}hun_^r-6L#W*7@x&DuEDe+qO>-+)MYo8vn7HpU6sEN5~@6d)af4(p->DT>46O#lQB%8eC_pqL0bULZo3Pb`r;gz||!JH9>3Zcmw*trj755fnOho$D&Dg11$?XbLlOZ#f-;~qdzS%N2XOQl^K`4BgYOnQOSSi{m0~z*RGUP^G8Y* zk0!J(SYRORUWS4+dVJ&x<5FExgoXrcyGXz(>&AvCPS?hkG@c}1i!Egp4V&=lFEXXq z)pFL5%cOUwemDpT2a9;_Q00Eu3;jSAY?>o)ZM{`Cmy7gG>nE8hZB)2QTcF8_sjv~b zStj?oNdEWqUrSD!(fV{~_8i_JFU);Zo>_Ubs?>Y?8By3C%30lkeHuGdqbbxIXopixCP6E zwr#O>2(AJLx^OGFJ4OAIWBlZhuIwt2NwR^XoHm@)D$Xkjn&~4ga!EAX)E!hklPSl*E7AjA6=T?0lU_|HRZZ1zt zjMK$9`qegQ`Ii3h`;stVIMl{qzmk>l2NVWf1-*FnVw_-NXx%~SGV6KC8b4OIqHj76 zf`YjVp^?!|y1nrd1RVL&aNr;`Cl;wtlK6CS>Mc<{)P9K$(otaVe0d?6(8z#>a#A~J zfsGoeY2~lJE(b3Cnn*F)1_}vL=(?{&(yq8bQil$K+yZq(y^nC9B?J=()i~^{9$VN$ zZL$rK&`3>yc4zvz*#6oDni}iu6xHkdiVSOvUq(#CmG^}y*8 z&V<%f7#c}fw?v*cf;M1q`P7@|}7y(t-kPf>!amb@m19zO%+bpk4Ak5cP1ia-RT!syqDouHbvM%rBV7s-I_ zQM#ISv!vwyV{zbGAFv5!Mdcw5!xII@B^sxVwRvLs5rxVNC=RTN>6+g&cxWy@g{KeW9|r-mrCXBgE54lzfxF8 zB?Zq#^@X5)dqTV*&UPy=3}lKaz@gfnTOcs}vUI%iHrUI|$H$Muvgg6erF!*WAqd4s zR(=hM!eNLBa9G+x=v!f&3SV&5UnFa!>F1S8UYCQ9egPk8@!^H4CG6LD4+~dp$4Ts8 zl7dU`QekUj`Cd8j7`D8xc?mmLx?oH&$|&3VzI$VAVjBEEuQ zEgLpT8g}Xp8{A)ae9_EROLCv_GkQy^YMjl1;m1c$ zc^oi$vwjUN%-*8ht#qzv!r3b2zBIWp++Bv5uG*HYo zymBl8lA#^SgPc0F=_1#j^j+!Gagf|I?r=N$ zT-nq><&Taq)Trdog$d_i8Rzm7)(J~}+%BE4)M%w+I^!vPaE@`l(9^*Sb@TVFT%1kwh5&=;|O$-gWvZ zy5W=<3>HlaE-sE)oImy+09zOgk&=1CcLKqu(xYWECq~{>*rMIJRgH zfd_@vNw-dga?0fKD)@A;iV_qqU%OG(Zrmy<5V(@w1mvlLpl;Z}K9ZjgA(Y<+Ku8?~ zo^uv0m;DDyqVUy1$a~z_5mACqS5`Sbvhbyv0#KtNj*?JO_NCK~AFqN>2kYA1UT9%Y zn>o+a+|t1M=VWJU{VB|JdE9*y%zMmd{i)%Iy14omb?GRlOd6|vaj-;8|FYHVW&P&u z&}gUawMhL(4DKrhd2N+O2TOWuZT$}%ERED3&xY~;$KHDYT5=R;qjk>B`EJx|wRyEs zT7^|!2_-;A2r$WDq7w$gZ*241&-fXBKVvY@*uVX7z<>khk%Vvn8`%;d31kHn0p+mL zN?NU?)#jV?Isf-nb@%klIak^Qy1I1lo|*3Is_N>xQ{6o^9WLB*TF&w5%j(BABiG(^ z2euX&SDEz5K>ewUOQ)&-&fR~94bv{ zqT5fr2uwJj!ImNS-hdAT7~ar^Cih!8WJYH|1CBlfX!!1{rFqe6D5(kid7djn;4w9@ zA5H_%&{2x24&LzhSWXHjWg|XTtUphhR=ifmw|xU!RV+ZehR?P+0g*&H)I;kvpks`Y zJ3l9_>(7B>W1+Mx*&xj);bYD{m&4hz1ce?jHCUCwgMF0>tB^cTkA%DGlOsXkIyv0U zkfMa~;9rKn6p{vJvIg9&aX!C=kh6vGeA5D49~NNFB%-uE`@XH=Dh`-Fnv3qUUaL+| z7B#ZrCnd-v_k2NxS$3Mx~`R|stHP}-elRetcc&m(Ii!Z72107~}5ZTGjn#DG*1#ng; zw$d2i`v1%5gFi2Ao3PhsD`tR?ltfw3HY{geB) z$z){`j=u)%hl!aZm;}K68jB%U780>DCgbavvqVHQ*$|Ha89pU*-8k|o6KAw`HO-TA zT9(OOPu(K_{KUV?D;K>2%iw=TwyeKE)?**g2E5F4Gst{;CO1pocQYbn6<=xH2JsBby~oB44+FY!Ux_1u*1&F6Sp-HSP? zkL&NNmoE`IEVGBv%3%I<^*`;TjdIGybve0M7djZ5oNS&yB`5r)FF8vt+JfiQ%f(_q z!)4^=q$MV@odWm)=XIA}T(|ySE~Ch37Gmb;+uv|m-TD{*F1{QdT(n~8;!uB+sX-24 zzvQoc{VF_yCH?#G`I^8pIl=8FP#@ASKW>qn`N|Vz8TS92hq6Z=xJ|ZWqEdMgUh?sB zZ#qTWihrTn?(d;D7q@y4gMBIM<7yV=M^WXQIX{upI3ITYfONd=)6%?fsS=MryIlsa z{dFlXSO;6$1scjsE(p9~?P;m=SR88f0USW`dTE-s3vSX%0}L*-HA-mU zS{`O(SfhX$laEX5x;IMuhAoO*#kOC4|NW2pPK49W$kgEAJiQ#qYnUTb`}axLg};Lt zoH(QiVfdljWc1!oW53N+Fm0?VP$(`O$KVhno_92O@`P0LP~p7tJTgadOy_agmmTE1C+b@X@S?k907`F;N?OXseH{9ML9 zDGxt;pM3o8&&p$aACzC(@&UQ{gjeFFtx2}5d8z#J{y&hvyzy6LUh^rC8BPWWM>(wX zS4s1*0CM_f{Q+auFh|OiH4Cos-}i8;bENc#Q)WzaxaB_|T`|9yj%BD9KUDmBJYH-t zXEJI>G%QVfqj8nVaGWuDIPv13$pQ@dRly0&gLpw0h7*xXHhsY1E7jW`myY+nMHc+e z-;ieP%c?TKc{6z3^|JS)etZOH@oDYX?4P1VOl#ju-448Qt z+FbGhoi20l<|(gyxdA>{#Ya5(_;hL77-v)-N}$uR8NWjbKZ*MD@A^X4zXb=z(J9R_!5|LWn#6cv zZf} z&U}>&-~L&d8hjMah z7nT>A1thS)C_XR`-T0T%y82ArGqmOS)1-MlW_dmM6--rKg4y5@riMo(v(_Qv$x1Oe z8XK7)5z?%Y3lU$H%fr(>X<&wHKp)-c`Ss%F?8^hy5?x;%(bVSwDE@bEd80I7i95sa z!#B&wLtllRBaPKy8q|nf8y4}jOrYtZMmRim?FrJp_8fqLJ3c5wKfFqPr{y_dz>k@l z__?+ zGJ4jV;q*KcGgs$I_iMf^V-H`ahaTCu$nn8MkICIn;Bd9SLgR=Tp(QN8SN@RsP@SJD z6j(Uc#%T6k4{by-`|6)+lr)eukTmcU(?HyxWSzYAfLWS-qIHK^=jb{k?XVp_q^@9q z-ddh3Pxd`3<5T0(Ds9r$-X$wLw#bfs*yjd&TCuaY4loRva|8I|%e8XPE~=ZnY?K8E z&M^?9#&Ub7<78z_CQIYej{RxYV7A3*Wk9Zd>~G~;+x}Ko%{@(Cwc(fKj8*5$qB)DD z7qcdsaLRKpI{Ne1Um`DA|1v#*hC)zIE~~s`VUyg|f4yAt&)3Tr`#vRaIrrU|<=H6b zt@|1I(w)c4)C68yR5nP)|ERXrTqVuJ0?6rGYnv`f14#op4bV96BuA7W?w&EVz7T^6xg0HPY3yQuwp6r$TzQ+k-zz(%^Y>7 zw$tyz4=>t^upxo7v$S>*W_V%7Cuc7*z|mI0evd<6zzfzMIBi?tV6q%7gU*!FaSP!z z<$ipi0Z;NHwd3HhCsZYYmid%1(k&6{&ir&7$dCIrQev&6N&+Z&#C#okxKSO&5Eom_ zW4e~6AZs0>S{fCt4yJ)rtV5KoUKyT) z=kcqSV|FZNhZaHwFZDbKNuL<#p8Cwa4D;`Shr`+eN31a5GRws+hgt_FVBvX+@}sB{ zSIh1Ai14hmU;J@tS$d+fnAo=iGdX_?Gp+bh0p8CjBSnc$9(tp|$pq zE+-(8NNYW?EVa~ftc=}{S)Y&p0JF@_$3DLcq;2!-W&B|{K9!X10NR!s9zP!EXQY-C zO&XY)8eoSGtI)QCcEJ!e%)!104|Wr^H38;sN4`s710eDf!y+=CCEQ`m3A@d&Jl zRBA)ph5e#$`YIfsn*qS8w$olMLpN>0{^j>z?{aQ|;+(I<4?Nh?BEdArB26QL*CrYM z!M}me$zX#mo-pf^zj~oMHXwWV-Xs&-@5LAc?|gd70(pTe8soTXIsJNOu^dhepEVor z=mk${e^UX@@-)X`)f_%Yh)uf4DW3^0iAJK_V*9T zpZ@o+OX(Jo*Q|W6Y+3m-S+)3hS&b9no60x@1UOBcxrES&nVpxN`er$0#W}LCZx2qA z?~~59PQ1vC;`DeN8im7;j_F)2+xI>W2WboZ3$DZ0y8E$}Q(z1WAor@nJS{O@k_M6n zyar;MVB18C@(vD7#f=wo4TIEKjHx&yCfsWUZ;R$jY4HN90B~FmGEfgVJVU*xD^1~+ z3!KRYJY;9IfKawr9;E9!KZyqpe2rqzYj#oCbeEX@bT~zLEsd31#Ea9lG;wZi{2;~8 z5guw8B(9}7oVpwiO-}Th#F5wEWa4boS6pzG^x_buC5snH8$KrZpwC+*dhS_sNa5KH zM2J9XnH?bQko1-#AanOz`*NcEEQ&7z6Hlv+cb@hN7JwfdnRk9uXL6R>I2*I}Zxx)M z_{dvoS^>Yr9nyd6H)PHw?^F8jEk7^A-~Sj52~uD-Hj1JDboj2TF+wCaIhXPBXG2io%UL3S$(#Z_Z-)9_gc(xxl?DI@>`2*I#FTB ze@M>H=O|>BWF^PvEcrvGY9tLL4ZH|6z)lW9XE9kc8pvA@7=p50Xxj2Cu z#VCIF@FOxXYD+mgT5zf?Hrww*<`SLv;|pTBHiUMNsBGk+;P{0{d1n_T$;(DrfZ%%Z z7&VqVt}6?ypgJX8a)MbUm?^cQ<5Z*@<=RI+C!c!o)3RmG3OVoCx5?V$*2*bZF0y*z zdX#N%9i1)RvThM(fh_Vh$nL}V>bZYpCmg{ziIHDT5mY7@$>eZQ+yX2hDw*nqpcIk@ zk_OCaMcQ&tfdoIa2vvW?OfSfW9q6VcwK-Cvf~$|V*5;l zy3WrUo(YgNfU~z?2WOnRDX4<8g4y5OFMw+!{*gpZ@tHIOaE=2{sYajKer5npX|u)SC^zfp#7_+#wv`4(wedV)0e9*cv`{!;dT?&qYm z-~@O^pCntz^&HMmI#HXtW$Y0gMzZyn;rzs`&(=98>z&ef`M1#y>C|qkn=#8Z2${@U zRIPp^nxY($>Wn!0I~gEdlLls<2JAV8TxRgN)gJ-m+8W|AX#eT(V*|ieS!_3&S9Z9) zJz)$}V>0l=>#*7bO~)~^1Pv43dG!4ROah<4 z!?!iasqDs{q1c=G8y|ub_A-3`1ud0ADxBU_9o;J(=e$*#k3HV_VW~Ys(5FK+;2}6a zm0)&XlH+rB|9w;Kk_M6nW}F7lBf;Yqe}&6BdF!pRwC~8!*}0BPZ!S(CUtET;!fSWm zGqP^+Mrmv8khz@;WWRf{52(}w5;MX1>0j7602s$fi9B#&e(MIg00)MQj10=x9{ywb z(S0Hx-ta#8?aTg1dfVp7*yO0}8Q3K~ZN1pOt`Yl{*-HiMv~OsyeC@V>kUfJtq_YVx zHeoLx4rtr}L+kDb8x9)7G|oX4^HN9}NE#?=KrI6on5zqf6x*g8LS#)!?Fn%&rlYJV z*NOrzXH0q$7ty>{?)Gni&Ot?)+a(j*9>YnlcjJWzF9dM%lzV!x9CfWn#mo!XI+4kQ zFH}RL((=-mNaMf2f1IL1d|PUiL?+YcWE>Zg;y)!C;B%w);hv%R0H)_uLE%wyk8no9e0`?F zQ*DnQ9!1U4i$}MI*`8wu3;DENtn$EHY0vq;h)jM=z--SST_=;3Pc)(&Uz=k8FQP2EY3uDb3pmJAc-gMrDL(h=3zj&sE2^ zO4E|lrR&s-oFG*h`2OWO+q2X*qISm8W1IEug0jNCzU8jvGIIOx$=I2fVd?#e(%7>= zIxhMwK8Cyphb*pvJUhXM>xE z0m@I=X-k#UkAe&DoP^cYFDo(2Lvno1@;`8@UeZ9)z|7G=)~B$evcAgqeOV_&EWV`R z>N2gPN5Zn~=Hjd!qfZ@pl2HwFu+(FMv@ZhZCk5uR^a<>lHG#cp=+Io*jAdg(H%n*Z zTxo4;(>iV6y-nVJ`3Z8`!q>>cuBEcD<5*SDE;u{y-ud6MZ*V(Kl3xK{wug?Y&M7gd z3XyEQ;h-_h#e?Fsj!a2MsW!`baO(MH6`xLyh zHiyNcT>P|jF9N`9uRJXCg8&c2kt&gfHuC`R&*L1P)QM`gYk<#9?%6ra3di=ZEcoDp zcW_7$s4#bPamCdO$2WYA9fbLfojA=HefR~xiPPBa1I6Tlr)1!^E3h{n*kh|4XCaOV zDbNKT0gBgJeoXBG%N{%6g!`ON?t8+>>FuO&Q`qmXbBPRn{}Y(?`3^k+zH#0PoXq|U z(*Fc(w*|}H1AaW(zaa2?*0=QI|Iv7SDl4frSqkI%O6Pp<-aJ> zyAs2R-N4jRjkKVTBc1t4-jPU5rjRr+^EANc-i2TS8gXrh&yODFoQ(&fsIB3?n!}Gt z^9JngxsLm4A`g=!25$R0n*k}ejKKUkyS-R&tvyyTRh-RC`{tjMriE*iVB*b0)dzVRTqb)mqrf<6rO1ACVD)&9} zeHp>a1nbt;uu$4D5TMi3FCkHWxG>){HjOfk|H#lhuay|ac)>|SHYp?xBn{At_^WN3 z2=g;26~h~}DvglZK$Q9)85}-uJPZh-Dm`-Gimyq>DJM(A+&MD;?QcZ`2WP6=19OR1!R!_)vDDSZ}wB;u1ZZ^9K3?E?OVXIEhnkC0)E zG9JjNc5D05z2)uZ7y!!919xD*ysM?W5Zl{KK4nDH@^Cy$T{xIz8e!Y_|W3ok-(0T>JVsfD*QQbP(Hl$egEs2X#NaNT3?Qj9N7QY(J`-RvnCtLn!>wD z&ng+Z;kTvpjGvXJW4PVMN@+jylhXeU9MU$IA9gV7lOYITNuRb4Er3k6_D`ECmNbwwFyl194hSK82?jtr zB0m_8J0a_>;!dfa^ON~}&EC_$OC6m&;e1~A0$J3IWfIuura?WUK*HTPst72EMThQH zfw{7fh-Zf=ZFZ@}2jp<}{EU}s`to^NeGlGIx^Y6i56>Lf!R>MM)c2+aoB&^1qV?ej zpaKVPnCY1*H>9O|!i_d0jbkcko*Pa$a_X`ogEYA0qa-d+vKwNB2C42@TY>{Z{= z(bc0k5R=N+8zBJIVa$9uWt|NF-KXX0mNr@N-d~m0_3PB>SsfmhzH6?Ny&w4#sjNFm z%Hv$WIxOw4e3`VJ@j<+VOsONZ`S{gQp=_%xsZx(&n#Vl6s9b*o4t*Zf6WZy#q|~u^ z&h24@$h2DJ*a8UXuAK)CE1Ba?K6HdwsL?Ix$=ZjSnV;Zg|2#&z zCk-404bc9;M(rhf{>VB1j1oXZ=a3)*gTm_ZATvC%$S+}rRAvADnCF$qjM&wMpzM%hfMp?j~D@h9QPY&!<@uuBG& zi-#d$X4YL-NGJEpI}XcI7aT7gXS`kdulil&VGzOtj2J>a>Nr0ud$1ILt&H6C`>CMT_9TM`Mnw+Bgfckk!jWaIYta14mdX znlvzTHQ=6M3K*gqiQ0~kVb#dlg3rU!^vc-7(zI-obf0>GL##;u_y5^udv-Wmx14-? z<#~7+%5CWTpO&6id{~<1uTYBdoeyKy=D%RZC6Tc4CvTw3_rvU$$;<_f!Yf%Gl}Y$q zhwl7_^j`W~AZo-%l?!F~w&UQ7-Hx^e?=}%n4kkj=;AFG6GbCJEOJJP8Ldbz4{16Qh z5b9XOjY}LKtyh8PY)vM|=WPAUrg|j}Bn`}54WJW3-{U$uOJr%}0c4%4^;TJ$eV%oP zzB6RH477cH`($!zQW|i2>%6Y{GQVZ5>>PXylN|5~lgN&VadfI7c!oJYsTeFwlZAL8 z>F%WL3{~0L_mt|34o?1Jr)+K@0^Cxh%uwHA{k87V-vHcWJyT^VBn>1DXzSt3!41vT zsLZl*HltX;u`Ig*Aq?mvWd_(ZcILQ)!Z53YBXEA6DT9Cg7gE{ztStM==kYGlC__K^ zk?j82S4(B>CT!7#W#ugOiLKIc-iKw*JKu&`;&5u>WcU*H+6)Fx=6=QmB(1w_eLq5ye7;>B}6|vpXhLd7R14pC*_ek-%LZJ{dYre?4Yv{jO9dVB4|B zH`Jpb2gW1PV2+OAAAVgA9FcO9v~4(7Mo+vD%UiMZz5yRzh(|e4X8>jj3aL(!s zaWbbq^Ny4n{VEbJ;NwPujHHk>FrziV=h)20J*<{cnL|_~g|;KARn8U^7yUE78+4w5 zj~0tJDCXGCtvC$rAF)R-ULY#4Z?$`7F#`JsU1-C6!P;JRNCQ5YbmIdE4-aA(y5|O& zeC#%SxL6N+bu%={CFY^&yv=Gw`2nW2Lk4gDsC1tFbJ93>nKUmwSz0&!stjKDhiG>e zKq7Odf`wO(M&q>EI12Q#5|v4&3qj@buoxdORYL^hK%{2byT|i9X6ZdSK4jZ*nJqD1uqxVb-O;-*(q#w71MPMMGe4KElL|iY@W3MFii3!%(krEQytRzsEeI!} zR`Kbi)Cx}uLaCY4HC!N#6I9y_l?!p&|8f+a+ zL)ZE5fFsiEe&`+?4zlfE(GDC3V(i(85Q=A{ie;p5l8pS|vodkUtE6esI?VW5Chg~b zLi(@#APz-aDkUBb?Smt(aY#VUa_3?hzVSntJ^FTOoVQFG7alKjf9Xs3_yQ*gPpsFH z$;fPY_>OPN(6>K;CHTuA2M=x{b6nNNEpBO5r{;x=lOvb*iDI6Ir+d=C3#ozZkv1u! z=QKn$;@S?69~u$bMq~?9I1>P?zI&pj>HW7}g%26qF#~(K?!OywVE zzFBfs#`u{!g`|O`fuw6j~X+ULnI`&4@Nc+)E*j+amK4p89d;JLEmgrPfzfvab$)C!GgENzTKIa;PG zj5pvb9$uKntNk*kc?D*!V$gxW6W#X>?8UPE_N*RCq7;e~6=!Lyl*V}pm<};ZM|qwm zWCrpSNg7BRfL-KFLlXvx?T?lmWoatdeXPYCvp6G*8()uzfqFk26%CkCiDl#rcDDlz z6fg+~=EBuD+~9WEd)3vl_nTMBo`3tg^xb^3n^~n;Ucy|3==_v%I8QMHl*`q5=WI|- zM|Xv}{JJaN8&xpOxp_}^|0&twWD4&Os#-I6$;CNIa#6Qq06z){x##}RHUQFuOC zRPmX#2b&IzD7b{)^a6g^&%2DX#k$YrY|kD=9)9pf99;H2*!Dc|#a0y&3nqd)HO|lz znV*)HwHIS=&vTWcI@YH%IdN{Hwi)n*kl6C74Fo-{B6HGpT8&bC;xC=sF>iSR;(5vnbe z+odwNSGvyoe{g^hW>X{RK}5G-f!UNuaPM8-!bOv~m|X>X;s=STCbjjh&1i#~)aYgS z!CPhg(I@dyVlJ8uG#~{Tlx+c4v{`KwVcNrY{yUbpKdk~ZFWDq*n|>W1Lnt4&!pYk? z%gM2IiCmkPLr}Ki!g}ShqeO^?2*`?mkHBg6MhdO@?5$|3S<*n#K+?dB)Brl6tRJ#O zmPTGkSR_l6jxWI#X^~FZId-?~>9bjpWpw6T?yi1MR@(8%SUFy?LI5f{Cvs)Q3C~j5 z1g?>+uE>ZcMh)d?nUN5RUy{+vGcu=Tu`K9Zq?vmLo|XRbJs2in5CWX6M3fVk5of53 z`2s?=qsh`iMZRW{P$`-;kTei9P_REUMzf^I6oH<%(?B0Zbj%-&&@vpS2#Yq(Brc4! zHo;dhjAgJ7%fypAuy-F`PH?!H&H!aT4>g+KEkl3)33>LFm&&f!yjq@p!|Ub1SHBkV zB*RK3A(Jks)Rt`!@Qm9S1rp{CUDEmkKUZ7QD~#Ao6mJe@IpONaEX}$^A)lm7Q6{2= zWIi*ck_HY#1AHaVKa*rqa2!N@i_fGzl#v62xb8u<8=MZ~a8|Br z7&{(YEn{t>hr7+2`tyiSfB568Oz%h@dU6E5+i$`jYhzz?r+(qKmVh3__z zaS$5~I7dS)@XWDwiCkL~xYdaqw0<3};ujpSb=b}pQ2rCsY^hbMN76vjK+?br)PVM1 z?9_Dq1z#atXQQz2NK*RD?gagAEh>Y)&#uApVs@y87*B(F^5}1N~ zwUmw*IwTH#&(A=fB1r>D1JD55i4b6K@u6gz=^7Z0p!96_7b8vprpzQm?C2+u;4LAhAmH+uAx}mcw^WS$J+A&T`15m|L zYDMupk*UFKT#;NFR8AibMcY?mWLQ2Y-IE4phz5!er@rG9+XR!9sQQR&q|kOS4<9)u zcRwgSum7mD9J5S`#&!5gsHCNrBw2DjIMr)~I-FG%Of7fIusrP6%NDmYr- zFM~JzwUoP-!nxWH9#Pvw#>H}6+S(eI?*;JqxisWOg+p~Cejyqn#xG9BtY%w0IX-9G zUo_PxX&`A}#%h2aiw4)j*vo+HngFwxWMWt%O9KLsb*@Gnr^`4oa1>+n{=sZk!*SS5 zn?rr;LG9{0e&fI_V;a&9z4!v3l|>SCrcp1iwAqCmJX?$7dT4uof*JnL>6(X5+jPSj zp9d!Hk&g04WLZA5v{)@AFIOxtvsKTLG6P+){vpFLO}C_hqyZY2Y9VJHfE|qUQ|;9+ z6*V@~YLq9i!*w8)@8bk!sohsA4B{gWgz@KP^Y;uFdmKw2mYVfPR4%IWXzO4tjVD%q z?iC}3q0VvJM=rVc5V*y*Q=2OY6I>fwCgpVzCrY?c*VHWlS_h`%_BNLUp1v>z>goAr zC@GdSaPS)7gXlu`Oah?KB%i1J((f@wF-E=Yldwn3P+CBsik$JxII$AW#}7<>8=8T$SwrQD6#o|R{fKS|VH z$b|{~U}WkZnA!s;!~z+*{)5ta%B9lKvq)N&pD3-HKPY?#D4-I!O+t)OD;6H+&K`inQ_+$bhb#XP-Z7;z2mg z^&c~pdHSH~ zLe2xUrCY?>l)bQTNmoq`mK>sYuGzo&hON0C2=yQgaqCN5O^Jq~0k^ z2>X?2P9qZMtGEH2&rgReJq(aB?b~3f&41mwIQmcy$`67|%PmyCVRKQVl{y`2MH)=X zABcP=d76X>%MAxEoV_d-BI$#c2_KeOSVuXXj1=|`!w;#EkTm%YJQ4jDEC@`o4`7|^ zXMi~Bwa?qy7W)G`e?=N8u5tANn}md#Qt`3|#hG%XG{PLu3t z;%siDstc^g&59Vqc~)17u{y^piI65`7LY_hb0!lxDNEtr=1s!p+8ydk1;tpyZUM z?cIUtu{Mak2yBK1pT)T6IchgMG55C6eRZ_px&Pq^^2D*I<064ut0n9Msunb>Y@GmN z&_R{^_8cYd>_u_`#ao%H;SIB6qY*9@q;0->CA2W#i>I5yk}PiR%|+xf?d)d(PRX$I z8b6EN6Hbg(fmi*%2uOHLq5$MVZ9>EM4$bJv?~3UAITawEXhs#ZPqAmjpoGwg-lp1F z>O^l?$)5#G`9BKhiwu7r#sVCCkeWo|g4B~K0GwIGd=_utHPQ!6?u)REJ6;uiRV+Pl zU2bY^&0ZU>!5SVjfKeqU(2}0yp<{O559y5!^P3T|l-QUP)6i3xY|B=IjhQEOqR!{K zxt$t`ra6^!1=HJgFXh2%FOX#ThfUwHTnS8V#!`^aXYdu!C)8 z%%57_J}0)uK=U*~(zk=V$o$z;U`xApe=;ByH@S{l_#ksBIbeS{z(07yH424;8 zvc{2A#kmJ%lpj*{r4|@bn6EoJL-ic|;#Z*2?BIyL9+HsGzFhZYA*GV^2L*mHnqE!^Zpc3|yaIzJ(6d<6 zq4tWxe_xE1Z|OOV)t?OrB^b|1BKpP4h38r7x&T63@b?>f`y-2`yz68ozy=2!t|V@p zekmXjzP{$Dnfuq7f3qp_jk}MP22=PWx{JTV<_R$kN3?c_%w&Ihn7;FdN(Wk#$Yqec z`Jw->-4_a*eY)zxL08oyT#sNRR?@rBW&%=L|6%)>4Hk>qG~Kuar>Q5>^%tL0;mc*m z>IX1X%j(#ey&v6jL5+Huv9%xE0o%Na||abu!;qRtA1OcJfkIc*{%=5 zKCyd8EqnPdtr4O>`NrgE-1K3WlQpAfd|3nRQXzU%LeNKSt;(cENS6{DV86iMZAg}v zQ?uPjSS4QSv4)5`XRvYe+eYn@y#?r|M5aAlUr5v8Y_5)RDBa^d!heuBZu9nXKmDqa z%Xp#<_(nwUcy_+CC$eznig&LbtHP-h;n{KbR1EeHc~O1f{mroS%lH{`H$a+@x|8wZ z|JMt^8bqXF=U^9K>f*ZqTH0~N7OL=uQdWnZAtf40)ankPOeS{H74j9kQY9LhpA6*E zC&@pu4rz89yAW%}u0@ajsBiaYj0O?*>RwQ+<@fx;p!D*&y0m_mE7jK|yqI-2ZLeRh zKwLdOU%^L zgZcu%p~s;a2r(&QwD>kXspPy_5k`I&9U>(Q5hPazlVXNtxX>oDi(f_(r5DVO{25Mz14K9vb)W9>Nq^cNpF9HjO+wXpVfc+09rkNN=!#W=Z zM>S}4(xXoaqd!?{P@E39OcNBIxXs++{YoHP=sbE`=-4BzqD0Gg8%A!tpjibWUBnmZ zP5TrGP+r0lsV6NoI|}sXtm(i=Vh(V6&WagZ3tAXyat;b5a!N@aLa4WEorqza=z8z` z3%#c$Yh3M;8!Nf2sA7&u8Y53FVHAGjuatHfF&9e!QM@|US4U1~<(1~|h$V*cGQu#s zIv<{I<2Woc20pv}V{kw^HZ9l-^-q0)a*${W?`842)EtTje!OgNRN*{dtNh&05?mXa za<>MuUl7}hTh9dz5`v!u2*!$Lzon#(@S(-KO%x~j=kPgx>WHl~Jp+Nn=L)x@`Xrp$ z0Uc>RlHa|#*)pmpFrLR;9ONR8RCWAj60IDxY3~IIY^-SxBq8JOHlA~+&}VSK*N4E6 zV0Anfd}SxfCU%-IAW?i8la?ay!`OTutfKtCF%8JpzZL(}wtHY}Q5|k*DTIEE_p=ZQ zD1D+ddmGj^UhDT#=&J8suwm?x6z6zQ-gZq`Dsv5A9R+1KHl>rN_uvaQ{Htt6o?2j| z2-WVu+dV~IXw59YiMBt?aW_RwEj`r|2C6xKzm> zRfWAun8?7(V@E_%i@`!-mgqLZ@zf?VO^{$y?vv}}%eXI$Onds9#dgvqteIvC6gJ;C zuNzz?m>QJ7c`LlXXj5G5##i8IJuqPT(ns1lQ#?Jhgr;{kiEzFe5HAUG#>Gep_4R0R z&Gm{%-aL^%pI9t*Tik?*EZ7x0VwyzN%29cRbL>_sDfi6bdn;qC37RcDlSzFcBn%oB zL9w7|*=`>qNFU3A%cJVe^E-h}c$L&!tnGfW-PJ*mL~+q`jc_xwvAG8DJG@Gpj3PNe zs5TfEr~2zW)K6n8Ba(5#LMmsZ8DQ-9OoE9un%(}3C6eNUL#>|%c{QV(c8fF>;uQ_j zS`FGl`8CmvkQr_+uuqnHI4X=!K-5s!uZq_CA1V^12g}!MQFjVc*#CYkxOfw&oDA5d zgAr{?m`#iRi11_&$h>*^+hy(nXNZYST%YZ7wDsHhQGHeM>!NPPkkyWmU(}b)XhjUe`x;UySkWA$BtWQ}?<$wIZEIaUEFi~i zbq>Rtc{)rnxk-z4=ruV=T}ji#pjKFvNi|O{BLE{jy6hiIJ$_ZZ9y>5c0^gW-2H3)2 zYkRj9e@2nEuu;PM(fF#h6@FrjwzV!c^Sa%_JmfUQhARHxg;&nBc$ z6Hsa7KfSAnI%KBX3Qmz}1~h~65J zG*4Z~+0NEOaNT|=ICvuR4z*F0IuMLIZYkh(9A*`cg#s91>o=~lhA&fuz*vh=6#D2? ziF8fhapLavW&}9=`=c*BG`vP$Zk%A%8Lho#vE-&}91yO14MH7;na;OuIk`zL5u)xM zD&;igAn@2IpLZH%Q8(qVdx7q-9Ul0X{(aj*=PTUB?}%|SeBW#)tmE}1peK&EaPHP0 zzytkXDvK)9Iy0|tMXJero;j1%qb!)?w*r&zpbD>lFax(NEGf7#?!K=3r4n8Hrce6$ zidRnv96!557{L-lD-OU^B__G~#2NfPxO2PC2$AO`>TCD3sID!U8WMiEo=_dZq7OCK z2`^a1w64U8*uN-gR~I3k0g@v6zbTBGeH*0)h;Hgs{z4~%WN=YByp`{VM*U0q4NGFDQ#%x!HRACDJ}x_Z%!1?DIsjb!fXqj(p*jzeN**Aga^{QwUoc9|1T;Ggr2eVnMvZM&#gM=L&BQd?5 z{g7lSxVU})b(KTJ;HGdxj}PMI=JgR7F^FHnId{-|^$&7hAz89rdA8~H2o~>lMxFf%! znN|(a@PYBPl8ncv=_#@l=D1}F6`thvFqkXX$rJY z!@0;_YzjI$^bp5%%Cs>ihPUZDL_J<;ui(ts^3Bm8+29~w!z9J!vRsS=(kBoh5bmZt zu?0+h%J3v#<8D4B%<#C&YP{#BS>W(%V$;zIASLsx-?enyC!T~coYvBo|M-U@Ibs{r z6yekx%f;}snbea2ksKh$H)Hr!ha5s>Onnbf|NS48F&<%!NIIve=Md(npwMNNp6^)E zlT)u^y^DsoMUmw}H88XXwpC2i#k7ef???B=pmsq(>@0}DmF+4ZGx~mf>~|{k7h|X( z02&V$&v7N`?L}F%!wB6~Fe}CCO{hlde8sl2-nD|uVc^N!SiUglYded>RYP6xX>-}w@mVXbC&@CCa`q{HnEns*vx=~i z7re*T#@0#8Ec+j*vO1al%w!>a=bO4v3l;^%&qL#%Mnc+qw{L1-oz`=oL9fChlfN{u z3-_2ldQ^ylO8Q;)$-F%ixh;~cpvpg6=zv#aj(UM2RLe~>0dk_diywu+3G9YYK5yfn zQB7haaNekpOh0owDN#JW;w%=7A*Jw37+q0sW8%2K8%eH(W=IF1u|Fya?#omk>gt1IxIoXf?rc zlh5Ow{~NvfTT?pVt`Hw0EU+01sMz{f#K36Vj96DUqE>Zg2jR|uJp0~!1#S#SP4j?F z_nilqNa@n3oO!MxhzxYYj-KQplSq~|22{cKE}RbnJ%rmsI*6w^n|qWD4mKM58gS~hYp@PC-PF}wW78N zptOxaGNsz#xY>X`xJW(3-# zfjh#Oh%}j+(`6AqjkTv4QY4^2B+u3QJ$&p*0YgaAZy#A05(=kV6(L;J);_CB;D1x8 zW$`UbYrhky{{DzqG#|Cv160rIFWJ{P=NXWI5U8eY8&4wFCDofFejY-1RFe83H;rZR zD@8)?{p_M-%!lq%bgq+q)OkQa;H3;WrX90Z(21jlq`bpIFCc!Eq`&HJHc_=)L^?O&ch^CvCWL?G{51+6-agqd65 znBCwh5~u4BhwsoWsdAn2==kgGj($fc;Gx)DQi2%CXCf6+NqGc-)}@o_xf?5nXZv88 zB2(?`)BX54VB5ARzlFym9wJ!}9(=jnn(Xh1zMb@uqE1YjF2X)!cHp8RYM~;UQfqgv zK(0}ih|NYjtTBy}bI7H-x3K<~a9+Zcm;XyRp2Tw^qExAF+|M&=LW-;Bo|dK8Mv~-J z!Ldw-U2uyjXT_weJX++t@BY!TaSB?tam_8w<1*3H3?mG#sn|fjRf51dfkIq#vLfkU z#3!~HP($n+5*X(O8D`-^%aV|rekbP_t4CeNWizD$K1FK)pfIDUYO`QFSzr~djM&zS>#$o;V9qopKU!XRw5Ab{m)nPF^a z_l4$EyN_H^e|F`e*ePKB8QA4Jdex!zBKpi!ksB_V2Do2rkV{7(nMz$m%iJ>D3 zJ&{n0}2UphxUKKaqovbe zDMqCW?Jg%MX$3Q%CN^DYmLcbw^C~U><1auUO)7}yv8X5hk4f2Ef`O8_;7+&cf*`e| zWgp2MX;l2|3<@%v+qIn@CFVt+!U#kCFX)1njxQ^&Ids759aiPe)h&&Y(Uh#Tet*uX zf{-1q;viBL3s%m2>yPeSg03f4)9r_X#!E%0J&E7FG2$@C7vF$mpFySIHQrKPeX_{* zPpWT4*RRFF|54ixdE=Y3T180N4pMtGvZLRu7;0@p{8uLd=-a{Fjoo+U~bL-ObL z>GF|-*geq+fRCdELSnZC?Vh#K+wYiMcQ>0Q_HXd%hXRJ3?0+d1cDv!qdhVfQ@W;Lx z$eF4n8xk1 zZ9i07*j;@5AVrM_DOu9e&>1D_2&IU)!) z&_YN(dph<==Mf->Qnox1SkNmJRra;Zr!J>wM1KFF!z8VSAnA0ic8elGJ=+)$VeVdF zW>)_5Xn=4uA?`u{(fZbpJR|(*@fkkXuD?pR#nLsOPdk=*iCuP#m@W+ z6UlK7)%S}h5}i%&Ml|J1+1(Q%FFD+&LLeHKwp5){Zz?jBmk%PnlqYG7`8B!+5u+lv zip%KPtEL@XCgb7~I&I3Q;_4#};AnT!rOW!&ZZOD*%ZyS2OW{ zy;(NG5|_r#PBGV^Amo2@DeW~C2@Av%m2bQ89n{+&}tBMrJ)nk8* zJjl?d`@v6*ckTDZ&BjEj%OzMz<1*E&kaPs-BnC-V@sUSw ztN|YvX7r?o@unvr`oqRymT7hN6$r##A#Z&qAd}jCQWvK^GBIax+IL!&F#Qx57y~6%{7QUP%2O?tjlX3gGYICS<^cCb3gW2Jp z?8))4bx~XXi7GSU2j4$-!hkJ^{F}bL=9!>cWtYQfv^_*v;0cGek@iNIlh-d^4PeEo zH#(r&?ZZ{0f7L^*nP;>os@DYBcuExqjNGE1S|1uUEUtOR@}!jmlPE~E^~;SFa8_dy z56=pq?5IGUZSLH>w*Pc58)EjA+W*xOi~f+#ZP1tpCh2O$z;k%KE9Q1KK8SSxfr}m>n z8P|GHQimFd{g)w1vG-MY-MMVY*}OCxQKDn&2tUT$8NRiRm9hWb<*M7ncqJquN$Psg zXL2C{h5$h;10gSx{`n*eMWCX+S65SVXQh9*AQW+a&Anwmi&(3}q;!^l^+gB>Clp=5 z!syr%pIdCQ3K%TezurTv_b@-u=PHH8x-xgSLiD*n)zEj0QN_6!?rWcosQY~I&-{df#Vv^`s~Urzv%Hy!13|B`NjPEP*~6r2i;WWgL_$^jgyT9 zxn1j*U2O3SJ(3X~435N^FI>)}qh`M@v=qtjl z&^R7W+_Tv&Rr`7NFntVW&N9bAi^l_qfmZtL--U~ulUvVyr z06iLS*?uA91GEBY#x*TU=cgg`dM~bcYyj+uz-A_hCXpslA}Yc&{+!31T$>4-4Li?^ zC-T~fwBg^iVLHO)BO>SjodshucJL|Mqlt&KXU8)2BjbPMQA%sDl{M)4_VjreL*g>7 zP(@zI{=w0|K&-iU<|s^<3+4GsMmff$LUhIZeXU;-_ew5Jjk0~C`9X;D$q$E=zOJj; zqX~P%#n^9b4{K-N^dew`?M~&T={bsUCc)1*wIT(k(Vtt!RBO{rv6%i>Gi{b#_ux)<2hX6=v~C~>ul$u@_*mV4O0}s<@S34@JQbs`qW$Zdk(U% z8kLm#8x->^hXiz5lo)XDDgPuu@Y33G_Wx*wO0Ya0=oZiG`57QVh>??kj69;D8_WYq z&!2SVDz~sSWafzu?B(N}oUk@@!@`4eux_dYqn;+V42h*9f6Vfl&sJ~99XATQi+_9g z@-m%?w!}A9u~6vMi!SoZKr1(xD8;!3|+#ROJ% zt2$QKRwTY4#3G7Wj+9b*da(J0?on?WNsbCa1-62kb*m`(LcEew7MA!W#Po-E{#@A# za)l4k=r5#@Fr6g$^xr=JD@F!Bm+nQq8W{$Zi}qR|l76t#%x;=z6qAx1x<$9XtB*f` zo@>5jy!&*o3Raht6m`3)KwkdAmSp~!0BmrIoAEt!jFSYLAxM=Pr-^}f^yK3CYiZ^` zZP1h>dVSEi7d!5Qm7tg>;oQK=^4;TiAB7oRpWN=N>b%jNT;)d3<&3*`)@KIK6VvOI z>#g60&a<%;V>N&3QpgA$OwBv&tTGw4m7|J@U|+Zl7=Oa$6msJ=eX0s~BIqMYdR!cJs8|HWEf$Jx%7G8z3e7W+n)#B)bjG z01uLD|KXVl2qu5j2ZLHdEyQo904^M9juy6CD10_WzXY3opRU4xr)_q;_5fdBL3kvR!OW|kWOSpYC!vGYbFbak?ZDl65cV2A~sulsgVFQ z-k*iD)a;Y{{hum?6+L(qAhmTsUZSHpjoN;E@R=;ZW)SAI>$qs)U7zv=InF?QO_Q`+ z9xi=yw!kS}+>pT|B{NQ%Xlo}-T$>^iO;`iLpI3I8ffi%qS*QPlM2(`^MZoMNz;}N) zyGKur$d18#&MKK+81xiF)c5%wCg)4#L0LMcqs#9(o>5&X=K}xh{(nOV7aspGJWQWO zPQ?;qfmiDw?ZlNif6E_SeE7l_Kj&}ks(kQrZ6P&_fVU>!1g2U{eVMB_s>1mH6)X*L z3l`&u^DA(~qx{9(#?H?5ALpb+gk}?taeiCh9T0JZI@_DU>{E--7bkl}4=9lChdy%H zdvjr1ewpImZL0iS!S!$JAz-o^?8VZ0#nBJ%fkpzOe`$&dV!K<+CU)4+=+D{rIVXNu znfWM4t5;fvLFTA&(SUgyqB9n1(r>NqQk^mQ(R;D>*e=|B;OptUnshgGWq$|C6*`KA z-Ax(g=)yTc_&GVGr-Yy%Y$)`wYG?fuq%=)GHFfwE!GL|KqoSqYYjTMxH9>X>;}2J7 zDH+bFCd{l1u@M4X_tK}aF62%3T#olo9j-fH&7T988}0VEbecSRSTed`Sfe1i2m zuONNSyML)H*L+9Dp3*>(WD~GS&P=fiUcdS5??4+a?LyaShd8+_7yVw2IuX8!omx~5 zy=y?${DF-|oD}0e(wQ0U6TEC0SN<3_+ArCQS6A;vRtWZIMJfC^!{$5-FjC7rQhr>h z4R<83#P0l?Ju4WasH`Jokfg1{Mb^Lca7t)Q4~tH^Y4H=PC{QBmTh<^N4c8w_VhN%Z zDSThY8DRHEElz-q;D>5(a{ceq5v*b93)pD!0itGKHe-HAYyTpNT~L^R0NwS_y;OA| zYKIq;rdD5YS00VxKe|W(^h2KZ-aN;(wzc5f0oTj#-839aJe7-?nE5Z-mwwj9NETQH z7?~`f>OS`;_)PywY~2qxFdX&E7E+hove!2*91NdhM$ByVq9WdNm=J z-}5cnO){cblRseY{>`RWqk%4>+K(*rGmp~kiqMGfieA!z%gQU0y7YgraVNssY<=6F zQ7V;dd-y0jXoDg|MV@I+O{b1PkSmSCpne>y9>wd?*;C>8%j(3}zFWmRlDI8O2f$m6 z^I7I%NmYrgr7K%jo5GVRA@OyZ$lH%%hZ}!1G|aKNn|k5R_hjMa$Kc%ZzZW+LcT+c* zhZ*x!>yfbPElr1HJ|#0-;0gRE*42G7Gd0B|7F#jJ56yWrQC(@{PTR~!Yq@j_^E*sA zWH}3)>&*9EALL|R-lm%ZGh#6v&W=ccOl%$afoAaGjjCFsTyd_|C zQbFHfjy}ti{})$g#Q7DsCqW}loGxZ4gFoZxHObN?>q$o|jEZD56({*(&7TMel#ftd z30a6cdUNK==R0xqTZ4`qXh-~(;O)h&5KKB?d!_MYi`1Ae9JLJ~bF-U24FIv6A&GB> zd;g~SIOsR)%PR9X;-`wHg+lj2*$2LL zbO$EO&QlqWWuS>FlQl{a5XK~uXJ0`CmE8z8Mp_(QO+CuGDt;Z&`fq>M&Pke@oUoXM z3tL)?-`H7+3yd@%p)^K0g~vJvrx61c=RO9IG>a4XgCd2I*A9JLsJ1~!CiNB9iW*}7 z(@Y2+x*T%7v@-ez~G>L+JLlby@VmxK-;iwfcVS=|m% zlvO`*mn!^cEkej+D6z$^Zv$+)lW)x*xN zeoUB*4dHnV<-js+41mSzP_$CNbW#@NCR^P`>XM{lFBbTfN2@T2>A%~K_GHWPwOVP+ zF61ek#v-e{Ms*5}12IM_eAAO-K0XNgan90Lw}FNJO@xdlWt7`@8C<` z+FlZ{VIxt6Y0{5}pHQIKj3n3wNE=!{CmT0(Tzg1-CPwiW5uL5 z{BEPTesz48tFUDyKYM#Jj)vNtFYQ;X=Fo)+Y>J8x34ez=Gaeb-!zG*#E|)nI;!c5k z?k9&;^YNa>02G%N+YO%Gh7Te0#5%|&g@uq}`k!qGL{38PGdHU-#J+sfw7IXIY?{v^ z^v)LuOg(p|>C$l}o*uiC$;QsprM8f^thCRfQt@9~HnjrfMeKg(#ILbAe+v)lWV}rO zWwP7|-S^wexE_2bnQJ;5@H)2StFzu~plQr7J1cx+P2}}+(OGRZqS1KXLcsc&snKbi zKId7W%!NEV1$_Z2%-j_A;b`b@HrcfPlTL@MbBz(x>)|0BX?YSL-|Eu?x=G$FEO3HG zh$0>_uNT;Qx$`mZm!E8_@rTpU;}U1iBag985p2{X+&A>+}EvQ3^(iGc&n9t^-?Bpa$E1J~Bun>2p ztw@}QA-biib`0$}*ohzKK+FdDmpJw$*^Pcy5t`F&)9j~AZ0E@h`dN;XpFBL}RJMPV zgTwncow?wlHN+LwEM6_CA%9s^0KE}+^~n^NF5>N-nWG;ZF6zaL5pim;!K6#Mj8uc> zjs55&;zVd;gt2Qk;V8@vG2I9fGMyCoQuNAL2}9O>zxZ@=c9M?o>Ggv_8pCig{8z_Qa+;HoJKISo?jam&McD>VdnUT&>U3`xFAj`Te;F|i60HHqbo1nK{@ zWojE(d*_VJlSy|RhhYh$h{qG5(IVDOJ+NKh%e1wHc}EfhosEk_quOg@=h4BZLqI)= z=uE!4wQnBe5Re9DSln+I6S(ey(CFNi5K3Nuwh%Vw+Xjj!0XmgP-wSysWx2W|d=H(Z<_WmSK@law9=Av;ebFYcfUqa(~sTtbp z)SG>ZX2+J}d?o(6ofFiv7?>H805!yPR%XPcHD?XuN=_9aKEG7HqjDrFA?ycZZh}%I z6Ycyah96%|oq`+U<-N(w(q>`fe{LOKsQ#sAU@(856aC8P2S)ZZn|-^x`Non#(XII6 zILAE84|>R1(7j5j9dUE^l8s`srN})~_jQNH`BY6&V*^*u6TkmryIs_Pb7MNHAf^51a5=0*dy2d7`pielx188-(hTH92B8sah9oO8A>Dqp3!;7CJHDBleB zIjam*7leG3W5dmkI-k=%M{ z$`8tW9v^u6H|YFnl`j~PLax2N4eIG(*lsF8=r7AyiNm61BQD`3c^W2gq=}YG3Ect_ z+*V&wB8o?GggNk;0}L?!1<;?1blGGI=`Z;NdG|^9w(~*qmBQ4b|62D7=rw*z91|Ji z6QRFy2u}2%wJ&)Icacd@qf@|(MUuGr78EO?0j`Jag3i_=r~`l~I7uRzqLA2_BDR+w ziaX?J12Pl5Iln~%OjR$2N#&%F8WfuK;a}QJi+NIP1bwWeVlL+12 z@nlJG6J_N=y4}FXsk?u8-YaHyW!gVH52Cf&nGnpc-kfl2#}e>`)~rTb7PMbIC!)Xs zmysEJTtf7IoR#snkvU!)dRK|?PYZ2WV`oD{jlZ}5JWQH)_0kI66mrXnzB&!iX;!db zVd*S#8hYubPI{B7fPvQ6))|PhbT^}q#-Ub4(JJVZx$~pu?`v<)m#I#^=U#Vw8I0$ut?1^BI~XeOPm`k8*4d~ zrgqTJ3|p2(nOvWY8MZMI8S}aG5LnWD`dJAIJ~q`5Yk<*WnHQqqSkB}ALJ!$jBYIoV zcd?H&I4cFXHaW`Q#8H3FyZY)PyYi&|qIKWxakAQ8Q%&uNVK#>r&M^mYPHLacP#o=% z=N-Hi-9=xdjDC!R;*01`MAJfW8b#EbS{rim2i*3M-F~zF=#b3a;N&Ukkc44U$%6i@ z{xmTrfqu$tHs$~Il^RC~N`rZQc#g(XgyD9a`QK#%y$E$# zV1;WlP>=7@M)ir5GD8Hn3;a_913sOG!_K@w$%KTr@#S@?<0quYM$Vst*@g7j@unVf zp(QtL%!A@+F`pX9jHU4zz=&F9Oy}@UzJg?>Ul%~wR-ng0R+kgS$vggup-aPLn`;H_ zW*6_oHe$FRy1IgkqB!J!Y5htd|M!8J*WzTzk&l={o^NF6r8nS#_=AZyD60+zPA?FW z=BxLG-s{A9w0FRKh{c z!pfbRP^*!XNSx|(y$k4kzKL{TTznHH?(mj(@h+lh9UDWQ2oK^&eDg&9^G?K*zL^To z6K^r{%b~oH#<%5YGb;{OlaRa%5X++KG@ zqJ5$uOa2j}>Er_IA|Bg&zlhS}%mkyCB-~ye92EU)c*IM|{mC^lRl%HTkaHujF1V(| z^oxwi6m)jLjFJg41AuQ2OgbpW7Bh*i89oJm(hd9#8-9r7q|X}@HBAnkn5qU^eT@z< z5zttPx;xN3XbvZ1c6yew@C;5+{x6?fc=nT<1Qq0zi*T=!G{h0J$naMQcFq7S4cpR!UkJ>3@A2O7uGqy!@`?>F)CLczW$0V8F1HSyFuRVxXTp@_qya92z4t%zFGMj7f+u_c#j*>@iFe4&*SV81aA zAC8X`V}~+QV=SVe5Cy2&2LoOqwCZ`{H!z)w*^VF+s}6g~v=~DPJaYpv=Cz~arz~$o zb*maeb{RQm?_R=p8~NjZN@#)_1VDSs&gK{B)580F08}hlV8GUIbvH8aT5dE?mXFCv zbo&I))k-uE&dx-FKu>n;465Fc-UVu}nER9z7YxFdBpL{+orqZ>Dv8Vzgx~G~R)>?f(ZZSWT*i+U~=MNuxihZ65!-Z_63MCt_0`p^)Ks$2KiFegr2(H<-{2qLR-nc+$} z*38<97-u{FC9F*!#;~tctPne!@uVfs^&byk0sW~qo4p;azdy|ELfFW_35v82FG1DJIrIm= z{BUBJxS2#KzDm7KTzr(%9;jaAs)UR{uJWFF1tJMS9+k}V>0O+wOcx8mOj2t$34yzp z@JvQ6q;HI?8(3J(BJAmV5iSauTKcrgsGJ8$R2pN65b*$Hp6DNz`7oq2;qkL$sb{N0 zyqKg9FE$pz`|F@kP7ZGN-YGGspO_$Bk5xMaCyqJ>robsf=G7hzwnkzvkMLWBiy<2X zy0Ng{z!KAdIoSl-5v^)8e2uGR;`$qtD@ZHE6>+EYAs)6jb?=WfO)TPG01%9-M}SD9 zDs+0_&58@<+6c`%hP?$Hd}u(u-zoSjFZ@2K(a{AogsI~EpbSbrHgeuBH z(;(Q~+L^1Hbc&7(LrStLsFkKUQ3;o8ozs#T-criQEqS-vrV;y9{aPZ;d1_0%hME|=3L8A9R`>1BXrxk0KQ%Q&@iF7AL^`{dWa z-Co)ofVlYyjTZiVlX)$QEDY$be?#sO4Th^>$WCI|hPXVoA{c2jGka^#kN&Vg{j;AO z8>7)s;N`S(7+(B<8y_1kPp$GFi2!me>r1@~^!2zt5wba5pn&g4;kqA#hS!Ip zZtv4QNh8AA#*=*d@-wT$-_3jPTh0Fk*tAT41;YJpkN3%gVIcvnT@r_&X2NksQSOK@}mqt(Y& zeke4W0aUd#+yyfY#N(%<`8z%vGdHUqIw6xD={s|}#-G)2Q5M$2+$J(T>A79d@p(nz zNA5%d6=V>e1@$2=QZs;+D{&U~pf!&+AQnlFcukC@#M7k&4$%q{5wg|LkBM7N&n1mN z3B=z0*1Axjsv_CEQ_YPDQcJp0udZ+;tWg`@q!m7ks})PBs={I8*Gpre3aLuK!Ao@t zL4IHWe(!a;-uk|4imjR;ZDF+A!|ifBHRb7WHiazEB!CgEy79b1k@vieQ0e4=-jmn* zxF3sem>n{9fr`@Wef`Cdv>h%q*pE=CT+gFUSbaNOG>~hH`Y+FJ*Y)ycc-5)L0dG8-6o|59~B_}kb>Jj^nssjE#s6Olo&QO{hPuqAYE(LT&a8%2*Bk7G*U zk867JJ1tpl21S30efc(-zRrv8MJmj{r4UdopQLa}jc$HEo`W^Dcj--;?U!$EV5CLb z3H>nG^}`r5<2#{DXjs3`?Va8)15v7+cW7aQ())dfps>-9d0EEpuVL4F-)4L+?>6@E zS6+h7?quUh%9&M1F!vAt+B=V;7)r%~KzG{(eLK>Fjftp<`K zD`irZtFxKO5k8F;qoDgV`qhZsNhUqX0j1q~W>8s)a+++e-zb2y5}x<|wUIpe>l(BR zjRY_Ceik5m6$?;SuRbx2A`YH@zBWMzs}mB;**psI3rAh0-JZ4$W z#%c-9?$tQ7z!$SYR2!pgf(_OUNJ^FjzX4pK{d&ue0?r(1) zMm@*rc{4BMJWJk#GmmEvtJ|1x<^Ud~fxSe!@Q(9T92vRB8HX4B z<~T0bM)DAz));|N(f@Wi6^5YD-`v|EoQrS!GYGQ46vg6q#p5NK0SL}N^W`)WHD-v` z!o+^YN4?cFQD9s|2JwToDF57rGhhu@k@OELJ|uSIO`{Fn9KSy5;+GEupbR0OrT!Az z`mSCj^Y*-o)Zqre^nkt~ZZwVu-XkHq(sC{>zFI-Q%;+~$_lwE2Mw zIjv0|%n0jFKN})Q-7qyv*@?)>z1?t0vY+pO5LK&eZQ1G9o)H8LJeyf4^XRX^OL*|Q5?%3 z^V|3Qx)WL=41!4@OIj_RVd^2a@DgPA9m&)|WI_o7jf!V4{F8sN9pn;SpUE8Z1B}by zoJZ0ex;^WlL7*qs1sJD7Im&5xBqK^f3-;zop<`PM81n$2C2m_iY$&h|7(h&xO}|~S zz$!%N2=^Lm`dU$(>3LJ2S^5R~t^(r12eGw(y~C7pAlc3_6w zF2q~iH27moW09gLZhaHoBUIDwec2JwgX8OeoY8`n?4H>{ix4GLzbLe3G~ICQ=hCIR z@EoB?Y?{Nvxgbe0pJlGNCT2)@o)B^uIVGe|zP+GoW>1BQNQ03e@IdBS?ArxW{;6bm zo;CbClJ2WN{_y8~<;7K0!HW8>ZK^j3CiT|Z5AlCrmR35yJcn{Wx!E>37wyX!jY;tlum-`-Jle?2H>@tJ0Oz|9* zJ@IVmlpgS4lu!HDF!`nOtPf)YBr0SETee|QvlSbo9`Jk`7rRPU>!7eyq;Djf`%4Ff zj~mAhZ4W7jB3T-Zplsv4Y9m#e;FYq7hr!Qa!D8{wuOwrl9HN6Jly1!@{@F#VmT06D z6!S!re{YX5uJYBcNc zChf4pj)-b+JGPGpkqSvV!BSfA%L)6eNpu)k9%jTD2ko?Y{aoJlcWGjyE3AAXb&YyN ztV>nBt>Y*3h0xDX46Q1iH=ZWZA*1v zVW07mCiq=!EPpiB!QGE&v4l6|c(5^|+}uVt*TQC{ei?RxLuw=pdCfOj8oXx=4|jJ& zHPH;}-;RLWACts+ghClx@o*}IJ9E5w*@O}wxL@>i+rdu>8dA21EPQ{Y6PuMc^U%%k z^ho_xyJYBWF?HEYcZju5y8%=TI1h)p5(lamWlCvv%E!*UC=ZyTj&~G|3RG`nPYk(oV5YYJFuqlvQe3qq9&4}7Cd=;-KtHMTUN2b3=TQCP4Cx@y zK1qJ6558S+bV{X$3F!X?hwJmZsTni0?&|+x>Meuf?3%Da+$8~mYjB6b zU4!c&3GNo$-7N$O4DJxz-QB~W!QI{6Whc-3?e16iPpYVzI_GrvCEfkuYx|qKqJxOf zbc_h!1IZs8ve*!5>ckz$7K5vmg3TVGU`&kEa?0@${ zSkdNZK>+0I7Eyw(bI_zy*IH{eE3SXdjZaXFBSZU}*ZK{fBt_MGk^;}VG=5@WRx3ba zqS4PI6eYk|f|OU%`?mQ}pVT{wlXX2BZp$Wq(OMuB))5zdriX?h1a^;H>bD4UY$%Tn zLwoZ)23c?bJ~7)K!gQG93!lO)R1&$z7$!MVcijn}Y!;O^H%TTnX1_2KrnExTr&E#*uQl`1|Ztr8z6GMYfNz&0b>8cgsq^bYMb z@r+#>o;wGh!Nc^*57>%XhtJ(Uu2!SUGq^sNSRpH!67@%-1sF0a(RS%8^&8>S^a?3& zeA6!CVnQD4D|_Z1^ej;lp&NX&R-{ua=aT!1#MP#&cCzn>bP+$sDmXvN?f*+k)O3b^ z-u=fRIkc*c8rwS#C`<6w)MGM*aiV-3BccPy3AkH4*+%@&|ZEtd+$=Wgt>mn417}UiECC~9L4P*4)KoCn%)Vn4rEeBAvneH| zA1T9jR+~DoV1J~@LfDM^e`f($SiG`WtrJktGxY9}1!uGG<}W}(9-{>G+uViDPG{fa zM}ySwmG0$WDvFBJh0Zm9l=r~5a4|w4mG2W8!0>|cNb;sXV*BdFSy_ITfh%7>Z`nmS zx1W|EW+m)8Q^fZQGy0|gK+y8uJtHAZW3ibvZ7$NfmZQ!5>Jx zUA;-?G$Pj<7sXnK3#b2yUxdA+Q&HcKgJ;w{?BWBjv#gPjN;+BnZ4hFX>#R~t*Hx+GiRQr{09zrHx9+V4zE`PO+ zh8>(YTw;sqk_WxO>3VpCNQM?9-40pEJmIhdcE$|~EMumAP6LF*$cdQX(cpP|nu7(8 zgYU%(xb(Ssyk&Z)c4Ddc00P`1tLU8jyx19+`1sY5J-Ni3;8jldo3!t`I7)^7e(X^C z?BXyRz|`y|sHSS+pxAUxUf!|(qX4+s1Ma?Gf4&edF_+xa4Km9K$GRik{>N>zdRkP?VGM=`PLe(YO|4X$jqJa>C#xH$eDupWL?im1R94aioN&8la+xz zzhGbsxRr+l7&edR2gCq?wyhlP*0=*frw2B0k#N<^A!IkhbYXOLa;8|L%@P!Xja+eD z--Afd;%Z1s&_{JHWtgmdlX+~cY)hU3!FY+=6`N2GF`u139~bM5IYM&A(0wlopFU9rr+2czbKoV~O*>e7i03;gAPdIGytJr& zE7nzpZdI?vJOf1zj2R*D)0?6`{aR77ht5B=%NlAh<%gXT5*!!c3oA^Bw@*Q~BiLZO z#p>hhCqX2~5VkPd6;LJGqjex^UkVd_McLLom?a`~kLA<5d@9j^6RwY1o)BeNLz@#N zB`B8d?S*U;7mvvhX6ho&q|l3OOe*ABlDW)?smv1UhyVCjiV2<=#R2aeFjp(`A|m@U zcqGOG5&V~$gW8J1rq^oc{XsTElg<94rak#6oy*Yga9BD%rjIU#D(yd-C1$tRTiABU z`JI0TLJMyI&1nOaZOBFgfnE4*spW>`a?>2NlVDHCsc{|uq#qPDk zZv}$V_RKS~&+jOqD((0GT=eHga|><1r!ajqE0bNS>Pk#`a{ZFSV%eDA13zOoLPQXzdGAjjYPOwD4(RJ&69AuwcLb5GChJx#H$(_>Bk`CLa23y` zb%rvx0w2bS6o;b0Um8Xf=A& zaC#q*mS}BDv8hw`gha#T;p2_xP)G>kw+s5$RKgw%rArvZRdu}r3D@Vog>`X?3X?q7 z%@n(0gK6S^t@|r$R_RlFyPboG4ZZF>{m73TY=ZS!EyzY5X0oGS|7EjkoQHe5oTe<5 zA|>ohrL5+<@EIn*cprgdR1a@|4dtntxM3;=L3G0Y&@rKk?L%e-UEft~o>WhBE*b+d z*z1pi9-Yr%%PjhEfc9u|6)*BmA)nZ6(_f&S5c&7* z({ryI+-%+oDq=!*kFV=e_mwFPnMj?%9Zy#~-t`QeM3yCtKcryN#90#)n^QgA=qXZ{>?1E4hL2zF>>A3>k# zcmAG!f@w}fV)i6Ah?AWQ8h(WlH=kD~v!ok}Vl33?BVt!1(E|<&S>Tf*pMP4?PPkey zeLlU6#0vdx(m?;hhQA}nm$MHT2*Xk6SHwoH= z7f8@w7!euyJOBQ_l=~0#{0Dsc<)O>9R+5j`NUbxpdO@_9$+L{x35SoT`Bp&E?<+$& zn{1|&*N_orOeCbo#aM}L+#thnYNtwAm;n-vj9tE z^gZ2g@Hc|dC)8qsDFOHd#idzA4(y)i74wOza-V#{Ad|H-xvcq@G}Pv8uV|!yc}VlS z`iYZ%UqcxkW*g3;On!M9nOI_N+@^a3?9aNxD z7M>I1cRTs)E^-l@!Rx2H=IzXjUpNE1VjcGfNkFnMH zL$oL*yI4Cgn{`xM5Sh=4pY<@aRI#-paU050;f;R`sP09GvqKvg^LJ==Dv7x0kun|qN8DPDmtdZD1r8PZ=0*^ zS`iVbeD=w#%_kK>g(=O~oY`*!0s-N>po2mh8bDpbpEVWzKkG7b14;2w?5PdK4Tn~A zme~+yF*iV|+qLbvvLp6NuvKfH7W z{$syY-fR7Tum0c5mnp}&sPZk0Ug_%t#guEc=>AM%tSUV?o*$HTDmK}lFp$ZznFnf% zEd34W%T;DBZj$b4^GaCx)>c`rT|<1wGa=hZ%xCs@h5B1rpXplpms-zjsfH0*1O|^J z{bIN6Xb_g!5e1f5n(@k}T ztKxgC>QdSHb!kwi(JKF9r)^o@Rg9cc7H`S-%jf&^V9I<=5UV|R?vz5}cb-2VWPGy( z9mNTn52p*`ThZ+=pB_c0&94?yevO?$fyytjpc@`u!0dAFUlzC1Y-W!L@Kr`|_O`b5qFFm1ZDeu;1~BNE z`h^8T<9$LEP_0OlO)|#>w={**j3XErm%XU5V2ZvyQ2%cJY?$wkFGQ50hHs_3$_*(8 z-zZR2jDLD#z3Clxw+c!VC94n&ecn$Wp^yKdUHSO(+~!dUSHY4@gM2$tsD+|ihSOa= z(-O|j&}6elRbo_iJ^hzbLoTj#hu#RW?mnPrNyy?{iN;FM#>}e}{wGD&*l-_^y0q$2DS4e23e(8B$!E3W9KA1wz$DW#kW{Fnd5Bw z;#i_yk+#E{fQglBBQSyY+0j~aI4PP4M|tW8TSV~p#}rKI9(L7`{E=8OYC*NXj@T$4 zcrtlIw{@LR&1h<$~E3;h(eX|E7L6t51W@QT)48jY%k$o@JL)Pw#lX-lS|B z!J^ZSgf`8r6dX{!8>~nT*=$@YBD0bJNA3JLGd%r0eP*LYKMNYH$12qLe=f6(B+drl zgehSBNDg`O0!e_&;IQfk5z%V9?%_`+Kl#9SI{1Xk!f9OhV_uJDAlCceGnyE?OVj>t z>?HIgn0IpcHx`Zyr!=P)*SJs5?gX#Ie7e_Te#cI8{!1s*+_7ze4lSqi;&_kESiG#j zg0V&%8BUyy$*oR77zIK8%V9Y4)#+CRQ4#?HDw;2MXF@Q`32jz;gbt>CLBI!P5zlI^nxw}rgemnfOSwW$b^ zT+u>GRYLpg{c&nlD`l2x*^QRN$sWopmwVcL#b>3dhb(XEFQzFz&tsTZ&-oFZZq3)A zw)}Vm`tB7||AQH;S@5S??5N4l1E|5OjJ3EJu^{Tai?BMp95zIPX7&=3ZYV{DXuB@8 zGfStk3^)$l`~+8Po-)|HX*w|tpHm*;s`%cXu)!g<)ztEWnsa+ zrAH)8X}5TBoy?GQS?U#%NdF>@pS9jn?>(+kR~F1DZS0P}Y`r~B+;rsg02z*^3c;ol zmuXf7>UC4%*}e}PIaIMH;5r`9m00XYCe}PcPL2akCv(&B`vj`RQ`ouG#$b zs@4xewFjRC;caRDasx?(V=^K+68MB{wv7l}=1scq#XHtG&$D>$wY*K0DI4%PTo`^J zHd4?Vy%>t{-pV)VInk{!J7{5yVNu#fm@`=0P=WHHN*Lly6qR_Z)N3mc?ewX| zJSs(7B5P7a-sG`D&_rz^qxq!_iD{MaC>MahuCFoEYDMF6fkC00i!Vf;jqW@IFE4dd zg^v;-YHK&oW;3G1ZcdYRkpnG#Tic*IjeJSjVHor6NMCRHDq4Y&y9yoC$&04lP(NSO zS8XBNk?aJP&;3zWw^$|76C0Qse*sZM5b={R%MUK3VIK2AF~A7{68~ zh=-!kZ;w@>SZ!c^p3L5*hEql)8eq^!L|*ryhQHcJg=zUv$sGF)tk;orlEI?}Xr59^ zW(fU4gZz9obVC4q9ee^6sg$=1d&F`Ue?4#aL*N?3D{mUgwBhig7YTPM zWz#*dv3Kvu=b;srOhKHd?rgC#D&&24lGLnG)_pUIBK_0TNOkBk(gAlWwupRJ zW?#abN#!U`LE1}>79-}lp}L8HgoIM7&SIX%cCA?qU_OpkB(7SW>UkBki>xrXYp0u( z|5MgifBnZZ1oCMoTa_JhoW=pS;=f-d5Em@HjFT+yLS^9Zj>lu3%2Eh4o=@JHje|5! zL1BI7w5Kk=H`A1eU8*HlHdRvByX?E}sCDj$LC9v`crH2KsZ#Q_Nzv2?Q=2{lPrV(q z)ayNDT|bz0;x!ok45N9DG>`b<51YaNB};(5Kpsa-=TR>=eqNkP^A0{Gg3YCaHpSkgELqK%*vaf7FJN2qn?n6QY57`3`3bNZ(~7W)oW=%Mae(G+Xg zB?@`p%Y~xsCdSnm51`0^?2>_oSbJmX(vD^m8OUtjTO=dm62LSeOK4w0EU(LA8+EkubJAvE3T$m7$NA(yew9743wVFL@CW&r> zLQyxh_(jy^rsWR5YnZOTy)wXqZ$5`c%H#&Y&&YF(OzV@U{&C(L*VvQUmHR~fwNh8b zUGew#62{nMb`z<^HjAnZDA+>DOJmEnzCXM!2eC|AwUPx>Kf*`J0oqpqYx%6O1z(dl zy?K#_XF=3*mZZyqwd1-%zLkC=PZJz4&|IxJ;6j5#H7~ zOezf%6u9F_WB6!81y~f^|BO~ zZZ?I?*5KK{@uJ3@@PdWu+(g7aQ;#2DmwUP!KPcZ3FUAeF9G9C8>JH%kefCyY|4A;` zPcqP0WBif{t&rwoRUp0#w$mB6B8Wd{RUXy?NTTA>GlgCZJt+t*B*`pc48+H5Rn8k~ ztX9q2uiY&}Zpem+EVPB^yRzGu8~FdaFdGn4gOOw`-~CbbCa`=3o%hGk2x~lz>^L!> z>1nI$5=hU1A6V#O<(cz^@$sn5ezzdEFCTVhvF-MV`Mh03Zf_j&_^x;1DeWQwn_E49 zY?gOr2`+oW!RkyH5jBn??*a@{o~XoVtQe`7>W|9{tE!>b4?^E;D4htynE24hW&Gh>~@eU^}+<#>2L z^a&S-XTK#QHe>XOIE9<3ujt&SW{)k6pCpEBNnWh+90v5 zDY&~L!4wc$)2dfwyU-DA%Y9bc->mNpkNjtC_NFt4dAo1V=V}@gK87}LY<}%4K5DkP z{d*nm@Jq_XUpDje=Uy>~$3vZ|HA*dIllTi}sx;Juea>xdrwbL+kp|JD(}+DhCnG_` zST^~NMJ&pH7$w3Pe37nRy2Yj{4}-5f_LZXKI{01ljbEhz*shZSD*A*Ws*;ntVpj{B zJ+Sm1C1MInYDvmjRWDIPT}zmyt#$e$EdD}xUhieMdPwX3)Te2 zYC7dU1|FiBlm3M865dBveY2Hwssa)kP0^! zvIpf?mm0`(KUGC3GavY=?0R>XRe}5N*H8zK>=q6LKie+32XOAP0!grP)T!57ZP@RW zSlnTEzfDBM7vaFJ-%c&;`lWQ@h7$S!63pndYC~?kcexhk1(@Z#S30)OybF+Q3er?? zz84j74-S8v$>ev9%2>idq_O>E=7j|z6esA|^jn&|k2Bq=X*3wDR!b90ht)d#pJOt? zv8h+job{J*C=$OvMd<>RhaXlt+_P7JRh2sk!Al4bFF-U5v4p8trGASz&8r~kwsG*z zpHv-&uN5qzjy=7PA#U{UHtQ@L?mRq9%DNp5@eBALT%nZmZEJCYqOS37t4O2{UA>LTr)76RheUC&R9 z^k}U2Uw#^6@VV}_`>4$cvqr;c&c03^nCAYY93aSv1io1YblBqm4ov_Z5mM@UEZ+kW z6~3lrz+8X7$h+~o<2$@q*q*wKpe?Zem34KP zGNG<9wn&9PntX@G+&9)|-Di+|%62vOA?svtKGNh9~=uyR~`qlV@j`EmCSEz3^{`g zjp>>oAtKPlxf`h$bH(o^#Gux+WQlc0;2P`6gfy7mdaq!zRk0J+R)iTI3lBbuF#j<# zO{iCv4f^@cU%&OwB42?wl1(wG7(5?;;%-b>2^)=2+ z(DvMz-n;dvs%NdVP!XcZPy0zohtB@uwCf1O2_DLCe_liKybb>kANqsxl3@lZ5$M@A9nD{=Un|BXSt z^mh<>g$`Gu5i4dt={6gSfMlcnGL5Z3V`4PXT(9PtAMb~yGK?P(@dB|(O5paz<*MJ2 z4-MIF+?g?%HBsqTQ~cQR{4hOIDslMOwu$sF__(BPA$q~?bFs&-8-ba&(3t8&6s$H6 zLqdV6c;8aaGu$7k+6OP~_G-2KUn);2Nc~%Ke%kJU=nbibSyR<1 zn*qP@+7|?L53zkBuSD)^I2|JXx7W))htjJNdo`CeN+wK<1a3++p%lu;jUv^{*tKH`3$@LV$$Zp z{w18|-_hBkq!`c>#GnyNzjdQRx`tw6$K?0qVonx0t@lnA*F4yEGsXIALJ};)A91_; z);l@E3KgHebmXPC$5(p~i-uFRIPE3e*UTTlXxR0QrX$Lp5vKwyee10kYxHz@>9ons zMiS6p@K@O$7L+ROnN(T6R;RgLi6_+8S6T#YzAO+YQ=4 zehd{(RS{wo!VHmUB34_nV|vF(3ol?U+z3h$FhQ~c^ViKRIs5lso8qe>QBXop)so!> z0q=7?&I7Aj04QT5nI$plevO{Ymq+P{yZqN>cO-tCoJN`KD%gzLqH<-bRuPq?Yv5`x zd9Ol1rjdAY#;>pq)nSl((5Y~gpunl&sF%5ag)hrxIAgaMgQ7W_1|EQ~3dPDA8#+-3>(@DmQv{qG~ z0h@1&05j7+WfHq1Rb8syIyV=KEjsQ5d|vf0m|?H<9hdrJgjZ{SRF7f<^yScnt4zK* zFlv^QCo*W>fPUO(PILvvy(a=m8Y?}V4~f^}y~CjZM9trvgYA1&Wt43eTQzKhQ-eQU zUnS9>Gw+zvO%6jj0zVDFmDc?w5N#~KI5kTpbbk^q50YC7X7TaAni= zHdV5n$M1d;F4X&Lr81qk)D6$nxd z;unhhx@fEr%4TzCz6hUUvdOoWs)6zizjH#>8IA56h^F~9&W%ZEVr6^-I{1BAHN{nJ zJ&9*GAvbDN1WHQDZVQ}EqSB5>+yI5n_K{Vj$5`Ww6cV4$+oWfo(V5#3mhj{Q{ZnD2 zK0EgIM_jaHupTuZ>^$r|>BFyusBQ7EJU8|E?TRhJvOp0yON6&W7AN`0>wKRxJeQ5> z&Z=M-Hf`;7&G5#ADHw%2Y(|1Ba_xeX(H)dLT*)_Iuwe9drwULU`C`3meIqyvF6lyK`*PCjic!`%!pN@TUy;Yvs z{7>yw zzre+N3wcGICK+}CiKnF@ZYF3Ny3|z_lxw;9xmh(t68q~T91JFHeba#9Oo0nW$9^ot zs-Zc}BX0cLW-Q&5)kcopf#dSfB70bXQpzJdeVs-*Y4CoHm9=khuH)UB!DM4HAdo1; z)%)&P0J5|VxEZEhi$$tUK*!EyIBD2&9EeyjG~KalRD4c^S-ZYPeoaD*>=PV30MQ2i zUNZ#qsaW+x*aryz;Dy2zEY!ZE8s`82ifW6uzI5WA?jj8e?<0mWS0nS{j*4S@99~}c z%Ywh{nEfG1nOCAXRbpcUh@xbMCsqyll)Js3g)4S_c6e}nKE3xYJu#y{00Ze7~Ji&sMUd5Mf)6K)QtP*cTF@tEgcdJVyIfgEv54c78+ zFYx*I(;Ydu-U_K%36j>!hwQ{ZmE`xO$>0^3TM(~t3r-0Zs)hty6EKCJWHL)9hf#vx zH}aAHnV$^`MR^BxEO`HFMMeIo+K78W^gt#_(q{M+R?Ej5fdvB{};{TV+&+4UUx za0n?C;9BZ)^_X01yenrWwRS(*w-!pv3Z2$ux6MxfNHmejm~1)>lAS-?f4Wb`y4Vrk zX~>;=JuK2Ft@%=C&VQEI^YCIcN?Yr&X>7G#gUv!DoNV{YJ*jlk7`e|3mi4<8?zS(R zQue`9Lch_;xDFd$BUiEs*=7`%gfM{JK5UxGBr*X_t}Z*bFPCN^eUd=6%ff5K$HVD- z^uZ@g=14sOhbi$LiD_lMZ+(1`-?&d{l6&{UJ}Di__2SKW z7wC(8Qa8IQ-fEY6_W(G!*~NTAxIm-r4g~mu5`9ex6BBjjwc*cDLD1w@!D+oH7t=?2 zFx1@rxHVF>Gn?C&Gu5fON!CX#@2M;9e*9Q3I9peg_Cjz!fIpl@UAOm@!9ZzWJbD2W zf+|8_GE8_IlbQ9<3XSwfRmT@Yw{Pj@)+EAXY^g9SK(rg9g17jCQVj;t;;j*DVTRXE`4~sJ7(Pt zG-odOl70tpe&Qq$xf7`GsrmXcSpC&(p)9z-G6FPJ>npw3YF5{NKgh;ceg5HsI+1j> zO|;q!HKnSM=J`bc2dNKlz!QRk{*P0^`Ugx#Ys&#}%ZLtxs>Ay(mU|&;-E+A@1v4@c zO=VL7RzUl$Tk+kTO~(Cfg<2vEJ$Y^{{cux|B7$=1W(6_Ke0$kmEn);V_U6HHWdc|$ z>3I0}R`zzQ72&P`1(&Hf>stu`%-!*Lw_HmG!tcn@l#(*@V|p`j{88#^qL_+NRpxrU zQjS<4SW|;Vpd+KHoSt8LQ?Nm7xJ2eJ>RVRI?YXg$oD0*YlI34nRXXc`JH`WWoU*^# zyU6w0I6yGB)RYMqoGXd9Q}LMmuiJ$DQmuPbuPp~-uGZFDchV*9NM(6v7d@5IR1*hU z0u&hj=GdhGx?lH`*skx8HkXbUAd+8Aw-2M;Kb&g#YM=UcESZVf6{2l@|Hk^~$kVx7 z(orF>{&+#PLsHGSZk}TzU^rIyDagpGcU##d@rGb(WLl^-`0zSGP2S+IAw|2gk`#%WF#uD<5T(g$uZF90~wK$!NNeGQZ%IuJFr= zb#d$d*TV^wK?}H_t7NMuRdEag_HCp*jm{2O6yK)tG5hfA8=R_vGc9~_- zYa9(QPCRKxc6{5p{bzF8li;(&--{f7@)slX)muPL(ys_pl_nM?>&2bK0&cFlA2E3))@zmf8dhT8|E_6boSIGpgQ)<*3gv-i)L*}UNtFP2y#z1$RxqsE*#cOYPx zGx}ir+w0RQGJ+X|!0#C2<~hUmPcJ|E8pn4nT3gbx7E9C5xdY>VaY5lBvzE(naN{AT z`;D^WSV;6EP<{7@AcGn%j zJzm7K$C5s-ns`mU%@rB=F;77LlanaJ&!Y-cZI#ngSsA|s2)WC{U}Yo{&V3aH7oHmp zY2$+AEq#=fzGv>@;CColq*6P(Z(T~PDpwG5oPqCi=8aEj&NypG0YBj{wG4{`xPa>v z$s^4s6ssl;iA+9oZJ%s!7qJgncWg3}Wk`OOJSZcZSnaYwV z61iz2f&4+MNO}qT5d$9{O`2C;&D1Pf!@^*Y{U^qx0PK{vpW)XVRbB5C0;;URj>Pf8 zz6i7!FK@x|G)s_3Stbb`lNl297!6owBS0@V3aBNXMmq`JQsD8%>x|#*7V+1LpSUEB zjQoJ0Ms}^xS+cz2SWb)c(yS=#$d)1~+~Q6#J-uPlITxN9ZWV(~RfquQW8a_N0Gw{W z(J9-Mn?GHr7;dE<`lWCRW1}qL8njvAcEhP9IjXJQ{Ow*SD(Fu99l()RiE}64H?r=F zBBOfk?w>}}l*8$Sd(3C+)%o`1&D$k89A%}p+Z2Hvd(Qh=AlkQYTlp4Le!-EmkCd>> zuXuh+tIUg)s(Z~!U9E39Fk)YApj#+d{{tt~7rN0%sSHr7-5tr- ztVqY9zW=0EYYK0JkSHE45*_)8&48nSPj%KSr+;@`)?UFtPJn4NTdf=Ujm@i+nG@4evzA+*d5VQU8GpFU;lKj|m8fgoB(Q`W4#fr1F*y2Fx)-2KGj1=*jDAo7wDR>^AxEw( z3XEc?SL%jWb_x$P1}gApmnSoHp9W-pG+(X9!a z0Tu@jZqU z8OpK2^sb`o7UZ5@;!7?EOo!x;Le@`Y0HUKanggHEyI9o`(Y8(XI%Vh^>PiB}MUEd3#Xy7~|Iwj2#uOB~41@F^wem(Xj`=q=jTvYHicZ0&=6u@_DBCRqV zv7MlKnytPIT0sH8-$FWd4T(dgf6ub)25Z=JTKBVryj5vRh_$<<^oclS3Vj|^SKwzg z8sh^&L`>I~%Z-4m%%+{&dHuMiFwA%oR15jbtpS`c*N2Ye@4x?Zt2WcniGCV8OUcvb zvS-0ubFbpGeu`aL-BGf_(D7nd$$N!0XUFHAP(51Fby6vHqOrM9WeD12VljOIeKR$E zAjl5MJz``vo+^~3)L=*mK8$u$nDdN`Qcs(qgMZdWlVxWO_0pby92MFeOBGOVy*Z=A z9`Y@5<6mTX`&elC_w&_Ry8ZDNwJbqTDsFDg4yj++50P8u%eA{92}zOi*bs%Fn@bY9 za{Dctb^Apx``!JJ)_9eON)&eBuxb?1pIoT zaJ*~!)8h>olzxSY;4kz}t{n*mZh+`NU{r|`|F+P>+y%3@?@WD#`e5ssuP1%@w}eD} z1@E9>7y=0e9Jk7uAdVNQ&gUe4nw^vW5v8;oUdJuo6Q`^&ZHRRRw2e7|Jv5PAn_n^E z!d7N9*w}T;e;yKE68u~JZ^=v&9YK{q(|N3?vxRI~<1e{_+5sw#jG~G_#lLhJ1t8;z z?h%SKvSqYu9#bbN$&g`)annp%HzPlYP%uWUl5(J1cem<(-5-*MdbAR}xnJ&&-=Dd( zBPP0(B_jXV{kvgM1cj%~(rwDp`8;?$RU+X{uUj3vhLaVb_L+ZM1~*;#+6wVFRbQyU ztD*F0k5(um#KJULz3~Q-rCerp4^>>eKh_n6+pVV_;92H@t_W5=B8y z+7lHq%|9lWKoBx|j9=_r-L)Q}eJH-B25Bve?C_=8NBBEcd*A+4`mD+K>5;fz6x*(7 zoqy?77$rrb@7}~eHe*1(j2?AbZrsY#X&+&mt*HI(iD;@=%$Hufy!hqiwF$5@J5SCW zr(`~n$=Wtw9#R*SryX^arRM)g5c72{7Q=SASZHgwZjUhGDZh_%>C%|oIWd_B;_*nl zG8+NM=Jrubj}tq|=Y^#yOC9tRINz-Llxt&$kNoB=Wia?yD1mQ2nnvBF^fsny6|TKf z=P(I`rr{;Exr?0?zS4_6kNqdCu6aI7Xti3lCgt+%+m7IRFr24Zia@G5M--c&utDL4 zw;eapg0dbJs$g>IJ7TZudv|4m$b}}|C}!{o+){PE7IA5Bco>O*+ZOOXU?(QD!a;X0 zt^3jJbjj6_foc{NsRA?Ae2v|KGrP|3)ys8BQZePr0_$#Xd!Ji+N1|sfvy0y#s@c*R z*J1yzKToq&X*eEWu#%S5x;RO>P6$C?E9Z=KJOS00aADGgs0l}g35T46jSt_$l(Y~d zI2DQW#MtB++@MEGUh=J_^v2t>c%}lV$$#&GK>By2$8MkD@i4r`X%WMjfR!58vV?{&7@n zW6Tw8gRtlq8RP4n;A${IDw4F!z3>8#tw{yHbBN}9)xhG!G_L{8#D_dr{f_geD)&Wx zo~PsbI_m!wmz9L@qlGD?AtFyVYF5ayB^Fty;bWfMT4*KU&8p7N*g10A`+G~4CMi(? zi0X1*I}nPbbR6;?u!x;~5HOG3xvaK|1H*3eHJ&j5TVp&sgHPz2TqI4|f3k%5@yYXgU;fscG}iA_M}nDK-^=a1Pzhvb zwIHhVbj|8O1#Dt@x(!^xy!DfFB}fZ#8Ibz-JFy7h_eL{O%|#j5s8BtbIkuDWC=oG; zC*`qXtmPtDzctJJc9aE{7*jWJWI*IgGpY-yzL#0+IT;}jouay?Oab@OMa*E2w;*_M z^JqHlFPe|#)v z9H%F^uZ;`k5*eQI;e;~l$I`n#V5FgJ)t0mZoFdXa8GGPL)N6jHkr<^xe4z86;fu3m zWd~E6p*9{o&mQr1Ao}_3)@BpEn&}4WL>ZN9>QuoE2vnVnU0eb@ZXCQCcs^%vo|>`P z`=M30-`%eK<<=z&)lF1UnAJKjPYv9ij4-06EWBBe-ip40;2|@CO;q*_kqv5xxAod& zkCVn`OVR?_%??zeqvZ8Fr}(riI|DgviSG7vde_`kIPgAKbyEstim$1c&B2cl6902K zRHzzmP9-{>*fj630-;7F0hlcS{mhN>p-n?zRuK5nSmtYGEXgE4Bg~%3_)3ifKwU+X zNe?E>+z82yST&4ph+`zR`!2hu^S46{7Kq(h>IT9v#)DZ-80Q8m;(EVC$|@Xjika1~ z{rJ~?g1ncl4nlQCy#!Rh!N)$W1ing@)b1A0jczKu+Jf@o>l$oA<)%8nsI@dWVn--_ zVwSJ|N{?7)RxqM5d95l)Wra7I$*fgt4m-ZWi>mkKY0Fv&^>ERQH$9O)%>ZDAq>Dwc zq=%|J^3aakNxdxfzs3nTIz#RyQ#Lzzj(DQ$%r>{acrSf=&H7>$La>dvrP?nn3{!HI zu^=KxyN8nBRu>OtVQ{kl%bU7|I+*;$y zqVMRiBh%J`*`cVPfF5JjWdHTZF~N_v8}ol4AG# z%uVv=MOg_t_EtOWIR5E^U%Z5#Got*?^;Qu-`b{S>A0^N)-SUsIcfwooIpg+r(ks>W zSPQZOUTByXxYKrI;mzSTJ)s3*(zw3(;Bk599*WaOYf;Ra!K9M-K6jDRZz9z$tLe?6 zAuNjyR%Ji7c~97_mhFzj4=ulcKwK8%)i1PJuaUUdP7rVC0g~4M4S5EKGt8_DBo_fs zZM)~M-w`;ZC8cP3Jhrrb2ub%H$HnrL#CL`Grj?x(!Zu;BB9JevQsLI<#{n35alDk> zkb#A=)5B0`=phkNXhXXF{Ccq2#fe#KvRF1ehEj;0-6P)Qy{hQ%odSfi?jEUCs(HUp zL|jm=p-CD66D0yzgR&*u{zu;diGKsBss&mthFBIGJo9EsHQ(AhfOJAw)+?p0v~%`@ zjU)fzs*TS$8(|rdwzZ}oLA2bO?=0#e=}$op#{DAxZ0T_RgzFrA@53HFHLs~)kJq7Sh z2Ec)kP_XB9V z&9Ij?Qy&XE1A~;{Pb@Lp0d-2}0w&Fud}3Y?8U6v-{-_( zUf0^rf#FsthL92ml6$6lh`)e;P}L&#Vl6uD1+WEKProxXOpksXiWxY5*wYF;N2@>f zTv4vgFK4ShriC*yWeMG5`O3w|1TST@{vwc1-vxP&xgjmCSv zy-d3QKSaHCSkwRe1uP&aQYt7S;w(TKMt3P)lF~@`=o&CWK%{eYNJ@97DBax?X$A}! zFvbRZ_WAyv=X(BST)Vct-mg2(ea^Xmr3(Njeye5(+op-_AlLqqI+?!D>a`g@-KP?} zJh?Mac4KwJ{Xc&3UxZdqw4o%E^EDTZ3{nLvV==eouJ#xF-Z}|%!0So`nnsg5v2BV8 zrT^t}_^X;D>Ab^31o*yS+TUgPzzA>uK}<+Q7t~0<{?8crj5%Voz-ioGhZXsRJk*Cj zA&E&RxAFX3=D`zG4hvyv3pklgF5Rn~T^!?E>F3A^_&jphL zv)PT?P>JgDF&Z4%Z)=RP=D5JKK6S~VO$I>9kXDIObJxU>su^}?B69)WZWo2e){Imi zxEyMbm1_hFof)P6k+aA<$OoMdtL*t5tEdzl<+_6M@Nhlk2$#JsY^o#Xe zggUZ2$;&oO3A{68dMEm02@U-89)u2Z-F-3c#T3>6zZ^4UJRG$fqR*5qr*zuwp3CVr zRNuQjLHw)V{=aIGotQI}(3+=n5~-DDLr2ODY5O1T=gNjf%Ke$E zi;&E&gdVGl`}nDv9Y@A!OY+}bw#OkQ&)HNxDvTPHbbG_!JB3z-FHwqc@wi91`v`Y8 z00h6xOS?sRktBr^Eoxn_yGTSrT>zA>O>yp+gH^dKU;sZotIF1QhXKFeiXmRxuh6$@4ohfWWUgfWhfENK`$ z2=vP|ZS$bh9v~zSDXd{j!e=?E2gLxftVt~--Se)EA{L@Od7buWr9GdFW422L94bI7pQ#`K91_EJ=X-_yyMkdq1Y z`XZ+yfI^*$Ws1+Fc`n=}QDKeVH}W`&j(3$dCCs?Dx|^O%&gz~%`M{g(p8JfO2~Lac z-nr2}kmL$jhvFLoQOJ;6Yvrc`4G)v7#I;PkI}dB1(hw!pG1Fv%fq{^U3>AMQ`G~p% z!&_eKi3HxgfeqORM%rgR6-mJ!c@ehMEl>+OzpmUy+n-`q|LBXdmRmt&x5h`LToe=lYt%jSi~rA@c!@KK21Pr zdhoM7Z)YpZL{~HtF;lc)5vQ~w|8gqKhd_)?&~e@1xO-o&vB+lmcOL;2`=9SUL({F6 z-yN{crX$~dsbl>qYIZqlUKuQdOzh+k=9-VZ)7lvn{A5&wlhL8MArrrnuJ8;iw14>4|=DRVlJ zyzbdj6XV?iUfZ{flD_GQOrG{=SSXc`&rlwB?_Yt_MtT9iQL@VonFD10wu&#F_N3rQ z^DR=5!w|~xm1bK_=*@8c<}5aF0Ixs4?mDlVZAV-CNW~`bKBE`^dsy=7QlQ`ZSW3Zs zdg#%@QL-=4;svo^sVwQ{S74ixys#+NdOFrR#Qv~zjHn^@X4%x zC#jzHN^rj7C;2=9(Y^hTwlY^~{ZV8}*2h8hPnBXy!e*KJzW{~ys6|`8p!}j8#mo237!RfuU8#x&jMY^C7jp5cP@yWV4|2Zlecw~q=6vs! zrwKwNUSwG&{%ENfjDJlutJD1cZIRKETbgK=Tzo>S>!#cg*^ZPwH@&y)WA{g#lDZ)T z`XrA}8Nbt_#N?TSWeIUv@`$m_9=xQuxWP|dA~K2w&+OU+euYZnKdn}l^qMD|b$dZx zDm}3cyY?6Ue6gLqFQ5(<_sPo@=XRalSL0sgQ#q~fyCFkvYU!N5<`$hzg&{QQ=?+U0 zN=bDT9@oDvwGLKc&RS4>vGPvffr}A04V!^>+vVO*h%5<(How=pf0bdk+Hw1?b7>xg zECn%}2scvGuQ%g-Cn=b(^2j)XIaFWhr18typS@4Rj-zS7VT-Fr%~d1%GqPdW_XWp+ z3Z|VxUj`M5l72UDaKAU)iOwlx(&=Mc)garf`Cc~dKEA)u9OsX|5Tty}+nQ#Rx*G5J zeIT$TJ}aDQC_0_jHQ3<8mw^}n*H4~%?r2_MtF9KP$C&5v3zQ9ZVa>L zZcACesLrSD?Dd2F_dkt(CY~KF)*jrCL=qHjl=L#$whP3)=g$6t-X)mMh>eXlmbv$z zu3f>1<}V`I@K&2eOX1?XmDMGdG5)a;;f{@jVlbbQAdEa^ESA*wk%t1}@JR90C7fL#CF z;xI9gxZbm{yPHyNUc>Q+s5eX4eM8(Mn^{j|Dh`_g@*wz0n*|c?O!6oFM>NKcPB!|0PS+mziQ><)x=(Ip zF8MN~fu;=5unzg{?lnLmJg600)nKE=$3 zJI-GNCJ4+p$2Dj8R`nb|^Qoga*?WkD77j`b1))q-{Lm>-H>VD(PTMOMdvoyK$4F~TK6o9V+IqmX#zQbH)Pl1H3lv7?|Wh@*Mr=e zt8onU9@_M~V=LDb@FMBXw#0fLmi^_b7~p{)IoObrBeUAL=%y4e{)&$AbF%Uu$CJLx z=3728sb0yPZI3YHDMRc95?F;>Z(M+13oL3Z;JM?Vot{10)8-!^hkKCw1EmEy9^f5) z{W~Pv?i1&_i|$`)`chaMl>{_~k$6_u7K)Cy5HyifliNspd0;JxfelX`?1y!{wbU13!;DuS)+u zh`L{S!r8d-eo@=|Pts4?wSWG&cqsR|EMJq5kGPQc8P0S60h%!O{?m{tVfu)BejZkM zql(Y5S;Frec1DK_UAFZ2M*hb;H2U(O@Yl0|znt765girNsmaHOtBvI%Z-1IpmNg(2 zN!QbvSvQlAy@`y-C1D3_(5bNHBa#v{9x>qow>lgh(|`TpK$70;(2+Q!v(Jl$W_1dL|% zEgQi*4KBHLt{$#mkP0yl|4{L_Ks8Z5!@^6{b=p^!>a3v58$`p`Ee|hq^o-XO$^OB|nXtr-9l{PP zq;(tfYj&a$oWw1&A}JU_?k8OZ!jmxZy>XC5qQxt^yVS!e?5wS*W9Soy`4P>uScNdM zZ?+XTLwPsS{PrU_l@~BTceRf~VQvuha9;%FFsZ_l%|w<7D-8!3uR}s)K?2T<4WFj~ z?}|TK{SQuZX{F)L^tQl-s|Z>B{zBCI@JWhHE_K(l0xwpUHT`;9X%LZ0&7pq1Z=$?* zZpBJon|9b&Cc$eDc5XnEY-?~A-RM*(d|sjN`a&CMK0N!gCqTxzM=m=@d*BD<@`wn< z#hJZM`M;C+ryp0^oM?t6%VCB_&GzQepYUI*UB}qr5xF^P ze@?5Yp>%#Co**LXwOL*l?lNS#k?QC9hbd^u!bC={EMj^ZN%+;WB8#sqdXcfHIV0 zM&R~#z(Zj|ybH^vBE|IN7xRn?=j&&byv#JlXQ%KuFW34)28ov4K!pKkb_U=9U;9H{(u1G+{OiK3x6!Q39H7JQQNX;RkFn@U^?e(kqbd7a*3;GCN8j!EInh7=7!FomWYB~}Y^B%Bt z{^X?zzkW(}=D4e=5JXe0p?GBPx+x`h$i7(rT>PK0FZgN_`7D=Roh1^eVa!3Wb3iBL z|HG*~bu2^CliU2~&V*ECsX6-Wm;NuU#}uG)IhlhY&JxDV5i|bBG?v=QEXMd2e3R(X zj$@QWC0ksbM0)O6kUNm8fnfIg;r|qA)efECi7U*c(Uuj&j z!vWmT3?B_S67?E9@TBLyx2+*WG@)tfVcX*`WV3Fb^3QR;f$h)CyF#iktx`jZV<>)V zAw>|IpdkkpX2%RLW6Y;-5F|`A5y2Zty*rz9+8FTAq`k0imgwC2#p+zt<{FpW$ zU35Wgn%!P6V8PDdcyq?Zm*)C7<9Lb)-daGk8!D9{z-vj4esz9fF0}Z8D9KFpa~#|@ zdY3&6jjZNrAdQqfMp!5~44w0zlMb~N7vN2cRUrXQr~hjSJs-GCaV4=u03R>uamr~^ zPtpGVd8VpZdY_w~?tK_HdH`X?=;%G3#&7sOQfjC~LLGIc7%5Wjtt*6jMeWAo7{aMv zM^65$%nc^%-Mh2qViowjnECXjxF5MnzimnrUnU)>K8WI*uOJyC$b$vH&n@uyJqe%K_Ki}j=SA%nDr1`Qc&ssq>Os_lbDWAGo6QnNp|hL4Cp zet%`0aZahIfLOv|#&_695;X*0Z;NLfj*q7E+T`fh)x&b8J3R$?HwMY~fw?S|&EZ)A z;mv>2IvSx(q6?pb2nlE=Yr#hmuWy>|aB7RPX-A9z%jbgjU%SM?X*{9cLqdO=qvgIZ3Q(k56Rq(YkOR7jr(FyD43#a zT)#8kcd=k>b9PYe1T+e#Oy4jCsFOr^e7cA(s2I6K?1Bg6!o6_Yb@NMgSOBUSVz+`FK}}ddj|vc{{tIXc$wjd)%#{SHI*DUK zGR_!*DTQR#xg$rRe-eQGKgyH2)X%KWn4FxdO<%#kDi;+wqBV^p$fq%^H<^dI54J#Q zu|s7m!v`dpDcKIUlq~bnV)43tacYpdSvAu0B zB)|D(+-`zlzL{n*9RG-0FG~-AoQ>IxOp@|mAetaBL)*r&c*2;6Y@*od z5Z@RG@-3_X zwac&8*pFhynvPaZHW84)nD4t|xFkGFBP5uQ_qI4Tp=i@W!Uq>n+*q(C5Ax?z%@$C# zmN&69_+ZQtdR(pFP7df0{bc<@O<;R>cuTHVI;Vqy(G1u`xET4b~P!nfyn+2)V@lB3m+x*51hV-si)I0pI7Bbyc{X#1Qzg%x- zo*OR4|9yzCWa(PD^jm*3)sYWxBO4c|*OI^x<_>=jlD%hY7V^e#rmV6u?Y&g+8TBNU zMbv`R$*t&kBGq>h(oEIs{D8>lW*bArgX?m+m|va+)%^|WkUV8Y+OyAgI)UFkj607r z97dz}uJiE|EfjW*Yo;>^vImPMLc2+>!AWMZG;qcbGuAz0w%7pITiEe&6$%(Yh_9bv!Vek|Pk`pYr zo*5F8*_s~8WC{DFL8Ya zp2;>`SUGdbK}SJ1^o5}xN5rhIKzc+R7QZ4)hcWWSOJkA~Zgk9A;?^UM`&}!C$k9

GpMUO4sd%9`gB;Hc%1Tz4Vk0hAQ%w_)XP4dVVQWzngD$fI-dD)t_ML zlPt|^j&``c+5=W=d6zo+yRN)4(DW8?^NEjfXv`tn=k$oG#%SCyX>CEmIc5C?!vBO= zB55JM>r(Y460E)s+Z`2Lfb5^mSw}Up59vC+RQi`Yx8r~5{RR_AT-Uw2Do5}@BZzSO z?JLkMZtxDK(n{tHY~{m|-0eyn%r}mXtDXu@UJ3}r)<%Cy`O0N^IDDb}G-D}}KWW^p z%6Jhv5`h*0=Ilh%b#GLVadJ!R-0U>KhDyxOA^@9ZZ1U-+`^(J^5$TVOCR6j>cYK_` zdH#B(I^c!)t~gCx9~m7sXWYL=@3te=fn9cJL0`jFn?Geop5q0-si{h}K;^bo$0A1{ ztR^FSTQB1B$Q3)(c{zW0V&YSt+j^Zg9P z8ngymJo=V^k0$9sonaAx0P@BySXJO(i1%u_Eek}D-wt|p>9mqYCERF9 z{^_Xr_SZ#6Q*;C~$fY5O7G5kwLfxrEoc*{eXM!n?R@5 z=UgAR*6x)MAlX}$-LA5LapjWWvY_n_%EV7vZv)${Mtk2G1#G8S3sE`k2abGuy}lt; z)n%TH#(2ZJ0epaEi^7ZRMBf=J0Q!gAZR*nIip6OH;S&ySNG~B4HB>TH<*DqLbSGGC zuK=-I)G5)(zZ_NF5u#1{&W??fVh0|e{Nwzx2C*S)wF(O8o-ahqTt9EFcITKOd3z2D zHf}PVJ&<@V#b5c%N;05oh0+W6pOwI|@>zZo*FmjQ>!p#2-v$4w&%(`>8k6sA`d&a> zHHy7?&68?e5~G5J_tUGYKZ9*L_+~h!do5KVIg}St8rOCpkZH@)_23my>yjbWnsui? zyc*u~&Bvw}cp`~_`oX_!!U*7^# z$}46nZXRzJ#sd8@>oH6k;PL}IR$sYySR*Uo-gza`a-G;)Ouq7cIB% zKO{=hE}lB3CtCHi>Um)BkfA}j%ot4h60zDfCc&ZQL??2)^-bC)&7BVw)f94O3tz1- zkKSIcYHSWGGzQhn$$$L!PufO_?&K$Yo!hvO(kX*^2x^t1n|gWGM9$xGh2^!J;;_&K zS7k$T<~b5wHlOqrCiJdzSUO2`n(StY^!O{%YV}`$mMU1Px{a#3&&?+-QH@RZF8w{X zX9#73nAGTiZsxe%EQ5Fa{rphMbr5`jm*kQcC--*S#3-p-U#8Q?NYw3{op!!BE8o)Q zo_l8w(e=4ZZjSMG=Ym%FnloS%KHtBmTu2Z)vmFos9-e~bSiD>*XKNd|tNh3fmp^pu z0DzCcPo`hnDBfgg(oWb=fVUlUHVY}&L>mP;%o@pWnk{k8*m~!;x+4=TM6oNoFZj8% zwrN}jiO+AMjfEYC4Db~vP3aDyAMXtsYWgG4U;I2JJ%)cjvs#UnPr0qa6o@rfXZwgw zs!V#Untd6yf96)EvYv0uPyP6yz$Wfx@d`%IG$00M`R`@6VoSkYK6xX59*>j2PP=)| zl;;&Yz=vSOjiU85LAJ2LOfw7uVhWokr8UFtE#N0-+7i;zBf1E25M&gsbEb5IQ0 z@CWfQtUna(U10&Pg0+0Qo$m*SCdg|7VD8i1-pkJ$a*~gJPOp2Ojg=?8vx8%w0%`73 z6SGDIksM5PnBC{>zIsCr&BeU*yYFe4dT!|4=33p84+?11X;#xH78f^3KJ}$#H~MCi z<3HU&1@8=^Xu9gU4ai-o`>#}PUI_pwuN=3l5eY3nxjZewF%vvycJ97-3YwG|sr3aU za(#N4oF7!xvLhmPu~;z8#yAefogKidEk+v`{^_Q7-sInV$-Qd|+*@2~;r~QIJJK7n^A)o8ut;&$3 zX5-o{eHSxU0x>aGOS)4u?r7gWih(-e8-e4bHc?dr;IrkU2z)4o z#?j>UB#>R*($DT@Tv8GqVqSMO__yVP^lwLQG09E-d7Jj>0%*X9cc(cJc(%(U4xn#Pl^U6*5S=i>kKT)T@A%IY)i$;Z1 zTpIt#s;CEinmE9!PKKdgZ)P^Pk&<&=I}| z0;jPQQvnySY7z;Ye*M!GujAj!IPh=-`GQksv*VvN)H-vY4qrm*5^)PE2VD5kB-!5= z3(bPP*{AH#F{t(8mb@H^@uEk)+yQZE%%C-y)iumAoYecr9@H0-if-}PDddFF?k zT1C)sqe|x~N;PA^xgK*>H51_R<_(44f&0xAHiIwM*aqr(0_v1r$SYwP*jnZ7FCGJ- z=4vnb_I{3JI4&8e!z`9W4%&qFDXWd`4kZ{P7I%A7YbU}JpERkA?P3Z5^M`SjB^)Eo zfn5U&yImtz4D}Tk^F4qBQLs4weU5x_ ze!hKi8GS|6oTcf4NO)5*-880988`DT4@$vcgX)q8KsQ*|1vi6&79e;OCMz!zln^2)oTK8L>$)|$vBDz z6slATfArlS%MsP{oA2ni`=3o+zPCE@d4EH>0~At^JNaRx@&zcg$Kzpx2S)a0NyEKH1Y>(HZ7Ncos~eV z%*xO;Yv@tL!*<7J44^Mr=PdXm^2!+{S;aAudX%Y$YD9as-|k%!9Ti~EOorhI5!|l9 zPVd%?*z?5(&lA`{Hy*oYaau|(v08S!Fgij`Uv7vz(0EltD1VJOQb2LR9Vv@eWrqys zPg`;bgK6-m?qz7&{pD@y=xrai;&bb?KTnzLlr5VoMfA(}`y63vGN0LdCrWYxC_!S# z_f>7?$xEuCxs`E8Q3L}3uD(4F0n;D1yR|r_D5Z(T^-Yt~2>7jMl-;K#8A8A798sI& z+`YN_h$UPk1P1EgSxd<>51*I{+A6>Wys$uYjW_~O(`3)yV&Gd}M5?Nr0?CuOj6ES> z#E&oP>Ytxlr{(yadQN>bNbovXB-JwsY`rTit3oz61vO?x@o@68H81bQ3*+q}DaI3O z!}-@-)*4&f4?C@mW(3^WomBmr$f-|Gx&hpqw-*Utz?{##9(7?h?isl*Spi8}qyGqf zZc=XcWx!}OQ$1&0v3jA&fHNAXa-69PV_8xAjP4+(d&qU6Rm~5dH@^)D+v(sN^ix4` z7H4(^KC0ZT0WG&E_S>w2qt&&ZLH$aLamfXLMQEdDZ)>5lL_%h|A%x> zwZ_Y4I(K=x4yfn+t$y1O_Zj_kl2LH@o|1JBh-K3y)cT%Zxp*?wT+#O2d?E{QJ-KOi zmP(}Eid}@^v$%>uL~1GwxjnEL znSmEuoZBr3@(ZuRTe>Y=>51P<;ajG>H+K)gi(6EZzh&bjtwLg+8-Wj&Y+MI8n*aV{ zli!^2Ugx8ZwBw%cqD|Fp{_*dPJ1oy)-CCjNKfUiH=ZT0#y_#cM#~El}scY%3#Kk(x zC#K7~pZN`ktFL%vc85DtihD!H2iiR0r#qsXwSHsIN3+CfkKPHDTKGG##;?BwALUNo zf#X#xYo_238mLOL?ZnjK=QCx*lk;^B9-c=5>LPT8O^(u8(MVrRWphT*j?8{>HD-G# zUTOdZkDvfboZJHhMl%BE(RJHwqhDnNz8kz+TLmjdX>@ka1n|B3nIu!B5U-nL1CHx# z@}4~cPGvAvmd8pv<~B=|9|xZeE0lie2Dcb~jcE|!y~jS_Umw^%Hw;?N^kMD z3sv4C!pRhMoC)r;&ORAF)LU$WyEJ+D5=BGj?zy-+tPg0FHAae1`-Qtj*4VukzAj@M z!|V>0S4&q@9zCR|c2L_7LU^AQvzS6Mo+hFnk2<6#f4y`vC@{{{-COKpz}pRgm@H<0 zd6Y6Z>DVRVI+IAm)SvO)J@vG=IPu;6x6H;VXyLq!z5ZB_xXn?d@+{wlf0+Pff?@I$ z{?@}+c|227LWt3sQ}lxAm(aV86VLfRcU@Il5hgsZnVqki2}JAkV^xyP93;jQI`rb6 zM;g@DxI*5mantCibD$$)-5M8tPL36EFK)Oq z#y@hoGZQE^NpG$yPN`PE%JW0_p2F}wPF&lO)bZMI+qurE`}bhU+=hF6vz!Yw_cn`y4h~r zW>R*D{G$xrNWdWe+(UGPpf67a7Ce{*yS+Em z=-Eoc-Jp_!;15TvRh@Dfe9m_n=1c5mih*A~LCD4S-|_ZNy6sDV37Bik^_% zktqC#v`#yl6BM%Rxl@s>7%qW3bHJYUd4GN@?&FcE_TzktW5I}+lrW|JzU3owq z+XAi9w+|%MZs-gJK>dHoNM8T+CG$vnN~~3K6XHtE^vbuyBMNG!&rIiUYDgX3wZYW! zwvv9j2+6>~Ol3T1_0~PlvE?N*1K3?!2K) zRe&O5GMoM;4CMZnbSseXU*slFaE4tJ#Tsr|o=Rp-#znv5yb+h3edhd61>wd1 z6yuko$QO>OLHqb+Jtq;#?aCn;yV;(pq$d<&a3eZC$rss0DVx@$FH8b%V%(gy5;%;1 zt3hkK55gld()AlLsLkm=Vp;}0_9&j4ybU+vp)DeHv&rp+R}umbc5?!rws|6g1)P?X z{rd6%M(3evvH8BEb~axo_eMa%>CMpe(UC)zh)bUE zxYmR?Gl#}>jd92_g(Z0AH`DYrFVR~NAWC!~TAdp@An@j2RcOPZ;~ICb z2YkKNBBH_ZFbpnd8bci?`gD2bBSP;y$^d7H;$mf&VMDuV!C;L##j&nSYF(u_27dB; zEy*^D4^OTgsxO*e#w2s;8!EZXti$&(9%N|qCX0yJNv>xr4fY%;uFTVlRl@=}fhd{4mTr!4I9MEpuUe|0t^}^|o z+6W@x&~+zgq)B1U89SEA&+9o?tHIUgBP0OA?;abjN_kpqQxHjhFE3c5l8yTR@E2iA z{B+>z5-K@a?kpko zMTtANrbBb)oKexRKzDE9rfTqJu`1KV9?wGiM5kFz1#T@nHRm{0_rA#2WDI0NVpmN~ z&8ynDdws163__Kb%eON=+)I@z!<U#WYkn<7^r=e{TmK#%4*>!!bK<}lCsfLUG3cO-EiheT zP5f{2%qku%;a_16xJtkzj>xx?MSUMV%LH|AN}M*}oenvrb-gh;ooh&(fmxHX9v^ZK zr%YIV+~SqJM*pX#;a#v&{dL4ot+mc;Dwh$T%wo>R_r26_d^0eTxSMLsyy&rqGTVbB zP;W?BzX}r@_elH9^dJ8U%+x?G_Xyrj5V&GBs*!tyY5}k!M>C0Z~n^w8|eD0pl1w_xdhcmJppF*$bNz8+7uR_=eSuCx?Wj!*k#&}H4yB3CKCy4SP$jXC&}gJq|qbLKdRU|izK2=!U4q8)M5fN4 zbD5T^BF9$o{%L7E7U82ZU6YP8^oDl%ECj;_OmVSEKYPbIH7mTdQ2q_^PlJ zMn^ff|JbTCUKPedpD;ZBDu0V3_rCK%x%83+SP>=AedOZ1 zx(zn2EL+k8G>-eJ9{gGO*yW*Y@gI8rUy!gO2*51>FgX>{LaLXiQoFha67+*?m08ng z7!u5(S7ltlv0=pYJo*?kG2jh=?c(=CfR<9XO=*qiXBER=JxBmEt9oUp?zWl+dl(|3 zClg7d{F^fwwxEdGi_cxV`Mw_QW4tGY)U_JNc7a&5&FBqM{apN5D9e35edqS$$ozj* zZt&To$qC!*KJCW4K7Y#QFU+0rK|<+Oo-{wht~*2!>IXOk!+!d921^UyGoBv`;@f{G z+&Z0cI?N`w(P9zH13zC7p#y0(+X1DuIc5dZEqt7vFPQX3X7dV|z%%8&IuxUJ=z{7t zx9T&`x|a-_yl>x9XEr0asoDN`9y?x|zUFx5Zs`(``JK_sVZ`4Cd)M8KOA?nwr=?|M z+j&&gew4rcX@cYT;d5$w3xkB5H=C9wVveO8<0{;ihHCb$O^0{~CiqzbG(%s@GkWUL zLTvAt;A&8@Dm7!CzAY2aw2T;lNl8ujC11^p7c`E;wFC3DRX+?HQhE^9)K`vgsp)PS zZ69$a>(&ayHD#%$3=y7_6#Hsw4qd)pcd#&+SBlq8nw=K2H=AWw?(|lc@@~Hy;u+12 zzaIZJT~eM8YY;=hBG9)S2n7_?tgo%`t!HhoLiW`V6HILVs3f^-?by9EE*ozxYi2(X z;Dr>wl%Q`7A*8wgEhv!i)Svaff-8F=;axG)O`V=#pZov4?cB#aJ9DiqMKVdJpZl2& zVMVIXzpjd^?MnqJ-cd!`lBpe)B{LH!9%am$SS#NgMsba~wUIC5_LCT_B*4srTfxTawkW=MsklJ*KUv>B?NsTqHzR#LlxoQ&wwRpG zQQspd2tS|lK6_K|KEzd-OJc*nH2=i!R@^{9aJL+exe%trf&aO(-(Wz-d<%%}g@KKt zdk8@eqqqb*V^2(7H`KSe`+QlbLlUi8?>HQz8lQh(z&B*HPC(zFp(@24^frmd_TN3q zzW)Y#|6R4<=Zt?_5i7fDV-7BPN9)n|(7#h{090;*)&=+h$g7?_n>!ELTJASpRhYTF zjKy~!ZG-})bNYl~kMP6CJ89z;`-)&fP+NuI4=}UfnLlA}iGpB}yL>dCh41?N`dG=c z9-^y-Z0~^&$65s`+o4apbuNCa%yIM?CoK}lr$T^|&Df9x4iM8yZ3GeIE1f1jlic^VuuLRuq z)3u+^*P_0Zd*qw8yT0XYwN1P0+B_V+pX3^m46B#-?zryH^!d9Xe}VuHn9mL-d~OdU z>R&zQ;;YCFvN6dH;_AMYvsOL&qBhhNUb9<5AZJ`spD}z+yz{BqPA^b&ymZU~ATB-8 z36jM#PY1l5EJ@}8c^qo(-th3|{UK%u-pRT^Oa7`FB$6YFO4Ym~BSm~lX-YKK7wscHEk@$=AzhlW@F+)5W z5y22SaXEC?&EIS5sEh5p`0vHC&>&ff_lO&oR*|eH6aNo;Zy6NlvMme;3+@)&2~Kb) zxVvjea1ZY87Tg985L|-0yAJNI!QJhfea_kE?tM48|G%oY>Y-|Cc&59TORrw-`-h}) z!SmjC$C;9rVu^oZ?u4YN>G`6l_$~nd}b_ZS_>~ z8;%a;`8;~dqhLs@LRyw8GHU7pp1XLqF;D45Ymf>(ye8m5!Nd$Sy#uhiGCN5efV%WI zcNnje{mX#-O9g>2selOOFzkJ_ZSr2TI4EC(UOv89 zwkX%Wb>3Km`?o8RxoMTx^e5*-++}4SQ~Fl)S|S}%YwcP#?(vw`Yt&_Y>KZe4W4LX- z|E=f#Yp~oi+rCVyfev?LKDjwxuoo2!?y4&9k23LF3?}Tjf%S*e$V!2odw5A_e(B5%PgG9l~M2Bt6&*8v9cPkB+zhd-H3jX01u6=-- z+qn3!UjLu1jK3`yG{OkV*r-?StojJ&=DuyB;PfV|3)Wvi`s+t3BCufLA-1-`-8XbK zI*@Z4RXQ4)RDT2D-;O9~SVz?U!O@PgEft%@;37v+5E8Uz!)yK*xc_;(fY^6qL*G8v zd&a8UWc3BkdB6^eAS0Md2<$C?6iRf{U&;1A%U4kblP7Y9goYyFX3kE@FudZUAKm}t zSxyg(_&bvRgJR-0;0xzf8pfP(b`9VPxZwpTYk|DJ_L1{C1XMx;Rh z$Fq9n4JjXAU|8&q?O%!bCl3CY*B1^QlrQfra3y|~KE6dXYl%$!fTF}V5Sgk6ZWXnE z#rOX(mbhTMB6HV+A}1@dYce>32O%ZCGswuiGHbyKcx}RNUg;u}#R}=%_P*!L^zPxi z+Y& zX&-nJ`kYj};5s#R&rNPO5~FFcKfUYvI<-LZ2KTerovr03Fa4{i06G4KAc9z&PwzJT zeuxjJnzD>^^5L&j_yah%9JzQnLWGfMV&}j&8l}{}*GX4k2aZ%)(e+qn=U6^~X&eqr z@wjq5{u`M8#V#~P|L8zZS^V-E!a8(rkqQn7n<`2E39qwF0UdZxPlm$o0%GdvQ8mB@ z8(TfGsDcohq`iGtkeCVnHJW7!AYxGMEgw5@qT+8A`Myzoh$mqFK&!o{c4X1N@H#T$ za|8sxkifx*qYz?gMT&nJ_r?0W#xj;o7xgM?Kn%^f4}Q4sHN^-<`&S128%scHf!O)q z^%?&oXMg4TwF3ALr>?&rLjeHg5QZ-orwk}p*mH!Z@noC**Dk_;k@*)C)2!LV%bdtX z(onQxWvcGmRaE}vpMUv?Ne?uNh6 zgHji(JCA`&OS}OAkOqsRhE>+fd8Ibo=~PryB29@SW2MTA`?ed?mvkU<=3yu1i~bE0 ze*$e|3SKMiUYcwQ>Z%4Gu2v$bBJwT`>Aeoa`yF~Mq$Egw=iIy;=Om;&o6rQQpO<5i zT}zl`?PbT9o5MMOj`4SNtAP3HhZ??xY8cBiiiPCsLZzYS_xIx^ss1_k8U2mbEGa7N z)j?v~HxYgS%@2@PNI0+j39`7aK`SoYt~udR<#~VwgA6bDQtj+s zang%xsxmJR@C6Qf1!{bJRd{`KNXK%NdA6`I`rl)ZJM^v?Ke^p?n6+=qD0BDKha8IcYdy@qY}|*TVXm=9mf1urDyKMn9|FcCm?(1xg zPvP6>xKCUm=!qe@R%LXNXWT5mi1|#V8XC+e0n%>BXkqiOC~Xiy%p-lQ#&PuCBN1p( zkdX1HH@4KVzj4wY881jN8EiM1ZniFAdtG;M!T*93OG#lZiMlRL$*zq!8&GkC#GhcD zWsy~#E@ZKgdX=#SeC@EuegbNbmlD##wwBFI>2;Uq7pj)#A)Ma4<%bX(@OyooAd@yo z3S#htZKXB+7|>aP52+I{r|@JQ=0xCKK`zh{vSU6e~b@5 za5c2wiGF(rO#O273k5(Ax(fON-_NIOJ$mUp2bqnNYbn z&^pl$j$qyHb^Q4N#WyT(`HOF^w&(vI&;47!`R2U;>~Dn@K|4AkzO%tLcRw-PfA7f_ z_A(F~dF(1)Zasb7kHm=zW|D6@)ll+rACU*_%eM_aFa>wMqN9crPyNIF);j2<|7yp- znR0NFHFU!vty)6uPj_gAj4uc#8VD#vkm9-UFtIZk_yJ5P3+_oV>IjC|Ii}J`BA|O| zB1BqP9*7Id<{osCTAYi#q(K&`&0>({Rb87PMts-QFlWBR(>Pz?xqE1Z;h);+uS-{8fsz8Zpk93m zbF>9z>%+UV64 zf?`DWerrFO)8+GIiCn=?W=rsFAa$g84n)sk%nn*rs%e){rb%H^tT zav+d5!-te#4S_Ie6wof|mJ%YbkYz;1Qye%C0y@**FE3i%9Ke;LAR9w14cx&TPeTse zct(~IJ#J~z$H}SgcDI{2wl?x|yb7`}c+0xUJg3 zm&N|5m@22@e7WiR>GvS3wqevK^_uVJOT$16#u{8rOeZxW)LSmSWk~9yg9lf-v8$$A zR6biU7YcqT*88ZMQB~Ai$`6W|85ngkpkFikoME6I0e~7;+6g@Xbt#`kM><&?4wEVk zn6q^S!bg?PL4LEY5K8*FTalprUbyOj$lK*b{<<`Mf(GD`m1yxsA+DfEsB9K z*ml^~V$U-w^14=2jdrt-(H4E}yCiY8(61p#z;^<&8tO|g(a^dGMzp$)7FHS00yyp# zf_=8BDkXDLDRrUjRfGrgscW^KB`^PLAQkL`Q=o5Q>|zs}3`%io1$Lza+f9D7ln5f3 zrD=y8Zl}^%VL~V}fn1aC{mg&m$3MMmfp1vR)<-E@9Wfx5mKv)vOfZ4)R;TfeeVZ{l zmL;WHDxeo+C`zPO+MXATZqdJIbC-Z+FKu4O)N9 zXR|U$0YFj2A8C*srHbs|j8BKM?#H9*2cT6#naQKb&fo<@rB5Yp{>0mf+e20_hmiJN zkn*^&4bItwPvwjTgTg2chWsGQwr!_W-L6yBf$ak3(f|>g_ zh5TQ<8-kf_?=jH$xl6*40uMvD%XI>iokmbrN=Q()ILh)dtY;zLPx(EII9f$ER`S1; zphw$Ia+Axa_+Hi-gMI5<4?zNhV}0Y+U$cRPN!8wN0;PYU@H$xAbXgt!rh7B3RPY^$ z`Z1@^Jq7mWjF7Y6=IuXQRZzcR?{1NJi{pk>T^Od~MP?C0_Vtlcv1c2elR*pNP74y; zg&wV7nF&AWA9N{4KRs~QFG#xvDoOZ0&K2xskezB$pn#YRO$So#kBs*}fdwVTxbfWS zVci%cgr`nNC7PW%Nf$Y;uyoSmq8{T}bAdWRmwMP_CSB|pC&NOv#=ZlaFpeFX@9{}s zYf$YidAgAfNtf3TIxum9vb16-eQ=j6pxD1Xpba2D5$mqz@Rjn1liv=g?15r}5{IM! z%-78Tryadi6u7YH3QKw?FJ6ekC^=D7I72_Oy|S{Z+CHxB z@wgG0<5p6{JAigHlPwtgCSUg_NBj*&o`LFH2eAO++%HzFZ8u5*b>;yhNfE(0E!9Zd zY2p+<2?xHQNY;^01MhWl>OvhmK7w~5J5B^MeO}wP5eoz;!6`FWIBwj`*$%0rWe)om zR}D{;El<{@Hold9dQTG;Zv$}9b><|n3E=+uaMU2-e&IZIccW=)Gf)WgmD(Ucs=d17 zRCz5dv^~gPFJ>)&_}vx0N0%W5w-smi*a6M`>52ha?Bh1q z1>w5LPef|S?pRIU+K0ZeYo;ys_t|H`>fc@Ft#Q;|@eu_(!?+)Z#!Kgou+)Qa}rLyDO(qsoa3!Zh-5vyo>4Zbid#*&FOj)?dBT{lL> zZc}L@aW6^X^DE0P#~FCcOwj@_@?N8is!luVy3l&(a)G0)-V}dB{;p+i`2CD?oA^Sv zX5No{Shu(Pyg$O5yY>Q_Tv6B&T=BlMY@o~+;`rqzn02L&_U%g+uQS9Z{)jFAmFd7` zPUxo~O{oMYM&dLiU&fmRItxpVwjcYZAd+QJ#Tu0BO~j*ze{~@kR2*P?LdQt<62uiS zS7I3m>JIf>Dhr*eb6!L5ZLUI+5;L|xEH_r;I|jVXA-3XRZ@I%75N2=Uzfuel@=}4jue*(-q}$QHJhKiAI7!`hVBB8El)<}x<5SA zWa=T9%u?mHok2ULEn&h6%QJ7fQ0h2xr`3>-ecm#IDI+uZc7J6aWjPM%D0diisaX7T zuOce?>JE;RM+9shE$eEisjbU?u>;m70_bnA&+xh=50VlK3e|Pdm+}#W94(@b&cP^G zUEa~gFuArmP(%gryF&}w($ce!&Y$qfN!mwq4pMmlN$bYD?+6X2B27OVMFeC z!j-fDs_iHoKMEb*Upl)I(g|Bg-JIE33l>(jG^L1ZILg zDz79m_=)E2XR=(Jk%Y8*$nw5IPjR*4>C}*-F8ySWJtmBtPIV@;STN_rlT!CIlN`k0 z1f`iEOa@~Av}1p#6OB+i1wFqrCUJ>7X=m&{fNaNVA+&^xcD;bnSN>?@6WBnyBBZ!J zzS2qxgYKL=F_m0nsq~@UtaH^*v$>{z;2h}}1+#BjeSyP3EHbE7gPR(NF^5B&0QOLE ziMU2n)@z~1iyn05FR?213fVQ7DmQRzT>HVF)o*gVU^RY|h!V!OA!{~+;OrzHqo%e$ z)4~{8Mieg*5v8RWKsX;wRxo^8waa~ECKAP&pS#+`x8%Gq!k8HmQ~(CqIEDlje}eSm zo)uFlhs>$&u7d{P4G2t&e1bjs{@8IN?-SSfohq-XDL)h z*r4bYDiBmz_YZ^=yaTJ#HeO-4D@-Okr-!aKTa*5FNuiIUSl}Y zDFVa?mU{yqf5`|C5-=ad;*?K%rzsZZ^OT}6;H=vBNq@|ulBVR1#h5O`5n{CZw$U?h z6Tqxvq5ysx9t$R5i292B;-~n$(vdlsWx^y3CFbr`X}f7_(6Y=Z9z47BN%cz=WvbTmlHJ9mY_t3kc zC6Lc=Y+^#j!h$}}m67<>>1my?|E*HZ;e^t6$OOBKa|HzjACEig4;{>Vx`z&gN@J=~ zo7IAK6G&TiWd#K=P=?}Y^x9huRE^8T06;=;U&CfGD z^;f+IsCak>rTHgbt=ne}Fs2`vdILKHsbNA3{TCR&2^{h3qRv+o;$Tm%+jU~Lo*d*& zEDT8ZeiOpTHBP2!4Bx78(PHerI`KP9Nd5UxZY1IPz_ImMi&iFgCQ$oU1(`Bi%M5s1 zpkjIA4G{kU$NSpeFq>fe+iNF^_nS+grXHZ$N0+;Sz6zU#x_V_lpZs(?xD}TRdd9$= zx`B^AX0wapc&i?}%g$%>*m^0`tq+SH-opU@qs7{dFlok)=_K7S-}eaZCVHNMpe{Jc zZ0?aGwX-=V6;?^N-ZLc~u3e0xijuT)s|I&Fbx?spLD|+iR#nMy>HfhdZL`())r(gZ z)lVLEvva%L^YR4{J@C#s*8~vb=A(QP_$==fm$i~%1MnBLIK;J1j%7fl9h-H#M#{E^ zxO%g0_s@p}_Nz?{d65i;jH^D`@pPtZYH=*2kczsgIcEh`F8DQ@8!~2~3a?J*3EYcIW%&-D z%_#At(e!5Dc7#2+Hfb$&cC)2-f`aZsIIa^$y4uQbp`lX~Grml0Fv@D#y_Ia2gotVF zkkB?7S#7c4xI9|yE9*4N&j|B{i0rfNBlN$FKoAiZb*LlMJy0g#5CmAJNEMu=rSF=E;iV$)C+r+a6@mOXlrd>EM~9R@%T^OFbzFdw6GI zt1u7vvo`2&3Kzf8=Pe0ad%kZ6bnlA)N8=G@L3sju<=G}3hBUWxf#K8_?ET(ZHs~=X zrq#?xungBb%**2iC|XcO$$KK#IY=rte{1blb2hkhBRUakVgGMcyU(F?u<=0wL7Sk; zK~fr;iNyq+n{lyRE$GrHtCqq({^wh;U-RB?j6s(njPgFQj)W0;rG)VixuEdzICsZx z)7m`9a_IL%`TsP#Fy?){jWeC40z>A#gt2b?g0N6y6+XM_fv((o3sVK&6>JQr?I|c})dfAX`6a{IQlYde4|L`HyH$?|dQvjd54+`o^*52)OfF-@@tNaO4O)12UGm2zQIl2D`f~(Y&_Y=O)L|3Ij-`3`C?w6aJ^NZ5wWiXxpjcpI=&c{>9lqGl5ST`hakw`JB9HW&l-wVG(v zQ`p~2bB4YRpM}SSwi&*BfFw|ct{FWDbrXgrZgv$`Rx9;NM|m8V)o|~^>(_12?B&A5 zK>tkNXJ0}o$^zQxXCRmN|A$ruZ82L$e|?A~$V*YAD5a@^$^$hK;9YKVWCLE!s_S|C z2WPn8X3D38B+_domz~Wn+tE_CT_nP??sKNf^Ia1)-`^i_erbnAyR{4;Q1VKPNOc|g zReTNm!3{3)O-b!koWcC&{(Zpx)mXVYBb{dL6eQ@{Uk<&-mCT63$-M7%C3;m(^kwx< z2pb1830Q?sOxM?oA1p5&Z*PxzWTmH8O`d%%%3Etc!9Qtx1|L z=6y38=kmUzk;jyxT(^a4h^AY9W+Y_C@E*;KB3y3#vcT9j$n`N0bU8ekq*l)YlaRDi zi6-(FG%B6g(0fJ%u})D4K0#Sji3bB5_N6lhJ1;#5lT9j4tzd~EDKl6AV=0Z5Km~7Z zwdIjDAt@LzkcVOpCn(v%jbx)93#M2Vuj4$$DR9V88qJ-4crYQ8ZY!6ZY&UAU-_5`m zQt)DJpRS8w%RGp$R4M%^H=(FRNRSDRJy*YPt~{FAi3Zn$75r*+-=eWi+{rX7celL# zBSdD5fOllG7vGEV;3jLaG5{1r<`)mx|Fbkg#m*PB6)(d6wM9MYYNDv5DnmY#2|``h zjY&&lj78em`-D<=3XgJ%!@$-Ye(2H91A)kutBineL0cqQCPIal{cXnt#iyoeBAJPq z%tk#C!+^tGfT(*0BtNtsFSss62!P(ej{WNl{%*SKTmI)m7WCVQV$AT8PSUAzbs&DW z?jrkKy;&Tj*yc!%6X0aL63U4pKluo^pa>7W#o3WOIuD)BOsmq6dVi|y8@kc(`1R4E zYt!PxTa%lWh7?99i!l~x)UJh`b&3gab!|H-sk?Rg5}qSb47TXrOoENI8S7OyfG2n; zr9qbW-dws;{zhAs5ym*ml&3k>hTMKwNcUTqq625$r$}8FC+^Df#jvT&9kRR86Gif> z37*9O>2!)5C+|Ali*1xhm_5Q(O57enYs+`{_~#jOL6ozIek|Mwis`92>$j*H&ev5o z4$*JSM>|?tpNf=out2F|#iZ2t(tp!#e+2TJjo{z#I7DVr68eFRA26vC+oQVHaiWy{ zJ@lk#f$XK)WMyjfmh-iU7Dh`$OdQK}r7S-Z@*a~?8u7j`D@IGAv6$18lCqgaD>s!` zpj1ipY16St3dlC$N>7MCjXyaIk6umiJzY-9`PY)`R(TO9{iso>@rK4LMi?8Q2Pqe(Y|19&}>qtbbs+613M?ZKJEA~!-O6SF(&aYe{0 z>xd&~PZ)I>NL)R~$h{psP=^u;!WDF!RXX2dLC&Q{Mr8mvzk0zi@6ta#dr%k#PKttt z?^mCA^wVxy%HeoQQOm1QreWdAqh~OI6V%%1ba5Dvx7a8R{v8{MFai}Dk&Pwmz)*02 znwnCfkY`Us99Mf{Ymr&0DLN^E_4XaPubgb_1D$3g#)3iqek{Ajh)8 zc?GNvvW2xCkeIU*znziO3wG>ZWZz=Tev!$iAc0wmwED>KqjBPpw!CnQ=BasZ1|dd1H3@>Q7Yvpr~kD&Lme_ysd>M*`&8DRk<>kx>aa zwK???ei_!}Ui`R-;+flsZdjJ`J+<X6wSNl(nIp%87hKe=*vuB zXu>A!hieOrzoCw|L4-LOx@+Ye&-()(K`G!%h;`CeHh{LtJ~z1$fm+v5w%!olU+?)_ zl(m6HeZ0d!Lqp5GGDIPCJq1JGn!?p_8la#gb~!k5UJJz56RI+ntl#Q{x0R7}zCgec zx7QvpluXf6ZsYG;2i+RbQD3*h4yLMW5>*VeH;fn$CVJ!;#bw4YLBrGH+tRWIFegyq29E;G&qw~o`cDw>RE7s!#)J@dY6D<5eMq%epw=eWB*S|HKT zid!MwJsedYKvV9)=!aSOv|05?IWAIQz*~_e5@ojs=;k;6I09s@0$`Zi4Jmx#^ znba!|HQfhNb_92%20#h~(~t|iEOOk&u_(Mb&9H>%o=$Cuf6xB;I#K!S*qJHo9$fv)=o`{4-X~m7 z^Kdn*`Tcz~|4a2#Gtt4Z4D9Oo_eh{-%0MkC_Oe&=_u>p$ zUtkb-_AIv-2JL$WRneA)1;k-5DOgQ?Y|M1c#H8X)19zmQrMqH(3=Q9=_FWzac6W=g z*v8C=Xn(L=Up`68C4beSg`A*r95Y_yvz35{fA0CWVS6g{R@_aq|Krl2k6z1!Uk zj+o~e-g@p3Y0>K2`1!?fb;Imq(4FfObEq}}{SEzG$M+k~miVlnIxD$g_O-RO@^-RZ z9P`o|5t_0}qYSp#;LpILrEKO)kz8i7l|dtz#Qt zdfJJ?+Ij|F7;*>gT<}BX{t@J?-Ai}F{j-v-D9H!WE73`#=s( ziT!Hjpw>z1dlVq;KBsR%F*TWjuRNe-nZ7C`7^^$`>gx?@^%sJzvc*W%-Di0%Ir9&y zjjab;AGZP3KYk3O5h=AHEqK`?3!!Zck1Khl1lQy@!#KyHkGi2!rNjkg-N%IBP9s+6 zE)vsK@Pm>vR5BwX*Mr|AQd=PBzYhFFpcf{8Lub4Gix@+iR<92fx}-YcnP-ko$EVhL zL92aYC>2+?ikV-e_<8)%Iv=*vIO{oQH+vu*yOYFV?)cW2l0EGSA79tV=>~yX=Lwl& zI=bCNGY1AA4)fxlH~`hT`D6Voedp=#eyOspdz5O}Y)N8ztHOM473}Q$q+>-ZFo10b3Re zu8s$@6GA*zc2{55xSAHT305c0zL4$EXG_jAM3IsPqAw$8C=1nu`^yfv>^i5sV=b-k ze;(lVvjWqpq~gv5q@U9{Ylhm`D~uM(-#~-UF(Pxk0q>bL{X=*CvI7+Go?V?q8mM8OKX}F`D8kR7>0jO-M>w zXt@r%SRFX{ejelo2Oy7aNQqBE=R^*sEekzt*JQ9n-6-IIm1@{Q0^IVs$9n$gjP5c_&xAXR8=WS_J=@JicPc8Rlf!FAYyWc-ZbN#K}3m` z7jZ~}SphA-Jd%xw8Hr|F7(YCh#&+xL z=XId&~`FSDEurI|`lCWURRPe?<7s*Tp;c(WbbC#}3{bI5vfL4#2&&k455#ApB1P!vn-V_G=OKTCi%@5>lGQ#dMyX~e zeK1TcLRx8+J-p9=j=7Dge{(6yEMmgo7p4ye@F;k$$ro7p?gGBUB%PhrL7trGXt1H6c$! zK|oOe3N?C#=ex6zTZ_ffKxCY+!ZTIS*5b|RFxSK3{V{sx%biBgcg^D;rfAgZ!D3l& z#WVCWaP2Y>?|dL7e)Bx5f|Gg(#opwG(z>MdR>yCkqk_LsVu}XDyGssUlw-=4IPhY& zIu3O)k}k=_#UuyB>6QAZPk%6Ehzj;Dr-AvZG{ie3B`JJ(plqw(nR!}7aC|=n=U)|R zXmS%bd`yzcKkADbLpt};1 z)!#2P*pb7q&H_AJzQ_DG5MbJqCT5lfkvK>hI~n5W_vV>ETj_ry=(Tj~KF2$fI+PyJ5u{35yV%YA|Bp;)^U- zPbUj48{%`q5LuQG&LqRroFqBpD#a{VEDUwjnLLLHYDvziCM0sYHsx!JC-(J|BBrH4 zmqR6t@~*-F?3Eb`e)(ojyw=FA?^vjo`4XG<11mGusb7;4az&7oMoRJ{79-Mjtl|nx zjOHmdC8>#1?Ope`rsxLwr8731nEdC0n+!+e?n6dTEJ~b}I!fZBdUDp-jqL+Olb^$> zxt;kc5_sbE9LyYqf?Ebj9p$;Sd8QN3T@tr86lsV;-Ee9Pm0OZ)dTz?+X;H|(;}!|x zui)m0noH1U$}?nNMw})`^9|ogEqefd`H}_{H9Y`CdYZ-ggWogP)h}4+$kJ=#(9k{e zX(pyZ<#+AHU;WZj`OZ25e3A}UfuH0v>&HlPrB7+@r){52n3N1gxDf1ZuL%)Wrgoq%l$DKSL53Z;34rY>5(i-(fPW?O&u}}duQZ4}(15g(odZy%! zxY@v5+3`-^iK~M0ca?ir(YyA&6ANzRA4bG1Og*Lrk#8hVt2w~0yuvn~O zoesO!J6P6rwKqa~n@YX_4Q5DZ<2y}acMPB7TGJykxG_hR(DF%3h*`UD$r zpS%PZMG#ss_Gpp7zmrN7EjBe~6bBl6@zaPD{h)pnv562C^P^plmUjv1&)D!{s1PIQ z;Fr+C44>i)9&rON7XPmCGSfdt2z@)iJu3b~n6Ua919TGLaPqU}PbIY7z&caA_Mq z1g)ylopseiDJ)OP-4DE^?%XbDJ%nu-)2&|bNDzxt8Y-10DomDS@Vy_LU8Z4T*K$<& z5R&S)f!{&*+S-(> z#GOGMOw>T73tP@3k#zMtg|IjKFc+eOmCF+Rb_l*yUt{qDuPp=6SrXedx!*;e`*O0H zV|DJU3xB3Z6`{COayzu;91OWC)F{lbkEzc>8c-(EX<}~n>(TurwGpJ-f2&*~p6=Dp zn@0YCz;p$8A6H@0c{As|s^T&Y4}msnLdqf%^OSw6X&9A(2WlVuiXQX@ml1FnF1bZ; znT8X2jJTRhydtD&w&MXW76ph1#OS7yWIOVaThIGny4cDBN1MGyd6aS_9i!w2+I{yf zP&lsTIa9?XevPq`mn;N@NSk-9?}}(lrf~X580P-yq+KGSmcB8VmCht{n?vN}^aR`R z)<8CKL?y2>@XnZg)UVicfXtf1OsY>A(u!o%doN^8+KeZ@cIysrb2*p?Q>F;!zVd=4 zuJ^1cB42?Zi*lfX>z;wGZzZyRk)~Kd@;Ysz+o343#L^`7?=)H7o#}n;+!-k+GoSiK zHB(E155|8AhbUk}rj9WDSaNV1c9s1;Y`VZu)_I05G)H(hdu#e=O`Qf@a5@{6s}cSh z`5E%lw;@TLQR1|;`nRdO--O(Bz|&N_nJ;ui=sK&}(I`0+ z#fqj70VEr0V{!m5X zi9TVT8`sAr=mFJn?|-&jEY6)ziF000+T|W4(H-D!vIuXuXPms}gV5Zt%Sebe@BL7e zt)cJ6l`bK<5^gXrnZW9*wD;)x$mO&C* z|4V@sTw6uBkUt5)uL;=DCt9;uy76Zy_Ki?IJB2$F-Cxg_@b8|DmZgMK6!I%z>)+tLtv9^;Z>-cs1I1&G2{ z;vnqF;Aj&W?r&Pd{1rZC%%-rn=sRb75-g$F0KM{!RMyyu>{H4oR}V>iMe(2Ld$f@q zAM;pg=vsN+YrDJYkVd{V!l5Ry2e9<7*0=UWv|wxBH~UVpiIY1Oz?7ivvfk)lBnMCD zqhy`B!l9}CR#j<$)5uW{iN{NeGZ7IhiAdM=ELZ^btn?3-Qkod}=sBjhThve@TUub; zX%fZm!1#I=RL}@&3IffQgY|E;^)_ys+By}PVIl=$X1kwsWfYA34soVpm37xd3r2WT z;4CFYx?8MJuN1yQsxTa+DARG>$ljy6Lq`hjB|#Ir^|O(-x{(!#vC_!bBWpi2f2%$c zUk|zFu$8;`)NH}&l_}-ZxmzgnTV7HagDtS#X~XPL?32ShQ{D(WCgRrBS@TpV)8mNS z<`bwK>}z(wj=VAT?TXtWS!1`>!N$*N#e?v7Sw9y}rX0JSGBm%Y@&x2DXCF&h0w#L3z( zr1mPh`r^%oy0z%wvA=}84D&)h3)LGi#UCh3S!85VofSUt>=DjN=KM*gz&IVfX+{Yz(0Y2k|Mb)UcPL zgO*hw#fU^iWCX4X+Q1~AslSAQ@H|w`Wg5Aw;|q&S+W4>Uvp97((f3Rn*Zgza*R7ic z6~rS_pND}}6}7-ZRBg0JidRk0A79FYr?X*y4@Uvb92Xm7x5XKILnt(Ot}F5UrD=;> zs%wBF5&YvNHpg8aS_Uh8PZKLdE3}g%<`6K&>r~3AbDkItn&@HSS5EJdu7OwBw#o2& zh>D|HCJ9iV^-pZwb}E$%EbHR{Jt??Mlbx>o-z}1S4GpKq5B+`jeU&wnp{o(8s~}x$ z+p7LA&NW)@TrGRO#w4*!F~1@#V#pU)Lk&c5aNL!CRq6lh z%Uvk}I<_jb311gUDV0&8Pc@yxeTvIO1vL7GszjVc(vQGHw{ogN`Dp$=Q5acF#p*mp zCkHol@f|wfuJ5FU8eUH3L2w@t0t~EhnF-Lklo#Bmk&}`$=dDkuL4S@0C{OoCHivQS z%yi8<))%{tm)SFsohFJrw#P}YyUG&8FOaOGd0IY{Cf*adLYER3;|FPOt_=ExOm8va zWrM>q+5AKvJ;e3Bo&i=Aa2O{`2;(ddT^7Pc-H-A7lshI&`1lMPyQz~sp8V4#Tq?~ibh*DOx|9_uhp<)0%DJrX~)#l*3%^xs?|#*d(c$E zy86Uhdln|OVpFudT+y;l_ap;ue#>U3U(v?K(oz!mWS3VUepXGI;sX-sy~2iZ<||;c zDR%Phzis)wI2Py1!imoPxDq*VkaXR%J)5BE3i)Bz5ep55+r0x8H2wSG%TX21l=TB} zrGdB`*DKq)0+mhTVLka+HIJ9tsG+%h52zZgbbjWlAFj-x<=3{5i^(V5qeJpRetJA_ zD=4JMz+g(DyP9y)Denrxb=O)SLIPn~9DI6kdIfyrrgHDYj^_3Q9ML1zwo)0m%zbFTE;~74kw4R2+ zVo3v0h^G_gmsz)FabOj0dC3U*$$zJoec@#Um|J-~n%8yf0u1f2MO7fjOSTZgGIm`N zK&wE1mm2q*@F=>yO-`U^6q1s05ZQ#1V-T6|`uEBojVc-xmt*xCtY`lgDj&#mVV_PD zuU{36zj69OD-rM|7g(AFKa*{ULt7!6tmm{V}SLg}d*o6}JZbdgX8q~zx5L&N7A!4W#dwm($u|8cx z@GA+OF_@VQ8z$?ul+DpPFJ}!R@lGM!N9b7RQOLT{Z*xyIqviZ9NM4^dJVv0lcMsuI zTq5diKQ9V$@JFM3aMyS@wE@6s5k|lmj+DoD68RBEUgdP6t%tti{S=k*iwkPnp z^ju$>ieaj?`j)PsTo`2eJZMEaIg08nLUEI7P_RHc?o^?H;`LGL*B~nm+}?^Mi3$|s z_VdQlZM^@H5ATI!k~$`CxaU6rb1)9G@c2>260{Qdzgl2-q`+yACV9ty3{3@IFp_s9bZ^~UnA)UN}8yk!2Fa>lXWiX3%V~`HY(dOmZ4QRME9?_?T?hiV(F0zUk&MaBHKq*6`y@qPS0;*swSWV zSz7ba@=x!G+MLreULO<=9Srkhjfj(Jgi_8|f!+mSf#^wcej1sFX4C8JM&m4WKyaL> zKa#*@cwJ|{OEPK!0a`}Z2W<1>z&nQqj@M~%iwqmzmJPfai8EdHhNO+)-3MqQ-H{2jWOa!?ESr_2QgWAT2b=LM(WS^+QC$k$;bv%;78!|$&xc(f7bUal$ww&QvC^x`P z-V4)|nLZH|s?IcOkBmElb>-JNh}hTLU!WG|{wsp+Rv%rbe*VL}w2(X2Z(asNt8a(Y z*$KgRQIb=ShpA6{3ZIBkI}m0bzt-|7QyERvp$k zGK0F!?MPEjeRrPnO)}ssD;421j8S8Ei-`~ub zC4sKcF|O!?298;MrBlKPP0!Cb6Svv;x`oJkgQ`#=H}t(Ln91=z$;ExR$>pZy=4>_$ zGjE0equb#-FF@Oyfq{X%6|X(}#on28;8){3i{~e3q~tReX6B#z+cb1f2aGIb1Uw83 zNUOk%@ zDUzEZr;?IVMDksC6>!~WxX{32zR?P=(Qz*V@NsyQZPrB3!BTaBA$Hn1))-9sp|5sd@Q$aQdtj{9ud*)-5p>N z1J&zj;b_H@=iz{ClgH>NpVrBn+e=F;<&a`}_=my5S$sjdp7&LbMV-~*y@Q_CWy6sL z4cvT^Gsz-y-ET8*V6YlzU+9FkjQvT12fHOEXB}8n`F@K^2FiB^;x{c=o565>0;s9_Nj) zNP_i)gYeDwa-Xjcx#lVzX+cf&LmU8g4rdZ%zY=Iv2QNc;yp|q|>bcGC5qPiGAT(Os z*sc$k!{Nrq=Njy>jTyB3uru9fsux=gps~UP8Wp?8eicwn73spuGB!Xe=gEt!D7@j% zR-IC?MCzXL192A#<%p8*^Xj#X50Qi4e0QwHkY`d)R{> zUH(Q7*QpX!_$I@zrP?(@E-vq!PFBb~U!qao(4uOVyyJGL$3QeJy+#-z4*Yd+iDpN# zKwKyEx{Q&Zo}m8JUvBk$P$;)1xD83jX;diwWd>Elkj}GSbi6!5+O4?!$eq5jb63R} z*601(`4G+-NB5$}~vBi<@byBlt84##3uUgnZfi*M~;u1Dejy82?{;-~H9p z+HR{T3Ro~;Ku|!bN|oM=NR=wx5I{g`DAGHz0MY^iN^jCThE5=WRFPgoO(;@BhY)JG z*=L+@@9&(m_ql(-z5JB124k)Dmi0buK65Vf9F2`K$@r70GUpkT>U6X}-t?b^9l1@K z)e)v3b1U1Q40u3t9fL1`T+BT&!LC->+A>8_qrcqR_xa{hwr%F8(8#`~`@#;P9uQQ$ zf;zwpbMI8fpacZ7)=0_31U%neTgjm7F<4r*b9~ZSX~WF~%XkMUZwhxZY53+Z((moZidang=W6_}Wp-`iA8x%#rSqDI(=tErgw+)ez(UO0 zwhSY%7oL>{1J$W6k7&D}gZxcduXk9*{%w#U_l)Ira9>>zGhaZN`iGnT!Kcdq8@PcdLe^3W4Y zr!V)ioTHD)rbSB?6yYfu3>)I08&71NmBBkv* zRZ;{{(@fodadjccP2}#7Zm9qzqr_v&vCf)_*?SUmj4bH&Iie~^=Z?)Ao&e`(NyEGl zJ;61)Cho<6Q+)OXHOo%VsH*KyW6~Pj`%wK0m!Uz43ZJrq!qsciyWBK=spch`)z4J4 zpQ0I0p*y(U4ps4N)x|FJns&2N{mQ&!A)5YR@qP{-nSmXPUBKTv&7bAaS4+mS5TJy| zfG6Y;RBplsLz;>M)Eo&YaBfYHdPHt zxvFNrD`r?xj^Fb6TF7UDh&0Ogq%I!G*v&DDlR2B9K5{?vwviq-@wu?g8tz z-(P=O@kVvTkVk#H+4-pi*tf8rlKi&Pt6C&cQNfL{?x6w{_2H3-w-K-I9Fwm^;_WdM z!bOGyYgF{>t}a@t8vLp$z9!=$%Kqa@oS(O*pm*q!=*VIO>7|!V++*)t7DanXTKA>% zSh!j357iiyjAL7Mh^8k#?zhZ8m>$`OuR9uE1CB)^?jvZpLP7kFQwbxxXFcV~Hl~xU z`DoktgLm&P0e~h>+aQ}RH%L6ouR@Q7m#TU>TL;71SCQ(L-35yUEk%mdbivn1lOg96 zwVvyO;*k#zoLKqB5_Cd-+eR%d%g z8-n`o>^FM$fxNALM@&HH9Zt^3SU|duw^EPS+oZS%;xneW$L@=$59ko<ah;ffs1J8# z_|o^pUs!Ebr!8dyeNCE->Q>VY&_aE#O=k)UV-xwHlFyJ+!$L4!9F!oe3?3Ib?Kn44 z%iPFK4Nb(TXN32~e(sLXSm{$vlp1-XoBVU_V{|87gf^`Hq+6M3E^qq8yo18KWE_J^t>cX=o0%Nr2+VO&L6N$;II z?B|$!;IT^DscJjRtNNu{)PVi^{EXJQXCF1d>MRc7-p4I-&+5S7R(!b8QFngE{D@Y5 zW*~B^fY)ic!E5WYSWeH&22DpjAirx*nNb)JaXDA*YkLk~Q_KE<6pVu{Oq>5zc_;ZM z4|9=+maON-y>$Nrz)c!2@7d^ZSbRqMOis7%&Qh&l%)?zVD3RO#jF)-a3v=-rj7?FI z(zJ1K+jr}p;JQa8hlk(5f$Kv2`{yq!T@?YD7wuK$*7u&(8n5)T z)2!mWWqWxJ}gm6+5rKEHOW{R-vnV0Ophg(ezZml&w{)$i5e$e*>XOaGMbI!m}J zbhy+=dPAWA{63ADOeulSri6LA+7UuUx;AzDfmrA(x8=EYQ|XRd(i28Jfw(?Vqe^QY zp{D%KE{EBoT)58YA-utBv6#**<&AP*vWVjDLQJRpfq-4U{5sL6;J2C*a`^19v^iBp z6VYiO`ZY&BIaFnKwR&T!`o@jGQ;qhXlLD>}xxfdD3z`cf1MJ_76UwM=2u)RKsH;=` zaCx+Rfw*)z@bckJ17 zZegsy;UDzuo1UhZ^}F>pZh4fiHsd-fHXKUv>nz$hH5xR4-rk#POOVMl{oU4pnRkU zJ|k)q`~I482X8ue4WG6e5Y1Q(^-|#9o3YGGceLO4n>4za4X<4l8Z=MUlU5AhNeMF(#zFVV7WI9LiK=D zO@{?2g+&!7KnA7;Dx1fFoy5fG({xV!KLo0zU)}-N7O1J-9u1o30&qlxjAsMXfeOGxp)OAHFlya*b7-c$pSZq?=9DR{X@Ru{S7s_ z4r!R=@lJNz%fe@Fdc`1pVrgO#Nh#9;0NlpaQ+xp(pw6eL>lL#CZ?$Z+www#ce zGUysVN@NO@V!W~qy`;?6gYbj9r4{xE^w-si-K0Nxdi%u(7M_nGGC>%k!Vqe@X1gW) zYjJNi0}9c4QSbibg|J;PI>4zDR*P$U-WHOLkv=DO^3-O^?~hkBMY9#YbS-Q0U6iR^ zNkrsFbNE}FoSpSZN$t1(e1P}VeRZ|DF=8&g-s&Gmr7jmN0b~?)nhKJrhFBgXdbzyb z=R8u0O($C4)u9yw2U_?}JzzkE#v?;_LCfB3VBwW0VPrs?ID9=~G!YuKHL!U`6qs%s zeDwSsRql`tf#hJzM_`oU` z#BRT_b7BA_m!a5n7BO)!f{ztOGr|2lvx(-}GW?CH^Hfe4oLN8OB@_x3jM`j8W6q~! zocUB?jTMVI>}+fn9Ytf}`$_M^=V*fmn7vnL1pfYT0IQG~JXP1!{INJ76=A3hYenK` zZf!e!<7H+h8R>$C&TGk9mWbR}0lxqOg>@0(S*Mf_q%36kLh zXa;<@**0C|E$7`hJ=|=21aG-XNjdPfuB&qj-1u9o@nD^cm^5iUJKl%w*mblSC2Mt$i&+ zOa2ezpOtUTZ}>=CEl!Qza^?c2nClSHZOOcK3%d6NJe+%dnQ#_C2Fu;SiDFdp4%9~o z*}IEF_%gr2gFUXNfeQ*}2m1pH%T07{D}7xh;B-3zbtY>15aS~Uv(c3%Du7coQqOs^qv@9by7&aVQ|UJoT}rG7#s6KyvW z$e*U$awYE{CaaYg;bXR>{VtckKC(7`Vvh{S%X;m8T#%}$k$OO9(E)N@8J3Oo_^m+QhT6iz9Y!j#H6J zrPEmslNFCy3{ue*QNqQj%(6N(_Ke~FD1UsmCjh+=Vx|RN!5LCtoAuwm=PlcGv)*m+J!l{#dEgzUuGaeytqb4dz|-bOI7efJ6bQ;dZ%OigS7iheREX7l(Lv zhnYrdF2j1NYiz8nS$_FkgEblu1%;sdwB8JDhAW>fN}p~Xok-4C4!m`Y-s;>uBRVW~ zdB%pswCJ{2;6l)=IFPlq6@vSPW3vLBN`Kz1Z_1;9UjMd9gS&`}>T~%IE)Yx#+-W;d zu(n1E(4*0C-9y*V&|4Rb$j6>MXdaWO#sV3J${dZmskWm7sbmjgt~1?1UCbtObw?16 z+{n-T&oeix3UY1pjC?E3G>8}xXyqL6?@t$EjZ>}#;hpeA_gd&|{Ni{i^S5euz4hm@d6mH^ddpJc{W|ARSRYzWSLD(GUA)K*6=KP4k3l09+WBlll_x>m-T}C zo>Qsmm8y)H$gn=vUN>pYJ)CW_%qJ4IaSg`C8riL_SF_*nb9~hh?{Qz`;l%d#u|je0 z6VAhRsTG}>yt9V-oAF=Q1b`Y^1MfP|N;t_Q85vLB!C6fnIUNj0;XjPMsywadX$jzm zMuT$xND~(>E?fW8hfJ+)t`ppH3BaQq<^6(+&g8>Gz#rn=VV5p0IbfP@MN92oHT4O& zYp?3B?uaQ;yb%e2mj^V6P z=|xY8hWL@nxU4Z1hyGWwEb?9Q#HTJ)%xr#${%kfyD&QofuZFR~k1~ouHa+ggZ2#J^ zpWMu$qwJ|V%0a&`GSWS6-jqj9e}@>ET4FBld{V6H>!pDT!ipPuTJ;j*c)wi^_a)Y` zM=_VSGXB9~efVCDUbJ(d`Rs$_HuTOI>&usRs=b1N%Mbhy7Rb7*0!^Z@hnuwr9Y3Cb zdTRUgN+=m+m)Aa2aB}v(NP)9KF>_JpxjWx18(|rDzNL^@)m)6(RI(jgq0ev&Bg@01 z18VKcva%>(oXiHLps~?S8h&_lT_fhLv21r|lSV9?;#?=Ttizc(v8V^h{^sO25`ORL z!7~SR<78xj>Y|bu`|dL~#W=cbBkx2bAH;&M2!yCCqn;K{YZj=;{pwSe!tR2#CM3;X z;%5RH#br27R#l@39g`S;Qnmp)W3?NqMu9&9V(SCq-Xvp)iBc!5A2pRsQfT)`-opHK zCIuB0vNwi#$dNU+@#1I8h{sUz-=9qs!UagT(*AzFROZY$G6lW>2|{WJL~LqTg zXS;}SeNMKbxjHwSl6I8T<0Mqa!mvi~NMa_)m5MA$a_)`4)Uee?XlUpLz2O2=nsMA+ zADU7W+}%XNK;DA+Hj@mqi;`L*tBSq2-O8Xy@+G_dc%IPM-ktG1y$r0NV=+zM$xv)+ z?1wlGtt{_1Z~B||lQGDQ8W&7Pk(Yqff|YafOo2`ZMTp^tlBM=Av2GnRc0)g)C(aFV z?%Qvcxc$VRW_e@@{rArQ95eGAZzO1UpBW^R0BRwt`@KR^^O*P3KTJU84z>0-UD+BV zh&IwoJi4KxzM&TGc+rEoaFxDTnz>-xzp!!w`4jj?C;sUcL6Uk^P8%oc%60J$(`j}WH84Ljq)dX0Pc__f88_p`J8Xepjmm?_lX8Ba0G7l#7;Qp{^y3%de&XI$Tp> zmn{9$VRthA%pII@T zY#oh!Cxlh7YFOCgR~5gXnBW|u8O2E)^ZkbK3gtNIv8-+Lw{O3{>UxsKCl~B<5&Qdm ze;;UCFYcoWRXF^%`86rJvHbW+R}@o%L*2>kpft~W0nh`6u+UJkV7#4Vs%0*uS#_B~ zBEe0z%X~8OudUUe^2d6J3V8n64RN%aU;kLY=x!N;(D}fnTPI24T#ZE&d9=snz1>E+ z+dl#Kwmn+ZF(lz@7NICCEL58CvDvuz<~D%-dFSOXWPxp#MP&G^McJg#g^q~D^XN`< z^x3fhTG<*cxwRR6g;@7>nnKec4Pw+}eH}9jFC7dQmz(3Js%z{t&G3iBu{dvU)*YHc zt6@Bc^_w;;V`hGi#F*c4#WWvPgCyAB$9pC*lTG=ZkL_W%Z|u&f@h$cZZO_%m@X>W9 zcw*nzc1Hf_DUWU?*2L!6_fkZh`5h0EC`Lhn1gmr(%9F!}E6NJ2C<~Oc zQ$@2ocv^YDc4AR0k>d|RUcc!|ukw1-?v(p>QbfK<&-?T1Pxq=({Og;wOM>)e1kIha{cA2*XJio)0l^h-hyDuV?6(obF z<@&)@UVl4U>fqroWyMEqZ2Bc+BSR}EkfBmFTJX@WK$Y!yuMyOs`~l0MZGA+V&DKEk zT$$vFIWfMe%X!H%qGA<&zr2}I7^0_KN-w;#+D7?9t3=b0Da}kapDRNn<9$B^pBF3+ znb0^@T%AdirlsuWY_n3~Se16_hD2FR*KfH(r<>9pXHZ*#rATCB?~7i!!&lKxCPQoC zQJu*;9kX?HaYR`a@@uzNolD+~wd#}pUI%hL6niX&V(vu;=@%I(Y9@&=)S_KzO}!6a z!El`tliiVOw~KOYJJsM)HkEA z>jifhZk2Bc!cRS!)bSRjBrp%Vnz~$rCMK=)kjq{et7Nank}EW|c5zt$O>ZElg5?*o z2xiIT8neE{_lp)tiG@NAm~eLZru~nijzfOYJ*$BhfiYh^WV(OcPew9zXEN$F z`qchqJc#8B4w8HVU#8o7r_!INvLfsq#T}5|#@SX+p;3*$xV8Vea8vRw3?Rcp36$1R zu+>3%^2o@bnI(?1o_)Ml*J$ijV%GeFEW>`u#w5nk3@EARFv&NbS{^oWh`!FW9GY$q z&s)%dt&e@5tHtmWMzmnqN{S334~TNK`JtAqd7RN$p|O{``pvQp^lYe;CFb-}E(=S} z0P6!;z^Ae_NxI@XChGxylDMrB)j0N5Zsx51{qaPvq0$jxfk{J6eMar;_eNO9R>uHm z5#EtcluSR4!l?U@pqzDI8eUM)T>v&bq8e?LU}`@uZdh{HYh&h##ij?@O`>YE9_6-`+8e9r-+!0(2&_n|3{2}9B z`q5kBt>d)1dA|rRz6CVYsN8ueEk9E+Chywox1H^oYuhNWu5lBAcdA4wMqDUhWJHts zXYg5mhhGJ26*0)!F3o!)n&x*O&I1pSXD1Cw%Sio4HAI4mI=$u5x3}!=j{AC(R>u}! z_{;jy5Sd}ZelEn+RXdw0(6|L#h`Ap+F&kv`b8(#)pJewDV&mjrP=*MPd z4b2@d8V7a~*@(x$s=ZFCz&Szl4srRResOrjnl0N_%vA(4tLab$PJe2vfxA~{W+&;0Yv-5r4mQ~(5NxVT|^ zf`T$I!@Fmi!2aT|Q0|ESYLI6vLp8N42uyHFzT zHdv+sVd?GAD~n`cP8Oz3*qCJ|e5Jw@B%PaY6{AY{&kxjQp&7m#{O~F_@|X~{4z8+JYJJ!RgWFKZ6fI*vQjco>);W5=ewg} z83=~GhK}Y?lHyuqyAO9+rmTFcm|^@9p>B6PT@Hwl`N}vc3H$vQ-j< zCo9z2dw;ZoBM8~SgaGNiiNzz()zy}Fa;!a=+0WORVxhf>5CY(NFrIzZFYM?nd(9H# z=hnvemznwbk?82}Uuv`e*QNKm8DbIa0`ZYP9`P)z(0MKMDM|y1udx~^)h5UkHPfb?#*A}1^#1YjDxsah*Qm(Kx`=yAf?k|SSCjaPp*oOJZbs$ zQ@mNA>`6_lM*`M(MZdE)G%=Zz*)qD}I*FfWrp0-Pw-GqqIHCnyYOinUm{6RJ{#i%v zs+k;=pWp5~%iNj+Dk@Sers%*EL02w&O$DEABfu+Oct50oHtmPnWtA1*=)w2d z$?cvRF2K-Z+adt29*gebT-%8vM@_>3j+uxpHswtHyuCsDCVMNXH#-kE(3RJheg_N< zXT8!DioJ6S;Zxuh7B_dKT?z6AylEXIww$p0AF@KAXWed+ndDJc@ zaWH4x3{8aP6OU7sIczc#H@>Zird9!k0)Z97u*_4xXSEt7`VMP!L6@TMzQGnm_X?1S6S z%xBBaxsz-j{Oey6tdMNI2x#JIB|LL9g(@bdQ$iBlukCX|=(5<~!cL9F?ss8m%(3CQ z;uouT*wjad>)UcS`3*b8IhnVM_sX!xIOH1pP5Qk{7E9an?C`gY$A|Z3W>&6^5;Km_ zumVVU0LPLN26xg2O0-9gXI(fR?Ho?uTqJ(6xaejBi_KU?@o#tBO{jC5^dsUed>Gyk zoVf1`UTXd;L(%f_Qm_`~!^S@wNW{Lr0~r<$3PFFAFPk?ST`dDwQ`jxgF!IFvK*r06 zxmP|x5?Hu~J%62Jm*<1etQ>R;fhI2$vc)Y5$FzgkVb!+WyZsM;p7XpqN77W2m{e@= zEm8z1aQ{?l=BI#in>qw(0m;q$))XD6M1OBCG^Kn=eG`ivbw&^0%*;v$JubT65bro$ zn`Bn~UGJHGa6xwLJB~UFAi&Nb(cxlF6e5iEohdK6i{RwKQR!}@j6#-A3FyD z9H|u)&~>U*vyFsn*AAO$nf!%rpSPP#>e`Mv%=gr6J#EdWsMLb_(63=FgE@YR%61s{UaRM1AAR)eoF#8 z^@G)O*v3=qN$Yr-54NV%I#hpQuXLfB=9b~R&|#w!l&fCp1Iu+#jjdB4j*C_7>aE{_ z<#p@DbBB8o1D0`Q6Ox`=PZzdICfx>`0!C5~eTQ^rRvd>2`uBx|NW4KH1YF9XN0-MF zcDVhbW1l=jtCN^`?)D`Joa)3FS*FSyPwYJK@;h(vD{y9F@m&|=oJ%M&oi_4aM@G@| z&=gL4ZOA1JTfJ2|oX{sclULLVK)ItsJnYp-vOiAEu-RH?D2MN8CWxH8gqT|y2un~j z^MP5%6T0`BPVR}Gd$h_u7c1ykCN?k=k(~J5-d%EYoQRfx2tnG)(Jz2b{j1h;;hsshb>4YhzzVgxna@;yfxKqg!#G4R{#t| zt{WzLo1t0#SqgJc{{hS;KtL61I4+Y0Xt0hd{*+)pde^*Tpl-5grw~q4UEp`vMJ)rk z@#C263#$wd>yK#b&KfrfA^y*VW-?jMrcJ<&{wY|>0#}%0;eg&^u=PO!L6GO;bpQ0F)rCp9oO{>ET zMHkAz9<*NPe%nnqqNVqqj#?pNLLG4HrjtCc=ND%=@c@Qo*hPG&Ead#o|j z_#6r{^zY;%vco?l)1e=^JS-h7SY!=N%sVaN;AbFuq5|2YG1#)$(DlV#>ZiXaX$O@` z%>Sr(_CK)P{ztK~tjl_G%B(+I{-I;D=cAs4l;43SBld z^Z06)#^$2`yz;rQZE&Z2DTD4%Xq9idzn+R=ttStHaUe(2ULS%l-u^nqj0~zBmrOHN zYB3zrGo=9>bM#E%lFnd3R~K)GxfQ$kS$1?FA+rc;M!~4wQaGr(J?v|Fc@=y+sqhP* zNi)w0ChTaV+1c1;agM#6M9zT8;j;M2MOe-sD@gzU(x+_SR8ShW2+N+_VlTG6c65=`&)RHkT z)1Q4Ap#==kyBR?vdQ{y*XwNbW{N(~Oe5AApv@dxM)0jZ2+4!?!ZSVlANeG?9#1?o zo|}vazj=oMp^6Pr9!dgXpa(TnUh8`?Oe^go(pC;(xkUz%oQ$`j3*^+axcgz3C-El` z*xUSgzh5&row|0gU;LrhZn%D(POOFx4eVy|hi??`Y6?ONa#KPpPIkGsPWOO>PAdM> zMnhiHpy1}-KGm{pxH2wnEHN#mL&qq>58AQCl9gX!3b!Erqr1WK{FM^=G7shj_b*Y| z^ImXISfUx80Ls7M$X$Mph_oM%z%n;SzZ)7>yW_v2q-J7p9&c*cGAhBcS} zIxB+1cy#!9g~>XFRSuM&mESq;f06A{XL9uga0f?Br1>Bv5eDZe`Z2oCZ`mpx-6OBu zAvA2?yM_>jnH6m}5@w+n=iHWbC6?0xkUdU~Yq?<=QC%F%XKg_NP8Z+gPYX!#Ww2?S zK>h?W_!s823tfIV*{-E>bDCf?$e$4auXVReXtBq9OTFy<>@SEtH9&bTc&3iw;dAhz_682JWqvE_I@!P^Dpq$=K9rHnH>RMj8 z42U04gpt8lmeJ>JL3eC`Hh5Woa42$O-FLdoSr+A6srW+-pipIWL(8KrZMRSKv2k{M zahk0bfO&c2YmNe_NZ;j^mHqG|26y#0JsI-5p~ynqsjAY@p5-mAdyUVUO6mcLjUSmV>mog z|Jz_`&^0@7@5YZD(+)=9Ai+9m)+qVj{IBe0r>F83VnrUA2)SahlB8uE$kMb3;)0pp zZV`iTjrszeaBgw}KcO58rlbIrkY_#(UL1!2)$1r3=@z%f_ZiRif67ou4x%eCs7|&k zmro5h@x-konxDyEUj-3KTQwX;C#s8G`!%Mg1%2 zFkK=b*`e@mAxTlVd-6?{#c@!~R2fm1o50*EAGzbuU++L#c`YDsLny?NAxzpnysEG1 zC&2?pNqc!#Y6#x0PXwp3!!QOk)?4^`4k?BigTA_7XJ4P(RpViHY5)qeZ_aXe~ z-ca~D^HZ9*%2#JA7IBd;77H~m*14qIFPbH9;) zG2w^bp5>$Y0rC$x@7*Q_EgB@b8nJVb8deSav2h@$TpPPBTs|-Sz@sBsufDx=t3O?q zoUi#XS+(xX#k2)f!zM81&whj!JF>xreIae5Kl_c}a=y1*(3CldF&8hZoRSZ|E-Pzx zur)bS_gwZZ=5<_{-!kQX z72nQ*6>;iJl_j(e=*se|ei%Jbk6?fI#5DIBqyKNfXo=~SVzxtbEKT3Ms28Km1JT=F z;iT3pT)bV?v6rkDY%=DT?>pb^>2ua-><0`;I|nr-$fQ1O{S9UbTu;^6mxTP>AL0Uus4>-8s!-R}5ph{}T0 zSj1U_F|6j44uv57_MtX7F+p~H{lx=S9?qchJ45}4Yd%(#QqsQM68H_6k_Yyl;R>h^ zgt+>~t{kpI&E^wLqcN!4V13IHRs=WF-!Ycjw%OlsFbiAAYBFD2NVQ(ilQn7O7y5ct zcL4cxm=)~1x&P!ywd8|-q&~kw zUpE3i6~DRBwpBKh{OG(qxS9T1a%v$YKgvQeRT2=>FK#vEu4gxRFSla0T|UnN`?G%zyJfkKUTyB_f&BT}xj&Hw9a98CaB) zC0Sw~ShWumW54+ypRQ&5rX1d5?M_i5sw8w+4#v~RUqJwr5Ku`nsyFP3w_C_DE2 zTQ8Ik;O)-~+d=4&^5}ir(J%X5TxQRwzFh$jXwI< z3_YYG@l8G|Yy5q(o{C`7^h6lvmR)4;6=sUDuM>%!A?zwC9|B?O`6`9ENn zMEpkGdAxD2QU2-hy(Gkn#lmv2BC6nYSemq3IU*`IQvZ8pydS8X|DG^SE~qE?hM%$C zk=_s}BSX_+>?tXz94=EEmRV%rr%eAfvhxEMWG1$wS4vH7f?25JQR$MF>+Dn5tb-I?cM%V;x z3Z9SQe`y_-C855i(JWbBC>@w$$6^ieM%lg|ZtN2A?3Z=t4KP6CC>7)C&@l9pCeR^>S=R`e(Bc9L94vqC?Ho!{YkfXa_hj;<7+KAlmAW{g`<5RD1+i?`X zPHKyAHJkj$T|}%SE=@I_;H#8=wu#o;G35H)%sTom>Sej6Ns_D(3ccC%S1=_<( zo_6pU1vlIfzNqIVsAI)PDjPcoinUB}68%Z(OTq*7;~91vg3^+x-GT8fXxj4*FG}R` zm%=@I$?_B3Yd^DF!&B0ui3MEI@|7)|Pql~hqEDJ(M&r8l>Hfdw8x~%SmZ8?e>z1XYnr#PC`4nYr z17@cu0~%^;H>t9uSq6gSd%mWSVzw5~RGYcoHL)!b7gzR+=NSN~sk{vQlSq%oJ`?gQI(=ac_(M*jza2=PX(HcdNl!N1@i z|D8of?%5w4CI3sa_8;%?nePvdlHlmHzsIlr$8#x|iD4P(u3jDcU!(jJ((s=@-unYG zcar%0H`M>~sQ>#IweJvVV7No`TZRAfYyNa_{`KQ`1aa>D=PhmimuG!YArAhT6tFDp zzbxB-nXZRse=xA#V3Pb34D;XT=Mwo{1>)duEEK-g`0ua!Z;NuwEH^J`b~KUn&(F$y zNTfA-bw?{0!u+=sD*tiuCoORn|L;p5Jn+Gr6HNWTENc^)_E9gbjOU*vt^d9jm#H3y u{y}r||F_WpoSA=Z*Z;qT{vX~#XR 253: + raise ValueError(f"Invalid hostname: {domain!r}") + return domain + + +def load_config(): + """Load config.env as a dict.""" + config = {} + if CONFIG_FILE.exists(): + for line in CONFIG_FILE.read_text().splitlines(): + line = line.strip() + if line and not line.startswith("#") and "=" in line: + key, _, value = line.partition("=") + config[key.strip()] = value.strip().strip('"').strip("'") + return config + + +VALID_SSE_EVENTS = {"start", "output", "certinfo", "result", "error", "done"} + + +def sse_event(event_type, data): + """Format a Server-Sent Event. event_type is validated against an allowlist.""" + if event_type not in VALID_SSE_EVENTS: + event_type = "error" + return f"event: {event_type}\ndata: {json.dumps(data)}\n\n" + + +def get_cert_info(cert_path): + """Extract subject, issuer, dates from a PEM certificate file.""" + result = subprocess.run( + ["openssl", "x509", "-in", str(cert_path), "-noout", + "-subject", "-issuer", "-dates"], + capture_output=True, text=True, + ) + info = {} + for line in result.stdout.strip().splitlines(): + if line.startswith("subject="): + info["subject"] = line.split("=", 1)[1].strip().lstrip("/").replace("/", ", ") + elif line.startswith("issuer="): + info["issuer"] = line.split("=", 1)[1].strip().lstrip("/").replace("/", ", ") + elif line.startswith("notBefore="): + info["notBefore"] = line.split("=", 1)[1].strip() + elif line.startswith("notAfter="): + info["notAfter"] = line.split("=", 1)[1].strip() + return info + + +def get_truststore_certs(pem_path): + """Parse a PEM file with multiple certs and return info for each.""" + certs = [] + pem_text = Path(pem_path).read_text() + # Split into individual PEM blocks + import re + pem_blocks = re.findall( + r"(-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----)", + pem_text, re.DOTALL + ) + for i, block in enumerate(pem_blocks): + tmp = tempfile.NamedTemporaryFile(mode="w", suffix=".pem", delete=False) + tmp.write(block) + tmp.close() + info = get_cert_info(tmp.name) + os.unlink(tmp.name) + info["index"] = i + 1 + certs.append(info) + return certs + + +def emit_cert_context(truststore_path, client_cert_path=None, client_label=None): + """Emit SSE events showing truststore and client cert details.""" + # Truststore info + truststore_certs = get_truststore_certs(truststore_path) + truststore_data = { + "truststore": { + "file": Path(truststore_path).name, + "certCount": len(truststore_certs), + "certs": truststore_certs, + }, + "clientCert": None, + } + + # Client cert info + if client_cert_path and Path(client_cert_path).exists(): + client_info = get_cert_info(client_cert_path) + client_info["label"] = client_label or Path(client_cert_path).name + truststore_data["clientCert"] = client_info + + return sse_event("certinfo", truststore_data) + + +# ─── Routes ───────────────────────────────────────────────────────────────── + + +@app.route("/") +def index(): + return send_from_directory("static", "index.html") + + +@app.route("/api/config") +def get_config(): + """Return current config for display.""" + config = load_config() + return jsonify( + { + "domain": config.get("DOMAIN_NAME", ""), + "bucket": config.get("TRUSTSTORE_BUCKET", ""), + "region": config.get("AWS_REGION", ""), + "certsExist": CERT_DIR.exists() + and (CERT_DIR / "leaf-client.pem").exists(), + } + ) + + +@app.route("/api/chain") +def get_chain(): + """Return certificate chain details.""" + if not CERT_DIR.exists(): + return jsonify({"error": "Certificates not generated yet"}), 404 + + chain = [] + for name, label in [ + ("rootCA.pem", "Root CA"), + ("intermediateCA.pem", "Intermediate CA"), + ("leaf-client.pem", "Leaf (Client)"), + ]: + cert_path = CERT_DIR / name + if cert_path.exists(): + result = subprocess.run( + ["openssl", "x509", "-in", str(cert_path), "-noout", + "-subject", "-issuer", "-dates", "-serial"], + capture_output=True, text=True, + ) + chain.append({"name": label, "file": name, "details": result.stdout.strip()}) + return jsonify(chain) + + +@app.route("/api/test/") +def run_test(test_id): + """Run a specific test scenario and stream results via SSE using a queue.""" + config = load_config() + domain = config.get("DOMAIN_NAME", "") + bucket = config.get("TRUSTSTORE_BUCKET", "") + region = config.get("AWS_REGION", "us-east-1") + + if not domain: + return Response( + sse_event("error", {"text": "config.env not configured"}), + mimetype="text/event-stream", + ) + + test_runners = { + 1: run_test_fullchain, + 2: run_test_rootonly, + 3: run_test_expired, + 4: run_test_rotation, + 5: run_test_nocert, + 6: run_test_untrusted, + 7: run_test_max_depth, + } + + runner = test_runners.get(test_id) + if not runner: + return Response( + sse_event("error", {"text": f"Unknown test: {test_id}"}), + mimetype="text/event-stream", + ) + + # Use a queue so the background thread can push events immediately + q = queue.Queue() + + def run_in_thread(): + try: + q.put(sse_event("start", {"test_id": test_id})) + gen = runner(domain, bucket, region) + result = None + try: + while True: + event = next(gen) + q.put(event) + except StopIteration as e: + result = e.value + if result: + q.put(sse_event("result", result)) + except Exception as e: + q.put(sse_event("error", {"text": str(e)})) + q.put(sse_event("done", {})) + q.put(None) # Sentinel to signal stream end + + threading.Thread(target=run_in_thread, daemon=True).start() + + def generate(): + while True: + try: + event = q.get(timeout=180) + except queue.Empty: + break + if event is None: + break + yield event + + return Response( + generate(), + mimetype="text/event-stream", + headers={ + "Cache-Control": "no-cache, no-transform", + "X-Accel-Buffering": "no", + "Connection": "keep-alive", + }, + ) + + +# ─── Test Runners ─────────────────────────────────────────────────────────── + + +def curl_with_cert(domain, cert=None, key=None, path="/"): + """Make an HTTPS request and return (http_code, body). + + Uses the requests library instead of subprocess to avoid SAST findings. + Domain is validated against a strict hostname pattern before use. + """ + import requests + validated_domain = _validate_hostname(domain) + url = f"https://{validated_domain}{path}" + try: + if cert and key: + resp = requests.get(url, cert=(str(cert), str(key)), timeout=15) + else: + resp = requests.get(url, timeout=15) + return str(resp.status_code), resp.text + except requests.exceptions.SSLError: + return "403", "" + except requests.exceptions.ConnectionError: + return "000", "" + except requests.exceptions.Timeout: + return "000", "" + + +def update_truststore_and_wait(pem_path, bucket, region, domain): + """Upload truststore and wait for propagation. Yields SSE events.""" + # Upload + yield sse_event("output", {"text": f"Uploading truststore: {Path(pem_path).name}"}) + subprocess.run( + ["aws", "s3", "cp", str(pem_path), f"s3://{bucket}/truststore.pem", + "--region", region, "--quiet"], + capture_output=True, + ) + + # Get version and trigger reimport + yield sse_event("output", {"text": "Triggering domain truststore reimport..."}) + version_result = subprocess.run( + ["aws", "s3api", "head-object", "--bucket", bucket, "--key", "truststore.pem", + "--region", region, "--query", "VersionId", "--output", "text"], + capture_output=True, text=True, + ) + version = version_result.stdout.strip() + + mtls_arg = f"TruststoreUri=s3://{bucket}/truststore.pem" + if version and version != "None": + mtls_arg += f",TruststoreVersion={version}" + + subprocess.run( + ["aws", "apigatewayv2", "update-domain-name", "--domain-name", domain, + "--region", region, "--mutual-tls-authentication", mtls_arg], + capture_output=True, + ) + + # Poll for AVAILABLE + yield sse_event("output", {"text": "Waiting for propagation..."}) + for attempt in range(12): + status_result = subprocess.run( + ["aws", "apigatewayv2", "get-domain-name", "--domain-name", domain, + "--region", region, "--query", + "DomainNameConfigurations[0].DomainNameStatus", "--output", "text"], + capture_output=True, text=True, + ) + status = status_result.stdout.strip() + if status == "AVAILABLE": + yield sse_event("output", {"text": f"Domain status: AVAILABLE ✓"}) + return + yield sse_event("output", {"text": f"Domain status: {status} (attempt {attempt+1}/12)"}) + time.sleep(15) + + yield sse_event("output", {"text": "⚠ Domain did not reach AVAILABLE in time"}) + + +def run_test_fullchain(domain, bucket, region): + """Test 1: Full-chain truststore validates leaf cert.""" + # Show cert context immediately so customer sees what's being tested + yield emit_cert_context(CERT_DIR / "truststore.pem", CERT_DIR / "leaf-client.pem", "leaf-client.pem (valid)") + + yield sse_event("output", {"text": "Setting truststore to: intermediate + root (full chain)"}) + yield from update_truststore_and_wait(CERT_DIR / "truststore.pem", bucket, region, domain) + + yield sse_event("output", {"text": ""}) + yield sse_event("output", {"text": "Sending request with leaf client cert..."}) + yield sse_event("output", {"text": f" curl --cert leaf-client.pem --key leaf-client.key https://{domain}/"}) + + code, body = curl_with_cert(domain, CERT_DIR / "leaf-client.pem", CERT_DIR / "leaf-client.key") + + yield sse_event("output", {"text": f" HTTP {code}"}) + if body: + yield sse_event("output", {"text": ""}) + try: + formatted = json.dumps(json.loads(body), indent=2) + for line in formatted.splitlines(): + yield sse_event("output", {"text": f" {line}"}) + except json.JSONDecodeError: + yield sse_event("output", {"text": f" {body}"}) + + passed = code == "200" + return {"passed": passed, "http_code": code} + + +def run_test_rootonly(domain, bucket, region): + """Test 2: Root-only truststore rejects leaf cert.""" + # Show cert context immediately — root-only truststore + the leaf we'll present + yield emit_cert_context(CERT_DIR / "rootCA.pem", CERT_DIR / "leaf-client.pem", "leaf-client.pem (valid)") + + yield sse_event("output", {"text": "Setting truststore to: root CA ONLY (no intermediate)"}) + yield from update_truststore_and_wait(CERT_DIR / "rootCA.pem", bucket, region, domain) + + yield sse_event("output", {"text": ""}) + yield sse_event("output", {"text": "Sending request with leaf client cert..."}) + yield sse_event("output", {"text": f" curl --cert leaf-client.pem --key leaf-client.key https://{domain}/"}) + + code, body = curl_with_cert(domain, CERT_DIR / "leaf-client.pem", CERT_DIR / "leaf-client.key") + + yield sse_event("output", {"text": f" HTTP {code}"}) + if body: + yield sse_event("output", {"text": f" {body}"}) + + passed = code == "403" or (code.replace("0", "") == "") + + # Restore full chain + yield sse_event("output", {"text": ""}) + yield sse_event("output", {"text": "Restoring full-chain truststore..."}) + yield from update_truststore_and_wait(CERT_DIR / "truststore.pem", bucket, region, domain) + + return {"passed": passed, "http_code": code} + + +def run_test_expired(domain, bucket, region): + """Test 3: Expired leaf cert is rejected.""" + yield sse_event("output", {"text": "Generating expired leaf certificate (using Python cryptography)..."}) + + # Generate expired cert + from cryptography import x509 as cx509 + from cryptography.x509.oid import NameOID + from cryptography.hazmat.primitives import hashes, serialization + from cryptography.hazmat.primitives.asymmetric import rsa + from datetime import datetime, timedelta, timezone + + ca_cert_pem = (CERT_DIR / "intermediateCA.pem").read_bytes() + ca_key_pem = (CERT_DIR / "intermediateCA.key").read_bytes() + ca_cert = cx509.load_pem_x509_certificate(ca_cert_pem) + ca_key = serialization.load_pem_private_key(ca_key_pem, password=None) + + leaf_key = rsa.generate_private_key(public_exponent=65537, key_size=2048) + now = datetime.now(timezone.utc) + + cert = ( + cx509.CertificateBuilder() + .subject_name(cx509.Name([ + cx509.NameAttribute(NameOID.COMMON_NAME, "expired-client"), + cx509.NameAttribute(NameOID.ORGANIZATION_NAME, "mTLS Demo"), + cx509.NameAttribute(NameOID.COUNTRY_NAME, "US"), + ])) + .issuer_name(ca_cert.subject) + .public_key(leaf_key.public_key()) + .serial_number(cx509.random_serial_number()) + .not_valid_before(now - timedelta(days=3)) + .not_valid_after(now - timedelta(days=1)) + .sign(ca_key, hashes.SHA256()) + ) + + expired_dir = Path(tempfile.mkdtemp()) + (expired_dir / "expired.pem").write_bytes(cert.public_bytes(serialization.Encoding.PEM)) + (expired_dir / "expired.key").write_bytes( + leaf_key.private_bytes(serialization.Encoding.PEM, + serialization.PrivateFormat.TraditionalOpenSSL, + serialization.NoEncryption()) + ) + + not_after = (now - timedelta(days=1)).strftime("%Y-%m-%d %H:%M UTC") + yield sse_event("output", {"text": f" Cert expired: {not_after}"}) + + yield emit_cert_context(CERT_DIR / "truststore.pem", expired_dir / "expired.pem", "expired.pem (EXPIRED)") + + yield sse_event("output", {"text": ""}) + yield sse_event("output", {"text": "Sending request with expired cert..."}) + yield sse_event("output", {"text": f" curl --cert expired.pem --key expired.key https://{domain}/"}) + + code, body = curl_with_cert(domain, expired_dir / "expired.pem", expired_dir / "expired.key") + + yield sse_event("output", {"text": f" HTTP {code}"}) + if body: + yield sse_event("output", {"text": f" {body}"}) + + # Cleanup + import shutil + shutil.rmtree(expired_dir, ignore_errors=True) + + passed = code == "403" or (code.replace("0", "") == "") + return {"passed": passed, "http_code": code} + + +def run_test_rotation(domain, bucket, region): + """Test 4: Intermediate CA rotation with overlap.""" + yield sse_event("output", {"text": "Generating rotated Intermediate CA v2..."}) + + rotation_dir = Path(tempfile.mkdtemp()) + + # Generate new intermediate + subprocess.run( + ["openssl", "genrsa", "-out", str(rotation_dir / "intCA-v2.key"), "4096"], + capture_output=True, + ) + subprocess.run( + ["openssl", "req", "-new", "-key", str(rotation_dir / "intCA-v2.key"), + "-subj", "/CN=Demo Intermediate CA v2/O=mTLS Demo/C=US", + "-out", str(rotation_dir / "intCA-v2.csr")], + capture_output=True, + ) + subprocess.run( + ["openssl", "x509", "-req", "-in", str(rotation_dir / "intCA-v2.csr"), + "-CA", str(CERT_DIR / "rootCA.pem"), "-CAkey", str(CERT_DIR / "rootCA.key"), + "-CAcreateserial", "-days", "1825", "-sha256", + "-extfile", "/dev/stdin", + "-out", str(rotation_dir / "intCA-v2.pem")], + input="basicConstraints=critical,CA:TRUE,pathlen:0\nkeyUsage=critical,keyCertSign,cRLSign", + capture_output=True, text=True, + ) + + yield sse_event("output", {"text": "Issuing new leaf cert from rotated intermediate..."}) + + subprocess.run( + ["openssl", "genrsa", "-out", str(rotation_dir / "leaf-v2.key"), "2048"], + capture_output=True, + ) + subprocess.run( + ["openssl", "req", "-new", "-key", str(rotation_dir / "leaf-v2.key"), + "-subj", "/CN=rotated-client/O=mTLS Demo/C=US", + "-out", str(rotation_dir / "leaf-v2.csr")], + capture_output=True, + ) + subprocess.run( + ["openssl", "x509", "-req", "-in", str(rotation_dir / "leaf-v2.csr"), + "-CA", str(rotation_dir / "intCA-v2.pem"), + "-CAkey", str(rotation_dir / "intCA-v2.key"), + "-CAcreateserial", "-days", "365", "-sha256", + "-out", str(rotation_dir / "leaf-v2.pem")], + capture_output=True, + ) + + # Build rotation truststore (both intermediates + root) + yield sse_event("output", {"text": "Building truststore with BOTH intermediates + root..."}) + truststore_content = ( + (CERT_DIR / "intermediateCA.pem").read_text() + + (rotation_dir / "intCA-v2.pem").read_text() + + (CERT_DIR / "rootCA.pem").read_text() + ) + rotation_truststore = rotation_dir / "truststore-rotation.pem" + rotation_truststore.write_text(truststore_content) + cert_count = truststore_content.count("BEGIN CERTIFICATE") + yield sse_event("output", {"text": f" Truststore contains {cert_count} certificates"}) + + # Show cert context immediately before waiting + yield emit_cert_context(rotation_truststore, rotation_dir / "leaf-v2.pem", "leaf-v2.pem (new intermediate)") + + yield from update_truststore_and_wait(rotation_truststore, bucket, region, domain) + + yield sse_event("output", {"text": ""}) + yield sse_event("output", {"text": "Testing NEW leaf cert (from rotated intermediate)..."}) + code, body = curl_with_cert(domain, rotation_dir / "leaf-v2.pem", rotation_dir / "leaf-v2.key") + yield sse_event("output", {"text": f" HTTP {code}"}) + + passed = code == "200" + + if passed: + yield sse_event("output", {"text": ""}) + yield sse_event("output", {"text": "Verifying OLD leaf still works during overlap..."}) + code_old, _ = curl_with_cert(domain, CERT_DIR / "leaf-client.pem", CERT_DIR / "leaf-client.key") + yield sse_event("output", {"text": f" Old leaf: HTTP {code_old}"}) + if code_old == "200": + yield sse_event("output", {"text": " ✓ Both old and new CAs active simultaneously"}) + + # Restore + yield sse_event("output", {"text": ""}) + yield sse_event("output", {"text": "Restoring original truststore..."}) + yield from update_truststore_and_wait(CERT_DIR / "truststore.pem", bucket, region, domain) + + import shutil + shutil.rmtree(rotation_dir, ignore_errors=True) + + return {"passed": passed, "http_code": code} + + +def run_test_nocert(domain, bucket, region): + """Test 5: No client cert — rejected.""" + yield emit_cert_context(CERT_DIR / "truststore.pem") + + yield sse_event("output", {"text": "Sending request with NO client certificate..."}) + yield sse_event("output", {"text": f" curl https://{domain}/"}) + + code, body = curl_with_cert(domain) + + yield sse_event("output", {"text": f" HTTP {code}"}) + if body: + yield sse_event("output", {"text": f" {body}"}) + + passed = code == "403" or (code.replace("0", "") == "") + return {"passed": passed, "http_code": code} + + +def run_test_untrusted(domain, bucket, region): + """Test 6: Untrusted self-signed cert — rejected.""" + yield sse_event("output", {"text": "Generating untrusted self-signed certificate..."}) + + rogue_dir = Path(tempfile.mkdtemp()) + subprocess.run( + ["openssl", "req", "-x509", "-newkey", "rsa:2048", + "-keyout", str(rogue_dir / "rogue.key"), + "-out", str(rogue_dir / "rogue.pem"), + "-days", "1", "-nodes", "-subj", "/CN=rogue-client/O=Untrusted Org/C=US"], + capture_output=True, + ) + + yield emit_cert_context(CERT_DIR / "truststore.pem", rogue_dir / "rogue.pem", "rogue.pem (UNTRUSTED self-signed)") + + yield sse_event("output", {"text": "Sending request with untrusted cert..."}) + yield sse_event("output", {"text": f" curl --cert rogue.pem --key rogue.key https://{domain}/"}) + + code, body = curl_with_cert(domain, rogue_dir / "rogue.pem", rogue_dir / "rogue.key") + + yield sse_event("output", {"text": f" HTTP {code}"}) + if body: + yield sse_event("output", {"text": f" {body}"}) + + import shutil + shutil.rmtree(rogue_dir, ignore_errors=True) + + passed = code == "403" or (code.replace("0", "") == "") + return {"passed": passed, "http_code": code} + + +def run_test_max_depth(domain, bucket, region): + """Test 7: Max chain depth (root + 3 intermediates + leaf = depth 4).""" + yield sse_event("output", {"text": "Building max-depth chain: Root → Int1 → Int2 → Int3 → Leaf"}) + yield sse_event("output", {"text": " (API Gateway max chain depth = 4)"}) + yield sse_event("output", {"text": ""}) + + deep_dir = Path(tempfile.mkdtemp()) + + # Use existing root CA + root_pem = CERT_DIR / "rootCA.pem" + root_key = CERT_DIR / "rootCA.key" + + # Generate 3 intermediate CAs chained together + prev_cert = str(root_pem) + prev_key = str(root_key) + int_certs = [] + + for i in range(1, 4): + int_key_path = str(deep_dir / f"int{i}.key") + int_csr_path = str(deep_dir / f"int{i}.csr") + int_pem_path = str(deep_dir / f"int{i}.pem") + + pathlen = 3 - i # int1=2, int2=1, int3=0 + + yield sse_event("output", {"text": f" Generating Intermediate CA {i} (pathlen={pathlen})..."}) + + subprocess.run( + ["openssl", "genrsa", "-out", int_key_path, "4096"], + capture_output=True, + ) + subprocess.run( + ["openssl", "req", "-new", "-key", int_key_path, + "-subj", f"/CN=Demo Intermediate CA L{i}/O=mTLS Demo/C=US", + "-out", int_csr_path], + capture_output=True, + ) + subprocess.run( + ["openssl", "x509", "-req", "-in", int_csr_path, + "-CA", prev_cert, "-CAkey", prev_key, + "-CAcreateserial", "-days", "1825", "-sha256", + "-extfile", "/dev/stdin", + "-out", int_pem_path], + input=f"basicConstraints=critical,CA:TRUE,pathlen:{pathlen}\nkeyUsage=critical,keyCertSign,cRLSign", + capture_output=True, text=True, + ) + + int_certs.append(int_pem_path) + prev_cert = int_pem_path + prev_key = int_key_path + + # Generate leaf signed by int3 + yield sse_event("output", {"text": " Generating leaf cert (signed by Int3)..."}) + leaf_key_path = str(deep_dir / "leaf-deep.key") + leaf_csr_path = str(deep_dir / "leaf-deep.csr") + leaf_pem_path = str(deep_dir / "leaf-deep.pem") + + subprocess.run( + ["openssl", "genrsa", "-out", leaf_key_path, "2048"], + capture_output=True, + ) + subprocess.run( + ["openssl", "req", "-new", "-key", leaf_key_path, + "-subj", "/CN=deep-chain-client/O=mTLS Demo/C=US", + "-out", leaf_csr_path], + capture_output=True, + ) + subprocess.run( + ["openssl", "x509", "-req", "-in", leaf_csr_path, + "-CA", int_certs[-1], "-CAkey", str(deep_dir / "int3.key"), + "-CAcreateserial", "-days", "365", "-sha256", + "-out", leaf_pem_path], + capture_output=True, + ) + + # Build truststore: all 3 intermediates + root + yield sse_event("output", {"text": ""}) + yield sse_event("output", {"text": " Building truststore: Int1 + Int2 + Int3 + Root (4 certs)..."}) + truststore_content = "" + for cert_path in int_certs: + truststore_content += Path(cert_path).read_text() + truststore_content += root_pem.read_text() + + deep_truststore = deep_dir / "truststore-deep.pem" + deep_truststore.write_text(truststore_content) + cert_count = truststore_content.count("BEGIN CERTIFICATE") + yield sse_event("output", {"text": f" Truststore contains {cert_count} certificates"}) + + # Verify chain locally + # Need to concatenate all intermediates as untrusted + untrusted_bundle = deep_dir / "untrusted-bundle.pem" + untrusted_content = "" + for cert_path in int_certs: + untrusted_content += Path(cert_path).read_text() + untrusted_bundle.write_text(untrusted_content) + + verify_result = subprocess.run( + ["openssl", "verify", "-CAfile", str(root_pem), + "-untrusted", str(untrusted_bundle), leaf_pem_path], + capture_output=True, text=True, + ) + if "OK" in verify_result.stdout: + yield sse_event("output", {"text": " Local chain verification: OK ✓"}) + else: + yield sse_event("output", {"text": f" Local chain verification FAILED: {verify_result.stderr.strip()}"}) + + # Show cert context immediately before waiting + yield emit_cert_context(deep_truststore, leaf_pem_path, "leaf-deep.pem (depth=4 chain)") + + # Upload and wait + yield from update_truststore_and_wait(deep_truststore, bucket, region, domain) + + yield sse_event("output", {"text": ""}) + yield sse_event("output", {"text": "Testing leaf cert through 4-level chain..."}) + yield sse_event("output", {"text": f" curl --cert leaf-deep.pem --key leaf-deep.key https://{domain}/"}) + + code, body = curl_with_cert(domain, leaf_pem_path, leaf_key_path) + + yield sse_event("output", {"text": f" HTTP {code}"}) + if body: + try: + formatted = json.dumps(json.loads(body), indent=2) + for line in formatted.splitlines(): + yield sse_event("output", {"text": f" {line}"}) + except json.JSONDecodeError: + yield sse_event("output", {"text": f" {body}"}) + + passed = code == "200" + + # Restore original truststore + yield sse_event("output", {"text": ""}) + yield sse_event("output", {"text": "Restoring original truststore..."}) + yield from update_truststore_and_wait(CERT_DIR / "truststore.pem", bucket, region, domain) + + import shutil + shutil.rmtree(deep_dir, ignore_errors=True) + + return {"passed": passed, "http_code": code} + + +# ─── Multi-Tenant Demo Routes ────────────────────────────────────────────── + + +@app.route("/api/tenant-test/") +def run_tenant_test(tenant): + """Run a multi-tenant test (tenant-a or tenant-b) and stream results via SSE.""" + config = load_config() + domain = config.get("DOMAIN_NAME", "") + region = config.get("AWS_REGION", "us-east-1") + + if tenant not in ("tenant-a", "tenant-b"): + return Response( + sse_event("error", {"text": f"Unknown tenant: {tenant}"}), + mimetype="text/event-stream", + ) + + q = queue.Queue() + + def run_in_thread(): + try: + q.put(sse_event("start", {"tenant": tenant})) + gen = run_tenant_request(domain, region, tenant) + result = None + try: + while True: + event = next(gen) + q.put(event) + except StopIteration as e: + result = e.value + if result: + q.put(sse_event("result", result)) + except Exception as e: + q.put(sse_event("error", {"text": str(e)})) + q.put(sse_event("done", {})) + q.put(None) + + threading.Thread(target=run_in_thread, daemon=True).start() + + def generate(): + while True: + try: + event = q.get(timeout=60) + except queue.Empty: + break + if event is None: + break + yield event + + return Response( + generate(), + mimetype="text/event-stream", + headers={ + "Cache-Control": "no-cache, no-transform", + "X-Accel-Buffering": "no", + "Connection": "keep-alive", + }, + ) + + +@app.route("/api/tenant-logs") +def get_tenant_logs(): + """Fetch recent CloudWatch logs from the authorizer function.""" + config = load_config() + region = config.get("AWS_REGION", "us-east-1") + stack_name = config.get("STACK_NAME", "mtls-demo") + + # Get the authorizer function name from CloudFormation + result = subprocess.run( + ["aws", "cloudformation", "describe-stack-resource", + "--stack-name", stack_name, "--logical-resource-id", "MtlsAuthorizerFunction", + "--region", region, "--query", "StackResourceDetail.PhysicalResourceId", + "--output", "text"], + capture_output=True, text=True, + ) + function_name = result.stdout.strip() + if not function_name: + return jsonify({"error": "Could not find authorizer function"}), 404 + + log_group = f"/aws/lambda/{function_name}" + + # Get the latest log stream + result = subprocess.run( + ["aws", "logs", "describe-log-streams", + "--log-group-name", log_group, + "--region", region, + "--order-by", "LastEventTime", + "--descending", + "--limit", "1", + "--query", "logStreams[0].logStreamName", + "--output", "text"], + capture_output=True, text=True, + ) + stream_name = result.stdout.strip() + if not stream_name or stream_name == "None": + return jsonify({"logGroup": log_group, "messages": [], "note": "No log streams found"}) + + # Get recent log events from the latest stream + result = subprocess.run( + ["aws", "logs", "get-log-events", + "--log-group-name", log_group, + "--log-stream-name", stream_name, + "--region", region, + "--limit", "100", + "--query", "events[].message", + "--output", "json"], + capture_output=True, text=True, + ) + + try: + messages = json.loads(result.stdout) if result.stdout.strip() else [] + except json.JSONDecodeError: + messages = [] + + # Filter to only the interesting authorizer log lines + filtered = [] + for msg in messages: + msg = msg.strip() + if not msg: + continue + # Skip START/END/REPORT lines + if msg.startswith("START ") or msg.startswith("END ") or msg.startswith("REPORT "): + continue + # Strip the Lambda log prefix [INFO] timestamp requestId + if "\t" in msg: + parts = msg.split("\t", 3) + if len(parts) >= 4: + msg = parts[3].strip() + elif len(parts) == 3: + msg = parts[2].strip() + filtered.append(msg) + + return jsonify({"logGroup": log_group, "messages": filtered}) + + +def run_tenant_request(domain, region, tenant): + """Execute a tenant-specific API request and stream output.""" + cert_file = CERT_DIR / f"{tenant}.pem" + key_file = CERT_DIR / f"{tenant}.key" + + if not cert_file.exists(): + yield sse_event("output", {"text": f"ERROR: {tenant} cert not found. Regenerate certs."}) + return {"passed": False, "http_code": "N/A"} + + # Emit cert context + yield emit_cert_context(CERT_DIR / "truststore.pem", cert_file, f"{tenant}.pem") + + tenant_label = "Tenant A" if tenant == "tenant-a" else "Tenant B" + endpoint = f"https://{domain}/api" + + yield sse_event("output", {"text": f"Multi-Tenant Request: {tenant_label}"}) + yield sse_event("output", {"text": f" Endpoint: {endpoint} (same for all tenants)"}) + yield sse_event("output", {"text": f" Client cert: {tenant}.pem (determines tenant identity)"}) + yield sse_event("output", {"text": ""}) + yield sse_event("output", {"text": "Request flow:"}) + yield sse_event("output", {"text": " 1. mTLS handshake (cert validated against truststore)"}) + yield sse_event("output", {"text": " 2. Lambda Authorizer extracts cert, logs to CloudWatch"}) + yield sse_event("output", {"text": " 3. Authorizer maps CN to tenant, returns context"}) + yield sse_event("output", {"text": " 4. Handler reads tenantId from context → returns tenant-specific data"}) + yield sse_event("output", {"text": ""}) + yield sse_event("output", {"text": f" curl --cert {tenant}.pem --key {tenant}.key {endpoint}"}) + yield sse_event("output", {"text": ""}) + + # Make the request + code, body = curl_with_cert(domain, cert_file, key_file, path="/api") + + yield sse_event("output", {"text": f" HTTP {code}"}) + + if code == "200" and body: + yield sse_event("output", {"text": ""}) + try: + formatted = json.dumps(json.loads(body), indent=2) + for line in formatted.splitlines(): + yield sse_event("output", {"text": f" {line}"}) + except json.JSONDecodeError: + yield sse_event("output", {"text": f" {body}"}) + + yield sse_event("output", {"text": ""}) + yield sse_event("output", {"text": " ✓ Lambda Authorizer processed cert and routed to tenant handler"}) + yield sse_event("output", {"text": " ✓ Cert details logged to CloudWatch (check authorizer logs)"}) + elif body: + yield sse_event("output", {"text": f" {body}"}) + + passed = code == "200" + return {"passed": passed, "http_code": code, "tenant": tenant} + + +if __name__ == "__main__": + print("\n mTLS Demo Web App") + print(" http://localhost:5001\n") + app.run(host="127.0.0.1", port=5001, debug=False, threaded=True) diff --git a/apigw-mtls-multi-tenant/demo/requirements.txt b/apigw-mtls-multi-tenant/demo/requirements.txt new file mode 100644 index 00000000..71037712 --- /dev/null +++ b/apigw-mtls-multi-tenant/demo/requirements.txt @@ -0,0 +1,3 @@ +flask==3.1.1 +cryptography>=42.0.0 +requests>=2.31.0 diff --git a/apigw-mtls-multi-tenant/demo/static/index.html b/apigw-mtls-multi-tenant/demo/static/index.html new file mode 100644 index 00000000..c73c0068 --- /dev/null +++ b/apigw-mtls-multi-tenant/demo/static/index.html @@ -0,0 +1,709 @@ + + + + + +API Gateway mTLS — Full-Chain Validation Demo + + + + +

+

API Gateway mTLS — Full-Chain Validation Demo

+

+ mTLS full-chain truststore validation · Root → Intermediate → Leaf · Multi-tenant routing +

+
+ +
+
+
Chain Validation Tests
+
+
Multi-Tenant Demo
+
+ + Tenant Routing +
+
+
+
+ +
+
+

Multi-Tenant mTLS — Lambda Authorizer Demo

+

+ Both tenants use separate client certificates issued by the same Intermediate CA — + sharing a single truststore. The Lambda Authorizer extracts the cert CN, logs full + cert details to CloudWatch (where CRL/OCSP revocation checks could be added in + production), and maps the certificate identity to a tenant context that the backend + handler uses to return tenant-specific responses. All tenants hit the same endpoint. +

+
+ + + + +
+
+
+
+
+

🔒 Shared Truststore (serves both tenants)

+
Run a tenant test to see certs
+
+
+

📄 Tenant Client Certificate

+
Select a tenant above
+
+
+
+
+ Select Tenant A or Tenant B to send an authenticated request.

+ Both tenants hit the same endpoint (/api). The only difference
+ is which client certificate is presented. The Lambda Authorizer:

+ • Extracts the full cert (subject, issuer, serial, validity)
+ • Logs cert details to CloudWatch (revocation check point)
+ • Maps CN → tenant identity (no path-based routing)
+ • Returns tenant context to the backend handler
+ • Handler returns tenant-specific data based on cert identity +
+
+
+
+
+
+ + + + + + diff --git a/apigw-mtls-multi-tenant/scripts/deploy.sh b/apigw-mtls-multi-tenant/scripts/deploy.sh new file mode 100755 index 00000000..493f2af1 --- /dev/null +++ b/apigw-mtls-multi-tenant/scripts/deploy.sh @@ -0,0 +1,111 @@ +#!/usr/bin/env bash +# deploy.sh — End-to-end deployment: generate certs, upload truststore, deploy SAM stack. +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" +CERT_DIR="${PROJECT_DIR}/certs" +CONFIG_FILE="${PROJECT_DIR}/config.env" + +# ─── Load configuration ──────────────────────────────────────────────────── +if [[ ! -f "${CONFIG_FILE}" ]]; then + echo "ERROR: config.env not found. Copy config.env.example and fill in your values." + echo " cp config.env.example config.env" + exit 1 +fi + +source "${CONFIG_FILE}" + +# Validate required vars +for var in DOMAIN_NAME HOSTED_ZONE_ID CERTIFICATE_ARN TRUSTSTORE_BUCKET STACK_NAME AWS_REGION; do + if [[ -z "${!var:-}" ]]; then + echo "ERROR: ${var} is not set in config.env" + exit 1 + fi +done + +echo "╔══════════════════════════════════════════════════════════════╗" +echo "║ API Gateway mTLS Full-Chain Truststore Demo — Deployment ║" +echo "╚══════════════════════════════════════════════════════════════╝" +echo "" +echo " Domain: ${DOMAIN_NAME}" +echo " Region: ${AWS_REGION}" +echo " Stack: ${STACK_NAME}" +echo " Truststore: s3://${TRUSTSTORE_BUCKET}/truststore.pem" +echo "" + +# ─── Step 1: Generate certificates ───────────────────────────────────────── +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "STEP 1: Generate PKI certificates" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + +if [[ -f "${CERT_DIR}/truststore.pem" ]]; then + echo " Certificates already exist in ${CERT_DIR}. Skipping generation." + echo " (Delete ${CERT_DIR} to regenerate.)" +else + bash "${SCRIPT_DIR}/generate-certs.sh" "${CERT_DIR}" +fi +echo "" + +# ─── Step 2: Upload truststore to S3 ─────────────────────────────────────── +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "STEP 2: Upload truststore to S3" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + +# Create bucket if it doesn't exist +if ! aws s3api head-bucket --bucket "${TRUSTSTORE_BUCKET}" --region "${AWS_REGION}" 2>/dev/null; then + echo " Creating bucket: ${TRUSTSTORE_BUCKET}" + if [[ "${AWS_REGION}" == "us-east-1" ]]; then + aws s3api create-bucket --bucket "${TRUSTSTORE_BUCKET}" --region "${AWS_REGION}" + else + aws s3api create-bucket --bucket "${TRUSTSTORE_BUCKET}" --region "${AWS_REGION}" \ + --create-bucket-configuration LocationConstraint="${AWS_REGION}" + fi + aws s3api put-bucket-versioning --bucket "${TRUSTSTORE_BUCKET}" \ + --versioning-configuration Status=Enabled --region "${AWS_REGION}" +fi + +echo " Uploading truststore.pem..." +aws s3 cp "${CERT_DIR}/truststore.pem" "s3://${TRUSTSTORE_BUCKET}/truststore.pem" \ + --region "${AWS_REGION}" +echo " Done." +echo "" + +# ─── Step 3: SAM build & deploy ──────────────────────────────────────────── +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "STEP 3: SAM build & deploy" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + +cd "${PROJECT_DIR}" + +echo " Building..." +sam build --template-file template.yaml + +echo " Deploying..." +sam deploy \ + --stack-name "${STACK_NAME}" \ + --region "${AWS_REGION}" \ + --resolve-s3 \ + --capabilities CAPABILITY_IAM \ + --no-fail-on-empty-changeset \ + --parameter-overrides \ + "DomainName=${DOMAIN_NAME}" \ + "HostedZoneId=${HOSTED_ZONE_ID}" \ + "CertificateArn=${CERTIFICATE_ARN}" \ + "TruststoreBucket=${TRUSTSTORE_BUCKET}" \ + "TruststoreKey=truststore.pem" + +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "DEPLOYMENT COMPLETE" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "" +echo " API Endpoint: https://${DOMAIN_NAME}/" +echo "" +echo " NOTE: The custom domain may take a few minutes to become AVAILABLE." +echo " Check status with:" +echo " aws apigatewayv2 get-domain-name --domain-name ${DOMAIN_NAME} --region ${AWS_REGION}" +echo "" +echo " Once ready, test with:" +echo " bash scripts/test-mtls.sh" +echo "" diff --git a/apigw-mtls-multi-tenant/scripts/generate-certs.sh b/apigw-mtls-multi-tenant/scripts/generate-certs.sh new file mode 100755 index 00000000..9888621e --- /dev/null +++ b/apigw-mtls-multi-tenant/scripts/generate-certs.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +# generate-certs.sh — Build a 3-tier PKI: Root CA → Intermediate CA → Leaf (client) cert +# Also assembles the truststore PEM (intermediate + root) for API Gateway mTLS. +set -euo pipefail + +CERT_DIR="${1:-./certs}" +DAYS_ROOT=3650 +DAYS_INTERMEDIATE=1825 +DAYS_LEAF=365 + +echo "==> Generating certificates in: ${CERT_DIR}" +mkdir -p "${CERT_DIR}" +cd "${CERT_DIR}" + +# ─── Root CA ──────────────────────────────────────────────────────────────── +echo "[1/4] Generating Root CA..." +openssl genrsa -out rootCA.key 4096 2>/dev/null +openssl req -x509 -new -nodes -key rootCA.key -sha256 -days ${DAYS_ROOT} \ + -subj "/CN=Demo Root CA/O=mTLS Demo/C=US" -out rootCA.pem + +# ─── Intermediate CA (signed by Root) ─────────────────────────────────────── +echo "[2/4] Generating Intermediate CA..." +openssl genrsa -out intermediateCA.key 4096 2>/dev/null +openssl req -new -key intermediateCA.key \ + -subj "/CN=Demo Intermediate CA/O=mTLS Demo/C=US" -out intermediateCA.csr +openssl x509 -req -in intermediateCA.csr -CA rootCA.pem -CAkey rootCA.key \ + -CAcreateserial -days ${DAYS_INTERMEDIATE} -sha256 \ + -extfile <(printf "basicConstraints=critical,CA:TRUE,pathlen:0\nkeyUsage=critical,keyCertSign,cRLSign") \ + -out intermediateCA.pem 2>/dev/null + +# ─── Leaf / Client cert (signed by Intermediate) ─────────────────────────── +echo "[3/6] Generating Leaf (client) certificate..." +openssl genrsa -out leaf-client.key 2048 2>/dev/null +openssl req -new -key leaf-client.key \ + -subj "/CN=demo-client/O=mTLS Demo/C=US" -out leaf-client.csr +openssl x509 -req -in leaf-client.csr -CA intermediateCA.pem -CAkey intermediateCA.key \ + -CAcreateserial -days ${DAYS_LEAF} -sha256 -out leaf-client.pem 2>/dev/null + +# ─── Tenant A cert (signed by Intermediate) ───────────────────────────────── +echo "[4/6] Generating Tenant A client certificate..." +openssl genrsa -out tenant-a.key 2048 2>/dev/null +openssl req -new -key tenant-a.key \ + -subj "/CN=tenant-a/O=Tenant A/OU=API-Access/C=US" -out tenant-a.csr +openssl x509 -req -in tenant-a.csr -CA intermediateCA.pem -CAkey intermediateCA.key \ + -CAcreateserial -days ${DAYS_LEAF} -sha256 -out tenant-a.pem 2>/dev/null + +# ─── Tenant B cert (signed by Intermediate) ───────────────────────────────── +echo "[5/6] Generating Tenant B client certificate..." +openssl genrsa -out tenant-b.key 2048 2>/dev/null +openssl req -new -key tenant-b.key \ + -subj "/CN=tenant-b/O=Tenant B/OU=API-Access/C=US" -out tenant-b.csr +openssl x509 -req -in tenant-b.csr -CA intermediateCA.pem -CAkey intermediateCA.key \ + -CAcreateserial -days ${DAYS_LEAF} -sha256 -out tenant-b.pem 2>/dev/null + +# ─── Assemble Truststore (intermediate + root) ───────────────────────────── +echo "[6/6] Assembling truststore PEM (intermediate + root)..." +cat intermediateCA.pem rootCA.pem > truststore.pem + +# ─── Summary ──────────────────────────────────────────────────────────────── +echo "" +echo "==> Certificate generation complete!" +echo " Root CA: ${CERT_DIR}/rootCA.pem" +echo " Intermediate CA: ${CERT_DIR}/intermediateCA.pem" +echo " Client cert: ${CERT_DIR}/leaf-client.pem" +echo " Client key: ${CERT_DIR}/leaf-client.key" +echo " Tenant A cert: ${CERT_DIR}/tenant-a.pem" +echo " Tenant A key: ${CERT_DIR}/tenant-a.key" +echo " Tenant B cert: ${CERT_DIR}/tenant-b.pem" +echo " Tenant B key: ${CERT_DIR}/tenant-b.key" +echo " Truststore: ${CERT_DIR}/truststore.pem" +echo "" +echo " Truststore contains $(grep -c 'BEGIN CERTIFICATE' truststore.pem) certificate(s)" +echo "" + +# Verify the chains +echo "==> Verifying chains:" +echo " leaf-client → intermediate → root" +openssl verify -CAfile rootCA.pem -untrusted intermediateCA.pem leaf-client.pem +echo " tenant-a → intermediate → root" +openssl verify -CAfile rootCA.pem -untrusted intermediateCA.pem tenant-a.pem +echo " tenant-b → intermediate → root" +openssl verify -CAfile rootCA.pem -untrusted intermediateCA.pem tenant-b.pem +echo "" diff --git a/apigw-mtls-multi-tenant/scripts/run-demo.sh b/apigw-mtls-multi-tenant/scripts/run-demo.sh new file mode 100755 index 00000000..449d666f --- /dev/null +++ b/apigw-mtls-multi-tenant/scripts/run-demo.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +# run-demo.sh — Start the mTLS demo web app for customer presentation. +set -uo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" +DEMO_DIR="${PROJECT_DIR}/demo" + +echo "╔══════════════════════════════════════════════════════════════╗" +echo "║ API Gateway mTLS — Demo Web App ║" +echo "╚══════════════════════════════════════════════════════════════╝" +echo "" + +# Check config +if [[ ! -f "${PROJECT_DIR}/config.env" ]]; then + echo "ERROR: config.env not found. Run deployment first." + exit 1 +fi + +# Set up venv if needed +if [[ ! -d "${DEMO_DIR}/.venv" ]]; then + echo " Setting up Python virtual environment..." + python3 -m venv "${DEMO_DIR}/.venv" + "${DEMO_DIR}/.venv/bin/pip" install -q -r "${DEMO_DIR}/requirements.txt" + echo " Done." + echo "" +fi + +echo " Starting demo server at http://localhost:5001" +echo " Press Ctrl+C to stop." +echo "" + +"${DEMO_DIR}/.venv/bin/python" "${DEMO_DIR}/app.py" diff --git a/apigw-mtls-multi-tenant/scripts/teardown.sh b/apigw-mtls-multi-tenant/scripts/teardown.sh new file mode 100755 index 00000000..34083a38 --- /dev/null +++ b/apigw-mtls-multi-tenant/scripts/teardown.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +# teardown.sh — Remove all deployed resources. +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" +CONFIG_FILE="${PROJECT_DIR}/config.env" + +if [[ ! -f "${CONFIG_FILE}" ]]; then + echo "ERROR: config.env not found." + exit 1 +fi + +source "${CONFIG_FILE}" + +echo "╔══════════════════════════════════════════════════════════════╗" +echo "║ API Gateway mTLS Demo — Teardown ║" +echo "╚══════════════════════════════════════════════════════════════╝" +echo "" +echo " This will delete:" +echo " - CloudFormation stack: ${STACK_NAME}" +echo " - S3 bucket contents: ${TRUSTSTORE_BUCKET}" +echo " - S3 bucket: ${TRUSTSTORE_BUCKET}" +echo "" +read -p " Continue? (y/N) " -n 1 -r +echo "" + +if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo " Aborted." + exit 0 +fi + +echo "" +echo " [1/3] Deleting CloudFormation stack..." +aws cloudformation delete-stack --stack-name "${STACK_NAME}" --region "${AWS_REGION}" +echo " Waiting for stack deletion..." +aws cloudformation wait stack-delete-complete --stack-name "${STACK_NAME}" --region "${AWS_REGION}" || true +echo " Done." + +echo " [2/3] Emptying S3 bucket..." +aws s3 rm "s3://${TRUSTSTORE_BUCKET}" --recursive --region "${AWS_REGION}" 2>/dev/null || true +echo " Done." + +echo " [3/3] Deleting S3 bucket..." +# Delete all object versions (required for versioned buckets) +aws s3api list-object-versions --bucket "${TRUSTSTORE_BUCKET}" --region "${AWS_REGION}" \ + --query 'Versions[].{Key:Key,VersionId:VersionId}' --output json 2>/dev/null | \ + python3 -c " +import json, sys, subprocess +versions = json.load(sys.stdin) +if versions: + for v in versions: + subprocess.run(['aws', 's3api', 'delete-object', + '--bucket', '${TRUSTSTORE_BUCKET}', + '--key', v['Key'], + '--version-id', v['VersionId'], + '--region', '${AWS_REGION}'], check=False) +" 2>/dev/null || true + +aws s3api delete-bucket --bucket "${TRUSTSTORE_BUCKET}" --region "${AWS_REGION}" 2>/dev/null || true +echo " Done." + +echo "" +echo " Teardown complete. Local certs in ./certs/ were NOT removed." +echo " To remove local certs: rm -rf ./certs/" +echo "" diff --git a/apigw-mtls-multi-tenant/scripts/test-mtls.sh b/apigw-mtls-multi-tenant/scripts/test-mtls.sh new file mode 100755 index 00000000..fd647c58 --- /dev/null +++ b/apigw-mtls-multi-tenant/scripts/test-mtls.sh @@ -0,0 +1,429 @@ +#!/usr/bin/env bash +# test-mtls.sh — Comprehensive API Gateway mTLS validation for customer PKI scenario. +# +# Customer context: Multi-tenant APIs with mTLS for client authentication. +# They need to validate: +# (1) Full-chain truststore workaround works with their PKI structure +# (2) Edge cases: size limits, propagation, intermediate rotation +# (3) Leaf certificate expiry enforcement +# +# Tests: +# 1. Full-chain truststore (intermediate + root) → leaf validates ✅ +# 2. Root-only truststore → leaf REJECTED (confirmed gap) +# 3. Expired leaf cert → REJECTED (expiry enforced) +# 4. Rotated intermediate CA → new leaf validates (rotation works) +# 5. No client cert → rejected (mTLS enforced) +# 6. Untrusted cert → rejected (chain-of-trust enforced) +# +set -uo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" +CERT_DIR="${PROJECT_DIR}/certs" +CONFIG_FILE="${PROJECT_DIR}/config.env" + +if [[ ! -f "${CONFIG_FILE}" ]]; then + echo "ERROR: config.env not found." + exit 1 +fi + +# shellcheck source=/dev/null +source "${CONFIG_FILE}" + +API_URL="https://${DOMAIN_NAME}/" +PASS=0 +FAIL=0 +SKIP=0 + +# ─── Helper: wait for domain to reach AVAILABLE status ────────────────────── +wait_for_domain_available() { + local max_attempts=12 # 12 * 15s = 3 min max + local attempt=0 + local status + + while (( attempt < max_attempts )); do + status=$(aws apigatewayv2 get-domain-name --domain-name "${DOMAIN_NAME}" \ + --region "${AWS_REGION}" --query 'DomainNameConfigurations[0].DomainNameStatus' \ + --output text 2>/dev/null || echo "UNKNOWN") + + if [[ "${status}" == "AVAILABLE" ]]; then + return 0 + fi + + ((attempt++)) + echo " [⏳] Domain status: ${status} (attempt ${attempt}/${max_attempts}, waiting 15s)..." + sleep 15 + done + + echo " [⚠] Domain did not reach AVAILABLE within 3 minutes (last status: ${status})" + return 1 +} + +# ─── Helper: update truststore on S3 and wait for propagation ─────────────── +update_truststore() { + local pem_file="$1" + local description="$2" + + echo " [→] Uploading ${description} to s3://${TRUSTSTORE_BUCKET}/truststore.pem..." + aws s3 cp "${pem_file}" "s3://${TRUSTSTORE_BUCKET}/truststore.pem" \ + --region "${AWS_REGION}" --quiet + + local version + version=$(aws s3api head-object \ + --bucket "${TRUSTSTORE_BUCKET}" --key truststore.pem \ + --region "${AWS_REGION}" --query 'VersionId' --output text 2>/dev/null || echo "") + + echo " [→] Triggering domain truststore reimport..." + if [[ -n "${version}" && "${version}" != "None" ]]; then + aws apigatewayv2 update-domain-name \ + --domain-name "${DOMAIN_NAME}" \ + --region "${AWS_REGION}" \ + --mutual-tls-authentication "TruststoreUri=s3://${TRUSTSTORE_BUCKET}/truststore.pem,TruststoreVersion=${version}" \ + > /dev/null 2>&1 || true + else + aws apigatewayv2 update-domain-name \ + --domain-name "${DOMAIN_NAME}" \ + --region "${AWS_REGION}" \ + --mutual-tls-authentication "TruststoreUri=s3://${TRUSTSTORE_BUCKET}/truststore.pem" \ + > /dev/null 2>&1 || true + fi + + echo " [→] Waiting for truststore propagation..." + wait_for_domain_available +} + +# ─── Helper: test curl call and return HTTP code ──────────────────────────── +call_api() { + if [[ $# -eq 0 ]]; then + curl -s -o /tmp/mtls-test-output.txt -w "%{http_code}" \ + "${API_URL}" 2>/dev/null || echo "000" + else + curl -s -o /tmp/mtls-test-output.txt -w "%{http_code}" \ + "$@" "${API_URL}" 2>/dev/null || echo "000" + fi +} + +echo "╔══════════════════════════════════════════════════════════════════════╗" +echo "║ API Gateway mTLS — Full Certificate Chain Validation Test Suite ║" +echo "╠══════════════════════════════════════════════════════════════════════╣" +echo "║ Multi-tenant mTLS with full-chain truststore validation ║" +echo "║ Validates: workaround, expiry, rotation, enforcement ║" +echo "╚══════════════════════════════════════════════════════════════════════╝" +echo "" +echo " Target: ${API_URL}" +echo " Truststore: s3://${TRUSTSTORE_BUCKET}/truststore.pem" +echo "" + +# ═══════════════════════════════════════════════════════════════════════════════ +# TEST 1: Full-chain truststore validates leaf cert +# ═══════════════════════════════════════════════════════════════════════════════ +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "TEST 1: Full-chain truststore (intermediate + root) → leaf validates" +echo " Proves: the documented workaround works" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + +update_truststore "${CERT_DIR}/truststore.pem" "full-chain truststore (intermediate + root)" + +HTTP_CODE=$(call_api --cert "${CERT_DIR}/leaf-client.pem" --key "${CERT_DIR}/leaf-client.key") + +if [[ "${HTTP_CODE}" == "200" ]]; then + echo " ✅ PASS — HTTP 200. Leaf → Intermediate → Root chain resolved." + echo "" + echo " Response:" + python3 -m json.tool /tmp/mtls-test-output.txt 2>/dev/null || cat /tmp/mtls-test-output.txt + ((PASS++)) +else + echo " ❌ FAIL — Expected 200, got ${HTTP_CODE}" + cat /tmp/mtls-test-output.txt 2>/dev/null + ((FAIL++)) +fi +echo "" + +# ═══════════════════════════════════════════════════════════════════════════════ +# TEST 2: Root-only truststore — leaf REJECTED +# ═══════════════════════════════════════════════════════════════════════════════ +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "TEST 2: Root-only truststore → leaf cert REJECTED" +echo " Proves: API GW does NOT auto-walk root → intermediate → leaf" +echo " Proves: API GW does NOT auto-walk root → intermediate → leaf" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + +update_truststore "${CERT_DIR}/rootCA.pem" "root-only truststore" + +HTTP_CODE=$(call_api --cert "${CERT_DIR}/leaf-client.pem" --key "${CERT_DIR}/leaf-client.key") + +if [[ "${HTTP_CODE}" == "403" || "${HTTP_CODE}" =~ ^0+$ ]]; then + echo " ✅ PASS — Leaf cert REJECTED with root-only truststore (HTTP ${HTTP_CODE})" + echo "" + echo " ╔═══════════════════════════════════════════════════════════════════╗" + echo " ║ CONFIRMED: API Gateway does NOT auto-walk the certificate chain. ║" + echo " ║ The intermediate CA MUST be present in the truststore. ║" + echo " ╚═══════════════════════════════════════════════════════════════════╝" + ((PASS++)) +else + echo " ❌ FAIL — Expected rejection, got HTTP ${HTTP_CODE}" + echo " (Truststore update may not have fully propagated)" + cat /tmp/mtls-test-output.txt 2>/dev/null + ((FAIL++)) +fi +echo "" + +# Restore full-chain for remaining tests +echo " [→] Restoring full-chain truststore for remaining tests..." +update_truststore "${CERT_DIR}/truststore.pem" "full-chain truststore (restored)" +echo "" + +# ═══════════════════════════════════════════════════════════════════════════════ +# TEST 3: Expired leaf cert — REJECTED +# ═══════════════════════════════════════════════════════════════════════════════ +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "TEST 3: Expired leaf cert → REJECTED" +echo " Proves: API GW checks leaf certificate validity period" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + +EXPIRED_DIR=$(mktemp -d) + +echo " [→] Generating expired leaf certificate (using Python cryptography)..." + +# LibreSSL doesn't support backdating certs, so use Python's cryptography library +python3 << PYEOF +from cryptography import x509 +from cryptography.x509.oid import NameOID +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import rsa +from datetime import datetime, timedelta, timezone +import sys + +# Load intermediate CA cert and key +with open("${CERT_DIR}/intermediateCA.pem", "rb") as f: + ca_cert = x509.load_pem_x509_certificate(f.read()) +with open("${CERT_DIR}/intermediateCA.key", "rb") as f: + ca_key = serialization.load_pem_private_key(f.read(), password=None) + +# Generate a new key for the expired leaf +leaf_key = rsa.generate_private_key(public_exponent=65537, key_size=2048) + +# Build a cert that expired yesterday (valid from 3 days ago to 1 day ago) +now = datetime.now(timezone.utc) +subject = x509.Name([ + x509.NameAttribute(NameOID.COMMON_NAME, "expired-client"), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, "mTLS Demo"), + x509.NameAttribute(NameOID.COUNTRY_NAME, "US"), +]) + +cert = ( + x509.CertificateBuilder() + .subject_name(subject) + .issuer_name(ca_cert.subject) + .public_key(leaf_key.public_key()) + .serial_number(x509.random_serial_number()) + .not_valid_before(now - timedelta(days=3)) + .not_valid_after(now - timedelta(days=1)) + .sign(ca_key, hashes.SHA256()) +) + +# Write cert and key +with open("${EXPIRED_DIR}/expired.pem", "wb") as f: + f.write(cert.public_bytes(serialization.Encoding.PEM)) +with open("${EXPIRED_DIR}/expired.key", "wb") as f: + f.write(leaf_key.private_bytes( + serialization.Encoding.PEM, + serialization.PrivateFormat.TraditionalOpenSSL, + serialization.NoEncryption(), + )) + +print(" [→] Expired cert created: valid {} to {} (expired)".format( + (now - timedelta(days=3)).strftime("%Y-%m-%d"), + (now - timedelta(days=1)).strftime("%Y-%m-%d"), +)) +PYEOF + +if [[ -f "${EXPIRED_DIR}/expired.pem" ]]; then + # Confirm it's expired + if ! openssl x509 -in "${EXPIRED_DIR}/expired.pem" -checkend 0 > /dev/null 2>&1; then + echo " [→] Expiry confirmed locally. Testing against API Gateway..." + + HTTP_CODE=$(call_api --cert "${EXPIRED_DIR}/expired.pem" --key "${EXPIRED_DIR}/expired.key") + + if [[ "${HTTP_CODE}" == "403" || "${HTTP_CODE}" =~ ^0+$ ]]; then + echo " ✅ PASS — Expired leaf cert REJECTED (HTTP ${HTTP_CODE})" + echo " API Gateway validates certificate NotAfter date." + ((PASS++)) + else + echo " ❌ FAIL — Expected rejection of expired cert, got HTTP ${HTTP_CODE}" + cat /tmp/mtls-test-output.txt 2>/dev/null + ((FAIL++)) + fi + else + echo " ⚠️ SKIP — Generated cert is not actually expired (clock issue?)." + ((SKIP++)) + fi +else + echo " ⚠️ SKIP — Failed to generate expired cert." + echo " Ensure python3 with 'cryptography' package is installed:" + echo " pip3 install cryptography" + ((SKIP++)) +fi + +rm -rf "${EXPIRED_DIR}" +echo "" + +# ═══════════════════════════════════════════════════════════════════════════════ +# TEST 4: Intermediate CA rotation — new leaf from new intermediate validates +# ═══════════════════════════════════════════════════════════════════════════════ +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "TEST 4: Intermediate CA rotation — new intermediate + leaf validates" +echo " Proves: truststore can be updated for CA rotation without" +echo " downtime (CA key rotation scenario)" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + +ROTATION_DIR=$(mktemp -d) + +echo " [→] Generating new (rotated) Intermediate CA..." +openssl genrsa -out "${ROTATION_DIR}/intermediateCA-v2.key" 4096 2>/dev/null +openssl req -new -key "${ROTATION_DIR}/intermediateCA-v2.key" \ + -subj "/CN=Demo Intermediate CA v2/O=mTLS Demo/C=US" -out "${ROTATION_DIR}/intermediateCA-v2.csr" 2>/dev/null +openssl x509 -req -in "${ROTATION_DIR}/intermediateCA-v2.csr" \ + -CA "${CERT_DIR}/rootCA.pem" -CAkey "${CERT_DIR}/rootCA.key" \ + -CAcreateserial -days 1825 -sha256 \ + -extfile <(printf "basicConstraints=critical,CA:TRUE,pathlen:0\nkeyUsage=critical,keyCertSign,cRLSign") \ + -out "${ROTATION_DIR}/intermediateCA-v2.pem" 2>/dev/null + +echo " [→] Issuing new leaf cert from rotated intermediate..." +openssl genrsa -out "${ROTATION_DIR}/leaf-v2.key" 2048 2>/dev/null +openssl req -new -key "${ROTATION_DIR}/leaf-v2.key" \ + -subj "/CN=rotated-client/O=mTLS Demo/C=US" -out "${ROTATION_DIR}/leaf-v2.csr" 2>/dev/null +openssl x509 -req -in "${ROTATION_DIR}/leaf-v2.csr" \ + -CA "${ROTATION_DIR}/intermediateCA-v2.pem" -CAkey "${ROTATION_DIR}/intermediateCA-v2.key" \ + -CAcreateserial -days 365 -sha256 -out "${ROTATION_DIR}/leaf-v2.pem" 2>/dev/null + +echo " [→] Building truststore with BOTH intermediates (rotation overlap)..." +cat "${CERT_DIR}/intermediateCA.pem" "${ROTATION_DIR}/intermediateCA-v2.pem" "${CERT_DIR}/rootCA.pem" \ + > "${ROTATION_DIR}/truststore-rotation.pem" + +CERT_COUNT=$(grep -c "BEGIN CERTIFICATE" "${ROTATION_DIR}/truststore-rotation.pem") +echo " [→] Truststore contains ${CERT_COUNT} certificates (old intermediate + new intermediate + root)" + +# Verify chain locally +openssl verify -CAfile "${CERT_DIR}/rootCA.pem" -untrusted "${ROTATION_DIR}/intermediateCA-v2.pem" \ + "${ROTATION_DIR}/leaf-v2.pem" > /dev/null 2>&1 && echo " [→] Local chain verification: OK" + +update_truststore "${ROTATION_DIR}/truststore-rotation.pem" "rotation truststore (both intermediates + root)" + +echo " [→] Testing new leaf cert against rotation truststore..." +HTTP_CODE=$(call_api --cert "${ROTATION_DIR}/leaf-v2.pem" --key "${ROTATION_DIR}/leaf-v2.key") + +if [[ "${HTTP_CODE}" == "200" ]]; then + echo " ✅ PASS — New leaf from rotated intermediate validates (HTTP ${HTTP_CODE})" + echo "" + echo " Rotation strategy confirmed:" + echo " 1. Add new intermediate to truststore alongside old one" + echo " 2. Issue new leaf certs from new intermediate" + echo " 3. Once all clients migrated, remove old intermediate" + ((PASS++)) + + # Also verify old leaf still works (overlap period) + echo "" + echo " [→] Verifying OLD leaf still works during overlap..." + HTTP_CODE_OLD=$(call_api --cert "${CERT_DIR}/leaf-client.pem" --key "${CERT_DIR}/leaf-client.key") + if [[ "${HTTP_CODE_OLD}" == "200" ]]; then + echo " ✅ Old leaf also validates — both CAs active simultaneously." + else + echo " ⚠️ Old leaf rejected (HTTP ${HTTP_CODE_OLD}) — check propagation timing." + fi +else + echo " ❌ FAIL — Expected 200 for rotated intermediate, got ${HTTP_CODE}" + cat /tmp/mtls-test-output.txt 2>/dev/null + ((FAIL++)) +fi + +rm -rf "${ROTATION_DIR}" +echo "" + +# Restore original truststore +echo " [→] Restoring original truststore..." +update_truststore "${CERT_DIR}/truststore.pem" "original truststore (restored)" +echo "" + +# ═══════════════════════════════════════════════════════════════════════════════ +# TEST 5: No client cert — mTLS enforced +# ═══════════════════════════════════════════════════════════════════════════════ +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "TEST 5: No client cert (expect rejection)" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + +HTTP_CODE=$(call_api) + +if [[ "${HTTP_CODE}" == "403" || "${HTTP_CODE}" =~ ^0+$ ]]; then + echo " ✅ PASS — No-cert request rejected (HTTP ${HTTP_CODE})" + ((PASS++)) +else + echo " ❌ FAIL — Expected rejection, got HTTP ${HTTP_CODE}" + ((FAIL++)) +fi +echo "" + +# ═══════════════════════════════════════════════════════════════════════════════ +# TEST 6: Untrusted self-signed cert — rejected +# ═══════════════════════════════════════════════════════════════════════════════ +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "TEST 6: Untrusted self-signed cert (expect rejection)" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + +TMPDIR=$(mktemp -d) +openssl req -x509 -newkey rsa:2048 -keyout "${TMPDIR}/rogue.key" \ + -out "${TMPDIR}/rogue.pem" -days 1 -nodes \ + -subj "/CN=rogue-client/O=Untrusted Org/C=US" 2>/dev/null + +HTTP_CODE=$(call_api --cert "${TMPDIR}/rogue.pem" --key "${TMPDIR}/rogue.key") +rm -rf "${TMPDIR}" + +if [[ "${HTTP_CODE}" == "403" || "${HTTP_CODE}" =~ ^0+$ ]]; then + echo " ✅ PASS — Untrusted cert rejected (HTTP ${HTTP_CODE})" + ((PASS++)) +else + echo " ❌ FAIL — Expected rejection, got HTTP ${HTTP_CODE}" + ((FAIL++)) +fi +echo "" + +# ═══════════════════════════════════════════════════════════════════════════════ +# SUMMARY +# ═══════════════════════════════════════════════════════════════════════════════ +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "RESULTS: ${PASS} passed, ${FAIL} failed, ${SKIP} skipped (of 6 tests)" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "" +echo "╔══════════════════════════════════════════════════════════════════════╗" +echo "║ KEY FINDINGS ║" +echo "╠══════════════════════════════════════════════════════════════════════╣" +echo "║ 1. Full chain workaround WORKS ║" +echo "║ Truststore = intermediate(s) + root → leaf validates ║" +echo "║ ║" +echo "║ 2. Root-only truststore FAILS (confirmed gap) ║" +echo "║ API GW requires explicit intermediate CAs in truststore ║" +echo "║ ║" +echo "║ 3. Leaf expiry IS enforced ║" +echo "║ Expired client certs are rejected at TLS handshake ║" +echo "║ ║" +echo "║ 4. Intermediate rotation is safe ║" +echo "║ Include both old + new intermediates during transition ║" +echo "║ Old and new leaf certs validate simultaneously ║" +echo "╠══════════════════════════════════════════════════════════════════════╣" +echo "║ EDGE CASE NOTES ║" +echo "╠══════════════════════════════════════════════════════════════════════╣" +echo "║ • Truststore size: max 64 KB (PEM), ~40-50 CA certs ║" +echo "║ • Max chain depth: 4 (root + 3 intermediates) ║" +echo "║ • Propagation: polls until AVAILABLE (typically 30-90s) ║" +echo "║ • CRL/OCSP: NOT checked — use Lambda authorizer if needed ║" +echo "║ • S3 versioning: recommended for safe truststore rollback ║" +echo "║ • Rotation: include all active intermediates during transition ║" +echo "╠══════════════════════════════════════════════════════════════════════╣" +echo "║ Docs: https://docs.aws.amazon.com/apigateway/latest/ ║" +echo "║ developerguide/rest-api-mutual-tls.html ║" +echo "╚══════════════════════════════════════════════════════════════════════╝" +echo "" + +if [[ ${FAIL} -gt 0 ]]; then + exit 1 +fi diff --git a/apigw-mtls-multi-tenant/src/authorizer.py b/apigw-mtls-multi-tenant/src/authorizer.py new file mode 100644 index 00000000..3b788f95 --- /dev/null +++ b/apigw-mtls-multi-tenant/src/authorizer.py @@ -0,0 +1,160 @@ +""" +Lambda Authorizer for multi-tenant mTLS. + +Extracts the client certificate from the mTLS handshake, logs full cert details +to CloudWatch (demonstrating where revocation checks could be added), and maps +the certificate CN to a tenant identity. + +Tenant mapping: + CN=tenant-a → Tenant A + CN=tenant-b → Tenant B + (other valid certs) → default tenant + +This authorizer demonstrates: + 1. How to extract and inspect client certs in a Lambda authorizer + 2. Where to add CRL/OCSP revocation checks (not natively supported by API GW) + 3. Multi-tenant routing based on certificate identity +""" + +import json +import logging +import urllib.parse + +logger = logging.getLogger() +logger.setLevel(logging.INFO) + +# Tenant mapping: CN → tenant config +TENANT_MAP = { + "tenant-a": { + "tenantId": "tenant-a", + "tenantName": "Tenant A", + "allowedPaths": ["/api", "/api/", "/"], + }, + "tenant-b": { + "tenantId": "tenant-b", + "tenantName": "Tenant B", + "allowedPaths": ["/api", "/api/", "/"], + }, +} + + +def lambda_handler(event, context): + """ + REQUEST-type Lambda authorizer for HTTP API. + Receives the full request context including mTLS client cert. + """ + logger.info("=== mTLS Authorizer Invoked ===") + logger.info(f"Request: {json.dumps(event, default=str)}") + + # Extract client certificate from request context + request_context = event.get("requestContext", {}) + auth_context = request_context.get("authentication", {}) + client_cert = auth_context.get("clientCert", {}) + + if not client_cert: + logger.warning("No client certificate found in request context") + return build_deny_response("No client certificate") + + # Log full certificate details (this is where revocation checks would go) + subject_dn = client_cert.get("subjectDN", "") + issuer_dn = client_cert.get("issuerDN", "") + serial = client_cert.get("serialNumber", "") + validity = client_cert.get("validity", {}) + + logger.info("=== Client Certificate Details ===") + logger.info(f" Subject DN: {subject_dn}") + logger.info(f" Issuer DN: {issuer_dn}") + logger.info(f" Serial Number: {serial}") + logger.info(f" Not Before: {validity.get('notBefore', 'N/A')}") + logger.info(f" Not After: {validity.get('notAfter', 'N/A')}") + logger.info("=================================") + + # ─── Revocation Check — NOT IMPLEMENTED (demo only) ─────────────────────── + # ⚠️ SECURITY: This demo does NOT perform certificate revocation checking. + # A compromised client certificate will remain valid until expiry. + # + # In production, implement one or more of the following before proceeding: + # 1. DynamoDB/Redis denylist: query a table of revoked serial numbers + # 2. CRL check: download CRL from CA's distribution point, verify serial + # 3. OCSP check: send request to responder URL from cert's AIA extension + # + # Example: + # if is_revoked(serial, issuer_dn): + # logger.warning(f"REVOKED certificate: serial={serial}") + # return build_deny_response("Certificate revoked") + # + # Without revocation checking, the only remediation for a compromised cert is: + # - Remove the issuing CA from the truststore (affects all certs from that CA) + # - Wait for natural cert expiry + logger.info("[Revocation Check] NOT IMPLEMENTED — demo only") + + # Extract CN from subject DN + cn = extract_cn(subject_dn) + logger.info(f" Extracted CN: {cn}") + + # Map CN to tenant + tenant = TENANT_MAP.get(cn) + if tenant: + logger.info(f" Tenant identified: {tenant['tenantName']} ({tenant['tenantId']})") + else: + logger.warning(f" Unknown CN={cn} — not mapped to any tenant. DENIED.") + return build_deny_response(f"Certificate CN '{cn}' not authorized") + + # Check path authorization + route_key = event.get("routeKey", "") + request_path = event.get("rawPath", "/") + # Strip stage prefix if present (API GW includes /prod/ in rawPath) + for prefix in ["/prod", "/staging", "/dev"]: + if request_path.startswith(prefix): + request_path = request_path[len(prefix):] or "/" + break + logger.info(f" Request path: {request_path}") + logger.info(f" Allowed paths: {tenant['allowedPaths']}") + + # Enforce path-level access control per tenant + if request_path not in tenant["allowedPaths"]: + logger.warning(f" Path {request_path} not in allowed paths for tenant {tenant['tenantId']}") + return build_deny_response(f"Access to {request_path} not authorized for this tenant") + + # Build allow response with tenant context + response = build_allow_response(tenant, subject_dn, issuer_dn, serial) + logger.info(f" Authorization: ALLOW") + logger.info(f" Response context: {json.dumps(response.get('context', {}))}") + + return response + + +def extract_cn(subject_dn): + """Extract CN value from a subject DN string like 'CN=tenant-a-att,O=...'""" + # Handle both formats: "CN=value,O=..." and "/CN=value/O=..." + dn = subject_dn.replace("/", ",").strip(",") + for part in dn.split(","): + part = part.strip() + if part.upper().startswith("CN="): + return part[3:] + return "" + + +def build_allow_response(tenant, subject_dn, issuer_dn, serial): + """Build IAM policy allowing access with tenant context.""" + return { + "isAuthorized": True, + "context": { + "tenantId": tenant["tenantId"], + "tenantName": tenant["tenantName"], + "certSubject": subject_dn, + "certIssuer": issuer_dn, + "certSerial": serial, + }, + } + + +def build_deny_response(reason): + """Build deny response.""" + logger.warning(f" Authorization: DENY — {reason}") + return { + "isAuthorized": False, + "context": { + "reason": reason, + }, + } diff --git a/apigw-mtls-multi-tenant/src/handler.py b/apigw-mtls-multi-tenant/src/handler.py new file mode 100644 index 00000000..8a91f0b4 --- /dev/null +++ b/apigw-mtls-multi-tenant/src/handler.py @@ -0,0 +1,34 @@ +""" +Simple Lambda handler for the mTLS demo. +Returns request context including mTLS client cert info when available. +""" + +import json + + +def lambda_handler(event, context): + """Return 200 with mTLS client certificate details from the request context.""" + + # Extract mTLS authentication context if present + request_context = event.get("requestContext", {}) + auth = request_context.get("authentication", {}) + client_cert = auth.get("clientCert", {}) + + body = { + "message": "mTLS authentication successful", + "clientCert": { + "commonName": client_cert.get("subjectDN", "N/A"), + "issuer": client_cert.get("issuerDN", "N/A"), + "serialNumber": client_cert.get("serialNumber", "N/A"), + "validity": { + "notBefore": client_cert.get("validity", {}).get("notBefore", "N/A"), + "notAfter": client_cert.get("validity", {}).get("notAfter", "N/A"), + }, + }, + } + + return { + "statusCode": 200, + "headers": {"Content-Type": "application/json"}, + "body": json.dumps(body, indent=2), + } diff --git a/apigw-mtls-multi-tenant/src/tenant_handler.py b/apigw-mtls-multi-tenant/src/tenant_handler.py new file mode 100644 index 00000000..db2370ea --- /dev/null +++ b/apigw-mtls-multi-tenant/src/tenant_handler.py @@ -0,0 +1,87 @@ +""" +Multi-tenant Lambda handler for the mTLS demo. + +All tenants hit the SAME endpoint (/api). The Lambda Authorizer identifies the +tenant from the client certificate CN and passes tenant context downstream. +This handler uses that context to return tenant-specific responses — demonstrating +cert-based routing without path differentiation. + +Flow: + Client cert (CN=tenant-a) → /api + Client cert (CN=tenant-b) → /api (same path!) + Authorizer maps CN → tenantId → passed as context + This handler reads tenantId from context → returns tenant-specific data +""" + +import json +import logging + +logger = logging.getLogger() +logger.setLevel(logging.INFO) + +# Simulated tenant data (in production this would come from a database) +TENANT_DATA = { + "tenant-a": { + "name": "Tenant A", + "region": "US-East", + "apiVersion": "v2.1", + "services": ["service-x", "service-y"], + "rateLimit": 10000, + "accountStatus": "active", + }, + "tenant-b": { + "name": "Tenant B", + "region": "US-West", + "apiVersion": "v3.0", + "services": ["service-x", "service-y", "service-z"], + "rateLimit": 15000, + "accountStatus": "active", + }, +} + + +def lambda_handler(event, context): + """Handle multi-tenant API requests — same path, different cert = different tenant.""" + logger.info(f"Tenant handler invoked: {json.dumps(event, default=str)}") + + # Extract tenant context from authorizer (set by the Lambda Authorizer based on cert CN) + request_context = event.get("requestContext", {}) + authorizer = request_context.get("authorizer", {}) + auth_context = authorizer.get("lambda", {}) + + tenant_id = auth_context.get("tenantId", "unknown") + tenant_name = auth_context.get("tenantName", "Unknown") + cert_subject = auth_context.get("certSubject", "N/A") + cert_serial = auth_context.get("certSerial", "N/A") + + # Get tenant-specific data based on authorizer context (not path!) + tenant_data = TENANT_DATA.get(tenant_id, {}) + + body = { + "message": f"Welcome, {tenant_name}!", + "routing": { + "method": "Certificate-based (same endpoint for all tenants)", + "endpoint": "/api", + "tenantDeterminedBy": "Client certificate CN → Lambda Authorizer → context", + }, + "tenant": { + "id": tenant_id, + "name": tenant_name, + }, + "authentication": { + "method": "mTLS + Lambda Authorizer", + "certSubject": cert_subject, + "certSerial": cert_serial, + }, + "tenantConfig": tenant_data if tenant_data else { + "note": "No specific config — unrecognized tenant (default access)", + }, + } + + logger.info(f"Responding to tenant: {tenant_id} ({tenant_name}) on shared /api endpoint") + + return { + "statusCode": 200, + "headers": {"Content-Type": "application/json"}, + "body": json.dumps(body, indent=2), + } diff --git a/apigw-mtls-multi-tenant/template.yaml b/apigw-mtls-multi-tenant/template.yaml new file mode 100644 index 00000000..821d4366 --- /dev/null +++ b/apigw-mtls-multi-tenant/template.yaml @@ -0,0 +1,183 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: > + API Gateway mTLS Full-Chain Truststore Demo. + Deploys an HTTP API with mutual TLS configured against a full-chain truststore + (intermediate + root CAs) stored in S3. + +Parameters: + DomainName: + Type: String + Description: Custom domain name for the API (e.g., mtls-demo.example.com) + + HostedZoneId: + Type: String + Description: Route 53 Hosted Zone ID for the custom domain + + CertificateArn: + Type: String + Description: ARN of the ACM certificate for the custom domain (server-side TLS) + + TruststoreBucket: + Type: String + Description: S3 bucket name containing the truststore PEM + + TruststoreKey: + Type: String + Default: truststore.pem + Description: S3 object key for the truststore PEM file + +Globals: + Function: + Timeout: 10 + Runtime: python3.12 + MemorySize: 128 + +Resources: + # ─── Lambda Backend ───────────────────────────────────────────────────────── + MtlsDemoFunction: + Type: AWS::Serverless::Function + Properties: + Handler: handler.lambda_handler + CodeUri: src/ + Description: Returns 200 with mTLS client certificate details + Events: + RootGet: + Type: HttpApi + Properties: + ApiId: !Ref MtlsHttpApi + Path: / + Method: GET + Auth: + Authorizer: NONE + HealthGet: + Type: HttpApi + Properties: + ApiId: !Ref MtlsHttpApi + Path: /health + Method: GET + Auth: + Authorizer: NONE + + # ─── HTTP API with mTLS ───────────────────────────────────────────────────── + MtlsHttpApi: + Type: AWS::Serverless::HttpApi + Properties: + StageName: prod + Description: HTTP API with mutual TLS authentication and Lambda authorizer + DisableExecuteApiEndpoint: true + Auth: + DefaultAuthorizer: MtlsLambdaAuthorizer + Authorizers: + MtlsLambdaAuthorizer: + FunctionArn: !GetAtt MtlsAuthorizerFunction.Arn + FunctionInvokeRole: !GetAtt AuthorizerInvokeRole.Arn + Identity: + ReauthorizeEvery: 0 + AuthorizerPayloadFormatVersion: "2.0" + EnableSimpleResponses: true + + # ─── Lambda Authorizer Function ───────────────────────────────────────────── + MtlsAuthorizerFunction: + Type: AWS::Serverless::Function + Properties: + Handler: authorizer.lambda_handler + CodeUri: src/ + Description: mTLS Lambda authorizer — logs cert details, maps CN to tenant + Timeout: 10 + + # ─── Authorizer Invoke Role ───────────────────────────────────────────────── + AuthorizerInvokeRole: + Type: AWS::IAM::Role + Properties: + AssumeRolePolicyDocument: + Version: "2012-10-17" + Statement: + - Effect: Allow + Principal: + Service: apigateway.amazonaws.com + Action: sts:AssumeRole + Policies: + - PolicyName: InvokeAuthorizer + PolicyDocument: + Version: "2012-10-17" + Statement: + - Effect: Allow + Action: lambda:InvokeFunction + Resource: !GetAtt MtlsAuthorizerFunction.Arn + + # ─── Tenant-Specific Handler ──────────────────────────────────────────────── + TenantFunction: + Type: AWS::Serverless::Function + Properties: + Handler: tenant_handler.lambda_handler + CodeUri: src/ + Description: Multi-tenant handler — routes by cert identity, not path + Events: + TenantApi: + Type: HttpApi + Properties: + ApiId: !Ref MtlsHttpApi + Path: /api + Method: GET + + # ─── Custom Domain with mTLS ──────────────────────────────────────────────── + ApiDomainName: + Type: AWS::ApiGatewayV2::DomainName + Properties: + DomainName: !Ref DomainName + DomainNameConfigurations: + - CertificateArn: !Ref CertificateArn + EndpointType: REGIONAL + SecurityPolicy: TLS_1_2 + MutualTlsAuthentication: + TruststoreUri: !Sub "s3://${TruststoreBucket}/${TruststoreKey}" + + # ─── API Mapping ──────────────────────────────────────────────────────────── + ApiMapping: + Type: AWS::ApiGatewayV2::ApiMapping + DependsOn: ApiDomainName + Properties: + ApiId: !Ref MtlsHttpApi + DomainName: !Ref DomainName + Stage: !Ref MtlsHttpApi.Stage + + # ─── Route 53 Record ──────────────────────────────────────────────────────── + DnsRecord: + Type: AWS::Route53::RecordSet + Properties: + HostedZoneId: !Ref HostedZoneId + Name: !Ref DomainName + Type: A + AliasTarget: + DNSName: !GetAtt ApiDomainName.RegionalDomainName + HostedZoneId: !GetAtt ApiDomainName.RegionalHostedZoneId + +Outputs: + ApiDomain: + Description: Custom domain URL for the mTLS API + Value: !Sub "https://${DomainName}/" + + ApiId: + Description: HTTP API ID + Value: !Ref MtlsHttpApi + + FunctionArn: + Description: Lambda function ARN + Value: !GetAtt MtlsDemoFunction.Arn + + AuthorizerFunctionArn: + Description: Authorizer Lambda function ARN + Value: !GetAtt MtlsAuthorizerFunction.Arn + + TenantFunctionArn: + Description: Tenant handler Lambda function ARN + Value: !GetAtt TenantFunction.Arn + + TenantAEndpoint: + Description: Multi-tenant API endpoint (same path, routed by cert identity) + Value: !Sub "https://${DomainName}/api" + + TruststoreLocation: + Description: S3 URI of the truststore + Value: !Sub "s3://${TruststoreBucket}/${TruststoreKey}"