From 74dffac958ed6e7467e731cfc50197361f94c7d8 Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Tue, 18 Jun 2024 21:44:29 -0500 Subject: [PATCH 1/7] On commit to main, auto-open PR to merge from main to staging (#210) * Add release-process.md and update deploy workflow to run on all versioned tags. Also, remove value-created-log.md. * Run deploy workflow on push to main or staging branches. * Add workflow to open a PR on commit to main. (Includes organize-workflows branch for debugging w/o excessive merging) * Update release-process.md with PR workflow * Move PR creation workflow to shared workflow * Check out repo as first step in pr creation * Add missing trailing backslash * remove automerge label * Quote debugging * Remove debug feature branch trigger --- .github/workflows/_create-pr-to-branch.yml | 45 ++++++++++++++++++++++ .github/workflows/create-pr-to-staging.yml | 13 +++++++ .github/workflows/deploy.yml | 5 --- README.md | 2 +- documents/release-process.md | 14 +++++++ documents/value-created-log.md | 5 --- 6 files changed, 73 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/_create-pr-to-branch.yml create mode 100644 .github/workflows/create-pr-to-staging.yml create mode 100644 documents/release-process.md delete mode 100644 documents/value-created-log.md diff --git a/.github/workflows/_create-pr-to-branch.yml b/.github/workflows/_create-pr-to-branch.yml new file mode 100644 index 00000000..11dada0e --- /dev/null +++ b/.github/workflows/_create-pr-to-branch.yml @@ -0,0 +1,45 @@ +name: Create pull request to branch + +on: + workflow_call: + inputs: + head: + type: string + default: ${{ github.ref_name }} + base: + required: true + type: string + +env: + GH_TOKEN: ${{ github.token }} + HEAD: ${{ inputs.head }} + BASE: ${{ inputs.base }} + +jobs: + create-pr: + runs-on: ubuntu-latest + outputs: + pr_number: ${{ steps.pr-number.outputs.pull_request_number }} + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Check for existing PR + id: check-pr + run: | + PR=$(gh pr list --base ${BASE} --head ${HEAD} --json number --jq '.[0].number') + echo "::set-output name=pr_exists::$PR" + + - name: Create pull request + if: steps.check-pr.outputs.pr_exists == '' + run: | + gh pr create \ + --label "autogenerated" \ + --base ${BASE} --head ${HEAD} \ + --title "Deploy to ${BASE}" \ + --body "Automated PR to sync changes from ${HEAD} to ${BASE}." + + - name: Get pull request number + id: pr-number + run: echo "pull_request_number=$(gh pr view --json number -q .number || echo "")" >> $GITHUB_OUTPUT diff --git a/.github/workflows/create-pr-to-staging.yml b/.github/workflows/create-pr-to-staging.yml new file mode 100644 index 00000000..5a04bea4 --- /dev/null +++ b/.github/workflows/create-pr-to-staging.yml @@ -0,0 +1,13 @@ +name: Create PR from main to staging + +on: + push: + branches: + - main + +jobs: + create-pr-to-staging: + uses: ./.github/workflows/_create-pr-to-branch.yml + secrets: inherit + with: + base: staging diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index ee21cb6d..d95981f8 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,14 +4,9 @@ on: push: branches: - main - tags: - staging workflow_dispatch: -env: - TAG_NAME: ${{ github.ref_name }} - REGISTRY: ghcr.io/gsa-tts/atj-platform - jobs: build-image-doj: uses: ./.github/workflows/_build-docker-image.yml diff --git a/README.md b/README.md index 5a103777..52027130 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ The project dependencies within the workspace are: Additional documentation: - [Architectural Decision Records (ADRs)](./documents/adr/) -- [Non-project contributions](./documents/value-created-log.md) +- [Release process](./documents/release-process.md) ## Overview diff --git a/documents/release-process.md b/documents/release-process.md new file mode 100644 index 00000000..729dc1b1 --- /dev/null +++ b/documents/release-process.md @@ -0,0 +1,14 @@ +# Release process + +There are currently two environments: + +- `main` (dev, main branch, CI/CD) +- `staging` (manually deployed via a release tag) + +## Overview + +To promote continuous integration, the 10x Forms Platform uses trunk-based development. In trunk-based development, we collaborate on code in a single, mainline branch. + +Deployments are managed by Terraform CDK. On merge to main, the [../.github/workflows/deploy.yml](../.github/workflows/deploy.yml) Github Action workflow builds Docker images for each app in the repository, pushes them to [ghcr.io](https://github.com/orgs/GSA-TTS/packages?repo_name=atj-platform), and deploys to the dev environment (`gsa-tts-10x-atj-dev`). + +When commits are made to main, the [../.github/workflows/create-pr-to-staging.yml](../.github/workflows/create-pr-to-staging.yml) workflow creates a PR to deploy to the staging environment, if it doesn't already exist. diff --git a/documents/value-created-log.md b/documents/value-created-log.md deleted file mode 100644 index fd0ed553..00000000 --- a/documents/value-created-log.md +++ /dev/null @@ -1,5 +0,0 @@ -# Value created - -The project team aims to stack the value it creates throughout the development of this project by improving the federal forms landscape wherever possible. This document lists notable contributions made by the project team to other efforts. - -- [uswds-compile PR#76](https://github.com/uswds/uswds-compile/pull/76) updates [uswds-compile](https://github.com/uswds/uswds-compile) to be compatible with alternate package managers, such as [pnpm](https://pnpm.io/). From a5baea56894c5a6f86d6d80f3a74bd90d76fcba0 Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Tue, 18 Jun 2024 23:02:06 -0500 Subject: [PATCH 2/7] Add Terraform plan as comment to deployment PR (#212) * Add release-process.md and update deploy workflow to run on all versioned tags. Also, remove value-created-log.md. * Run deploy workflow on push to main or staging branches. * Add workflow to open a PR on commit to main. (Includes organize-workflows branch for debugging w/o excessive merging) * Update release-process.md with PR workflow * Move PR creation workflow to shared workflow * Check out repo as first step in pr creation * Add missing trailing backslash * remove automerge label * Quote debugging * Remove debug feature branch trigger * Add workflow to add Terraform plan as comment to PR * For testing, run terraform plan workflow on merge to main * Add DEPLOY_ENV env var * Store output of terraform plan so we can use it in a comment * Lookup prior comment --- .../workflows/_terraform-plan-pr-comment.yml | 103 ++++++++++++++++++ .../workflows/add-terraform-plan-to-pr.yml | 18 +++ 2 files changed, 121 insertions(+) create mode 100644 .github/workflows/_terraform-plan-pr-comment.yml create mode 100644 .github/workflows/add-terraform-plan-to-pr.yml diff --git a/.github/workflows/_terraform-plan-pr-comment.yml b/.github/workflows/_terraform-plan-pr-comment.yml new file mode 100644 index 00000000..eae92f8a --- /dev/null +++ b/.github/workflows/_terraform-plan-pr-comment.yml @@ -0,0 +1,103 @@ +name: Add Terraform CDK plan as comment on pull request + +on: + workflow_call: + inputs: + deploy-env: + required: true + type: string + +env: + DEPLOY_ENV: ${{ inputs.deploy-env }} + +jobs: + terraform: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Read node version from `.nvmrc` file + id: nvmrc + shell: bash + run: echo ::set-output name=NODE_VERSION::$(cat .nvmrc) + + - name: Install required node.js version + uses: actions/setup-node@v3 + with: + node-version: ${{ steps.nvmrc.outputs.NODE_VERSION }} + + - name: Install pnpm + uses: pnpm/action-setup@v2 + id: pnpm-install + with: + version: 8 + run_install: false + + - name: Get pnpm store directory + id: pnpm-cache + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + + - name: Initialize Terraform CDK configuration + shell: bash + run: | + cd infra + pnpm cdktf get + pnpm build:tsc + + - name: Install CloudFoundry CLI + run: | + curl -L "https://packages.cloudfoundry.org/stable?release=linux64-binary&version=v8&source=github" | sudo tar -zx --directory=/usr/local/bin + cf --version + + - name: Configure CloudFoundry API endpoint + run: | + cf api https://api.fr.cloud.gov + + - name: Show Terraform plan + id: show_plan + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + shell: bash + run: | + output=$(DEPLOY_ENV=${DEPLOY_ENV} pnpm cdktf diff --no-color --app "npx ts-node src/index.ts") + echo "${output}" + echo "::set-output name=stdout::$output" + working-directory: infra + + - name: Find Comment + uses: peter-evans/find-comment@v3 + id: find_comment + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: 'github-actions[bot]' + body-includes: '' + + - name: Create or update PR comment with Terraform plan + uses: peter-evans/create-or-update-comment@v4 + with: + comment-id: ${{ steps.find_comment.outputs.comment-id }} + issue-number: ${{ github.event.pull_request.number }} + token: ${{ secrets.GITHUB_TOKEN }} + repository: ${{ github.repository }} + body: | + + **Terraform Plan** + ```terraform + ${{ steps.show_plan.outputs.stdout }} + ``` + edit-mode: replace diff --git a/.github/workflows/add-terraform-plan-to-pr.yml b/.github/workflows/add-terraform-plan-to-pr.yml new file mode 100644 index 00000000..e0549bc9 --- /dev/null +++ b/.github/workflows/add-terraform-plan-to-pr.yml @@ -0,0 +1,18 @@ +name: Add Terraform CDK plan as comment on pull request + +on: + pull_request: + branches: + - staging + - main + types: + - opened + - synchronize + - reopened + +jobs: + add-terraform-plan-to-staging-pr: + uses: ./.github/workflows/_terraform-plan-pr-comment.yml + secrets: inherit + with: + deploy-env: staging From 056fc5fea03fb16a31092ecd3511ad7f8ed9d5c4 Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Tue, 18 Jun 2024 23:15:43 -0500 Subject: [PATCH 3/7] Support multi-line output values for Terraform plan PR comment (#213) --- .github/workflows/_terraform-plan-pr-comment.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/_terraform-plan-pr-comment.yml b/.github/workflows/_terraform-plan-pr-comment.yml index eae92f8a..ef67e6db 100644 --- a/.github/workflows/_terraform-plan-pr-comment.yml +++ b/.github/workflows/_terraform-plan-pr-comment.yml @@ -76,7 +76,9 @@ jobs: run: | output=$(DEPLOY_ENV=${DEPLOY_ENV} pnpm cdktf diff --no-color --app "npx ts-node src/index.ts") echo "${output}" - echo "::set-output name=stdout::$output" + echo "stdout<> $GITHUB_OUTPUT + echo "${output}" >> $GITHUB_OUTPUT + echo "nEOFn" >> $GITHUB_OUTPUT working-directory: infra - name: Find Comment From 3f5540ed6dc4cba5fe720e0e2c8e3299fcea5869 Mon Sep 17 00:00:00 2001 From: Ethan Gardner Date: Wed, 19 Jun 2024 10:59:51 -0400 Subject: [PATCH 4/7] format code with prettier (#216) --- .../src/FormManager/FormDelete/index.tsx | 11 ++- packages/design/src/FormManager/index.tsx | 83 +++++++++++++++---- 2 files changed, 75 insertions(+), 19 deletions(-) diff --git a/packages/design/src/FormManager/FormDelete/index.tsx b/packages/design/src/FormManager/FormDelete/index.tsx index f4890e07..970cbc7b 100644 --- a/packages/design/src/FormManager/FormDelete/index.tsx +++ b/packages/design/src/FormManager/FormDelete/index.tsx @@ -23,13 +23,20 @@ export default function FormDelete({ return (

Delete form

-

Are you sure you want to delete the form: {result.data.summary.title}?

+

+ Are you sure you want to delete the form:{' '} + {result.data.summary.title}? +

-
{JSON.stringify(form, null, 4)}
+
+
+          {JSON.stringify(form, null, 4)}
+        
+
); } diff --git a/packages/design/src/FormManager/index.tsx b/packages/design/src/FormManager/index.tsx index 7b92bbdd..db0fc78a 100644 --- a/packages/design/src/FormManager/index.tsx +++ b/packages/design/src/FormManager/index.tsx @@ -189,28 +189,64 @@ export default function FormManager({ context }: FormManagerProps) {

Coming Soon.. -

-

Form Approval and Settings

+

+ Form Approval and Settings +

- Work in Progress - Hello, DOJ Pardon Office! - + Work in Progress - Hello, DOJ Pardon Office! + +

-

On this page, you can add additional settings to your form, gather and review feedback by colleagues and share the form for supervisor review.

-

Unprioritized Upcoming Feature List:

+

+ On this page, you can add additional settings to your + form, gather and review feedback by colleagues and + share the form for supervisor review. +

+

+ Unprioritized Upcoming Feature List: +

  • Commenting tools for colleagues
  • Commenting and review tools for supervisors
  • -
  • Tracking form edit changes by multiple form builders
  • +
  • + Tracking form edit changes by multiple form builders +
  • Form branding tools
  • -
  • Guided process to include additional forms in the form application
  • +
  • + Guided process to include additional forms in the + form application +
@@ -244,19 +280,32 @@ export default function FormManager({ context }: FormManagerProps) { close={AppRoutes.MyForms.getUrl()} preview={AppRoutes.Preview.getUrl(formId)} > -

Coming Soon.. -

Publish

-

On this page, you can review the pdf preview of your created form and publish it. The exact contents of this page are subject to change following additional user research.

-

Unprioritized Upcoming Feature List:

+

+ On this page, you can review the pdf preview of your + created form and publish it. The exact contents of + this page are subject to change following additional + user research. +

+

+ Unprioritized Upcoming Feature List: +

  • A scrollable pdf view
  • A publish option for the page
  • From 5c819f1145f740b744c8b7790c6884de260f4a13 Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Wed, 19 Jun 2024 10:04:17 -0500 Subject: [PATCH 5/7] Aesthetic improvements to release workflows (#215) * Clean up release-process.md * Rename shared Github Action workflows in noun-action.yml format, so when sorted alphabetically common workflows are grouped together. * Use the Terraform cli to create a plan via dflook/terraform-plan, which should produce a nicer PR comment than the prior manual approach. * Fix working directories * Remove unnecessary testing pr branch * Pass credentials as env vars --- ...cker-image.yml => _docker-build-image.yml} | 0 ...create-pr-to-branch.yml => _pr-create.yml} | 0 .../workflows/_terraform-plan-pr-comment.yml | 55 +++++++------------ ...ply-terraform.yml => _terraform_apply.yml} | 4 +- .../workflows/add-terraform-plan-to-pr.yml | 2 +- .github/workflows/create-pr-to-staging.yml | 2 +- .github/workflows/deploy.yml | 6 +- documents/release-process.md | 6 +- 8 files changed, 29 insertions(+), 46 deletions(-) rename .github/workflows/{_build-docker-image.yml => _docker-build-image.yml} (100%) rename .github/workflows/{_create-pr-to-branch.yml => _pr-create.yml} (100%) rename .github/workflows/{_apply-terraform.yml => _terraform_apply.yml} (96%) diff --git a/.github/workflows/_build-docker-image.yml b/.github/workflows/_docker-build-image.yml similarity index 100% rename from .github/workflows/_build-docker-image.yml rename to .github/workflows/_docker-build-image.yml diff --git a/.github/workflows/_create-pr-to-branch.yml b/.github/workflows/_pr-create.yml similarity index 100% rename from .github/workflows/_create-pr-to-branch.yml rename to .github/workflows/_pr-create.yml diff --git a/.github/workflows/_terraform-plan-pr-comment.yml b/.github/workflows/_terraform-plan-pr-comment.yml index ef67e6db..b98ca1b5 100644 --- a/.github/workflows/_terraform-plan-pr-comment.yml +++ b/.github/workflows/_terraform-plan-pr-comment.yml @@ -7,12 +7,14 @@ on: required: true type: string -env: - DEPLOY_ENV: ${{ inputs.deploy-env }} - jobs: terraform: runs-on: ubuntu-latest + env: + DEPLOY_ENV: ${{ inputs.deploy-env }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} steps: - name: Checkout repository uses: actions/checkout@v3 @@ -53,8 +55,8 @@ jobs: - name: Initialize Terraform CDK configuration shell: bash + working-directory: infra run: | - cd infra pnpm cdktf get pnpm build:tsc @@ -67,39 +69,20 @@ jobs: run: | cf api https://api.fr.cloud.gov - - name: Show Terraform plan - id: show_plan - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - shell: bash - run: | - output=$(DEPLOY_ENV=${DEPLOY_ENV} pnpm cdktf diff --no-color --app "npx ts-node src/index.ts") - echo "${output}" - echo "stdout<> $GITHUB_OUTPUT - echo "${output}" >> $GITHUB_OUTPUT - echo "nEOFn" >> $GITHUB_OUTPUT + - name: Synthesize Terraform configuration working-directory: infra + run: | + DEPLOY_ENV=${DEPLOY_ENV} pnpm cdktf synth - - name: Find Comment - uses: peter-evans/find-comment@v3 - id: find_comment - with: - issue-number: ${{ github.event.pull_request.number }} - comment-author: 'github-actions[bot]' - body-includes: '' + - name: Get Terraform stack name + id: get_stack_name + working-directory: infra + run: | + DEPLOY_ENV=${DEPLOY_ENV} pnpm cdktf output --outputs-file outputs.json + echo "stack_name=$(jq -r 'keys[0]' outputs.json)" >> $GITHUB_OUTPUT - - name: Create or update PR comment with Terraform plan - uses: peter-evans/create-or-update-comment@v4 + - name: Create Terraform plan + uses: dflook/terraform-plan@v1 with: - comment-id: ${{ steps.find_comment.outputs.comment-id }} - issue-number: ${{ github.event.pull_request.number }} - token: ${{ secrets.GITHUB_TOKEN }} - repository: ${{ github.repository }} - body: | - - **Terraform Plan** - ```terraform - ${{ steps.show_plan.outputs.stdout }} - ``` - edit-mode: replace + path: infra/cdktf.out/stacks/${{ steps.get_stack_name.outputs.stack_name }} + label: ${{ steps.get_stack_name.outputs.stack_name }} diff --git a/.github/workflows/_apply-terraform.yml b/.github/workflows/_terraform_apply.yml similarity index 96% rename from .github/workflows/_apply-terraform.yml rename to .github/workflows/_terraform_apply.yml index 489c781a..9988a8f8 100644 --- a/.github/workflows/_apply-terraform.yml +++ b/.github/workflows/_terraform_apply.yml @@ -53,8 +53,8 @@ jobs: - name: Initialize Terraform CDK configuration shell: bash + working-directory: infra run: | - cd infra pnpm cdktf get pnpm build:tsc @@ -68,7 +68,7 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} shell: bash + working-directory: infra run: | - cd infra cf api https://api.fr.cloud.gov DEPLOY_ENV=${DEPLOY_ENV} pnpm cdktf deploy --auto-approve diff --git a/.github/workflows/add-terraform-plan-to-pr.yml b/.github/workflows/add-terraform-plan-to-pr.yml index e0549bc9..fa0f3562 100644 --- a/.github/workflows/add-terraform-plan-to-pr.yml +++ b/.github/workflows/add-terraform-plan-to-pr.yml @@ -1,4 +1,4 @@ -name: Add Terraform CDK plan as comment on pull request +name: Post Terraform plan to PR comment on: pull_request: diff --git a/.github/workflows/create-pr-to-staging.yml b/.github/workflows/create-pr-to-staging.yml index 5a04bea4..d770c25a 100644 --- a/.github/workflows/create-pr-to-staging.yml +++ b/.github/workflows/create-pr-to-staging.yml @@ -7,7 +7,7 @@ on: jobs: create-pr-to-staging: - uses: ./.github/workflows/_create-pr-to-branch.yml + uses: ./.github/workflows/_pr-create.yml secrets: inherit with: base: staging diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d95981f8..584e285b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -9,20 +9,20 @@ on: jobs: build-image-doj: - uses: ./.github/workflows/_build-docker-image.yml + uses: ./.github/workflows/_docker-build-image.yml secrets: inherit with: app-name: doj-demo build-image-spotlight: - uses: ./.github/workflows/_build-docker-image.yml + uses: ./.github/workflows/_docker-build-image.yml secrets: inherit with: app-name: spotlight deploy: needs: [build-image-doj, build-image-spotlight] - uses: ./.github/workflows/_apply-terraform.yml + uses: ./.github/workflows/_terraform-apply.yml secrets: inherit with: deploy-env: ${{ github.ref_name }} diff --git a/documents/release-process.md b/documents/release-process.md index 729dc1b1..ca7c1ab3 100644 --- a/documents/release-process.md +++ b/documents/release-process.md @@ -3,12 +3,12 @@ There are currently two environments: - `main` (dev, main branch, CI/CD) -- `staging` (manually deployed via a release tag) +- `staging` (staging branch, merge via release PR) ## Overview -To promote continuous integration, the 10x Forms Platform uses trunk-based development. In trunk-based development, we collaborate on code in a single, mainline branch. +To promote continuous integration, the 10x Forms Platform uses trunk-based development. In trunk-based development, we collaborate in a single, mainline branch. Deployments are managed by Terraform CDK. On merge to main, the [../.github/workflows/deploy.yml](../.github/workflows/deploy.yml) Github Action workflow builds Docker images for each app in the repository, pushes them to [ghcr.io](https://github.com/orgs/GSA-TTS/packages?repo_name=atj-platform), and deploys to the dev environment (`gsa-tts-10x-atj-dev`). -When commits are made to main, the [../.github/workflows/create-pr-to-staging.yml](../.github/workflows/create-pr-to-staging.yml) workflow creates a PR to deploy to the staging environment, if it doesn't already exist. +When commits are made to main, the [../.github/workflows/create-pr-to-staging.yml](../.github/workflows/create-pr-to-staging.yml) workflow creates a PR to merge from `main` to the `staging` branch, if it doesn't already exist. On merge, the staging environment will be deployed. From c5d42ac67d0242248936cf085df391c480912d7c Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Wed, 19 Jun 2024 10:17:03 -0500 Subject: [PATCH 6/7] Fix _terraform-apply.yml name --- .github/workflows/{_terraform_apply.yml => _terraform-apply.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{_terraform_apply.yml => _terraform-apply.yml} (100%) diff --git a/.github/workflows/_terraform_apply.yml b/.github/workflows/_terraform-apply.yml similarity index 100% rename from .github/workflows/_terraform_apply.yml rename to .github/workflows/_terraform-apply.yml From f81bc8e06fa58eb7d201e6f7ac53b03710bf4cd4 Mon Sep 17 00:00:00 2001 From: Daniel Naab Date: Thu, 20 Jun 2024 09:56:36 -0500 Subject: [PATCH 7/7] Updates to doj-demo (#218) * Upgrade Astro dependencies in doj-demo * Fix asset issue with Astro's node.js adapter by using trailingSlash: never * Fix asset issues in doj-demo, and sync up with recent changes in the spotlight app --- apps/doj-demo/astro.config.mjs | 11 +- apps/doj-demo/package.json | 8 +- .../public/favicon/android-chrome-192x192.png | Bin 0 -> 7330 bytes .../public/favicon/android-chrome-384x384.png | Bin 0 -> 35032 bytes .../public/favicon/android-chrome-512x512.png | Bin 0 -> 24662 bytes .../public/favicon/apple-touch-icon.png | Bin 0 -> 6618 bytes .../doj-demo/public/favicon/favicon-16x16.png | Bin 0 -> 498 bytes .../doj-demo/public/favicon/favicon-32x32.png | Bin 0 -> 928 bytes apps/doj-demo/public/favicon/favicon.ico | Bin 0 -> 15406 bytes .../src/components/AppFormManager.tsx | 3 + apps/doj-demo/src/components/Footer.astro | 16 + apps/doj-demo/src/components/Header.astro | 35 +- apps/doj-demo/src/components/UsaBanner.astro | 2 +- apps/doj-demo/src/context.ts | 4 + apps/doj-demo/src/layouts/ContentLayout.astro | 12 +- apps/doj-demo/src/layouts/Layout.astro | 33 +- apps/doj-demo/src/lib/github.ts | 35 + apps/doj-demo/src/pages/index.astro | 10 +- apps/doj-demo/src/pages/manage/index.astro | 6 +- apps/doj-demo/src/routes.ts | 14 +- apps/spotlight/src/components/Header.astro | 8 +- apps/spotlight/src/context.ts | 2 +- pnpm-lock.yaml | 1382 ++++++++++++++--- 23 files changed, 1349 insertions(+), 232 deletions(-) create mode 100644 apps/doj-demo/public/favicon/android-chrome-192x192.png create mode 100644 apps/doj-demo/public/favicon/android-chrome-384x384.png create mode 100644 apps/doj-demo/public/favicon/android-chrome-512x512.png create mode 100644 apps/doj-demo/public/favicon/apple-touch-icon.png create mode 100644 apps/doj-demo/public/favicon/favicon-16x16.png create mode 100644 apps/doj-demo/public/favicon/favicon-32x32.png create mode 100644 apps/doj-demo/public/favicon/favicon.ico create mode 100644 apps/doj-demo/src/lib/github.ts diff --git a/apps/doj-demo/astro.config.mjs b/apps/doj-demo/astro.config.mjs index 5dc1c0bf..662ad374 100644 --- a/apps/doj-demo/astro.config.mjs +++ b/apps/doj-demo/astro.config.mjs @@ -2,10 +2,14 @@ import { defineConfig } from 'astro/config'; import node from '@astrojs/node'; import react from '@astrojs/react'; +import { getGithubRepository } from './src/lib/github'; + +const githubRepository = await getGithubRepository(process.env); + // https://astro.build/config export default defineConfig({ output: 'server', - trailingSlash: 'always', + trailingSlash: 'never', base: addTrailingSlash(process.env.BASEURL || ''), adapter: node({ mode: 'standalone', @@ -18,6 +22,11 @@ export default defineConfig({ server: { port: 4322, }, + vite: { + define: { + 'import.meta.env.GITHUB': JSON.stringify(githubRepository), + }, + }, }); function addTrailingSlash(path) { diff --git a/apps/doj-demo/package.json b/apps/doj-demo/package.json index 853ade44..06e607c0 100644 --- a/apps/doj-demo/package.json +++ b/apps/doj-demo/package.json @@ -10,12 +10,12 @@ "astro": "astro" }, "dependencies": { - "@astrojs/check": "^0.5.6", - "@astrojs/node": "^8.2.3", - "@astrojs/react": "^3.0.9", + "@astrojs/check": "^0.7.0", + "@astrojs/node": "^8.3.1", + "@astrojs/react": "^3.6.0", "@atj/design": "workspace:*", "@atj/forms": "workspace:*", - "astro": "^4.4.11", + "astro": "^4.10.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-error-boundary": "^4.0.12", diff --git a/apps/doj-demo/public/favicon/android-chrome-192x192.png b/apps/doj-demo/public/favicon/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..0a0b1e4ee6fd62f2840923c34997e0efbdb8e622 GIT binary patch literal 7330 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 literal 0 HcmV?d00001 diff --git a/apps/doj-demo/public/favicon/android-chrome-384x384.png b/apps/doj-demo/public/favicon/android-chrome-384x384.png new file mode 100644 index 0000000000000000000000000000000000000000..bf6c191ac6695237fcb3bbaa2b408cba6425fb93 GIT binary patch literal 35032 zcmb4qWmKC@v~?0JNJ?-BP_#&kJH>*vP_%}-26rnKETmAp#U;=dY0=_P++7RBU0U3W ze|his^ZvS7D=S&a$~>7fGw1BH_kP}MYd(h%!H56=07O+q=@kF~ME>^#<6}Sh(o@}n zeWCMI*7JPrV&my!?rsf`w{o$tW>$4Fx3zv{ZEoe~)@LmZ0HEKgD#^d`o!xEn^R=4x zV)EsG6t^Z(5p@!HGIZQicva~*qiLlxr^!%a9KWVa*+{?4v2TpnSEB&*ZEAv+n{muM z?D!T6H^;x!0X1GFa>hp3m&DR|sm5Br_s)+_OY;>HCREd0e`K;hf3jHet#*E6{=x+K zHo~L1OuMjl(Pyd2wsGs`fu+*_=|Qi?S<)=aC-?R*AuB6uo`%w=U(+<}wlVKO&pEYe zpk!n*ASYu#r!+z_-utXK$?%OYzr^hi@1N@|6$Y&L(m$D0V+Wwo=x1@4aRdB)yULZ4 zK?cOBEjPS$&4`i-=uMuZ&ZYH>L&KK;C+m4+mb1@DrEsPETH}$tcN8v$+FTG`=1!@&l*fZv&|d zebDHsl%PK`x=;G*3zXn#!oU-EqIvlc0W(%1pD;-^B~WXM66V$;VfJO<#{PhvHW^t7 zKd-BGsKd=~s;+HLMPe53!Ch>;Qa|sr0hho0lH$)csXs}Kx|$h9&}SW3|K(-PJIf6| z?|w4DGkN@($e`VVhS%);=T1$`Ue0ZAf;g8h5*L|uNx;EjoArC;Q7Jx|7KH0%vJRY? ztJ9k4tF|y}-ksq6#~se6RBY)%`p#wBrMa<1LF>IQ&T>#Wb_;HD*P99C0V)7Tp{MR! zU5_5}T?z3i`E8V{!NG$Z1V-(rB*seDEi+=q7hV2k-HTZ%>J9_`FUR-xWnu^V3CJ8W_SSU!X2BX{hKu1>#`=Hq!w675-Y6eha z5qKV`uC)IA{^o3C#Et5}CABsy7*6wZ!X4t4wZd^u;uCdZ0K5=<$shi=yvK8>c z3#9}Nkg=3=$bCIgc!J>``L4<$pz%5b4OU(;B42F^-`M*!^vw;Y`sq~jkK=*I4Tapi zA;%-l^+Y81g;lueQAfJ#&6i}ayu~>K-GanbZbivX0Zd7j<~q1;9RY8hGxkYJoV{5N zcyGN?nNMpy25;zUcXQPA00Zu(j8)WrLCUu#iCbEI6aB~c6(=qvxF9mJ1pRA*MMQg(J;(NKlU(MAL{SNXGk;k{d&1faFJ z8o#kpeE^Ez{dA~IfCIqS=CUhhr_wr za&+4zw2gjs2S)(Red~Y`-zp`5&Uz|)DQKZ&Ch;C!{WM1>l?!uUb z7Ge^>tF(H+!!yH?(!kp(574vQUvtAHt(=q~ex80B9KPi0Vg;lFCGw*;G&aGTXG#xU zrIV}AlssocaRG#YctY$RL0{m`J z-QSY_{Vio#$+=0nU?ojW#1#Ix5SpaWeqNo@TrV9Q5D5v_Z(xl8SW{4todjzL1)HPv zSL|wIlm}?u``O6KdN&DV_!>xEbRCAtKiE}3RRPT8y?H+jnp5P|?YJruAw|1hsr}fX zqB8eTxpR(LI0_hG1+4qEh4S!p)~wg}L=fGME1!DOB>RR(eBT>GVD@FR(GQ|BbBw+y zC{eUs{4J%wczHyWr@;p>3H37+eSS!r7sBe%FQWT-T4+$78Uj{bkdn>WQZ6j7S)6IM zOvHr)Ph$*6vQgW#Gk@CJqXXpSy_l%pQlJpsrh{K7L0${h`Po63o0_HuFwuN(Za9`VPMeSGd`VV))AM9LFVDO0vMPT@a|7^v`e1Ob5};5BEMe z=d|d!!{tD2PR?=9?bL4RG57sSoc%G?(07L+js+PGVREv|u#evsc9JPyL#dI{&tv?kkerUh`iW(&0d5+G1$td|L2s*o``-TSx-37+ zQYj-M`Rn+b@ozWz+??alwUW6k4AT@1_47LE!CR@M*rDMq9s~NL?|VK@<$U2z=IXaF z`zC6Khr4yZGeb-sU)qjQ1s8nhoRfY1itac_p;h6q@fG;vdvR!tP~h>ejtQHgnf>&= z6#Cxfzhi{CZ_wLXEoVATv{!)`>X5GhfcTJvm_>KRZz4k7%8H1^$rp0sysh13W$*ea zU_e_K4e#;PDAhjV=GtZ*oE|kYRl*Mi*M#>(FUyh5 zJZwtdPd~pdpR69du&h?RFkM*m>i8_&$$@_M$rrlE_9DxT)WJ41x+>@~$>Z-}UvDef z?#=kk&h3DSq3Lz$>80PY7hNnr01T)8z!TE;e0u}c(&^4QRuTfy7amRB`!wTeTG1mG zFH_w?q25|5EafkXLlKkPugjWgt$H$6|Gjp*l-?Yyu-{V+*Jg@leXa=y?Ef1+XSD1X zy{E6iKfD&t;U1EmI=Zf|YWB4#%*#{~?_pob|{>gC-zqXs!ZGwRnU zo(9GVpd;*DDR^|MMxC5uh->Ksj+aiBFYJ2rl}ei}TVBNR^v{T#>8Bj)%RkQs-kAEy z>)(R{8DDE6Uw6>Vhy(^NLXFC$)d6nwtbn`aeBl>~ESh$hq)K5oQt|kl0Zw<9-1=Im zMEAaVgneSj}yOuU9~0baq> zvNnilf?Cb5xJz09G_fN`9JRwJc|}A-)<(L3U!g0>n7~-6QpGtQH!fW9;TB(QY$QD* z5W^Dwy6yF~CM(dafUTS6{rnUiLqnI@f`U6o?hn~fsOE%-c|Gz8I;xKXLj0DZ<*PDu z`KIod(;fpO5dxiCF)pqIxLIu~o6-j#b{oz7cv>P|TaC2d)rmGU&SgnVvNFHCD|&oH zohP3ke0jNrB&)GpGbpDGTPJ+PztM1HO!5#H0d9*;1h`IE2}t0^zPF?+ zrQ*iz@3cYVCj^~sC<1=_&Wmu?^{kf7eOk*7-t-VwR79F(jP7QnNNHUi8oE5_nx7W{ zGM50hTOaXGRPxm12fBHSYbQtoy~X3XIpK(rE~UF|7_Hw_A~~pvOI-vp$dtPDBDIpj zD-tYXS@UbpYZF(%M-wm$u`(e+X^*(C2kpgQ5;#082a{~DM%+xQ08;Fce85h=@FE3}5?2lQ-4CwVxk4uf6bau$l%A}@nodWJ)ClIS@A z&0Z6K1hf|?giRQdhIB{7=@k$Lh0D0;l0bbtl|0_0#xm1y6l$yn{8t~W?pPMO^hlakrK|j`)q8tqVYz+UDw@mH0$+7P{ z=7Rv+2=WWV6}L<40}exqU=@$@yuMH^DsDy`=<5oll+km^GUAiN@)-Q?tS@Eccm{(N z@sQtg?fQOpZQ-s*qI&y(ic`W^gW&(F1C~Snyn$U!kPb5hU$r@?NIm?j${yWm5P7x0R91LEuU6Lk;%ij!UJnv@*kWc;t9yBtmg z_~iD(^zNe>B$TV?TEw^62|H92Cdu@vUXrEP{NGJ^q2rI6vYDe$jm2odEO**Hj6U?k za!fgZ*#KY>Zma*>d|BKOQgv6(WUm48r7eJXL7w3DPwgU4pO#nr;ucB?s7egL z*Wx7;oQOA##3juGznEdO$z(~QYgc9K*&^XQi__^RPn(o^_5j|@eo(=X#$lPV8~8=O z_(N}`repxK_G6{xomkZKf~`!+%tQyLeMGA0#Bj{|{P=uQy`majWu(c@tV=Zhk7}yT z8Eiu{6Q7LC^uIyRPim9BF7c^3Nc}xX4fsBP@w6`R?+YUFu=|cL`9<3bodzwk!R2sQA-fY!~^Upa%?&f9lfdjQ7$xE7hORn60VQaW+ZHWgsk@Z zkV=;jUDNW9C){`c1l%Z1r-m-Wkp9NN`)3Pv zertA^Kt2`aORlYA-Z!@1OS}hO<#zPbKcCKt(V8`_&^i-dDDypJXcO(RZLAG4y;=Mz zb?U!2y7;{FIokm(EZr%SGyCnK)xA99l%Iu*5_rf*ANP^bW#Wxw#%e@gJ&b;-Pm-B7 z=+D^w@AaQ6BrSZ5Qk>p9o>EYcrefM)s#H0eJZk-D1Z1?)IQYt&7QaCQcN03z&p{@l zWP$+m2EAN2h*7(c6?(QC)2l3H5^(O@I$HeiX-(Ip1|B3~UW~5Yvi#Nh9q?n-e9KPO z-dvbyNY1;R5;&hxbg^$A|?cUOsZ<5a9Oj1k9W*`T# zQrU`Cqp2$?5#-VM_&?&250#^jQw(@=LJzc`B(I@7N>GeB^nJHuf+f?Ve$y%%Mw}Ku zqdvBmRX};3DgMwn!Z~Y6(uvvs_xo%$vRXfN=S@_0yCPsvv_7{qH5f|Or{ME%+Yqo+ zfAps4rK>=KS$y^SJyl@uqlam)3;Zs4a59sB=CWiJZV9l3pO>ahCGr^1rRGtLlOxFI z*g)yND}M}-j(FpTrw@RsWB4f-@C-zc4QW zXQAf~&My$?AvHh3u2Uxd! zpXMh$*WdiH475pfiJq?dm%!mwzNeKUKDl&1>A@?TAYPZ%A3G17Dfs7&JZDd|Vg`S$p-$08uh@a3H_m6*!XvM6< zFf0P4*_6!Ip_mcfDK+rv9Ei)>x?jgebrhas&b_#xM$%b!N6EM6XGE4(ul? zVEC!!mvCE|Oj|0+J1+VdOx`bTx)?9Ft2*heVPS<8C9_FxNqga^qq?q|X9{K>qjVz& zW#6iqm}LUdnM#7$i#we`5wYd9kj`hj#@td;eA>^qnhS>&5wg zcqrH*ZCNcgy~5@O za5K(sO#C}Nnra>Y#}RP)pJs!>f-}ak9k_+>Zescc7hc3vifIM|9$Jj1yh_wtSKEEu z9+9N+Z{1CQ!%KOEI`3qG|B+Ibg4t5Xbe!B(?^(}AfqH=FzwN=T^A4%fqLc>*t{Q@{ zCu^r(IG0<1fAt}HI#_Un9lcDIc^=;W2j9NEQB`j{j2F<{;?q+{gEPE#ET0^`o*cW` z%U(8^pY4^?Xv98XLARYp9q)|kG^>n=sF}RrshG%RH#WUS*xB%ge(ZE@2>DjrScf+29UNWyndu+|A>$8KP&u_ zeCq^Ejr&^U@DL*%%91-Gb794c^cx-G+$8)3ABCc9(N&MwM3hL4MSf4+_!MNm;<7p= z#8XSMPV%fS876%sqGZnZJz)Qbtb$@^UMMXOZ4{r`@8bDd;$nbZemgP~*j9ep3vuW) zhzz|X`1NnR|0{3(3+8#n2Di5)BH?}s61jdf4&(=&!b9} z9#S`hVc9j19songqKRJB9ggZQQ-6CNuJ|!+kWbbfhnI*Hn&q*5)ISrMt(TDVI9edM z_`p~$nGn|Q`Cv*7xq&^`pRNVPqNo9piNu0N!iXyfWK3M%@>jq!av1AnK+iAdQKfDs ze_t27k!sQ^-&A>+7aiHRZ8I`Gmo=G9ex93=Wa(5=SSWoei@YMn$aaIY=~ic@FD-%) zDc7`5ISTbj|H7#AnvYeB`Fqz2DI{TNBkUIxAG@TgUp2|-sP+xRm|lUA4hYsNqR{iH zFI3t#O7xmr58p8?cGN8tIQtl`vzjkrQ7X?yg)4)29SANMW-p7MX-qLf1Zl(0W3B1S zY~z!^ca|#_uAb6RC+T0>gRgxN2e^KU|z`j=WHKMa!(xOd}agqYtE4+xo?X6XDn|H$^}48+)nd zr2)t~3dQx)z|M%3FPG$Z8{YM*h-3GFJg3Qji)p5Ko4{>F+Ja+ z9Awam68~^HQlV5uItA$z{4n`E{sTY+cLejtHXH@uX!#~t%C}^=a#A#^yi6){dY)$i z2%PK`e*kOWJf2}6h0dxDNxgiuA_f+A6v~5qKG}(rf0?46PPou<)>F9s$90+46Z1_d+`uxX{vnZM0%eFw)|hVM(BV2|)q*S05a6=L9;gVHep?zgk+C zfrTz<&lh}I%S(v|!24=40B&3xkZ!zynrW|EcA?-?xCwl?U`3__hY z*YH^pXht$uo5P~gb#C|H*x8p2sM%OS70{##sN6#BdQG4D(E z(Wip<&)YV{oF@7!-s{tSa;*I^ri(!D68GTXLdJ9gD5~yb&q#KF$foKm&beBbPdN%~ zAy*uLpuf4bt-+#gZ@00Ky>1>Jh672Ee5V@xx}V5|fQTj#Pj-Jn$oXef6Dc-h7=j@{ z5!}Q6#Pzoh#WaMtC$@K31j%_V=zL`dL_+l-w{P>D=tXcL6>g(Yx_;%n1^D0DwdlC{ z!|a<$w8q7!zhWUH5p(t)^&#q(u^1MjFcjC5q2ROYIUhiWOP`bB5|$%>l;yzJ1_ z!bEfHGoAGcPnE;e+AucEdU)n1xbhj50T=00R>@%rahJ8Ri(db%_cPRc0d0qKX2>&? zW!1u1bhO!bR}*3%m)qulO@2Px7qhudT6v_tk&zxl$gTIbRMHCt$=-iw>HjcEQiC+| zH3J&-uDVNXr=4#vljwIN4+1kHWLKk{cXx_wmWPx~ybffZ_2`AhZIm$QHKDROzib)g zM;pdz#G3A#+jb62A>)i(-5?m_4fb*Ur+ur&H(8>aH#p zezQisu#C0cImfdt+S-02@Z+uNvAyZ~r6bjX}h$Q(AByvJ-IUFXeq6 z7g$O#1LQ_u$`k%7*tI#|&3itCYPCEJ?z3%Q1 z95f1Tz|{)ACuKu`#a)nxe~fnoW3L*(H@Vv24`=fV7SA4u;u16ZrRB$R3u|$d%4L&@ z;11wH%qeTgSd^75e+b{h!s4~^%gvQ$@oYW)){!W)8V3rI@WAFPdBv(P=W@cQAZALC zi)iSJS1XkzN~!K|ogK(UI=2-SX>qk3%vYX~gR(ux+Pb2?H9@AlI#SZGSYHO#TV{HN z4-u?4S^E?2)i4t9{6~?CiZ_^z`iK2Jc0%f-(5C}{d3eu5{kjBuFx#J19AfL4uNb8e z?>dchuc2-MH$JLRl&dVwIHXf(B<**E?VWGWaQC~IA}=xk5mO`zX{T2!ohpv zU<6v)?VO$vva%Bj)5rF|xAI^f6&CGB=dpR*Gt&Y-vb~8BCgF4K>%%^)?l{<{l^&+x z+Ze+7=6;QFEqX^1qp8>9Kg3lMe4f=L)q1+LK?(_pZ^t2oB#hvRDvUz&?+Osi3?Z#N zea@NB!qPU7sB)AycAjaGRvtLj`akm)5roK`ciX(at%4i)>DCFWg3TnpZ?IK(zt}ts z05Qn~>fEwCgr{rS~__9h5hcEX(IItniIDdn6^ur$}tr zRLbLkq2gM?_}y~Ckw8*<%4f?CDi>LMN#K;;b;vNG%0BU(<84P41-T^nUBFSZ~Xey>9pvfVa+kWev6jux=D4kCL|b571;$Eik*OQYw= zsDsdiW4XRKL1rGy?{bpBQUL=dr>8Pyul7>02&RRF8Xmbg(}**8XPL*m_oiUs3%fTy zaeJxt*2rT`hvAy7R(**pk{4lL-xhwdsHjm-H@~?NBaWMUw|CmayL$b>_Cy)b{5KVLP;AXg$=Xt^66g$z8W5l&HU!4#%)OgTWN0Nde4YmJazqJ3Bnbn&U(b&NVWXm`n_d(Nwa$ zudkxwWQ(ZV)p`Ys*HT^4|EC>_I6evMB9Ysd5{RQ=vP zo47!}It(MAcHxeDI^D9G7Ww%2wMAb$vq5dt9Atg+oDc@$7oH!5s@Tq;4c4>M!sAzqe z2|d4j*kfPO-f=5G3SFcQEAS^V`c&B=w1_Xuxz#uwm(ua=`Oi|50RwFf^=etIk5Mk2 z>Mb3rQa#%_G1lPP&UM`F&my~IFi8*4hnIB2@k)hU;v6L*V)XJ2f71vy>Nb}*zrC}5 zW7z%d@2yQgVe2MSXW9D^nTnX|yA52dZ0k^#2^jJRPHRE8MphQ^Rt5~Qp?a5u3vWAh zaY@~VtG*$GS*+)>c#eRmTRYF#sHq#a(g=FqYO43mx-9I0AN9;!EP}AgPD7^fBVV21 z`$=JrAh(UTy-xOl4yzyV^#OrjLY<24CR_#V$cWF+8KYMsPq$D&;r7zkm|P2NUQy^AR3}T$`va2& zwX&-)RNN?U;IfwxG7Tt>f1m_KcZi&8(oU(KBwR10TBi3)O0+b!iO0dg8|l5_tjD;i zZhNc^X4VSe>g$WNqQKd#Ixk|=@XpwEm^97d7j;j%Qd$ zH9G2O$W{R?x+lzAV=$K?3PYbkSSXqBGXm}=VK`RTQ;|;VSptI-n_CCLI8Ot{X}&-l zh^XA8gWSYS4VxkuLB}(Ga*mov;WuP7TiF<)*8;2^>bi2bt(otd>E8YwBa(@=Hk193 zMUN}6D1)@!b!$V$ZS-sb*mIO=Yj)DPe?E+f)c*^i!hqH)UVzM+B3c7OpoJM#YI9<- z!xRDz`E`dAHwwxvBbgNO147Wj^Z?t5&43QmmxGI$!Ge4x$lQ`g0%xZ+&?Nm7~Jl=70dld{K7w}fxo)r>b%XfP$fiC6Cz`B(+V$@ zN1^)R0|IcYe$@4^{K4#3wNjT}t@!KqPv_{dGa5RR}u0G_05IbYts z9-(azElPj_#)%L)o=ZCd2|8Z;ke|1|3WaM+%Afz2QMV&^Xr2rNd%rWo#L}+>n^f_>5h z|DE{M`Pbg^Lz$&?2dQ3b{zrp^hn`w)9jjhT^Kfi_P#-xNni!Ei$|%SY?RXZyD3?bK z00Z@)CNka=f1EB^3zQE-{lY7}P_`~oaW~}Y^3JoH{s94_NBdS}3FlN}I{x&l7iMk7 zsrGmm4K_EaygxkWU9C6oWeoG=5^r~X_j@m! zE^Gpx=dtP6D=(kyn_v0l`MqZ?DskOORg+^Qq4IMXo|t0`#K>r!%oiQ(SF)ET`F8)K z-IMKkOmF@)Bu2ui>7qLAf#qQ-|BhWVqa<~w4w@4n+LTKuS`48CN@(BLG0POZCjj0vKCZMNUt|ZM!h=>8r$c`vbv%HW(@11Igykvz0>a*j zqIxOD?3W6abweK0NKRsLUf^vQ3Xls)us-1KUNTbzpQ365#K;1%%3=P-6H@yD8}9to zxDJ=7g>LwhG9OL2bd9vBCi1hk`r^r+@-vQgZ`Vsvm&^tSMIn*0;NyL_84UN#@Z)bI zX<9%QLrp*)I{xdyYbR0Tjx-9SQ<>AlnQkIk&Q>o*e?FYKzeMTC>kv`WUcHX9uOSy@IV& zila$$uiqVdjdLuvi0rfSAQixe$G2D&ye5<;CLDEWeWjQG^xG)3$X1UDfqsMX%v&JF z8bqdDKED6vMTE!x9T{|=FWmjLub$^) zi_ULk;Z*K&z!ctZN4$l=1-L}Yo5e1p40^6g`l9J>)yqb|fnPq<>7oG>6h88q65+&} z^Zs2W-^Hc<#6J{R9%pY@Nd?Zs7d*BkM4lzCedo1PgA{^G%3BX9jt z-z2g{@aSgU_HzHZiy@a@Qu>}Aow%$YO*pij)iW(OY3l|{rbIc3iN}xaam?#vV6O)A z;1eHx`Z3xObh3msYkVE*z87o4gMM9Vyi`xEdTW`whHRH^tp4|bcwmqKL{C2(?0{{ld=_A%sat&VK!98X1$jsnvO3X zW+$x?0EB~6la|Y|j;)qJ_E>7r3+}O)5sKJbpgnk@W zmu}2pml9Fhy|YVsepdS2WhC*509Av}@ARKWst4`lT$(>#jzYKb*2yAKW-L*=p`nyH zza2^9jNtfJ3mI}WllD~lG!kCKwItX)$XQw2nh9`8dFCumtsj zg8*s@_OZFjEZW4yb;}?Rsi6ag915ft&dRZ5xie;xcB9ujEqiDkzdxG-Fc|C*Mji70 z>FLP9rSzNoqB&8^XqzbBhSj%}9BwY=HL!rMO)k_PQx5qTU#m@woXje{|5#S{-hJy; zD_*ERIH%hEU3bzyXKwVS_@c_HB~JulK5dl+tAS7b`4!6>-Nk%EreJ&!Nk6+&;~K9M z`N#N_I*e0{?SvD!%!2ExF2wZu5jHUNJsD|4AL-HD6TuH%fP=d7fbBFH*|^*-Ayx#~ zMO+8VP$fCoW-rYbOUL3O!-6jN>!4^&y^QYsCp1M9m@7l6)>vpi6r5XkzJg1w>6(_t zGAz`}_VF35`Sp~H4<-!|H<_%mG;uTtaw)P)x{w|a%D+}+9_h++B08z7Fc7FoOuB`G ze~n`;<7Y#IODX{72xMltSCY+anKUp%C$?{ww;dv4F$(2)78-S*9q1Tj6lCvXB>5yF z0%4vebKGR z77sko%RQI67%H8wa1ql1+V5A?f0HJgB20D(cD$2$_zWnxZ|2FhNpH6$Ag?Gua`KP_ zfqqK5S*EAml2M%TPZfj&+u|W-#&Sw_1e>E~SIX$(ytDRoIWYmj%a6&+A9%0CX&)z8zO|wO&f=c;p#D4PR zY}1*NT+55n9T^Pti+c}^aIvpm=761*QO<|aynbC$nUzrmw&MOeNW-Fo4M zx}(xTch$znTuKV0HEqVfmKsjD4)FKQky0Oj7i4(HqdZ&p7{ev8^*U?UTxv5`l7viG zLYX3}&(%C>F+x{}Dyl7(e_hml zomxloV8wH91o-CU3<6`7!to(mCGn&DfaNDqD5Uxxw;xS9)lg zZ<9J8?9y0a%*~WZ_k;BZeVSlA4)&?PvJL|a<;%oxXAJ%}bl#`}PUXQ$3Lq@XXv5$$ z!P@nUduEoN$zy>x$BO+peQv7pqm_;`=IWXq_UXR`yQ zbiv_c@+b0Odk@wFY1Sw{cn*T#+_#0vAGdqAcvxc#Ca0 zX;#s9Q?)a>Ay_u7o(&7W)&7f=qeS3MX^IYz6^ZTH2ZIE1S$s)4ANVtN$`HcxToK^Q zrhgG0-XmleEIyuk9~rrhW>CTu>aIwqrHMtCWVaNK&#-24 zt|x%11m$9SG=^nnZ)Iz}`%x5yp+R$D*`gfTU}e?2<-*9-hiTvQIQLN%Zu2HoDJ?U8u%z zPTHIX%;f_ahJ+6i7OL&#%*$d?@LTXt@Oz6Bj-f#@?xO@b!f1G1)xUuDuII!TjXB+` zWF*#f0xLEgi{RX+o-e+SFu7@&S5`UhQ50Ro$o7b$idoX@K)W1m-&&BS+PTA zrTe8m#{XKWA|5YQr2fx%BAz1N8^_vwif$eb`hzbd%XXaoYzUS@(TXQqnVLHfuk-fs zL=?ChaLup5-p?s?j;#OnqY+03#sg^IVe3dJsyvny>m10OE~*~WlRQX#>h^#f@Oc^E z-m@4GiaK;-BNOT52uC4`>fOU72ndlc^ZKO!{}#j^XGKy7aK|dz-2)3sn&oHZ2$5u! zpmg`;X$@y)ESc<3iPc4q>vO>{&{n%VA?=CiTv=A|pZT3FQzHFSL%&oFt;y%u+k)Cq zqlq_@zAov=dP7Z3qTDnt)*3C(0#bqKMNi5EJ3Pbs&426Fju&IqPl8CP=Oc=AT+1A~ z7J5D=M9>;E>us9I5fMgHhNTU3-@QZ?pruDZN;@D`KEN`Jl9hWYd)By z?kH;V2w&hMmnj-^s9m9Z9cba_y(Xm^o3*cXc886BA<@ z=@Ls*qw0Dt>@3#sg$#|c4b>2#-aD)i-@Bj)!Wtq9_5<7$f_T5-b^rJQn&lJMuIXh` z)I{>FvT3cyg|VDu3SR1nKOhp}d(Kg*p+ZzF)fE;(ymZ&Mf=~XCk71>b-$1DITy%Zp z?J5yFKjy^ zUPWVA^njyK-g=Mh)cfx7>q27u=)ccfCJLRT2sgDnvDYQ?lAc;4D=vQF|ip9X+g*Z6*BYT=4aE=#X?5O!7RSqv7R5;3|LZrXf% zgLf$!)A6x(ny|G|^te96b#Gu3f4ngr>Wm4UR~f!jIIm6F8JshY@VH%BfUBEww!WHZ z-F%3{xOG_igwxI&I}VsT3tO&6O+rzlbs^<$m`=EN7_bcI0lz@=y}ws^d1EPSH!L#^+pYFp*qU>gvapBw%&pY# zuR6wQsT5U~3i6RmOY$|$O;{?nY?=rA9AD(!+=blO&JkCC??!MW;lV$K1XPa|| zP-A@>2AT+TVKkOXru}A0zzAbK-`~tBGsgQT8+|M+Uzy4S$P3T`griFPF5gygJY}hR zb^qmw(yKH2sDf`8QXYbcqe8BX*S_=op+jdaHi+ z;VQos5K4u>gHz(AjtzZz_iPlZ_a8$&1%%~wQI=AX5d!i;BLJj7B9wuHhLxoHeB?MV zTMry-lfml!0ggj~uaa&G9b_TwgM+ji_~bU?P!Az{$9k0z^r0J}uOR~~lJomh-UoM*Ja>65T58OshS?UZP96beQZ`F0j7yW}Io2J=+Kzu1(#Z=e8-rLm5{#d*&+CK-ve27)W@A%p zvN!SOi$b>Xzh2_f>l^_9vWL{DPXK8m$;Bzhu7t@)zXs6%g)%4m2lqv zoo7k)gxXBk*!hb=JSKBl4x^{_p1jAfuudjNLa{9Xyz1qtgGXd5qX?Em_x8b;S3Jdo zS=jlB3kH(|l<0YI|1#sk8s2})`Po;`hYfhUv5W5sT=8FZ{hVzW0YrX-0lO(7U`F>w zFCm+AR$4_jl7+!R&)IrWPQV8KvDJC{s2*0OEgB4NEvj-oJzL;GSY3_B27Hk z0wED*#mI)6(9>(bQhf^M|4IZGEi5!u4!fp63Q%;5tZoi5M?oth9p#>oZpEbzq8-`B z@3*Csn3v!hVE*4ZZpvF1(VYNbhN&keBM}_czM&}Ws9DSXU`R#Ge}?BgAiEtNeD4=q zJ*^bh)jto{BerJGWtn}ynLv!j1&je+t7%L=RbP~_q;VG44v_@P8q_V_is+C2c2Cd| zkB@#23y+2K9lo2NNG^#cQ&4rl^NOANL8eh%!`_pK=sWmBOv?8#CFik5^$J@*?xND^ z*UP^28-wAbnP~2(s~I!VA+UXiTslX=jQK9t-P@7_Hb=K?p0uvPS2rAPO)438**T-D z3P@;S;oh08kJjs4pC14;ewwUsqmk{)V(KsXQCRm_T>!R?i#IYEaS7j0ySU^J>FMIkdc!m0~U?2jq=2)ul8N>(NL`Kt)k~r^LK+a&Ah9? z0@*!yL$*8C+6Q8K^{p_s>W+i0T>QWPsAig;QygFy_brHd!9$=wI%jC+~{p*|0nM<=2rxzA#knN%To$%E|?IEfavH+&&WJDr|Z! zOQFb#b;qDkdJ8^%i)k_=(qKz-qneEW*%4zjAcD5}$ZDirwVjaN)taJ^;BN&R$Q<3% zs6j%r_Od4R0*GaJ1k^xWn=kiKln)Mz2WZwmI|$I-DnXott6LhdnfrJM`rjYdTE3b& z!?Pn)c>^>cpvzhavID|MqP&X z9`{|!GMcxXndW@2UC!Yj(kkt9dOLdcXz51GagHyd)zHTXJSOkJh|kKpZqdh z8{)Wewf;7{E*b5?y|}U>?FJBdm0g#!ys+lD_rW+r(80fY%VCaDgv*O}@V3Jx!R8`C z<7$h{z->}S$Fp6Ut*6Ml;hOU|v3iR<3+A)NM}qQtT!8xDYOv!`DkUHWdy}aVpbbO& zH?IocA_4BQ;Pz4j`NWLT9rUAT&cl|ZNi<*X;1W!`>wMjmJvRSPn6kz+$KinDMSXH; z5NeN?o5VmQx))DLr1<0c#=+H4Jq&R%VSh!yhv6SSDD{dBxQ-?6**Kbe#t3WQe)bp! z3x$x1gnw~I+!E5ViKfG`x8b8Q^2uAw$I52S!8vKh_#RAoa@5TNEsc4x`umzep(vFq z|JU-00myvPdL$YZALM@?`f9n|JirJpsWNPj`up~KRM(qN4rc26Qd1rw*rUP`iTZu~ zuWP#6?pXpJT!j5}V}=+coJ~-%kazd}B$8vo8CCj?pa)LktNJTI2KCD(a5)l-Y$jtv zB2dT++%p}^NFZ;0SDQmh;i+LC@JKXkCu(DgVbC_&d{~uA;{7~on{!ewPla}2wmu+iX9I|ba0GC!xGsD=3h21=2k6v3us zd@>wSLDNPKOu+yttHx|SSx4H*^KrTmyL$xP&n^b$~J!-zd#j22w?dkHN>kw)p3Ws#ub&ZOQA1>8_zkcLei-_7#mxw&YJu`nNCm zI)a~Sqy9U+raO~*#1vN!UxS@nUUrU|#V#hy^hTL)JmKJ!kf@8u2bd9lb3`zsT#Pc8 z(cbAfqji6b2Ueo8oIVTvTd4l$hOiERp#wBLe3KZDE|x(mTHZEZM?F@WT-ylg=4krY zQw=wTC+v>^SmK^T(PXQA5QBynVo~znkt<}mNDzo`bj}HM{>?+;e!&|^;sIuNfN{tG zhw^>KA31a(i8yg!o+1QwknACR|0NGUvB17dT&+>r@l=x>QD-%C<`{R_!9L4Q9DsxfH;-VE%w-o;)Ge&huxZQjA)j2>1lq%&s-?OEka4(wRyOHR+melWt_zXrk66 zFZf1J%cT6P=}TcATc*ub$!gHJn>hYJlPr5uoeWFM{-9k3Q$wDe>&3g&(y_rnXrGs??EsV|u~;aIHlQ0V!b6m#Le?<#C<3 zZ;g~(5e`2G%#2bFE%hw+Hq?+tIwtxiPf>AuM}N&$8%`7%RS1}7|I}sTtj}Pz`(=1H zcMSPGo>hTty0fIxo_IwA3WVZv-?0=gwPm@iUK@pn96mN9q_5Fr_RW=u7qieZcn@+wzqrtL|OX z?k2yVEZL;^2XoVj_&8w#%@$EJy=eKfhPQZ-@!9P;)9DGbTGY|~Z6+K^1rr?~tuhSx zc0HD+X*3)=y*$O5sfS6?#==#gWSLMNVAB9ec~PHpL^qgYJ2mCf4{=m!klUWl(9!A@ zWiC6y+Aj!Y;RV~Wt8d^LwmZUtU*B7ByBRC`F6)QZw>nPw^?y*9ilX}qCS`wIve{4A z`JRqjGS155)bN(t4(O@cqk2)$3_J_%JtQY3{`*_-zaZgmN=BZ$EjHffIhf^|@y31J z!^#I>w$eiXdxt0UJ=H)ZoEi%lNbZs`a|W(qo7rB5?}MNWc_4?)K?Pd_ahb10THSwb zhL~RGElHQDXjbQvnnVC|@zQ(?Wgrn#Y!9Z)HMu7T{uM3ha*=tUa`t}ReJl20@q5)0 zBY;ieuF|Tcj5L_qtjCdD<(6 zEC1v?|CX-3DK|Kt`^;0yOoDJa30~e#1n2+56?Rpy|gFvK3)zObOuq zQV-Twu9`VKeXf&gKU~2TK*gL&ny6c~ddZy4Arn@2ghV}pHKy3&lIo7Ik>?+Ee$z6; z^q_0f8BVNk*U>^H@wY6FzGEqdln%{ACii3af5Gq*r#cE?1*=bgKgOYs zP$+L4T!)&6mn@)Hw5Y{(f%6*8Ex5d5S{jr?wEMf8Ze990m8npo?4`RE77|~R^G6A< ztI+I~Hxp)$t&6Ymby2ty9AVVyalM}~u}(5I{e(3)gl3&3rX4VCC-;;?m6kPWep$Tm zvv%*#w15}ewO75yahkZOBdqg07O5&&Qk59nb|i>~i7q<>bY}2EU5x5uITDk!8?qwd zMIH`Ir2h!l|6G8_&<+m`x5`$s~-B_ zSF+8v{96x*D=Fk%0JK3TJ%=LP5srT_@euZM>>R6z9DkCY!$<$wH(3PT;_@E}fZwXUV1Rqb@IF^MySx?S4Kjg>Ty-h|7l`D48Q=}@Pb&L9E1$(h}EQaCwPjA=E+>3UXGbP6mT z6K`6%odljD3Kuf{XGTkuCMo=|fLM68x|z!Ppc%;yazt^p`LlB0V*FYZuv`=z zq;wH*1CV8aeul{$vb`{=_nY}#^jh0SDU%Ng$v5}6k4LZ6C$RUc{yzm@)8BdT2X^j~ zG9X>ggO?S*PUMBKvpm*U#ZU=TclHtf$u!{XAY8d@?+C9?tv`xfktu1cX(V~`Hvb}- zK!yc@VWbgF$Th)hphv3VXAOd7bkt4?*&BAeSJA?E{49-8bOl_Eec6MJ&|UC?GGpx? zxNr0^zae+HWj7dEgMk^o-Iv*({ROXl2(R6EOsb)QID7a+3W7USqK_JJ+N;bDqgtml zkpY@^Xm~wX;}xo-6|L=40Wf;R>rQVW{a2hw>$EUBAYqgreU2 z^_4fxF^@HHRJ8nyQ@TvloUYB_wj-={z5cb)>kh_$uCKEUkWlSiaZKb85?jb8%0N}7 z^KK#A8uCEXVWf>e-mcJGe<%oX{HiSUpk_!kF~l9ZKsXg?yBgy(1V5KWwh&`)ImC{!I!K{fi?E zD+*-*k^MXfa!+hxeK%AY$cR#zs_ zW)=}uyE2ySKbnkxE2u_I;{O73^U^L@xI4MV;L(y6+GO!@R@Mg26@zs*%yCNQ^Ff|@ z3hgtxL-{T8p|jDyGQF>auTUY%%Bw6ph#+@}Mp}>R`^}6|s(h|l#cM%X*;ES3WRjPE zZn-YA3;ZFZh%lhJ+XNxo*8&~28H0U|31JOysQ(CWyNVc|7}+79pVk+5r8rvJ%ymaD z&N>}xz*5A%zZnCpfB;tcDk(`#HOl8idP1rOF^7coE5ple0HEjc6`XCZdlh(GD{%cV7D^Qe0sTHPY@`wpECw2V;0ZUTi@RJMr+sS3|e zCVVGU)>>?~Igv*Li z{SiEgWv${p(dO8_YXh_a%?C=A%kMg#w`yEUvCRQk zAD8FS%6E&K>OKGj8UZC#6WULQV}w{)*CN3d5$oN-*4VS5Fit}g4fM2=_OYLNWMLvPCIOnupyeGNAi)3s?O`V%cw=clT*pck+3&LyM5>Zl9X4GW5(}aaeZ99*`g3L5 z6V@-hmCJA}?~20(p3|&SBn8S4Q$kchE-*2sIV8OcTih`P2eu%YwW*B}O!6p;@Nq-GY2Wi(_4VUAR} zOaZWtuyyB)z2RaU_L0P)0F#yC80XUMTc?|mBzZ*SSLk!+q?8~+hU^FJ;~p%)WxJB_ z1&b+K>O5)KL+Q=U;yZX94db6Vooah0quJ6uq9{5S zV;cxpPEfY*iegJU_}&sU@ev~l*yI;UFn}@6{_-;ALQT&vWVo}7-6NjEU^+?o3PTx_ zr_cphZlPPO(NCKzV#E4yeg0Qh7F4wVJ)Q=0hN|45^p9P3*K1mnU53{yA9N*BIDX_q zjEQf%9-e8XhUYlFbx5@~wG5=7T(^&Z$sy=~aTBlU(VSCO@Fus0isrxPWrG!0mPvc%dV4nstyh?f3ces5rDKD3ZWhYqdNN~6s0IBG(#*nmF22hCE<|two0r@P!L>&HLFepk;9xWUceG-7y}#{v2vW_cu^9eA}hw7#|# zvC&-w&7UvNa=Edi##K5G-cu7Bv=&W%`g(S9{jeFvZnAr_B3$t=>a&ev1M`pd@gU68 z&}Z<@dWmO}jpKByU4|M01&2i*=sMW_eeO{$XQx5<>e02rWtzk zAQ;Sb+|2pEEY9fo?@@zGHx!Ri%$l9iL-mE(?@r*RP25)!viQ?hktqYZj_a2_MWPqe z6OhsyP8=rA7T7tpIpd==y}tzX+)i-@Ls zJHn>3FGQ5ii1oV-UrQ?6)~faNiq7Li$SxySJ&qp*`AMyfFlYCJ_h%ZvP1_Zk%?if@ z%G^PX!Q@k-?(>%CEO%gjFZcdEHpk?XcsrlzWEw^{e;G_Uz;zpr&ro6Fl9KYEH4p9U z05WPEX5GHJW=B-$fm|o^h3u|=wZ}y2wA^DhNdaBZKU?zor@D@!O~2scYBq`lCSOcU z(8h9Ue?65R^Qt|It5v9}0{?RJL4!%1@eNV-qJNb|fdES0JZbu!<=oXXQ^uLFsui!0 zfZuygAoW5)Vbw@u-RG>M=3aEm^H}}j+-}s3&0<8AQG&N2YVMumnFioS;X_A>TpavZ z(~br`kDH%pb&dmfVf^!Hc~tvs2^-_l>Uh=U=Zqc1$@QDDN2P`x$S|m=I)VMm6p7{E zK+`#x4>E^Fk}-h0RNP3YipO3=0kkaNiiU@_%9cD``NI-gf&z%R5_8Q;H;^LNdbdq3 zZ3mVJgq7@7ccT9)F2IXzD75<*lL$X#=>wj9$*KP^urUlg7rOrEBuoFG@<6xf^uYP;6gr(UoJm| zf|3Q~SNJp0h&`gCO(nhYs#9ML27CtKNPrBQd&;Xckj+)Nac_ph;RSSE=`NTL?U3tv z`Dkb?1sFW2@=|A%aR(?x;DD$i`RBY!samhJfmq`U#ZN1M@>#*@O8sv zh16f-XAzoHR58qhmOKVNT+LPv7qJrJX?Mq{B@KR`jHvgzO1`(ENUbijLMda7_!kuH zY^o)z-o7#5g)JRfNk`VwK--x#_8-3b<345(N^&?j-zK@7mS8c3Q=b%TSp?0j?OWg! ziMQC)ns-gAP9@SqZ6vVPQQkwHOG=8)@VM+^#Tmr8;+_1x8LC@6}#?%u#in5A^pcFt+4V zh`h>sj&btGnmeRK4UNP@HEW5a=^7)_93GqQm`y>Zt{r@Cb6tg1pw|%<72JZ&B8w;4 z*L?0!A%l2&6iUhOzwDN4ZnfCwKE9ewTQ(_RYP!+Pb_`$Jd6wzkG{MPL+vNW~cp?MvlLQ zKd=AuTw4H|*QpBgW_t^zsTy*AJ(Y*#N+(6&6u;iJ6xl!aGi&mZQp^-RMEudFW-*gD zXXcb`9x|5f`H^dX^5gGN&(b!#BTPBm%Y11=w{iBr)aW>T-ij1hLyGx$2Qz25%`?`r z$zg#;#k)zB6;3nLlT>Y0U07_|jT9`9mIQt_-_JFLnDRSUaLb7F(kfMeHVa1tG5veP zC=pq~3Jfor71;U0KA=MRW0tD+*~IC#En;wIU#db`Qbjx!Z~%!+qgO8B1sV+}f8%)M z>&-5Z`e@A1Zy%T`4v0Ih_!oo4B*CL^C+XSdf05n=2@Sx^zpSK_o?T6EhGx9kr#zrXPhSIB&rC{*W48NZoy(F7M=KVEI*OP}eR(!YK!v$f})9rCEDLDDspxkG=*eCA(s zHenv%IVtAkV0tpe(4D_X7ZLQ~+P|5<6Er(i+*Gjt$@5-{Rio~7t;lk{q(<`fKdh{H zFlLy1h97yrS+ZJdq80Cy1*kJC!qd1Q#tvk9Qir&R~N_7F3nr7qrG+_d)IUSsS)Dn*>GR!t`71(2Yy&A6=!OKyKO1f z%y9MeXMgujy4gnaRg`9e8QP-!7;#=pn%cNn8*YQO4a{xWCZl4~C|x zqw^}S^&4jrf4uJS)DB2upN-DY`_P9LXwEpEm;lI&iLUMgSH1^umr(8Nw&nhSQzZDh zM`rjSXAwRluw2aNWwz3Ot8ITjvnyJ=F>eyK;xEJxqdm=YHr>$CZ0{NEy01_bnOb8> z%ogE}hty1hx8!shfQE;HGQNR;b=k3pmyC$Kwdh<%O9zS{oUA2ZH7JX7@rPB}`Vd10 ze&8kF6u32(PcCkxon0wpI;^j;-1$a0ryf zkK_r3?8;pl4Y~5oFoD5C)Zd>0#lv-Wd^QF1By$qr!#f6Y5FCpDLp#Z-lb9sekMRCj zaY-p&zh6y2kI8`q0>8YNkVP0gIMvR@dLKgSK5ID=L{K|R-NDqRDr=e%_KyPUUe-wr zpszr2}`>B*wsr;ivldtRkiT2#+V50l3gVHa}r7l3Wtf zIzO@&UR7bpMhFsQjGe~L2^gj^8K1HINuF0#4aR{`b|r0!2V#m#T9b42_4So2Rn|}x z3eSry^nVDCT($Kh{H|yH&K!aP8}ATQ29yX9{lDOd@`k~m`7J(Dur~@>7X3JRE{ zSP=tM=msfO{~h<|9@Yz~K1vXw$+pKdL~>7D5umRE ziWN$ajGW*YI;gc_5n*M!qS_i>`r&5Bvsg1~JyaNA>f`l3tYHzj!H}o=;7Bybx zISc%aaabZm4?G;BTM>L;j;cGyj(fCth8l=E+Dr<;-Q-cJK8rhXxPwY^Mewg3`db!1 zwqtKM3Qy}($$W)y6;-(BR0G*UG~DAUtdy4Qw&Zc$Xw+>fc1u8Vg>+&MR=FYGK7ye+ zZ|vbBfX_RgMc_r?VSm<=y?9spSwrK*z!xc=4S5d!mulcrCwY)qt~(fx7@?%@^>7Uw zS_`MJph`uAm4>~R`(vwv)$VZRT2$wSF;=(@j{#p}1O_b*wg1~LU4buNtGIv>PMh-4mm^Q34y0Ybw}&@zUp8vxQy%fgk#nU`}Yb~@v)+6tAAQ}*r< z<`?pEBwYS(7kVtinWu)aW(qG7X#k_tN%CMFPFS<|_{Bml9vc+t{@N$oxsm`2qP}Vh z7Ka(qVnAnGCI_%V@JS9ZQxYX|__tuiqJ317iOA*ovQ0ja0!80Kj-+H=tGvjXZWn^T z7vo&G(Ir1pV&7i(dunFi@e;C~mQgwJNm4?XoE6~_VOOOkwRhJNpbGSTak}s>lF<@o zLBGO$oV{%cC=@#ltdF9y8^JP&C`al%Mj}y`(^uim>ChU~qdjaBYkbd=(e!d>hQCPr zJ1B@a0GeB;AR0I^3Omn{bd?k_L-SPqnjE2x7&zIog_4ND#S(?_!N*6-+b+J-3Xc)g zacr0EWH8@P4d3NB2nQqd5!rVbaO#Ewb~r)R0ipG`vF1+n=v_vOy$EA_K3-*=*RsI) zsEG*Bm=dzTA%+A>z}Eo_+n1pa4aTLW)*)kGe+`ay8T0Ml!Pzu~eL{w*0wuvkIEVg+ zIJT5S$`Q_~q#T?5PK>6v5W*XNGcT*Cg@S11Bp7PD+fA8a#Te3c#B1^&5#4qpaX=B0 zte}JuvpEL>raOhtFq6Mv#ax(@NBJ(^5>Z^>>fs0sCZC&srbfmvFy_$2xT_U6RD|3C zNh>-EHm|jfWEnLFcSf2Ge@Tm6! zg(>v6o`8qz*+C;VPs*j*&VEV&wAXMj#rXNc;x=CuV^|r$AT!|6zBy~l*|Sjp5O>>e zYY{2yuuFUs%U9yAQVdM#8F*NJ1)K$3fd3iGOM2!vRorV?Ej4)H0Ei~3!{mDW=DV4M z2quE13`+Y?$sHzozyDU9)u94%`tsG2Mb|-|;EWlz&Tny|txkJbFqCH$R;5X*CK?LNc(;nwhRg6xb0VmAcMX%+xAbUsAu+JYlX)Bc{kt~K|-Aa6}@Yo zy1YA++}6LCpp%GUdeM$XV)|uGe*wh3YsB3*ZZcks z0qHPjIGX+Gtzn zCp40>i6V^G(!_?GO$#2$I3W9p>1HQ`WP-?Cq#OHn#1tb-15Wy(9znVhyJs~J2@vn8@!a(%t`nIPQwznj#9|vcP@p5 z6dVjij^9Xy0Y8f`JUgvfI2($$I?#nNsY=VDZN02(CuU2}vd{LtY7QlMEVrj5Kq`>@ z5wB2OULLk(1IFKEW8T~RRnpP~m1nz^O?`YK&g}T7GS^S>`P~W0GS~f*@gxS?)-hj; z%idbB;iK$kBM$6o>|qotFwq>|etiW8XlKS|6A(IRj6oaHQ#p5tg6(Y`$pd>H!BP;I zCYrWZ>}^;rXO1o{CU}WOuW_0`FZ;Uq%NQ^@cutKq5KjsJ&0fiX0lg@7RGaA$dy9EX zpF~%th+>%>2ongJ`s4(C@$<5BIQ&pHT1QlGifk}$T9`7|C-hhP9TFFq9>m$n-YC=? zdLg0zxOVqr`d()9qswCIi?X<60{39jcYB#ZC%~M{?1bW9WoxUE+H8-ayjKA*O4>+Kc8jnDq-Zy;fVf?Ql0o$@`+XSlFZ-E(%s_1Ji) z+i>w;jPUDh#rKy@m1XkpCj`guIVsBha-5bu26|98JgcyX)3Dh9Xm{g216toKxpO!C z37vTjb=a_80g(B8h)IuogCk3I5&8C(OHp?!tqs?s)>x6{;jr<3@p7xSN>MqgM;GMt z^C<%b1tomJo{ew#hPdlNa8%DmE9!AHg@zwB*Gq=R2aU_Gv+e5J)bSW?MJH@Tx99>V zk6Q5vO#m_E8(mIJTGK#Gx-MdOi=Q39OV?7i9wFo| zvqp*s@?SW5u=VKz9}vv<$hx1MPClTM0B=8?adNEDK9KRE!$0_M00>Fh<=&HwAZtTF zmSrI3l4?!&N+%w->#NdE+P0@o)qZ4np*}-POY@{%`VI1OT_I)p`TJkrsIQ{yD?a-Z#_Hp z(u1w97&?=fC;F<6fys3jLn=rVI6=6IBW!8W(9OMcP!kQ?SPtREcy;qcl6k%az+=nL zr`g(~@YBE^aCBwGs5CPKq(4fLt%#)pSVXy1Tg**Tbi0?14rbFgb z6o+`-N!}G@yOf#p!Sd_y?q4wgf&tVfx1oSBux1Ev+HY5kLXS0{-8$qqf`*g!4b*~@ z65~tX@?aF>!#x}Kwp(KJH9(nw@@FzS^)i=KvCRR#`y7m95d>#Es_XucWdN?kEX7&v zEfKm8*~^W&>Dn3_5tm`Q2dn};cb6La_0*cXK!&NVn#K!yj~(UE**=V;{S8rh4jv*p zo(5wz^e6-aSt36}=4CXPBh8Jciz2{y)|~+iE8g*P;di99uf0HE36m4v&cqmBm}0e* z%F6VPTgB!4C`RN`g}E16sb&K=?XH@+oS+v1!u=k2s(pt4YY*@{K_u=6&fGf0Puy1n zK{MEpt$o~{Q+f$WYqX6`{^bIWyuscfLJWW@|DE?3a})=&OyX?Jt>l!N1lfy z6tcxaJ_bV!!3#2=usEb6wJLknpHSy7+oEEITbm{Q3lJe$Rd^_{7fB!#uP?};f6w!& zXL>Et`H3*1Rvg%HW^U#X8&GiaEb;fTBZ%)fKc|w8^Vk**BA(c?-XX_HRe4lZ4FQ?j z++mYYfwf<-a=)&&6WzR_{r+Ok8RWZ=7Rvs+be~c&@v1c|&;>>fJ#rMN*2sTeb((bZC1xc z+Fm~*UXrAZsMsEuR`7SMU-!St+A1P_z%qr8>r?D9kL8BW+@xfiqe35gqvU;Iw(C*R zRIc23_)`m{0H)H5YVxW29&JJBU*2&(Y-i2Q{suI7T92iSA{u+`=2`5dwA!Or_TuLC z9&cHusGW=kmM-#+E?=jPgXkig>jF1@gNsXFwW(bMWApWK{3p#HI#c0^{3}_x0youd zi1kIzBTs_&wOe<(Bu-ON%xJUQ?f3d7kIL*~5aTe0RXdU!jyNpe%x z8JUUc&uJ$9EUK<^8h-|mx zUb~s{a{l^iH}d|qTFCv!ZxMIyi+tv=&DVlvA~jleUY0t_w~z)#QB*z?!bsa zO%VL;%X@)-!KSxd4>RPH>8bcqjY+C8B+$li zzrqd)hBTyvwx~sqWVf;iG^r;^=*zI50rd3;ObWK%pY%OrZ2D4clFk39zDUPvRKHyg z8(Vxle4a^`)=%7kM-%$=Lu$<4T&vlupZ?tHT=^n z>naKaG|KXmJw$pIj2!!6EVbHR>842auC)_LZlK(rO)G!WFBo#c@VzeKI%x=KEi$ay zX-&FUfy>Axm**N{_m$oo#fRjfL~%SQUg+!WiVn zGPgb6@#8lj^uYT5Y!6R$^dkd3Le_uH3{t0iX=D`n60Tq1>X{`D?h^HUX2ce6 zm2MkDvdLSG+dJ2JIs6bY!#%zoOvr8yDK_SkDRVY22NA4eH|lyJ((^|IwffDG5m9m{ zQ`HM;hHV$lW@HIpw6a>wVfB~QT$yE6o-ST_o|YhCUnBlJ^k+1sY_lkJ4D0!!_Fh$~ z%S?5mwW;IhS-((QusO9G%!L}phe6=>gB$@2JWztIGusRO_4)UXVF_jv6R^Ct<(q2f z8vyKGe$AOhlwRY{zz+;~Il$IK8HWosFSuo;<~l7b*&UWh5b3x9%HpWIEG0F60oat$ z)o#Fu6G&n0hcNTiZF}2&iMCSj?Ldb$Zrw-fpu(%Mm&A+J26M~u;2nr75Y5t$pPY~u zuF^MyY9#*K*d(kQ4weM^`?QsB6VsJuB8{Dt*_-NrTMp}uFn@KZj<@Ec9T#O@H3{l@ z;yp~)b@!yc_3-15+th)4LrTbQblPMlmoer^S&!N4LG16tvWN2P9Odw z%QK`h7Apk&*->IWEnDg1-{)?Zi#c^RvA?@op%6dDBb2OLSU11OPPl6}EBh&?;gFOF zk~h*?Gq5YyGc|YOK#U>RFK91!bbr+=&9}EWy3USAU@gEt-w$#T)g^R1BVO$v#fZAp zE$8}l6ltnP*3^++ygLToUH_XAS@T=eUZb5*xtdp~JJ5C~`qV;M&%B$(PaJO!qrGbD zCxJX}z=y?+5&}Dii)t-_>?f13Zr~mpG4AFqdVz}pu1&i`Abn?nluzJ6fYcWw%S7f| zodWfjZ3pRswh@^<>EvbxqLg(kUdo5~->>rrFO?;Wf=Z8nSP#B=VQBOv!$87=2)GJD zLFRHWRT!3>>`|_lgQRca6{hwKU2w>?w8B%sjX4$4cpe6+$e!}A(@$zgz-0$B{Bv;K zy;;j&E9z2xyeIYqpnf_{o{yr0PK6w-8df zWV{+a4QQ?>XlrN%8B;+8kJIWC%;Y}?;NCI!+?`J)7ih;@IPm6!dP0LbTv_|ZuRN~k zA4gL2?Q}Jet&*;PabYrGhS}h=)!F3A5Tlk1JY_x0==Z#g?UJGY5;I1W44I?6_1|oo z^|^5M5sY_c_>Xy-ok8~gqwE$E1*A{8jsjQ_SbSSnKk=9;BUY1 zU9ikkj0S87`gfK5DeE2gF3Z&Ct;JTgCkBwbc-fNM^G6Xe$!4FD&}C}}=mYa9tW4u= z;1JZu13K94(}{JTinxCLwh>l2E?s%u%h>1_BMRC6KxEYEW1DjzrotyH6e^$|W{HS# zRH7|nl1|Q1_xo1vzO5!mojeW)7D#kO)OS29Y4#;tdwmdU^2Z1NMFY2yL&QR(`VCja z8tRekcw^6qZXY}Og}x;)9^C9_mjqvPpU2F#`U{^iSl9i`}}rx6{Dg-x5IT}^6?-xQr`L# z$6II9)wfuYjyVf6>J`jiolC-p79Uf3Cg+Sp}9d=Lh9A6A`DD=H&XHt$5tK~`6m;g&Ut$x^d!^M)#j`}6m zY)&t6FTLi_XwTDUIpVSqUC)yl{H!#=+n}PU{+jRI51;)96@2yzc8#t$b&KK2;kz{b z!|dQ)(Q#aP*==^ys)M{F5XB7Pgg%boE`?dsrTlKq=X&Oep!NB*c|oP*?Zx8$tfvbd z{yNXx^Nd_k*-HG;3_eANUn>#5iUedPj1m>HSvCioB_0dNK3W5U^>6#16lTiOjNI#d>gTFPTk1uOSdaSdg`rUi39rYDBA8kSD#LmOQ9WDdfZWMkJw!r| z{{3|sig<%@Z%U z90@VVN`BAy^%L(ms+k>VtMcSaAYCV>ktqnUIG(Jh89tV?S#wF!7ltqv#YA*hJ?e#T z;V}qd9>j-byKj8l1|m%>>0y+o>zIdXG1xT3{nzdvNvhfMGJt&i&pb4PH_m?zXW90$ z?cNr*?tQj=il1knyz`G{HrjD$Nun`n^Jf^W{XwWA*IN~gPFi4WRv{e}VS0nEzd%OE z@89Q&-iP|15?i&EDay18K<0+d?6g4T^nwgZ>nbO$$H=GU9JDttX z+le2UoRsaZWwReNk1H#ljbm+fobPPNaw!sGjYRdU)?f$&NggRDFZM;BH`1NfTfNPI z`*kOsU@xjDF&~sOs+-patFNe$3EY=!XK_^-JVZx{+`k4a5jRyx7rYwDwg#X^K?#F9ta+2U*mWyF#eRzBDw^Oz^ zm97)DGhF?Y(~Qy1-+%U9pvA{OI3nP#Q8s9Sljn4o?EHatljcWFAO)w(Cvb|Wjzufx z$25%`iiSYer1Qr~Njn=av-7(W2?iTE82c^YPLY!`JLjIhUuVo!zi34q--wwFHKgEC zeA(^`vDN6#{{Dn@rC zj6B&lOuq<)pabMnp45rG<+q*S#59J7>M77kqdX3|MwUopK6?Dt-1x0M@#vK4(yp@Q z)mlmHXl@~~@Wgg@?6m)!CA2b1-W%_3H;(`MERG*#pQzVN-tXdVHSRo^i@^1eTW1Jw z-(OkVw-3jl*}iQ538TclV_)Ju;`MT}E}ANxaeXA-;p0FiF6wk%{hx<-SXz`ly+04xf+ssq7&LG|j(1_Dq_Em+bG}SBN z;ouJmiY)LAdrbwO)oiP;uZ|;E93CCV@9zg+Z77<3x#X`FrqgBjusTJra$w+?YO*n- z=%9-f>o9Mq>rRGAe}#}3(I9jv$X8}9*%-OIgS1)5i)l8-r(XppI$X;YZXRs(WFD>f zmnHIMhAQY4KTg%RR6oe4y(=m-6|5lt>93p#HuMycsTgCfdx z7+df%F_havFAxQS^|>X8OFc8fG{_%%OKF}dWXXHA?&yC~u#ph8p#LtJ4}KILOYj>{ z{K{pVXlklw_3Z==Qm(Lnl8y#PXre3`dYP*IKsPf{Khs&R6aU!+&!@+Xvl3m1Z^D)M z#_>nz-3g5w@zS!^nLE#?p6seEzO@%)qWPQ;=v_l3bM^{&nLM<;Vt=p<$c<8qDL$kH zL|#n{1qWEG|31|Z&BFrm-&Cj?rL-SmU<~Z3*pi`ee=j3qA&s%e`i^R&J%*@QZoZW_ ztIbQZDE@|0kQ2$=^0)V&x`c+XaP2d0k1*g|t>GNAzzvD*(Q`!dDfKDk%|#BDo*#`&kId3M)pDG^C!0Rlr7mT1+NLHH;`Pk1h6}*g(o> zmOuQMuwy4E;Divg(CI>nC=jq~EE!As-9xG%62=ZDOgAeIV z)zR%0Rvptsi+*#`^Sc|`;Ghr_&g}aRm$200V zd;X-QG(hidY-$*47oz<-+BUgVZwOCFl;lNQlCN`zTpb!{CLFD?eG6tog-2#M;R??E z>Wdi{d?jW)lv$GTZx^!O7hLV0d+`sk0~%ev3o*plvN+(Uk0-)#g^1PaqBsdSQ}HQJv9DB{e3Y-jZSOx0KOjGlATmQF)b05mqve= zWp41r7OtE<4TcOnIrJ&@;9#CcCjhTwVX67#sy2($4~ z)(>v~Y-*Ui9Kf4spM)-a{e!JCA=mTtYNo2N83tN!l@iI$cayB{JOZP3w(W`z7C#siZbKIL>W(3s2+X)5qrASJnr94$ain2GncqhJ zX(w=73l2k;fMfK-c$fYsjmUo(xjjGQo&qxGj83x!+}jlnQW{Z?TRtd>B=Y|x`E|lZ zAd$cGx?G1=4J65j4>N9J53m0VwwQ$p{*&#**7Omz=P!XGE&d+X%n6CXAbxqrd4#iJeu(_x=a?)(- z)Tjwkumj4Mx!3+u>|-_1?qX)AA23O`YX)VOzKp(+A!CUkDSR2Z$cURGBxPKXHdz%$ zX)ZHK{2vK}J+4unfP=?bYZ`nJkb^fq8xGL@Ki#7E+8 zd%l@NYaEPbY}>nkC&Q%j0H?b$os40%5X@~YiP{-t(wffvD)PSo?F170tnp!wo&fcl zok#`rAAo#{;xWL(7$gs%dJjOIL!3rI+pc;A1vE9dftSEa|Mo0xZ4v3CnjhVMaue8w8CJ@T@0!DGY3eGWHXF*#ME{>K6 z1ErPsorG^>vZKFh-v0LZ8C}jA!3rV`=Ma<_Hp3)ATo}tiL3X7sEHgJy!+HRi_*I9{ z>-eSWB{U#(>$QAr@>fIE2!BLS@iZ(v2UrpQTh3es;U0FM_tw}IxamOa9HS*oAe4_& zosUKM3)WAVWyjPi>)Uqo0J%ddEv^VaqL%APgb${t!v`VS;76{b_M*H-S%}IYO_Jn+ zLtKx45 z9{@`Qya4~EGgnizgb9TDBJ$i1hOk*Or^1doIX5lCCaPn@Bp8MPw9ISr093Ta$G{7j zS3DEvTslxhGbf2G-!}?W4kfufiCo-W|HiO}QUF}|3&C3Pe)6jbubcXHqSkBpM{fW^ zIr9+8*)V2`a?bRDAe4ma`j~76`}@HMfXguPxieQq-S72*?K(AV5eRiv0C6mh)|CpK zChW)sdWmKfwmzi@Fx)Jju;o6)4ued)2WTOb5FnyiSAlSgWl}0ayl{q!$3d+2|YE=d=x-UEXJaH zH+NED>U)Xtq>KuPP)`C9%|CAI5jo0T(-WqYVL)52`7)s)TPQMvWy#~n11O+z)x@ub zf_ApZF5yxGi2u@7uG*o7k(1{1i~6~2lhYe$b&wV7CN`8qvQLI zg!wC&D+}yPlO6pQZf`8tHNDi{YjVNgq6&Y^VG3Mm?SkupL~;UYbW0o*rJFdYOH1b_yRR?5ePRRdd`hNeqaeYfG0Wz zn%2^_?VOp^1!c69T0jt27q6rdLqJ|iz!}N{fXV=vdr)(h|KC0LK?Q-Br3|5;^=Gd& z(J~?sZY*3n)}ils@&zGKyU&dTm@MM(b0yI5o_wQu07I;B=bRXE32t6JXjMPx=E7f; zcL~NmIBxP&XRlG{hd{W&!Igk-V&A|=Vl6j>0>I%fAo$@YRNrhtFCc)Mm`o;nt$Ll4 zD*&((7J$g_wye-zujxG7PqqUwZ6X4R|f$%RL|eyPj*1C{>GQv+%IRU-`PKj>6Ir!wPJp{M3z6S z`P)8y>Vhc_t_{@Yf-y%vEyb7uE9fP!GUtiunJO|ys=61Mn6@l8b`tt&#p0_*8B`83 z%Olpa>d!7iL}q_B!l*~Zg8~n$ugrG?I(7-F+V+?CxzI#7iJp+ z8tJb<=Q_=*ZwK2k(XZz7-q`Fu%aq%=e(WG$4?+7^#T#TU91Av;S&<+-te;4PU=aV& z?@9hFo&6}|`a1e*fH@0F(&Z9kz3T9wg#tnS95>(Rro+9sLnw4QLpa}uzJnam6`vNo zJK|vwdF-NpQxK)_-7Gk;4~sm5xSS^x$^BiG;Xx%eCuc0_Ob z*M?M^2f5ej<()s%?ZHKzT}C|t@$XzM5zzA<(zKc0Zp6{hSS5n^4!1vl2IBing0#i+ z*ZlHV`8X!MpIhc97JUW15w6f?Jb0v522s--5qEzv8*}U(i3fhi(}$u|qK z3iUZ+!?l(vMp1+CpT``K@F9E=0SnD``?BF_a$;G$)c+is)H$V}L+iU%(|KO_@7!sU z54`tQU89G}wL`p|xENaP3sLD~m7rS_IKQM#zRU2(_wI!c)FHSjWln!tAW{{HIp2I# z4V4*c*iycuXmdFOVtr;o*Hd&QoaI4g`jHU!U+XYoK7Lfo~#jkA9Rj>igN3Nf}5lK)-Bj(esX!@kZdFINIiPxIwRoA9h%PTco zG}_#UowO28tjM_8K<|q(ovnwww>4m~OSBP$7QfrOX*s$A5Yp&#deKqWEgS3vNnA&{m z?^tM9Q5B7jclk$whf)meLY**r+hYVLtFO9mz^~TggcV9Zs?g&*8?(o>w{0g(Q8M2t z@2-u${dD>n$IhBo&22vWal)FW3m9g)V|P*mSWdKWy z?#-6%V?be{*%2i2u2p17S74uC>bTQ8n9_sqfc9L0mZ_n49Arnqt#QVk01YLIJ zq_1^&!yuaQsT$wIQDjky+mB2`HxW=DTF=t8CPx}-2`|5r@i*v^H@3G>xYYw($*+scy%>lES0v!tJRHm+)o zFZVky^yWZ9Z}fj1J~2e`rQ(jaP$wKEfk=t_xoQ3Mxs6-jn1YwN8p@vO&t(>u7kZMW z><4NxlG|q@ojB{Iz%5s|0>rCIR8o=ujn5T?jKO;YfEPJ0| z2c5$oZ;-;jb!~|(TT8v=^TmgWTS!57muJooO<7ID=9{-r=z+1^_D=h?b0J!U!zi*l zMYvey*-sFP*d|BQX~%@bmCL|HbXg`RQB%0#^9LOgi z%3)=qSyZ>)*XKj5vVKfykIbw7O=|N}3hnJ(D$4(p2NgGSNA4WK;pDRQ0#^~w&4Nbv zqzduua792*xLv2wO+m9sy?vO?CE@ZH{wNsCPSDD--Zp4p-~U-hb90Elc zW?IVM&K=3aS6;}BEw`-wwd|g;>?f5l#mOds<9+K{bMXoLa_Vg}hzrVfTlJE8BnG*J zT4^kaTU})S^Uo@VwrZ_(_XsO)7g|#G6M=X3UPC_*^CFe>UHx>gdKEv=uf>MBKOMu$ zBR?+tM2ovJRe&qrMn2v_&M3yr0ENCpMUXd5UeRYYpJqv43-NV^`&wM@Hg1&JsJgx` ze|cfQZy=%{vYh(kWbK3F;Z3Fp1(E<>4k}v|ZQeUqhmP`pdt*xe`VB-Lp6}V!J4^cR zhqt{{ICr(LIo;CufZW$|Xe)DdbjI)#NF>h|=by%_yYrE-1vL~_UJ5>uJEq&BfR>v# zH3D3T-(~%c@xU7|qxLKIarr6-@`A%9csw>~uP^tSTHBUi;XJ@2wB~EZMqZh3P+ziv z#hFi-#aMRuvl_4yMz_2vcyjM0#z!s1F_E{w#zDly(=9vd>wD3zK}VJAQa_Fk@LI4P z@$A$eP4b6dL31z#HZ}%AJrAZ9{*b*PfYXYzR#k`-a%4P4Ie{?U@%vUgSo6Muc0Ydi zAlPk|%2<%&d02$GL*#^0l4yqm-R^ChZGR)>_-uhPhX9$WUyh(o|E$S!*G_0aFHO1Kqb zdA496aZ{Twg@&J&Eb7g+kG=UspV*)&?XS~#G!wQ_({vd%o&2_6JcmqGdyZMFylm}x z^7|8eRaJXIK3lLGs7?qExIQ0cu58Duvx57>95}eU&eP!8G?&@tj>*@lmY8JIsR^yNzHIx5oG* zS~AQG1zfa5^R^y=pH~R!2hXzByK--`Um{B?!t=_vpgLLxI3>Szow<(MLmaD1HaIek z6|c^$fLRR-zj!h7V)9!vVZL813sKkjzF06K6jo5(~bi!g^$N@lnuklaEL~Oa(yz zCoKMckAa1<+b?tE_An3V#npSpWf&L|SJFT82M-@EFXB2mv~Mb}xL7i1tVG)Q3q~IB zuaJ!EN90d6=4!WQ z=W5KcGC9>KqajtX=IZh?;)4Z)w%23qcDlaRe2}DkrM#>82ekVDlV{MJLdh=|Ap%OD z`r#zoEhuV<5tAzFH*F;S#IH*pDsp*Sw{4+8{nklB);zlX`8zbk*=W-J=$ZP;7_E zsm^VxD6C`UP2~3^+pu7o1Tks3cZ8K6?JG_Y2MQXVqpNPEm-QtfyYbI4dA)XIO;s}K zBMIO~#$PT5Fy$>|2ZZq0aEURrerzJ}(YBEJyhLLlD5dB#`=gKjr96(Wk6uxf&|ONe zYQk~YYc!`nE>wYt;zQr}*?-jrF3EtxJvU4@BrDT5V zzS{DKt(=0vx_LZ>+ULm8y;7@9Gg2+ZFD9jP^jRUjyTQA%GYtuJxdiZ>7FmJ1j-`&9 z(;0lUUwEj**iOc%DO7;7wF>^1-}e2@^1oD}S3mU3Z~Ta){n1ZRRDa?j4kM(<8GO@X zw|%+`jmFOlk@bCZYhSo7<>ENn=7z%| z{#-@%=<7?=A{%{{djzZ1m=0qN!C`$oEUsG8WpOvWV}?6_iHtFMVO*O}FZR zE>SBlTPH3>s{2JAnPKJp0zrn zPrcs6>ZH$yKybIeMr>=Wm0ii~bYxv~mc;#(!t7^h%NOcgJj(jpRdh#A>p$X|GZ3aO zAp+u=Ssf35`ZeK-=!-q8CXP=F)n4%!$lqA-Cqb?7jl~Pg=b>cG1;X-}{^?scTaitY z#>eEder7~eyUoY@&oSeZQwR{)F8upth7uGazH~02`h2lzjQ8x{q#^IhE*q@B(3^H_ zCZjB)KSp%~wOMs~D;`pw&vXWT;7QBKE(&|lUd~sb7J$~|QEieEp+%$$4h=+IOpN5R z6ANPX_~($MlXiE&I1!vRczhIk%vWMtXzWY22TKCRR^4D9Si^)@rYX2TD;wj{+GJ|X6=y?lj(hcI^ z1XFNj(e~YoQ3C|QAF`(f1+8|CcMoss-zdt9hG}%0@xaIO0zTz-l8Rmb413uVA@*yu zj3P`*2|)4D#g$?{-+7c-S z_^`v<7Mz-OQ%}G8`68vRL{pH@fCh!q2?ki)$5SGeT;y-Zi(|p9hX-#q6Q-IEVk+6v zsa>V5jxm26)Kj|13V`)1dHC#43AkcJVcjjeuVo*xps-M%!e2B(CGbX&;M5`G+*9rZVue0*r_B?oULRAv#^ z$YQo3=rw&4g!9vv(daNrF#9kgYlL4c!bOKnu&!8FiC*NS|#n+WT>FsR}1LoVj_<ZR#baQp7XAN(16 zy`8E_i88Ay3t^PnU#Smw`NFsL(K0*awRUSGH-|xamscJav>AfNJ^jhzd-|M`p!DLs zGmRi9_=~T$7$+69Tb$)!40lmV#`xD+ECP}#e-WIh)S9a$D(9w-q4i7fB019>q5%o$^{DCV{h8u1=CR$VTu#?|VG|V~ zi_mP8rg`iikFfFWtt))@_R)M&ji`p!f7$$?{&2E`(IRNnN;`s=Dp(ST5-< zdl}J_8w~x3!ab@qx^ZH$H;e+^Sg7J2zh!I{{L1zpAP4w5UG99|pFhN2@wm5^UE{TD z2FFY3*@=}2zphU_zXgthusAJ+Jfv0jt#GeQ*#Dyu{0yKq>S$XZ@4|8C^F|A7#Tnb~UE9dh}6&ta{$h!OzXN zQ-ASnjO#Ls*%l*_wBiDVKX`UHA zYzVCaCrErbtfAzb9qLvh<66!it#4Ms7p>oJZu4AdEipfnK8w58c6ko(OOv3y?MN*%tkvkS7OOut z!_rz(>8S-fAKn)ON!}y3&M8cbFiY~~-;-^G#NmO2&6B_X*dz5fw(fgHz;2%Q_YC~& zg>axp1(z;u69&8A3MaW;62iNFMbpic6`(M&deRgz_cz=7C*mm+A9q17Mk8PG;M-)^ zWB$y2kwYO5D1Y0!A4bl=6!@o62hH-}94nxS^f+^$<|bs_g_^25bpV zSaQZ?+78Hco;2vh4AB5{GnU`^3r|U#kyvrojO;hQ78+mpGT1H=f|HoRmUkXD^!``y z-gHIoc^>8CB~7stiP{qfc%Y~&G5sMJTnnz$pY^sK=t#JP^RYPmCv6~)<6}>Pj#c`R^2{U+*UQ?w??Bv=c-FR@r=D5(o!VVT ziQ!L$I&eSDvwdt6fnOsY8S1|uX(xjx2d-jD`68jqy5FSDVwb zXaD)3g0Z_gnJ7do#T2~v1NGQgx9n0(p!soQW5eE>kUqikEJo7nATp{^$~!5YmOuTo zpT^k)R5Ugw!~77JPjG2Lo%-B(foXC6Uoumi!+6QGJuvOSB?2{t;sMe zmwC>|ZXlEJCsc1ZBd5(VOg(Q7SVbRGRc#jtL!thIAO}xct?RzdC7NcRWQsz+X^pp5 z*O8X-4Xi?a{t2knqPzCe(hoUnNZDmB&08`+{-Jjrvk$bh3;7y><@z}$G_4pKSS1xe zQAnVrXM(v|fTMXDu%c=q-nJ)YBteAAlZv%&U3{PdzI2`KeMep%V>xP0qjZV^EHSi1 zhftV@s;)@0TZmNaMgppMuSq;&12lZ?Y+C2v&Aq>~c-mI<>-oX~`z8;}=QUdAHiBK`LfXjASFDQL|AK1x_P z=Jj#DeB3?>1G_lx=7nEXI3Zgvy4eAPILoAQKDwT~rkatIGD#cM`bB~m8w-gz@;j#i zx3aHu0i+$qBE9}i{N~?`h|lD?-M~J^T8z@X0wAhn9$-3p+56~vJ}rDkZVCKDUccv` zv5m^qf?-54E-df_0`Jt@6|J6Osl!pe3krdQzKW=Af8&**vp zGekoS0(7OfUK??9RlGb{bZ5Yi{~KU6Pb=NHLRbbHm)Tt;i=jFFx)4*Gq%IYdAXMlt z_f2`}n(dI<-8Qu`*)JR*hNZNz_M?ov=IFmFF=bOiqU6TENe-60g{tJ)L%R*OEfsuB z6n%Hrp3n{zcfo=AQs5P z)&KObX+`2>F#0Lq2xi}w3d$XVtN+bZtNlr1olnNX%k-76_q9)xNEMfi*e6EPis(w0g}5 zCOO~%kCb?$6SApAt@ZB=+si);wgGEIP?n*s38G_NW8y{yrVX;$6XPGHK67R!_Jfp_ z?ZZ!kYV|{M@g?yuWkrCH>~kQyWTPOemY!}rU_ewu*kRJd5C*U(iIdKBBw-Z)1_jSe zP`%tE-5xBIE#|+nEX6mjyaG(k^eDCfc%ossf;l5A(Br;~i(1yYwcCjx_Rc$@AhrT} z6h_veKjv@~;{`BZXP)cB(;Xr0L5T>+B@e>~&i5=_QY8uRrJe!PRmNLWGzN~OIEsS^ zd`?3IJG2Qe;V6Vo;+n@`sYh3GEz#;=H7wx*r)>g$GAv&f;dW8?v9}8p(?U+XnE~H_ z#At=LZfKMKskc%ro zI8)OK4U|L)-;zmzdq5tT{-pvxNU$J~5=duVVv7gR9pB{h|J?V7)Cwap*sb6NU;8h#2u z2?I>uXHI^jMwG`u@|=~O^#PuT!|oHAf9`QHI9UvFPu@I~0|Lu}4_i`Isx`l+ zm}0qv=@oQ=V<`zS1XZA*nim5KMxGf)hMhSOv@p?Qq1n^Ry}BWqJ_^m$^o36r2bzR{ zThtL;&CkY6wlZ9PD!#s7ao8quB%P}DLXByY6V!+Ollff|LK51z@Ucavv2JAwqWy}Q z&vhI)9+-)u`SHawOl2<`d zIL?D;tg(j=lMuAfPTK1?nI8z?Uaq?_g5l3>jFv#P|KdQ!UzuL3 zsxmM@$y&|1gU_J#>wWgBwGf+F5h-BV2xZ&{%+&WSv=5c`kgKO9KKSoN0~wKRBwC9f z2GYG*tNyl2RtIEolL4vvwqW=|v;|#vS%n$?GrNo``|i)M3gi~R>{v(~O(u60Ao$$v z?kHlrf!d5xKu$4zYf1?-Romqe8DwZ(aE$^UbD}0>ft$VCS=Ruo(zD5LUtsdXkqRb7e$g(K4_ zx5J#M3t@UmIawO8;d;3b(YzkwaK*v~9BmZq;VAPokKc>6HE0QP^Tf2b>T;0V#|N+7 zhh~YePD}4MCT2^y#|?CCBuww(M+h?!Xxk%Okb|J?Wg6fE%!z^!+%_W9>OQa(y{X}R za=ik+I)ok|gor6dPbkp4$ywSRYts1o5!jWkQH2f$hF26y0%!4|b^Ff&E>vKJBp$$G zAhthFi0+vn$kxM)Ebo7FtF2MQoTvu5oPsP+ojpps^~TAlO#pBaRIHeTQ!h@k-Uzw`0*Bkx)?H2QH@cWT+WS-WVkr z)yAi^lTz{rIj37LPrhel5x~WE_i$!n0X4+rV+JSFniOLclL~_-G^;2K89(20^LJ}) zm)C7r*W@!JGK>k>4ASqykkMjfw6!k=z9~KSTT^hA{_E%?P56GCo!z%|VU~r%+)Qd! zG#>y@SvXZBXahv~dB!3p1R{kkZv)iarK`f7JY)!tyXU|zu)W!ZmSK7RvChP_Rp49j z! zC*k|#wHKPWC$ z84V-x%7!Z`>}xnq#aU^nsW&bXGSYRu9c@__47Z=LmyECkz^ef2xCY=_^?rs96Ufa(oDlmM=ar$>Kg!{Q#Kw6_PYY}=*zRbQu#W!_ z0ReigU944J(HcCoHO)r}z7$`!eDJ#zjeR77@crz*DB`D|Yk0$uPSd3Z+z9@z`?Om} zpE_ME?dW8?8#f*S>RV=AxK0Vg6XvBxvyhXMEOlqa&N$xSc@G&HrQe_UtQMJS^5IqT z6Wa>pJ^ZfmW>5NA-hKAzJ*;)|;lYFk~KU3H#d;y(6DnCy$3zyCY9Y)A+V{Cl zAFPa;!&S*%J~8DxCWMb3WP@=D@xkFg=R|%rPI!=~-D2qe9H+9zAO>7hLr%X2Kdz0x zb!ALvm15yD>N$Bw>rUJsVpH&P@$h|9@Z(H5RkZy5u;jsNRs)GoLIgf9GV>`x=9in4 z*cV?x^@MGsYDW>HbeY^2?fdvzd^iVs!lU3$QWXW)4yMF85D&T%8Cv~0_t>=(RPQIW zXG|Wp*@h9S^Sl!9?Lo}IXtM)hWKmk%Vt#4J43{GRLlj4ci2T1$#u`IJk=f;$T1&~% z8gOvv#RF+%x4m!=JL(-|Ee!B^><{huVmJfRCx6`BngQ9}=&ns^0yG{_{XtvG3@|;y zN^0mgb$CaAB?6xOqnx#Iw$Zl_yEH@<;D=uneoUJI%lfDmGZyd>QBR)eGP8k;T>K2D z*NiO^>m-@Q=y{_A#pyWNpCQpXQwB&6Iv9qJyzdrr*igjlZc~NQP^H%ec1L|CKgY3J zd8BrFRjI6?4FJY{6)v*6W>x*bh;Hf7*>q%q;nW^M=C472a-NE!z}(z(Su`Ih3S0S^ z`28*%;Ox(%;SY=?es8=!9_4v6o#+gbA!qj%S|b5pfXaxxcUD-g)iVWw$-az8MJ_RU zjge;tQ53y<3ECjuSxqI}B!D85;W=;IM>s5}&qR@43Z%>jjQ6RGi)03(#VC;j(n1Ee zX3&__8wK=2W4*okx#MrRJU3f(qNMBh#hDa_W9v1sS0m)3%=V!>_%r0CUud0xS`Dn9 z=fTwje!B-NmqZ5kJDdN*Ya~mJkjV@S!9z@|Hb^e4LYrnt0*tAHm3CV{ngVWD1n5fB z@2A4XtmrHfcFaR*&|{F#;7k7qJa#}Cpl@7m=lbF(4n(1e-TW_H&=&jv2WSU%;?lKp zp~P9n@jGlK-0;BRdjblN9$=VVdg7_XpGbkLK>i&HWU~g4e`*$cJhi-$Nwabsb|K7uO@f7-5sWaCcS#r__wA=KT&0!~ zHZT93l}C{6Cm<}5Fy>r*S}@N|WaY2pA#%_t5>BdOX5k%gP1RKTn}wJRbDn$T3lg!X zhsMUN*-B774Jsx;iX}sX6%kyZ4o=D*ku-$2a1C{I9Jz4T8$_V+E4o}f7NjWSX*T(E z$Uad~&_}{2z#Q|Rgm}HX?au_4NCiq7UD7=jcy{=o5r zcnu@xO%zeamyyT?g>bdIN+zm~r?}Uc5!~z&LaLo!$-ki@5L4VO* z4K>}Ge&bu0r^z$I6yC2enhw(KHy#g#-4pDmNnJKC{?&+%*8CZ+gd~H3qvZA-s~bC0 z)YfOv5tlG-V;icaj)zL!hgk98Q~pX8ukD^rtSb}PXKzWrG4(xzaVT;UXsovoj zW2;E@E%Y@|vB9;tXay`s--SVj4baz##>Gp2NL9e+FS>uu*&3wW@?Wh|Cqdhu0;7ul zhLgK9)Yx^W%J}u3=Wr^$-037>5I=ql^(l^8G_>+F61p7t@QRoKs3w5KVK5L@$k|j5 zo0ef}?|2NSi}@gLmu=wv9Bzs2^W3_rUDX3~olbNYSTR4?3gZnA( z?K>(c#yn@_H8+Oq=v%u^%S0R;DA06A?!08<`H=7AI^ z_1f~`bjb4m*j5`*w3$Jfg-sMopac zHW&#I7Ej9@qT2Kbs_)uNGUgEf^x-4K#>Lauq&47+B6f$=YVKR(+bO}vIO~9xfLQdh z|3OD$BmtP|CY3%fQat2MjK7zE?%_oow7rJK=V?|~m};cL00SZenjgb>h~~bbpRK;D zta0F2j{}C*pTXIdgxEfRYI{ZR#f3Vt(SlO|N8Jxmi0G$B4mvHt!==p;o)|ibox{Tl zkQ(yy_NeFOB|IVVQYxr@VAS*W*Nl^$R{gtd~>NJp8MT+#F#gp%vd*HBjDXv z_4}?&+3p^BV}MB;Sg+*;-#3CgZ!~K8vBz&OM#qBhuNugo+WezfrqlNmnx|_V$Sj(U z`<`i25nkGXVwa1o{VWakx(>+flF0C)ecKODub9Gbr9Kr<&T6H8{J3Y$ALXORnx9#H zvp+E(QE^~aaKIU#)8|)z4vECEgSP&RO0VyenTs?9XOVX>10$!|<0WkWr`iVP9O^$X z2BC)!#ENyRNr|oK$zD;C8J&4^p?0SWIv(HCx`0(@ND9zh*Jl!q{Urf<0Ng^bV; zvw>>X3GJHRTnukF&RXn&a-P>JaidT9XVY%&J*I?!;_>PX1CO47)sQC<&d)h4m#;)S ze4no719M8|<6OVubbC#^6Z*TO!5|``4L-8hP@9jL)HiQj(kAZCq)~l#dF_!|AqsGbvjBQ$qv14i& z#2NM|!eOsU<+PgU?c z)Ra8}alCoJ$pk3+yjtn&EId^llWSf{rH6@}fe{0e?N|{ANUQ2J-9yv4tvd)H0YZS5 z7Mx+|x2A5iwQ!G(tqemN2)%ghNL@-(Ly)BZU@Beaa$q?V_7>Xq3~|>V_(gzm>dSG= zh_r61Hem{f)B&4a4^g4{h?w^rH@CmnAJXCwVwG5-jiCF5S<2nfmc+ZPe)V4~XRW{{ z6Pvz^-$p>QShz!!^{ZA|)+%#*XDrhhNl6awg?@{271+t5XxpvN&>%DD!gI^CjF>5J z14Kd$CpWTX^j^5{CW0GO)MVIDVQwK7@Xnzy_Dh4aH}gi|BWfNhV3)8 zHMOhHFpOvfb{lAQATHY>Dr@nxzbBjIV-Stf|8rQ75Q=j~JN>0DIE19#c4@z8l~Tw9 zyO?FBo`ni=1jz8>|0?v#1|n=mjaUYJMo{%Pg#-0h%Zy&;%!keaD5zb&-{#g1Od3K9 ztR0^2?*Xa|I+Q@JC{Lm_|3I4KI-*4CA?KQq8YJv7L$jrz1Y2Y4`okI=bek6d!63@j z$R}Uq>{n|(-aZ&Qrv@fq5OR6L4hAbVc@9biEKS{V-(MM~>+eT1+em_Y)fkxF;I>tE&$L@bUAG`E0HZP~0F#jcv z)FL9-I+Fksm_$qf{H4-3Vu@e7W0Umjxif>KYR5hJQtl9Ms+t*lX9*2x5UbVWtf+m>fKv}9I*Fpo{XOj(th=@>Ze8hJW#jX57otpQ$jzAx{_>0IQE#F+rHy_%YUT`7mnGNsHD8>!8CJ}aH zm^y9on3E`ST;|CKxB*U-Q^2=x@dS_539XKz$>Uk#ZXF zrc8JP+p|#ZR5Gp~>`pRl_k%)R&tLcQ2DHd0_$@tx`Y4<)PVwWc$D!&UkiDb%Ahl7w zh}%!SHjV`}I_4)GXZ-COJfL|)b+joHz&lJ(yYM@|SXLHIX%!mgL=9k3b*h4ewW$hC zr}fjJs+jF^Kpv_xq(K|Y?Gt8w4R*$Ww<|k1|JU%V{(lzqO9tM#-zf?Jr zIu5FW-iJaDNw`~DgMD*Fqr;(fKyJVrRU(9*Gqw7bpe(>B7zbpY71>6tHG4!TGFR^z z+IrW~#%%W<1*9hNImyOjGayLqWtccHUO7K9-XajR14 z(Cfj;NHfxJ-N<`Mnb>|f7ZBOpv)z`YF__lC9Q~FK4nR_z(}Kfq6&dAw+0;TcIhn^z z?&Cy_r*Msepz@-TL#GtQ0TK(7lOS?h@P(9((?>fmY1OvfS(+QlgMoWJ3>9K5@=C#w zU}4tqZ+{3Pm>S;wkbL+VgxM<{VMM%GbtN+P4tOv{TABz~11PW)M{S~v<-_UkXJ0%B zp&Ow2a54<{4~Q998(U2^kLKx3>C9X0gtL3H9QsZw-)myLwK{rRzCeuNJD}~6g)^yu zYQWcKPuf`K*uJ&k11s$|)=~iz(MRLPp!lPYBENxN%>S>iFUV|ObzXGZSrkaC84aW?n z_0aH80|u$Rw4*oBYrtsig9jz$EK|!pD#k1u6$VhOh4s&;b2VTdI^!9TIK8~sghE|T z0A&Cb1l%fPqokBzynICfVM2xhloR3oYaa>(+d~gfJp=n@Y*-c*GcgPjl;7N`%jVrH zoN(%a4^X21|KknVheumyj!`VMVWZN{M>;!QRZo}?9^7k&?d%@hmd2N41Bs~r=@Y2` z`w#(fw<>yp}$uBnHeMncz^( z*?J;NEn;kapdi`X;l|J{##{SUB$ z&tpHK9&mi43?STr%RINTw{qKDrL9CrE@)IE>~E%U6wyUE{4p6WIx5Za&`%!)d zK{ThPD-kv{P>gGvw-WWw;ozHc&b{bLZu9h$ZTxL605F2}tNuh+(wIoj zUsr=b^yl~gFTj7~C@~DI-?iKEIdz!;Jq3u`vUiIPKd``$)QV|6fOid9OY|e;fWYr< z`?q*n#-~TH3G&huR;?@xvwAqJuGn*U8+Oua^m~ZlJ|I_r&y@ge_+oVj{vQ|g2*7t# zpW;%<7oh4MB8$31WgL&ambqNftX*ceAHDaFiW^kY)T| zlen6@JR3{#Ua&DfKhyhCS8|mT@QGe*EMV;_N_O;{rbB)_`4=`YdWIgEg*(E}LXlT3 z|0e?wBMgNdp}9B|z;wQqZD}v*0hcOhItYBh4Gd-Izm;|7TT{8fX>hXO!~F^`!fnS^ zDb6&%*#z<3R(kC2kve3Q1Btbc3GPi$OZ|a0#bO>p2MooSL93?JHa9X@xKGmKg((r) z?U(N6@nHL}WMi5XwIy$cEp>H#*+s{XP;sa@pcNpuJeS{_^qRFj0`9leQr&)i6?-uY!5eH zP~t)i2u+BLC?W67nh0u}sN}(aLk$V>z0{$#Kz{^GULjBoK{YiuRQdS;tZ@Ihr`@0!0QsaRgwkl>_;Koca`yw5hq5yMMe;Wju= zpw%8~wTOjQ2c+0Bnn&^{6uMr(Ynn*M_XBkzHz#*ZQvaUvD#h<#3|KdAuWV{Ce4F?& zfphK71;@{@>?la5#KQFd4uFW&3(~Y{GBxCI*J|eNFvtY|YZ0ryRQOGxuba8Eu86f* zF_b20*hhXn5R_d9$YF4$;-*W=9At<-ag zwf<0SPbRzN4(LKcbm}Sk?d~lL7GcK+v0*zGxMn>?VbzA^`j=TlrlHOc)y;)hl`(E7 z%U~mP4L(1HFg56XGC9X_tC)pJO+fVC%h)x@8FhJwcvI~*2?T|_do%$YF=#2=;8z9_ zl^Yj^H#%*|Lm+J!c=f%NJfT_)A6@zG^$EohN&R&J;B|rPd``S)`ES9`{Tgk2{Zqa! zwPL{AOr^~cFi>gVVVXMN9$O8qIVU}AeYO1ib4x~E}$v5pK$0r z<_w`ob8lDFX9I1gj4cjt@I#oYqka$nTohmBXG=ax&{wQGkVGm@d{o6+rvUX`E#aNe zC!rp(KdLY?7MLTDiQcA`kydO?hT=CC9x2Rhs0aWmbcJ21cU=@ zF>F-ox_G^N=V_E?aX3R*dWyaG#)gV^6rs_WI{zSq!`7;|dxPaJRw_7YQYRp|Jb5(U#U$s`jY8 z)m|mEh#5+a*sWbPgCNBB@_PRZ-yc8u>Ew1h*L6M5xUO@a&*$TQa-W_~sE7Q93(U@n z+V7xocsV+2k-MJi`RQv{yIB?(B(S%orV_Q!V@;Df4x-vikc9O^!0QP)=|tuPe1uVt z6oxV*OAXlc82k)7rHi4<_3_ISk76T#c!!iv6#Ew3GlE)9Ov*34=<5+l$AC@>_20iL z6J%*zl^cJs4C>ev*t|V^lL(%B+)gime{_A%|G=qhNyzD`rYVtF2MMod=AnJ^0Vgas zp0DCA{S~_!j5rq^F=luG!rV)H{}9k7#U;gwL-M4(HWg_*E!BUY(-$&RO9ls9cz439 z)SMmlodh~XdrTwwe}fH&-!TlKj-U8;Fg$;JC8W18qbd>rB6p?bK1#DDF+L&@m0s7- zN0Dv=ZZg0j3;4CD_n9?UjH*T^ z>=OHzJz^7yphoCWtXd4^xoFdWbPc|jCT^|?9j6FT_$+w3%RuYlNO?IRyq?iXV$K_z%KjK&By&KEMC2>d1h6Aob;P58}y)KC&I{vLA_)6;K zwPqzJgJ-=Lx~B{XKM$AZ9#iBM20t(CwoY%tqu25)&5KeUCniRhdB zu6Kp@-e;^4R3#dc^GR+3v+yVW`jv-gqsO9-&CgKOL-g50QEg~ryC z@QQanGJWq+h9=-%E`;ApAm!htv9$hqT0&=1@uF7H)Uib%91{;{8WGpmd(JniXH-XB zQ^_13dzD?0NPcAYhDVrb*lreXkpUh#=!zD5T4uOs8p1Tqkl4XCTTq5edy%HNQwn5t zcexRyKu1@UTq%lveDEKMiGy0>U0I#u(l4RDp+w!jzZo`MIP5zs)5r4sf(N?sIja(<|#E3pp9L7b5>wxG0bMH$hdr1v+JYy;LI!Ki`Q7 zjoTnQ4T$DTJCTkK#7kk19$qIDL>-4xzIn**6bQY^wekT$gnxQ87L{DM<@4#g&-1Kt zL284LlFmCV^h+%VD@F+)1m8N0%!|Fm^!jH43ZwAQclLlNx(X@>k#0r$tzsg=(k#wi zw=f2%RX1KZyBRII9wZDH@ZD5u45BRZssy?D;ACo{zcM_I*BrmZ`o!%tqmZ4`nCU09#U{OW)-9 zudkkAOQfEB`RV^|jpj&8&HT7x*yH}8j&-`9)~^X51Xqm_p)Q{}3$@Bh-c(ZBm1``b z^=KmGNrAj^v!wD(lSvk*f*1k%K%NwWCI1t`*aNbcz5%uNS_J(-X#)q-ZCq|MJ=A2k zte{qo&R>?q8r_ZdH;6oP66(c$b1Y((EVs&Zrk5*^idLu znG6=c7ns4XBK?{w2g?Umj{V*$3;?wv0L=kfqD2f0ZlT|n#zTJx9lOxMoXI6ir{kH@ z`sS{3e^f%(QeprMTEgFH(|W9ztY*8-sK6(CT*7jJyzkwuJv_hF`?KAp@(A~fs+nU} zqQh4nDg*ErsiU_@Zcjh|&^un*R|}8;yT|WJ56xUB~H=1DM86Ur3015 z2SKMq@5(_TrRKt~qHJ3@(oPz|gRZ~~5GK2XYd!#-{*D1+h+{PuU2!SXZ%&CaKNZ(& zE;E3C+H)sC6upk_?t1NBZYY;9>B~N&4yL;&KgWLu+o}VlVNHrn(;7SMyTUeh1SmR) z05Md_{+A}g_Do%O!fcq*``kUAX_Dh8#+1Xcl+gb6OS?NW7>ensgfs!$ZqO=a7)pg< zg@+*MvN%&?&_xLdtJ=i+RN9wfsiBavgb$M}w7C`tb;PRyC0NnR6zIgI=kCJWW&RP_ zxXbLi@?_7169(ZfO~Juw8=@Dv2I-p28})nzQXCNt!*s=;$ir+j?)OHBX${d(HT_}a zu z1%;b~>2E5C3Q|KIf|G+bt37{ZkEH!mQ6HvPVEMro7c^bBwx_#9q;pHUHvy(T}bv zZIBVRrs3n<#-La19#6rTqzb^(rB);%tb^76*nFpp3b*3t3`8CqnX^cO=!g2Eu-0jx z_?`-Jn+pQu7JYqH#23pmJ;An(gP`%P-aJJmSicsgiZ<5hn|7_wdr6S&L@Yw%vS`{o zJ|;b9`R(ImbpfD377b#vA2C%wbG$?rxax{1SR}m+ zqV~z;&8M%&HiLyyBvvOunlyh}%K|Jf2a5A0z0&rG+d* z0bh22r!Dk86GHqg_m4_hIO;iE!qb`;%gn`WesxcJ^5(-R{hvK-IWkAZPAf6Wp#upS z$(T5D>d!429vE>d6rGgNl49Mo$kt98A*Y2$204%hV?ublz+jMbIOktE8P-|iM91U+ z|A_J@VGoZ5&QSj>e~5fK;NoeacsZMCq7yq-3Lo;dJymfmV4|P4>Ded?&nP0iS$7>s zdCY`3Fx_D*-9C3$Er=!vy+-B^DM?uPQpmYp%UEm=2zJtLX?|4vETeAbayzC(fEm>> zV}Hvo9?_eTx`A;bzv?Z%eOpAWfV@d z6DVNXQ1N=`_f~*WsW^G->Aw_O<|K8YBuwo9OPHRknvE;0G}>SpPPj;H(^-8yD}FzY zG?(f_KON>@@2}$VVl?c|^7}d8ptJ~wR2K$Od7E(O0GvAQH*}Okvbv$SfX#$Vme%LS z2JtMbw0u#QO0v|gk8h3|tg;ouOxy<(B!TW{=T^GEdoInO-=vXlQp9n$sP&p(nt9{% z?^VSoQu>&utJ=830`*z+D=hy0epl{*w+Vg&?$BD)@TmWXw&heIs=SCi4??UcOw!IngAWlnpy>fPe( zjk=RzJH?bnaI=pa&?|ekWL;@vy`#`lDv=@q>0q_Za|T6_;dVUA>sXg<2Q9X%3b{3C zeIEK%gTe99LU_{ikZctQ#-6K*h&!}kOUKsapevV;6aFgB*odeI+|wvryHH4pt@AUP zm~(L!mjwM#GZvoxnC47fw>l||`T2t}%F5n$dawmG+^Jx}Q&1 zMvz!^7}N;=vXY-X+c;bq3_Xwi3iV!Kov2w#RfzW#m6)7ie16F{|mJ zU8++e7WJ>YfL9E4D6~FqALPO_O7)z~ zuT%<*la@QCWaeqd+F9Xc5Btp}@FsR=s@pQwFb`zS#^jfgK8~y|bI564mM6hmX{TS} zgaO5_|Cm^mtipcW{&`}fjCpa9fnM$8W%2bE*^H?Y1ZqDS9tfWj#;bN5n^5!3A)%w0 z=y?7@X3fT2rnPPsn$pe(FP1WuPt!yIBl#HbDjQp|xwu|*JLscTqhW6R> z{z_n7TXmc}!W+OagM2XW@aAR6g^uB}U7~`-hxzIH&(|y#8$PYJO7Arw`L*&Jvf8&f z^_2Eu(QaPJ=#MXAGdnY?0IK}-?nulWhbvA^62!G8Y`X7x9-UJ}*kTW+|4)`f>073zc(Xu415dQJ8?CtSvwET;2W`-B)4aff` z)z?}z9b5k92uoCa?KJ1VjdsV#VfQK6ii_T_Q$Wc#T}S+c#rawe7j?g{x#?dgf}m1d zKh2}whBhP(tvr}7SeK2DA2v?i9GXd!k*JJ8AWJ%Wk-fT@ zn8lT^2+by4V&}qSZwLMAu8#bu;6sbqpM%@Cx_DZ9aa!YL?M)dc!%Q4yxh0=1D|^q2 zSAu#<=}Fb?2qQ&26l#NPXUpZCB1qG_!PNvV(^UM$~~>AZo&K zA<2lybJ$Nyqb+oNsKYQrPjt(hEOkZLm*$_VoZUWc(H=D|6Jl(j?BY!&>gmO?T}nD^ z_HCt$WoMH0rQTo9_`_1g%#0@6O4O}`^CT1E#d@7=?y31iZ8FT8X``1tmviZgJJmHO z!N3kZ2&!B$&@scUOvzQqmkuSd(2#Ik?6|MEy$!urwIyoeB-`6FFa#{~zFBKG-(uw< z_=!qdwv-^bC?qlPvDr1C*v3?@E7!s;9>u`ORhD=lr-_r)!#WykT~95i!de?fw%np@ z@evw#CVfjtOrknzqL(qz5QUvh{RcG9nVAqc`<9D0))2d3e52YidDUC1+-|AEWWN}PL6)T(PUy{>f&YmlU|WY0)<8ysz)+`0I7pKT6a=4{khr!`h6 zcOrcRoimA&A5^+Fnjsn3*B< zZkk3C$qH%@TOIEGTJpR$3SucqJ+5nnKw|4qmS@E3dXeGXj#9!lMGZBlT9wR2uP6L@ zH80tTwyphF?KKKLK5YtqeZ#<;eyI7aP4>hbED5@femlG7XT{v|S&fPHu=IxhUX|1G zGZTxB($mOR#Cg6#^h8DR5ac0czXh^5OW6drZ@>TqF{E-H=D61 zP=BmDA)2FLI%)8tCd#Bx^5y#X^NM+n9*B1ZFjh&!dEskj*@BF>YnAtEGPb>YG|Z&6 zkvxXcOF9Vqu7vH70iC&5WhSbfyw!Y^Ii-;4!E3>9dhm#`Jebsi&Eu~h)&Y36roxZ8b-z+W4=}pSPKt?# zs^`RXXw2@|W$NM4=OApv%RKHe+^yzq$}AogK67ELPXLx@gDKMC_#9fD)8w!5Op)S^ z8wmKYad%8NJgss_RA70vd7b{-ofW@jXID48cgO%b_X*E5j@~(E_Gq2EQWTez8UFK0 zRiZ))p)|J_d*uR9Uc1*vy0msG!X{soO6br)MI<`^(Ioida?(zZq8~tTw;^QriJAmY zc5Cv_R74U~2Q8T1!kUS=XYcl#2n|UuLZY4|0BuPA>TG?chY`ZK< zsv~P~9 z5TGROzW?fzje>NE|5qa6g%Z=*jFI2{?;&6&kjsBpg2F)8oIymIk2pAi`;)OliJ{b2 zPaqYe_bN$ovH)gVz^%8dlm6TJt3g#K z&65pIzUnCx9w!kt1oymQW;w#(lhFNUJyIVo>H-3q84_4yb*F%vb0Jvdm0~cB3Z<>O z-9hkAbY{0{oVp#SpVZ$mc<5Hnmdx41q7}UTS1Zpb z{K0L{a&m=PFf90}6DUzbMeh#7I^MqU|M3$&xpyVs+j7bSyPDOyQC$1j_0|o^O-e|u z|E#O%ps-2f(dow+ShmsDa2(7fOJ*SE$z+I6K#)SzxD7qI`Q9}W_**$PzYw@ls=K)_ z?KK5U%3oG4EPAx>P`}YX2}^mnJ{U;`z~qc&F=o}q9+V0M19vB>>~AmtC9YiGleq3`}p_+hR+eJu|^;)CAACp*HJ zfJQ_X34QWg8RC(Sq79TXhD(@*#3eso1n+E-B`}4lkXne%y?bjaX-S&7}kX62q}ypV-N=pMegx4sMx zd0h8FK$sB%Icke`lwL>Ws@JOk$M;uT*B*_sjOrn<>WOtoujp+mK=`P{0Qbc`Yr?KC z3O%13kL4HQlATj?E~p=Hs67Ay62;VznV!V{nV6TYA}_7mGS@R&H)bpRaU+J;_)%mX zG}5C&3-sZeyH>e!o?hFn^#;j2p;n&Q^fCj@#UI_`fYe1>qxoGM%{S&kke#DYBjNHL z(FP&wuz91>LhyBf)KcYhUQVeBnz-0+XZbXoKhP%cH62eKk5(N4H}wbaJ&2B#DG}Sh zG!^R$X*Ee;0Jue9T=1QwPD3$(qJFkoih>K+yE5b3=)5&_G;M=weFp~YdjRCd=D5{g zoS1fu@8%5in>88}Hk40ajCJ3~;*9`j@5`m#k;v}+ZTxdzBYwU;mY&x+OXbrQ;I}hR zdJCwrtRo!V{wI;+@Yl3#lLZWqf6`PeF!*jCZ=V97w24H?cF=D>)(M#l#K|Wr7QQw0 zr8;E#inPr8*sTu8vrVL{V@OM}>ip_s`-88-&zzsYq}g`t{0$*Zk#EOAQE?O|yXOwq z6RHIXnk||8H2t}8+(D0FQqqGn+*RUrE`i9;`>DG2yM-WdhLp_xDO6Z7zY9Mm=b!e^U zVuy_}c>}#a+BA^}pf~%@n_^%x<6^$?Qk##&`9TJ)d28oP0`t5qKp-h}P`qRE96g;$xVSrRp0vL|=VEx|;4Z%arS%;VbZ%97B14P;hwqEL$@xx?FPl+8WeSsYE-)>U))5G_^j>aJ$T-o5reNjr@T}Jp~PS1nvCz;NG z^6wZ+5gSBSt#g$8F+aYx^?#i&(JQfR$H|(6!=olS`{2W{%ZDf9tgAV?bdJiRxG5L5 zmoIr4#a|lBA|>u%P-jSncW3-FJFO(8t%y90JaDZ`*}GlS1QhuLEPPvfqY07$ z$Ab7`ln1W+>)DPQ0@hXY-p}v_hq~Clt5Vt#QJdOphUg|Ndhpme^eCU5`$ck>{TzlT z*L0%g=d|L~D}KkOcSGgmN$+l0iHa_90a;L1yPFTr@1ne8_)opsn)bCzy4?53NuzG3 z^Na9I99rDLj^EWzT&;G143s*YE81yIS;J0@g(AEC2|@H;~N5P&Vhw zK9z4&$m^)@`hI0l+TDJm0Iv*sKgm750z%B1)i8|r!wGgFvwGE%=Wf+{BJ=Cq?5ie4 zgVcsCl01eRTYSc~CFjSbvORI9BSNz>nMG8)hI-RcEF+t;l`8j3dEP84NxQmt-+k7X z*LDwS>E{7t_Gw8YA|_6s{gfN3F1{u9?BlHnzF8~+3s%Rm9?NA)hAvBpZ;qCPJqhWA zSULqMWQo+4=WkEFcWEf-NCn3hEAP*8rqMirP!_%UKF6gkP4BaMi8+7&(Qi2-54XcT zdjTLeJ{z_p`!+AK%)&&OC3O*!e4@}^3APDqt^HD46&a=uB8{Z^NUZ7*6zsgKES^cL zTPENpjULBNzqWjuZXO9rb*p=2f{5s?9oOtv0|zAZtN$+8TXB-gFN#x{psK!+d9VAC-k^$(y$xa2<_50D@{n5p!|; zw+|m2E&lmq+usCN)R^I4?E`5vi$A)MXqcjxsc^w6H`!fQ*n}tSJSiq>)p8*V8R&Td z_WmlLuwTMFyh3h0;<|J_Ug`D`5xAFS6BN^h2d*^-*h&a=MeX8J)6T1%3*}|6a^E)rB2+JR+cWGWJB`m;x+{uX33EY-_H8GYL`|l)yrwr$r8FPYdQpmF0p)f7+;eO%34T-OIz16Q zOg2Ub`*@LIUhf1HAF?nV5wSuBjI}(DSY-XeE|Q<%e8U+H&j_4`X{4J?PKdlnKMzLj zs`Uv=4F)k0G#oi;n16Usd&fh`x<@bQcdHpB7_CR3eeMBhQ*G(78dU77Xta^TIn}RL40UgpHg#F zL_|f&%zvp%NB9Oa*bQxw(L?GFmYu*a=u3$QV{=D2ehjg9LHMSVz$NxOwYyRB<9CEL zIDJXcgvc9^59bK^49)VMLPo?D6RCHgEL^}sg%pAgtI5M2h;LVtMHotcw|SZfd%xQm zmBY^j!sXU~KJ5;QNb#kDD1CcEr61vk<$0~1Mo}q?_Nkp)4;jn{ zd~MTdnb>F)(d-ruVN@oEpDk|Z;}je%IlO(I=nO>}JfhI0eCUYOapO`~CbQ9U&OhX2 z+l`rZEOds_y1l1O70)XVHw^pkR-y|Rk-&4?cX$Km`F10$bTOg{F0qs!6LikXryRYf zZIzm0_H0X+a%k_FhAZsN5}{b1Kmkl6CibPE(6Hmdmtnt#0vkKAmj&OL|9G3M{`&&n z{!M+J2b-+z{jhs{Rw`oSatJ*sR86Fl5-==mi$bS?W9NtPe>!%irs4z&nsBpGKo24k zL|jZ?ti>TYIakP`8ba}LffYpCcvxOTW;{AfSk)dh(iE|)-gp1ug8FjSyF%wM+OZh@ zN?C*PU=Z2E%vG7KA4N0b-Cqil>*f!f5Sf{@ai)ent%q*~XTtqzKISRFK3Rws>{Syr zXtI>*?gr(Zc$`K%h(OzeSMXp+~ApI;W{M#xi-L!vN;?xm^*`b{h*i zHiEMOqz&%f=3BQNZilxKe}(ItE0vRMBS-Z?gf?l@wa$yFkTKrXw2JYcWJ~?{Q@^v= zf>jL1<>t9d=GnJI?G)oD>2Btb$Hnv#)%FflVcVH|tU{8)+0Y#w1$HhDmG-F&-PytC zr*yGV`(vt~)TK9NF>9@)T}Ziu?kwzG;$wU_r>wi)GSKpkWx9K2JwpJf;oL^Dv=&0r zU7wS^-lJ-;eeyjSBQK@9Qjib;^7aWBW_UT>f3+Q+!>Ie#_AOT+e%Z$fm2cXEX3Xzk zU8l6$Ex#l2LiSuAV-iO^QC~gN=6gHEmQ3YMcYPd{D)`+Jgx1MhViWB*QSpE`B!lWO z$kZ?-{?s$lLI`!CZC*G9VEt9@FH#jI=k9wR{q3bknz=E3iXRyL=*BlR6tT?uXT!sG z_1Q%>G8QH(*BYK$&LB|Ao)tTIO5&hjbqenp)Fd32k=#Xni?dPhrjtHSRWbi@D0;9_ z5E(##Yac%ho}nY=wLbSjR@%g)eJ3I^mHOG-pb7A0J!q$qib8tpW4FS#b5Sr_ zyL@G$oGYr)cV<>|d5aYDu)-k=EG@e?9T;MXUpyAKJFi5Gj#W}M<4C8=YX=0r+i86| zstgJ+8hG6EvWqcbt<7zVVDv)BH2Q^+)3E6Q;8YxNvfoNVcrH%9Cc|Yp1snag{hOhc z`qwY7d|iCv;5v`E;rX$(@bhUE&FJPI(^IU5_~uod1TH^wM&7F%gGuvJbtgq`OpO6%$t>94>tfvVn*>s z#w2cTR}Nfsxdi1r?0s)?u=8o)Whp1ku9pP2O@L21)FkR+ODG|89b-$rgq)U>b!mhm zs4ap2M)9U~!Hl7ng|UCc?dp5ztN(_ZNS-wdAli$;%oyggfZmkFsXO_n?!H2o=6 z4y=a*Iz%X7AgVRLiM6fYrH*bM9lyvZv>p>)dLDKn>FDX41@}eaNe7?m+pIAHm+)$^ z&hKsM`WH>Av0oU)IbH_2xGrt(Z89S065OPe)OUvQnt2_U&0Jx}z5gX}#gc!Z2D$J0Zw5 zTG+^J?$-^~2%H0?QM+=lGl+Io?DUY9NHG0eWABJSJ-|QK zH}n+{Pvy?2CQ_~XK%!A^QT*KPhAQ+f2%f5VkIa*jsQ`M(n!H%yX>yG*C!a8N;_h4< zynsa4(?qZmsJBl-O9vx3Syw*}`Ij2AYh0AdmTzYWT*%K(E$=_>%s<=41aYOkavve% zx3e$Kdq8xGR-mDYwvQ)=pYftla@OM(%r?~7e{`j{84k<>zgJ$RFAjA_6=7$OCf1&_ z|M{D)=k>`;5jB7p9;s#c*$&A4Wwzz%%y}6*38(K(8OngVg}0T z|Ju@G{u|{$#9`|>wzI=`-{{_&$WACKla64a$sic}WO82k5M&z)UbOhoh-=&n7r@Ws z)gIzq|7P*vk&uWkzbvNqqz}@^XAyjsypYsxJpS?DUXNCw#_DVn7FVySi2~yGXflcj zTa`3}67%n(!F63HPDD0=%`f$^OY-TcUwYG?98}BuMcGaCIZp>%swO?!M(nAI2~64< z5WcN+_dHx`Cs~1A<@k^!{~t(=hw$ft!J(nrruPQ6HRjc^k+sw$H|^yp6|+Y6%?bH` z3qLens&PwnzwVBTow+qc)!#ANKRoG}%QpmT^{l8%n!iQO?4-4uO_eSaf zWlL~N-$;YP?D3LsZ(Zyvxg8F5B?2y<7#p%>Rim;IP+DL^SA_84sy3hRtHb-KyK6=U zuaaVXY1&`F&3YJ7PsU?E6e0N2Xk}3XNKRO$#I)r9VKIEZW2Ct#D%E(YBRo?ub~0Ut zQ$neV<$7Ttg~H)$aU4R9*h(&wX-YpGm&cBQulgTr%Bp@oycQ>kAt@to`x}vEoL~1n zxu9$KAy*mH0^!OxS#zdHF!bXDJ%;N^~FLx?+_CgOemiw*zqY`FJUI)k;0 zk>Qd+)q68S3|u0*b9uu5c=;B5e=SD@xzcv6{&&GQGL%C$lm`E7AUWz zh!!DktS%`An3%D%f|Z%9jsjLWutuEwW#Xn3EpDVwc!$vLF0 zvE+-`os?cyl3q2jyN%z-^oDB)$<=*W7~@6$$EWL0-o>O|8kqLg~+)P6u> z?GD43ixCp8AU2O$bToxpNUnzC<7|IZ5n6u9o~hjLU!n80cD{%^k2bAhy2y?BmBho0 zmaP6I-ZcoHi#jyf5fp}jz@k&-(W=tg@?eZpcs*<4yd;Ap&&lLF$?D`L|74x{6w+|AflnJXklH{@NbqJ>w%?za11iw7jHG;9(sHa zV*#>CmZjDnd%29HeiJhpv1V{Nrh_PSvT=X>F%eJicihTRAZY%=cUfMi5XC_Fr|Wk+ z&tYHx^*{BRR*4sT*fq&^$hatF zaQQdC2xm^%>p>VRVa(*l)v=yhUd+a*$?`p`iK(_ufk!1Y2Tbl?F`ikSkGVB87@$~m z^##-=337&KO~C4Zpna^EzGzyuEr^`cuwGM-bSBT?7y^5mf64oR(9)XsmYB-Tgkv4ZNtpzVx#u?+CjGz?Fa+(M5x zL_c`kn)f--6XdkTlLz}@mAh4At^ogR9o7fi9pMhQBEjsaWv4b%ktLNLeDPtaRx2

    (<dVtv>z_M{w=F literal 0 HcmV?d00001 diff --git a/apps/doj-demo/public/favicon/favicon-16x16.png b/apps/doj-demo/public/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..56a77e279e2512d882e028cf8f865e5750b40bf9 GIT binary patch literal 498 zcmVPx$tVu*cR5(wqlRqp&Q543%b6X4&OW6#fC8RIx;u&~lcI#_vjLHcSj znZ33#h)4`7@n<4IEM6-Hn=l9io_FN6SMypG5$<%qbI<+VbMN^s;g5s4YZ#cH)Qo!(+5%xhO44xP0A;eOw7^UIlU$FE{nU@Od-hKjcNq`-Ujb<9z!YRO&PB?>~-S6BwDNFwrkh{utm|$sz04USC zFIL>Ol5Nz2nI#ZMiU1SSx^MkQz)Ik%%O%7i09R4+qxtsM7TIjRamEWOkbXD;&?1xW z0Ms}(?BDyn{i;e<$v4n~#yp7B&qWIuasi_ZjOQUFW|fWl#V>$Z!0@vm`}B&O+jvWf zHw;I|j4JUe&KO)LUHAf`PDS@#IE=&;4W_pN>dqz+Otz?JCgC+~xg0cl-9$;|oO6lz o{QmBCKuz_T|MQuOTk{+J0a`AN5f}L!l>h($07*qoM6N<$g7SIdv;Y7A literal 0 HcmV?d00001 diff --git a/apps/doj-demo/public/favicon/favicon-32x32.png b/apps/doj-demo/public/favicon/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..77bd9967278aacbf28d66a2137cd785ccaa269d2 GIT binary patch literal 928 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 literal 0 HcmV?d00001 diff --git a/apps/doj-demo/src/components/AppFormManager.tsx b/apps/doj-demo/src/components/AppFormManager.tsx index 9651dc6f..9f4b687b 100644 --- a/apps/doj-demo/src/components/AppFormManager.tsx +++ b/apps/doj-demo/src/components/AppFormManager.tsx @@ -7,6 +7,7 @@ import { } from '@atj/design'; import { getAppContext } from '../context'; +import { getFormManagerUrlById, getFormUrl } from '../routes'; export default function () { const ctx = getAppContext(); @@ -19,6 +20,8 @@ export default function () { editComponents: defaultPatternEditComponents, formService: ctx.formService, uswdsRoot: ctx.uswdsRoot, + urlForForm: getFormUrl, + urlForFormManager: getFormManagerUrlById, }} /> ); diff --git a/apps/doj-demo/src/components/Footer.astro b/apps/doj-demo/src/components/Footer.astro index 5dec3f5b..f11a3421 100644 --- a/apps/doj-demo/src/components/Footer.astro +++ b/apps/doj-demo/src/components/Footer.astro @@ -1,5 +1,11 @@ --- +import { type GithubRepository, getBranchTreeUrl } from '../lib/github'; +type Props = { + github: GithubRepository; +}; + +const { github } = Astro.props; ---

diff --git a/apps/doj-demo/src/components/Header.astro b/apps/doj-demo/src/components/Header.astro index abdf4a62..e9f86621 100644 --- a/apps/doj-demo/src/components/Header.astro +++ b/apps/doj-demo/src/components/Header.astro @@ -15,16 +15,24 @@ const getNavLinkClasses = (url: string) => {
-
-